]> oss.titaniummirror.com Git - nesc.git/commitdiff
Pristine nesc-1.3.0. upstream/1.3.0
authorR. Steve McKown <rsmckown@gmail.com>
Tue, 8 Dec 2009 23:09:56 +0000 (16:09 -0700)
committerR. Steve McKown <rsmckown@gmail.com>
Tue, 8 Dec 2009 23:09:56 +0000 (16:09 -0700)
600 files changed:
COPYING [new file with mode: 0644]
COPYRIGHT [new file with mode: 0644]
INSTALL [new file with mode: 0644]
INTEL-LICENSE [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
README [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
config-aux/acx.m4 [new file with mode: 0644]
config-aux/codeset.m4 [new file with mode: 0644]
config-aux/config.guess [new file with mode: 0755]
config-aux/config.rpath [new file with mode: 0755]
config-aux/config.sub [new file with mode: 0755]
config-aux/depcomp [new file with mode: 0755]
config-aux/gettext-sister.m4 [new file with mode: 0644]
config-aux/install-sh [new file with mode: 0755]
config-aux/missing [new file with mode: 0755]
config-aux/mkinstalldirs [new file with mode: 0755]
config-aux/move-if-change [new file with mode: 0755]
config-aux/no-executables.m4 [new file with mode: 0644]
config-aux/warnings.m4 [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
doc/COPYING-DOC [new file with mode: 0644]
doc/COPYRIGHT [new file with mode: 0644]
doc/INDEX [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/OVERVIEW [new file with mode: 0644]
doc/debugging_files/complete-setup.jpg [new file with mode: 0644]
doc/debugging_files/jtagpod.jpg [new file with mode: 0644]
doc/debugging_files/micamod.jpg [new file with mode: 0644]
doc/debugging_files/progboard.jpg [new file with mode: 0644]
doc/dump/attributes.dsd [new file with mode: 0644]
doc/dump/basic.dsd [new file with mode: 0644]
doc/dump/cobject.dsd [new file with mode: 0644]
doc/dump/common.dsd [new file with mode: 0644]
doc/dump/component.dsd [new file with mode: 0644]
doc/dump/interfacedef.dsd [new file with mode: 0644]
doc/dump/nesc.dsd [new file with mode: 0644]
doc/dump/regexps.dsd [new file with mode: 0644]
doc/dump/tag.dsd [new file with mode: 0644]
doc/dump/wiring.dsd [new file with mode: 0644]
doc/envtarget.html [new file with mode: 0644]
doc/mica-debugging.html [new file with mode: 0644]
doc/nesc-debugging.html [new file with mode: 0644]
doc/nescc-mig.1 [new file with mode: 0644]
doc/nescc-ncg.1 [new file with mode: 0644]
doc/nescc-wiring.1 [new file with mode: 0644]
doc/nescc.1 [new file with mode: 0644]
doc/ref.pdf [new file with mode: 0644]
doc/ref.tex [new file with mode: 0644]
doc/user/attributes.txt [new file with mode: 0644]
doc/user/binary-components.txt [new file with mode: 0644]
doc/user/generics-1.2.txt [new file with mode: 0644]
doc/user/network-types.txt [new file with mode: 0644]
include/COPYING [new file with mode: 0644]
include/COPYING3 [new file with mode: 0644]
include/ChangeLog [new file with mode: 0644]
include/ChangeLog-9103 [new file with mode: 0644]
include/ansidecl.h [new file with mode: 0644]
include/demangle.h [new file with mode: 0644]
include/dyn-string.h [new file with mode: 0644]
include/fibheap.h [new file with mode: 0644]
include/filenames.h [new file with mode: 0644]
include/floatformat.h [new file with mode: 0644]
include/fnmatch.h [new file with mode: 0644]
include/getopt.h [new file with mode: 0644]
include/hashtab.h [new file with mode: 0644]
include/libiberty.h [new file with mode: 0644]
include/md5.h [new file with mode: 0644]
include/objalloc.h [new file with mode: 0644]
include/obstack.h [new file with mode: 0644]
include/partition.h [new file with mode: 0644]
include/safe-ctype.h [new file with mode: 0644]
include/sort.h [new file with mode: 0644]
include/splay-tree.h [new file with mode: 0644]
include/symcat.h [new file with mode: 0644]
include/xregex.h [new file with mode: 0644]
include/xregex2.h [new file with mode: 0644]
include/xtensa-config.h [new file with mode: 0644]
libcpp/ChangeLog [new file with mode: 0644]
libcpp/Makefile.in [new file with mode: 0644]
libcpp/aclocal.m4 [new file with mode: 0644]
libcpp/charset.c [new file with mode: 0644]
libcpp/config.in [new file with mode: 0644]
libcpp/configure [new file with mode: 0755]
libcpp/configure.ac [new file with mode: 0644]
libcpp/directives-only.c [new file with mode: 0644]
libcpp/directives.c [new file with mode: 0644]
libcpp/errors.c [new file with mode: 0644]
libcpp/expr.c [new file with mode: 0644]
libcpp/files.c [new file with mode: 0644]
libcpp/identifiers.c [new file with mode: 0644]
libcpp/include/cpp-id-data.h [new file with mode: 0644]
libcpp/include/cpplib.h [new file with mode: 0644]
libcpp/include/line-map.h [new file with mode: 0644]
libcpp/include/mkdeps.h [new file with mode: 0644]
libcpp/include/symtab.h [new file with mode: 0644]
libcpp/init.c [new file with mode: 0644]
libcpp/internal.h [new file with mode: 0644]
libcpp/lex.c [new file with mode: 0644]
libcpp/line-map.c [new file with mode: 0644]
libcpp/macro.c [new file with mode: 0644]
libcpp/makeucnid.c [new file with mode: 0644]
libcpp/mkdeps.c [new file with mode: 0644]
libcpp/pch.c [new file with mode: 0644]
libcpp/po/ChangeLog [new file with mode: 0644]
libcpp/po/be.po [new file with mode: 0644]
libcpp/po/ca.po [new file with mode: 0644]
libcpp/po/cpplib.pot [new file with mode: 0644]
libcpp/po/da.po [new file with mode: 0644]
libcpp/po/de.po [new file with mode: 0644]
libcpp/po/el.po [new file with mode: 0644]
libcpp/po/es.po [new file with mode: 0644]
libcpp/po/fr.po [new file with mode: 0644]
libcpp/po/ja.po [new file with mode: 0644]
libcpp/po/nl.po [new file with mode: 0644]
libcpp/po/rw.po [new file with mode: 0644]
libcpp/po/sv.po [new file with mode: 0644]
libcpp/po/tr.po [new file with mode: 0644]
libcpp/po/uk.po [new file with mode: 0644]
libcpp/po/vi.po [new file with mode: 0644]
libcpp/po/zh_CN.po [new file with mode: 0644]
libcpp/po/zh_TW.po [new file with mode: 0644]
libcpp/symtab.c [new file with mode: 0644]
libcpp/system.h [new file with mode: 0644]
libcpp/traditional.c [new file with mode: 0644]
libcpp/ucnid.h [new file with mode: 0644]
libcpp/ucnid.tab [new file with mode: 0644]
libiberty/COPYING.LIB [new file with mode: 0644]
libiberty/ChangeLog [new file with mode: 0644]
libiberty/Makefile.in [new file with mode: 0644]
libiberty/README [new file with mode: 0644]
libiberty/_doprnt.c [new file with mode: 0644]
libiberty/aclocal.m4 [new file with mode: 0644]
libiberty/alloca.c [new file with mode: 0644]
libiberty/argv.c [new file with mode: 0644]
libiberty/asprintf.c [new file with mode: 0644]
libiberty/at-file.texi [new file with mode: 0644]
libiberty/atexit.c [new file with mode: 0644]
libiberty/basename.c [new file with mode: 0644]
libiberty/bcmp.c [new file with mode: 0644]
libiberty/bcopy.c [new file with mode: 0644]
libiberty/bsearch.c [new file with mode: 0644]
libiberty/bzero.c [new file with mode: 0644]
libiberty/calloc.c [new file with mode: 0644]
libiberty/choose-temp.c [new file with mode: 0644]
libiberty/clock.c [new file with mode: 0644]
libiberty/concat.c [new file with mode: 0644]
libiberty/config.h-vms [new file with mode: 0644]
libiberty/config.in [new file with mode: 0644]
libiberty/config/mh-aix [new file with mode: 0644]
libiberty/config/mh-cxux7 [new file with mode: 0644]
libiberty/config/mh-fbsd21 [new file with mode: 0644]
libiberty/config/mh-openedition [new file with mode: 0644]
libiberty/config/mh-windows [new file with mode: 0644]
libiberty/configure [new file with mode: 0755]
libiberty/configure.ac [new file with mode: 0644]
libiberty/copying-lib.texi [new file with mode: 0644]
libiberty/copysign.c [new file with mode: 0644]
libiberty/cp-demangle.c [new file with mode: 0644]
libiberty/cp-demangle.h [new file with mode: 0644]
libiberty/cp-demint.c [new file with mode: 0644]
libiberty/cplus-dem.c [new file with mode: 0644]
libiberty/dyn-string.c [new file with mode: 0644]
libiberty/fdmatch.c [new file with mode: 0644]
libiberty/ffs.c [new file with mode: 0644]
libiberty/fibheap.c [new file with mode: 0644]
libiberty/filename_cmp.c [new file with mode: 0644]
libiberty/floatformat.c [new file with mode: 0644]
libiberty/fnmatch.c [new file with mode: 0644]
libiberty/fnmatch.txh [new file with mode: 0644]
libiberty/fopen_unlocked.c [new file with mode: 0644]
libiberty/functions.texi [new file with mode: 0644]
libiberty/gather-docs [new file with mode: 0644]
libiberty/getcwd.c [new file with mode: 0644]
libiberty/getopt.c [new file with mode: 0644]
libiberty/getopt1.c [new file with mode: 0644]
libiberty/getpagesize.c [new file with mode: 0644]
libiberty/getpwd.c [new file with mode: 0644]
libiberty/getruntime.c [new file with mode: 0644]
libiberty/gettimeofday.c [new file with mode: 0644]
libiberty/hashtab.c [new file with mode: 0644]
libiberty/hex.c [new file with mode: 0644]
libiberty/index.c [new file with mode: 0644]
libiberty/insque.c [new file with mode: 0644]
libiberty/lbasename.c [new file with mode: 0644]
libiberty/libiberty.texi [new file with mode: 0644]
libiberty/lrealpath.c [new file with mode: 0644]
libiberty/maint-tool [new file with mode: 0644]
libiberty/make-relative-prefix.c [new file with mode: 0644]
libiberty/make-temp-file.c [new file with mode: 0644]
libiberty/makefile.vms [new file with mode: 0644]
libiberty/md5.c [new file with mode: 0644]
libiberty/memchr.c [new file with mode: 0644]
libiberty/memcmp.c [new file with mode: 0644]
libiberty/memcpy.c [new file with mode: 0644]
libiberty/memmove.c [new file with mode: 0644]
libiberty/mempcpy.c [new file with mode: 0644]
libiberty/memset.c [new file with mode: 0644]
libiberty/mkstemps.c [new file with mode: 0644]
libiberty/msdos.c [new file with mode: 0644]
libiberty/objalloc.c [new file with mode: 0644]
libiberty/obstack.c [new file with mode: 0644]
libiberty/obstacks.texi [new file with mode: 0644]
libiberty/partition.c [new file with mode: 0644]
libiberty/pex-common.c [new file with mode: 0644]
libiberty/pex-common.h [new file with mode: 0644]
libiberty/pex-djgpp.c [new file with mode: 0644]
libiberty/pex-msdos.c [new file with mode: 0644]
libiberty/pex-one.c [new file with mode: 0644]
libiberty/pex-unix.c [new file with mode: 0644]
libiberty/pex-win32.c [new file with mode: 0644]
libiberty/pexecute.c [new file with mode: 0644]
libiberty/pexecute.txh [new file with mode: 0644]
libiberty/physmem.c [new file with mode: 0644]
libiberty/putenv.c [new file with mode: 0644]
libiberty/random.c [new file with mode: 0644]
libiberty/regex.c [new file with mode: 0644]
libiberty/rename.c [new file with mode: 0644]
libiberty/rindex.c [new file with mode: 0644]
libiberty/safe-ctype.c [new file with mode: 0644]
libiberty/setenv.c [new file with mode: 0644]
libiberty/sigsetmask.c [new file with mode: 0644]
libiberty/snprintf.c [new file with mode: 0644]
libiberty/sort.c [new file with mode: 0644]
libiberty/spaces.c [new file with mode: 0644]
libiberty/splay-tree.c [new file with mode: 0644]
libiberty/stpcpy.c [new file with mode: 0644]
libiberty/stpncpy.c [new file with mode: 0644]
libiberty/strcasecmp.c [new file with mode: 0644]
libiberty/strchr.c [new file with mode: 0644]
libiberty/strdup.c [new file with mode: 0644]
libiberty/strerror.c [new file with mode: 0644]
libiberty/strncasecmp.c [new file with mode: 0644]
libiberty/strncmp.c [new file with mode: 0644]
libiberty/strndup.c [new file with mode: 0644]
libiberty/strrchr.c [new file with mode: 0644]
libiberty/strsignal.c [new file with mode: 0644]
libiberty/strstr.c [new file with mode: 0644]
libiberty/strtod.c [new file with mode: 0644]
libiberty/strtol.c [new file with mode: 0644]
libiberty/strtoul.c [new file with mode: 0644]
libiberty/strverscmp.c [new file with mode: 0644]
libiberty/tmpnam.c [new file with mode: 0644]
libiberty/unlink-if-ordinary.c [new file with mode: 0644]
libiberty/vasprintf.c [new file with mode: 0644]
libiberty/vfork.c [new file with mode: 0644]
libiberty/vfprintf.c [new file with mode: 0644]
libiberty/vmsbuild.com [new file with mode: 0644]
libiberty/vprintf.c [new file with mode: 0644]
libiberty/vsnprintf.c [new file with mode: 0644]
libiberty/vsprintf.c [new file with mode: 0644]
libiberty/waitpid.c [new file with mode: 0644]
libiberty/xatexit.c [new file with mode: 0644]
libiberty/xexit.c [new file with mode: 0644]
libiberty/xmalloc.c [new file with mode: 0644]
libiberty/xmemdup.c [new file with mode: 0644]
libiberty/xstrdup.c [new file with mode: 0644]
libiberty/xstrerror.c [new file with mode: 0644]
libiberty/xstrndup.c [new file with mode: 0644]
src/.gdbinit [new file with mode: 0644]
src/AST.c [new file with mode: 0644]
src/AST.h [new file with mode: 0644]
src/AST_defs.h [new file with mode: 0644]
src/AST_list_node.c [new file with mode: 0644]
src/AST_list_node.h [new file with mode: 0644]
src/AST_parent.c [new file with mode: 0644]
src/AST_print.c [new file with mode: 0644]
src/AST_types.c [new file with mode: 0644]
src/AST_types.h [new file with mode: 0644]
src/AST_utils.c [new file with mode: 0644]
src/AST_utils.h [new file with mode: 0644]
src/AST_walk.c [new file with mode: 0644]
src/AST_walk.h [new file with mode: 0644]
src/AST_walk_children.c [new file with mode: 0644]
src/COPYING [new file with mode: 0644]
src/COPYRIGHT [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/ND_defs.h [new file with mode: 0644]
src/ND_list_nd_arg.c [new file with mode: 0644]
src/ND_list_nd_arg.h [new file with mode: 0644]
src/ND_types.c [new file with mode: 0644]
src/ND_types.h [new file with mode: 0644]
src/acinclude.m4 [new file with mode: 0644]
src/aclocal.m4 [new file with mode: 0644]
src/array.c [new file with mode: 0644]
src/array.h [new file with mode: 0644]
src/attributes.c [new file with mode: 0644]
src/attributes.h [new file with mode: 0644]
src/autoconf.h.in [new file with mode: 0644]
src/build-basics.el [new file with mode: 0644]
src/build-list.el [new file with mode: 0644]
src/build-parent.el [new file with mode: 0644]
src/build-print.el [new file with mode: 0644]
src/build-types.el [new file with mode: 0644]
src/build-walk.el [new file with mode: 0644]
src/c-gperf.h [new file with mode: 0644]
src/c-lex-int.h [new file with mode: 0644]
src/c-lex-state.h [new file with mode: 0644]
src/c-lex.c [new file with mode: 0644]
src/c-lex.h [new file with mode: 0644]
src/c-parse.gperf [new file with mode: 0644]
src/c-parse.h [new file with mode: 0644]
src/c-parse.tab.c [new file with mode: 0644]
src/c-parse.tab.h [new file with mode: 0644]
src/c-parse.y [new file with mode: 0644]
src/cg_help.c [new file with mode: 0644]
src/cg_help.fig [new file with mode: 0644]
src/configure [new file with mode: 0755]
src/configure.in [new file with mode: 0644]
src/constants.c [new file with mode: 0644]
src/constants.h [new file with mode: 0644]
src/cstring.h [new file with mode: 0644]
src/cval.c [new file with mode: 0644]
src/cval.h [new file with mode: 0644]
src/dd_list.c [new file with mode: 0644]
src/dd_list.h [new file with mode: 0644]
src/decls.h [new file with mode: 0644]
src/dhash.c [new file with mode: 0644]
src/dhash.h [new file with mode: 0644]
src/edit.c [new file with mode: 0644]
src/edit.h [new file with mode: 0644]
src/env.c [new file with mode: 0644]
src/env.h [new file with mode: 0644]
src/errors.c [new file with mode: 0644]
src/errors.h [new file with mode: 0644]
src/expr.c [new file with mode: 0644]
src/expr.h [new file with mode: 0644]
src/flags.c [new file with mode: 0644]
src/flags.h [new file with mode: 0644]
src/gcc-cpp.h [new file with mode: 0644]
src/graph.c [new file with mode: 0644]
src/graph.h [new file with mode: 0644]
src/init.c [new file with mode: 0644]
src/init.h [new file with mode: 0644]
src/lex.nd.c [new file with mode: 0644]
src/libcompat/Makefile.am [new file with mode: 0644]
src/libcompat/Makefile.in [new file with mode: 0644]
src/libcompat/alloc.c [new file with mode: 0644]
src/libcompat/fnmatch.c [new file with mode: 0644]
src/libcompat/fnmatch/fnmatch.h [new file with mode: 0644]
src/libcompat/pages.c [new file with mode: 0644]
src/libcompat/regex.c [new file with mode: 0644]
src/libcompat/regex/regex.h [new file with mode: 0644]
src/libcompat/regions.c [new file with mode: 0644]
src/libcompat/regions.h [new file with mode: 0644]
src/libcompat/stats.c [new file with mode: 0644]
src/machine.c [new file with mode: 0644]
src/machine.h [new file with mode: 0644]
src/machine/avr.c [new file with mode: 0644]
src/machine/env_machine.c [new file with mode: 0644]
src/machine/keil-gperf.h [new file with mode: 0644]
src/machine/keil.c [new file with mode: 0644]
src/machine/keil.gperf [new file with mode: 0644]
src/machine/msp430.c [new file with mode: 0644]
src/machine/sdcc-gperf.h [new file with mode: 0644]
src/machine/sdcc.c [new file with mode: 0644]
src/machine/sdcc.gperf [new file with mode: 0644]
src/machine/self.c [new file with mode: 0644]
src/nconfig.h [new file with mode: 0644]
src/nesc-abstract.c [new file with mode: 0644]
src/nesc-abstract.h [new file with mode: 0644]
src/nesc-atomic.c [new file with mode: 0644]
src/nesc-atomic.h [new file with mode: 0644]
src/nesc-attributes.c [new file with mode: 0644]
src/nesc-attributes.h [new file with mode: 0644]
src/nesc-c.c [new file with mode: 0644]
src/nesc-c.h [new file with mode: 0644]
src/nesc-cg.c [new file with mode: 0644]
src/nesc-cg.h [new file with mode: 0644]
src/nesc-compile [new file with mode: 0755]
src/nesc-component.c [new file with mode: 0644]
src/nesc-component.h [new file with mode: 0644]
src/nesc-concurrency.c [new file with mode: 0644]
src/nesc-concurrency.h [new file with mode: 0644]
src/nesc-configuration.c [new file with mode: 0644]
src/nesc-configuration.h [new file with mode: 0644]
src/nesc-constants.c [new file with mode: 0644]
src/nesc-constants.h [new file with mode: 0644]
src/nesc-cpp.c [new file with mode: 0644]
src/nesc-cpp.h [new file with mode: 0644]
src/nesc-decls.h [new file with mode: 0644]
src/nesc-deputy.c [new file with mode: 0644]
src/nesc-deputy.h [new file with mode: 0644]
src/nesc-dfilter.c [new file with mode: 0644]
src/nesc-dfilter.h [new file with mode: 0644]
src/nesc-doc.c [new file with mode: 0644]
src/nesc-doc.h [new file with mode: 0644]
src/nesc-dspec-int.h [new file with mode: 0644]
src/nesc-dspec.def [new file with mode: 0644]
src/nesc-dspec.h [new file with mode: 0644]
src/nesc-dspec.l [new file with mode: 0644]
src/nesc-dspec.tab.c [new file with mode: 0644]
src/nesc-dspec.tab.h [new file with mode: 0644]
src/nesc-dspec.y [new file with mode: 0644]
src/nesc-dump.c [new file with mode: 0644]
src/nesc-dump.h [new file with mode: 0644]
src/nesc-env.c [new file with mode: 0644]
src/nesc-env.h [new file with mode: 0644]
src/nesc-gcc.c [new file with mode: 0644]
src/nesc-gcc.h [new file with mode: 0644]
src/nesc-generate.c [new file with mode: 0644]
src/nesc-generate.h [new file with mode: 0644]
src/nesc-inline.c [new file with mode: 0644]
src/nesc-inline.h [new file with mode: 0644]
src/nesc-interface.c [new file with mode: 0644]
src/nesc-interface.h [new file with mode: 0644]
src/nesc-keywords.h [new file with mode: 0644]
src/nesc-magic.c [new file with mode: 0644]
src/nesc-magic.h [new file with mode: 0644]
src/nesc-main.c [new file with mode: 0644]
src/nesc-main.h [new file with mode: 0644]
src/nesc-module.c [new file with mode: 0644]
src/nesc-module.h [new file with mode: 0644]
src/nesc-msg.c [new file with mode: 0644]
src/nesc-msg.h [new file with mode: 0644]
src/nesc-ndoc.c [new file with mode: 0644]
src/nesc-ndoc.h [new file with mode: 0644]
src/nesc-network.c [new file with mode: 0644]
src/nesc-network.h [new file with mode: 0644]
src/nesc-paths.c [new file with mode: 0644]
src/nesc-paths.h [new file with mode: 0644]
src/nesc-semantics.c [new file with mode: 0644]
src/nesc-semantics.h [new file with mode: 0644]
src/nesc-task.c [new file with mode: 0644]
src/nesc-task.h [new file with mode: 0644]
src/nesc-uses.c [new file with mode: 0644]
src/nesc-uses.h [new file with mode: 0644]
src/nesc-xml.c [new file with mode: 0644]
src/nesc-xml.h [new file with mode: 0644]
src/nodetypes.def [new file with mode: 0644]
src/parser.h [new file with mode: 0644]
src/qualifiers.h [new file with mode: 0644]
src/sd_list.c [new file with mode: 0644]
src/sd_list.h [new file with mode: 0644]
src/semantics.c [new file with mode: 0644]
src/semantics.h [new file with mode: 0644]
src/stmt.c [new file with mode: 0644]
src/stmt.h [new file with mode: 0644]
src/tdspecs [new file with mode: 0644]
src/toplev.c [new file with mode: 0644]
src/types.c [new file with mode: 0644]
src/types.h [new file with mode: 0644]
src/unparse.c [new file with mode: 0644]
src/unparse.h [new file with mode: 0644]
src/utils.c [new file with mode: 0644]
src/utils.h [new file with mode: 0644]
tools/Makefile.am [new file with mode: 0644]
tools/Makefile.in [new file with mode: 0644]
tools/deputy_nodeputy.h [new file with mode: 0644]
tools/deputy_stage1.h [new file with mode: 0644]
tools/deputy_stage2.h [new file with mode: 0644]
tools/editor-modes/emacs/nesc.el [new file with mode: 0644]
tools/editor-modes/emacs/new-nesc.el [new file with mode: 0644]
tools/editor-modes/emacs/old-nesc.el [new file with mode: 0644]
tools/editor-modes/emacs/readme.txt [new file with mode: 0644]
tools/editor-modes/gedit/ncc.lang [new file with mode: 0644]
tools/editor-modes/gedit/readme.txt [new file with mode: 0644]
tools/editor-modes/kde/nesc.xml [new file with mode: 0644]
tools/editor-modes/kde/readme.txt [new file with mode: 0644]
tools/editor-modes/vim/filetype.vim [new file with mode: 0644]
tools/editor-modes/vim/nesc.vim [new file with mode: 0644]
tools/genc.pm [new file with mode: 0644]
tools/gencsharp.pm [new file with mode: 0644]
tools/gencstc.pm [new file with mode: 0644]
tools/gencstjava.pm [new file with mode: 0644]
tools/gencstpython.pm [new file with mode: 0644]
tools/genjava.pm [new file with mode: 0644]
tools/genpython.pm [new file with mode: 0644]
tools/java/Makefile.am [new file with mode: 0644]
tools/java/Makefile.in [new file with mode: 0644]
tools/java/net/Makefile.am [new file with mode: 0644]
tools/java/net/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/Makefile.am [new file with mode: 0644]
tools/java/net/tinyos/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/nesc/Makefile.am [new file with mode: 0644]
tools/java/net/tinyos/nesc/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/Makefile.am [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/NDReader.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/README [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/CDefinition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Constant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Container.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/DataDefinition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Definition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/DefinitionTable.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/DocumentationString.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/FloatConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Implementation.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/IntegerConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/KnownConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Location.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Makefile.am [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/NDElement.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/NDList.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/NescDefinition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/NonConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/SimpleType.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/StringConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/StructureDefinition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/TagDefinition.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Type.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/UnknownConstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Value.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringEndpoint.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringGraph.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringNode.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringScan.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringScanBackwards.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/WiringScanForwards.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xarguments.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xarray_element.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xattribute.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xattribute_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xattribute_value.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xcomponent.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xcomponent_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xcomponents.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xconfiguration.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xconstant.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xconstant_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xconstants.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xdocumentation.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xenum.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xenum_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfield.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfrom.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfunction.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfunction_parameters.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfunction_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xfunctions.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinstance.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterface.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterface_functions.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterface_parameters.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterface_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterfacedefs.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinterfaces.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinternal_component.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xinternal_component_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xlong.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xmodule.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xnesc.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xnx_struct.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xnx_struct_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xnx_union.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xnx_union_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xparameters.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xshort.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xstruct.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xstruct_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xstructured_element.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtags.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xto.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_array.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_float.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_int.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_component.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_float.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_function.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_int.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_interface.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_pointer.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_qualified.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_tag.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_var.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtype_void.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtypedef.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtypedef_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtypedefs.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xtypename.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xunion.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xunion_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvalue.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvalue_array.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvalue_structured.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvarargs.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvariable.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvariable_ref.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xvariables.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xwire.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/dump/xml/Xwiring.java [new file with mode: 0644]
tools/java/net/tinyos/nesc/wiring/Makefile.am [new file with mode: 0644]
tools/java/net/tinyos/nesc/wiring/Makefile.in [new file with mode: 0644]
tools/java/net/tinyos/nesc/wiring/README [new file with mode: 0644]
tools/java/net/tinyos/nesc/wiring/WiringCheck.java [new file with mode: 0644]
tools/migdecode.pm [new file with mode: 0644]
tools/nesc_nx.h [new file with mode: 0644]
tools/nescc-diff.in [new file with mode: 0644]
tools/nescc-mig.in [new file with mode: 0644]
tools/nescc-ncg.in [new file with mode: 0644]
tools/nescc-wiring.in [new file with mode: 0644]
tools/nescc.in [new file with mode: 0644]

diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..60549be
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644 (file)
index 0000000..fc2fc6f
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1,28 @@
+The nesC compiler is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+   Copyright (C) 2002-2006 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+--
+
+The Java classes that provide support for reading nesC's XML output are
+  Copyright (c) 2004-2006 Intel Corporation
+
+These file are distributed under the terms in the attached INTEL-LICENSE     
+file. If you do not find this file, copies can be found by writing to
+Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+94704.  Attention:  Intel License Inquiry.
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..0c9a88a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,25 @@
+To build nesC: in this directory
+./configure [--prefix=<where you want to install nesc]
+make
+
+To install:
+make install
+
+To install a nesC editor mode (currently, emacs, vim, kde):
+Read <installdir>/lib/ncc/editor-modes/<your-editor-name>/readme.txt
+
+To use nesC with TinyOS, you need to install the ncc, mig, etc TinyOS
+frontends for nesC. These are found in tinyos-1.x/tools/src/ncc (for TinyOS
+1.x) and in tinyos-2.x/tools (for TinyOS 2.x). Please follow the
+installation directions you find there.
+
+To use nesC with the Atmel AVR processors or the TI MSP processors you
+need the avr-gcc and msp430-gcc packages, and the corresponding GNU
+binutils (avr-binutils and msp430-binutils respectively). 
+
+You can use the patched versions of these binutils that allow $ in
+symbol names, available from http://www.tinyos.net/dist-2.0.0 (check
+http://www.tinyos.net/download.html to see if newer versions are
+available), or you can pass the -fnesc-separator=__ option to nescc (ncc
+if using TinyOS) to use __ rather than $ in generated code. See the
+nescc man page for details.
diff --git a/INTEL-LICENSE b/INTEL-LICENSE
new file mode 100644 (file)
index 0000000..add289e
--- /dev/null
@@ -0,0 +1,28 @@
+Intel Open Source License 
+
+Copyright (c) 2002 Intel Corporation 
+All rights reserved. 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+       Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+       Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+    Neither the name of the Intel Corporation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE INTEL OR ITS
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..2921812
--- /dev/null
@@ -0,0 +1,28 @@
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = libcpp libiberty src doc tools
+
+# gcc directories aren't automake-friendly
+DIST_SUBDIRS = src doc tools
+gcc_SUBDIRS = include libcpp libiberty
+
+src: libcpp libiberty
+
+EXTRA_DIST =                                   \
+       COPYING                                 \
+       COPYRIGHT                               \
+       INSTALL                                 \
+       INTEL-LICENSE                           \
+       README                                  \
+       config-aux/acx.m4                       \
+       config-aux/codeset.m4                   \
+       config-aux/gettext-sister.m4            \
+       config-aux/move-if-change               \
+       config-aux/no-executables.m4            \
+       config-aux/warnings.m4
+
+dist-hook:
+       for i in $(gcc_SUBDIRS); do \
+         (cd $$i; make distclean); \
+         tar cf - -X $$i/.distignore $$i | tar xf - -C $(distdir); \
+       done
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..209579d
--- /dev/null
@@ -0,0 +1,599 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(top_srcdir)/configure COPYING INSTALL \
+       config-aux/config.guess config-aux/config.rpath \
+       config-aux/config.sub config-aux/depcomp config-aux/install-sh \
+       config-aux/missing config-aux/mkinstalldirs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = libcpp libiberty src doc tools
+
+# gcc directories aren't automake-friendly
+DIST_SUBDIRS = src doc tools
+gcc_SUBDIRS = include libcpp libiberty
+EXTRA_DIST = \
+       COPYING                                 \
+       COPYRIGHT                               \
+       INSTALL                                 \
+       INTEL-LICENSE                           \
+       README                                  \
+       config-aux/acx.m4                       \
+       config-aux/codeset.m4                   \
+       config-aux/gettext-sister.m4            \
+       config-aux/move-if-change               \
+       config-aux/no-executables.m4            \
+       config-aux/warnings.m4
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+             cd $(srcdir) && $(AUTOMAKE) --foreign  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d $(distdir) || mkdir $(distdir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+       dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
+       distclean-generic distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+
+src: libcpp libiberty
+
+dist-hook:
+       for i in $(gcc_SUBDIRS); do \
+         (cd $$i; make distclean); \
+         tar cf - -X $$i/.distignore $$i | tar xf - -C $(distdir); \
+       done
+# 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/README b/README
new file mode 100644 (file)
index 0000000..531b3cc
--- /dev/null
+++ b/README
@@ -0,0 +1,286 @@
+This is version 1.3.0 of the nesC compiler.
+
+Installation instructions are in INSTALL. 
+
+Changes in nesC 1.3.0
+=====================
+- C preprocessor is integrated into nesC, which should significantly speed
+  up compilation (esp. on Windows)
+
+- support for the Deputy type-safety-for-C system (see
+  deputy.cs.berkeley.edu). To use Deputy, you add type annotations to
+  your nesC code, then compile with the -fnesc-deputy flag. A bunch of
+  small changes to nesC support the use of deputy. 
+
+  Flags to nescc:
+  -fnesc-deputy: use Deputy in this compilation. You need to have
+   a version of Deputy customized for use with nesC installed for
+   this to work.
+  -fnesc-deputy-args: extra arguments to pass to Deputy.
+  -fnesc-default-safe/-fnesc-default-unsafe: the default safety for
+   C functions and nesC modules (with no option specified, 
+   -fnesc-default-unsafe is assumed)
+
+  Type annotations: NONULL, COUNT(...), etc (see the Deputy-for-nesC
+  documentation for full details), which are actually macros which
+  expand to nesC attributes (@nonnull(), @count(...), etc. Using macros
+  allows Deputy-annotated code to be used with earlier versions of nesC.
+
+  Type annotations in nesdoc comments: to reduce clutter for non-Deputy
+  users, Deputy's annotations can be placed within a nesdoc comment
+  rather than in a function signature (which then looks like a regular
+  C signature):
+    /** ... @param 'int *@count(n) x' x is an array of n ints ... */
+    void f(int *x, int n);
+  is the same as
+    void f(int *@count(n) x, int n);
+  Macros can be used in the comment, so the above could also be
+    /** ... @param 'int *COUNT(n) x' x is an array of n ints ... */
+    void f(int *x, int n);
+  where COUNT(expr) expands to @count(expr).
+
+- internal support (in nesc1) for Deputy based on @deputy_scope() and
+  @macro("NAME") attributes, and a -fnesc-genprefix=<line> option.
+
+- @macro() and -fnesc-genprerix= may be useful in other contexts too:
+  if a nesC attribute declaration has an @macro() attribute:
+    struct @myattr @macro("MYMACRO") { int x; char *y; };
+  then uses of @myattr in nesC source are output as calls to MYMACRO in
+  nesC's intermediate C output. For instance
+    int x @myattr(23, "fun");
+  becomes
+    int x MYMACRO(23, "fun");
+  The -fnesc-genprefix=<line> adds <line> to the start of the generated C
+  output, e.g., it could be a #define definition for MYMACRO, or a 
+  #include of a file with appropriate definitions.
+
+- wide strings in XML output now show up as arrays of bytes (and follow
+  the target's byte-level representation of wide strings)
+
+- ability to process a C file through nesC (this provides support in C for
+  external types, atomic statements and unique), as follows:
+    nescc <options> -x nesc <filename>.c
+  This forces nescc to pass the C file <filename>.c through the nesC compiler
+  (normally it would be sent to the regular C compiler), which will process
+  the nesC extensions and then compile the generated C code with the regular
+  C compiler (or whatever compiler was specified with -fnesc-gcc=...)
+
+- inside a module, you can now write void f(void) or void f() interchangeably
+  
+
+Changes in nesC 1.2.9
+=====================
+- added uniqueN constant function to allocated N consecutive numbers
+- fix -fnesc-separator
+- bug fixes
+
+Changes in nesC 1.2.8a
+======================
+- bug fixes
+
+Changes in nesC 1.2.8
+=====================
+- -fnesc-cppdir option to save preprocessed output
+- -fnesc-separator option to change symbol separator from $ in generated code
+- little-endian bitfields now supported in network types (thanks to
+  Matti Juhani \81Ã\96hman <mohman@cc.hut.fi> for the approach and some of the code)
+- internal errors try to report current source location (can be helpful in
+  tracking down problems, but only works for errors that occur during parsing)
+- updated vim mode from Cory Sharp (cory@moteiv.com)
+- bug fixes
+
+Changes in nesC 1.2.7a
+======================
+- nescc-diff removed (it was unsupported, ran only on AVR, and depends on guile 
+  being installed to work)
+
+Changes in nesC 1.2.7
+=====================
+- gcc's mode attribute support (this requires a new word_size specification
+  in the env target)
+- bug fixes
+
+Changes in nesC 1.2.6
+=====================
+- external types now support bitfields (big-endian only - mixing bit-field
+  endianness within a struct would be extremely confusing and/or tricky)
+- -conly option to just compile to C
+- better struct/union layout code, which requires a slightly more detailed
+  target machine description (see src/machine.h)
+- #pragma statements are saved and dumped at the end of the generated C code
+  (if you or your compiler uses #pragma, you'll probably have to move these
+  somewhere else; however, this cannot be done without understanding of
+  the pragma itself; hence the nesC compiler leaves this process to a 
+  user-supplied tool)
+- bug fixes
+
+Changes in nesC 1.2.5
+=====================
+- nescc-mig now generates C (ncg has supported C since 1.1.2)
+- add __builtin_offsetof keyword to make recent gcc's happy,
+  and update the gcc-specific asm syntax to reflect recent
+  gcc changes
+- allow types defined in interface files to be used immediately in generic 
+  interface arguments (e.g., interface Timer<TMilli>, where TMilli is 
+  defined in Timer.nc)
+- updates to automatic inlining - code should be slightly smaller
+- @spontaneous() attribute is automatically added to the __nesc_XXX 
+  functions used by the compiler
+- atomic optimisation (experimental): if you specify -fnesc-optimize-atomic,
+  two optimisations are performed:
+  o outermost atomics call __nesc_disable/enable_interrupt, which can assume
+    that interrupts are initially enabled
+  o "simple" atomic statements have no overhead (interrupts are not disabled)
+    simple atomic statements are those:
+    - with no accesses to shared state
+    - or, at most one access to one byte of shared state
+- bug fixes
+
+Changes in nesC 1.2.4
+=====================
+- bug fixes
+
+Changes in nesC 1.2.3
+=====================
+- provide network type information in nesC dump output
+- bug fixes
+
+Changes in nesC 1.2.2
+=====================
+- nescc-wiring tool to check wiring constraints - see man page for details
+- python mig, ncg support
+- XML schema update (should now match nesC dump output)
+- Java code now made available in compiled form as nesc.jar (rather than
+  in source form)
+- bug fixes
+
+Changes in nesC 1.2.1
+=====================
+- external types (nx_...) can now be passed as parameters and returned as
+  results
+- updates to XML dump information to support nesdoc
+  in particular, remember typedef names
+- bug fixes
+
+Changes in nesC 1.2
+===================
+- generic components and interfaces. See doc/user/generics-1.2.txt. 
+  nesdoc does not support generic components and interfaces (this should be 
+  supported in the next release).
+- configuration implementations and component specifications can now 
+  include type and constant declarations; configuration implementations
+  can refer to these types and constants. These changes are described
+  alongside the generic component changes, in doc/user/generics-1.2.txt. 
+- attributes (Java 1.5-style). See doc/user/attributes.txt.
+- binary components. See doc/user/binary-components.txt.
+- external types, a revamp of nesC 1.1.3's network types. See 
+  doc/user/network-types.txt.
+- "includes" is deprecated - use #include instead; note that you
+  must use #ifndef/#define/#endif for #include'd files in the usual
+  C style.
+- macros in included files now work in ways that are similar to C
+  (as long as you use #include instead of includes).
+- support for compiling task/post into an interface + wiring: this
+  allows the scheduler to be implemented as a component.
+- return can be used in atomic statements (implicitly terminating
+  the atomic statement).
+- the patched AVR assembler has been unbundled from nesC.
+- the ncc, mig and nesdoc scripts have been unbundled from nesC (they
+  are now distributed with the other TinyOS tools).
+
+Changes in nesC 1.1.3
+=====================
+- network types: platform-independent types to support heterogeneous
+  networking. See doc/network-types.txt.
+- support passing assembler options for nesC programs with -Wa, as usual w/ gcc
+- support -I- correctly (see gcc manual)
+- initialiser bug fix (some initialisers crashed nesC)
+
+Changes in nesC 1.1.2
+=====================
+- Misc bug fixes (in particular, work around latest-cygwin weirdness which
+  causes file corruption)
+- Recognise the gcc noinline attribute and don't automatically inline such
+  functions (patch contributed by Klaus Madsen, nesc@hjernemadsen.org)
+- Mac OS X support; avr-gcc not needed when compiling nesC
+- Support gcc's -I- idiom to prevent searching current dir for components,
+  interfaces, etc.
+- 64-bit platform support: compile with -DLARGE_ADDRESSES, and 
+  edit the MEMSLICE1 constant in src/libcompat.regions.c to be the number
+  of unused high-order bits on your platform
+- ncg supports C (note that there's no C mig support yet)
+
+Changes in nesC 1.1.1
+=====================
+- Support for platforms and sensorboards in directories other than 
+  tos/platforms and tos/sensorboards: a platform or sensorboard 
+  can be used if its directory is specified with an explicit -I directive
+  (see doc/ncc.html for details).
+- support for Tython
+- support -Wparentheses (warnings on statements like 'if (var = value) ...',
+  and other similar C pitfalls)
+- nesC editing modes for emacs, vim and kde (kate, kwrite, kdevelop):
+  these are in tools/editor-modes, and get installed to 
+  <installdir>/lib/ncc/editor-modes. Read the appropriate readme.txt file
+  for installation directions
+- msp430 and env targets (env gets the machine specification from an
+  environment variable and is intended to ease implementation of new
+  platforms, see doc/envtarget.html for details)
+- new hwevent, atomic_hwevent attributes to tell nesC which functions
+  are interrupt entry points (hwevent: interrupt entry point, invoked
+  with interrupts enabled; atomic_hwevent: interrupt entry point, invoked
+  with interrupts disabled) - these should ease porting to new platforms
+- new keywords (future use): abstract, component, extends, generic, new
+- A few small bug fixes
+
+Changes in nesC 1.1
+===================
+- Support for new language features:
+  o atomic sections
+  o compile-time data race detection
+  o explicit marking of asynchronous (aka interrupt) code (async keyword on
+    commands and events)
+  o automatic combining of results of multiply-wired functions
+  o initialisers now supported on module variables
+  o uniqueCount(<string>) function to complement unique(<string>), returning
+    the number of uses of the latter (useful for dimensioning arrays...)
+
+- new nesC warning flags/changes:
+  o -W[no-]unexpected-docstring is now -Wnesc-docstring, and defaults to off
+  o -W[no-]nesc-fnptr: warn for uses of function pointers
+  o -W[no-]nesc-data-race: turn on[off] compile-time data race detection
+  o -W[no-]nesc-async: warn [bug in alpha: error] if asynchronous code calls
+    synchronous code
+  o -W[no-]nesc-combine: warn when multiply wired functions do not have
+    a combining function defined on the result type. See tos.h for the
+    the combining function definition for result_t
+  o -Wnesc-all: same as -Wnesc-data-race -Wnesc-async -Wnesc-fnptr and
+                -Wnesc-combine
+
+- The NESC preprocessor symbol is defined to XYZ, where X is the major
+  version, Y the minor and Z the patchlevel. So nesc 1.1 defines NESC as 110
+
+- Tool chain changes:
+  o ncc has been split into two files: ncc and nescc
+    TinyOS-specific code is in ncc, nescc is a "generic" nesC compiler
+    (nescc does not automatically include tos.h, and does not automatically
+     add the TinyOS directory structure to the search path)
+  o the -fnesc-include=<filename> option includes a C file before compiling
+    the requested component (used by ncc to include tos.h...)
+    You can specify several -fnesc-include=... options
+  o A hardware platform X can now more easily be added:
+    - create directory .../tos/platforms/X
+    - place a .platform file in .../tos/platforms/X. Look at existing
+      .platform files for inspiration.
+  o A sensor board Y can add directories to the search path if there is
+    a .sensor file in the .../tos/sensorboards/Y directory
+    (as with .platform, .sensor is just perl code so can modify the
+    variables used by ncc to achieve whatever effect is necessary)
+  o set-mote-id works for programs greater than 64K
+
+- New tool to extract (enum) constants from C code: ncg. Usage is similar
+  to mig.
+- Debugging on mica supports with the Atmel JTAG ICE and the AvarICE
+  project (at http://sourceforge.net/projects/avarice)
+
+- Some improved error messages, miscellaneous bug fixes
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..ce67b57
--- /dev/null
@@ -0,0 +1,862 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_if(m4_PACKAGE_VERSION, [2.61],,
+[m4_fatal([this file was generated for autoconf 2.61.
+You have another version of autoconf.  If you want to use that,
+you should regenerate the build system entirely.], [63])])
+
+# Copyright (C) 2002, 2003, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10])dnl
+_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[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.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[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.
+AC_MSG_CHECKING([for style of include used by $am_make])
+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
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/config-aux/acx.m4 b/config-aux/acx.m4
new file mode 100644 (file)
index 0000000..c8a32c9
--- /dev/null
@@ -0,0 +1,597 @@
+# Autoconf M4 include file defining utility macros for complex Canadian
+# cross builds.
+
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
+dnl # $build_alias or canonical $build if blank.
+dnl # Used when we would use $build_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_BUILD],
+[AC_REQUIRE([AC_CANONICAL_BUILD]) []dnl
+case ${build_alias} in
+  "") build_noncanonical=${build} ;;
+  *) build_noncanonical=${build_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
+
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_HOST
+dnl # $host_alias, or $build_noncanonical if blank.
+dnl # Used when we would use $host_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_HOST],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+case ${host_alias} in
+  "") host_noncanonical=${build_noncanonical} ;;
+  *) host_noncanonical=${host_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_HOST
+
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
+dnl # $target_alias or $host_noncanonical if blank.
+dnl # Used when we would use $target_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_TARGET],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
+case ${target_alias} in
+  "") target_noncanonical=${host_noncanonical} ;;
+  *) target_noncanonical=${target_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
+
+dnl ####
+dnl # ACX_NONCANONICAL_BUILD
+dnl # Like underscored version, but AC_SUBST's.
+AC_DEFUN([ACX_NONCANONICAL_BUILD],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+AC_SUBST(build_noncanonical)
+]) []dnl # ACX_NONCANONICAL_BUILD
+
+dnl ####
+dnl # ACX_NONCANONICAL_HOST
+dnl # Like underscored version, but AC_SUBST's.
+AC_DEFUN([ACX_NONCANONICAL_HOST],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
+AC_SUBST(host_noncanonical)
+]) []dnl # ACX_NONCANONICAL_HOST
+
+dnl ####
+dnl # ACX_NONCANONICAL_TARGET
+dnl # Like underscored version, but AC_SUBST's.
+AC_DEFUN([ACX_NONCANONICAL_TARGET],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
+AC_SUBST(target_noncanonical)
+]) []dnl # ACX_NONCANONICAL_TARGET
+
+dnl ####
+dnl # GCC_TOPLEV_SUBDIRS
+dnl # GCC & friends build 'build', 'host', and 'target' tools.  These must
+dnl # be separated into three well-known subdirectories of the build directory:
+dnl # build_subdir, host_subdir, and target_subdir.  The values are determined
+dnl # here so that they can (theoretically) be changed in the future.  They
+dnl # were previously reproduced across many different files.
+dnl #
+dnl # This logic really amounts to very little with autoconf 2.13; it will
+dnl # amount to a lot more with autoconf 2.5x.
+AC_DEFUN([GCC_TOPLEV_SUBDIRS],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
+AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+
+# post-stage1 host modules use a different CC_FOR_BUILD so, in order to
+# have matching libraries, they should use host libraries: Makefile.tpl
+# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR).
+# However, they still use the build modules, because the corresponding
+# host modules (e.g. bison) are only built for the host when bootstrap
+# finishes. So:
+# - build_subdir is where we find build modules, and never changes.
+# - build_libsubdir is where we find build libraries, and can be overridden.
+
+# Prefix 'build-' so this never conflicts with target_subdir.
+build_subdir="build-${build_noncanonical}"
+AC_ARG_WITH(build-libsubdir,
+[  --with-build-libsubdir=[DIR]  Directory where to find libraries for build system],
+build_libsubdir="$withval",
+build_libsubdir="$build_subdir")
+# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
+if ( test $srcdir = . && test -d gcc ) \
+   || test -d $srcdir/../host-${host_noncanonical}; then
+  host_subdir="host-${host_noncanonical}"
+else
+  host_subdir=.
+fi
+# No prefix.
+target_subdir=${target_noncanonical}
+AC_SUBST([build_libsubdir]) []dnl
+AC_SUBST([build_subdir]) []dnl
+AC_SUBST([host_subdir]) []dnl
+AC_SUBST([target_subdir]) []dnl
+]) []dnl # GCC_TOPLEV_SUBDIRS
+
+
+####
+# _NCN_TOOL_PREFIXES:  Some stuff that oughtta be done in AC_CANONICAL_SYSTEM 
+# or AC_INIT.
+# These demand that AC_CANONICAL_SYSTEM be called beforehand.
+AC_DEFUN([_NCN_TOOL_PREFIXES],
+[ncn_tool_prefix=
+test -n "$host_alias" && ncn_tool_prefix=$host_alias-
+ncn_target_tool_prefix=
+test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
+]) []dnl # _NCN_TOOL_PREFIXES
+
+####
+# NCN_STRICT_CHECK_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])
+# Like plain AC_CHECK_TOOLS, but require prefix if build!=host.
+
+AC_DEFUN([NCN_STRICT_CHECK_TOOLS],
+[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
+AC_ARG_VAR([$1], [$1 for the host])
+
+if test -n "[$]$1"; then
+  ac_cv_prog_$1=[$]$1
+elif test -n "$ac_cv_prog_$1"; then
+  $1=$ac_cv_prog_$1
+fi
+
+if test -n "$ac_cv_prog_$1"; then
+  for ncn_progname in $2; do
+    AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
+  done
+fi
+
+for ncn_progname in $2; do
+  if test -n "$ncn_tool_prefix"; then
+    AC_CHECK_PROG([$1], [${ncn_tool_prefix}${ncn_progname}], 
+                  [${ncn_tool_prefix}${ncn_progname}], , [$4])
+  fi
+  if test -z "$ac_cv_prog_$1" && test $build = $host ; then
+    AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) 
+  fi
+  test -n "$ac_cv_prog_$1" && break
+done
+
+if test -z "$ac_cv_prog_$1" ; then
+  ifelse([$3],[], [set dummy $2
+  if test $build = $host ; then
+    $1="[$]2"
+  else
+    $1="${ncn_tool_prefix}[$]2"
+  fi], [$1="$3"])
+fi
+]) []dnl # NCN_STRICT_CHECK_TOOLS
+
+####
+# NCN_STRICT_CHECK_TARGET_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])
+# Like CVS Autoconf AC_CHECK_TARGET_TOOLS, but require prefix if build!=target.
+
+AC_DEFUN([NCN_STRICT_CHECK_TARGET_TOOLS],
+[AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
+AC_ARG_VAR([$1], patsubst([$1], [_FOR_TARGET$], [])[ for the target])
+
+if test -n "[$]$1"; then
+  ac_cv_prog_$1=[$]$1
+elif test -n "$ac_cv_prog_$1"; then
+  $1=$ac_cv_prog_$1
+fi
+
+if test -n "$ac_cv_prog_$1"; then
+  for ncn_progname in $2; do
+    AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
+  done
+fi
+
+if test -z "$ac_cv_prog_$1" && test -n "$with_build_time_tools"; then
+  for ncn_progname in $2; do
+    AC_MSG_CHECKING([for ${ncn_progname} in $with_build_time_tools])
+    if test -x $with_build_time_tools/${ncn_progname}; then
+      ac_cv_prog_$1=$with_build_time_tools/${ncn_progname}
+      AC_MSG_RESULT(yes)
+      break
+    else
+      AC_MSG_RESULT(no)
+    fi
+  done
+fi
+
+if test -z "$ac_cv_prog_$1"; then
+  for ncn_progname in $2; do
+    if test -n "$ncn_target_tool_prefix"; then
+      AC_CHECK_PROG([$1], [${ncn_target_tool_prefix}${ncn_progname}], 
+                    [${ncn_target_tool_prefix}${ncn_progname}], , [$4])
+    fi
+    if test -z "$ac_cv_prog_$1" && test $build = $target ; then
+      AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) 
+    fi
+    test -n "$ac_cv_prog_$1" && break
+  done
+fi
+  
+if test -z "$ac_cv_prog_$1" ; then
+  ifelse([$3],[], [set dummy $2
+  if test $build = $target ; then
+    $1="[$]2"
+  else
+    $1="${ncn_target_tool_prefix}[$]2"
+  fi], [$1="$3"])
+else
+  $1="$ac_cv_prog_$1"
+fi
+]) []dnl # NCN_STRICT_CHECK_TARGET_TOOLS
+  
+
+# Backported from Autoconf 2.5x; can go away when and if
+# we switch.  Put the OS path separator in $PATH_SEPARATOR.
+AC_DEFUN([ACX_PATH_SEP], [
+# 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
+])
+
+
+AC_DEFUN([ACX_TOOL_DIRS], [
+AC_REQUIRE([ACX_PATH_SEP])
+if test "x$exec_prefix" = xNONE; then
+        if test "x$prefix" = xNONE; then
+                gcc_cv_tool_prefix=$ac_default_prefix
+        else
+                gcc_cv_tool_prefix=$prefix
+        fi
+else
+        gcc_cv_tool_prefix=$exec_prefix
+fi
+
+# If there is no compiler in the tree, use the PATH only.  In any
+# case, if there is no compiler in the tree nobody should use
+# AS_FOR_TARGET and LD_FOR_TARGET.
+if test x$host = x$build && test -f $srcdir/gcc/BASE-VER; then
+    gcc_version=`cat $srcdir/gcc/BASE-VER`
+    gcc_cv_tool_dirs="$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+    gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical$PATH_SEPARATOR"
+    gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+    gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical$PATH_SEPARATOR"
+    gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin/$target_noncanonical/$gcc_version$PATH_SEPARATOR"
+    gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin$PATH_SEPARATOR"
+else
+    gcc_cv_tool_dirs=
+fi
+
+if test x$build = x$target && test -n "$md_exec_prefix"; then
+        gcc_cv_tool_dirs="$gcc_cv_tool_dirs$md_exec_prefix$PATH_SEPARATOR"
+fi
+
+]) []dnl # ACX_TOOL_DIRS
+
+# ACX_HAVE_GCC_FOR_TARGET
+# Check if the variable GCC_FOR_TARGET really points to a GCC binary.
+AC_DEFUN([ACX_HAVE_GCC_FOR_TARGET], [
+cat > conftest.c << \EOF
+#ifdef __GNUC__
+  gcc_yay;
+#endif
+EOF
+if ($GCC_FOR_TARGET -E conftest.c | grep gcc_yay) > /dev/null 2>&1; then
+  have_gcc_for_target=yes
+else
+  GCC_FOR_TARGET=${ncn_target_tool_prefix}gcc
+  have_gcc_for_target=no
+fi
+rm conftest.c
+])
+
+# ACX_CHECK_INSTALLED_TARGET_TOOL(VAR, PROG)
+# Searching for installed target binutils.  We need to take extra care,
+# else we may find the wrong assembler, linker, etc., and lose.
+#
+# First try --with-build-time-tools, if specified.
+#
+# For build != host, we ask the installed GCC for the name of the tool it
+# uses, and accept it if it is an absolute path.  This is because the
+# only good choice for a compiler is the same GCC version that is being
+# installed (or we couldn't make target libraries), and we assume that
+# on the host system we'll have not only the same GCC version, but also
+# the same binutils version.
+#
+# For build == host, search the same directories that the installed
+# compiler will search.  We used to do this for the assembler, linker,
+# and nm only; for simplicity of configuration, however, we extend this
+# criterion to tools (such as ar and ranlib) that are never invoked by
+# the compiler, to avoid mismatches.
+#
+# Also note we have to check MD_EXEC_PREFIX before checking the user's path
+# if build == target.  This makes the most sense only when bootstrapping,
+# but we also do so when build != host.  In this case, we hope that the
+# build and host systems will have similar contents of MD_EXEC_PREFIX.
+#
+# If we do not find a suitable binary, then try the user's path.
+
+AC_DEFUN([ACX_CHECK_INSTALLED_TARGET_TOOL], [
+AC_REQUIRE([ACX_TOOL_DIRS])
+AC_REQUIRE([ACX_HAVE_GCC_FOR_TARGET])
+if test -z "$ac_cv_path_$1" ; then
+  if test -n "$with_build_time_tools"; then
+    AC_MSG_CHECKING([for $2 in $with_build_time_tools])
+    if test -x $with_build_time_tools/$2; then
+      $1=`cd $with_build_time_tools && pwd`/$2
+      ac_cv_path_$1=[$]$1
+      AC_MSG_RESULT([$ac_cv_path_$1])
+    else
+      AC_MSG_RESULT(no)
+    fi
+  elif test $build != $host && test $have_gcc_for_target = yes; then
+    $1=`$GCC_FOR_TARGET --print-prog-name=$2`
+    test [$]$1 = $2 && $1=
+    test -n "[$]$1" && ac_cv_path_$1=[$]$1
+  fi
+fi
+if test -z "$ac_cv_path_$1" && test -n "$gcc_cv_tool_dirs"; then
+  AC_PATH_PROG([$1], [$2], [], [$gcc_cv_tool_dirs])
+fi
+if test -z "$ac_cv_path_$1" ; then
+  NCN_STRICT_CHECK_TARGET_TOOLS([$1], [$2])
+else
+  $1=$ac_cv_path_$1
+fi
+]) []dnl # ACX_CHECK_INSTALLED_TARGET_TOOL
+
+###
+# AC_PROG_CPP_WERROR
+# Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which
+# triggers warnings from the preprocessor.  Will be in autoconf 2.58.
+# For now, using this also overrides header checks to use only the
+# preprocessor (matches 2.13 behavior; matching 2.58's behavior is a
+# bit harder from here).
+# Eventually autoconf will default to checking headers with the compiler
+# instead, and we'll have to do this differently.
+
+AC_DEFUN([AC_PROG_CPP_WERROR],
+[AC_REQUIRE([AC_PROG_CPP])dnl
+m4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD]))
+ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
+
+# Test for GNAT.
+# We require the gnatbind program, and a compiler driver that
+# understands Ada.  We use the user's CC setting, already found.
+#
+# Sets the shell variable have_gnat to yes or no as appropriate, and
+# substitutes GNATBIND and GNATMAKE.
+AC_DEFUN([ACX_PROG_GNAT],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
+AC_REQUIRE([AC_PROG_CC])
+AC_CHECK_TOOL(GNATBIND, gnatbind, no)
+AC_CHECK_TOOL(GNATMAKE, gnatmake, no)
+AC_CACHE_CHECK([whether compiler driver understands Ada],
+                acx_cv_cc_gcc_supports_ada,
+[cat >conftest.adb <<EOF
+procedure conftest is begin null; end conftest;
+EOF
+acx_cv_cc_gcc_supports_ada=no
+# There is a bug in old released versions of GCC which causes the
+# driver to exit successfully when the appropriate language module
+# has not been installed.  This is fixed in 2.95.4, 3.0.2, and 3.1.
+# Therefore we must check for the error message as well as an
+# unsuccessful exit.
+# Other compilers, like HP Tru64 UNIX cc, exit successfully when
+# given a .adb file, but produce no object file.  So we must check
+# if an object file was really produced to guard against this.
+errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
+if test x"$errors" = x && test -f conftest.$ac_objext; then
+  acx_cv_cc_gcc_supports_ada=yes
+fi
+rm -f conftest.*])
+
+if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+  have_gnat=yes
+else
+  have_gnat=no
+fi
+])
+
+dnl 'make compare' can be significantly faster, if cmp itself can
+dnl skip bytes instead of using tail.  The test being performed is
+dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
+dnl but we need to sink errors and handle broken shells.  We also test
+dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
+dnl accepted by cmp on some systems.
+AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL],
+[AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip,
+[ echo abfoo >t1
+  echo cdfoo >t2
+  gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
+  if cmp t1 t2 2 2 > /dev/null 2>&1; then
+    if cmp t1 t2 1 1 > /dev/null 2>&1; then
+      :
+    else
+      gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
+    fi
+  fi
+  if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
+    if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
+      :
+    else
+      gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
+    fi
+  fi
+  rm t1 t2
+])
+do_compare="$gcc_cv_prog_cmp_skip"
+AC_SUBST(do_compare)
+])
+
+dnl See whether we can include both string.h and strings.h.
+AC_DEFUN([ACX_HEADER_STRING],
+[AC_CACHE_CHECK([whether string.h and strings.h may both be included],
+  gcc_cv_header_string,
+[AC_TRY_COMPILE([#include <string.h>
+#include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])
+if test $gcc_cv_header_string = yes; then
+  AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
+fi
+])
+
+dnl See if stdbool.h properly defines bool and true/false.
+dnl Check whether _Bool is built-in.
+AC_DEFUN([ACX_HEADER_STDBOOL],
+[AC_CACHE_CHECK([for working stdbool.h],
+  ac_cv_header_stdbool_h,
+[AC_TRY_COMPILE([#include <stdbool.h>],
+[bool foo = false;],
+ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)])
+if test $ac_cv_header_stdbool_h = yes; then
+  AC_DEFINE(HAVE_STDBOOL_H, 1,
+  [Define if you have a working <stdbool.h> header file.])
+fi
+AC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool,
+[AC_TRY_COMPILE(,
+[_Bool foo;],
+gcc_cv_c__bool=yes, gcc_cv_c__bool=no)
+])
+if test $gcc_cv_c__bool = yes; then
+  AC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.])
+fi
+])
+
+dnl See if hard links work and if not, try to substitute $1 or simple copy.
+AC_DEFUN([ACX_PROG_LN],
+[AC_MSG_CHECKING(whether ln works)
+AC_CACHE_VAL(acx_cv_prog_LN,
+[rm -f conftestdata_t
+echo >conftestdata_f
+if ln conftestdata_f conftestdata_t 2>/dev/null
+then
+  acx_cv_prog_LN=ln
+else
+  acx_cv_prog_LN=no
+fi
+rm -f conftestdata_f conftestdata_t
+])dnl
+if test $acx_cv_prog_LN = no; then
+  LN="ifelse([$1],,cp,[$1])"
+  AC_MSG_RESULT([no, using $LN])
+else
+  LN="$acx_cv_prog_LN"
+  AC_MSG_RESULT(yes)
+fi
+AC_SUBST(LN)dnl
+])
+
+dnl GCC_TARGET_TOOL(PROGRAM, TARGET-VAR, HOST-VAR, IN-TREE-TOOL, LANGUAGE)
+AC_DEFUN([GCC_TARGET_TOOL],
+[AC_MSG_CHECKING(where to find the target $1)
+if test "x${build}" != "x${host}" ; then
+  if expr "x[$]$2" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname [$]$2`
+    AC_MSG_RESULT(pre-installed in $ac_dir)
+  else
+    # Canadian cross, just use what we found
+    AC_MSG_RESULT(pre-installed)
+  fi
+else
+  ifelse([$4],,,
+  [ok=yes
+  case " ${configdirs} " in
+    *" patsubst([$4], [/.*], []) "*) ;;
+    *) ok=no ;;
+  esac
+  ifelse([$5],,, 
+  [case ,${enable_languages}, in
+    *,$5,*) ;;
+    *) ok=no ;;
+  esac])
+  if test $ok = yes; then
+    # An in-tree tool is available and we can use it
+    $2='$$r/$(HOST_SUBDIR)/$4'
+    AC_MSG_RESULT(just compiled)
+  el])if expr "x[$]$2" : "x/" > /dev/null; then
+    # We already found the complete path
+    ac_dir=`dirname [$]$2`
+    AC_MSG_RESULT(pre-installed in $ac_dir)
+  elif test "x$target" = "x$host"; then
+    # We can use an host tool
+    $2='$($3)'
+    AC_MSG_RESULT(host tool)
+  else
+    # We need a cross tool
+    AC_MSG_RESULT(pre-installed)
+  fi
+fi
+AC_SUBST($2)])
+
+
+dnl Locate a program and check that its version is acceptable.
+dnl ACX_PROG_CHECK_VER(var, name, version-switch,
+dnl                    version-extract-regexp, version-glob)
+AC_DEFUN([ACX_CHECK_PROG_VER],[
+  AC_CHECK_PROG([$1], [$2], [$2])
+  if test -n "[$]$1"; then
+    # Found it, now check the version.
+    AC_CACHE_CHECK([for modern $2],
+                   [gcc_cv_prog_$2_modern],
+                   [ac_prog_version=`eval [$]$1 $3 2>&1 |
+                                     sed -n 's/^.*patsubst([[$4]],/,\/).*$/\1/p'`
+
+                    [case $ac_prog_version in
+                      '')  gcc_cv_prog_$2_modern=no;;
+                      $5)  gcc_cv_prog_$2_modern=yes;;
+                      *)   gcc_cv_prog_$2_modern=no;;
+                    esac]
+                   ])
+  else
+    gcc_cv_prog_$2_modern=no
+  fi
+  if test $gcc_cv_prog_$2_modern = no; then
+    $1="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing $2"
+  fi
+])
+
+dnl Support the --with-pkgversion configure option.
+dnl ACX_PKGVERSION(default-pkgversion)
+AC_DEFUN([ACX_PKGVERSION],[
+  AC_ARG_WITH(pkgversion,
+    AS_HELP_STRING([--with-pkgversion=PKG],
+                   [Use PKG in the version string in place of "$1"]),
+    [case "$withval" in
+      yes) AC_MSG_ERROR([package version not specified]) ;;
+      no)  PKGVERSION= ;;
+      *)   PKGVERSION="($withval) " ;;
+     esac],
+    PKGVERSION="($1) "
+  )
+  AC_SUBST(PKGVERSION)
+])
+
+dnl Support the --with-bugurl configure option.
+dnl ACX_BUGURL(default-bugurl)
+AC_DEFUN([ACX_BUGURL],[
+  AC_ARG_WITH(bugurl,
+    AS_HELP_STRING([--with-bugurl=URL],
+                   [Direct users to URL to report a bug]),
+    [case "$withval" in
+      yes) AC_MSG_ERROR([bug URL not specified]) ;;
+      no)  BUGURL=
+          ;;
+      *)   BUGURL="$withval"
+          ;;
+     esac],
+     BUGURL="$1"
+  )
+  case ${BUGURL} in
+  "")
+    REPORT_BUGS_TO=
+    REPORT_BUGS_TEXI=
+    ;;
+  *)
+    REPORT_BUGS_TO="<$BUGURL>"
+    REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
+    ;;
+  esac;
+  AC_SUBST(REPORT_BUGS_TO)
+  AC_SUBST(REPORT_BUGS_TEXI)
+])
diff --git a/config-aux/codeset.m4 b/config-aux/codeset.m4
new file mode 100644 (file)
index 0000000..59535eb
--- /dev/null
@@ -0,0 +1,23 @@
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET);],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/config-aux/config.guess b/config-aux/config.guess
new file mode 100755 (executable)
index 0000000..396482d
--- /dev/null
@@ -0,0 +1,1500 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[45])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    x86:Interix*:[3456]*)
+       echo i586-pc-interix${UNAME_RELEASE}
+       exit ;;
+    EM64T:Interix*:[3456]*)
+       echo x86_64-unknown-interix${UNAME_RELEASE}
+       exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^LIBC/{
+               s: ::g
+               p
+           }'`"
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config-aux/config.rpath b/config-aux/config.rpath
new file mode 100755 (executable)
index 0000000..937edf5
--- /dev/null
@@ -0,0 +1,548 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2003 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+#   As a special exception to the GNU General Public License, if you
+#   distribute this file as part of a program that contains a
+#   configuration script generated by Autoconf, you may include it under
+#   the same distribution terms that you use for the rest of that program.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    mingw* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux*)
+      case $CC in
+        icc|ecc)
+          wl='-Wl,'
+          ;;
+        ccc)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = yes; then
+    # Unlike libtool, we use -rpath here, not --rpath, since the documented
+    # option of GNU ld is called -rpath, not --rpath.
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi4*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+        hardcode_direct=no
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10* | hpux11*)
+      if test "$with_gnu_ld" = no; then
+        case "$host_cpu" in
+          hppa*64*)
+            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+            hardcode_libdir_separator=:
+            hardcode_direct=no
+            ;;
+          ia64*)
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_direct=no
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+            hardcode_libdir_separator=:
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      hardcode_direct=yes
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      else
+        case "$host_os" in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+        esac
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4.2uw2*)
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      ;;
+    sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      ;;
+    sysv5*)
+      hardcode_libdir_flag_spec=
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    ;;
+  aix4* | aix5*)
+    ;;
+  amigaos*)
+    ;;
+  beos*)
+    ;;
+  bsdi4*)
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    ;;
+  dgux*)
+    ;;
+  freebsd1*)
+    ;;
+  freebsd*)
+    ;;
+  gnu*)
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case "$host_cpu" in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux*)
+    ;;
+  netbsd*)
+    ;;
+  newsos6)
+    ;;
+  nto-qnx)
+    ;;
+  openbsd*)
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    ;;
+  osf3* | osf4* | osf5*)
+    ;;
+  sco3.2v5*)
+    ;;
+  solaris*)
+    ;;
+  sunos4*)
+    ;;
+  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+    ;;
+  sysv4*MP*)
+    ;;
+  uts4*)
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config-aux/config.sub b/config-aux/config.sub
new file mode 100755 (executable)
index 0000000..fab0aa3
--- /dev/null
@@ -0,0 +1,1616 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-09-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64vr | mips64vrel \
+       | mips64orion | mips64orionel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa-* \
+       | ymp-* \
+       | z8k-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16c)
+               basic_machine=cr16c-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config-aux/depcomp b/config-aux/depcomp
new file mode 100755 (executable)
index 0000000..ca5ea4e
--- /dev/null
@@ -0,0 +1,584 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2006-10-15.18
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+# Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config-aux/gettext-sister.m4 b/config-aux/gettext-sister.m4
new file mode 100644 (file)
index 0000000..e8e6b66
--- /dev/null
@@ -0,0 +1,80 @@
+# intl sister-directory configuration rules.
+#
+
+# The idea behind this macro is that there's no need to repeat all the
+# autoconf probes done by the intl directory - it's already done them
+# for us.  In fact, there's no need even to look at the cache for the
+# answers.  All we need to do is nab a few pieces of information.
+# The intl directory is set up to make this easy, by generating a
+# small file which can be sourced as a shell script; then we produce
+# the necessary substitutions and definitions for this directory.
+
+AC_DEFUN([ZW_GNU_GETTEXT_SISTER_DIR],
+[# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no     AC_SUBST(USE_NLS)
+LIBINTL=       AC_SUBST(LIBINTL)
+LIBINTL_DEP=   AC_SUBST(LIBINTL_DEP)
+INCINTL=       AC_SUBST(INCINTL)
+XGETTEXT=      AC_SUBST(XGETTEXT)
+GMSGFMT=       AC_SUBST(GMSGFMT)
+POSUB=         AC_SUBST(POSUB)
+
+if test -f  ifelse([$1],,[../intl],[$1])/config.intl; then
+  .  ifelse([$1],,[../intl],[$1])/config.intl
+fi
+AC_MSG_CHECKING([whether NLS is requested])
+if test x"$USE_NLS" != xyes; then
+  AC_MSG_RESULT(no)
+else
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(ENABLE_NLS, 1, 
+ [Define to 1 if translation of program messages to the 
+  user's native language is requested.])
+
+  AC_MSG_CHECKING(for catalogs to be installed)
+  # Look for .po and .gmo files in the source directory.
+  CATALOGS=  AC_SUBST(CATALOGS)
+  XLINGUAS=
+  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+    # If there aren't any .gmo files the shell will give us the
+    # literal string "../path/to/srcdir/po/*.gmo" which has to be
+    # weeded out.
+    case "$cat" in *\**)
+      continue;;
+    esac
+    # The quadruple backslash is collapsed to a double backslash
+    # by the backticks, then collapsed again by the double quotes,
+    # leaving us with one backslash in the sed expression (right
+    # before the dot that mustn't act as a wildcard).
+    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+    # The user is allowed to set LINGUAS to a list of languages to
+    # install catalogs for.  If it's empty that means "all of them."
+    if test "x$LINGUAS" = x; then
+      CATALOGS="$CATALOGS $cat"
+      XLINGUAS="$XLINGUAS $lang"
+    else
+      case "$LINGUAS" in *$lang*)
+        CATALOGS="$CATALOGS $cat"
+        XLINGUAS="$XLINGUAS $lang"
+        ;;
+      esac
+    fi
+  done
+  LINGUAS="$XLINGUAS"
+  AC_MSG_RESULT($LINGUAS)
+
+  dnl Set up some additional variables which our po/Make-in files
+  dnl may need.
+
+  dnl For backward compatibility. Some Makefiles may be using these.
+  DATADIRNAME=share
+  AC_SUBST(DATADIRNAME)
+  INSTOBJEXT=.mo
+  AC_SUBST(INSTOBJEXT)
+  GENCAT=gencat
+  AC_SUBST(GENCAT)
+  CATOBJEXT=.gmo
+  AC_SUBST(CATOBJEXT)
+fi])
diff --git a/config-aux/install-sh b/config-aux/install-sh
new file mode 100755 (executable)
index 0000000..4fbbae7
--- /dev/null
@@ -0,0 +1,507 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-10-14.15
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+        shift
+        shift
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+       shift
+       shift
+       continue;;
+
+    -T) no_target_directory=true
+       shift
+       continue;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dstarg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dstarg"
+      shift # fnord
+    fi
+    shift # arg
+    dstarg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dstarg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix=/ ;;
+       -*) prefix=./ ;;
+       *)  prefix= ;;
+      esac
+
+      case $posix_glob in
+        '')
+         if (set -f) 2>/dev/null; then
+           posix_glob=true
+         else
+           posix_glob=false
+         fi ;;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob && set -f
+      set fnord $dstdir
+      shift
+      $posix_glob && set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+      || {
+          # The rename failed, perhaps because mv can't rename something else
+          # to itself, or perhaps because mv is so ancient that it does not
+          # support -f.
+
+          # Now remove or move aside any old file at destination location.
+          # We try this two ways since rm can't unlink itself on some
+          # systems and the destination file might be busy for other
+          # reasons.  In this case, the final cleanup might fail but the new
+          # file should still install successfully.
+          {
+            if test -f "$dst"; then
+              $doit $rmcmd -f "$dst" 2>/dev/null \
+              || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+                    && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+              || {
+                echo "$0: cannot unlink or rename $dst" >&2
+                (exit 1); exit 1
+              }
+            else
+              :
+            fi
+          } &&
+
+          # Now rename the file to the real destination.
+          $doit $mvcmd "$dsttmp" "$dst"
+        }
+    } || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config-aux/missing b/config-aux/missing
new file mode 100755 (executable)
index 0000000..1c8ff70
--- /dev/null
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config-aux/mkinstalldirs b/config-aux/mkinstalldirs
new file mode 100755 (executable)
index 0000000..259dbfc
--- /dev/null
@@ -0,0 +1,158 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2005-06-29.22
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage"
+      exit $?
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit $?
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+  '')
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the `mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because `.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
+    fi
+    ;;
+esac
+
+for file
+do
+  case $file in
+    /*) pathcomp=/ ;;
+    *)  pathcomp= ;;
+  esac
+  oIFS=$IFS
+  IFS=/
+  set fnord $file
+  shift
+  IFS=$oIFS
+
+  for d
+  do
+    test "x$d" = x && continue
+
+    pathcomp=$pathcomp$d
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+      else
+       if test ! -z "$dirmode"; then
+         echo "chmod $dirmode $pathcomp"
+         lasterr=
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
+      fi
+    fi
+
+    pathcomp=$pathcomp/
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config-aux/move-if-change b/config-aux/move-if-change
new file mode 100755 (executable)
index 0000000..ff74a55
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Like mv $1 $2, but if the files are the same, just delete $1.
+# Status is zero if successful, nonzero otherwise.
+
+usage="$0: usage: $0 SOURCE DEST"
+
+case $# in
+2) ;;
+*) echo "$usage" >&2; exit 1;;
+esac
+
+for arg in "$1" "$2"; do
+  case $arg in
+   -*) echo "$usage" >&2; exit 1;;
+  esac
+done
+
+if test -r "$2" && cmp -s "$1" "$2"; then
+  rm -f "$1"
+else
+  mv -f "$1" "$2"
+fi
diff --git a/config-aux/no-executables.m4 b/config-aux/no-executables.m4
new file mode 100644 (file)
index 0000000..c4d0b70
--- /dev/null
@@ -0,0 +1,69 @@
+# GCC_NO_EXECUTABLES
+# -----------------
+# FIXME: The GCC team has specific needs which the current Autoconf
+# framework cannot solve elegantly.  This macro implements a dirty
+# hack until Autoconf is able to provide the services its users
+# need.
+#
+# Several of the support libraries that are often built with GCC can't
+# assume the tool-chain is already capable of linking a program: the
+# compiler often expects to be able to link with some of such
+# libraries.
+#
+# In several of these libraries, workarounds have been introduced to
+# avoid the AC_PROG_CC_WORKS test, that would just abort their
+# configuration.  The introduction of AC_EXEEXT, enabled either by
+# libtool or by CVS autoconf, have just made matters worse.
+#
+# Unlike the previous AC_NO_EXECUTABLES, this test does not
+# disable link tests at autoconf time, but at configure time.
+# This allows AC_NO_EXECUTABLES to be invoked conditionally.
+AC_DEFUN_ONCE([GCC_NO_EXECUTABLES],
+[m4_divert_push([KILL])
+
+AC_BEFORE([$0], [_AC_COMPILER_EXEEXT])
+AC_BEFORE([$0], [AC_LINK_IFELSE])
+
+m4_define([_AC_COMPILER_EXEEXT],
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+# FIXME: Cleanup?
+AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes])
+if test x$gcc_no_link = xyes; then
+  # Setting cross_compile will disable run tests; it will
+  # also disable AC_CHECK_FILE but that's generally
+  # correct if we can't link.
+  cross_compiling=yes
+  EXEEXT=
+else
+  m4_defn([_AC_COMPILER_EXEEXT])dnl
+fi
+)
+
+m4_define([AC_LINK_IFELSE],
+if test x$gcc_no_link = xyes; then
+  AC_MSG_ERROR([Link tests are not allowed after [[$0]].])
+fi
+m4_defn([AC_LINK_IFELSE]))
+
+dnl This is a shame.  We have to provide a default for some link tests,
+dnl similar to the default for run tests.
+m4_define([AC_FUNC_MMAP],
+if test x$gcc_no_link = xyes; then
+  if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
+    ac_cv_func_mmap_fixed_mapped=no
+  fi
+fi
+if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then
+  m4_defn([AC_FUNC_MMAP])
+fi)
+
+m4_divert_pop()dnl
+])# GCC_NO_EXECUTABLES
+
+# Use the strongest available test out of AC_TRY_COMPILE and AC_TRY_LINK.
+AC_DEFUN([GCC_TRY_COMPILE_OR_LINK],
+[if test x$gcc_no_link = xyes; then
+  AC_TRY_COMPILE([$1], [$2], [$3], [$4])
+else
+  AC_TRY_LINK([$1], [$2], [$3], [$4])
+fi])
diff --git a/config-aux/warnings.m4 b/config-aux/warnings.m4
new file mode 100644 (file)
index 0000000..d3358b6
--- /dev/null
@@ -0,0 +1,108 @@
+# Autoconf include file defining macros related to compile-time warnings.
+
+# Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
+
+#This file is part of GCC.
+
+#GCC is free software; you can redistribute it and/or modify it under
+#the terms of the GNU General Public License as published by the Free
+#Software Foundation; either version 2, or (at your option) any later
+#version.
+
+#GCC is distributed in the hope that it will be useful, but WITHOUT
+#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with GCC; see the file COPYING.  If not, write to the Free
+#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+#02110-1301, USA.
+
+# ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS)
+#   Sets @VARIABLE@ to the subset of the given options which the
+#   compiler accepts.
+AC_DEFUN([ACX_PROG_CC_WARNING_OPTS],
+[AC_REQUIRE([AC_PROG_CC])dnl
+m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
+save_CFLAGS="$CFLAGS"
+for option in $1; do
+  AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option])
+  AC_CACHE_CHECK([whether $CC supports $option], acx_Woption,
+    [CFLAGS="$option"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_VAR_SET(acx_Woption, yes)],
+      [AS_VAR_SET(acx_Woption, no)])
+  ])
+  AS_IF([test AS_VAR_GET(acx_Woption) = yes],
+        [acx_Var="$acx_Var${acx_Var:+ }$option"])
+  AS_VAR_POPDEF([acx_Woption])dnl
+done
+CFLAGS="$save_CFLAGS"
+m4_popdef([acx_Var])dnl
+])# ACX_PROG_CC_WARNING_OPTS
+
+# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC)
+#   Append to VARIABLE "-pedantic" + the argument, if the compiler is GCC
+#   and accepts all of those options simultaneously, otherwise to nothing.
+AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC],
+[AC_REQUIRE([AC_PROG_CC])dnl
+m4_pushdef([acx_Var], [m4_default([$2], [WARN_PEDANTIC])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
+AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl
+AS_IF([test "$GCC" = yes],
+[AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic,
+[save_CFLAGS="$CFLAGS"
+CFLAGS="-pedantic $1"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+   [AS_VAR_SET(acx_Pedantic, yes)],
+   [AS_VAR_SET(acx_Pedantic, no)])
+CFLAGS="$save_CFLAGS"])
+AS_IF([test AS_VAR_GET(acx_Pedantic) = yes],
+      [acx_Var="$acx_Var${acx_Var:+ }-pedantic $1"])
+])
+AS_VAR_POPDEF([acx_Pedantic])dnl
+m4_popdef([acx_Var])dnl
+])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC
+
+# ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z], [VARIABLE = WERROR])
+#   sets @VARIABLE@ to "-Werror" if the compiler is GCC >=x.y.z, or if
+#   --enable-werror-always was given on the command line, otherwise
+#   to nothing.
+#   If the argument is the word "manual" instead of a version number,
+#   then @VARIABLE@ will be set to -Werror only if --enable-werror-always
+#   appeared on the configure command line.
+AC_DEFUN([ACX_PROG_CC_WARNINGS_ARE_ERRORS],
+[AC_REQUIRE([AC_PROG_CC])dnl
+m4_pushdef([acx_Var], [m4_default([$2], [WERROR])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
+AC_ARG_ENABLE(werror-always, 
+    AS_HELP_STRING([--enable-werror-always],
+                  [enable -Werror despite compiler version]),
+[], [enable_werror_always=no])
+AS_IF([test $enable_werror_always = yes],
+      [acx_Var="$acx_Var${acx_Var:+ }-Werror"])
+ m4_if($1, [manual],,
+ [AS_VAR_PUSHDEF([acx_GCCvers], [acx_cv_prog_cc_gcc_$1_or_newer])dnl
+  AC_CACHE_CHECK([whether $CC is GCC >=$1], acx_GCCvers,
+    [set fnord `echo $1 | tr '.' ' '`
+     shift
+     AC_PREPROC_IFELSE(
+[#if __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ \
+  < [$]1 * 10000 + [$]2 * 100 + [$]3
+#error insufficient
+#endif],
+   [AS_VAR_SET(acx_GCCvers, yes)],
+   [AS_VAR_SET(acx_GCCvers, no)])])
+ AS_IF([test AS_VAR_GET(acx_GCCvers) = yes],
+       [acx_Var="$acx_Var${acx_Var:+ }-Werror"])
+  AS_VAR_POPDEF([acx_GCCvers])])
+m4_popdef([acx_Var])dnl
+])# ACX_PROG_CC_WARNINGS_ARE_ERRORS
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..99bfc20
--- /dev/null
+++ b/configure
@@ -0,0 +1,4707 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for nesc 1.3.0.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 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 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  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
+
+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
+  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=.
+  case $as_dir in
+        /*)
+          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=:
+  # Zsh 3.x and 4.x performs 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=:
+  # Zsh 3.x and 4.x performs 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
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  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 autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+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`
+
+#
+# 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}
+
+# Identity of this package.
+PACKAGE_NAME='nesc'
+PACKAGE_TARNAME='nesc'
+PACKAGE_VERSION='1.3.0'
+PACKAGE_STRING='nesc 1.3.0'
+PACKAGE_BUGREPORT=''
+
+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
+am__isrc
+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
+subdirs
+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
+pathperl
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS'
+ac_subdirs_all='src libiberty libcpp'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# 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'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+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
+    ac_prev=
+    continue
+  fi
+
+  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_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -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-\(.*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=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-\([^=]*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -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 ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --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)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --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 ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    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
+   { (exit 1); exit 1; }; }
+    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
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+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
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+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=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { 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'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+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.
+    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
+  fi
+fi
+
+ac_tool_prefix=
+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 .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { 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 the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$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'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       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.
+#
+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 nesc 1.3.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+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]
+  --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/nesc]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of nesc 1.3.0:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+
+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>
+  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>
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+    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 || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+nesc configure 1.3.0
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 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
+fi
+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 nesc $as_me 1.3.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 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`
+/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`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# 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: 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.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    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"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 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 -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  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;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+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;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 $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
+  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;}
+      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;}
+      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=:
+      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=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  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;}
+   { (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
+
+
+ac_aux_dir=
+for ac_dir in config-aux "$srcdir"/config-aux; 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
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  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 config-aux \"$srcdir\"/config-aux" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in config-aux \"$srcdir\"/config-aux" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# 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.
+
+
+
+am__api_version='1.10'
+
+# 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
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+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 { 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.
+           :
+         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
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+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.  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 value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# 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}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  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.
+# 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 -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+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;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+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; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # 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_AWK="$ac_prog"
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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 x ${MAKE-make}; ac_make=`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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+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 \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if 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;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='nesc'
+ VERSION='1.3.0'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+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; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_ac_ct_STRIP="strip"
+    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_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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+subdirs="$subdirs src libiberty libcpp"
+
+
+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
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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.
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+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
+    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
+    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.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+See \`config.log' for more details." >&5
+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`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+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
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out 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[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # 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 | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        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
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { 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
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# 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; }
+# 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'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  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.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+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; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# 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 { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+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 | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { 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
+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; }
+
+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; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  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 | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  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
+See \`config.log' for more details." >&5
+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; }
+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; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+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`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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 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; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=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 <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* 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 -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 -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);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&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
+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 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; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; 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_path_pathperl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $pathperl in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_pathperl="$pathperl" # 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_pathperl="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+pathperl=$ac_cv_path_pathperl
+if test -n "$pathperl"; then
+  { echo "$as_me:$LINENO: result: $pathperl" >&5
+echo "${ECHO_T}$pathperl" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test -z "$pathperl" ; then
+  { { echo "$as_me:$LINENO: error: I can't find perl" >&5
+echo "$as_me: error: I can't find perl" >&2;}
+   { (exit 1); exit 1; }; };
+fi
+
+ac_config_files="$ac_config_files Makefile doc/Makefile tools/Makefile tools/nescc-mig tools/nescc-ncg tools/nescc tools/nescc-diff tools/nescc-wiring tools/java/Makefile tools/java/net/Makefile tools/java/net/tinyos/Makefile tools/java/net/tinyos/nesc/Makefile tools/java/net/tinyos/nesc/wiring/Makefile tools/java/net/tinyos/nesc/dump/Makefile tools/java/net/tinyos/nesc/dump/xml/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
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_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, 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     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 "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+t clear
+:clear
+s/^[    ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[    ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[     `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+       g
+       s/^\n//
+       s/\n/ /g
+       p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.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_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`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
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { 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.
+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.
+Usually this means the macro was only invoked conditionally." >&5
+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_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
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# 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.
+ac_log="
+This file was extended by nesc $as_me 1.3.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, 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
+
+Configuration files:
+$config_files
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+nesc config.status 1.3.0
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_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.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    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: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+    "tools/nescc-mig") CONFIG_FILES="$CONFIG_FILES tools/nescc-mig" ;;
+    "tools/nescc-ncg") CONFIG_FILES="$CONFIG_FILES tools/nescc-ncg" ;;
+    "tools/nescc") CONFIG_FILES="$CONFIG_FILES tools/nescc" ;;
+    "tools/nescc-diff") CONFIG_FILES="$CONFIG_FILES tools/nescc-diff" ;;
+    "tools/nescc-wiring") CONFIG_FILES="$CONFIG_FILES tools/nescc-wiring" ;;
+    "tools/java/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/Makefile" ;;
+    "tools/java/net/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/Makefile" ;;
+    "tools/java/net/tinyos/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/Makefile" ;;
+    "tools/java/net/tinyos/nesc/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/Makefile" ;;
+    "tools/java/net/tinyos/nesc/wiring/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/wiring/Makefile" ;;
+    "tools/java/net/tinyos/nesc/dump/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/dump/Makefile" ;;
+    "tools/java/net/tinyos/nesc/dump/xml/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/dump/xml/Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+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
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# 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 ||
+{
+  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 "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# 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
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+subdirs!$subdirs$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+pathperl!$pathperl$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 79; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+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
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_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
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES      :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+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
+
+  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 ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      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 "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    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'`
+  { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# 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=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  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
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;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
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+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"; } &&
+  { 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
+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;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  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.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    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'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    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'`
+    { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+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 # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+  # Remove --cache-file and --srcdir arguments so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  eval "set x $ac_configure_args"
+  shift
+  for ac_arg
+  do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -cache-file | --cache-file | --cache-fil | --cache-fi \
+    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+      ac_prev=cache_file ;;
+    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+    | --c=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    *)
+      case $ac_arg in
+      *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      esac
+      ac_sub_configure_args="$ac_sub_configure_args '$ac_arg'" ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_arg="--prefix=$prefix"
+  case $ac_arg in
+  *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+  # Pass --silent
+  if test "$silent" = yes; then
+    ac_sub_configure_args="--silent $ac_sub_configure_args"
+  fi
+
+  ac_popdir=`pwd`
+  for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+    # Do not complain, so a configure script can configure whichever
+    # parts of a large source tree are present.
+    test -d "$srcdir/$ac_dir" || continue
+
+    ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+    echo "$as_me:$LINENO: $ac_msg" >&5
+    echo "$ac_msg" >&6
+    { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+
+    cd "$ac_dir"
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      ac_sub_configure=$ac_srcdir/configure.gnu
+    elif test -f "$ac_srcdir/configure"; then
+      ac_sub_configure=$ac_srcdir/configure
+    elif test -f "$ac_srcdir/configure.in"; then
+      # This should be Cygnus configure.
+      ac_sub_configure=$ac_aux_dir/configure
+    else
+      { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5
+echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+      ac_sub_configure=
+    fi
+
+    # The recursion is here.
+    if test -n "$ac_sub_configure"; then
+      # Make the cache file name correct relative to the subdirectory.
+      case $cache_file in
+      [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+      *) # Relative name.
+       ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+      esac
+
+      { echo "$as_me:$LINENO: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+      # The eval makes quoting arguments work.
+      eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+          --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+       { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5
+echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    cd "$ac_popdir"
+  done
+fi
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..12f5aeb
--- /dev/null
@@ -0,0 +1,57 @@
+# This file is part of the nesC compiler.
+# 
+# This file is derived from the RC Compiler. It is thus
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# Changes for nesC are
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+dnl -*- m4 -*-
+
+# force autoconf 2.5 on Debian systems
+AC_PREREQ(2.50)
+
+AC_INIT(nesc, 1.3.0)
+AC_CONFIG_AUX_DIR(config-aux)
+
+AM_INIT_AUTOMAKE
+
+AC_CONFIG_SUBDIRS(src libiberty libcpp)
+
+AC_PROG_CC
+
+AC_PATH_PROG(pathperl, perl)
+if test -z "$pathperl" ; then
+  AC_MSG_ERROR(I can't find perl); 
+fi
+
+AC_OUTPUT(
+       Makefile
+       doc/Makefile
+       tools/Makefile
+       tools/nescc-mig
+       tools/nescc-ncg
+       tools/nescc
+       tools/nescc-diff
+       tools/nescc-wiring
+       tools/java/Makefile
+       tools/java/net/Makefile
+       tools/java/net/tinyos/Makefile
+       tools/java/net/tinyos/nesc/Makefile
+       tools/java/net/tinyos/nesc/wiring/Makefile
+       tools/java/net/tinyos/nesc/dump/Makefile
+       tools/java/net/tinyos/nesc/dump/xml/Makefile
+)
diff --git a/doc/COPYING-DOC b/doc/COPYING-DOC
new file mode 100644 (file)
index 0000000..4a0fe1c
--- /dev/null
@@ -0,0 +1,397 @@
+               GNU Free Documentation License
+                 Version 1.2, November 2002
+
+
+ Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The "Document", below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as "you".  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject.  (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification.  Examples of
+transparent image formats include PNG, XCF and JPG.  Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has fewer than five),
+   unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+   to it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section Entitled "History" in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the "History" section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+   Preserve the Title of the section, and preserve in the section all
+   the substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements".  Such a section
+   may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+   or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications".  You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+    Copyright (c)  YEAR  YOUR NAME.
+    Permission is granted to copy, distribute and/or modify this document
+    under the terms of the GNU Free Documentation License, Version 1.2
+    or any later version published by the Free Software Foundation;
+    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+    A copy of the license is included in the section entitled "GNU
+    Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+    with the Invariant Sections being LIST THEIR TITLES, with the
+    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/doc/COPYRIGHT b/doc/COPYRIGHT
new file mode 100644 (file)
index 0000000..e8fbdad
--- /dev/null
@@ -0,0 +1,7 @@
+All documentation in this directory is 
+  Copyright (C) 2002-2005 Intel Corporation
+
+Permission is granted to copy, distribute and/or modify these documents
+under the terms of the GNU Free Documentation License, Version 1.2;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+Texts.  A copy of the license is included in the file COPYING-DOC.
diff --git a/doc/INDEX b/doc/INDEX
new file mode 100644 (file)
index 0000000..727c69d
--- /dev/null
+++ b/doc/INDEX
@@ -0,0 +1,12 @@
+- README summarises the changes in nesC since version 1.0
+- ref.pdf is the nesC reference manual
+- the user directory contains introductions to the new nesC 1.2 features
+- the dump directory contains the schema definition for nesC's XML
+  information dump facility (see user/attributes.txt)
+- nesc-debugging.html describes how to debug nesC code using gdb
+- mica-debugging.html describes how to use the Atmel JTAG interface to
+  debug mica-family motes
+- envtarget.html describes the "env" target which can be used to quickly
+  port nesC to a new target platform which already supports gcc
+- nescc.1 and nescc-mig.1 are man pages for the nesC compiler and the
+  message interface generator tool
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..6c08d7c
--- /dev/null
@@ -0,0 +1,43 @@
+AUTOMAKE_OPTIONS = foreign
+
+nccdatadir=$(datadir)/ncc
+nccdocdir=$(nccdatadir)/doc
+userdocdir=$(nccdocdir)/user
+dumpdocdir=$(nccdocdir)/dump
+dbgdocdir=$(nccdocdir)/debugging_files
+
+
+dist_man_MANS = nescc.1 nescc-mig.1 nescc-ncg.1 nescc-wiring.1
+
+nccdoc_DATA =                                  \
+       COPYING-DOC                             \
+       COPYRIGHT                               \
+       INDEX                                   \
+       OVERVIEW                                \
+       ../README                               \
+       mica-debugging.html                     \
+       envtarget.html                          \
+       nesc-debugging.html                     \
+       ref.pdf
+
+dbgdoc_DATA =                                  \
+       $(wildcard debugging_files/*.jpg)
+
+dumpdoc_DATA =                                 \
+       $(wildcard dump/*.dsd)
+
+userdoc_DATA=                                  \
+       $(wildcard user/*.txt)
+
+EXTRA_DIST =                                   \
+       ref.tex                                 \
+       $(nccdoc_DATA)                          \
+       $(userdoc_DATA)                         \
+       $(dumpdoc_DATA)                         \
+       $(dbgdoc_DATA)
+
+update-ref: 
+       pdflatex ref.tex
+       bibtex ref
+       pdflatex ref.tex
+       pdflatex ref.tex
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..66c99dd
--- /dev/null
@@ -0,0 +1,470 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc
+DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbgdocdir)" \
+       "$(DESTDIR)$(dumpdocdir)" "$(DESTDIR)$(nccdocdir)" \
+       "$(DESTDIR)$(userdocdir)"
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+dbgdocDATA_INSTALL = $(INSTALL_DATA)
+dumpdocDATA_INSTALL = $(INSTALL_DATA)
+nccdocDATA_INSTALL = $(INSTALL_DATA)
+userdocDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(dbgdoc_DATA) $(dumpdoc_DATA) $(nccdoc_DATA) $(userdoc_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+nccdatadir = $(datadir)/ncc
+nccdocdir = $(nccdatadir)/doc
+userdocdir = $(nccdocdir)/user
+dumpdocdir = $(nccdocdir)/dump
+dbgdocdir = $(nccdocdir)/debugging_files
+dist_man_MANS = nescc.1 nescc-mig.1 nescc-ncg.1 nescc-wiring.1
+nccdoc_DATA = \
+       COPYING-DOC                             \
+       COPYRIGHT                               \
+       INDEX                                   \
+       OVERVIEW                                \
+       ../README                               \
+       mica-debugging.html                     \
+       envtarget.html                          \
+       nesc-debugging.html                     \
+       ref.pdf
+
+dbgdoc_DATA = \
+       $(wildcard debugging_files/*.jpg)
+
+dumpdoc_DATA = \
+       $(wildcard dump/*.dsd)
+
+userdoc_DATA = \
+       $(wildcard user/*.txt)
+
+EXTRA_DIST = \
+       ref.tex                                 \
+       $(nccdoc_DATA)                          \
+       $(userdoc_DATA)                         \
+       $(dumpdoc_DATA)                         \
+       $(dbgdoc_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  doc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-dbgdocDATA: $(dbgdoc_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(dbgdocdir)" || $(MKDIR_P) "$(DESTDIR)$(dbgdocdir)"
+       @list='$(dbgdoc_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dbgdocDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(dbgdocdir)/$$f'"; \
+         $(dbgdocDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(dbgdocdir)/$$f"; \
+       done
+
+uninstall-dbgdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dbgdoc_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(dbgdocdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(dbgdocdir)/$$f"; \
+       done
+install-dumpdocDATA: $(dumpdoc_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(dumpdocdir)" || $(MKDIR_P) "$(DESTDIR)$(dumpdocdir)"
+       @list='$(dumpdoc_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dumpdocDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(dumpdocdir)/$$f'"; \
+         $(dumpdocDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(dumpdocdir)/$$f"; \
+       done
+
+uninstall-dumpdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dumpdoc_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(dumpdocdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(dumpdocdir)/$$f"; \
+       done
+install-nccdocDATA: $(nccdoc_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(nccdocdir)" || $(MKDIR_P) "$(DESTDIR)$(nccdocdir)"
+       @list='$(nccdoc_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nccdocDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(nccdocdir)/$$f'"; \
+         $(nccdocDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(nccdocdir)/$$f"; \
+       done
+
+uninstall-nccdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nccdoc_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(nccdocdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(nccdocdir)/$$f"; \
+       done
+install-userdocDATA: $(userdoc_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(userdocdir)" || $(MKDIR_P) "$(DESTDIR)$(userdocdir)"
+       @list='$(userdoc_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(userdocDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(userdocdir)/$$f'"; \
+         $(userdocDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(userdocdir)/$$f"; \
+       done
+
+uninstall-userdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(userdoc_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(userdocdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(userdocdir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbgdocdir)" "$(DESTDIR)$(dumpdocdir)" "$(DESTDIR)$(nccdocdir)" "$(DESTDIR)$(userdocdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dbgdocDATA install-dumpdocDATA install-man \
+       install-nccdocDATA install-userdocDATA
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dbgdocDATA uninstall-dumpdocDATA uninstall-man \
+       uninstall-nccdocDATA uninstall-userdocDATA
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dbgdocDATA install-dumpdocDATA install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-man1 install-nccdocDATA install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip install-userdocDATA \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-dbgdocDATA \
+       uninstall-dumpdocDATA uninstall-man uninstall-man1 \
+       uninstall-nccdocDATA uninstall-userdocDATA
+
+
+update-ref: 
+       pdflatex ref.tex
+       bibtex ref
+       pdflatex ref.tex
+       pdflatex ref.tex
+# 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/doc/OVERVIEW b/doc/OVERVIEW
new file mode 100644 (file)
index 0000000..3bb74b4
--- /dev/null
@@ -0,0 +1,11 @@
+- ref.pdf is the nesC reference manual
+- the user directory contains introductions to the new nesC 1.2 features
+- the dump directory contains the schema definition for nesC's XML
+  information dump facility (see user/attributes.txt)
+- nesc-debugging.html describes how to debug nesC code using gdb
+- mica-debugging.html describes how to use the Atmel JTAG interface to
+  debug mica-family motes
+- envtarget.html describes the "env" target which can be used to quickly
+  port nesC to a new target platform which already supports gcc
+- nescc.1 and nescc-mig.1 are man pages for the nesC compiler and the
+  message interface generator tool
diff --git a/doc/debugging_files/complete-setup.jpg b/doc/debugging_files/complete-setup.jpg
new file mode 100644 (file)
index 0000000..3c4d056
Binary files /dev/null and b/doc/debugging_files/complete-setup.jpg differ
diff --git a/doc/debugging_files/jtagpod.jpg b/doc/debugging_files/jtagpod.jpg
new file mode 100644 (file)
index 0000000..1c68a54
Binary files /dev/null and b/doc/debugging_files/jtagpod.jpg differ
diff --git a/doc/debugging_files/micamod.jpg b/doc/debugging_files/micamod.jpg
new file mode 100644 (file)
index 0000000..d3372e6
Binary files /dev/null and b/doc/debugging_files/micamod.jpg differ
diff --git a/doc/debugging_files/progboard.jpg b/doc/debugging_files/progboard.jpg
new file mode 100644 (file)
index 0000000..539621b
Binary files /dev/null and b/doc/debugging_files/progboard.jpg differ
diff --git a/doc/dump/attributes.dsd b/doc/dump/attributes.dsd
new file mode 100644 (file)
index 0000000..12d4739
--- /dev/null
@@ -0,0 +1,94 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <m:doc>Many attribute names have the same format everywhere
+    (some contents may choose to place further restrictions).
+    Declare those global rules here.
+    Attributes which rely on these rules will have no `stringtype ref'
+    Currently: name, qname, ref, size, alignment, value, scoped, loc</m:doc>
+
+  <m:doc>A unique identifier for the entity denoted by this element. For
+    instance, a "variable-ref" and a "variable" denoting the same C
+    variable will have the same unique value for their ref attribute.</m:doc>
+  <if>
+    <attribute name="ref"/>
+    <require>
+      <attribute name="ref">
+        <stringtype ref="nesc:ref"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <if>
+    <attribute name="name"/>
+    <require>
+      <attribute name="name">
+        <stringtype ref="nesc:identifier"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <m:doc>The name of a nesC component or interface. This is guaranteed to be
+    unique, so serves as an identifier. The name of generic component
+    instantiations represents their instantiation "path", e.g., generic
+    module Foo instantiated in configuration Bar is Bar.Foo, and generic
+    module Foo instantiated in generic configuration Baz, itself instantiated
+    in configuration Main is Main.Baz.Foo</m:doc>
+  <if>
+    <attribute name="qname"/>
+    <require>
+      <attribute name="qname">
+        <stringtype ref="nesc:path"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <m:doc>Present on entities (e.g., variables) that are non-global</m:doc>
+  <if>
+    <attribute name="scoped"/>
+    <require>
+      <attribute name="scoped">
+        <stringtype ref="nesc:empty"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <if>
+    <attribute name="size"/>
+    <require>
+      <attribute name="size">
+        <stringtype ref="nesc:constant"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <if>
+    <attribute name="alignment"/>
+    <require>
+      <attribute name="alignment">
+        <stringtype ref="nesc:constant"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <if>
+    <attribute name="cst"/>
+    <require>
+      <attribute name="cst">
+        <stringtype ref="nesc:constant"/>
+      </attribute>
+    </require>
+  </if>
+   
+  <m:doc>A source code location.</m:doc>
+  <if>
+    <attribute name="loc"/>
+    <require>
+      <attribute name="loc">
+        <stringtype ref="nesc:location"/>
+      </attribute>
+    </require>
+  </if>
+   
+</dsd>
diff --git a/doc/dump/basic.dsd b/doc/dump/basic.dsd
new file mode 100644 (file)
index 0000000..e9ee56c
--- /dev/null
@@ -0,0 +1,363 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <m:doc>XML specifications for basic elements: 
+    - references to declarable entities (variables, constants, functions, 
+      typedefs, interfaces, interface definitions, components, enums, 
+      structs, unions)
+    - types
+    - values (regular constants and structured values from C {} initialisers)
+    - attributes
+    - documentation strings
+  </m:doc>
+
+  <m:doc>A reference to a component or to an interface definition</m:doc>
+  <boolexp id="nesc:ndecl-ref">
+    <or>
+      <element name="nesc:interfacedef-ref"/>
+      <element name="nesc:component-ref"/>
+    </or>
+  </boolexp>
+
+  <m:doc>The qname uniquely identifies the interface definition or component.
+  </m:doc>
+  <if>
+    <boolexp ref="nesc:ndecl-ref"/>
+    <declare>
+      <required><attribute name="qname"/></required>
+    </declare>
+  </if>
+
+  <m:doc>An instance of a component or interface. The number attribute
+    is present for real instances of generic components.</m:doc>
+  <if>
+    <element name="nesc:instance"/>
+    <declare>
+      <attribute name="number"><stringtype ref="nesc:number"/></attribute>
+      <contents>
+        <optional><element name="nesc:arguments"/></optional>
+      </contents>
+      <contents><boolexp ref="nesc:ndecl-ref"/></contents>
+    </declare>
+  </if>
+
+  <m:doc>A simple value. Contains constant value (might be V:) and its type
+  </m:doc>
+  <if>
+    <element name="nesc:value"/>
+    <declare>
+      <required>
+        <attribute name="cst"/>
+      </required>
+      <contents>
+       <boolexp ref="nesc:type"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>A structured value (from a C { ... } initialiser).
+    All of these have a type as their first element.</m:doc>
+  <boolexp id="nesc:ivalue">
+    <or>
+      <element name="nesc:value-structured"/>  
+      <element name="nesc:value-array"/>  
+      <element name="nesc:value"/>
+    </or>
+  </boolexp>
+
+  <m:doc>Enforce the "type as first element" rule</m:doc>
+  <if>
+    <boolexp ref="nesc:ivalue"/>
+    <require>
+      <contents>
+        <sequence>
+          <boolexp ref="nesc:type"/>
+          <repeat>
+           <element/>
+         </repeat>
+       </sequence>
+      </contents>
+    </require>
+  </if>
+
+
+  <m:doc>A struct or union value (from a C { ... } initialiser), the
+    structured-elements are the initialised fields (unitialised fields
+    are just absent). </m:doc>
+  <if>
+    <element name="nesc:value-structured"/>
+    <declare>
+      <contents>
+        <sequence>
+         <boolexp ref="nesc:type"/>
+          <repeat>
+           <element name="nesc:structured-element"/>
+         </repeat>
+       </sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:structured-element"/>
+    <declare>
+      <required>
+        <attribute name="field"><stringtype ref="nesc:identifier"/></attribute>
+        <attribute name="ref"/>
+      </required>
+      <contents>
+       <boolexp ref="nesc:ivalue"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>An array value (from a C { ... } initialiser), the
+    array-elements are the initialised array elements (unitialised elements
+    are just absent).</m:doc>
+  <if>
+    <element name="nesc:value-array"/>
+    <declare>
+      <contents>
+        <sequence>
+          <boolexp ref="nesc:type"/>
+          <repeat>
+           <element name="nesc:array-element"/>
+         </repeat>
+       </sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:array-element"/>
+    <declare>
+      <required>
+        <attribute name="from"><stringtype ref="nesc:number"/></attribute>
+        <attribute name="to"><stringtype ref="nesc:number"/></attribute>
+      </required>
+      <contents>
+       <boolexp ref="nesc:ivalue"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>A nesC type. Purposefully does not contain type-error (bug
+    indicator). All have size and alignment attributes (though these
+    may be V:).</m:doc>
+  <boolexp id="nesc:type">
+    <or>
+      <element name="nesc:type-int"/>
+      <element name="nesc:type-float"/>
+      <element name="nesc:type-complex-int"/>
+      <element name="nesc:type-complex-float"/>
+      <element name="nesc:type-void"/>
+      <element name="nesc:type-qualified"/>
+      <element name="nesc:type-pointer"/>
+      <element name="nesc:type-array"/>
+      <element name="nesc:type-function"/>
+      <element name="nesc:type-tag"/>
+      <element name="nesc:type-interface"/>
+      <element name="nesc:type-component"/>
+      <element name="nesc:type-var"/>
+    </or>
+  </boolexp>
+
+  <m:doc>Every type has a size and alignment attribute, and, optionally, 
+    the name of the typedef this type corresponds to (we can't just have
+    a typedef-ref, as that would cause confusion with type-var).</m:doc>
+  <if>
+    <boolexp ref="nesc:type"/>
+    <declare>
+      <required>
+        <attribute name="size"/>
+        <attribute name="alignment"/>
+      </required>
+      <m:doc>The network attribute is present for network base types. Its
+       value is the network base type name.</m:doc>
+      <attribute name="network">
+       <stringtype ref="nesc:identifier"/>
+      </attribute>
+      <contents>
+       <optional><element name="nesc:typename"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>The typename element is just a reference to a typedef</m:doc>
+  <if>    
+    <element name="nesc:typename"/>
+    <declare>
+      <contents>
+        <element name="nesc:typedef-ref"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Base types just include the C base type name</m:doc>
+  <if>
+    <or>
+      <element name="nesc:type-int"/>
+      <element name="nesc:type-float"/>
+      <element name="nesc:type-complex-int"/>
+      <element name="nesc:type-complex-float"/>
+    </or>
+    <declare>
+      <required>
+        <attribute name="cname"><stringtype ref="nesc:c-base-type"/></attribute>
+      </required>
+    </declare>
+  </if>
+
+  <m:doc>Integer and complex integer types may have an unsigned attribute</m:doc>
+  <if>
+    <or>
+      <element name="nesc:type-int"/>
+      <element name="nesc:type-complex-int"/>
+    </or>
+    <declare>
+      <attribute name="unsigned"><stringtype ref="nesc:empty"/></attribute>
+    </declare>
+  </if>
+
+  <m:doc>Types that contain a single embedded type</m:doc>
+  <if>
+    <or>
+      <element name="nesc:type-qualified"/>
+      <element name="nesc:type-pointer"/>
+      <element name="nesc:type-array"/>
+    </or>
+    <declare>
+      <contents>
+        <boolexp ref="nesc:type"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Qualified types contain an empty attribute for each qualifier present
+  </m:doc>
+  <if>
+    <element name="nesc:type-qualified"/>
+    <declare>
+      <attribute name="const"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="volatile"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="__restrict"><stringtype ref="nesc:empty"/></attribute>
+    </declare>
+  </if>
+
+  <m:doc>Array types include a number of elements. An unspecified number
+       of elements is represented as a non-constant value for the elements
+        attribute.</m:doc>
+  <if>
+    <element name="nesc:type-array"/>
+    <declare>
+      <required>
+        <attribute name="elements"><stringtype ref="nesc:constant"/></attribute>
+      </required>
+    </declare>
+  </if>
+
+  <m:doc>Function types may be varargs or oldstyle. They contain a type
+    list (arguments) and a return type.</m:doc>
+  <if>
+    <element name="nesc:type-function"/>
+    <declare>
+      <attribute name="varargs"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="oldstyle"><stringtype ref="nesc:empty"/></attribute>
+      <contents>
+        <sequence>
+         <boolexp ref="nesc:type"/>
+         <optional><element name="nesc:function-parameters"/></optional>
+       </sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:function-parameters"/>
+    <declare>
+      <contents>
+        <repeat><boolexp ref="nesc:type"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Tag types contain a tag reference</m:doc>
+  <if>
+    <element name="nesc:type-tag"/>
+    <declare>
+      <contents>
+        <boolexp ref="nesc:tag-ref"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Interface types contain an interface reference</m:doc>
+  <if>
+    <element name="nesc:type-interface"/>
+    <declare>
+      <contents>
+        <element name="nesc:interface-ref"/>
+      </contents>
+    </declare>
+  </if>
+  
+  <m:doc>Component types contain an internal component reference.
+    These are the type of a component name inside a configuration, i.e.,
+    the type of X in `components Y as X'. Note that `components Y' is
+    just a shortcut for `components Y as Y', the two Y's are in different
+    namespaces.</m:doc>
+  <if>
+    <element name="nesc:type-component"/>
+    <declare>
+      <contents>
+        <element name="nesc:internal-component-ref"/>
+      </contents>
+    </declare>
+  </if>
+  
+  <m:doc>Type variables contain a reference to a typedef (whose type is
+    itself this type)</m:doc>
+  <if>
+    <element name="nesc:type-var"/>
+    <declare>
+      <contents>
+        <element name="nesc:typedef-ref"/>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>An attribute with its initialiser</m:doc>
+  <if>
+    <element name="nesc:attribute-value"/>
+    <declare>
+      <contents><element name="nesc:value-structured"/></contents>
+      <contents><element name="nesc:attribute-ref"/></contents>
+    </declare>
+  </if>
+
+  <m:doc>A documentation string</m:doc>
+  <if>
+    <element name="nesc:documentation"/>
+    <declare>
+      <required><attribute name="loc"/></required>
+      <m:doc>A short string is always present, a long one is optional.</m:doc>
+      <contents><element name="nesc:short"/></contents>
+      <contents>
+       <optional><element name="nesc:long"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>nesdoc strings have arbitrary contents</m:doc>
+  <if>
+    <or>
+      <element name="nesc:short"/>
+      <element name="nesc:long"/>
+    </or>
+    <declare>
+      <contents><string/></contents>
+    </declare>
+  </if>
+
+</dsd>
diff --git a/doc/dump/cobject.dsd b/doc/dump/cobject.dsd
new file mode 100644 (file)
index 0000000..a10c85c
--- /dev/null
@@ -0,0 +1,189 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <m:doc>A reference to a C object, i.e., a variable, constant, function,
+    typedef, interface, or component-within-a-configuration. The "ref"
+    attribute uniquely identifiers the particular object.</m:doc>
+  <if>
+    <or>
+      <element name="nesc:variable-ref"/>
+      <element name="nesc:constant-ref"/>
+      <element name="nesc:function-ref"/>
+      <element name="nesc:typedef-ref"/>
+      <element name="nesc:interface-ref"/>
+      <element name="nesc:internal-component-ref"/>
+    </or>
+    <declare>
+      <required>
+        <attribute name="name"/>
+        <attribute name="ref"/>
+      </required>
+      <attribute name="scoped"/>
+    </declare>
+  </if>
+
+  <m:doc>Definition of a C object, i.e., a variable, constant, function,
+    typedef, interface, or component-within-a-configuration. The "ref"
+    attribute uniquely identifiers the particular object.</m:doc>
+  <if>
+    <or>
+      <element name="nesc:variable"/>
+      <element name="nesc:constant"/>
+      <element name="nesc:function"/>
+      <element name="nesc:typedef"/>
+      <element name="nesc:interface"/>
+      <element name="nesc:internal-component"/>
+    </or>
+    <declare>
+      <required>
+        <attribute name="loc"/>
+        <attribute name="ref"/>
+      </required>
+      <m:doc>Parameter names may be omitted in declarations</m:doc>
+      <attribute name="name"/>
+
+      <m:doc>Order of these elements is unimportant</m:doc>
+      <contents><boolexp ref="nesc:type"/></contents>
+      <contents><contenttype ref="nesc:attributes"/></contents>
+      <contents><contenttype ref="nesc:container"/></contents>
+      <contents>
+       <optional><element name="nesc:documentation"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Lists of C objects</m:doc>  
+  <if>
+    <element name="nesc:constants"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:constant"/></repeat>
+      </contents>
+    </declare>
+  </if>
+  <if>
+    <element name="nesc:functions"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:function"/></repeat>
+      </contents>
+    </declare>
+  </if>
+  <if>
+    <element name="nesc:variables"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:variable"/></repeat>
+      </contents>
+    </declare>
+  </if>
+  <if>
+    <element name="nesc:typedefs"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:typedef"/></repeat>
+      </contents>
+    </declare>
+  </if>
+  <if>
+    <element name="nesc:interfaces"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:interface"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+
+  <if>
+    <element name="nesc:interface"/>
+    <declare>
+      <required>
+       <attribute name="provided"><stringtype ref="nesc:bool"/></attribute>
+      </required>
+
+      <m:doc>Order of these elements is unimportant</m:doc>
+
+      <m:doc>Which interface definition this is an instance of.</m:doc>
+      <contents><element name="nesc:instance"/></contents>
+
+      <m:doc>The actual functions for this instance of the interface.</m:doc>
+      <contents><element name="nesc:interface-functions"/></contents>
+
+      <contents>
+        <m:doc>Parameters for parameterised interfaces</m:doc>
+        <optional><element name="nesc:interface-parameters"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:interface-parameters"/>
+    <declare>
+      <contents>
+        <sequence><boolexp ref="nesc:type"/></sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:interface-functions"/>
+    <declare>
+      <contents>
+        <repeat min="1"><element name="nesc:function-ref"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:constant"/>
+    <declare>
+      <m:doc>Generic component arguments are constants with no value
+       --> the cst attribute is optional</m:doc>
+      <attribute name="nesc:cst"/>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:function"/>
+    <declare>
+      <m:doc>Commands and events have one of the following attributes.</m:doc>
+      <attribute name="command"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="event"><stringtype ref="nesc:empty"/></attribute>
+
+      <m:doc>Safe functions (Deputy enabled) have the following attribute.</m:doc>
+      <attribute name="safe"><stringtype ref="nesc:empty"/></attribute>
+
+      <contents>
+       <m:doc>Function parameters. Absent for old-style functions and
+         built-in functions.</m:doc>
+       <optional><element name="nesc:parameters"/></optional>
+
+       <m:doc>Parameters of parameterised functions (as in void foo[...](...))</m:doc>
+       <optional><element name="nesc:instance-parameters"/></optional>
+
+        <m:doc>Present for commands and events from actual interfaces
+         (but not for those in interface definitions)</m:doc>
+        <optional><element name="nesc:interface-ref"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>commands and events in specifications have a provided attribute</m:doc>
+  <if>
+    <and>
+      <element name="nesc:function"/>
+      <or>
+        <attribute name="command"/>
+        <attribute name="event"/>
+      </or>
+    </and>
+    <declare>
+      <required>
+       <attribute name="provided"><stringtype ref="nesc:bool"/></attribute>
+      </required>
+    </declare>
+  </if>
+
+</dsd>
diff --git a/doc/dump/common.dsd b/doc/dump/common.dsd
new file mode 100644 (file)
index 0000000..7b08c9f
--- /dev/null
@@ -0,0 +1,68 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <m:doc>nesC elements can be contained in nothing (global scope), a
+    component, or a function</m:doc>
+  <contenttype id="nesc:container">
+    <optional>
+      <or>
+        <element name="nesc:component-ref"/>
+        <element name="nesc:interfacedef-ref"/>
+        <element name="nesc:function-ref"/>
+      </or>
+    </optional>
+  </contenttype>
+
+  <m:doc>Attribute list.</m:doc>
+  <contenttype id="nesc:attributes">
+    <repeat><element name="nesc:attribute-value"/></repeat>
+  </contenttype>
+
+  <m:doc>Argument list</m:doc>
+  <if>
+    <element name="nesc:arguments"/>
+    <declare>
+      <contents>
+        <repeat>
+         <union>
+           <boolexp ref="nesc:type"/>
+           <element name="nesc:value"/>
+         </union>
+       </repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Parameter list</m:doc>
+  <if>
+    <element name="nesc:parameters"/>
+    <declare>
+      <contents>
+        <sequence>
+          <repeat>
+           <or>
+             <m:doc>variables are regular function arguments, constants and
+               typedefs are used for generic component arguments.</m:doc>
+             <element name="nesc:variable"/>
+             <element name="nesc:constant"/>
+             <element name="nesc:typedef"/>
+           </or>
+          </repeat>
+         <optional><element name="nesc:varargs"/></optional>
+       </sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Parameters of parameterised functions (void foo[...](...))</m:doc>
+  <if>
+    <element name="nesc:instance-parameters"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:variable"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+</dsd>
diff --git a/doc/dump/component.dsd b/doc/dump/component.dsd
new file mode 100644 (file)
index 0000000..fe538c1
--- /dev/null
@@ -0,0 +1,64 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <if>
+    <element name="nesc:components"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:component"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:component"/>
+    <declare>
+      <required>
+        <m:doc>Uniquely identifies the component.</m:doc>
+        <attribute name="qname"/>
+
+        <attribute name="loc"/>
+      </required>
+      <m:doc>Present if the component is not, or not fully, instantiated</m:doc>
+      <attribute name="abstract"><stringtype ref="nesc:empty"/></attribute>
+
+      <m:doc>Safe components (Deputy enabled) have the following attribute.</m:doc>
+      <attribute name="safe"><stringtype ref="nesc:empty"/></attribute>
+
+      <m:doc>Order of these elements is unimportant</m:doc>
+      <contents>
+        <m:doc>What generic component this is an instance of.</m:doc>
+        <optional><element name="nesc:instance"/></optional>
+      </contents>
+      <contents>
+        <m:doc>Present for generic components</m:doc>
+        <optional><element name="nesc:parameters"/></optional>
+      </contents>
+      <contents><contenttype ref="nesc:attributes"/></contents>
+      <contents>
+        <or>
+         <element name="nesc:configuration"/>
+         <element name="nesc:module"/>
+       </or>
+      </contents>
+      <contents>
+       <optional><element name="nesc:documentation"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>Configurations may contain a wiring graph</m:doc>
+  <if>
+    <and>
+      <element name="nesc:component"/>
+      <child><element name="nesc:configuration"/></child>
+    </and>
+    <declare>
+      <contents>
+        <optional><element name="nesc:wiring"/></optional>
+      </contents>
+    </declare>
+  </if>
+    
+</dsd>
diff --git a/doc/dump/interfacedef.dsd b/doc/dump/interfacedef.dsd
new file mode 100644 (file)
index 0000000..a780bd0
--- /dev/null
@@ -0,0 +1,36 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <if>
+    <element name="nesc:interfacedefs"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:interfacedef"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:interfacedef"/>
+    <declare>
+      <required>
+        <attribute name="qname"/>
+        <attribute name="loc"/>
+      </required>
+      <m:doc>Order of these elements is unimportant</m:doc>
+      <contents>
+       <m:doc>Parameters of generic interfaces.</m:doc>
+        <optional><element name="nesc:parameters"/></optional>
+      </contents>
+      <contents><contenttype ref="nesc:attributes"/></contents>
+      <contents>
+       <repeat><element name="nesc:function"/></repeat>
+      </contents>
+      <contents>
+       <optional><element name="nesc:documentation"/></optional>
+      </contents>
+    </declare>
+  </if>
+
+</dsd>
diff --git a/doc/dump/nesc.dsd b/doc/dump/nesc.dsd
new file mode 100644 (file)
index 0000000..1f352c9
--- /dev/null
@@ -0,0 +1,37 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC"
+     root="nesc:nesc">
+
+  <m:doc> DSD2 schema for nesC XML dump</m:doc>
+
+  <import href="regexps.dsd"/>
+  <import href="attributes.dsd"/>
+  <import href="basic.dsd"/>
+  <import href="common.dsd"/>
+  <import href="cobject.dsd"/>
+
+  <m:doc>Top-level elements</m:doc>
+  <import href="component.dsd"/>
+  <import href="interfacedef.dsd"/>
+  <import href="tag.dsd"/>
+  <import href="wiring.dsd"/>
+
+
+  <if><element name="nesc:nesc"/>
+    <declare>
+      <contents>
+       <optional><element name="nesc:wiring"/></optional>
+      </contents>
+      <contents><element name="nesc:components"/></contents>
+      <contents><element name="nesc:interfaces"/></contents>
+      <contents><element name="nesc:interfacedefs"/></contents>
+      <contents><element name="nesc:tags"/></contents>
+      <contents><element name="nesc:constants"/></contents>
+      <contents><element name="nesc:functions"/></contents>
+      <contents><element name="nesc:variables"/></contents>
+      <contents><element name="nesc:typedefs"/></contents>
+    </declare>
+  </if>
+
+</dsd>
diff --git a/doc/dump/regexps.dsd b/doc/dump/regexps.dsd
new file mode 100644 (file)
index 0000000..5b7780e
--- /dev/null
@@ -0,0 +1,190 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <stringtype id="nesc:letter">
+    <union>
+      <char min="A" max="Z"/>
+      <char min="a" max="z"/>
+      <char set="_"/>
+    </union>
+  </stringtype>
+
+  <stringtype id="nesc:digit">
+    <char min="0" max="9"/>
+  </stringtype>
+
+  <m:doc>A regular expression for a nesC identifier</m:doc>
+  <stringtype id="nesc:identifier">
+    <sequence>
+      <stringtype ref="nesc:letter"/>
+      <repeat>
+        <union>
+          <stringtype ref="nesc:letter"/>
+          <stringtype ref="nesc:digit"/>
+        </union>
+      </repeat>
+    </sequence>
+  </stringtype>
+
+  <m:doc>A regular expression for a nesC identifier path separated by `.'
+        (used, e.g., for component instance names)</m:doc>
+  <stringtype id="nesc:path">
+    <sequence>
+      <stringtype ref="nesc:identifier"/>
+      <repeat>
+        <sequence>
+         <char set="."/>
+          <stringtype ref="nesc:identifier"/>
+        </sequence>
+      </repeat>
+    </sequence>
+  </stringtype>
+
+  <m:doc>A regular expression for a C base type (e.g., unsigned long)</m:doc>
+  <stringtype id="nesc:c-base-type">
+    <sequence>
+      <stringtype ref="nesc:identifier"/>
+      <repeat>
+        <sequence>
+         <char set=" "/>
+          <stringtype ref="nesc:identifier"/>
+        </sequence>
+      </repeat>
+    </sequence>
+  </stringtype>
+
+  <m:doc>The regular expression for an integer</m:doc>
+  <stringtype id="nesc:number">
+    <sequence>
+      <optional><char set="-"/></optional>
+      <repeat min="1">
+        <stringtype ref="nesc:digit"/>
+      </repeat>
+    </sequence>
+  </stringtype>
+
+  <m:doc>The regular expression for a real number</m:doc>
+  <stringtype id="nesc:real">
+    <sequence>
+      <stringtype ref="nesc:number"/>
+      <optional>
+        <sequence>
+         <char set="."/>
+          <stringtype ref="nesc:number"/>
+       </sequence>
+      </optional>
+      <optional>
+        <sequence>
+         <char set="eE"/>
+         <optional><char set="+-"/></optional>
+          <stringtype ref="nesc:number"/>
+       </sequence>
+      </optional>
+    </sequence>
+  </stringtype>
+
+  <m:doc>A boolean value (we mostly use presence of an attribute to
+    indicate boolean properites, but there are a few exceptions which
+    use this stringtype instead - mostly to denote binary properties
+    (used vs provided, e.g.) rather than options</m:doc>
+  <stringtype id="nesc:bool">
+    <char min="0" max="1"/>
+  </stringtype>
+
+  <m:doc>The regular expression for the "ref" attribute used to refer
+        to uniquely identify definitions of various items</m:doc>
+  <stringtype id="nesc:ref">
+    <repeat min="1">
+      <union>
+        <stringtype ref="nesc:letter"/>
+        <stringtype ref="nesc:digit"/>
+      </union>
+    </repeat>
+  </stringtype>
+
+  <m:doc>The regular expression for an empty string</m:doc>
+  <stringtype id="nesc:empty">
+    <sequence/>
+  </stringtype>
+
+  <m:doc>The regular expression for a nesC constant. This has the
+    following basic format X:val, where X represents the kind of
+    constant and val it's value. X is I for integers, F for floats,
+    S for strings, U for unknown, and V for variable (not constant)</m:doc>
+  <stringtype id="nesc:constant">
+    <union>
+      <stringtype ref="nesc:constant-int"/>
+      <stringtype ref="nesc:constant-float"/>
+      <stringtype ref="nesc:constant-string"/>
+      <stringtype ref="nesc:constant-unknown"/>
+      <stringtype ref="nesc:constant-not"/>
+    </union>
+  </stringtype>
+
+  <stringtype id="nesc:constant-int">
+    <sequence>
+      <char set="I"/>
+      <char set=":"/>
+      <stringtype ref="nesc:number"/>
+    </sequence>
+  </stringtype>
+  
+  <stringtype id="nesc:constant-float">
+    <sequence>
+      <char set="F"/>
+      <char set=":"/>
+      <stringtype ref="nesc:real"/>
+    </sequence>
+  </stringtype>
+  
+  <stringtype id="nesc:constant-string">
+    <sequence>
+      <char set="S"/>
+      <char set=":"/>
+      <repeat><char/></repeat>
+    </sequence>
+  </stringtype>
+  
+  <stringtype id="nesc:constant-unknown">
+    <sequence>
+      <char set="U"/>
+      <char set=":"/>
+    </sequence>
+  </stringtype>
+  <stringtype id="nesc:constant-not">
+    <sequence>
+      <char set="V"/>
+      <char set=":"/>
+    </sequence>
+  </stringtype>
+
+  <m:doc>Regular expression for a file location (and an optional instantiation
+    path for locations in generic components)</m:doc>
+  <stringtype id="nesc:location">
+    <union>
+      <m:doc>Occasionally, some locations are unknown (e.g., for predefined
+       nesC attributes)</m:doc>
+      <string value="NONE"/>
+
+      <sequence>
+       <m:doc>Line number, never actually negative</m:doc>
+       <stringtype ref="nesc:number"/>
+       <m:doc>An optional generic component instantiation path</m:doc>
+       <optional>
+         <sequence>
+           <char set="("/>
+           <stringtype ref="nesc:path"/>
+           <char set=")"/>
+         </sequence>
+       </optional>
+       <char set=":"/>
+       <m:doc>Filename</m:doc>
+       <repeat><char/></repeat>
+      </sequence>
+    </union>
+  </stringtype>
+
+         
+</dsd>
diff --git a/doc/dump/tag.dsd b/doc/dump/tag.dsd
new file mode 100644 (file)
index 0000000..c7968ad
--- /dev/null
@@ -0,0 +1,127 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <m:doc>A reference to a tag (enum, struct, union, external struct and union)
+  </m:doc>
+  <boolexp id="nesc:tag-ref">
+    <or>
+      <element name="nesc:enum-ref"/>
+      <element name="nesc:struct-ref"/>
+      <element name="nesc:union-ref"/>
+      <element name="nesc:nx_struct-ref"/>
+      <element name="nesc:nx_union-ref"/>
+      <element name="nesc:attribute-ref"/>
+    </or>
+  </boolexp>
+
+  <if>
+    <boolexp ref="nesc:tag-ref"/>
+    <declare>
+      <required>
+        <attribute name="ref"/>
+      </required>
+      <m:doc>There is no location if there is no actual definition of the tag
+      </m:doc>
+      <attribute name="loc"/>
+      <attribute name="name"/>
+      <attribute name="scoped"/>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:tags"/>
+    <declare>
+      <contents>
+        <repeat><boolexp ref="nesc:tag"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <boolexp id="nesc:tag">
+    <or>
+      <element name="nesc:struct"/>
+      <element name="nesc:union"/>
+      <element name="nesc:nx_struct"/>
+      <element name="nesc:nx_union"/>
+      <element name="nesc:attribute"/>
+      <element name="nesc:enum"/>
+    </or>
+  </boolexp>
+
+  <if>
+    <boolexp ref="nesc:tag"/>
+    <declare>
+      <required>
+        <attribute name="ref"/>
+        <attribute name="size"/>
+        <attribute name="alignment"/>
+      </required>
+      <attribute name="name"/>
+      <attribute name="defined"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="packed"><stringtype ref="nesc:empty"/></attribute>
+      <attribute name="scoped"><stringtype ref="nesc:empty"/></attribute>
+
+      <m:doc>Present when there is an actual definition.</m:doc>
+      <attribute name="loc"/>
+
+      <m:doc>May be in a container, may have attributes</m:doc>
+      <contents><contenttype ref="nesc:container"/></contents>
+      <contents><contenttype ref="nesc:attributes"/></contents>
+    </declare>
+  </if>
+                 
+  <m:doc>Non-enums contain a field list</m:doc>
+  <if>
+    <or>
+      <element name="nesc:struct"/>
+      <element name="nesc:union"/>
+      <element name="nesc:nx_struct"/>
+      <element name="nesc:nx_union"/>
+      <element name="nesc:attribute"/>
+    </or>
+    <declare>
+      <contents>
+       <repeat><element name="nesc:field"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:field"/>
+    <declare>
+      <required>
+        <attribute name="name"/>
+       <m:doc>The ref uniquely identifies the field amongst all fields.</m:doc>
+       <attribute name="ref"/>
+       <attribute name="bit-offset"><stringtype ref="nesc:constant"/></attribute>
+      </required>
+      <attribute name="packed"><stringtype ref="nesc:empty"/></attribute>
+      <m:doc>There's either a size or bit-size attribute</m:doc>
+      <attribute name="size"/>
+      <attribute name="bit-size"><stringtype ref="nesc:constant"/></attribute>
+      <contents><boolexp ref="nesc:type"/></contents>
+      <contents><contenttype ref="nesc:attributes"/></contents>
+    </declare>
+  </if>
+
+  <m:doc>Enforce size or bit-size attribute in field rule</m:doc>
+  <if>
+    <element name="field"/>
+    <require>
+      <or>
+        <attribute name="size"/>
+        <attribute name="bit-size"/>
+      </or>
+    </require>
+  </if>
+       
+                 
+  <m:doc>Enums contain a representation type</m:doc>
+  <if>
+    <element name="nesc:enum"/>
+    <declare>
+      <contents><boolexp ref="nesc:type"/></contents>
+    </declare>
+  </if>
+</dsd>
diff --git a/doc/dump/wiring.dsd b/doc/dump/wiring.dsd
new file mode 100644 (file)
index 0000000..d989218
--- /dev/null
@@ -0,0 +1,53 @@
+<dsd xmlns="http://www.brics.dk/DSD/2.0"
+     xmlns:m="http://www.brics.dk/DSD/2.0/meta"
+     xmlns:nesc="http://www.tinyos.net/nesC">
+
+  <if>
+    <element name="nesc:wiring"/>
+    <declare>
+      <contents>
+        <repeat><element name="nesc:wire"/></repeat>
+      </contents>
+    </declare>
+  </if>
+
+  <if>
+    <element name="nesc:wire"/>
+    <declare>
+      <m:doc>Location attributes are present in user-level wiring, absent
+       in function-level wirings.</m:doc>
+      <attribute name="loc"/>
+      <contents>
+        <sequence>
+         <element name="nesc:from"/>
+         <element name="nesc:to"/>
+       </sequence>
+      </contents>
+    </declare>
+  </if>
+
+  <m:doc>A from and to in a wiring just refers to a declaration of
+    an interface or function, with optional arguments for parameterized
+    interfaces.</m:doc>
+  <if>
+    <and>
+      <or>
+        <element name="nesc:from"/>
+        <element name="nesc:to"/>
+      </or>
+      <parent><element name="nesc:wire"/></parent>
+    </and>
+    <declare>
+      <contents>
+        <or>
+         <element name="nesc:function-ref"/>
+         <element name="nesc:interface-ref"/>
+       </or>
+      </contents>
+      <contents>
+        <optional><element name="nesc:arguments"/></optional>
+      </contents>
+    </declare>
+  </if>
+    
+</dsd>
diff --git a/doc/envtarget.html b/doc/envtarget.html
new file mode 100644 (file)
index 0000000..193b97e
--- /dev/null
@@ -0,0 +1,57 @@
+<html>
+<head>
+<title>env target and nesc1</title>
+</head>
+<body>
+
+The <tt>env</tt> target allows the nesC compiler to be configured for a new
+platform without requiring source code changes. It allows specification of
+a target's data layout rules. 
+
+<blockquote>If <tt>-fnesc-target=env</tt> option is passed to <tt>nescc</tt>, 
+the compilation uses
+a machine specification described in the environment variable
+<tt>NESC_MACHINE</tt>, such as <blockquote><tt>export
+NESC_MACHINE="long_double=8,4"</tt></blockquote> A
+particular order to the keynames in <tt>NESC_MACHINE</tt> is not necessary.
+The table below is a complete list of possible key names for
+<tt>NESC_MACHINE</tt>, a short description of their values, and their
+default if unspecified: <blockquote>
+
+<table border=1 cellpadding=2 cellspacing=0>
+<tr><th>Keyname                   <th>Value      <th>Default
+<tr><td>pcc_bitfield_type_matters <td>bool       <td>false
+<tr><td>empty_field_boundary     <td>bit align  <td>8
+<tr><td>structure_size_boundary          <td>bit align  <td>8
+<tr><td>word_size                <td>size       <td>1
+<tr><td>pointer                   <td>size,align <td>2,1
+<tr><td>float                     <td>size,align <td>4,1
+<tr><td>double                    <td>size,align <td>4,1
+<tr><td>long_double               <td>size,align <td>4,1
+<tr><td>short                     <td>size,align <td>2,1
+<tr><td>int                       <td>size,align <td>2,1
+<tr><td>long                      <td>size,align <td>4,1
+<tr><td>long_long                 <td>size,align <td>8,1
+<tr><td>int1248_align             <td>align,align,align,align <td>1,1,1,1
+<tr><td>wchar_size_size           <td>size,size  <td>2,2
+<tr><td>char_wchar_signed         <td>bool,bool  <td>true,true
+</table>
+
+</blockquote>
+
+For reference and easy cut+paste, here is the full default specification for
+<tt>NESC_MACHINE</tt>: <blockquote><tt>export
+NESC_MACHINE="pcc_bitfield_type_matters=false word_size=1 pointer=2,1 float=4,1
+double=4,1 long_double=4,1 short=2,1 int=2,1 long=4,1 long_long=8,1
+int1248_align=1,1,1,1 wchar_size_size=2,2 char_wchar_signed=true,true
+empty_field_boundary=8 structure_size_boundary=8"
+</tt></blockquote>
+
+The curiously named wchar_size_size is the sizes of <code>wchar_t</code>
+and <code>size_t</code> respectively. See the gcc internal documentation
+(`<code>info gccint</code>') for more information on
+pcc_bitfield_type_matters, empty_field_boundary and
+structure_size_boundary.
+
+</body>
+</html>
diff --git a/doc/mica-debugging.html b/doc/mica-debugging.html
new file mode 100644 (file)
index 0000000..26ce2e2
--- /dev/null
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN">
+<html>
+<head>
+  <title>Debugging TinyOS 1.x code with AVR JTAG ICE</title>
+</head>
+<body>
+<h1>Debugging nesC code with the AVR JTAG ICE</h1>
+<i>Note: we do not currently support the JTAG ICE mkII from Atmel.</i>
+
+<p>The Atmel ATMEGA 128 processor offers in-circuit debugging through its
+JTAG interface. This document explains how to setup your environment to
+allow gdb to be used with mica motes.&nbsp; A separate document, <a
+ href="nesc-debugging.html">here</a>, describes how to debug nesC
+programs with gdb (this applies to both JTAG debugging on motes and
+tossim-based debugging on PCs). This document also gives an example of a
+debugging session using the JTAG ICE.<br>
+<br>
+A number of separate elements are needed for JTAG debugging on motes:
+<ul>
+  <li> <b>Tools</b>: The following tools are needed, they are all
+included in the 1.1 distribution of TinyOS:
+    <ul>
+      <li> C compiler for the AVR: avr-binutils version 2.13.2.1 or
+later, avr-gcc version 3.3 or later, avr-libc.<br>
+      </li>
+      <li> nesc version 1.1 or later.</li>
+      <li>avr-gdb or avr-insight, preferably the version distributed
+with TinyOS 1.1 (this version has a number of bug fixes).<br>
+      </li>
+      <li>avarice version 2.0.20030805cvs or later.<br>
+      </li>
+    </ul>
+  </li>
+  <li> JTAG ICE pod.  This beast can be purchased from         Atmel, and looks
+as follows:<br>
+       <img src="debugging_files/jtagpod.jpg"> </li>
+  <li>A programming board with a JTAG connector. This is included on
+recent (mica2, mib510) programming boards. You will have to add it
+yourself to the older mica programming boards. The finished picture will
+look like this:<br>
+       <img src="debugging_files/progboard.jpg"> </li>
+  <li>A mica mote equipped with the Atmega 128 processor, a mica2dot or
+a mica2.  On the Mica boards you may have to remove a resistor r33,    as
+shown in the picture:<br>
+    <img src="debugging_files/micamod.jpg"> <br>
+Note that on the newer generations of Micas removal of that resistor
+may not        be necessary.  With a ohmmeter check the resistance between the
+       positive terminal of the battery and the pin on the Atmel Atmega 128
+       corresponding to port A pin 7; if the resistance is large (10kohms)
+       then you may not need to remove the resistor.</li>
+  <li>You cannot be using a sensorboard that uses the ADC4-ADC7 (aka
+PF4-PF7) pins as these are the pins used for JTAG, and you must ensure
+that the JTAG enable fuse bit (bit 6 of the high fuse byte) is clear.
+You can clear this bit by passing the <span
+ style="font-family: monospace;">--wr_fuse_h=19</span> option to uisp,
+e.g., if using parallel port programming:<br>
+&nbsp;&nbsp;&nbsp; <span style="font-family: monospace;">uisp
+-dprog=dapa --wr_fuse_h=19<br>
+    </span>
+or, if using the MIB510 serial programming board,<br>
+&nbsp;&nbsp;&nbsp; <span style="font-family: monospace;">uisp
+-dprog=mib510 -dserial=/dev/ttys<i>N</I> -dpart=ATmega128 --wr_fuse_h=19<br>
+    </span>
+Note that you may have to disable JTAG when using
+sensorboards that use ADC4-ADC7, by passing the <span
+ style="font-family: monospace;">--wr_fuse_h=59</span> option to uisp.<br>
+  </li>
+  <li>A free serial port to connect the JTAG ICE pod. You must set the
+AVARICE_ARGS environment variable to contain the string "<span
+ style="font-family: monospace;">-j &lt;serial port device name&gt;</span>"
+(e.g., <span style="font-family: monospace;">-j /dev/ttyS0</span>).<br>
+  </li>
+</ul>
+Once you have built up this bit of infrastructure, your setup might
+look something like this:<br>
+<img src="debugging_files/complete-setup.jpg"> At that point you should
+be able to simply compile your nesC application     (make sure you're
+compiling with debugging support (-g flag), the easiest is to include
+the word <span style="font-family: monospace;">debug</span> in your make
+command line).  Connect     the pod to your serial port, turn the pod
+on, turn the mote on, and from a shell window you should be able to do
+something like the following:
+<pre> <br>cd ~/trunk/tinyos-1.x/apps/CntToLeds<br>make clean; make mica debug<br>export AVARICE_ARGS='-j COM1' # a cygwin example, /dev/ttyS0 on Linux (and should work on cygwin too)<br>ice-gdb build/mica/main.exe<br></pre>
+This should start the avarice (the PC-side of the JTAG setup), which
+understands the GDB remote debugging protocol, and gdb itself. It will
+load the program onto the mote, and stop the execution in the
+initialization. At that point you should have all the familiar GDB hooks
+at your disposal: breakpoints, displaying memory,  registers, etc.  You
+could also use the ice-insight command if you prefer a more graphical
+debugging environment. Please refer to the man pages for ice-gdb and
+ice-insight for more options.
+<hr>
+<address> <a href="mailto:szewczyk@cs.berkeley.edu">Robert Szewczyk</a>,
+13 Mar 2003, <a href="mailto:david.e.gay@intel.com">David Gay</a>,
+21 August 2003 </address>
+</body>
+</html>
diff --git a/doc/nesc-debugging.html b/doc/nesc-debugging.html
new file mode 100644 (file)
index 0000000..87eca34
--- /dev/null
@@ -0,0 +1,271 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="content-type"
+ content="text/html; charset=ISO-8859-1">
+  <title>Debugging nesC code with gdb</title>
+  <meta name="author" content="David Gay">
+</head>
+<body>
+<h1>Debugging nesC code in GDB</h1>
+gdb does not (yet!) have a nesC-specific mode. Instead, in gdb you are
+effectively debugging the C code generated by the nesC compiler.
+However, the nesC compiler includes #line directives in the code it
+generates, so single-stepping through nesC code will display the correct
+nesC source code, and breakpoints can be set based on the line numbers
+and file names of nesC components. The situation for variable,
+function, command and event names is however not as straightforward. If
+you wish to refer to one of these, you must use its name in the
+generated C code, as explained below.<br>
+<br>
+When debugging tossim code, life is further complicated by the fact
+that the generated C code emulates multiple motes. Thus all module
+variables (but not global variables in C files) become arrays, indexed
+by mote id (if the variable was itself an array, the mote id is the
+first dimension). At any point in time, the "current" mote is found in <span
+ style="font-family: monospace;">tos_state.current_node</span>.<br>
+<br>
+By default, nesC does a lot of inlining, which makes debugging tricky.
+In most cases, pass the -<span style="font-family: monospace;">g -O1
+-fnesc-no-inline</span> options to nesC to produce code that is easier
+to debug (the <span style="font-family: monospace;">debug</span> option
+to the standard TinyOS Makefile does this). If you have a problem which
+requires debugging fully optimised code, just include <span
+ style="font-family: monospace;">-g</span> and prepare for a slightly
+painful experience... (the <span style="font-family: monospace;">debugopt</span>
+to the standard TinyOS Makefile does this).<br>
+<h2>Mapping from nesC names to C names</h2>
+Types, variables and functions in C files (included via the <span
+ style="font-family: monospace;">includes</span> statement) are left
+unchanged in the generated C code, except if they correspond to a nesC
+keyword. In this last case, the name is prefixed with <span
+ style="font-family: monospace;">__nesc_keyword_</span>, so components
+becomes <span style="font-family: monospace;">__nesc_keyword_components</span>.<br>
+<br>
+A module variable (top-level data declarations in modules)&nbsp; <span
+ style="font-style: italic;">X </span>in module <span
+ style="font-style: italic;">M</span> is called <span
+ style="font-style: italic;">M</span>$<span style="font-style: italic;">X</span>
+in the generated C code.<br>
+<br>
+A function <span style="font-style: italic;">F</span> in module <span
+ style="font-style: italic;">M</span> is called <span
+ style="font-style: italic;">M</span>$<span style="font-style: italic;">F</span>
+in the generated C code.<br>
+<br>
+Local variable names in modules are left unchanged in the generated C
+code.<br>
+<br>
+A command or event <span style="font-style: italic;">C</span> in module <span
+ style="font-style: italic;">M</span> is called <span
+ style="font-style: italic;">M</span>$<span style="font-style: italic;">C</span>
+in the generated C code.<br>
+<br>
+A command or event <span style="font-style: italic;">C</span> of
+interface instance <span style="font-style: italic;">I</span> in module <span
+ style="font-style: italic;">M</span> is called <span
+ style="font-style: italic;">M</span>$<span style="font-style: italic;">I</span>$<span
+ style="font-style: italic;">C</span> in the generated C code.<br>
+<br>
+To complicate matters a little, gdb does not directly accept $ in
+function names in <span style="font-family: monospace;">break</span>
+(set a breakpoint) statements. Instead, you must precede the function
+name with a *, e.g, <span style="font-family: monospace;">b
+*BlinkM$StdControl$init</span>. Note that this sets a breakpoint on the
+first instruction of the function (normally part of the function
+preamble setting up the function's stack frame) rather than on the first
+executable statement of the function. As a result, gdb may not
+correctly display argument values, etc, until you single-step into the
+function body.<br>
+<h2>Example</h2>
+This example debugs the CntToLeds application from TinyOS on a mica
+mote, using on-chip debugging with a JTAG ICE pod (see <a
+ href="debugging.html">this document</a> for instructions on setting the
+JTAG ICE up):<br>
+<br>
+We compile the application with debugging and no inlining by passing
+the TinyOS-specific <span style="font-family: monospace;">debug</span>
+option to make:<br>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">[dgay@barnowl
+CntToLeds]$ make mica debug</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp; compiling
+CntToLeds to a mica binary</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">ncc -o build/mica/main.exe -O1 -g
+-fnesc-no-inline -board=micasb -target=mica -I%T/lib/Counters -Wall
+-Wshadow -DDEF_TOS_AM_GROUP=0x42 -Wnesc-all -finline-limit=100000
+-fnesc-cfile=build/mica/app.c&nbsp; CntToLeds.nc -lm</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp; compiled
+CntToLeds to build/mica/main.exe</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+2588 bytes in ROM</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+46 bytes in RAM</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">avr-objcopy --output-target=srec
+build/mica/main.exe build/mica/main.srec</span><br>
+<span style="font-family: monospace;"></span></div>
+<br>
+We start ice-gdb to download and debug CntToLeds:<br>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">[dgay@barnowl
+CntToLeds]$ ice-gdb build/mica/main.exe</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">AVaRICE version 2.0.20030821cvs,
+Aug 21 2003 15:36:04</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">JTAG config starting.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Hardware Version: 0xc0</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Software Version: 0x69</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Reported JTAG device ID: 0x9702</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Configured for device ID: 0x9702
+atmega128</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">LockBits -&gt; 0xff</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Reading Fuse Bytes:</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp; Extended Fuse byte -&gt;
+0xfd</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+High Fuse byte -&gt; 0x19</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Low Fuse byte -&gt; 0xfe</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">JTAG config complete.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Downloading FLASH image to
+target......................</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Download complete.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Waiting for connection on port
+6423.</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">GNU gdb cvs-pre6.0-tinyos</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Copyright 2003 Free Software
+Foundation, Inc.</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">GDB is free software, covered by
+the GNU General Public License, and you are</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">welcome to change it and/or
+distribute copies of it under certain conditions.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Type "show copying" to see the
+conditions.</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">There is absolutely no warranty
+for GDB.&nbsp; Type "show warranty" for details.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">This GDB was configured as
+"--host=i686-pc-linux-gnu --target=avr"...</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Connection opened by host
+127.0.0.1, port 33805.</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">0x00000000 in __vectors ()</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>The program is stopped. We set a breakpoint at the Timer.fired
+event in the Counter module. Note the *:<span
+ style="font-family: monospace;"><br style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+b *Counter$Timer$fired</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">Hardware assisted breakpoint 1 at
+0x826: file /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc,
+line 67.</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>And let the program continue:<br>
+<div style="margin-left: 40px;"><span style="font-family: monospace;"></span><span
+ style="font-family: monospace;">(gdb) c</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Continuing.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Breakpoint 1, Counter$Timer$fired
+() at /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc:67</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+state++;</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>The breakpont was reached. We continue again...<span
+ style="font-family: monospace;"><br style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+c</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">Continuing.</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">&nbsp;</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Breakpoint 1, Counter$Timer$fired
+() at /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc:67</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+state++;</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>Let's examine the state variable of the Counter module:<span
+ style="font-family: monospace;"><br style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+p Counter$state</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">$1 = 1</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>And then follow where the IntOutput.output command takes us.<span
+ style="font-family: monospace;"><br style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+n</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+return call IntOutput.output(state);</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">(gdb) s</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">Counter$IntOutput$output
+(arg_0x84fde28=2) at
+/home/dgay/motes/tinyos-1.x/tos/interfaces/IntOutput.nc:52</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+command result_t output(uint16_t value);</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>The debugger shows us the command in the interface, we must step
+again to reach our destination:<span style="font-family: monospace;"><br
+ style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+s</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">IntToLedsM$IntOutput$output
+(value=2) at
+/home/dgay/motes/tinyos-1.x/tos/lib/Counters/IntToLedsM.nc:70</span><br
+ style="font-family: monospace;">
+<span style="font-family: monospace;">70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+if (value &amp; 1) call Leds.redOn();</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>The names of local variables (and function parameters) are
+unchanged:<span style="font-family: monospace;"><br
+ style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+p value</span><br style="font-family: monospace;">
+<span style="font-family: monospace;">$2 = 2</span><br>
+<span style="font-family: monospace;"></span></div>
+<span style="font-family: monospace;"><br>
+</span>That's all folks!<span style="font-family: monospace;"><br
+ style="font-family: monospace;">
+</span>
+<div style="margin-left: 40px;"><span style="font-family: monospace;">(gdb)
+quit</span><br style="font-family: monospace;">
+</div>
+<br>
+</body>
+</html>
diff --git a/doc/nescc-mig.1 b/doc/nescc-mig.1
new file mode 100644 (file)
index 0000000..f80c72c
--- /dev/null
@@ -0,0 +1,230 @@
+.TH nescc-mig 1 "April 27, 2004"
+.LO 1
+.SH NAME
+
+nescc-mig - message interface generator for nesC
+.SH SYNOPSIS
+
+\fBnescc-mig\fR [any nescc option] [tool-specific options]
+          [\fB-o\fR \fIoutput-file\fR] [\fB-nescc=\fIdriver\fR]
+          \fItool\fR \fImsg-format-file\fR \fImessage-type\fR
+.SH DESCRIPTION
+
+\fBnescc-mig\fR is a tool to generate code to process nesC messages (which
+are specified by C types). The \fItool\fR argument specifies what tool
+should be generated, the \fImessage-type\fR specifies the C type of the
+message you wish to process and \fImsg-format-file\fR specifies a nesC file
+which uses that type. The message type must be defined with \fBstruct
+\fImessage-type\fR, \fBnx_struct \fImessage-type\fR, \fBunion
+\fImessage-type\fR, \fBnx_union \fImessage-type\fR.
+
+When used with types whose layout is platform-dependent (i.e., not defined
+with \fBnx_struct\fR or \fBnx_union\fR), it is important to specify the
+correct \fBnescc\fR target architecture option
+(\fB-fnesc-target=\fI...\fR). If you are invoking \fBnescc-mig\fR 
+indirectly via \fBmig\fR, you can use the \fBncc\fR \fB-target=\fI...\fR
+option instead.
+
+If an enum constant named \fBAM_\fImessage_type\fR (with \fImessage_type\fR
+capitalized) is found, then the value of that constant is assumed to be the
+active message type for \fImessage-type\fR. If you need access to other
+constants from your nesC application, please consult the \fBnescc-ncg\fR man
+page.
+
+The current tools are \fBjava\fR, \fBcsharp\fR, \fBpython\fR and \fBC\fR, which
+generate java, C#, python and C code to encode and decode messages.
+.SH OPTIONS
+You can pass any \fBnescc\fR option, as well as
+.TP
+\fB-o \fIoutput-file\fR  
+Specify the file in which to output the generated code.
+.TP
+\fB-nescc=\fIdriver\fR
+Use \fIdriver\fR instead of \fBnescc\fR to extract type layout information.
+For example, if you specify \fB-nescc=ncc\fR, you can use \fBnescc-mig\fR
+to extract type information from TinyOS applications (which are normally
+compiled with \fBncc\fR).
+.TP
+tool-specific options
+See below.
+
+.SH JAVA TOOL
+
+This tool generates a java class to encode or decode a nesC message,
+basing itself on the net.tinyos.message infrastructure. It accepts the 
+following options:
+.TP
+\fB-java-classname=\fIfull-class-name\fR  
+This option is required and specifies the package and name of the generated
+class. If the \fIfull-class-name\fR has no '.', then no package directive is
+included in the output.
+.TP
+\fB-java-extends=\fIclass-name\fR
+Specify the class the generated class will extend. The default is
+\fBnet.tinyos.message.Message\fR.
+.PP
+For each field
+\fIfname\fR of structure \fImessage-type\fR, there are the following methods
+(the bit offset and size methods are useful for structures containing
+bitfields):
+.IP *
+\fBget_\fIfname\fR: get field's value
+.IP *
+\fBset_\fIfname\fR: set field's value
+.IP *
+\fBoffsetBits_\fIfname\fR: return bit offset of field in \fImessage-type\fR
+.IP *
+\fBoffset_\fIfname\fR: return byte offset of field in \fImessage-type\fR 
+.IP *
+\fBsizeBits_\fIfname\fR: return size in bits of field (not for arrays)
+.IP *
+\fBsize_\fIfname\fR: return size in bytes of field (not for arrays)
+(absent if \fIfname\fR is a bitfield)
+.IP *
+\fBisSigned_\fIfname\fR: return true if \fIfname\fR is of a signed type
+.IP *
+\fBisArray_\fIfname\fR: return true if \fIfname\fR is an array
+.PP
+Embedded structures in \fImessage-type\fR are expanded, using _ to
+separate the structure name and its fields.
+
+A number of extra methods are present for fields that are arrays:
+.IP *
+\fBgetElement_\fIfname\fR: get an element of the array
+.IP *
+\fBsetElement_\fIfname\fR: set an element of the array
+.IP *
+\fBelementSize_\fIfname\fR: return size in bytes of array elements
+.IP *
+\fBelementSizeBits_\fIfname\fR: return size in bits of array elements
+.IP *
+\fBnumDimensions_\fIfname\fR: return number of dimensions of the array
+.IP *
+\fBnumElements_\fIfname\fR: return number of elements of the array for a given
+dimension (left-most dimension is numbered 0) - the dimension is optional 
+for 1-dimensional arrays
+.IP *
+\fBtotalSize_\fIfname\fR: return size in bytes of the array (absent if the array
+is variable-size)
+.IP *
+\fBtotalSizeBits_\fIfname\fR: return size in bits of the array (absent if the array
+is variable-size)
+.PP
+If the array is 1-dimensional and the elements are one byte, then the
+following methods exist:
+.IP *
+\fBgetString_\fIfname\fR: build a Java string from the array assuming it contains
+a C-style null-terminated string
+.IP *
+\fBsetString_\fIfname\fR: set the array to a C-style null-terminated string given
+a java string
+.PP
+The \fBgetElement_...\fR, \fBsetElement_...\fR, \fBoffset_...\fR and
+\fBoffsetBits_...\fR methods take one argument per array dimension. These
+methods report errors if the array index is out of bounds. If an array has
+a maximum size of 0, mig assumes it represents a variable-size array and
+does not check the corresponding array index.
+
+The data for a message is stored in an array, with explicit base and length
+information. The constructors can either allocate this array, receive it as
+an explicit argument or extract if from another message. The base and
+length can also be optionally passed to these constructors.  
+
+The optional length argument overrides the default size of
+sizeof(message-type); this is useful for variable-size messages. The use of
+an explicit base is helpful for messages embedded in other messages.
+
+The generated class also has an amType() method which returns the message's
+active message type, or -1 if no AM_\fImessage_type\fR constant was found.
+.SH C# TOOL
+This tool generates a C# class to encode or decode a nesC message. It
+accepts the following options:
+.TP
+\fB-csharp-classname=\fIfull-class-name\fR  
+This option is required and specifies the namespace and name of the generated
+class. If the \fIfull-class-name\fR has no '.', then no namespace directive is
+included in the output.
+.TP
+\fB-csharp-extends=\fIclass-name\fR
+Specify the class the generated class will extend. The default is
+\fBtinyos.message.Message\fR.
+
+The methods in the generated class are the same as for the Java tool.
+.SH PYTHON TOOL
+This tool generates a Python class to encode or decode a nesC message.
+It accepts the following options:
+.TP
+\fB-python-classname=\fIfull-class-name\fR  
+This option is required and specifies the name of the generated
+class. 
+.TP
+\fB-python-extends=\fIclass-name\fR
+Specify the class the generated class will extend. The default is
+\fBtinyos.message.Message.Message\fR.
+
+The methods in the generated class are the same as for the Java tool.
+.SH C TOOL
+This tool generates a C header file (\fB.h\fR) with constants describing
+the type's layout, and a C module (\fB.c\fR) with functions to get and
+set each field. You must pass the \fB.h\fR file's name to \fBnescc-mig\fR
+using \fB-o\fR.
+
+The C tool accepts the following option:
+.TP
+\fB-c-prefix=\fIprefix\fR  
+This option specifies the \fIprefix\fR to attach to the generated
+constants and functions. If omitted, \fImessage-type\fR is used.
+.PP
+For each non-array field
+\fIfname\fR of structure \fImessage-type\fR, the following
+functions and constants are generated:
+.IP *
+\fIprefix\fB_\fIfname\fB_get\fR(): get field's value
+.IP *
+\fIprefix\fB_\fIfname\fB_set\fR(): get field's value
+.IP *
+\fIprefix\fB_\fIfname\fB_OFFSETBITS\fR: bit offset of field
+.IP *
+\fIprefix\fB_\fIfname\fB_OFFSET\fR: byte offset of field
+.IP *
+\fIprefix\fB_\fIfname\fB_SIZEBITS\fR: size in bits of field
+.IP *
+\fIprefix\fB_\fIfname\fB_SIZE\fR: size in bytes of field
+.PP
+For each array field \fIfname\fR of structure \fImessage-type\fR, the following
+functions and constants are generated:
+.IP *
+\fIprefix\fB_\fIfname\fB_get()\fR: get field's value
+.IP *
+\fIprefix\fB_\fIfname\fB_set()\fR: get field's value
+.IP *
+\fIprefix\fB_\fIfname\fB_offsetbits()\fR: bit offset of array element
+.IP *
+\fIprefix\fB_\fIfname\fB_offset()\fR: byte offset of array element
+.IP *
+\fIprefix\fB_\fIfname\fB_ELEMENTSIZEBITS\fR: size in bits of array element
+.IP *
+\fIprefix\fB_\fIfname\fB_ELEMENTSIZE\fR: size in bytes of array element
+.IP *
+\fIprefix\fB_\fIfname\fB_NUMELEMENTS\fR: number of elements in array (absent for variable-sized arrays)
+.IP *
+\fIprefix\fB_\fIfname\fB_NUMELEMENTS_\fIi\fR: size of \fIi\fRth array dimension
+.PP
+Embedded structures in \fImessage-type\fR are expanded, using _ to
+separate the structure name and its fields. A field of an array of
+embedded structures is considered to be an array.
+
+.SH ERRORS
+
+\fBnescc-mig\fR reports an error if \fBnescc\fR cannot compile
+\fImsg-format-file\fR, if \fImessage-type\fR isn't found or if it contains
+pointers.
+.SH SEE ALSO
+
+The generated code for the various tools refer to libraries that are distributed
+with the TinyOS operating system. Please refer to that project's documentation
+for more information.
+
+.IR mig (1),
+.IR nescc (1),
+.IR nescc-ncg (1)
diff --git a/doc/nescc-ncg.1 b/doc/nescc-ncg.1
new file mode 100644 (file)
index 0000000..e89517f
--- /dev/null
@@ -0,0 +1,98 @@
+.TH nescc-ncg 1 "April 27, 2004"
+.LO 1
+.SH NAME
+
+nescc-ncg - extract constants from nesC files
+.SH SYNOPSIS
+
+\fBnescc-ncg\fR [any nescc option] [tool-specific options]
+          [\fB-o\fR \fIoutput-file\fR] [\fB-nescc=\fIdriver\fR]
+          \fItool\fR \fInesC-file\fR \fIfilenames-or-constant-names...\fR
+.SH DESCRIPTION
+
+\fBnescc-ncg\fR is a tool to extract constants from nesC files for use with
+other applications. It is typically used in conjunction with
+\fBnescc-mig\fR (which generates code to process nesC messages) to extract
+constants that are used in particular messages (e.g., constants
+representing various commands).
+
+The \fItool\fR argument specifies what tool should be generated, the
+\fInesC-file\fR specifies a nesC file which uses the constants you want to
+extract.  If your constants are all in a single .h file that does not
+depend on any other files, then you can specify the .h file directly as the
+\fImsg-format-file\fR. Note that if some of your constants are defined
+with \fBunique(...)\fR or \fBuniqueCount(...)\fR, you must specify your
+whole application as the \fInesC-file\fR, or you will not get the 
+correct constant values.
+
+Each \fIfilenames-or-constant-names\fR is either a constant name (if it
+consists only of letters, numbers and _) or a filename. In the former case,
+the specified constant will be extracted, in the latter case all constants
+from the specified C file will be extracted. Only constants declared in C
+files will be found by \fBnescc-ncg\fR.
+
+The current tools are \fBjava\fR, \fBpython\fR and \fBC\fR, which
+generate java, python and C code that contains the values of the 
+requested constants. 
+.SH OPTIONS
+You can pass any \fBnescc\fR option, as well as
+.TP
+\fB-o \fIoutput-file\fR  
+Specify the file in which to output the generated code.
+.TP
+\fB-nescc=\fIdriver\fR
+Use \fIdriver\fR instead of \fBnescc\fR to extract constants.
+For example, if you specify \fB-nescc=ncc\fR, you can use \fBnescc-ncg\fR
+to extract constants from TinyOS applications (which are normally
+compiled with \fBncc\fR).
+.TP
+tool-specific options
+See below.
+.SH JAVA TOOL
+
+This tool generates a java class with the values of the requested constants.
+These constants will be \fBpublic final static\fR and have a type chosen
+from \fBbyte, short, char, int, long\fR (the chosen type will be the 
+first one in this list that can hold the constants value - this reduces
+the need for casts).
+
+The java tool accepts the following options:
+.TP
+\fB-java-classname=\fIfull-class-name\fR  
+This option is required and specifies the package and name of the generated
+class. If the \fIfull-class-name\fR has no '.', then no package directive is
+included in the output.
+.TP
+\fB-java-extends=\fIclass-name\fR
+Specify the class the generated class will extend. The default is
+\fBObject\fR.
+.SH PYTHON TOOL
+
+This tool generates a Python class with the values of the requested constants.
+These constants will be class (rather than instance) variables.
+
+The Python tool accepts the following options:
+.TP
+\fB-python-classname=\fIfull-class-name\fR  
+This option is required and specifies the name of the generated
+class.
+.TP
+\fB-python-extends=\fIclass-name\fR
+Specify the class the generated class will extend. The default is
+is to not inherit.
+.SH C TOOL
+This tool generates a C header file with the values of the
+requested constants (defined as \fBenum\fR constants).
+
+The C tool accepts the following option:
+.TP
+\fB-c-prefix=\fIprefix\fR  
+This option specifies a \fIprefix\fR to attach to the generated
+constants.
+.SH ERRORS
+
+\fBnescc-ncg\fR reports an error if ncc cannot compile \fInesC-file\fR.
+.SH SEE ALSO
+
+.IR nescc (1),
+.IR nescc-mig (1)
diff --git a/doc/nescc-wiring.1 b/doc/nescc-wiring.1
new file mode 100644 (file)
index 0000000..27b0fb2
--- /dev/null
@@ -0,0 +1,55 @@
+.TH nescc-wiring 1 "January 4, 2006"
+.LO 1
+.SH NAME
+
+nescc-wiring - check wiring of nesC program
+.SH SYNOPSIS
+
+\fBnescc-wiring \fInesc-xml-file\fR
+
+.SH DESCRIPTION
+
+\fBnescc-wiring\fR is a tool to verify that wiring constraints specified on
+individual components are respected in a nesC program. These wiring
+constraints can specify that an interface provided or used by a component
+must be wired at least once, at most once, or exactly once. If no
+wiring constraints are violated, nescc-wiring terminates with an exit status
+of 0. Otherwise, appropriate error messages are printed and nescc-wiring
+terminates with a non-zero exit status.
+
+Wiring constraints are specified by placing \fB@atmostonce()\fR, 
+\fB@atleastonce()\fR and \fB@exactlyonce()\fR attributes on the
+relevant interfaces. For instance, writing
+
+  module Fun {
+    provides interface Init @atleastonce();
+  ...
+
+ensures that programs using module \fBFun\fR must wire its \fBInit\fR
+interface at least once.
+
+Specifically, when the annotation is placed on a provided interface, there
+must be the specified number of paths in the wiring graph from any module
+to that interface. If the annotations are placed on a used interface,
+there must be the specified number of paths in the wiring graph from
+the interface to any module.
+
+To use this wiring check tool, you must declare the \fB@atmostonce()\fR, 
+\fB@atleastonce()\fR and \fB@exactlyonce()\fR attributes in some global
+header file as follows:
+
+  struct @atleastonce() { };
+  struct @atmostonce() { };
+  struct @exactlyonce() { };
+
+and you must pass the following options to \fBnescc\fR to create the
+XML file that you pass to \fBnescc-wiring\fR:
+
+  -fnesc-dump=wiring
+  -fnesc-dump='interfaces(!abstract())'
+  -fnesc-dump='referenced(interfacedefs, components)' 
+  -fnesc-dumpfile=\fInesc-xml-file\fR
+
+.SH SEE ALSO
+
+.IR nescc (1)
diff --git a/doc/nescc.1 b/doc/nescc.1
new file mode 100644 (file)
index 0000000..a3d2671
--- /dev/null
@@ -0,0 +1,207 @@
+.TH nescc 1 "April 27, 2004"
+.LO 1
+.SH NAME
+nescc - nesC compiler
+.SH SYNOPSIS
+
+\fBnescc\fR [\fB-gcc=\fIgcc-name\fR] [\fB-fnesc-target=\fIarchitecture\fR]
+    [\fB-docdir=\fIdir\fR] [\fB-topdir=\fIdir\fR] [\fB-graphviz=y\fI|\fBn\fR]
+    [\fB-fnesc-simulate\fR] 
+    [\fB-fnesc-nido-tosnodes=\fIn\fR] [\fB-fnesc-nido-motenumber=\fIexpression\fR]
+    [\fB-conly\fR] [\fB-fnesc-cfile=\fIfile\fR] 
+    [\fB-fnesc-cppdir=\fIdirectory\fR] [\fB-fnesc-separator=\fIseparator\fR]
+    [\fB-fnesc-no-inline\fR] [\fB-fnesc-optimize-atomic\fR]
+    [\fB--version\fR] [\fB-fnesc-verbose\fR] [\fB-Wnesc-\fI...\fR]
+    [\fB-fnesc-dump=\fIspecification\fR] [\fB-fnesc-dumpfile=\fIfile\fR]
+    [\fB-fnesc-scheduler=\fIspecification\fR]
+    [any gcc option] \fIfiles\fR...
+.SH DESCRIPTION
+
+\fBnescc\fR is an extension to \fBgcc\fR that knows how to compile nesC
+applications. If invoked on regular C files, it behaves exactly like
+\fBgcc\fR. When invoked on a nesC component or interface (\fB.nc\fR
+extension) file it compiles and links (except if the usual \fB-c\fR,
+\fB-S\fR, \fB-E\fR or \fB-fsyntax-only\fR options are used) that component
+with the other files specified on the command line.
+.SH OPTIONS
+
+\fBnescc\fR accepts all \fBgcc\fR options, and some additional nesC
+specific options:
+.TP
+\fB-gcc=\fIgcc-name\fR
+Specify which gcc compiler to use to compile and link any C files, either
+explicitly specified, or generated as the output of the nesC-to-C compiler.
+This option supports cross-compilation of nesC code (the usual mode of
+operation...).
+.TP
+\fB-fnesc-target=\fIarchitecture\fR
+Specify the target architecture to compile for. Currently supported
+platforms are \fBavr\fR (the Atmel AVR family), \fBmsp430\fR (the TI MSP430
+family) and \fBself\fR (the machine the nesC compiler is running on).
+If you use the \fBenv\fR target, the architecture details are read from
+the \fBNESC_MACHINE\fR environment variable. See the separate env target
+documentation for details.
+.TP
+\fB-docdir=\fIdir\fR 
+Generate documentation for the compiled component in directory \fIdir\fR.
+.TP
+\fB-topdir=\fIdir\fR 
+Specify directory paths that should be stripped from the source file names
+when generating "package names" for the documentation files.
+.TP
+\fB-graphviz=y\fR|\fBn\fR 
+Explicitly enable or disable the use of the graphviz tool in the generated
+documentation. Without this option, graphviz is enabled iff the \fBdot\fR
+program is found in the current path. Use of graphviz requires \fBdot\fR.  The
+documentation generation tool checks the version of \fBdot\fR, and enables
+client-side image maps, if supported.
+.TP
+\fB-fnesc-simulate\fR
+Compile for a simulation environment.
+.TP
+\fB-fnesc-nido-tosnodes=\fIn\fR, \fB-fnesc-nido-motenumber=\fIexpression\fR
+When \fB-fnesc-simulate\fR is specified, the nesC program is compiled for a
+simulation environment, where a single executable will simulate \fIn\fR
+nodes. Specifically, in the generated code, each global variable becomes an
+\fIn\fR element array, and all accesses to global variables are indexed
+with \fIexpression\fR.
+.TP
+\fB-conly\fR
+Just compile to C, leaving the generated source code for top-level-component
+\fIcomp.nc\fR in C file \fIcomp.c\fR (except if the \fB-fnesc-cfile\fR
+option is specified).
+.TP
+\fB-fnesc-cfile=\fIfile\fR 
+Specify a file in which to save the C code generated when compiling a
+component. Note: if you specify two components on the command line, then
+the C code from the second one will overwrite the C code from the first.
+.TP
+\fB-fnesc-cppdir=\fIdirectory\fR
+Save all preprocessing results in \fIdirectory\fR. The directory is created
+if it doesn't exist. This can be helpful to track down preprocessor-related
+compilation problems. You probably want to ensure that \fIdirectory\fR is
+empty when you call \fBnescc\fR, to make it obvious which files where
+preprocessed as part of the current compilation.
+.TP
+\fB-fnesc-separator=\fIseparator\fR
+Set separator used to create symbol names in the generated C code (default $).
+The compiler needs to generate unique names to denote, e.g., a module
+variable. It does this by concatenating various symbol names to ensure that
+it generates unique names. For instance, variable \fBbar\fR in module 
+\fBMaz\fR becomes a global C variable \fBMaz$bar\fR in the compiler output.
+Some C compilers do not like $ in symbol names, so you can specify a 
+different separator, e.g., \fB__\fR (leading to generated symbols like
+\fBMaz__bar\fR). 
+
+You will get a compile-time warning if any symbol in the program being
+compiled contains the separator you specify (the presence of the
+separator in a symbol could lead to the generation of incorrect code).
+The separator can however start or end a symbol.
+.TP
+\fB-fnesc-no-inline\fR
+Disabled the automatic inlining of all small functions, and of all functions
+with a single call site.
+.TP
+\fB-fnesc-optimize-atomic\fR
+Optimize atomic statements [EXPERIMENTAL]: reduce or remove the overhead
+of atomic statements in simple cases (e.g., single-byte reads).
+.TP
+\fB--version\fR
+Print the version of \fBnescc\fR and of the selected gcc compiler
+(see \fB-gcc\fR).
+.TP
+\fB-fnesc-include=\fIheader-file\fR
+Include the specified file before compiling a nesC component. Behaves
+as if \fBincludes \fIheader-file\fB;\fR was included at the start of
+that component.
+.TP
+\fB-fnesc-dump=\fIspecification\fR
+Output information on the compiled programs structure, and in particular
+its user-specified attributes. For more details, see the separate nesC
+dump documentation.
+.TP
+\fB-fnesc-dumpfile=\fIfile\fR
+Where to output the information requested by \fB-fnesc-dump\fR. Defaults to
+stdout.
+.TP
+\fB-fnesc-verbose\fR
+Be more verbose than \fB-v\fR.
+.TP
+\fB-fnesc-scheduler=\fIcomponent\fR,\fIunique-string\fR,\fIinterface-name\fR,\fIinterface-definition\fR,\fIrun-event\fR,\fIpost-command\fR
+By default, nesC compiles uses of \fBtask void \fItaskname\fB() ...\fR to
+\fBvoid \fItaskname\fB()\fR, and \fBpost \fItaskname()\fR to
+\fBTOS_post(\fItaskname\fB)\fR. 
+
+With this option, each task gets its own \fIinterface-definition\fR
+interface, the task implementation is transformed into a \fIrun-event\fR
+event and posts becomes a call to the \fIpost-command\fR command. This
+per-task interface is automatically connected to the parameterised
+\fIinterface-name\fR interface of scheduler component \fIcomponent\fR. The
+parameter id for the connection is chosen with
+\fBunique("\fIunique-string\fB")\fR.
+.PP
+There are a number of warnings specific to nesC, specified with
+\fB-Wnesc-\fR (all these warnings are off by
+default):
+.TP
+\fB-Wnesc-fnptr\fR
+Warn when function pointers are used (use of function pointers is
+deprecated in nesC and leads to inaccurate data race detection).
+.TP
+\fB-Wnesc-async\fR 
+Warn when interrupt handlers call commands or events not annotated with
+\fBasync\fR.
+.TP
+\fB-Wnesc-data-race\fR
+Warn about potential data races.
+.TP
+\fB-Wnesc-combine\fR
+Warn when configuration wiring leads to "fan-out" and the function return
+type does not have a combining function defined.
+.TP
+\fB-Wnesc-docstring\fR
+Warn when unexpected documentation strings (starting with \fB/**\fR) are
+seen.
+.TP
+\fB-Wnesc-all\fR
+Turns on \fB-Wnesc-fnptr\fR, \fB-Wnesc-async\fR, \fB-Wnesc-combine\fR 
+and\fB-Wnesc-data-race\fR.
+.TP
+\fB-Wnesc-error\fR
+Turns the \fB-Wnesc-fnptr\fR, \fB-Wnesc-async\fR, \fB-Wnesc-combine\fR and
+\fB-Wnesc-data-race\fR warnings into errors.
+.PP
+When compiling a nesC component, the nesC compiler recognizes the gcc C
+language (\fB-f...\fR) and warning (\fB-W...\fR) options. The \fB-S\fR,
+\fB-c\fR and \fB-o\fR options work as usual, the \fB-x\fR option accepts
+\fBnesc\fR. The \fB-v\fR option causes the nesC compiler to print out the
+paths of all components and interfaces that are loaded. Directories can be
+added to nesC\fRs search path with \fB-I\fR.
+.SH EXAMPLES
+
+If you wish to compile a component Bar.nc to a C file, you can do:
+.IP
+nescc -c -o /dev/null -fnesc-cfile=Bar.c Bar.nc
+.SH PREPROCESSOR SYMBOLS
+
+\fBnescc\fR defines the following preprocessor symbol:
+.TP
+\fBNESC\fR (since v1.1) 
+set to XYZ where x.yz is the nesC version
+.SH ENVIRONMENT VARIABLES
+
+.TP
+.B NESCPATH 
+A colon separated list of additional search directories for
+nesC components.
+.SH SEE ALSO
+
+.IR gcc (1),
+platform-specific gcc
+.SH NOTES
+
+The warnings for the new nesC 1.1 features (see \fB-Wnesc-all\fR) are off
+by default to increase compatibility with nesC 1.0 code. To match the
+language specification in the nesC 1.1 reference manual, you should compile
+with \fB-Wnesc-all\fR and \fB-Wnesc-error\fR. These options will become the
+default in future releases.
diff --git a/doc/ref.pdf b/doc/ref.pdf
new file mode 100644 (file)
index 0000000..c5cf3e2
Binary files /dev/null and b/doc/ref.pdf differ
diff --git a/doc/ref.tex b/doc/ref.tex
new file mode 100644 (file)
index 0000000..72846c5
--- /dev/null
@@ -0,0 +1,2638 @@
+% Not in ref manual (implementation restriction rather than language feature):
+%   no initialisers on module variables (future support)
+%   (but vars w/ attribute C are not module vars)
+
+\documentclass[11pt,letterpaper]{article}
+
+\usepackage{fullpage}
+\usepackage{xspace}
+\usepackage{hyperref}
+
+\newcommand{\kw}[1]{{\tt #1}}
+\newcommand{\code}[1]{{\tt #1}}
+\newcommand{\file}[1]{{\tt #1}}
+\newcommand{\nesc}{nesC\xspace}
+\newcommand{\tinyos}{TinyOS\xspace}
+\newcommand{\opt}{$_{\mbox{opt}}$\xspace}
+\newcommand{\FSE}{\mathcal{F}}
+\newcommand{\connect}{\mathcal{C}}
+
+\parskip 0.15cm
+\parindent 0cm
+
+\newcommand{\grammarshift}{\vspace*{-.7cm}}
+\newcommand{\grammarindent}{\hspace*{2cm}\= \\ \kill}
+
+\begin{document}
+
+\title{\nesc 1.2 Language Reference Manual}
+\author{David Gay, Philip Levis, David Culler, Eric Brewer}
+\date{August 2005}
+
+\maketitle
+
+\section{Introduction}
+
+\nesc is an extension to C~\cite{kandr} designed to embody the structuring
+concepts and execution model of \tinyos~\cite{tinyos}. \tinyos is an
+event-driven operating system designed for sensor network nodes that have
+very limited resources (e.g., 8K bytes of program memory, 512 bytes of
+RAM). \tinyos has been reimplemented in \nesc. This manual describes v1.2 of
+\nesc, changes from v1.0 and v1.1 are summarised in Section~\ref{sec:changes}.
+
+The basic concepts behind \nesc are:
+\begin{itemize}
+\item Separation of construction and composition: programs are built out of
+\emph{components}, which are assembled (``wired'') to form whole
+programs. Components define two scopes, one for their specification
+(containing the names of their \emph{interfaces}) and one for
+their implementation. Components have internal concurrency in the form of
+\emph{tasks}. Threads of control may pass into a component through its
+interfaces. These threads are rooted either in a task or a hardware
+interrupt.
+
+\item Specification of component behaviour in terms of set of
+\emph{interfaces}. Interfaces may be provided or used by the component. The
+provided interfaces are intended to represent the functionality that the
+component provides to its user, the used interfaces represent the
+functionality the component needs to perform its job.
+
+\item Interfaces are bidirectional: they specify a set of functions to be
+implemented by the interface's provider (\emph{commands}) and a set to be
+implemented by the interface's user (\emph{events}). This allows a single
+interface to represent a complex interaction between components (e.g.,
+registration of interest in some event, followed by a callback when
+that event happens). This is critical because all lengthy commands in
+\tinyos (e.g. send packet) are non-blocking; their completion is
+signaled through an event (send packet done). The interface forces a
+component that calls the ``send packet'' command to provide an
+implementation for the ``send packet done'' event.
+
+Typically commands call ``downwards'', i.e., from application components to
+those closer to the hardware, while events call ``upwards''. Certain primitive
+events are bound to hardware interrupts (the nature of this binding is
+system-dependent, so is not described further in this reference manual).
+
+\item Components are statically linked to each other via their interfaces.
+This increases runtime efficiency, encourages robust design, and allows for
+better static analysis of programs.
+
+\item \nesc is designed under the expectation that code will be generated
+by whole-program compilers. This allows for better code generation and
+analysis. An example of this is nesC's compile-time data race detector.
+
+\item The concurrency model of \nesc is based on run-to-completion tasks,
+and interrupt handlers which may interrupt tasks and each other. The \nesc
+compiler signals the potential data races caused by the interrupt handlers.
+\end{itemize}
+
+This document is a reference manual for \nesc rather than a tutorial. The
+\tinyos tutorial\footnote{Available with the \tinyos distribution at
+http://webs.cs.berkeley.edu} presents a gentler introduction to \nesc.
+
+The rest of this document is structured as follows:
+Section~\ref{sec:changes} summarises the new features in \nesc since v1.0.
+Section~\ref{sec:notation} presents the notation used in the reference
+manual, and Section~\ref{sec:scoping} the scoping and naming rules of
+\nesc. Sections~\ref{sec:interface} and~\ref{sec:component} present
+interfaces and components, while
+Sections~\ref{sec:module},~\ref{sec:binary} and~\ref{sec:configuration}
+explain how components are implemented. Section~\ref{sec:concurrency}
+presents \nesc's concurrency model and data-race
+detection. Sections~\ref{sec:attributes},~\ref{sec:external-types}
+and~\ref{sec:misc} cover the extensions to C allowed in \nesc
+programs. Section~\ref{sec:app} explains how C files, \nesc interfaces and
+components are assembled into an application and how \nesc programs
+interact with the preprocessor and linker. Finally,
+Appendix~\ref{sec:grammar} fully defines \nesc's grammar (as an extension
+to the C grammar from Appendix~A of Kernighan and Ritchie (K\&R)
+~\cite[pp234--239]{kandr}), and Appendix~\ref{sec:glossary} gives a
+glossary of terms used in this reference manual.
+
+\section{Changes}
+\label{sec:changes}
+
+The changes from \nesc 1.1 to 1.2 are:
+\begin{itemize}
+\item Generic interfaces: interfaces can now take type parameters
+(allowing, e.g., a single interface definition for a queue of any type of
+values).
+
+\item Generic components: components can now be instantiated (at
+compile-time), and can take constant and type arguments (e.g., a generic queue
+component would take type and queue size arguments).
+
+\item Component specifications can include type and enum constant
+declarations; component selections and wiring statements can be
+interspersed in configurations; configuration implementations can refer to
+the types and enum constants of the components they include.
+
+\item Binary components: programs can now use components defined in 
+binary form. The same functionality supports encapsulating a set of
+components as a single binary component for use in other programs.
+
+\item External types: types with a platform-independent representation
+and no alignment representation can now be defined in nesC (these
+are useful, e.g., for defining packet representations).
+
+\item Attributes: declarations may be decorated with attributes. 
+Information on attribute use may be extracted for use in external
+programs. Details on this extraction process is beyond the scope
+of this language reference manual; see the nesC compiler documentation
+for details. Some predefined attributes have meaning to the nesC
+compiler. Use of \kw{\_\_attribute\_\_} for nesC-specific features
+is deprecated (for details on these deprecated usages, see Section~10.3
+of the nesC 1.1 reference manual).
+
+\item \kw{includes} is deprecated and components can be preceded by
+arbitrary C declarations and macros. As a result, \kw{\#include} behaves
+in a more comprehensible fashion. For details on \kw{includes}, see
+Section~9 of the nesC 1.1 reference manual.
+
+\item \kw{return} can be used within \kw{atomic} statements (the atomic
+statement is implicitly terminated by the \kw{return}).
+\end{itemize}
+
+The changes from \nesc 1.0 to 1.1 are:
+\begin{enumerate}
+\item \kw{atomic} statements. These simplify implementation of concurrent
+data structures, and are understood by the new compile-time data-race
+detector.
+
+\item Compile-time data-race detection gives warnings for variables that
+are potentially accessed concurrently by two interrupt handlers, or an
+interrupt handler and a task.
+
+\item Commands and events which can safely be executed by interrupt
+handlers must be explicitly marked with the \kw{async} storage class
+specifier.
+
+\item The results of calls to commands or events with ``fan-out'' are
+automatically combined by new type-specific combiner functions.
+
+\item \code{uniqueCount} is a new \emph{constant function}
+(Section~\ref{sec:constant-functions}) which counts uses of \code{unique}.
+
+\item The \kw{NESC} preprocessor symbol indicates the language version. It
+is at least 110 for \nesc 1.1, at least 120 for \nesc 1.2.
+\end{enumerate}
+
+\section{Notation}
+\label{sec:notation}
+
+The \texttt{typewriter} font is used for \nesc code and for
+filenames. Single symbols in italics, with optional subscripts, are used to
+refer to \nesc entities, e.g., ``component $K$'' or ``value $v$''.
+
+Explanations of \nesc constructs are presented along with the corresponding
+grammar fragments. In these fragments, we sometimes use \ldots to represent
+elided productions (irrelevant to the construct at
+hand). Appendix~\ref{sec:grammar} presents the full \nesc grammar.
+
+Several examples use the \code{uint8\_t} and \code{uint16\_t} types (from
+the C99 standard \file{inttypes.h} file) and the standard TinyOS
+\code{result\_t} type (which represents success vs failure of an operation).
+
+The grammar of \nesc is an extension the ANSI C grammar. We chose to base
+our presentation on the ANSI C grammar from Appendix~A of Kernighan and
+Ritchie (K\&R) ~\cite[pp234--239]{kandr}. Words in \emph{italics} are
+non-terminals and non-literal terminals, \kw{typewriter} words and symbols
+are literal terminals. The subscript \emph{opt} indicates optional
+terminals or non-terminals. In some cases, we change some ANSI C grammar
+rules. We indicate this as follows: \emph{also} indicates additional
+productions for existing non-terminals, \emph{replaced by} indicates
+replacement of an existing non-terminal. We do not repeat the productions
+from the C grammar here, but Appendix~\ref{sec:grammar} lists and 
+summarises the C grammar rules used by \nesc.
+
+
+\section{Scopes and Name Spaces in \nesc}
+\label{sec:scoping}
+
+\nesc includes the standard C name spaces: \emph{object}, which includes
+variables, functions, typedefs, and enum-constants; \emph{label} for
+\kw{goto} labels; \emph{tag} for \kw{struct}, \kw{union}, \kw{enum} tags.
+It adds an additional \emph{component} name space for component and
+interface definitions. For simplicity, we assume that each scope contains
+all four name spaces, though language restrictions mean that many of these
+name spaces are empty (e.g., all component and interface definitions are
+global, so the \emph{component} name space is empty in all but the global
+scope).
+
+\nesc follows the standard C scoping rules, with the following
+additions:
+\begin{itemize}
+\item Each interface definition introduces two scopes. The \emph{interface
+parameter scope} is nested in the global scope and contains the parameters
+of generic interface definitions. The \emph{interface scope} is nested in
+the interface parameter scope and contains the interface's commands and
+events.
+
+\item Each component definition introduces three new scopes. The
+\emph{component parameter scope} is nested in the global scope and contains
+the parameters of generic component definitions. The \emph{specification
+scope} is nested in the component parameter scope and contains the
+component's specification elements. 
+
+The \emph{implementation scope} is nested in the specification scope.  For
+configurations, the implementation scope contains the names by which this
+component refers to its included components
+(Section~\ref{sec:config-components}). For modules, the implementation
+scope holds the tasks, C declarations and definitions that form the
+module's body. These declarations, etc may introduce their own nested
+scopes within the implementation scope, following the usual C scoping
+rules.
+\end{itemize}
+As usual in C, scopes must not have multiple definitions of the same
+name within the same name space.
+
+\section{Interface and Component Specification}
+\label{sec:interface}
+
+A \nesc \emph{interface definition} specifies a bi-directional interaction
+between two components, known as the \emph{provider} and
+\emph{user}. Interactions via interfaces are specified by two sets of
+functions: \emph{commands} are function calls from the user to the provider
+component, \emph{events} are function calls from the provider to the user
+component. In many cases, the provider component is providing some service
+(e.g., sending messages over the radio) and commands represent requests,
+events responses.
+
+An interface definition has a unique name, optional C type parameters, and
+contains declarations for its command and event functions. An interface
+definition with type parameters is called a \emph{generic interface
+definition}.
+
+An \emph{interface type} is a reference to an interface definition and, if
+the referenced definition is generic, corresponding type
+arguments. Components can only be connected via two interfaces with the
+same type.
+
+A component's \emph{specification} is the set of interfaces that it
+provides and uses. Each provided or used interface has a name and an
+interface type. Component specifications can also contain \emph{bare}
+commands and events (i.e., not contained in an interface), \kw{typedef}s
+and tagged type declarations; to simplify the exposition we defer
+discussion of these to Sections~\ref{sec:bare} and~\ref{sec:spec-other}.
+
+For instance, the following source code
+\begin{quote} \begin{verbatim}
+interface SendMsg { // send a radio message
+  command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg);
+  event result_t sendDone(TOS_MsgPtr msg, result_t success);
+}
+
+interface Init<t> { // a generic interface definition
+  command void doit(t x);
+}
+
+module Simple {
+  provides interface Init<int> as MyInit;
+  uses interface SendMsg as MyMessage;
+} ...
+\end{verbatim} \end{quote}
+shows two interface definitions, \code{SendMsg} and \code{Init}, and the
+specification of the \code{Simple} component. The specification of
+\code{Simple} has two elements: \code{MyInit}, a provided interface of type
+\code{Init<int>} and \code{MyMessage} a used interface of type
+\code{SendMsg}. \code{Simple} must implement the \code{MyInit.doit} command
+and the \code{MyMessage.sendDone} event. It can call the
+\code{MyMessage.send} command.
+
+The rest of this section covers interface definitions, interface types and
+component specifications in detail. The sections on component definition
+(Section~\ref{sec:component}) and implementations
+(Sections~\ref{sec:module} and~\ref{sec:configuration}) explain how
+commands and events are called and implemented, and how components are
+linked together through their interfaces.
+
+\subsection{Interface Definitions}
+
+Interface definitions have the following syntax:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+interface-definition:\\
+\>     \kw{interface} identifier type-parameters\opt\kw{\{} declaration-list \kw{\}}
+\end{tabbing}
+\end{quote}
+Interface definitions have a name (\emph{identifier}) with global
+scope. This name belongs to the component name space
+(Section~\ref{sec:scoping}), so interface definitions must have a name
+distinct from other interface definitions and from components, however they
+do not conflict with regular C declarations.
+
+The \emph{type-parameters} is a list of optional C type parameters
+for this interface definition:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+type-parameters:\\
+\>     \kw{<} type-parameter-list \kw{>}\\
+\\
+type-parameter-list:\\
+\>     identifier\\
+\>     type-parameter-list \kw{,} identifier
+\end{tabbing}
+\end{quote}
+These parameters belong to the object name space of the interface's
+parameter scope (Section~\ref{sec:scoping}) and are therefore visible in
+the \emph{declaration-list}. See Section~\ref{sec:type-parameters} for how
+type parameters interact with C's type system (in brief, these type
+parameters can be used like \kw{typedef}'d types). An interface definition
+with type parameters is called a \emph{generic interface definition}.
+
+The \emph{declaration-list} of an interface definition specifies a set of
+commands and events. It must consist of function declarations with the
+\kw{command} or \kw{event} storage class:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+storage-class-specifier: \emph{also one of}\\
+\>     \kw{command} \kw{event} \kw{async}\\
+\end{tabbing}
+\end{quote}
+The optional \kw{async} keyword indicates that the command or event can be
+executed in an interrupt handler (see Section~\ref{sec:concurrency}). The
+interface's commands and events belong to the object name space of the
+interface's scope (Section~\ref{sec:scoping}).
+
+
+The example code above showed two simple interface definitions
+(\code{SendMsg} and \code{Init}). The following
+\begin{quote} \begin{verbatim}
+interface Queue<t> { 
+  async command void push(t x);
+  async command t pop();
+  async command bool empty();
+  async command bool full();
+}
+\end{verbatim} \end{quote}
+defines a generic interface \code{Queue} with a single type parameter,
+defining four commands which can be executed in an interrupt handler.
+
+\subsection{Interface Types}
+
+An interface type is specified by giving the name of an interface 
+definition and, for generic interface definitions, any required type
+arguments:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+interface-type: \\
+\>     \kw{interface} identifier type-arguments\opt\\
+\\
+type-arguments:\\
+\>     \kw{<} type-argument-list \kw{>}\\
+\\
+type-argument-list:\\
+\>     type-name\\
+\>     type-argument-list \kw{,} type-name
+\end{tabbing} \end{quote}
+There must be as many types in \emph{type-arguments} as there are
+parameters in the interface definition's type parameter list.
+Type arguments can not be incomplete or of function or array type.
+
+Two interface types are the same if they refer to the same interface
+definition and their corresponding type arguments (if any) are of the same
+C type. Example interface types are \kw{interface SendMsg} and
+\kw{interface Queue<int>}.
+
+\subsection{Component Specification}
+\label{sec:component-spec}
+
+The first part of a component's definition (see Section~\ref{sec:component})
+is its \emph{specification}, a declaration of provided or used
+specification elements, where each element is an interface, 
+a bare command or event (Section~\ref{sec:bare}) or a declaration
+(Section~\ref{sec:spec-other}):
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+component-specification:\\
+\>     \kw{\{} uses-provides-list \kw{\}}\\
+\\
+uses-provides-list:\\
+\>     uses-provides\\
+\>     uses-provides-list uses-provides\\
+\\
+uses-provides:\\
+\>     \kw{uses} specification-element-list\\
+\>     \kw{provides} specification-element-list\\
+\\
+specification-element-list:\\
+\>     specification-element\\
+\>     \kw{\{} specification-elements \kw{\}}\\
+\\
+specification-elements:\\
+\>     specification-element\\
+\>     specification-elements specification-element\\
+\end{tabbing} \end{quote}
+There can be multiple \kw{uses} and \kw{provides} directives in a component
+specification. Multiple used or provided specification elements can be
+grouped in a single directive by surrounding them with \{ and \}. For
+instance, these two specifications are identical:
+
+\begin{quote} \begin{verbatim}
+module A1 {                          module A1 {      
+  uses interface X;                    uses {         
+  uses interface Y;                      interface X; 
+} ...                                    interface Y; 
+                                       }              
+                                     } ...            
+\end{verbatim} \end{quote}
+
+An interface declaration has an interface type and an optional name:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+specification-element:\\
+\>     interface-type instance-name\opt instance-parameters\opt\\
+\>     \ldots\\
+\\
+instance-name:\\
+\>     \kw{as} identifier\\
+\\
+instance-parameters:\\
+\>     \kw{[} parameter-type-list \kw{]}
+\end{tabbing} \end{quote}
+If the name is omitted, the interface's name is the same as the name of the
+interface definition specified by the interface type: \code{interface
+SendMsg} means the same thing as \code{interface SendMsg as SendMsg} and
+\code{interface Queue<int>} is the same as \code{interface Queue<int> as
+Queue}. A specification can contain independent interfaces of the
+same interface type, e.g., 
+\begin{quote}
+\begin{verbatim}
+provides interface X as X1; 
+uses interface X as X2;
+\end{verbatim}
+\end{quote}
+The interface names belong to the object name space of the specification's
+scope (Section~\ref{sec:scoping}), thus there is no confusion between
+interface names and interface definition names (the latter are in the
+component name space).
+
+An interface declaration without \emph{instance-parameters} (e.g.,
+\code{interface X as Y}) declares a single interface to this
+component. A declaration with \emph{instance-parameters} (e.g.,
+\code{interface SendMsg S[uint8\_t id]}) declares a \emph{parameterised
+interface}, corresponding to multiple interfaces to this component, one for
+each distinct tuple of parameter values (so \code{interface SendMsg as
+S[uint8\_t id, uint8\_t id2]} declares 256 * 256 interfaces of type
+\code{SendMsg}). The types of the \emph{parameters} must be integral types
+(\kw{enum}s are not allowed at this time).
+
+The specification for \code{AMStandard}, a component that dispatches
+messages received from the serial port and the radio to the application
+based on the ``active message id'' stored in the message, and sends
+messages to the radio or serial port depending on the selected destination
+address, is typical of many TinyOS system components:
+\begin{quote} \begin{verbatim}
+module AMStandard {
+  provides {
+    interface StdControl;
+    
+    // The interface are parameterised by the active message id
+    interface SendMsg[uint8_t id];
+    interface ReceiveMsg[uint8_t id];
+  }
+  uses {
+    interface StdControl as RadioControl;
+    interface SendMsg as RadioSend;
+    interface ReceiveMsg as RadioReceive;
+
+    interface StdControl as SerialControl;
+    interface SendMsg as SerialSend;
+    interface ReceiveMsg as SerialReceive;
+  }
+} ...
+\end{verbatim} \end{quote}
+It provides or uses nine interfaces:
+\begin{itemize}
+\item The provided interface \code{StdControl} of type \code{StdControl}
+supports initialisation of \code{AMStandard}.
+\item The provided parameterised interfaces of type \code{SendMsg} and
+\code{ReceiveMsg} (named \code{SendMsg} and
+\code{ReceiveMsg} respectively) support dispatching of received
+messages and sending of messages with a particular active message id
+\item The used interfaces control, send and receive messages from the radio
+and serial port respectively (another TinyOS component, the
+\code{GenericComm} configuration wires \code{AMStandard} to the lower-level
+components providing radio and serial port networking).
+\end{itemize}
+
+\subsection{Bare Commands and Events}
+\label{sec:bare}
+
+Commands or events can be included directly as specification elements by
+including a standard C function declaration with
+\kw{command} or \kw{event} as its storage class specifier:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+specification-element:\\
+\>     declaration\\
+\>     \ldots\\
+\\
+storage-class-specifier: \emph{also one of}\\
+\>     \kw{command} \kw{event} \kw{async}\\
+\end{tabbing} \end{quote}
+It is a compile-time error if the \emph{declaration} is not a function
+declaration with the \kw{command} or \kw{event} storage class. As in
+interfaces, \kw{async} indicates that the command or event can be called
+from an interrupt handler. These bare command and events belong to the
+object name space of the specification's scope (Section~\ref{sec:scoping}).
+
+As with interface declarations, bare commands (bare events) can have instance
+parameters; these are placed before
+the function's regular parameter list, e.g., \code{command void
+send[uint8\_t id](int x)}: 
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+direct-declarator: \emph{also}\\
+\>     direct-declarator instance-parameters \kw{(} parameter-type-list \kw{)}\\
+\>     \ldots
+\end{tabbing} \end{quote}
+
+If instance parameters are present, the declaration specifies a \emph{bare,
+parameterised command} (\emph{bare, parameterised event}). Note that
+instance parameters are not allowed on commands or events inside interface
+definitions.
+
+Module \code{M} of Figure~\ref{fig:wiring}
+(Section~\ref{sec:wiring-semantics}) shows an example of a component
+specification with a bare command.
+
+\subsection{Other Declarations in Specifications}
+\label{sec:spec-other}
+
+A component specification can also include regular declarations (these
+belong to the specification scope):
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+uses-provides: \emph{also}\\
+\>     declaration\\
+\end{tabbing} \end{quote}
+
+These declarations must be either \kw{typedef}s, or tagged type
+declarations. For example,
+\begin{quote} \begin{verbatim}
+module Fun {
+  typedef int fun_t;
+  enum { MYNUMBER = 42 };
+}
+implementation { ... }
+\end{verbatim}
+\end{quote}
+
+Note that declaration of an \kw{enum} implicitly places enum constants
+in the component's specification scope.
+
+
+\subsection{Command and Event Terminology}
+
+We say that a bare command (event) $F$ provided in the specification of
+component $K$ is \emph{provided command (event)} $F$ of $K$; similarly, a
+bare command (event) used in the specification of component $K$ is
+\emph{used command (event)} $F$ of $K$.
+
+A command $F$ in a provided interface $X$ of component $K$ is
+provided command $X.F$ of $K$; a command $F$ in a used interface
+$X$ of $K$ is used command $X.F$ of $K$; an event $F$ in a provided
+interface $X$ of $K$ is used event $X.F$ of $K$; and an event $F$
+in a used interface $X$ of $K$ is provided event $X.F$ of $K$
+(note the reversal of used and provided for events due to the bidirectional
+nature of interfaces). 
+
+We use Greek letters $\alpha, \beta, \ldots$ to refer to any command or
+event of a component when the distinction between bare commands (events)
+and commands (events) in interfaces is not relevant. Commands or events
+$\alpha$ of $K$ are parameterised if the specification element to which they
+correspond is parameterised.
+
+We will often simply refer to the ``command or event $\alpha$ of $K$'' when
+the used/provided distinction is not relevant.
+
+\section{Component Definition}
+\label{sec:component}
+
+A \nesc component definition has a name, optional arguments, a
+specification and an implementation:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+component:\\
+\>     comp-kind identifier comp-parameters\opt component-specification implementation\opt\\
+\\
+comp-kind:\\
+\>     \kw{module}\\
+\>     \kw{configuration}\\
+\>     \kw{component}\\
+\>     \kw{generic module}\\
+\>     \kw{generic configuration}\\
+\\
+implementation:\\
+\>     module-implementation\\
+\>     configuration-implementation
+\end{tabbing} \end{quote}
+
+The component name belongs to the component name space of the global scope,
+hence must be distinct from other components and from interface
+definitions. There are three ways a component can be implemented:
+\emph{modules} are components which are implemented with C code
+(Section~\ref{sec:module}), \emph{binary components} are components which
+are only available in binary form (Section~\ref{sec:binary}), and
+\emph{configurations} are components which are implemented by assembling
+other components (Section~\ref{sec:configuration}).
+
+Components with parameters are called \emph{generic components}, they must
+be instantiated in a configuration before they can be used
+(Section~\ref{sec:configuration}). Components without parameters exist as a
+single instance which is implicitly instantiated. The component's
+definition must reflect these distinctions (the \emph{comp-kind} rule): for
+instance, a generic module \code{A} is defined with \code{generic module
+A() \{}\ldots, a non-generic configuration \code{B} is defined with
+\code{configuration B \{}\ldots Binary components cannot be generic.
+
+\subsection{Generic Components}
+\label{sec:generic-components}
+
+Generic component parameter lists are similar to function parameter lists,
+but allow for type parameters by (re)using the \kw{typedef} keyword:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+comp-parameters:\\
+\>     \kw{(} component-parameter-list \kw{)}\\
+\\
+component-parameter-list:\\
+\>     component-parameter\\
+\>     component-parameter-list \kw{,} component-parameter\\
+\\
+component-parameter:\\
+\>     parameter-declaration\\
+\>     \kw{typedef} identifier
+\end{tabbing} \end{quote}
+The parameters belong to the object name space of the component's parameter
+scope (Section~\ref{sec:scoping}), and are hence visible both in the
+component's specification and implementation. Non-type parameters must be
+of arithmetic or \code{char[]} type. These parameters can be used as
+follows:
+\begin{itemize}
+\item Type parameters can be used as if the argument was of some unknown
+\kw{typedef}'d type. Additionally, type parameters can be restricted to
+integral or numerical types, allowing integral or numerical operations to
+be used on the type. For more details, see
+Section~\ref{sec:type-parameters}.
+\item Non-type parameters are constants of some unknown value (for more
+details, see Section~\ref{sec:constant-folding}); they can be used in any
+constant expression. They cannot be assigned to.
+\end{itemize}
+
+An instantiation with arguments $a_1, \ldots, a_n$ of generic component $X$
+with parameters $p_1, \ldots, p_n$ behaves like a new, non-generic component
+with the specification and implementation of $X$ where all uses of
+parameter $p_i$ have been replaced by the corresponding $a_i$ value or
+type.\footnote{The most straightforward implementation of these semantics
+for generic modules is to duplicate $X$'s code. In some cases (e.g., no
+arguments to $X$), a \nesc compiler might be able to share code between the
+instances of $X$ at some runtime cost.} Section~\ref{sec:load-component}
+details when generic components get instantiated.
+
+
+\subsection{Examples}
+
+Some examples (with simple specifications):
+\begin{quote}
+\begin{verbatim}
+module A { provides interface X; } ...
+component B { uses interface X } // no implementation for binary components!
+generic configuration B() { uses interface Y; } ...
+generic module AQueue(int n, typedef t) { provides interface Queue<t>; } ...
+\end{verbatim}
+\end{quote}
+\code{A} is a simple module, \code{B} a generic configuration with no
+arguments but which can be instantiated multiple times, \code{AQueue}
+a generic module implementing an \code{n} entry queue with elements of
+type \code{t}. Note how \code{AQueue} instantiates the generic interface
+\code{Queue} with its type parameter \code{t}.
+
+\section{Component Implementation: Modules}
+\label{sec:module}
+
+Modules implement a component specification with C code:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+module-implementation:\\
+\>     \kw{implementation} \kw{\{} translation-unit \kw{\}}\\
+\end{tabbing} \end{quote}
+where \emph{translation-unit} is a list of C declarations and definitions
+(see K\&R~\cite[pp234--239]{kandr}). 
+
+The top-level declarations of the module's \emph{translation-unit} belong
+to the module's implementation scope (Section~\ref{sec:scoping}). These
+declarations have indefinite extent and can be: any standard C declaration
+or definition, a task declaration or definition (placed in the object name
+space), a command or event implementation.
+
+\subsection{Implementing the Module's Specification}
+
+The \emph{translation-unit} must implement all provided commands
+(events) $\alpha$ of the module (i.e., all commands in provided
+interfaces, all events in used interfaces, and all bare, provided
+commands and events). A module can call any of its commands and
+signal any of its events.
+
+These command and event implementations are specified with the following C
+syntax extensions:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+storage-class-specifier: \emph{also one of}\\
+\>     \kw{command} \kw{event} \kw{async}\\
+\\
+declaration-specifiers: \emph{also}\\
+\>     \kw{default} declaration-specifiers\\
+\\
+direct-declarator: \emph{also}\\
+\>     identifier \kw{.} identifier \\
+\>     direct-declarator interface-parameters \kw{(} parameter-type-list \kw{)}\\
+\end{tabbing} \end{quote}
+The implementation of non-parameterised command or event $\alpha$ has the
+syntax of a C function definition for $\alpha$ (note the extension to
+\emph{direct-declarator} to allow \code{.} in function names) with storage
+class \kw{command} or \kw{event}. Additionally, the \kw{async} keyword must
+be included iff it was included in $\alpha$'s declaration. For example, in
+a module that provides interface \code{Send} of type \kw{SendMsg} (shown at
+the start of Section~\ref{sec:interface}):
+\begin{quote} \begin{verbatim}
+command result_t Send.send(uint16_t address, uint8_t length, TOS_MsgPtr msg) {
+  ...
+  return SUCCESS;
+}
+\end{verbatim} \end{quote}
+
+The implementation of parameterised command or event $\alpha$ with
+instance parameters $P$ has the syntax of a C function definition for
+$\alpha$ with storage class \kw{command} or \kw{event} where the
+function's regular parameter list is prefixed with the parameters $P$
+within square brackets. These instance parameter declarations
+$P$ belong to $\alpha$'s function-parameter scope and have the same
+extent as regular function parameters. For example, in a module that
+provides interface \code{Send[uint8\_t id]} of type \kw{SendMsg}:
+\begin{quote} \begin{verbatim}
+command result_t Send.send[uint8_t id](uint16_t address, uint8_t length, 
+                                       TOS_MsgPtr msg) {
+  ...
+  return SUCCESS;
+}
+\end{verbatim} \end{quote}
+
+Compile-time errors are reported when:
+\begin{itemize}
+\item There is no implementation for a provided command or event.
+\item The type signature, optional interface parameters and presence or
+absence of the \kw{async} keyword of a command or event does not match that
+given in the module's specification.
+\end{itemize}
+
+\subsection{Calling Commands and Signaling Events}
+
+The following extensions to C syntax are used to call events and signal
+commands:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+postfix-expression:\\
+\>     postfix-expression \kw{[} argument-expression-list \kw{]}\\
+\>     call-kind\opt primary \kw{(} argument-expression-list\opt \kw{)}\\
+\>     \ldots
+\\\\
+call-kind: \emph{one of}\\
+\>     \kw{call} \kw{signal} \kw{post}
+\end{tabbing} \end{quote}
+
+A non-parameterised command $\alpha$ is called with \code{call
+$\alpha$(...)}, a non-parameterised event $\alpha$ is signaled with
+\code{signal $\alpha$(...)}. For instance, in a module that uses interface
+\code{Send} of type \kw{SendMsg}: \code{call Send.send(1, sizeof(Message),
+\&msg1)}.
+
+A parameterised command $\alpha$ (respectively, an event) with $n$
+instance parameters of type $\tau_1, \ldots, \tau_n$ is called with
+instance arguments $e_1, \ldots, e_n$ as follows: \code{call
+$\alpha$[$e_1, \ldots, e_n$](...)}  (respectively, \code{signal
+$\alpha$[$e_1, \ldots, e_n$](...)}). Interface argument $e_i$
+must be assignable to type $\tau_i$; the actual interface argument value
+is the value of $e_i$ cast to type $\tau_i$. For instance, in a module that uses
+interface \code{Send[uint8\_t id]} of type \kw{SendMsg}:
+
+\begin{quote} \begin{verbatim}
+  int x = ...;
+  call Send.send[x + 1](1, sizeof(Message), &msg1);
+\end{verbatim} \end{quote}
+
+Execution of commands and events is immediate, i.e., \kw{call} and
+\kw{signal} behave similarly to function calls. The actual command or event
+implementations executed by a \code{call} or \code{signal} expression
+depend on the wiring statements in the program's configurations. These
+wiring statements may specify that 0, 1 or more implementations are to be
+executed. When more than 1 implementation is executed, we say that the
+module's command or event has ``fan-out''.  
+
+A module can specify a default implementation for a used command or
+event $\alpha$ (a compile-time error occurs if a default
+implementation is supplied for a provided command or event). Default
+implementations are executed when $\alpha$ is not connected to any
+command or event implementation (see
+Section~\ref{sec:wiring-semantics}). A default command or event is
+defined by prefixing a command or event implementation with the
+\kw{default} keyword:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+declaration-specifiers: \emph{also}\\
+\>     \kw{default} declaration-specifiers\\
+\end{tabbing} \end{quote}
+For instance, in a in a module that uses interface \code{Send} of type
+\kw{SendMsg}:
+\begin{quote} \begin{verbatim}
+default command result_t Send.send(uint16_t address, uint8_t length, 
+                                   TOS_MsgPtr msg) {
+  return SUCCESS;
+}
+/* call is allowed even if interface Send is not connected */
+... call Send.send(1, sizeof(Message), &msg1) ...
+\end{verbatim} \end{quote}
+
+Section~\ref{sec:wiring-semantics} specifies what command or event
+implementations are actually executed and what result gets returned by
+\code{call} and \code{signal} expressions.
+
+\subsection{Tasks}
+
+A task is an independent locus of control defined by a function of
+storage class \kw{task} returning \kw{void} and with no arguments:
+\code{task void myTask() \{ ... \}}.\footnote{\nesc functions with no
+arguments are declared with \code{()}, not \code{(void)}. See
+Section~\ref{sec:misc-void}.} A task can also have a forward declaration, e.g.,
+\code{task void myTask();}.
+
+Tasks are posted for later execution by prefixing a call to the task
+with \kw{post}, e.g., \code{post myTask()}. Post returns immediately;
+its return value is 1 if the task was successfully posted, 0
+otherwise. The type of a post expression is \code{unsigned char}.
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+storage-class-specifier: \emph{also one of}\\
+\>     \kw{task}\\
+\\
+call-kind: \emph{also one of}\\
+\>     \kw{post}
+\end{tabbing} \end{quote}
+Section~\ref{sec:concurrency}, which presents \nesc's concurrency
+model, explains when tasks get executed.
+
+\subsection{Atomic statements}
+
+Atomic statements:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+atomic-stmt: \\
+\>     \kw{atomic} statement\\
+\end{tabbing} \end{quote}
+guarantee that the statement is executed ``as-if'' no other
+computation occurred simultaneously, and furthermore any values stored
+inside an atomic statement are visible inside all subsequent atomic
+statements.  Atomic statements are used to implement mutual exclusion, for
+updates to concurrent data structures, etc. The following example
+uses \kw{atomic} to prevent concurrent execution of \code{do\_something}:
+\begin{verbatim}
+  bool busy; // global
+
+  void f() { // called from an interrupt handler
+    bool available;
+
+    atomic {
+      available = !busy;
+      busy = TRUE;
+    }
+    if (available) do_something;
+    atomic busy = FALSE;
+  }
+\end{verbatim}
+
+Atomic sections should be short, though this is not currently enforced in
+any way. Except for \kw{return} statements, control may only flow
+``normally'' in or out of on atomic statement: any \kw{goto}, \kw{break} or
+\kw{continue} that jumps in or out of an atomic statement is an error. A
+\kw{return} statement is allowed inside an atomic statement; at runtime
+the atomic section ends after evaluating the returned expression (if any)
+but before actually returning from the function.
+
+Section~\ref{sec:concurrency} discusses the relation between \kw{atomic}, 
+\nesc's concurrency model, and the data-race detector.
+
+\section{Component Implementation: Binary Components}
+\label{sec:binary}
+
+Binary components are declared with the \kw{component} keyword and
+have no \kw{implementation} section. Instead, program's using binary
+components must be linked with an object file providing the binary
+component's implementation --- this object file might be the result
+of compiling a different \nesc program.
+
+This object file must provide definitions for the provided commands
+and events of the binary component, and can call its used commands
+and events. For more details on external linkage rules for \nesc,
+see Section~\ref{sec:linkage}.
+
+Note that \kw{default} commands and events (see Sections~\ref{sec:module}
+and~\ref{sec:wiring-semantics}) do not work across binary component
+boundaries --- the used commands and events of a binary component must
+be fully wired.
+
+\section{Component Implementation: Configurations}
+\label{sec:configuration}
+
+Configurations implement a component specification by selecting regular
+components or instantiating generic components, and then connecting
+(``wiring'') these components together. The implementation section of a
+configuration consists of a list of configuration elements:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+configuration-implementation:\\
+\>     \kw{implementation} \kw{\{} configuration-element-list\opt \kw{\}}\\
+\\
+configuration-element-list:\\
+\>     configuration-element\\
+\>     configuration-element-list configuration-element\\
+\\
+configuration-element:\\
+\>     components\\
+\>     connection\\
+\>     declaration\\
+\\
+\end{tabbing} \end{quote}
+
+A \emph{components} element specifies the components that are used to build
+this configuration (Section~\ref{sec:config-components}), a
+\emph{connection} specifies a single wiring statement
+(Section~\ref{sec:wiring}), and a \emph{declaration} can declare a
+\kw{typedef} or tagged type (other C declarations are compile-time errors)
+(Section~\ref{sec:config-decls}).
+
+A configuration $C$'s wiring statements connects two sets of specification
+elements:
+\begin{itemize}
+\item $C$'s specification elements. In this section, we refer to these as
+\emph{external} specification elements.
+\item The specification elements of the components referred to instantiated
+in $C$. We refer to these as \emph{internal} specification elements.
+\end{itemize}
+
+\subsection{Included components}
+\label{sec:config-components}
+
+A \emph{components} elements specifies some components used to build this
+configuration. These can be:
+\begin{itemize}
+\item A non-generic component $X$. Non-generic components are implicitly
+instantiated, references to $X$ in different configurations all
+refer to the same component.
+
+\item An instantiation of a generic component $Y$. Instantiations of $Y$ in
+different configurations, or multiple instantiations in the same
+configuration represent different components (see
+Section~\ref{sec:generic-components}).
+\end{itemize}
+
+The syntax of \emph{components} is as follows:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+components:\\
+\>     \kw{components} component-line \kw{;}\\
+\\
+component-line:\\
+\>     component-ref instance-name\opt\\
+\>     component-line \kw{,} component-ref instance-name\opt\\
+\\
+instance-name:\\
+\>     \kw{as} identifier\\
+\\
+component-ref:\\
+\>     identifier\\
+\>     \kw{new} identifier \kw{(} component-argument-list \kw{)}\\
+\\
+component-argument-list:\\
+\>     component-argument\\
+\>     component-argument-list \kw{,} component-argument\\
+\\
+component-argument:\\
+\>     expression\\
+\>     type-name
+\end{tabbing} \end{quote}
+Each \emph{component-ref} specifies a non-generic component $X$ by simply
+giving its name (a compile-time error occurs if $X$ is generic) and
+a generic component $Y$ with $\kw{new} Y(args)$ (a compile-time error occurs
+if $Y$ is not generic). The arguments to $Y$ must match the number of
+parameters of $Y$'s definition, and:
+\begin{itemize}
+\item If the parameter is a type parameter, then the argument must be
+a type which is not incomplete, or of function or array type.
+\item If the parameter is of type \code{char[]}, the argument must be
+a string constant.
+\item If the parameter is of arithmetic type, the argument must be a 
+constant whose value is in the range of the parameter type.
+\end{itemize}
+
+Within a \emph{connection}, a component specified in 
+\emph{components} is referred to by:
+\begin{itemize}
+\item The name explicitly specified by the \code{X as Y} syntax
+(\emph{instance-name}). Use of \kw{as} is necessary, e.g., when
+instantiating the same generic component more than once in a given
+configuration.
+\item The name of the component definition (\code{components new X(), Y;} is
+the same as \code{components new X() as X, Y as Y;}).
+\end{itemize}
+The names specified by \emph{components} elements belong to the object name
+space of the component's implementation scope (Section~\ref{sec:scoping}).
+
+This \code{NoWiring} configuration:
+\begin{quote}
+\begin{verbatim}
+configuration NoWiring { }
+implementation {
+  components A, new AQueue(10, int);
+  components new AQueue(20, float) as SecondQueue;
+}
+\end{verbatim}
+\end{quote}
+selects component \code{A}, and instantiates generic component
+\code{AQueue} twice. The two instances of \code{AQueue} are known as
+\code{AQueue} and \code{SecondQueue} within \code{NoWiring}.
+
+\subsection{Wiring}
+\label{sec:wiring}
+
+Wiring is used to connect specification elements (interfaces, commands,
+events) together. This section and the next (Section~\ref{sec:implicit})
+define the syntax and compile-time rules for
+wiring. Section~\ref{sec:wiring-semantics} details how a program's wiring
+statements dictate which functions get called by the \kw{call} and
+\kw{signal} expressions found in modules. 
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+connection:\\
+\>     endpoint \kw{=} endpoint\\
+\>     endpoint \kw{->} endpoint\\
+\>     endpoint \kw{<-} endpoint\\
+\\
+endpoint:\\
+\>     identifier-path \\
+\>     identifier-path \kw{[} argument-expression-list \kw{]}\\
+\\
+identifier-path:\\
+\>     identifier\\
+\>     identifier-path \kw{.} identifier\\
+\end{tabbing} \end{quote}
+
+
+Wiring statements connect two \emph{endpoints}. The
+\emph{identifier-path} of an \emph{endpoint} specifies a specification
+element (either internal or external). The
+\emph{argument-expression-list} optionally specifies instance
+arguments. We say that an endpoint is parameterised if its
+specification element is parameterised and the endpoint has no
+arguments. A compile-time error occurs if an endpoint has
+arguments and any of the following is true:
+\begin{itemize}
+\item Some arguments is not a constant expression.
+\item The endpoint's specification element is not parameterised.
+\item There are more (or less) arguments than there are parameters
+on the specification element.
+\item The argument's values are not in range for the specification element's
+parameter types.
+\end{itemize}
+
+A compile-time error occurs if the \emph{identifier-path} of an
+\emph{endpoint} is not of one the three following forms:
+\begin{itemize}
+\item $X$, where $X$ names an external specification element.
+\item $K.X$ where $K$ is a component from the \emph{component-list} and
+$X$ is a specification element of $K$.
+\item $K$ where $K$ is a some component name from the
+\emph{component-list}.  This form is used in implicit connections,
+discussed in Section~\ref{sec:implicit}. This form cannot be used when
+arguments are specified.
+
+Note that a component name can hide an external specification element,
+preventing the element from being wired:
+\begin{quote}
+\begin{verbatim}
+configuration AA { provides interface X as Y; }
+implementation {
+  components Z as Y, Z2 as Y2;
+
+  Y /* refers to component Z, not interface X */ -> Y2.A;
+}
+\end{verbatim}
+\end{quote}
+Hiding specification elements will always result in a compile-time error as
+external specification elements must all be wired.
+\end{itemize}
+
+There are three wiring statements in \nesc:
+\begin{itemize}
+\item \emph{endpoint}$_1$ \code{=} \emph{endpoint}$_2$ \ (equate wires):
+Any connection involving an external specification element. These
+effectively make two specification elements equivalent.
+
+Let $S_1$ be the specification element of \emph{endpoint}$_1$ and $S_2$
+that of \emph{endpoint}$_2$. One of the following two conditions must hold
+or a compile-time error occurs:
+\begin{itemize}
+\item $S_1$ is internal, $S_2$ is external (or vice-versa) and $S_1$ and
+$S_2$ are both provided or both used,
+\item $S_1$ and $S_2$ are both external and one is provided and the other used.
+\end{itemize}
+
+\item \emph{endpoint}$_1$ \code{->} \emph{endpoint}$_2$ \ (link wires): A
+connection between two internal specification elements. Link wires always
+connect a used specification element specified by \emph{endpoint}$_1$ to a
+provided one specified by \emph{endpoint}$_2$ . If these two conditions do
+not hold, a compile-time error occurs.
+
+\item \emph{endpoint}$_1$ \code{<-} \emph{endpoint}$_2$ is equivalent to
+\emph{endpoint}$_2$ \code{->} \emph{endpoint}$_1$.
+\end{itemize}
+
+In all three kinds of wiring, the two specification elements specified must
+be compatible, i.e., they must both be commands, or both be events, or both
+be interfaces. Also, if they are commands (or events), then they
+must both have the same function signature. If they are interfaces
+they must have the same interface type. If these conditions do not hold,
+a compile-time error occurs.
+
+If one endpoint is parameterised, the other must be too and must have the
+same parameter types; otherwise a compile-time error occurs.
+
+A configuration's external specification elements must all be wired or
+a compile-time error occurs. However, internal specification elements
+may be left unconnected (these may be wired in another configuration,
+or they may be left unwired if the modules have the appropriate
+\kw{default} event or command implementations, see
+Section~\ref{sec:wiring-semantics}).
+
+\subsection{Implicit Connections}
+\label{sec:implicit}
+
+It is possible to write \code{$K_1$ <- $K_2$.$X$} or \code{$K_1$.$X$ <-
+$K_2$} (and the same with \kw{=}, or \kw{->}). This syntax iterates through
+the specification elements of $K_1$ (resp. $K_2$) to find a specification
+element $Y$ such that \code{$K_1$.$Y$ <- $K_2$.$X$} (resp. \code{$K_1$.$X$
+<- $K_2$.$Y$}) forms a valid connection. If exactly one such $Y$ can
+be found, then the connection is made, otherwise a compile-time error
+occurs.
+
+For instance, with:
+\begin{quote} \begin{verbatim}
+module M1 {                              module M2 {
+  provides interface StdControl;           uses interface StdControl as SC;
+} ...                                    } ...
+
+              configuration C { }
+              implementation {
+                components M1, M2;
+                M2.SC -> M1;
+              }
+\end{verbatim} \end{quote}
+The \code{M2.SC -> M1} line is equivalent to \code{M2.SC -> M1.StdControl}.
+
+\subsection{Declarations in Configurations}
+\label{sec:config-decls}
+
+As we saw above, like component specifications
+(Section~\ref{sec:spec-other}), configurations can include \kw{typedef} and
+tagged type declarations. These declarations belong to the configuration's
+implementation scope.
+
+Additionally, a configuration can refer to the \kw{typedef}s and enum
+constants of the components that it includes. To support this, the
+syntax for referring to  \kw{typedef}s is extended as follows:
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+typedef-name: \emph{also one of}\\
+\>     identifier \kw{.} identifier
+\end{tabbing} \end{quote}
+where the first identifier must refer to one of the configuration's
+components with an appropriate \kw{typedef} in its
+specification. Similarly, enum constants are referenced by extending C's
+field-reference syntax to allow the object to be the name of one of the
+configuration's components.
+
+For example:
+\begin{quote} \begin{verbatim}
+module M {
+  typedef int t;
+  enum { MAGIC = 54 };
+} ...
+
+configuration C { }
+implementation {
+  components M as Someone;
+
+  typedef Someone.t Ct;
+  enum { GREATERMAGIC = Someone.MAGIC + 1 };
+}
+\end{verbatim} \end{quote}
+
+\subsection{Examples}
+
+The first example shows all possible wiring cases (comments within the
+example):
+\begin{quote}
+\begin{verbatim}
+configuration All {
+  provides interface A as ProvidedA1;
+  provides interface A as ProvidedA2;
+  provides interface A as ProvidedA3;
+  uses interface A as UsedA1;
+}
+implementation {
+  components new MyComponent() as Comp1, new MyComponent() as Comp2;
+
+  // equate our interface ProvidedA1 with MyA provided by Comp1
+  ProvidedA1 = Comp1.MyA; 
+
+  // the same, for ProvidedA2 and MyA of Comp2. We rely on the implicit
+  // connection to avoid naming MyA
+  ProvidedA2 = Comp2;
+
+  // An equate wire connecting ProvidedA3 with UsedA1. We're just passing
+  // the interface through
+  ProvidedA3 = UsedA1;
+
+  // Link some B interfaces together:
+  Comp1.UsedB -> Comp2.MyB; // fully explicit connection
+  Comp1 -> Comp2.MyB; // implicit equivalent of above line
+  Comp1 <- Comp2.UsedB; // implicit equivalent of Comp2.UsedB -> Comp1.MyB
+}
+
+generic module MyComponent() {
+  provides interface A as MyA;
+  provides interface B as MyB;
+  uses interface B as UsedB;
+} implementation { ... }
+\end{verbatim}
+\end{quote}
+
+The same specification element may be connected multiple times, e.g.,:
+\begin{quote} \begin{verbatim}
+configuration C {
+  provides interface X;
+} implementation {
+  components C1, C2;
+
+  X = C1.X;
+  X = C2.X;
+}
+\end{verbatim} \end{quote}
+In this example, the multiple wiring will lead to multiple signalers
+(``fan-in'') for the events in interface \code{X} and for multiple
+functions being executed (``fan-out'') when commands in interface \code{X}
+are called. Note that multiple wiring can also happen when two
+configurations independently wire the same interface, e.g., the
+following example wires \code{C2.Y} twice:
+\begin{quote} \begin{verbatim}
+configuration C { }           configuration D { }
+implementation {              implementation {
+  components C1, C2;            components C3, C2;
+
+  C1.Y -> C2.Y;                 C3.Y -> C2.Y;
+}                             }
+\end{verbatim} \end{quote}
+
+\subsection{Wiring Semantics}
+\label{sec:wiring-semantics}
+
+We first explain the semantics of wiring in the absence of parameterised
+interfaces. Section~\ref{sec:wiring-parms} below covers parameterised
+interfaces. Section~\ref{sec:wiring-reqs} specifies requirements
+on the wiring statements of an application when viewed as a whole. We will
+use the simple application of Figure~\ref{fig:wiring} as our running
+example.
+
+For the purposes of this section, we will assume that all instantiations of
+generic components have been expanded into non-generic components as
+explained in Sections~\ref{sec:generic-components}
+and~\ref{sec:load-component}.
+
+\begin{figure}
+\begin{verbatim}
+interface X {               module M {
+  command int f();            provides interface X as P;
+  event bool g(int x);        uses interface X as U;
+}                             provides command void h();
+                            } implementation { ... }
+configuration C {
+  provides interface X;
+  provides command void h2();
+}
+implementation {
+  components M;
+  X = M.P;
+  M.U -> M.P;
+  h2 = M.h;
+}  
+\end{verbatim}
+\caption{Simple Wiring Example}
+\label{fig:wiring}
+\end{figure}
+
+We define the meaning of wiring in terms of \emph{intermediate
+functions}.\footnote{\nesc can be compiled without explicit intermediate
+functions, so the behaviour described in this section has no runtime cost
+beyond the actual function calls and the runtime dispatch necessary for
+parameterised commands or events.}  There is one intermediate function
+$I_\alpha$ for every command or event $\alpha$ of every component. For
+instance, in Figure~\ref{fig:wiring}, module M has intermediate functions
+$I_\code{M.P.f}$, $I_\code{M.P.g}$, $I_\code{M.U.f}$, $I_\code{M.U.g}$,
+$I_\code{M.h}$.  In examples, we name intermediate functions based on their
+component, interface name and function name.
+
+An intermediate function is either used or provided. Each intermediate
+function takes the same arguments as the corresponding command or
+event in the component's specification. The body of an intermediate
+function $I$ is a list of calls (executed sequentially) to other
+intermediate functions. These other intermediate functions are the
+functions to which $I$ is connected by the application's wiring
+statements. The arguments $I$ receives are passed on to the called
+intermediate functions unchanged. The result of $I$ is a list of
+results (the type of this list's elements is the result type of the
+command or event corresponding to $I$), built by concatenating the
+result lists of the called intermediate functions. An intermediate
+function which returns an empty result list corresponds to an
+unconnected command or event; an intermediate function which returns a
+list of two or more elements corresponds to ``fan-out''.
+
+\paragraph{Intermediate Functions and Configurations}
+
+The wiring statements in a configuration specify the body of intermediate
+functions. We first expand the wiring statements to refer to intermediate
+functions rather than specification elements, and we suppress the
+distinction between \code{=} and \code{->} wiring statements. We write
+\code{$I_1$ <-> $I_2$} for a connection between intermediate functions
+\code{$I_1$} and \code{$I_2$}. For instance, configuration \code{C} from
+Figure~\ref{fig:wiring} specifies the following intermediate function
+connections:\\
+\begin{tabular}{ccc}
+$I_\code{C.X.f}$ \code{<->} $I_\code{M.P.f}$ & 
+$I_\code{M.U.f}$ \code{<->} $I_\code{M.P.f}$ & 
+$I_\code{C.h2}$ \code{<->} $I_\code{M.h}$ \\
+$I_\code{C.X.g}$ \code{<->} $I_\code{M.P.g}$ & 
+$I_\code{M.U.g}$ \code{<->} $I_\code{M.P.g}$
+\end{tabular}
+
+In a connection \code{$I_1$ <-> $I_2$} from a configuration
+$C$ one of the two intermediate functions is the \emph{callee} and the
+other is the \emph{caller}. The connection simply specifies that a call to
+the callee is added to the body of the caller. \code{$I_1$}
+(similarly, \code{$I_2$}) is a callee if any of the following conditions hold
+(we use the internal, external terminology for specification elements with
+respect to the configuration $C$ containing the connection):
+\begin{itemize}
+\item If \code{$I_1$} corresponds to an internal specification element that
+is a bare, provided command or event.
+\item If \code{$I_1$} corresponds to an external specification element that
+is a bare, used command or event.
+\item If \code{$I_1$} corresponds to a command of interface instance $X$,
+and $X$ is an internal, provided or external, used specification element.
+\item If \code{$I_1$} corresponds to an event of interface instance $X$,
+and $X$ is an external, provided or internal, used specification element.
+\end{itemize}
+If none of these conditions hold, \code{$I_1$} is a caller. The rules for
+wiring in Section~\ref{sec:wiring} ensure that a connection \code{$I_1$ <->
+$I_2$} cannot connect two callers or two callees. In configuration \code{C}
+from Figure~\ref{fig:wiring}, $I_\code{C.X.f}$, $I_\code{C.h2}$,
+$I_\code{M.P.g}$, $I_\code{M.U.f}$ are callers and $I_\code{C.X.g}$,
+$I_\code{M.P.f}$, $I_\code{M.U.g}$, $I_\code{M.h}$ are callees. Thus the
+connections of \code{C} specify that a call to $I_\code{M.P.f}$ is added to
+$I_\code{C.X.f}$, a call to $I_\code{C.X.g}$ is added to $I_\code{M.P.g}$,
+etc.
+
+
+\paragraph{Intermediate Functions and Modules}
+
+The C code in modules calls, and is called by, intermediate functions. 
+
+The intermediate function $I$ for provided command or event $\alpha$ of
+module $M$ contains a single call to the implementation of $\alpha$ in
+$M$. Its result is the singleton list of this call's result.
+
+The expression \code{call} $\alpha(e_1, \ldots, e_n)$ is evaluated as
+follows:
+\begin{itemize}
+\item The arguments $e_1, \ldots, e_n$ are evaluated, giving values $v_1,
+\ldots, v_n$.
+
+\item The intermediate function $I$ corresponding to $\alpha$ is called
+with arguments $v_1, \ldots, v_n$, with results list $L$.
+
+\item If $L = (w)$ (a singleton list), the result of the \code{call}
+is $w$.
+
+\item If $L = (w_1, w_2, \ldots, w_m)$ (two or more elements), the result
+of the \code{call} depends on the result type $\tau$ of $\alpha$. If $\tau
+= \kw{void}$, then the result is \kw{void}. Otherwise, $\tau$ must have an
+associated \emph{combining function} $c$ (Section~\ref{sec:attributes}
+shows how combining functions are associated with types), or a compile-time
+error occurs. The combining function takes two values of type $\tau$ and
+returns a result of type $\tau$. The result of the \kw{call} is $c(w_1,
+c(w_2, \ldots, c(w_{m-1}, w_m)))$ (note that the order of the elements of 
+$L$ was arbitrary).
+
+\item If $L$ is empty the default implementation for $\alpha$ is
+called with arguments $v_1, \ldots, v_n$, and its result is the result of
+the \code{call}. Section~\ref{sec:wiring-reqs} specifies that a
+compile-time error occurs if $L$ can be empty and there is no default
+implementation for $\alpha$.
+\end{itemize}
+The rules for \code{signal} expressions are identical.
+
+\paragraph{Example Intermediate Functions} 
+
+Figure~\ref{fig:wiring-fns} shows the intermediate functions that are
+produced for the components of Figure~\ref{fig:wiring}, using a C-like
+syntax, where \code{list($x$)} produces a singleton list containing $x$,
+\code{empty\_list} is a constant for the 0 element list and
+\code{concat\_list} concatenates two lists. The calls to \code{M.P.f},
+\code{M.U.g}, \code{M.h} represent calls to the command and event
+implementations in module \code{M} (not shown).
+
+\begin{figure}
+\begin{tabular}{ll}
+\tt list of int $I_\code{M.P.f}()$ \{ & \tt list of bool $I_\code{M.P.g}$(int x) \{ \\
+\tt \ \ return list(M.P.f());         & \tt \ \ list of bool r1 = $I_\code{C.X.g}$(x); \\
+\tt \}                                & \tt \ \ list of bool r1 = $I_\code{M.U.g}$(x); \\
+                                      & \tt \ \ return list\_concat(r1, r2); \\
+                                      & \tt \} \\
+\\
+\tt list of int $I_\code{M.U.f}()$ \{ & \tt list of bool $I_\code{M.U.g}$(int x) \{ \\
+\tt \ \ return $I_\code{M.P.f}$();    & \tt \ \ return list(M.U.g(x)); \\
+\tt \}                                & \tt \} \\
+\\
+\tt list of int $I_\code{C.X.f}()$ \{ & \tt list of bool $I_\code{C.X.g}$(int x) \{ \\
+\tt \ \ return $I_\code{M.P.f}$();    & \tt \ \ return empty\_list; \\
+\tt \}                                & \tt \} \\
+\\
+\tt list of void $I_\code{C.h2}()$ \{ & \tt list of void $I_\code{M.h}$() \{ \\
+\tt \ \ return $I_\code{M.h}$();      & \tt \ \ return list(M.h()); \\
+\tt \}                                & \tt \} \\
+\end{tabular}
+\caption{Intermediate Functions for Figure~\ref{fig:wiring}}
+\label{fig:wiring-fns}
+\end{figure}
+
+\subsubsection{Wiring and Parameterised Functions}
+\label{sec:wiring-parms}
+
+If a command or event $\alpha$ of component $K$ has instance
+parameters of type $\tau_1, \ldots, \tau_n$ then there is an
+intermediate function $I_{\alpha,v_1,\ldots,v_n}$ for every distinct
+tuple $(v_1:\tau_1, \ldots, v_n:\tau_n)$.
+
+In modules, if intermediate function $I_{v_1, \ldots, v_n}$ corresponds
+to parameterised, provided command (or event) $\alpha$ then the call in
+$I_{v_1, \ldots, v_n}$ to $\alpha$'s implementation passes values $v_1,
+\ldots, v_n$ as the values for $\alpha$'s instance parameters. 
+
+The expression \code{call} $\alpha[e'_1, \ldots, e'_m](e_1, \ldots, e_n)$
+is evaluated as follows:
+\begin{itemize}
+\item The arguments $e_1, \ldots, e_n$ are evaluated, giving values $v_1,
+\ldots, v_n$.
+\item The arguments $e'_1, \ldots, e'_m$ are evaluated, giving values $v'_1,
+\ldots, v'_m$.
+\item The $v'_i$ values are cast to type $\tau_i$, where $\tau_i$ is the
+type of the $i$th interface parameter of $\alpha$.
+\item The intermediate function $I_{v'_1,\ldots,v'_m}$ corresponding to
+$\alpha$ is called with arguments $v_1, \ldots, v_n$, with results list
+$L$.\footnote{This call typically involves a runtime selection between
+several command implementations - this is the only place where intermediate
+functions have a runtime cost.}
+\item If $L$ has one or more elements, the result of the \code{call} is
+produced as in the non-parameterised case.
+\item If $L$ is empty the default implementation for $\alpha$ is called
+with interface parameter values $v'_1, \ldots, v'_m$ and arguments $v_1,
+\ldots, v_n$, and its result is the result of the
+\code{call}. Section~\ref{sec:wiring-reqs} specifies that a compile-time
+error occurs if $L$ can be empty and there is no default implementation for
+$\alpha$.
+\end{itemize}
+The rules for \code{signal} expressions are identical.
+
+There are two cases when an endpoint in a wiring statement refers to a
+parameterised specification element:
+\begin{itemize}
+\item The endpoint specifies parameter values $v_1, \ldots, v_n$. If the
+endpoint corresponds to commands or events $\alpha_1, \ldots, \alpha_m$
+then the corresponding intermediate functions are
+$I_{\alpha_1,v_1,\ldots,v_n}$, \ldots, $I_{\alpha_m,v_1,\ldots,v_n}$ and
+wiring behaves as before.
+\item The endpoint does not specify parameter values. In this case, both
+endpoints in the wiring statement correspond to parameterised specification
+elements, with identical interface parameter types $\tau_1, \ldots,
+\tau_n$. If one endpoint corresponds to commands or events $\alpha_1,
+\ldots, \alpha_m$ and the other to corresponds to commands or events
+$\beta_1, \ldots, \beta_m$, then there is a connection $I_{\alpha_i, w_1,
+\ldots, w_n}$ \code{<->} $I_{\beta_i, w_1,\ldots, w_n}$ for all $1 \leq i
+\leq m$ and all tuples $(w_1:\tau_1, \ldots, w_n:\tau_n)$ (i.e., the
+endpoints are connected for all corresponding parameter values).
+\end{itemize}
+
+\subsubsection{Application-level Requirements}
+\label{sec:wiring-reqs}
+
+There are two requirement that the wiring statements of an application must
+satisfy, or a compile-time error occurs:
+\begin{itemize}
+\item There must be no infinite loop involving only intermediate functions.
+\item At every \code{call $\alpha$} (or \code{signal $\alpha$}) expression
+in the application's modules:
+\begin{itemize}
+\item If the call is unparameterised: if the call returns an empty result
+list there must be a default implementation of $\alpha$ (the number of
+elements in the result list depends only on the wiring).
+\item If the call is parameterised: if substitution of any values for the
+interface parameters of $\alpha$ returns an empty result list there must be
+a default implementation of $\alpha$ (the number of elements in the result
+list for a given parameter value tuple depends only on the wiring).
+
+Note that this condition does not consider the expressions used to specify
+interface parameter values at the call-site.
+\end{itemize}
+\end{itemize}
+
+\section{Concurrency in \nesc}
+\label{sec:concurrency}
+
+\nesc's execution model is based on run-to-completion
+\emph{tasks} (that typically represent the ongoing computation), and
+\emph{interrupt handlers} that are signaled asynchronously by hardware. The
+compiler relies on the user-provided \code{hwevent} and
+\code{atomic\_hwevent} attributes to recognise interrupt handlers (see
+Section~\ref{sec:attributes}).  A scheduler for \nesc can execute tasks in
+any order, but must obey the run-to-completion rule (the standard \tinyos
+scheduler follows a FIFO policy). Because tasks are not preempted and run
+to completion, they are atomic with respect to each other, but are not
+atomic with respect to interrupt handlers.
+
+As this is a concurrent execution model, \nesc programs are susceptible to
+race conditions, in particular data races on the program's \emph{shared
+state}, i.e., its global and module variables (\nesc does not include
+dynamic memory allocation). Races are avoided either by accessing
+shared state only in tasks, or only within atomic statements. The \nesc
+compiler reports potential data races to the programmer at compile-time.
+
+Formally, we divide the code of a \nesc program into two parts:
+\begin{quote}
+\textbf{Synchronous Code (SC):} code (functions, commands, events, tasks)
+that is only reachable from tasks.
+
+\textbf{Asynchronous Code (AC):} code that is reachable from at 
+least one interrupt handler.
+\end{quote}
+
+Although non-preemption eliminates data races among tasks, there are still
+potential races between SC and AC, as well as between AC and AC. To
+prevent data races, \nesc issues warnings for violations of the following
+rules:
+\begin{quote}
+{\sl {\bf Race-Free Invariant 1}}: If a variable $x$ is written in AC, then 
+all accesses to $x$ must occur in atomic sections.
+
+{\sl {\bf Race-Free Invariant 2}}: If a variable $x$ is read in AC, then 
+all writes to $x$ must occur in atomic sections.
+\end{quote}
+The body of a function $f$ called from an atomic statement is considered to
+be ``in'' the atomic statement as long as all calls to $f$ are ``in''
+atomic statements.
+
+It is possible to introduce a race condition that the compiler cannot
+detect, but it must span multiple atomic statements or tasks and use storage
+in intermediate variables.
+
+\nesc may report data races that cannot occur in practice, e.g., if all
+accesses are protected by guards on some other variable. To avoid redundant
+messages in this case, the programmer can annotate a variable $v$ with the
+\kw{norace} storage-class specifier to eliminate all data race warnings for
+$v$. The \kw{norace} keyword should be used with caution.
+
+\nesc reports a compile-time error for any command or event that is AC and
+that was not declared with \kw{async}. This ensures that code that was not
+written to execute safely in an interrupt handler is not called
+inadvertently.
+
+\section{Attributes}
+\label{sec:attributes}
+
+All C and \nesc declarations can be decorated with \emph{attributes}
+(inspired by Java 1.5's attributes~\cite{java-attributes}) that:
+\begin{itemize}
+\item Avoid reserving lots of keywords and burdening the syntax. For
+ example, \code{@integer()} is used to mark generic component type arguments
+ that must be integer types (Section~\ref{sec:type-parameters}).
+
+\item Allow user-specified annotations which are accessible to external tools.
+The mechanism by which these user-specified attributes are accessed is
+beyond the scope of this reference manual; please see the \nesc compiler
+manual for details.
+\end{itemize}
+
+User-defined attributes must be declared prior to use, and have no effect
+on code generation. The language-defined attributes are implicitly
+declared; their effects are described in Section~\ref{sec:attributes}.
+
+An attribute declaration is simply a \kw{struct} declaration where the
+\kw{struct}'s name is preceded by \code{@}:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+struct-or-union-specifier: \emph{also one of}\\
+\>     \kw{struct} \kw{@} identifier \kw{\{} struct-declaration-list \kw{\}}\\
+\end{tabbing}
+\end{quote}
+
+A use of an attribute specifies the attribute's name and gives an initialiser
+(in parentheses) that must be valid for attribute's declaration:
+\begin{quote} \grammarshift
+\em \begin{tabbing}
+\grammarindent
+attribute:\\
+\>     \kw{@} identifier \kw{(} initializer-list \kw{)}\\
+\end{tabbing}
+\end{quote}
+
+
+Attributes can be placed on all C and \nesc declarations and definitions.
+Generally, attributes appear after the annotated object's name and
+associated arguments, but before any other syntactic elements (e.g.,
+initialisers, function bodies, etc). See Appendix~\ref{sec:grammar} for the
+full set of rules. The attributes of $x$ are the union of all attributes on
+all declarations and definitions of $x$.
+
+Example:
+\begin{quote}
+\begin{verbatim}
+struct @myattr {
+  int x;
+  char *why;
+};
+
+extern int z @myattr(5, "fun"); // simple use
+
+// a second attribute on z at it's definition
+int z @myattr(3, "morefun") = 22;
+
+// use on a function, with a C99-style initialiser
+void f(void) @myattr(.x=5, .why="for f") {
+   ...
+}
+
+// use in a module, with an empty initialiser
+module X {
+  provides interface I @myattr();
+}
+...
+\end{verbatim}
+\end{quote}
+
+\subsection{\nesc Attributes}
+
+\nesc includes seven predefined attributes with various effects. Except
+where otherwise specified, these take no arguments:
+
+\begin{itemize}
+\item \code{@C()}: This attribute is used for a C declaration or definition
+$d$ at the top-level of a module (it is ignored for all other
+declarations). It specifies that $d$'s should appear in the global C scope
+rather than in the module's per-component-implementation scope. This allows
+$d$ to be used (e.g., called if it is a function) from C code.
+
+\item \code{@spontaneous()}: This attribute can be used on any function $f$
+(in modules or C code). It indicates that there are calls $f$ that are not
+visible in the source code. The C \code{main} function is a typical
+example. Section~\ref{sec:app} discusses how the \nesc compiler uses the
+\code{spontaneous} attribute during compilation.
+
+\item \code{@hwevent()}: This attribute can be used on any function $f$ (in
+modules or C code). It indicates that $f$ is an interrupt handler, i.e.,
+that there are spontaneous calls to $f$ and that $f$ is AC
+(Section~\ref{sec:concurrency}). The use of \code{@hwevent()} implies
+\code{@spontaneous()}.
+
+\item \code{@atomic\_hwevent()}: This attribute can be used on any function
+$f$ (in modules or C code). This behaves the same as \code{@hwevent()}, but,
+additionally, informs \nesc that the body of $f$ behaves as if it were an
+\kw{atomic} statement (on typical hardware this means that this interrupt
+handler runs with interrupts disabled). The use of \code{@atomic\_hwevent()}
+implies \code{@spontaneous()}.
+
+Note that neither \code{@hwevent()} or \code{@atomic\_hwevent()} provide any
+linkage of $f$ with a particular interrupt handler. The mechanism by
+which that is achieved is platform-specific.
+
+Inside a function with the \code{@atomic\_hwevent()} attribute, a call to
+\code{\_\_nesc\_enable\_interrupt()} is assumed to terminate
+the implicit \kw{atomic} statement. This is useful for interrupt handlers
+which must start with interrupts disabled, but can reenable interrupts
+after a little work.
+
+\item \code{@combine($fnname$)}: This attribute specifies the combining
+function for a type in a \kw{typedef} declaration. The combining function
+specifies how to combine the multiple results of a call to a command
+or event which has ``fan-out''. For example:
+\begin{verbatim}
+  typedef uint8_t result_t @combine("rcombine");
+
+  result_t rcombine(result_t r1, result_t r2)
+  {
+    return r1 == FAIL ? FAIL : r2;
+  }
+\end{verbatim}
+specifies logical-and-like behaviour when combining commands (or events)
+whose result type is \code{result\_t}. See
+Section~\ref{sec:wiring-semantics} for the detailed semantics.
+
+A compile-time error occurs if the combining function $c$ for a type $t$
+does not have the following type: \code{$t$ $c$($t$, $t$)}.
+
+\item \code{@integer()}, \code{@number()}: declare properties of generic
+component type parameters. See Section~\ref{sec:type-parameters}.
+
+\end{itemize}
+
+Example of attribute use:
+\begin{quote} \begin{verbatim}
+module RealMain { ... }
+implementation {
+  int main(int argc, char **argv) @C() @spontaneous() {
+    ...
+  }
+}
+\end{verbatim} \end{quote}
+
+This example declares that function \code{main} should actually appear
+in the C global scope (\code{@C()}), so that the linker can find it. It
+also declares that \code{main} can be called even though there are no
+function calls to \code{main} anywhere in the program
+(\code{@spontaneous()}). 
+
+\section{External Types}
+\label{sec:external-types}
+
+External types are an extension to C that allows definition of types with a
+platform-independent representation and no alignment restriction (i.e., an
+arbitrary \code{char} array can be cast to, and accessed via, an external
+type). They are intended for communication with entities external to
+the \nesc program (e.g., other devices via a network), hence their name.
+
+\nesc has three kinds of external types:
+\begin{itemize}
+\item External base types are 2's complement integral types with a fixed
+size and endianness. These types are \code{nx\_int$N$\_t},
+\code{nx\_uint$N$\_t}, \code{nxle\_int$N$\_t}, \code{nxle\_uint$N$\_t} for $N =
+8, 16, 32, 64$. The \code{nx\_} types are big-endian, the \code{nxle\_} types
+are little endian, the \code{int} types are signed and the \code{uint}
+types are unsigned. Note that these types are not keywords.
+
+\item External array types are any array built from an external type, using 
+the usual C syntax, e.g, \code{nx\_int16\_t x[10]}.
+
+\code External structures and unions are declared like C structures and
+unions, but using the \code{nx\_struct} and \code{nx\_union} keywords. An
+external structure can only contain external types as elements. Currently,
+external structures and unions cannot contain bitfields.
+\end{itemize}
+
+External types have no alignment restrictions and external structures
+contain no padding. External types can be used exactly like regular C
+types.\footnote{The current \nesc compiler does not support using external
+base types in casts, as function arguments and results, or to declare
+initialised variables.}
+
+\section{Miscellaneous}
+\label{sec:misc}
+
+\subsection{Constant Folding in \nesc}
+\label{sec:constant-folding}
+
+There are two extensions to C's constant folding (see A.7.19 in
+K\&R~\cite{kandr}) in \nesc: \emph{constant functions} and \emph{unknown
+constants}. \emph{Constant functions} are functions provided by the \nesc
+language which return a compile-time constant. The definition of \nesc's
+constant functions is given in Section~\ref{sec:constant-functions}. An
+\emph{unknown constant} is a constant whose value is not known at some
+stage of semantic checking, e.g., non-type parameters to generic components
+are unknown constants when a generic component is loaded and
+checked. Unknown constants allow the definition of a generic component to
+be (mostly, see next paragraph) checked for correctness before its
+arguments' values are known.
+
+An expression involving an unknown constant is considered a constant
+expression if the resulting expression is constant irrespective of the
+unknown constant's value, with the following exceptions: $a / b$ and $a \%
+b$ can assume that $b$ is not zero. Constant expressions involving unknown
+constants are re-checked once the values of constant expressions become
+known.\footnote{The time at which the value of unknown constants become
+known is unspecified by this language definition.} As a result, the
+following generic component definition is legal:
+\begin{quote}
+\begin{verbatim}
+generic module A(int n) { }
+implementation {
+  int s = 20 / n;
+}
+\end{verbatim}
+\end{quote}
+but the following instantiation will report a compile-time error:
+\begin{quote}
+\begin{verbatim}
+configuration B { }
+implementation {
+  components new A(0) as MyA;
+}
+\end{verbatim}
+\end{quote}
+
+\subsection{Compile-time Constant Functions}
+\label{sec:constant-functions}
+
+\nesc currently has three constant functions:
+\begin{itemize}
+\item 
+\code{unsigned int unique(char *identifier)} \\ 
+\code{unsigned int uniqueN(char *identifier, unsigned int nb)}
+
+Given a program with $k$ uses of \code{uniqueN} with the same
+\code{identifier} and values $n_1, \ldots n_k$ for \code{nb}, each use
+returns an integer $u_i$ from the sequence $0 \ldots (\sum_{i=0}^k
+n_i) - 1$. Furthermore, the sequences $u_i \ldots u_i + n_i - 1$ do
+not overlap with each other. Note that $n_i = 0$ is allowed. The
+behaviour is undefined if $ \sum_{i=0}^k n_i >= \code{UINT\_MAX}$
+(\code{UINT\_MAX} from \code{<limits.h>}).
+
+
+Less formally, \code{uniqueN("S", N)} allocates a sequence of
+\code{N} consecutive numbers distinct from all other sequences
+allocated for identifier \code{S}, returns the smallest value
+from the sequence, and guarantees that the sequences are compact
+(start at 0, no gaps between sequences).
+
+A use of \code{unique(S)} is short for \code{uniqueN(S, 1)}.
+
+The expansion of \code{uniqueN} calls happens after generic component
+instantiation (Section~\ref{sec:load-component}): calls to \code{uniqueN} in
+generic components return a different value in each instantiation.
+
+For purposes of checking constant expressions, \code{uniqueN($s$, $n$)}
+behaves as if it were an unknown constant.
+
+Using \code{unique}, a component providing a service (defined by interface
+\code{X}) can uniquely identify its clients with the following idiom:
+\begin{quote}
+\begin{verbatim}
+module XService {
+  provides interface X[uint8_t id];
+} implementation { ... }
+
+module UserOfX {
+  uses interface X;
+} implementation { ... }
+
+configuration ConnectUserToService { }
+implementation {
+  components XService, UserOfX;
+
+  UserOfX.X -> XService.X[unique("X")];
+}
+\end{verbatim}
+\end{quote}
+Each client of \code{XService} will be connected to interface \code{X} with
+a different \code{id}.
+
+\item \code{unsigned int uniqueCount(char *identifier)}
+
+\code{uniqueCount($s$)} returns the sum of all \code{nb} parameters
+for all uses of \code{uniqueN($s$, nb)}, or 0 if there are no calls to
+\code{uniqueN($s$)}. For purposes of checking constant expressions,
+\code{uniqueCount($s$)} behaves as if it were an unknown constant.
+
+The intended use of \code{uniqueCount} is for dimensioning arrays (or
+other data structures) which will be indexed using the numbers
+returned by \kw{unique} and \kw{uniqueN}. For instance, a \kw{Timer}
+service that identifies its clients (and hence each independent timer)
+via a parameterised interface and \kw{unique} can use \kw{uniqueCount}
+to allocate the correct number of timer data structures.
+
+\end{itemize}
+
+In the following example:
+\begin{quote}
+\begin{verbatim}
+generic module A() { }
+implementation {
+  int x = unique("A");
+  int y = uniqueCount("A");
+}
+configuration B { }
+implementation {
+  components new A() as A1, new A() as A2;
+}
+\end{verbatim}
+\end{quote}
+\code{B.A1.y = B.A2.y = 2} and either \code{B.A1.x = 0, B.A2.x = 1} or
+\code{B.A1.x = 1, B.A2.x = 0}.
+
+\subsection{Type Parameters and C Type Checking}
+\label{sec:type-parameters}
+
+Generic interface and component definitions can have type
+parameters. Syntactically, type parameters behave the same as \kw{typedef}'d
+identifiers. When a generic component or interface is instantiated, the
+type parameter will be replaced with the argument type, which cannot be
+incomplete, of function or of array type. The size and alignment of a type
+parameter are an unknown constant (Section~\ref{sec:constant-folding}).
+The rules for assignment and type equivalence for a type parameter $t$ are
+simple: a value of type $t$ is assignable to an lvalue of type $t$ (extends
+A.7.17 in K\&R~\cite{kandr}) and type $t$ is only equivalent to itself (extends
+A.8.10 in K\&R~\cite{kandr}).
+
+If a type parameter $t$ has the \code{@number()} attribute
+(Section~\ref{sec:attributes}), the corresponding argument must be a
+numerical (integral or floating-point) type, and all numerical operations
+(i.e., those valid for floating-point types) are allowed on type $t$.
+
+If a type parameter $t$ has the \code{@integer()} attribute
+(Section~\ref{sec:attributes}), the corresponding argument must be an
+integral type, and all integral operations are allowed on type $t$.
+
+\subsection{Functions with no arguments, old-style C declarations}
+\label{sec:misc-void}
+
+\nesc functions with no arguments are declared with \code{()}, not
+\code{(void)}. The latter syntax reports a compile-time error.
+
+Old-style C declarations (with \code{()}) and function definitions 
+(parameters specified after the argument list) are not allowed in
+interfaces or components (and cause compile-time errors).
+
+Note that neither of these changes apply to C files (so that existing
+\file{.h} files can be used unchanged).
+
+\subsection{// comments}
+
+\nesc allows // comments in C, interface and component files.
+
+\section{\nesc Applications}
+\label{sec:app}
+
+A \nesc application has two executable parts: C declarations and
+definitions, and a set of components (non-generic components and
+instantiated generic components). The components are connected
+to each other via interfaces specified by a set of interface
+definitions. 
+
+The C declarations and definitions, interfaces and components that form a
+\nesc application are determined by an on-demand loading process. The input
+to the \nesc compiler is a single non-generic component $K$. The \nesc
+compiler first loads a user-specified set of C files\footnote{\kw{ncc}, the
+TinyOS frontend for \nesc always loads the TinyOS \file{tos.h} file.}
+(Section~\ref{sec:load-c}), then loads the component definition for $K$
+(Section~\ref{sec:load-component}). The resulting program contains:
+\begin{itemize}
+\item All C declarations from the initially loaded C files
+(Section~\ref{sec:load-c}).
+\item All C declarations from all component and interface definitions
+(Sections~\ref{sec:load-component} and~\ref{sec:load-intf}).
+\item All components output by the rules of Section~\ref{sec:load-component}.
+\end{itemize}
+
+Section~\ref{sec:cpp} discusses the interactions between \nesc and the C
+preprocessor. The external linkage rules for a compiled \nesc program are
+given in Section~\ref{sec:linkage}. The process by which C files, \nesc
+component and interface definitions are located is outside the scope of
+this reference manual; for details see the \file{ncc} and \kw{nescc} man
+pages.
+
+
+\subsection{Loading C file $X.h$}
+\label{sec:load-c}
+
+File $X.h$ is located and preprocessed. Changes made to C macros (via
+\code{\#define} and \code{\#undef}) are visible to all subsequently
+preprocessed files. The C declarations and definitions from the
+preprocessed $X$.h file are entered into the C global scope, and are
+therefore visible to all subsequently processed C files, interfaces and
+components. 
+
+The \nesc keywords are not reserved when a C file is loaded in this
+fashion.
+
+\subsection{Loading Component Definition $K$}
+\label{sec:load-component}
+
+If $K$ has already been loaded, nothing more is done. Otherwise, file
+$K$.nc is located and preprocessed. Changes made to C macros (via
+\code{\#define} and \code{\#undef}) before the \kw{component}, \kw{module}
+and \kw{configuration} keyword are preserved and visible to all
+subsequently loaded files; changes made after this point are discarded. The
+preprocessed file is parsed using the following grammar 
+(\emph{translation-unit} is a list of C declarations and function definitions):
+\begin{quote} \grammarshift \em \begin{tabbing}
+\grammarindent
+nesC-file: \\
+\>     translation-unit\opt interface\\
+\>     translation-unit\opt module\\
+\>     translation-unit\opt configuration
+\end{tabbing} \end{quote}
+Note that the \nesc keywords are reserved while parsing the C code in
+\emph{translation-unit}. If $K$.nc does not define module $K$ or
+configuration $K$, a compile-time error is reported.
+
+The component's definition is then processed
+(Sections~\ref{sec:component-spec},~\ref{sec:configuration},
+and~\ref{sec:module}). All referenced component and interface definitions
+are loaded (see also Section~\ref{sec:load-intf}) during this processing.
+C declarations and definitions from a referenced component or interface
+definition $D$ are available after the first reference to $D$. Note
+however that macros defined in $D$ are not available in $K$ as $K$
+was already preprocessed (see Section~\ref{sec:cpp} for more discussion
+of macros in \nesc).
+
+Finally, the set of components output by $K$ is defined by the following
+algorithm:
+
+Expand($K$):
+\begin{itemize}
+\item If $K$ is a generic component, no component is output.
+
+\item If $K$ is a non-generic module, $K$ is output.
+
+\item If $K$ is a non-generic configuration: for each component
+instantiation $\kw{new}\ L(a_1, \ldots, a_n)$ in $K$, a new component $X$ is
+created according to the rules of Section~\ref{sec:generic-components} and
+Expand($X$) is called recursively (instantiating further generic components
+if $L$ contained component instantiations). Then $K$ is output.
+\end{itemize}
+
+\subsection{Loading Interface Definition $I$}
+\label{sec:load-intf}
+
+If $I$ has already been loaded, nothing more is done. Otherwise, file
+$I$.nc is located and preprocessed. Changes made to C macros (via
+\code{\#define} and \code{\#undef}) before the \kw{interface} keyword are
+preserved and visible to all subsequently loaded files; changes made after
+this point are discarded. The preprocessed file is parsed following the
+\emph{nesC-file} production above. If $I$.nc does not define
+\code{interface $I$} a compile-time error is reported. Then
+$I$'s definition is processed (Section~\ref{sec:interface}).
+
+\subsection{\nesc and the C Preprocessor}
+\label{sec:cpp}
+
+During preprocessing, \nesc defines the \kw{NESC} symbol to a number XYZ
+which identifies the version of the \nesc language and compiler.  For \nesc
+1.2, XYZ is at least 120.\footnote{The \kw{NESC} symbol was not defined in
+versions of \nesc prior to 1.1.}
+
+The loading of component and interface definitions is driven by syntactic
+rules; as a result it must happen after preprocessing. Thus if a component
+$X$ references, e.g., an interface $I$, macros defined in $I$ cannot be
+used in $X$ even though $I$'s C declarations can be. We suggest the
+following structure to avoid confusion:
+\begin{enumerate}
+\item All C declarations, function definitions and macros should be placed
+in a \file{.h} file, e.g., \file{I.h}. This file should be wrapped in the
+usual \code{\#ifndef I\_H} / \code{\#define I\_H} / \code{\#endif} way.
+
+\item The file(s) with which the \file{.h} file is naturally associated
+(e.g., an interface \code{I}) should \code{\#include "I.h"}).
+\label{sec:cpp-natural}
+
+\item Files which wish to use the macros defined in the \file{.h} file
+should \code{\#include} it.
+
+\item Files which wish to use the C declarations and definitions from
+the \file{.h} file should \code{\#include} it if they do not reference one
+of the components or interfaces from point~\ref{sec:cpp-natural}.
+\end{enumerate}
+
+These rules are similar to how \code{\#include} is typically used in C.
+
+\subsection{External Linkage Rules}
+\label{sec:linkage}
+
+The following rules specify the external visibility of symbols defined
+in a nesC program:
+\begin{itemize}
+\item The external linkage of C variable declarations is the same as for C
+(note that this does not include variables declared inside modules).
+
+\item All function definitions marked with \code{spontaneous},
+\code{hwevent} or \code{atomic\_hwevent} attributes
+(Section~\ref{sec:attributes}) are external definitions.
+
+\item All used commands and events of binary components are external
+definitions.
+
+\item All non-static C function declarations without a definition
+are external references.
+
+\item All provided commands and events of binary components are
+external references.
+\end{itemize}
+
+The external names of C declarations, and of function definitions
+inside modules using the \kw{C} attribute, are the same as the
+corresponding C name. The external names of all other externally
+visible symbols is implementation-defined.\footnote{The current
+nesC compiler uses ``componentname\$functionname''.}
+
+The \nesc compiler can assume that only code reachable from external
+definitions will be executed (i.e., there are no ``invisible'' calls to any
+other functions).\footnote{The current \nesc compiler uses this information
+to eliminate unreachable code.}
+
+
+
+\appendix
+
+\section{Grammar}
+\label{sec:grammar}
+
+Please refer to Appendix~A of Kernighan and Ritchie (K\&R)
+~\cite[pp234--239]{kandr} while reading this grammar (see the ``Imported
+rules'', Section~\ref{sec:imported}, for a quick summary of references to
+the K\&R grammar).
+
+The following additional keywords are used by \nesc: \kw{as}, \kw{atomic},
+\kw{async}, \kw{call}, \kw{command}, \kw{component}, \kw{components},
+\kw{configuration}, \kw{event}, \kw{generic}, \kw{implementation},
+\kw{includes}, \kw{interface}, \kw{module}, \kw{new}, \kw{norace},
+\kw{nx\_struct}, \kw{nx\_union}, \kw{post}, \kw{provides}, \kw{signal},
+\kw{task}, \kw{uses}. The following keywords are reserved for future use:
+\kw{abstract} and \kw{extends}.
+
+\nesc reserves all identifiers starting with \kw{\_\_nesc} for internal
+use.
+
+\nesc files follow the \emph{nesC-file} production; \file{.h} files loaded
+before the program's main component (see Section~\ref{sec:app}) follow the
+\emph{translation-unit} directive from K\&R and do not reserve any of
+the \nesc keywords except for \kw{nx\_struct} and \kw{nx\_union}.
+
+New rules: \em \begin{tabbing}
+\grammarindent
+nesC-file: \\
+\>     translation-unit\opt interface-definition\\
+\>     translation-unit\opt component\\
+\\
+interface-definition:\\
+\>     \kw{interface} identifier type-parameters\opt attributes\opt \kw{\{} declaration-list \kw{\}}\\
+\\
+type-parameters:\\
+\>     \kw{<} type-parameter-list \kw{>}\\
+\\
+type-parameter-list:\\
+\>     identifier attributes\opt\\
+\>     type-parameter-list \kw{,} identifier attributes\opt\\
+\\
+component:\\
+\>     comp-kind identifier comp-parameters\opt attributes\opt component-specification implementation\opt\\
+\\
+comp-kind:\\
+\>     \kw{module}\\
+\>     \kw{component}\\
+\>     \kw{configuration}\\
+\>     \kw{generic module}\\
+\>     \kw{generic configuration}\\
+\\
+implementation:\\
+\>     module-implementation\\
+\>     configuration-implementation\\
+\\
+comp-parameters:\\
+\>     \kw{(} component-parameter-list \kw{)}\\
+\\
+component-parameter-list:\\
+\>     component-parameter\\
+\>     component-parameter-list \kw{,} component-parameter\\
+\\
+component-parameter:\\
+\>     parameter-declaration\\
+\>     \kw{typedef} identifier attributes\opt\\
+\\
+module-implementation:\\
+\>     \kw{implementation} \kw{\{} translation-unit \kw{\}}\\
+\\
+configuration-implementation:\\
+\>     \kw{implementation} \kw{\{} configuration-element-list\opt \kw{\}}\\
+\\
+configuration-element-list:\\
+\>     configuration-element\\
+\>     configuration-element-list configuration-element\\
+\\
+configuration-element:\\
+\>     components\\
+\>     connection\\
+\>     declaration\\
+\\
+components:\\
+\>     \kw{components} component-line \kw{;}\\
+\\
+component-line:\\
+\>     component-ref instance-name\opt\\
+\>     component-line \kw{,} component-ref instance-name\opt\\
+\\
+instance-name:\\
+\>     \kw{as} identifier\\
+\\
+component-ref:\\
+\>     identifier\\
+\>     \kw{new} identifier \kw{(} component-argument-list \kw{)}\\
+\\
+component-argument-list:\\
+\>     component-argument\\
+\>     component-argument-list \kw{,} component-argument\\
+\\
+component-argument:\\
+\>     expression\\
+\>     type-name\\
+\\
+connection:\\
+\>     endpoint \kw{=} endpoint\\
+\>     endpoint \kw{->} endpoint\\
+\>     endpoint \kw{<-} endpoint\\
+\\
+endpoint:\\
+\>     identifier-path \\
+\>     identifier-path \kw{[} argument-expression-list \kw{]}\\
+\\
+identifier-path:\\
+\>     identifier\\
+\>     identifier-path \kw{.} identifier\\
+\\
+component-specification:\\
+\>     \kw{\{} uses-provides-list \kw{\}}\\
+\\
+uses-provides-list:\\
+\>     uses-provides\\
+\>     uses-provides-list uses-provides\\
+\\
+uses-provides:\\
+\>     \kw{uses} specification-element-list\\
+\>     \kw{provides} specification-element-list\\
+\>     declaration\\
+\\
+specification-element-list:\\
+\>     specification-element\\
+\>     \kw{\{} specification-elements \kw{\}}\\
+\\
+specification-elements:\\
+\>     specification-element\\
+\>     specification-elements specification-element\\
+\\
+specification-element:\\
+\>     declaration\\
+\>     interface-type instance-name\opt instance-parameters\opt attributes\opt\\
+\\
+interface-type:\\
+\>     \kw{interface} identifier type-arguments\opt\\
+\\
+type-arguments:\\
+\>     \kw{<} type-argument-list \kw{>}\\
+\\
+type-argument-list:\\
+\>     type-name\\
+\>     type-argument-list \kw{,} type-name\\
+\\
+instance-parameters:\\
+\>     \kw{[} parameter-type-list \kw{]}\\
+\\
+attributes:\\
+\>     attributes attribute\\
+\>     attribute\\
+\\
+attribute:\\
+\>     \kw{@} identifier \kw{(} initializer-list \kw{)}\\
+\end{tabbing} \rm
+
+Changed rules: 
+\em \begin{tabbing}
+\grammarindent
+typedef-name: \emph{also one of}\\
+\>     identifier \kw{.} identifier
+\\
+storage-class-specifier: \emph{also one of}\\
+\>     \kw{command} \kw{event} \kw{async} \kw{task} \kw{norace}\\
+\\
+declaration-specifiers: \emph{also}\\
+\>     \kw{default} declaration-specifiers\\
+\\
+direct-declarator: \emph{also}\\
+\>     identifier \kw{.} identifier \\
+\>     direct-declarator instance-parameters \kw{(} parameter-type-list \kw{)}\\
+\\
+struct-or-union-specifier: \emph{also one of}\\
+\>     \kw{struct} \kw{@} identifier \kw{\{} struct-declaration-list \kw{\}}\\
+\>     struct-or-union identifier attributes \kw{\{} struct-declaration-list \kw{\}}\\
+\\
+struct-or-union: \emph{also one of}\\
+\>     \kw{nx\_struct}\\
+\>     \kw{nx\_union}\\
+\\
+enum-specifier: \emph{also one of}\\
+\>     \kw{enum} identifier attributes \kw{\{} enumerator-list \kw{\}}\\
+\\
+init-declarator: \emph{also}\\
+\>     declarator attributes\\
+\>     declarator attributes \kw{=} initializer\\
+\\
+struct-declarator: \emph{also}\\
+\>     declarator attributes\\
+\>     declarator \kw{:} constant-expression attributes \\
+\\
+parameter-declaration: \emph{also}\\
+\>     declaration-specifiers declarator attributes\\
+\\
+function-definition: \emph{also}\\
+\>     declaration-specifiers\opt declarator attributes declaration-list\opt compound-statement\\
+\\
+statement: \emph{also}\\
+\>     atomic-statement\\
+\\
+atomic-statement:\\
+\>     \kw{atomic} statement\\
+\\
+postfix-expression: \emph{replaced by}\\
+\>     primary-expression\\
+\>     postfix-expression \kw{[} argument-expression-list \kw{]}\\
+\>     call-kind\opt primary \kw{(} argument-expression-list\opt \kw{)}\\
+\>     postfix-expression \kw{.} identifier\\
+\>     postfix-expression \kw{->} identifier\\
+\>     postfix-expression \kw{++}\\
+\>     postfix-expression \kw{--}\\
+\\\\
+call-kind: \emph{one of}\\
+\>     \kw{call} \kw{signal} \kw{post}
+\end{tabbing} \rm
+
+Note that like like regular typedefs, the extended rule for
+\emph{typedef-name} (to refer to types from other components) cannot be
+directly used in a LALR(1) parser.
+
+\subsection{Imported Rules}
+\label{sec:imported}
+
+This list is for reference purposes only:
+\begin{itemize}
+\item \emph{argument-expression-list}: A list of comma-separated
+expressions.
+
+\item \emph{compound-stmt}: A C \{ \} block statement.
+
+\item \emph{declaration}: A C declaration.
+
+\item \emph{declaration-list}: A list of C declarations.
+
+\item \emph{declaration-specifiers}: A list of storage classes, type
+specifiers and type qualifiers.
+
+\item \emph{declarator}: The part of a C declaration that specifies
+the array, function and pointer parts of the declared entity's type.
+
+\item \emph{direct-declarator}: Like \emph{declarator}, but with no
+leading pointer-type specification.
+
+\item \emph{enumerator-list}: List of constant declarations inside an
+\kw{enum}.
+
+\item \emph{expression}: Any C expression.
+
+\item \emph{identifier}: Any C identifier.
+
+\item \emph{init-declarator}: The part of a C declaration that specifies
+the array, function and pointer parts of the declared entity's type, and
+its initialiser (if any).
+
+\item \emph{initializer}: An initializer for a variable declaration.
+
+\item \emph{initializer-list}: An initializer for a compound type without
+the enclosing \kw{\{}, kw{\}}.
+
+\item \emph{parameter-declaration}: A function parameter declaration.
+
+\item \emph{parameter-type-list}: Specification of a function's parameters.
+
+\item \emph{postfix-expression}: A restricted class of C expressions.
+
+\item \emph{primary}: An identifier, constant, string or parenthesised
+expression.
+
+\item \emph{statement}: Any C statement.
+
+\item \emph{storage-class-specifier}: A storage class specification for
+a C declaration.
+
+\item \emph{struct-declaration-list}: Declarations inside a \kw{struct}
+or \kw{union}.
+
+\item \emph{translation-unit}: A list of C declarations and function
+definitions.
+
+\item \emph{type-name}: A C type specification.
+
+\end{itemize}
+
+\section{Glossary}
+\label{sec:glossary}
+
+\begin{itemize}
+\item \emph{attribute}: a user-specified decoration that can be placed on C
+and nesC declarations. Attributes must be declared (see \emph{attribute
+kind}).
+
+\item \emph{attribute kind}: a declaration of an attribute, which
+specifies the attribute's arguments.
+
+\item \emph{bare command, bare event}: See \emph{command}.
+
+\item \emph{binary component}: a component provided in binary rather than
+source code form. Binary components cannot be generic.
+
+\item \emph{combining function}: C function that combines the multiple
+results of a command call (or event signal) in the presence of
+\emph{fan-out}.
+
+\item \emph{command}, \emph{event}: A function that is part of a
+component's \emph{specification}, either directly as a \emph{bare}
+command or event, or within one of the component's \emph{interfaces}.
+
+Bare commands and events have roles (\emph{provider}, \emph{user}) and can
+have \emph{instance parameters}. When these parameters are present, the
+command or event is known as a \emph{bare, parameterised} command or
+event. The instance parameters of a command or event are distinct from its
+regular function parameters.
+
+\item \emph{compile-time error}: An error that the \nesc compiler must
+report at compile-time.
+
+\item \emph{component}: The basic unit of \nesc programs. Components have a
+name and are of two kinds: \emph{generic} components, which take type and
+constant parameters and must be instantiated before they can be used, and
+non-generic components which exist implicitly in a single instance. A
+component has a \emph{specification} and an implementation. A \emph{module}
+is a component whose implementation is C code; a \emph{configuration} is a
+component whose implementation is built by selecting or instantiating other
+components, and \emph{wiring} them together.
+
+\item \emph{configuration}: A component whose implementation is built by
+selecting or instantiating other components, and \emph{wiring} them
+together.
+
+\item \emph{endpoint}: A specification of a particular specification
+element, and optionally some instance arguments, in a wiring
+statement of a configuration. A parameterised endpoint is an endpoint
+without instance arguments that corresponds to a parameterised specification
+element.
+
+\item \emph{event}: See \emph{command}.
+
+\item \emph{extent}: The lifetime of a variable. \nesc has the standard C
+extents: \emph{indefinite}, \emph{function}, and \emph{block}.
+
+\item \emph{external}: In a configuration $C$, describes a specification
+element from $C$'s specification. See internal.
+
+\item \emph{external type}: a special kind of type with a
+platform-independent representation and no alignment restrictions.
+
+\item \emph{fan-in}: Describes a provided command or event called from more
+than one place.
+
+\item \emph{fan-out}: Describes a used command or event connected to more
+than one command or event implementation. A \emph{combining function}
+combines the results of calls to these used commands or events.
+
+\item \emph{generic}: See \emph{component}, \emph{interface}.
+
+\item \emph{interface}: An instance of a particular \emph{interface type}
+in the \emph{specification} of a component. An interface has a name, a role
+(\emph{provider} or \emph{user}), an \emph{interface type} and, optionally,
+\emph{instance parameters}. An interface with parameters is a
+\emph{parameterised interface}.
+
+\item \emph{interface definition}: An \emph{interface definition} specifies
+the interaction between two components, \emph{the provider} and the
+\emph{user}. This specification takes the form of a set of \emph{commands}
+and \emph{events}. Each interface definition has a distinct name, and may
+optionally take type parameters. Interface definitions with type parameters
+are called \emph{generic interface definitions}. Argument types must be
+provided before a generic interface definition can be used as an 
+\emph{interface type}.
+
+Interfaces are bi-directional: the provider of an interface implements its
+commands, the user of an interface implements its events.
+
+\item \emph{interface type}: A reference to an interface definition, along
+with argument types if the definition is generic. \emph{Configurations} can
+only connect two interface instances if they have the same interface type
+and instance parameters.
+
+\item \emph{instance parameter}: An instance parameter is a parameter added
+to an interface type. It has a name and must be of integral type.
+
+There is (conceptually) a separate interface for each distinct list of
+instance parameter values of a \emph{parameterised interface} (and,
+similarly, separate commands or events in the case of parameterised
+commands or events). In a module, parameterised interfaces, commands,
+events allow runtime selection or a \kw{call} or \kw{signal} target.
+
+\item \emph{intermediate function}: A pseudo-function that represents the
+behaviour of the commands and events of a component, as specified by the
+wiring statements of the whole application. See
+Section~\ref{sec:wiring-semantics}.
+
+\item \emph{internal}: In a configuration $C$, describes a specification
+element from one of the components specified in $C$'s component list. See
+external.
+
+\item \emph{module}: A component whose implementation is provided by C
+code. 
+
+\item \emph{name space}: \nesc has the standard C \emph{object} (variables,
+functions, typedefs, enum-constants), \emph{tag} (\code{struct},
+\code{union} and \code{enum} tags) and \emph{label} (goto labels)
+name spaces. Additionally, \nesc has a \emph{component} name space for
+component and interface definitions.
+
+\item \emph{parameterised command, parameterised event, parameterised
+interface, parameterised endpoint}: See command, event, interface instance,
+endpoint.
+
+\item \emph{provided, provider}: A role for a specification
+element. A module $K$ must implement the \emph{provided commands of $K$}
+and \emph{provided events of $K$}.
+
+\item \emph{provided command of $K$}: A command that is either a
+provided specification element of $K$, or a command of a provided interface
+of $K$.
+
+\item \emph{provided event of $K$}: An event that is either a
+provided specification element of $K$, or an event of a used interface
+of $K$.
+
+\item \emph{scope}: \nesc has the standard C \emph{global},
+\emph{function-parameter} and \emph{block} scopes. Additionally there is a
+\emph{component parameter}, \emph{specification} and \emph{implementation}
+scope for each component and an \emph{interface parameter} and
+\emph{interface} scope for each interface. Scopes are divided into
+\emph{name spaces}.
+
+\item \emph{specification}: A list of \emph{specification elements} that
+specifies the interaction of a component with other components.
+
+\item \emph{specification element}: An \emph{interface}, \emph{bare
+command} or \emph{bare event} in a specification. Specification elements
+are either \emph{provided} or \emph{used}.
+
+\item \emph{task}: A \tinyos task representing an independent thread of
+control whose execution is requested by the application and initiated
+by the \tinyos scheduler.
+
+\item \emph{used, user}: A role for a specification element.
+
+\item \emph{used command of $K$}: A command that is either a used specification
+element of $K$, or a command of a used interface of $K$.
+
+\item \emph{used event of $K$}: An event that is either a used specification
+element of $K$, or an event of a provided interface of $K$.
+
+\item \emph{wiring}: The connections between component's specification
+elements specified by a configuration.
+
+\end{itemize}
+
+
+\bibliographystyle{abbrv}
+\bibliography{ref}
+
+\end{document}
+
+% LocalWords:  summarised behaviour nesC's summarises Kernighan async NESC uint
+% LocalWords:  uniqueCount inttypes TinyOS enum struct SendMsg Init MyInit doit
+% LocalWords:  MyMessage sendDone parameterised AMStandard StdControl AQueue nc
+% LocalWords:  initialisation ReceiveMsg GenericComm iff sizeof msg myTask stmt
+% LocalWords:  args NoWiring SecondQueue ccc callees call's concat bool norace
+% LocalWords:  unparameterised ncc frontend tos hwevent XYZ undef nesC BarTypes
+% LocalWords:  BarType constant's XService lvalue gcc's gcc init fnname nesc nx
+% LocalWords:  TOSH initialiser parenthesised recognise attribute's nxle nescc
+% LocalWords:  initialisers bitfields initialised ifndef endif componentname
+% LocalWords:  functionname reenable LALR
diff --git a/doc/user/attributes.txt b/doc/user/attributes.txt
new file mode 100644 (file)
index 0000000..18a2837
--- /dev/null
@@ -0,0 +1,348 @@
+Introduction
+============
+
+nesC 1.2 allows programmers to attach attributes to nesC programs. This
+allows:
+- simple language extensions without reserving lots of keywords and burdening
+  the syntax (e.g., "wire at most once")
+- user-specified annotations which would then be accessible to user-built
+  tools (e.g., mark a set of interfaces as "configuration interfaces" to
+  build a pc-side configuration tool for a specific app)
+
+These attributes are inspired by the annotations in Java 1.5
+(see http://jcp.org/aboutJava/communityprocess/review/jsr175/ for details).
+
+User-defined attributes have no direct effect on code generation. Instead,
+the nesC compiler can output information on the program and its use of
+attributes for use in external tools. This information is also useful for
+tools that do not rely on attributes.
+
+Finally, nesC includes some Java classes for parsing the nesC XML output
+into a set of Java objects, and a sample Java application using this
+framework to verify "at-most-once", "at-least-once" and "exactly-once"
+wiring constraints. The Java XML parsing classes are found in 
+  tools/java/net/tinyos/nesc/dump
+and the wiring-check application is in
+  tools/java/net/tinyos/nesc/wiring
+Please see the README files in those directories for more details.
+
+Attribute declaration and use
+=============================
+
+An attribute has a name, and associated values. Attributes are declared
+like a struct whose name starts with '@'. The struct's fields are the
+values associated with the attribute:
+  struct @atmostonce { } // "wired at-most-once", with no associated values
+  struct @section { char *name; } // "linker section", with section name
+
+An attribute can be used on:
+- declarations (variables, typedefs, functions, interface instances, etc)
+- component and interface definitions
+
+For variables, typedefs and interface instances, the attribute is placed at
+the end of the declaration (before the initialiser for variables):
+  typedef int mytype @special();
+  int fun @veryspecial("yes") = 22;
+  provides interface Fun as Bar[int id] @rpcinterface();
+
+For functions, it is placed after the end of the argument list (in either
+a prototype or in an implementation):
+  int magic(int bar) @magicfunction(99);
+  void moremagic(void) @magicfunction(100) { }
+
+For component and interface definitions it is placed after the (optional)
+arguments: 
+  interface Fun<t> @special() { ... }
+  module Small @runaway("now") { ...
+
+As the example shows, an attribute use takes the form
+  @<attribute_name>(<attribute parameters>)
+
+The attribute parameters must be a valid initialiser for the struct
+defining <attribute_name>. For instance, in
+  struct @big {
+    char *name;
+    int args[4];
+  };
+valid attributes uses include:
+  @big()                    // use default values
+  @big("yes", 1, 2, 3, 99) 
+  @big("no!", { 1, 2 })     // args[2] and args[3] have default values
+  @big( .args = { 9 }, .name = "explicit"); // use field names
+
+
+or they can use the java 1.5-like @attribute-name(value) syntax:
+
+  int main() @spontaneous @section("foo") { ... }
+
+
+Currently, any declared attribute can be used on any entity. Future
+versions of nesC may allow a particular attribute to be restricted, e.g.,
+to variables.
+
+Extracting information from a nesC program
+==========================================
+
+The -fnesc-dump= options to ncc (and nescc) are used to specify what
+information you wish to extract from a nesC program. Note that to
+successfully extract information, the nesC program must compile without
+error (with one exception: unwired functions and interfaces are allowed).
+
+The information is output in XML. The doc/dump directory contains a schema
+description for this XML output. The information is sent to the file
+specified by the -fnesc-dumpfile= option, or to stdout if no such option is
+used.
+
+You can ask for the following information:
+- components (includes both generic components and their instances)
+- interface definitions
+- interfaces (provided and used in components)
+- functions (both C and module functions)
+- variables, enum constants, typedefs (again, both from C and modules)
+- wiring graphs (for the whole program and for individual configurations)
+
+Dump request syntax
+-------------------
+
+A dump request has the form
+  -fnesc-dump=REQUEST
+or
+  -fnesc-dump=REQUEST(ARGUMENTS)
+
+where REQUEST specifies what information you want to collect, and ARGUMENTS
+includes options and filters for that request. Filters, described below,
+allow you to extract only the information you want, e.g., all interfaces
+with attribute @special, rather than all interfaces of the program. Options
+are used by some REQUESTs to modify their behaviour. Multiple arguments are
+separated by commas; multiple filter arguments are implicitly and-ed
+together.
+
+Because parentheses are meaningful to most shells, you will have to escape
+them in arguments to ncc, either with \, or by surrounding the whole
+arguments in '':
+  -fnesc-dump=components\(wiring\)
+or
+  '-fnesc-dump=components(wiring)'
+
+A single call to ncc may include multiple -fnesc-dump arguments. The
+information selected by all of these will be collected together and output
+as a single XML document.
+
+Dump requests
+-------------
+
+This section gives a high-level overview of the information collected by
+each dump request. For details on what information is available for each
+individual item (component, variable, etc), please see the XML schema (note
+that items always include the attributes that have been attached to
+them). It is often also helpful to examine the output on a sample program,
+but note that, e.g., unlike the schema definition, this will not
+necessarily tell you which fields are sometimes present and sometimes
+absent.
+
+REQUEST: "components"
+OPTIONS: "wiring"
+FILTERS: yes
+Returns the components used in a program. This includes:
+- all the non-generic components
+- all instances of generic components
+- all generic components instantiated by the program
+If the "wiring" option is included, wiring graphs for configurations will
+be output.
+
+REQUEST: "interfacedefs"
+OPTIONS: none
+FILTERS: yes
+Returns the interface definitions used in a program. To find out which
+interfaces are provided or used by which components, see the "interfaces"
+request.
+
+REQUEST: "interfaces"
+OPTIONS: none
+FILTERS: yes
+Returns the interfaces provided and used by components.
+
+REQUEST: "functions"
+OPTIONS: none
+FILTERS: yes
+Returns the functions defined in C files and in components, including commands
+and events defined outside interfaces.
+
+REQUEST: "variables"
+OPTIONS: none
+FILTERS: yes
+Returns the variables defined in C files and at the top-level inside
+components (i.e., this does not include function parameters and local
+variables).
+
+REQUEST: "constants"
+OPTIONS: none
+FILTERS: yes
+Returns the enum constants defined in C files and at the top-level inside 
+components.
+
+REQUEST: "typedefs"
+OPTIONS: none
+FILTERS: yes
+Returns the typedefs defined in C files and at the top-level inside 
+components.
+
+REQUEST: "tags"
+OPTIONS: none
+FILTERS: yes
+Returns the tagged types (struct, union, enum) defined in C files and at 
+the top-level inside components.
+
+REQUEST: "wiring"
+OPTIONS: "functions"
+FILTERS: no
+Return the application's wiring graph.
+If you specify the "functions" option, this graph will be in terms of the
+program's individual commands and events, i.e., interfaces are
+expanded. You may be surprised at how parameterised commands and events are
+handled when the "functions" option is used: there are edges from nodes
+representing the command (or event) for all possible parameter values to
+nodes representing to the command (event) with specific parameter values.
+
+REQUEST: "referenced"
+OPTIONS: "components", "interfacedefs", "interfaces", "functions",
+         "variables", "constants", "typedefs", "tags"
+FILTERS: no
+At least one option must be used. Many of the items described above refer
+to other items, e.g., interfaces refer to the interface definitions they
+are an instance of and to the component to which they belong. By including
+"referenced(components, interfacedefs)", any components and interface
+definitions referred to from an interface that is being output will also
+be output. This helps reduce the size and complexity of the XML output
+when you are using filters (see the examples below), by only including
+the components referenced from interfaces of interest, rather than all
+components. Note that "referenced" is recursive: if you have asked for
+referenced components, and this causes the inclusion of a component A
+which refers to a component B, then component B will also be included.
+
+
+Dump filters
+------------
+
+A tool can always simply ask for all XML information to be output, but this
+might be slow and unwieldy, and would force the external tool to do its own
+filtering, e.g., for interfaces with a particular attribute. To simplify
+external tool implementations, the nesC dump facility includes boolean
+filters which are applied before adding items requested by -fnesc-dump
+requests. Note however that items added because of a "referenced" request
+are not currently filtered.
+
+Filters are boolean expression built with (), |, &, ! (with the usual
+meanings) and base filters which take the form
+  NAME(ARGUMENTS)
+where the ARGUMENTS are strings and numbers separated by commas. Strings
+that look like numbers, contain commas, white space, parentheses, ", |, &
+and ! must be surrounded by "'s, other strings can be entered without
+surrounding "'s.  Within "'s, \ can be used to escape " and other
+characters.
+
+Note that the parentheses are not optional. A 0-argument filter is NAME().
+
+FILTER: "file"
+ARGUMENT: unix-style (* and ?) file pattern
+True if the file containing the item matches the file pattern.
+
+FILTER: "name"
+ARGUMENT: regular expression
+True if the item name matches the regular expression.
+
+FILTER: "component"
+ARGUMENT: component name
+True if the item's component is the same as the filter's argument
+(exact string matching).
+
+FILTER: "global"
+ARGUMENT: none
+True if the item is in C's global scope.
+
+FILTER: "instance"
+ARGUMENT: none
+True if the item is in a generic component instance (see the discussion of
+generic components).
+
+FILTER: "abstract"
+ARGUMENT: none
+True if the item is in a generic component (see the discussion of generic
+components).
+
+FILTER: "attribute"
+ARGUMENT: list of attribute names
+True if the item contains any of the attributes from the argument list
+(exact string matching).
+
+
+Generic components
+------------------
+
+Because generic components are instantiated at compile-time, it is possible
+to get information on all instances of generic components, and on the items
+contained within them. Some tools may be interested in this information,
+but others may be more interested in information from the generic 
+component that was instantiated (e.g., a tool that gives you the filenames
+of all components used in your program).
+
+To help distinguish between these cases at dump time, nesC includes two
+filters: "abstract()" and "instance()". These can be used both to filter
+components themselves, and also to filter items (such as variables,
+interfaces, etc) which are found inside them. These two filters cover the
+four possible categories of components:
+
+!abstract() & !instance(): a regular (not generic) component
+!abstract() & instance(): an instance of a generic component in your program
+abstract() & !instance(): a generic component
+abstract() & instance(): if a generic configuration A includes an 
+  instantiation of a generic component B, the instance of B in A can be
+  considered partially instantiated. It will be fully instantiated when
+  A itself is instantiated... (the dump system does not normally return
+  such components, but they are reachable from the wiring graph of a
+  generic configuration).
+
+
+
+Examples
+--------
+
+o Collect everything, and send it to file big.xml:
+
+  ncc -fnesc-dump=components(wiring)
+      -fnesc-dump=interfacedefs
+      -fnesc-dump=interfaces
+      -fnesc-dump=functions
+      -fnesc-dump=typedefs
+      -fnesc-dump=variables
+      -fnesc-dump=constants
+      -fnesc-dump=typedefs
+      -fnesc-dump=tags
+      -fnesc-dump=wiring
+      -fnesc-dumpfile=big.xml
+      MyApp.nc
+
+o Find specification elements (interfaces, commands, events) with the @rpc
+  attribute:
+
+  ncc '-fnesc-dump=interfaces(attribute(rpc))'
+      '-fnesc-dump=functions(attribute(rpc))' MyApp.nc
+
+  (note that this would also return any functions in modules which
+  incorrectly(?) used the @rpc attribute)
+
+o Find specification elements with the @rpc attribute, but exclude
+  those from generic components (i.e., we care about the interfaces
+  on actual components, not those in the generic components that we
+  instantiated):
+
+  ncc '-fnesc-dump=interfaces(attribute(rpc) & !abstract())'
+      '-fnesc-dump=functions(attribute(rpc) & !abstract())' MyApp.nc
+
+o The same as above, but we also need some information on the components
+  these interfaces, commands and events belong to:
+
+  ncc '-fnesc-dump=interfaces(attribute(rpc) & !abstract())'
+      '-fnesc-dump=functions(attribute(rpc) & !abstract())' 
+      '-fnesc-dump=referenced(components)' MyApp.nc
+
diff --git a/doc/user/binary-components.txt b/doc/user/binary-components.txt
new file mode 100644 (file)
index 0000000..b5799e0
--- /dev/null
@@ -0,0 +1,167 @@
+How to build and use binary components
+======================================
+
+1) Binary Components
+--------------------
+
+nesC 1.2 allows you to build and use binary components. This is supported
+through a new way of definining components. A component "Foo" can be defined
+in file Foo.nc as:
+
+  component Foo {
+    provides interface A as X;
+    uses interface A as Y;
+  }
+
+Note that you say "component" rather than "module" or "configuration", and
+there is no implementation section. When generating the .o file for a
+nesC application including Foo, the nesC compiler will:
+
+- include references to external symbols for all provided commands and used
+  events of Foo
+
+- define external symbols (based on the application's wiring graph) for all
+  used events and provided commands of Foo
+
+- These symbols are named 'component-name$interface-name$command-or-event-name'
+
+- The compiler requires that all commands and events used by Foo (including
+  all commands in used interfaces and all events in provided interfaces) 
+  be fully wired (in particular, parameterised interfaces must be wired
+  as a whole and not just for individual values)
+
+In this example, if interface A is
+  interface A {
+    command int request();
+    event void done(int val);
+  }
+
+Then the generated .o file for an application including Foo will:
+  - use symbols named Foo$X$request, Foo$Y$done
+  - define symbols named Foo$X$done, Foo$Y$request
+
+2) Using binary components
+--------------------------
+
+Using a binary component is straightforward: just wire the binary component
+(e.g., Foo) into your application just as you would any other component. At
+some point, you will have to link your application with the binary
+component's definition. While this operation is beyond the scope of the
+nesC language itself, this might happen in one of the following ways:
+
+- The binary component is distributed in an object (.o) or library (.a)
+  file. You just link your application against this object or library as
+  you would any other. For instance:
+    ncc -target=mica2 MyApp.nc some-binary-component.o
+
+- The binary component is pre-installed in the mote's ROM. Some loader is
+  responsible for linking newly installed user applications with the
+  appropriate ROM entry points.
+
+3) Building binary components
+-----------------------------
+
+While the 'component' language feature appears to be designed for linking
+to externally created binary component, it can actually also be used to
+create them. An example will make this clear. Assume I want to build a
+binary component "Foo" from our example above.
+
+I have some implementation of Foo (in this case a module, but it could
+also be a configuration):
+
+  module FooImplementation {
+    provides interface A as X;
+    uses interface A as Y;
+  }
+  implementation {
+    // This does something mysterious to requests...
+    int x;
+
+    command int X.request() {
+      return call Y.request() + x;
+    }
+
+    event void Y.done(int val) {
+      x = val;
+    }
+  }
+
+I can build a binary version of Foo by compiling BuildBinaryFoo:
+
+  configuration BuildBinaryFoo { }
+  implementation {
+    components Foo, FooImplementation;
+
+    Foo.X -> FooImplementation.X;
+    Foo.Y <- FooImplementation.Y;
+  }
+
+where Foo is a *different* component from the one we saw earlier:
+
+  component Foo {
+    // Note that the uses, provides are reversed from the definition
+    // of Foo (and FooImplementation) above!
+    uses interface A as X;
+    provides interface A as Y;
+  }
+
+4) Warnings
+-----------
+
+Some issues you should be aware of when building and using binary components:
+
+- If a component (e.g., TimerC) is included in both your application and
+  the binary component definition, you will end up with two copies of TimerC.
+  This is a) wasteful, b) unlikely to work.
+
+  A binary component should include the strict minimum necessary, and should
+  express its dependencies on outside services through interfaces.
+
+- Compile with -DNESC_BUILD_BINARY when building binary components to avoid
+  having copies of the runtime support functions (TOS_post,
+  __nesc_atomic_start, __nesc_atomic_end) in your binary components. Note
+  that the necessary #ifdef's are only present from TinyOS 1.1.11 onwards.
+
+- The symbol names used in binary components include '$'. If you want to call
+  these from C code, you may have to include the -fdollars-in-identifiers
+  command-line flag. On some platforms (avr, msp430), the assembler does not
+  support '$' in symbol names. To avoid this, use  'nescc -gcc=<your-gcc>'
+  (e.g., 'nescc -gcc=avr-gcc') rather than avr-gcc or msp430-gcc to compile
+  your C code. nescc will invoke your-gcc, but with a custom assembler
+  which accepts '$'.
+
+- 'default' commands and events do not work across binary component
+  boundaries: the decision to call a default command is made at
+  compile-time based on whether or not the command is wired. A call
+  to a command in a binary component is always assumed wired, so the
+  default command will never be called (the same applies to events, of
+  course).
+
+  This is most likely to cause surprises with parameterised interfaces. The
+  following code:
+
+    component BinaryA {
+      provides interface A[int id];
+    }
+
+    module UseA {
+      uses interface A;
+    }
+    implementation {
+      void f() {
+       call A.request();
+      }
+      event void A.done(int val) {
+      }
+    }
+
+    configuration WireA { }
+    implementation {
+      components UseA, BinaryA;
+      UseA.A -> BinaryA.A[10];
+    }
+
+  will produce the error
+    binary entry point BinaryA.A.done is not fully wired
+  as even if the binary implementation of BinaryA had a default handler for
+  BinaryA.A.done, the compiler would not know when it should be called.
diff --git a/doc/user/generics-1.2.txt b/doc/user/generics-1.2.txt
new file mode 100644 (file)
index 0000000..0e3770c
--- /dev/null
@@ -0,0 +1,269 @@
+Introduction
+============
+
+This is a quick introduction to generic components and interfaces, the new
+features of nesC 1.2. A generic component is a component that can be
+multiply instantiated at compile-time and which takes an optional parameter
+list (including type arguments). A generic interface is an interface with
+type arguments. This allows, e.g., the creation of reusable adapter
+components (such as "converting" a StdControl to a SplitControl interface),
+simplifies implementations of components with much in common (such as the
+TinyDB attributes), etc.
+
+Generic Components
+==================
+
+Both generic configurations and generic modules are supported. The syntax
+is straightforward, as this generic queue of ints (with no empty/full
+detection) shows:
+
+  interface IntQueue {
+    command void push(int x);
+    command int pop();
+  }
+
+  generic module IntQueueC(int n) {
+    provides interface IntQueue;
+  } implementation {
+    int q[n];
+    int p1 = 0, p2 = 0;
+
+    command void IntQueue.push(int x) { 
+      q[p1++] = x;
+      if (p1 == n) p1 = 0;
+    }
+
+    command int IntQueue.pop() {
+      int ret = q[p2++];
+      if (p2 == n) p2 = 0;
+      return ret;
+    }
+  }
+
+The n argument to IntQueueC can be used within the component as a constant
+expression; in this example it is used to dimension the q array.
+
+Generic components are instantiated in the `components' declaration
+of configurations:
+
+  configuration MyApp { }
+  implementation {
+    components MyCode, new IntQueueC(10) as MyQueue;
+
+    MyCode.Queue -> MyQueue;
+  }
+
+This creates a new 10 element int-queue, accessible as MyQueue within
+the MyApp configuration. This new component is not accessible outside
+MyApp, except via any interfaces wired within MyApp. You can also have
+generic configurations:
+
+  generic configuration SomeAssembly() {
+    provides interface X;
+  }
+  implementation {
+    components new SomeAssemblyM(), new IntQueueC(10) as MyQueue;
+
+    X = SomeAssemblyM.X;
+    SomeAssemblyM.Queue -> MyQueue;
+  }
+
+Every time SomeAssembly is instantiated, new instances of SomeAssemblyM and
+IntQueueC will also be instantiated.
+
+unique, uniqueCount work "correctly" (i.e., usefully ;-)): if unique is
+used within a generic component C, it returns a different value in
+each instance of C, and the call within the definition of C itself 
+does not affect the value returned by uniqueCount.
+
+Instantiating a generic component is effectively equivalent to creating a
+new component with the parameters replaced by the argument values. Thus,
+instantiating a generic module will produce two slightly different versions
+of the module's code; beware of code size explosion if you instantiate many
+modules... A future version of nesC may support code sharing between
+instances of generic modules, with some restrictions and at some runtime
+cost.
+
+
+Generic Interfaces and Type Parameters
+======================================
+
+Finally, generic components can also have type arguments. This is most
+useful in conjunction with generic interfaces, e.g., to create a queue
+of any type:
+
+  interface Queue<t> {
+    command void push(t x);
+    command t pop();
+  }
+
+  generic module QueueC(typedef t, int n) {
+    provides interface Queue<t>;
+    // Note: this is a shortcut for
+    //   provides interface Queue<t> as Queue
+    // hence the declarations below refer to Queue, not Queue<t>.
+    // Stylistically it's probably best to give a name to the
+    // provided or used interface.
+  } implementation {
+    t q[n];
+    int p1 = 0, p2 = 0;
+
+    command void Queue.push(t x) { 
+      q[p1++] = x;
+      if (p1 == n) p1 = 0;
+    }
+
+    command t Queue.pop() {
+      t ret = q[p2++];
+      if (p2 == n) p2 = 0;
+      return ret;
+    }
+  }
+
+The Queue interface takes a single type parameter t, which can be used
+within Queue as if it were a typedefed type. Type arguments must be
+provided for generic interfaces in uses and provides declarations. The
+generic component queue takes a type parameter t (using the funky "typedef
+t" syntax), and a size as in the IntQueue example. As with generic
+interfaces, component type parameters can be used as if they were typedefed
+types. 
+
+Generic components with type arguments are instantiated just like 
+other generic components:
+
+  configuration MyApp { }
+  implementation {
+    components MyCode, new QueueC(int, 10) as MyQueue;
+
+    MyCode.Queue -> MyQueue;
+  }
+
+One restriction: type arguments to generic components and interfaces can
+not be of array, function or incomplete type.
+
+By default, the only operations that can be performed on a value of a type
+parameter are copying it, and passing it as an argument to some
+function. If a generic component needs some functionality on its type
+parameter, it can express that need by using an appropriate interface:
+
+  interface Compare<t> {
+    command bool lessthan(t x1, t x2);
+  }
+
+  generic module Sort(typedef t) {
+    uses interface Compare<t>;
+  }
+  implementation {
+    ...
+    void f() {
+      t x1, x2; 
+      ...
+      if (call Compare.lessthan(x1, x2))
+       ...
+  }
+
+It is also possible to declare, using the special @integer() and @number()
+attributes, that a type parameter is of an integral (respectively numerical)
+type. In that case, all the operations allowed on integers (respectively,
+integers and floating-point numbers) are allowed:
+
+  generic module Sort(typedef t @number()) { }
+  implementation {
+    ...
+    void f() {
+      t x1, x2; 
+      ...
+      if (x1 < x2)
+       ...
+  }
+
+Of course, the type argument to Sort must then be an integral or floating-point
+type.
+
+
+Type and constants in Component Specifications and Other Changes
+================================================================
+
+As part of the changes for generic components, nesC now allows types and
+enum constants to be defined in the specification of a component (both in
+generic and non-generic components). These types can be used in the
+component in which they are defined, and in configurations that include the
+component (as arguments to generic components or to define other types and
+constants). For example,
+
+  interface Send<t> {
+    command result_t send(t x);
+    event result_t sendDone();
+  }
+
+  generic configuration RadioStack(typedef messageType) {
+    typedef messageType *messagePtr;
+    provides interface Send<messagePtr>;
+  }
+  implementation {
+    ...
+  }
+
+
+  configuration MyRadioStack {
+    provides interface Send<MyMessageType *>;
+  }
+  implementation {
+    components new RadioStack(MyMessageType) as TheActualStack;
+
+    Send = TheActualStack.Send;
+    
+    // Build a queue of the message pointer type
+    components new QueueOf(TheActualStack.messagePtr) as MyQueue;
+    ...
+  }
+
+This example also shows that you can now intersperse wiring statements
+and component declarations. Additionally, you can have typedefs in the
+body of a configuration, so MyRadioStack could also be written as:
+
+  configuration MyRadioStack {
+    provides interface Send<MyMessageType *>;
+  }
+  implementation {
+    components new RadioStack(MyMessageType) as TheActualStack;
+
+    Send = TheActualStack.Send;
+    
+    // Build a queue of the message pointer type, using a local typedef
+    typedef TheActualStack.messagePtr MyMessageTypePtr;
+    components new QueueOf(MyMessageTypePtr) as MyQueue;
+    ...
+  }
+
+Note that you can refer to typedefs and enum constants in other components,
+but not to struct, union or enum tags, i.e.,
+
+  module Fun {
+    struct silly { int x; };
+  } implementation { ... }
+
+  configuration Barf { }
+  implementation {
+    components Fun;
+
+    typedef struct Fun.silly baz;
+  }
+
+is not allowed, but
+
+  module Legalfun {
+    typedef enum { ONE = 2 } sillier;
+  } implementation { ... }
+
+  configuration Ok { }
+  implementation {
+    components Legalfun;
+
+    typedef Legalfun.sillier baz;
+    enum { THREE = Legalfun.ONE };
+  }
+
+is.
+
+
diff --git a/doc/user/network-types.txt b/doc/user/network-types.txt
new file mode 100644 (file)
index 0000000..60f0e86
--- /dev/null
@@ -0,0 +1,108 @@
+Part 1: Using External Types
+============================
+
+External types are an extension to nesC for platform-independent type
+representation: you can define your packet layout using syntax very similar
+to existing C type declarations, and just accesses it like a regular C
+type. The compiler ensures that this type has the same representation on
+all platforms and generates any necessary conversion code. Additionally,
+these types have no alignment restrictions. This makes them particularly
+suitable for defining and accessing network packets in a
+platform-independent way.
+
+For instance, the SurgeCmdMsg from the Surge application can be defined and
+accessed as follows using external types:
+
+  typedef nx_struct {
+    nx_uint8_t type;
+    nx_union {
+      nx_uint32_t newrate;
+      nx_uint16_t focusaddr;
+    } args;
+  } SurgeCmdMsg;
+  ...
+
+  SurgeCmdMsg *pCmdMsg = (SurgeCmdMsg *)payload;
+  if (pCmdMsg->type == SURGE_TYPE_SETRATE) {
+    timer_rate = pCmdMsg->args.newrate;
+  ...
+
+More formally, nesC includes three kinds of external types. 
+
+  o External base types are similar to the fixed size in8_t, uint16_t, etc
+    types. They include 8, 16, 32 and 64-bit signed and unsigned integers
+    denoted by the types nx_[u]int[8/16/32/64]_t.  
+
+  o External array types are any array built from an external type, using 
+    the usual C syntax, e.g, nx_int16_t x[10]. 
+
+  o External structures are declared like C structures and unions, but 
+    using the nx_struct and nx_union keywords (as in the SurgeCmdMsg 
+    example above). An external structure can only contain external types
+    as elements. 
+
+External types have no alignment restrictions, external structures contain
+no padding, and the external base types use a 2's complement, big-endian
+representation (there are also little-endian versions of the base types
+available, using the nxle_ prefix, but their use is discouraged for
+networking purposes). Bit-fields in external structures are maximally
+packed. A 0-width bit-field moves allocation on to the next byte. Thus the
+representation of external types is platform-independent, and any arbitrary
+section of memory can be accessed via an external type.
+
+All these external types can be used exactly like regular C types, with a
+few restrictions: 
+  o Bit-fields can only be created from big-endian external base types
+    (i.e., `nx_struct { nxle_uint8_t f1 : 2; }' is not allowed).
+    Having  big- and little-endian bit-fields adjacent in a type would 
+    be problematic...
+  o Bit-fields of external types cannot be used inside non-external
+    structures (i.e., `struct { nx_uint8_t f1 : 2; }' is not allowed).
+  o External type variables cannot have initialisers.
+
+Part 2: Implementation
+======================
+
+In the generated C code for nesC programs using external types, we simply
+define a C type for each external base type, translate nx_struct and
+nx_union to struct and union and leave array types unchanged. The external
+base types are replaced by structures containing char arrays. 
+
+Reads and writes of external base types are replaced by calls to inline
+functions like NTOH32 in the example below.  For instance, the example
+from Surge becomes:
+
+  typedef struct { char data[4]; } nx_uint32_t;
+  static inline unsigned short NTOUH32(void *target) {
+    unsigned char *base = target;
+    return (unsigned long)base[3] << 24 |
+           (unsigned long)base[2] << 16 |
+           base[1] << 8 | base[0];
+  }
+  ...
+  typedef struct {
+    nx_uint8_t type;
+    union {
+      nx_uint32_t newrate;
+      nx_uint16_t focusaddr;
+    } args;
+  } SurgeCmdMsg;
+  ...
+  SurgeCmdMsg *pCmdMsg = (SurgeCmdMsg *)payload;
+  if (NTOUH8(&pCmdMsg->type) == SURGE_TYPE_SETRATE) {
+      timer_rate = NTOUH32(&pCmdMsg->args.newrate);
+  ...
+
+For this translation to be correct, a structure containing only characters
+(such as nx_uint32_t) should have no alignment restrictions, and the same
+must hold for structures containing such structures (e.g.,
+SurgeCmdMsg). This is true on many, but not all platforms: on ARM
+processors, all structures are aligned to 4-byte boundaries, and on
+Motorola 68K processors they are aligned to 2-byte boundaries. We currently
+work around this problem by using gcc's non-standard packed attribute.
+
+Bit-fields are a little more complex: space used by bit-fields inside
+external structures are replaced by "filler" fields. Accesses to external
+bit-fields is done by taking the address of the enclosing external
+structure, treating it as an array of bytes and accessing the appropriate
+offsets.
diff --git a/include/COPYING b/include/COPYING
new file mode 100644 (file)
index 0000000..623b625
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/include/COPYING3 b/include/COPYING3
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/include/ChangeLog b/include/ChangeLog
new file mode 100644 (file)
index 0000000..7ea34d2
--- /dev/null
@@ -0,0 +1,388 @@
+2007-11-07  Joseph Myers  <joseph@codesourcery.com>
+           Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * floatformat.h (struct floatformat): Add split_half field.
+       (floatformat_ibm_long_double): New.
+
+2007-09-06  Tom Tromey  <tromey@redhat.com>
+
+       * libiberty.h (pex_free): Document process killing.
+
+2007-08-31  Douglas Gregor  <doug.gregor@gmail.com>
+       
+       * demangle.h (enum demangle_component_type): Add
+       DEMANGLE_COMPONENT_RVALUE_REFERENCE. 
+
+2007-07-25  Ben Elliston  <bje@au.ibm.com>
+
+       * ternary.h: Remove.
+
+2007-07-18  Bob Wilson  <bob.wilson@acm.org>
+       
+       * xtensa-config.h (XCHAL_HAVE_THREADPTR): New.
+       (XCHAL_HAVE_RELEASE_SYNC, XCHAL_HAVE_S32C1I): New.
+       
+2007-07-17  Nick Clifton  <nickc@redhat.com>
+
+       * COPYING3: New file.  Contains version 3 of the GNU General
+       Public License.
+
+2007-07-12  Kai Tietz   <kai.tietz@onevision.com>
+
+       * splay-tree.h (libi_uhostptr_t, libi_shostptr_t): New types,
+       needed for WIN64 when a long is not wide enough for a pointer.
+        (splay_tree_key, splay_tree_value): Use the new types.
+
+2007-05-07  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * libiberty.h (writeargv): Declare.
+
+2007-04-25  Mark Mitchell  <mark@codesourcery.com>
+
+       * demangle.h: Change license to LGPL + exception.
+
+2007-03-29  Joel Brobecker  <brobecker@adacore.com>
+
+       * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp
+       regardless of the type of file system.
+
+2007-03-06  Jan Hubicka  <jh@suse.cz>
+       
+       * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New.
+
+2007-02-09  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * libiberty.h (pex_write_input): Remove prototype.
+
+2007-01-31  Vladimir Prus  <vladimir@codesourcery.com>
+       
+       * libiberty.h (PEX_STDERR_TO_PIPE): New define.
+       (PEX_BINARY_ERROR): New define.
+       (pex_read_err): New function.
+
+2007-01-29  Simon Baldwin <simonb@google.com>
+
+       * demangle.h: New cplus_demangle_print_callback,
+       cplus_demangle_v3_callback, and java_demangle_v3_callback function
+       prototypes, and demangle_callbackref type definition.
+
+2006-12-06  Nick Clifton  <nickc@redhat.com>
+
+       * ansidecl.h (ATTRIBUTE_PACKED): Define.
+
+2006-11-30  Andrew Stubbs  <andrew.stubbs@st.com>
+            J"orn Rennecke <joern.rennecke@st.com>
+
+       PR driver/29931
+       * libiberty.h (make_relative_prefix_ignore_links): Declare.
+
+2006-11-27  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h (XSHAL_ABI): New.
+       (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New.
+
+2006-04-11  Jim Blandy  <jimb@codesourcery.com>
+
+       * libiberty.h (pex_input_file, pex_input_pipe): New declarations.
+
+2006-01-18  DJ Delorie  <dj@redhat.com>
+
+       * md5.h: Include ansidecl.h
+
+2006-01-09  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h (XCHAL_HAVE_MUL32_HIGH): Define.
+
+2005-12-30  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h (XCHAL_HAVE_WIDE_BRANCHES): New.
+
+2005-12-10  Terry Laurenzo  <tlaurenzo@gmail.com>
+
+       PR java/9861
+       * demangle.h : Add DMGL_RET_POSTFIX define to enable alternative
+       output format for return types
+
+2005-10-31  Mark Kettenis  <kettenis@gnu.org>
+
+       * floatformat.h (enum floatformat_byteorders): Add
+       floatformat_vax.
+       (floatformat_vax_aingle, floatformat_vax_double): Declare.
+
+2005-09-26  Mark Mitchell  <mark@codesourcery.com>
+
+       * libiberty.h (expandargv): New function.
+
+2005-08-17  Mark Kettenis  <kettenis@gnu.org>
+
+       * floatformat.h (struct floatformat): Change type of large
+       argument for is_valid member to `const void *'.
+       (floatformat_to_double): Change type of second argument to `const
+       void *'.
+       (floatformat_from_double): Change type of last argument to `void
+       *'.
+       (floatformat_is_valid): Change type of last argument to `const
+       void *'.
+
+2005-07-12  Ben Elliston  <bje@au.ibm.com>
+
+       * xregex2.h (regexec): Qualify this prototype with __extension__
+       when compiling with GNU C.
+
+2005-07-03  Steve Ellcey  <sje@cup.hp.com>
+
+       PR other/13906
+       * ansidecl.h (ATTRIBUTE_ALIGNED_ALIGNOF): New.
+       * md5.h (md5_uintptr): New.
+       (md5_ctx): Align buffer field.
+
+2005-06-30  Daniel Berlin  <dberlin@dberlin.org>
+       
+       * hashtab.h (HTAB_DELETED_ENTRY): New macro.
+       (HTAB_EMPTY_ENTRY): New macro.
+
+2005-06-20  Geoffrey Keating  <geoffk@apple.com>
+
+       * libiberty.h (strverscmp): Prototype. 
+
+2005-06-06  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * libiberty.h (XOBFINISH): New.
+
+2005-06-01  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (vsnprintf): Add format attribute.
+
+2005-05-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h: Add ATTRIBUTE_FPTR_PRINTF.
+
+2005-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * libiberty.h: (snprintf) [!HAVE_DECL_SNPRINTF]: Declare if
+       needed.
+       (vsnprintf) [!HAVE_DECL_VSNPRINTF]: Declare if needed.
+
+2005-05-25  Richard Henderson  <rth@redhat.com>
+
+       * demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New.
+
+2005-05-24  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * libiberty.h (ACONCAT): Properly cast value of alloca().
+
+       * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if
+       __cplusplus.
+
+2005-05-12  Steve Ellcey  <sje@cup.hp.com>
+
+       libiberty.h: Do not define empty basename prototype.
+
+2005-05-10  Nick Clifton  <nickc@redhat.com>
+
+       * Update the address and phone number of the FSF organization in
+       the GPL notices in the following files:
+       COPYING, ansidecl.h, bfdlink.h, bout.h, demangle.h, dis-asm.h,
+       dyn-string.h, fibheap.h, filenames.h, floatformat.h,
+       fnmatch.h, gdbm.h, getopt.h, hashtab.h, hp-symtab.h, ieee.h,
+       libiberty.h, md5.h, oasys.h, objalloc.h, obstack.h, os9k.h,
+       partition.h, progress.h, safe-ctype.h, sort.h, splay-tree.h,
+       symcat.h, ternary.h, xregex2.h, xtensa-config.h,
+       xtensa-isa-internal.h, xtensa-isa.h
+
+2005-04-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (unlock_std_streams): New.
+
+2005-04-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * hashtab.h, libiberty.h, objalloc.h, splay-tree.h, ternary.h:
+       Don't use the PTR macro.
+
+       * sort.h: Don't use the PARAMS macro.
+
+2005-04-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (unlock_stream): New.
+
+2005-04-13  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked):
+       Remove parameter names.
+
+2005-04-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked):
+       Provide prototypes for new functions.
+
+2005-03-29  Ian Lance Taylor  <ian@airs.com>
+
+       * libiberty.h: Fix indentation.
+
+2005-03-28  Ian Lance Taylor  <ian@airs.com>
+
+       * libiberty.h: Include <stdio.h>.
+       (PEX_RECORD_TIMES, PEX_USE_PIPES, PEX_SAVE_TEMPS): Define.
+       (PEX_LAST, PEX_SEARCH, PEX_SUFFIX, PEX_STDERR_TO_STDOUT): Define.
+       (PEX_BINARY_INPUT, PEX_BINARY_OUTPUT): Define.
+       (pex_init, pex_run, pex_read_output): Declare.
+       (pex_get_status, pex_get_times, pex_free, pex_one): Declare.
+       (struct pex_time): Define.
+
+2005-03-28  Mark Mitchell <mark@codesourcery.com>
+
+       * libiberty.h (ffs): Declare, if necessary.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * xregex2.h (_RE_ARGS): Remove definition and uses.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integreable-solutions.net>
+
+       * ternary.h: Don't use PARAMS anymore.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * partition.h: Remove use of PARAMS.
+       * obstack.h: Remove conditional prototypes __STDC__.
+       * objalloc.h:  Remove use of PARAMS.
+       * splay-tree.h: Likewise.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * md5.h: Remove definition and uses of __P.
+       * dyn-string.h: Remove uses of PARAMS.
+       * fibheap.h: Likewise.
+       * floatformat.h: Likewise.
+       * hashtab.h: Likewise.
+
+2005-03-26  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * demangle.h: Remove uses of PARAMS.
+
+       * libiberty.h (ANSI_PROTOTYPES): Remove guard since
+       ANSI_PROTOTYPES is always assumed.
+       Remove uses of PARAMS throughout.
+
+2005-03-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (xstrndup): Declare.
+
+2005-03-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (make_relative_prefix): Add ATTRIBUTE_MALLOC.
+
+2005-03-09  Mark Mitchell  <mark@codesourcery.com>
+
+       * libiberty.h (gettimeofday): Declare.
+
+2005-03-01  Jan Beulich  <jbeulich@novell.com>
+
+       * libiberty.h: Declare unlink_if_ordinary.
+
+2005-02-14  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR bootstrap/19818
+       * ansidecl.h (PARAMS): Guard from redefinition.
+
+2004-12-11  Ben Elliston  <bje@au.ibm.com>
+
+       * fibheap.h (struct fibnode): Only use unsigned long bitfields
+       when __GNUC__ is defined and ints are less than 32-bits wide.
+
+2004-10-07  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h (XSHAL_USE_ABSOLUTE_LITERALS,
+       XCHAL_HAVE_PREDICTED_BRANCHES, XCHAL_INST_FETCH_WIDTH): New.
+       (XCHAL_EXTRA_SA_SIZE, XCHAL_EXTRA_SA_ALIGN): Delete.
+
+2004-09-13  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>
+
+       * libiberty.h (basename): Prototype for __MINGW32__.
+
+2004-09-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (ATTRIBUTE_SENTINEL): Define.
+       * libiberty.h (concat, reconcat, concat_length, concat_copy,
+       concat_copy2): Use ATTRIBUTE_SENTINEL.
+
+2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * libiberty.h (XDELETE, XDELETEVEC, XRESIZEVEC): Remove any
+       const-qualification before disposal.
+
+2004-07-24  Bernardo Innocenti  <bernie@develer.com>
+
+       * ansidecl.h (ARG_UNUSED): New Macro.
+
+2004-07-24  Bernardo Innocenti  <bernie@develer.com>
+
+       * libiberty.h (XNEW, XCNEW, XNEWVEC, XCNEWVEC, XOBNEW): Move here from
+       libcpp/internal.h.
+       (XDELETE, XRESIZEVEC, XDELETEVEC, XNEWVAR, XCNEWVAR, XRESIZEVAR): New
+       macros.
+
+2004-07-21  Paolo Bonzini  <bonzini@gnu.org>
+
+       * ansidecl.h (ATTRIBUTE_PURE): New.
+
+2004-07-13  Bernardo Innocenti  <bernie@develer.com>
+
+       * libiberty.h (ASTRDUP): Add casts required for stricter
+       type conversion rules of C++.
+       * obstack.h (obstack_free): Likewise.
+
+2004-05-04  Andreas Jaeger  <aj@suse.de>
+
+       * demangle.h: Do not use C++ reserved keyword typename as
+       parameter for cplus_demangle_fill_builtin_type.
+
+2004-04-22  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.h (struct htab): Add size_prime_index.
+
+2004-04-13  Jeff Law  <law@redhat.com>
+
+       * hashtab.h (htab_remove_elt_with_hash): Prototype new function.
+
+2004-03-30  Zack Weinberg  <zack@codesourcery.com>
+
+       * hashtab.h, splay-tree.h: Use new shorter form of GTY markers.
+
+2004-02-24  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * dyn-string.h: Update copyright date.
+
+2004-02-23  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * dyn-string.h: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and
+       the associated #defines.
+
+2004-01-12  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * demangle.h: Instead of checking ANSI_PROTOTYPES, just include
+       "libiberty.h".
+
+       * demangle.h: If ANSI_PROTOTYPES is defined, include <stddef.h>.
+
+       * demangle.h (enum demangle_component_type): Define.
+       (struct demangle_operator_info): Declare.
+       (struct demangle_builtin_type_info): Declare.
+       (struct demangle_component): Define.
+       (cplus_demangle_fill_component): Declare.
+       (cplus_demangle_fill_name): Declare.
+       (cplus_demangle_fill_builtin_type): Declare.
+       (cplus_demangle_fill_operator): Declare.
+       (cplus_demangle_fill_extended_operator): Declare.
+       (cplus_demangle_fill_ctor, cplus_demangle_fill_dtor): Declare.
+       (cplus_demangle_v3_components): Declare.
+       (cplus_demangle_print): Declare.
+
+For older changes see ChangeLog-9103
+\f
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/include/ChangeLog-9103 b/include/ChangeLog-9103
new file mode 100644 (file)
index 0000000..f4f7aa1
--- /dev/null
@@ -0,0 +1,2682 @@
+2003-12-19  Andreas Tobler  <a.tobler@schweiz.ch>
+
+       * include/fibheap.h (fibnode): Use __extension__ for
+       bit-fields mark and degree if __GNUC__.
+
+2003-12-18  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * include/fibheap.h (fibnode): Use unsigned long int for
+       bit-fields if __GNUC__ is defined.
+
+2003-12-19  Andreas Tobler  <a.tobler@schweiz.ch>
+
+       * fibheap.h (fibnode): Use __extension__ for
+       bit-fields mark and degree if __GNUC__.
+
+2003-12-18  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * fibheap.h (fibnode): Use unsigned long int for
+       bit-fields if __GNUC__ is defined.
+
+2003-12-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * bfdlink.h (bfd_link_info): Change relax_finalizing to
+       need_relax_finalize.
+
+2003-12-03  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h (struct bfd_link_hash_entry): Rename "next" to "und_next".
+
+2003-12-02  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h (struct bfd_link_info): Remove mpc860c0 field.
+
+2003-11-14  Nick Clifton  <nickc@redhat.com>
+
+       * dis-asm.h (struct disassemble_info): Add new field
+       'symbol_is_valid' which is a function which can tell the
+       disassembler to skip certain symbols as they should not be
+       displayed to the user.
+       (arm_symbol_is_valid): New prototype.  This is the ARM
+       specific function for the symbol_is_valid field.
+       (generic_symbol_is_valid): New prototype.  This is the default
+       function pointed to by the symbol_is_valid field.
+
+2003-11-06  Bruno Rohee  <bruno@rohee.com>
+
+       * hp-symtab.h: Fix "the the" typo.
+
+2003-10-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * bfdlink.h (bfd_elf_version_expr): Add "symbol" and remove
+       "wildcard".
+
+2003-10-22  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * obstack.h: Merge the following change from gnulib:
+       2003-10-21  Paul Eggert  <eggert@twinsun.com>
+       * obstack.h (obstack_1grow_fast): Properly parenthesize arg.
+       (obstack_ptr_grow_fast, obstack_int_grow_fast):
+       Don't use lvalue casts, as GCC plans to remove support for them
+       in GCC 3.5.  Reported by Joseph S. Myers.  This bug
+       was also present in the non-GCC version, indicating that this
+       code had always been buggy and had never been widely used.
+       (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank):
+       Use the fast variant of each macro, rather than copying the
+       definiens of the fast variant; that way, we'll be more likely to
+       catch future bugs in the fast variants.
+
+2003-10-22  Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (struct bfd_elf_version_expr): Remove match field.
+       Add wildcard and mask fields.
+       (BFD_ELF_VERSION_C_TYPE): Define.
+       (BFD_ELF_VERSION_CXX_TYPE): Likewise.
+       (BFD_ELF_VERSION_JAVA_TYPE): Likewise.
+       (struct bfd_elf_version_expr_head): New.
+       (struct bfd_elf_version_tree): Add match field.
+       Change type of globals and locals fields
+       to struct bfd_elf_version_expr_head.
+
+2003-09-22  Andrew Cagney  <cagney@redhat.com>
+
+       * floatformat.h (struct floatformat): Add field "is_valid".
+
+2003-09-15  Andrew Cagney  <cagney@redhat.com>
+
+       * floatformat.h (floatformat_to_double): Make input buffer constant.
+       (floatformat_from_double, floatformat_is_valid): Ditto.
+
+2003-09-15  Andrew Cagney  <cagney@redhat.com>
+
+       * floatformat.h (struct floatformat): Make "exp_bias" signed.
+
+2003-09-15  Daniel Jacobowitz  <drow@mvista.com>
+
+       * floatformat.h (floatformat_is_valid): Add prototype.
+
+2003-08-27  Andrew Cagney  <cagney@redhat.com>
+
+       * dis-asm.h (init_disassemble_info): Declare.
+       (INIT_DISASSEMBLE_INFO): Redefine as a call to
+       init_disassemble_info.
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Ditto.
+
+2003-08-20  Nick Clifton  <nickc@redhat.com>
+
+       * bfdlink.h (enum report_method): New enum.  Describes how to
+       report something.
+       (struct bfd_link_info): Delete fields 'no_undefined' and
+       'allow_shlib_undefined'.  Replace with
+       'unresolved_symbols_in_objects' and
+       'unresolved_symbols_in_shared_libs'.
+
+2003-08-07  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h: Remove PARAMS macro.  Replace PTR with void *.
+       * dis-asm.h: Likewise.
+
+2003-07-09  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h: Undef all macros before defining them.
+
+2003-07-06  H.J. Lu <hongjiu.lu@intel.com>
+
+       * demangle.h: Support C++.
+
+2003-07-01  Zack Weinberg  <zack@codesourcery.com>
+
+       * filenames.h: New file imported from binutils.
+
+2003-06-30  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h: New file imported from binutils.
+
+2003-06-30  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h (XCHAL_HAVE_CONST16, XCHAL_HAVE_ABS,
+       XCHAL_HAVE_ADDX, XCHAL_HAVE_L32R): Define.
+
+2003-06-25  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h: Correct spelling of "relocatable".
+
+2003-06-22  Zack Weinberg  <zack@codesourcery.com>
+
+       * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC): Rename to
+       HOST_CHARSET_UNKNOWN, HOST_CHARSET_ASCII, HOST_CHARSET_EBCDIC
+       respectively.
+
+2003-06-21  Zack Weinberg  <zack@codesourcery.com>
+
+       * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC, HOST_CHARSET):
+       New #defines.
+
+2003-06-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h: Delete HAVE_LONG_DOUBLE GCC bootstrap support.
+
+2003-05-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Add execstack and noexecstack.
+
+2003-06-03  H.J. Lu <hongjiu.lu@intel.com>
+
+       * bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New.
+
+2003-05-30  Ulrich Drepper  <drepper@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Add pie and executable
+       bits.
+
+2003-05-21  Nick Clifton  <nickc@redhat.com>
+
+       * bfdlink.h (struct bfd_link_hash_table): Fix typo in comment.
+
+2003-05-15  Jim Blandy  <jimb@redhat.com>
+
+       * libiberty.h (hex_value): Make the value an unsigned int, to
+       avoid unexpected sign-extension when cast to unsigned types larger
+       than int --- like bfd_vma, on some platforms.
+       (_hex_value): Update declaration.
+
+2003-05-09  Alan Modra  <amodra@bigpond.net.au>
+
+       * xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on
+       gen_num_opcodes_fn return type.
+
+2003-05-07  Jason Merrill  <jason@redhat.com>
+
+       * hashtab.h (iterative_hash): Prototype.
+       (iterative_hash_object): New macro.
+
+2003-04-28  H.J. Lu <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_info): Add relax_finalizing.
+
+2003-04-23  H.J. Lu <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_callbacks): Add error_handler.
+
+2003-04-02  Bob Wilson  <bob.wilson@acm.org>
+
+       * xtensa-config.h: Remove comment indicating that this is a
+       generated file.
+
+2003-04-01  Bob Wilson  <bob.wilson@acm.org>
+
+       * dis-asm.h (print_insn_xtensa): Declare.
+       * xtensa-config.h: New file.
+       * xtensa-isa-internal.h: Likewise.
+       * xtensa-isa.h: Likewise.
+
+2003-03-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (ATTRIBUTE_NONNULL, ATTRIBUTE_NULL_PRINTF,
+       ATTRIBUTE_NULL_PRINTF_1, ATTRIBUTE_NULL_PRINTF_2,
+       ATTRIBUTE_NULL_PRINTF_3, ATTRIBUTE_NULL_PRINTF_4,
+       ATTRIBUTE_NULL_PRINTF_5): New.
+       (ATTRIBUTE_PRINTF): Add ATTRIBUTE_NONNULL.
+
+2003-03-17  Jan Hubicka  <jh@suse.cz>
+
+       * hashtab.h (htab_traverse_noresize): Declare.
+
+2003-02-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h: Document return value of physmem routines.
+
+2003-02-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (physmem_total, physmem_available): Prototype.
+
+2003-02-20  Daniel Jacobowitz  <drow@mvista.com>
+
+       * libiberty.h (lrealpath): Add declaration.
+
+2003-01-31  Grant Grundler  <grundler@dsl2.external.hp.com>
+
+       * hppa.h (ldwa, ldda): Add ordered opcodes.
+
+2003-01-26  Daniel Jacobowitz  <drow@mvista.com>
+
+       * hashtab.h (htab_alloc_with_arg, htab_free_with_arg): Add new types.
+       (struct htab): Add alloc_arg, alloc_with_arg_f, free_with_arg_f.
+       (htab_create_alloc_ex): New prototype.
+       (htab_set_functions_ex): New prototype.
+
+2002-07-17  Geoffrey Keating  <geoffk@redhat.com>
+
+       * splay-tree.h (GTY): Define if undefined.
+       (splay_tree_allocate_fn): Return PTR for compatibility, not void *.
+       (struct splay_tree_node_s): Support gengtype.
+       (struct splay_tree_s): Likewise.  Make allocate_data a PTR,
+       not a void *.
+
+2002-01-02  Ben Elliston  <bje@redhat.com>
+
+       * dis-asm.h (print_insn_iq2000): Declare.
+
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * dis-asm.h: Add msp430 disassembler prototype.
+
+2002-12-27  Chris Demetriou  <cgd@broadcom.com>
+
+       * dis-asm.h (print_mips_disassembler_options): Prototype.
+
+2002-12-23  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h (struct bfd_link_info): Add "strip_discarded".
+
+2002-12-20  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h (struct bfd_link_info): Replace bfd_boolean fields with
+       bit-fields.  Rearrange to put all like types together.
+
+2002-11-30  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h: Replace boolean with bfd_boolean.  Formatting.
+
+2002-11-23  Simon Burge  <simonb@wasabisystems.com>
+
+       * libiberty.h (basename): Add NetBSD to the list.
+
+2002-11-22  Daniel Jacobowitz  <drow@mvista.com>
+
+       * libiberty.h (make_relative_prefix): Add prototype.
+
+2002-11-14  Egor Duda  <deo@logos-m.ru>
+
+       * bfdlink.h (struct bfd_link_info): Add new boolean
+       field pei386_runtime_pseudo_reloc.
+
+2002-10-26  Roger Sayle  <roger@eyesopen.com>
+
+       * partition.h:  Close the extern "C" scope when compiling with C++.
+
+2002-10-26  Roger Sayle  <roger@eyesopen.com>
+           DJ Delorie <dj@redhat.com>
+
+       PR bootstrap/8351
+       * getopt.h: Avoid prototyping getopt with no arguments in C++.
+
+2002-10-24  Nathan Tallent  <eraxxon@alumni.rice.edu>
+
+       * ansidecl.h (__STDC__): Add (__alpha && __cplusplus) to the
+       list of platform compilers that may look, smell and act
+       like __STDC__ but that may not define it.
+
+2002-10-11  David O'Brien  <obrien@FreeBSD.org>
+
+       * getopt.h: getopt is in unistd.h (based on SUSv2).
+
+2002-09-26  Andrew Cagney  <ac131313@redhat.com>
+
+       * regs/: Delete directory.
+
+2002-09-19  Alexandre Oliva  <aoliva@redhat.com>
+
+       * libiberty.h (asprintf, vasprintf): Don't declare them if the
+       corresponding HAVE_DECL_ macro is 1.
+
+2002-09-19  Nathan Tallent  <eraxxon@alumni.rice.edu>
+
+       * dis-asm.h: Remove (errant) trailing semicolon (;) from the
+       extern "C" { } declaration.
+
+2002-09-04  Nick Clifton  <nickc@redhat.com>
+
+       * dis-asm.h (print_ppc_disassembler_options): Prototype.
+
+2002-08-28  Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+       * dis-asm.h: Add standard disassembler for tic4x.
+
+2002-08-07  H.J. Lu <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_info): Add allow_undefined_version.
+       (bfd_elf_version_expr): Add symver and script.
+
+2002-07-31  Ian Dall  <ian@sibyl.beware.dropbear.id.au>
+
+       * bfdlink.h (bfd_link_common_skip_ar_symbols): New enum.
+       (struct bfd_link_info): Add new field 'common_skip_ar_symbols'.
+
+2002-07-19  Denis Chertykov  <denisc@overta.ru>
+           Matthew Green  <mrg@redhat.com>
+
+       * dis-asm.h (print_insn_ip2k): Declare.
+
+2002-07-01  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfdlink.h (struct bfd_sym_chain): Declare.
+       (struct bfd_link_info): Add gc_sym_list.  Formatting fixes.
+
+2002-06-25  Alan Modra  <amodra@bigpond.net.au>
+
+       * demangle.h: #include "ansidecl.h" rather than #include <ansidecl.h>.
+       * fibheap.h: Likewise.
+       * hashtab.h: Likewise.
+       * partition.h: Likewise.
+       * sort.h: Likewise.
+       * splay-tree.h: Likewise.
+
+2002-06-24  Alan Modra  <amodra@bigpond.net.au>
+
+       * libiberty.h (basename): Don't declare if HAVE_DECL_BASENAME.
+       * getopt.h (getopt): Don't declare if HAVE_DECL_GETOPT.
+
+2002-06-18  Dave Brolley  <brolley@redhat.com>
+
+       From Catherine Moore:
+       * dis-asm.h (print_insn_frv): New prototype.
+
+2002-06-09  Andrew Cagney  <cagney@redhat.com>
+
+       * remote-sim.h: Move to directory gdb/.
+       * callback.h: Move to directory gdb/.
+
+2002-06-07  Charles Wilson  <cwilson@ece.gatech.edu>
+
+       * bfdlink.h (struct bfd_link_info): Change type of
+       pei386_auto_import field to int so that -1 can mean enabled by
+       default and 1 can mean enabled by command line switch.
+
+2002-06-06  DJ Delorie  <dj@redhat.com>
+
+       * hashtab.h (htab): Rearrange new members for backward
+       compatibility.
+       (htab_create): Don't use a macro that requires other headers.
+
+2002-06-05  Geoffrey Keating  <geoffk@redhat.com>
+
+       * hashtab.h (htab_create): Restore prototype for backward
+       compatibility.
+       (htab_try_create): Likewise.
+
+2002-05-22  Geoffrey Keating  <geoffk@redhat.com>
+
+       * hashtab.h (struct htab): Update for change to length specifier.
+
+2002-05-10  Geoffrey Keating  <geoffk@redhat.com>
+
+       * hashtab.h (GTY): Define if undefined.
+       (htab_alloc): New typedef.
+       (htab_free): New typedef.
+       (struct htab): Support gengtype; allow user-specified memory
+       allocation.
+       (htab_create_alloc): New.
+       (htab_create): Replace with #define.
+       (htab_try_create): Delete.
+
+2002-05-28  Kuang Hwa Lin <kuang@sbcglobal.net>
+
+       * dis-asm.h: Prototype print_insn_dlx.
+
+2002-05-23  Andrew Cagney  <ac131313@redhat.com>
+
+       * sim-d10v.h: Delete file.  Moved to include/gdb/.
+
+2002-05-21  H.J. Lu  (hjl@gnu.org)
+
+       * bfdlink.h (bfd_link_info): Add allow_multiple_definition.
+
+2002-05-17  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype.
+
+2002-04-16  David S. Miller  <davem@redhat.com>
+
+       * xregex2.h (__restrict_arr): Define to __restrict on GCC
+       3.1 and later.  Do not redefine.
+
+2002-04-01  Phil Edwards  <pme@gcc.gnu.org>
+
+       * dyn-string.h:  Also allow IN_GLIBCPP_V3 to redefine names.
+
+2002-03-10  Daniel Jacobowitz <drow@mvista.com>
+
+       * gdb: New directory.
+
+2002-03-06  Andrew Cagney  <ac131313@redhat.com>
+
+       * floatformat.h (floatformat_arm_ext): Delete declaration.
+
+2002-02-21  Jim Blandy  <jimb@redhat.com>
+
+       Allow the user to specify functions for allocating memory for
+       splay tree roots and nodes.
+       * splay-tree.h (splay_tree_allocate_fn, splay_tree_deallocate_fn):
+       New types.
+       (splay_tree): New fields: `allocate', `deallocate', and
+       `allocate_data'.
+       (splay_tree_new_with_allocator): New function declaration.
+
+2002-02-15  Alan Modra  <amodra@bigpond.net.au>
+
+       Support arbitrary length fill patterns.
+       * bfdlink.h (enum bfd_link_order_type): Remove bfd_fill_link_order.
+       (struct bfd_link_order): Remove fill.  Add data.size.
+
+2002-02-08  Alexandre Oliva  <aoliva@redhat.com>
+
+       Contribute sh64-elf.
+       2000-11-25  Hans-Peter Nilsson  <hpn@cygnus.com>
+       * dis-asm.h (print_insn_sh64): New prototype.
+       (print_insn_sh64l): New prototype.
+       (print_insn_sh64x_media): New prototype.
+
+2002-02-05  Frank Ch. Eigler  <fche@redhat.com>
+
+       * dis-asm.h (disassemble_info): New field `insn_sets'.
+       (INIT_DISASSEMBLE_INFO): Clear it.
+
+2002-02-05  Jason Merrill  <jason@redhat.com>
+
+       * demangle.h (cplus_demangle_v3): Add "options" parm.
+       (cplus_demangle_v3_type): Remove prototype.
+       (DMGL_VERBOSE): New macro.
+       (DMGL_TYPES): New macro.
+
+2002-02-02  H.J. Lu  (hjl@gnu.org)
+
+       * demangle.h (cplus_demangle_v3_type): New prototype.
+
+2002-01-31  Ivan Guzvinec  <ivang@opencores.org>
+
+       * dis-asm.h : Add support for or32 targets
+
+2002-01-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (C_alloca): Add ATTRIBUTE_MALLOC.
+
+2002-01-27  David O'Brien  <obrien@FreeBSD.org>
+
+       * cgen.h (BFD_VERSION): Use BFD_VERSION_DATE instead.
+
+2001-12-14  Nick Clifton  <nickc@cambridge.redhat.com>
+
+       * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise the
+       disassembler_options field (to NULL).
+
+2001-12-13  Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Add eh_frame_hdr field.
+
+2001-12-07  Geoffrey Keating  <geoffk@redhat.com>
+
+       * dis-asm.h (print_insn_xstormy16): Declare.
+
+2001-12-06  Richard Henderson  <rth@redhat.com>
+
+       * demangle.h (no_demangling): New.
+       (NO_DEMANGLING_STYLE_STRING): New.
+
+2001-11-14  Alan Modra  <amodra@bigpond.net.au>
+
+       * dis-asm.h (print_insn_i386): Declare.
+
+2001-11-11  Timothy Wall  <twall@alum.mit.edu>
+
+       * dis-asm.h: Fix comment to refer to octets rather than bytes.
+
+2001-10-30  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * dis-asm.h (print_insn_mmix): Add prototype.
+
+2001-10-24  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * safe-ctype.h (_sch_isbasic, IS_ISOBASIC): New.
+
+2001-10-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (hex_init): Revert delete.
+
+       * libiberty.h (_hex_value): Const-ify.
+       (hex_init): Delete.
+
+2001-10-16  Christopher Faylor  <cgf@redhat.com>
+
+       * filenames.h: Add cygwin to the list of dosish style path systems.
+
+2001-10-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * demangle.h (demangler_engine): Const-ify.
+       * libiberty.h (buildargv): Likewise.
+
+2001-10-03  Vassili Karpov  <malc@pulsesoft.com>
+
+       * bfdlink.h (struct bfd_link_info): Add nocopyreloc field.
+
+2001-09-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (reconcat): New function.
+
+2001-09-18  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (concat, concat_length, concat_copy, concat_copy2,
+       ACONCAT): Improve comments.
+
+2001-09-18  Alan Modra  <amodra@bigpond.net.au>
+
+       * objalloc.h (OBJALLOC_ALIGN): Define using offsetof.
+
+2001-09-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (concat_length, concat_copy, concat_copy2,
+       libiberty_concat_ptr, ACONCAT): New.
+
+       * libiberty.h (ASTRDUP): New macro.
+       libiberty_optr, libiberty_nptr, libiberty_len): Declare.
+
+2001-08-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h: Update comments reflecting previous change.
+
+2001-08-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (VA_OPEN, VA_CLOSE): Allow multiple uses.
+
+2001-08-25  Nick Clifton  <nickc@cambridge.redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Change 'spare_dynamic_tags' to
+       unsigned to remove a compile time warning message.
+
+2001-08-24  H.J. Lu  <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_hash_table_type): New. The linker hash
+       table type, bfd_link_generic_hash_table and
+       bfd_link_elf_hash_table.
+       (bfd_link_hash_table): Add a new field, type, for the linker
+       hash table type.
+
+2001-08-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Add combreloc and
+       spare_dynamic_tags fields.
+
+2001-08-23  Lars Brinkhoff  <lars@nocrew.org>
+
+       * dyn-string.h, fibheap.h, partition.h, sort.h, splay-tree.h:
+       replace "GNU CC" with "GCC".
+
+2001-08-21  Richard Henderson  <rth@redhat.com>
+
+       * fibheap.h: Tidy formatting.
+       (fibnode_t): Limit degree to 31 bits to avoid warning.
+
+2001-08-20  Daniel Berlin  <dan@cgsoftware.com>
+
+       * fibheap.h: New file. Fibonacci heap.
+
+2001-08-20  Andrew Cagney  <ac131313@redhat.com>
+
+       * floatformat.h (floatformat_arm_ext): Document as deprecated.
+       (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword)
+       (floatformat_ia64_spill_little, floatformat_ia64_quad_little)
+       (floatformat_ia64_spill_big, floatformat_ia64_quad_big)
+       (floatformat_m88110_harris_ext): Declare.
+
+2001-08-18  Zack Weinberg  <zackw@panix.com>
+
+       * ansidecl.h: Reorganize for readability, remove documentation
+       of obsolete macros, document PARAMS and VPARAMS.  Add new
+       macros VA_OPEN, VA_CLOSE, and VA_FIXEDARG for nicer variadic
+       function implementation.
+
+2001-08-16  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.h (htab_hash_string): Declare.
+
+2001-08-10  Andrew Cagney  <ac131313@redhat.com>
+
+       * libiberty.h (lbasename): Change function declaration to return a
+       const char pointer.
+
+2001-08-02  Mark Kettenis  <kettenis@gnu.org>
+
+       * xregex.h (_REGEX_RE_COMP): Define.
+       (re_comp): Define to xre_comp.
+       (re_exec): Define to xre_exec.
+
+2001-08-02  Charles Wilson  <cwilson@ece.gatech.edu>
+
+       * bfdlink.h (struct bfd_link_info): add new boolean
+       field pei386_auto_import.
+
+2001-07-18  Andreas Jaeger  <aj@suse.de>
+
+       * xregex2.h: Place under LGPL version 2.1.
+
+2001-07-10  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * xregex.h: New file to support libiberty regex.
+       * xregex2.h: Ditto.
+
+2001-06-15  Hans-Peter Nilsson  <hp@axis.com>
+
+       * bfdlink.h (struct bfd_link_info): New member export_dynamic.
+
+2001-05-16  Matt Kraai  <kraai@alumni.carnegiemellon.edu>
+
+       * partition.h: Fix misspelling of `implementation'.
+
+2001-05-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (NULL_PTR): Delete.
+
+2001-05-07  Zack Weinberg  <zackw@stanford.edu>
+
+       * demangle.h: Use PARAMS for all prototypes.
+       * ternary.h: Use PARAMS for all prototypes.  Use PTR, not void *.
+       Make arguments constant where possible.
+
+2001-05-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_max): New function.
+       (splay_tree_min): Likewise.
+
+2001-04-27  Johan Rydberg  <jrydberg@opencores.org>
+
+       * dis-asm.h (print_insn_openrisc): Add prototype.
+
+2001-04-15  Daniel Berlin  <dan@cgsoftware.com>
+
+       * ternary.h: New file - Ternary search tree header.
+
+2001-04-13  Jakub Jelinek  <jakub@redhat.com>
+
+       * bfdlink.h (bfd_link_discard): Add discard_sec_merge.
+
+2001-04-03  Zack Weinberg  <zackw@stanford.edu>
+
+       * ansidecl.h: All logic from gcc/gansidecl.h moved here.
+
+2001-03-31  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (alloca): Handle setting C_ALLOCA.
+
+2001-03-20  Jim Blandy  <jimb@redhat.com>
+
+       * demangle.h (enum gnu_v3_constructor_kinds,
+       is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds,
+       is_gnu_v3_mangled_dtor): New declarations.
+
+2001-03-14  Nick Clifton  <nickc@redhat.com>
+
+       * ansidecl.h: Fix copyright dates.
+       * demangle.h: Fix copyright dates.
+       * floatformat.h: Fix copyright dates.
+       * fnmatch.h: Fix copyright dates.
+       * getopt.h: Fix copyright dates.
+       * libiberty.h: Add FSF copyright notice.
+       * md5.h: Fix copyright dates.
+       * obstack.h: Fix copyright dates.
+       * splay-tree.h: Fix copyright dates.
+
+2001-03-10  Neil Booth  <neil@daikokuya.demon.co.uk>
+           John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * libiberty.h: Add lbasename.
+
+2001-03-06  Zack Weinberg  <zackw@stanford.edu>
+
+       * libiberty.h: Prototype C_alloca; define alloca to either
+       __builtin_alloca or C_alloca as appropriate.
+
+2001-03-01  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc
+       compatibility.
+
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+       * dis-asm.h: Add PDP-11 target.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+       * dis-asm.h: Add linux target for S/390.
+
+2001-01-11  Peter Targett  <peter.targett@arccores.com>
+
+       * dis-asm.h (arc_get_disassembler): Correct declaration.
+
+2001-01-09  Philip Blundell  <philb@gnu.org>
+
+       * bin-bugs.h (REPORT_BUGS_TO): Set to `bug-binutils@gnu.org'.
+
+2000-12-18  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * COPYING: Update to current
+       ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references
+       to 19yy as example year in copyright notice).
+
+2000-12-19  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * dis-asm.h (struct disassemble_info): New member "section".
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize private_data member.
+       Initialize section member.
+
+2000-12-16  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>
+
+       * safe-ctype.h: Make code work on all targets and not just on
+       targets where a char is 8 bits.
+
+2000-12-10  Fred Fish  <fnf@be.com>
+
+       * bfdlink.h (struct bfd_link_info): Add new allow_shlib_undefined
+       member to struct for systems where it is normal to have undefined
+       symbols in shared libraries at runtime and the runtime linker
+       takes care of redirecting them.
+
+2000-12-07  Zack Weinberg  <zack@wolery.stanford.edu>
+
+       * safe-ctype.h: New file.
+
+2000-12-06  Rodney Brown  <RodneyBrown@mynd.com>
+
+       * getopt.h obstack.h: Standarize copyright statement.
+
+2000-12-04  Richard Henderson  <rth@redhat.com>
+
+       * demangle.h: Change "new_abi" to "v3" everywhere.
+
+2000-11-22  Zack Weinberg  <zack@wolery.stanford.edu>
+
+       * libiberty.h: Move #includes to top.  Prototype xmalloc_failed.
+
+2000-11-15  Kenneth Block  <kenneth.block@compaq.com>
+
+       * demangle.h: Add gnat and java demangle styles.
+
+2000-11-04  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * hashtab.h (struct htab): Add member return_allocation_failure.
+       (htab_try_create): New prototype.  Mention which functions may
+       return NULL when this is used.
+
+2000-11-03  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * hashtab.h: Change void * to PTR where necessary.
+
+2000-10-11  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_predecessor): Declare.
+
+2000-09-29  Hans-Peter Nilsson  <hp@axis.com>
+
+       * dis-asm.h: Declare cris_get_disassembler, not print_insn_cris.
+       Fix typo in comment.
+
+2000-09-28  John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+       * alloca-conf.h: New file (copied from libiberty).
+
+2000-09-05  John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+       * md5.h (md5_uint32): Choose via INT_MAX instead of UINT_MAX.
+
+2000-09-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * dyn-string.h: Adjust formatting.
+       (dyn_string_insert_char): New macro.  New declaration.
+
+2000-08-28  Jason Merrill  <jason@redhat.com>
+
+       * md5.h: New file.
+
+2000-08-24  Greg McGary  <greg@mcgary.org>
+
+       * libiberty.h (ARRAY_SIZE): New macro.
+
+2000-07-29  Nick Clifton  <nickc@cygnus.com>
+
+       * os9k.h: Add copyright notice.
+       Fix formatting.
+
+2000-07-22  Jason Eckhardt  <jle@cygnus.com>
+
+       * dis-asm.h (print_insn_i860): Add prototype.
+
+2000-07-20  H.J. Lu  <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_info): Add new_dtags.
+
+2000-07-20  Hans-Peter Nilsson  <hp@axis.com>
+
+       * dis-asm.h (print_insn_cris): Declare.
+
+2000-07-19  H.J. Lu  (hjl@gnu.org)
+
+       * bfdlink.h (bfd_link_info): Add flags and flags_1.
+
+2000-06-05  DJ Delorie  <dj@redhat.com>
+
+       * MAINTAINERS: new
+
+2000-06-21  Alex Samuel  <samuel@codesourcery.com>
+
+       * dyn-string.h (dyn_string_init, dyn_string_new,
+       dyn_string_delete, dyn_string_release, dyn_string_resize,
+       dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr,
+       dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
+       dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr,
+       dyn_string_append_char, dyn_string_substring_dyn_string_eq):
+       Define as same name with __cxa_ prepended, if IN_LIBGCC2.
+       (dyn_string_init, dyn_string_copy, dyn_string_copy_cstr,
+       dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
+       dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr,
+       dyn_string_append_char, dyn_string_substring): Change return type
+       to int.
+
+2000-06-18  Stephane Carrez  <stcarrez@worldnet.fr>
+
+       * dis-asm.h (print_insn_m68hc12): Define.
+       (print_insn_m68hc11): Likewise.
+
+2000-06-18  Nick Clifton  <nickc@redhat.com>
+
+       * os9k.h: Change values of MODSYNC and CRCCON due to bug report
+       from Russ Magee <rmagee@home.com>.
+
+2000-06-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * demangle.h (demangling_styles): Remove trailing comma in enum.
+
+       * dyn-string.h (dyn_string_append_char): Change parameter from
+       char to int.
+
+2000-06-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * dyn-string.h: Move here from gcc/dyn-string.h.  Add new functions.
+
+       * demangle.h (DMGL_GNU_NEW_ABI): New macro.
+       (DMGL_STYLE_MASK): Or in DMGL_GNU_NEW_ABI.
+       (current_demangling_style): Add gnu_new_abi_demangling.
+       (GNU_NEW_ABI_DEMANGLING_STYLE_STRING): New macro.
+       (GNU_NEW_ABI_DEMANGLING): Likewise.
+       (cplus_demangle_new_abi): New declaration.
+
+Tue May 30 16:53:34 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * floatformat.h (struct floatformat): Add field name.
+
+2000-05-26  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * filenames.h: New file.
+       (HAVE_DOS_BASED_FILE_SYSTEM, IS_DIR_SEPARATOR)
+       (IS_ABSOLUTE_PATH, FILENAME_CMP): New macros.
+
+2000-05-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * getopt.h (getopt): Also check HAVE_DECL_* when prototyping.
+
+       * libiberty.h (basename): Likewise.
+
+2000-05-17  S. Bharadwaj Yadavalli  <sby@scrugs.lkg.dec.com>
+           Rick Gorton             <gorton@scrugs.lkg.dec.com>
+
+       * bfdlink.h (struct bfd_link_info): Add emitrelocations flag.
+
+2000-05-08  Alan Modra  <alan@linuxcare.com.au>
+
+       * dis-asm.h (print_insn_tic54x): Declare.
+
+2000-05-06  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * ansidecl.h: #define __extension__ to nothing if
+       GCC_VERSION < 2008.
+
+2000-05-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * demangle.h (demangler_engine): Constify.
+
+Thu May  4 17:15:26 2000  Philippe De Muyter  <phdm@macqel.be>
+
+       * sort.h (sys/types.h): File included unconditionnaly.
+       (stddef.h): File include only #ifdef __STDC__.
+
+2000-05-03  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * symcat.h: Remove #endif label.
+
+2000-04-28  Kenneth Block  <block@zk3.dec.com>
+           Jason Merrill  <jason@casey.cygnus.com>
+
+       * demangle.h (libiberty_demanglers): new table for different styles.
+       (cplus_demangle_set_style): New function for setting style.
+       (cplus_demangle_name_to_style): New function to translate name.
+
+2000-04-24  Mark Mitchell  <mark@codesourcery.com>
+
+       * hashtab.h (hash_pointer): Declare.
+       (eq_pointer): Likewise.
+
+2000-04-23  Mark Mitchell  <mark@codesourcery.com>
+
+       * sort.h: New file.
+
+Fri Apr 21 13:20:53 2000  Richard Henderson  <rth@cygnus.com>
+                         David Mosberger  <davidm@hpl.hp.com>
+
+       * dis-asm.h (print_insn_ia64): Declare.
+
+Tue Apr 18 16:22:30 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * hashtab.h (enum insert_option): New type.
+       (htab_find_slot, htab_find_slot_with_hash): Use it.
+
+2000-04-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * symcat.h: Honor autoconf macro HAVE_STRINGIZE.  Add
+       comments/caveats with regard to traditional C behavior.
+
+2000-04-05  Richard Henderson  <rth@cygnus.com>
+
+       * splay-tree.h (splay_tree_remove): Declare.
+
+2000-04-04  Alan Modra  <alan@linuxcare.com.au>
+
+       * bin-bugs.h (REPORT_BUGS_TO): Remove translated part.
+
+2000-04-03  Alan Modra  <alan@linuxcare.com.au>
+
+       * bin-bugs.h: New file.
+
+2000-03-30  Mark Mitchell  <mark@codesourcery.com>
+
+       * hashtab.h (hashval_t): New type.
+       (htab_find_with_hash): Use it as an argument.
+       (htab_find_slot_with_hash): Likewise.
+
+2000-03-27  Denis Chertykov  <denisc@overta.ru>
+
+       * dis-asm.h (print_insn_avr): Declare.
+
+2000-03-14  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * hashtab.h (htab_trav): Modify type so that first arg is of type
+       void **.
+       (htab_find_with_hash, htab_find_slot_with_hash): Declare new
+       functions.
+
+2000-03-09  Alex Samuel  <samuel@codesourcery.com>
+
+       * partition.h: New file.
+
+2000-03-09  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.h (struct htab): Add del_f.
+       (htab_del): New type.
+       (htab_create): Add fourth argument.
+
+2000-03-08  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.h (hash_table_t): Rename to htab_t.
+       (struct hash_table): Rename to struct htab.  Shorten element
+       names.  Reorder elements by size.
+       (htab_hash, htab_eq, htab_trav): New typedefs for the callback
+       function pointers.
+       (hash_table_entry_t): Discard; just use void * for element
+       type.
+
+2000-03-01  H.J. Lu  <hjl@gnu.org>
+
+       * bfdlink.h (bfd_link_callbacks): Add a boolean arg to
+       the undefined_symbol callback.
+
+2000-02-23  Linas Vepstas <linas@linas.org>
+
+       * dis-asm.h (print_insn_i370): Declare.
+
+Tue Feb 22 15:19:54 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_trace): Document return values.
+       (sim_set_trace): Declare.  Deprecate.
+
+2000-02-21  Alan Modra  <alan@spri.levels.unisa.edu.au>
+
+       * dis-asm.h (struct disassemble_info): Change `length' param of
+       read_memory_func to unsigned.  Change type of `buffer_length' and
+       `octets_per_byte' to unsigned.
+       (buffer_read_memory): Change `length' param to unsigned.
+
+2000-02-16  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h: Add prototypes for ARM register name functions.
+
+Wed Feb  9 18:45:49 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * wait.h: Delete. No longer used by GDB.
+
+Tue Feb  8 17:01:13 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_resume): Clarify use of SIGGNAL.
+       (sim_stop_reason): Clarify meaning of sim_signalled.
+
+2000-02-03  Timothy Wall <twall@redhat.com>
+
+       * dis-asm.h (struct disassemble_info): Added octets_per_byte
+       field and initialize it to one (1).
+
+2000-01-27  Nick Clifton  <nickc@redhat.com>
+
+       * dis-asm.h: Add prototype for disassembler_usage().
+       Add prototype for arm_disassembler_options().
+       Remove prototype for arm_toggle_regnames().
+       Add prototype for parse_arm_disassembler_option().
+
+Sat Jan  1 19:06:52 2000  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * symcat.h (STRINGX) [!__STDC__ || ALMOST_STDC]: Change "?" to "s"
+       to stringify argument s.
+
+Wed Dec 15 11:22:56 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * hp-symtab.h (HP_LANGUAGE_FORTRAN): New enumeration constant.
+       (HP_LANGUAGE_F77): Define using HP_LANGUAGE_FORTRAN.
+
+1999-12-15  Doug Evans  <dje@transmeta.com>
+
+       * dis-asm.h: Enclose in extern "C" ifdef __cplusplus.
+
+1999-12-05  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (struct splay_tree_node): Rename to ...
+       (struct splay_tree_node_s): ... this.
+       (struct splay_tree): Rename to ...
+       (struct splay_tree_s): ... this.
+
+1999-11-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (ATTRIBUTE_MALLOC): New macro.
+
+       * libiberty.h (buildargv, dupargv, concat, choose_temp_base,
+       make_temp_file, xmalloc, xcalloc, xstrdup, xmemdup): Add
+       ATTRIBUTE_MALLOC.
+       (xatexit): Remove __GNUC__ check, add ATTRIBUTE_NORETURN.
+
+1999-11-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h: Include stdarg.h when ANSI_PROTOTYPES is defined.
+       (asprintf, vasprintf): Provide declarations.
+
+Wed Nov 10 12:43:21 1999  Philippe De Muyter  <phdm@macqel.be>
+                         Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h: Define and test `GCC_VERSION', not `HAVE_GCC_VERSION'.
+
+1999-11-04      Jimmy Guo       <guo@cup.hp.com>
+
+       * hp-symtab.h (dntt_type_fparam): Add doc_ranges, misc_kind
+       fields, change location type to CORE_ADDR from int.
+       (dntt_type_const): Name the 5th field location_type.
+
+Sun Oct 24 19:11:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * sim-d10v.h (SIM_D10V_TS2_DMAP_REGNUM): Define.
+
+1999-10-23 08:51 -0700  Zack Weinberg  <zack@bitmover.com>
+
+       * hashtab.h: Give hash_table_t a struct tag.  Add prototypes
+       for clear_hash_table_slot and traverse_hash_table.  Correct
+       prototype of all_hash_table_collisions.
+
+Sat Oct 23 19:00:13 1999  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * sim-d10v.h: New file.
+
+Fri Oct 15 01:47:51 1999  Vladimir Makarov  <vmakarov@loony.cygnus.com>
+
+       * hashtab.h: New file.
+
+1999-10-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h (HAVE_GCC_VERSION): New macro.  Use it instead of
+       explicitly testing __GNUC__ and __GNUC_MINOR__.
+
+       (ATTRIBUTE_PRINTF): Use `__format__', not `format'.
+
+1999-09-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (make_temp_file):  Add a prototype.
+
+Tue Sep 14 00:35:02 1999  Marc Espie <espie@cvs.openbsd.org>
+
+       * libiberty.h (basename):  OpenBSD has a correct prototype.
+       (xrealloc):  Remove outdated comment.
+
+1999-09-07  Jeff Garzik  <jgarzik@pobox.com>
+
+       * libiberty.h (xmemdup): Add prototype for new function.
+
+1999-09-04  Steve Chamberlain  <sac@pobox.com>
+
+       * dis-asm.h (print_insn_pj): Declare.
+
+1999-09-01  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * obstack.h (obstack_grow, obstack_grow0): Move (char*) casts
+       in calls to `_obstack_memcpy' from here ...
+
+       (_obstack_memcpy): ... to here, except in the __STDC__ case which
+       doesn't need it.
+
+1999-08-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (getpwd): Prototype.
+
+1999-08-01  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_insert): Return the new node.
+
+1999-07-11  Ian Lance Taylor  <ian@zembu.com>
+
+       * ansidecl.h: Copy attribute support macros from egcs.
+
+1999-06-22  Mark Mitchell  <mark@codesourcery.com>
+
+       * bfdlink.h (struct bfd_link_hash_entry): Add init_function and
+       fini_function.
+
+1999-06-20  Mark Mitchell  <mark@codesourcery.com>
+
+       * mips.h (Elf32_Internal_Msym): New structure.
+       (Elf32_External_Msym): Likewise.
+       (ELF32_MS_REL_INDEX): New macro.
+       (ELF32_MS_FLAGS): Likewise.
+       (ELF32_MS_INFO): Likewise.
+
+1999-06-14  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h (arm_toggle_regnames): New prototype.
+       (struct diassemble_info): New field: disassembler_options.
+
+1999-04-11  Richard Henderson  <rth@cygnus.com>
+
+       * bfdlink.h (bfd_elf_version_expr): Rename `match' to `pattern'.
+       Add `match' callback function.
+
+1999-04-10  Richard Henderson  <rth@cygnus.com>
+
+       * bfdlink.h (bfd_link_info): Add no_undefined.
+
+1999-04-08  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h: Add prototype for print_insn_mcore.
+
+1999-04-02  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_compare_pointers): Declare.
+
+1999-03-30  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_compare_ints): Declare.
+
+Wed Mar 24 12:46:29 1999  Andrew Cagney  <cagney@amy.cygnus.com>
+
+       * libiberty.h (basename): Cygwin{,32} should have the prototype.
+
+1999-02-22  Jim Lemke  <jlemke@cygnus.com>
+
+       * bfdlink.h (bfd_link_info): add field "mpc860c0".
+
+Mon Feb  1 21:05:46 1999  Catherine Moore  <clm@cygnus.com>
+
+       * dis-asm.h (print_insn_i386_att):  Declare.
+       (print_insn_i386_intel):  Declare.
+
+1998-12-30  Michael Meissner  <meissner@cygnus.com>
+
+       * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Cast STREAM and
+       FPRINTF_FUNC to avoid compiler warnings.
+
+Wed Dec 30 16:07:14 1998  David Taylor  <taylor@texas.cygnus.com>
+
+       * dis-asm.h: change void * to PTR (two places).
+
+Mon Dec 14 09:53:31 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * demangle.h: Don't check IN_GCC anymore.
+       * splay-tree.h: Likewise.
+
+Tue Dec  8 00:30:31 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       The following changes were made by Elena Zannoni
+       <ezannoni@kwikemart.cygnus.com> and Edith Epstein
+       <eepstein@sophia.cygnus.com> as part of a project to merge in
+       changes made by HP; HP did not create ChangeLog entries.
+
+       * dis-asm.h (struct disassemble_info): change the type of stream
+       from FILE* to void*, for use with gdb's new type GDB_FILE.
+       (fprintf_ftype): change FILE* parameter type to void*.
+
+       * demangle.h: (DMGL_EDG): new macro for Kuck and Associates
+       (DMGL_STYLE_MASK): modify to include Kuck and Assoc style
+       (demangling_styles): add new edg_demangling style
+       (EDG_DEMANGLING_STYLE_STRING): new macro
+       (EDG_DEMANGLING): new macro
+       (DMGL_HP): new macro, for HP/aCC compiler.
+       (DMGL_STYLE_MASK): modify to include new HP's style.
+       (demangling_styles): add new hp_demangling value.
+       (HP_DEMANGLING_STYLE_STRING): new macro.
+       (ARM_DEMANGLING): coerce to int.
+       (HP_DEMANGLING): new macro.
+
+       * hp-symtab.h: rewritten, from HP.
+       (quick_procedure): change type of language field to unsigned int
+       (quick_module): change type of language field to unsigned int
+       (struct dntt_type_svar): add field thread_specific.
+       (hp_language): add languages modcal and dmpascal.
+
+Fri Nov 20 13:14:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * libiberty.h (basename): Add prototype for FreeBSD.
+
+Fri Nov 13 19:19:11 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h: Prototype xcalloc.
+
+Sun Nov  8 17:42:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * ansidecl.h: Wrap problematic macros with !IN_GCC.
+
+       * demangle.h: Never define PARAMS().
+       * splay-tree.h: Likewise.
+
+Sat Nov  7 18:30:20 1998  Peter Schauer  <peter.schauer@regent.e-technik.tu-muenchen.de>
+
+       * dis-asm.h (print_insn_vax): Declare.
+
+Sat Nov  7 16:04:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * demangle.h: Don't include gansidecl.h.
+       * splay-tree.h: Likewise.
+
+1998-10-26 16:03  Ulrich Drepper  <drepper@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Add new field optimize.
+
+Thu Oct 22 19:58:00 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * splay-tree.h: Wrap function pointer parameter declarations in
+       PARAMS() macro.
+
+1998-10-21  Mark Mitchell  <mark@markmitchell.com>
+
+       * splay-tree.h: New file.
+
+Fri Oct  9 00:02:03 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * Merge devo and egcs include directories.
+
+Sat Sep  5 12:16:33 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * getopt.h, obstack.h: Updated from gcc.
+
+1998-08-03  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+       * libiberty.h (xexit): Change decl to use modern GCC attribute
+       to indicate exit does not return.
+
+Mon Jun  1 13:48:32 1998  Jason Molenda  (crash@bugshack.cygnus.com)
+
+       * obstack.h: Update to latest FSF version.
+
+Tue Feb 24 13:05:02 1998  Doug Evans  <devans@canuck.cygnus.com>
+
+       * dis-asm.h (disassemble_info): Member `symbol' renamed to `symbols'
+       and made an "asymbol **".  New member num_symbols.
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Update.
+
+Tue Feb 17 12:32:18 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_fetch_register, sim_store_register): Add
+       register length parameter.  Functions return actual length of
+       register.
+
+Thu Feb 12 16:29:01 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * getopt.h: Update to latest FSF version.
+
+Wed Feb 11 16:56:06 1998  Doug Evans  <devans@canuck.cygnus.com>
+
+       * symcat.h: New file.
+
+Mon Feb  2 17:13:31 1998  Steve Haworth  <steve@pm.cse.rmit.EDU.AU>
+
+       * dis-asm.h (print_insn_tic30): Declare.
+
+Thu Jan 22 16:23:59 1998  Fred Fish <fnf@cygnus.com>
+
+       * dis-asm.h: Add flag INSN_HAS_RELOC to tell disassembly
+       function there is a reloc on this line.
+
+Mon Dec  8 11:22:23 1997  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h: Remove prototype of disasm_symaddr() as this function
+       no longer exists.
+
+Tue Dec  2 10:20:53 1997  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h (disasm_symaddr): New prototype.
+
+Mon Dec  1 11:29:35 1997  Doug Evans  <devans@canuck.cygnus.com>
+
+       * callback.h (CB_SYSCALL): Comment out arg names in prototypes.
+
+Wed Nov 26 16:47:58 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * callback.h (CB_SYSCALL): Consistantly use names for prototype
+       arguments.
+
+Wed Nov 26 11:39:30 1997  Doug Evans  <devans@canuck.cygnus.com>
+
+       * callback.h (CB_SYSCALL): Change byte count arguments to
+       {read,write}_mem to `int'.  New member `magic'.
+       (CB_SYSCALL_MAGIC,CB_SYSCALL_INIT): New macros.
+
+Tue Nov 25 01:35:52 1997  Doug Evans  <devans@seba.cygnus.com>
+
+       * callback.h (struct stat): Move forward decl up.
+       (host_callback): Pass stat struct pointer to stat,fstat.
+       (CB_SYS_nnn): Reorganize.
+       (CB_SYSCALL): New members p1,p2.
+       (cb_host_to_target_stat): Delete fourth arg.
+
+Sat Nov 22 23:34:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_stop_reason): Clarify sim_signalled SIGRC
+       argument.
+
+Mon Nov 17 14:00:51 1997  Doug Evans  <devans@seba.cygnus.com>
+
+       * callback.h (CB_TARGET_DEFS_MAP): Renamed from target_defs_map.
+       (host_callback): Add stat, fstat, syscall_map, errno_map, open_map,
+       signal_map, stat_map.
+       (errn_map,open_map): Renamed to cb_init_foo_map.
+       (cb_host_to_target_errno,cb_target_to_host_open): Renamed from
+       host_to_target_errno,target_to_host_open.
+       (cb_read_target_syscall_maps): Add prototype.
+       (cb_target_to_host_syscall): Likewise.
+       (cb_host_to_target_stat): Likewise.
+       (cb_syscall): Likewise.
+       (CB_SYS_{exit,open,close,read,write,lseek,unlink,getpid,kill,fstat,
+       argvlen,argv,chdir,stat,chmod,utime,time}): Define.
+       (CB_SYSCALL): New type.
+       (CB_RC): New enum.
+
+Fri Nov  7 10:34:09 1997  Rob Savoye  <rob@darkstar.cygnus.com>
+
+       * libiberty.h: Add extern "C" { so it can be used with C++
+       programs.
+       * remote-sim.h:  Add extern "C" { so it can be used with C++
+       programs.
+
+Tue Oct 14 16:07:51 1997  Nick Clifton  <nickc@cygnus.com>
+
+       * dis-asm.h (struct disassemble_info): New field
+       'symbol_at_address_func'.
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise new field with
+       generic_symbol_at_address.
+
+Mon Oct 13 10:17:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h: Clarify sim_read, sim_write MEM argument.
+
+Wed Sep 24 18:03:10 1997  Stu Grossman  <grossman@babylon-5.cygnus.com>
+
+       * remote-sim.h (SIM_RC):  Add a bunch of new return codes for
+       breakpoint stuff.
+       * Add functions to tell the simulator to set/clear/enable/disable
+       intrinsic breakpoints.
+
+Thu Aug 28 19:41:42 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * libiberty.h (dupargv): Add prototype.
+
+Tue Aug 26 12:25:49 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_create_inferior): Add ABFD arg. Document.
+
+Mon Aug 25 10:50:51 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_open): Add ABFD arg. Document.
+
+Fri Aug  8 16:43:56 1997  Doug Evans  <dje@canuck.cygnus.com>
+
+       * dis-asm.h (arc_get_disassembler): Declare.
+
+Wed Jul 30 11:39:50 1997  Per Bothner  <bothner@deneb.cygnus.com>
+
+       * demangle.h (DMGL_JAVA):  New option to request Java demangling.
+
+Tue Jul 22 17:59:54 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * libiberty.h (PEXECUTE_*): Define.
+       (pexecute, pwait): Declare.
+
+Fri Jun  6 13:02:33 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_kill): Mark as depreciated.
+
+Fri May 23 13:43:41 1997  Fred Fish  <fnf@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Add task_link member.
+
+Thu May 22 11:32:49 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h: Review documentation.  Clarify restrictions on
+       when functions can be called.
+
+Wed May 21 16:47:53 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_set_profile_size): Add prototype, document as
+       depreciated.
+
+Tue May 20 09:32:22 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_open): Add callback struct.
+       (sim_set_callbacks): Drop SIM_DESC argument. Document.
+       (sim_size): Remove recently added SIM_DESC argument. Document.
+
+Mon May 19 19:14:44 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h: Pass SD into sim_size.
+
+Thu May 15 01:24:16 1997  Mark Alexander  <marka@cygnus.com>
+
+       * obstack.h (obstack_specify_allocation_with_arg, obstack_chunkfun,
+       obstack_freefun): Eliminate compile warnings in gdb.
+
+Tue Apr 22 10:24:34 1997  Fred Fish  <fnf@cygnus.com>
+
+       * floatformat.h (floatformat_byteorders): Add comments for previous
+       formats and add floatformat_littlebyte_bigword, primarily for ARM.
+       Add declaration for floatformat_ieee_double_littlebyte_bigword.
+
+Fri Apr 18 13:04:49 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * remote-sim.h (sim_stop): New interface - asynchronous
+       notification of a request to stop / suspend the running
+       simulation.
+
+       * remote-sim.h (enum sim_stop): Add sim_running and sim_polling as
+       states for use internal to simulators.
+
+       * callback.h (struct host_callback_strut): Put a magic number at
+       the end of the struct to allow basic checking.
+       (struct host_callback_struct ): Add poll_quit - so
+       that the console etc can be polled at regular intervals.
+
+Thu Apr 17 02:17:12 1997  Doug Evans  <dje@canuck.cygnus.com>
+
+       * remote-sim.h (struct _bfd): Declare.
+       (sim_load): Return SIM_RC.  New arg `abfd'.
+       (sim_create_inferior): Return SIM_RC.  Delete arg `start_address'.
+
+Wed Apr  2 17:09:12 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * remote-sim.h (sim_trace, sim_size): Make these global.  They
+       will go away shortly.
+
+Wed Apr  2 15:23:49 1997  Doug Evans  <dje@canuck.cygnus.com>
+
+       * remote-sim.h (SIM_OPEN_KIND, SIM_RC): New enums.
+       (sim_open): New argument `kind'.
+
+Wed Apr  2 14:45:51 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * COPYING: Update FSF address.
+
+Fri Mar 28 15:29:54 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * callback.h (top level): Include stdarg.h or varargs.h if
+       va_start is not defined.
+       (host_callback_struct): Make {,e}vprintf_filtered take a va_list
+       instead of void *, since va_list might be an array or structure
+       type.
+
+Fri Mar 28 15:44:41 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+       * libiberty.h (basename): Add prototype for glibc and linux.
+
+Mon Mar 17 19:22:12 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * objalloc.h: New file.
+
+Mon Mar 17 14:57:55 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * remote-sim.h: New file, copied in from gdb/remote-sim.h.  One
+       day this will be placed in a directory of its own.
+
+Sat Mar 15 19:00:14 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * obstack.h: Update to current FSF version.
+
+Thu Mar  6 15:46:59 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * callback.h (struct host_callback_struct): Add callbacks -
+       flush_stdout, write_stderr, flush_stderr, vprintf_filtered,
+       evprintf_filtered.  Delete redundant callbacks - printf_filtered.
+
+Thu Feb 27 23:18:27 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Remove lprefix and lprefix_len
+       fields.
+
+Tue Feb 25 00:10:49 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize
+       bytes_per_chunk and display_endian.
+
+Mon Feb 24 17:47:02 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       From Eric Youngdale <eric@andante.jic.com>:
+       * bfdlink.h (struct bfd_elf_version_expr): Define.
+       (struct bfd_elf_version_deps): Define.
+       (struct bfd_elf_version_tree): Define.
+
+Thu Feb  6 14:20:01 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>
+
+       * dis-asm.h: (disassemble_info):  Add new fields
+       bytes_per_chunk and display_endian to control the
+       display of raw instructions.
+
+Fri Dec 27 22:17:37 1996  Fred Fish  <fnf@cygnus.com>
+
+       * dis-asm.h (print_insn_tic80): Declare.
+
+Sun Dec  8 17:11:12 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * callback.h (host_callback): New member `error'.
+
+Wed Nov 20 00:40:23 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * callback.h: New file, moved here from gdb.
+
+Mon Nov 18 16:34:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * libiberty.h: Checkin again; last checkin failed due to sticky tag.
+
+Wed Nov 13 08:22:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * libiberty.h: Revert last commit due to conflicts with hpux
+       system headers.
+
+Tue Nov 12 16:31:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * libiberty.h: Move prototypes from argv.c here.
+
+Thu Oct 31 14:56:18 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * ansidecl.h (VPARAMS,VA_START): Define.
+
+Fri Oct 25 12:08:04 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * dis-asm.h (disassemble_info): Add bytes_per_line field.
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize bytes_per_line field.
+
+Thu Oct 24 17:10:01 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * dis-asm.h (disassemble_info): Add symbol field.
+       (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize symbol field.
+
+Thu Oct 17 11:17:40 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * dis-asm.h (print_insn_m32r): Declare.
+
+Mon Oct 14 23:56:52 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * libiberty.h: Declare parameter types for xmalloc and xrealloc.
+
+Thu Oct  3 13:45:27 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fnmatch.h: New file.
+
+Thu Oct  3 10:33:14 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * dis-asm.h (print_insn_mn10x00): Delete declaration.
+       (print_insn_mn10200, print_insn_mn10300): Declare.
+
+Wed Oct  2 21:24:43 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * dis-asm.h (print_insn_mn10x00): Declare.
+
+Mon Sep 30 13:56:11 1996  Fred Fish  <fnf@cygnus.com>
+
+       * libiberty.h: Remove #ifndef PRIVATE_XMALLOC.
+
+Sat Aug 31 13:27:06 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * dis-asm.h (print_insn_v850): Declare.
+
+Tue Aug 13 16:10:30 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * obstack.h:  Change bcopy to memcpy.  Works better on Posix
+       systems, which generally lack bcopy.
+
+Mon Aug 12 17:03:18 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * ansidecl.h:  Change WIN32 to _WIN32.
+
+Fri Jul 26 13:58:18 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * dis-asm.h: Add flavour field.
+       (print_insn_alpha): Declare.
+       (print_insn_alpha_osf, print_insn_alpha_vms): Don't declare.
+       (INIT_DISASSEMBLE_INFO): Initialize flavour field.
+
+Tue Jul 23 17:37:58 1996  Fred Fish  <fnf@cygnus.com>
+
+       * libiberty.h (PRIVATE_XMALLOC): Enclose xmalloc/xrealloc
+       definitions inside #ifndef so that programs that want to
+       can define PRIVATE_XMALLOC and then define xmalloc and
+       xrealloc anyway they want.
+       (basename): Document in source that we can't declare the
+       parameter type because it is declared inconsistently across
+       different systems.
+
+Mon Jul 22 13:16:13 1996  Richard Henderson  <rth@tamu.edu>
+
+       * dis-asm.h (print_insn_alpha): Don't declare.
+       (print_insn_alpha_osf, print_insn_alpha_vms): Declare.
+
+Wed Jul 17 14:45:12 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>
+
+       * dis-asm.h: (print_insn_d10v): Declare.
+
+Mon Jul 15 16:55:38 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * dis-asm.h:  Get rid of decls for print_insn_i8086,
+       print_insn_sparc64 and print_insn_sparclite.
+       * (INIT_DISASSEMBLE_INFO):  Split into two pieces.  One,
+       INIT_DISASSEMBLE_INFO_NO_ARCH inits everything except for endian,
+       mach, and arch.
+
+Fri Jul 12 10:19:27 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * dis-asm.h (print_insn_i8086):  Declare.
+
+Wed Jul  3 16:02:39 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * dis-asm.h (print_insn_sparclite):  Declare.
+
+Tue Jun 18 16:02:46 1996  Jeffrey A. Law  <law@rtl.cygnus.com>
+
+       * dis-asm.h (print_insn_h8300s): Declare.
+
+Tue Jun 18 15:11:33 1996  Klaus Kaempf  <kkaempf@progis.de>
+
+       * fopen-vms.h: New file.
+
+Tue Jun  4 18:58:16 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Add notice_all field.
+
+Fri Apr 26 10:33:12 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * demangle.h (#ifdef IN_GCC): #include "gansidecl.h".
+       (PROTO,PTR,const): Delete.
+
+Mon Apr 22 17:27:42 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Add traditional_format field.
+
+Mon Apr 15 15:16:56 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * libiberty.h (choose_temp_base): Add prototype.
+
+Tue Mar 12 17:29:46 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (bfd_wrapped_link_hash_lookup): Declare.
+       (struct bfd_link_info): Add wrap_hash field.
+
+Wed Feb 14 16:49:17 1996  Martin Anantharaman  <martin@mail.imech.uni-duisburg.de>
+
+       * ieee.h (ieee_record_enum_type): Define
+       ieee_external_reference_info_enum.
+
+Fri Feb  2 17:09:25 1996  Doug Evans  <dje@charmed.cygnus.com>
+
+       * dis-asm.h (DISASM_RAW_INSN): Delete.
+
+Tue Jan 23 09:21:47 1996  Doug Evans  <dje@charmed.cygnus.com>
+
+       * dis-asm.h (INIT_DISASSEMBLE_INFO): Set endian to BFD_ENDIAN_UNKNOWN.
+       New argument FPRINTF_FUNC.
+
+Mon Jan 22 16:37:59 1996  Doug Evans  <dje@charmed.cygnus.com>
+
+       * dis-asm.h (disassemble_info): New members arch, mach, endian.
+       (INIT_DISASSEMBLE_INFO): Initialize them.
+       (DISASM_RAW_INSN{,FLAG}): Define.
+
+Thu Jan 18 11:32:38 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * demangle.h (cplus_demangle_opname): Change opname parameter to
+       const char *.
+       (cplus_mangle_opname): Change return type and opname parameter to
+       const char *.
+
+Fri Jan  5 00:01:22 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * ieee.h (enum ieee_record): Add ieee_asn_record_enum,
+       ieee_at_record_enum, ieee_ty_record_enum, ieee_atn_record_enum,
+       ieee_bb_record_enum, and ieee_be_record_enum.
+
+Wed Jan  3 13:12:09 1996  Fred Fish  <fnf@cygnus.com>
+
+       * obstack.h: Update copyright to 1996.
+       (_obstack_memory_used): Declare.
+       (obstack_memory_used): Define macro.
+
+Thu Dec 28 11:42:12 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * libiberty.h (xstrdup): Declare.
+
+Thu Dec 21 14:47:17 1995  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * wait.h: Protect all macros with #ifndef.
+
+Tue Oct 24 21:45:40 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Add static_link field.
+
+Tue Sep 12 16:28:04 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_callbacks): Add symbol parameter to
+       warning callback.
+
+Fri Sep  1 13:11:51 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_callbacks): Change warning callback
+       to take BFD, section, and address arguments.
+
+Thu Aug 31 16:45:12 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Remove PE stuff.
+
+Tue Aug 22 03:18:23 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
+
+       * libiberty.h: Declare xstrerror.  From Pat Rankin.
+
+Mon Aug 21 18:11:36 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Remove PE stuff.
+
+Wed Aug  2 08:14:12 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       * dis-asm.h (print_insn_sparc64): Declare.
+
+Mon Jul 10 13:26:49 1995  Eric Youngdale  <eric@aib.com>
+
+       * bfdlink.h (struct bfd_link_info): Add new field symbolic.
+
+Sun Jul  2 17:48:40 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Change type of base_file to
+       PTR.
+
+Thu Jun 29 00:02:45 1995  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * bfdlink.h (struct bfd_link_info): Added base_file member.
+
+Tue Jun 20 16:40:04 1995  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * ansidecl.h: win32s is ANSI enough.
+
+Thu May 18 04:25:50 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
+
+       Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * dis-asm.h (print_insn_arm): Delete declaration.
+       (print_insn_{little,big}_arm): New declarations.
+
+       * floatformat.h (floatformat_arm_ext): Declare.
+
+Sat May 13 10:14:08 1995  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * bfdlink.h (subsytem, stack_heap_parameters): New.
+
+Thu May  4 14:36:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * demangle.h: Don't include ansidecl.h if IN_GCC.
+
+Tue Feb 21 00:37:28 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+       * hp-symtab.h: Don't use bitfield enumerations, the HP C compiler
+       does not handle them correctly.
+
+Thu Feb  9 14:20:27 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * libiberty.h (basename): Don't declare parameter type; some
+       systems have this in their header files.
+
+Wed Feb  8 17:35:38 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (struct bfd_link_hash_entry): Change format of common
+       symbol information, to remove restrictions on maximum size and
+       alignment power, by using a pointer to a structure instead.
+
+Mon Feb  6 14:55:32 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * bfdlink.h (enum bfd_link_hash_type): Rename bfd_link_hash_weak
+       to bfd_link_hash_undefweak.  Add bfd_link_hash_defweak.
+
+Mon Jan 16 21:00:23 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * dis-asm.h (GDB_INIT_DISASSEMBLE_INFO, etc): Remove all
+       GDB-specific definitions.
+
+Sun Jan 15 18:39:35 1995  Steve Chamberlain  <sac@splat>
+
+       * dis-asm.h (print_insn_w65): Declare.
+
+Thu Jan 12 17:51:17 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>
+
+       * libiberty.h (hex_p): Fix sense of test.
+
+Wed Jan 11 22:36:40 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>
+
+       * libiberty.h (_hex_array_size, _hex_bad, _hex_value, hex_init,
+       hex_p, hex_value): New macros and declarations, for hex.c.
+
+Fri Jan  6 17:44:14 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+       * dis-asm.h: Make idempotent.
+
+Wed Dec 14 13:08:43 1994  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * progress.h: New file, empty definitions for progress macros.
+
+Fri Nov 25 00:14:05 1994  Jeff Law  (law@snake.cs.utah.edu)
+
+       * hp-symtab.h: New file describing the debug symbols emitted
+       by the HP C compilers.
+
+Fri Nov 11 15:48:37 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+       * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size from 24
+       to 26 bits, and change u.c.alignment_power from 8 to 6 bits.  6
+       bit in the alignment power is enough for a 64 bit address space.
+
+Mon Oct 31 13:02:51 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+       * demangle.h (cplus_mangle_opname): Declare.
+
+Tue Oct 25 11:38:02 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+       * bfdlink.h (struct bfd_link_callbacks): Fix comments for
+       multiple_common field.
+
+Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+       * dis-asm.h: Add support for the ARM.
+
+Wed Aug 10 12:51:41 1994  Doug Evans  (dje@canuck.cygnus.com)
+
+       * libiberty.h (strsignal): Document its existence even if we
+       can't declare it.
+
+Tue Aug  2 14:40:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * os9k.h: Remove u_int16, u_int32, and owner_id typedefs and
+       expand their uses.  Those names conflict with Mach headers.
+
+Fri Jul 22 14:17:12 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size into a
+       bitfield.  Add field u.c.alignment_power.
+
+Sun Jul 10 00:26:39 1994  Ian Dall  (dall@hfrd.dsto.gov.au)
+
+       * dis-asm.h: Add print_insn_ns32k declaration.
+
+Mon Jun 20 17:13:29 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * bfdlink.h (bfd_link_hash_table): Make creator a const pointer.
+
+Sat Jun 18 16:09:32 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+       * demangle.h (cplus_demangle_opname): Declare.
+
+Thu Jun 16 15:19:03 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_info): Add new field shared.
+
+Mon Jun  6 14:39:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_hash_entry): Remove written field:
+       not needed for all backends.
+
+Thu Apr 28 19:06:50 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * dis-asm.h (disassembler): Declare.
+
+Fri Apr  1 00:38:17 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)
+
+       * obstack.h: Delete use of IN_GCC to control whether
+       stddef.h or gstddef.h is included.
+
+Tue Mar 22 13:06:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (enum bfd_link_order_type): Add bfd_data_link_order.
+       (struct bfd_link_order): Add data field to union.
+
+Mon Mar 21 18:45:26 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_callbacks): Change bitsize argument
+       to add_to_set to reloc.  Remove bitsize argument from constructor.
+       Comment that reloc_overflow, reloc_dangerous and unattached_reloc
+       must handle NULL pointers for reloc location.
+       (enum bfd_link_order_type): Add bfd_section_reloc_link_order and
+       bfd_symbol_reloc_link_order.
+       (struct bfd_link_order): Add reloc field to union.
+       (struct bfd_link_order_reloc): Define.
+
+Mon Mar 14 12:27:50 1994  Ian Lance Taylor  (ian@cygnus.com)
+
+       * ieee-float.h: Removed; no longer used.
+
+Tue Mar  1 18:10:49 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * os9k.h: os9000 target specific header file, the header of the
+       object file is used now.
+
+Sun Feb 27 21:52:26 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+       * floatformat.h: New file, intended to replace ieee-float.h.
+
+Sun Feb 20 17:15:42 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)
+
+       * ansidecl.h (ANSI_PROTOTYPES): Define if using ANSI prototypes.
+
+Wed Feb 16 01:07:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * libiberty.h: Don't declare strsignal, to avoid conflicts with
+       Solaris system header files.
+
+Sat Feb 12 22:11:32 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+       * libiberty.h (xexit): Use __volatile__ to avoid losing if
+       compiling with gcc -traditional.
+
+Thu Feb 10 14:05:41 1994  Ian Lance Taylor  (ian@cygnus.com)
+
+       * libiberty.h: New file.  Declares functions provided by
+       libiberty.
+
+Tue Feb  8 05:19:52 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       Handle obstack_chunk_alloc returning NULL.  This allows
+       obstacks to be used by libraries, without forcing them
+       to call exit or longjmp.
+       * obstack.h (struct obstack): Add alloc_failed flag.
+       _obstack_begin, _obstack_begin_1): Declare to return int, not void.
+       (obstack_finish): If alloc_failed, return NULL.
+       (obstack_base, obstack_next_free, objstack_object_size):
+       If alloc_failed, return 0.
+       (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow,
+       obstack_int_grow, obstack_blank): If alloc_failed, do nothing that
+       could corrupt the obstack.
+
+Mon Jan 24 15:06:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_callbacks): Add name, reloc_name and
+       addend argments to reloc_overflow callback.
+
+Fri Jan 21 19:13:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * dis-asm.h (print_insn_big_powerpc, print_insn_little_powerpc,
+       print_insn_rs6000): Declare.
+
+Thu Jan  6 14:15:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfdlink.h (struct bfd_link_callbacks): Add bitsize argument to
+       add_to_set field.  Add new callback named constructor.
+
+Thu Dec 30 10:44:06 1993  Ian Lance Taylor  (ian@rtl.cygnus.com)
+
+       * bfdlink.h: New file for new BFD linker backend routines.
+
+Mon Nov 29 10:43:57 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * dis-asm.h (enum dis_insn_tyupe): Remove non-ANSI trailing comma.
+
+Sat Oct  2 20:42:26 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * dis-asm.h: Move comment to right place.
+
+Mon Aug  9 19:03:35 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * obstack.h (obstack_chunkfun, obstack_freefun): Add defns from
+       previous version.  Are these Cygnus local changes?
+
+Fri Aug  6 17:05:47 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * getopt.h, obstack.h: Update to latest FSF version.
+
+Mon Aug  2 14:45:29 1993  John Gilmore  (gnu@cygnus.com)
+
+       * dis-asm.h:  Move enum outside of struct defn to avoid warnings.
+
+Mon Aug  2 08:49:30 1993  Stu Grossman  (grossman at cygnus.com)
+
+       * wait.h (WEXITSTATUS, WSTOPSIG): Mask down to 8 bits.  This is
+       for systems that store stuff into the high 16 bits of a wait
+       status.
+
+Fri Jul 30 18:38:02 1993  John Gilmore  (gnu@cygnus.com)
+
+       * dis-asm.h:  Add new fields insn_info_valid, branch_delay_insns,
+       data_size, insn_type, target, target2.  These are used to return
+       information from the instruction decoders back to the calling
+       program.  Add comments, make more readable.
+
+Mon Jul 19 22:14:14 1993  Fred Fish  (fnf@deneb.cygnus.com)
+
+       * nlm:  New directory containing NLM/NetWare includes.
+
+Thu Jul 15 12:10:04 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)
+
+       * dis-asm.h (struct disassemble_info): New field application_data.
+
+Thu Jul 15 12:41:15 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * dis-asm.h: Added declaration of print_insn_m88k.
+
+Fri Jul  2 10:31:59 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * ansidecl.h: Use ANSI macros if __mips and _SYSTYPE_SVR4 are
+       defined, since RISC/OS cc handles ANSI declarations in SVR4 mode
+       but does not define __STDC__.
+
+Sun Jun 20 18:27:52 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)
+
+       * dis-asm.h: Don't need to include ansidecl.h any more.
+
+Fri Jun 18 03:22:10 1993  John Gilmore  (gnu@cygnus.com)
+
+       * oasys.h:  Eliminate "int8_type", "int16_type", "int32_type", and
+       their variants.  These changes are coordinated with corresponding
+       changes in ../bfd/oasys.c.
+
+Wed Jun 16 10:43:08 1993  Fred Fish  (fnf@cygnus.com)
+
+       * bfd.h:  Note that it has been removed.
+
+Tue Jun  8 12:16:03 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)
+
+        Support for H8/300-H
+       * dis-asm.h (print_insn_h8300, print_insn_h8300h): Declare it.
+
+Tue Jun  1 07:35:03 1993  Ken Raeburn  (raeburn@kr-pc.cygnus.com)
+
+       * ansidecl.h (const): Don't define it if it's already defined.
+
+Thu May 27 18:19:51 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)
+
+       * dis-asm.h (print_insn_hppa): Declare it.
+
+       * bfd.h: Moved to bfd directory.  Small stub here includes it
+       without requiring "-I../bfd".
+
+Thu Apr 29 12:06:13 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)
+
+       * bfd.h: Updated with BSF_FUNCTION.
+
+Mon Apr 26 18:15:50 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h, dis-asm.h: Updated with Hitachi SH.
+
+Fri Apr 23 18:41:38 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h: Updated with alpha changes.
+       * dis-asm.h: Added alpha.
+
+Fri Apr 16 17:35:30 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * bfd.h: Update for signed bfd_*get_*.
+
+Thu Apr 15 09:24:21 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * bfd.h: Updated for file_truncated error.
+
+Thu Apr  8 10:53:47 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * ansidecl.h: If no ANSI, define const to be empty.
+
+Thu Apr  1 09:00:10 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * dis-asm.h: Declare a29k and i960 print_insn_*.
+
+       * dis-asm.h: Add print_address_func and related stuff.
+
+       * dis-asm.h (dis_asm_read_memory): Fix prototype.
+
+Wed Mar 31 17:40:16 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * dis-asm.h: Add print_insn_sparc.
+
+Wed Mar 31 17:51:42 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * bfd.h: Updated for BFD_RELOC_MIPS_GPREL and bfd_[gs]et_gp_size
+       prototypes.
+
+Wed Mar 31 16:35:12 1993  Stu Grossman  (grossman@cygnus.com)
+
+       * dis-asm.h: (disassemble_info):  Fix typo in prototype of
+       dis_asm_memory_error().
+
+Tue Mar 30 19:09:23 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * dis-asm.h (disassembler_info): Add read_memory_func,
+       memory_error_func, buffer, and length.
+       ({GDB_,}INIT_DISASSEMBLE_INFO): Set them.
+       print_insn_*: Remove second argument.
+
+Tue Mar 30 14:48:55 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h: Update for lma field of section.
+
+Tue Mar 30 12:22:55 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * ansidecl.h: Use ANSI versions on AIX regardless of __STDC__.
+
+Fri Mar 19 14:49:49 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * dis-asm.h: Add h8500.
+
+Thu Mar 18 13:49:09 1993  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * ieee-float.h:  Moved from ../gdb.
+       * dis-asm.h:  New file.  Interface to dis-assembler.
+
+Thu Mar 11 10:52:57 1993  Fred Fish  (fnf@cygnus.com)
+
+       * demangle.h (DMGL_NO_OPTS):  Add define (set to 0) to use
+       in place of bare 0, for readability reasons.
+
+Tue Mar  2 17:50:11 1993  Fred Fish  (fnf@cygnus.com)
+
+       * demangle.h:  Replace all references to cfront with ARM.
+
+Tue Feb 23 12:21:14 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * bfd.h: Update for new elements in JUMP_TABLE.
+
+Tue Feb 16 00:51:30 1993  John Gilmore  (gnu@cygnus.com)
+
+       * bfd.h:  Update for BFD_VERSION 2.1.
+
+Tue Jan 26 11:49:20 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * bfd.h: Update for SEC_IS_COMMON flag.
+
+Tue Jan 19 12:25:12 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfd.h: Update for bfd_asymbol_value bug fix.
+
+Fri Jan  8 16:37:18 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * bfd.h: Update to include ECOFF tdata and target_flavour.
+
+Sun Dec 27 17:52:30 1992  Fred Fish  (fnf@cygnus.com)
+
+       * bfd.h:  Add declaration for bfd_get_size().
+
+Tue Dec 22 22:42:46 1992  Fred Fish  (fnf@cygnus.com)
+
+       * demangle.h:  Protect file from multiple inclusions with
+       #if !defined(DEMANGLE_H)...#define DEMANGLE_H...#endif.
+
+Mon Dec 21 21:25:50 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * bfd.h:  Update to get hppa_core_struct from bfd.c.
+
+Thu Dec 17 00:42:35 1992  John Gilmore  (gnu@cygnus.com)
+
+       * bfd.h:  Update to get tekhex tdata name change from bfd.
+
+Mon Nov  9 23:55:42 1992  John Gilmore  (gnu@cygnus.com)
+
+       * ansidecl.h:  Update comments to discourage use of EXFUN.
+
+Thu Nov  5 16:35:44 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * bfd.h: Update to bring in SEC_SHARED_LIBRARY.
+
+Thu Nov  5 03:21:32 1992  John Gilmore  (gnu@cygnus.com)
+
+       * bfd.h:  Update to match EXFUN, bfd_seclet_struct, and SDEF
+       cleanups in bfd.
+
+Wed Nov  4 07:28:05 1992  Ken Raeburn  (raeburn@cygnus.com)
+
+       * bout.h (N_CALLNAME, N_BALNAME): Define as char-type values, so
+       widening works consistently.
+
+Fri Oct 16 03:17:08 1992  John Gilmore  (gnu@cygnus.com)
+
+       * getopt.h:  Update to Revised Standard FSF Version.
+
+Thu Oct 15 21:43:22 1992  K. Richard Pixley  (rich@sendai.cygnus.com)
+
+       * getopt.h (struct option): use the provided enum for has_arg.
+
+       * demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING,
+         LUCID_DEMANGLING): ultrix compilers require enums to be
+         enums and ints to be ints and casts where they meet.  cast some
+         enums into ints.
+
+Thu Oct 15 04:35:51 1992  John Gilmore  (gnu@cygnus.com)
+
+       * bfd.h:  Update after comment changes.
+
+Thu Oct  8 09:03:02 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h (bfd_get_symbol_leading_char): new macro for getting in xvec
+
+Thu Sep  3 09:10:50 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * bfd.h (struct reloc_howto_struct):  size needs to be signed if
+       it's going to hold negative values.
+
+Sun Aug 30 17:50:27 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * demangle.h:  New file, moved from ../gdb.  Made independent
+       of gdb.  Allow demangling style option to be passed as a
+       parameter to cplus_demangle(), but using the
+       current_demangling_style global as the default.
+
+Sat Aug 29 10:07:55 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.h:  Merge comment change from current FSF version.
+
+Thu Aug 27 12:59:29 1992  Brendan Kehoe  (brendan@cygnus.com)
+
+       * bfd.h: add we32k
+
+Tue Aug 25 15:07:47 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h: new after Z8000 stuff
+
+Mon Aug 17 09:01:23 1992  Ken Raeburn  (raeburn@cygnus.com)
+
+       * bfd.h: Regenerated after page/segment size changes.
+
+Sat Aug  1 13:46:31 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.h: Merge changes from current FSF version.
+
+Mon Jul 20 21:06:23 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.h (area_id, flags):  Remove, replace with extra_arg,
+       use_extra_arg, and maybe_empty_object.
+       * obstack.h (OBSTACK_MAYBE_EMPTY_OBJECT, OBSTACK_MMALLOC_LIKE):
+       Remove, replaced by maybe_empty_object and use_extra_arg bitfields.
+       * obstack.h (obstack_full_begin, _obstack_begin):  Remove area_id
+       and flags arguments.
+       * obstack.h (obstack_alloc_arg):  New macro to set extra_arg.
+
+Thu Jul 16 08:12:44 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * bfd.h: new after adding BFD_IS_RELAXABLE
+
+Sat Jul  4 03:22:23 1992  John Gilmore  (gnu at cygnus.com)
+
+       * bfd.h:  Regen after adding BSF_FILE.
+
+Mon Jun 29 14:18:36 1992  Fred Fish  (fnf at sunfish)
+
+       * obstack.h:  Convert bcopy() use to memcpy(), which is more
+       portable, more standard, and can take advantage of gcc's builtin
+       functions for increased performance.
+
+Thu Jun 25 04:46:08 1992  John Gilmore  (gnu at cygnus.com)
+
+       * ansidecl.h (PARAMS):  Incorporate this macro from gdb's defs.h.
+       It's a cleaner way to forward-declare function prototypes.
+
+Fri Jun 19 15:46:32 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * bfd.h:  HPPA merge.
+
+Tue Jun 16 21:30:56 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * getopt.h: gratuitous white space changes merged from other prep
+         releases.
+
+Thu Jun 11 01:10:55 1992  John Gilmore  (gnu at cygnus.com)
+
+       * bfd.h:  Regen'd from bfd.c after removing elf_core_tdata_struct.
+
+Mon May 18 17:29:03 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * getopt.h: merged changes from make-3.62.11.
+
+       * getopt.h: merged changes from grep-1.6 (alpha).
+
+Fri May  8 14:53:32 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * getopt.h: merged changes from bison-1.18.
+
+Sat Mar 14 17:25:20 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.h:  Add "area_id" and "flags" members to obstack
+       structure.  Add obstack_chunkfun() and obstack_freefun() to
+       set functions explicitly.  Convert maybe_empty_object to
+       a bit in "flags".
+
+Thu Feb 27 22:01:02 1992  Per Bothner  (bothner@cygnus.com)
+
+       * wait.h (WIFSTOPPED):  Add IBM rs6000-specific version.
+
+Fri Feb 21 20:49:20 1992  John Gilmore  (gnu at cygnus.com)
+
+       * obstack.h:  Add obstack_full_begin.
+       * bfd.h, obstack.h:  Protolint.
+
+Thu Jan 30 01:18:42 1992  John Gilmore  (gnu at cygnus.com)
+
+       * bfd.h:  Remove comma from enum declaration.
+
+Mon Jan 27 22:01:13 1992  Steve Chamberlain  (sac at cygnus.com)
+
+       * bfd.h : new target entr, bfd_relax_section
+
+Wed Dec 18 17:19:44 1991  Stu Grossman  (grossman at cygnus.com)
+
+       * bfd.h, ieee.h:  ANSIfy enums.
+
+Thu Dec 12 20:59:56 1991  John Gilmore  (gnu at cygnus.com)
+
+       * fopen-same.h, fopen-bin.h:  New files for configuring
+       whether fopen distinguishes binary files or not.  For use
+       by host-dependent config files.
+
+Sat Nov 30 20:46:43 1991  Steve Chamberlain  (sac at rtl.cygnus.com)
+
+       * bfd.h: change the documentation format.
+
+       * created coff, elf and opcode and aout directories. Moved:
+
+       aout64.h        ==> aout/aout64.h
+       ar.h            ==> aout/ar.h
+       a.out.encap.h   ==> aout/encap.h
+       a.out.host.h    ==> aout/host.h
+       a.out.hp.h      ==> aout/hp.h
+       a.out.sun4.h    ==> aout/sun4.h
+       ranlib.h        ==> aout/ranlib.h
+       reloc.h         ==> aout/reloc.h
+       stab.def        ==> aout/stab.def
+       stab.gnu.h      ==> aout/stab_gnu.h
+
+       coff-a29k.h     ==> coff/a29k.h
+       coff-h8300.h    ==> coff/h8300.h
+       coff-i386.h     ==> coff/i386.h
+       coff-i960.h     ==> coff/i960.h
+       internalcoff.h  ==> coff/internal.h
+       coff-m68k.h     ==> coff/m68k.h
+       coff-m88k.h     ==> coff/m88k.h
+       coff-mips.h     ==> coff/mips.h
+       coff-rs6000.h   ==> coff/rs6000.h
+
+       elf-common.h    ==> elf/common.h
+       dwarf.h         ==> elf/dwarf.h
+       elf-external.h  ==> elf/external.h
+       elf-internal.h  ==> elf/internal.h
+
+       a29k-opcode.h   ==> opcode/a29k.h
+       arm-opcode.h    ==> opcode/arm.h
+       h8300-opcode.h  ==> opcode/h8300.h
+       i386-opcode.h   ==> opcode/i386.h
+       i860-opcode.h   ==> opcode/i860.h
+       i960-opcode.h   ==> opcode/i960.h
+       m68k-opcode.h   ==> opcode/m68k.h
+       m88k-opcode.h   ==> opcode/m88k.h
+       mips-opcode.h   ==> opcode/mips.h
+       np1-opcode.h    ==> opcode/np1.h
+       ns32k-opcode.h  ==> opcode/ns32k.h
+       pn-opcode.h     ==> opcode/pn.h
+       pyr-opcode.h    ==> opcode/pyr.h
+       sparc-opcode.h  ==> opcode/sparc.h
+       tahoe-opcode.h  ==> opcode/tahoe.h
+       vax-opcode.h    ==> opcode/vax.h
+
+
+
+Wed Nov 27 10:38:31 1991  Steve Chamberlain  (sac at rtl.cygnus.com)
+
+       * internalcoff.h: (internal_scnhdr) took out #def dependency, now
+       s_nreloc and s_nlnno are always long.   (internal_reloc): allways
+       has an offset field now.
+
+Fri Nov 22 08:12:58 1991  John Gilmore  (gnu at cygnus.com)
+
+       * coff-rs6000.h:  Lint; use unsigned chars for external fields.
+       * internalcoff.h:  Lint; cast storage classes to signed char.
+
+Thu Nov 21 21:01:05 1991  Per Bothner  (bothner at cygnus.com)
+
+       * stab.def: Remove the GNU extended type codes (e.g. N_SETT).
+       * aout64.h:  The heuristic for distinguishing between
+       sunos-style and bsd-style ZMAGIC files (wrt. where the
+       text segment starts) is moved into (the default definition of)
+       the macro N_HEADER_IN_TEXT.  This definition is only used
+       if no other definition is used - e.g. bfd/newsos3.c defines
+       N_HEADER_IN_TEXT(x) to be always 0 (as before).
+
+Thu Nov 21 11:53:03 1991  John Gilmore  (gnu at cygnus.com)
+
+       * aout64.h (N_TXTADDR, N_TXTOFF, N_TXTSIZE):  New definitions
+       that should handle all uses.  LOGICAL_ versions deleted.
+       Eliminate N_HEADER_IN_TEXT, using a_entry to determine which
+       kind of zmagic a.out file we are looking at.
+       * coff-rs6000.h:  Typo.
+
+Tue Nov 19 18:43:37 1991  Per Bothner  (bothner at cygnus.com)
+
+       (Note:  This is a revised entry, as was aout64.h.)
+       * aout64.h:  Some cleanups of N_TXTADDR and N_TXTOFF:
+       Will now work for both old- and new-style ZMAGIC files,
+       depending on N_HEADER_IN_TEXT macro.
+       Add LOGICAL_TXTADDR, LOICAL_TXTOFF and LOGICAL_TXTSIZE
+       that don't count the exec header as part
+       of the text segment, to be consistent with bfd.
+       * a.out.sun4.h:  Simplified/fixed for previous change.
+
+Mon Nov 18 00:02:06 1991  Fred Fish  (fnf at cygnus.com)
+
+       * dwarf.h:  Update to DWARF draft 5 version from gcc2.
+
+Thu Nov 14 19:44:59 1991  Per Bothner  (bothner at cygnus.com)
+
+       * stab.def:  Added defs for extended GNU symbol types,
+       such as N_SETT.  These are normally ifdef'd out (because
+       of conflicts with a.out.gnu.h), but are used by bfb_stab_name().
+
+Thu Nov 14 19:17:03 1991  Fred Fish  (fnf at cygnus.com)
+
+       * elf-common.h:  Add defines to support ELF symbol table code.
+
+Mon Nov 11 19:01:06 1991  Fred Fish  (fnf at cygnus.com)
+
+       * elf-internal.h, elf-external.h, elf-common.h:  Add support for
+       note sections, which are used in ELF core files to hold copies
+       of various /proc structures.
+
+Thu Nov  7 08:58:26 1991  Steve Chamberlain  (sac at cygnus.com)
+
+       * internalcoff.h: took out the M88 dependency in the lineno
+       struct.
+       * coff-m88k.h: defines GET_LINENO_LNNO and PUT_LINENO_LNNO to use
+       32bit linno entries.
+       * a29k-opcode.h: fixed encoding of mtacc
+
+Sun Nov  3 11:54:22 1991  Per Bothner  (bothner at cygnus.com)
+
+       * bfd.h: Updated from ../bfd/bfd-in.h (q.v).
+
+Fri Nov  1 11:13:53 1991  John Gilmore  (gnu at cygnus.com)
+
+       * internalcoff.h:  Add x_csect defines.
+
+Fri Oct 25 03:18:20 1991  John Gilmore  (gnu at cygnus.com)
+
+       * Rename COFF-related files in `coff-ARCH.h' form.
+       coff-a29k.h, coff-i386.h, coff-i960.h, coff-m68k.h, coff-m88k.h,
+       coff-mips.h, coff-rs6000.h to be exact.
+
+Thu Oct 24 22:11:11 1991  John Gilmore  (gnu at cygnus.com)
+
+       RS/6000 support, by Metin G. Ozisik, Mimi Ph\81û\81ông-Th\81åo V\81õ, and
+       John Gilmore.
+
+       * a.out.gnu.h:  Update slightly.
+       * bfd.h:  Add new error code, fix doc, add bfd_arch_rs6000.
+       * internalcoff.h:  Add more F_ codes for filehdr.  Add
+       rs/6000-dependent fields to aouthdr.  Add storage classes
+       to syments.  Add 6000-specific auxent.  Add r_size in reloc.
+       * rs6000coff.c:  New file.
+
+Thu Oct 24 04:13:20 1991  Fred Fish  (fnf at cygnus.com)
+
+       * dwarf.h: New file for dwarf support.  Copied from gcc2
+       distribution.
+
+Wed Oct 16 13:31:45 1991  John Gilmore  (gnu at cygnus.com)
+
+       * aout64.h:  Remove PAGE_SIZE defines; they are target-dependent.
+       Add N_FN_SEQ for N_FN symbol type used on Sequent machines.
+       * stab.def:  Include N_FN_SEQ in table.
+       * bout.h:  External formats of structures use unsigned chars.
+
+Fri Oct 11 12:40:43 1991  Steve Chamberlain  (steve at cygnus.com)
+
+       * bfd.h:upgrade from bfd.c
+       * internalcoff.h: add n_name, n_zeroes and n_offset macros
+       * amdcoff.h: Define OMAGIC and AOUTHDRSZ.
+
+Fri Oct 11 10:58:06 1991  Per Bothner  (bothner at cygnus.com)
+
+       * a.out.host.h: Change SEGMENT_SIZE to 0x1000 for Sony.
+       * bfd.h (align_power): Add (actually move) comment.
+
+Tue Oct  8 15:29:32 1991  Per Bothner  (bothner at cygnus.com)
+
+       * sys/h-rtbsd.h: Define MISSING_VFPRINT (for binutils/bucomm.c).
+
+Sun Oct  6 19:24:39 1991  John Gilmore  (gnu at cygnus.com)
+
+       * aout64.h:  Move struct internal_exec to ../bfd/libaout.h so
+       it can be shared by all `a.out-family' code.  Rename
+       EXTERNAL_LIST_SIZE to EXTERNAL_NLIST_SIZE.  Use basic types
+       for nlist members, and make strx integral rather than pointer.
+       More commentary on n_type values.
+       * bout.h:  Provide a struct external_exec rather than an
+       internal_exec.
+       * m68kcoff.h:  Remove `tagentries' which snuck in from the i960
+       COFF port.
+
+Fri Oct  4 01:25:59 1991  John Gilmore  (gnu at cygnus.com)
+
+       * h8300-opcode.h:  Remove `_enum' from the typedef for an enum.
+       * bfd.h:  Update to match bfd changes.
+
+       * sys/h-i386mach.h, sysdep.h:  Add 386 Mach host support.
+
+Tue Oct  1 04:58:42 1991  John Gilmore  (gnu at cygnus.com)
+
+       * bfd.h, elf-common.h, elf-external.h, elf-internal.h:
+       Add preliminary ELF support, sufficient for GDB, from Fred Fish.
+       * sysdep.h, sys/h-amix.h:  Support Amiga SVR4.
+
+       * sys/h-vaxult.h:  Make it work.  (David Taylor <taylor@think.com>)
+       * a.out.vax.h:  Remove unused and confusing file.
+
+Mon Sep 30 12:52:35 1991  Per Bothner  (bothner at cygnus.com)
+
+       * sysdep.h: Define NEWSOS3_SYS, and use it.
+
+Fri Sep 20 13:38:21 1991  John Gilmore  (gnu at cygnus.com)
+
+       * a.out.gnu.h (N_FN):  Its value *really is* 0x1F.
+       Fix it, and add comments warning about or-ing N_EXT with it
+       and/or N_WARNING.
+       * aout64.h (N_FN):  Fix value, add comments about N_EXT.
+       * stab.def (table at end):  Update to show all the type
+       values <0x20, including low order bits.  Move N_FN to
+       its rightful place.
+
+Tue Sep 17 17:41:37 1991  Stu Grossman  (grossman at cygnus.com)
+
+       * sys/h-irix3.h:  sgi/irix support.
+
+Tue Sep 17 07:52:59 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * stab.def (N_DEFD):  Add GNU Modula-2 debug stab, from Andrew
+       Beers.
+
+Thu Sep 12 14:12:59 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * internalcoff.h (SYMNMLEN, FILNMLEN, DIMNUM):  Define these
+       for internalcoff, separately from the various external coff's.
+       * amdcoff.h, bcs88kcoff.h, i386coff.h, intel-coff.h, m68kcoff.h,
+       m88k-bcs.h: Prefix SYMNMLEN, FILNMLEN, and DIMNUM with E_'s for
+       the external struct definitions.
+       * ecoff.h: Remove these #define's, kludge no longer needed.
+
+       * sys/h-ultra3.h:  Add new Ultracomputer host.
+       * sysdep.h:  Add ULTRA3_SYM1_SYS and use it.
+
+Tue Sep 10 10:11:46 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * i386coff.h (LINESZ):  Always 6, not based on sizeof().
+       (Fix from Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.)
+
+Wed Sep  4 08:58:37 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * a.out.gnu.h, aout64.h:  Add N_WARNING.  Change N_FN to 0x0E,
+       to match SunOS and BSD.  Add N_COMM as 0x12 for SunOS shared lib
+       support.
+       * stab.def:  Add N_COMM to table, fix overlap comment.
+
+Tue Sep  3 06:29:20 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       Merge with latest FSF versions of these files.
+
+       * stab.gnu.h:  Add LAST_UNUSED_STAB_CODE.
+       * stab.def:  Update to GPL2.  Move N_WARNING out, since not a
+       debug symbol.  Change comments, and reorder table to numeric
+       order.  Update final table comment.
+       (N_DSLINE, N_BSLINE):  Renumber from 0x66 and 0x68, to 0x46 and 0x48.
+
+       * obstack.h:  GPL2.  Merge.
+
+Fri Aug 23 01:54:23 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * a.out.gnu.h, a.out.sun4.h:  Make SEGMENT_SIZE able to depend
+       on the particular a.out being examined.
+       * a.out.sun4.h:  Define segment sizes for Sun-3's and Sun-4's.
+       * FIXME:  a.out.gnu.h is almost obsolete.
+       * FIXME:  a.out.sun4.h should be renamed a.out.sun.h now.
+
+Wed Aug 21 20:32:13 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * Start a ChangeLog for the includes directory.
+
+       * a.out.gnu.h (N_FN):  Fix value -- was 15, should be 0x1E.
+       * stab.def:  Update allocation table in comments at end,
+       to reflect reality as I know it.
+
+\f
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/include/ansidecl.h b/include/ansidecl.h
new file mode 100644 (file)
index 0000000..c19955a
--- /dev/null
@@ -0,0 +1,393 @@
+/* ANSI and traditional C compatability macros
+   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* ANSI and traditional C compatibility macros
+
+   ANSI C is assumed if __STDC__ is #defined.
+
+   Macro               ANSI C definition       Traditional C definition
+   -----               ---- - ----------       ----------- - ----------
+   ANSI_PROTOTYPES     1                       not defined
+   PTR                 `void *'                `char *'
+   PTRCONST            `void *const'           `char *'
+   LONG_DOUBLE         `long double'           `double'
+   const               not defined             `'
+   volatile            not defined             `'
+   signed              not defined             `'
+   VA_START(ap, var)   va_start(ap, var)       va_start(ap)
+
+   Note that it is safe to write "void foo();" indicating a function
+   with no return value, in all K+R compilers we have been able to test.
+
+   For declaring functions with prototypes, we also provide these:
+
+   PARAMS ((prototype))
+   -- for functions which take a fixed number of arguments.  Use this
+   when declaring the function.  When defining the function, write a
+   K+R style argument list.  For example:
+
+       char *strcpy PARAMS ((char *dest, char *source));
+       ...
+       char *
+       strcpy (dest, source)
+            char *dest;
+            char *source;
+       { ... }
+
+
+   VPARAMS ((prototype, ...))
+   -- for functions which take a variable number of arguments.  Use
+   PARAMS to declare the function, VPARAMS to define it.  For example:
+
+       int printf PARAMS ((const char *format, ...));
+       ...
+       int
+       printf VPARAMS ((const char *format, ...))
+       {
+          ...
+       }
+
+   For writing functions which take variable numbers of arguments, we
+   also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros.  These
+   hide the differences between K+R <varargs.h> and C89 <stdarg.h> more
+   thoroughly than the simple VA_START() macro mentioned above.
+
+   VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end.
+   Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls
+   corresponding to the list of fixed arguments.  Then use va_arg
+   normally to get the variable arguments, or pass your va_list object
+   around.  You do not declare the va_list yourself; VA_OPEN does it
+   for you.
+
+   Here is a complete example:
+
+       int
+       printf VPARAMS ((const char *format, ...))
+       {
+          int result;
+
+          VA_OPEN (ap, format);
+          VA_FIXEDARG (ap, const char *, format);
+
+          result = vfprintf (stdout, format, ap);
+          VA_CLOSE (ap);
+
+          return result;
+       }
+
+
+   You can declare variables either before or after the VA_OPEN,
+   VA_FIXEDARG sequence.  Also, VA_OPEN and VA_CLOSE are the beginning
+   and end of a block.  They must appear at the same nesting level,
+   and any variables declared after VA_OPEN go out of scope at
+   VA_CLOSE.  Unfortunately, with a K+R compiler, that includes the
+   argument list.  You can have multiple instances of VA_OPEN/VA_CLOSE
+   pairs in a single function in case you need to traverse the
+   argument list more than once.
+
+   For ease of writing code which uses GCC extensions but needs to be
+   portable to other compilers, we provide the GCC_VERSION macro that
+   simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
+   wrappers around __attribute__.  Also, __extension__ will be #defined
+   to nothing if it doesn't work.  See below.
+
+   This header also defines a lot of obsolete macros:
+   CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID,
+   AND, DOTS, NOARGS.  Don't use them.  */
+
+#ifndef        _ANSIDECL_H
+#define _ANSIDECL_H    1
+
+/* Every source file includes this file,
+   so they will all get the switch for lint.  */
+/* LINTLIBRARY */
+
+/* Using MACRO(x,y) in cpp #if conditionals does not work with some
+   older preprocessors.  Thus we can't define something like this:
+
+#define HAVE_GCC_VERSION(MAJOR, MINOR) \
+  (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
+
+and then test "#if HAVE_GCC_VERSION(2,7)".
+
+So instead we use the macro below and test it against specific values.  */
+
+/* This macro simplifies testing whether we are using gcc, and if it
+   is of a particular minimum version. (Both major & minor numbers are
+   significant.)  This macro will evaluate to 0 if we are not using
+   gcc at all.  */
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif /* GCC_VERSION */
+
+#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) || (defined(__alpha) && defined(__cplusplus))
+/* All known AIX compilers implement these things (but don't always
+   define __STDC__).  The RISC/OS MIPS compiler defines these things
+   in SVR4 mode, but does not define __STDC__.  */
+/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other
+   C++ compilers, does not define __STDC__, though it acts as if this
+   was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
+
+#define ANSI_PROTOTYPES        1
+#define PTR            void *
+#define PTRCONST       void *const
+#define LONG_DOUBLE    long double
+
+/* PARAMS is often defined elsewhere (e.g. by libintl.h), so wrap it in
+   a #ifndef.  */
+#ifndef PARAMS
+#define PARAMS(ARGS)           ARGS
+#endif
+
+#define VPARAMS(ARGS)          ARGS
+#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR)
+
+/* variadic function helper macros */
+/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's
+   use without inhibiting further decls and without declaring an
+   actual variable.  */
+#define VA_OPEN(AP, VAR)       { va_list AP; va_start(AP, VAR); { struct Qdmy
+#define VA_CLOSE(AP)           } va_end(AP); }
+#define VA_FIXEDARG(AP, T, N)  struct Qdmy
+#undef const
+#undef volatile
+#undef signed
+
+/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
+   it too, but it's not in C89.  */
+#undef inline
+#if __STDC_VERSION__ > 199901L
+/* it's a keyword */
+#else
+# if GCC_VERSION >= 2007
+#  define inline __inline__   /* __inline__ prevents -pedantic warnings */
+# else
+#  define inline  /* nothing */
+# endif
+#endif
+
+/* These are obsolete.  Do not use.  */
+#ifndef IN_GCC
+#define CONST          const
+#define VOLATILE       volatile
+#define SIGNED         signed
+
+#define PROTO(type, name, arglist)     type name arglist
+#define EXFUN(name, proto)             name proto
+#define DEFUN(name, arglist, args)     name(args)
+#define DEFUN_VOID(name)               name(void)
+#define AND            ,
+#define DOTS           , ...
+#define NOARGS         void
+#endif /* ! IN_GCC */
+
+#else  /* Not ANSI C.  */
+
+#undef  ANSI_PROTOTYPES
+#define PTR            char *
+#define PTRCONST       PTR
+#define LONG_DOUBLE    double
+
+#define PARAMS(args)           ()
+#define VPARAMS(args)          (va_alist) va_dcl
+#define VA_START(va_list, var) va_start(va_list)
+
+#define VA_OPEN(AP, VAR)               { va_list AP; va_start(AP); { struct Qdmy
+#define VA_CLOSE(AP)                   } va_end(AP); }
+#define VA_FIXEDARG(AP, TYPE, NAME)    TYPE NAME = va_arg(AP, TYPE)
+
+/* some systems define these in header files for non-ansi mode */
+#undef const
+#undef volatile
+#undef signed
+#undef inline
+#define const
+#define volatile
+#define signed
+#define inline
+
+#ifndef IN_GCC
+#define CONST
+#define VOLATILE
+#define SIGNED
+
+#define PROTO(type, name, arglist)     type name ()
+#define EXFUN(name, proto)             name()
+#define DEFUN(name, arglist, args)     name arglist args;
+#define DEFUN_VOID(name)               name()
+#define AND            ;
+#define DOTS
+#define NOARGS
+#endif /* ! IN_GCC */
+
+#endif /* ANSI C.  */
+
+/* Define macros for some gcc attributes.  This permits us to use the
+   macros freely, and know that they will come into play for the
+   version of gcc in which they are supported.  */
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
+#ifndef ATTRIBUTE_MALLOC
+# if (GCC_VERSION >= 2096)
+#  define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define ATTRIBUTE_MALLOC
+# endif /* GNUC >= 2.96 */
+#endif /* ATTRIBUTE_MALLOC */
+
+/* Attributes on labels were valid as of gcc 2.93. */
+#ifndef ATTRIBUTE_UNUSED_LABEL
+# if (!defined (__cplusplus) && GCC_VERSION >= 2093)
+#  define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
+# else
+#  define ATTRIBUTE_UNUSED_LABEL
+# endif /* !__cplusplus && GNUC >= 2.93 */
+#endif /* ATTRIBUTE_UNUSED_LABEL */
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif /* ATTRIBUTE_UNUSED */
+
+/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the
+   identifier name.  */
+#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)
+# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED
+#else /* !__cplusplus || GNUC >= 3.4 */
+# define ARG_UNUSED(NAME) NAME
+#endif /* !__cplusplus || GNUC >= 3.4 */
+
+#ifndef ATTRIBUTE_NORETURN
+#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif /* ATTRIBUTE_NORETURN */
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  */
+#ifndef ATTRIBUTE_NONNULL
+# if (GCC_VERSION >= 3003)
+#  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
+# else
+#  define ATTRIBUTE_NONNULL(m)
+# endif /* GNUC >= 3.3 */
+#endif /* ATTRIBUTE_NONNULL */
+
+/* Attribute `pure' was valid as of gcc 3.0.  */
+#ifndef ATTRIBUTE_PURE
+# if (GCC_VERSION >= 3000)
+#  define ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define ATTRIBUTE_PURE
+# endif /* GNUC >= 3.0 */
+#endif /* ATTRIBUTE_PURE */
+
+/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
+   This was the case for the `printf' format attribute by itself
+   before GCC 3.3, but as of 3.3 we need to add the `nonnull'
+   attribute to retain this behavior.  */
+#ifndef ATTRIBUTE_PRINTF
+#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
+#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
+#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
+#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
+#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
+#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
+#endif /* ATTRIBUTE_PRINTF */
+
+/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on
+   a function pointer.  Format attributes were allowed on function
+   pointers as of gcc 3.1.  */
+#ifndef ATTRIBUTE_FPTR_PRINTF
+# if (GCC_VERSION >= 3001)
+#  define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n)
+# else
+#  define ATTRIBUTE_FPTR_PRINTF(m, n)
+# endif /* GNUC >= 3.1 */
+# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2)
+# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3)
+# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4)
+# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5)
+# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6)
+#endif /* ATTRIBUTE_FPTR_PRINTF */
+
+/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL.  A
+   NULL format specifier was allowed as of gcc 3.3.  */
+#ifndef ATTRIBUTE_NULL_PRINTF
+# if (GCC_VERSION >= 3003)
+#  define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+# else
+#  define ATTRIBUTE_NULL_PRINTF(m, n)
+# endif /* GNUC >= 3.3 */
+# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
+# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
+# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
+# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
+# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
+#endif /* ATTRIBUTE_NULL_PRINTF */
+
+/* Attribute `sentinel' was valid as of gcc 3.5.  */
+#ifndef ATTRIBUTE_SENTINEL
+# if (GCC_VERSION >= 3005)
+#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
+# else
+#  define ATTRIBUTE_SENTINEL
+# endif /* GNUC >= 3.5 */
+#endif /* ATTRIBUTE_SENTINEL */
+
+
+#ifndef ATTRIBUTE_ALIGNED_ALIGNOF
+# if (GCC_VERSION >= 3000)
+#  define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m))))
+# else
+#  define ATTRIBUTE_ALIGNED_ALIGNOF(m)
+# endif /* GNUC >= 3.0 */
+#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
+
+/* Useful for structures whose layout must much some binary specification
+   regardless of the alignment and padding qualities of the compiler.  */
+#ifndef ATTRIBUTE_PACKED
+# define ATTRIBUTE_PACKED __attribute__ ((packed))
+#endif
+
+/* Attribute `hot' and `cold' was valid as of gcc 4.3.  */
+#ifndef ATTRIBUTE_COLD
+# if (GCC_VERSION >= 4003)
+#  define ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+#  define ATTRIBUTE_COLD
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_COLD */
+#ifndef ATTRIBUTE_HOT
+# if (GCC_VERSION >= 4003)
+#  define ATTRIBUTE_HOT __attribute__ ((__hot__))
+# else
+#  define ATTRIBUTE_HOT
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_HOT */
+
+/* We use __extension__ in some places to suppress -pedantic warnings
+   about GCC extensions.  This feature didn't work properly before
+   gcc 2.8.  */
+#if GCC_VERSION < 2008
+#define __extension__
+#endif
+
+#endif /* ansidecl.h   */
diff --git a/include/demangle.h b/include/demangle.h
new file mode 100644 (file)
index 0000000..b55226d
--- /dev/null
@@ -0,0 +1,579 @@
+/* Defs for interface to demanglers.
+   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
+   2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   In addition to the permissions in the GNU Library General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file into
+   combinations with other programs, and to distribute those
+   combinations without any restriction coming from the use of this
+   file.  (The Library Public License restrictions do apply in other
+   respects; for example, they cover modification of the file, and
+   distribution when not linked into a combined executable.)
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+
+#if !defined (DEMANGLE_H)
+#define DEMANGLE_H
+
+#include "libiberty.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Options passed to cplus_demangle (in 2nd parameter). */
+
+#define DMGL_NO_OPTS    0              /* For readability... */
+#define DMGL_PARAMS     (1 << 0)       /* Include function args */
+#define DMGL_ANSI       (1 << 1)       /* Include const, volatile, etc */
+#define DMGL_JAVA       (1 << 2)       /* Demangle as Java rather than C++. */
+#define DMGL_VERBOSE    (1 << 3)       /* Include implementation details.  */
+#define DMGL_TYPES      (1 << 4)       /* Also try to demangle type encodings.  */
+#define DMGL_RET_POSTFIX (1 << 5)       /* Print function return types (when
+                                           present) after function signature */
+
+#define DMGL_AUTO       (1 << 8)
+#define DMGL_GNU        (1 << 9)
+#define DMGL_LUCID      (1 << 10)
+#define DMGL_ARM        (1 << 11)
+#define DMGL_HP         (1 << 12)       /* For the HP aCC compiler;
+                                            same as ARM except for
+                                            template arguments, etc. */
+#define DMGL_EDG        (1 << 13)
+#define DMGL_GNU_V3     (1 << 14)
+#define DMGL_GNAT       (1 << 15)
+
+/* If none of these are set, use 'current_demangling_style' as the default. */
+#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT)
+
+/* Enumeration of possible demangling styles.
+
+   Lucid and ARM styles are still kept logically distinct, even though
+   they now both behave identically.  The resulting style is actual the
+   union of both.  I.E. either style recognizes both "__pt__" and "__rf__"
+   for operator "->", even though the first is lucid style and the second
+   is ARM style. (FIXME?) */
+
+extern enum demangling_styles
+{
+  no_demangling = -1,
+  unknown_demangling = 0,
+  auto_demangling = DMGL_AUTO,
+  gnu_demangling = DMGL_GNU,
+  lucid_demangling = DMGL_LUCID,
+  arm_demangling = DMGL_ARM,
+  hp_demangling = DMGL_HP,
+  edg_demangling = DMGL_EDG,
+  gnu_v3_demangling = DMGL_GNU_V3,
+  java_demangling = DMGL_JAVA,
+  gnat_demangling = DMGL_GNAT
+} current_demangling_style;
+
+/* Define string names for the various demangling styles. */
+
+#define NO_DEMANGLING_STYLE_STRING            "none"
+#define AUTO_DEMANGLING_STYLE_STRING         "auto"
+#define GNU_DEMANGLING_STYLE_STRING                  "gnu"
+#define LUCID_DEMANGLING_STYLE_STRING        "lucid"
+#define ARM_DEMANGLING_STYLE_STRING          "arm"
+#define HP_DEMANGLING_STYLE_STRING           "hp"
+#define EDG_DEMANGLING_STYLE_STRING          "edg"
+#define GNU_V3_DEMANGLING_STYLE_STRING        "gnu-v3"
+#define JAVA_DEMANGLING_STYLE_STRING          "java"
+#define GNAT_DEMANGLING_STYLE_STRING          "gnat"
+
+/* Some macros to test what demangling style is active. */
+
+#define CURRENT_DEMANGLING_STYLE current_demangling_style
+#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
+#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
+#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
+#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
+#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
+#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
+#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
+#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
+#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
+
+/* Provide information about the available demangle styles. This code is
+   pulled from gdb into libiberty because it is useful to binutils also.  */
+
+extern const struct demangler_engine
+{
+  const char *const demangling_style_name;
+  const enum demangling_styles demangling_style;
+  const char *const demangling_style_doc;
+} libiberty_demanglers[];
+
+extern char *
+cplus_demangle (const char *mangled, int options);
+
+extern int
+cplus_demangle_opname (const char *opname, char *result, int options);
+
+extern const char *
+cplus_mangle_opname (const char *opname, int options);
+
+/* Note: This sets global state.  FIXME if you care about multi-threading. */
+
+extern void
+set_cplus_marker_for_demangling (int ch);
+
+extern enum demangling_styles 
+cplus_demangle_set_style (enum demangling_styles style);
+
+extern enum demangling_styles 
+cplus_demangle_name_to_style (const char *name);
+
+/* Callback typedef for allocation-less demangler interfaces. */
+typedef void (*demangle_callbackref) (const char *, size_t, void *);
+
+/* V3 ABI demangling entry points, defined in cp-demangle.c.  Callback
+   variants return non-zero on success, zero on error.  char* variants
+   return a string allocated by malloc on success, NULL on error.  */
+extern int
+cplus_demangle_v3_callback (const char *mangled, int options,
+                            demangle_callbackref callback, void *opaque);
+
+extern char*
+cplus_demangle_v3 (const char *mangled, int options);
+
+extern int
+java_demangle_v3_callback (const char *mangled,
+                           demangle_callbackref callback, void *opaque);
+
+extern char*
+java_demangle_v3 (const char *mangled);
+
+enum gnu_v3_ctor_kinds {
+  gnu_v3_complete_object_ctor = 1,
+  gnu_v3_base_object_ctor,
+  gnu_v3_complete_object_allocating_ctor
+};
+
+/* Return non-zero iff NAME is the mangled form of a constructor name
+   in the G++ V3 ABI demangling style.  Specifically, return an `enum
+   gnu_v3_ctor_kinds' value indicating what kind of constructor
+   it is.  */
+extern enum gnu_v3_ctor_kinds
+       is_gnu_v3_mangled_ctor (const char *name);
+
+
+enum gnu_v3_dtor_kinds {
+  gnu_v3_deleting_dtor = 1,
+  gnu_v3_complete_object_dtor,
+  gnu_v3_base_object_dtor
+};
+
+/* Return non-zero iff NAME is the mangled form of a destructor name
+   in the G++ V3 ABI demangling style.  Specifically, return an `enum
+   gnu_v3_dtor_kinds' value, indicating what kind of destructor
+   it is.  */
+extern enum gnu_v3_dtor_kinds
+       is_gnu_v3_mangled_dtor (const char *name);
+
+/* The V3 demangler works in two passes.  The first pass builds a tree
+   representation of the mangled name, and the second pass turns the
+   tree representation into a demangled string.  Here we define an
+   interface to permit a caller to build their own tree
+   representation, which they can pass to the demangler to get a
+   demangled string.  This can be used to canonicalize user input into
+   something which the demangler might output.  It could also be used
+   by other demanglers in the future.  */
+
+/* These are the component types which may be found in the tree.  Many
+   component types have one or two subtrees, referred to as left and
+   right (a component type with only one subtree puts it in the left
+   subtree).  */
+
+enum demangle_component_type
+{
+  /* A name, with a length and a pointer to a string.  */
+  DEMANGLE_COMPONENT_NAME,
+  /* A qualified name.  The left subtree is a class or namespace or
+     some such thing, and the right subtree is a name qualified by
+     that class.  */
+  DEMANGLE_COMPONENT_QUAL_NAME,
+  /* A local name.  The left subtree describes a function, and the
+     right subtree is a name which is local to that function.  */
+  DEMANGLE_COMPONENT_LOCAL_NAME,
+  /* A typed name.  The left subtree is a name, and the right subtree
+     describes that name as a function.  */
+  DEMANGLE_COMPONENT_TYPED_NAME,
+  /* A template.  The left subtree is a template name, and the right
+     subtree is a template argument list.  */
+  DEMANGLE_COMPONENT_TEMPLATE,
+  /* A template parameter.  This holds a number, which is the template
+     parameter index.  */
+  DEMANGLE_COMPONENT_TEMPLATE_PARAM,
+  /* A constructor.  This holds a name and the kind of
+     constructor.  */
+  DEMANGLE_COMPONENT_CTOR,
+  /* A destructor.  This holds a name and the kind of destructor.  */
+  DEMANGLE_COMPONENT_DTOR,
+  /* A vtable.  This has one subtree, the type for which this is a
+     vtable.  */
+  DEMANGLE_COMPONENT_VTABLE,
+  /* A VTT structure.  This has one subtree, the type for which this
+     is a VTT.  */
+  DEMANGLE_COMPONENT_VTT,
+  /* A construction vtable.  The left subtree is the type for which
+     this is a vtable, and the right subtree is the derived type for
+     which this vtable is built.  */
+  DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
+  /* A typeinfo structure.  This has one subtree, the type for which
+     this is the tpeinfo structure.  */
+  DEMANGLE_COMPONENT_TYPEINFO,
+  /* A typeinfo name.  This has one subtree, the type for which this
+     is the typeinfo name.  */
+  DEMANGLE_COMPONENT_TYPEINFO_NAME,
+  /* A typeinfo function.  This has one subtree, the type for which
+     this is the tpyeinfo function.  */
+  DEMANGLE_COMPONENT_TYPEINFO_FN,
+  /* A thunk.  This has one subtree, the name for which this is a
+     thunk.  */
+  DEMANGLE_COMPONENT_THUNK,
+  /* A virtual thunk.  This has one subtree, the name for which this
+     is a virtual thunk.  */
+  DEMANGLE_COMPONENT_VIRTUAL_THUNK,
+  /* A covariant thunk.  This has one subtree, the name for which this
+     is a covariant thunk.  */
+  DEMANGLE_COMPONENT_COVARIANT_THUNK,
+  /* A Java class.  This has one subtree, the type.  */
+  DEMANGLE_COMPONENT_JAVA_CLASS,
+  /* A guard variable.  This has one subtree, the name for which this
+     is a guard variable.  */
+  DEMANGLE_COMPONENT_GUARD,
+  /* A reference temporary.  This has one subtree, the name for which
+     this is a temporary.  */
+  DEMANGLE_COMPONENT_REFTEMP,
+  /* A hidden alias.  This has one subtree, the encoding for which it
+     is providing alternative linkage.  */
+  DEMANGLE_COMPONENT_HIDDEN_ALIAS,
+  /* A standard substitution.  This holds the name of the
+     substitution.  */
+  DEMANGLE_COMPONENT_SUB_STD,
+  /* The restrict qualifier.  The one subtree is the type which is
+     being qualified.  */
+  DEMANGLE_COMPONENT_RESTRICT,
+  /* The volatile qualifier.  The one subtree is the type which is
+     being qualified.  */
+  DEMANGLE_COMPONENT_VOLATILE,
+  /* The const qualifier.  The one subtree is the type which is being
+     qualified.  */
+  DEMANGLE_COMPONENT_CONST,
+  /* The restrict qualifier modifying a member function.  The one
+     subtree is the type which is being qualified.  */
+  DEMANGLE_COMPONENT_RESTRICT_THIS,
+  /* The volatile qualifier modifying a member function.  The one
+     subtree is the type which is being qualified.  */
+  DEMANGLE_COMPONENT_VOLATILE_THIS,
+  /* The const qualifier modifying a member function.  The one subtree
+     is the type which is being qualified.  */
+  DEMANGLE_COMPONENT_CONST_THIS,
+  /* A vendor qualifier.  The left subtree is the type which is being
+     qualified, and the right subtree is the name of the
+     qualifier.  */
+  DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
+  /* A pointer.  The one subtree is the type which is being pointed
+     to.  */
+  DEMANGLE_COMPONENT_POINTER,
+  /* A reference.  The one subtree is the type which is being
+     referenced.  */
+  DEMANGLE_COMPONENT_REFERENCE,
+  /* C++0x: An rvalue reference.  The one subtree is the type which is
+     being referenced.  */
+  DEMANGLE_COMPONENT_RVALUE_REFERENCE,
+  /* A complex type.  The one subtree is the base type.  */
+  DEMANGLE_COMPONENT_COMPLEX,
+  /* An imaginary type.  The one subtree is the base type.  */
+  DEMANGLE_COMPONENT_IMAGINARY,
+  /* A builtin type.  This holds the builtin type information.  */
+  DEMANGLE_COMPONENT_BUILTIN_TYPE,
+  /* A vendor's builtin type.  This holds the name of the type.  */
+  DEMANGLE_COMPONENT_VENDOR_TYPE,
+  /* A function type.  The left subtree is the return type.  The right
+     subtree is a list of ARGLIST nodes.  Either or both may be
+     NULL.  */
+  DEMANGLE_COMPONENT_FUNCTION_TYPE,
+  /* An array type.  The left subtree is the dimension, which may be
+     NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an
+     expression.  The right subtree is the element type.  */
+  DEMANGLE_COMPONENT_ARRAY_TYPE,
+  /* A pointer to member type.  The left subtree is the class type,
+     and the right subtree is the member type.  CV-qualifiers appear
+     on the latter.  */
+  DEMANGLE_COMPONENT_PTRMEM_TYPE,
+  /* An argument list.  The left subtree is the current argument, and
+     the right subtree is either NULL or another ARGLIST node.  */
+  DEMANGLE_COMPONENT_ARGLIST,
+  /* A template argument list.  The left subtree is the current
+     template argument, and the right subtree is either NULL or
+     another TEMPLATE_ARGLIST node.  */
+  DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
+  /* An operator.  This holds information about a standard
+     operator.  */
+  DEMANGLE_COMPONENT_OPERATOR,
+  /* An extended operator.  This holds the number of arguments, and
+     the name of the extended operator.  */
+  DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
+  /* A typecast, represented as a unary operator.  The one subtree is
+     the type to which the argument should be cast.  */
+  DEMANGLE_COMPONENT_CAST,
+  /* A unary expression.  The left subtree is the operator, and the
+     right subtree is the single argument.  */
+  DEMANGLE_COMPONENT_UNARY,
+  /* A binary expression.  The left subtree is the operator, and the
+     right subtree is a BINARY_ARGS.  */
+  DEMANGLE_COMPONENT_BINARY,
+  /* Arguments to a binary expression.  The left subtree is the first
+     argument, and the right subtree is the second argument.  */
+  DEMANGLE_COMPONENT_BINARY_ARGS,
+  /* A trinary expression.  The left subtree is the operator, and the
+     right subtree is a TRINARY_ARG1.  */
+  DEMANGLE_COMPONENT_TRINARY,
+  /* Arguments to a trinary expression.  The left subtree is the first
+     argument, and the right subtree is a TRINARY_ARG2.  */
+  DEMANGLE_COMPONENT_TRINARY_ARG1,
+  /* More arguments to a trinary expression.  The left subtree is the
+     second argument, and the right subtree is the third argument.  */
+  DEMANGLE_COMPONENT_TRINARY_ARG2,
+  /* A literal.  The left subtree is the type, and the right subtree
+     is the value, represented as a DEMANGLE_COMPONENT_NAME.  */
+  DEMANGLE_COMPONENT_LITERAL,
+  /* A negative literal.  Like LITERAL, but the value is negated.
+     This is a minor hack: the NAME used for LITERAL points directly
+     to the mangled string, but since negative numbers are mangled
+     using 'n' instead of '-', we want a way to indicate a negative
+     number which involves neither modifying the mangled string nor
+     allocating a new copy of the literal in memory.  */
+  DEMANGLE_COMPONENT_LITERAL_NEG
+};
+
+/* Types which are only used internally.  */
+
+struct demangle_operator_info;
+struct demangle_builtin_type_info;
+
+/* A node in the tree representation is an instance of a struct
+   demangle_component.  Note that the field names of the struct are
+   not well protected against macros defined by the file including
+   this one.  We can fix this if it ever becomes a problem.  */
+
+struct demangle_component
+{
+  /* The type of this component.  */
+  enum demangle_component_type type;
+
+  union
+  {
+    /* For DEMANGLE_COMPONENT_NAME.  */
+    struct
+    {
+      /* A pointer to the name (which need not NULL terminated) and
+        its length.  */
+      const char *s;
+      int len;
+    } s_name;
+
+    /* For DEMANGLE_COMPONENT_OPERATOR.  */
+    struct
+    {
+      /* Operator.  */
+      const struct demangle_operator_info *op;
+    } s_operator;
+
+    /* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
+    struct
+    {
+      /* Number of arguments.  */
+      int args;
+      /* Name.  */
+      struct demangle_component *name;
+    } s_extended_operator;
+
+    /* For DEMANGLE_COMPONENT_CTOR.  */
+    struct
+    {
+      /* Kind of constructor.  */
+      enum gnu_v3_ctor_kinds kind;
+      /* Name.  */
+      struct demangle_component *name;
+    } s_ctor;
+
+    /* For DEMANGLE_COMPONENT_DTOR.  */
+    struct
+    {
+      /* Kind of destructor.  */
+      enum gnu_v3_dtor_kinds kind;
+      /* Name.  */
+      struct demangle_component *name;
+    } s_dtor;
+
+    /* For DEMANGLE_COMPONENT_BUILTIN_TYPE.  */
+    struct
+    {
+      /* Builtin type.  */
+      const struct demangle_builtin_type_info *type;
+    } s_builtin;
+
+    /* For DEMANGLE_COMPONENT_SUB_STD.  */
+    struct
+    {
+      /* Standard substitution string.  */
+      const char* string;
+      /* Length of string.  */
+      int len;
+    } s_string;
+
+    /* For DEMANGLE_COMPONENT_TEMPLATE_PARAM.  */
+    struct
+    {
+      /* Template parameter index.  */
+      long number;
+    } s_number;
+
+    /* For other types.  */
+    struct
+    {
+      /* Left (or only) subtree.  */
+      struct demangle_component *left;
+      /* Right subtree.  */
+      struct demangle_component *right;
+    } s_binary;
+
+  } u;
+};
+
+/* People building mangled trees are expected to allocate instances of
+   struct demangle_component themselves.  They can then call one of
+   the following functions to fill them in.  */
+
+/* Fill in most component types with a left subtree and a right
+   subtree.  Returns non-zero on success, zero on failure, such as an
+   unrecognized or inappropriate component type.  */
+
+extern int
+cplus_demangle_fill_component (struct demangle_component *fill,
+                               enum demangle_component_type,
+                               struct demangle_component *left,
+                               struct demangle_component *right);
+
+/* Fill in a DEMANGLE_COMPONENT_NAME.  Returns non-zero on success,
+   zero for bad arguments.  */
+
+extern int
+cplus_demangle_fill_name (struct demangle_component *fill,
+                          const char *, int);
+
+/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the
+   builtin type (e.g., "int", etc.).  Returns non-zero on success,
+   zero if the type is not recognized.  */
+
+extern int
+cplus_demangle_fill_builtin_type (struct demangle_component *fill,
+                                  const char *type_name);
+
+/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
+   operator and the number of arguments which it takes (the latter is
+   used to disambiguate operators which can be both binary and unary,
+   such as '-').  Returns non-zero on success, zero if the operator is
+   not recognized.  */
+
+extern int
+cplus_demangle_fill_operator (struct demangle_component *fill,
+                              const char *opname, int args);
+
+/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the
+   number of arguments and the name.  Returns non-zero on success,
+   zero for bad arguments.  */
+
+extern int
+cplus_demangle_fill_extended_operator (struct demangle_component *fill,
+                                       int numargs,
+                                       struct demangle_component *nm);
+
+/* Fill in a DEMANGLE_COMPONENT_CTOR.  Returns non-zero on success,
+   zero for bad arguments.  */
+
+extern int
+cplus_demangle_fill_ctor (struct demangle_component *fill,
+                          enum gnu_v3_ctor_kinds kind,
+                          struct demangle_component *name);
+
+/* Fill in a DEMANGLE_COMPONENT_DTOR.  Returns non-zero on success,
+   zero for bad arguments.  */
+
+extern int
+cplus_demangle_fill_dtor (struct demangle_component *fill,
+                          enum gnu_v3_dtor_kinds kind,
+                          struct demangle_component *name);
+
+/* This function translates a mangled name into a struct
+   demangle_component tree.  The first argument is the mangled name.
+   The second argument is DMGL_* options.  This returns a pointer to a
+   tree on success, or NULL on failure.  On success, the third
+   argument is set to a block of memory allocated by malloc.  This
+   block should be passed to free when the tree is no longer
+   needed.  */
+
+extern struct demangle_component *
+cplus_demangle_v3_components (const char *mangled, int options, void **mem);
+
+/* This function takes a struct demangle_component tree and returns
+   the corresponding demangled string.  The first argument is DMGL_*
+   options.  The second is the tree to demangle.  The third is a guess
+   at the length of the demangled string, used to initially allocate
+   the return buffer.  The fourth is a pointer to a size_t.  On
+   success, this function returns a buffer allocated by malloc(), and
+   sets the size_t pointed to by the fourth argument to the size of
+   the allocated buffer (not the length of the returned string).  On
+   failure, this function returns NULL, and sets the size_t pointed to
+   by the fourth argument to 0 for an invalid tree, or to 1 for a
+   memory allocation error.  */
+
+extern char *
+cplus_demangle_print (int options,
+                      const struct demangle_component *tree,
+                      int estimated_length,
+                      size_t *p_allocated_size);
+
+/* This function takes a struct demangle_component tree and passes back
+   a demangled string in one or more calls to a callback function.
+   The first argument is DMGL_* options.  The second is the tree to
+   demangle.  The third is a pointer to a callback function; on each call
+   this receives an element of the demangled string, its length, and an
+   opaque value.  The fourth is the opaque value passed to the callback.
+   The callback is called once or more to return the full demangled
+   string.  The demangled element string is always nul-terminated, though
+   its length is also provided for convenience.  In contrast to
+   cplus_demangle_print(), this function does not allocate heap memory
+   to grow output strings (except perhaps where alloca() is implemented
+   by malloc()), and so is normally safe for use where the heap has been
+   corrupted.  On success, this function returns 1; on failure, 0.  */
+
+extern int
+cplus_demangle_print_callback (int options,
+                               const struct demangle_component *tree,
+                               demangle_callbackref callback, void *opaque);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* DEMANGLE_H */
diff --git a/include/dyn-string.h b/include/dyn-string.h
new file mode 100644 (file)
index 0000000..44e33de
--- /dev/null
@@ -0,0 +1,60 @@
+/* An abstract string datatype.
+   Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+This file is part of GCC.
+   
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+
+typedef struct dyn_string
+{
+  int allocated;       /* The amount of space allocated for the string.  */
+  int length;          /* The actual length of the string.  */
+  char *s;             /* The string itself, NUL-terminated.  */
+}* dyn_string_t;
+
+/* The length STR, in bytes, not including the terminating NUL.  */
+#define dyn_string_length(STR)                                          \
+  ((STR)->length)
+
+/* The NTBS in which the contents of STR are stored.  */
+#define dyn_string_buf(STR)                                             \
+  ((STR)->s)
+
+/* Compare DS1 to DS2 with strcmp.  */
+#define dyn_string_compare(DS1, DS2)                                    \
+  (strcmp ((DS1)->s, (DS2)->s))
+
+
+extern int dyn_string_init (struct dyn_string *, int);
+extern dyn_string_t dyn_string_new (int);
+extern void dyn_string_delete (dyn_string_t);
+extern char *dyn_string_release (dyn_string_t);
+extern dyn_string_t dyn_string_resize (dyn_string_t, int);
+extern void dyn_string_clear (dyn_string_t);
+extern int dyn_string_copy (dyn_string_t, dyn_string_t);
+extern int dyn_string_copy_cstr (dyn_string_t, const char *);
+extern int dyn_string_prepend (dyn_string_t, dyn_string_t);
+extern int dyn_string_prepend_cstr (dyn_string_t, const char *);
+extern int dyn_string_insert (dyn_string_t, int, dyn_string_t);
+extern int dyn_string_insert_cstr (dyn_string_t, int, const char *);
+extern int dyn_string_insert_char (dyn_string_t, int, int);
+extern int dyn_string_append (dyn_string_t, dyn_string_t);
+extern int dyn_string_append_cstr (dyn_string_t, const char *);
+extern int dyn_string_append_char (dyn_string_t, int);
+extern int dyn_string_substring (dyn_string_t,  dyn_string_t, int, int);
+extern int dyn_string_eq (dyn_string_t, dyn_string_t);
diff --git a/include/fibheap.h b/include/fibheap.h
new file mode 100644 (file)
index 0000000..348c4ae
--- /dev/null
@@ -0,0 +1,86 @@
+/* A Fibonacci heap datatype.
+   Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Contributed by Daniel Berlin (dan@cgsoftware.com).
+
+This file is part of GCC.
+   
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* Fibonacci heaps are somewhat complex, but, there's an article in
+   DDJ that explains them pretty well:
+
+   http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
+
+   Introduction to algorithms by Corman and Rivest also goes over them.
+
+   The original paper that introduced them is "Fibonacci heaps and their
+   uses in improved network optimization algorithms" by Tarjan and
+   Fredman (JACM 34(3), July 1987).
+
+   Amortized and real worst case time for operations:
+
+   ExtractMin: O(lg n) amortized. O(n) worst case.
+   DecreaseKey: O(1) amortized.  O(lg n) worst case. 
+   Insert: O(2) amortized. O(1) actual.  
+   Union: O(1) amortized. O(1) actual.  */
+
+#ifndef _FIBHEAP_H_
+#define _FIBHEAP_H_
+
+#include "ansidecl.h"
+
+typedef long fibheapkey_t;
+
+typedef struct fibheap
+{
+  size_t nodes;
+  struct fibnode *min;
+  struct fibnode *root;
+} *fibheap_t;
+
+typedef struct fibnode
+{
+  struct fibnode *parent;
+  struct fibnode *child;
+  struct fibnode *left;
+  struct fibnode *right;
+  fibheapkey_t key;
+  void *data;
+#if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4)
+  __extension__ unsigned long int degree : 31;
+  __extension__ unsigned long int mark : 1;
+#else
+  unsigned int degree : 31;
+  unsigned int mark : 1;
+#endif
+} *fibnode_t;
+
+extern fibheap_t fibheap_new (void);
+extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *);
+extern int fibheap_empty (fibheap_t);
+extern fibheapkey_t fibheap_min_key (fibheap_t);
+extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t,
+                                         fibheapkey_t);
+extern void *fibheap_replace_key_data (fibheap_t, fibnode_t,
+                                       fibheapkey_t, void *);
+extern void *fibheap_extract_min (fibheap_t);
+extern void *fibheap_min (fibheap_t);
+extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *);
+extern void *fibheap_delete_node (fibheap_t, fibnode_t);
+extern void fibheap_delete (fibheap_t);
+extern fibheap_t fibheap_union (fibheap_t, fibheap_t);
+
+#endif /* _FIBHEAP_H_ */
diff --git a/include/filenames.h b/include/filenames.h
new file mode 100644 (file)
index 0000000..5338208
--- /dev/null
@@ -0,0 +1,52 @@
+/* Macros for taking apart, interpreting and processing file names.
+
+   These are here because some non-Posix (a.k.a. DOSish) systems have
+   drive letter brain-damage at the beginning of an absolute file name,
+   use forward- and back-slash in path names interchangeably, and
+   some of them have case-insensitive file names.
+
+   Copyright 2000, 2001, 2007 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef FILENAMES_H
+#define FILENAMES_H
+
+#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
+
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+#define HAVE_DOS_BASED_FILE_SYSTEM 1
+#endif
+
+#define IS_DIR_SEPARATOR(c)    ((c) == '/' || (c) == '\\')
+/* Note that IS_ABSOLUTE_PATH accepts d:foo as well, although it is
+   only semi-absolute.  This is because the users of IS_ABSOLUTE_PATH
+   want to know whether to prepend the current working directory to
+   a file name, which should not be done with a name like d:foo.  */
+#define IS_ABSOLUTE_PATH(f)    (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':')))
+
+#else  /* not DOSish */
+
+#define IS_DIR_SEPARATOR(c)    ((c) == '/')
+#define IS_ABSOLUTE_PATH(f)    (IS_DIR_SEPARATOR((f)[0]))
+
+#endif /* not DOSish */
+
+extern int filename_cmp (const char *s1, const char *s2);
+#define FILENAME_CMP(s1, s2)   filename_cmp(s1, s2)
+
+#endif /* FILENAMES_H */
diff --git a/include/floatformat.h b/include/floatformat.h
new file mode 100644 (file)
index 0000000..c5f60a3
--- /dev/null
@@ -0,0 +1,149 @@
+/* IEEE floating point support declarations, for GDB, the GNU Debugger.
+   Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005
+   Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if !defined (FLOATFORMAT_H)
+#define FLOATFORMAT_H 1
+
+#include "ansidecl.h"
+
+/* A floatformat consists of a sign bit, an exponent and a mantissa.  Once the
+   bytes are concatenated according to the byteorder flag, then each of those
+   fields is contiguous.  We number the bits with 0 being the most significant
+   (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
+   contains with the *_start and *_len fields.  */
+
+/* What is the order of the bytes?  */
+
+enum floatformat_byteorders {
+  /* Standard little endian byte order.
+     EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
+  floatformat_little,
+
+  /* Standard big endian byte order.
+     EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
+  floatformat_big,
+
+  /* Little endian byte order but big endian word order.
+     EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
+  floatformat_littlebyte_bigword,
+
+  /* VAX byte order.  Little endian byte order with 16-bit words.  The
+     following example is an illustration of the byte order only; VAX
+     doesn't have a fully IEEE compliant floating-point format.
+     EX: 1.2345678e10 => 80 c5 00 00 06 42 e0 fe */
+  floatformat_vax
+};
+
+enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
+
+struct floatformat
+{
+  enum floatformat_byteorders byteorder;
+  unsigned int totalsize;      /* Total size of number in bits */
+
+  /* Sign bit is always one bit long.  1 means negative, 0 means positive.  */
+  unsigned int sign_start;
+
+  unsigned int exp_start;
+  unsigned int exp_len;
+  /* Bias added to a "true" exponent to form the biased exponent.  It
+     is intentionally signed as, otherwize, -exp_bias can turn into a
+     very large number (e.g., given the exp_bias of 0x3fff and a 64
+     bit long, the equation (long)(1 - exp_bias) evaluates to
+     4294950914) instead of -16382).  */
+  int exp_bias;
+  /* Exponent value which indicates NaN.  This is the actual value stored in
+     the float, not adjusted by the exp_bias.  This usually consists of all
+     one bits.  */
+  unsigned int exp_nan;
+
+  unsigned int man_start;
+  unsigned int man_len;
+
+  /* Is the integer bit explicit or implicit?  */
+  enum floatformat_intbit intbit;
+
+  /* Internal name for debugging. */
+  const char *name;
+
+  /* Validator method.  */
+  int (*is_valid) (const struct floatformat *fmt, const void *from);
+
+  /* Is the format actually the sum of two smaller floating point
+     formats (IBM long double, as described in
+     gcc/config/rs6000/darwin-ldouble-format)?  If so, this is the
+     smaller format in question, and the fields sign_start through
+     intbit describe the first half.  If not, this is NULL.  */
+  const struct floatformat *split_half;
+};
+
+/* floatformats for IEEE single and double, big and little endian.  */
+
+extern const struct floatformat floatformat_ieee_single_big;
+extern const struct floatformat floatformat_ieee_single_little;
+extern const struct floatformat floatformat_ieee_double_big;
+extern const struct floatformat floatformat_ieee_double_little;
+
+/* floatformat for ARM IEEE double, little endian bytes and big endian words */
+
+extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
+
+/* floatformats for VAX.  */
+
+extern const struct floatformat floatformat_vax_f;
+extern const struct floatformat floatformat_vax_d;
+extern const struct floatformat floatformat_vax_g;
+
+/* floatformats for various extendeds.  */
+
+extern const struct floatformat floatformat_i387_ext;
+extern const struct floatformat floatformat_m68881_ext;
+extern const struct floatformat floatformat_i960_ext;
+extern const struct floatformat floatformat_m88110_ext;
+extern const struct floatformat floatformat_m88110_harris_ext;
+extern const struct floatformat floatformat_arm_ext_big;
+extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
+/* IA-64 Floating Point register spilt into memory.  */
+extern const struct floatformat floatformat_ia64_spill_big;
+extern const struct floatformat floatformat_ia64_spill_little;
+extern const struct floatformat floatformat_ia64_quad_big;
+extern const struct floatformat floatformat_ia64_quad_little;
+/* IBM long double (double+double).  */
+extern const struct floatformat floatformat_ibm_long_double;
+
+/* Convert from FMT to a double.
+   FROM is the address of the extended float.
+   Store the double in *TO.  */
+
+extern void
+floatformat_to_double (const struct floatformat *, const void *, double *);
+
+/* The converse: convert the double *FROM to FMT
+   and store where TO points.  */
+
+extern void
+floatformat_from_double (const struct floatformat *, const double *, void *);
+
+/* Return non-zero iff the data at FROM is a valid number in format FMT.  */
+
+extern int
+floatformat_is_valid (const struct floatformat *fmt, const void *from);
+
+#endif /* defined (FLOATFORMAT_H) */
diff --git a/include/fnmatch.h b/include/fnmatch.h
new file mode 100644 (file)
index 0000000..5b9953c
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
+
+NOTE: The canonical source of this file is maintained with the GNU C Library.
+Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifndef        _FNMATCH_H
+
+#define        _FNMATCH_H      1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
+#undef __P
+#define        __P(args)       args
+#else /* Not C++ or ANSI C.  */
+#undef __P
+#define        __P(args)       ()
+/* We can get away without defining `const' here only because in this file
+   it is used only inside the prototype for `fnmatch', which is elided in
+   non-ANSI C where `const' is problematical.  */
+#endif /* C++ or ANSI C.  */
+
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef FNM_PATHNAME
+#undef FNM_NOESCAPE
+#undef FNM_PERIOD
+
+/* Bits set in the FLAGS argument to `fnmatch'.  */
+#define        FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
+#define        FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define        FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
+
+#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE)
+#define        FNM_FILE_NAME   FNM_PATHNAME /* Preferred GNU name.  */
+#define        FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match.  */
+#define        FNM_CASEFOLD    (1 << 4) /* Compare without regard to case.  */
+#endif
+
+/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
+#define        FNM_NOMATCH     1
+
+/* Match STRING against the filename pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch __P ((const char *__pattern, const char *__string,
+                        int __flags));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/include/getopt.h b/include/getopt.h
new file mode 100644 (file)
index 0000000..5421cab
--- /dev/null
@@ -0,0 +1,144 @@
+/* Declarations for getopt.
+   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000,
+   2002 Free Software Foundation, Inc.
+
+   NOTE: The canonical source of this file is maintained with the GNU C Library.
+   Bugs can be reported to bug-glibc@gnu.org.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument         (or 0) if the option does not take an argument,
+   required_argument   (or 1) if the option requires an argument,
+   optional_argument   (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+#if defined (__STDC__) && __STDC__
+  const char *name;
+#else
+  char *name;
+#endif
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+#define        no_argument             0
+#define required_argument      1
+#define optional_argument      2
+
+#if defined (__STDC__) && __STDC__
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if !HAVE_DECL_GETOPT
+#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT)
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in unistd.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int argc, char *const *argv, const char *shortopts);
+#else
+#ifndef __cplusplus
+extern int getopt ();
+#endif /* __cplusplus */
+#endif
+#endif /* !HAVE_DECL_GETOPT */
+
+extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+                       const struct option *longopts, int *longind);
+extern int getopt_long_only (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind);
+
+/* Internal only.  Users should not call this directly.  */
+extern int _getopt_internal (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind,
+                            int long_only);
+#else /* not __STDC__ */
+extern int getopt ();
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* getopt.h */
diff --git a/include/hashtab.h b/include/hashtab.h
new file mode 100644 (file)
index 0000000..77eee14
--- /dev/null
@@ -0,0 +1,206 @@
+/* An expandable hash tables datatype.  
+   Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov (vmakarov@cygnus.com).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This package implements basic hash table functionality.  It is possible
+   to search for an entry, create an entry and destroy an entry.
+
+   Elements in the table are generic pointers.
+
+   The size of the table is not fixed; if the occupancy of the table
+   grows too high the hash table will be expanded.
+
+   The abstract data implementation is based on generalized Algorithm D
+   from Knuth's book "The art of computer programming".  Hash table is
+   expanded by creation of new hash table and transferring elements from
+   the old table to the new table.  */
+
+#ifndef __HASHTAB_H__
+#define __HASHTAB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+
+#ifndef GTY
+#define GTY(X)
+#endif
+
+/* The type for a hash code.  */
+typedef unsigned int hashval_t;
+
+/* Callback function pointer types.  */
+
+/* Calculate hash of a table entry.  */
+typedef hashval_t (*htab_hash) (const void *);
+
+/* Compare a table entry with a possible entry.  The entry already in
+   the table always comes first, so the second element can be of a
+   different type (but in this case htab_find and htab_find_slot
+   cannot be used; instead the variants that accept a hash value
+   must be used).  */
+typedef int (*htab_eq) (const void *, const void *);
+
+/* Cleanup function called whenever a live element is removed from
+   the hash table.  */
+typedef void (*htab_del) (void *);
+  
+/* Function called by htab_traverse for each live element.  The first
+   arg is the slot of the element (which can be passed to htab_clear_slot
+   if desired), the second arg is the auxiliary pointer handed to
+   htab_traverse.  Return 1 to continue scan, 0 to stop.  */
+typedef int (*htab_trav) (void **, void *);
+
+/* Memory-allocation function, with the same functionality as calloc().
+   Iff it returns NULL, the hash table implementation will pass an error
+   code back to the user, so if your code doesn't handle errors,
+   best if you use xcalloc instead.  */
+typedef void *(*htab_alloc) (size_t, size_t);
+
+/* We also need a free() routine.  */
+typedef void (*htab_free) (void *);
+
+/* Memory allocation and deallocation; variants which take an extra
+   argument.  */
+typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
+typedef void (*htab_free_with_arg) (void *, void *);
+
+/* This macro defines reserved value for empty table entry.  */
+
+#define HTAB_EMPTY_ENTRY    ((PTR) 0)
+
+/* This macro defines reserved value for table entry which contained
+   a deleted element. */
+
+#define HTAB_DELETED_ENTRY  ((PTR) 1)
+
+/* Hash tables are of the following type.  The structure
+   (implementation) of this type is not needed for using the hash
+   tables.  All work with hash table should be executed only through
+   functions mentioned below.  The size of this structure is subject to
+   change.  */
+
+struct htab GTY(())
+{
+  /* Pointer to hash function.  */
+  htab_hash hash_f;
+
+  /* Pointer to comparison function.  */
+  htab_eq eq_f;
+
+  /* Pointer to cleanup function.  */
+  htab_del del_f;
+
+  /* Table itself.  */
+  void ** GTY ((use_param, length ("%h.size"))) entries;
+
+  /* Current size (in entries) of the hash table.  */
+  size_t size;
+
+  /* Current number of elements including also deleted elements.  */
+  size_t n_elements;
+
+  /* Current number of deleted elements in the table.  */
+  size_t n_deleted;
+
+  /* The following member is used for debugging. Its value is number
+     of all calls of `htab_find_slot' for the hash table. */
+  unsigned int searches;
+
+  /* The following member is used for debugging.  Its value is number
+     of collisions fixed for time of work with the hash table. */
+  unsigned int collisions;
+
+  /* Pointers to allocate/free functions.  */
+  htab_alloc alloc_f;
+  htab_free free_f;
+
+  /* Alternate allocate/free functions, which take an extra argument.  */
+  void * GTY((skip)) alloc_arg;
+  htab_alloc_with_arg alloc_with_arg_f;
+  htab_free_with_arg free_with_arg_f;
+
+  /* Current size (in entries) of the hash table, as an index into the
+     table of primes.  */
+  unsigned int size_prime_index;
+};
+
+typedef struct htab *htab_t;
+
+/* An enum saying whether we insert into the hash table or not.  */
+enum insert_option {NO_INSERT, INSERT};
+
+/* The prototypes of the package functions. */
+
+extern htab_t  htab_create_alloc  (size_t, htab_hash,
+                                    htab_eq, htab_del,
+                                    htab_alloc, htab_free);
+
+extern htab_t  htab_create_alloc_ex (size_t, htab_hash,
+                                      htab_eq, htab_del,
+                                      void *, htab_alloc_with_arg,
+                                      htab_free_with_arg);
+
+/* Backward-compatibility functions.  */
+extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
+extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
+
+extern void    htab_set_functions_ex (htab_t, htab_hash,
+                                       htab_eq, htab_del,
+                                       void *, htab_alloc_with_arg,
+                                       htab_free_with_arg);
+
+extern void    htab_delete (htab_t);
+extern void    htab_empty (htab_t);
+
+extern void *  htab_find (htab_t, const void *);
+extern void ** htab_find_slot (htab_t, const void *, enum insert_option);
+extern void *  htab_find_with_hash (htab_t, const void *, hashval_t);
+extern void ** htab_find_slot_with_hash (htab_t, const void *,
+                                         hashval_t, enum insert_option);
+extern void    htab_clear_slot (htab_t, void **);
+extern void    htab_remove_elt (htab_t, void *);
+extern void    htab_remove_elt_with_hash (htab_t, void *, hashval_t);
+
+extern void    htab_traverse (htab_t, htab_trav, void *);
+extern void    htab_traverse_noresize (htab_t, htab_trav, void *);
+
+extern size_t  htab_size (htab_t);
+extern size_t  htab_elements (htab_t);
+extern double  htab_collisions (htab_t);
+
+/* A hash function for pointers.  */
+extern htab_hash htab_hash_pointer;
+
+/* An equality function for pointers.  */
+extern htab_eq htab_eq_pointer;
+
+/* A hash function for null-terminated strings.  */
+extern hashval_t htab_hash_string (const void *);
+
+/* An iterative hash function for arbitrary data.  */
+extern hashval_t iterative_hash (const void *, size_t, hashval_t);
+/* Shorthand for hashing something with an intrinsic size.  */
+#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __HASHTAB_H */
diff --git a/include/libiberty.h b/include/libiberty.h
new file mode 100644 (file)
index 0000000..6ea8761
--- /dev/null
@@ -0,0 +1,654 @@
+/* Function declarations for libiberty.
+
+   Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
+   
+   Note - certain prototypes declared in this header file are for
+   functions whoes implementation copyright does not belong to the
+   FSF.  Those prototypes are present in this file for reference
+   purposes only and their presence in this file should not construed
+   as an indication of ownership by the FSF of the implementation of
+   those functions in any way or form whatsoever.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.
+   
+   Written by Cygnus Support, 1994.
+
+   The libiberty library provides a number of functions which are
+   missing on some operating systems.  We do not declare those here,
+   to avoid conflicts with the system header files on operating
+   systems that do support those functions.  In this file we only
+   declare those functions which are specific to libiberty.  */
+
+#ifndef LIBIBERTY_H
+#define LIBIBERTY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ansidecl.h"
+
+/* Get a definition for size_t.  */
+#include <stddef.h>
+/* Get a definition for va_list.  */
+#include <stdarg.h>
+
+#include <stdio.h>
+
+/* If the OS supports it, ensure that the supplied stream is setup to
+   avoid any multi-threaded locking.  Otherwise leave the FILE pointer
+   unchanged.  If the stream is NULL do nothing.  */
+
+extern void unlock_stream (FILE *);
+
+/* If the OS supports it, ensure that the standard I/O streams, stdin,
+   stdout and stderr are setup to avoid any multi-threaded locking.
+   Otherwise do nothing.  */
+
+extern void unlock_std_streams (void);
+
+/* Open and return a FILE pointer.  If the OS supports it, ensure that
+   the stream is setup to avoid any multi-threaded locking.  Otherwise
+   return the FILE pointer unchanged.  */
+
+extern FILE *fopen_unlocked (const char *, const char *);
+extern FILE *fdopen_unlocked (int, const char *);
+extern FILE *freopen_unlocked (const char *, const char *, FILE *);
+
+/* Build an argument vector from a string.  Allocates memory using
+   malloc.  Use freeargv to free the vector.  */
+
+extern char **buildargv (const char *) ATTRIBUTE_MALLOC;
+
+/* Free a vector returned by buildargv.  */
+
+extern void freeargv (char **);
+
+/* Duplicate an argument vector. Allocates memory using malloc.  Use
+   freeargv to free the vector.  */
+
+extern char **dupargv (char **) ATTRIBUTE_MALLOC;
+
+/* Expand "@file" arguments in argv.  */
+
+extern void expandargv PARAMS ((int *, char ***));
+
+/* Write argv to an @-file, inserting necessary quoting.  */
+
+extern int writeargv PARAMS ((char **, FILE *));
+
+/* Return the last component of a path name.  Note that we can't use a
+   prototype here because the parameter is declared inconsistently
+   across different systems, sometimes as "char *" and sometimes as
+   "const char *" */
+
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if !HAVE_DECL_BASENAME
+#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME)
+extern char *basename (const char *);
+#else
+/* Do not allow basename to be used if there is no prototype seen.  We
+   either need to use the above prototype or have one from
+   autoconf which would result in HAVE_DECL_BASENAME being set.  */
+#define basename basename_cannot_be_used_without_a_prototype
+#endif
+#endif
+
+/* A well-defined basename () that is always compiled in.  */
+
+extern const char *lbasename (const char *);
+
+/* A well-defined realpath () that is always compiled in.  */
+
+extern char *lrealpath (const char *);
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using xmalloc.  */
+
+extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using xmalloc.  The first argument is
+   not one of the strings to be concatenated, but if not NULL is a
+   pointer to be freed after the new string is created, similar to the
+   way xrealloc works.  */
+
+extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL;
+
+/* Determine the length of concatenating an arbitrary number of
+   strings.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  */
+
+extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings into a SUPPLIED area of
+   memory.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  The supplied memory is assumed
+   to be large enough.  */
+
+extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings into a GLOBAL area of
+   memory.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  The supplied memory is assumed
+   to be large enough.  */
+
+extern char *concat_copy2 (const char *, ...) ATTRIBUTE_SENTINEL;
+
+/* This is the global area used by concat_copy2.  */
+
+extern char *libiberty_concat_ptr;
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using alloca.  The arguments are
+   evaluated twice!  */
+#define ACONCAT(ACONCAT_PARAMS) \
+  (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \
+   concat_copy2 ACONCAT_PARAMS)
+
+/* Check whether two file descriptors refer to the same file.  */
+
+extern int fdmatch (int fd1, int fd2);
+
+/* Return the position of the first bit set in the argument.  */
+/* Prototypes vary from system to system, so we only provide a
+   prototype on systems where we know that we need it.  */
+#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS
+extern int ffs(int);
+#endif
+
+/* Get the working directory.  The result is cached, so don't call
+   chdir() between calls to getpwd().  */
+
+extern char * getpwd (void);
+
+/* Get the current time.  */
+/* Prototypes vary from system to system, so we only provide a
+   prototype on systems where we know that we need it.  */
+#ifdef __MINGW32__
+/* Forward declaration to avoid #include <sys/time.h>.   */
+struct timeval;
+extern int gettimeofday (struct timeval *, void *); 
+#endif
+
+/* Get the amount of time the process has run, in microseconds.  */
+
+extern long get_run_time (void);
+
+/* Generate a relocated path to some installation directory.  Allocates
+   return value using malloc.  */
+
+extern char *make_relative_prefix (const char *, const char *,
+                                   const char *) ATTRIBUTE_MALLOC;
+
+/* Generate a relocated path to some installation directory without
+   attempting to follow any soft links.  Allocates
+   return value using malloc.  */
+
+extern char *make_relative_prefix_ignore_links (const char *, const char *,
+                                               const char *) ATTRIBUTE_MALLOC;
+
+/* Choose a temporary directory to use for scratch files.  */
+
+extern char *choose_temp_base (void) ATTRIBUTE_MALLOC;
+
+/* Return a temporary file name or NULL if unable to create one.  */
+
+extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC;
+
+/* Remove a link to a file unless it is special. */
+
+extern int unlink_if_ordinary (const char *);
+
+/* Allocate memory filled with spaces.  Allocates using malloc.  */
+
+extern const char *spaces (int count);
+
+/* Return the maximum error number for which strerror will return a
+   string.  */
+
+extern int errno_max (void);
+
+/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
+   "EINVAL").  */
+
+extern const char *strerrno (int);
+
+/* Given the name of an errno value, return the value.  */
+
+extern int strtoerrno (const char *);
+
+/* ANSI's strerror(), but more robust.  */
+
+extern char *xstrerror (int);
+
+/* Return the maximum signal number for which strsignal will return a
+   string.  */
+
+extern int signo_max (void);
+
+/* Return a signal message string for a signal number
+   (e.g., strsignal (SIGHUP) returns something like "Hangup").  */
+/* This is commented out as it can conflict with one in system headers.
+   We still document its existence though.  */
+
+/*extern const char *strsignal (int);*/
+
+/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
+   "SIGHUP").  */
+
+extern const char *strsigno (int);
+
+/* Given the name of a signal, return its number.  */
+
+extern int strtosigno (const char *);
+
+/* Register a function to be run by xexit.  Returns 0 on success.  */
+
+extern int xatexit (void (*fn) (void));
+
+/* Exit, calling all the functions registered with xatexit.  */
+
+extern void xexit (int status) ATTRIBUTE_NORETURN;
+
+/* Set the program name used by xmalloc.  */
+
+extern void xmalloc_set_program_name (const char *);
+
+/* Report an allocation failure.  */
+extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN;
+
+/* Allocate memory without fail.  If malloc fails, this will print a
+   message to stderr (using the name set by xmalloc_set_program_name,
+   if any) and then call xexit.  */
+
+extern void *xmalloc (size_t) ATTRIBUTE_MALLOC;
+
+/* Reallocate memory without fail.  This works like xmalloc.  Note,
+   realloc type functions are not suitable for attribute malloc since
+   they may return the same address across multiple calls. */
+
+extern void *xrealloc (void *, size_t);
+
+/* Allocate memory without fail and set it to zero.  This works like
+   xmalloc.  */
+
+extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC;
+
+/* Copy a string into a memory buffer without fail.  */
+
+extern char *xstrdup (const char *) ATTRIBUTE_MALLOC;
+
+/* Copy at most N characters from string into a buffer without fail.  */
+
+extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC;
+
+/* Copy an existing memory buffer to a new memory buffer without fail.  */
+
+extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC;
+
+/* Physical memory routines.  Return values are in BYTES.  */
+extern double physmem_total (void);
+extern double physmem_available (void);
+
+
+/* These macros provide a K&R/C89/C++-friendly way of allocating structures
+   with nice encapsulation.  The XDELETE*() macros are technically
+   superfluous, but provided here for symmetry.  Using them consistently
+   makes it easier to update client code to use different allocators such
+   as new/delete and new[]/delete[].  */
+
+/* Scalar allocators.  */
+
+#define XNEW(T)                        ((T *) xmalloc (sizeof (T)))
+#define XCNEW(T)               ((T *) xcalloc (1, sizeof (T)))
+#define XDELETE(P)             free ((void*) (P))
+
+/* Array allocators.  */
+
+#define XNEWVEC(T, N)          ((T *) xmalloc (sizeof (T) * (N)))
+#define XCNEWVEC(T, N)         ((T *) xcalloc ((N), sizeof (T)))
+#define XRESIZEVEC(T, P, N)    ((T *) xrealloc ((void *) (P), sizeof (T) * (N)))
+#define XDELETEVEC(P)          free ((void*) (P))
+
+/* Allocators for variable-sized structures and raw buffers.  */
+
+#define XNEWVAR(T, S)          ((T *) xmalloc ((S)))
+#define XCNEWVAR(T, S)         ((T *) xcalloc (1, (S)))
+#define XRESIZEVAR(T, P, S)    ((T *) xrealloc ((P), (S)))
+
+/* Type-safe obstack allocator.  */
+
+#define XOBNEW(O, T)           ((T *) obstack_alloc ((O), sizeof (T)))
+#define XOBFINISH(O, T)         ((T) obstack_finish ((O)))
+
+/* hex character manipulation routines */
+
+#define _hex_array_size 256
+#define _hex_bad       99
+extern const unsigned char _hex_value[_hex_array_size];
+extern void hex_init (void);
+#define hex_p(c)       (hex_value (c) != _hex_bad)
+/* If you change this, note well: Some code relies on side effects in
+   the argument being performed exactly once.  */
+#define hex_value(c)   ((unsigned int) _hex_value[(unsigned char) (c)])
+
+/* Flags for pex_init.  These are bits to be or'ed together.  */
+
+/* Record subprocess times, if possible.  */
+#define PEX_RECORD_TIMES       0x1
+
+/* Use pipes for communication between processes, if possible.  */
+#define PEX_USE_PIPES          0x2
+
+/* Save files used for communication between processes.  */
+#define PEX_SAVE_TEMPS         0x4
+
+/* Prepare to execute one or more programs, with standard output of
+   each program fed to standard input of the next.
+   FLAGS       As above.
+   PNAME       The name of the program to report in error messages.
+   TEMPBASE    A base name to use for temporary files; may be NULL to
+               use a random name.
+   Returns NULL on error.  */
+
+extern struct pex_obj *pex_init (int flags, const char *pname,
+                                const char *tempbase);
+
+/* Flags for pex_run.  These are bits to be or'ed together.  */
+
+/* Last program in pipeline.  Standard output of program goes to
+   OUTNAME, or, if OUTNAME is NULL, to standard output of caller.  Do
+   not set this if you want to call pex_read_output.  After this is
+   set, pex_run may no longer be called with the same struct
+   pex_obj.  */
+#define PEX_LAST               0x1
+
+/* Search for program in executable search path.  */
+#define PEX_SEARCH             0x2
+
+/* OUTNAME is a suffix.  */
+#define PEX_SUFFIX             0x4
+
+/* Send program's standard error to standard output.  */
+#define PEX_STDERR_TO_STDOUT   0x8
+
+/* Input file should be opened in binary mode.  This flag is ignored
+   on Unix.  */
+#define PEX_BINARY_INPUT       0x10
+
+/* Output file should be opened in binary mode.  This flag is ignored
+   on Unix.  For proper behaviour PEX_BINARY_INPUT and
+   PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using
+   PEX_BINARY_OUTPUT should be followed by a call using
+   PEX_BINARY_INPUT.  */
+#define PEX_BINARY_OUTPUT      0x20
+
+/* Capture stderr to a pipe.  The output can be read by
+   calling pex_read_err and reading from the returned
+   FILE object.  This flag may be specified only for
+   the last program in a pipeline.  
+
+   This flag is supported only on Unix and Windows.  */
+#define PEX_STDERR_TO_PIPE     0x40
+
+/* Capture stderr in binary mode.  This flag is ignored
+   on Unix.  */
+#define PEX_BINARY_ERROR       0x80
+
+
+/* Execute one program.  Returns NULL on success.  On error returns an
+   error string (typically just the name of a system call); the error
+   string is statically allocated.
+
+   OBJ         Returned by pex_init.
+
+   FLAGS       As above.
+
+   EXECUTABLE  The program to execute.
+
+   ARGV                NULL terminated array of arguments to pass to the program.
+
+   OUTNAME     Sets the output file name as follows:
+
+               PEX_SUFFIX set (OUTNAME may not be NULL):
+                 TEMPBASE parameter to pex_init not NULL:
+                   Output file name is the concatenation of TEMPBASE
+                   and OUTNAME.
+                 TEMPBASE is NULL:
+                   Output file name is a random file name ending in
+                   OUTNAME.
+               PEX_SUFFIX not set:
+                 OUTNAME not NULL:
+                   Output file name is OUTNAME.
+                 OUTNAME NULL, TEMPBASE not NULL:
+                   Output file name is randomly chosen using
+                   TEMPBASE.
+                 OUTNAME NULL, TEMPBASE NULL:
+                   Output file name is randomly chosen.
+
+               If PEX_LAST is not set, the output file name is the
+               name to use for a temporary file holding stdout, if
+               any (there will not be a file if PEX_USE_PIPES is set
+               and the system supports pipes).  If a file is used, it
+               will be removed when no longer needed unless
+               PEX_SAVE_TEMPS is set.
+
+               If PEX_LAST is set, and OUTNAME is not NULL, standard
+               output is written to the output file name.  The file
+               will not be removed.  If PEX_LAST and PEX_SUFFIX are
+               both set, TEMPBASE may not be NULL.
+
+   ERRNAME     If not NULL, this is the name of a file to which
+               standard error is written.  If NULL, standard error of
+               the program is standard error of the caller.
+
+   ERR         On an error return, *ERR is set to an errno value, or
+               to 0 if there is no relevant errno.
+*/
+
+extern const char *pex_run (struct pex_obj *obj, int flags,
+                           const char *executable, char * const *argv,
+                           const char *outname, const char *errname,
+                           int *err);
+
+/* As for pex_run (), but takes an extra parameter to enable the
+   environment for the child process to be specified.
+
+   ENV         The environment for the child process, specified as
+               an array of character pointers.  Each element of the
+               array should point to a string of the form VAR=VALUE,
+                with the exception of the last element which must be
+                a null pointer.
+*/
+
+extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
+                                          const char *executable,
+                                           char * const *argv,
+                                           char * const *env,
+                                          const char *outname,
+                                          const char *errname, int *err);
+
+/* Return a stream for a temporary file to pass to the first program
+   in the pipeline as input.  The file name is chosen as for pex_run.
+   pex_run closes the file automatically; don't close it yourself.  */
+
+extern FILE *pex_input_file (struct pex_obj *obj, int flags,
+                             const char *in_name);
+
+/* Return a stream for a pipe connected to the standard input of the
+   first program in the pipeline.  You must have passed
+   `PEX_USE_PIPES' to `pex_init'.  Close the returned stream
+   yourself.  */
+
+extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
+
+/* Read the standard output of the last program to be executed.
+   pex_run can not be called after this.  BINARY should be non-zero if
+   the file should be opened in binary mode; this is ignored on Unix.
+   Returns NULL on error.  Don't call fclose on the returned FILE; it
+   will be closed by pex_free.  */
+
+extern FILE *pex_read_output (struct pex_obj *, int binary);
+
+/* Read the standard error of the last program to be executed.
+   pex_run can not be called after this.  BINARY should be non-zero if
+   the file should be opened in binary mode; this is ignored on Unix.
+   Returns NULL on error.  Don't call fclose on the returned FILE; it
+   will be closed by pex_free.  */
+
+extern FILE *pex_read_err (struct pex_obj *, int binary);
+
+/* Return exit status of all programs in VECTOR.  COUNT indicates the
+   size of VECTOR.  The status codes in the vector are in the order of
+   the calls to pex_run.  Returns 0 on error, 1 on success.  */
+
+extern int pex_get_status (struct pex_obj *, int count, int *vector);
+
+/* Return times of all programs in VECTOR.  COUNT indicates the size
+   of VECTOR.  struct pex_time is really just struct timeval, but that
+   is not portable to all systems.  Returns 0 on error, 1 on
+   success.  */
+
+struct pex_time
+{
+  unsigned long user_seconds;
+  unsigned long user_microseconds;
+  unsigned long system_seconds;
+  unsigned long system_microseconds;
+};
+
+extern int pex_get_times (struct pex_obj *, int count,
+                         struct pex_time *vector);
+
+/* Clean up a pex_obj.  If you have not called pex_get_times or
+   pex_get_status, this will try to kill the subprocesses.  */
+
+extern void pex_free (struct pex_obj *);
+
+/* Just execute one program.  Return value is as for pex_run.
+   FLAGS       Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT.
+   EXECUTABLE  As for pex_run.
+   ARGV                As for pex_run.
+   PNAME       As for pex_init.
+   OUTNAME     As for pex_run when PEX_LAST is set.
+   ERRNAME     As for pex_run.
+   STATUS      Set to exit status on success.
+   ERR         As for pex_run.
+*/
+
+extern const char *pex_one (int flags, const char *executable,
+                           char * const *argv, const char *pname,
+                           const char *outname, const char *errname,
+                           int *status, int *err);
+
+/* pexecute and pwait are the old pexecute interface, still here for
+   backward compatibility.  Don't use these for new code.  Instead,
+   use pex_init/pex_run/pex_get_status/pex_free, or pex_one.  */
+
+/* Definitions used by the pexecute routine.  */
+
+#define PEXECUTE_FIRST   1
+#define PEXECUTE_LAST    2
+#define PEXECUTE_ONE     (PEXECUTE_FIRST + PEXECUTE_LAST)
+#define PEXECUTE_SEARCH  4
+#define PEXECUTE_VERBOSE 8
+
+/* Execute a program.  */
+
+extern int pexecute (const char *, char * const *, const char *,
+                     const char *, char **, char **, int);
+
+/* Wait for pexecute to finish.  */
+
+extern int pwait (int, int *, int);
+
+#if !HAVE_DECL_ASPRINTF
+/* Like sprintf but provides a pointer to malloc'd storage, which must
+   be freed by the caller.  */
+
+extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
+#endif
+
+#if !HAVE_DECL_VASPRINTF
+/* Like vsprintf but provides a pointer to malloc'd storage, which
+   must be freed by the caller.  */
+
+extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0);
+#endif
+
+#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
+/* Like sprintf but prints at most N characters.  */
+extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
+#endif
+
+#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
+/* Like vsprintf but prints at most N characters.  */
+extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0);
+#endif
+
+#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
+/* Compare version strings.  */
+extern int strverscmp (const char *, const char *);
+#endif
+
+#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
+
+/* Drastically simplified alloca configurator.  If we're using GCC,
+   we use __builtin_alloca; otherwise we use the C alloca.  The C
+   alloca is always available.  You can override GCC by defining
+   USE_C_ALLOCA yourself.  The canonical autoconf macro C_ALLOCA is
+   also set/unset as it is often used to indicate whether code needs
+   to call alloca(0).  */
+extern void *C_alloca (size_t) ATTRIBUTE_MALLOC;
+#undef alloca
+#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA
+# define alloca(x) __builtin_alloca(x)
+# undef C_ALLOCA
+# define ASTRDUP(X) \
+  (__extension__ ({ const char *const libiberty_optr = (X); \
+   const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \
+   char *const libiberty_nptr = (char *const) alloca (libiberty_len); \
+   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); }))
+#else
+# define alloca(x) C_alloca(x)
+# undef USE_C_ALLOCA
+# define USE_C_ALLOCA 1
+# undef C_ALLOCA
+# define C_ALLOCA 1
+extern const char *libiberty_optr;
+extern char *libiberty_nptr;
+extern unsigned long libiberty_len;
+# define ASTRDUP(X) \
+  (libiberty_optr = (X), \
+   libiberty_len = strlen (libiberty_optr) + 1, \
+   libiberty_nptr = (char *) alloca (libiberty_len), \
+   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* ! defined (LIBIBERTY_H) */
diff --git a/include/md5.h b/include/md5.h
new file mode 100644 (file)
index 0000000..e8eedb9
--- /dev/null
@@ -0,0 +1,141 @@
+/* md5.h - Declaration of functions and data types used for MD5 sum
+   computing library functions.
+   Copyright 1995, 1996, 2000 Free Software Foundation, Inc.
+   NOTE: The canonical source of this file is maintained with the GNU C
+   Library.  Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _MD5_H
+#define _MD5_H 1
+
+#include <stdio.h>
+
+#if defined HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+#include "ansidecl.h"
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   doing that would require that the configure script compile and *run*
+   the resulting executable.  Locally running cross-compiled executables
+   is usually not possible.  */
+
+#ifdef _LIBC
+# include <sys/types.h>
+typedef u_int32_t md5_uint32;
+typedef uintptr_t md5_uintptr;
+#else
+#  define INT_MAX_32_BITS 2147483647
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+# ifndef INT_MAX
+#  define INT_MAX INT_MAX_32_BITS
+# endif
+
+# if INT_MAX == INT_MAX_32_BITS
+   typedef unsigned int md5_uint32;
+# else
+#  if SHRT_MAX == INT_MAX_32_BITS
+    typedef unsigned short md5_uint32;
+#  else
+#   if LONG_MAX == INT_MAX_32_BITS
+     typedef unsigned long md5_uint32;
+#   else
+     /* The following line is intended to evoke an error.
+        Using #error is not portable enough.  */
+     "Cannot determine unsigned 32-bit data type."
+#   endif
+#  endif
+# endif
+/* We have to make a guess about the integer type equivalent in size
+   to pointers which should always be correct.  */
+typedef unsigned long int md5_uintptr;
+#endif
+
+/* Structure to save state of computation between the single steps.  */
+struct md5_ctx
+{
+  md5_uint32 A;
+  md5_uint32 B;
+  md5_uint32 C;
+  md5_uint32 D;
+
+  md5_uint32 total[2];
+  md5_uint32 buflen;
+  char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32);
+};
+
+/*
+ * The following three functions are build up the low level used in
+ * the functions `md5_stream' and `md5_buffer'.
+ */
+
+/* Initialize structure containing state of computation.
+   (RFC 1321, 3.3: Step 3)  */
+extern void md5_init_ctx (struct md5_ctx *ctx);
+
+/* Starting with the result of former calls of this function (or the
+   initialization function update the context for the next LEN bytes
+   starting at BUFFER.
+   It is necessary that LEN is a multiple of 64!!! */
+extern void md5_process_block (const void *buffer, size_t len,
+                               struct md5_ctx *ctx);
+
+/* Starting with the result of former calls of this function (or the
+   initialization function update the context for the next LEN bytes
+   starting at BUFFER.
+   It is NOT required that LEN is a multiple of 64.  */
+extern void md5_process_bytes (const void *buffer, size_t len,
+                               struct md5_ctx *ctx);
+
+/* Process the remaining bytes in the buffer and put result from CTX
+   in first 16 bytes following RESBUF.  The result is always in little
+   endian byte order, so that a byte-wise output yields to the wanted
+   ASCII representation of the message digest.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf);
+
+
+/* Put result from CTX in first 16 bytes following RESBUF.  The result is
+   always in little endian byte order, so that a byte-wise output yields
+   to the wanted ASCII representation of the message digest.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf);
+
+
+/* Compute MD5 message digest for bytes read from STREAM.  The
+   resulting message digest number will be written into the 16 bytes
+   beginning at RESBLOCK.  */
+extern int md5_stream (FILE *stream, void *resblock);
+
+/* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
+   result is always in little endian byte order, so that a byte-wise
+   output yields to the wanted ASCII representation of the message
+   digest.  */
+extern void *md5_buffer (const char *buffer, size_t len, void *resblock);
+
+#endif
diff --git a/include/objalloc.h b/include/objalloc.h
new file mode 100644 (file)
index 0000000..36772d1
--- /dev/null
@@ -0,0 +1,115 @@
+/* objalloc.h -- routines to allocate memory for objects
+   Copyright 1997, 2001 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor, Cygnus Solutions.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifndef OBJALLOC_H
+#define OBJALLOC_H
+
+#include "ansidecl.h"
+
+/* These routines allocate space for an object.  The assumption is
+   that the object will want to allocate space as it goes along, but
+   will never want to free any particular block.  There is a function
+   to free a block, which also frees all more recently allocated
+   blocks.  There is also a function to free all the allocated space.
+
+   This is essentially a specialization of obstacks.  The main
+   difference is that a block may not be allocated a bit at a time.
+   Another difference is that these routines are always built on top
+   of malloc, and always pass an malloc failure back to the caller,
+   unlike more recent versions of obstacks.  */
+
+/* This is what an objalloc structure looks like.  Callers should not
+   refer to these fields, nor should they allocate these structure
+   themselves.  Instead, they should only create them via
+   objalloc_init, and only access them via the functions and macros
+   listed below.  The structure is only defined here so that we can
+   access it via macros.  */
+
+struct objalloc
+{
+  char *current_ptr;
+  unsigned int current_space;
+  void *chunks;
+};
+
+/* Work out the required alignment.  */
+
+struct objalloc_align { char x; double d; };
+
+#if defined (__STDC__) && __STDC__
+#ifndef offsetof
+#include <stddef.h>
+#endif
+#endif
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
+#endif
+#define OBJALLOC_ALIGN offsetof (struct objalloc_align, d)
+
+/* Create an objalloc structure.  Returns NULL if malloc fails.  */
+
+extern struct objalloc *objalloc_create (void);
+
+/* Allocate space from an objalloc structure.  Returns NULL if malloc
+   fails.  */
+
+extern void *_objalloc_alloc (struct objalloc *, unsigned long);
+
+/* The macro version of objalloc_alloc.  We only define this if using
+   gcc, because otherwise we would have to evaluate the arguments
+   multiple times, or use a temporary field as obstack.h does.  */
+
+#if defined (__GNUC__) && defined (__STDC__) && __STDC__
+
+/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
+   does not implement __extension__.  But that compiler doesn't define
+   __GNUC_MINOR__.  */
+#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+#define __extension__
+#endif
+
+#define objalloc_alloc(o, l)                                           \
+  __extension__                                                                \
+  ({ struct objalloc *__o = (o);                                       \
+     unsigned long __len = (l);                                                \
+     if (__len == 0)                                                   \
+       __len = 1;                                                      \
+     __len = (__len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1);     \
+     (__len <= __o->current_space                                      \
+      ? (__o->current_ptr += __len,                                    \
+        __o->current_space -= __len,                                   \
+        (void *) (__o->current_ptr - __len))                           \
+      : _objalloc_alloc (__o, __len)); })
+
+#else /* ! __GNUC__ */
+
+#define objalloc_alloc(o, l) _objalloc_alloc ((o), (l))
+
+#endif /* ! __GNUC__ */
+
+/* Free an entire objalloc structure.  */
+
+extern void objalloc_free (struct objalloc *);
+
+/* Free a block allocated by objalloc_alloc.  This also frees all more
+   recently allocated blocks.  */
+
+extern void objalloc_free_block (struct objalloc *, void *);
+
+#endif /* OBJALLOC_H */
diff --git a/include/obstack.h b/include/obstack.h
new file mode 100644 (file)
index 0000000..88c2a26
--- /dev/null
@@ -0,0 +1,545 @@
+/* obstack.h - object stack macros
+   Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005
+   Free Software Foundation, Inc.
+
+
+   NOTE: The canonical source of this file is maintained with the GNU C Library.
+   Bugs can be reported to bug-glibc@gnu.org.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Summary:
+
+All the apparent functions defined here are macros. The idea
+is that you would use these pre-tested macros to solve a
+very specific set of problems, and they would run fast.
+Caution: no side-effects in arguments please!! They may be
+evaluated MANY times!!
+
+These macros operate a stack of objects.  Each object starts life
+small, and may grow to maturity.  (Consider building a word syllable
+by syllable.)  An object can move while it is growing.  Once it has
+been "finished" it never changes address again.  So the "top of the
+stack" is typically an immature growing object, while the rest of the
+stack is of mature, fixed size and fixed address objects.
+
+These routines grab large chunks of memory, using a function you
+supply, called `obstack_chunk_alloc'.  On occasion, they free chunks,
+by calling `obstack_chunk_free'.  You must define them and declare
+them before using any obstack macros.
+
+Each independent stack is represented by a `struct obstack'.
+Each of the obstack macros expects a pointer to such a structure
+as the first argument.
+
+One motivation for this package is the problem of growing char strings
+in symbol tables.  Unless you are "fascist pig with a read-only mind"
+--Gosper's immortal quote from HAKMEM item 154, out of context--you
+would not like to put any arbitrary upper limit on the length of your
+symbols.
+
+In practice this often means you will build many short symbols and a
+few long symbols.  At the time you are reading a symbol you don't know
+how long it is.  One traditional method is to read a symbol into a
+buffer, realloc()ating the buffer every time you try to read a symbol
+that is longer than the buffer.  This is beaut, but you still will
+want to copy the symbol from the buffer to a more permanent
+symbol-table entry say about half the time.
+
+With obstacks, you can work differently.  Use one obstack for all symbol
+names.  As you read a symbol, grow the name in the obstack gradually.
+When the name is complete, finalize it.  Then, if the symbol exists already,
+free the newly read name.
+
+The way we do this is to take a large chunk, allocating memory from
+low addresses.  When you want to build a symbol in the chunk you just
+add chars above the current "high water mark" in the chunk.  When you
+have finished adding chars, because you got to the end of the symbol,
+you know how long the chars are, and you can create a new object.
+Mostly the chars will not burst over the highest address of the chunk,
+because you would typically expect a chunk to be (say) 100 times as
+long as an average object.
+
+In case that isn't clear, when we have enough chars to make up
+the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+so we just point to it where it lies.  No moving of chars is
+needed and this is the second win: potentially long strings need
+never be explicitly shuffled. Once an object is formed, it does not
+change its address during its lifetime.
+
+When the chars burst over a chunk boundary, we allocate a larger
+chunk, and then copy the partly formed object from the end of the old
+chunk to the beginning of the new larger chunk.  We then carry on
+accreting characters to the end of the object as we normally would.
+
+A special macro is provided to add a single char at a time to a
+growing object.  This allows the use of register variables, which
+break the ordinary 'growth' macro.
+
+Summary:
+       We allocate large chunks.
+       We carve out one object at a time from the current chunk.
+       Once carved, an object never moves.
+       We are free to append data of any size to the currently
+         growing object.
+       Exactly one object is growing in an obstack at any one time.
+       You can run one obstack per control block.
+       You may have as many control blocks as you dare.
+       Because of the way we do it, you can `unwind' an obstack
+         back to a previous state. (You may remove objects much
+         as you would with a stack.)
+*/
+
+
+/* Don't do the contents of this file more than once.  */
+
+#ifndef _OBSTACK_H
+#define _OBSTACK_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+\f
+/* We use subtraction of (char *) 0 instead of casting to int
+   because on word-addressable machines a simple cast to int
+   may ignore the byte-within-word field of the pointer.  */
+
+#ifndef __PTR_TO_INT
+# define __PTR_TO_INT(P) ((P) - (char *) 0)
+#endif
+
+#ifndef __INT_TO_PTR
+# define __INT_TO_PTR(P) ((P) + (char *) 0)
+#endif
+
+/* We need the type of the resulting object.  If __PTRDIFF_TYPE__ is
+   defined, as with GNU C, use that; that way we don't pollute the
+   namespace with <stddef.h>'s symbols.  Otherwise, if <stddef.h> is
+   available, include it and use ptrdiff_t.  In traditional C, long is
+   the best that we can do.  */
+
+#ifdef __PTRDIFF_TYPE__
+# define PTR_INT_TYPE __PTRDIFF_TYPE__
+#else
+# ifdef HAVE_STDDEF_H
+#  include <stddef.h>
+#  define PTR_INT_TYPE ptrdiff_t
+# else
+#  define PTR_INT_TYPE long
+# endif
+#endif
+
+#if defined _LIBC || defined HAVE_STRING_H
+# include <string.h>
+# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+#else
+# ifdef memcpy
+#  define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N))
+# else
+#  define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N))
+# endif
+#endif
+
+struct _obstack_chunk          /* Lives at front of each chunk. */
+{
+  char  *limit;                        /* 1 past end of this chunk */
+  struct _obstack_chunk *prev; /* address of prior chunk or NULL */
+  char contents[4];            /* objects begin here */
+};
+
+struct obstack         /* control current object in current chunk */
+{
+  long chunk_size;             /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk;        /* address of current struct obstack_chunk */
+  char *object_base;           /* address of object we are building */
+  char *next_free;             /* where to add next char to current object */
+  char *chunk_limit;           /* address of char after current chunk */
+  PTR_INT_TYPE temp;           /* Temporary for some macros.  */
+  int   alignment_mask;                /* Mask of alignment for each object. */
+  /* These prototypes vary based on `use_extra_arg', and we use
+     casts to the prototypeless function type in all assignments,
+     but having prototypes here quiets -Wstrict-prototypes.  */
+  struct _obstack_chunk *(*chunkfun) (void *, long);
+  void (*freefun) (void *, struct _obstack_chunk *);
+  void *extra_arg;             /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg:1;    /* chunk alloc/dealloc funcs take extra arg */
+  unsigned maybe_empty_object:1;/* There is a possibility that the current
+                                  chunk contains a zero-length object.  This
+                                  prevents freeing the chunk if we allocate
+                                  a bigger chunk to replace it. */
+  unsigned alloc_failed:1;     /* No longer used, as we now call the failed
+                                  handler on error, but retained for binary
+                                  compatibility.  */
+};
+
+/* Declare the external functions we use; they are in obstack.c.  */
+
+extern void _obstack_newchunk (struct obstack *, int);
+extern void _obstack_free (struct obstack *, void *);
+extern int _obstack_begin (struct obstack *, int, int,
+                           void *(*) (long), void (*) (void *));
+extern int _obstack_begin_1 (struct obstack *, int, int,
+                            void *(*) (void *, long),
+                            void (*) (void *, void *), void *);
+extern int _obstack_memory_used (struct obstack *);
+\f
+/* Do the function-declarations after the structs
+   but before defining the macros.  */
+
+void obstack_init (struct obstack *obstack);
+
+void * obstack_alloc (struct obstack *obstack, int size);
+
+void * obstack_copy (struct obstack *obstack, void *address, int size);
+void * obstack_copy0 (struct obstack *obstack, void *address, int size);
+
+void obstack_free (struct obstack *obstack, void *block);
+
+void obstack_blank (struct obstack *obstack, int size);
+
+void obstack_grow (struct obstack *obstack, void *data, int size);
+void obstack_grow0 (struct obstack *obstack, void *data, int size);
+
+void obstack_1grow (struct obstack *obstack, int data_char);
+void obstack_ptr_grow (struct obstack *obstack, void *data);
+void obstack_int_grow (struct obstack *obstack, int data);
+
+void * obstack_finish (struct obstack *obstack);
+
+int obstack_object_size (struct obstack *obstack);
+
+int obstack_room (struct obstack *obstack);
+void obstack_make_room (struct obstack *obstack, int size);
+void obstack_1grow_fast (struct obstack *obstack, int data_char);
+void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
+void obstack_int_grow_fast (struct obstack *obstack, int data);
+void obstack_blank_fast (struct obstack *obstack, int size);
+
+void * obstack_base (struct obstack *obstack);
+void * obstack_next_free (struct obstack *obstack);
+int obstack_alignment_mask (struct obstack *obstack);
+int obstack_chunk_size (struct obstack *obstack);
+int obstack_memory_used (struct obstack *obstack);
+
+/* Error handler called when `obstack_chunk_alloc' failed to allocate
+   more memory.  This can be set to a user defined function.  The
+   default action is to print a message and abort.  */
+extern void (*obstack_alloc_failed_handler) (void);
+
+/* Exit value used when `print_and_abort' is used.  */
+extern int obstack_exit_failure;
+\f
+/* Pointer to beginning of object being allocated or to be allocated next.
+   Note that this might not be the final address of the object
+   because a new chunk might be needed to hold the final size.  */
+
+#define obstack_base(h) ((h)->object_base)
+
+/* Size for allocating ordinary chunks.  */
+
+#define obstack_chunk_size(h) ((h)->chunk_size)
+
+/* Pointer to next byte not yet allocated in current chunk.  */
+
+#define obstack_next_free(h)   ((h)->next_free)
+
+/* Mask specifying low bits that should be clear in address of an object.  */
+
+#define obstack_alignment_mask(h) ((h)->alignment_mask)
+
+/* To prevent prototype warnings provide complete argument list in
+   standard C version.  */
+# define obstack_init(h) \
+  _obstack_begin ((h), 0, 0, \
+                 (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
+
+# define obstack_begin(h, size) \
+  _obstack_begin ((h), (size), 0, \
+                 (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
+
+# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
+  _obstack_begin ((h), (size), (alignment), \
+                   (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
+
+# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+  _obstack_begin_1 ((h), (size), (alignment), \
+                   (void *(*) (void *, long)) (chunkfun), \
+                   (void (*) (void *, void *)) (freefun), (arg))
+
+# define obstack_chunkfun(h, newchunkfun) \
+  ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
+
+# define obstack_freefun(h, newfreefun) \
+  ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
+
+#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
+
+#define obstack_blank_fast(h,n) ((h)->next_free += (n))
+
+#define obstack_memory_used(h) _obstack_memory_used (h)
+\f
+#if defined __GNUC__ && defined __STDC__ && __STDC__
+/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
+   does not implement __extension__.  But that compiler doesn't define
+   __GNUC_MINOR__.  */
+# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+#  define __extension__
+# endif
+
+/* For GNU C, if not -traditional,
+   we can define these macros to compute all args only once
+   without using a global variable.
+   Also, we can avoid using the `temp' slot, to make faster code.  */
+
+# define obstack_object_size(OBSTACK)                                  \
+  __extension__                                                                \
+  ({ struct obstack *__o = (OBSTACK);                                  \
+     (unsigned) (__o->next_free - __o->object_base); })
+
+# define obstack_room(OBSTACK)                                         \
+  __extension__                                                                \
+  ({ struct obstack *__o = (OBSTACK);                                  \
+     (unsigned) (__o->chunk_limit - __o->next_free); })
+
+# define obstack_make_room(OBSTACK,length)                             \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   int __len = (length);                                               \
+   if (__o->chunk_limit - __o->next_free < __len)                      \
+     _obstack_newchunk (__o, __len);                                   \
+   (void) 0; })
+
+# define obstack_empty_p(OBSTACK)                                      \
+  __extension__                                                                \
+  ({ struct obstack *__o = (OBSTACK);                                  \
+     (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
+
+# define obstack_grow(OBSTACK,where,length)                            \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   int __len = (length);                                               \
+   if (__o->next_free + __len > __o->chunk_limit)                      \
+     _obstack_newchunk (__o, __len);                                   \
+   _obstack_memcpy (__o->next_free, (where), __len);                   \
+   __o->next_free += __len;                                            \
+   (void) 0; })
+
+# define obstack_grow0(OBSTACK,where,length)                           \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   int __len = (length);                                               \
+   if (__o->next_free + __len + 1 > __o->chunk_limit)                  \
+     _obstack_newchunk (__o, __len + 1);                               \
+   _obstack_memcpy (__o->next_free, (where), __len);                   \
+   __o->next_free += __len;                                            \
+   *(__o->next_free)++ = 0;                                            \
+   (void) 0; })
+
+# define obstack_1grow(OBSTACK,datum)                                  \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   if (__o->next_free + 1 > __o->chunk_limit)                          \
+     _obstack_newchunk (__o, 1);                                       \
+   obstack_1grow_fast (__o, datum);                                    \
+   (void) 0; })
+
+/* These assume that the obstack alignment is good enough for pointers or ints,
+   and that the data added so far to the current object
+   shares that much alignment.  */
+
+# define obstack_ptr_grow(OBSTACK,datum)                               \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   if (__o->next_free + sizeof (void *) > __o->chunk_limit)            \
+     _obstack_newchunk (__o, sizeof (void *));                         \
+   obstack_ptr_grow_fast (__o, datum); })
+
+# define obstack_int_grow(OBSTACK,datum)                               \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   if (__o->next_free + sizeof (int) > __o->chunk_limit)               \
+     _obstack_newchunk (__o, sizeof (int));                            \
+   obstack_int_grow_fast (__o, datum); })
+
+# define obstack_ptr_grow_fast(OBSTACK,aptr)                           \
+__extension__                                                          \
+({ struct obstack *__o1 = (OBSTACK);                                   \
+   *(const void **) __o1->next_free = (aptr);                          \
+   __o1->next_free += sizeof (const void *);                           \
+   (void) 0; })
+
+# define obstack_int_grow_fast(OBSTACK,aint)                           \
+__extension__                                                          \
+({ struct obstack *__o1 = (OBSTACK);                                   \
+   *(int *) __o1->next_free = (aint);                                  \
+   __o1->next_free += sizeof (int);                                    \
+   (void) 0; })
+
+# define obstack_blank(OBSTACK,length)                                 \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   int __len = (length);                                               \
+   if (__o->chunk_limit - __o->next_free < __len)                      \
+     _obstack_newchunk (__o, __len);                                   \
+   obstack_blank_fast (__o, __len);                                    \
+   (void) 0; })
+
+# define obstack_alloc(OBSTACK,length)                                 \
+__extension__                                                          \
+({ struct obstack *__h = (OBSTACK);                                    \
+   obstack_blank (__h, (length));                                      \
+   obstack_finish (__h); })
+
+# define obstack_copy(OBSTACK,where,length)                            \
+__extension__                                                          \
+({ struct obstack *__h = (OBSTACK);                                    \
+   obstack_grow (__h, (where), (length));                              \
+   obstack_finish (__h); })
+
+# define obstack_copy0(OBSTACK,where,length)                           \
+__extension__                                                          \
+({ struct obstack *__h = (OBSTACK);                                    \
+   obstack_grow0 (__h, (where), (length));                             \
+   obstack_finish (__h); })
+
+/* The local variable is named __o1 to avoid a name conflict
+   when obstack_blank is called.  */
+# define obstack_finish(OBSTACK)                                       \
+__extension__                                                          \
+({ struct obstack *__o1 = (OBSTACK);                                   \
+   void *value;                                                                \
+   value = (void *) __o1->object_base;                                 \
+   if (__o1->next_free == value)                                       \
+     __o1->maybe_empty_object = 1;                                     \
+   __o1->next_free                                                     \
+     = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
+                    & ~ (__o1->alignment_mask));                       \
+   if (__o1->next_free - (char *)__o1->chunk                           \
+       > __o1->chunk_limit - (char *)__o1->chunk)                      \
+     __o1->next_free = __o1->chunk_limit;                              \
+   __o1->object_base = __o1->next_free;                                        \
+   value; })
+
+# define obstack_free(OBSTACK, OBJ)                                    \
+__extension__                                                          \
+({ struct obstack *__o = (OBSTACK);                                    \
+   void *__obj = (void *) (OBJ);                                       \
+   if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
+     __o->next_free = __o->object_base = (char *) __obj;               \
+   else (obstack_free) (__o, __obj); })
+\f
+#else /* not __GNUC__ or not __STDC__ */
+
+# define obstack_object_size(h) \
+ (unsigned) ((h)->next_free - (h)->object_base)
+
+# define obstack_room(h)               \
+ (unsigned) ((h)->chunk_limit - (h)->next_free)
+
+# define obstack_empty_p(h) \
+ ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
+
+/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
+   so that we can avoid having void expressions
+   in the arms of the conditional expression.
+   Casting the third operand to void was tried before,
+   but some compilers won't accept it.  */
+
+# define obstack_make_room(h,length)                                   \
+( (h)->temp = (length),                                                        \
+  (((h)->next_free + (h)->temp > (h)->chunk_limit)                     \
+   ? (_obstack_newchunk ((h), (h)->temp), 0) : 0))
+
+# define obstack_grow(h,where,length)                                  \
+( (h)->temp = (length),                                                        \
+  (((h)->next_free + (h)->temp > (h)->chunk_limit)                     \
+   ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),                     \
+  _obstack_memcpy ((h)->next_free, (where), (h)->temp),                        \
+  (h)->next_free += (h)->temp)
+
+# define obstack_grow0(h,where,length)                                 \
+( (h)->temp = (length),                                                        \
+  (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit)                 \
+   ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0),                 \
+  _obstack_memcpy ((h)->next_free, (where), (h)->temp),                        \
+  (h)->next_free += (h)->temp,                                         \
+  *((h)->next_free)++ = 0)
+
+# define obstack_1grow(h,datum)                                                \
+( (((h)->next_free + 1 > (h)->chunk_limit)                             \
+   ? (_obstack_newchunk ((h), 1), 0) : 0),                             \
+  obstack_1grow_fast (h, datum))
+
+# define obstack_ptr_grow(h,datum)                                     \
+( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)               \
+   ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),               \
+  obstack_ptr_grow_fast (h, datum))
+
+# define obstack_int_grow(h,datum)                                     \
+( (((h)->next_free + sizeof (int) > (h)->chunk_limit)                  \
+   ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                  \
+  obstack_int_grow_fast (h, datum))
+
+# define obstack_ptr_grow_fast(h,aptr)                                 \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+
+# define obstack_int_grow_fast(h,aint)                                 \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
+
+# define obstack_blank(h,length)                                       \
+( (h)->temp = (length),                                                        \
+  (((h)->chunk_limit - (h)->next_free < (h)->temp)                     \
+   ? (_obstack_newchunk ((h), (h)->temp), 0) : 0),                     \
+  obstack_blank_fast (h, (h)->temp))
+
+# define obstack_alloc(h,length)                                       \
+ (obstack_blank ((h), (length)), obstack_finish ((h)))
+
+# define obstack_copy(h,where,length)                                  \
+ (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_copy0(h,where,length)                                 \
+ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_finish(h)                                             \
+( ((h)->next_free == (h)->object_base                                  \
+   ? (((h)->maybe_empty_object = 1), 0)                                        \
+   : 0),                                                               \
+  (h)->temp = __PTR_TO_INT ((h)->object_base),                         \
+  (h)->next_free                                                       \
+    = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask)        \
+                   & ~ ((h)->alignment_mask)),                         \
+  (((h)->next_free - (char *) (h)->chunk                               \
+    > (h)->chunk_limit - (char *) (h)->chunk)                          \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),                         \
+  (h)->object_base = (h)->next_free,                                   \
+  __INT_TO_PTR ((h)->temp))
+
+# define obstack_free(h,obj)                                           \
+( (h)->temp = (char *) (obj) - (char *) (h)->chunk,                    \
+  (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
+   ? (int) ((h)->next_free = (h)->object_base                          \
+           = (h)->temp + (char *) (h)->chunk)                          \
+   : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
+
+#endif /* not __GNUC__ or not __STDC__ */
+
+#ifdef __cplusplus
+}      /* C++ */
+#endif
+
+#endif /* obstack.h */
diff --git a/include/partition.h b/include/partition.h
new file mode 100644 (file)
index 0000000..d8b554f
--- /dev/null
@@ -0,0 +1,82 @@
+/* List implementation of a partition of consecutive integers.
+   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+   Contributed by CodeSourcery, LLC.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING.  If not, write to
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* This package implements a partition of consecutive integers.  The
+   elements are partitioned into classes.  Each class is represented
+   by one of its elements, the canonical element, which is chosen
+   arbitrarily from elements in the class.  The principal operations
+   on a partition are FIND, which takes an element, determines its
+   class, and returns the canonical element for that class, and UNION,
+   which unites the two classes that contain two given elements into a
+   single class.
+
+   The list implementation used here provides constant-time finds.  By
+   storing the size of each class with the class's canonical element,
+   it is able to perform unions over all the classes in the partition
+   in O (N log N) time.  */
+
+#ifndef _PARTITION_H
+#define _PARTITION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+#include <stdio.h>
+
+struct partition_elem
+{
+  /* The canonical element that represents the class containing this
+     element.  */
+  int class_element;
+  /* The next element in this class.  Elements in each class form a
+     circular list.  */
+  struct partition_elem* next;
+  /* The number of elements in this class.  Valid only if this is the
+     canonical element for its class.  */
+  unsigned class_count;
+};
+
+typedef struct partition_def 
+{
+  /* The number of elements in this partition.  */
+  int num_elements;
+  /* The elements in the partition.  */
+  struct partition_elem elements[1];
+} *partition;
+
+extern partition partition_new (int);
+extern void partition_delete (partition);
+extern int partition_union (partition, int, int);
+extern void partition_print (partition,        FILE*);
+
+/* Returns the canonical element corresponding to the class containing
+   ELEMENT__ in PARTITION__.  */
+
+#define partition_find(partition__, element__) \
+    ((partition__)->elements[(element__)].class_element)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _PARTITION_H */
diff --git a/include/safe-ctype.h b/include/safe-ctype.h
new file mode 100644 (file)
index 0000000..e59b357
--- /dev/null
@@ -0,0 +1,119 @@
+/* <ctype.h> replacement macros.
+
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Zack Weinberg <zackw@stanford.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* This is a compatible replacement of the standard C library's <ctype.h>
+   with the following properties:
+
+   - Implements all isxxx() macros required by C99.
+   - Also implements some character classes useful when
+     parsing C-like languages.
+   - Does not change behavior depending on the current locale.
+   - Behaves properly for all values in the range of a signed or
+     unsigned char.
+
+   To avoid conflicts, this header defines the isxxx functions in upper
+   case, e.g. ISALPHA not isalpha.  */
+
+#ifndef SAFE_CTYPE_H
+#define SAFE_CTYPE_H
+
+#ifdef isalpha
+ #error "safe-ctype.h and ctype.h may not be used simultaneously"
+#endif
+
+/* Determine host character set.  */
+#define HOST_CHARSET_UNKNOWN 0
+#define HOST_CHARSET_ASCII   1
+#define HOST_CHARSET_EBCDIC  2
+
+#if  '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
+   && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21
+#  define HOST_CHARSET HOST_CHARSET_ASCII
+#else
+# if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \
+   && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A
+#  define HOST_CHARSET HOST_CHARSET_EBCDIC
+# else
+#  define HOST_CHARSET HOST_CHARSET_UNKNOWN
+# endif
+#endif
+
+/* Categories.  */
+
+enum {
+  /* In C99 */
+  _sch_isblank  = 0x0001,      /* space \t */
+  _sch_iscntrl  = 0x0002,      /* nonprinting characters */
+  _sch_isdigit  = 0x0004,      /* 0-9 */
+  _sch_islower  = 0x0008,      /* a-z */
+  _sch_isprint  = 0x0010,      /* any printing character including ' ' */
+  _sch_ispunct  = 0x0020,      /* all punctuation */
+  _sch_isspace  = 0x0040,      /* space \t \n \r \f \v */
+  _sch_isupper  = 0x0080,      /* A-Z */
+  _sch_isxdigit = 0x0100,      /* 0-9A-Fa-f */
+
+  /* Extra categories useful to cpplib.  */
+  _sch_isidst  = 0x0200,       /* A-Za-z_ */
+  _sch_isvsp    = 0x0400,      /* \n \r */
+  _sch_isnvsp   = 0x0800,      /* space \t \f \v \0 */
+
+  /* Combinations of the above.  */
+  _sch_isalpha  = _sch_isupper|_sch_islower,   /* A-Za-z */
+  _sch_isalnum  = _sch_isalpha|_sch_isdigit,   /* A-Za-z0-9 */
+  _sch_isidnum  = _sch_isidst|_sch_isdigit,    /* A-Za-z0-9_ */
+  _sch_isgraph  = _sch_isalnum|_sch_ispunct,   /* isprint and not space */
+  _sch_iscppsp  = _sch_isvsp|_sch_isnvsp,      /* isspace + \0 */
+  _sch_isbasic  = _sch_isprint|_sch_iscppsp     /* basic charset of ISO C
+                                                  (plus ` and @)  */
+};
+
+/* Character classification.  */
+extern const unsigned short _sch_istable[256];
+
+#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit))
+
+#define ISALPHA(c)  _sch_test(c, _sch_isalpha)
+#define ISALNUM(c)  _sch_test(c, _sch_isalnum)
+#define ISBLANK(c)  _sch_test(c, _sch_isblank)
+#define ISCNTRL(c)  _sch_test(c, _sch_iscntrl)
+#define ISDIGIT(c)  _sch_test(c, _sch_isdigit)
+#define ISGRAPH(c)  _sch_test(c, _sch_isgraph)
+#define ISLOWER(c)  _sch_test(c, _sch_islower)
+#define ISPRINT(c)  _sch_test(c, _sch_isprint)
+#define ISPUNCT(c)  _sch_test(c, _sch_ispunct)
+#define ISSPACE(c)  _sch_test(c, _sch_isspace)
+#define ISUPPER(c)  _sch_test(c, _sch_isupper)
+#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit)
+
+#define ISIDNUM(c)     _sch_test(c, _sch_isidnum)
+#define ISIDST(c)      _sch_test(c, _sch_isidst)
+#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic)
+#define IS_VSPACE(c)   _sch_test(c, _sch_isvsp)
+#define IS_NVSPACE(c)  _sch_test(c, _sch_isnvsp)
+#define IS_SPACE_OR_NUL(c)     _sch_test(c, _sch_iscppsp)
+
+/* Character transformation.  */
+extern const unsigned char  _sch_toupper[256];
+extern const unsigned char  _sch_tolower[256];
+#define TOUPPER(c) _sch_toupper[(c) & 0xff]
+#define TOLOWER(c) _sch_tolower[(c) & 0xff]
+
+#endif /* SAFE_CTYPE_H */
diff --git a/include/sort.h b/include/sort.h
new file mode 100644 (file)
index 0000000..582af81
--- /dev/null
@@ -0,0 +1,48 @@
+/* Sorting algorithms.
+   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell <mark@codesourcery.com>.
+
+This file is part of GCC.
+   
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifndef SORT_H
+#define SORT_H
+
+#include <sys/types.h> /* For size_t */
+#ifdef __STDC__
+#include <stddef.h>
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+
+/* Sort an array of pointers.  */
+
+extern void sort_pointers (size_t, void **, void **);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SORT_H */
+
+
+   
+   
diff --git a/include/splay-tree.h b/include/splay-tree.h
new file mode 100644 (file)
index 0000000..b03c581
--- /dev/null
@@ -0,0 +1,152 @@
+/* A splay-tree datatype.  
+   Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+   This file is part of GCC.
+   
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING.  If not, write to
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* For an easily readable description of splay-trees, see:
+
+     Lewis, Harry R. and Denenberg, Larry.  Data Structures and Their
+     Algorithms.  Harper-Collins, Inc.  1991.  
+
+   The major feature of splay trees is that all basic tree operations
+   are amortized O(log n) time for a tree with n nodes.  */
+
+#ifndef _SPLAY_TREE_H
+#define _SPLAY_TREE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+
+#ifndef _WIN64
+  typedef unsigned long int libi_uhostptr_t;
+  typedef long int libi_shostptr_t;
+#else
+  typedef unsigned long long libi_uhostptr_t;
+  typedef long long libi_shostptr_t;
+#endif
+
+#ifndef GTY
+#define GTY(X)
+#endif
+
+/* Use typedefs for the key and data types to facilitate changing
+   these types, if necessary.  These types should be sufficiently wide
+   that any pointer or scalar can be cast to these types, and then
+   cast back, without loss of precision.  */
+typedef libi_uhostptr_t splay_tree_key;
+typedef libi_uhostptr_t splay_tree_value;
+
+/* Forward declaration for a node in the tree.  */
+typedef struct splay_tree_node_s *splay_tree_node;
+
+/* The type of a function which compares two splay-tree keys.  The
+   function should return values as for qsort.  */
+typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the key.  */
+typedef void (*splay_tree_delete_key_fn) (splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the value.  */
+typedef void (*splay_tree_delete_value_fn) (splay_tree_value);
+
+/* The type of a function used to iterate over the tree.  */
+typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*);
+
+/* The type of a function used to allocate memory for tree root and
+   node structures.  The first argument is the number of bytes needed;
+   the second is a data pointer the splay tree functions pass through
+   to the allocator.  This function must never return zero.  */
+typedef void *(*splay_tree_allocate_fn) (int, void *);
+
+/* The type of a function used to free memory allocated using the
+   corresponding splay_tree_allocate_fn.  The first argument is the
+   memory to be freed; the latter is a data pointer the splay tree
+   functions pass through to the freer.  */
+typedef void (*splay_tree_deallocate_fn) (void *, void *);
+
+/* The nodes in the splay tree.  */
+struct splay_tree_node_s GTY(())
+{
+  /* The key.  */
+  splay_tree_key GTY ((use_param1)) key;
+
+  /* The value.  */
+  splay_tree_value GTY ((use_param2)) value;
+
+  /* The left and right children, respectively.  */
+  splay_tree_node GTY ((use_params)) left;
+  splay_tree_node GTY ((use_params)) right;
+};
+
+/* The splay tree itself.  */
+struct splay_tree_s GTY(())
+{
+  /* The root of the tree.  */
+  splay_tree_node GTY ((use_params)) root;
+
+  /* The comparision function.  */
+  splay_tree_compare_fn comp;
+
+  /* The deallocate-key function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_key_fn delete_key;
+
+  /* The deallocate-value function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_value_fn delete_value;
+
+  /* Allocate/free functions, and a data pointer to pass to them.  */
+  splay_tree_allocate_fn allocate;
+  splay_tree_deallocate_fn deallocate;
+  void * GTY((skip)) allocate_data;
+};
+
+typedef struct splay_tree_s *splay_tree;
+
+extern splay_tree splay_tree_new (splay_tree_compare_fn,
+                                 splay_tree_delete_key_fn,
+                                 splay_tree_delete_value_fn);
+extern splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn,
+                                                splay_tree_delete_key_fn,
+                                                splay_tree_delete_value_fn,
+                                                splay_tree_allocate_fn,
+                                                splay_tree_deallocate_fn,
+                                                void *);
+extern void splay_tree_delete (splay_tree);
+extern splay_tree_node splay_tree_insert (splay_tree,
+                                         splay_tree_key,
+                                         splay_tree_value);
+extern void splay_tree_remove  (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_max (splay_tree);
+extern splay_tree_node splay_tree_min (splay_tree);
+extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*);
+extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key);
+extern int splay_tree_compare_pointers (splay_tree_key,        splay_tree_key);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _SPLAY_TREE_H */
diff --git a/include/symcat.h b/include/symcat.h
new file mode 100644 (file)
index 0000000..03a1292
--- /dev/null
@@ -0,0 +1,49 @@
+/* Symbol concatenation utilities.
+
+   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, write to the Free Software Foundation, Inc.,
+   51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef SYM_CAT_H
+#define SYM_CAT_H
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define CONCAT2(a,b)    a##b
+#define CONCAT3(a,b,c)  a##b##c
+#define CONCAT4(a,b,c,d) a##b##c##d
+#define STRINGX(s) #s
+#else
+/* Note one should never pass extra whitespace to the CONCATn macros,
+   e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
+   the two labels instead of concatenating them.  Instead, make sure to
+   write CONCAT2(foo,bar).  */
+#define CONCAT2(a,b)    a/**/b
+#define CONCAT3(a,b,c)  a/**/b/**/c
+#define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
+#define STRINGX(s) "s"
+#endif
+
+#define XCONCAT2(a,b)     CONCAT2(a,b)
+#define XCONCAT3(a,b,c)   CONCAT3(a,b,c)
+#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
+
+/* Note the layer of indirection here is typically used to allow
+   stringification of the expansion of macros.  I.e. "#define foo
+   bar", "XSTRING(foo)", to yield "bar".  Be aware that this only
+   works for __STDC__, not for traditional C which will still resolve
+   to "foo".  */
+#define XSTRING(s) STRINGX(s) 
+
+#endif /* SYM_CAT_H */
diff --git a/include/xregex.h b/include/xregex.h
new file mode 100644 (file)
index 0000000..645195b
--- /dev/null
@@ -0,0 +1,28 @@
+/* This file redefines all regex external names before including
+   a renamed copy of glibc's regex.h.  */
+
+#ifndef _XREGEX_H
+#define _XREGEX_H 1
+
+#  define regfree xregfree 
+#  define regexec xregexec
+#  define regcomp xregcomp
+#  define regerror xregerror
+#  define re_set_registers xre_set_registers
+#  define re_match_2 xre_match_2
+#  define re_match xre_match
+#  define re_search xre_search
+#  define re_compile_pattern xre_compile_pattern
+#  define re_set_syntax xre_set_syntax
+#  define re_search_2 xre_search_2
+#  define re_compile_fastmap xre_compile_fastmap
+#  define re_syntax_options xre_syntax_options
+#  define re_max_failures xre_max_failures
+
+#  define _REGEX_RE_COMP
+#  define re_comp xre_comp
+#  define re_exec xre_exec
+
+#include "xregex2.h"
+
+#endif /* xregex.h */
diff --git a/include/xregex2.h b/include/xregex2.h
new file mode 100644 (file)
index 0000000..d3d0da1
--- /dev/null
@@ -0,0 +1,565 @@
+/* Definitions for data structures and routines for the regular
+   expression library, version 0.12.
+
+   Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
+   1998, 2000, 2005 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in /gd/gnu/lib.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.  */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+   <regex.h>.  */
+
+#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
+/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+   should be there.  */
+# include <stddef.h>
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+        ^  is an anchor if it is at the beginning of a regular
+           expression or after an open-group or an alternation operator;
+        $  is an anchor if it is at the end of a regular expression, or
+           before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+   a string of ordinary characters.  For example, the ERE 'a{1' is
+   treated as 'a\{1'.  */
+#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        \
+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                    \
+   | RE_INVALID_INTERVAL_ORD)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+\f
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+#ifdef RE_DUP_MAX
+# undef RE_DUP_MAX
+#endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+#define RE_DUP_MAX (0x7fff)
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+#ifdef _XOPEN_SOURCE
+  REG_ENOSYS = -1,     /* This will never happen for this implementation.  */
+#endif
+
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Not implemented.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN          /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+\f
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   `translate', and `no_sub' can be set.  After the pattern has been
+   compiled, the `re_nsub' field is available.  All other fields are
+   private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+# define RE_TRANSLATE_TYPE char *
+#endif
+
+struct re_pattern_buffer
+{
+/* [[[begin pattern_buffer]]] */
+       /* Space that holds the compiled pattern.  It is declared as
+          `unsigned char *' because its elements are
+           sometimes used as array indexes.  */
+  unsigned char *buffer;
+
+       /* Number of bytes to which `buffer' points.  */
+  unsigned long int allocated;
+
+       /* Number of bytes actually used in `buffer'.  */
+  unsigned long int used;
+
+        /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t syntax;
+
+        /* Pointer to a fastmap, if any, otherwise zero.  re_search uses
+           the fastmap, if there is one, to skip over impossible
+           starting points for matches.  */
+  char *fastmap;
+
+        /* Either a translate table to apply to all characters before
+           comparing them, or zero for no translation.  The translation
+           is applied to a pattern when it is compiled and to a string
+           when it is matched.  */
+  RE_TRANSLATE_TYPE translate;
+
+       /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+        /* Zero if this pattern cannot match the empty string, one else.
+           Well, in truth it's used only in `re_search_2', to see
+           whether or not we should use the fastmap, so we don't set
+           this absolutely perfectly; see `re_compile_fastmap' (the
+           `duplicate' case).  */
+  unsigned can_be_null : 1;
+
+        /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+             for `max (RE_NREGS, re_nsub + 1)' groups.
+           If REGS_REALLOCATE, reallocate space if necessary.
+           If REGS_FIXED, use what's there.  */
+#define REGS_UNALLOCATED 0
+#define REGS_REALLOCATE 1
+#define REGS_FIXED 2
+  unsigned regs_allocated : 2;
+
+        /* Set to zero when `regex_compile' compiles a pattern; set to one
+           by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned fastmap_accurate : 1;
+
+        /* If set, `re_match_2' does not return information about
+           subexpressions.  */
+  unsigned no_sub : 1;
+
+        /* If set, a beginning-of-line anchor doesn't match at the
+           beginning of the string.  */
+  unsigned not_bol : 1;
+
+        /* Similarly for an end-of-line anchor.  */
+  unsigned not_eol : 1;
+
+        /* If true, an anchor at a newline matches.  */
+  unsigned newline_anchor : 1;
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* Type for byte offsets within the string.  POSIX mandates this.  */
+typedef int regoff_t;
+
+
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+#ifndef RE_NREGS
+# define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+/* To avoid duplicating every routine declaration -- once with a
+   prototype (if we are ANSI), and once without (if we aren't) -- we
+   use the following macro to declare argument types.  This
+   unfortunately clutters up the declarations a bit, but I think it's
+   worth it.  */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax (reg_syntax_t syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.  */
+extern const char *re_compile_pattern (const char *pattern, size_t length,
+                                       struct re_pattern_buffer *buffer);
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap (struct re_pattern_buffer *buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern int re_search (struct re_pattern_buffer *buffer, const char *string,
+                      int length, int start, int range,
+                      struct re_registers *regs);
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern int re_search_2 (struct re_pattern_buffer *buffer, const char *string1,
+                        int length1, const char *string2, int length2,
+                        int start, int range, struct re_registers *regs,
+                        int stop);
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern int re_match (struct re_pattern_buffer *buffer, const char *string,
+                     int length, int start, struct re_registers *regs);
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern int re_match_2 (struct re_pattern_buffer *buffer, const char *string1,
+                       int length1, const char *string2, int length2,
+                       int start, struct re_registers *regs, int stop);
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers (struct re_pattern_buffer *buffer,
+                              struct re_registers *regs,
+                              unsigned num_regs, regoff_t *starts,
+                              regoff_t *ends);
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+
+/* GCC 3.1 and later support declaring arrays as non-overlapping
+   using the syntax array_name[restrict]  */
+#ifndef __restrict_arr
+# if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__)
+#  define __restrict_arr
+# else
+#  define __restrict_arr __restrict
+# endif
+#endif
+
+/* POSIX compatibility.  */
+extern int regcomp (regex_t *__restrict __preg,
+                    const char *__restrict __pattern,
+                    int __cflags);
+
+#if (__GNUC__)
+__extension__
+#endif
+extern int regexec (const regex_t *__restrict __preg,
+                    const char *__restrict __string, size_t __nmatch,
+                    regmatch_t __pmatch[__restrict_arr],
+                    int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t *__preg,
+                        char *__errbuf, size_t __errbuf_size);
+
+extern void regfree (regex_t *__preg);
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
+\f
+/*
+Local variables:
+make-backup-files: t
+version-control: t
+trim-versions-without-asking: nil
+End:
+*/
diff --git a/include/xtensa-config.h b/include/xtensa-config.h
new file mode 100644 (file)
index 0000000..2aca5fe
--- /dev/null
@@ -0,0 +1,166 @@
+/* Xtensa configuration settings.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
+   Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef XTENSA_CONFIG_H
+#define XTENSA_CONFIG_H
+
+/* The macros defined here match those with the same names in the Xtensa
+   compile-time HAL (Hardware Abstraction Layer).  Please refer to the
+   Xtensa System Software Reference Manual for documentation of these
+   macros.  */
+
+#undef XCHAL_HAVE_BE
+#define XCHAL_HAVE_BE                  1
+
+#undef XCHAL_HAVE_DENSITY
+#define XCHAL_HAVE_DENSITY             1
+
+#undef XCHAL_HAVE_CONST16
+#define XCHAL_HAVE_CONST16             0
+
+#undef XCHAL_HAVE_ABS
+#define XCHAL_HAVE_ABS                 1
+
+#undef XCHAL_HAVE_ADDX
+#define XCHAL_HAVE_ADDX                        1
+
+#undef XCHAL_HAVE_L32R
+#define XCHAL_HAVE_L32R                        1
+
+#undef XSHAL_USE_ABSOLUTE_LITERALS
+#define XSHAL_USE_ABSOLUTE_LITERALS    0
+
+#undef XCHAL_HAVE_MAC16
+#define XCHAL_HAVE_MAC16               0
+
+#undef XCHAL_HAVE_MUL16
+#define XCHAL_HAVE_MUL16               0
+
+#undef XCHAL_HAVE_MUL32
+#define XCHAL_HAVE_MUL32               0
+
+#undef XCHAL_HAVE_MUL32_HIGH
+#define XCHAL_HAVE_MUL32_HIGH          0
+
+#undef XCHAL_HAVE_DIV32
+#define XCHAL_HAVE_DIV32               0
+
+#undef XCHAL_HAVE_NSA
+#define XCHAL_HAVE_NSA                 1
+
+#undef XCHAL_HAVE_MINMAX
+#define XCHAL_HAVE_MINMAX              0
+
+#undef XCHAL_HAVE_SEXT
+#define XCHAL_HAVE_SEXT                        0
+
+#undef XCHAL_HAVE_LOOPS
+#define XCHAL_HAVE_LOOPS               1
+
+#undef XCHAL_HAVE_THREADPTR
+#define XCHAL_HAVE_THREADPTR           1
+
+#undef XCHAL_HAVE_RELEASE_SYNC
+#define XCHAL_HAVE_RELEASE_SYNC                0
+
+#undef XCHAL_HAVE_S32C1I
+#define XCHAL_HAVE_S32C1I              0
+
+#undef XCHAL_HAVE_BOOLEANS
+#define XCHAL_HAVE_BOOLEANS            0
+
+#undef XCHAL_HAVE_FP
+#define XCHAL_HAVE_FP                  0
+
+#undef XCHAL_HAVE_FP_DIV
+#define XCHAL_HAVE_FP_DIV              0
+
+#undef XCHAL_HAVE_FP_RECIP
+#define XCHAL_HAVE_FP_RECIP            0
+
+#undef XCHAL_HAVE_FP_SQRT
+#define XCHAL_HAVE_FP_SQRT             0
+
+#undef XCHAL_HAVE_FP_RSQRT
+#define XCHAL_HAVE_FP_RSQRT            0
+
+#undef XCHAL_HAVE_WINDOWED
+#define XCHAL_HAVE_WINDOWED            1
+
+#undef XCHAL_HAVE_WIDE_BRANCHES
+#define XCHAL_HAVE_WIDE_BRANCHES       0
+
+#undef XCHAL_HAVE_PREDICTED_BRANCHES
+#define XCHAL_HAVE_PREDICTED_BRANCHES  0
+
+
+#undef XCHAL_ICACHE_SIZE
+#define XCHAL_ICACHE_SIZE              8192
+
+#undef XCHAL_DCACHE_SIZE
+#define XCHAL_DCACHE_SIZE              8192
+
+#undef XCHAL_ICACHE_LINESIZE
+#define XCHAL_ICACHE_LINESIZE          16
+
+#undef XCHAL_DCACHE_LINESIZE
+#define XCHAL_DCACHE_LINESIZE          16
+
+#undef XCHAL_ICACHE_LINEWIDTH
+#define XCHAL_ICACHE_LINEWIDTH         4
+
+#undef XCHAL_DCACHE_LINEWIDTH
+#define XCHAL_DCACHE_LINEWIDTH         4
+
+#undef XCHAL_DCACHE_IS_WRITEBACK
+#define XCHAL_DCACHE_IS_WRITEBACK      0
+
+
+#undef XCHAL_HAVE_MMU
+#define XCHAL_HAVE_MMU                 1
+
+#undef XCHAL_MMU_MIN_PTE_PAGE_SIZE
+#define XCHAL_MMU_MIN_PTE_PAGE_SIZE    12
+
+
+#undef XCHAL_HAVE_DEBUG
+#define XCHAL_HAVE_DEBUG               1
+
+#undef XCHAL_NUM_IBREAK
+#define XCHAL_NUM_IBREAK               2
+
+#undef XCHAL_NUM_DBREAK
+#define XCHAL_NUM_DBREAK               2
+
+#undef XCHAL_DEBUGLEVEL
+#define XCHAL_DEBUGLEVEL               4
+
+
+#undef XCHAL_INST_FETCH_WIDTH
+#define XCHAL_INST_FETCH_WIDTH         4
+
+
+#undef XSHAL_ABI
+#undef XTHAL_ABI_WINDOWED
+#undef XTHAL_ABI_CALL0
+#define XSHAL_ABI                      XTHAL_ABI_WINDOWED
+#define XTHAL_ABI_WINDOWED             0
+#define XTHAL_ABI_CALL0                        1
+
+#endif /* !XTENSA_CONFIG_H */
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
new file mode 100644 (file)
index 0000000..574e054
--- /dev/null
@@ -0,0 +1,1253 @@
+2008-01-07  Fred Fish  <fnf@specifix.com>
+
+       PR preprocessor/30363:
+       * traditional.c (replace_args_and_push): Add local variable
+       cxtquote, calculate the replacement text size assuming a 
+       worst case of every input character quoted with backslash,
+       and properly handle output quoting of quote characters in
+       actual arguments used in function-like macros.
+
+2008-01-03  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/34602.
+       * directives.c (do_line): Don't try to spell EOF token.
+       (do_linemarker): Add comment.
+
+2007-12-11  DJ Delorie  <dj@redhat.com>
+
+       * charset.c (convert_using_iconv): Close out any shift states,
+       returning to the initial state.
+
+2007-12-06  Tom Tromey  <tromey@redhat.com>
+
+       PR c/29172:
+       * internal.h (struct cpp_reader) <file_hash_entries>: Changed
+       type.
+       <file_hash_entries_allocated, file_hash_entries_used>: Removed.
+       * files.c (FILE_HASH_POOL_SIZE): New macro.
+       (struct file_hash_entry_pool): New.
+       (destroy_all_cpp_files): New function.
+       (allocate_file_hash_entries): Allocate a file_hash_entry_pool.
+       (new_file_hash_entry): Update.
+       (free_file_hash_entries): New function.
+       (_cpp_cleanup_files): Call free_file_hash_entries and
+       destroy_all_cpp_files.
+       (cpp_clear_file_cache): New function.
+       * include/cpplib.h (cpp_clear_file_cache): Declare.
+
+2007-12-03  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/34288:
+       * configure.ac, config.in: Rebuilt.
+       * configure.ac: Check for ssize_t.
+
+2007-11-30  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/32868:
+       * macro.c (_cpp_create_definition): Special case
+       __STDC_FORMAT_MACROS.
+
+2007-11-16  Michael Matz  <matz@suse.de>
+
+       * files.c (search_path_head): Fix check for absolute paths.
+
+2007-11-11  Tom Tromey  <tromey@redhat.com>
+
+       PR c++/17557:
+       * include/cpplib.h (cpp_included_before): Declare.
+       * files.c (struct file_hash_entry) <location>: New field.
+       (_cpp_find_file): Initialize new field.
+       (make_cpp_dir): Likewise.
+       (cpp_included_before): New function.
+
+2007-11-01  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/30805:
+       * macro.c (paste_tokens): Handle padding token.
+       (paste_tokens): Don't abort unless padding has PASTE_LEFT flag.
+
+2007-10-31  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/30786:
+       * macro.c (builtin_macro): Return result of _cpp_do__Pragma.
+       * directives.c (_cpp_do__Pragma): Return error status.
+       * internal.h (_cpp_do__Pragma): Update.
+       * directives.c (get__Pragma_string): Back up if EOF seen.
+
+2007-09-06  Tom Tromey  <tromey@redhat.com>
+
+       * internal.h (struct cpp_reader) <invocation_location>: New
+       field.
+       (struct cpp_reader) <set_invocation_location>: Likewise.
+       * init.c (cpp_set_line_map): New function.
+       * line-map.c (linemap_add): Use linemap's allocator.
+       * include/line-map.h (GTY): Define.
+       (line_map_realloc): New typedef.
+       (struct line_map): Mark with GTY.
+       (struct line_maps): Likewise.
+       (struct line_maps) <maps>: Likewise.
+       (struct line_maps) <reallocator>: New field.
+       * include/symtab.h (GTY): Conditionally define.
+       * include/cpplib.h (cpp_set_line_map): Declare.
+       (cpp_get_token_with_location): Declare.
+       * macro.c (cpp_get_token): Set invocation_location on the reader.
+       (cpp_get_token_with_location): New function.
+
+2007-08-30  Chao-ying Fu  <fu@mips.com>
+
+       * expr.c (interpret_float_suffix): Support hr, r, lr, llr, uhr, ur,
+       ulr, ullr, hk, k, lk, llk, uhk, uk, ulk, ullk.
+       (cpp_classify_number): Support decimal fixed-point constants without
+       exponents.
+       Warn about fixed-point constants when -pedantic.
+       * include/cpplib.h (CPP_N_SMALL, CPP_N_MEDIUM, CPP_N_LARGE): Change
+       comments to support fixed-point values.
+       (CPP_N_FRACT, CPP_N_ACCUM): Define.
+
+2007-08-18  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/32974:
+       * directives.c (parse_include): Don't check for EOL when
+       processing #pragma dependency.
+
+2007-07-30  Ollie Wild  <aaw@google.com>
+
+       * directives-only.c: New file.
+       * internal.h (struct _cpp_dir_only_callbacks): New.
+       (_cpp_preprocess_dir_only): New function.
+       * directives.c (_cpp_handle_directive): Check directives_only before
+       disabling execution of indented directives.
+       * files.c (_cpp_stack_file): Add directives_only check.
+       * include/cpplib.h (struct cpp_options): Add directives_only.
+       (cpp_init_special_builtins): New function.
+       * init.c (cpp_init_special_builtins): New function.
+       (cpp_init_builtins): Move builtin_array initialization to
+       cpp_init_special_builtins.
+       (post_options): Check directives_only before setting
+       pfile->state.prevent_expansion = 1.
+       * macro.c (_cpp_builtin_macro_text): Print an error if __COUNTER__
+       is expanded inside a directive while -fdirectives-only is enabled.
+       * Makefile.in (libcpp_a_OBJS): Add directives-only.o.
+       (libcpp_a_SOURCES): Add directives-only.c.
+
+2007-07-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       * traditional.c (_cpp_scan_out_logical_line): Initialize
+       fmacro.args, fmacro.node, fmacro.offset, fmacro.line and
+       fmacro.args to prevent 'may be used uninitialized' warning.
+
+2007-07-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * include/cpplib.h (CPP_N_WIDTH_MD, CPP_N_MD_W, CPP_N_MD_Q):
+       Add new constants.
+       * expr.c (interpret_float_suffix): Process 'w', 'W', 'q' and 'Q'
+       suffixes.  Return CPP_N_MD_W for 'w' or 'W' suffixes and CPP_N_MD_Q
+       for 'q' or 'Q' suffixes.
+
+2007-06-17  Danny Smith  <dannysmith@users.sourceforge.net
+
+       * files.c (open_file): Correct typo.
+
+2007-06-16  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * files.c (open_file): Prevent the call
+       for stat from overwriting errno.
+
+2007-06-09  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * files.c (open_file): Account for the
+        fact that on windows, opening a directory gives
+        EACCES.
+
+2007-06-05  Joerg Wunsch  <j.gnu@uriah.heep.sax.de>
+
+       PR preprocessor/23479
+       * expr.c (cpp_classify_number): Implement 0b-prefixed binary
+       integer constants.
+       (append_digit): Likewise.
+       * include/cpplib.h: Add CPP_N_BINARY, to be used for 0b-prefixed
+       binary integer constants.
+
+2007-05-31  Dave Korn  <dave.korn@artimi.com>
+
+       PR preprocessor/14331
+       * lex.c (_cpp_get_fresh_line):  Don't warn if no newline at EOF.
+
+2007-05-24  Ollie Wild  <aaw@google.com>
+
+       * macro.c (_cpp_builtin_macro_text): Handle BT_COUNTER.
+       * pch.c (cpp_write_pch_deps): Save __COUNTER__ state.
+       (cpp_write_pch_state): Save __COUNTER__ state.
+       (cpp_valid_state): Check valid __COUNTER__ state.
+       (cpp_read_state): Read new __COUNTER__ state.
+       * include/cpplib.h (enum builtin_type): Add BT_COUNTER enumerator.
+       * init.c (builtin_array): Add __COUNTER__/BT_COUNTER.
+       * internal.h (struct cpp_reader): Add counter member.
+
+2007-05-23  Simon Martin  <simartin@users.sourceforge.net>
+
+       PR preprocessor/20077
+       * macro.c (create_iso_definition): Fixed the method to determine
+       whether the token-pasting operator appears at the beginning or the end
+       of a macro.
+
+2007-05-21  Ian Lance Taylor  <iant@google.com>
+
+       * internal.h (struct cpp_reader): Add new fields:
+       nonexistent_file_hash and nonexistent_file_ob.
+       * files.c: Include "obstack.h".
+       (find_file_in_dir): Before trying to open the file, look up the
+       path name in the hash table of nonexistent files.  After failing
+       to open the file, add the path name to the hash table.
+       (_cpp_find_file): Cache the results of looking up the file name
+       starting with the quote and bracket chain heads, if we can.
+       (nonexistent_file_hash_eq): New static function.
+       (_cpp_init_files): Initialize pfile->nonexistent_file_hash and
+       pfile->nonexistent_file_ob.
+       (_cpp_cleanup_files): Free pfile->nonexistent_file_hash and
+       pfile->nonexistent_file_ob.
+
+2007-05-14  Janis Johnson  <janis187@us.ibm.com>
+
+        * expr.c (cpp_classify_number): Warn about dfp constant for -pedantic.
+
+       PR c/31924
+       * expr.c (interpret_float_suffix): Check for invalid suffix.
+
+2007-05-02  Eric Christopher  <echristo@apple.com>
+
+       * expr.c (num_div_op): Don't overflow if the result is
+       zero.
+
+2007-05-02  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/28709:
+       * macro.c (paste_tokens): Remove PASTE_LEFT from the old lhs.
+
+2007-03-30  Michael Meissner  <michael.meissner@amd.com>
+
+       * directives.c (lex_macro_node_from_str): Fix alloca call to be
+       type correct.
+
+2007-03-30  Richard Henderson  <rth@redhat.com>
+
+       * directives.c (lex_macro_node_from_str): New.
+       (cpp_push_definition, cpp_pop_definition): New.
+       * include/cpplib.h (cpp_push_definition, cpp_pop_definition): Declare.
+
+2007-03-01  Brooks Moses  <brooks.moses@codesourcery.com>
+
+       * Makefile.in: Add dummy install-pdf target.
+
+2007-01-30  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/30468:
+       * mkdeps.c (apply_vpath): Strip successive '/'s if we stripped
+       './'.
+
+2007-01-30  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/29966:
+       * macro.c (lex_expansion_token): Save and restore cpp_reader's
+       cur_token.
+       (_cpp_create_definition): Don't restore cur_token here.
+       * lex.c (_cpp_lex_token): Added assertion.
+
+2007-01-27  Tom Tromey  <tromey@redhat.com>
+
+       * configure: Rebuilt.
+
+2007-01-12  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/28227:
+       * directives.c (lex_macro_node): Added 'is_def_or_undef'
+       argument.
+       (do_define): Update.
+       (do_undef): Update.
+       (do_ifdef): Update.
+       (do_ifndef): Update.
+
+2007-01-11  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure: Regenerate.
+
+2007-01-11  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure: Regenerate.
+
+2007-01-04  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/28165:
+       * internal.h (cpp_in_primary_file): New function.
+       * directives.c (do_include_next): Use cpp_in_primary_file.
+       (do_pragma_once): Likewise.
+       (do_pragma_system_header): Likewise.
+
+2006-12-29  Ian Lance Taylor  <iant@google.com>
+
+       * lex.c (_cpp_clean_line): Add uses of __builtin_expect.  Don't
+       look backward at the end of the line unless we saw a backslash.
+
+2006-12-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/29612
+       * directives.c (do_linemarker): Set pfile->buffer->sysp always, not
+       only when new_sysp is non-zero.
+
+2006-12-28  Tom Tromey  <tromey@redhat.com>
+
+       PR preprocessor/30001:
+       * charset.c (_cpp_convert_input): Check that to.len is greater
+       than zero.
+
+2006-11-20  Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
+
+       * configure.ac (need_64bit_hwint): Need 64bit hwint for SPU.
+       * configure: Rebuilt.
+
+2006-11-01     Douglas Gregor <doug.gregor@gmail.com>
+
+       * include/cpplib.h (enum c_lang): Add CLK_GNUCXX0X and CLK_CXX0X
+       for experimental C++0x mode.
+       * init.c (lang_defaults): Add defaults for C++0x modes. C++0x has
+       adopted the preprocessor changes introduced in C99.
+
+2006-10-29  Joseph Myers  <joseph@codesourcery.com>
+
+       * configure.ac (need_64bit_hwint): Set for i[34567]86-*-linux*
+       depending on --enable-targets=all.
+       * configure: Regenerate.
+
+2006-10-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/28709
+       * macro.c (paste_tokens): Do error reporting here, use BUF with the
+       spelled LHS token as opposed to spelling it again.
+       (paste_all_tokens): Don't report errors here, just break on failure.
+
+2006-10-10  Brooks Moses  <bmoses@stanford.edu>
+
+       * Makefile.in: Added empty "pdf" target.
+
+2006-09-22  Geoffrey Keating  <geoffk@apple.com>
+
+       * configure.ac: Make need_64_bit_hwint case for x86-darwin
+       match exactly the glob in gcc/config.gcc.
+       * configure: Regenerate.
+
+2006-09-13  Joseph S. Myers  <joseph@codesourcery.com>
+
+       PR c/28768
+       PR preprocessor/14634
+       * lex.c (lex_string): Pedwarn for unterminated literals.
+
+2006-09-08  Eric Christopher  <echristo@apple.com>
+
+       * configure.ac: Add 64-bit HWI support for i?86-darwin.
+
+2006-08-14  Steve Ellcey  <sje@cup.hp.com>
+
+       PR c++/28288
+       PR c++/14556
+       * include/cpplib.h: Remove <?, >?, <?=, and >?= tokens.
+       (CPP_LAST_EQ): Change.
+       (CPP_LAST_PUNCTUATOR): Change.
+       * expr.c (cpp_operator): Remove MIN and MAX.
+       (reduce): Remove CPP_MIN and CPP_MAX.
+       (num_binary_op): Ditto.
+       * lex.c (_cpp_lex_direct): Ditto.
+       (cpp_avoid_paste): Remove ? as legal symbol after > or <.
+
+2006-06-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/27746
+       * directives.c (do_pragma): Handle pragma with valid namespace
+       and invalid name coming from macro expansion.
+       * directives.c (destringize_and_run): Initialize next field in
+       context.
+
+       PR c/27747
+       PR c++/27748
+       * directives.c (destringize_and_run): Set NO_EXPAND on the
+       tokens.
+
+       * macro.c (_cpp_backup_tokens): Fix comment typo.
+
+2006-05-31  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * Makefile.in (CATALOGS): Add po/ prefix.
+       * configure: Regenerated.
+
+2006-05-23  Carlos O'Donell  <carlos@codesourcery.com>
+
+       * Makefile.in: Add install-html target. Add install-html to .PHONY
+
+2006-02-17  Grigory Zagorodnev <grigory_zagorodnev@linux.intel.com>
+
+       * macro.c (_cpp_builtin_macro_text): Handle BT_TIMESTAMP.
+       * files.c (_cpp_get_file_stat): New function.
+       * include/cpplib.h (builtin_type): Add BT_TIMESTAMP.
+       * init.c (builtin_array): Add support for __TIMESTAMP__/BT_TIMESTAMP.
+       * internal.h (_cpp_get_file_stat): Prototype.
+       (struct cpp_buffer): Add timestamp.
+
+2006-01-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/25717
+       * init.c (cpp_init_builtins): If __STDC__ will not change value
+       between system headers and other sources, define it as a normal
+       macro rather than a builtin.
+       * macro.c (_cpp_builtin_macro_text) <case BT_STDC>: Only check
+       cpp_in_system_header condition.
+
+2006-01-05  Paolo Bonzini  <bonzini@gnu.org>
+
+       * Makefile.in: Use -MMD instead of -MD.
+
+2006-01-04  Dmitry Kurochkin <dmitry.kurochkin@gmail.com>
+           Richard Henderson  <rth@redhat.com>
+
+       Merge from gomp branch:
+       * directives.c (struct pragma_entry): Add is_deferred.  Add ident
+       entry to value union.
+       (end_directive): Don't eat the line if in_deferred_pragma.
+       (run_directive): Remove pragma hacks.
+       (insert_pragma_entry): Remove.
+       (new_pragma_entry): New.
+       (register_pragma_1): Split out of register_pragma.  Only handle
+       the lookup tree and return the new entry.
+       (cpp_register_pragma): Fill in the pragma entry here.
+       (cpp_register_deferred_pragma): New.
+       (register_pragma_internal): New.
+       (_cpp_init_internal_pragmas): Use register_pragma_internal.
+       (do_pragma): Allow pragma expansion after namespace.  For deferred
+       pragmas, don't slurp the line into a string.
+       (destringize_and_run): Save tokens for deferred pragmas.
+       (cpp_handle_deferred_pragma): Remove.
+       * macro.c (builtin_macro): Remove pragma token hack.
+       (_cpp_push_token_context): Rename from push_token_context and export.
+       * internal.h (struct lexer_state): Add pragma_allow_expansion.
+       (_cpp_push_token_context): Declare.
+       * lex.c (_cpp_lex_token): Allow _cpp_handle_directive to return
+       a token.  Update the line number correctly if so.
+       (_cpp_lex_direct): Emit CPP_PRAGMA_EOL tokens.
+       (cpp_token_val_index): Return CPP_TOKEN_FLD_PRAGMA for pragmas.
+       * include/cpplib.h (PRAGMA_EOL): New.
+       (CPP_TOKEN_FLD_PRAGMA): New.
+       (struct cpp_token): Add val.pragma.
+       (struct cpp_options): Remove defer_pragmas.
+       (cpp_handle_deferred_pragma): Remove.
+       (cpp_register_deferred_pragma): Declare.
+
+2006-01-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/25294
+       * directives.c (do_pragma): If pragma line ends with multi-line
+       block comment, end the saved deferred pragma string before that
+       comment.  Handle embedded '\0' chars on the pragma line.
+
+2005-12-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/23333
+       * include/cpplib.h: Add PURE_ZERO to flags for the cpp_token structure.
+
+2005-12-07  Jon Grimm  <jgrimm2@us.ibm.com>
+           Ben Elliston  <bje@au.ibm.com>
+
+       * include/cpplib.h (CPP_N_DFLOAT): New.
+       * expr.c (interpret_float_suffix): Identify df, dd, and dl
+       suffixes as decimal floating point constants.
+       (cpp_classify_number): Disallow hexadecimal DFP constants.
+
+2005-11-14  Gerald Pfeifer  <gerald@pfeifer.com>
+           Ian Lance Taylor  <ian@airs.com>
+
+       * include/cpplib.h (struct cpp_callbacks): Annotate error with
+       ATTRIBUTE_FPTR_PRINTF(3,0) instead of ATTRIBUTE_PRINTF(3,0).
+
+2005-11-09  Per Bothner  <per@bothner.com>
+           Uros Bizjak  <uros@kss-loka.si>
+
+       PR c/24101
+       * init.c (read_original_filename): Temporarily set
+       state.in_directive before calling _cpp_lex_direct for
+       CPP_HASH tokens.
+
+2005-11-03  James E Wilson  <wilson@specifix.com>
+
+       PR preprocessor/24202
+       * files.c (_cpp_pop_file_buffer): Set buffer_valid to false.
+
+2005-11-04  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * include/cpplib.h (struct cpp_callbacks): Make error take
+       va_list* parameter.
+       * errors.c (cpp_error): Update call to callback.
+
+2005-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR preprocessor/22042
+       * macro.c (_cpp_builtin_macro_text): Lower the needed max
+       buffer size.
+       (cpp_quote_string): Don't octalify non printable
+       charactors.
+
+2005-11-03  Joseph S. Myers  <joseph@codesourcery.com>
+
+       PR c++/17964
+       * include/cpplib.h (struct cpp_options): Add client_diagnostic.
+       (struct cpp_callbacks): Add error.
+       * errors.c (cpp_error): If client_diagnostic, use error callback.
+       * charset.c (convert_escape): Don't use %03o in diagnostic.
+
+2005-10-21  James E Wilson  <wilson@specifix.com>
+
+       PR preprocessor/15220
+       * files.c (_cpp_find_file): New parameter angle_brackets.  Fix all
+       callers.  Pass to open_file_failed.
+       (open_file_failed): New parameter angle_brackets.  Fix all callers.
+       Use in print_dep assignment.
+       * init.c (cpp_read_main_file): Pass additional arg to _cpp_find_file.
+       * internal.h (_cpp_find_file): Add new parm to declaration.
+
+2005-10-08  Kazu Hirata  <kazu@codesourcery.com>
+
+       * configure.ac: Require 64-bit int for arm*-*-*eabi*.
+       * configure: Regenerate.
+
+2005-10-04  Ian Lance Taylor  <ian@airs.com>
+
+       PR preprocessor/13726
+       * directives.c (check_eol_return_comments): New static function.
+       (parse_include): Add buf parameter.  Change all callers.
+       (do_include_common): If not discard comments, turn on
+       save_comments.  Pass collected comments to include callback.
+       * include/cpplib.h (struct cpp_callbacks): Add new parameter to
+       include callback: cpp_token list.
+
+2005-09-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * include/cpplib.h (struct cpp_options): Add extended_identifiers.
+       * init.c (struct lang_flags, lang_defaults): Add
+       extended_identifiers.
+       (cpp_set_lang): Use it.
+       * lex.c (forms_identifier_p): Check extended_identifiers.
+
+2005-08-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/20348
+       PR preprocessor/20356
+       * files.c (_cpp_find_file, search_cache): Revert 2004-06-26 and
+       2004-06-05 changes.
+
+2005-07-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.ac (ACX_PROG_CC_WARNING_OPTS): add
+       -Wmissing-format-attribute.
+
+       * configure: Regenerate.
+
+2005-06-29  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * all files: Update FSF address in copyright headers.
+       * makeucnid.c (write_copyright): Update outputted FSF address.
+
+2005-06-13  Zack Weinberg  <zack@codesourcery.com>
+
+       * configure.ac: Invoke ZW_CREATE_DEPDIR and
+       ZW_PROG_COMPILER_DEPENDENCIES.
+       * aclocal.m4, configure: Regenerate.
+       * Makefile.in (DEPMODE, DEPDIR, depcomp, COMPILE.base, COMPILE):
+       New variables.
+       (distclean): Clean up $(DEPDIR) and its contents.
+       (.c.o): Use $(COMPILE).
+       Include $(DEPDIR)/*.Po for most object->header dependencies.
+
+2005-05-28  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * configure.ac: Check declarations for asprintf and vasprintf.
+       * config.in: Regenerate.
+       * configure: Likewise.
+
+       * charset.c (conversion_loop): Use XRESIZEVEC.
+       (convert_no_conversion): Likewise.
+       (convert_using_iconv): Likewise.
+       (init_iconv_desc): Cast return value of alloca.
+       (cpp_host_to_exec_charset): Use XNEWVEC.
+       (emit_numeric_escape): Use XRESIZEVEC.
+       (cpp_interpret_string): Use XNEWVEC.
+       (cpp_interpret_string): Use XRESIZEVEC.
+       (_cpp_interpret_identifier): Cast return value of alloca.
+       (_cpp_convert_input): Use XNEWVEC and XRESIZEVEC.
+       * directives.c (glue_header_name): Use XNEWVEC and XRESIZEVEC.
+       (parse_include): Use XNEWVEC.
+       (insert_pragma_entry): Rename local variable "new" to
+       "new_entry".
+       (save_registered_pragmas): Cast return value of xmemdup.
+       (destringize_and_run): Same for alloca.
+       (parse_assertion): Likewise.
+       (do_assert): Cast allocated storage to proper type.
+       (cpp_define): Likewise.
+       (_cpp_define_builtin): Likewise.
+       (cpp_undef): Likewise.
+       (handle_assertion): Likewise.
+       (cpp_push_buffer): Rename local variable "new" to "new_buffer".
+       * expr.c (CPP_UPLUS): Cast value to type cpp_ttype.
+       (CPP_UMINUS): Likewise.
+       (struct cpp_operator): Rename from struct operator.
+       (_cpp_expand_op_stack): Use XRESIZEVEC.
+       * files.c (pch_open_file): Use XNEWVEC.
+       (pch_open_file): Use XRESIZEVEC.
+       (read_file_guts): Use XNEWVEC and XRESIZEVEC.
+       (dir_name_of_file): Use XNEWVEC.
+       (make_cpp_file): Use XCNEW.
+       (make_cpp_dir): Likewise.
+       (allocate_file_hash_entries): USE XNEWVEC.
+       (cpp_included): Cast return value of htab_find_with_hash.
+       (append_file_to_dir): Use XNEWVEC.
+       (read_filename_string): Likewise. Use XRESIZEVEC too.
+       (read_name_map): Cast return value of alloca.  Use XRESIZEVEC.
+       (remap_filename): Use XNEWVEC.
+       (struct pchf_entry): Move definition out of struct pchf_data.
+       (_cpp_save_file_entries): Use XCNEWVAR.
+       (_cpp_read_file_entries): Use XNEWVAR.
+       * identifiers.c (alloc_node): Use XOBNEW.
+       * init.c (cpp_create_reader): Use XCNEW.
+       (cpp_init_builtins): Cast of b->value to enum builtin_type.
+       (read_original_directory): Cast return value of alloca.
+       * lex.c (add_line_note): Use XRESIZEVEC.
+       (warn_about_normalization): Use XNEWVEC.
+       (_cpp_lex_direct): Cast node->directive_index to (enum cpp_ttype).
+       (new_buff): Use XNEWVEC.
+       * line-map.c (linemap_add): Use XRESIZEVEC.
+       * macro.c (builtin_macro): Cast return value of alloca.
+       (paste_tokens): Likewise.
+       (expand_arg): Use XNEWVEC and XRESIZEVEC.
+       (_cpp_save_parameter): Use XRESIZEVEC.
+       (create_iso_definition): Cast allocated storage to proper type.
+       (_cpp_create_definition): Likewise.
+       (cpp_macro_definition): Use XRESIZEVEC.
+       * makedepend.c (add_clm): Use XNEW.
+       (add_dir): Likewise.
+       * mkdeps.c (munge): Use XNEWVEC.
+       (deps_init): Use XCNEW.
+       (deps_add_target): Use XRESIZEVEC.
+       (deps_add_default_target): Cast return value of alloca.
+       (deps_add_dep): Use XRESIZEVEC.
+       (deps_add_vpath): Likewise.  Use XNEWVEC too.
+       (deps_restore): Likewise.
+       * pch.c (save_idents): Use XNEW and XNEWVEC.
+       (cpp_save_state): Use XNEW.
+       (count_defs): Cast return value of htab_find.
+       (write_defs): Likewise.
+       (cpp_write_pch_deps): Use XNEWVEC.
+       (collect_ht_nodes): Use XRESIZEVEC.
+       (cpp_valid_state): Use XNEWVEC.
+       (save_macros): Use XRESIZEVEC.  Cast return value of xmemdup.
+       * symtab.c (ht_create): Use XCNEW.
+       (ht_lookup_with_hash): Cast return value of obstack_copy0.
+       (ht_expand): Use XCNEWVEC.
+       * system.h (HAVE_DESIGNATED_INITIALIZERS): False if __cplusplus.
+       (bool): Do not define if __cplusplus.
+
+2005-05-12  Zack Weinberg  <zack@codesourcery.com>
+
+       * directives.c (#sccs table entry): Mark IN_I, consistent with #ident.
+       (do_sccs): Delete function definition, #define to do_ident.
+       (do_ident): Don't hardwire directive name.
+
+2005-05-12  Ryota Kunisawa  <kunisawa@access.co.jp>
+
+       PR bootstrap/21230
+       * configure: Regenerate.
+
+2005-04-27  Andris Pavenis  <pavenis@latnet.lv>
+
+       * files.c: Include io.h for DJGPP to get prototype of setmode.
+
+2005-04-19  Per Bothner  <per@bothner.com>
+
+       PR preprocessor/20907
+       * line-map.c (linemap_line_start): Fix bug when we need to increse
+       column_bits but can re-use the current line_map.
+
+2005-04-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * system.h (fopen, fdopen, freopen): Define these to the unlocked
+       libiberty functions.
+
+2005-04-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.ac (libcpp_UNLOCKED_FUNCS): New.
+       (AC_CHECK_FUNCS, AC_CHECK_DECLS): Check for libcpp_UNLOCKED_FUNCS.
+       * system.h (putchar, getc, getchar, clearerr, feof, fileno,
+       fflush, fgetc, fgets, ferror, fread): Redefine to the associated
+       _unlocked function.
+       (fwrite_unlocked): Fix prototype.
+
+       * configure, config.in: Regenerate.
+
+2005-04-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/19475
+       * macro.c (create_iso_definition): For < ISO C99, don't
+       pedwarn if there is no whitespace between macro name and its
+       replacement, but the replacement starts with a basic character
+       set character.
+
+2005-03-28  Andreas Jaeger  <aj@suse.de>
+
+       * lex.c (warn_about_normalization): Cast field width to int to
+       avoid warning.
+
+2005-03-19  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * configure.ac: Consistently use solaris2.1[0-9]* instead of
+       solaris2.1[0-9].
+       * configure: Regenerate.
+
+2005-03-15  Geoffrey Keating  <geoffk@apple.com>
+
+       * charset.c (_cpp_valid_ucn): In identifiers, reject a partial
+       UCN rather than printing an error.
+
+2005-03-14  Geoffrey Keating  <geoffk@apple.com>
+
+       * lex.c (forms_identifier_p): Disable UCNs in C89 mode.
+
+2005-03-14  Geoffrey Keating  <geoffk@apple.com>
+
+       * init.c (cpp_create_reader): Default warn_normalize to normalized_C.
+       * charset.c: Update for new format of ucnid.h.
+       (ucn_valid_in_identifier): Update for new format of ucnid.h.
+       Add NST parameter, and update it; update callers.
+       (cpp_valid_ucn): Add NST parameter, update callers.  Replace abort
+       with cpp_error.
+       (convert_ucn): Pass normalize_state to cpp_valid_ucn.
+       * internal.h (struct normalize_state): New.
+       (INITIAL_NORMALIZE_STATE): New.
+       (NORMALIZE_STATE_RESULT): New.
+       (NORMALIZE_STATE_UPDATE_IDNUM): New.
+       (_cpp_valid_ucn): New.
+       * lex.c (warn_about_normalization): New.
+       (forms_identifier_p): Add normalize_state parameter, update callers.
+       (lex_identifier): Add normalize_state parameter, update callers.  Keep
+       the state current.
+       (lex_number): Likewise.
+       (_cpp_lex_direct): Pass normalize_state to subroutines.  Check
+       it with warn_about_normalization.
+       * makeucnid.c: New.
+       * ucnid.h: Replace.
+       * ucnid.pl: Remove.
+       * ucnid.tab: Make appropriate for input to makeucnid.c.  Remove
+       comments about obsolete version of C++.
+       * include/cpplib.h (enum cpp_normalize_level): New.
+       (struct cpp_options): Add warn_normalize field.
+
+2005-03-11  Geoffrey Keating  <geoffk@apple.com>
+
+       * directives.c (glue_header_name): Update call to cpp_spell_token.
+       * internal.h (_cpp_interpret_identifier): New.
+       * charset.c (_cpp_interpret_identifier): New.
+       (_cpp_valid_ucn): Allow UCN version of '$'.
+       * lex.c (lex_identifier): Add extra parameter to indicate if initial
+       character was '$' or '\'.  Support identifiers with UCNs.
+       (forms_identifier_p): Allow UCNs.
+       (_cpp_lex_direct): Pass extra parameter to lex_identifier.
+       (utf8_to_ucn): New.
+       (cpp_spell_token): Add FORSTRING parameter.  Use it.
+       (cpp_token_as_text): Update call to cpp_spell_token.
+       (cpp_output_token): Write UCNs back out.
+       (stringify_arg): Update call to cpp_spell_token.
+       (paste_tokens): Likewise.
+       (cpp_macro_definition): Likewise.
+       * macro.c (stringify_arg): Likewise.
+       (paste_tokens): Likewise.
+       (cpp_macro_definition): Likewise.
+       * include/cpplib.h: Add parameter to cpp_spell_token.
+
+2005-03-04  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/20282
+       PR bootstrap/20305
+       * macro.c (replace_args, cpp_get_token): Copy whole
+       cpp_token_u instead of just cpp_string field from it.
+
+2005-02-28  Devang Patel  <dpatel@apple.com>
+
+       * directives.c (do_line): Save sysp early before line table is
+       realloc'ed.
+
+2005-02-20  Zack Weinberg  <zack@codesourcery.com>
+
+       PR 18785
+       * charset.c (LAST_POSSIBLY_BASIC_SOURCE_CHAR): New helper macro.
+       (cpp_host_to_exec_charset): New function.
+       * include/cpplib.h: Declare cpp_host_to_exec_charset.
+
+2005-02-19  Devang Patel  <dpatel@apple.com>
+
+       * charset.c (_cpp_convert_input): Check '\r' before inserting
+       '\n' at the end.
+
+2005-02-15  Eric Christopher  <echristo@redhat.com>
+
+       PR preprocessor/19077
+       * macro.c (cpp_macro_definition): Move handling of whitespace
+       to PREV_WHITE conditional. Remove overloading of len
+       variable.
+
+2005-02-14  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * directives.c, files.c, init.c, internal.h, macro.c, pch.c,
+       traditional.c: Update copyright.
+
+2005-02-14  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR bootstrap/19818
+       * configure.ac: Check for declaration of basename and getopt.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+       * internal.h (ustrcspn): New.
+       * macro.c (create_iso_definition): Fix allocation of memory.
+       (padding_token): Add cast to remove const-ness.
+       * pch.c (cpp_read_state): Use ustrcspn.
+
+2005-02-08  Mike Stump  <mrs@apple.com>
+
+       * files.c (pchf_adder): Remove.
+       (struct pchf_adder_info): Likewise.
+       (_cpp_save_file_entries): Write out all files so that #import works.
+
+2005-01-23  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * configure: Regenerate.
+
+2005-01-11  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
+
+       * include/cpplib.h (c_lang): Fix comment to say cpp_create_reader.
+
+       * include/cpplib.h: Also update copyright years.
+
+2005-01-03  Geoffrey Keating  <geoffk@apple.com>
+
+       * files.c (_cpp_find_file): Add files found by search_path_exhausted
+       to the list of all files.
+
+2005-01-01  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * internal.h: Update references to Cpp lib filenames.
+       * directives.c: Likewise.
+       * init.c: Likewise.
+       * macro.c: Likewise.
+       * traditional.c: Likewise.
+
+2004-12-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR preprocessor/15167
+       * files.c (destroy_cpp_file): New function.
+       (should_stack_file): Make a new file if the
+       compared file is still stacked.
+
+2004-11-28  Nathanael Nerode  <neroden@gcc.gnu.org>
+
+       PR preprocessor/17610
+       * directives.c (do_include_common): Error out if an empty filename
+       is given for #include (or #include_next or #import).
+
+2004-11-27  Roger Sayle  <roger@eyesopen.com>
+           Zack Weinberg  <zack@codesourcery.com>
+
+       * internal.h: Replace all uses of uchar with unsigned char.
+       * include/cpp-id-data.h: Likewise.  Guard typedef of uchar
+       with !IN_GCC, so uchar is only defined whilst building libcpp.
+
+2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * aclocal.m4: Regenerate.
+
+2004-11-24  Roger Sayle  <roger@eyesopen.com>
+
+       PR preprocessor/15824
+       * configure.ac: Correct HAVE_UCHAR test to #include <sys/types.h>
+       directly, instead of the non-existant "system.h" and "ansidecl.h".
+       * configure: Regenerate.
+
+2004-11-23  Daniel Jacobowitz  <dan@codesourcery.com>
+           Joseph Myers  <joseph@codesourcery.com>
+
+       * internal.h (struct lexer_state): Add in_deferred_pragma.
+       * directives.c (struct pragma_entry): Add allow_expansion.
+       (insert_pragma_entry): Take allow_expansion flag.
+       (register_pragma): Likewise.
+       (cpp_register_pragma): Likewise.
+       (_cpp_init_internal_pragmas): Update calls to cpp_register_pragma.
+       (do_pragma): Honor allow_expansion.
+       (cpp_handle_deferred_pragma): Set in_deferred_pragma.
+       * include/cpplib.h (cpp_register_pragma): Update prototype.
+
+2004-11-18  Daniel Jacobowitz  <dan@codesourcery.com>
+           Mark Mitchell  <mark@codesourcery.com>
+
+       * configure.ac (i[34567]86-*-solaris2.1[0-9]*): Set
+       need_64bit_hwint=yes.
+       * configure: Regenerate.
+
+2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * Makefile.in ($(PACKAGE).pot): New rule.  Depend on
+       po/$(PACKAGE).pot.
+       (po/$(PACKAGE).pot): Use ":" instead of "," in --keyword
+       arguments.  Add keywords _, N_, SYNTAX_ERROR and SYNTAX_ERROR2.
+       Remove local srcdir path from generated file.
+
+2004-11-04  Zack Weinberg  <zack@codesourcery.com>
+           Gerald Pfeifer  <gerald@pfeifer.com>
+
+       * internal.h (HAVE_ICONV): Undefine if we do not have HAVE_ICONV_H
+       as well.
+
+2004-10-27  Zack Weinberg  <zack@codesourcery.com>
+
+       PR 18075
+       * directives.c (do_pragma): Do not defer pragmas which are unknown.
+       (cpp_handle_deferred_pragma): Add cast to silence warning.
+
+2004-10-14  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * errors.c (_cpp_begin_message): Print "error: " for errors.
+
+2004-10-10  Andreas Jaeger  <aj@suse.de>
+
+       * makedepend.c: Include mkdeps.h for prototype of deps_add_vpath.
+       * Makefile.in (makedepend.o): Add dependency on mkdeps.h.
+
+2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       * pch.c (cpp_write_pch_state): Remove variable z as it is not
+       used.
+       (cpp_read_state): Remove unused variables, m, d and mac_count.
+
+2004-09-29  Per Bothner  <per@bothner.com>
+
+       * directives.c (cpp_handle_deferred_pragma):  Save, clear and restore
+       cb.line_change.  Otherwise do_pragma will call the line_change
+       call-back with a meaningless line number.
+
+2004-09-24  Zack Weinberg  <zack@codesourcery.com>
+
+       * configure.ac: Move AC_PROG_MAKE_SET, AC_PROG_INSTALL to
+       programs cluster. Use ACX_PROG_CC_WARNING_OPTS,
+       ACX_PROG_CC_WARNING_ALMOST_PEDANTIC, ACX_PROG_CC_WARNINGS_ARE_ERRORS.
+       * aclocal.m4, configure: Regenerate.
+       * init.c: Include localedir.h.
+       * Makefile.in (WARN_CFLAGS, ALL_CFLAGS): New variables.
+       (DEFS): Delete.
+       (.c.o): Use $(ALL_CFLAGS).
+       (localedir.h, localedir.hs): New rules.
+       (clean): Use rm -rf to remove directories.
+       (distclean): Also delete localedir.h and localedir.hs.
+       (init.o): Update dependencies.
+
+2004-09-22  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * Makefile.in (aclocal.m4): Update dependencies.
+       * configure.ac (AC_CONFIG_MACRO_DIR): New.
+       * aclocal.m4, configure: Regenerate.
+
+2004-09-17  Zack Weinberg  <zack@codesourcery.com>
+
+       * charset.c (_cpp_destroy_iconv, emit_numeric_escape)
+       (_cpp_convert_input, _cpp_default_encoding): Add comments.
+       Some other comments in this file also tweaked.
+
+       * directives.c (do_pragma): Save current buffer position
+       before lexing the pragma keywords; don't call
+       _cpp_backup_tokens in the defer_pragmas case.
+
+2004-09-15  Per Bothner  <per@bothner.com>
+
+       * include/line-map.h (line_map_start):  Add parameter names so
+       preceding comment makes sense.
+       (linemap_add):  Remove from comment mention of non-existing parameter.
+
+2004-09-09  Matt Austern  <austern@apple.com>
+           Zack Weinberg  <zack@codesourcery.com>
+
+       * include/cpplib.h (TTYPE_TABLE): Remove CPP_ and SPELL_
+       prefixes throughout.  Add entry for PRAGMA.  Remove
+       unnecessary "= 0" from EQ.
+       (enum cpp_ttype): Adjust OP and TK definitions to restore
+       prefixes, via token-paste.
+       (CPP_LAST_EQ, CPP_FIRST_DIGRAPH, CPP_LAST_PUNCTUATOR, CPP_LAST_CPP_OP):
+       Change from #defines to additional cpp_ttype enumerators.
+       (struct cpp_options): Add defer_pragmas.
+       (cpp_handle_deferred_pragma): Prototype new interface.
+
+       * internal.h (struct cpp_reader): Add directive_result.
+       * directives.c (struct pragma_entry): Add is_internal field;
+       give boolean fields type bool.
+       (start_directive): Initialize pfile->directive_result.type.
+       (_cpp_do__Pragma): Likewise.
+       (run_directive): Do not crash if pfile->buffer->prev is NULL.
+       (insert_pragma_entry): Add 'internal' argument; set new->is_internal
+       from it.
+       (register_pragma): New static function, bulk of former
+       cpp_register_pragma here; add 'internal' argument, pass along
+       to insert_pragma_entry.
+       (cpp_register_pragma): Now a wrapper around register_pragma which
+       always passes false for 'internal' argument.
+       (_cpp_init_internal_pragmas): Call register_pragma directly, passing
+       true for 'internal'.
+       (do_pragma): If CPP_OPTION (pfile, defer_pragmas) and this isn't
+       an internal pragma, save text till the end of the line as a CPP_PRAGMA
+       token instead of executing the pragma.
+       (cpp_handle_deferred_pragma): New interface.
+       * lex.c (token_spellings): Adjust OP and TK definitions to
+       match changes to cpplib.h.
+       (_cpp_lex_token): Check for a directive-result token and
+       return it if present.
+       (cpp_token_val_index): Handle CPP_PRAGMA.
+       * macro.c (cpp_builtin_macro_text): Correct comment.
+       (builtin_macro): Handle directive-result tokens from _cpp_do__Pragma.
+
+2004-09-06  Serge Belyshev  <belyshev@lubercy.com>
+
+       PR preprocessor/14699
+       * symtab.c (ht_dump_statistics): Change type of sum_of_squares
+       from size_t to double.
+
+2004-08-28  Andreas Schwab  <schwab@suse.de>
+           Andreas Jaeger <aj@suse.de>
+
+       * configure.ac: Set PACKAGE correctly.
+       * configure: Regenerated.
+
+2004-08-25  Paolo Bonzini  <bonzini@gnu.org>
+
+       * Makefile.in: Add back top_builddir.
+
+2004-08-25  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure.ac: Replace Automake macro invocations
+       with manual Autoconf checks and substitutions.
+       * configure: Regenerate.
+       * aclocal.m4: Regenerate.
+       * config.in: Regenerate.
+       * Makefile.am: Removed.
+       * Makefile.in: Heavy simplification and reorganization.
+
+2004-08-09  Mark Mitchell  <mark@codesourcery.com>
+
+       * configure.ac (arm*-*-eabi*): New target.
+       (arm*-*-symbianelf*): Likewise.
+       * configure: Regenerated.
+
+2004-07-24  Bernardo Innocenti  <bernie@develer.com>
+
+       * internal.h (xnew, xcnew, xnewvec, xcnewvec, xobnew): Remove.
+       * directives.c: Use XNEW-family macros from libiberty.
+       * lex.c: Likewise.
+       * macro.c: Likewise.
+       * cpplib.h (cpp_deps_style): Export enum with name.
+
+2004-07-23  Matthias Klose  <doko@debian.org>
+
+       * init.c (init_library): Use PACKAGE for the text domain.
+
+2004-07-16  Andris Pavenis  <pavenis@latnet.lv>
+
+       PR preprocessor/16366
+       * internal.h (struct cpp_reader): New field dir_hash.
+       * files.c (make_cpp_dir): Use dir_hash, not file_hash.
+       (_cpp_init_files, _cpp_cleanup_files): Update for new field.
+
+2004-07-04  Neil Booth  <neil@duron.akihabara.co.uk>
+
+       PR preprocessor/16192
+       PR preprocessor/15913
+       PR preprocessor/15572
+       * expr.c (_cpp_parse_expr): Handle remaining cases where an
+       expression is missing.
+       * init.c (post_options): Traditional cpp doesn't do // comments.
+
+2004-06-30  Per Bothner  <per@bothner.com>
+
+       * include/line-map.h (fileline):  Remove old typedef.
+       * internal.h (struct cpp_reader):  Use source_location typedef instead.
+
+2004-06-26  Zack Weinberg  <zack@codesourcery.com>
+
+       Partially revert patch of 2004-06-05.
+       * files.c (search_cache): Remove pfile argument.  Don't check
+       for file that would be found by "" or <> search here...
+       (_cpp_find_file): ...do it here, before calling find_file_in_dir.
+       Do not apply directory-of-current-file correction to files
+       found by this check.  Rearrange code slightly.
+
+2004-06-21  Geoffrey Keating  <geoffk@apple.com>
+
+       * files.c (should_stack_file): Correct swapped parameters to call
+       to cb.read_pch.
+       * pch.c (cpp_valid_state): Handle -fpreprocessed.
+
+2004-06-15  Paolo Bonzini  <bonzini@gnu.org>
+
+       * Makefile.in: Regenerate with automake 1.8.5.
+       * aclocal.m4: Likewise.
+       * configure: Regenerate.
+
+2004-06-11  Zack Weinberg  <zack@codesourcery.com>
+
+       * configure.ac: Don't invoke ACX_HEADER_STDBOOL.
+       * configure, config.in: Regenerate.
+       * system.h: Unconditionally define bool as unsigned char,
+       BOOL_BITFIELD as unsigned int.
+       * .cvsignore: New file.
+
+2004-06-09  Geoffrey Keating  <geoffk@apple.com>
+
+       * traditional.c (push_replacement_text): Set macro->traditional.
+       (save_replacement_text): Likewise.
+       * pch.c (cpp_write_pch_state): Don't write list of defined macros.
+       (struct save_macro_item): Delete.
+       (struct save_macro_data): Use a character array not the previous
+       structured format.
+       (save_macros): Save macro as text not as internal structures.
+       (cpp_prepare_state): Update for changes to save_macro_data.
+       (cpp_read_state): Don't read macros defined in PCH.  Restore
+       -D macros as text.
+       * macro.c (create_iso_definition): Honour alloc_subobject.
+       Clear traditional flag.
+       (_cpp_create_definition): Honour alloc_subobject.
+       * lex.c (cpp_token_val_index): New.
+       * internal.h: Include cpp-id-data.h.
+       (uchar): Move definition to cpp-id-data.h.
+       (U): Likewise.
+       (cpp_macro): Likewise.
+       * directives.c (struct answer): Move to cpp-id-data.h.
+       (do_assert): Honour alloc_subobject.
+
+       * include/symtab.h (struct ht): Add field 'alloc_subobject'.
+       * include/cpplib.h (struct cpp_string): Add GTY marker.
+       (enum cpp_token_fld_kind): New.
+       (struct cpp_token): Add GTY markers.
+       (cpp_token_val_index): Prototype.
+       (CPP_HASHNODE_VALUE_IDX): New.
+       (struct cpp_hashnode): Don't skip fields of 'value' when marking.
+       * include/cpp-id-data.h: New file.
+
+2004-06-09  Paolo Bonzini  <bonzini@gnu.org>
+
+       * Makefile.am (all-local): New.
+       * Makefile.in: Regenerate.
+
+2004-06-06  Roger Sayle  <roger@eyesopen.com>
+
+       * Makefile.am (LIBICONV): Declare.
+       (makedepend_LDADD): Use LIBICONV.
+       * Makefile.in: Regenerate.
+
+2004-06-05  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       * Makefile.am (LIBINTL): Declare
+       (makedepend_LDADD): Use LIBINTL.
+       * Makefile.in: Regenerate.
+
+2004-06-05  Zack Weinberg  <zack@codesourcery.com>
+
+       * Makefile.am: Add makedepend.
+       * Makefile.in, aclocal.m4: Regenerate.
+       * charset.c: Insert a space to avoid a warning.
+       * directives.c: Include mkdeps.h.
+       (_cpp_handle_directive): Reenable macro expander if appropriate.
+       (undefine_macros): Inline body of _cpp_free_definition for speed.
+       Do not call undef callback or _cpp_warn_if_unused_macro.
+       (cpp_get_deps): New interface.
+       * files.c (search_cache): Add pfile argument.  Check for file
+       that would be found by "" or <> search here...
+       (_cpp_find_file): ...not here.  Correct recorded start_dir of
+       files found by directory-of-current-file search that would be
+       found by "" or <> search.
+       * init.c (cpp_add_dependency_target): Delete.
+       * internal.h (struct lexer_state): Add discarding_output flag.
+       * lex.c (lex_identifier): Compute hash function while scanning.
+       * macro.c (cpp_scan_nooutput): Disable macro expansion outside
+       directives.
+       * makedepend.c: New file.
+       * mkdeps.c (struct deps): Add vpath vector.
+       (apply_vpath, deps_add_vpath): New function.
+       (deps_free): Free vpath vector.
+       (deps_add_dep, deps_add_target): Use apply_vpath.
+       * symtab.c (calc_hash): Use HT_HASHSTEP and HT_FINISH.
+       (ht_lookup_with_hash): New function.
+       * cpplib.h, mkdeps.h: Update prototypes.
+       * symtab.h: Update prototypes.
+       (HT_HASHSTEP, HT_FINISH): New macros.
+
+2004-05-29  Geoffrey Keating  <geoffk@apple.com>
+
+       * symtab.c (ht_create): Set entries_owned.
+       (ht_destroy): Honour entries_owned.
+       (ht_expand): Likewise.
+       (ht_load): New.
+       * include/symtab.h (struct ht): New field 'entries_owned'
+       (ht_load): New prototype.
+
+2004-05-26  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR bootstrap/15651
+       * configure.ac: Fix m4 quoting when picking
+       the size of HOST_WIDE_INT.
+       * configure: Regenerate.
+
+2004-05-25  Paolo Bonzini  <bonzini@gnu.org>
+
+       * Makefile.am: the correct directory for
+       gettext include files is given by @INCINTL@.
+       * Makefile.in: Regenerate.
+
+2004-05-24  Paolo Bonzini  <bonzini@gnu.org>
+
+       * system.h [!ENABLE_NLS]: dgettext takes two
+       parameters.
+
+2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
+
+       Moved libcpp from the gcc subdirectory to the toplevel.
+       * Makefile.am: New file.
+       * Makefile.in: Regenerate.
+       * configure.ac: New file.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * charset.c: Moved from gcc/cppcharset.c.  Add note about
+       brokenness of input charset detection.  Adjust for change
+       in name of cppucnid.h.
+       * errors.c: Moved from gcc/cpperror.c.  Do not include intl.h.
+       * expr.c: Moved from gcc/cppexp.c.
+       * files.c: Moved from gcc/cppfiles.c.  Do not include intl.h.
+       Remove #define of O_BINARY, it is in system.h.
+       * identifiers.c: Moved from gcc/cpphash.c.
+       * internal.h: Moved from gcc/cpphash.h.  Change header
+       guard name.  All other files adjusted to match name change.
+       * init.c: Moved from gcc/cppinit.c.
+       (init_library) [ENABLE_NLS]: Call bindtextdomain.
+       * lex.c: Moved from gcc/cpplex.c.
+       * directives.c: Moved from gcc/cpplib.c.
+       * macro.c: Moved from gcc/cppmacro.c.
+       * pch.c: Moved from gcc/cpppch.c.  Do not include intl.h.
+       * traditional.c: Moved from gcc/cpptrad.c.
+       * ucnid.h: Moved from gcc/cppucnid.h.  Change header
+       guard name.
+       * ucnid.pl: Moved from gcc/cppucnid.pl.
+       * ucnid.tab: Moved from gcc/cppucnid.tab.  Change header
+       guard name.
+       * symtab.c: Moved from gcc/hashtable.c.
+       * line-map.c: Moved from gcc.  Do not include intl.h.
+       * mkdeps.c: Moved from gcc.
+       * system.h: New file.
+       * include/cpplib.h: Moved from gcc.  Change header guard name.
+       * include/line-map.h: Moved from gcc.  Change header guard name.
+       * include/mkdeps.h: Moved from gcc.  Change header guard name.
+       * include/symtab.h: Moved from gcc/hashtable.h.  Change header
+       guard name.
diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in
new file mode 100644 (file)
index 0000000..c937946
--- /dev/null
@@ -0,0 +1,233 @@
+# @configure_input@
+# Makefile for libcpp.  Run 'configure' to generate Makefile from Makefile.in
+
+# Copyright (C) 2004 Free Software Foundation, Inc.
+
+#This file is part of libcpp.
+
+#libcpp is free software; you can redistribute it and/or modify
+#it under the terms of the GNU General Public License as published by
+#the Free Software Foundation; either version 2, or (at your option)
+#any later version.
+
+#libcpp is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#GNU General Public License for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with libcpp; see the file COPYING.  If not, write to
+#the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+#Boston MA 02110-1301, USA.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_builddir = .
+VPATH = @srcdir@
+INSTALL = @INSTALL@
+AR = ar
+ARFLAGS = cru
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+CATALOGS = $(patsubst %,po/%,@CATALOGS@)
+CC = @CC@
+CFLAGS = @CFLAGS@
+WARN_CFLAGS = @WARN_CFLAGS@ @WARN_PEDANTIC@ @WERROR@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+EXEEXT = @EXEEXT@
+GMSGFMT = @GMSGFMT@
+INCINTL = @INCINTL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHELL = @SHELL@
+USED_CATALOGS = @USED_CATALOGS@
+XGETTEXT = @XGETTEXT@
+DEPMODE = @CCDEPMODE@
+DEPDIR = @DEPDIR@
+
+datadir = @datadir@
+exec_prefix = @prefix@
+libdir = @libdir@
+localedir = $(datadir)/locale
+prefix = @prefix@
+
+MSGMERGE = msgmerge
+mkinstalldirs = $(SHELL) $(srcdir)/../config-aux/mkinstalldirs
+depcomp = $(SHELL) $(srcdir)/../config-aux/depcomp
+
+INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
+       -I$(srcdir)/include
+
+ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)
+
+libcpp_a_OBJS = charset.o directives.o directives-only.o errors.o \
+       expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
+       mkdeps.o pch.o symtab.o traditional.o
+
+libcpp_a_SOURCES = charset.c directives.c directives-only.c errors.c \
+       expr.c files.c identifiers.c init.c lex.c line-map.c macro.c \
+       mkdeps.c pch.c symtab.c traditional.c
+
+all: libcpp.a $(USED_CATALOGS)
+
+.SUFFIXES:
+.SUFFIXES: .c .gmo .o .obj .po .pox
+
+libcpp.a: $(libcpp_a_OBJS)
+       -rm -f libcpp.a
+       $(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
+       $(RANLIB) libcpp.a
+
+# Rules to rebuild the configuration
+
+Makefile: $(srcdir)/Makefile.in config.status
+       $(SHELL) ./config.status Makefile
+
+config.status: $(srcdir)/configure
+       $(SHELL) ./config.status --recheck
+
+$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
+       cd $(srcdir) && $(AUTOCONF)
+
+$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \
+       $(srcdir)/../config/gettext-sister.m4 $(srcdir)/../config/iconv.m4 \
+       $(srcdir)/../config/codeset.m4 $(srcdir)/../config/lib-ld.m4 \
+       $(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \
+       $(srcdir)/configure.ac
+       cd $(srcdir) && $(ACLOCAL) -I ../config
+
+config.h: stamp-h1
+       test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)
+
+stamp-h1: $(srcdir)/config.in config.status
+       -rm -f stamp-h1
+       $(SHELL) ./config.status config.h
+
+$(srcdir)/config.in: @MAINT@ $(srcdir)/configure
+       cd $(srcdir) && $(AUTOHEADER)
+       -rm -f stamp-h1
+
+# It is not possible to get LOCALEDIR defined in config.h because
+# the value it needs to be defined to is only determined in the
+# Makefile.  Hence we do this instead.
+localedir.h: localedir.hs; @true
+localedir.hs: Makefile
+       echo "#define LOCALEDIR \"$(localedir)\"" > localedir.new
+       $(srcdir)/../config-aux/move-if-change localedir.new localedir.h
+       echo timestamp > localedir.hs
+
+# Installation rules and other phony targets
+
+# These rule has to look for .gmo modules in both srcdir and
+# the cwd, and has to check that we actually have a catalog
+# for each language, in case they weren't built or included
+# with the distribution.
+installdirs:
+       @$(mkinstalldirs) $(DESTDIR)$(datadir); \
+       cats="$(CATALOGS)"; for cat in $$cats; do \
+         lang=`basename $$cat | sed 's/\.gmo$$//'`; \
+         if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \
+           dir=$(localedir)/$$lang/LC_MESSAGES; \
+           $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
+         fi; \
+       done
+
+install-strip install: 
+
+mostlyclean:
+       -rm -f *.o
+
+clean: mostlyclean
+       -rm -rf libcpp.a $(srcdir)/autom4te.cache
+
+distclean: clean
+       -rm -f config.h stamp-h1 config.status config.cache config.log \
+         configure.lineno configure.status.lineno Makefile localedir.h \
+         localedir.hs $(DEPDIR)/*.Po
+       -rmdir $(DEPDIR)
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -rm -f $(srcdir)/configure $(srcdir)/aclocal.m4
+
+check:
+installcheck:
+dvi:
+pdf:
+html:
+info:
+install-info:
+install-pdf:
+install-man:
+install-html:
+
+update-po: $(CATALOGS:.gmo=.pox)
+
+.PHONY: installdirs install install-strip mostlyclean clean distclean \
+  maintainer-clean check installcheck dvi pdf html info install-info \
+  install-man update-po install-html
+
+# Dependency rule.
+COMPILE.base = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(ALL_CFLAGS) -c
+ifeq ($(DEPMODE),depmode=gcc3)
+COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Po
+else
+COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
+         $(depcomp) $(COMPILE.base)
+endif
+
+# Implicit rules and I18N
+
+.c.o:
+       $(COMPILE) $<
+
+# N.B. We do not attempt to copy these into $(srcdir).
+.po.gmo:
+       -test -d po || mkdir po
+       $(GMSGFMT) --statistics -o $@ $<
+
+# The new .po has to be gone over by hand, so we deposit it into
+# build/po with a different extension.
+# If build/po/$(PACKAGE).pot exists, use it (it was just created),
+# else use the one in srcdir.
+.po.pox:
+       -test -d po || mkdir po
+       $(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
+                       then echo po/$(PACKAGE).pot; \
+                       else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@
+
+# Rule for regenerating the message template.
+$(PACKAGE).pot: po/$(PACKAGE).pot
+po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
+       -test -d $(srcdir)/po || mkdir $(srcdir)/po
+       $(XGETTEXT) --default-domain=$(PACKAGE) \
+         --keyword=_ --keyword=N_ \
+         --keyword=cpp_error:3 --keyword=cpp_errno:3 \
+         --keyword=cpp_error_with_line:5 \
+         --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
+         --copyright-holder="Free Software Foundation, Inc." \
+         --msgid-bugs-address="http://gcc.gnu.org/bugs.html" \
+         --language=c -o po/$(PACKAGE).pot.tmp $^
+       sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
+       rm po/$(PACKAGE).pot.tmp
+
+
+# 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:
+
+# Dependencies
+-include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS))
+
+# Dependencies on generated headers have to be explicit.
+init.o: localedir.h
diff --git a/libcpp/aclocal.m4 b/libcpp/aclocal.m4
new file mode 100644 (file)
index 0000000..c58fe77
--- /dev/null
@@ -0,0 +1,23 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_include([../config-aux/acx.m4])
+m4_include([../config-aux/codeset.m4])
+m4_include([../config-aux/depstand.m4])
+m4_include([../config-aux/gettext-sister.m4])
+m4_include([../config-aux/iconv.m4])
+m4_include([../config-aux/lead-dot.m4])
+m4_include([../config-aux/lib-ld.m4])
+m4_include([../config-aux/lib-link.m4])
+m4_include([../config-aux/lib-prefix.m4])
+m4_include([../config-aux/warnings.m4])
diff --git a/libcpp/charset.c b/libcpp/charset.c
new file mode 100644 (file)
index 0000000..5db8fc1
--- /dev/null
@@ -0,0 +1,1689 @@
+/* CPP Library - charsets
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
+   Free Software Foundation, Inc.
+
+   Broken out of c-lex.c Apr 2003, adding valid C99 UCN ranges.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+/* Character set handling for C-family languages.
+
+   Terminological note: In what follows, "charset" or "character set"
+   will be taken to mean both an abstract set of characters and an
+   encoding for that set.
+
+   The C99 standard discusses two character sets: source and execution.
+   The source character set is used for internal processing in translation
+   phases 1 through 4; the execution character set is used thereafter.
+   Both are required by 5.2.1.2p1 to be multibyte encodings, not wide
+   character encodings (see 3.7.2, 3.7.3 for the standardese meanings
+   of these terms).  Furthermore, the "basic character set" (listed in
+   5.2.1p3) is to be encoded in each with values one byte wide, and is
+   to appear in the initial shift state.
+
+   It is not explicitly mentioned, but there is also a "wide execution
+   character set" used to encode wide character constants and wide
+   string literals; this is supposed to be the result of applying the
+   standard library function mbstowcs() to an equivalent narrow string
+   (6.4.5p5).  However, the behavior of hexadecimal and octal
+   \-escapes is at odds with this; they are supposed to be translated
+   directly to wchar_t values (6.4.4.4p5,6).
+
+   The source character set is not necessarily the character set used
+   to encode physical source files on disk; translation phase 1 converts
+   from whatever that encoding is to the source character set.
+
+   The presence of universal character names in C99 (6.4.3 et seq.)
+   forces the source character set to be isomorphic to ISO 10646,
+   that is, Unicode.  There is no such constraint on the execution
+   character set; note also that the conversion from source to
+   execution character set does not occur for identifiers (5.1.1.2p1#5).
+
+   For convenience of implementation, the source character set's
+   encoding of the basic character set should be identical to the
+   execution character set OF THE HOST SYSTEM's encoding of the basic
+   character set, and it should not be a state-dependent encoding.
+
+   cpplib uses UTF-8 or UTF-EBCDIC for the source character set,
+   depending on whether the host is based on ASCII or EBCDIC (see
+   respectively Unicode section 2.3/ISO10646 Amendment 2, and Unicode
+   Technical Report #16).  With limited exceptions, it relies on the
+   system library's iconv() primitive to do charset conversion
+   (specified in SUSv2).  */
+
+#if !HAVE_ICONV
+/* Make certain that the uses of iconv(), iconv_open(), iconv_close()
+   below, which are guarded only by if statements with compile-time
+   constant conditions, do not cause link errors.  */
+#define iconv_open(x, y) (errno = EINVAL, (iconv_t)-1)
+#define iconv(a,b,c,d,e) (errno = EINVAL, (size_t)-1)
+#define iconv_close(x)   (void)0
+#define ICONV_CONST
+#endif
+
+#if HOST_CHARSET == HOST_CHARSET_ASCII
+#define SOURCE_CHARSET "UTF-8"
+#define LAST_POSSIBLY_BASIC_SOURCE_CHAR 0x7e
+#elif HOST_CHARSET == HOST_CHARSET_EBCDIC
+#define SOURCE_CHARSET "UTF-EBCDIC"
+#define LAST_POSSIBLY_BASIC_SOURCE_CHAR 0xFF
+#else
+#error "Unrecognized basic host character set"
+#endif
+
+#ifndef EILSEQ
+#define EILSEQ EINVAL
+#endif
+
+/* This structure is used for a resizable string buffer throughout.  */
+/* Don't call it strbuf, as that conflicts with unistd.h on systems
+   such as DYNIX/ptx where unistd.h includes stropts.h.  */
+struct _cpp_strbuf
+{
+  uchar *text;
+  size_t asize;
+  size_t len;
+};
+
+/* This is enough to hold any string that fits on a single 80-column
+   line, even if iconv quadruples its size (e.g. conversion from
+   ASCII to UTF-32) rounded up to a power of two.  */
+#define OUTBUF_BLOCK_SIZE 256
+
+/* Conversions between UTF-8 and UTF-16/32 are implemented by custom
+   logic.  This is because a depressing number of systems lack iconv,
+   or have have iconv libraries that do not do these conversions, so
+   we need a fallback implementation for them.  To ensure the fallback
+   doesn't break due to neglect, it is used on all systems.
+
+   UTF-32 encoding is nice and simple: a four-byte binary number,
+   constrained to the range 00000000-7FFFFFFF to avoid questions of
+   signedness.  We do have to cope with big- and little-endian
+   variants.
+
+   UTF-16 encoding uses two-byte binary numbers, again in big- and
+   little-endian variants, for all values in the 00000000-0000FFFF
+   range.  Values in the 00010000-0010FFFF range are encoded as pairs
+   of two-byte numbers, called "surrogate pairs": given a number S in
+   this range, it is mapped to a pair (H, L) as follows:
+
+     H = (S - 0x10000) / 0x400 + 0xD800
+     L = (S - 0x10000) % 0x400 + 0xDC00
+
+   Two-byte values in the D800...DFFF range are ill-formed except as a
+   component of a surrogate pair.  Even if the encoding within a
+   two-byte value is little-endian, the H member of the surrogate pair
+   comes first.
+
+   There is no way to encode values in the 00110000-7FFFFFFF range,
+   which is not currently a problem as there are no assigned code
+   points in that range; however, the author expects that it will
+   eventually become necessary to abandon UTF-16 due to this
+   limitation.  Note also that, because of these pairs, UTF-16 does
+   not meet the requirements of the C standard for a wide character
+   encoding (see 3.7.3 and 6.4.4.4p11).
+
+   UTF-8 encoding looks like this:
+
+   value range        encoded as
+   00000000-0000007F   0xxxxxxx
+   00000080-000007FF   110xxxxx 10xxxxxx
+   00000800-0000FFFF   1110xxxx 10xxxxxx 10xxxxxx
+   00010000-001FFFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+   00200000-03FFFFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+   04000000-7FFFFFFF   1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+
+   Values in the 0000D800 ... 0000DFFF range (surrogates) are invalid,
+   which means that three-byte sequences ED xx yy, with A0 <= xx <= BF,
+   never occur.  Note also that any value that can be encoded by a
+   given row of the table can also be encoded by all successive rows,
+   but this is not done; only the shortest possible encoding for any
+   given value is valid.  For instance, the character 07C0 could be
+   encoded as any of DF 80, E0 9F 80, F0 80 9F 80, F8 80 80 9F 80, or
+   FC 80 80 80 9F 80.  Only the first is valid.
+
+   An implementation note: the transformation from UTF-16 to UTF-8, or
+   vice versa, is easiest done by using UTF-32 as an intermediary.  */
+
+/* Internal primitives which go from an UTF-8 byte stream to native-endian
+   UTF-32 in a cppchar_t, or vice versa; this avoids an extra marshal/unmarshal
+   operation in several places below.  */
+static inline int
+one_utf8_to_cppchar (const uchar **inbufp, size_t *inbytesleftp,
+                    cppchar_t *cp)
+{
+  static const uchar masks[6] = { 0x7F, 0x1F, 0x0F, 0x07, 0x02, 0x01 };
+  static const uchar patns[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+  cppchar_t c;
+  const uchar *inbuf = *inbufp;
+  size_t nbytes, i;
+
+  if (*inbytesleftp < 1)
+    return EINVAL;
+
+  c = *inbuf;
+  if (c < 0x80)
+    {
+      *cp = c;
+      *inbytesleftp -= 1;
+      *inbufp += 1;
+      return 0;
+    }
+
+  /* The number of leading 1-bits in the first byte indicates how many
+     bytes follow.  */
+  for (nbytes = 2; nbytes < 7; nbytes++)
+    if ((c & ~masks[nbytes-1]) == patns[nbytes-1])
+      goto found;
+  return EILSEQ;
+ found:
+
+  if (*inbytesleftp < nbytes)
+    return EINVAL;
+
+  c = (c & masks[nbytes-1]);
+  inbuf++;
+  for (i = 1; i < nbytes; i++)
+    {
+      cppchar_t n = *inbuf++;
+      if ((n & 0xC0) != 0x80)
+       return EILSEQ;
+      c = ((c << 6) + (n & 0x3F));
+    }
+
+  /* Make sure the shortest possible encoding was used.  */
+  if (c <=      0x7F && nbytes > 1) return EILSEQ;
+  if (c <=     0x7FF && nbytes > 2) return EILSEQ;
+  if (c <=    0xFFFF && nbytes > 3) return EILSEQ;
+  if (c <=  0x1FFFFF && nbytes > 4) return EILSEQ;
+  if (c <= 0x3FFFFFF && nbytes > 5) return EILSEQ;
+
+  /* Make sure the character is valid.  */
+  if (c > 0x7FFFFFFF || (c >= 0xD800 && c <= 0xDFFF)) return EILSEQ;
+
+  *cp = c;
+  *inbufp = inbuf;
+  *inbytesleftp -= nbytes;
+  return 0;
+}
+
+static inline int
+one_cppchar_to_utf8 (cppchar_t c, uchar **outbufp, size_t *outbytesleftp)
+{
+  static const uchar masks[6] =  { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+  static const uchar limits[6] = { 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE };
+  size_t nbytes;
+  uchar buf[6], *p = &buf[6];
+  uchar *outbuf = *outbufp;
+
+  nbytes = 1;
+  if (c < 0x80)
+    *--p = c;
+  else
+    {
+      do
+       {
+         *--p = ((c & 0x3F) | 0x80);
+         c >>= 6;
+         nbytes++;
+       }
+      while (c >= 0x3F || (c & limits[nbytes-1]));
+      *--p = (c | masks[nbytes-1]);
+    }
+
+  if (*outbytesleftp < nbytes)
+    return E2BIG;
+
+  while (p < &buf[6])
+    *outbuf++ = *p++;
+  *outbytesleftp -= nbytes;
+  *outbufp = outbuf;
+  return 0;
+}
+
+/* The following four functions transform one character between the two
+   encodings named in the function name.  All have the signature
+   int (*)(iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
+           uchar **outbufp, size_t *outbytesleftp)
+
+   BIGEND must have the value 0 or 1, coerced to (iconv_t); it is
+   interpreted as a boolean indicating whether big-endian or
+   little-endian encoding is to be used for the member of the pair
+   that is not UTF-8.
+
+   INBUFP, INBYTESLEFTP, OUTBUFP, OUTBYTESLEFTP work exactly as they
+   do for iconv.
+
+   The return value is either 0 for success, or an errno value for
+   failure, which may be E2BIG (need more space), EILSEQ (ill-formed
+   input sequence), ir EINVAL (incomplete input sequence).  */
+
+static inline int
+one_utf8_to_utf32 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
+                  uchar **outbufp, size_t *outbytesleftp)
+{
+  uchar *outbuf;
+  cppchar_t s = 0;
+  int rval;
+
+  /* Check for space first, since we know exactly how much we need.  */
+  if (*outbytesleftp < 4)
+    return E2BIG;
+
+  rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s);
+  if (rval)
+    return rval;
+
+  outbuf = *outbufp;
+  outbuf[bigend ? 3 : 0] = (s & 0x000000FF);
+  outbuf[bigend ? 2 : 1] = (s & 0x0000FF00) >> 8;
+  outbuf[bigend ? 1 : 2] = (s & 0x00FF0000) >> 16;
+  outbuf[bigend ? 0 : 3] = (s & 0xFF000000) >> 24;
+
+  *outbufp += 4;
+  *outbytesleftp -= 4;
+  return 0;
+}
+
+static inline int
+one_utf32_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
+                  uchar **outbufp, size_t *outbytesleftp)
+{
+  cppchar_t s;
+  int rval;
+  const uchar *inbuf;
+
+  if (*inbytesleftp < 4)
+    return EINVAL;
+
+  inbuf = *inbufp;
+
+  s  = inbuf[bigend ? 0 : 3] << 24;
+  s += inbuf[bigend ? 1 : 2] << 16;
+  s += inbuf[bigend ? 2 : 1] << 8;
+  s += inbuf[bigend ? 3 : 0];
+
+  if (s >= 0x7FFFFFFF || (s >= 0xD800 && s <= 0xDFFF))
+    return EILSEQ;
+
+  rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp);
+  if (rval)
+    return rval;
+
+  *inbufp += 4;
+  *inbytesleftp -= 4;
+  return 0;
+}
+
+static inline int
+one_utf8_to_utf16 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
+                  uchar **outbufp, size_t *outbytesleftp)
+{
+  int rval;
+  cppchar_t s = 0;
+  const uchar *save_inbuf = *inbufp;
+  size_t save_inbytesleft = *inbytesleftp;
+  uchar *outbuf = *outbufp;
+
+  rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s);
+  if (rval)
+    return rval;
+
+  if (s > 0x0010FFFF)
+    {
+      *inbufp = save_inbuf;
+      *inbytesleftp = save_inbytesleft;
+      return EILSEQ;
+    }
+
+  if (s < 0xFFFF)
+    {
+      if (*outbytesleftp < 2)
+       {
+         *inbufp = save_inbuf;
+         *inbytesleftp = save_inbytesleft;
+         return E2BIG;
+       }
+      outbuf[bigend ? 1 : 0] = (s & 0x00FF);
+      outbuf[bigend ? 0 : 1] = (s & 0xFF00) >> 8;
+
+      *outbufp += 2;
+      *outbytesleftp -= 2;
+      return 0;
+    }
+  else
+    {
+      cppchar_t hi, lo;
+
+      if (*outbytesleftp < 4)
+       {
+         *inbufp = save_inbuf;
+         *inbytesleftp = save_inbytesleft;
+         return E2BIG;
+       }
+
+      hi = (s - 0x10000) / 0x400 + 0xD800;
+      lo = (s - 0x10000) % 0x400 + 0xDC00;
+
+      /* Even if we are little-endian, put the high surrogate first.
+        ??? Matches practice?  */
+      outbuf[bigend ? 1 : 0] = (hi & 0x00FF);
+      outbuf[bigend ? 0 : 1] = (hi & 0xFF00) >> 8;
+      outbuf[bigend ? 3 : 2] = (lo & 0x00FF);
+      outbuf[bigend ? 2 : 3] = (lo & 0xFF00) >> 8;
+
+      *outbufp += 4;
+      *outbytesleftp -= 4;
+      return 0;
+    }
+}
+
+static inline int
+one_utf16_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
+                  uchar **outbufp, size_t *outbytesleftp)
+{
+  cppchar_t s;
+  const uchar *inbuf = *inbufp;
+  int rval;
+
+  if (*inbytesleftp < 2)
+    return EINVAL;
+  s  = inbuf[bigend ? 0 : 1] << 8;
+  s += inbuf[bigend ? 1 : 0];
+
+  /* Low surrogate without immediately preceding high surrogate is invalid.  */
+  if (s >= 0xDC00 && s <= 0xDFFF)
+    return EILSEQ;
+  /* High surrogate must have a following low surrogate.  */
+  else if (s >= 0xD800 && s <= 0xDBFF)
+    {
+      cppchar_t hi = s, lo;
+      if (*inbytesleftp < 4)
+       return EINVAL;
+
+      lo  = inbuf[bigend ? 2 : 3] << 8;
+      lo += inbuf[bigend ? 3 : 2];
+
+      if (lo < 0xDC00 || lo > 0xDFFF)
+       return EILSEQ;
+
+      s = (hi - 0xD800) * 0x400 + (lo - 0xDC00) + 0x10000;
+    }
+
+  rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp);
+  if (rval)
+    return rval;
+
+  /* Success - update the input pointers (one_cppchar_to_utf8 has done
+     the output pointers for us).  */
+  if (s <= 0xFFFF)
+    {
+      *inbufp += 2;
+      *inbytesleftp -= 2;
+    }
+  else
+    {
+      *inbufp += 4;
+      *inbytesleftp -= 4;
+    }
+  return 0;
+}
+
+/* Helper routine for the next few functions.  The 'const' on
+   one_conversion means that we promise not to modify what function is
+   pointed to, which lets the inliner see through it.  */
+
+static inline bool
+conversion_loop (int (*const one_conversion)(iconv_t, const uchar **, size_t *,
+                                            uchar **, size_t *),
+                iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to)
+{
+  const uchar *inbuf;
+  uchar *outbuf;
+  size_t inbytesleft, outbytesleft;
+  int rval;
+
+  inbuf = from;
+  inbytesleft = flen;
+  outbuf = to->text + to->len;
+  outbytesleft = to->asize - to->len;
+
+  for (;;)
+    {
+      do
+       rval = one_conversion (cd, &inbuf, &inbytesleft,
+                              &outbuf, &outbytesleft);
+      while (inbytesleft && !rval);
+
+      if (__builtin_expect (inbytesleft == 0, 1))
+       {
+         to->len = to->asize - outbytesleft;
+         return true;
+       }
+      if (rval != E2BIG)
+       {
+         errno = rval;
+         return false;
+       }
+
+      outbytesleft += OUTBUF_BLOCK_SIZE;
+      to->asize += OUTBUF_BLOCK_SIZE;
+      to->text = XRESIZEVEC (uchar, to->text, to->asize);
+      outbuf = to->text + to->asize - outbytesleft;
+    }
+}
+
+
+/* These functions convert entire strings between character sets.
+   They all have the signature
+
+   bool (*)(iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to);
+
+   The input string FROM is converted as specified by the function
+   name plus the iconv descriptor CD (which may be fake), and the
+   result appended to TO.  On any error, false is returned, otherwise true.  */
+
+/* These four use the custom conversion code above.  */
+static bool
+convert_utf8_utf16 (iconv_t cd, const uchar *from, size_t flen,
+                   struct _cpp_strbuf *to)
+{
+  return conversion_loop (one_utf8_to_utf16, cd, from, flen, to);
+}
+
+static bool
+convert_utf8_utf32 (iconv_t cd, const uchar *from, size_t flen,
+                   struct _cpp_strbuf *to)
+{
+  return conversion_loop (one_utf8_to_utf32, cd, from, flen, to);
+}
+
+static bool
+convert_utf16_utf8 (iconv_t cd, const uchar *from, size_t flen,
+                   struct _cpp_strbuf *to)
+{
+  return conversion_loop (one_utf16_to_utf8, cd, from, flen, to);
+}
+
+static bool
+convert_utf32_utf8 (iconv_t cd, const uchar *from, size_t flen,
+                   struct _cpp_strbuf *to)
+{
+  return conversion_loop (one_utf32_to_utf8, cd, from, flen, to);
+}
+
+/* Identity conversion, used when we have no alternative.  */
+static bool
+convert_no_conversion (iconv_t cd ATTRIBUTE_UNUSED,
+                      const uchar *from, size_t flen, struct _cpp_strbuf *to)
+{
+  if (to->len + flen > to->asize)
+    {
+      to->asize = to->len + flen;
+      to->text = XRESIZEVEC (uchar, to->text, to->asize);
+    }
+  memcpy (to->text + to->len, from, flen);
+  to->len += flen;
+  return true;
+}
+
+/* And this one uses the system iconv primitive.  It's a little
+   different, since iconv's interface is a little different.  */
+#if HAVE_ICONV
+
+#define CONVERT_ICONV_GROW_BUFFER \
+  do { \
+      outbytesleft += OUTBUF_BLOCK_SIZE; \
+      to->asize += OUTBUF_BLOCK_SIZE; \
+      to->text = XRESIZEVEC (uchar, to->text, to->asize); \
+      outbuf = (char *)to->text + to->asize - outbytesleft; \
+  } while (0)
+
+static bool
+convert_using_iconv (iconv_t cd, const uchar *from, size_t flen,
+                    struct _cpp_strbuf *to)
+{
+  ICONV_CONST char *inbuf;
+  char *outbuf;
+  size_t inbytesleft, outbytesleft;
+
+  /* Reset conversion descriptor and check that it is valid.  */
+  if (iconv (cd, 0, 0, 0, 0) == (size_t)-1)
+    return false;
+
+  inbuf = (ICONV_CONST char *)from;
+  inbytesleft = flen;
+  outbuf = (char *)to->text + to->len;
+  outbytesleft = to->asize - to->len;
+
+  for (;;)
+    {
+      iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+      if (__builtin_expect (inbytesleft == 0, 1))
+       {
+         /* Close out any shift states, returning to the initial state.  */
+         if (iconv (cd, 0, 0, &outbuf, &outbytesleft) == (size_t)-1)
+           {
+             if (errno != E2BIG)
+               return false;
+
+             CONVERT_ICONV_GROW_BUFFER;
+             if (iconv (cd, 0, 0, &outbuf, &outbytesleft) == (size_t)-1)
+               return false;
+           }
+
+         to->len = to->asize - outbytesleft;
+         return true;
+       }
+      if (errno != E2BIG)
+       return false;
+
+      CONVERT_ICONV_GROW_BUFFER;
+    }
+}
+#else
+#define convert_using_iconv 0 /* prevent undefined symbol error below */
+#endif
+
+/* Arrange for the above custom conversion logic to be used automatically
+   when conversion between a suitable pair of character sets is requested.  */
+
+#define APPLY_CONVERSION(CONVERTER, FROM, FLEN, TO) \
+   CONVERTER.func (CONVERTER.cd, FROM, FLEN, TO)
+
+struct conversion
+{
+  const char *pair;
+  convert_f func;
+  iconv_t fake_cd;
+};
+static const struct conversion conversion_tab[] = {
+  { "UTF-8/UTF-32LE", convert_utf8_utf32, (iconv_t)0 },
+  { "UTF-8/UTF-32BE", convert_utf8_utf32, (iconv_t)1 },
+  { "UTF-8/UTF-16LE", convert_utf8_utf16, (iconv_t)0 },
+  { "UTF-8/UTF-16BE", convert_utf8_utf16, (iconv_t)1 },
+  { "UTF-32LE/UTF-8", convert_utf32_utf8, (iconv_t)0 },
+  { "UTF-32BE/UTF-8", convert_utf32_utf8, (iconv_t)1 },
+  { "UTF-16LE/UTF-8", convert_utf16_utf8, (iconv_t)0 },
+  { "UTF-16BE/UTF-8", convert_utf16_utf8, (iconv_t)1 },
+};
+
+/* Subroutine of cpp_init_iconv: initialize and return a
+   cset_converter structure for conversion from FROM to TO.  If
+   iconv_open() fails, issue an error and return an identity
+   converter.  Silently return an identity converter if FROM and TO
+   are identical.  */
+static struct cset_converter
+init_iconv_desc (cpp_reader *pfile, const char *to, const char *from)
+{
+  struct cset_converter ret;
+  char *pair;
+  size_t i;
+
+  if (!strcasecmp (to, from))
+    {
+      ret.func = convert_no_conversion;
+      ret.cd = (iconv_t) -1;
+      return ret;
+    }
+
+  pair = (char *) alloca(strlen(to) + strlen(from) + 2);
+
+  strcpy(pair, from);
+  strcat(pair, "/");
+  strcat(pair, to);
+  for (i = 0; i < ARRAY_SIZE (conversion_tab); i++)
+    if (!strcasecmp (pair, conversion_tab[i].pair))
+      {
+       ret.func = conversion_tab[i].func;
+       ret.cd = conversion_tab[i].fake_cd;
+       return ret;
+      }
+
+  /* No custom converter - try iconv.  */
+  if (HAVE_ICONV)
+    {
+      ret.func = convert_using_iconv;
+      ret.cd = iconv_open (to, from);
+
+      if (ret.cd == (iconv_t) -1)
+       {
+         if (errno == EINVAL)
+           cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */
+                      "conversion from %s to %s not supported by iconv",
+                      from, to);
+         else
+           cpp_errno (pfile, CPP_DL_ERROR, "iconv_open");
+
+         ret.func = convert_no_conversion;
+       }
+    }
+  else
+    {
+      cpp_error (pfile, CPP_DL_ERROR, /* FIXME: should be DL_SORRY */
+                "no iconv implementation, cannot convert from %s to %s",
+                from, to);
+      ret.func = convert_no_conversion;
+      ret.cd = (iconv_t) -1;
+    }
+  return ret;
+}
+
+/* If charset conversion is requested, initialize iconv(3) descriptors
+   for conversion from the source character set to the execution
+   character sets.  If iconv is not present in the C library, and
+   conversion is requested, issue an error.  */
+
+void
+cpp_init_iconv (cpp_reader *pfile)
+{
+  const char *ncset = CPP_OPTION (pfile, narrow_charset);
+  const char *wcset = CPP_OPTION (pfile, wide_charset);
+  const char *default_wcset;
+
+  bool be = CPP_OPTION (pfile, bytes_big_endian);
+
+  if (CPP_OPTION (pfile, wchar_precision) >= 32)
+    default_wcset = be ? "UTF-32BE" : "UTF-32LE";
+  else if (CPP_OPTION (pfile, wchar_precision) >= 16)
+    default_wcset = be ? "UTF-16BE" : "UTF-16LE";
+  else
+    /* This effectively means that wide strings are not supported,
+       so don't do any conversion at all.  */
+   default_wcset = SOURCE_CHARSET;
+
+  if (!ncset)
+    ncset = SOURCE_CHARSET;
+  if (!wcset)
+    wcset = default_wcset;
+
+  pfile->narrow_cset_desc = init_iconv_desc (pfile, ncset, SOURCE_CHARSET);
+  pfile->wide_cset_desc = init_iconv_desc (pfile, wcset, SOURCE_CHARSET);
+}
+
+/* Destroy iconv(3) descriptors set up by cpp_init_iconv, if necessary.  */
+void
+_cpp_destroy_iconv (cpp_reader *pfile)
+{
+  if (HAVE_ICONV)
+    {
+      if (pfile->narrow_cset_desc.func == convert_using_iconv)
+       iconv_close (pfile->narrow_cset_desc.cd);
+      if (pfile->wide_cset_desc.func == convert_using_iconv)
+       iconv_close (pfile->wide_cset_desc.cd);
+    }
+}
+
+/* Utility routine for use by a full compiler.  C is a character taken
+   from the *basic* source character set, encoded in the host's
+   execution encoding.  Convert it to (the target's) execution
+   encoding, and return that value.
+
+   Issues an internal error if C's representation in the narrow
+   execution character set fails to be a single-byte value (C99
+   5.2.1p3: "The representation of each member of the source and
+   execution character sets shall fit in a byte.")  May also issue an
+   internal error if C fails to be a member of the basic source
+   character set (testing this exactly is too hard, especially when
+   the host character set is EBCDIC).  */
+cppchar_t
+cpp_host_to_exec_charset (cpp_reader *pfile, cppchar_t c)
+{
+  uchar sbuf[1];
+  struct _cpp_strbuf tbuf;
+
+  /* This test is merely an approximation, but it suffices to catch
+     the most important thing, which is that we don't get handed a
+     character outside the unibyte range of the host character set.  */
+  if (c > LAST_POSSIBLY_BASIC_SOURCE_CHAR)
+    {
+      cpp_error (pfile, CPP_DL_ICE,
+                "character 0x%lx is not in the basic source character set\n",
+                (unsigned long)c);
+      return 0;
+    }
+
+  /* Being a character in the unibyte range of the host character set,
+     we can safely splat it into a one-byte buffer and trust that that
+     is a well-formed string.  */
+  sbuf[0] = c;
+
+  /* This should never need to reallocate, but just in case... */
+  tbuf.asize = 1;
+  tbuf.text = XNEWVEC (uchar, tbuf.asize);
+  tbuf.len = 0;
+
+  if (!APPLY_CONVERSION (pfile->narrow_cset_desc, sbuf, 1, &tbuf))
+    {
+      cpp_errno (pfile, CPP_DL_ICE, "converting to execution character set");
+      return 0;
+    }
+  if (tbuf.len != 1)
+    {
+      cpp_error (pfile, CPP_DL_ICE,
+                "character 0x%lx is not unibyte in execution character set",
+                (unsigned long)c);
+      return 0;
+    }
+  c = tbuf.text[0];
+  free(tbuf.text);
+  return c;
+}
+
+\f
+
+/* Utility routine that computes a mask of the form 0000...111... with
+   WIDTH 1-bits.  */
+static inline size_t
+width_to_mask (size_t width)
+{
+  width = MIN (width, BITS_PER_CPPCHAR_T);
+  if (width >= CHAR_BIT * sizeof (size_t))
+    return ~(size_t) 0;
+  else
+    return ((size_t) 1 << width) - 1;
+}
+
+/* A large table of unicode character information.  */
+enum {
+  /* Valid in a C99 identifier?  */
+  C99 = 1,
+  /* Valid in a C99 identifier, but not as the first character?  */
+  DIG = 2,
+  /* Valid in a C++ identifier?  */
+  CXX = 4,
+  /* NFC representation is not valid in an identifier?  */
+  CID = 8,
+  /* Might be valid NFC form?  */
+  NFC = 16,
+  /* Might be valid NFKC form?  */
+  NKC = 32,
+  /* Certain preceding characters might make it not valid NFC/NKFC form?  */
+  CTX = 64
+};
+
+static const struct {
+  /* Bitmap of flags above.  */
+  unsigned char flags;
+  /* Combining class of the character.  */
+  unsigned char combine;
+  /* Last character in the range described by this entry.  */
+  unsigned short end;
+} ucnranges[] = {
+#include "ucnid.h"
+};
+
+/* Returns 1 if C is valid in an identifier, 2 if C is valid except at
+   the start of an identifier, and 0 if C is not valid in an
+   identifier.  We assume C has already gone through the checks of
+   _cpp_valid_ucn.  Also update NST for C if returning nonzero.  The
+   algorithm is a simple binary search on the table defined in
+   ucnid.h.  */
+
+static int
+ucn_valid_in_identifier (cpp_reader *pfile, cppchar_t c,
+                        struct normalize_state *nst)
+{
+  int mn, mx, md;
+
+  if (c > 0xFFFF)
+    return 0;
+
+  mn = 0;
+  mx = ARRAY_SIZE (ucnranges) - 1;
+  while (mx != mn)
+    {
+      md = (mn + mx) / 2;
+      if (c <= ucnranges[md].end)
+       mx = md;
+      else
+       mn = md + 1;
+    }
+
+  /* When -pedantic, we require the character to have been listed by
+     the standard for the current language.  Otherwise, we accept the
+     union of the acceptable sets for C++98 and C99.  */
+  if (! (ucnranges[mn].flags & (C99 | CXX)))
+      return 0;
+
+  if (CPP_PEDANTIC (pfile)
+      && ((CPP_OPTION (pfile, c99) && !(ucnranges[mn].flags & C99))
+         || (CPP_OPTION (pfile, cplusplus)
+             && !(ucnranges[mn].flags & CXX))))
+    return 0;
+
+  /* Update NST.  */
+  if (ucnranges[mn].combine != 0 && ucnranges[mn].combine < nst->prev_class)
+    nst->level = normalized_none;
+  else if (ucnranges[mn].flags & CTX)
+    {
+      bool safe;
+      cppchar_t p = nst->previous;
+
+      /* Easy cases from Bengali, Oriya, Tamil, Jannada, and Malayalam.  */
+      if (c == 0x09BE)
+       safe = p != 0x09C7;  /* Use 09CB instead of 09C7 09BE.  */
+      else if (c == 0x0B3E)
+       safe = p != 0x0B47;  /* Use 0B4B instead of 0B47 0B3E.  */
+      else if (c == 0x0BBE)
+       safe = p != 0x0BC6 && p != 0x0BC7;  /* Use 0BCA/0BCB instead.  */
+      else if (c == 0x0CC2)
+       safe = p != 0x0CC6;  /* Use 0CCA instead of 0CC6 0CC2.  */
+      else if (c == 0x0D3E)
+       safe = p != 0x0D46 && p != 0x0D47;  /* Use 0D4A/0D4B instead.  */
+      /* For Hangul, characters in the range AC00-D7A3 are NFC/NFKC,
+        and are combined algorithmically from a sequence of the form
+        1100-1112 1161-1175 11A8-11C2
+        (if the third is not present, it is treated as 11A7, which is not
+        really a valid character).
+        Unfortunately, C99 allows (only) the NFC form, but C++ allows
+        only the combining characters.  */
+      else if (c >= 0x1161 && c <= 0x1175)
+       safe = p < 0x1100 || p > 0x1112;
+      else if (c >= 0x11A8 && c <= 0x11C2)
+       safe = (p < 0xAC00 || p > 0xD7A3 || (p - 0xAC00) % 28 != 0);
+      else
+       {
+         /* Uh-oh, someone updated ucnid.h without updating this code.  */
+         cpp_error (pfile, CPP_DL_ICE, "Character %x might not be NFKC", c);
+         safe = true;
+       }
+      if (!safe && c < 0x1161)
+       nst->level = normalized_none;
+      else if (!safe)
+       nst->level = MAX (nst->level, normalized_identifier_C);
+    }
+  else if (ucnranges[mn].flags & NKC)
+    ;
+  else if (ucnranges[mn].flags & NFC)
+    nst->level = MAX (nst->level, normalized_C);
+  else if (ucnranges[mn].flags & CID)
+    nst->level = MAX (nst->level, normalized_identifier_C);
+  else
+    nst->level = normalized_none;
+  nst->previous = c;
+  nst->prev_class = ucnranges[mn].combine;
+
+  /* In C99, UCN digits may not begin identifiers.  */
+  if (CPP_OPTION (pfile, c99) && (ucnranges[mn].flags & DIG))
+    return 2;
+
+  return 1;
+}
+
+/* [lex.charset]: The character designated by the universal character
+   name \UNNNNNNNN is that character whose character short name in
+   ISO/IEC 10646 is NNNNNNNN; the character designated by the
+   universal character name \uNNNN is that character whose character
+   short name in ISO/IEC 10646 is 0000NNNN.  If the hexadecimal value
+   for a universal character name is less than 0x20 or in the range
+   0x7F-0x9F (inclusive), or if the universal character name
+   designates a character in the basic source character set, then the
+   program is ill-formed.
+
+   *PSTR must be preceded by "\u" or "\U"; it is assumed that the
+   buffer end is delimited by a non-hex digit.  Returns zero if the
+   UCN has not been consumed.
+
+   Otherwise the nonzero value of the UCN, whether valid or invalid,
+   is returned.  Diagnostics are emitted for invalid values.  PSTR
+   is updated to point one beyond the UCN, or to the syntactically
+   invalid character.
+
+   IDENTIFIER_POS is 0 when not in an identifier, 1 for the start of
+   an identifier, or 2 otherwise.  */
+
+cppchar_t
+_cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr,
+               const uchar *limit, int identifier_pos,
+               struct normalize_state *nst)
+{
+  cppchar_t result, c;
+  unsigned int length;
+  const uchar *str = *pstr;
+  const uchar *base = str - 2;
+
+  if (!CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, c99))
+    cpp_error (pfile, CPP_DL_WARNING,
+              "universal character names are only valid in C++ and C99");
+  else if (CPP_WTRADITIONAL (pfile) && identifier_pos == 0)
+    cpp_error (pfile, CPP_DL_WARNING,
+              "the meaning of '\\%c' is different in traditional C",
+              (int) str[-1]);
+
+  if (str[-1] == 'u')
+    length = 4;
+  else if (str[-1] == 'U')
+    length = 8;
+  else
+    {
+      cpp_error (pfile, CPP_DL_ICE, "In _cpp_valid_ucn but not a UCN");
+      length = 4;
+    }
+
+  result = 0;
+  do
+    {
+      c = *str;
+      if (!ISXDIGIT (c))
+       break;
+      str++;
+      result = (result << 4) + hex_value (c);
+    }
+  while (--length && str < limit);
+
+  /* Partial UCNs are not valid in strings, but decompose into
+     multiple tokens in identifiers, so we can't give a helpful
+     error message in that case.  */
+  if (length && identifier_pos)
+    return 0;
+  
+  *pstr = str;
+  if (length)
+    {
+      cpp_error (pfile, CPP_DL_ERROR,
+                "incomplete universal character name %.*s",
+                (int) (str - base), base);
+      result = 1;
+    }
+  /* The standard permits $, @ and ` to be specified as UCNs.  We use
+     hex escapes so that this also works with EBCDIC hosts.  */
+  else if ((result < 0xa0
+           && (result != 0x24 && result != 0x40 && result != 0x60))
+          || (result & 0x80000000)
+          || (result >= 0xD800 && result <= 0xDFFF))
+    {
+      cpp_error (pfile, CPP_DL_ERROR,
+                "%.*s is not a valid universal character",
+                (int) (str - base), base);
+      result = 1;
+    }
+  else if (identifier_pos && result == 0x24 
+          && CPP_OPTION (pfile, dollars_in_ident))
+    {
+      if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
+       {
+         CPP_OPTION (pfile, warn_dollars) = 0;
+         cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
+       }
+      NORMALIZE_STATE_UPDATE_IDNUM (nst);
+    }
+  else if (identifier_pos)
+    {
+      int validity = ucn_valid_in_identifier (pfile, result, nst);
+
+      if (validity == 0)
+       cpp_error (pfile, CPP_DL_ERROR,
+                  "universal character %.*s is not valid in an identifier",
+                  (int) (str - base), base);
+      else if (validity == 2 && identifier_pos == 1)
+       cpp_error (pfile, CPP_DL_ERROR,
+   "universal character %.*s is not valid at the start of an identifier",
+                  (int) (str - base), base);
+    }
+
+  if (result == 0)
+    result = 1;
+
+  return result;
+}
+
+/* Convert an UCN, pointed to by FROM, to UTF-8 encoding, then translate
+   it to the execution character set and write the result into TBUF.
+   An advanced pointer is returned.  Issues all relevant diagnostics.  */
+static const uchar *
+convert_ucn (cpp_reader *pfile, const uchar *from, const uchar *limit,
+            struct _cpp_strbuf *tbuf, bool wide)
+{
+  cppchar_t ucn;
+  uchar buf[6];
+  uchar *bufp = buf;
+  size_t bytesleft = 6;
+  int rval;
+  struct cset_converter cvt
+    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
+  struct normalize_state nst = INITIAL_NORMALIZE_STATE;
+
+  from++;  /* Skip u/U.  */
+  ucn = _cpp_valid_ucn (pfile, &from, limit, 0, &nst);
+
+  rval = one_cppchar_to_utf8 (ucn, &bufp, &bytesleft);
+  if (rval)
+    {
+      errno = rval;
+      cpp_errno (pfile, CPP_DL_ERROR,
+                "converting UCN to source character set");
+    }
+  else if (!APPLY_CONVERSION (cvt, buf, 6 - bytesleft, tbuf))
+    cpp_errno (pfile, CPP_DL_ERROR,
+              "converting UCN to execution character set");
+
+  return from;
+}
+
+/* Subroutine of convert_hex and convert_oct.  N is the representation
+   in the execution character set of a numeric escape; write it into the
+   string buffer TBUF and update the end-of-string pointer therein.  WIDE
+   is true if it's a wide string that's being assembled in TBUF.  This
+   function issues no diagnostics and never fails.  */
+static void
+emit_numeric_escape (cpp_reader *pfile, cppchar_t n,
+                    struct _cpp_strbuf *tbuf, bool wide)
+{
+  if (wide)
+    {
+      /* We have to render this into the target byte order, which may not
+        be our byte order.  */
+      bool bigend = CPP_OPTION (pfile, bytes_big_endian);
+      size_t width = CPP_OPTION (pfile, wchar_precision);
+      size_t cwidth = CPP_OPTION (pfile, char_precision);
+      size_t cmask = width_to_mask (cwidth);
+      size_t nbwc = width / cwidth;
+      size_t i;
+      size_t off = tbuf->len;
+      cppchar_t c;
+
+      if (tbuf->len + nbwc > tbuf->asize)
+       {
+         tbuf->asize += OUTBUF_BLOCK_SIZE;
+         tbuf->text = XRESIZEVEC (uchar, tbuf->text, tbuf->asize);
+       }
+
+      for (i = 0; i < nbwc; i++)
+       {
+         c = n & cmask;
+         n >>= cwidth;
+         tbuf->text[off + (bigend ? nbwc - i - 1 : i)] = c;
+       }
+      tbuf->len += nbwc;
+    }
+  else
+    {
+      /* Note: this code does not handle the case where the target
+        and host have a different number of bits in a byte.  */
+      if (tbuf->len + 1 > tbuf->asize)
+       {
+         tbuf->asize += OUTBUF_BLOCK_SIZE;
+         tbuf->text = XRESIZEVEC (uchar, tbuf->text, tbuf->asize);
+       }
+      tbuf->text[tbuf->len++] = n;
+    }
+}
+
+/* Convert a hexadecimal escape, pointed to by FROM, to the execution
+   character set and write it into the string buffer TBUF.  Returns an
+   advanced pointer, and issues diagnostics as necessary.
+   No character set translation occurs; this routine always produces the
+   execution-set character with numeric value equal to the given hex
+   number.  You can, e.g. generate surrogate pairs this way.  */
+static const uchar *
+convert_hex (cpp_reader *pfile, const uchar *from, const uchar *limit,
+            struct _cpp_strbuf *tbuf, bool wide)
+{
+  cppchar_t c, n = 0, overflow = 0;
+  int digits_found = 0;
+  size_t width = (wide ? CPP_OPTION (pfile, wchar_precision)
+                 : CPP_OPTION (pfile, char_precision));
+  size_t mask = width_to_mask (width);
+
+  if (CPP_WTRADITIONAL (pfile))
+    cpp_error (pfile, CPP_DL_WARNING,
+              "the meaning of '\\x' is different in traditional C");
+
+  from++;  /* Skip 'x'.  */
+  while (from < limit)
+    {
+      c = *from;
+      if (! hex_p (c))
+       break;
+      from++;
+      overflow |= n ^ (n << 4 >> 4);
+      n = (n << 4) + hex_value (c);
+      digits_found = 1;
+    }
+
+  if (!digits_found)
+    {
+      cpp_error (pfile, CPP_DL_ERROR,
+                "\\x used with no following hex digits");
+      return from;
+    }
+
+  if (overflow | (n != (n & mask)))
+    {
+      cpp_error (pfile, CPP_DL_PEDWARN,
+                "hex escape sequence out of range");
+      n &= mask;
+    }
+
+  emit_numeric_escape (pfile, n, tbuf, wide);
+
+  return from;
+}
+
+/* Convert an octal escape, pointed to by FROM, to the execution
+   character set and write it into the string buffer TBUF.  Returns an
+   advanced pointer, and issues diagnostics as necessary.
+   No character set translation occurs; this routine always produces the
+   execution-set character with numeric value equal to the given octal
+   number.  */
+static const uchar *
+convert_oct (cpp_reader *pfile, const uchar *from, const uchar *limit,
+            struct _cpp_strbuf *tbuf, bool wide)
+{
+  size_t count = 0;
+  cppchar_t c, n = 0;
+  size_t width = (wide ? CPP_OPTION (pfile, wchar_precision)
+                 : CPP_OPTION (pfile, char_precision));
+  size_t mask = width_to_mask (width);
+  bool overflow = false;
+
+  while (from < limit && count++ < 3)
+    {
+      c = *from;
+      if (c < '0' || c > '7')
+       break;
+      from++;
+      overflow |= n ^ (n << 3 >> 3);
+      n = (n << 3) + c - '0';
+    }
+
+  if (n != (n & mask))
+    {
+      cpp_error (pfile, CPP_DL_PEDWARN,
+                "octal escape sequence out of range");
+      n &= mask;
+    }
+
+  emit_numeric_escape (pfile, n, tbuf, wide);
+
+  return from;
+}
+
+/* Convert an escape sequence (pointed to by FROM) to its value on
+   the target, and to the execution character set.  Do not scan past
+   LIMIT.  Write the converted value into TBUF.  Returns an advanced
+   pointer.  Handles all relevant diagnostics.  */
+static const uchar *
+convert_escape (cpp_reader *pfile, const uchar *from, const uchar *limit,
+               struct _cpp_strbuf *tbuf, bool wide)
+{
+  /* Values of \a \b \e \f \n \r \t \v respectively.  */
+#if HOST_CHARSET == HOST_CHARSET_ASCII
+  static const uchar charconsts[] = {  7,  8, 27, 12, 10, 13,  9, 11 };
+#elif HOST_CHARSET == HOST_CHARSET_EBCDIC
+  static const uchar charconsts[] = { 47, 22, 39, 12, 21, 13,  5, 11 };
+#else
+#error "unknown host character set"
+#endif
+
+  uchar c;
+  struct cset_converter cvt
+    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
+
+  c = *from;
+  switch (c)
+    {
+      /* UCNs, hex escapes, and octal escapes are processed separately.  */
+    case 'u': case 'U':
+      return convert_ucn (pfile, from, limit, tbuf, wide);
+
+    case 'x':
+      return convert_hex (pfile, from, limit, tbuf, wide);
+      break;
+
+    case '0':  case '1':  case '2':  case '3':
+    case '4':  case '5':  case '6':  case '7':
+      return convert_oct (pfile, from, limit, tbuf, wide);
+
+      /* Various letter escapes.  Get the appropriate host-charset
+        value into C.  */
+    case '\\': case '\'': case '"': case '?': break;
+
+    case '(': case '{': case '[': case '%':
+      /* '\(', etc, can be used at the beginning of a line in a long
+        string split onto multiple lines with \-newline, to prevent
+        Emacs or other text editors from getting confused.  '\%' can
+        be used to prevent SCCS from mangling printf format strings.  */
+      if (CPP_PEDANTIC (pfile))
+       goto unknown;
+      break;
+
+    case 'b': c = charconsts[1];  break;
+    case 'f': c = charconsts[3];  break;
+    case 'n': c = charconsts[4];  break;
+    case 'r': c = charconsts[5];  break;
+    case 't': c = charconsts[6];  break;
+    case 'v': c = charconsts[7];  break;
+
+    case 'a':
+      if (CPP_WTRADITIONAL (pfile))
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "the meaning of '\\a' is different in traditional C");
+      c = charconsts[0];
+      break;
+
+    case 'e': case 'E':
+      if (CPP_PEDANTIC (pfile))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "non-ISO-standard escape sequence, '\\%c'", (int) c);
+      c = charconsts[2];
+      break;
+
+    default:
+    unknown:
+      if (ISGRAPH (c))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "unknown escape sequence '\\%c'", (int) c);
+      else
+       {
+         /* diagnostic.c does not support "%03o".  When it does, this
+            code can use %03o directly in the diagnostic again.  */
+         char buf[32];
+         sprintf(buf, "%03o", (int) c);
+         cpp_error (pfile, CPP_DL_PEDWARN,
+                    "unknown escape sequence: '\\%s'", buf);
+       }
+    }
+
+  /* Now convert what we have to the execution character set.  */
+  if (!APPLY_CONVERSION (cvt, &c, 1, tbuf))
+    cpp_errno (pfile, CPP_DL_ERROR,
+              "converting escape sequence to execution character set");
+
+  return from + 1;
+}
+\f
+/* FROM is an array of cpp_string structures of length COUNT.  These
+   are to be converted from the source to the execution character set,
+   escape sequences translated, and finally all are to be
+   concatenated.  WIDE indicates whether or not to produce a wide
+   string.  The result is written into TO.  Returns true for success,
+   false for failure.  */
+bool
+cpp_interpret_string (cpp_reader *pfile, const cpp_string *from, size_t count,
+                     cpp_string *to, bool wide)
+{
+  struct _cpp_strbuf tbuf;
+  const uchar *p, *base, *limit;
+  size_t i;
+  struct cset_converter cvt
+    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
+
+  tbuf.asize = MAX (OUTBUF_BLOCK_SIZE, from->len);
+  tbuf.text = XNEWVEC (uchar, tbuf.asize);
+  tbuf.len = 0;
+
+  for (i = 0; i < count; i++)
+    {
+      p = from[i].text;
+      if (*p == 'L') p++;
+      p++; /* Skip leading quote.  */
+      limit = from[i].text + from[i].len - 1; /* Skip trailing quote.  */
+
+      for (;;)
+       {
+         base = p;
+         while (p < limit && *p != '\\')
+           p++;
+         if (p > base)
+           {
+             /* We have a run of normal characters; these can be fed
+                directly to convert_cset.  */
+             if (!APPLY_CONVERSION (cvt, base, p - base, &tbuf))
+               goto fail;
+           }
+         if (p == limit)
+           break;
+
+         p = convert_escape (pfile, p + 1, limit, &tbuf, wide);
+       }
+    }
+  /* NUL-terminate the 'to' buffer and translate it to a cpp_string
+     structure.  */
+  emit_numeric_escape (pfile, 0, &tbuf, wide);
+  tbuf.text = XRESIZEVEC (uchar, tbuf.text, tbuf.len);
+  to->text = tbuf.text;
+  to->len = tbuf.len;
+  return true;
+
+ fail:
+  cpp_errno (pfile, CPP_DL_ERROR, "converting to execution character set");
+  free (tbuf.text);
+  return false;
+}
+
+/* Subroutine of do_line and do_linemarker.  Convert escape sequences
+   in a string, but do not perform character set conversion.  */
+bool
+cpp_interpret_string_notranslate (cpp_reader *pfile, const cpp_string *from,
+                                 size_t count, cpp_string *to, bool wide)
+{
+  struct cset_converter save_narrow_cset_desc = pfile->narrow_cset_desc;
+  bool retval;
+
+  pfile->narrow_cset_desc.func = convert_no_conversion;
+  pfile->narrow_cset_desc.cd = (iconv_t) -1;
+
+  retval = cpp_interpret_string (pfile, from, count, to, wide);
+
+  pfile->narrow_cset_desc = save_narrow_cset_desc;
+  return retval;
+}
+
+\f
+/* Subroutine of cpp_interpret_charconst which performs the conversion
+   to a number, for narrow strings.  STR is the string structure returned
+   by cpp_interpret_string.  PCHARS_SEEN and UNSIGNEDP are as for
+   cpp_interpret_charconst.  */
+static cppchar_t
+narrow_str_to_charconst (cpp_reader *pfile, cpp_string str,
+                        unsigned int *pchars_seen, int *unsignedp)
+{
+  size_t width = CPP_OPTION (pfile, char_precision);
+  size_t max_chars = CPP_OPTION (pfile, int_precision) / width;
+  size_t mask = width_to_mask (width);
+  size_t i;
+  cppchar_t result, c;
+  bool unsigned_p;
+
+  /* The value of a multi-character character constant, or a
+     single-character character constant whose representation in the
+     execution character set is more than one byte long, is
+     implementation defined.  This implementation defines it to be the
+     number formed by interpreting the byte sequence in memory as a
+     big-endian binary number.  If overflow occurs, the high bytes are
+     lost, and a warning is issued.
+
+     We don't want to process the NUL terminator handed back by
+     cpp_interpret_string.  */
+  result = 0;
+  for (i = 0; i < str.len - 1; i++)
+    {
+      c = str.text[i] & mask;
+      if (width < BITS_PER_CPPCHAR_T)
+       result = (result << width) | c;
+      else
+       result = c;
+    }
+
+  if (i > max_chars)
+    {
+      i = max_chars;
+      cpp_error (pfile, CPP_DL_WARNING,
+                "character constant too long for its type");
+    }
+  else if (i > 1 && CPP_OPTION (pfile, warn_multichar))
+    cpp_error (pfile, CPP_DL_WARNING, "multi-character character constant");
+
+  /* Multichar constants are of type int and therefore signed.  */
+  if (i > 1)
+    unsigned_p = 0;
+  else
+    unsigned_p = CPP_OPTION (pfile, unsigned_char);
+
+  /* Truncate the constant to its natural width, and simultaneously
+     sign- or zero-extend to the full width of cppchar_t.
+     For single-character constants, the value is WIDTH bits wide.
+     For multi-character constants, the value is INT_PRECISION bits wide.  */
+  if (i > 1)
+    width = CPP_OPTION (pfile, int_precision);
+  if (width < BITS_PER_CPPCHAR_T)
+    {
+      mask = ((cppchar_t) 1 << width) - 1;
+      if (unsigned_p || !(result & (1 << (width - 1))))
+       result &= mask;
+      else
+       result |= ~mask;
+    }
+  *pchars_seen = i;
+  *unsignedp = unsigned_p;
+  return result;
+}
+
+/* Subroutine of cpp_interpret_charconst which performs the conversion
+   to a number, for wide strings.  STR is the string structure returned
+   by cpp_interpret_string.  PCHARS_SEEN and UNSIGNEDP are as for
+   cpp_interpret_charconst.  */
+static cppchar_t
+wide_str_to_charconst (cpp_reader *pfile, cpp_string str,
+                      unsigned int *pchars_seen, int *unsignedp)
+{
+  bool bigend = CPP_OPTION (pfile, bytes_big_endian);
+  size_t width = CPP_OPTION (pfile, wchar_precision);
+  size_t cwidth = CPP_OPTION (pfile, char_precision);
+  size_t mask = width_to_mask (width);
+  size_t cmask = width_to_mask (cwidth);
+  size_t nbwc = width / cwidth;
+  size_t off, i;
+  cppchar_t result = 0, c;
+
+  /* This is finicky because the string is in the target's byte order,
+     which may not be our byte order.  Only the last character, ignoring
+     the NUL terminator, is relevant.  */
+  off = str.len - (nbwc * 2);
+  result = 0;
+  for (i = 0; i < nbwc; i++)
+    {
+      c = bigend ? str.text[off + i] : str.text[off + nbwc - i - 1];
+      result = (result << cwidth) | (c & cmask);
+    }
+
+  /* Wide character constants have type wchar_t, and a single
+     character exactly fills a wchar_t, so a multi-character wide
+     character constant is guaranteed to overflow.  */
+  if (off > 0)
+    cpp_error (pfile, CPP_DL_WARNING,
+              "character constant too long for its type");
+
+  /* Truncate the constant to its natural width, and simultaneously
+     sign- or zero-extend to the full width of cppchar_t.  */
+  if (width < BITS_PER_CPPCHAR_T)
+    {
+      if (CPP_OPTION (pfile, unsigned_wchar) || !(result & (1 << (width - 1))))
+       result &= mask;
+      else
+       result |= ~mask;
+    }
+
+  *unsignedp = CPP_OPTION (pfile, unsigned_wchar);
+  *pchars_seen = 1;
+  return result;
+}
+
+/* Interpret a (possibly wide) character constant in TOKEN.
+   PCHARS_SEEN points to a variable that is filled in with the number
+   of characters seen, and UNSIGNEDP to a variable that indicates
+   whether the result has signed type.  */
+cppchar_t
+cpp_interpret_charconst (cpp_reader *pfile, const cpp_token *token,
+                        unsigned int *pchars_seen, int *unsignedp)
+{
+  cpp_string str = { 0, 0 };
+  bool wide = (token->type == CPP_WCHAR);
+  cppchar_t result;
+
+  /* an empty constant will appear as L'' or '' */
+  if (token->val.str.len == (size_t) (2 + wide))
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "empty character constant");
+      return 0;
+    }
+  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str, wide))
+    return 0;
+
+  if (wide)
+    result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp);
+  else
+    result = narrow_str_to_charconst (pfile, str, pchars_seen, unsignedp);
+
+  if (str.text != token->val.str.text)
+    free ((void *)str.text);
+
+  return result;
+}
+\f
+/* Convert an identifier denoted by ID and LEN, which might contain
+   UCN escapes, to the source character set, either UTF-8 or
+   UTF-EBCDIC.  Assumes that the identifier is actually a valid identifier.  */
+cpp_hashnode *
+_cpp_interpret_identifier (cpp_reader *pfile, const uchar *id, size_t len)
+{
+  /* It turns out that a UCN escape always turns into fewer characters
+     than the escape itself, so we can allocate a temporary in advance.  */
+  uchar * buf = (uchar *) alloca (len + 1);
+  uchar * bufp = buf;
+  size_t idp;
+  
+  for (idp = 0; idp < len; idp++)
+    if (id[idp] != '\\')
+      *bufp++ = id[idp];
+    else
+      {
+       unsigned length = id[idp+1] == 'u' ? 4 : 8;
+       cppchar_t value = 0;
+       size_t bufleft = len - (bufp - buf);
+       int rval;
+
+       idp += 2;
+       while (length && idp < len && ISXDIGIT (id[idp]))
+         {
+           value = (value << 4) + hex_value (id[idp]);
+           idp++;
+           length--;
+         }
+       idp--;
+
+       /* Special case for EBCDIC: if the identifier contains
+          a '$' specified using a UCN, translate it to EBCDIC.  */
+       if (value == 0x24)
+         {
+           *bufp++ = '$';
+           continue;
+         }
+
+       rval = one_cppchar_to_utf8 (value, &bufp, &bufleft);
+       if (rval)
+         {
+           errno = rval;
+           cpp_errno (pfile, CPP_DL_ERROR,
+                      "converting UCN to source character set");
+           break;
+         }
+      }
+
+  return CPP_HASHNODE (ht_lookup (pfile->hash_table, 
+                                 buf, bufp - buf, HT_ALLOC));
+}
+\f
+/* Convert an input buffer (containing the complete contents of one
+   source file) from INPUT_CHARSET to the source character set.  INPUT
+   points to the input buffer, SIZE is its allocated size, and LEN is
+   the length of the meaningful data within the buffer.  The
+   translated buffer is returned, and *ST_SIZE is set to the length of
+   the meaningful data within the translated buffer.
+
+   INPUT is expected to have been allocated with xmalloc.  This function
+   will either return INPUT, or free it and return a pointer to another
+   xmalloc-allocated block of memory.  */
+uchar * 
+_cpp_convert_input (cpp_reader *pfile, const char *input_charset,
+                   uchar *input, size_t size, size_t len, off_t *st_size)
+{
+  struct cset_converter input_cset;
+  struct _cpp_strbuf to;
+
+  input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset);
+  if (input_cset.func == convert_no_conversion)
+    {
+      to.text = input;
+      to.asize = size;
+      to.len = len;
+    }
+  else
+    {
+      to.asize = MAX (65536, len);
+      to.text = XNEWVEC (uchar, to.asize);
+      to.len = 0;
+
+      if (!APPLY_CONVERSION (input_cset, input, len, &to))
+       cpp_error (pfile, CPP_DL_ERROR,
+                  "failure to convert %s to %s",
+                  CPP_OPTION (pfile, input_charset), SOURCE_CHARSET);
+
+      free (input);
+    }
+
+  /* Clean up the mess.  */
+  if (input_cset.func == convert_using_iconv)
+    iconv_close (input_cset.cd);
+
+  /* Resize buffer if we allocated substantially too much, or if we
+     haven't enough space for the \n-terminator.  */
+  if (to.len + 4096 < to.asize || to.len >= to.asize)
+    to.text = XRESIZEVEC (uchar, to.text, to.len + 1);
+
+  /* If the file is using old-school Mac line endings (\r only),
+     terminate with another \r, not an \n, so that we do not mistake
+     the \r\n sequence for a single DOS line ending and erroneously
+     issue the "No newline at end of file" diagnostic.  */
+  if (to.len && to.text[to.len - 1] == '\r')
+    to.text[to.len] = '\r';
+  else
+    to.text[to.len] = '\n';
+
+  *st_size = to.len;
+  return to.text;
+}
+
+/* Decide on the default encoding to assume for input files.  */
+const char *
+_cpp_default_encoding (void)
+{
+  const char *current_encoding = NULL;
+
+  /* We disable this because the default codeset is 7-bit ASCII on
+     most platforms, and this causes conversion failures on every
+     file in GCC that happens to have one of the upper 128 characters
+     in it -- most likely, as part of the name of a contributor.
+     We should definitely recognize in-band markers of file encoding,
+     like:
+     - the appropriate Unicode byte-order mark (FE FF) to recognize
+       UTF16 and UCS4 (in both big-endian and little-endian flavors)
+       and UTF8
+     - a "#i", "#d", "/ *", "//", " #p" or "#p" (for #pragma) to
+       distinguish ASCII and EBCDIC.
+     - now we can parse something like "#pragma GCC encoding <xyz>
+       on the first line, or even Emacs/VIM's mode line tags (there's
+       a problem here in that VIM uses the last line, and Emacs has
+       its more elaborate "local variables" convention).
+     - investigate whether Java has another common convention, which
+       would be friendly to support.
+     (Zack Weinberg and Paolo Bonzini, May 20th 2004)  */
+#if defined (HAVE_LOCALE_H) && defined (HAVE_LANGINFO_CODESET) && 0
+  setlocale (LC_CTYPE, "");
+  current_encoding = nl_langinfo (CODESET);
+#endif
+  if (current_encoding == NULL || *current_encoding == '\0')
+    current_encoding = SOURCE_CHARSET;
+
+  return current_encoding;
+}
diff --git a/libcpp/config.in b/libcpp/config.in
new file mode 100644 (file)
index 0000000..4f3fcc7
--- /dev/null
@@ -0,0 +1,285 @@
+/* config.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define if you want more run-time sanity checks. */
+#undef ENABLE_CHECKING
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `clearerr_unlocked' function. */
+#undef HAVE_CLEARERR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `abort', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ABORT
+
+/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ASPRINTF
+
+/* Define to 1 if you have the declaration of `basename', and to 0 if you
+   don't. */
+#undef HAVE_DECL_BASENAME
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_CLEARERR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `errno', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERRNO
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FERROR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FFLUSH_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgetc_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FGETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fileno_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FILENO_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fprintf_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPRINTF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FREAD_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FWRITE_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_GETCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getopt', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETOPT
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_PUTCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_PUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VASPRINTF
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#undef HAVE_FEOF_UNLOCKED
+
+/* Define to 1 if you have the `ferror_unlocked' function. */
+#undef HAVE_FERROR_UNLOCKED
+
+/* Define to 1 if you have the `fflush_unlocked' function. */
+#undef HAVE_FFLUSH_UNLOCKED
+
+/* Define to 1 if you have the `fgetc_unlocked' function. */
+#undef HAVE_FGETC_UNLOCKED
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#undef HAVE_FGETS_UNLOCKED
+
+/* Define to 1 if you have the `fileno_unlocked' function. */
+#undef HAVE_FILENO_UNLOCKED
+
+/* Define to 1 if you have the `fprintf_unlocked' function. */
+#undef HAVE_FPRINTF_UNLOCKED
+
+/* Define to 1 if you have the `fputc_unlocked' function. */
+#undef HAVE_FPUTC_UNLOCKED
+
+/* Define to 1 if you have the `fputs_unlocked' function. */
+#undef HAVE_FPUTS_UNLOCKED
+
+/* Define to 1 if you have the `fread_unlocked' function. */
+#undef HAVE_FREAD_UNLOCKED
+
+/* Define to 1 if you have the `fwrite_unlocked' function. */
+#undef HAVE_FWRITE_UNLOCKED
+
+/* Define to 1 if you have the `getchar_unlocked' function. */
+#undef HAVE_GETCHAR_UNLOCKED
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#undef HAVE_GETC_UNLOCKED
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <iconv.h> header file. */
+#undef HAVE_ICONV_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if libc includes obstacks. */
+#undef HAVE_OBSTACK
+
+/* Define to 1 if you have the `putchar_unlocked' function. */
+#undef HAVE_PUTCHAR_UNLOCKED
+
+/* Define to 1 if you have the `putc_unlocked' function. */
+#undef HAVE_PUTC_UNLOCKED
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_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 <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/file.h> header file. */
+#undef HAVE_SYS_FILE_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 if <sys/types.h> defines \`uchar'. */
+#undef HAVE_UCHAR
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the widest efficient host integer type at least as wide as the
+   target's size_t type. */
+#undef HOST_WIDE_INT
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define to the name of this package. */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+       STACK_DIRECTION > 0 => grows toward higher addresses
+       STACK_DIRECTION < 0 => grows toward lower addresses
+       STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you can safely include both <string.h> and <strings.h>. */
+#undef STRING_WITH_STRINGS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
diff --git a/libcpp/configure b/libcpp/configure
new file mode 100755 (executable)
index 0000000..46d4979
--- /dev/null
@@ -0,0 +1,9977 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for cpplib  .
+#
+# Report bugs to <nescc-bugs@lists.sourceforge.net>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 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 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  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
+
+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
+  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=.
+  case $as_dir in
+        /*)
+          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=:
+  # Zsh 3.x and 4.x performs 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=:
+  # Zsh 3.x and 4.x performs 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
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  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 autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+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`
+
+#
+# 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}
+
+# Identity of this package.
+PACKAGE_NAME='cpplib'
+PACKAGE_TARNAME='cpplib'
+PACKAGE_VERSION=' '
+PACKAGE_STRING='cpplib  '
+PACKAGE_BUGREPORT='nescc-bugs@lists.sourceforge.net'
+
+ac_unique_file="ucnid.h"
+# 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
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+SET_MAKE
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+RANLIB
+ACLOCAL
+AUTOCONF
+AUTOHEADER
+WARN_CFLAGS
+WARN_PEDANTIC
+WERROR
+am__leading_dot
+DEPDIR
+CCDEPMODE
+CPP
+GREP
+EGREP
+LIBOBJS
+ALLOCA
+USE_NLS
+LIBINTL
+LIBINTL_DEP
+INCINTL
+XGETTEXT
+GMSGFMT
+POSUB
+CATALOGS
+DATADIRNAME
+INSTOBJEXT
+GENCAT
+CATOBJEXT
+LIBICONV
+LTLIBICONV
+PACKAGE
+USED_CATALOGS
+MAINT
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# 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'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+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
+    ac_prev=
+    continue
+  fi
+
+  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_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -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-\(.*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=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-\([^=]*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -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 ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --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)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --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 ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    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
+   { (exit 1); exit 1; }; }
+    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
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+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
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+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=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { 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'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+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.
+    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
+  fi
+fi
+
+ac_tool_prefix=
+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 .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { 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 the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$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'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       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.
+#
+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 cpplib   to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+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]
+  --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/cpplib]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of cpplib  :";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-werror-always  enable -Werror despite compiler version
+  --disable-rpath         do not hardcode runtime library paths
+  --enable-maintainer-mode enable rules only needed by maintainers
+  --enable-checking      enable expensive run-time checks
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+
+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>
+  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
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <nescc-bugs@lists.sourceforge.net>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+    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 || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+cpplib configure
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 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
+fi
+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 cpplib $as_me  , which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 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`
+/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`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# 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: 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.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    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"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 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 -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  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;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+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;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 $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
+  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;}
+      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;}
+      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=:
+      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=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  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;}
+   { (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
+
+
+
+ac_aux_dir=
+for ac_dir in ../config-aux "$srcdir"/../config-aux; 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
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  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 ../config-aux \"$srcdir\"/../config-aux" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ../config-aux \"$srcdir\"/../config-aux" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# 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.
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/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_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 &&
+  { { 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=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_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; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+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
+
+
+{ 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
+  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` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+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
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+# Checks for programs.
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+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 \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+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
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+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 { 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.
+           :
+         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
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+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.  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 value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# 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}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+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
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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.
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+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
+    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
+    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.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+See \`config.log' for more details." >&5
+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`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+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
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out 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[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # 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 | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        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
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { 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
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# 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; }
+# 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'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  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.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+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; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# 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 { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+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 | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { 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
+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; }
+
+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; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  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 | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  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
+See \`config.log' for more details." >&5
+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; }
+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; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+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`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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 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; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=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 <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* 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 -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 -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);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&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
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_ac_ct_RANLIB="ranlib"
+    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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+for ac_prog in aclocal
+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_ACLOCAL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ACLOCAL"; then
+  ac_cv_prog_ACLOCAL="$ACLOCAL" # 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_ACLOCAL="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ACLOCAL=$ac_cv_prog_ACLOCAL
+if test -n "$ACLOCAL"; then
+  { echo "$as_me:$LINENO: result: $ACLOCAL" >&5
+echo "${ECHO_T}$ACLOCAL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ACLOCAL" && break
+done
+test -n "$ACLOCAL" || ACLOCAL="$MISSING aclocal"
+
+for ac_prog in autoconf
+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_AUTOCONF+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AUTOCONF"; then
+  ac_cv_prog_AUTOCONF="$AUTOCONF" # 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_AUTOCONF="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AUTOCONF=$ac_cv_prog_AUTOCONF
+if test -n "$AUTOCONF"; then
+  { echo "$as_me:$LINENO: result: $AUTOCONF" >&5
+echo "${ECHO_T}$AUTOCONF" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AUTOCONF" && break
+done
+test -n "$AUTOCONF" || AUTOCONF="$MISSING autoconf"
+
+for ac_prog in autoheader
+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_AUTOHEADER+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AUTOHEADER"; then
+  ac_cv_prog_AUTOHEADER="$AUTOHEADER" # 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_AUTOHEADER="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AUTOHEADER=$ac_cv_prog_AUTOHEADER
+if test -n "$AUTOHEADER"; then
+  { echo "$as_me:$LINENO: result: $AUTOHEADER" >&5
+echo "${ECHO_T}$AUTOHEADER" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AUTOHEADER" && break
+done
+test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader"
+
+
+# Figure out what compiler warnings we can enable.
+# See config/warnings.m4 for details.
+
+
+WARN_CFLAGS=
+save_CFLAGS="$CFLAGS"
+for option in -W -Wall -Wwrite-strings -Wstrict-prototypes \
+                         -Wmissing-prototypes -Wold-style-definition \
+                         -Wmissing-format-attribute; do
+  as_acx_Woption=`echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+  { echo "$as_me:$LINENO: checking whether $CC supports $option" >&5
+echo $ECHO_N "checking whether $CC supports $option... $ECHO_C" >&6; }
+if { as_var=$as_acx_Woption; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  CFLAGS="$option"
+    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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_acx_Woption=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_acx_Woption=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+ac_res=`eval echo '${'$as_acx_Woption'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+  if test `eval echo '${'$as_acx_Woption'}'` = yes; then
+  WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option"
+fi
+
+  done
+CFLAGS="$save_CFLAGS"
+
+WARN_PEDANTIC=
+if test "$GCC" = yes; then
+  { echo "$as_me:$LINENO: checking whether $CC supports -pedantic -Wno-long-long" >&5
+echo $ECHO_N "checking whether $CC supports -pedantic -Wno-long-long... $ECHO_C" >&6; }
+if test "${acx_cv_prog_cc_pedantic__Wno_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  save_CFLAGS="$CFLAGS"
+CFLAGS="-pedantic -Wno-long-long"
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  acx_cv_prog_cc_pedantic__Wno_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       acx_cv_prog_cc_pedantic__Wno_long_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
+fi
+{ echo "$as_me:$LINENO: result: $acx_cv_prog_cc_pedantic__Wno_long_long" >&5
+echo "${ECHO_T}$acx_cv_prog_cc_pedantic__Wno_long_long" >&6; }
+if test $acx_cv_prog_cc_pedantic__Wno_long_long = yes; then
+  WARN_PEDANTIC="$WARN_PEDANTIC${WARN_PEDANTIC:+ }-pedantic -Wno-long-long"
+fi
+
+
+fi
+
+
+
+# Only enable with --enable-werror-always until existing warnings are
+# corrected.
+WERROR=
+# Check whether --enable-werror-always was given.
+if test "${enable_werror_always+set}" = set; then
+  enableval=$enable_werror_always;
+else
+  enable_werror_always=no
+fi
+
+if test $enable_werror_always = yes; then
+  WERROR="$WERROR${WERROR:+ }-Werror"
+fi
+
+
+
+
+# Dependency checking.
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depdir"
+
+
+depcc="$CC"   am_compiler_list=
+
+am_depcomp=$ac_aux_dir/depcomp
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    if test $depmode = none; then break; fi
+
+    echo "$as_me:$LINENO: trying $depmode" >&5
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "include sub/conftest.Po" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    depcmd="depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c"
+    echo "| $depcmd" | sed -e 's/  */ /g' >&5
+    if env $depcmd > conftest.err 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 &&
+       ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+       echo "$as_me:$LINENO: success" >&5
+        break
+      fi
+    fi
+    echo "$as_me:$LINENO: failure, diagnostics are:" >&5
+    sed -e 's/^/| /' < conftest.err >&5
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+if test x${am_cv_CC_dependencies_compiler_type-none} = xnone
+then { { echo "$as_me:$LINENO: error: no usable dependency style found" >&5
+echo "$as_me: error: no usable dependency style found" >&2;}
+   { (exit 1); exit 1; }; }
+else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+fi
+
+
+# Checks for header files.
+{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_time=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5
+echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6; }
+if test "${gcc_cv_header_string+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <string.h>
+#include <strings.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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gcc_cv_header_string=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gcc_cv_header_string=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5
+echo "${ECHO_T}$gcc_cv_header_string" >&6; }
+if test $gcc_cv_header_string = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STRING_WITH_STRINGS 1
+_ACEOF
+
+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
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # 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
+  # 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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&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
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name 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
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+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
+rm -f conftest*
+
+fi
+
+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>
+
+_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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  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 echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in iconv.h locale.h fcntl.h limits.h stddef.h \
+       stdlib.h strings.h string.h sys/file.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_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 "echo \"\$as_me:$LINENO: $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
+  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
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ----------------------------------------------- ##
+## Report this to nescc-bugs@lists.sourceforge.net ##
+## ----------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_inline=$ac_kw
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+{ echo "$as_me:$LINENO: checking for obstacks" >&5
+echo $ECHO_N "checking for obstacks... $ECHO_C" >&6; }
+if test "${ac_cv_func_obstack+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "obstack.h"
+int
+main ()
+{
+struct obstack mem;
+                      #define obstack_chunk_alloc malloc
+                      #define obstack_chunk_free free
+                      obstack_init (&mem);
+                      obstack_free (&mem, 0);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_obstack=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_obstack=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_obstack" >&5
+echo "${ECHO_T}$ac_cv_func_obstack" >&6; }
+if test $ac_cv_func_obstack = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_OBSTACK 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" obstack.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS obstack.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef off_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_off_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
+if test $ac_cv_type_off_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef size_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_size_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_ssize_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef ssize_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_ssize_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_ssize_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6; }
+if test $ac_cv_type_ssize_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define ssize_t int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; }
+if test "${ac_cv_struct_tm+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_struct_tm=time.h
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_struct_tm=sys/time.h
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6; }
+if test "${ac_cv_type_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef int ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_int=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi ;;
+esac
+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
+   typedef int ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6; }
+if test "${ac_cv_type_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef long ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+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
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    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
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       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
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    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
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  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
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi ;;
+esac
+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
+   typedef long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in clearerr_unlocked feof_unlocked   ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked   fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked   fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked   putchar_unlocked putc_unlocked
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking whether abort is declared" >&5
+echo $ECHO_N "checking whether abort is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_abort+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 abort
+  (void) abort;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_abort=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_abort=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_abort" >&5
+echo "${ECHO_T}$ac_cv_have_decl_abort" >&6; }
+if test $ac_cv_have_decl_abort = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ABORT 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ABORT 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
+echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_asprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 asprintf
+  (void) asprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_asprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_asprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6; }
+if test $ac_cv_have_decl_asprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether basename is declared" >&5
+echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_basename+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 basename
+  (void) basename;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_basename=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_basename=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5
+echo "${ECHO_T}$ac_cv_have_decl_basename" >&6; }
+if test $ac_cv_have_decl_basename = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether errno is declared" >&5
+echo $ECHO_N "checking whether errno is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_errno+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 errno
+  (void) errno;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_errno=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_errno=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_errno" >&5
+echo "${ECHO_T}$ac_cv_have_decl_errno" >&6; }
+if test $ac_cv_have_decl_errno = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERRNO 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERRNO 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether getopt is declared" >&5
+echo $ECHO_N "checking whether getopt is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getopt+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 getopt
+  (void) getopt;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getopt=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_getopt=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getopt" >&6; }
+if test $ac_cv_have_decl_getopt = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETOPT 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETOPT 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether clearerr_unlocked is declared" >&5
+echo $ECHO_N "checking whether clearerr_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_clearerr_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 clearerr_unlocked
+  (void) clearerr_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_clearerr_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_clearerr_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_clearerr_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_clearerr_unlocked" >&6; }
+if test $ac_cv_have_decl_clearerr_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLEARERR_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLEARERR_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
+echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 feof_unlocked
+  (void) feof_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_feof_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_feof_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6; }
+if test $ac_cv_have_decl_feof_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether ferror_unlocked is declared" >&5
+echo $ECHO_N "checking whether ferror_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_ferror_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 ferror_unlocked
+  (void) ferror_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_ferror_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_ferror_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ferror_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_ferror_unlocked" >&6; }
+if test $ac_cv_have_decl_ferror_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FERROR_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FERROR_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fflush_unlocked is declared" >&5
+echo $ECHO_N "checking whether fflush_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fflush_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fflush_unlocked
+  (void) fflush_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fflush_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fflush_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fflush_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fflush_unlocked" >&6; }
+if test $ac_cv_have_decl_fflush_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFLUSH_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFLUSH_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fgetc_unlocked is declared" >&5
+echo $ECHO_N "checking whether fgetc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fgetc_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fgetc_unlocked
+  (void) fgetc_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fgetc_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fgetc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgetc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fgetc_unlocked" >&6; }
+if test $ac_cv_have_decl_fgetc_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETC_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETC_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
+echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fgets_unlocked
+  (void) fgets_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fgets_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fgets_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6; }
+if test $ac_cv_have_decl_fgets_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fileno_unlocked is declared" >&5
+echo $ECHO_N "checking whether fileno_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fileno_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fileno_unlocked
+  (void) fileno_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fileno_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fileno_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fileno_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fileno_unlocked" >&6; }
+if test $ac_cv_have_decl_fileno_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FILENO_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FILENO_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fprintf_unlocked is declared" >&5
+echo $ECHO_N "checking whether fprintf_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fprintf_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fprintf_unlocked
+  (void) fprintf_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fprintf_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fprintf_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fprintf_unlocked" >&6; }
+if test $ac_cv_have_decl_fprintf_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPRINTF_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPRINTF_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fputc_unlocked is declared" >&5
+echo $ECHO_N "checking whether fputc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fputc_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fputc_unlocked
+  (void) fputc_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fputc_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fputc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fputc_unlocked" >&6; }
+if test $ac_cv_have_decl_fputc_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTC_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTC_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fputs_unlocked is declared" >&5
+echo $ECHO_N "checking whether fputs_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fputs_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fputs_unlocked
+  (void) fputs_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fputs_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fputs_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputs_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fputs_unlocked" >&6; }
+if test $ac_cv_have_decl_fputs_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTS_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FPUTS_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fread_unlocked is declared" >&5
+echo $ECHO_N "checking whether fread_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fread_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fread_unlocked
+  (void) fread_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fread_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fread_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fread_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fread_unlocked" >&6; }
+if test $ac_cv_have_decl_fread_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREAD_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREAD_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether fwrite_unlocked is declared" >&5
+echo $ECHO_N "checking whether fwrite_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fwrite_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 fwrite_unlocked
+  (void) fwrite_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fwrite_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_fwrite_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fwrite_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fwrite_unlocked" >&6; }
+if test $ac_cv_have_decl_fwrite_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FWRITE_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FWRITE_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether getchar_unlocked is declared" >&5
+echo $ECHO_N "checking whether getchar_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getchar_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 getchar_unlocked
+  (void) getchar_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getchar_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_getchar_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getchar_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getchar_unlocked" >&6; }
+if test $ac_cv_have_decl_getchar_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETCHAR_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETCHAR_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 getc_unlocked
+  (void) getc_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getc_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_getc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
+if test $ac_cv_have_decl_getc_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether putchar_unlocked is declared" >&5
+echo $ECHO_N "checking whether putchar_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_putchar_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 putchar_unlocked
+  (void) putchar_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_putchar_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_putchar_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_putchar_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_putchar_unlocked" >&6; }
+if test $ac_cv_have_decl_putchar_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTCHAR_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTCHAR_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether putc_unlocked is declared" >&5
+echo $ECHO_N "checking whether putc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_putc_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 putc_unlocked
+  (void) putc_unlocked;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_putc_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_putc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_putc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_putc_unlocked" >&6; }
+if test $ac_cv_have_decl_putc_unlocked = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTC_UNLOCKED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PUTC_UNLOCKED 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
+echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_vasprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 vasprintf
+  (void) vasprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_vasprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_vasprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6; }
+if test $ac_cv_have_decl_vasprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 0
+_ACEOF
+
+
+fi
+
+
+
+# Checks for library functions.
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+                         if (p) return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_working_alloca_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_working_alloca_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+                                   if (p) return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_alloca_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_alloca_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+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
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+  return find_stack_direction () < 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_stack_direction=1
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+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
+rm -f conftest*
+
+fi
+
+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>
+
+_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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+  { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_langinfo_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_langinfo_codeset=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+  fi
+
+# If we haven't got the data from the intl directory,
+# assume NLS is disabled.
+USE_NLS=no
+LIBINTL=
+LIBINTL_DEP=
+INCINTL=
+XGETTEXT=
+GMSGFMT=
+POSUB=
+
+if test -f  ../intl/config.intl; then
+  .  ../intl/config.intl
+fi
+{ echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+if test x"$USE_NLS" != xyes; then
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+
+  { echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6; }
+  # Look for .po and .gmo files in the source directory.
+  CATALOGS=
+  XLINGUAS=
+  for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do
+    # If there aren't any .gmo files the shell will give us the
+    # literal string "../path/to/srcdir/po/*.gmo" which has to be
+    # weeded out.
+    case "$cat" in *\**)
+      continue;;
+    esac
+    # The quadruple backslash is collapsed to a double backslash
+    # by the backticks, then collapsed again by the double quotes,
+    # leaving us with one backslash in the sed expression (right
+    # before the dot that mustn't act as a wildcard).
+    cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"`
+    lang=`echo $cat | sed -e "s!\\\\.gmo!!"`
+    # The user is allowed to set LINGUAS to a list of languages to
+    # install catalogs for.  If it's empty that means "all of them."
+    if test "x$LINGUAS" = x; then
+      CATALOGS="$CATALOGS $cat"
+      XLINGUAS="$XLINGUAS $lang"
+    else
+      case "$LINGUAS" in *$lang*)
+        CATALOGS="$CATALOGS $cat"
+        XLINGUAS="$XLINGUAS $lang"
+        ;;
+      esac
+    fi
+  done
+  LINGUAS="$XLINGUAS"
+  { echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6; }
+
+
+    DATADIRNAME=share
+
+  INSTOBJEXT=.mo
+
+  GENCAT=gencat
+
+  CATOBJEXT=.gmo
+
+fi
+
+{ echo "$as_me:$LINENO: checking for uchar" >&5
+echo $ECHO_N "checking for uchar... $ECHO_C" >&6; }
+if test "${gcc_cv_type_uchar+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <sys/types.h>
+
+int
+main ()
+{
+if ((uchar *)0) return 0;
+ if (sizeof(uchar)) return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_uchar=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_uchar=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gcc_cv_type_uchar" >&5
+echo "${ECHO_T}$gcc_cv_type_uchar" >&6; }
+if test $ac_cv_type_uchar = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UCHAR 1
+_ACEOF
+
+fi
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# 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
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+       test "$with_gnu_ld" != no && break
+      else
+       test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
+    if test "${am_cv_proto_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  am_cv_proto_iconv_arg1=""
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_proto_iconv_arg1="const"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { echo "$as_me:$LINENO: result: ${ac_t:-
+         }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+         }$am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
+
+
+# More defines and substitutions.
+PACKAGE="$PACKAGE_TARNAME"
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
+if test "x$enable_nls" != xno; then
+  USED_CATALOGS='$(CATALOGS)'
+else
+  USED_CATALOGS=
+fi
+
+
+# Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode;
+else
+  enable_maintainer_mode=no
+fi
+
+
+if test "x$enable_maintainer_mode" = xno; then
+  MAINT='#'
+else
+  MAINT=
+fi
+
+
+# Check whether --enable-checking was given.
+if test "${enable_checking+set}" = set; then
+  enableval=$enable_checking;
+else
+  enable_checking=no
+fi
+
+
+if test $enable_checking != no ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_CHECKING 1
+_ACEOF
+
+fi
+
+
+case $target in
+       alpha*-*-* | \
+       arm*-*-*eabi* | \
+       arm*-*-symbianelf* | \
+       x86_64-*-* | \
+       ia64-*-* | \
+       hppa*64*-*-* | parisc*64*-*-* | \
+       i[34567]86-*-darwin* | \
+       i[34567]86-*-solaris2.1[0-9]* | \
+       mips*-*-* | \
+       mmix-*-* | \
+       powerpc*-*-* | \
+       rs6000*-*-* | \
+       s390*-*-* | \
+       sparc64*-*-* | ultrasparc-*-freebsd* | \
+       sparcv9-*-solaris2* | \
+       sparc-*-solaris2.[789] | sparc-*-solaris2.1[0-9]* | \
+       spu-*-* | \
+       sh[123456789l]*-*-*)
+               need_64bit_hwint=yes ;;
+       i[34567]86-*-linux*)
+               if test "x$enable_targets" = xall; then
+                       need_64bit_hwint=yes
+               else
+                       need_64bit_hwint=no
+               fi
+               ;;
+       *)
+               need_64bit_hwint=no ;;
+esac
+
+case $need_64bit_hwint:$ac_cv_sizeof_long in
+       *:8 | no:*) host_wide_int=long ;;
+       *) host_wide_int='long long' ;;
+esac
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HOST_WIDE_INT long long
+_ACEOF
+
+
+# Output.
+
+ac_config_headers="$ac_config_headers config.h:config.in"
+
+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
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_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, 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     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 "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+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_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`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
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+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
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# 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.
+ac_log="
+This file was extended by cpplib $as_me  , which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, 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
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+cpplib config.status
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+_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.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { 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 ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { 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_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+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
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# 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 ||
+{
+  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 "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# 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
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+RANLIB!$RANLIB$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+WARN_CFLAGS!$WARN_CFLAGS$ac_delim
+WARN_PEDANTIC!$WARN_PEDANTIC$ac_delim
+WERROR!$WERROR$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+ALLOCA!$ALLOCA$ac_delim
+USE_NLS!$USE_NLS$ac_delim
+LIBINTL!$LIBINTL$ac_delim
+LIBINTL_DEP!$LIBINTL_DEP$ac_delim
+INCINTL!$INCINTL$ac_delim
+XGETTEXT!$XGETTEXT$ac_delim
+GMSGFMT!$GMSGFMT$ac_delim
+POSUB!$POSUB$ac_delim
+CATALOGS!$CATALOGS$ac_delim
+DATADIRNAME!$DATADIRNAME$ac_delim
+INSTOBJEXT!$INSTOBJEXT$ac_delim
+GENCAT!$GENCAT$ac_delim
+CATOBJEXT!$CATOBJEXT$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+USED_CATALOGS!$USED_CATALOGS$ac_delim
+MAINT!$MAINT$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 93; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+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
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_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
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+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
+
+  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 ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      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 "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    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'`
+  { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# 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=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  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
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;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
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+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"; } &&
+  { 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
+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;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
+ac_dB='\\)[     (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+       t rset
+       :rset
+       s/^[     ]*#[    ]*define[       ][      ]*//
+       t ok
+       d
+       :ok
+       s/[\\&,]/\\&/g
+       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then 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.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[    #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
+/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    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;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
+    "config.h":H) echo timestamp > stamp-h1 ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/libcpp/configure.ac b/libcpp/configure.ac
new file mode 100644 (file)
index 0000000..3c2071c
--- /dev/null
@@ -0,0 +1,161 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+AC_INIT(cpplib, [ ], nescc-bugs@lists.sourceforge.net, cpplib)
+AC_CONFIG_SRCDIR(ucnid.h)
+AC_CONFIG_AUX_DIR(../config-aux)
+AC_CONFIG_MACRO_DIR(../config-aux)
+AC_CANONICAL_SYSTEM
+
+# Checks for programs.
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_PROG_CC
+AC_PROG_RANLIB
+
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
+AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
+AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
+
+# Figure out what compiler warnings we can enable.
+# See config/warnings.m4 for details.
+
+ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \
+                         -Wmissing-prototypes -Wold-style-definition \
+                         -Wmissing-format-attribute])
+ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long])
+
+# Only enable with --enable-werror-always until existing warnings are
+# corrected.
+ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
+
+# Dependency checking.
+ZW_CREATE_DEPDIR
+ZW_PROG_COMPILER_DEPENDENCIES([CC])
+
+# Checks for header files.
+AC_HEADER_TIME
+ACX_HEADER_STRING
+AC_CHECK_HEADERS(iconv.h locale.h fcntl.h limits.h stddef.h \
+       stdlib.h strings.h string.h sys/file.h unistd.h)
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_FUNC_OBSTACK
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE(ssize_t, int)
+AC_STRUCT_TM
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(long)
+define(libcpp_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
+  ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl
+  fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl
+  fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
+  putchar_unlocked putc_unlocked)
+AC_CHECK_FUNCS(libcpp_UNLOCKED_FUNCS)
+AC_CHECK_DECLS(m4_split(m4_normalize(abort asprintf basename errno getopt \
+  libcpp_UNLOCKED_FUNCS vasprintf)))
+
+# Checks for library functions.
+AC_FUNC_ALLOCA
+AC_HEADER_STDC
+AM_LANGINFO_CODESET
+ZW_GNU_GETTEXT_SISTER_DIR
+
+AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar,
+[AC_TRY_COMPILE([
+#include <sys/types.h>
+],
+[if ((uchar *)0) return 0;
+ if (sizeof(uchar)) return 0;],
+ac_cv_type_uchar=yes, ac_cv_type_uchar=no)])
+if test $ac_cv_type_uchar = yes; then
+  AC_DEFINE(HAVE_UCHAR, 1,
+  [Define if <sys/types.h> defines \`uchar'.])
+fi
+
+AM_ICONV
+
+# More defines and substitutions.
+PACKAGE="$PACKAGE_TARNAME"
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define to the name of this package.])
+AC_SUBST(PACKAGE)
+
+if test "x$enable_nls" != xno; then
+  USED_CATALOGS='$(CATALOGS)'
+else
+  USED_CATALOGS=
+fi
+AC_SUBST(USED_CATALOGS)
+
+AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode enable rules only needed by maintainers],,
+enable_maintainer_mode=no)
+
+if test "x$enable_maintainer_mode" = xno; then
+  MAINT='#'
+else
+  MAINT=
+fi
+AC_SUBST(MAINT)
+
+AC_ARG_ENABLE(checking,
+[  --enable-checking      enable expensive run-time checks],,
+enable_checking=no)
+
+if test $enable_checking != no ; then
+  AC_DEFINE(ENABLE_CHECKING, 1,
+[Define if you want more run-time sanity checks.])
+fi
+
+m4_changequote(,)
+case $target in
+       alpha*-*-* | \
+       arm*-*-*eabi* | \
+       arm*-*-symbianelf* | \
+       x86_64-*-* | \
+       ia64-*-* | \
+       hppa*64*-*-* | parisc*64*-*-* | \
+       i[34567]86-*-darwin* | \
+       i[34567]86-*-solaris2.1[0-9]* | \
+       mips*-*-* | \
+       mmix-*-* | \
+       powerpc*-*-* | \
+       rs6000*-*-* | \
+       s390*-*-* | \
+       sparc64*-*-* | ultrasparc-*-freebsd* | \
+       sparcv9-*-solaris2* | \
+       sparc-*-solaris2.[789] | sparc-*-solaris2.1[0-9]* | \
+       spu-*-* | \
+       sh[123456789l]*-*-*)
+               need_64bit_hwint=yes ;;
+       i[34567]86-*-linux*)
+               if test "x$enable_targets" = xall; then
+                       need_64bit_hwint=yes
+               else
+                       need_64bit_hwint=no
+               fi
+               ;;
+       *)
+               need_64bit_hwint=no ;;
+esac
+
+case $need_64bit_hwint:$ac_cv_sizeof_long in
+       *:8 | no:*) host_wide_int=long ;;
+       *) host_wide_int='long long' ;;
+esac
+m4_changequote([,])
+
+AC_DEFINE_UNQUOTED(HOST_WIDE_INT, long long,
+[Define to the widest efficient host integer type at least
+   as wide as the target's size_t type.])
+
+# Output.
+
+AC_CONFIG_HEADERS(config.h:config.in, [echo timestamp > stamp-h1])
+AC_CONFIG_FILES(Makefile)
+AC_OUTPUT
diff --git a/libcpp/directives-only.c b/libcpp/directives-only.c
new file mode 100644 (file)
index 0000000..d50cebb
--- /dev/null
@@ -0,0 +1,240 @@
+/* CPP Library - directive only preprocessing for distributed compilation.
+   Copyright (C) 2007
+   Free Software Foundation, Inc.
+   Contributed by Ollie Wild <aaw@google.com>.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+/* DO (Directive only) flags. */
+#define DO_BOL          (1 << 0) /* At the beginning of a logical line. */
+#define DO_STRING       (1 << 1) /* In a string constant. */
+#define DO_CHAR                 (1 << 2) /* In a character constant. */
+#define DO_BLOCK_COMMENT (1 << 3) /* In a block comment. */
+#define DO_LINE_COMMENT         (1 << 4) /* In a single line "//-style" comment. */
+
+#define DO_LINE_SPECIAL (DO_STRING | DO_CHAR | DO_LINE_COMMENT)
+#define DO_SPECIAL     (DO_LINE_SPECIAL | DO_BLOCK_COMMENT)
+
+/* Writes out the preprocessed file, handling spacing and paste
+   avoidance issues.  */
+void
+_cpp_preprocess_dir_only (cpp_reader *pfile,
+                         const struct _cpp_dir_only_callbacks *cb)
+{
+  struct cpp_buffer *buffer;
+  const unsigned char *cur, *base, *next_line, *rlimit;
+  cppchar_t c, last_c;
+  unsigned flags;
+  int lines, col;
+  source_location loc;
+
+ restart:
+  /* Buffer initialization ala _cpp_clean_line(). */
+  buffer = pfile->buffer;
+  buffer->cur_note = buffer->notes_used = 0;
+  buffer->cur = buffer->line_base = buffer->next_line;
+  buffer->need_line = false;
+
+  /* This isn't really needed.  It prevents a compiler warning, though. */
+  loc = pfile->line_table->highest_line;
+
+  /* Scan initialization. */
+  next_line = cur = base = buffer->cur;
+  rlimit = buffer->rlimit;
+  flags = DO_BOL;
+  lines = 0;
+  col = 1;
+
+  for (last_c = '\n', c = *cur; cur < rlimit; last_c = c, c = *++cur, ++col)
+    {
+      /* Skip over escaped newlines. */
+      if (__builtin_expect (c == '\\', false))
+       {
+         const unsigned char *tmp = cur + 1;
+
+         while (is_nvspace (*tmp) && tmp < rlimit)
+           tmp++;
+         if (*tmp == '\r')
+           tmp++;
+         if (*tmp == '\n' && tmp < rlimit)
+           {
+             CPP_INCREMENT_LINE (pfile, 0);
+             lines++;
+             col = 0;
+             cur = tmp;
+             c = last_c;
+             continue;
+           }
+       }
+
+      if (__builtin_expect (last_c == '#', false) && !(flags & DO_SPECIAL))
+       {
+         if (c != '#' && (flags & DO_BOL))
+         {
+           struct line_maps *line_table;
+
+           if (!pfile->state.skipping && next_line != base)
+             cb->print_lines (lines, base, next_line - base);
+
+           /* Prep things for directive handling. */
+           buffer->next_line = cur;
+           buffer->need_line = true;
+           _cpp_get_fresh_line (pfile);
+
+           /* Ensure proper column numbering for generated error messages. */
+           buffer->line_base -= col - 1;
+
+           _cpp_handle_directive (pfile, 0 /* ignore indented */);
+
+           /* Sanitize the line settings.  Duplicate #include's can mess
+              things up. */
+           line_table = pfile->line_table;
+           line_table->highest_location = line_table->highest_line;
+
+           /* The if block prevents us from outputing line information when
+              the file ends with a directive and no newline.  Note that we
+              must use pfile->buffer, not buffer. */
+           if (pfile->buffer->next_line < pfile->buffer->rlimit)
+             cb->maybe_print_line (pfile->line_table->highest_line);
+
+           goto restart;
+         }
+
+         flags &= ~DO_BOL;
+         pfile->mi_valid = false;
+       }
+      else if (__builtin_expect (last_c == '/', false) \
+              && !(flags & DO_SPECIAL) && c != '*' && c != '/')
+       {
+         /* If a previous slash is not starting a block comment, clear the
+            DO_BOL flag.  */
+         flags &= ~DO_BOL;
+         pfile->mi_valid = false;
+       }
+
+      switch (c)
+       {
+       case '/':
+         if ((flags & DO_BLOCK_COMMENT) && last_c == '*')
+           {
+             flags &= ~DO_BLOCK_COMMENT;
+             c = 0;
+           }
+         else if (!(flags & DO_SPECIAL) && last_c == '/')
+           flags |= DO_LINE_COMMENT;
+         else if (!(flags & DO_SPECIAL))
+           /* Mark the position for possible error reporting. */
+           LINEMAP_POSITION_FOR_COLUMN (loc, pfile->line_table, col);
+
+         break;
+
+       case '*':
+         if (!(flags & DO_SPECIAL))
+           {
+             if (last_c == '/')
+               flags |= DO_BLOCK_COMMENT;
+             else
+               {
+                 flags &= ~DO_BOL;
+                 pfile->mi_valid = false;
+               }
+           }
+
+         break;
+
+       case '\'':
+       case '"':
+         {
+           unsigned state = (c == '"') ? DO_STRING : DO_CHAR;
+
+           if (!(flags & DO_SPECIAL))
+             {
+               flags |= state;
+               flags &= ~DO_BOL;
+               pfile->mi_valid = false;
+             }
+           else if ((flags & state) && last_c != '\\')
+             flags &= ~state;
+
+           break;
+         }
+
+       case '\\':
+         {
+           if ((flags & (DO_STRING | DO_CHAR)) && last_c == '\\')
+             c = 0;
+
+           if (!(flags & DO_SPECIAL))
+             {
+               flags &= ~DO_BOL;
+               pfile->mi_valid = false;
+             }
+
+           break;
+         }
+
+       case '\n':
+         CPP_INCREMENT_LINE (pfile, 0);
+         lines++;
+         col = 0;
+         flags &= ~DO_LINE_SPECIAL;
+         if (!(flags & DO_SPECIAL))
+           flags |= DO_BOL;
+         break;
+
+       case '#':
+         next_line = cur;
+         /* Don't update DO_BOL yet. */
+         break;
+
+       case ' ': case '\t': case '\f': case '\v': case '\0':
+         break;
+
+       default:
+         if (!(flags & DO_SPECIAL))
+           {
+             flags &= ~DO_BOL;
+             pfile->mi_valid = false;
+           }
+         break;
+       }
+    }
+
+  if (flags & DO_BLOCK_COMMENT)
+    cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0, "unterminated comment");
+
+  if (!pfile->state.skipping && cur != base)
+    {
+      /* If the file was not newline terminated, add rlimit, which is
+         guaranteed to point to a newline, to the end of our range.  */
+      if (cur[-1] != '\n')
+       {
+         cur++;
+         CPP_INCREMENT_LINE (pfile, 0);
+         lines++;
+       }
+
+      cb->print_lines (lines, base, cur - base);
+    }
+
+  _cpp_pop_buffer (pfile);
+  if (pfile->buffer)
+    goto restart;
+}
diff --git a/libcpp/directives.c b/libcpp/directives.c
new file mode 100644 (file)
index 0000000..6e2e55c
--- /dev/null
@@ -0,0 +1,2311 @@
+/* CPP Library. (Directive handling.)
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005,
+   2007, 2008 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+#include "mkdeps.h"
+#include "obstack.h"
+
+/* Stack of conditionals currently in progress
+   (including both successful and failing conditionals).  */
+struct if_stack
+{
+  struct if_stack *next;
+  unsigned int line;           /* Line where condition started.  */
+  const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
+  bool skip_elses;             /* Can future #else / #elif be skipped?  */
+  bool was_skipping;           /* If were skipping on entry.  */
+  int type;                    /* Most recent conditional for diagnostics.  */
+};
+
+/* Contains a registered pragma or pragma namespace.  */
+typedef void (*pragma_cb) (cpp_reader *);
+struct pragma_entry
+{
+  struct pragma_entry *next;
+  const cpp_hashnode *pragma;  /* Name and length.  */
+  bool is_nspace;
+  bool is_internal;
+  bool is_deferred;
+  bool allow_expansion;
+  union {
+    pragma_cb handler;
+    struct pragma_entry *space;
+    unsigned int ident;
+  } u;
+};
+
+/* Values for the origin field of struct directive.  KANDR directives
+   come from traditional (K&R) C.  STDC89 directives come from the
+   1989 C standard.  EXTENSION directives are extensions.  */
+#define KANDR          0
+#define STDC89         1
+#define EXTENSION      2
+
+/* Values for the flags field of struct directive.  COND indicates a
+   conditional; IF_COND an opening conditional.  INCL means to treat
+   "..." and <...> as q-char and h-char sequences respectively.  IN_I
+   means this directive should be handled even if -fpreprocessed is in
+   effect (these are the directives with callback hooks).
+
+   EXPAND is set on directives that are always macro-expanded.  */
+#define COND           (1 << 0)
+#define IF_COND                (1 << 1)
+#define INCL           (1 << 2)
+#define IN_I           (1 << 3)
+#define EXPAND         (1 << 4)
+
+/* Defines one #-directive, including how to handle it.  */
+typedef void (*directive_handler) (cpp_reader *);
+typedef struct directive directive;
+struct directive
+{
+  directive_handler handler;   /* Function to handle directive.  */
+  const uchar *name;           /* Name of directive.  */
+  unsigned short length;       /* Length of name.  */
+  unsigned char origin;                /* Origin of directive.  */
+  unsigned char flags;         /* Flags describing this directive.  */
+};
+
+/* Forward declarations.  */
+
+static void skip_rest_of_line (cpp_reader *);
+static void check_eol (cpp_reader *);
+static void start_directive (cpp_reader *);
+static void prepare_directive_trad (cpp_reader *);
+static void end_directive (cpp_reader *, int);
+static void directive_diagnostics (cpp_reader *, const directive *, int);
+static void run_directive (cpp_reader *, int, const char *, size_t);
+static char *glue_header_name (cpp_reader *);
+static const char *parse_include (cpp_reader *, int *, const cpp_token ***);
+static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
+static unsigned int read_flag (cpp_reader *, unsigned int);
+static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
+static void do_diagnostic (cpp_reader *, int, int);
+static cpp_hashnode *lex_macro_node (cpp_reader *, bool);
+static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
+static void do_include_common (cpp_reader *, enum include_type);
+static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
+                                                 const cpp_hashnode *);
+static int count_registered_pragmas (struct pragma_entry *);
+static char ** save_registered_pragmas (struct pragma_entry *, char **);
+static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
+                                           char **);
+static void do_pragma_once (cpp_reader *);
+static void do_pragma_poison (cpp_reader *);
+static void do_pragma_system_header (cpp_reader *);
+static void do_pragma_dependency (cpp_reader *);
+static void do_linemarker (cpp_reader *);
+static const cpp_token *get_token_no_padding (cpp_reader *);
+static const cpp_token *get__Pragma_string (cpp_reader *);
+static void destringize_and_run (cpp_reader *, const cpp_string *);
+static int parse_answer (cpp_reader *, struct answer **, int);
+static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
+static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
+static void handle_assertion (cpp_reader *, const char *, int);
+
+/* This is the table of directive handlers.  It is ordered by
+   frequency of occurrence; the numbers at the end are directive
+   counts from all the source code I have lying around (egcs and libc
+   CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
+   pcmcia-cs-3.0.9).  This is no longer important as directive lookup
+   is now O(1).  All extensions other than #warning and #include_next
+   are deprecated.  The name is where the extension appears to have
+   come from.  */
+
+#define DIRECTIVE_TABLE                                                        \
+D(define,      T_DEFINE = 0,   KANDR,     IN_I)           /* 270554 */ \
+D(include,     T_INCLUDE,      KANDR,     INCL | EXPAND)  /*  52262 */ \
+D(endif,       T_ENDIF,        KANDR,     COND)           /*  45855 */ \
+D(ifdef,       T_IFDEF,        KANDR,     COND | IF_COND) /*  22000 */ \
+D(if,          T_IF,           KANDR, COND | IF_COND | EXPAND) /*  18162 */ \
+D(else,                T_ELSE,         KANDR,     COND)           /*   9863 */ \
+D(ifndef,      T_IFNDEF,       KANDR,     COND | IF_COND) /*   9675 */ \
+D(undef,       T_UNDEF,        KANDR,     IN_I)           /*   4837 */ \
+D(line,                T_LINE,         KANDR,     EXPAND)         /*   2465 */ \
+D(elif,                T_ELIF,         STDC89,    COND | EXPAND)  /*    610 */ \
+D(error,       T_ERROR,        STDC89,    0)              /*    475 */ \
+D(pragma,      T_PRAGMA,       STDC89,    IN_I)           /*    195 */ \
+D(warning,     T_WARNING,      EXTENSION, 0)              /*     22 */ \
+D(include_next,        T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND)  /*     19 */ \
+D(ident,       T_IDENT,        EXTENSION, IN_I)           /*     11 */ \
+D(import,      T_IMPORT,       EXTENSION, INCL | EXPAND)  /* 0 ObjC */ \
+D(assert,      T_ASSERT,       EXTENSION, 0)              /* 0 SVR4 */ \
+D(unassert,    T_UNASSERT,     EXTENSION, 0)              /* 0 SVR4 */ \
+D(sccs,                T_SCCS,         EXTENSION, IN_I)           /* 0 SVR4? */
+
+/* #sccs is synonymous with #ident.  */
+#define do_sccs do_ident
+
+/* Use the table to generate a series of prototypes, an enum for the
+   directive names, and an array of directive handlers.  */
+
+#define D(name, t, o, f) static void do_##name (cpp_reader *);
+DIRECTIVE_TABLE
+#undef D
+
+#define D(n, tag, o, f) tag,
+enum
+{
+  DIRECTIVE_TABLE
+  N_DIRECTIVES
+};
+#undef D
+
+#define D(name, t, origin, flags) \
+{ do_##name, (const uchar *) #name, \
+  sizeof #name - 1, origin, flags },
+static const directive dtable[] =
+{
+DIRECTIVE_TABLE
+};
+#undef D
+#undef DIRECTIVE_TABLE
+
+/* Wrapper struct directive for linemarkers.
+   The origin is more or less true - the original K+R cpp
+   did use this notation in its preprocessed output.  */
+static const directive linemarker_dir =
+{
+  do_linemarker, U"#", 1, KANDR, IN_I
+};
+
+#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
+
+/* Skip any remaining tokens in a directive.  */
+static void
+skip_rest_of_line (cpp_reader *pfile)
+{
+  /* Discard all stacked contexts.  */
+  while (pfile->context->prev)
+    _cpp_pop_context (pfile);
+
+  /* Sweep up all tokens remaining on the line.  */
+  if (! SEEN_EOL ())
+    while (_cpp_lex_token (pfile)->type != CPP_EOF)
+      ;
+}
+
+/* Ensure there are no stray tokens at the end of a directive.  */
+static void
+check_eol (cpp_reader *pfile)
+{
+  if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
+    cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
+              pfile->directive->name);
+}
+
+/* Ensure there are no stray tokens other than comments at the end of
+   a directive, and gather the comments.  */
+static const cpp_token **
+check_eol_return_comments (cpp_reader *pfile)
+{
+  size_t c;
+  size_t capacity = 8;
+  const cpp_token **buf;
+
+  buf = XNEWVEC (const cpp_token *, capacity);
+  c = 0;
+  if (! SEEN_EOL ())
+    {
+      while (1)
+       {
+         const cpp_token *tok;
+
+         tok = _cpp_lex_token (pfile);
+         if (tok->type == CPP_EOF)
+           break;
+         if (tok->type != CPP_COMMENT)
+           cpp_error (pfile, CPP_DL_PEDWARN,
+                      "extra tokens at end of #%s directive",
+                      pfile->directive->name);
+         else
+           {
+             if (c + 1 >= capacity)
+               {
+                 capacity *= 2;
+                 buf = XRESIZEVEC (const cpp_token *, buf, capacity);
+               }
+             buf[c] = tok;
+             ++c;
+           }
+       }
+    }
+  buf[c] = NULL;
+  return buf;
+}
+
+/* Called when entering a directive, _Pragma or command-line directive.  */
+static void
+start_directive (cpp_reader *pfile)
+{
+  /* Setup in-directive state.  */
+  pfile->state.in_directive = 1;
+  pfile->state.save_comments = 0;
+  pfile->directive_result.type = CPP_PADDING;
+
+  /* Some handlers need the position of the # for diagnostics.  */
+  pfile->directive_line = pfile->line_table->highest_line;
+}
+
+/* Called when leaving a directive, _Pragma or command-line directive.  */
+static void
+end_directive (cpp_reader *pfile, int skip_line)
+{
+  if (pfile->state.in_deferred_pragma)
+    ;
+  else if (CPP_OPTION (pfile, traditional))
+    {
+      /* Revert change of prepare_directive_trad.  */
+      pfile->state.prevent_expansion--;
+
+      if (pfile->directive != &dtable[T_DEFINE])
+       _cpp_remove_overlay (pfile);
+    }
+  /* We don't skip for an assembler #.  */
+  else if (skip_line)
+    {
+      skip_rest_of_line (pfile);
+      if (!pfile->keep_tokens)
+       {
+         pfile->cur_run = &pfile->base_run;
+         pfile->cur_token = pfile->base_run.base;
+       }
+    }
+
+  /* Restore state.  */
+  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
+  pfile->state.in_directive = 0;
+  pfile->state.in_expression = 0;
+  pfile->state.angled_headers = 0;
+  pfile->directive = 0;
+}
+
+/* Prepare to handle the directive in pfile->directive.  */
+static void
+prepare_directive_trad (cpp_reader *pfile)
+{
+  if (pfile->directive != &dtable[T_DEFINE])
+    {
+      bool no_expand = (pfile->directive
+                       && ! (pfile->directive->flags & EXPAND));
+      bool was_skipping = pfile->state.skipping;
+
+      pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
+                                   || pfile->directive == &dtable[T_ELIF]);
+      if (pfile->state.in_expression)
+       pfile->state.skipping = false;
+
+      if (no_expand)
+       pfile->state.prevent_expansion++;
+      _cpp_scan_out_logical_line (pfile, NULL);
+      if (no_expand)
+       pfile->state.prevent_expansion--;
+
+      pfile->state.skipping = was_skipping;
+      _cpp_overlay_buffer (pfile, pfile->out.base,
+                          pfile->out.cur - pfile->out.base);
+    }
+
+  /* Stop ISO C from expanding anything.  */
+  pfile->state.prevent_expansion++;
+}
+
+/* Output diagnostics for a directive DIR.  INDENTED is nonzero if
+   the '#' was indented.  */
+static void
+directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
+{
+  /* Issue -pedantic warnings for extensions.  */
+  if (CPP_PEDANTIC (pfile)
+      && ! pfile->state.skipping
+      && dir->origin == EXTENSION)
+    cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
+
+  /* Traditionally, a directive is ignored unless its # is in
+     column 1.  Therefore in code intended to work with K+R
+     compilers, directives added by C89 must have their #
+     indented, and directives present in traditional C must not.
+     This is true even of directives in skipped conditional
+     blocks.  #elif cannot be used at all.  */
+  if (CPP_WTRADITIONAL (pfile))
+    {
+      if (dir == &dtable[T_ELIF])
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "suggest not using #elif in traditional C");
+      else if (indented && dir->origin == KANDR)
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "traditional C ignores #%s with the # indented",
+                  dir->name);
+      else if (!indented && dir->origin != KANDR)
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "suggest hiding #%s from traditional C with an indented #",
+                  dir->name);
+    }
+}
+
+/* Check if we have a known directive.  INDENTED is nonzero if the
+   '#' of the directive was indented.  This function is in this file
+   to save unnecessarily exporting dtable etc. to lex.c.  Returns
+   nonzero if the line of tokens has been handled, zero if we should
+   continue processing the line.  */
+int
+_cpp_handle_directive (cpp_reader *pfile, int indented)
+{
+  const directive *dir = 0;
+  const cpp_token *dname;
+  bool was_parsing_args = pfile->state.parsing_args;
+  bool was_discarding_output = pfile->state.discarding_output;
+  int skip = 1;
+
+  if (was_discarding_output)
+    pfile->state.prevent_expansion = 0;
+
+  if (was_parsing_args)
+    {
+      if (CPP_OPTION (pfile, pedantic))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+            "embedding a directive within macro arguments is not portable");
+      pfile->state.parsing_args = 0;
+      pfile->state.prevent_expansion = 0;
+    }
+  start_directive (pfile);
+  dname = _cpp_lex_token (pfile);
+
+  if (dname->type == CPP_NAME)
+    {
+      if (dname->val.node->is_directive)
+       dir = &dtable[dname->val.node->directive_index];
+    }
+  /* We do not recognize the # followed by a number extension in
+     assembler code.  */
+  else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
+    {
+      dir = &linemarker_dir;
+      if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
+         && ! pfile->state.skipping)
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "style of line directive is a GCC extension");
+    }
+
+  if (dir)
+    {
+      /* If we have a directive that is not an opening conditional,
+        invalidate any control macro.  */
+      if (! (dir->flags & IF_COND))
+       pfile->mi_valid = false;
+
+      /* Kluge alert.  In order to be sure that code like this
+
+        #define HASH #
+        HASH define foo bar
+
+        does not cause '#define foo bar' to get executed when
+        compiled with -save-temps, we recognize directives in
+        -fpreprocessed mode only if the # is in column 1.  macro.c
+        puts a space in front of any '#' at the start of a macro.
+        
+        We exclude the -fdirectives-only case because macro expansion
+        has not been performed yet, and block comments can cause spaces
+        to preceed the directive.  */
+      if (CPP_OPTION (pfile, preprocessed)
+         && !CPP_OPTION (pfile, directives_only)
+         && (indented || !(dir->flags & IN_I)))
+       {
+         skip = 0;
+         dir = 0;
+       }
+      else
+       {
+         /* In failed conditional groups, all non-conditional
+            directives are ignored.  Before doing that, whether
+            skipping or not, we should lex angle-bracketed headers
+            correctly, and maybe output some diagnostics.  */
+         pfile->state.angled_headers = dir->flags & INCL;
+         pfile->state.directive_wants_padding = dir->flags & INCL;
+         if (! CPP_OPTION (pfile, preprocessed))
+           directive_diagnostics (pfile, dir, indented);
+         if (pfile->state.skipping && !(dir->flags & COND))
+           dir = 0;
+       }
+    }
+  else if (dname->type == CPP_EOF)
+    ;  /* CPP_EOF is the "null directive".  */
+  else
+    {
+      /* An unknown directive.  Don't complain about it in assembly
+        source: we don't know where the comments are, and # may
+        introduce assembler pseudo-ops.  Don't complain about invalid
+        directives in skipped conditional groups (6.10 p4).  */
+      if (CPP_OPTION (pfile, lang) == CLK_ASM)
+       skip = 0;
+      else if (!pfile->state.skipping)
+       cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
+                  cpp_token_as_text (pfile, dname));
+    }
+
+  pfile->directive = dir;
+  if (CPP_OPTION (pfile, traditional))
+    prepare_directive_trad (pfile);
+
+  if (dir)
+    pfile->directive->handler (pfile);
+  else if (skip == 0)
+    _cpp_backup_tokens (pfile, 1);
+
+  end_directive (pfile, skip);
+  if (was_parsing_args)
+    {
+      /* Restore state when within macro args.  */
+      pfile->state.parsing_args = 2;
+      pfile->state.prevent_expansion = 1;
+    }
+  if (was_discarding_output)
+    pfile->state.prevent_expansion = 1;
+  return skip;
+}
+
+/* Directive handler wrapper used by the command line option
+   processor.  BUF is \n terminated.  */
+static void
+run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
+{
+  cpp_push_buffer (pfile, (const uchar *) buf, count,
+                  /* from_stage3 */ true);
+  start_directive (pfile);
+
+  /* This is a short-term fix to prevent a leading '#' being
+     interpreted as a directive.  */
+  _cpp_clean_line (pfile);
+
+  pfile->directive = &dtable[dir_no];
+  if (CPP_OPTION (pfile, traditional))
+    prepare_directive_trad (pfile);
+  pfile->directive->handler (pfile);
+  end_directive (pfile, 1);
+  _cpp_pop_buffer (pfile);
+}
+
+/* Checks for validity the macro name in #define, #undef, #ifdef and
+   #ifndef directives.  IS_DEF_OR_UNDEF is true if this call is
+   processing a #define or #undefine directive, and false
+   otherwise.  */
+static cpp_hashnode *
+lex_macro_node (cpp_reader *pfile, bool is_def_or_undef)
+{
+  const cpp_token *token = _cpp_lex_token (pfile);
+
+  /* The token immediately after #define must be an identifier.  That
+     identifier may not be "defined", per C99 6.10.8p4.
+     In C++, it may not be any of the "named operators" either,
+     per C++98 [lex.digraph], [lex.key].
+     Finally, the identifier may not have been poisoned.  (In that case
+     the lexer has issued the error message for us.)  */
+
+  if (token->type == CPP_NAME)
+    {
+      cpp_hashnode *node = token->val.node;
+
+      if (is_def_or_undef && node == pfile->spec_nodes.n_defined)
+       cpp_error (pfile, CPP_DL_ERROR,
+                  "\"defined\" cannot be used as a macro name");
+      else if (! (node->flags & NODE_POISONED))
+       return node;
+    }
+  else if (token->flags & NAMED_OP)
+    cpp_error (pfile, CPP_DL_ERROR,
+       "\"%s\" cannot be used as a macro name as it is an operator in C++",
+              NODE_NAME (token->val.node));
+  else if (token->type == CPP_EOF)
+    cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
+              pfile->directive->name);
+  else
+    cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
+
+  return NULL;
+}
+
+/* Process a #define directive.  Most work is done in macro.c.  */
+static void
+do_define (cpp_reader *pfile)
+{
+  cpp_hashnode *node = lex_macro_node (pfile, true);
+
+  if (node)
+    {
+      /* If we have been requested to expand comments into macros,
+        then re-enable saving of comments.  */
+      pfile->state.save_comments =
+       ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
+
+      if (_cpp_create_definition (pfile, node))
+       if (pfile->cb.define)
+         pfile->cb.define (pfile, pfile->directive_line, node);
+    }
+}
+
+/* Handle #undef.  Mark the identifier NT_VOID in the hash table.  */
+static void
+do_undef (cpp_reader *pfile)
+{
+  cpp_hashnode *node = lex_macro_node (pfile, true);
+
+  if (node)
+    {
+      if (pfile->cb.undef)
+       pfile->cb.undef (pfile, pfile->directive_line, node);
+
+      /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
+        identifier is not currently defined as a macro name.  */
+      if (node->type == NT_MACRO)
+       {
+         if (node->flags & NODE_WARN)
+           cpp_error (pfile, CPP_DL_WARNING,
+                      "undefining \"%s\"", NODE_NAME (node));
+
+         if (CPP_OPTION (pfile, warn_unused_macros))
+           _cpp_warn_if_unused_macro (pfile, node, NULL);
+
+         _cpp_free_definition (node);
+       }
+    }
+
+  check_eol (pfile);
+}
+
+/* Undefine a single macro/assertion/whatever.  */
+
+static int
+undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
+                void *data_p ATTRIBUTE_UNUSED)
+{
+  /* Body of _cpp_free_definition inlined here for speed.
+     Macros and assertions no longer have anything to free.  */
+  h->type = NT_VOID;
+  h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED);
+  return 1;
+}
+
+/* Undefine all macros and assertions.  */
+
+void
+cpp_undef_all (cpp_reader *pfile)
+{
+  cpp_forall_identifiers (pfile, undefine_macros, NULL);
+}
+
+
+/* Helper routine used by parse_include.  Reinterpret the current line
+   as an h-char-sequence (< ... >); we are looking at the first token
+   after the <.  Returns a malloced filename.  */
+static char *
+glue_header_name (cpp_reader *pfile)
+{
+  const cpp_token *token;
+  char *buffer;
+  size_t len, total_len = 0, capacity = 1024;
+
+  /* To avoid lexed tokens overwriting our glued name, we can only
+     allocate from the string pool once we've lexed everything.  */
+  buffer = XNEWVEC (char, capacity);
+  for (;;)
+    {
+      token = get_token_no_padding (pfile);
+
+      if (token->type == CPP_GREATER)
+       break;
+      if (token->type == CPP_EOF)
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
+         break;
+       }
+
+      len = cpp_token_len (token) + 2; /* Leading space, terminating \0.  */
+      if (total_len + len > capacity)
+       {
+         capacity = (capacity + len) * 2;
+         buffer = XRESIZEVEC (char, buffer, capacity);
+       }
+
+      if (token->flags & PREV_WHITE)
+       buffer[total_len++] = ' ';
+
+      total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
+                                   true)
+                  - (uchar *) buffer);
+    }
+
+  buffer[total_len] = '\0';
+  return buffer;
+}
+
+/* Returns the file name of #include, #include_next, #import and
+   #pragma dependency.  The string is malloced and the caller should
+   free it.  Returns NULL on error.  */
+static const char *
+parse_include (cpp_reader *pfile, int *pangle_brackets,
+              const cpp_token ***buf)
+{
+  char *fname;
+  const cpp_token *header;
+
+  /* Allow macro expansion.  */
+  header = get_token_no_padding (pfile);
+  if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
+    {
+      fname = XNEWVEC (char, header->val.str.len - 1);
+      memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
+      fname[header->val.str.len - 2] = '\0';
+      *pangle_brackets = header->type == CPP_HEADER_NAME;
+    }
+  else if (header->type == CPP_LESS)
+    {
+      fname = glue_header_name (pfile);
+      *pangle_brackets = 1;
+    }
+  else
+    {
+      const unsigned char *dir;
+
+      if (pfile->directive == &dtable[T_PRAGMA])
+       dir = U"pragma dependency";
+      else
+       dir = pfile->directive->name;
+      cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
+                dir);
+
+      return NULL;
+    }
+
+  if (pfile->directive == &dtable[T_PRAGMA])
+    {
+      /* This pragma allows extra tokens after the file name.  */
+    }
+  else if (buf == NULL || CPP_OPTION (pfile, discard_comments))
+    check_eol (pfile);
+  else
+    {
+      /* If we are not discarding comments, then gather them while
+        doing the eol check.  */
+      *buf = check_eol_return_comments (pfile);
+    }
+
+  return fname;
+}
+
+/* Handle #include, #include_next and #import.  */
+static void
+do_include_common (cpp_reader *pfile, enum include_type type)
+{
+  const char *fname;
+  int angle_brackets;
+  const cpp_token **buf = NULL;
+
+  /* Re-enable saving of comments if requested, so that the include
+     callback can dump comments which follow #include.  */
+  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
+
+  fname = parse_include (pfile, &angle_brackets, &buf);
+  if (!fname)
+    {
+      if (buf)
+       XDELETEVEC (buf);
+      return;
+    }
+
+  if (!*fname)
+  {
+    cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s",
+               pfile->directive->name);
+    XDELETEVEC (fname);
+    if (buf)
+      XDELETEVEC (buf);
+    return;
+  }
+
+  /* Prevent #include recursion.  */
+  if (pfile->line_table->depth >= CPP_STACK_MAX)
+    cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
+  else
+    {
+      /* Get out of macro context, if we are.  */
+      skip_rest_of_line (pfile);
+
+      if (pfile->cb.include)
+       pfile->cb.include (pfile, pfile->directive_line,
+                          pfile->directive->name, fname, angle_brackets,
+                          buf);
+
+      _cpp_stack_include (pfile, fname, angle_brackets, type);
+    }
+
+  XDELETEVEC (fname);
+  if (buf)
+    XDELETEVEC (buf);
+}
+
+static void
+do_include (cpp_reader *pfile)
+{
+  do_include_common (pfile, IT_INCLUDE);
+}
+
+static void
+do_import (cpp_reader *pfile)
+{
+  do_include_common (pfile, IT_IMPORT);
+}
+
+static void
+do_include_next (cpp_reader *pfile)
+{
+  enum include_type type = IT_INCLUDE_NEXT;
+
+  /* If this is the primary source file, warn and use the normal
+     search logic.  */
+  if (cpp_in_primary_file (pfile))
+    {
+      cpp_error (pfile, CPP_DL_WARNING,
+                "#include_next in primary source file");
+      type = IT_INCLUDE;
+    }
+  do_include_common (pfile, type);
+}
+
+/* Subroutine of do_linemarker.  Read possible flags after file name.
+   LAST is the last flag seen; 0 if this is the first flag. Return the
+   flag if it is valid, 0 at the end of the directive. Otherwise
+   complain.  */
+static unsigned int
+read_flag (cpp_reader *pfile, unsigned int last)
+{
+  const cpp_token *token = _cpp_lex_token (pfile);
+
+  if (token->type == CPP_NUMBER && token->val.str.len == 1)
+    {
+      unsigned int flag = token->val.str.text[0] - '0';
+
+      if (flag > last && flag <= 4
+         && (flag != 4 || last == 3)
+         && (flag != 2 || last == 0))
+       return flag;
+    }
+
+  if (token->type != CPP_EOF)
+    cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
+              cpp_token_as_text (pfile, token));
+  return 0;
+}
+
+/* Subroutine of do_line and do_linemarker.  Convert a number in STR,
+   of length LEN, to binary; store it in NUMP, and return 0 if the
+   number was well-formed, 1 if not.  Temporary, hopefully.  */
+static int
+strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
+{
+  unsigned long reg = 0;
+  uchar c;
+  while (len--)
+    {
+      c = *str++;
+      if (!ISDIGIT (c))
+       return 1;
+      reg *= 10;
+      reg += c - '0';
+    }
+  *nump = reg;
+  return 0;
+}
+
+/* Interpret #line command.
+   Note that the filename string (if any) is a true string constant
+   (escapes are interpreted), unlike in #line.  */
+static void
+do_line (cpp_reader *pfile)
+{
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used - 1];
+
+  /* skip_rest_of_line() may cause line table to be realloc()ed so note down
+     sysp right now.  */
+
+  unsigned char map_sysp = map->sysp;
+  const cpp_token *token;
+  const char *new_file = map->to_file;
+  unsigned long new_lineno;
+
+  /* C99 raised the minimum limit on #line numbers.  */
+  unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
+
+  /* #line commands expand macros.  */
+  token = cpp_get_token (pfile);
+  if (token->type != CPP_NUMBER
+      || strtoul_for_line (token->val.str.text, token->val.str.len,
+                          &new_lineno))
+    {
+      if (token->type == CPP_EOF)
+       cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
+      else
+       cpp_error (pfile, CPP_DL_ERROR,
+                  "\"%s\" after #line is not a positive integer",
+                  cpp_token_as_text (pfile, token));
+      return;
+    }
+
+  if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
+    cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
+
+  token = cpp_get_token (pfile);
+  if (token->type == CPP_STRING)
+    {
+      cpp_string s = { 0, 0 };
+      if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
+                                           &s, false))
+       new_file = (const char *)s.text;
+      check_eol (pfile);
+    }
+  else if (token->type != CPP_EOF)
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
+                cpp_token_as_text (pfile, token));
+      return;
+    }
+
+  skip_rest_of_line (pfile);
+  _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
+                      map_sysp);
+}
+
+/* Interpret the # 44 "file" [flags] notation, which has slightly
+   different syntax and semantics from #line:  Flags are allowed,
+   and we never complain about the line number being too big.  */
+static void
+do_linemarker (cpp_reader *pfile)
+{
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used - 1];
+  const cpp_token *token;
+  const char *new_file = map->to_file;
+  unsigned long new_lineno;
+  unsigned int new_sysp = map->sysp;
+  enum lc_reason reason = LC_RENAME;
+  int flag;
+
+  /* Back up so we can get the number again.  Putting this in
+     _cpp_handle_directive risks two calls to _cpp_backup_tokens in
+     some circumstances, which can segfault.  */
+  _cpp_backup_tokens (pfile, 1);
+
+  /* #line commands expand macros.  */
+  token = cpp_get_token (pfile);
+  if (token->type != CPP_NUMBER
+      || strtoul_for_line (token->val.str.text, token->val.str.len,
+                          &new_lineno))
+    {
+      /* Unlike #line, there does not seem to be a way to get an EOF
+        here.  So, it should be safe to always spell the token.  */
+      cpp_error (pfile, CPP_DL_ERROR,
+                "\"%s\" after # is not a positive integer",
+                cpp_token_as_text (pfile, token));
+      return;
+    }
+
+  token = cpp_get_token (pfile);
+  if (token->type == CPP_STRING)
+    {
+      cpp_string s = { 0, 0 };
+      if (cpp_interpret_string_notranslate (pfile, &token->val.str,
+                                           1, &s, false))
+       new_file = (const char *)s.text;
+
+      new_sysp = 0;
+      flag = read_flag (pfile, 0);
+      if (flag == 1)
+       {
+         reason = LC_ENTER;
+         /* Fake an include for cpp_included ().  */
+         _cpp_fake_include (pfile, new_file);
+         flag = read_flag (pfile, flag);
+       }
+      else if (flag == 2)
+       {
+         reason = LC_LEAVE;
+         flag = read_flag (pfile, flag);
+       }
+      if (flag == 3)
+       {
+         new_sysp = 1;
+         flag = read_flag (pfile, flag);
+         if (flag == 4)
+           new_sysp = 2;
+       }
+      pfile->buffer->sysp = new_sysp;
+
+      check_eol (pfile);
+    }
+  else if (token->type != CPP_EOF)
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
+                cpp_token_as_text (pfile, token));
+      return;
+    }
+
+  skip_rest_of_line (pfile);
+  _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
+}
+
+/* Arrange the file_change callback.  pfile->line has changed to
+   FILE_LINE of TO_FILE, for reason REASON.  SYSP is 1 for a system
+   header, 2 for a system header that needs to be extern "C" protected,
+   and zero otherwise.  */
+void
+_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
+                    const char *to_file, unsigned int file_line,
+                    unsigned int sysp)
+{
+  const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
+                                           to_file, file_line);
+  if (map != NULL)
+    linemap_line_start (pfile->line_table, map->to_line, 127);
+
+  if (pfile->cb.file_change)
+    pfile->cb.file_change (pfile, map);
+}
+
+/* Report a warning or error detected by the program we are
+   processing.  Use the directive's tokens in the error message.  */
+static void
+do_diagnostic (cpp_reader *pfile, int code, int print_dir)
+{
+  if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0))
+    {
+      if (print_dir)
+       fprintf (stderr, "#%s ", pfile->directive->name);
+      pfile->state.prevent_expansion++;
+      cpp_output_line (pfile, stderr);
+      pfile->state.prevent_expansion--;
+    }
+}
+
+static void
+do_error (cpp_reader *pfile)
+{
+  do_diagnostic (pfile, CPP_DL_ERROR, 1);
+}
+
+static void
+do_warning (cpp_reader *pfile)
+{
+  /* We want #warning diagnostics to be emitted in system headers too.  */
+  do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
+}
+
+/* Report program identification.  */
+static void
+do_ident (cpp_reader *pfile)
+{
+  const cpp_token *str = cpp_get_token (pfile);
+
+  if (str->type != CPP_STRING)
+    cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
+              pfile->directive->name);
+  else if (pfile->cb.ident)
+    pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
+
+  check_eol (pfile);
+}
+
+/* Lookup a PRAGMA name in a singly-linked CHAIN.  Returns the
+   matching entry, or NULL if none is found.  The returned entry could
+   be the start of a namespace chain, or a pragma.  */
+static struct pragma_entry *
+lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
+{
+  while (chain && chain->pragma != pragma)
+    chain = chain->next;
+
+  return chain;
+}
+
+/* Create and insert a blank pragma entry at the beginning of a
+   singly-linked CHAIN.  */
+static struct pragma_entry *
+new_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain)
+{
+  struct pragma_entry *new_entry;
+
+  new_entry = (struct pragma_entry *)
+    _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
+
+  memset (new_entry, 0, sizeof (struct pragma_entry));
+  new_entry->next = *chain;
+
+  *chain = new_entry;
+  return new_entry;
+}
+
+/* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
+   goes in the global namespace.  */
+static struct pragma_entry *
+register_pragma_1 (cpp_reader *pfile, const char *space, const char *name,
+                  bool allow_name_expansion)
+{
+  struct pragma_entry **chain = &pfile->pragmas;
+  struct pragma_entry *entry;
+  const cpp_hashnode *node;
+
+  if (space)
+    {
+      node = cpp_lookup (pfile, U space, strlen (space));
+      entry = lookup_pragma_entry (*chain, node);
+      if (!entry)
+       {
+         entry = new_pragma_entry (pfile, chain);
+         entry->pragma = node;
+         entry->is_nspace = true;
+         entry->allow_expansion = allow_name_expansion;
+       }
+      else if (!entry->is_nspace)
+       goto clash;
+      else if (entry->allow_expansion != allow_name_expansion)
+       {
+         cpp_error (pfile, CPP_DL_ICE,
+                    "registering pragmas in namespace \"%s\" with mismatched "
+                    "name expansion", space);
+         return NULL;
+       }
+      chain = &entry->u.space;
+    }
+  else if (allow_name_expansion)
+    {
+      cpp_error (pfile, CPP_DL_ICE,
+                "registering pragma \"%s\" with name expansion "
+                "and no namespace", name);
+      return NULL;
+    }
+
+  /* Check for duplicates.  */
+  node = cpp_lookup (pfile, U name, strlen (name));
+  entry = lookup_pragma_entry (*chain, node);
+  if (entry == NULL)
+    {
+      entry = new_pragma_entry (pfile, chain);
+      entry->pragma = node;
+      return entry;
+    }
+
+  if (entry->is_nspace)
+    clash:
+    cpp_error (pfile, CPP_DL_ICE,
+              "registering \"%s\" as both a pragma and a pragma namespace",
+              NODE_NAME (node));
+  else if (space)
+    cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
+              space, name);
+  else
+    cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
+
+  return NULL;
+}
+
+/* Register a cpplib internal pragma SPACE NAME with HANDLER.  */
+static void
+register_pragma_internal (cpp_reader *pfile, const char *space,
+                         const char *name, pragma_cb handler)
+{
+  struct pragma_entry *entry;
+
+  entry = register_pragma_1 (pfile, space, name, false);
+  entry->is_internal = true;
+  entry->u.handler = handler;
+}
+
+/* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
+   goes in the global namespace.  HANDLER is the handler it will call,
+   which must be non-NULL.  If ALLOW_EXPANSION is set, allow macro
+   expansion while parsing pragma NAME.  This function is exported
+   from libcpp. */
+void
+cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
+                    pragma_cb handler, bool allow_expansion)
+{
+  struct pragma_entry *entry;
+
+  if (!handler)
+    {
+      cpp_error (pfile, CPP_DL_ICE, "registering pragma with NULL handler");
+      return;
+    }
+
+  entry = register_pragma_1 (pfile, space, name, false);
+  if (entry)
+    {
+      entry->allow_expansion = allow_expansion;
+      entry->u.handler = handler;
+    }
+}
+
+/* Similarly, but create mark the pragma for deferred processing.
+   When found, a CPP_PRAGMA token will be insertted into the stream
+   with IDENT in the token->u.pragma slot.  */
+void
+cpp_register_deferred_pragma (cpp_reader *pfile, const char *space,
+                             const char *name, unsigned int ident,
+                             bool allow_expansion, bool allow_name_expansion)
+{
+  struct pragma_entry *entry;
+
+  entry = register_pragma_1 (pfile, space, name, allow_name_expansion);
+  if (entry)
+    {
+      entry->is_deferred = true;
+      entry->allow_expansion = allow_expansion;
+      entry->u.ident = ident;
+    }
+}  
+
+/* Register the pragmas the preprocessor itself handles.  */
+void
+_cpp_init_internal_pragmas (cpp_reader *pfile)
+{
+  /* Pragmas in the global namespace.  */
+  register_pragma_internal (pfile, 0, "once", do_pragma_once);
+
+  /* New GCC-specific pragmas should be put in the GCC namespace.  */
+  register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison);
+  register_pragma_internal (pfile, "GCC", "system_header",
+                           do_pragma_system_header);
+  register_pragma_internal (pfile, "GCC", "dependency", do_pragma_dependency);
+}
+
+/* Return the number of registered pragmas in PE.  */
+
+static int
+count_registered_pragmas (struct pragma_entry *pe)
+{
+  int ct = 0;
+  for (; pe != NULL; pe = pe->next)
+    {
+      if (pe->is_nspace)
+       ct += count_registered_pragmas (pe->u.space);
+      ct++;
+    }
+  return ct;
+}
+
+/* Save into SD the names of the registered pragmas referenced by PE,
+   and return a pointer to the next free space in SD.  */
+
+static char **
+save_registered_pragmas (struct pragma_entry *pe, char **sd)
+{
+  for (; pe != NULL; pe = pe->next)
+    {
+      if (pe->is_nspace)
+       sd = save_registered_pragmas (pe->u.space, sd);
+      *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
+                                HT_LEN (&pe->pragma->ident),
+                                HT_LEN (&pe->pragma->ident) + 1);
+    }
+  return sd;
+}
+
+/* Return a newly-allocated array which saves the names of the
+   registered pragmas.  */
+
+char **
+_cpp_save_pragma_names (cpp_reader *pfile)
+{
+  int ct = count_registered_pragmas (pfile->pragmas);
+  char **result = XNEWVEC (char *, ct);
+  (void) save_registered_pragmas (pfile->pragmas, result);
+  return result;
+}
+
+/* Restore from SD the names of the registered pragmas referenced by PE,
+   and return a pointer to the next unused name in SD.  */
+
+static char **
+restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
+                           char **sd)
+{
+  for (; pe != NULL; pe = pe->next)
+    {
+      if (pe->is_nspace)
+       sd = restore_registered_pragmas (pfile, pe->u.space, sd);
+      pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd));
+      free (*sd);
+      sd++;
+    }
+  return sd;
+}
+
+/* Restore the names of the registered pragmas from SAVED.  */
+
+void
+_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
+{
+  (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
+  free (saved);
+}
+
+/* Pragmata handling.  We handle some, and pass the rest on to the
+   front end.  C99 defines three pragmas and says that no macro
+   expansion is to be performed on them; whether or not macro
+   expansion happens for other pragmas is implementation defined.
+   This implementation allows for a mix of both, since GCC did not
+   traditionally macro expand its (few) pragmas, whereas OpenMP
+   specifies that macro expansion should happen.  */
+static void
+do_pragma (cpp_reader *pfile)
+{
+  const struct pragma_entry *p = NULL;
+  const cpp_token *token, *pragma_token = pfile->cur_token;
+  cpp_token ns_token;
+  unsigned int count = 1;
+
+  pfile->state.prevent_expansion++;
+
+  token = cpp_get_token (pfile);
+  ns_token = *token;
+  if (token->type == CPP_NAME)
+    {
+      p = lookup_pragma_entry (pfile->pragmas, token->val.node);
+      if (p && p->is_nspace)
+       {
+         bool allow_name_expansion = p->allow_expansion;
+         if (allow_name_expansion)
+           pfile->state.prevent_expansion--;
+         token = cpp_get_token (pfile);
+         if (token->type == CPP_NAME)
+           p = lookup_pragma_entry (p->u.space, token->val.node);
+         else
+           p = NULL;
+         if (allow_name_expansion)
+           pfile->state.prevent_expansion++;
+         count = 2;
+       }
+    }
+
+  if (p)
+    {
+      if (p->is_deferred)
+       {
+         pfile->directive_result.src_loc = pragma_token->src_loc;
+         pfile->directive_result.type = CPP_PRAGMA;
+         pfile->directive_result.flags = pragma_token->flags;
+         pfile->directive_result.val.pragma = p->u.ident;
+         pfile->state.in_deferred_pragma = true;
+         pfile->state.pragma_allow_expansion = p->allow_expansion;
+         if (!p->allow_expansion)
+           pfile->state.prevent_expansion++;
+       }
+      else
+       {
+         /* Since the handler below doesn't get the line number, that
+            it might need for diagnostics, make sure it has the right
+            numbers in place.  */
+         if (pfile->cb.line_change)
+           (*pfile->cb.line_change) (pfile, pragma_token, false);
+         if (p->allow_expansion)
+           pfile->state.prevent_expansion--;
+         (*p->u.handler) (pfile);
+         if (p->allow_expansion)
+           pfile->state.prevent_expansion++;
+       }
+    }
+  else if (pfile->cb.def_pragma)
+    {
+      if (count == 1 || pfile->context->prev == NULL)
+       _cpp_backup_tokens (pfile, count);
+      else
+       {
+         /* Invalid name comes from macro expansion, _cpp_backup_tokens
+            won't allow backing 2 tokens.  */
+         /* ??? The token buffer is leaked.  Perhaps if def_pragma hook
+            reads both tokens, we could perhaps free it, but if it doesn't,
+            we don't know the exact lifespan.  */
+         cpp_token *toks = XNEWVEC (cpp_token, 2);
+         toks[0] = ns_token;
+         toks[0].flags |= NO_EXPAND;
+         toks[1] = *token;
+         toks[1].flags |= NO_EXPAND;
+         _cpp_push_token_context (pfile, NULL, toks, 2);
+       }
+      pfile->cb.def_pragma (pfile, pfile->directive_line);
+    }
+
+  pfile->state.prevent_expansion--;
+}
+
+/* Handle #pragma once.  */
+static void
+do_pragma_once (cpp_reader *pfile)
+{
+  if (cpp_in_primary_file (pfile))
+    cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
+
+  check_eol (pfile);
+  _cpp_mark_file_once_only (pfile, pfile->buffer->file);
+}
+
+/* Handle #pragma GCC poison, to poison one or more identifiers so
+   that the lexer produces a hard error for each subsequent usage.  */
+static void
+do_pragma_poison (cpp_reader *pfile)
+{
+  const cpp_token *tok;
+  cpp_hashnode *hp;
+
+  pfile->state.poisoned_ok = 1;
+  for (;;)
+    {
+      tok = _cpp_lex_token (pfile);
+      if (tok->type == CPP_EOF)
+       break;
+      if (tok->type != CPP_NAME)
+       {
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "invalid #pragma GCC poison directive");
+         break;
+       }
+
+      hp = tok->val.node;
+      if (hp->flags & NODE_POISONED)
+       continue;
+
+      if (hp->type == NT_MACRO)
+       cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
+                  NODE_NAME (hp));
+      _cpp_free_definition (hp);
+      hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
+    }
+  pfile->state.poisoned_ok = 0;
+}
+
+/* Mark the current header as a system header.  This will suppress
+   some categories of warnings (notably those from -pedantic).  It is
+   intended for use in system libraries that cannot be implemented in
+   conforming C, but cannot be certain that their headers appear in a
+   system include directory.  To prevent abuse, it is rejected in the
+   primary source file.  */
+static void
+do_pragma_system_header (cpp_reader *pfile)
+{
+  if (cpp_in_primary_file (pfile))
+    cpp_error (pfile, CPP_DL_WARNING,
+              "#pragma system_header ignored outside include file");
+  else
+    {
+      check_eol (pfile);
+      skip_rest_of_line (pfile);
+      cpp_make_system_header (pfile, 1, 0);
+    }
+}
+
+/* Check the modified date of the current include file against a specified
+   file. Issue a diagnostic, if the specified file is newer. We use this to
+   determine if a fixed header should be refixed.  */
+static void
+do_pragma_dependency (cpp_reader *pfile)
+{
+  const char *fname;
+  int angle_brackets, ordering;
+
+  fname = parse_include (pfile, &angle_brackets, NULL);
+  if (!fname)
+    return;
+
+  ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
+  if (ordering < 0)
+    cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
+  else if (ordering > 0)
+    {
+      cpp_error (pfile, CPP_DL_WARNING,
+                "current file is older than %s", fname);
+      if (cpp_get_token (pfile)->type != CPP_EOF)
+       {
+         _cpp_backup_tokens (pfile, 1);
+         do_diagnostic (pfile, CPP_DL_WARNING, 0);
+       }
+    }
+
+  free ((void *) fname);
+}
+
+/* Get a token but skip padding.  */
+static const cpp_token *
+get_token_no_padding (cpp_reader *pfile)
+{
+  for (;;)
+    {
+      const cpp_token *result = cpp_get_token (pfile);
+      if (result->type != CPP_PADDING)
+       return result;
+    }
+}
+
+/* Check syntax is "(string-literal)".  Returns the string on success,
+   or NULL on failure.  */
+static const cpp_token *
+get__Pragma_string (cpp_reader *pfile)
+{
+  const cpp_token *string;
+  const cpp_token *paren;
+
+  paren = get_token_no_padding (pfile);
+  if (paren->type == CPP_EOF)
+    _cpp_backup_tokens (pfile, 1);
+  if (paren->type != CPP_OPEN_PAREN)
+    return NULL;
+
+  string = get_token_no_padding (pfile);
+  if (string->type == CPP_EOF)
+    _cpp_backup_tokens (pfile, 1);
+  if (string->type != CPP_STRING && string->type != CPP_WSTRING)
+    return NULL;
+
+  paren = get_token_no_padding (pfile);
+  if (paren->type == CPP_EOF)
+    _cpp_backup_tokens (pfile, 1);
+  if (paren->type != CPP_CLOSE_PAREN)
+    return NULL;
+
+  return string;
+}
+
+/* Destringize IN into a temporary buffer, by removing the first \ of
+   \" and \\ sequences, and process the result as a #pragma directive.  */
+static void
+destringize_and_run (cpp_reader *pfile, const cpp_string *in)
+{
+  const unsigned char *src, *limit;
+  char *dest, *result;
+  cpp_context *saved_context;
+  cpp_token *saved_cur_token;
+  tokenrun *saved_cur_run;
+  cpp_token *toks;
+  int count;
+
+  dest = result = (char *) alloca (in->len - 1);
+  src = in->text + 1 + (in->text[0] == 'L');
+  limit = in->text + in->len - 1;
+  while (src < limit)
+    {
+      /* We know there is a character following the backslash.  */
+      if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
+       src++;
+      *dest++ = *src++;
+    }
+  *dest = '\n';
+
+  /* Ugh; an awful kludge.  We are really not set up to be lexing
+     tokens when in the middle of a macro expansion.  Use a new
+     context to force cpp_get_token to lex, and so skip_rest_of_line
+     doesn't go beyond the end of the text.  Also, remember the
+     current lexing position so we can return to it later.
+
+     Something like line-at-a-time lexing should remove the need for
+     this.  */
+  saved_context = pfile->context;
+  saved_cur_token = pfile->cur_token;
+  saved_cur_run = pfile->cur_run;
+
+  pfile->context = XNEW (cpp_context);
+  pfile->context->macro = 0;
+  pfile->context->prev = 0;
+  pfile->context->next = 0;
+
+  /* Inline run_directive, since we need to delay the _cpp_pop_buffer
+     until we've read all of the tokens that we want.  */
+  cpp_push_buffer (pfile, (const uchar *) result, dest - result,
+                  /* from_stage3 */ true);
+  /* ??? Antique Disgusting Hack.  What does this do?  */
+  if (pfile->buffer->prev)
+    pfile->buffer->file = pfile->buffer->prev->file;
+
+  start_directive (pfile);
+  _cpp_clean_line (pfile);
+  do_pragma (pfile);
+  end_directive (pfile, 1);
+
+  /* We always insert at least one token, the directive result.  It'll
+     either be a CPP_PADDING or a CPP_PRAGMA.  In the later case, we 
+     need to insert *all* of the tokens, including the CPP_PRAGMA_EOL.  */
+
+  /* If we're not handling the pragma internally, read all of the tokens from
+     the string buffer now, while the string buffer is still installed.  */
+  /* ??? Note that the token buffer allocated here is leaked.  It's not clear
+     to me what the true lifespan of the tokens are.  It would appear that
+     the lifespan is the entire parse of the main input stream, in which case
+     this may not be wrong.  */
+  if (pfile->directive_result.type == CPP_PRAGMA)
+    {
+      int maxcount;
+
+      count = 1;
+      maxcount = 50;
+      toks = XNEWVEC (cpp_token, maxcount);
+      toks[0] = pfile->directive_result;
+
+      do
+       {
+         if (count == maxcount)
+           {
+             maxcount = maxcount * 3 / 2;
+             toks = XRESIZEVEC (cpp_token, toks, maxcount);
+           }
+         toks[count] = *cpp_get_token (pfile);
+         /* Macros have been already expanded by cpp_get_token
+            if the pragma allowed expansion.  */
+         toks[count++].flags |= NO_EXPAND;
+       }
+      while (toks[count-1].type != CPP_PRAGMA_EOL);
+    }
+  else
+    {
+      count = 1;
+      toks = XNEW (cpp_token);
+      toks[0] = pfile->directive_result;
+
+      /* If we handled the entire pragma internally, make sure we get the
+        line number correct for the next token.  */
+      if (pfile->cb.line_change)
+       pfile->cb.line_change (pfile, pfile->cur_token, false);
+    }
+
+  /* Finish inlining run_directive.  */
+  pfile->buffer->file = NULL;
+  _cpp_pop_buffer (pfile);
+
+  /* Reset the old macro state before ...  */
+  XDELETE (pfile->context);
+  pfile->context = saved_context;
+  pfile->cur_token = saved_cur_token;
+  pfile->cur_run = saved_cur_run;
+
+  /* ... inserting the new tokens we collected.  */
+  _cpp_push_token_context (pfile, NULL, toks, count);
+}
+
+/* Handle the _Pragma operator.  Return 0 on error, 1 if ok.  */
+int
+_cpp_do__Pragma (cpp_reader *pfile)
+{
+  const cpp_token *string = get__Pragma_string (pfile);
+  pfile->directive_result.type = CPP_PADDING;
+
+  if (string)
+    {
+      destringize_and_run (pfile, &string->val.str);
+      return 1;
+    }
+  cpp_error (pfile, CPP_DL_ERROR,
+            "_Pragma takes a parenthesized string literal");
+  return 0;
+}
+
+/* Handle #ifdef.  */
+static void
+do_ifdef (cpp_reader *pfile)
+{
+  int skip = 1;
+
+  if (! pfile->state.skipping)
+    {
+      const cpp_hashnode *node = lex_macro_node (pfile, false);
+
+      if (node)
+       {
+         skip = node->type != NT_MACRO;
+         _cpp_mark_macro_used (node);
+         check_eol (pfile);
+       }
+    }
+
+  push_conditional (pfile, skip, T_IFDEF, 0);
+}
+
+/* Handle #ifndef.  */
+static void
+do_ifndef (cpp_reader *pfile)
+{
+  int skip = 1;
+  const cpp_hashnode *node = 0;
+
+  if (! pfile->state.skipping)
+    {
+      node = lex_macro_node (pfile, false);
+
+      if (node)
+       {
+         skip = node->type == NT_MACRO;
+         _cpp_mark_macro_used (node);
+         check_eol (pfile);
+       }
+    }
+
+  push_conditional (pfile, skip, T_IFNDEF, node);
+}
+
+/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
+   pfile->mi_ind_cmacro so we can handle multiple-include
+   optimizations.  If macro expansion occurs in the expression, we
+   cannot treat it as a controlling conditional, since the expansion
+   could change in the future.  That is handled by cpp_get_token.  */
+static void
+do_if (cpp_reader *pfile)
+{
+  int skip = 1;
+
+  if (! pfile->state.skipping)
+    skip = _cpp_parse_expr (pfile) == false;
+
+  push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
+}
+
+/* Flip skipping state if appropriate and continue without changing
+   if_stack; this is so that the error message for missing #endif's
+   etc. will point to the original #if.  */
+static void
+do_else (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  struct if_stack *ifs = buffer->if_stack;
+
+  if (ifs == NULL)
+    cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
+  else
+    {
+      if (ifs->type == T_ELSE)
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
+         cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
+                              "the conditional began here");
+       }
+      ifs->type = T_ELSE;
+
+      /* Skip any future (erroneous) #elses or #elifs.  */
+      pfile->state.skipping = ifs->skip_elses;
+      ifs->skip_elses = true;
+
+      /* Invalidate any controlling macro.  */
+      ifs->mi_cmacro = 0;
+
+      /* Only check EOL if was not originally skipping.  */
+      if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
+       check_eol (pfile);
+    }
+}
+
+/* Handle a #elif directive by not changing if_stack either.  See the
+   comment above do_else.  */
+static void
+do_elif (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  struct if_stack *ifs = buffer->if_stack;
+
+  if (ifs == NULL)
+    cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
+  else
+    {
+      if (ifs->type == T_ELSE)
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
+         cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
+                              "the conditional began here");
+       }
+      ifs->type = T_ELIF;
+
+      /* Only evaluate this if we aren't skipping elses.  During
+        evaluation, set skipping to false to get lexer warnings.  */
+      if (ifs->skip_elses)
+       pfile->state.skipping = 1;
+      else
+       {
+         pfile->state.skipping = 0;
+         pfile->state.skipping = ! _cpp_parse_expr (pfile);
+         ifs->skip_elses = ! pfile->state.skipping;
+       }
+
+      /* Invalidate any controlling macro.  */
+      ifs->mi_cmacro = 0;
+    }
+}
+
+/* #endif pops the if stack and resets pfile->state.skipping.  */
+static void
+do_endif (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  struct if_stack *ifs = buffer->if_stack;
+
+  if (ifs == NULL)
+    cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
+  else
+    {
+      /* Only check EOL if was not originally skipping.  */
+      if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
+       check_eol (pfile);
+
+      /* If potential control macro, we go back outside again.  */
+      if (ifs->next == 0 && ifs->mi_cmacro)
+       {
+         pfile->mi_valid = true;
+         pfile->mi_cmacro = ifs->mi_cmacro;
+       }
+
+      buffer->if_stack = ifs->next;
+      pfile->state.skipping = ifs->was_skipping;
+      obstack_free (&pfile->buffer_ob, ifs);
+    }
+}
+
+/* Push an if_stack entry for a preprocessor conditional, and set
+   pfile->state.skipping to SKIP.  If TYPE indicates the conditional
+   is #if or #ifndef, CMACRO is a potentially controlling macro, and
+   we need to check here that we are at the top of the file.  */
+static void
+push_conditional (cpp_reader *pfile, int skip, int type,
+                 const cpp_hashnode *cmacro)
+{
+  struct if_stack *ifs;
+  cpp_buffer *buffer = pfile->buffer;
+
+  ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
+  ifs->line = pfile->directive_line;
+  ifs->next = buffer->if_stack;
+  ifs->skip_elses = pfile->state.skipping || !skip;
+  ifs->was_skipping = pfile->state.skipping;
+  ifs->type = type;
+  /* This condition is effectively a test for top-of-file.  */
+  if (pfile->mi_valid && pfile->mi_cmacro == 0)
+    ifs->mi_cmacro = cmacro;
+  else
+    ifs->mi_cmacro = 0;
+
+  pfile->state.skipping = skip;
+  buffer->if_stack = ifs;
+}
+
+/* Read the tokens of the answer into the macro pool, in a directive
+   of type TYPE.  Only commit the memory if we intend it as permanent
+   storage, i.e. the #assert case.  Returns 0 on success, and sets
+   ANSWERP to point to the answer.  */
+static int
+parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
+{
+  const cpp_token *paren;
+  struct answer *answer;
+  unsigned int acount;
+
+  /* In a conditional, it is legal to not have an open paren.  We
+     should save the following token in this case.  */
+  paren = cpp_get_token (pfile);
+
+  /* If not a paren, see if we're OK.  */
+  if (paren->type != CPP_OPEN_PAREN)
+    {
+      /* In a conditional no answer is a test for any answer.  It
+         could be followed by any token.  */
+      if (type == T_IF)
+       {
+         _cpp_backup_tokens (pfile, 1);
+         return 0;
+       }
+
+      /* #unassert with no answer is valid - it removes all answers.  */
+      if (type == T_UNASSERT && paren->type == CPP_EOF)
+       return 0;
+
+      cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
+      return 1;
+    }
+
+  for (acount = 0;; acount++)
+    {
+      size_t room_needed;
+      const cpp_token *token = cpp_get_token (pfile);
+      cpp_token *dest;
+
+      if (token->type == CPP_CLOSE_PAREN)
+       break;
+
+      if (token->type == CPP_EOF)
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
+         return 1;
+       }
+
+      /* struct answer includes the space for one token.  */
+      room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
+
+      if (BUFF_ROOM (pfile->a_buff) < room_needed)
+       _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
+
+      dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
+      *dest = *token;
+
+      /* Drop whitespace at start, for answer equivalence purposes.  */
+      if (acount == 0)
+       dest->flags &= ~PREV_WHITE;
+    }
+
+  if (acount == 0)
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
+      return 1;
+    }
+
+  answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
+  answer->count = acount;
+  answer->next = NULL;
+  *answerp = answer;
+
+  return 0;
+}
+
+/* Parses an assertion directive of type TYPE, returning a pointer to
+   the hash node of the predicate, or 0 on error.  If an answer was
+   supplied, it is placed in ANSWERP, otherwise it is set to 0.  */
+static cpp_hashnode *
+parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
+{
+  cpp_hashnode *result = 0;
+  const cpp_token *predicate;
+
+  /* We don't expand predicates or answers.  */
+  pfile->state.prevent_expansion++;
+
+  *answerp = 0;
+  predicate = cpp_get_token (pfile);
+  if (predicate->type == CPP_EOF)
+    cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
+  else if (predicate->type != CPP_NAME)
+    cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
+  else if (parse_answer (pfile, answerp, type) == 0)
+    {
+      unsigned int len = NODE_LEN (predicate->val.node);
+      unsigned char *sym = (unsigned char *) alloca (len + 1);
+
+      /* Prefix '#' to get it out of macro namespace.  */
+      sym[0] = '#';
+      memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
+      result = cpp_lookup (pfile, sym, len + 1);
+    }
+
+  pfile->state.prevent_expansion--;
+  return result;
+}
+
+/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
+   or a pointer to NULL if the answer is not in the chain.  */
+static struct answer **
+find_answer (cpp_hashnode *node, const struct answer *candidate)
+{
+  unsigned int i;
+  struct answer **result;
+
+  for (result = &node->value.answers; *result; result = &(*result)->next)
+    {
+      struct answer *answer = *result;
+
+      if (answer->count == candidate->count)
+       {
+         for (i = 0; i < answer->count; i++)
+           if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
+             break;
+
+         if (i == answer->count)
+           break;
+       }
+    }
+
+  return result;
+}
+
+/* Test an assertion within a preprocessor conditional.  Returns
+   nonzero on failure, zero on success.  On success, the result of
+   the test is written into VALUE, otherwise the value 0.  */
+int
+_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
+{
+  struct answer *answer;
+  cpp_hashnode *node;
+
+  node = parse_assertion (pfile, &answer, T_IF);
+
+  /* For recovery, an erroneous assertion expression is handled as a
+     failing assertion.  */
+  *value = 0;
+
+  if (node)
+    *value = (node->type == NT_ASSERTION &&
+             (answer == 0 || *find_answer (node, answer) != 0));
+  else if (pfile->cur_token[-1].type == CPP_EOF)
+    _cpp_backup_tokens (pfile, 1);
+
+  /* We don't commit the memory for the answer - it's temporary only.  */
+  return node == 0;
+}
+
+/* Handle #assert.  */
+static void
+do_assert (cpp_reader *pfile)
+{
+  struct answer *new_answer;
+  cpp_hashnode *node;
+
+  node = parse_assertion (pfile, &new_answer, T_ASSERT);
+  if (node)
+    {
+      size_t answer_size;
+
+      /* Place the new answer in the answer list.  First check there
+         is not a duplicate.  */
+      new_answer->next = 0;
+      if (node->type == NT_ASSERTION)
+       {
+         if (*find_answer (node, new_answer))
+           {
+             cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
+                        NODE_NAME (node) + 1);
+             return;
+           }
+         new_answer->next = node->value.answers;
+       }
+
+      answer_size = sizeof (struct answer) + ((new_answer->count - 1)
+                                             * sizeof (cpp_token));
+      /* Commit or allocate storage for the object.  */
+      if (pfile->hash_table->alloc_subobject)
+       {
+         struct answer *temp_answer = new_answer;
+         new_answer = (struct answer *) pfile->hash_table->alloc_subobject
+            (answer_size);
+         memcpy (new_answer, temp_answer, answer_size);
+       }
+      else
+       BUFF_FRONT (pfile->a_buff) += answer_size;
+
+      node->type = NT_ASSERTION;
+      node->value.answers = new_answer;
+      check_eol (pfile);
+    }
+}
+
+/* Handle #unassert.  */
+static void
+do_unassert (cpp_reader *pfile)
+{
+  cpp_hashnode *node;
+  struct answer *answer;
+
+  node = parse_assertion (pfile, &answer, T_UNASSERT);
+  /* It isn't an error to #unassert something that isn't asserted.  */
+  if (node && node->type == NT_ASSERTION)
+    {
+      if (answer)
+       {
+         struct answer **p = find_answer (node, answer), *temp;
+
+         /* Remove the answer from the list.  */
+         temp = *p;
+         if (temp)
+           *p = temp->next;
+
+         /* Did we free the last answer?  */
+         if (node->value.answers == 0)
+           node->type = NT_VOID;
+
+         check_eol (pfile);
+       }
+      else
+       _cpp_free_definition (node);
+    }
+
+  /* We don't commit the memory for the answer - it's temporary only.  */
+}
+
+/* These are for -D, -U, -A.  */
+
+/* Process the string STR as if it appeared as the body of a #define.
+   If STR is just an identifier, define it with value 1.
+   If STR has anything after the identifier, then it should
+   be identifier=definition.  */
+void
+cpp_define (cpp_reader *pfile, const char *str)
+{
+  char *buf, *p;
+  size_t count;
+
+  /* Copy the entire option so we can modify it.
+     Change the first "=" in the string to a space.  If there is none,
+     tack " 1" on the end.  */
+
+  count = strlen (str);
+  buf = (char *) alloca (count + 3);
+  memcpy (buf, str, count);
+
+  p = strchr (str, '=');
+  if (p)
+    buf[p - str] = ' ';
+  else
+    {
+      buf[count++] = ' ';
+      buf[count++] = '1';
+    }
+  buf[count] = '\n';
+
+  run_directive (pfile, T_DEFINE, buf, count);
+}
+
+/* Slight variant of the above for use by initialize_builtins.  */
+void
+_cpp_define_builtin (cpp_reader *pfile, const char *str)
+{
+  size_t len = strlen (str);
+  char *buf = (char *) alloca (len + 1);
+  memcpy (buf, str, len);
+  buf[len] = '\n';
+  run_directive (pfile, T_DEFINE, buf, len);
+}
+
+/* Process MACRO as if it appeared as the body of an #undef.  */
+void
+cpp_undef (cpp_reader *pfile, const char *macro)
+{
+  size_t len = strlen (macro);
+  char *buf = (char *) alloca (len + 1);
+  memcpy (buf, macro, len);
+  buf[len] = '\n';
+  run_directive (pfile, T_UNDEF, buf, len);
+}
+
+/* Like lex_macro_node, but read the input from STR.  */
+static cpp_hashnode *
+lex_macro_node_from_str (cpp_reader *pfile, const char *str)
+{
+  size_t len = strlen (str);
+  uchar *buf = (uchar *) alloca (len + 1);
+  cpp_hashnode *node;
+
+  memcpy (buf, str, len);
+  buf[len] = '\n';
+  cpp_push_buffer (pfile, buf, len, true);
+  node = lex_macro_node (pfile, true);
+  _cpp_pop_buffer (pfile);
+
+  return node;
+}
+
+/* If STR is a defined macro, return its definition node, else return NULL.  */
+cpp_macro *
+cpp_push_definition (cpp_reader *pfile, const char *str)
+{
+  cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
+  if (node && node->type == NT_MACRO)
+    return node->value.macro;
+  else
+    return NULL;
+}
+
+/* Replace a previous definition DFN of the macro STR.  If DFN is NULL,
+   then the macro should be undefined.  */
+void
+cpp_pop_definition (cpp_reader *pfile, const char *str, cpp_macro *dfn)
+{
+  cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
+  if (node == NULL)
+    return;
+
+  if (node->type == NT_MACRO)
+    {
+      if (pfile->cb.undef)
+       pfile->cb.undef (pfile, pfile->directive_line, node);
+      if (CPP_OPTION (pfile, warn_unused_macros))
+       _cpp_warn_if_unused_macro (pfile, node, NULL);
+    }
+  if (node->type != NT_VOID)
+    _cpp_free_definition (node);
+
+  if (dfn)
+    {
+      node->type = NT_MACRO;
+      node->value.macro = dfn;
+      if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
+       node->flags |= NODE_WARN;
+
+      if (pfile->cb.define)
+       pfile->cb.define (pfile, pfile->directive_line, node);
+    }
+}
+
+/* Process the string STR as if it appeared as the body of a #assert.  */
+void
+cpp_assert (cpp_reader *pfile, const char *str)
+{
+  handle_assertion (pfile, str, T_ASSERT);
+}
+
+/* Process STR as if it appeared as the body of an #unassert.  */
+void
+cpp_unassert (cpp_reader *pfile, const char *str)
+{
+  handle_assertion (pfile, str, T_UNASSERT);
+}
+
+/* Common code for cpp_assert (-A) and cpp_unassert (-A-).  */
+static void
+handle_assertion (cpp_reader *pfile, const char *str, int type)
+{
+  size_t count = strlen (str);
+  const char *p = strchr (str, '=');
+
+  /* Copy the entire option so we can modify it.  Change the first
+     "=" in the string to a '(', and tack a ')' on the end.  */
+  char *buf = (char *) alloca (count + 2);
+
+  memcpy (buf, str, count);
+  if (p)
+    {
+      buf[p - str] = '(';
+      buf[count++] = ')';
+    }
+  buf[count] = '\n';
+  str = buf;
+
+  run_directive (pfile, type, str, count);
+}
+
+/* The number of errors for a given reader.  */
+unsigned int
+cpp_errors (cpp_reader *pfile)
+{
+  return pfile->errors;
+}
+
+/* The options structure.  */
+cpp_options *
+cpp_get_options (cpp_reader *pfile)
+{
+  return &pfile->opts;
+}
+
+/* The callbacks structure.  */
+cpp_callbacks *
+cpp_get_callbacks (cpp_reader *pfile)
+{
+  return &pfile->cb;
+}
+
+/* Copy the given callbacks structure to our own.  */
+void
+cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
+{
+  pfile->cb = *cb;
+}
+
+/* The dependencies structure.  (Creates one if it hasn't already been.)  */
+struct deps *
+cpp_get_deps (cpp_reader *pfile)
+{
+  if (!pfile->deps)
+    pfile->deps = deps_init ();
+  return pfile->deps;
+}
+
+/* Push a new buffer on the buffer stack.  Returns the new buffer; it
+   doesn't fail.  It does not generate a file change call back; that
+   is the responsibility of the caller.  */
+cpp_buffer *
+cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
+                int from_stage3)
+{
+  cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
+
+  /* Clears, amongst other things, if_stack and mi_cmacro.  */
+  memset (new_buffer, 0, sizeof (cpp_buffer));
+
+  new_buffer->next_line = new_buffer->buf = buffer;
+  new_buffer->rlimit = buffer + len;
+  new_buffer->from_stage3 = from_stage3;
+  new_buffer->prev = pfile->buffer;
+  new_buffer->need_line = true;
+
+  pfile->buffer = new_buffer;
+
+  return new_buffer;
+}
+
+/* Pops a single buffer, with a file change call-back if appropriate.
+   Then pushes the next -include file, if any remain.  */
+void
+_cpp_pop_buffer (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  struct _cpp_file *inc = buffer->file;
+  struct if_stack *ifs;
+
+  /* Walk back up the conditional stack till we reach its level at
+     entry to this file, issuing error messages.  */
+  for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
+    cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
+                        "unterminated #%s", dtable[ifs->type].name);
+
+  /* In case of a missing #endif.  */
+  pfile->state.skipping = 0;
+
+  /* _cpp_do_file_change expects pfile->buffer to be the new one.  */
+  pfile->buffer = buffer->prev;
+
+  free (buffer->notes);
+
+  /* Free the buffer object now; we may want to push a new buffer
+     in _cpp_push_next_include_file.  */
+  obstack_free (&pfile->buffer_ob, buffer);
+
+  if (inc)
+    {
+      _cpp_pop_file_buffer (pfile, inc);
+
+      _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
+    }
+}
+
+/* Enter all recognized directives in the hash table.  */
+void
+_cpp_init_directives (cpp_reader *pfile)
+{
+  unsigned int i;
+  cpp_hashnode *node;
+
+  for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
+    {
+      node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
+      node->is_directive = 1;
+      node->directive_index = i;
+    }
+}
diff --git a/libcpp/errors.c b/libcpp/errors.c
new file mode 100644 (file)
index 0000000..97de490
--- /dev/null
@@ -0,0 +1,189 @@
+/* Default error handlers for CPP Library.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000,
+   2001, 2002, 2004 Free Software Foundation, Inc.
+   Written by Per Bothner, 1994.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+static void print_location (cpp_reader *, source_location, unsigned int);
+
+/* Print the logical file location (LINE, COL) in preparation for a
+   diagnostic.  Outputs the #include chain if it has changed.  A line
+   of zero suppresses the include stack, and outputs the program name
+   instead.  */
+static void
+print_location (cpp_reader *pfile, source_location line, unsigned int col)
+{
+  if (line == 0)
+    fprintf (stderr, "%s: ", progname);
+  else
+    {
+      const struct line_map *map;
+      unsigned int lin;
+
+      map = linemap_lookup (pfile->line_table, line);
+      linemap_print_containing_files (pfile->line_table, map);
+
+      lin = SOURCE_LINE (map, line);
+      if (col == 0)
+       {
+         col = SOURCE_COLUMN (map, line);
+         if (col == 0)
+           col = 1;
+       }
+
+      if (lin == 0)
+       fprintf (stderr, "%s:", map->to_file);
+      else if (CPP_OPTION (pfile, show_column) == 0)
+       fprintf (stderr, "%s:%u:", map->to_file, lin);
+      else
+       fprintf (stderr, "%s:%u:%u:", map->to_file, lin, col);
+
+      fputc (' ', stderr);
+    }
+}
+
+/* Set up for a diagnostic: print the file and line, bump the error
+   counter, etc.  SRC_LOC is the logical line number; zero means to print
+   at the location of the previously lexed token, which tends to be
+   the correct place by default.  The column number can be specified either
+   using COLUMN or (if COLUMN==0) extracting SOURCE_COLUMN from SRC_LOC.
+   (This may seem redundant, but is useful when pre-scanning (cleaning) a line,
+   when we haven't yet verified whether the current line_map has a
+   big enough max_column_hint.)
+
+   Returns 0 if the error has been suppressed.  */
+int
+_cpp_begin_message (cpp_reader *pfile, int code,
+                   source_location src_loc, unsigned int column)
+{
+  int level = CPP_DL_EXTRACT (code);
+
+  switch (level)
+    {
+    case CPP_DL_WARNING:
+    case CPP_DL_PEDWARN:
+      if (cpp_in_system_header (pfile)
+         && ! CPP_OPTION (pfile, warn_system_headers))
+       return 0;
+      /* Fall through.  */
+
+    case CPP_DL_WARNING_SYSHDR:
+      if (CPP_OPTION (pfile, warnings_are_errors)
+         || (level == CPP_DL_PEDWARN && CPP_OPTION (pfile, pedantic_errors)))
+       {
+         if (CPP_OPTION (pfile, inhibit_errors))
+           return 0;
+         level = CPP_DL_ERROR;
+         pfile->errors++;
+       }
+      else if (CPP_OPTION (pfile, inhibit_warnings))
+       return 0;
+      break;
+
+    case CPP_DL_ERROR:
+      if (CPP_OPTION (pfile, inhibit_errors))
+       return 0;
+      /* ICEs cannot be inhibited.  */
+    case CPP_DL_ICE:
+      pfile->errors++;
+      break;
+    }
+
+  print_location (pfile, src_loc, column);
+  if (CPP_DL_WARNING_P (level))
+    fputs (_("warning: "), stderr);
+  else if (level == CPP_DL_ICE)
+    fputs (_("internal error: "), stderr);
+  else
+    fputs (_("error: "), stderr);
+
+  return 1;
+}
+
+/* Don't remove the blank before do, as otherwise the exgettext
+   script will mistake this as a function definition */
+#define v_message(msgid, ap) \
+ do { vfprintf (stderr, _(msgid), ap); putc ('\n', stderr); } while (0)
+
+/* Exported interface.  */
+
+/* Print an error at the location of the previously lexed token.  */
+void
+cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
+{
+  source_location src_loc;
+  va_list ap;
+  
+  va_start (ap, msgid);
+
+  if (CPP_OPTION (pfile, client_diagnostic))
+    pfile->cb.error (pfile, level, _(msgid), &ap);
+  else
+    {
+      if (CPP_OPTION (pfile, traditional))
+       {
+         if (pfile->state.in_directive)
+           src_loc = pfile->directive_line;
+         else
+           src_loc = pfile->line_table->highest_line;
+       }
+      else
+       {
+         src_loc = pfile->cur_token[-1].src_loc;
+       }
+
+      if (_cpp_begin_message (pfile, level, src_loc, 0))
+       v_message (msgid, ap);
+    }
+
+  va_end (ap);
+}
+
+/* Print an error at a specific location.  */
+void
+cpp_error_with_line (cpp_reader *pfile, int level,
+                    source_location src_loc, unsigned int column,
+                    const char *msgid, ...)
+{
+  va_list ap;
+  
+  va_start (ap, msgid);
+
+  if (_cpp_begin_message (pfile, level, src_loc, column))
+    v_message (msgid, ap);
+
+  va_end (ap);
+}
+
+void
+cpp_errno (cpp_reader *pfile, int level, const char *msgid)
+{
+  if (msgid[0] == '\0')
+    msgid = _("stdout");
+
+  cpp_error (pfile, level, "%s: %s", msgid, xstrerror (errno));
+}
diff --git a/libcpp/expr.c b/libcpp/expr.c
new file mode 100644 (file)
index 0000000..9df7533
--- /dev/null
@@ -0,0 +1,1666 @@
+/* Parse C expressions for cpplib.
+   Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
+   2002, 2004 Free Software Foundation.
+   Contributed by Per Bothner, 1994.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+#define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT)
+#define HALF_MASK (~(cpp_num_part) 0 >> (PART_PRECISION / 2))
+#define LOW_PART(num_part) (num_part & HALF_MASK)
+#define HIGH_PART(num_part) (num_part >> (PART_PRECISION / 2))
+
+struct op
+{
+  const cpp_token *token;      /* The token forming op (for diagnostics).  */
+  cpp_num value;               /* The value logically "right" of op.  */
+  enum cpp_ttype op;
+};
+
+/* Some simple utility routines on double integers.  */
+#define num_zerop(num) ((num.low | num.high) == 0)
+#define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high)
+static bool num_positive (cpp_num, size_t);
+static bool num_greater_eq (cpp_num, cpp_num, size_t);
+static cpp_num num_trim (cpp_num, size_t);
+static cpp_num num_part_mul (cpp_num_part, cpp_num_part);
+
+static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype);
+static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_negate (cpp_num, size_t);
+static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
+                                 enum cpp_ttype);
+static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
+                               enum cpp_ttype);
+static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
+static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
+static cpp_num num_lshift (cpp_num, size_t, size_t);
+static cpp_num num_rshift (cpp_num, size_t, size_t);
+
+static cpp_num append_digit (cpp_num, int, int, size_t);
+static cpp_num parse_defined (cpp_reader *);
+static cpp_num eval_token (cpp_reader *, const cpp_token *);
+static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
+static unsigned int interpret_float_suffix (const uchar *, size_t);
+static unsigned int interpret_int_suffix (const uchar *, size_t);
+static void check_promotion (cpp_reader *, const struct op *);
+
+/* Token type abuse to create unary plus and minus operators.  */
+#define CPP_UPLUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 1))
+#define CPP_UMINUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 2))
+
+/* With -O2, gcc appears to produce nice code, moving the error
+   message load and subsequent jump completely out of the main path.  */
+#define SYNTAX_ERROR(msgid) \
+  do { cpp_error (pfile, CPP_DL_ERROR, msgid); goto syntax_error; } while(0)
+#define SYNTAX_ERROR2(msgid, arg) \
+  do { cpp_error (pfile, CPP_DL_ERROR, msgid, arg); goto syntax_error; } \
+  while(0)
+
+/* Subroutine of cpp_classify_number.  S points to a float suffix of
+   length LEN, possibly zero.  Returns 0 for an invalid suffix, or a
+   flag vector describing the suffix.  */
+static unsigned int
+interpret_float_suffix (const uchar *s, size_t len)
+{
+  size_t f, l, w, q, i, d;
+  size_t r, k, u, h;
+
+  f = l = w = q = i = d = 0;
+  r = k = u = h = 0;
+
+  while (len--)
+    switch (s[len])
+      {
+      case 'r': case 'R': r++; break;
+      case 'k': case 'K': k++; break;
+      case 'u': case 'U': u++; break;
+      case 'h': case 'H': h++; break;
+      case 'f': case 'F':
+       if (d > 0)
+         return 0;
+       f++;
+       break;
+      case 'l': case 'L':
+       if (d > 0)
+         return 0;
+       l++;
+       /* If there are two Ls, they must be adjacent and the same case.  */
+       if (l == 2 && s[len] != s[len + 1])
+         return 0;
+       break;
+      case 'w': case 'W':
+       if (d > 0)
+         return 0;
+       w++;
+       break;
+      case 'q': case 'Q':
+       if (d > 0)
+         return 0;
+       q++;
+       break;
+      case 'i': case 'I':
+      case 'j': case 'J': i++; break;
+      case 'd': case 'D': d++; break;
+      default:
+       return 0;
+      }
+
+  if (r + k > 1 || h > 1 || l > 2 || u > 1)
+    return 0;
+
+  if (r == 1)
+    {
+      if (f || i || d || w || q)
+       return 0;
+
+      return (CPP_N_FRACT
+             | (u ? CPP_N_UNSIGNED : 0)
+             | (h ? CPP_N_SMALL :
+                l == 2 ? CPP_N_LARGE :
+                l == 1 ? CPP_N_MEDIUM :  0));
+    }
+
+  if (k == 1)
+    {
+      if (f || i || d || w || q)
+       return 0;
+
+      return (CPP_N_ACCUM
+             | (u ? CPP_N_UNSIGNED : 0)
+             | (h ? CPP_N_SMALL :
+                l == 2 ? CPP_N_LARGE :
+                l == 1 ? CPP_N_MEDIUM :  0));
+    }
+
+  if (f + l + w + q > 1 || i > 1 || h + u > 0)
+    return 0;
+
+  /* Allow dd, df, dl suffixes for decimal float constants.  */
+  if (d && ((d + f + l != 2) || i))
+    return 0;
+
+  return ((i ? CPP_N_IMAGINARY : 0)
+         | (f ? CPP_N_SMALL :
+            l ? CPP_N_LARGE :
+            w ? CPP_N_MD_W :
+            q ? CPP_N_MD_Q : CPP_N_MEDIUM)
+         | (d ? CPP_N_DFLOAT : 0));
+}
+
+/* Subroutine of cpp_classify_number.  S points to an integer suffix
+   of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
+   flag vector describing the suffix.  */
+static unsigned int
+interpret_int_suffix (const uchar *s, size_t len)
+{
+  size_t u, l, i;
+
+  u = l = i = 0;
+
+  while (len--)
+    switch (s[len])
+      {
+      case 'u': case 'U':      u++; break;
+      case 'i': case 'I':
+      case 'j': case 'J':      i++; break;
+      case 'l': case 'L':      l++;
+       /* If there are two Ls, they must be adjacent and the same case.  */
+       if (l == 2 && s[len] != s[len + 1])
+         return 0;
+       break;
+      default:
+       return 0;
+      }
+
+  if (l > 2 || u > 1 || i > 1)
+    return 0;
+
+  return ((i ? CPP_N_IMAGINARY : 0)
+         | (u ? CPP_N_UNSIGNED : 0)
+         | ((l == 0) ? CPP_N_SMALL
+            : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
+}
+
+/* Categorize numeric constants according to their field (integer,
+   floating point, or invalid), radix (decimal, octal, hexadecimal),
+   and type suffixes.  */
+unsigned int
+cpp_classify_number (cpp_reader *pfile, const cpp_token *token)
+{
+  const uchar *str = token->val.str.text;
+  const uchar *limit;
+  unsigned int max_digit, result, radix;
+  enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
+
+  /* If the lexer has done its job, length one can only be a single
+     digit.  Fast-path this very common case.  */
+  if (token->val.str.len == 1)
+    return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
+
+  limit = str + token->val.str.len;
+  float_flag = NOT_FLOAT;
+  max_digit = 0;
+  radix = 10;
+
+  /* First, interpret the radix.  */
+  if (*str == '0')
+    {
+      radix = 8;
+      str++;
+
+      /* Require at least one hex digit to classify it as hex.  */
+      if ((*str == 'x' || *str == 'X')
+         && (str[1] == '.' || ISXDIGIT (str[1])))
+       {
+         radix = 16;
+         str++;
+       }
+      else if ((*str == 'b' || *str == 'B') && (str[1] == '0' || str[1] == '1'))
+       {
+         radix = 2;
+         str++;
+       }
+    }
+
+  /* Now scan for a well-formed integer or float.  */
+  for (;;)
+    {
+      unsigned int c = *str++;
+
+      if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
+       {
+         c = hex_value (c);
+         if (c > max_digit)
+           max_digit = c;
+       }
+      else if (c == '.')
+       {
+         if (float_flag == NOT_FLOAT)
+           float_flag = AFTER_POINT;
+         else
+           SYNTAX_ERROR ("too many decimal points in number");
+       }
+      else if ((radix <= 10 && (c == 'e' || c == 'E'))
+              || (radix == 16 && (c == 'p' || c == 'P')))
+       {
+         float_flag = AFTER_EXPON;
+         break;
+       }
+      else
+       {
+         /* Start of suffix.  */
+         str--;
+         break;
+       }
+    }
+
+  /* The suffix may be for decimal fixed-point constants without exponent.  */
+  if (radix != 16 && float_flag == NOT_FLOAT)
+    {
+      result = interpret_float_suffix (str, limit - str);
+      if ((result & CPP_N_FRACT) || (result & CPP_N_ACCUM))
+       {
+         result |= CPP_N_FLOATING;
+         /* We need to restore the radix to 10, if the radix is 8.  */
+         if (radix == 8)
+           radix = 10;
+
+         if (CPP_PEDANTIC (pfile))
+           cpp_error (pfile, CPP_DL_PEDWARN,
+                      "fixed-point constants are a GCC extension");
+         goto syntax_ok;
+       }
+      else
+       result = 0;
+    }
+
+  if (float_flag != NOT_FLOAT && radix == 8)
+    radix = 10;
+
+  if (max_digit >= radix)
+    {
+      if (radix == 2)
+       SYNTAX_ERROR2 ("invalid digit \"%c\" in binary constant", '0' + max_digit);
+      else
+       SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit);
+    }
+
+  if (float_flag != NOT_FLOAT)
+    {
+      if (radix == 2)
+       {
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "invalid prefix \"0b\" for floating constant");
+         return CPP_N_INVALID;
+       }
+
+      if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "use of C99 hexadecimal floating constant");
+
+      if (float_flag == AFTER_EXPON)
+       {
+         if (*str == '+' || *str == '-')
+           str++;
+
+         /* Exponent is decimal, even if string is a hex float.  */
+         if (!ISDIGIT (*str))
+           SYNTAX_ERROR ("exponent has no digits");
+
+         do
+           str++;
+         while (ISDIGIT (*str));
+       }
+      else if (radix == 16)
+       SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
+
+      result = interpret_float_suffix (str, limit - str);
+      if (result == 0)
+       {
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "invalid suffix \"%.*s\" on floating constant",
+                    (int) (limit - str), str);
+         return CPP_N_INVALID;
+       }
+
+      /* Traditional C didn't accept any floating suffixes.  */
+      if (limit != str
+         && CPP_WTRADITIONAL (pfile)
+         && ! cpp_sys_macro_p (pfile))
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "traditional C rejects the \"%.*s\" suffix",
+                  (int) (limit - str), str);
+
+      /* Radix must be 10 for decimal floats.  */
+      if ((result & CPP_N_DFLOAT) && radix != 10)
+        {
+          cpp_error (pfile, CPP_DL_ERROR,
+                     "invalid suffix \"%.*s\" with hexadecimal floating constant",
+                     (int) (limit - str), str);
+          return CPP_N_INVALID;
+        }
+
+      if ((result & (CPP_N_FRACT | CPP_N_ACCUM)) && CPP_PEDANTIC (pfile))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "fixed-point constants are a GCC extension");
+
+      if ((result & CPP_N_DFLOAT) && CPP_PEDANTIC (pfile))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "decimal float constants are a GCC extension");
+
+      result |= CPP_N_FLOATING;
+    }
+  else
+    {
+      result = interpret_int_suffix (str, limit - str);
+      if (result == 0)
+       {
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "invalid suffix \"%.*s\" on integer constant",
+                    (int) (limit - str), str);
+         return CPP_N_INVALID;
+       }
+
+      /* Traditional C only accepted the 'L' suffix.
+         Suppress warning about 'LL' with -Wno-long-long.  */
+      if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
+       {
+         int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
+         int large = (result & CPP_N_WIDTH) == CPP_N_LARGE;
+
+         if (u_or_i || (large && CPP_OPTION (pfile, warn_long_long)))
+           cpp_error (pfile, CPP_DL_WARNING,
+                      "traditional C rejects the \"%.*s\" suffix",
+                      (int) (limit - str), str);
+       }
+
+      if ((result & CPP_N_WIDTH) == CPP_N_LARGE
+         && ! CPP_OPTION (pfile, c99)
+         && CPP_OPTION (pfile, warn_long_long))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "use of C99 long long integer constant");
+
+      result |= CPP_N_INTEGER;
+    }
+
+ syntax_ok:
+  if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
+    cpp_error (pfile, CPP_DL_PEDWARN,
+              "imaginary constants are a GCC extension");
+  if (radix == 2 && CPP_PEDANTIC (pfile))
+    cpp_error (pfile, CPP_DL_PEDWARN,
+              "binary constants are a GCC extension");
+
+  if (radix == 10)
+    result |= CPP_N_DECIMAL;
+  else if (radix == 16)
+    result |= CPP_N_HEX;
+  else if (radix == 2)
+    result |= CPP_N_BINARY;
+  else
+    result |= CPP_N_OCTAL;
+
+  return result;
+
+ syntax_error:
+  return CPP_N_INVALID;
+}
+
+/* cpp_interpret_integer converts an integer constant into a cpp_num,
+   of precision options->precision.
+
+   We do not provide any interface for decimal->float conversion,
+   because the preprocessor doesn't need it and we don't want to
+   drag in GCC's floating point emulator.  */
+cpp_num
+cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
+                      unsigned int type)
+{
+  const uchar *p, *end;
+  cpp_num result;
+
+  result.low = 0;
+  result.high = 0;
+  result.unsignedp = !!(type & CPP_N_UNSIGNED);
+  result.overflow = false;
+
+  p = token->val.str.text;
+  end = p + token->val.str.len;
+
+  /* Common case of a single digit.  */
+  if (token->val.str.len == 1)
+    result.low = p[0] - '0';
+  else
+    {
+      cpp_num_part max;
+      size_t precision = CPP_OPTION (pfile, precision);
+      unsigned int base = 10, c = 0;
+      bool overflow = false;
+
+      if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
+       {
+         base = 8;
+         p++;
+       }
+      else if ((type & CPP_N_RADIX) == CPP_N_HEX)
+       {
+         base = 16;
+         p += 2;
+       }
+      else if ((type & CPP_N_RADIX) == CPP_N_BINARY)
+       {
+         base = 2;
+         p += 2;
+       }
+
+      /* We can add a digit to numbers strictly less than this without
+        needing the precision and slowness of double integers.  */
+      max = ~(cpp_num_part) 0;
+      if (precision < PART_PRECISION)
+       max >>= PART_PRECISION - precision;
+      max = (max - base + 1) / base + 1;
+
+      for (; p < end; p++)
+       {
+         c = *p;
+
+         if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
+           c = hex_value (c);
+         else
+           break;
+
+         /* Strict inequality for when max is set to zero.  */
+         if (result.low < max)
+           result.low = result.low * base + c;
+         else
+           {
+             result = append_digit (result, c, base, precision);
+             overflow |= result.overflow;
+             max = 0;
+           }
+       }
+
+      if (overflow)
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "integer constant is too large for its type");
+      /* If too big to be signed, consider it unsigned.  Only warn for
+        decimal numbers.  Traditional numbers were always signed (but
+        we still honor an explicit U suffix); but we only have
+        traditional semantics in directives.  */
+      else if (!result.unsignedp
+              && !(CPP_OPTION (pfile, traditional)
+                   && pfile->state.in_directive)
+              && !num_positive (result, precision))
+       {
+         if (base == 10)
+           cpp_error (pfile, CPP_DL_WARNING,
+                      "integer constant is so large that it is unsigned");
+         result.unsignedp = true;
+       }
+    }
+
+  return result;
+}
+
+/* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE.  */
+static cpp_num
+append_digit (cpp_num num, int digit, int base, size_t precision)
+{
+  cpp_num result;
+  unsigned int shift;
+  bool overflow;
+  cpp_num_part add_high, add_low;
+
+  /* Multiply by 2, 8 or 16.  Catching this overflow here means we don't
+     need to worry about add_high overflowing.  */
+  switch (base)
+    {
+    case 2:
+      shift = 1;
+      break;
+
+    case 16:
+      shift = 4;
+      break;
+
+    default:
+      shift = 3;
+    }
+  overflow = !!(num.high >> (PART_PRECISION - shift));
+  result.high = num.high << shift;
+  result.low = num.low << shift;
+  result.high |= num.low >> (PART_PRECISION - shift);
+  result.unsignedp = num.unsignedp;
+
+  if (base == 10)
+    {
+      add_low = num.low << 1;
+      add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
+    }
+  else
+    add_high = add_low = 0;
+
+  if (add_low + digit < add_low)
+    add_high++;
+  add_low += digit;
+
+  if (result.low + add_low < result.low)
+    add_high++;
+  if (result.high + add_high < result.high)
+    overflow = true;
+
+  result.low += add_low;
+  result.high += add_high;
+  result.overflow = overflow;
+
+  /* The above code catches overflow of a cpp_num type.  This catches
+     overflow of the (possibly shorter) target precision.  */
+  num.low = result.low;
+  num.high = result.high;
+  result = num_trim (result, precision);
+  if (!num_eq (result, num))
+    result.overflow = true;
+
+  return result;
+}
+
+/* Handle meeting "defined" in a preprocessor expression.  */
+static cpp_num
+parse_defined (cpp_reader *pfile)
+{
+  cpp_num result;
+  int paren = 0;
+  cpp_hashnode *node = 0;
+  const cpp_token *token;
+  cpp_context *initial_context = pfile->context;
+
+  /* Don't expand macros.  */
+  pfile->state.prevent_expansion++;
+
+  token = cpp_get_token (pfile);
+  if (token->type == CPP_OPEN_PAREN)
+    {
+      paren = 1;
+      token = cpp_get_token (pfile);
+    }
+
+  if (token->type == CPP_NAME)
+    {
+      node = token->val.node;
+      if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
+         node = 0;
+       }
+    }
+  else
+    {
+      cpp_error (pfile, CPP_DL_ERROR,
+                "operator \"defined\" requires an identifier");
+      if (token->flags & NAMED_OP)
+       {
+         cpp_token op;
+
+         op.flags = 0;
+         op.type = token->type;
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "(\"%s\" is an alternative token for \"%s\" in C++)",
+                    cpp_token_as_text (pfile, token),
+                    cpp_token_as_text (pfile, &op));
+       }
+    }
+
+  if (node)
+    {
+      if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "this use of \"defined\" may not be portable");
+
+      _cpp_mark_macro_used (node);
+
+      /* A possible controlling macro of the form #if !defined ().
+        _cpp_parse_expr checks there was no other junk on the line.  */
+      pfile->mi_ind_cmacro = node;
+    }
+
+  pfile->state.prevent_expansion--;
+
+  result.unsignedp = false;
+  result.high = 0;
+  result.overflow = false;
+  result.low = node && node->type == NT_MACRO;
+  return result;
+}
+
+/* Convert a token into a CPP_NUMBER (an interpreted preprocessing
+   number or character constant, or the result of the "defined" or "#"
+   operators).  */
+static cpp_num
+eval_token (cpp_reader *pfile, const cpp_token *token)
+{
+  cpp_num result;
+  unsigned int temp;
+  int unsignedp = 0;
+
+  result.unsignedp = false;
+  result.overflow = false;
+
+  switch (token->type)
+    {
+    case CPP_NUMBER:
+      temp = cpp_classify_number (pfile, token);
+      switch (temp & CPP_N_CATEGORY)
+       {
+       case CPP_N_FLOATING:
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "floating constant in preprocessor expression");
+         break;
+       case CPP_N_INTEGER:
+         if (!(temp & CPP_N_IMAGINARY))
+           return cpp_interpret_integer (pfile, token, temp);
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "imaginary number in preprocessor expression");
+         break;
+
+       case CPP_N_INVALID:
+         /* Error already issued.  */
+         break;
+       }
+      result.high = result.low = 0;
+      break;
+
+    case CPP_WCHAR:
+    case CPP_CHAR:
+      {
+       cppchar_t cc = cpp_interpret_charconst (pfile, token,
+                                               &temp, &unsignedp);
+
+       result.high = 0;
+       result.low = cc;
+       /* Sign-extend the result if necessary.  */
+       if (!unsignedp && (cppchar_signed_t) cc < 0)
+         {
+           if (PART_PRECISION > BITS_PER_CPPCHAR_T)
+             result.low |= ~(~(cpp_num_part) 0
+                             >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
+           result.high = ~(cpp_num_part) 0;
+           result = num_trim (result, CPP_OPTION (pfile, precision));
+         }
+      }
+      break;
+
+    case CPP_NAME:
+      if (token->val.node == pfile->spec_nodes.n_defined)
+       return parse_defined (pfile);
+      else if (CPP_OPTION (pfile, cplusplus)
+              && (token->val.node == pfile->spec_nodes.n_true
+                  || token->val.node == pfile->spec_nodes.n_false))
+       {
+         result.high = 0;
+         result.low = (token->val.node == pfile->spec_nodes.n_true);
+       }
+      else
+       {
+         result.high = 0;
+         result.low = 0;
+         if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
+           cpp_error (pfile, CPP_DL_WARNING, "\"%s\" is not defined",
+                      NODE_NAME (token->val.node));
+       }
+      break;
+
+    default: /* CPP_HASH */
+      _cpp_test_assertion (pfile, &temp);
+      result.high = 0;
+      result.low = temp;
+    }
+
+  result.unsignedp = !!unsignedp;
+  return result;
+}
+\f
+/* Operator precedence and flags table.
+
+After an operator is returned from the lexer, if it has priority less
+than the operator on the top of the stack, we reduce the stack by one
+operator and repeat the test.  Since equal priorities do not reduce,
+this is naturally right-associative.
+
+We handle left-associative operators by decrementing the priority of
+just-lexed operators by one, but retaining the priority of operators
+already on the stack.
+
+The remaining cases are '(' and ')'.  We handle '(' by skipping the
+reduction phase completely.  ')' is given lower priority than
+everything else, including '(', effectively forcing a reduction of the
+parenthesized expression.  If there is a matching '(', the routine
+reduce() exits immediately.  If the normal exit route sees a ')', then
+there cannot have been a matching '(' and an error message is output.
+
+The parser assumes all shifted operators require a left operand unless
+the flag NO_L_OPERAND is set.  These semantics are automatic; any
+extra semantics need to be handled with operator-specific code.  */
+
+/* Flags.  If CHECK_PROMOTION, we warn if the effective sign of an
+   operand changes because of integer promotions.  */
+#define NO_L_OPERAND   (1 << 0)
+#define LEFT_ASSOC     (1 << 1)
+#define CHECK_PROMOTION        (1 << 2)
+
+/* Operator to priority map.  Must be in the same order as the first
+   N entries of enum cpp_ttype.  */
+static const struct cpp_operator
+{
+  uchar prio;
+  uchar flags;
+} optab[] =
+{
+  /* EQ */             {0, 0}, /* Shouldn't happen.  */
+  /* NOT */            {16, NO_L_OPERAND},
+  /* GREATER */                {12, LEFT_ASSOC | CHECK_PROMOTION},
+  /* LESS */           {12, LEFT_ASSOC | CHECK_PROMOTION},
+  /* PLUS */           {14, LEFT_ASSOC | CHECK_PROMOTION},
+  /* MINUS */          {14, LEFT_ASSOC | CHECK_PROMOTION},
+  /* MULT */           {15, LEFT_ASSOC | CHECK_PROMOTION},
+  /* DIV */            {15, LEFT_ASSOC | CHECK_PROMOTION},
+  /* MOD */            {15, LEFT_ASSOC | CHECK_PROMOTION},
+  /* AND */            {9, LEFT_ASSOC | CHECK_PROMOTION},
+  /* OR */             {7, LEFT_ASSOC | CHECK_PROMOTION},
+  /* XOR */            {8, LEFT_ASSOC | CHECK_PROMOTION},
+  /* RSHIFT */         {13, LEFT_ASSOC},
+  /* LSHIFT */         {13, LEFT_ASSOC},
+
+  /* COMPL */          {16, NO_L_OPERAND},
+  /* AND_AND */                {6, LEFT_ASSOC},
+  /* OR_OR */          {5, LEFT_ASSOC},
+  /* QUERY */          {3, 0},
+  /* COLON */          {4, LEFT_ASSOC | CHECK_PROMOTION},
+  /* COMMA */          {2, LEFT_ASSOC},
+  /* OPEN_PAREN */     {1, NO_L_OPERAND},
+  /* CLOSE_PAREN */    {0, 0},
+  /* EOF */            {0, 0},
+  /* EQ_EQ */          {11, LEFT_ASSOC},
+  /* NOT_EQ */         {11, LEFT_ASSOC},
+  /* GREATER_EQ */     {12, LEFT_ASSOC | CHECK_PROMOTION},
+  /* LESS_EQ */                {12, LEFT_ASSOC | CHECK_PROMOTION},
+  /* UPLUS */          {16, NO_L_OPERAND},
+  /* UMINUS */         {16, NO_L_OPERAND}
+};
+
+/* Parse and evaluate a C expression, reading from PFILE.
+   Returns the truth value of the expression.
+
+   The implementation is an operator precedence parser, i.e. a
+   bottom-up parser, using a stack for not-yet-reduced tokens.
+
+   The stack base is op_stack, and the current stack pointer is 'top'.
+   There is a stack element for each operator (only), and the most
+   recently pushed operator is 'top->op'.  An operand (value) is
+   stored in the 'value' field of the stack element of the operator
+   that precedes it.  */
+bool
+_cpp_parse_expr (cpp_reader *pfile)
+{
+  struct op *top = pfile->op_stack;
+  unsigned int lex_count;
+  bool saw_leading_not, want_value = true;
+
+  pfile->state.skip_eval = 0;
+
+  /* Set up detection of #if ! defined().  */
+  pfile->mi_ind_cmacro = 0;
+  saw_leading_not = false;
+  lex_count = 0;
+
+  /* Lowest priority operator prevents further reductions.  */
+  top->op = CPP_EOF;
+
+  for (;;)
+    {
+      struct op op;
+
+      lex_count++;
+      op.token = cpp_get_token (pfile);
+      op.op = op.token->type;
+
+      switch (op.op)
+       {
+         /* These tokens convert into values.  */
+       case CPP_NUMBER:
+       case CPP_CHAR:
+       case CPP_WCHAR:
+       case CPP_NAME:
+       case CPP_HASH:
+         if (!want_value)
+           SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
+                          cpp_token_as_text (pfile, op.token));
+         want_value = false;
+         top->value = eval_token (pfile, op.token);
+         continue;
+
+       case CPP_NOT:
+         saw_leading_not = lex_count == 1;
+         break;
+       case CPP_PLUS:
+         if (want_value)
+           op.op = CPP_UPLUS;
+         break;
+       case CPP_MINUS:
+         if (want_value)
+           op.op = CPP_UMINUS;
+         break;
+
+       default:
+         if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
+           SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
+                          cpp_token_as_text (pfile, op.token));
+         break;
+       }
+
+      /* Check we have a value or operator as appropriate.  */
+      if (optab[op.op].flags & NO_L_OPERAND)
+       {
+         if (!want_value)
+           SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
+                          cpp_token_as_text (pfile, op.token));
+       }
+      else if (want_value)
+       {
+         /* We want a number (or expression) and haven't got one.
+            Try to emit a specific diagnostic.  */
+         if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
+           SYNTAX_ERROR ("missing expression between '(' and ')'");
+
+         if (op.op == CPP_EOF && top->op == CPP_EOF)
+           SYNTAX_ERROR ("#if with no expression");
+
+         if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
+           SYNTAX_ERROR2 ("operator '%s' has no right operand",
+                          cpp_token_as_text (pfile, top->token));
+         else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
+           /* Complain about missing paren during reduction.  */;
+         else
+           SYNTAX_ERROR2 ("operator '%s' has no left operand",
+                          cpp_token_as_text (pfile, op.token));
+       }
+
+      top = reduce (pfile, top, op.op);
+      if (!top)
+       goto syntax_error;
+
+      if (op.op == CPP_EOF)
+       break;
+
+      switch (op.op)
+       {
+       case CPP_CLOSE_PAREN:
+         continue;
+       case CPP_OR_OR:
+         if (!num_zerop (top->value))
+           pfile->state.skip_eval++;
+         break;
+       case CPP_AND_AND:
+       case CPP_QUERY:
+         if (num_zerop (top->value))
+           pfile->state.skip_eval++;
+         break;
+       case CPP_COLON:
+         if (top->op != CPP_QUERY)
+           SYNTAX_ERROR (" ':' without preceding '?'");
+         if (!num_zerop (top[-1].value)) /* Was '?' condition true?  */
+           pfile->state.skip_eval++;
+         else
+           pfile->state.skip_eval--;
+       default:
+         break;
+       }
+
+      want_value = true;
+
+      /* Check for and handle stack overflow.  */
+      if (++top == pfile->op_limit)
+       top = _cpp_expand_op_stack (pfile);
+
+      top->op = op.op;
+      top->token = op.token;
+    }
+
+  /* The controlling macro expression is only valid if we called lex 3
+     times: <!> <defined expression> and <EOF>.  push_conditional ()
+     checks that we are at top-of-file.  */
+  if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
+    pfile->mi_ind_cmacro = 0;
+
+  if (top != pfile->op_stack)
+    {
+      cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in #if");
+    syntax_error:
+      return false;  /* Return false on syntax error.  */
+    }
+
+  return !num_zerop (top->value);
+}
+
+/* Reduce the operator / value stack if possible, in preparation for
+   pushing operator OP.  Returns NULL on error, otherwise the top of
+   the stack.  */
+static struct op *
+reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
+{
+  unsigned int prio;
+
+  if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
+    {
+    bad_op:
+      cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
+      return 0;
+    }
+
+  if (op == CPP_OPEN_PAREN)
+    return top;
+
+  /* Decrement the priority of left-associative operators to force a
+     reduction with operators of otherwise equal priority.  */
+  prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
+  while (prio < optab[top->op].prio)
+    {
+      if (CPP_OPTION (pfile, warn_num_sign_change)
+         && optab[top->op].flags & CHECK_PROMOTION)
+       check_promotion (pfile, top);
+
+      switch (top->op)
+       {
+       case CPP_UPLUS:
+       case CPP_UMINUS:
+       case CPP_NOT:
+       case CPP_COMPL:
+         top[-1].value = num_unary_op (pfile, top->value, top->op);
+         break;
+
+       case CPP_PLUS:
+       case CPP_MINUS:
+       case CPP_RSHIFT:
+       case CPP_LSHIFT:
+       case CPP_COMMA:
+         top[-1].value = num_binary_op (pfile, top[-1].value,
+                                        top->value, top->op);
+         break;
+
+       case CPP_GREATER:
+       case CPP_LESS:
+       case CPP_GREATER_EQ:
+       case CPP_LESS_EQ:
+         top[-1].value
+           = num_inequality_op (pfile, top[-1].value, top->value, top->op);
+         break;
+
+       case CPP_EQ_EQ:
+       case CPP_NOT_EQ:
+         top[-1].value
+           = num_equality_op (pfile, top[-1].value, top->value, top->op);
+         break;
+
+       case CPP_AND:
+       case CPP_OR:
+       case CPP_XOR:
+         top[-1].value
+           = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
+         break;
+
+       case CPP_MULT:
+         top[-1].value = num_mul (pfile, top[-1].value, top->value);
+         break;
+
+       case CPP_DIV:
+       case CPP_MOD:
+         top[-1].value = num_div_op (pfile, top[-1].value,
+                                     top->value, top->op);
+         break;
+
+       case CPP_OR_OR:
+         top--;
+         if (!num_zerop (top->value))
+           pfile->state.skip_eval--;
+         top->value.low = (!num_zerop (top->value)
+                           || !num_zerop (top[1].value));
+         top->value.high = 0;
+         top->value.unsignedp = false;
+         top->value.overflow = false;
+         continue;
+
+       case CPP_AND_AND:
+         top--;
+         if (num_zerop (top->value))
+           pfile->state.skip_eval--;
+         top->value.low = (!num_zerop (top->value)
+                           && !num_zerop (top[1].value));
+         top->value.high = 0;
+         top->value.unsignedp = false;
+         top->value.overflow = false;
+         continue;
+
+       case CPP_OPEN_PAREN:
+         if (op != CPP_CLOSE_PAREN)
+           {
+             cpp_error (pfile, CPP_DL_ERROR, "missing ')' in expression");
+             return 0;
+           }
+         top--;
+         top->value = top[1].value;
+         return top;
+
+       case CPP_COLON:
+         top -= 2;
+         if (!num_zerop (top->value))
+           {
+             pfile->state.skip_eval--;
+             top->value = top[1].value;
+           }
+         else
+           top->value = top[2].value;
+         top->value.unsignedp = (top[1].value.unsignedp
+                                 || top[2].value.unsignedp);
+         continue;
+
+       case CPP_QUERY:
+         cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
+         return 0;
+
+       default:
+         goto bad_op;
+       }
+
+      top--;
+      if (top->value.overflow && !pfile->state.skip_eval)
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "integer overflow in preprocessor expression");
+    }
+
+  if (op == CPP_CLOSE_PAREN)
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
+      return 0;
+    }
+
+  return top;
+}
+
+/* Returns the position of the old top of stack after expansion.  */
+struct op *
+_cpp_expand_op_stack (cpp_reader *pfile)
+{
+  size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
+  size_t new_size = old_size * 2 + 20;
+
+  pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
+  pfile->op_limit = pfile->op_stack + new_size;
+
+  return pfile->op_stack + old_size;
+}
+
+/* Emits a warning if the effective sign of either operand of OP
+   changes because of integer promotions.  */
+static void
+check_promotion (cpp_reader *pfile, const struct op *op)
+{
+  if (op->value.unsignedp == op[-1].value.unsignedp)
+    return;
+
+  if (op->value.unsignedp)
+    {
+      if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "the left operand of \"%s\" changes sign when promoted",
+                  cpp_token_as_text (pfile, op->token));
+    }
+  else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
+    cpp_error (pfile, CPP_DL_WARNING,
+              "the right operand of \"%s\" changes sign when promoted",
+              cpp_token_as_text (pfile, op->token));
+}
+
+/* Clears the unused high order bits of the number pointed to by PNUM.  */
+static cpp_num
+num_trim (cpp_num num, size_t precision)
+{
+  if (precision > PART_PRECISION)
+    {
+      precision -= PART_PRECISION;
+      if (precision < PART_PRECISION)
+       num.high &= ((cpp_num_part) 1 << precision) - 1;
+    }
+  else
+    {
+      if (precision < PART_PRECISION)
+       num.low &= ((cpp_num_part) 1 << precision) - 1;
+      num.high = 0;
+    }
+
+  return num;
+}
+
+/* True iff A (presumed signed) >= 0.  */
+static bool
+num_positive (cpp_num num, size_t precision)
+{
+  if (precision > PART_PRECISION)
+    {
+      precision -= PART_PRECISION;
+      return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
+    }
+
+  return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
+}
+
+/* Sign extend a number, with PRECISION significant bits and all
+   others assumed clear, to fill out a cpp_num structure.  */
+cpp_num
+cpp_num_sign_extend (cpp_num num, size_t precision)
+{
+  if (!num.unsignedp)
+    {
+      if (precision > PART_PRECISION)
+       {
+         precision -= PART_PRECISION;
+         if (precision < PART_PRECISION
+             && (num.high & (cpp_num_part) 1 << (precision - 1)))
+           num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
+       }
+      else if (num.low & (cpp_num_part) 1 << (precision - 1))
+       {
+         if (precision < PART_PRECISION)
+           num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
+         num.high = ~(cpp_num_part) 0;
+       }
+    }
+
+  return num;
+}
+
+/* Returns the negative of NUM.  */
+static cpp_num
+num_negate (cpp_num num, size_t precision)
+{
+  cpp_num copy;
+
+  copy = num;
+  num.high = ~num.high;
+  num.low = ~num.low;
+  if (++num.low == 0)
+    num.high++;
+  num = num_trim (num, precision);
+  num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
+
+  return num;
+}
+
+/* Returns true if A >= B.  */
+static bool
+num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
+{
+  bool unsignedp;
+
+  unsignedp = pa.unsignedp || pb.unsignedp;
+
+  if (!unsignedp)
+    {
+      /* Both numbers have signed type.  If they are of different
+       sign, the answer is the sign of A.  */
+      unsignedp = num_positive (pa, precision);
+
+      if (unsignedp != num_positive (pb, precision))
+       return unsignedp;
+
+      /* Otherwise we can do an unsigned comparison.  */
+    }
+
+  return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
+}
+
+/* Returns LHS OP RHS, where OP is a bit-wise operation.  */
+static cpp_num
+num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
+               cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
+{
+  lhs.overflow = false;
+  lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
+
+  /* As excess precision is zeroed, there is no need to num_trim () as
+     these operations cannot introduce a set bit there.  */
+  if (op == CPP_AND)
+    {
+      lhs.low &= rhs.low;
+      lhs.high &= rhs.high;
+    }
+  else if (op == CPP_OR)
+    {
+      lhs.low |= rhs.low;
+      lhs.high |= rhs.high;
+    }
+  else
+    {
+      lhs.low ^= rhs.low;
+      lhs.high ^= rhs.high;
+    }
+
+  return lhs;
+}
+
+/* Returns LHS OP RHS, where OP is an inequality.  */
+static cpp_num
+num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
+                  enum cpp_ttype op)
+{
+  bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
+
+  if (op == CPP_GREATER_EQ)
+    lhs.low = gte;
+  else if (op == CPP_LESS)
+    lhs.low = !gte;
+  else if (op == CPP_GREATER)
+    lhs.low = gte && !num_eq (lhs, rhs);
+  else /* CPP_LESS_EQ.  */
+    lhs.low = !gte || num_eq (lhs, rhs);
+
+  lhs.high = 0;
+  lhs.overflow = false;
+  lhs.unsignedp = false;
+  return lhs;
+}
+
+/* Returns LHS OP RHS, where OP is == or !=.  */
+static cpp_num
+num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
+                cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
+{
+  /* Work around a 3.0.4 bug; see PR 6950.  */
+  bool eq = num_eq (lhs, rhs);
+  if (op == CPP_NOT_EQ)
+    eq = !eq;
+  lhs.low = eq;
+  lhs.high = 0;
+  lhs.overflow = false;
+  lhs.unsignedp = false;
+  return lhs;
+}
+
+/* Shift NUM, of width PRECISION, right by N bits.  */
+static cpp_num
+num_rshift (cpp_num num, size_t precision, size_t n)
+{
+  cpp_num_part sign_mask;
+  bool x = num_positive (num, precision);
+
+  if (num.unsignedp || x)
+    sign_mask = 0;
+  else
+    sign_mask = ~(cpp_num_part) 0;
+
+  if (n >= precision)
+    num.high = num.low = sign_mask;
+  else
+    {
+      /* Sign-extend.  */
+      if (precision < PART_PRECISION)
+       num.high = sign_mask, num.low |= sign_mask << precision;
+      else if (precision < 2 * PART_PRECISION)
+       num.high |= sign_mask << (precision - PART_PRECISION);
+
+      if (n >= PART_PRECISION)
+       {
+         n -= PART_PRECISION;
+         num.low = num.high;
+         num.high = sign_mask;
+       }
+
+      if (n)
+       {
+         num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
+         num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
+       }
+    }
+
+  num = num_trim (num, precision);
+  num.overflow = false;
+  return num;
+}
+
+/* Shift NUM, of width PRECISION, left by N bits.  */
+static cpp_num
+num_lshift (cpp_num num, size_t precision, size_t n)
+{
+  if (n >= precision)
+    {
+      num.overflow = !num.unsignedp && !num_zerop (num);
+      num.high = num.low = 0;
+    }
+  else
+    {
+      cpp_num orig, maybe_orig;
+      size_t m = n;
+
+      orig = num;
+      if (m >= PART_PRECISION)
+       {
+         m -= PART_PRECISION;
+         num.high = num.low;
+         num.low = 0;
+       }
+      if (m)
+       {
+         num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
+         num.low <<= m;
+       }
+      num = num_trim (num, precision);
+
+      if (num.unsignedp)
+       num.overflow = false;
+      else
+       {
+         maybe_orig = num_rshift (num, precision, n);
+         num.overflow = !num_eq (orig, maybe_orig);
+       }
+    }
+
+  return num;
+}
+
+/* The four unary operators: +, -, ! and ~.  */
+static cpp_num
+num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
+{
+  switch (op)
+    {
+    case CPP_UPLUS:
+      if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
+       cpp_error (pfile, CPP_DL_WARNING,
+                  "traditional C rejects the unary plus operator");
+      num.overflow = false;
+      break;
+
+    case CPP_UMINUS:
+      num = num_negate (num, CPP_OPTION (pfile, precision));
+      break;
+
+    case CPP_COMPL:
+      num.high = ~num.high;
+      num.low = ~num.low;
+      num = num_trim (num, CPP_OPTION (pfile, precision));
+      num.overflow = false;
+      break;
+
+    default: /* case CPP_NOT: */
+      num.low = num_zerop (num);
+      num.high = 0;
+      num.overflow = false;
+      num.unsignedp = false;
+      break;
+    }
+
+  return num;
+}
+
+/* The various binary operators.  */
+static cpp_num
+num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
+{
+  cpp_num result;
+  size_t precision = CPP_OPTION (pfile, precision);
+  size_t n;
+
+  switch (op)
+    {
+      /* Shifts.  */
+    case CPP_LSHIFT:
+    case CPP_RSHIFT:
+      if (!rhs.unsignedp && !num_positive (rhs, precision))
+       {
+         /* A negative shift is a positive shift the other way.  */
+         if (op == CPP_LSHIFT)
+           op = CPP_RSHIFT;
+         else
+           op = CPP_LSHIFT;
+         rhs = num_negate (rhs, precision);
+       }
+      if (rhs.high)
+       n = ~0;                 /* Maximal.  */
+      else
+       n = rhs.low;
+      if (op == CPP_LSHIFT)
+       lhs = num_lshift (lhs, precision, n);
+      else
+       lhs = num_rshift (lhs, precision, n);
+      break;
+
+      /* Arithmetic.  */
+    case CPP_MINUS:
+      rhs = num_negate (rhs, precision);
+    case CPP_PLUS:
+      result.low = lhs.low + rhs.low;
+      result.high = lhs.high + rhs.high;
+      if (result.low < lhs.low)
+       result.high++;
+      result.unsignedp = lhs.unsignedp || rhs.unsignedp;
+      result.overflow = false;
+
+      result = num_trim (result, precision);
+      if (!result.unsignedp)
+       {
+         bool lhsp = num_positive (lhs, precision);
+         result.overflow = (lhsp == num_positive (rhs, precision)
+                            && lhsp != num_positive (result, precision));
+       }
+      return result;
+
+      /* Comma.  */
+    default: /* case CPP_COMMA: */
+      if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
+                                  || !pfile->state.skip_eval))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "comma operator in operand of #if");
+      lhs = rhs;
+      break;
+    }
+
+  return lhs;
+}
+
+/* Multiplies two unsigned cpp_num_parts to give a cpp_num.  This
+   cannot overflow.  */
+static cpp_num
+num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
+{
+  cpp_num result;
+  cpp_num_part middle[2], temp;
+
+  result.low = LOW_PART (lhs) * LOW_PART (rhs);
+  result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
+
+  middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
+  middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
+
+  temp = result.low;
+  result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
+  if (result.low < temp)
+    result.high++;
+
+  temp = result.low;
+  result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
+  if (result.low < temp)
+    result.high++;
+
+  result.high += HIGH_PART (middle[0]);
+  result.high += HIGH_PART (middle[1]);
+  result.unsignedp = true;
+  result.overflow = false;
+
+  return result;
+}
+
+/* Multiply two preprocessing numbers.  */
+static cpp_num
+num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
+{
+  cpp_num result, temp;
+  bool unsignedp = lhs.unsignedp || rhs.unsignedp;
+  bool overflow, negate = false;
+  size_t precision = CPP_OPTION (pfile, precision);
+
+  /* Prepare for unsigned multiplication.  */
+  if (!unsignedp)
+    {
+      if (!num_positive (lhs, precision))
+       negate = !negate, lhs = num_negate (lhs, precision);
+      if (!num_positive (rhs, precision))
+       negate = !negate, rhs = num_negate (rhs, precision);
+    }
+
+  overflow = lhs.high && rhs.high;
+  result = num_part_mul (lhs.low, rhs.low);
+
+  temp = num_part_mul (lhs.high, rhs.low);
+  result.high += temp.low;
+  if (temp.high)
+    overflow = true;
+
+  temp = num_part_mul (lhs.low, rhs.high);
+  result.high += temp.low;
+  if (temp.high)
+    overflow = true;
+
+  temp.low = result.low, temp.high = result.high;
+  result = num_trim (result, precision);
+  if (!num_eq (result, temp))
+    overflow = true;
+
+  if (negate)
+    result = num_negate (result, precision);
+
+  if (unsignedp)
+    result.overflow = false;
+  else
+    result.overflow = overflow || (num_positive (result, precision) ^ !negate
+                                  && !num_zerop (result));
+  result.unsignedp = unsignedp;
+
+  return result;
+}
+
+/* Divide two preprocessing numbers, returning the answer or the
+   remainder depending upon OP.  */
+static cpp_num
+num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
+{
+  cpp_num result, sub;
+  cpp_num_part mask;
+  bool unsignedp = lhs.unsignedp || rhs.unsignedp;
+  bool negate = false, lhs_neg = false;
+  size_t i, precision = CPP_OPTION (pfile, precision);
+
+  /* Prepare for unsigned division.  */
+  if (!unsignedp)
+    {
+      if (!num_positive (lhs, precision))
+       negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
+      if (!num_positive (rhs, precision))
+       negate = !negate, rhs = num_negate (rhs, precision);
+    }
+
+  /* Find the high bit.  */
+  if (rhs.high)
+    {
+      i = precision - 1;
+      mask = (cpp_num_part) 1 << (i - PART_PRECISION);
+      for (; ; i--, mask >>= 1)
+       if (rhs.high & mask)
+         break;
+    }
+  else if (rhs.low)
+    {
+      if (precision > PART_PRECISION)
+       i = precision - PART_PRECISION - 1;
+      else
+       i = precision - 1;
+      mask = (cpp_num_part) 1 << i;
+      for (; ; i--, mask >>= 1)
+       if (rhs.low & mask)
+         break;
+    }
+  else
+    {
+      if (!pfile->state.skip_eval)
+       cpp_error (pfile, CPP_DL_ERROR, "division by zero in #if");
+      return lhs;
+    }
+
+  /* First nonzero bit of RHS is bit I.  Do naive division by
+     shifting the RHS fully left, and subtracting from LHS if LHS is
+     at least as big, and then repeating but with one less shift.
+     This is not very efficient, but is easy to understand.  */
+
+  rhs.unsignedp = true;
+  lhs.unsignedp = true;
+  i = precision - i - 1;
+  sub = num_lshift (rhs, precision, i);
+
+  result.high = result.low = 0;
+  for (;;)
+    {
+      if (num_greater_eq (lhs, sub, precision))
+       {
+         lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
+         if (i >= PART_PRECISION)
+           result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
+         else
+           result.low |= (cpp_num_part) 1 << i;
+       }
+      if (i-- == 0)
+       break;
+      sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
+      sub.high >>= 1;
+    }
+
+  /* We divide so that the remainder has the sign of the LHS.  */
+  if (op == CPP_DIV)
+    {
+      result.unsignedp = unsignedp;
+      result.overflow = false;
+      if (!unsignedp)
+       {
+         if (negate)
+           result = num_negate (result, precision);
+         result.overflow = (num_positive (result, precision) ^ !negate
+                            && !num_zerop (result));
+       }
+
+      return result;
+    }
+
+  /* CPP_MOD.  */
+  lhs.unsignedp = unsignedp;
+  lhs.overflow = false;
+  if (lhs_neg)
+    lhs = num_negate (lhs, precision);
+
+  return lhs;
+}
diff --git a/libcpp/files.c b/libcpp/files.c
new file mode 100644 (file)
index 0000000..467bb14
--- /dev/null
@@ -0,0 +1,1769 @@
+/* Part of CPP library.  File handling.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
+   Written by Per Bothner, 1994.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+   Split out of cpplib.c, Zack Weinberg, Oct 1998
+   Reimplemented, Neil Booth, Jul 2003
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+#include "mkdeps.h"
+#include "obstack.h"
+#include "hashtab.h"
+#include "md5.h"
+#include <dirent.h>
+
+/* Variable length record files on VMS will have a stat size that includes
+   record control characters that won't be included in the read size.  */
+#ifdef VMS
+# define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
+# define STAT_SIZE_RELIABLE(ST) ((ST).st_fab_rfm != FAB_C_VAR)
+#else
+# define STAT_SIZE_RELIABLE(ST) true
+#endif
+
+#ifdef __DJGPP__
+#include <io.h>
+  /* For DJGPP redirected input is opened in text mode.  */
+#  define set_stdin_to_binary_mode() \
+     if (! isatty (0)) setmode (0, O_BINARY)
+#else
+#  define set_stdin_to_binary_mode() /* Nothing */
+#endif
+
+/* This structure represents a file searched for by CPP, whether it
+   exists or not.  An instance may be pointed to by more than one
+   file_hash_entry; at present no reference count is kept.  */
+struct _cpp_file
+{
+  /* Filename as given to #include or command line switch.  */
+  const char *name;
+
+  /* The full path used to find the file.  */
+  const char *path;
+
+  /* The full path of the pch file.  */
+  const char *pchname;
+
+  /* The file's path with the basename stripped.  NULL if it hasn't
+     been calculated yet.  */
+  const char *dir_name;
+
+  /* Chain through all files.  */
+  struct _cpp_file *next_file;
+
+  /* The contents of NAME after calling read_file().  */
+  const uchar *buffer;
+
+  /* The macro, if any, preventing re-inclusion.  */
+  const cpp_hashnode *cmacro;
+
+  /* The directory in the search path where FILE was found.  Used for
+     #include_next and determining whether a header is a system
+     header.  */
+  cpp_dir *dir;
+
+  /* As filled in by stat(2) for the file.  */
+  struct stat st;
+
+  /* File descriptor.  Invalid if -1, otherwise open.  */
+  int fd;
+
+  /* Zero if this file was successfully opened and stat()-ed,
+     otherwise errno obtained from failure.  */
+  int err_no;
+
+  /* Number of times the file has been stacked for preprocessing.  */
+  unsigned short stack_count;
+
+  /* If opened with #import or contains #pragma once.  */
+  bool once_only;
+
+  /* If read() failed before.  */
+  bool dont_read;
+
+  /* If this file is the main file.  */
+  bool main_file;
+
+  /* If BUFFER above contains the true contents of the file.  */
+  bool buffer_valid;
+
+  /* File is a PCH (on return from find_include_file).  */
+  bool pch;
+};
+
+/* A singly-linked list for all searches for a given file name, with
+   its head pointed to by a slot in FILE_HASH.  The file name is what
+   appeared between the quotes in a #include directive; it can be
+   determined implicitly from the hash table location or explicitly
+   from FILE->name.
+
+   FILE is a structure containing details about the file that was
+   found with that search, or details of how the search failed.
+
+   START_DIR is the starting location of the search in the include
+   chain.  The current directories for "" includes are also hashed in
+   the hash table and therefore unique.  Files that are looked up
+   without using a search path, such as absolute filenames and file
+   names from the command line share a special starting directory so
+   they don't cause cache hits with normal include-chain lookups.
+
+   If START_DIR is NULL then the entry is for a directory, not a file,
+   and the directory is in DIR.  Since the starting point in a file
+   lookup chain is never NULL, this means that simple pointer
+   comparisons against START_DIR can be made to determine cache hits
+   in file lookups.
+
+   If a cache lookup fails because of e.g. an extra "./" in the path,
+   then nothing will break.  It is just less efficient as CPP will
+   have to do more work re-preprocessing the file, and/or comparing
+   its contents against earlier once-only files.
+*/
+struct file_hash_entry
+{
+  struct file_hash_entry *next;
+  cpp_dir *start_dir;
+  source_location location;
+  union
+  {
+    _cpp_file *file;
+    cpp_dir *dir;
+  } u;
+};
+
+/* Number of entries to put in a file_hash_entry pool.  */
+#define FILE_HASH_POOL_SIZE 127
+
+/* A file hash entry pool.  We allocate file_hash_entry object from
+   one of these.  */
+struct file_hash_entry_pool
+{
+  /* Number of entries used from this pool.  */
+  unsigned int file_hash_entries_used;
+  /* Next pool in the chain; used when freeing.  */
+  struct file_hash_entry_pool *next;
+  /* The memory pool.  */
+  struct file_hash_entry pool[FILE_HASH_POOL_SIZE];
+};
+
+static bool open_file (_cpp_file *file);
+static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
+                          bool *invalid_pch);
+static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
+                             bool *invalid_pch);
+static bool read_file_guts (cpp_reader *pfile, _cpp_file *file);
+static bool read_file (cpp_reader *pfile, _cpp_file *file);
+static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import);
+static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
+                                int angle_brackets, enum include_type);
+static const char *dir_name_of_file (_cpp_file *file);
+static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int);
+static struct file_hash_entry *search_cache (struct file_hash_entry *head,
+                                            const cpp_dir *start_dir);
+static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
+static void destroy_cpp_file (_cpp_file *);
+static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
+static void allocate_file_hash_entries (cpp_reader *pfile);
+static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
+static int report_missing_guard (void **slot, void *b);
+static hashval_t file_hash_hash (const void *p);
+static int file_hash_eq (const void *p, const void *q);
+static char *read_filename_string (int ch, FILE *f);
+static void read_name_map (cpp_dir *dir);
+static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
+static char *append_file_to_dir (const char *fname, cpp_dir *dir);
+static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
+static int pchf_save_compare (const void *e1, const void *e2);
+static int pchf_compare (const void *d_p, const void *e_p);
+static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
+
+/* Given a filename in FILE->PATH, with the empty string interpreted
+   as <stdin>, open it.
+
+   On success FILE contains an open file descriptor and stat
+   information for the file.  On failure the file descriptor is -1 and
+   the appropriate errno is also stored in FILE.  Returns TRUE iff
+   successful.
+
+   We used to open files in nonblocking mode, but that caused more
+   problems than it solved.  Do take care not to acquire a controlling
+   terminal by mistake (this can't happen on sane systems, but
+   paranoia is a virtue).
+
+   Use the three-argument form of open even though we aren't
+   specifying O_CREAT, to defend against broken system headers.
+
+   O_BINARY tells some runtime libraries (notably DJGPP) not to do
+   newline translation; we can handle DOS line breaks just fine
+   ourselves.  */
+static bool
+open_file (_cpp_file *file)
+{
+  if (file->path[0] == '\0')
+    {
+      file->fd = 0;
+      set_stdin_to_binary_mode ();
+    }
+  else
+    file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
+
+  if (file->fd != -1)
+    {
+      if (fstat (file->fd, &file->st) == 0)
+       {
+         if (!S_ISDIR (file->st.st_mode))
+           {
+             file->err_no = 0;
+             return true;
+           }
+
+         /* Ignore a directory and continue the search.  The file we're
+            looking for may be elsewhere in the search path.  */
+         errno = ENOENT;
+       }
+
+      close (file->fd);
+      file->fd = -1;
+    }
+#if defined(_WIN32) && !defined(__CYGWIN__)
+  else if (errno == EACCES)
+    {
+      /* On most UNIX systems, open succeeds on a directory.  Above,
+         we check if we have opened a directory and if so, set errno
+         to ENOENT.  However, on Windows, opening a directory
+         fails with EACCES.  We want to return ENOENT in that
+         case too.  */
+      if (stat (file->path, &file->st) == 0
+          && S_ISDIR (file->st.st_mode))
+        errno = ENOENT;
+      else
+       /* The call to stat may have reset errno.  */
+       errno = EACCES;
+    }
+#endif    
+  else if (errno == ENOTDIR)
+    errno = ENOENT;
+
+  file->err_no = errno;
+
+  return false;
+}
+
+/* Temporary PCH intercept of opening a file.  Try to find a PCH file
+   based on FILE->name and FILE->dir, and test those found for
+   validity using PFILE->cb.valid_pch.  Return true iff a valid file is
+   found.  Set *INVALID_PCH if a PCH file is found but wasn't valid.  */
+
+static bool
+pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
+{
+  static const char extension[] = ".gch";
+  const char *path = file->path;
+  size_t len, flen;
+  char *pchname;
+  struct stat st;
+  bool valid = false;
+
+  /* No PCH on <stdin> or if not requested.  */
+  if (file->name[0] == '\0' || !pfile->cb.valid_pch)
+    return false;
+
+  flen = strlen (path);
+  len = flen + sizeof (extension);
+  pchname = XNEWVEC (char, len);
+  memcpy (pchname, path, flen);
+  memcpy (pchname + flen, extension, sizeof (extension));
+
+  if (stat (pchname, &st) == 0)
+    {
+      DIR *pchdir;
+      struct dirent *d;
+      size_t dlen, plen = len;
+
+      if (!S_ISDIR (st.st_mode))
+       valid = validate_pch (pfile, file, pchname);
+      else if ((pchdir = opendir (pchname)) != NULL)
+       {
+         pchname[plen - 1] = '/';
+         while ((d = readdir (pchdir)) != NULL)
+           {
+             dlen = strlen (d->d_name) + 1;
+             if ((strcmp (d->d_name, ".") == 0)
+                 || (strcmp (d->d_name, "..") == 0))
+               continue;
+             if (dlen + plen > len)
+               {
+                 len += dlen + 64;
+                 pchname = XRESIZEVEC (char, pchname, len);
+               }
+             memcpy (pchname + plen, d->d_name, dlen);
+             valid = validate_pch (pfile, file, pchname);
+             if (valid)
+               break;
+           }
+         closedir (pchdir);
+       }
+      if (valid)
+       file->pch = true;
+      else
+       *invalid_pch = true;
+    }
+
+  if (valid)
+    file->pchname = pchname;
+  else
+    free (pchname);
+
+  return valid;
+}
+
+/* Try to open the path FILE->name appended to FILE->dir.  This is
+   where remap and PCH intercept the file lookup process.  Return true
+   if the file was found, whether or not the open was successful.
+   Set *INVALID_PCH to true if a PCH file is found but wasn't valid.  */
+
+static bool
+find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
+{
+  char *path;
+
+  if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
+    ;
+  else
+    if (file->dir->construct)
+      path = file->dir->construct (file->name, file->dir);
+    else
+      path = append_file_to_dir (file->name, file->dir);
+
+  if (path)
+    {
+      hashval_t hv = htab_hash_string (path);
+      char *copy;
+      void **pp;
+
+      if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL)
+       {
+         file->err_no = ENOENT;
+         return false;
+       }
+
+      file->path = path;
+      if (pch_open_file (pfile, file, invalid_pch))
+       return true;
+
+      if (open_file (file))
+       return true;
+
+      if (file->err_no != ENOENT)
+       {
+         open_file_failed (pfile, file, 0);
+         return true;
+       }
+
+      /* We copy the path name onto an obstack partly so that we don't
+        leak the memory, but mostly so that we don't fragment the
+        heap.  */
+      copy = obstack_copy0 (&pfile->nonexistent_file_ob, path,
+                           strlen (path));
+      free (path);
+      pp = htab_find_slot_with_hash (pfile->nonexistent_file_hash,
+                                    copy, hv, INSERT);
+      *pp = copy;
+
+      file->path = file->name;
+    }
+  else
+    {
+      file->err_no = ENOENT; 
+      file->path = NULL;
+    }
+
+  return false;
+}
+
+/* Return tue iff the missing_header callback found the given HEADER.  */
+static bool
+search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file)
+{
+  missing_header_cb func = pfile->cb.missing_header;
+
+  /* When the regular search path doesn't work, try context dependent
+     headers search paths.  */
+  if (func
+      && file->dir == NULL)
+    {
+      if ((file->path = func (pfile, header, &file->dir)) != NULL)
+       {
+         if (open_file (file))
+           return true;
+         free ((void *)file->path);
+       }
+      file->path = file->name;
+    }
+
+  return false;
+}
+
+bool
+_cpp_find_failed (_cpp_file *file)
+{
+  return file->err_no != 0;
+}
+
+/* Given a filename FNAME search for such a file in the include path
+   starting from START_DIR.  If FNAME is the empty string it is
+   interpreted as STDIN if START_DIR is PFILE->no_search_path.
+
+   If the file is not found in the file cache fall back to the O/S and
+   add the result to our cache.
+
+   If the file was not found in the filesystem, or there was an error
+   opening it, then ERR_NO is nonzero and FD is -1.  If the file was
+   found, then ERR_NO is zero and FD could be -1 or an open file
+   descriptor.  FD can be -1 if the file was found in the cache and
+   had previously been closed.  To open it again pass the return value
+   to open_file().
+*/
+_cpp_file *
+_cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake, int angle_brackets)
+{
+  struct file_hash_entry *entry, **hash_slot;
+  _cpp_file *file;
+  bool invalid_pch = false;
+  bool saw_bracket_include = false;
+  bool saw_quote_include = false;
+  struct cpp_dir *found_in_cache = NULL;
+
+  /* Ensure we get no confusion between cached files and directories.  */
+  if (start_dir == NULL)
+    cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
+
+  hash_slot = (struct file_hash_entry **)
+    htab_find_slot_with_hash (pfile->file_hash, fname,
+                             htab_hash_string (fname),
+                             INSERT);
+
+  /* First check the cache before we resort to memory allocation.  */
+  entry = search_cache (*hash_slot, start_dir);
+  if (entry)
+    return entry->u.file;
+
+  file = make_cpp_file (pfile, start_dir, fname);
+
+  /* Try each path in the include chain.  */
+  for (; !fake ;)
+    {
+      if (find_file_in_dir (pfile, file, &invalid_pch))
+       break;
+
+      file->dir = file->dir->next;
+      if (file->dir == NULL)
+       {
+         if (search_path_exhausted (pfile, fname, file))
+           {
+             /* Although this file must not go in the cache, because
+                the file found might depend on things (like the current file)
+                that aren't represented in the cache, it still has to go in
+                the list of all files so that #import works.  */
+             file->next_file = pfile->all_files;
+             pfile->all_files = file;
+             return file;
+           }
+
+         open_file_failed (pfile, file, angle_brackets);
+         if (invalid_pch)
+           {
+             cpp_error (pfile, CPP_DL_ERROR,
+              "one or more PCH files were found, but they were invalid");
+             if (!cpp_get_options (pfile)->warn_invalid_pch)
+               cpp_error (pfile, CPP_DL_ERROR,
+                          "use -Winvalid-pch for more information");
+           }
+         break;
+       }
+
+      /* Only check the cache for the starting location (done above)
+        and the quote and bracket chain heads because there are no
+        other possible starting points for searches.  */
+      if (file->dir == pfile->bracket_include)
+       saw_bracket_include = true;
+      else if (file->dir == pfile->quote_include)
+       saw_quote_include = true;
+      else
+       continue;
+
+      entry = search_cache (*hash_slot, file->dir);
+      if (entry)
+       {
+         found_in_cache = file->dir;
+         break;
+       }
+    }
+
+  if (entry)
+    {
+      /* Cache for START_DIR too, sharing the _cpp_file structure.  */
+      free ((char *) file->name);
+      free (file);
+      file = entry->u.file;
+    }
+  else
+    {
+      /* This is a new file; put it in the list.  */
+      file->next_file = pfile->all_files;
+      pfile->all_files = file;
+    }
+
+  /* Store this new result in the hash table.  */
+  entry = new_file_hash_entry (pfile);
+  entry->next = *hash_slot;
+  entry->start_dir = start_dir;
+  entry->location = pfile->line_table->highest_location;
+  entry->u.file = file;
+  *hash_slot = entry;
+
+  /* If we passed the quote or bracket chain heads, cache them also.
+     This speeds up processing if there are lots of -I options.  */
+  if (saw_bracket_include
+      && pfile->bracket_include != start_dir
+      && found_in_cache != pfile->bracket_include)
+    {
+      entry = new_file_hash_entry (pfile);
+      entry->next = *hash_slot;
+      entry->start_dir = pfile->bracket_include;
+      entry->location = pfile->line_table->highest_location;
+      entry->u.file = file;
+      *hash_slot = entry;
+    }
+  if (saw_quote_include
+      && pfile->quote_include != start_dir
+      && found_in_cache != pfile->quote_include)
+    {
+      entry = new_file_hash_entry (pfile);
+      entry->next = *hash_slot;
+      entry->start_dir = pfile->quote_include;
+      entry->location = pfile->line_table->highest_location;
+      entry->u.file = file;
+      *hash_slot = entry;
+    }
+
+  return file;
+}
+
+/* Read a file into FILE->buffer, returning true on success.
+
+   If FILE->fd is something weird, like a block device, we don't want
+   to read it at all.  Don't even try to figure out what something is,
+   except for plain files and block devices, since there is no
+   reliable portable way of doing this.
+
+   FIXME: Flush file cache and try again if we run out of memory.  */
+static bool
+read_file_guts (cpp_reader *pfile, _cpp_file *file)
+{
+  ssize_t size, total, count;
+  uchar *buf;
+  bool regular;
+
+  if (S_ISBLK (file->st.st_mode))
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
+      return false;
+    }
+
+  regular = S_ISREG (file->st.st_mode);
+  if (regular)
+    {
+      /* off_t might have a wider range than ssize_t - in other words,
+        the max size of a file might be bigger than the address
+        space.  We can't handle a file that large.  (Anyone with
+        a single source file bigger than 2GB needs to rethink
+        their coding style.)  Some systems (e.g. AIX 4.1) define
+        SSIZE_MAX to be much smaller than the actual range of the
+        type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
+        does not bite us.  */
+      if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
+       {
+         cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
+         return false;
+       }
+
+      size = file->st.st_size;
+    }
+  else
+    /* 8 kilobytes is a sensible starting size.  It ought to be bigger
+       than the kernel pipe buffer, and it's definitely bigger than
+       the majority of C source files.  */
+    size = 8 * 1024;
+
+  buf = XNEWVEC (uchar, size + 1);
+  total = 0;
+  while ((count = read (file->fd, buf + total, size - total)) > 0)
+    {
+      total += count;
+
+      if (total == size)
+       {
+         if (regular)
+           break;
+         size *= 2;
+         buf = XRESIZEVEC (uchar, buf, size + 1);
+       }
+    }
+
+  if (count < 0)
+    {
+      cpp_errno (pfile, CPP_DL_ERROR, file->path);
+      return false;
+    }
+
+  if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
+    cpp_error (pfile, CPP_DL_WARNING,
+              "%s is shorter than expected", file->path);
+
+  file->buffer = _cpp_convert_input (pfile, CPP_OPTION (pfile, input_charset),
+                                    buf, size, total, &file->st.st_size);
+  file->buffer_valid = true;
+
+  return true;
+}
+
+/* Convenience wrapper around read_file_guts that opens the file if
+   necessary and closes the file descriptor after reading.  FILE must
+   have been passed through find_file() at some stage.  */
+static bool
+read_file (cpp_reader *pfile, _cpp_file *file)
+{
+  /* If we already have its contents in memory, succeed immediately.  */
+  if (file->buffer_valid)
+    return true;
+
+  /* If an earlier read failed for some reason don't try again.  */
+  if (file->dont_read || file->err_no)
+    return false;
+
+  if (file->fd == -1 && !open_file (file))
+    {
+      open_file_failed (pfile, file, 0);
+      return false;
+    }
+
+  file->dont_read = !read_file_guts (pfile, file);
+  close (file->fd);
+  file->fd = -1;
+
+  return !file->dont_read;
+}
+
+/* Returns TRUE if FILE's contents have been successfully placed in
+   FILE->buffer and the file should be stacked, otherwise false.  */
+static bool
+should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
+{
+  _cpp_file *f;
+
+  /* Skip once-only files.  */
+  if (file->once_only)
+    return false;
+
+  /* We must mark the file once-only if #import now, before header
+     guard checks.  Otherwise, undefining the header guard might
+     cause the file to be re-stacked.  */
+  if (import)
+    {
+      _cpp_mark_file_once_only (pfile, file);
+
+      /* Don't stack files that have been stacked before.  */
+      if (file->stack_count)
+       return false;
+    }
+
+  /* Skip if the file had a header guard and the macro is defined.
+     PCH relies on this appearing before the PCH handler below.  */
+  if (file->cmacro && file->cmacro->type == NT_MACRO)
+    return false;
+
+  /* Handle PCH files immediately; don't stack them.  */
+  if (file->pch)
+    {
+      pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
+      close (file->fd);
+      file->fd = -1;
+      return false;
+    }
+
+  if (!read_file (pfile, file))
+    return false;
+
+  /* Check the file against the PCH file.  This is done before
+     checking against files we've already seen, since it may save on
+     I/O.  */
+  if (check_file_against_entries (pfile, file, import))
+    {
+      /* If this isn't a #import, but yet we can't include the file,
+        that means that it was #import-ed in the PCH file,
+        so we can never include it again.  */
+      if (! import)
+       _cpp_mark_file_once_only (pfile, file);
+      return false;
+    }
+
+  /* Now we've read the file's contents, we can stack it if there
+     are no once-only files.  */
+  if (!pfile->seen_once_only)
+    return true;
+
+  /* We may have read the file under a different name.  Look
+     for likely candidates and compare file contents to be sure.  */
+  for (f = pfile->all_files; f; f = f->next_file)
+    {
+      if (f == file)
+       continue;
+
+      if ((import || f->once_only)
+         && f->err_no == 0
+         && f->st.st_mtime == file->st.st_mtime
+         && f->st.st_size == file->st.st_size)
+       {
+         _cpp_file *ref_file;
+         bool same_file_p = false;
+
+         if (f->buffer && !f->buffer_valid)
+           {
+             /* We already have a buffer but it is not valid, because
+                the file is still stacked.  Make a new one.  */
+             ref_file = make_cpp_file (pfile, f->dir, f->name);
+             ref_file->path = f->path;
+           }
+         else
+           /* The file is not stacked anymore.  We can reuse it.  */
+           ref_file = f;
+
+         same_file_p = read_file (pfile, ref_file)
+                       /* Size might have changed in read_file().  */
+                       && ref_file->st.st_size == file->st.st_size
+                       && !memcmp (ref_file->buffer,
+                                   file->buffer,
+                                   file->st.st_size);
+
+         if (f->buffer && !f->buffer_valid)
+           {
+             ref_file->path = 0;
+             destroy_cpp_file (ref_file);
+           }
+
+         if (same_file_p)
+           break;
+       }
+    }
+
+  return f == NULL;
+}
+
+/* Place the file referenced by FILE into a new buffer on the buffer
+   stack if possible.  IMPORT is true if this stacking attempt is
+   because of a #import directive.  Returns true if a buffer is
+   stacked.  */
+bool
+_cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
+{
+  cpp_buffer *buffer;
+  int sysp;
+
+  if (!should_stack_file (pfile, file, import))
+      return false;
+
+  if (pfile->buffer == NULL || file->dir == NULL)
+    sysp = 0;
+  else
+    sysp = MAX (pfile->buffer->sysp,  file->dir->sysp);
+
+  /* Add the file to the dependencies on its first inclusion.  */
+  if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
+    {
+      if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
+       deps_add_dep (pfile->deps, file->path);
+    }
+
+  /* Clear buffer_valid since _cpp_clean_line messes it up.  */
+  file->buffer_valid = false;
+  file->stack_count++;
+
+  /* Stack the buffer.  */
+  buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
+                           CPP_OPTION (pfile, preprocessed)
+                           && !CPP_OPTION (pfile, directives_only));
+  buffer->file = file;
+  buffer->sysp = sysp;
+
+  /* Initialize controlling macro state.  */
+  pfile->mi_valid = true;
+  pfile->mi_cmacro = 0;
+
+  /* Generate the call back.  */
+  _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
+
+  return true;
+}
+
+/* Mark FILE to be included once only.  */
+void
+_cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
+{
+  pfile->seen_once_only = true;
+  file->once_only = true;
+}
+
+/* Return the directory from which searching for FNAME should start,
+   considering the directive TYPE and ANGLE_BRACKETS.  If there is
+   nothing left in the path, returns NULL.  */
+static struct cpp_dir *
+search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
+                 enum include_type type)
+{
+  cpp_dir *dir;
+  _cpp_file *file;
+
+  if (IS_ABSOLUTE_PATH (fname))
+    return &pfile->no_search_path;
+
+  /* pfile->buffer is NULL when processing an -include command-line flag.  */
+  file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
+
+  /* For #include_next, skip in the search path past the dir in which
+     the current file was found, but if it was found via an absolute
+     path use the normal search logic.  */
+  if (type == IT_INCLUDE_NEXT && file->dir
+      && file->dir != &pfile->no_search_path)
+    dir = file->dir->next;
+  else if (angle_brackets)
+    dir = pfile->bracket_include;
+  else if (type == IT_CMDLINE)
+    /* -include and -imacros use the #include "" chain with the
+       preprocessor's cwd prepended.  */
+    return make_cpp_dir (pfile, "./", false);
+  else if (pfile->quote_ignores_source_dir)
+    dir = pfile->quote_include;
+  else
+    return make_cpp_dir (pfile, dir_name_of_file (file),
+                        pfile->buffer ? pfile->buffer->sysp : 0);
+
+  if (dir == NULL)
+    cpp_error (pfile, CPP_DL_ERROR,
+              "no include path in which to search for %s", fname);
+
+  return dir;
+}
+
+/* Strip the basename from the file's path.  It ends with a slash if
+   of nonzero length.  Note that this procedure also works for
+   <stdin>, which is represented by the empty string.  */
+static const char *
+dir_name_of_file (_cpp_file *file)
+{
+  if (!file->dir_name)
+    {
+      size_t len = lbasename (file->path) - file->path;
+      char *dir_name = XNEWVEC (char, len + 1);
+
+      memcpy (dir_name, file->path, len);
+      dir_name[len] = '\0';
+      file->dir_name = dir_name;
+    }
+
+  return file->dir_name;
+}
+
+/* Handles #include-family directives (distinguished by TYPE),
+   including HEADER, and the command line -imacros and -include.
+   Returns true if a buffer was stacked.  */
+bool
+_cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
+                   enum include_type type)
+{
+  struct cpp_dir *dir;
+  _cpp_file *file;
+
+  dir = search_path_head (pfile, fname, angle_brackets, type);
+  if (!dir)
+    return false;
+
+  file = _cpp_find_file (pfile, fname, dir, false, angle_brackets);
+
+  /* Compensate for the increment in linemap_add.  In the case of a
+     normal #include, we're currently at the start of the line
+     *following* the #include.  A separate source_location for this
+     location makes no sense (until we do the LC_LEAVE), and
+     complicates LAST_SOURCE_LINE_LOCATION.  This does not apply if we
+     found a PCH file (in which case linemap_add is not called) or we
+     were included from the command-line.  */
+  if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
+    pfile->line_table->highest_location--;
+
+  return _cpp_stack_file (pfile, file, type == IT_IMPORT);
+}
+
+/* Could not open FILE.  The complication is dependency output.  */
+static void
+open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets)
+{
+  int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
+  bool print_dep = CPP_OPTION (pfile, deps.style) > (angle_brackets || !!sysp);
+
+  errno = file->err_no;
+  if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
+    deps_add_dep (pfile->deps, file->name);
+  else
+    {
+      /* If we are outputting dependencies but not for this file then
+        don't error because we can still produce correct output.  */
+      if (CPP_OPTION (pfile, deps.style) && ! print_dep)
+       cpp_errno (pfile, CPP_DL_WARNING, file->path);
+      else
+       cpp_errno (pfile, CPP_DL_ERROR, file->path);
+    }
+}
+
+/* Search in the chain beginning at HEAD for a file whose search path
+   started at START_DIR != NULL.  */
+static struct file_hash_entry *
+search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
+{
+  while (head && head->start_dir != start_dir)
+    head = head->next;
+
+  return head;
+}
+
+/* Allocate a new _cpp_file structure.  */
+static _cpp_file *
+make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
+{
+  _cpp_file *file;
+
+  file = XCNEW (_cpp_file);
+  file->main_file = !pfile->buffer;
+  file->fd = -1;
+  file->dir = dir;
+  file->name = xstrdup (fname);
+
+  return file;
+}
+
+/* Release a _cpp_file structure.  */
+static void
+destroy_cpp_file (_cpp_file *file)
+{
+  if (file->buffer)
+    free ((void *) file->buffer);
+  free ((void *) file->name);
+  free (file);
+}
+
+/* Release all the files allocated by this reader.  */
+static void
+destroy_all_cpp_files (cpp_reader *pfile)
+{
+  _cpp_file *iter = pfile->all_files;
+  while (iter)
+    {
+      _cpp_file *next = iter->next_file;
+      destroy_cpp_file (iter);
+      iter = next;
+    }
+}
+
+/* A hash of directory names.  The directory names are the path names
+   of files which contain a #include "", the included file name is
+   appended to this directories.
+
+   To avoid duplicate entries we follow the convention that all
+   non-empty directory names should end in a '/'.  DIR_NAME must be
+   stored in permanently allocated memory.  */
+static cpp_dir *
+make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
+{
+  struct file_hash_entry *entry, **hash_slot;
+  cpp_dir *dir;
+
+  hash_slot = (struct file_hash_entry **)
+    htab_find_slot_with_hash (pfile->dir_hash, dir_name,
+                             htab_hash_string (dir_name),
+                             INSERT);
+
+  /* Have we already hashed this directory?  */
+  for (entry = *hash_slot; entry; entry = entry->next)
+    if (entry->start_dir == NULL)
+      return entry->u.dir;
+
+  dir = XCNEW (cpp_dir);
+  dir->next = pfile->quote_include;
+  dir->name = (char *) dir_name;
+  dir->len = strlen (dir_name);
+  dir->sysp = sysp;
+  dir->construct = 0;
+
+  /* Store this new result in the hash table.  */
+  entry = new_file_hash_entry (pfile);
+  entry->next = *hash_slot;
+  entry->start_dir = NULL;
+  entry->location = pfile->line_table->highest_location;
+  entry->u.dir = dir;
+  *hash_slot = entry;
+
+  return dir;
+}
+
+/* Create a new block of memory for file hash entries.  */
+static void
+allocate_file_hash_entries (cpp_reader *pfile)
+{
+  struct file_hash_entry_pool *pool = XNEW (struct file_hash_entry_pool);
+  pool->file_hash_entries_used = 0;
+  pool->next = pfile->file_hash_entries;
+  pfile->file_hash_entries = pool;
+}
+
+/* Return a new file hash entry.  */
+static struct file_hash_entry *
+new_file_hash_entry (cpp_reader *pfile)
+{
+  unsigned int idx;
+  if (pfile->file_hash_entries->file_hash_entries_used == FILE_HASH_POOL_SIZE)
+    allocate_file_hash_entries (pfile);
+
+  idx = pfile->file_hash_entries->file_hash_entries_used++;
+  return &pfile->file_hash_entries->pool[idx];
+}
+
+/* Free the file hash entry pools.  */
+static void
+free_file_hash_entries (cpp_reader *pfile)
+{
+  struct file_hash_entry_pool *iter = pfile->file_hash_entries;
+  while (iter)
+    {
+      struct file_hash_entry_pool *next = iter->next;
+      free (iter);
+      iter = next;
+    }
+}
+
+/* Returns TRUE if a file FNAME has ever been successfully opened.
+   This routine is not intended to correctly handle filenames aliased
+   by links or redundant . or .. traversals etc.  */
+bool
+cpp_included (cpp_reader *pfile, const char *fname)
+{
+  struct file_hash_entry *entry;
+
+  entry = (struct file_hash_entry *)
+     htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
+
+  while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
+    entry = entry->next;
+
+  return entry != NULL;
+}
+
+/* Returns TRUE if a file FNAME has ever been successfully opened
+   before LOCATION.  This routine is not intended to correctly handle
+   filenames aliased by links or redundant . or .. traversals etc.  */
+bool
+cpp_included_before (cpp_reader *pfile, const char *fname,
+                    source_location location)
+{
+  struct file_hash_entry *entry;
+
+  entry = (struct file_hash_entry *)
+     htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
+
+  while (entry && (entry->start_dir == NULL || entry->u.file->err_no
+                  || entry->location > location))
+    entry = entry->next;
+
+  return entry != NULL;
+}
+
+/* Calculate the hash value of a file hash entry P.  */
+
+static hashval_t
+file_hash_hash (const void *p)
+{
+  struct file_hash_entry *entry = (struct file_hash_entry *) p;
+  const char *hname;
+  if (entry->start_dir)
+    hname = entry->u.file->name;
+  else
+    hname = entry->u.dir->name;
+
+  return htab_hash_string (hname);
+}
+
+/* Compare a string Q against a file hash entry P.  */
+static int
+file_hash_eq (const void *p, const void *q)
+{
+  struct file_hash_entry *entry = (struct file_hash_entry *) p;
+  const char *fname = (const char *) q;
+  const char *hname;
+
+  if (entry->start_dir)
+    hname = entry->u.file->name;
+  else
+    hname = entry->u.dir->name;
+
+  return strcmp (hname, fname) == 0;
+}
+
+/* Compare entries in the nonexistent file hash table.  These are just
+   strings.  */
+static int
+nonexistent_file_hash_eq (const void *p, const void *q)
+{
+  return strcmp (p, q) == 0;
+}
+
+/* Initialize everything in this source file.  */
+void
+_cpp_init_files (cpp_reader *pfile)
+{
+  pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
+                                       NULL, xcalloc, free);
+  pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
+                                       NULL, xcalloc, free);
+  allocate_file_hash_entries (pfile);
+  pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
+                                                   nonexistent_file_hash_eq,
+                                                   NULL, xcalloc, free);
+  _obstack_begin (&pfile->nonexistent_file_ob, 0, 0,
+                 (void *(*) (long)) xmalloc,
+                 (void (*) (void *)) free);
+}
+
+/* Finalize everything in this source file.  */
+void
+_cpp_cleanup_files (cpp_reader *pfile)
+{
+  htab_delete (pfile->file_hash);
+  htab_delete (pfile->dir_hash);
+  htab_delete (pfile->nonexistent_file_hash);
+  obstack_free (&pfile->nonexistent_file_ob, 0);
+  free_file_hash_entries (pfile);
+  destroy_all_cpp_files (pfile);
+}
+
+/* Make the parser forget about files it has seen.  This can be useful
+   for resetting the parser to start another run.  */
+void
+cpp_clear_file_cache (cpp_reader *pfile)
+{
+  _cpp_cleanup_files (pfile);
+  pfile->file_hash_entries = NULL;
+  pfile->all_files = NULL;
+  _cpp_init_files (pfile);
+}
+
+/* Enter a file name in the hash for the sake of cpp_included.  */
+void
+_cpp_fake_include (cpp_reader *pfile, const char *fname)
+{
+  _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true, 0);
+}
+
+/* Not everyone who wants to set system-header-ness on a buffer can
+   see the details of a buffer.  This is an exported interface because
+   fix-header needs it.  */
+void
+cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
+{
+  int flags = 0;
+  const struct line_maps *line_table = pfile->line_table;
+  const struct line_map *map = &line_table->maps[line_table->used-1];
+
+  /* 1 = system header, 2 = system header to be treated as C.  */
+  if (syshdr)
+    flags = 1 + (externc != 0);
+  pfile->buffer->sysp = flags;
+  _cpp_do_file_change (pfile, LC_RENAME, map->to_file,
+                      SOURCE_LINE (map, pfile->line_table->highest_line), flags);
+}
+
+/* Allow the client to change the current file.  Used by the front end
+   to achieve pseudo-file names like <built-in>.
+   If REASON is LC_LEAVE, then NEW_NAME must be NULL.  */
+void
+cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
+                const char *new_name)
+{
+  _cpp_do_file_change (pfile, reason, new_name, 1, 0);
+}
+
+/* Callback function for htab_traverse.  */
+static int
+report_missing_guard (void **slot, void *b)
+{
+  struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
+  int *bannerp = (int *) b;
+
+  /* Skip directories.  */
+  if (entry->start_dir != NULL)
+    {
+      _cpp_file *file = entry->u.file;
+
+      /* We don't want MI guard advice for the main file.  */
+      if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
+       {
+         if (*bannerp == 0)
+           {
+             fputs (_("Multiple include guards may be useful for:\n"),
+                    stderr);
+             *bannerp = 1;
+           }
+
+         fputs (entry->u.file->path, stderr);
+         putc ('\n', stderr);
+       }
+    }
+
+  return 0;
+}
+
+/* Report on all files that might benefit from a multiple include guard.
+   Triggered by -H.  */
+void
+_cpp_report_missing_guards (cpp_reader *pfile)
+{
+  int banner = 0;
+
+  htab_traverse (pfile->file_hash, report_missing_guard, &banner);
+}
+
+/* Locate HEADER, and determine whether it is newer than the current
+   file.  If it cannot be located or dated, return -1, if it is
+   newer, return 1, otherwise 0.  */
+int
+_cpp_compare_file_date (cpp_reader *pfile, const char *fname,
+                       int angle_brackets)
+{
+  _cpp_file *file;
+  struct cpp_dir *dir;
+
+  dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
+  if (!dir)
+    return -1;
+
+  file = _cpp_find_file (pfile, fname, dir, false, angle_brackets);
+  if (file->err_no)
+    return -1;
+
+  if (file->fd != -1)
+    {
+      close (file->fd);
+      file->fd = -1;
+    }
+
+  return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
+}
+
+/* Pushes the given file onto the buffer stack.  Returns nonzero if
+   successful.  */
+bool
+cpp_push_include (cpp_reader *pfile, const char *fname)
+{
+  return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
+}
+
+/* Do appropriate cleanup when a file INC's buffer is popped off the
+   input stack.  */
+void
+_cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
+{
+  /* Record the inclusion-preventing macro, which could be NULL
+     meaning no controlling macro.  */
+  if (pfile->mi_valid && file->cmacro == NULL)
+    file->cmacro = pfile->mi_cmacro;
+
+  /* Invalidate control macros in the #including file.  */
+  pfile->mi_valid = false;
+
+  if (file->buffer)
+    {
+      free ((void *) file->buffer);
+      file->buffer = NULL;
+      file->buffer_valid = false;
+    }
+}
+
+/* Inteface to file statistics record in _cpp_file structure. */
+struct stat *
+_cpp_get_file_stat (_cpp_file *file)
+{
+    return &file->st;
+}
+
+/* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
+   QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
+   directory of the including file.
+
+   If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
+void
+cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
+                       int quote_ignores_source_dir)
+{
+  pfile->quote_include = quote;
+  pfile->bracket_include = quote;
+  pfile->quote_ignores_source_dir = quote_ignores_source_dir;
+
+  for (; quote; quote = quote->next)
+    {
+      quote->name_map = NULL;
+      quote->len = strlen (quote->name);
+      if (quote == bracket)
+       pfile->bracket_include = bracket;
+    }
+}
+
+/* Append the file name to the directory to create the path, but don't
+   turn / into // or // into ///; // may be a namespace escape.  */
+static char *
+append_file_to_dir (const char *fname, cpp_dir *dir)
+{
+  size_t dlen, flen;
+  char *path;
+
+  dlen = dir->len;
+  flen = strlen (fname);
+  path = XNEWVEC (char, dlen + 1 + flen + 1);
+  memcpy (path, dir->name, dlen);
+  if (dlen && path[dlen - 1] != '/')
+    path[dlen++] = '/';
+  memcpy (&path[dlen], fname, flen + 1);
+
+  return path;
+}
+
+/* Read a space delimited string of unlimited length from a stdio
+   file F.  */
+static char *
+read_filename_string (int ch, FILE *f)
+{
+  char *alloc, *set;
+  int len;
+
+  len = 20;
+  set = alloc = XNEWVEC (char, len + 1);
+  if (! is_space (ch))
+    {
+      *set++ = ch;
+      while ((ch = getc (f)) != EOF && ! is_space (ch))
+       {
+         if (set - alloc == len)
+           {
+             len *= 2;
+             alloc = XRESIZEVEC (char, alloc, len + 1);
+             set = alloc + len / 2;
+           }
+         *set++ = ch;
+       }
+    }
+  *set = '\0';
+  ungetc (ch, f);
+  return alloc;
+}
+
+/* Read the file name map file for DIR.  */
+static void
+read_name_map (cpp_dir *dir)
+{
+  static const char FILE_NAME_MAP_FILE[] = "header.gcc";
+  char *name;
+  FILE *f;
+  size_t len, count = 0, room = 9;
+
+  len = dir->len;
+  name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
+  memcpy (name, dir->name, len);
+  if (len && name[len - 1] != '/')
+    name[len++] = '/';
+  strcpy (name + len, FILE_NAME_MAP_FILE);
+  f = fopen (name, "r");
+
+  dir->name_map = XNEWVEC (const char *, room);
+
+  /* Silently return NULL if we cannot open.  */
+  if (f)
+    {
+      int ch;
+
+      while ((ch = getc (f)) != EOF)
+       {
+         char *to;
+
+         if (is_space (ch))
+           continue;
+
+         if (count + 2 > room)
+           {
+             room += 8;
+             dir->name_map = XRESIZEVEC (const char *, dir->name_map, room);
+           }
+
+         dir->name_map[count] = read_filename_string (ch, f);
+         while ((ch = getc (f)) != EOF && is_hspace (ch))
+           ;
+
+         to = read_filename_string (ch, f);
+         if (IS_ABSOLUTE_PATH (to))
+           dir->name_map[count + 1] = to;
+         else
+           {
+             dir->name_map[count + 1] = append_file_to_dir (to, dir);
+             free (to);
+           }
+
+         count += 2;
+         while ((ch = getc (f)) != '\n')
+           if (ch == EOF)
+             break;
+       }
+
+      fclose (f);
+    }
+
+  /* Terminate the list of maps.  */
+  dir->name_map[count] = NULL;
+}
+
+/* Remap a FILE's name based on the file_name_map, if any, for
+   FILE->dir.  If the file name has any directory separators,
+   recursively check those directories too.  */
+static char *
+remap_filename (cpp_reader *pfile, _cpp_file *file)
+{
+  const char *fname, *p;
+  char *new_dir;
+  cpp_dir *dir;
+  size_t index, len;
+
+  dir = file->dir;
+  fname = file->name;
+
+  for (;;)
+    {
+      if (!dir->name_map)
+       read_name_map (dir);
+
+      for (index = 0; dir->name_map[index]; index += 2)
+       if (!strcmp (dir->name_map[index], fname))
+           return xstrdup (dir->name_map[index + 1]);
+
+      p = strchr (fname, '/');
+      if (!p || p == fname)
+       return NULL;
+
+      len = dir->len + (p - fname + 1);
+      new_dir = XNEWVEC (char, len + 1);
+      memcpy (new_dir, dir->name, dir->len);
+      memcpy (new_dir + dir->len, fname, p - fname + 1);
+      new_dir[len] = '\0';
+
+      dir = make_cpp_dir (pfile, new_dir, dir->sysp);
+      fname = p + 1;
+    }
+}
+
+/* Returns true if PCHNAME is a valid PCH file for FILE.  */
+static bool
+validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
+{
+  const char *saved_path = file->path;
+  bool valid = false;
+
+  file->path = pchname;
+  if (open_file (file))
+    {
+      valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
+
+      if (!valid)
+       {
+         close (file->fd);
+         file->fd = -1;
+       }
+
+      if (CPP_OPTION (pfile, print_include_names))
+       {
+         unsigned int i;
+         for (i = 1; i < pfile->line_table->depth; i++)
+           putc ('.', stderr);
+         fprintf (stderr, "%c %s\n",
+                  valid ? '!' : 'x', pchname);
+       }
+    }
+
+  file->path = saved_path;
+  return valid;
+}
+
+/* Get the path associated with the _cpp_file F.  The path includes
+   the base name from the include directive and the directory it was
+   found in via the search path.  */
+
+const char *
+cpp_get_path (struct _cpp_file *f)
+{
+  return f->path;
+}
+
+/* Get the directory associated with the _cpp_file F.  */
+
+cpp_dir *
+cpp_get_dir (struct _cpp_file *f)
+{
+  return f->dir;
+}
+
+/* Get the cpp_buffer currently associated with the cpp_reader
+   PFILE.  */
+
+cpp_buffer *
+cpp_get_buffer (cpp_reader *pfile)
+{
+  return pfile->buffer;
+}
+
+/* Get the _cpp_file associated with the cpp_buffer B.  */
+
+_cpp_file *
+cpp_get_file (cpp_buffer *b)
+{
+  return b->file;
+}
+
+/* Get the previous cpp_buffer given a cpp_buffer B.  The previous
+   buffer is the buffer that included the given buffer.  */
+
+cpp_buffer *
+cpp_get_prev (cpp_buffer *b)
+{
+  return b->prev;
+}
+\f
+/* This data structure holds the list of header files that were seen
+   while the PCH was being built.  The 'entries' field is kept sorted
+   in memcmp() order; yes, this means that on little-endian systems,
+   it's sorted initially by the least-significant byte of 'size', but
+   that's OK.  The code does rely on having entries with the same size
+   next to each other.  */
+
+struct pchf_entry {
+  /* The size of this file.  This is used to save running a MD5 checksum
+     if the sizes don't match.  */
+  off_t size;
+  /* The MD5 checksum of this file.  */
+  unsigned char sum[16];
+  /* Is this file to be included only once?  */
+  bool once_only;
+};
+
+struct pchf_data {
+  /* Number of pchf_entry structures.  */
+  size_t count;
+
+  /* Are there any values with once_only set?
+     This is used as an optimisation, it means we don't have to search
+     the structure if we're processing a regular #include.  */
+  bool have_once_only;
+
+  struct pchf_entry entries[1];
+};
+
+static struct pchf_data *pchf;
+
+/* A qsort ordering function for pchf_entry structures.  */
+
+static int
+pchf_save_compare (const void *e1, const void *e2)
+{
+  return memcmp (e1, e2, sizeof (struct pchf_entry));
+}
+
+/* Create and write to F a pchf_data structure.  */
+
+bool
+_cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
+{
+  size_t count = 0;
+  struct pchf_data *result;
+  size_t result_size;
+  _cpp_file *f;
+
+  for (f = pfile->all_files; f; f = f->next_file)
+    ++count;
+
+  result_size = (sizeof (struct pchf_data)
+                + sizeof (struct pchf_entry) * (count - 1));
+  result = XCNEWVAR (struct pchf_data, result_size);
+
+  result->count = 0;
+  result->have_once_only = false;
+
+  for (f = pfile->all_files; f; f = f->next_file)
+    {
+      size_t count;
+
+      /* This should probably never happen, since if a read error occurred
+        the PCH file shouldn't be written...  */
+      if (f->dont_read || f->err_no)
+       continue;
+
+      if (f->stack_count == 0)
+       continue;
+
+      count = result->count++;
+
+      result->entries[count].once_only = f->once_only;
+      /* |= is avoided in the next line because of an HP C compiler bug */
+      result->have_once_only = result->have_once_only | f->once_only;
+      if (f->buffer_valid)
+       md5_buffer ((const char *)f->buffer,
+                   f->st.st_size, result->entries[count].sum);
+      else
+       {
+         FILE *ff;
+         int oldfd = f->fd;
+
+         if (!open_file (f))
+           {
+             open_file_failed (pfile, f, 0);
+             return false;
+           }
+         ff = fdopen (f->fd, "rb");
+         md5_stream (ff, result->entries[count].sum);
+         fclose (ff);
+         f->fd = oldfd;
+       }
+      result->entries[count].size = f->st.st_size;
+    }
+
+  result_size = (sizeof (struct pchf_data)
+                 + sizeof (struct pchf_entry) * (result->count - 1));
+
+  qsort (result->entries, result->count, sizeof (struct pchf_entry),
+        pchf_save_compare);
+
+  return fwrite (result, result_size, 1, fp) == 1;
+}
+
+/* Read the pchf_data structure from F.  */
+
+bool
+_cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
+{
+  struct pchf_data d;
+
+  if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
+       != 1)
+    return false;
+
+  pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data)
+                 + sizeof (struct pchf_entry) * (d.count - 1));
+  memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
+  if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
+      != d.count)
+    return false;
+  return true;
+}
+
+/* The parameters for pchf_compare.  */
+
+struct pchf_compare_data
+{
+  /* The size of the file we're looking for.  */
+  off_t size;
+
+  /* The MD5 checksum of the file, if it's been computed.  */
+  unsigned char sum[16];
+
+  /* Is SUM valid?  */
+  bool sum_computed;
+
+  /* Do we need to worry about entries that don't have ONCE_ONLY set?  */
+  bool check_included;
+
+  /* The file that we're searching for.  */
+  _cpp_file *f;
+};
+
+/* bsearch comparison function; look for D_P in E_P.  */
+
+static int
+pchf_compare (const void *d_p, const void *e_p)
+{
+  const struct pchf_entry *e = (const struct pchf_entry *)e_p;
+  struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
+  int result;
+
+  result = memcmp (&d->size, &e->size, sizeof (off_t));
+  if (result != 0)
+    return result;
+
+  if (! d->sum_computed)
+    {
+      _cpp_file *const f = d->f;
+
+      md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
+      d->sum_computed = true;
+    }
+
+  result = memcmp (d->sum, e->sum, 16);
+  if (result != 0)
+    return result;
+
+  if (d->check_included || e->once_only)
+    return 0;
+  else
+    return 1;
+}
+
+/* Check that F is not in a list read from a PCH file (if any).
+   Assumes that f->buffer_valid is true.  Return TRUE if the file
+   should not be read.  */
+
+static bool
+check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
+                           _cpp_file *f,
+                           bool check_included)
+{
+  struct pchf_compare_data d;
+
+  if (pchf == NULL
+      || (! check_included && ! pchf->have_once_only))
+    return false;
+
+  d.size = f->st.st_size;
+  d.sum_computed = false;
+  d.f = f;
+  d.check_included = check_included;
+  return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
+                 pchf_compare) != NULL;
+}
diff --git a/libcpp/identifiers.c b/libcpp/identifiers.c
new file mode 100644 (file)
index 0000000..c22f4a7
--- /dev/null
@@ -0,0 +1,118 @@
+/* Hash tables for the CPP library.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
+   1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Written by Per Bothner, 1994.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+static cpp_hashnode *alloc_node (hash_table *);
+
+/* Return an identifier node for hashtable.c.  Used by cpplib except
+   when integrated with the C front ends.  */
+static cpp_hashnode *
+alloc_node (hash_table *table)
+{
+  cpp_hashnode *node;
+
+  node = XOBNEW (&table->pfile->hash_ob, cpp_hashnode);
+  memset (node, 0, sizeof (cpp_hashnode));
+  return node;
+}
+
+/* Set up the identifier hash table.  Use TABLE if non-null, otherwise
+   create our own.  */
+void
+_cpp_init_hashtable (cpp_reader *pfile, hash_table *table)
+{
+  struct spec_nodes *s;
+
+  if (table == NULL)
+    {
+      pfile->our_hashtable = 1;
+      table = ht_create (13);  /* 8K (=2^13) entries.  */
+      table->alloc_node = (hashnode (*) (hash_table *)) alloc_node;
+
+      _obstack_begin (&pfile->hash_ob, 0, 0,
+                     (void *(*) (long)) xmalloc,
+                     (void (*) (void *)) free);
+    }
+
+  table->pfile = pfile;
+  pfile->hash_table = table;
+
+  /* Now we can initialize things that use the hash table.  */
+  _cpp_init_directives (pfile);
+  _cpp_init_internal_pragmas (pfile);
+
+  s = &pfile->spec_nodes;
+  s->n_defined         = cpp_lookup (pfile, DSC("defined"));
+  s->n_true            = cpp_lookup (pfile, DSC("true"));
+  s->n_false           = cpp_lookup (pfile, DSC("false"));
+  s->n__VA_ARGS__       = cpp_lookup (pfile, DSC("__VA_ARGS__"));
+  s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC;
+}
+
+/* Tear down the identifier hash table.  */
+void
+_cpp_destroy_hashtable (cpp_reader *pfile)
+{
+  if (pfile->our_hashtable)
+    {
+      ht_destroy (pfile->hash_table);
+      obstack_free (&pfile->hash_ob, 0);
+    }
+}
+
+/* Returns the hash entry for the STR of length LEN, creating one
+   if necessary.  */
+cpp_hashnode *
+cpp_lookup (cpp_reader *pfile, const unsigned char *str, unsigned int len)
+{
+  /* ht_lookup cannot return NULL.  */
+  return CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_ALLOC));
+}
+
+/* Determine whether the str STR, of length LEN, is a defined macro.  */
+int
+cpp_defined (cpp_reader *pfile, const unsigned char *str, int len)
+{
+  cpp_hashnode *node;
+
+  node = CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_NO_INSERT));
+
+  /* If it's of type NT_MACRO, it cannot be poisoned.  */
+  return node && node->type == NT_MACRO;
+}
+
+/* For all nodes in the hashtable, callback CB with parameters PFILE,
+   the node, and V.  */
+void
+cpp_forall_identifiers (cpp_reader *pfile, cpp_cb cb, void *v)
+{
+  /* We don't need a proxy since the hash table's identifier comes
+     first in cpp_hashnode.  */
+  ht_forall (pfile->hash_table, (ht_cb) cb, v);
+}
diff --git a/libcpp/include/cpp-id-data.h b/libcpp/include/cpp-id-data.h
new file mode 100644 (file)
index 0000000..2445186
--- /dev/null
@@ -0,0 +1,78 @@
+/* Structures that hang off cpp_identifier, for PCH.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "cpplib.h"
+
+#if !defined (HAVE_UCHAR) && !defined (IN_GCC)
+typedef unsigned char uchar;
+#endif
+
+#define U (const unsigned char *)  /* Intended use: U"string" */
+
+/* Chained list of answers to an assertion.  */
+struct answer GTY(())
+{
+  struct answer *next;
+  unsigned int count;
+  cpp_token GTY ((length ("%h.count"))) first[1];
+};
+
+/* Each macro definition is recorded in a cpp_macro structure.
+   Variadic macros cannot occur with traditional cpp.  */
+struct cpp_macro GTY(())
+{
+  /* Parameters, if any.  */
+  cpp_hashnode ** GTY ((nested_ptr (union tree_node,
+               "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+                       "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
+                       length ("%h.paramc")))
+    params;
+
+  /* Replacement tokens (ISO) or replacement text (traditional).  See
+     comment at top of cpptrad.c for how traditional function-like
+     macros are encoded.  */
+  union cpp_macro_u
+  {
+    cpp_token * GTY ((tag ("0"), length ("%0.count"))) tokens;
+    const unsigned char * GTY ((tag ("1"))) text;
+  } GTY ((desc ("%1.traditional"))) exp;
+
+  /* Definition line number.  */
+  source_location line;
+
+  /* Number of tokens in expansion, or bytes for traditional macros.  */
+  unsigned int count;
+
+  /* Number of parameters.  */
+  unsigned short paramc;
+
+  /* If a function-like macro.  */
+  unsigned int fun_like : 1;
+
+  /* If a variadic macro.  */
+  unsigned int variadic : 1;
+
+  /* If macro defined in system header.  */
+  unsigned int syshdr   : 1;
+
+  /* Nonzero if it has been expanded or had its existence tested.  */
+  unsigned int used     : 1;
+
+  /* Indicate which field of 'exp' is in use.  */
+  unsigned int traditional : 1;
+};
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
new file mode 100644 (file)
index 0000000..ac1d032
--- /dev/null
@@ -0,0 +1,882 @@
+/* Definitions for CPP library.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004, 2005, 2007
+   Free Software Foundation, Inc.
+   Written by Per Bothner, 1994-95.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+#ifndef LIBCPP_CPPLIB_H
+#define LIBCPP_CPPLIB_H
+
+#include <sys/types.h>
+#include "symtab.h"
+#include "line-map.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct cpp_reader cpp_reader;
+typedef struct cpp_buffer cpp_buffer;
+typedef struct cpp_options cpp_options;
+typedef struct cpp_token cpp_token;
+typedef struct cpp_string cpp_string;
+typedef struct cpp_hashnode cpp_hashnode;
+typedef struct cpp_macro cpp_macro;
+typedef struct cpp_callbacks cpp_callbacks;
+typedef struct cpp_dir cpp_dir;
+
+struct answer;
+struct _cpp_file;
+
+/* The first three groups, apart from '=', can appear in preprocessor
+   expressions (+= and -= are used to indicate unary + and - resp.).
+   This allows a lookup table to be implemented in _cpp_parse_expr.
+
+   The first group, to CPP_LAST_EQ, can be immediately followed by an
+   '='.  The lexer needs operators ending in '=', like ">>=", to be in
+   the same order as their counterparts without the '=', like ">>".
+
+   See the cpp_operator table optab in expr.c if you change the order or
+   add or remove anything in the first group.  */
+
+#define TTYPE_TABLE                                                    \
+  OP(EQ,               "=")                                            \
+  OP(NOT,              "!")                                            \
+  OP(GREATER,          ">")    /* compare */                           \
+  OP(LESS,             "<")                                            \
+  OP(PLUS,             "+")    /* math */                              \
+  OP(MINUS,            "-")                                            \
+  OP(MULT,             "*")                                            \
+  OP(DIV,              "/")                                            \
+  OP(MOD,              "%")                                            \
+  OP(AND,              "&")    /* bit ops */                           \
+  OP(OR,               "|")                                            \
+  OP(XOR,              "^")                                            \
+  OP(RSHIFT,           ">>")                                           \
+  OP(LSHIFT,           "<<")                                           \
+                                                                       \
+  OP(COMPL,            "~")                                            \
+  OP(AND_AND,          "&&")   /* logical */                           \
+  OP(OR_OR,            "||")                                           \
+  OP(QUERY,            "?")                                            \
+  OP(COLON,            ":")                                            \
+  OP(COMMA,            ",")    /* grouping */                          \
+  OP(OPEN_PAREN,       "(")                                            \
+  OP(CLOSE_PAREN,      ")")                                            \
+  TK(EOF,              NONE)                                           \
+  OP(EQ_EQ,            "==")   /* compare */                           \
+  OP(NOT_EQ,           "!=")                                           \
+  OP(GREATER_EQ,       ">=")                                           \
+  OP(LESS_EQ,          "<=")                                           \
+                                                                       \
+  /* These two are unary + / - in preprocessor expressions.  */                \
+  OP(PLUS_EQ,          "+=")   /* math */                              \
+  OP(MINUS_EQ,         "-=")                                           \
+                                                                       \
+  OP(MULT_EQ,          "*=")                                           \
+  OP(DIV_EQ,           "/=")                                           \
+  OP(MOD_EQ,           "%=")                                           \
+  OP(AND_EQ,           "&=")   /* bit ops */                           \
+  OP(OR_EQ,            "|=")                                           \
+  OP(XOR_EQ,           "^=")                                           \
+  OP(RSHIFT_EQ,                ">>=")                                          \
+  OP(LSHIFT_EQ,                "<<=")                                          \
+  /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */          \
+  OP(HASH,             "#")    /* digraphs */                          \
+  OP(PASTE,            "##")                                           \
+  OP(OPEN_SQUARE,      "[")                                            \
+  OP(CLOSE_SQUARE,     "]")                                            \
+  OP(OPEN_BRACE,       "{")                                            \
+  OP(CLOSE_BRACE,      "}")                                            \
+  /* The remainder of the punctuation. Order is not significant.  */   \
+  OP(SEMICOLON,                ";")    /* structure */                         \
+  OP(ELLIPSIS,         "...")                                          \
+  OP(PLUS_PLUS,                "++")   /* increment */                         \
+  OP(MINUS_MINUS,      "--")                                           \
+  OP(DEREF,            "->")   /* accessors */                         \
+  OP(FERED,            "<-")   /* wiring */                            \
+  OP(DOT,              ".")                                            \
+  OP(SCOPE,            "::")                                           \
+  OP(DEREF_STAR,       "->*")                                          \
+  OP(DOT_STAR,         ".*")                                           \
+  OP(ATSIGN,           "@")  /* used in Objective-C */                 \
+                                                                       \
+  TK(NAME,             IDENT)   /* word */                             \
+  TK(AT_NAME,          IDENT)   /* @word - Objective-C */              \
+  TK(NUMBER,           LITERAL) /* 34_be+ta  */                        \
+                                                                       \
+  TK(CHAR,             LITERAL) /* 'char' */                           \
+  TK(WCHAR,            LITERAL) /* L'char' */                          \
+  TK(OTHER,            LITERAL) /* stray punctuation */                \
+                                                                       \
+  TK(STRING,           LITERAL) /* "string" */                         \
+  TK(WSTRING,          LITERAL) /* L"string" */                        \
+  TK(OBJC_STRING,      LITERAL) /* @"string" - Objective-C */          \
+  TK(HEADER_NAME,      LITERAL) /* <stdio.h> in #include */            \
+                                                                       \
+  TK(COMMENT,          LITERAL) /* Only if output comments.  */        \
+                                /* SPELL_LITERAL happens to DTRT.  */  \
+  TK(MACRO_ARG,                NONE)    /* Macro argument.  */                 \
+  TK(PRAGMA,           NONE)    /* Only for deferred pragmas.  */      \
+  TK(PRAGMA_EOL,       NONE)    /* End-of-line for deferred pragmas.  */ \
+  TK(PADDING,          NONE)    /* Whitespace for -E.  */
+
+#define OP(e, s) CPP_ ## e,
+#define TK(e, s) CPP_ ## e,
+enum cpp_ttype
+{
+  TTYPE_TABLE
+  N_TTYPES,
+
+  /* Positions in the table.  */
+  CPP_LAST_EQ        = CPP_LSHIFT,
+  CPP_FIRST_DIGRAPH  = CPP_HASH,
+  CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
+  CPP_LAST_CPP_OP    = CPP_LESS_EQ
+};
+#undef OP
+#undef TK
+
+/* C language kind, used when calling cpp_create_reader.  */
+enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
+            CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX0X, CLK_CXX0X, CLK_ASM};
+
+/* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
+struct cpp_string GTY(())
+{
+  unsigned int len;
+  const unsigned char *text;
+};
+
+/* Flags for the cpp_token structure.  */
+#define PREV_WHITE     (1 << 0) /* If whitespace before this token.  */
+#define DIGRAPH                (1 << 1) /* If it was a digraph.  */
+#define STRINGIFY_ARG  (1 << 2) /* If macro argument to be stringified.  */
+#define PASTE_LEFT     (1 << 3) /* If on LHS of a ## operator.  */
+#define NAMED_OP       (1 << 4) /* C++ named operators.  */
+#define NO_EXPAND      (1 << 5) /* Do not macro-expand this token.  */
+#define BOL            (1 << 6) /* Token at beginning of line.  */
+#define PURE_ZERO      (1 << 7) /* Single 0 digit, used by the C++ frontend,
+                                   set in c-lex.c.  */
+
+/* Specify which field, if any, of the cpp_token union is used.  */
+
+enum cpp_token_fld_kind {
+  CPP_TOKEN_FLD_NODE,
+  CPP_TOKEN_FLD_SOURCE,
+  CPP_TOKEN_FLD_STR,
+  CPP_TOKEN_FLD_ARG_NO,
+  CPP_TOKEN_FLD_PRAGMA,
+  CPP_TOKEN_FLD_NONE
+};
+
+/* A preprocessing token.  This has been carefully packed and should
+   occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
+struct cpp_token GTY(())
+{
+  source_location src_loc;     /* Location of first char of token.  */
+  ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
+  unsigned char flags;         /* flags - see above */
+
+  union cpp_token_u
+  {
+    /* An identifier.  */
+    cpp_hashnode *
+      GTY ((nested_ptr (union tree_node,
+               "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+                       "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
+           tag ("CPP_TOKEN_FLD_NODE")))
+        node;
+        
+    /* Inherit padding from this token.  */
+    cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
+
+    /* A string, or number.  */
+    struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
+
+    /* Argument no. for a CPP_MACRO_ARG.  */
+    unsigned int GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) arg_no;
+
+    /* Caller-supplied identifier for a CPP_PRAGMA.  */
+    unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
+  } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
+};
+
+/* Say which field is in use.  */
+extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
+
+/* A type wide enough to hold any multibyte source character.
+   cpplib's character constant interpreter requires an unsigned type.
+   Also, a typedef for the signed equivalent.
+   The width of this type is capped at 32 bits; there do exist targets
+   where wchar_t is 64 bits, but only in a non-default mode, and there
+   would be no meaningful interpretation for a wchar_t value greater
+   than 2^32 anyway -- the widest wide-character encoding around is
+   ISO 10646, which stops at 2^31.  */
+#if CHAR_BIT * SIZEOF_INT >= 32
+# define CPPCHAR_SIGNED_T int
+#elif CHAR_BIT * SIZEOF_LONG >= 32
+# define CPPCHAR_SIGNED_T long
+#else
+# error "Cannot find a least-32-bit signed integer type"
+#endif
+typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
+typedef CPPCHAR_SIGNED_T cppchar_signed_t;
+
+/* Style of header dependencies to generate.  */
+enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
+
+/* The possible normalization levels, from most restrictive to least.  */
+enum cpp_normalize_level {
+  /* In NFKC.  */
+  normalized_KC = 0,
+  /* In NFC.  */
+  normalized_C,
+  /* In NFC, except for subsequences where being in NFC would make
+     the identifier invalid.  */
+  normalized_identifier_C,
+  /* Not normalized at all.  */
+  normalized_none
+};
+
+/* This structure is nested inside struct cpp_reader, and
+   carries all the options visible to the command line.  */
+struct cpp_options
+{
+  /* Characters between tab stops.  */
+  unsigned int tabstop;
+
+  /* The language we're preprocessing.  */
+  enum c_lang lang;
+
+  /* Nonzero means use extra default include directories for C++.  */
+  unsigned char cplusplus;
+
+  /* Nonzero means handle cplusplus style comments.  */
+  unsigned char cplusplus_comments;
+
+  /* Nonzero means define __OBJC__, treat @ as a special token, and
+     use the OBJC[PLUS]_INCLUDE_PATH environment variable.  */
+  unsigned char objc;
+
+  /* Nonzero means don't copy comments into the output file.  */
+  unsigned char discard_comments;
+
+  /* Nonzero means don't copy comments into the output file during
+     macro expansion.  */
+  unsigned char discard_comments_in_macro_exp;
+
+  /* Nonzero means process the ISO trigraph sequences.  */
+  unsigned char trigraphs;
+
+  /* Nonzero means process the ISO digraph sequences.  */
+  unsigned char digraphs;
+
+  /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
+  unsigned char extended_numbers;
+
+  /* Nonzero means print names of header files (-H).  */
+  unsigned char print_include_names;
+
+  /* Nonzero means cpp_pedwarn causes a hard error.  */
+  unsigned char pedantic_errors;
+
+  /* Nonzero means don't print warning messages.  */
+  unsigned char inhibit_warnings;
+
+  /* Nonzero means complain about deprecated features.  */
+  unsigned char warn_deprecated;
+
+  /* Nonzero means don't suppress warnings from system headers.  */
+  unsigned char warn_system_headers;
+
+  /* Nonzero means don't print error messages.  Has no option to
+     select it, but can be set by a user of cpplib (e.g. fix-header).  */
+  unsigned char inhibit_errors;
+
+  /* Nonzero means warn if slash-star appears in a comment.  */
+  unsigned char warn_comments;
+
+  /* Nonzero means warn if a user-supplied include directory does not
+     exist.  */
+  unsigned char warn_missing_include_dirs;
+
+  /* Nonzero means warn if there are any trigraphs.  */
+  unsigned char warn_trigraphs;
+
+  /* Nonzero means warn about multicharacter charconsts.  */
+  unsigned char warn_multichar;
+
+  /* Nonzero means warn about various incompatibilities with
+     traditional C.  */
+  unsigned char warn_traditional;
+
+  /* Nonzero means warn about long long numeric constants.  */
+  unsigned char warn_long_long;
+
+  /* Nonzero means warn about text after an #endif (or #else).  */
+  unsigned char warn_endif_labels;
+
+  /* Nonzero means warn about implicit sign changes owing to integer
+     promotions.  */
+  unsigned char warn_num_sign_change;
+
+  /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
+     Presumably the usage is protected by the appropriate #ifdef.  */
+  unsigned char warn_variadic_macros;
+
+  /* Nonzero means turn warnings into errors.  */
+  unsigned char warnings_are_errors;
+
+  /* Nonzero means we should look for header.gcc files that remap file
+     names.  */
+  unsigned char remap;
+
+  /* Zero means dollar signs are punctuation.  */
+  unsigned char dollars_in_ident;
+
+  /* Nonzero means UCNs are accepted in identifiers.  */
+  unsigned char extended_identifiers;
+
+  /* True if we should warn about dollars in identifiers or numbers
+     for this translation unit.  */
+  unsigned char warn_dollars;
+
+  /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
+  unsigned char warn_undef;
+
+  /* Nonzero means warn of unused macros from the main file.  */
+  unsigned char warn_unused_macros;
+
+  /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
+  unsigned char c99;
+
+  /* Nonzero if we are conforming to a specific C or C++ standard.  */
+  unsigned char std;
+
+  /* Nonzero means give all the error messages the ANSI standard requires.  */
+  unsigned char pedantic;
+
+  /* Nonzero means we're looking at already preprocessed code, so don't
+     bother trying to do macro expansion and whatnot.  */
+  unsigned char preprocessed;
+
+  /* Print column number in error messages.  */
+  unsigned char show_column;
+
+  /* Nonzero means handle C++ alternate operator names.  */
+  unsigned char operator_names;
+
+  /* True for traditional preprocessing.  */
+  unsigned char traditional;
+
+  /* Holds the name of the target (execution) character set.  */
+  const char *narrow_charset;
+
+  /* Holds the name of the target wide character set.  */
+  const char *wide_charset;
+
+  /* Holds the name of the input character set.  */
+  const char *input_charset;
+
+  /* The minimum permitted level of normalization before a warning
+     is generated.  */
+  enum cpp_normalize_level warn_normalize;
+
+  /* True to warn about precompiled header files we couldn't use.  */
+  bool warn_invalid_pch;
+
+  /* True if dependencies should be restored from a precompiled header.  */
+  bool restore_pch_deps;
+
+  /* Dependency generation.  */
+  struct
+  {
+    /* Style of header dependencies to generate.  */
+    enum cpp_deps_style style;
+
+    /* Assume missing files are generated files.  */
+    bool missing_files;
+
+    /* Generate phony targets for each dependency apart from the first
+       one.  */
+    bool phony_targets;
+
+    /* If true, no dependency is generated on the main file.  */
+    bool ignore_main_file;
+  } deps;
+
+  /* Target-specific features set by the front end or client.  */
+
+  /* Precision for target CPP arithmetic, target characters, target
+     ints and target wide characters, respectively.  */
+  size_t precision, char_precision, int_precision, wchar_precision;
+
+  /* True means chars (wide chars) are unsigned.  */
+  bool unsigned_char, unsigned_wchar;
+
+  /* True if the most significant byte in a word has the lowest
+     address in memory.  */
+  bool bytes_big_endian;
+
+  /* Nonzero means __STDC__ should have the value 0 in system headers.  */
+  unsigned char stdc_0_in_system_headers;
+
+  /* True means error callback should be used for diagnostics.  */
+  bool client_diagnostic;
+
+  /* True disables tokenization outside of preprocessing directives. */
+  bool directives_only;
+};
+
+/* Callback for header lookup for HEADER, which is the name of a
+   source file.  It is used as a method of last resort to find headers
+   that are not otherwise found during the normal include processing.
+   The return value is the malloced name of a header to try and open,
+   if any, or NULL otherwise.  This callback is called only if the
+   header is otherwise unfound.  */
+typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
+
+/* Call backs to cpplib client.  */
+struct cpp_callbacks
+{
+  /* Called when a new line of preprocessed output is started.  */
+  void (*line_change) (cpp_reader *, const cpp_token *, int);
+
+  /* Called when switching to/from a new file.
+     The line_map is for the new file.  It is NULL if there is no new file.
+     (In C this happens when done with <built-in>+<command line> and also
+     when done with a main file.)  This can be used for resource cleanup.  */
+  void (*file_change) (cpp_reader *, const struct line_map *);
+
+  void (*dir_change) (cpp_reader *, const char *);
+  void (*include) (cpp_reader *, unsigned int, const unsigned char *,
+                  const char *, int, const cpp_token **);
+  void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
+  void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
+  void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
+  void (*def_pragma) (cpp_reader *, unsigned int);
+  int (*valid_pch) (cpp_reader *, const char *, int);
+  void (*read_pch) (cpp_reader *, const char *, int, const char *);
+  missing_header_cb missing_header;
+
+  /* Called to emit a diagnostic if client_diagnostic option is true.
+     This callback receives the translated message.  */
+  void (*error) (cpp_reader *, int, const char *, va_list *)
+       ATTRIBUTE_FPTR_PRINTF(3,0);
+};
+
+/* Chain of directories to look for include files in.  */
+struct cpp_dir
+{
+  /* NULL-terminated singly-linked list.  */
+  struct cpp_dir *next;
+
+  /* NAME of the directory, NUL-terminated.  */
+  char *name;
+  unsigned int len;
+
+  /* One if a system header, two if a system header that has extern
+     "C" guards for C++.  */
+  unsigned char sysp;
+
+  /* Mapping of file names for this directory for MS-DOS and related
+     platforms.  A NULL-terminated array of (from, to) pairs.  */
+  const char **name_map;
+
+  /* Routine to construct pathname, given the search path name and the
+     HEADER we are trying to find, return a constructed pathname to
+     try and open.  If this is NULL, the constructed pathname is as
+     constructed by append_file_to_dir.  */
+  char *(*construct) (const char *header, cpp_dir *dir);
+
+  /* The C front end uses these to recognize duplicated
+     directories in the search path.  */
+  ino_t ino;
+  dev_t dev;
+
+  /* Is this a user-supplied directory? */
+  bool user_supplied_p;
+};
+
+/* Name under which this program was invoked.  */
+extern const char *progname;
+
+/* The structure of a node in the hash table.  The hash table has
+   entries for all identifiers: either macros defined by #define
+   commands (type NT_MACRO), assertions created with #assert
+   (NT_ASSERTION), or neither of the above (NT_VOID).  Builtin macros
+   like __LINE__ are flagged NODE_BUILTIN.  Poisoned identifiers are
+   flagged NODE_POISONED.  NODE_OPERATOR (C++ only) indicates an
+   identifier that behaves like an operator such as "xor".
+   NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
+   diagnostic may be required for this node.  Currently this only
+   applies to __VA_ARGS__ and poisoned identifiers.  */
+
+/* Hash node flags.  */
+#define NODE_OPERATOR  (1 << 0)        /* C++ named operator.  */
+#define NODE_POISONED  (1 << 1)        /* Poisoned identifier.  */
+#define NODE_BUILTIN   (1 << 2)        /* Builtin macro.  */
+#define NODE_DIAGNOSTIC (1 << 3)       /* Possible diagnostic when lexed.  */
+#define NODE_WARN      (1 << 4)        /* Warn if redefined or undefined.  */
+#define NODE_DISABLED  (1 << 5)        /* A disabled macro.  */
+#define NODE_MACRO_ARG (1 << 6)        /* Used during #define processing.  */
+
+/* Different flavors of hash node.  */
+enum node_type
+{
+  NT_VOID = 0,    /* No definition yet.  */
+  NT_MACRO,       /* A macro of some form.  */
+  NT_ASSERTION    /* Predicate for #assert.  */
+};
+
+/* Different flavors of builtin macro.  _Pragma is an operator, but we
+   handle it with the builtin code for efficiency reasons.  */
+enum builtin_type
+{
+  BT_SPECLINE = 0,             /* `__LINE__' */
+  BT_DATE,                     /* `__DATE__' */
+  BT_FILE,                     /* `__FILE__' */
+  BT_BASE_FILE,                        /* `__BASE_FILE__' */
+  BT_INCLUDE_LEVEL,            /* `__INCLUDE_LEVEL__' */
+  BT_TIME,                     /* `__TIME__' */
+  BT_STDC,                     /* `__STDC__' */
+  BT_PRAGMA,                   /* `_Pragma' operator */
+  BT_TIMESTAMP,                        /* `__TIMESTAMP__' */
+  BT_COUNTER                   /* `__COUNTER__' */
+};
+
+#define CPP_HASHNODE(HNODE)    ((cpp_hashnode *) (HNODE))
+#define HT_NODE(NODE)          ((ht_identifier *) (NODE))
+#define NODE_LEN(NODE)         HT_LEN (&(NODE)->ident)
+#define NODE_NAME(NODE)                HT_STR (&(NODE)->ident)
+
+/* Specify which field, if any, of the union is used.  */
+
+enum {
+  NTV_MACRO,
+  NTV_ANSWER,
+  NTV_BUILTIN,
+  NTV_ARGUMENT,
+  NTV_NONE
+};
+
+#define CPP_HASHNODE_VALUE_IDX(HNODE)                          \
+  ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT               \
+   : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN)    \
+                              ? NTV_BUILTIN : NTV_MACRO)       \
+   : HNODE.type == NT_ASSERTION ? NTV_ANSWER                   \
+   : NTV_NONE)
+
+/* The common part of an identifier node shared amongst all 3 C front
+   ends.  Also used to store CPP identifiers, which are a superset of
+   identifiers in the grammatical sense.  */
+
+union _cpp_hashnode_value GTY(())
+{
+  /* If a macro.  */
+  cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
+  /* Answers to an assertion.  */
+  struct answer * GTY ((tag ("NTV_ANSWER"))) answers;
+  /* Code for a builtin macro.  */
+  enum builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
+  /* Macro argument index.  */
+  unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
+};
+
+struct cpp_hashnode GTY(())
+{
+  struct ht_identifier ident;
+  unsigned int is_directive : 1;
+  unsigned int directive_index : 7;    /* If is_directive,
+                                          then index into directive table.
+                                          Otherwise, a NODE_OPERATOR.  */
+  unsigned char rid_code;              /* Rid code - for front ends.  */
+  ENUM_BITFIELD(node_type) type : 8;   /* CPP node type.  */
+  unsigned char flags;                 /* CPP flags.  */
+
+  union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
+};
+
+/* Call this first to get a handle to pass to other functions.
+
+   If you want cpplib to manage its own hashtable, pass in a NULL
+   pointer.  Otherwise you should pass in an initialized hash table
+   that cpplib will share; this technique is used by the C front
+   ends.  */
+extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
+                                     struct line_maps *);
+
+/* Reset the cpp_reader's line_map.  This is only used after reading a
+   PCH file.  */
+extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
+
+/* Call this to change the selected language standard (e.g. because of
+   command line options).  */
+extern void cpp_set_lang (cpp_reader *, enum c_lang);
+
+/* Set the include paths.  */
+extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
+
+/* Call these to get pointers to the options, callback, and deps
+   structures for a given reader.  These pointers are good until you
+   call cpp_finish on that reader.  You can either edit the callbacks
+   through the pointer returned from cpp_get_callbacks, or set them
+   with cpp_set_callbacks.  */
+extern cpp_options *cpp_get_options (cpp_reader *);
+extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
+extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
+extern struct deps *cpp_get_deps (cpp_reader *);
+
+/* This function reads the file, but does not start preprocessing.  It
+   returns the name of the original file; this is the same as the
+   input file, except for preprocessed input.  This will generate at
+   least one file change callback, and possibly a line change callback
+   too.  If there was an error opening the file, it returns NULL.  */
+extern const char *cpp_read_main_file (cpp_reader *, const char *);
+
+/* Set up built-ins with special behavior.  Use cpp_init_builtins()
+   instead unless your know what you are doing.  */
+extern void cpp_init_special_builtins (cpp_reader *);
+
+/* Set up built-ins like __FILE__.  */
+extern void cpp_init_builtins (cpp_reader *, int);
+
+/* This is called after options have been parsed, and partially
+   processed.  */
+extern void cpp_post_options (cpp_reader *);
+
+/* Set up translation to the target character set.  */
+extern void cpp_init_iconv (cpp_reader *);
+
+/* Call this to finish preprocessing.  If you requested dependency
+   generation, pass an open stream to write the information to,
+   otherwise NULL.  It is your responsibility to close the stream.
+
+   Returns cpp_errors (pfile).  */
+extern int cpp_finish (cpp_reader *, FILE *deps_stream);
+
+/* Call this to release the handle at the end of preprocessing.  Any
+   use of the handle after this function returns is invalid.  Returns
+   cpp_errors (pfile).  */
+extern void cpp_destroy (cpp_reader *);
+
+/* Error count.  */
+extern unsigned int cpp_errors (cpp_reader *);
+
+extern unsigned int cpp_token_len (const cpp_token *);
+extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
+extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
+                                      unsigned char *, bool);
+extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
+                                void (*) (cpp_reader *), bool);
+extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
+                                         const char *, unsigned, bool, bool);
+extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
+                           const cpp_token *);
+extern const cpp_token *cpp_get_token (cpp_reader *);
+extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
+                                                    source_location *);
+extern const unsigned char *cpp_macro_definition (cpp_reader *,
+                                                 const cpp_hashnode *);
+extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
+
+/* Evaluate a CPP_CHAR or CPP_WCHAR token.  */
+extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
+                                         unsigned int *, int *);
+/* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens.  */
+extern bool cpp_interpret_string (cpp_reader *,
+                                 const cpp_string *, size_t,
+                                 cpp_string *, bool);
+extern bool cpp_interpret_string_notranslate (cpp_reader *,
+                                             const cpp_string *, size_t,
+                                             cpp_string *, bool);
+
+/* Convert a host character constant to the execution character set.  */
+extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
+
+/* Used to register macros and assertions, perhaps from the command line.
+   The text is the same as the command line argument.  */
+extern void cpp_define (cpp_reader *, const char *);
+extern void cpp_assert (cpp_reader *, const char *);
+extern void cpp_undef (cpp_reader *, const char *);
+extern void cpp_unassert (cpp_reader *, const char *);
+
+extern cpp_macro *cpp_push_definition (cpp_reader *, const char *);
+extern void cpp_pop_definition (cpp_reader *, const char *, cpp_macro *);
+
+/* Undefine all macros and assertions.  */
+extern void cpp_undef_all (cpp_reader *);
+
+extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
+                                   size_t, int);
+extern int cpp_defined (cpp_reader *, const unsigned char *, int);
+
+/* A preprocessing number.  Code assumes that any unused high bits of
+   the double integer are set to zero.  */
+typedef unsigned HOST_WIDE_INT cpp_num_part;
+typedef struct cpp_num cpp_num;
+struct cpp_num
+{
+  cpp_num_part high;
+  cpp_num_part low;
+  bool unsignedp;  /* True if value should be treated as unsigned.  */
+  bool overflow;   /* True if the most recent calculation overflowed.  */
+};
+
+/* cpplib provides two interfaces for interpretation of preprocessing
+   numbers.
+
+   cpp_classify_number categorizes numeric constants according to
+   their field (integer, floating point, or invalid), radix (decimal,
+   octal, hexadecimal), and type suffixes.  */
+
+#define CPP_N_CATEGORY  0x000F
+#define CPP_N_INVALID  0x0000
+#define CPP_N_INTEGER  0x0001
+#define CPP_N_FLOATING 0x0002
+
+#define CPP_N_WIDTH    0x00F0
+#define CPP_N_SMALL    0x0010  /* int, float, shrot _Fract/Accum  */
+#define CPP_N_MEDIUM   0x0020  /* long, double, long _Fract/_Accum.  */
+#define CPP_N_LARGE    0x0040  /* long long, long double,
+                                  long long _Fract/Accum.  */
+
+#define CPP_N_WIDTH_MD 0xF0000 /* machine defined.  */
+#define CPP_N_MD_W     0x10000
+#define CPP_N_MD_Q     0x20000
+
+#define CPP_N_RADIX    0x0F00
+#define CPP_N_DECIMAL  0x0100
+#define CPP_N_HEX      0x0200
+#define CPP_N_OCTAL    0x0400
+#define CPP_N_BINARY   0x0800
+
+#define CPP_N_UNSIGNED 0x1000  /* Properties.  */
+#define CPP_N_IMAGINARY        0x2000
+#define CPP_N_DFLOAT   0x4000
+
+#define CPP_N_FRACT    0x100000 /* Fract types.  */
+#define CPP_N_ACCUM    0x200000 /* Accum types.  */
+
+/* Classify a CPP_NUMBER token.  The return value is a combination of
+   the flags from the above sets.  */
+extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
+
+/* Evaluate a token classified as category CPP_N_INTEGER.  */
+extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
+                                     unsigned int type);
+
+/* Sign extend a number, with PRECISION significant bits and all
+   others assumed clear, to fill out a cpp_num structure.  */
+cpp_num cpp_num_sign_extend (cpp_num, size_t);
+
+/* Diagnostic levels.  To get a diagnostic without associating a
+   position in the translation unit with it, use cpp_error_with_line
+   with a line number of zero.  */
+
+/* Warning, an error with -Werror.  */
+#define CPP_DL_WARNING         0x00
+/* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
+#define CPP_DL_WARNING_SYSHDR  0x01
+/* Warning, an error with -pedantic-errors or -Werror.  */
+#define CPP_DL_PEDWARN         0x02
+/* An error.  */
+#define CPP_DL_ERROR           0x03
+/* An internal consistency check failed.  Prints "internal error: ",
+   otherwise the same as CPP_DL_ERROR.  */
+#define CPP_DL_ICE             0x04
+/* Extracts a diagnostic level from an int.  */
+#define CPP_DL_EXTRACT(l)      (l & 0xf)
+/* Nonzero if a diagnostic level is one of the warnings.  */
+#define CPP_DL_WARNING_P(l)    (CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \
+                                && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN)
+
+/* Output a diagnostic of some kind.  */
+extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
+  ATTRIBUTE_PRINTF_3;
+
+/* Output a diagnostic with "MSGID: " preceding the
+   error string of errno.  No location is printed.  */
+extern void cpp_errno (cpp_reader *, int, const char *msgid);
+
+/* Same as cpp_error, except additionally specifies a position as a
+   (translation unit) physical line and physical column.  If the line is
+   zero, then no location is printed.  */
+extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
+                                const char *msgid, ...) ATTRIBUTE_PRINTF_5;
+
+/* In cpplex.c */
+extern int cpp_ideq (const cpp_token *, const char *);
+extern void cpp_output_line (cpp_reader *, FILE *);
+extern void cpp_output_token (const cpp_token *, FILE *);
+extern const char *cpp_type2name (enum cpp_ttype);
+/* Returns the value of an escape sequence, truncated to the correct
+   target precision.  PSTR points to the input pointer, which is just
+   after the backslash.  LIMIT is how much text we have.  WIDE is true
+   if the escape sequence is part of a wide character constant or
+   string literal.  Handles all relevant diagnostics.  */
+extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
+                                  const unsigned char *limit, int wide);
+
+/* In cpphash.c */
+
+/* Lookup an identifier in the hashtable.  Puts the identifier in the
+   table if it is not already there.  */
+extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
+                                unsigned int);
+
+typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
+extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
+
+/* In cppmacro.c */
+extern void cpp_scan_nooutput (cpp_reader *);
+extern int  cpp_sys_macro_p (cpp_reader *);
+extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
+                                       unsigned int);
+
+/* In cppfiles.c */
+extern bool cpp_included (cpp_reader *, const char *);
+extern bool cpp_included_before (cpp_reader *, const char *, source_location);
+extern void cpp_make_system_header (cpp_reader *, int, int);
+extern bool cpp_push_include (cpp_reader *, const char *);
+extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
+extern const char *cpp_get_path (struct _cpp_file *);
+extern cpp_dir *cpp_get_dir (struct _cpp_file *);
+extern cpp_buffer *cpp_get_buffer (cpp_reader *);
+extern struct _cpp_file *cpp_get_file (cpp_buffer *);
+extern cpp_buffer *cpp_get_prev (cpp_buffer *);
+extern void cpp_clear_file_cache (cpp_reader *);
+
+/* In cpppch.c */
+struct save_macro_data;
+extern int cpp_save_state (cpp_reader *, FILE *);
+extern int cpp_write_pch_deps (cpp_reader *, FILE *);
+extern int cpp_write_pch_state (cpp_reader *, FILE *);
+extern int cpp_valid_state (cpp_reader *, const char *, int);
+extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
+extern int cpp_read_state (cpp_reader *, const char *, FILE *,
+                          struct save_macro_data *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! LIBCPP_CPPLIB_H */
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
new file mode 100644 (file)
index 0000000..cddc74d
--- /dev/null
@@ -0,0 +1,191 @@
+/* Map logical line numbers to (source file, line number) pairs.
+   Copyright (C) 2001, 2003, 2004, 2007
+   Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#ifndef LIBCPP_LINE_MAP_H
+#define LIBCPP_LINE_MAP_H
+
+#ifndef GTY
+#define GTY(x) /* nothing */
+#endif
+
+/* Reason for adding a line change with add_line_map ().  LC_ENTER is
+   when including a new file, e.g. a #include directive in C.
+   LC_LEAVE is when reaching a file's end.  LC_RENAME is when a file
+   name or line number changes for neither of the above reasons
+   (e.g. a #line directive in C).  */
+enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME};
+
+/* A logical line/column number, i.e. an "index" into a line_map.  */
+/* Long-term, we want to use this to replace struct location_s (in input.h),
+   and effectively typedef source_location location_t.  */
+typedef unsigned int source_location;
+
+/* Memory allocation function typedef.  Works like xrealloc.  */
+typedef void *(*line_map_realloc) (void *, size_t);
+
+/* Physical source file TO_FILE at line TO_LINE at column 0 is represented
+   by the logical START_LOCATION.  TO_LINE+L at column C is represented by
+   START_LOCATION+(L*(1<<column_bits))+C, as long as C<(1<<column_bits),
+   and the result_location is less than the next line_map's start_location.
+   (The top line is line 1 and the leftmost column is column 1; line/column 0
+   means "entire file/line" or "unknown line/column" or "not applicable".)
+   INCLUDED_FROM is an index into the set that gives the line mapping
+   at whose end the current one was included.  File(s) at the bottom
+   of the include stack have this set to -1.  REASON is the reason for
+   creation of this line map, SYSP is one for a system header, two for
+   a C system header file that therefore needs to be extern "C"
+   protected in C++, and zero otherwise.  */
+struct line_map GTY(())
+{
+  const char *to_file;
+  unsigned int to_line;
+  source_location start_location;
+  int included_from;
+  ENUM_BITFIELD (lc_reason) reason : CHAR_BIT;
+  /* The sysp field isn't really needed now that it's in cpp_buffer.  */
+  unsigned char sysp;
+  /* Number of the low-order source_location bits used for a column number.  */
+  unsigned int column_bits : 8;
+};
+
+/* A set of chronological line_map structures.  */
+struct line_maps GTY(())
+{
+  struct line_map * GTY ((length ("%h.used"))) maps;
+  unsigned int allocated;
+  unsigned int used;
+
+  unsigned int cache;
+
+  /* The most recently listed include stack, if any, starts with
+     LAST_LISTED as the topmost including file.  -1 indicates nothing
+     has been listed yet.  */
+  int last_listed;
+
+  /* Depth of the include stack, including the current file.  */
+  unsigned int depth;
+
+  /* If true, prints an include trace a la -H.  */
+  bool trace_includes;
+
+  /* Highest source_location "given out".  */
+  source_location highest_location;
+
+  /* Start of line of highest source_location "given out".  */
+  source_location highest_line;
+
+  /* The maximum column number we can quickly allocate.  Higher numbers
+     may require allocating a new line_map.  */
+  unsigned int max_column_hint;
+
+  /* If non-null, the allocator to use when resizing 'maps'.  If null,
+     xrealloc is used.  */
+  line_map_realloc reallocator;
+};
+
+/* Initialize a line map set.  */
+extern void linemap_init (struct line_maps *);
+
+/* Free a line map set.  */
+extern void linemap_free (struct line_maps *);
+
+/* Check for and warn about line_maps entered but not exited.  */
+
+extern void linemap_check_files_exited (struct line_maps *);
+
+/* Return a source_location for the start (i.e. column==0) of
+   (physical) line TO_LINE in the current source file (as in the
+   most recent linemap_add).   MAX_COLUMN_HINT is the highest column
+   number we expect to use in this line (but it does not change
+   the highest_location).  */
+
+extern source_location linemap_line_start
+(struct line_maps *set, unsigned int to_line,  unsigned int max_column_hint);
+
+/* Add a mapping of logical source line to physical source file and
+   line number.
+
+   The text pointed to by TO_FILE must have a lifetime
+   at least as long as the final call to lookup_line ().  An empty
+   TO_FILE means standard input.  If reason is LC_LEAVE, and
+   TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their
+   natural values considering the file we are returning to.
+
+   A call to this function can relocate the previous set of
+   maps, so any stored line_map pointers should not be used.  */
+extern const struct line_map *linemap_add
+  (struct line_maps *, enum lc_reason, unsigned int sysp,
+   const char *to_file, unsigned int to_line);
+
+/* Given a logical line, returns the map from which the corresponding
+   (source file, line) pair can be deduced.  */
+extern const struct line_map *linemap_lookup
+  (struct line_maps *, source_location);
+
+/* Print the file names and line numbers of the #include commands
+   which led to the map MAP, if any, to stderr.  Nothing is output if
+   the most recently listed stack is the same as the current one.  */
+extern void linemap_print_containing_files (struct line_maps *,
+                                           const struct line_map *);
+
+/* Converts a map and a source_location to source line.  */
+#define SOURCE_LINE(MAP, LINE) \
+  ((((LINE) - (MAP)->start_location) >> (MAP)->column_bits) + (MAP)->to_line)
+
+#define SOURCE_COLUMN(MAP, LINE) \
+  (((LINE) - (MAP)->start_location) & ((1 << (MAP)->column_bits) - 1))
+
+/* Returns the last source line within a map.  This is the (last) line
+   of the #include, or other directive, that caused a map change.  */
+#define LAST_SOURCE_LINE(MAP) \
+  SOURCE_LINE (MAP, LAST_SOURCE_LINE_LOCATION (MAP))
+#define LAST_SOURCE_LINE_LOCATION(MAP) \
+  ((((MAP)[1].start_location - 1 - (MAP)->start_location) \
+    & ~((1 << (MAP)->column_bits) - 1))                          \
+   + (MAP)->start_location)
+
+/* Returns the map a given map was included from.  */
+#define INCLUDED_FROM(SET, MAP) (&(SET)->maps[(MAP)->included_from])
+
+/* Nonzero if the map is at the bottom of the include stack.  */
+#define MAIN_FILE_P(MAP) ((MAP)->included_from < 0)
+
+/* Set LOC to a source position that is the same line as the most recent
+   linemap_line_start, but with the specified TO_COLUMN column number.  */
+
+#define LINEMAP_POSITION_FOR_COLUMN(LOC, SET, TO_COLUMN) { \
+  unsigned int to_column = (TO_COLUMN); \
+  struct line_maps *set = (SET); \
+  if (__builtin_expect (to_column >= set->max_column_hint, 0)) \
+    (LOC) = linemap_position_for_column (set, to_column); \
+  else { \
+    source_location r = set->highest_line; \
+    r = r + to_column; \
+    if (r >= set->highest_location) \
+      set->highest_location = r; \
+    (LOC) = r;                  \
+  }}
+    
+
+extern source_location
+linemap_position_for_column (struct line_maps *set, unsigned int to_column);
+#endif /* !LIBCPP_LINE_MAP_H  */
diff --git a/libcpp/include/mkdeps.h b/libcpp/include/mkdeps.h
new file mode 100644 (file)
index 0000000..60a5b5d
--- /dev/null
@@ -0,0 +1,79 @@
+/* Dependency generator for Makefile fragments.
+   Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+   Contributed by Zack Weinberg, Mar 2000
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#ifndef LIBCPP_MKDEPS_H
+#define LIBCPP_MKDEPS_H
+
+/* This is the data structure used by all the functions in mkdeps.c.
+   It's quite straightforward, but should be treated as opaque.  */
+
+struct deps;
+
+/* Create a deps buffer.  */
+extern struct deps *deps_init (void);
+
+/* Destroy a deps buffer.  */
+extern void deps_free (struct deps *);
+
+/* Add a set of "vpath" directories. The second argument is a colon-
+   separated list of pathnames, like you would set Make's VPATH
+   variable to.  If a dependency or target name begins with any of
+   these pathnames (and the next path element is not "..") that
+   pathname is stripped off.  */
+extern void deps_add_vpath (struct deps *, const char *);
+
+/* Add a target (appears on left side of the colon) to the deps list.  Takes
+   a boolean indicating whether to quote the target for MAKE.  */
+extern void deps_add_target (struct deps *, const char *, int);
+
+/* Sets the default target if none has been given already.  An empty
+   string as the default target is interpreted as stdin.  */
+extern void deps_add_default_target (struct deps *, const char *);
+
+/* Add a dependency (appears on the right side of the colon) to the
+   deps list.  Dependencies will be printed in the order that they
+   were entered with this function.  By convention, the first
+   dependency entered should be the primary source file.  */
+extern void deps_add_dep (struct deps *, const char *);
+
+/* Write out a deps buffer to a specified file.  The third argument
+   is the number of columns to word-wrap at (0 means don't wrap).  */
+extern void deps_write (const struct deps *, FILE *, unsigned int);
+
+/* Write out a deps buffer to a file, in a form that can be read back
+   with deps_restore.  Returns nonzero on error, in which case the
+   error number will be in errno.  */
+extern int deps_save (struct deps *, FILE *);
+
+/* Read back dependency information written with deps_save into
+   the deps buffer.  The third argument may be NULL, in which case
+   the dependency information is just skipped, or it may be a filename,
+   in which case that filename is skipped.  */
+extern int deps_restore (struct deps *, FILE *, const char *);
+
+/* For each dependency *except the first*, emit a dummy rule for that
+   file, causing it to depend on nothing.  This is used to work around
+   the intermediate-file deletion misfeature in Make, in some
+   automatic dependency schemes.  */
+extern void deps_phony_targets (const struct deps *, FILE *);
+
+#endif /* ! LIBCPP_MKDEPS_H */
diff --git a/libcpp/include/symtab.h b/libcpp/include/symtab.h
new file mode 100644 (file)
index 0000000..2bd45cf
--- /dev/null
@@ -0,0 +1,98 @@
+/* Hash tables.
+   Copyright (C) 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef LIBCPP_SYMTAB_H
+#define LIBCPP_SYMTAB_H
+
+#include "obstack.h"
+#ifndef GTY
+#define GTY(x) /* nothing */
+#endif
+
+/* This is what each hash table entry points to.  It may be embedded
+   deeply within another object.  */
+typedef struct ht_identifier ht_identifier;
+struct ht_identifier GTY(())
+{
+  const unsigned char *str;
+  unsigned int len;
+  unsigned int hash_value;
+};
+
+#define HT_LEN(NODE) ((NODE)->len)
+#define HT_STR(NODE) ((NODE)->str)
+
+typedef struct ht hash_table;
+typedef struct ht_identifier *hashnode;
+
+enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED};
+
+/* An identifier hash table for cpplib and the front ends.  */
+struct ht
+{
+  /* Identifiers are allocated from here.  */
+  struct obstack stack;
+
+  hashnode *entries;
+  /* Call back, allocate a node.  */
+  hashnode (*alloc_node) (hash_table *);
+  /* Call back, allocate something that hangs off a node like a cpp_macro.  
+     NULL means use the usual allocator.  */
+  void * (*alloc_subobject) (size_t);
+
+  unsigned int nslots;         /* Total slots in the entries array.  */
+  unsigned int nelements;      /* Number of live elements.  */
+
+  /* Link to reader, if any.  For the benefit of cpplib.  */
+  struct cpp_reader *pfile;
+
+  /* Table usage statistics.  */
+  unsigned int searches;
+  unsigned int collisions;
+
+  /* Should 'entries' be freed when it is no longer needed?  */
+  bool entries_owned;
+};
+
+/* Initialize the hashtable with 2 ^ order entries.  */
+extern hash_table *ht_create (unsigned int order);
+
+/* Frees all memory associated with a hash table.  */
+extern void ht_destroy (hash_table *);
+
+extern hashnode ht_lookup (hash_table *, const unsigned char *,
+                          size_t, enum ht_lookup_option);
+extern hashnode ht_lookup_with_hash (hash_table *, const unsigned char *,
+                                     size_t, unsigned int,
+                                     enum ht_lookup_option);
+#define HT_HASHSTEP(r, c) ((r) * 67 + ((c) - 113));
+#define HT_HASHFINISH(r, len) ((r) + (len))
+
+/* For all nodes in TABLE, make a callback.  The callback takes
+   TABLE->PFILE, the node, and a PTR, and the callback sequence stops
+   if the callback returns zero.  */
+typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *);
+extern void ht_forall (hash_table *, ht_cb, const void *);
+
+/* Restore the hash table.  */
+extern void ht_load (hash_table *ht, hashnode *entries,
+                    unsigned int nslots, unsigned int nelements, bool own);
+
+/* Dump allocation statistics to stderr.  */
+extern void ht_dump_statistics (hash_table *);
+
+#endif /* LIBCPP_SYMTAB_H */
diff --git a/libcpp/init.c b/libcpp/init.c
new file mode 100644 (file)
index 0000000..aa0c0b1
--- /dev/null
@@ -0,0 +1,658 @@
+/* CPP Library.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+#include "mkdeps.h"
+#include "localedir.h"
+
+static void init_library (void);
+static void mark_named_operators (cpp_reader *);
+static void read_original_filename (cpp_reader *);
+static void read_original_directory (cpp_reader *);
+static void post_options (cpp_reader *);
+
+/* If we have designated initializers (GCC >2.7) these tables can be
+   initialized, constant data.  Otherwise, they have to be filled in at
+   runtime.  */
+#if HAVE_DESIGNATED_INITIALIZERS
+
+#define init_trigraph_map()  /* Nothing.  */
+#define TRIGRAPH_MAP \
+__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
+
+#define END };
+#define s(p, v) [p] = v,
+
+#else
+
+#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
+ static void init_trigraph_map (void) { \
+ unsigned char *x = _cpp_trigraph_map;
+
+#define END }
+#define s(p, v) x[p] = v;
+
+#endif
+
+TRIGRAPH_MAP
+  s('=', '#')  s(')', ']')     s('!', '|')
+  s('(', '[')  s('\'', '^')    s('>', '}')
+  s('/', '\\') s('<', '{')     s('-', '~')
+END
+
+#undef s
+#undef END
+#undef TRIGRAPH_MAP
+
+/* A set of booleans indicating what CPP features each source language
+   requires.  */
+struct lang_flags
+{
+  char c99;
+  char cplusplus;
+  char extended_numbers;
+  char extended_identifiers;
+  char std;
+  char cplusplus_comments;
+  char digraphs;
+};
+
+static const struct lang_flags lang_defaults[] =
+{ /*              c99 c++ xnum xid std  //   digr  */
+  /* GNUC89   */  { 0,  0,  1,   0,  0,   1,   1     },
+  /* GNUC99   */  { 1,  0,  1,   0,  0,   1,   1     },
+  /* STDC89   */  { 0,  0,  0,   0,  1,   0,   0     },
+  /* STDC94   */  { 0,  0,  0,   0,  1,   0,   1     },
+  /* STDC99   */  { 1,  0,  1,   0,  1,   1,   1     },
+  /* GNUCXX   */  { 0,  1,  1,   0,  0,   1,   1     },
+  /* CXX98    */  { 0,  1,  1,   0,  1,   1,   1     },
+  /* GNUCXX0X */  { 1,  1,  1,   0,  0,   1,   1     },
+  /* CXX0X    */  { 1,  1,  1,   0,  1,   1,   1     },
+  /* ASM      */  { 0,  0,  1,   0,  0,   1,   0     }
+  /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
+     CXX0X when no longer experimental (when all uses of identifiers
+     in the compiler have been audited for correct handling of
+     extended identifiers).  */
+};
+
+/* Sets internal flags correctly for a given language.  */
+void
+cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
+{
+  const struct lang_flags *l = &lang_defaults[(int) lang];
+
+  CPP_OPTION (pfile, lang) = lang;
+
+  CPP_OPTION (pfile, c99)                       = l->c99;
+  CPP_OPTION (pfile, cplusplus)                         = l->cplusplus;
+  CPP_OPTION (pfile, extended_numbers)          = l->extended_numbers;
+  CPP_OPTION (pfile, extended_identifiers)      = l->extended_identifiers;
+  CPP_OPTION (pfile, std)                       = l->std;
+  CPP_OPTION (pfile, trigraphs)                         = l->std;
+  CPP_OPTION (pfile, cplusplus_comments)        = l->cplusplus_comments;
+  CPP_OPTION (pfile, digraphs)                  = l->digraphs;
+}
+
+/* Initialize library global state.  */
+static void
+init_library (void)
+{
+  static int initialized = 0;
+
+  if (! initialized)
+    {
+      initialized = 1;
+
+      /* Set up the trigraph map.  This doesn't need to do anything if
+        we were compiled with a compiler that supports C99 designated
+        initializers.  */
+      init_trigraph_map ();
+
+#ifdef ENABLE_NLS
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+#endif
+    }
+}
+
+/* Initialize a cpp_reader structure.  */
+cpp_reader *
+cpp_create_reader (enum c_lang lang, hash_table *table,
+                  struct line_maps *line_table)
+{
+  cpp_reader *pfile;
+
+  /* Initialize this instance of the library if it hasn't been already.  */
+  init_library ();
+
+  pfile = XCNEW (cpp_reader);
+
+  cpp_set_lang (pfile, lang);
+  CPP_OPTION (pfile, warn_multichar) = 1;
+  CPP_OPTION (pfile, discard_comments) = 1;
+  CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
+  CPP_OPTION (pfile, show_column) = 1;
+  CPP_OPTION (pfile, tabstop) = 8;
+  CPP_OPTION (pfile, operator_names) = 1;
+  CPP_OPTION (pfile, warn_trigraphs) = 2;
+  CPP_OPTION (pfile, warn_endif_labels) = 1;
+  CPP_OPTION (pfile, warn_deprecated) = 1;
+  CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
+  CPP_OPTION (pfile, dollars_in_ident) = 1;
+  CPP_OPTION (pfile, warn_dollars) = 1;
+  CPP_OPTION (pfile, warn_variadic_macros) = 1;
+  CPP_OPTION (pfile, warn_normalize) = normalized_C;
+
+  /* Default CPP arithmetic to something sensible for the host for the
+     benefit of dumb users like fix-header.  */
+  CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
+  CPP_OPTION (pfile, char_precision) = CHAR_BIT;
+  CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
+  CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
+  CPP_OPTION (pfile, unsigned_char) = 0;
+  CPP_OPTION (pfile, unsigned_wchar) = 1;
+  CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
+
+  /* Default to no charset conversion.  */
+  CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
+  CPP_OPTION (pfile, wide_charset) = 0;
+
+  /* Default the input character set to UTF-8.  */
+  CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
+
+  /* A fake empty "directory" used as the starting point for files
+     looked up without a search path.  Name cannot be '/' because we
+     don't want to prepend anything at all to filenames using it.  All
+     other entries are correct zero-initialized.  */
+  pfile->no_search_path.name = (char *) "";
+
+  /* Initialize the line map.  */
+  pfile->line_table = line_table;
+
+  /* Initialize lexer state.  */
+  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
+
+  /* Set up static tokens.  */
+  pfile->avoid_paste.type = CPP_PADDING;
+  pfile->avoid_paste.val.source = NULL;
+  pfile->eof.type = CPP_EOF;
+  pfile->eof.flags = 0;
+
+  /* Create a token buffer for the lexer.  */
+  _cpp_init_tokenrun (&pfile->base_run, 250);
+  pfile->cur_run = &pfile->base_run;
+  pfile->cur_token = pfile->base_run.base;
+
+  /* Initialize the base context.  */
+  pfile->context = &pfile->base_context;
+  pfile->base_context.macro = 0;
+  pfile->base_context.prev = pfile->base_context.next = 0;
+
+  /* Aligned and unaligned storage.  */
+  pfile->a_buff = _cpp_get_buff (pfile, 0);
+  pfile->u_buff = _cpp_get_buff (pfile, 0);
+
+  /* The expression parser stack.  */
+  _cpp_expand_op_stack (pfile);
+
+  /* Initialize the buffer obstack.  */
+  _obstack_begin (&pfile->buffer_ob, 0, 0,
+                 (void *(*) (long)) xmalloc,
+                 (void (*) (void *)) free);
+
+  _cpp_init_files (pfile);
+
+  _cpp_init_hashtable (pfile, table);
+
+  return pfile;
+}
+
+/* Set the line_table entry in PFILE.  This is called after reading a
+   PCH file, as the old line_table will be incorrect.  */
+void
+cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
+{
+  pfile->line_table = line_table;
+}
+
+/* Free resources used by PFILE.  Accessing PFILE after this function
+   returns leads to undefined behavior.  Returns the error count.  */
+void
+cpp_destroy (cpp_reader *pfile)
+{
+  cpp_context *context, *contextn;
+  tokenrun *run, *runn;
+
+  free (pfile->op_stack);
+
+  while (CPP_BUFFER (pfile) != NULL)
+    _cpp_pop_buffer (pfile);
+
+  if (pfile->out.base)
+    free (pfile->out.base);
+
+  if (pfile->macro_buffer)
+    {
+      free (pfile->macro_buffer);
+      pfile->macro_buffer = NULL;
+      pfile->macro_buffer_len = 0;
+    }
+
+  if (pfile->deps)
+    deps_free (pfile->deps);
+  obstack_free (&pfile->buffer_ob, 0);
+
+  _cpp_destroy_hashtable (pfile);
+  _cpp_cleanup_files (pfile);
+  _cpp_destroy_iconv (pfile);
+
+  _cpp_free_buff (pfile->a_buff);
+  _cpp_free_buff (pfile->u_buff);
+  _cpp_free_buff (pfile->free_buffs);
+
+  for (run = &pfile->base_run; run; run = runn)
+    {
+      runn = run->next;
+      free (run->base);
+      if (run != &pfile->base_run)
+       free (run);
+    }
+
+  for (context = pfile->base_context.next; context; context = contextn)
+    {
+      contextn = context->next;
+      free (context);
+    }
+
+  free (pfile);
+}
+
+/* This structure defines one built-in identifier.  A node will be
+   entered in the hash table under the name NAME, with value VALUE.
+
+   There are two tables of these.  builtin_array holds all the
+   "builtin" macros: these are handled by builtin_macro() in
+   macro.c.  Builtin is somewhat of a misnomer -- the property of
+   interest is that these macros require special code to compute their
+   expansions.  The value is a "builtin_type" enumerator.
+
+   operator_array holds the C++ named operators.  These are keywords
+   which act as aliases for punctuators.  In C++, they cannot be
+   altered through #define, and #if recognizes them as operators.  In
+   C, these are not entered into the hash table at all (but see
+   <iso646.h>).  The value is a token-type enumerator.  */
+struct builtin
+{
+  const uchar *name;
+  unsigned short len;
+  unsigned short value;
+};
+
+#define B(n, t)    { DSC(n), t }
+static const struct builtin builtin_array[] =
+{
+  B("__TIMESTAMP__",    BT_TIMESTAMP),
+  B("__TIME__",                 BT_TIME),
+  B("__DATE__",                 BT_DATE),
+  B("__FILE__",                 BT_FILE),
+  B("__BASE_FILE__",    BT_BASE_FILE),
+  B("__LINE__",                 BT_SPECLINE),
+  B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
+  B("__COUNTER__",      BT_COUNTER),
+  /* Keep builtins not used for -traditional-cpp at the end, and
+     update init_builtins() if any more are added.  */
+  B("_Pragma",          BT_PRAGMA),
+  B("__STDC__",                 BT_STDC),
+};
+
+static const struct builtin operator_array[] =
+{
+  B("and",     CPP_AND_AND),
+  B("and_eq",  CPP_AND_EQ),
+  B("bitand",  CPP_AND),
+  B("bitor",   CPP_OR),
+  B("compl",   CPP_COMPL),
+  B("not",     CPP_NOT),
+  B("not_eq",  CPP_NOT_EQ),
+  B("or",      CPP_OR_OR),
+  B("or_eq",   CPP_OR_EQ),
+  B("xor",     CPP_XOR),
+  B("xor_eq",  CPP_XOR_EQ)
+};
+#undef B
+
+/* Mark the C++ named operators in the hash table.  */
+static void
+mark_named_operators (cpp_reader *pfile)
+{
+  const struct builtin *b;
+
+  for (b = operator_array;
+       b < (operator_array + ARRAY_SIZE (operator_array));
+       b++)
+    {
+      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
+      hp->flags |= NODE_OPERATOR;
+      hp->is_directive = 0;
+      hp->directive_index = b->value;
+    }
+}
+
+void
+cpp_init_special_builtins (cpp_reader *pfile)
+{
+  const struct builtin *b;
+  size_t n = ARRAY_SIZE (builtin_array);
+
+  if (CPP_OPTION (pfile, traditional))
+    n -= 2;
+  else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
+          || CPP_OPTION (pfile, std))
+    n--;
+
+  for (b = builtin_array; b < builtin_array + n; b++)
+    {
+      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
+      hp->type = NT_MACRO;
+      hp->flags |= NODE_BUILTIN | NODE_WARN;
+      hp->value.builtin = (enum builtin_type) b->value;
+    }
+}
+
+/* Read the builtins table above and enter them, and language-specific
+   macros, into the hash table.  HOSTED is true if this is a hosted
+   environment.  */
+void
+cpp_init_builtins (cpp_reader *pfile, int hosted)
+{
+  cpp_init_special_builtins (pfile);
+
+  if (!CPP_OPTION (pfile, traditional)
+      && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
+         || CPP_OPTION (pfile, std)))
+    _cpp_define_builtin (pfile, "__STDC__ 1");
+
+  if (CPP_OPTION (pfile, cplusplus))
+    _cpp_define_builtin (pfile, "__cplusplus 1");
+  else if (CPP_OPTION (pfile, lang) == CLK_ASM)
+    _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
+  else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
+    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
+  else if (CPP_OPTION (pfile, c99))
+    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
+
+  if (hosted)
+    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
+  else
+    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
+
+  if (CPP_OPTION (pfile, objc))
+    _cpp_define_builtin (pfile, "__OBJC__ 1");
+}
+
+/* Sanity-checks are dependent on command-line options, so it is
+   called as a subroutine of cpp_read_main_file ().  */
+#if ENABLE_CHECKING
+static void sanity_checks (cpp_reader *);
+static void sanity_checks (cpp_reader *pfile)
+{
+  cppchar_t test = 0;
+  size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
+
+  /* Sanity checks for assumptions about CPP arithmetic and target
+     type precisions made by cpplib.  */
+  test--;
+  if (test < 1)
+    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
+
+  if (CPP_OPTION (pfile, precision) > max_precision)
+    cpp_error (pfile, CPP_DL_ICE,
+              "preprocessor arithmetic has maximum precision of %lu bits;"
+              " target requires %lu bits",
+              (unsigned long) max_precision,
+              (unsigned long) CPP_OPTION (pfile, precision));
+
+  if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
+    cpp_error (pfile, CPP_DL_ICE,
+              "CPP arithmetic must be at least as precise as a target int");
+
+  if (CPP_OPTION (pfile, char_precision) < 8)
+    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
+
+  if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
+    cpp_error (pfile, CPP_DL_ICE,
+              "target wchar_t is narrower than target char");
+
+  if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
+    cpp_error (pfile, CPP_DL_ICE,
+              "target int is narrower than target char");
+
+  /* This is assumed in eval_token() and could be fixed if necessary.  */
+  if (sizeof (cppchar_t) > sizeof (cpp_num_part))
+    cpp_error (pfile, CPP_DL_ICE,
+              "CPP half-integer narrower than CPP character");
+
+  if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
+    cpp_error (pfile, CPP_DL_ICE,
+              "CPP on this host cannot handle wide character constants over"
+              " %lu bits, but the target requires %lu bits",
+              (unsigned long) BITS_PER_CPPCHAR_T,
+              (unsigned long) CPP_OPTION (pfile, wchar_precision));
+}
+#else
+# define sanity_checks(PFILE)
+#endif
+
+/* This is called after options have been parsed, and partially
+   processed.  */
+void
+cpp_post_options (cpp_reader *pfile)
+{
+  sanity_checks (pfile);
+
+  post_options (pfile);
+
+  /* Mark named operators before handling command line macros.  */
+  if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
+    mark_named_operators (pfile);
+}
+
+/* Setup for processing input from the file named FNAME, or stdin if
+   it is the empty string.  Return the original filename
+   on success (e.g. foo.i->foo.c), or NULL on failure.  */
+const char *
+cpp_read_main_file (cpp_reader *pfile, const char *fname)
+{
+  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
+    {
+      if (!pfile->deps)
+       pfile->deps = deps_init ();
+
+      /* Set the default target (if there is none already).  */
+      deps_add_default_target (pfile->deps, fname);
+    }
+
+  pfile->main_file
+    = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
+  if (_cpp_find_failed (pfile->main_file))
+    return NULL;
+
+  _cpp_stack_file (pfile, pfile->main_file, false);
+
+  /* For foo.i, read the original filename foo.c now, for the benefit
+     of the front ends.  */
+  if (CPP_OPTION (pfile, preprocessed))
+    {
+      read_original_filename (pfile);
+      fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
+    }
+  return fname;
+}
+
+/* For preprocessed files, if the first tokens are of the form # NUM.
+   handle the directive so we know the original file name.  This will
+   generate file_change callbacks, which the front ends must handle
+   appropriately given their state of initialization.  */
+static void
+read_original_filename (cpp_reader *pfile)
+{
+  const cpp_token *token, *token1;
+
+  /* Lex ahead; if the first tokens are of the form # NUM, then
+     process the directive, otherwise back up.  */
+  token = _cpp_lex_direct (pfile);
+  if (token->type == CPP_HASH)
+    {
+      pfile->state.in_directive = 1;
+      token1 = _cpp_lex_direct (pfile);
+      _cpp_backup_tokens (pfile, 1);
+      pfile->state.in_directive = 0;
+
+      /* If it's a #line directive, handle it.  */
+      if (token1->type == CPP_NUMBER)
+       {
+         _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
+         read_original_directory (pfile);
+         return;
+       }
+    }
+
+  /* Backup as if nothing happened.  */
+  _cpp_backup_tokens (pfile, 1);
+}
+
+/* For preprocessed files, if the tokens following the first filename
+   line is of the form # <line> "/path/name//", handle the
+   directive so we know the original current directory.  */
+static void
+read_original_directory (cpp_reader *pfile)
+{
+  const cpp_token *hash, *token;
+
+  /* Lex ahead; if the first tokens are of the form # NUM, then
+     process the directive, otherwise back up.  */
+  hash = _cpp_lex_direct (pfile);
+  if (hash->type != CPP_HASH)
+    {
+      _cpp_backup_tokens (pfile, 1);
+      return;
+    }
+
+  token = _cpp_lex_direct (pfile);
+
+  if (token->type != CPP_NUMBER)
+    {
+      _cpp_backup_tokens (pfile, 2);
+      return;
+    }
+
+  token = _cpp_lex_direct (pfile);
+
+  if (token->type != CPP_STRING
+      || ! (token->val.str.len >= 5
+           && token->val.str.text[token->val.str.len-2] == '/'
+           && token->val.str.text[token->val.str.len-3] == '/'))
+    {
+      _cpp_backup_tokens (pfile, 3);
+      return;
+    }
+
+  if (pfile->cb.dir_change)
+    {
+      char *debugdir = (char *) alloca (token->val.str.len - 3);
+
+      memcpy (debugdir, (const char *) token->val.str.text + 1,
+             token->val.str.len - 4);
+      debugdir[token->val.str.len - 4] = '\0';
+
+      pfile->cb.dir_change (pfile, debugdir);
+    }      
+}
+
+/* This is called at the end of preprocessing.  It pops the last
+   buffer and writes dependency output, and returns the number of
+   errors.
+
+   Maybe it should also reset state, such that you could call
+   cpp_start_read with a new filename to restart processing.  */
+int
+cpp_finish (cpp_reader *pfile, FILE *deps_stream)
+{
+  /* Warn about unused macros before popping the final buffer.  */
+  if (CPP_OPTION (pfile, warn_unused_macros))
+    cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
+
+  /* lex.c leaves the final buffer on the stack.  This it so that
+     it returns an unending stream of CPP_EOFs to the client.  If we
+     popped the buffer, we'd dereference a NULL buffer pointer and
+     segfault.  It's nice to allow the client to do worry-free excess
+     cpp_get_token calls.  */
+  while (pfile->buffer)
+    _cpp_pop_buffer (pfile);
+
+  /* Don't write the deps file if there are errors.  */
+  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
+      && deps_stream && pfile->errors == 0)
+    {
+      deps_write (pfile->deps, deps_stream, 72);
+
+      if (CPP_OPTION (pfile, deps.phony_targets))
+       deps_phony_targets (pfile->deps, deps_stream);
+    }
+
+  /* Report on headers that could use multiple include guards.  */
+  if (CPP_OPTION (pfile, print_include_names))
+    _cpp_report_missing_guards (pfile);
+
+  return pfile->errors;
+}
+
+static void
+post_options (cpp_reader *pfile)
+{
+  /* -Wtraditional is not useful in C++ mode.  */
+  if (CPP_OPTION (pfile, cplusplus))
+    CPP_OPTION (pfile, warn_traditional) = 0;
+
+  /* Permanently disable macro expansion if we are rescanning
+     preprocessed text.  Read preprocesed source in ISO mode.  */
+  if (CPP_OPTION (pfile, preprocessed))
+    {
+      if (!CPP_OPTION (pfile, directives_only))
+       pfile->state.prevent_expansion = 1;
+      CPP_OPTION (pfile, traditional) = 0;
+    }
+
+  if (CPP_OPTION (pfile, warn_trigraphs) == 2)
+    CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
+
+  if (CPP_OPTION (pfile, traditional))
+    {
+      CPP_OPTION (pfile, cplusplus_comments) = 0;
+
+      /* Traditional CPP does not accurately track column information.  */
+      CPP_OPTION (pfile, show_column) = 0;
+      CPP_OPTION (pfile, trigraphs) = 0;
+      CPP_OPTION (pfile, warn_trigraphs) = 0;
+    }
+}
diff --git a/libcpp/internal.h b/libcpp/internal.h
new file mode 100644 (file)
index 0000000..6110e5c
--- /dev/null
@@ -0,0 +1,702 @@
+/* Part of CPP library.
+   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+   Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This header defines all the internal data structures and functions
+   that need to be visible across files.  It should not be used outside
+   cpplib.  */
+
+#ifndef LIBCPP_INTERNAL_H
+#define LIBCPP_INTERNAL_H
+
+#include "symtab.h"
+#include "cpp-id-data.h"
+
+#ifndef HAVE_ICONV_H
+#undef HAVE_ICONV
+#endif
+
+#if HAVE_ICONV
+#include <iconv.h>
+#else
+#define HAVE_ICONV 0
+typedef int iconv_t;  /* dummy */
+#endif
+
+struct directive;              /* Deliberately incomplete.  */
+struct pending_option;
+struct op;
+struct _cpp_strbuf;
+
+typedef bool (*convert_f) (iconv_t, const unsigned char *, size_t,
+                          struct _cpp_strbuf *);
+struct cset_converter
+{
+  convert_f func;
+  iconv_t cd;
+};
+
+#define BITS_PER_CPPCHAR_T (CHAR_BIT * sizeof (cppchar_t))
+
+/* Test if a sign is valid within a preprocessing number.  */
+#define VALID_SIGN(c, prevc) \
+  (((c) == '+' || (c) == '-') && \
+   ((prevc) == 'e' || (prevc) == 'E' \
+    || (((prevc) == 'p' || (prevc) == 'P') \
+        && CPP_OPTION (pfile, extended_numbers))))
+
+#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION)
+#define CPP_BUFFER(PFILE) ((PFILE)->buffer)
+#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base)
+#define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur)
+
+#define CPP_INCREMENT_LINE(PFILE, COLS_HINT) do { \
+    const struct line_maps *line_table = PFILE->line_table; \
+    const struct line_map *map = &line_table->maps[line_table->used-1]; \
+    unsigned int line = SOURCE_LINE (map, line_table->highest_line); \
+    linemap_line_start (PFILE->line_table, line + 1, COLS_HINT); \
+  } while (0)
+
+/* Maximum nesting of cpp_buffers.  We use a static limit, partly for
+   efficiency, and partly to limit runaway recursion.  */
+#define CPP_STACK_MAX 200
+
+/* Host alignment handling.  */
+struct dummy
+{
+  char c;
+  union
+  {
+    double d;
+    int *p;
+  } u;
+};
+
+#define DEFAULT_ALIGNMENT offsetof (struct dummy, u)
+#define CPP_ALIGN2(size, align) (((size) + ((align) - 1)) & ~((align) - 1))
+#define CPP_ALIGN(size) CPP_ALIGN2 (size, DEFAULT_ALIGNMENT)
+
+#define _cpp_mark_macro_used(NODE) do {                                        \
+  if ((NODE)->type == NT_MACRO && !((NODE)->flags & NODE_BUILTIN))     \
+    (NODE)->value.macro->used = 1; } while (0)
+
+/* A generic memory buffer, and operations on it.  */
+typedef struct _cpp_buff _cpp_buff;
+struct _cpp_buff
+{
+  struct _cpp_buff *next;
+  unsigned char *base, *cur, *limit;
+};
+
+extern _cpp_buff *_cpp_get_buff (cpp_reader *, size_t);
+extern void _cpp_release_buff (cpp_reader *, _cpp_buff *);
+extern void _cpp_extend_buff (cpp_reader *, _cpp_buff **, size_t);
+extern _cpp_buff *_cpp_append_extend_buff (cpp_reader *, _cpp_buff *, size_t);
+extern void _cpp_free_buff (_cpp_buff *);
+extern unsigned char *_cpp_aligned_alloc (cpp_reader *, size_t);
+extern unsigned char *_cpp_unaligned_alloc (cpp_reader *, size_t);
+
+#define BUFF_ROOM(BUFF) (size_t) ((BUFF)->limit - (BUFF)->cur)
+#define BUFF_FRONT(BUFF) ((BUFF)->cur)
+#define BUFF_LIMIT(BUFF) ((BUFF)->limit)
+
+/* #include types.  */
+enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE};
+
+union utoken
+{
+  const cpp_token *token;
+  const cpp_token **ptoken;
+};
+
+/* A "run" of tokens; part of a chain of runs.  */
+typedef struct tokenrun tokenrun;
+struct tokenrun
+{
+  tokenrun *next, *prev;
+  cpp_token *base, *limit;
+};
+
+/* Accessor macros for struct cpp_context.  */
+#define FIRST(c) ((c)->u.iso.first)
+#define LAST(c) ((c)->u.iso.last)
+#define CUR(c) ((c)->u.trad.cur)
+#define RLIMIT(c) ((c)->u.trad.rlimit)
+
+typedef struct cpp_context cpp_context;
+struct cpp_context
+{
+  /* Doubly-linked list.  */
+  cpp_context *next, *prev;
+
+  union
+  {
+    /* For ISO macro expansion.  Contexts other than the base context
+       are contiguous tokens.  e.g. macro expansions, expanded
+       argument tokens.  */
+    struct
+    {
+      union utoken first;
+      union utoken last;
+    } iso;
+
+    /* For traditional macro expansion.  */
+    struct
+    {
+      const unsigned char *cur;
+      const unsigned char *rlimit;
+    } trad;
+  } u;
+
+  /* If non-NULL, a buffer used for storage related to this context.
+     When the context is popped, the buffer is released.  */
+  _cpp_buff *buff;
+
+  /* For a macro context, the macro node, otherwise NULL.  */
+  cpp_hashnode *macro;
+
+  /* True if utoken element is token, else ptoken.  */
+  bool direct_p;
+};
+
+struct lexer_state
+{
+  /* Nonzero if first token on line is CPP_HASH.  */
+  unsigned char in_directive;
+
+  /* Nonzero if in a directive that will handle padding tokens itself.
+     #include needs this to avoid problems with computed include and
+     spacing between tokens.  */
+  unsigned char directive_wants_padding;
+
+  /* True if we are skipping a failed conditional group.  */
+  unsigned char skipping;
+
+  /* Nonzero if in a directive that takes angle-bracketed headers.  */
+  unsigned char angled_headers;
+
+  /* Nonzero if in a #if or #elif directive.  */
+  unsigned char in_expression;
+
+  /* Nonzero to save comments.  Turned off if discard_comments, and in
+     all directives apart from #define.  */
+  unsigned char save_comments;
+
+  /* Nonzero if lexing __VA_ARGS__ is valid.  */
+  unsigned char va_args_ok;
+
+  /* Nonzero if lexing poisoned identifiers is valid.  */
+  unsigned char poisoned_ok;
+
+  /* Nonzero to prevent macro expansion.  */
+  unsigned char prevent_expansion;
+
+  /* Nonzero when parsing arguments to a function-like macro.  */
+  unsigned char parsing_args;
+
+  /* Nonzero if prevent_expansion is true only because output is
+     being discarded.  */
+  unsigned char discarding_output;
+
+  /* Nonzero to skip evaluating part of an expression.  */
+  unsigned int skip_eval;
+
+  /* Nonzero when handling a deferred pragma.  */
+  unsigned char in_deferred_pragma;
+
+  /* Nonzero if the deferred pragma being handled allows macro expansion.  */
+  unsigned char pragma_allow_expansion;
+};
+
+/* Special nodes - identifiers with predefined significance.  */
+struct spec_nodes
+{
+  cpp_hashnode *n_defined;             /* defined operator */
+  cpp_hashnode *n_true;                        /* C++ keyword true */
+  cpp_hashnode *n_false;               /* C++ keyword false */
+  cpp_hashnode *n__VA_ARGS__;          /* C99 vararg macros */
+};
+
+typedef struct _cpp_line_note _cpp_line_note;
+struct _cpp_line_note
+{
+  /* Location in the clean line the note refers to.  */
+  const unsigned char *pos;
+
+  /* Type of note.  The 9 'from' trigraph characters represent those
+     trigraphs, '\\' an escaped newline, ' ' an escaped newline with
+     intervening space, and anything else is invalid.  */
+  unsigned int type;
+};
+
+/* Represents the contents of a file cpplib has read in.  */
+struct cpp_buffer
+{
+  const unsigned char *cur;        /* Current location.  */
+  const unsigned char *line_base;  /* Start of current physical line.  */
+  const unsigned char *next_line;  /* Start of to-be-cleaned logical line.  */
+
+  const unsigned char *buf;        /* Entire character buffer.  */
+  const unsigned char *rlimit;     /* Writable byte at end of file.  */
+
+  _cpp_line_note *notes;           /* Array of notes.  */
+  unsigned int cur_note;           /* Next note to process.  */
+  unsigned int notes_used;         /* Number of notes.  */
+  unsigned int notes_cap;          /* Size of allocated array.  */
+
+  struct cpp_buffer *prev;
+
+  /* Pointer into the file table; non-NULL if this is a file buffer.
+     Used for include_next and to record control macros.  */
+  struct _cpp_file *file;
+
+  /* Saved value of __TIMESTAMP__ macro - date and time of last modification
+     of the assotiated file.  */
+  const unsigned char *timestamp;
+
+  /* Value of if_stack at start of this file.
+     Used to prohibit unmatched #endif (etc) in an include file.  */
+  struct if_stack *if_stack;
+
+  /* True if we need to get the next clean line.  */
+  bool need_line;
+
+  /* True if we have already warned about C++ comments in this file.
+     The warning happens only for C89 extended mode with -pedantic on,
+     or for -Wtraditional, and only once per file (otherwise it would
+     be far too noisy).  */
+  unsigned int warned_cplusplus_comments : 1;
+
+  /* True if we don't process trigraphs and escaped newlines.  True
+     for preprocessed input, command line directives, and _Pragma
+     buffers.  */
+  unsigned int from_stage3 : 1;
+
+  /* At EOF, a buffer is automatically popped.  If RETURN_AT_EOF is
+     true, a CPP_EOF token is then returned.  Otherwise, the next
+     token from the enclosing buffer is returned.  */
+  unsigned int return_at_eof : 1;
+
+  /* One for a system header, two for a C system header file that therefore
+     needs to be extern "C" protected in C++, and zero otherwise.  */
+  unsigned char sysp;
+
+  /* The directory of the this buffer's file.  Its NAME member is not
+     allocated, so we don't need to worry about freeing it.  */
+  struct cpp_dir dir;
+
+  /* Descriptor for converting from the input character set to the
+     source character set.  */
+  struct cset_converter input_cset_desc;
+};
+
+/* A cpp_reader encapsulates the "state" of a pre-processor run.
+   Applying cpp_get_token repeatedly yields a stream of pre-processor
+   tokens.  Usually, there is only one cpp_reader object active.  */
+struct cpp_reader
+{
+  /* Top of buffer stack.  */
+  cpp_buffer *buffer;
+
+  /* Overlaid buffer (can be different after processing #include).  */
+  cpp_buffer *overlaid_buffer;
+
+  /* Lexer state.  */
+  struct lexer_state state;
+
+  /* Source line tracking.  */
+  struct line_maps *line_table;
+
+  /* The line of the '#' of the current directive.  */
+  source_location directive_line;
+
+  /* Memory buffers.  */
+  _cpp_buff *a_buff;           /* Aligned permanent storage.  */
+  _cpp_buff *u_buff;           /* Unaligned permanent storage.  */
+  _cpp_buff *free_buffs;       /* Free buffer chain.  */
+
+  /* Context stack.  */
+  struct cpp_context base_context;
+  struct cpp_context *context;
+
+  /* If in_directive, the directive if known.  */
+  const struct directive *directive;
+
+  /* Token generated while handling a directive, if any. */
+  cpp_token directive_result;
+
+  /* When expanding a macro at top-level, this is the location of the
+     macro invocation.  */
+  source_location invocation_location;
+
+  /* True if this call to cpp_get_token should consider setting
+     invocation_location.  */
+  bool set_invocation_location;
+
+  /* Search paths for include files.  */
+  struct cpp_dir *quote_include;       /* "" */
+  struct cpp_dir *bracket_include;     /* <> */
+  struct cpp_dir no_search_path;       /* No path.  */
+
+  /* Chain of all hashed _cpp_file instances.  */
+  struct _cpp_file *all_files;
+
+  struct _cpp_file *main_file;
+
+  /* File and directory hash table.  */
+  struct htab *file_hash;
+  struct htab *dir_hash;
+  struct file_hash_entry_pool *file_hash_entries;
+
+  /* Negative path lookup hash table.  */
+  struct htab *nonexistent_file_hash;
+  struct obstack nonexistent_file_ob;
+
+  /* Nonzero means don't look for #include "foo" the source-file
+     directory.  */
+  bool quote_ignores_source_dir;
+
+  /* Nonzero if any file has contained #pragma once or #import has
+     been used.  */
+  bool seen_once_only;
+
+  /* Multiple include optimization.  */
+  const cpp_hashnode *mi_cmacro;
+  const cpp_hashnode *mi_ind_cmacro;
+  bool mi_valid;
+
+  /* Lexing.  */
+  cpp_token *cur_token;
+  tokenrun base_run, *cur_run;
+  unsigned int lookaheads;
+
+  /* Nonzero prevents the lexer from re-using the token runs.  */
+  unsigned int keep_tokens;
+
+  /* Error counter for exit code.  */
+  unsigned int errors;
+
+  /* Buffer to hold macro definition string.  */
+  unsigned char *macro_buffer;
+  unsigned int macro_buffer_len;
+
+  /* Descriptor for converting from the source character set to the
+     execution character set.  */
+  struct cset_converter narrow_cset_desc;
+
+  /* Descriptor for converting from the source character set to the
+     wide execution character set.  */
+  struct cset_converter wide_cset_desc;
+
+  /* Date and time text.  Calculated together if either is requested.  */
+  const unsigned char *date;
+  const unsigned char *time;
+
+  /* EOF token, and a token forcing paste avoidance.  */
+  cpp_token avoid_paste;
+  cpp_token eof;
+
+  /* Opaque handle to the dependencies of mkdeps.c.  */
+  struct deps *deps;
+
+  /* Obstack holding all macro hash nodes.  This never shrinks.
+     See identifiers.c */
+  struct obstack hash_ob;
+
+  /* Obstack holding buffer and conditional structures.  This is a
+     real stack.  See directives.c.  */
+  struct obstack buffer_ob;
+
+  /* Pragma table - dynamic, because a library user can add to the
+     list of recognized pragmas.  */
+  struct pragma_entry *pragmas;
+
+  /* Call backs to cpplib client.  */
+  struct cpp_callbacks cb;
+
+  /* Identifier hash table.  */
+  struct ht *hash_table;
+
+  /* Expression parser stack.  */
+  struct op *op_stack, *op_limit;
+
+  /* User visible options.  */
+  struct cpp_options opts;
+
+  /* Special nodes - identifiers with predefined significance to the
+     preprocessor.  */
+  struct spec_nodes spec_nodes;
+
+  /* Whether cpplib owns the hashtable.  */
+  bool our_hashtable;
+
+  /* Traditional preprocessing output buffer (a logical line).  */
+  struct
+  {
+    unsigned char *base;
+    unsigned char *limit;
+    unsigned char *cur;
+    source_location first_line;
+  } out;
+
+  /* Used for buffer overlays by traditional.c.  */
+  const unsigned char *saved_cur, *saved_rlimit, *saved_line_base;
+
+  /* A saved list of the defined macros, for dependency checking
+     of precompiled headers.  */
+  struct cpp_savedstate *savedstate;
+
+  /* Next value of __COUNTER__ macro. */
+  unsigned int counter;
+};
+
+/* Character classes.  Based on the more primitive macros in safe-ctype.h.
+   If the definition of `numchar' looks odd to you, please look up the
+   definition of a pp-number in the C standard [section 6.4.8 of C99].
+
+   In the unlikely event that characters other than \r and \n enter
+   the set is_vspace, the macro handle_newline() in lex.c must be
+   updated.  */
+#define _dollar_ok(x)  ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident))
+
+#define is_idchar(x)   (ISIDNUM(x) || _dollar_ok(x))
+#define is_numchar(x)  ISIDNUM(x)
+#define is_idstart(x)  (ISIDST(x) || _dollar_ok(x))
+#define is_numstart(x) ISDIGIT(x)
+#define is_hspace(x)   ISBLANK(x)
+#define is_vspace(x)   IS_VSPACE(x)
+#define is_nvspace(x)  IS_NVSPACE(x)
+#define is_space(x)    IS_SPACE_OR_NUL(x)
+
+/* This table is constant if it can be initialized at compile time,
+   which is the case if cpp was compiled with GCC >=2.7, or another
+   compiler that supports C99.  */
+#if HAVE_DESIGNATED_INITIALIZERS
+extern const unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
+#else
+extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
+#endif
+
+/* Macros.  */
+
+static inline int cpp_in_system_header (cpp_reader *);
+static inline int
+cpp_in_system_header (cpp_reader *pfile)
+{
+  return pfile->buffer ? pfile->buffer->sysp : 0;
+}
+#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic)
+#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional)
+
+static inline int cpp_in_primary_file (cpp_reader *);
+static inline int
+cpp_in_primary_file (cpp_reader *pfile)
+{
+  return pfile->line_table->depth == 1;
+}
+
+/* In errors.c  */
+extern int _cpp_begin_message (cpp_reader *, int,
+                              source_location, unsigned int);
+
+/* In macro.c */
+extern void _cpp_free_definition (cpp_hashnode *);
+extern bool _cpp_create_definition (cpp_reader *, cpp_hashnode *);
+extern void _cpp_pop_context (cpp_reader *);
+extern void _cpp_push_text_context (cpp_reader *, cpp_hashnode *,
+                                   const unsigned char *, size_t);
+extern bool _cpp_save_parameter (cpp_reader *, cpp_macro *, cpp_hashnode *);
+extern bool _cpp_arguments_ok (cpp_reader *, cpp_macro *, const cpp_hashnode *,
+                              unsigned int);
+extern const unsigned char *_cpp_builtin_macro_text (cpp_reader *,
+                                                    cpp_hashnode *);
+extern int _cpp_warn_if_unused_macro (cpp_reader *, cpp_hashnode *, void *);
+extern void _cpp_push_token_context (cpp_reader *, cpp_hashnode *,
+                                    const cpp_token *, unsigned int);
+
+/* In identifiers.c */
+extern void _cpp_init_hashtable (cpp_reader *, hash_table *);
+extern void _cpp_destroy_hashtable (cpp_reader *);
+
+/* In files.c */
+typedef struct _cpp_file _cpp_file;
+extern _cpp_file *_cpp_find_file (cpp_reader *, const char *, cpp_dir *,
+                                 bool, int);
+extern bool _cpp_find_failed (_cpp_file *);
+extern void _cpp_mark_file_once_only (cpp_reader *, struct _cpp_file *);
+extern void _cpp_fake_include (cpp_reader *, const char *);
+extern bool _cpp_stack_file (cpp_reader *, _cpp_file*, bool);
+extern bool _cpp_stack_include (cpp_reader *, const char *, int,
+                               enum include_type);
+extern int _cpp_compare_file_date (cpp_reader *, const char *, int);
+extern void _cpp_report_missing_guards (cpp_reader *);
+extern void _cpp_init_files (cpp_reader *);
+extern void _cpp_cleanup_files (cpp_reader *);
+extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *);
+extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
+extern bool _cpp_read_file_entries (cpp_reader *, FILE *);
+extern struct stat *_cpp_get_file_stat (_cpp_file *);
+
+/* In expr.c */
+extern bool _cpp_parse_expr (cpp_reader *);
+extern struct op *_cpp_expand_op_stack (cpp_reader *);
+
+/* In lex.c */
+extern void _cpp_process_line_notes (cpp_reader *, int);
+extern void _cpp_clean_line (cpp_reader *);
+extern bool _cpp_get_fresh_line (cpp_reader *);
+extern bool _cpp_skip_block_comment (cpp_reader *);
+extern cpp_token *_cpp_temp_token (cpp_reader *);
+extern const cpp_token *_cpp_lex_token (cpp_reader *);
+extern cpp_token *_cpp_lex_direct (cpp_reader *);
+extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
+extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
+
+/* In init.c.  */
+extern void _cpp_maybe_push_include_file (cpp_reader *);
+
+/* In directives.c */
+extern int _cpp_test_assertion (cpp_reader *, unsigned int *);
+extern int _cpp_handle_directive (cpp_reader *, int);
+extern void _cpp_define_builtin (cpp_reader *, const char *);
+extern char ** _cpp_save_pragma_names (cpp_reader *);
+extern void _cpp_restore_pragma_names (cpp_reader *, char **);
+extern int _cpp_do__Pragma (cpp_reader *);
+extern void _cpp_init_directives (cpp_reader *);
+extern void _cpp_init_internal_pragmas (cpp_reader *);
+extern void _cpp_do_file_change (cpp_reader *, enum lc_reason, const char *,
+                                unsigned int, unsigned int);
+extern void _cpp_pop_buffer (cpp_reader *);
+
+/* In directives.c */
+struct _cpp_dir_only_callbacks
+{
+  /* Called to print a block of lines. */
+  void (*print_lines) (int, const void *, size_t);
+  void (*maybe_print_line) (source_location);
+};
+
+extern void _cpp_preprocess_dir_only (cpp_reader *,
+                                     const struct _cpp_dir_only_callbacks *);
+
+/* In traditional.c.  */
+extern bool _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *);
+extern bool _cpp_read_logical_line_trad (cpp_reader *);
+extern void _cpp_overlay_buffer (cpp_reader *pfile, const unsigned char *,
+                                size_t);
+extern void _cpp_remove_overlay (cpp_reader *);
+extern bool _cpp_create_trad_definition (cpp_reader *, cpp_macro *);
+extern bool _cpp_expansions_different_trad (const cpp_macro *,
+                                           const cpp_macro *);
+extern unsigned char *_cpp_copy_replacement_text (const cpp_macro *,
+                                                 unsigned char *);
+extern size_t _cpp_replacement_text_len (const cpp_macro *);
+
+/* In charset.c.  */
+
+/* The normalization state at this point in the sequence.
+   It starts initialized to all zeros, and at the end
+   'level' is the normalization level of the sequence.  */
+
+struct normalize_state 
+{
+  /* The previous character.  */
+  cppchar_t previous;
+  /* The combining class of the previous character.  */
+  unsigned char prev_class;
+  /* The lowest normalization level so far.  */
+  enum cpp_normalize_level level;
+};
+#define INITIAL_NORMALIZE_STATE { 0, 0, normalized_KC }
+#define NORMALIZE_STATE_RESULT(st) ((st)->level)
+
+/* We saw a character that matches ISIDNUM(), update a
+   normalize_state appropriately.  */
+#define NORMALIZE_STATE_UPDATE_IDNUM(st) \
+  ((st)->previous = 0, (st)->prev_class = 0)
+
+extern cppchar_t _cpp_valid_ucn (cpp_reader *, const unsigned char **,
+                                const unsigned char *, int,
+                                struct normalize_state *state);
+extern void _cpp_destroy_iconv (cpp_reader *);
+extern unsigned char *_cpp_convert_input (cpp_reader *, const char *,
+                                         unsigned char *, size_t, size_t,
+                                         off_t *);
+extern const char *_cpp_default_encoding (void);
+extern cpp_hashnode * _cpp_interpret_identifier (cpp_reader *pfile,
+                                                const unsigned char *id,
+                                                size_t len);
+
+/* Utility routines and macros.  */
+#define DSC(str) (const unsigned char *)str, sizeof str - 1
+
+/* These are inline functions instead of macros so we can get type
+   checking.  */
+static inline int ustrcmp (const unsigned char *, const unsigned char *);
+static inline int ustrncmp (const unsigned char *, const unsigned char *,
+                           size_t);
+static inline size_t ustrlen (const unsigned char *);
+static inline unsigned char *uxstrdup (const unsigned char *);
+static inline unsigned char *ustrchr (const unsigned char *, int);
+static inline int ufputs (const unsigned char *, FILE *);
+
+/* Use a const char for the second parameter since it is usually a literal.  */
+static inline int ustrcspn (const unsigned char *, const char *);
+
+static inline int
+ustrcmp (const unsigned char *s1, const unsigned char *s2)
+{
+  return strcmp ((const char *)s1, (const char *)s2);
+}
+
+static inline int
+ustrncmp (const unsigned char *s1, const unsigned char *s2, size_t n)
+{
+  return strncmp ((const char *)s1, (const char *)s2, n);
+}
+
+static inline int
+ustrcspn (const unsigned char *s1, const char *s2)
+{
+  return strcspn ((const char *)s1, s2);
+}
+
+static inline size_t
+ustrlen (const unsigned char *s1)
+{
+  return strlen ((const char *)s1);
+}
+
+static inline unsigned char *
+uxstrdup (const unsigned char *s1)
+{
+  return (unsigned char *) xstrdup ((const char *)s1);
+}
+
+static inline unsigned char *
+ustrchr (const unsigned char *s1, int c)
+{
+  return (unsigned char *) strchr ((const char *)s1, c);
+}
+
+static inline int
+ufputs (const unsigned char *s, FILE *f)
+{
+  return fputs ((const char *)s, f);
+}
+
+#endif /* ! LIBCPP_INTERNAL_H */
diff --git a/libcpp/lex.c b/libcpp/lex.c
new file mode 100644 (file)
index 0000000..c3edcfd
--- /dev/null
@@ -0,0 +1,1723 @@
+/* CPP Library - lexical analysis.
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+   Broken out to separate file, Zack Weinberg, Mar 2000
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+enum spell_type
+{
+  SPELL_OPERATOR = 0,
+  SPELL_IDENT,
+  SPELL_LITERAL,
+  SPELL_NONE
+};
+
+struct token_spelling
+{
+  enum spell_type category;
+  const unsigned char *name;
+};
+
+static const unsigned char *const digraph_spellings[] =
+{ U"%:", U"%:%:", U"<:", U":>", U"<%", U"%>" };
+
+#define OP(e, s) { SPELL_OPERATOR, U s  },
+#define TK(e, s) { SPELL_ ## s,    U #e },
+static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE };
+#undef OP
+#undef TK
+
+#define TOKEN_SPELL(token) (token_spellings[(token)->type].category)
+#define TOKEN_NAME(token) (token_spellings[(token)->type].name)
+
+static void add_line_note (cpp_buffer *, const uchar *, unsigned int);
+static int skip_line_comment (cpp_reader *);
+static void skip_whitespace (cpp_reader *, cppchar_t);
+static void lex_string (cpp_reader *, cpp_token *, const uchar *);
+static void save_comment (cpp_reader *, cpp_token *, const uchar *, cppchar_t);
+static void create_literal (cpp_reader *, cpp_token *, const uchar *,
+                           unsigned int, enum cpp_ttype);
+static bool warn_in_comment (cpp_reader *, _cpp_line_note *);
+static int name_p (cpp_reader *, const cpp_string *);
+static tokenrun *next_tokenrun (tokenrun *);
+
+static _cpp_buff *new_buff (size_t);
+
+
+/* Utility routine:
+
+   Compares, the token TOKEN to the NUL-terminated string STRING.
+   TOKEN must be a CPP_NAME.  Returns 1 for equal, 0 for unequal.  */
+int
+cpp_ideq (const cpp_token *token, const char *string)
+{
+  if (token->type != CPP_NAME)
+    return 0;
+
+  return !ustrcmp (NODE_NAME (token->val.node), (const uchar *) string);
+}
+
+/* Record a note TYPE at byte POS into the current cleaned logical
+   line.  */
+static void
+add_line_note (cpp_buffer *buffer, const uchar *pos, unsigned int type)
+{
+  if (buffer->notes_used == buffer->notes_cap)
+    {
+      buffer->notes_cap = buffer->notes_cap * 2 + 200;
+      buffer->notes = XRESIZEVEC (_cpp_line_note, buffer->notes,
+                                  buffer->notes_cap);
+    }
+
+  buffer->notes[buffer->notes_used].pos = pos;
+  buffer->notes[buffer->notes_used].type = type;
+  buffer->notes_used++;
+}
+
+/* Returns with a logical line that contains no escaped newlines or
+   trigraphs.  This is a time-critical inner loop.  */
+void
+_cpp_clean_line (cpp_reader *pfile)
+{
+  cpp_buffer *buffer;
+  const uchar *s;
+  uchar c, *d, *p;
+
+  buffer = pfile->buffer;
+  buffer->cur_note = buffer->notes_used = 0;
+  buffer->cur = buffer->line_base = buffer->next_line;
+  buffer->need_line = false;
+  s = buffer->next_line - 1;
+
+  if (!buffer->from_stage3)
+    {
+      const uchar *pbackslash = NULL;
+
+      /* Short circuit for the common case of an un-escaped line with
+        no trigraphs.  The primary win here is by not writing any
+        data back to memory until we have to.  */
+      for (;;)
+       {
+         c = *++s;
+         if (__builtin_expect (c == '\n', false)
+             || __builtin_expect (c == '\r', false))
+           {
+             d = (uchar *) s;
+
+             if (__builtin_expect (s == buffer->rlimit, false))
+               goto done;
+
+             /* DOS line ending? */
+             if (__builtin_expect (c == '\r', false)
+                 && s[1] == '\n')
+               {
+                 s++;
+                 if (s == buffer->rlimit)
+                   goto done;
+               }
+
+             if (__builtin_expect (pbackslash == NULL, true))
+               goto done;
+
+             /* Check for escaped newline.  */
+             p = d;
+             while (is_nvspace (p[-1]))
+               p--;
+             if (p - 1 != pbackslash)
+               goto done;
+
+             /* Have an escaped newline; process it and proceed to
+                the slow path.  */
+             add_line_note (buffer, p - 1, p != d ? ' ' : '\\');
+             d = p - 2;
+             buffer->next_line = p - 1;
+             break;
+           }
+         if (__builtin_expect (c == '\\', false))
+           pbackslash = s;
+         else if (__builtin_expect (c == '?', false)
+                  && __builtin_expect (s[1] == '?', false)
+                  && _cpp_trigraph_map[s[2]])
+           {
+             /* Have a trigraph.  We may or may not have to convert
+                it.  Add a line note regardless, for -Wtrigraphs.  */
+             add_line_note (buffer, s, s[2]);
+             if (CPP_OPTION (pfile, trigraphs))
+               {
+                 /* We do, and that means we have to switch to the
+                    slow path.  */
+                 d = (uchar *) s;
+                 *d = _cpp_trigraph_map[s[2]];
+                 s += 2;
+                 break;
+               }
+           }
+       }
+
+
+      for (;;)
+       {
+         c = *++s;
+         *++d = c;
+
+         if (c == '\n' || c == '\r')
+           {
+                 /* Handle DOS line endings.  */
+             if (c == '\r' && s != buffer->rlimit && s[1] == '\n')
+               s++;
+             if (s == buffer->rlimit)
+               break;
+
+             /* Escaped?  */
+             p = d;
+             while (p != buffer->next_line && is_nvspace (p[-1]))
+               p--;
+             if (p == buffer->next_line || p[-1] != '\\')
+               break;
+
+             add_line_note (buffer, p - 1, p != d ? ' ': '\\');
+             d = p - 2;
+             buffer->next_line = p - 1;
+           }
+         else if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]])
+           {
+             /* Add a note regardless, for the benefit of -Wtrigraphs.  */
+             add_line_note (buffer, d, s[2]);
+             if (CPP_OPTION (pfile, trigraphs))
+               {
+                 *d = _cpp_trigraph_map[s[2]];
+                 s += 2;
+               }
+           }
+       }
+    }
+  else
+    {
+      do
+       s++;
+      while (*s != '\n' && *s != '\r');
+      d = (uchar *) s;
+
+      /* Handle DOS line endings.  */
+      if (*s == '\r' && s != buffer->rlimit && s[1] == '\n')
+       s++;
+    }
+
+ done:
+  *d = '\n';
+  /* A sentinel note that should never be processed.  */
+  add_line_note (buffer, d + 1, '\n');
+  buffer->next_line = s + 1;
+}
+
+/* Return true if the trigraph indicated by NOTE should be warned
+   about in a comment.  */
+static bool
+warn_in_comment (cpp_reader *pfile, _cpp_line_note *note)
+{
+  const uchar *p;
+
+  /* Within comments we don't warn about trigraphs, unless the
+     trigraph forms an escaped newline, as that may change
+     behavior.  */
+  if (note->type != '/')
+    return false;
+
+  /* If -trigraphs, then this was an escaped newline iff the next note
+     is coincident.  */
+  if (CPP_OPTION (pfile, trigraphs))
+    return note[1].pos == note->pos;
+
+  /* Otherwise, see if this forms an escaped newline.  */
+  p = note->pos + 3;
+  while (is_nvspace (*p))
+    p++;
+
+  /* There might have been escaped newlines between the trigraph and the
+     newline we found.  Hence the position test.  */
+  return (*p == '\n' && p < note[1].pos);
+}
+
+/* Process the notes created by add_line_note as far as the current
+   location.  */
+void
+_cpp_process_line_notes (cpp_reader *pfile, int in_comment)
+{
+  cpp_buffer *buffer = pfile->buffer;
+
+  for (;;)
+    {
+      _cpp_line_note *note = &buffer->notes[buffer->cur_note];
+      unsigned int col;
+
+      if (note->pos > buffer->cur)
+       break;
+
+      buffer->cur_note++;
+      col = CPP_BUF_COLUMN (buffer, note->pos + 1);
+
+      if (note->type == '\\' || note->type == ' ')
+       {
+         if (note->type == ' ' && !in_comment)
+           cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
+                                "backslash and newline separated by space");
+
+         if (buffer->next_line > buffer->rlimit)
+           {
+             cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, col,
+                                  "backslash-newline at end of file");
+             /* Prevent "no newline at end of file" warning.  */
+             buffer->next_line = buffer->rlimit;
+           }
+
+         buffer->line_base = note->pos;
+         CPP_INCREMENT_LINE (pfile, 0);
+       }
+      else if (_cpp_trigraph_map[note->type])
+       {
+         if (CPP_OPTION (pfile, warn_trigraphs)
+             && (!in_comment || warn_in_comment (pfile, note)))
+           {
+             if (CPP_OPTION (pfile, trigraphs))
+               cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
+                                    "trigraph ??%c converted to %c",
+                                    note->type,
+                                    (int) _cpp_trigraph_map[note->type]);
+             else
+               {
+                 cpp_error_with_line 
+                   (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
+                    "trigraph ??%c ignored, use -trigraphs to enable",
+                    note->type);
+               }
+           }
+       }
+      else
+       abort ();
+    }
+}
+
+/* Skip a C-style block comment.  We find the end of the comment by
+   seeing if an asterisk is before every '/' we encounter.  Returns
+   nonzero if comment terminated by EOF, zero otherwise.
+
+   Buffer->cur points to the initial asterisk of the comment.  */
+bool
+_cpp_skip_block_comment (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  const uchar *cur = buffer->cur;
+  uchar c;
+
+  cur++;
+  if (*cur == '/')
+    cur++;
+
+  for (;;)
+    {
+      /* People like decorating comments with '*', so check for '/'
+        instead for efficiency.  */
+      c = *cur++;
+
+      if (c == '/')
+       {
+         if (cur[-2] == '*')
+           break;
+
+         /* Warn about potential nested comments, but not if the '/'
+            comes immediately before the true comment delimiter.
+            Don't bother to get it right across escaped newlines.  */
+         if (CPP_OPTION (pfile, warn_comments)
+             && cur[0] == '*' && cur[1] != '/')
+           {
+             buffer->cur = cur;
+             cpp_error_with_line (pfile, CPP_DL_WARNING,
+                                  pfile->line_table->highest_line, CPP_BUF_COL (buffer),
+                                  "\"/*\" within comment");
+           }
+       }
+      else if (c == '\n')
+       {
+         unsigned int cols;
+         buffer->cur = cur - 1;
+         _cpp_process_line_notes (pfile, true);
+         if (buffer->next_line >= buffer->rlimit)
+           return true;
+         _cpp_clean_line (pfile);
+
+         cols = buffer->next_line - buffer->line_base;
+         CPP_INCREMENT_LINE (pfile, cols);
+
+         cur = buffer->cur;
+       }
+    }
+
+  buffer->cur = cur;
+  _cpp_process_line_notes (pfile, true);
+  return false;
+}
+
+/* Skip a C++ line comment, leaving buffer->cur pointing to the
+   terminating newline.  Handles escaped newlines.  Returns nonzero
+   if a multiline comment.  */
+static int
+skip_line_comment (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  unsigned int orig_line = pfile->line_table->highest_line;
+
+  while (*buffer->cur != '\n')
+    buffer->cur++;
+
+  _cpp_process_line_notes (pfile, true);
+  return orig_line != pfile->line_table->highest_line;
+}
+
+/* Skips whitespace, saving the next non-whitespace character.  */
+static void
+skip_whitespace (cpp_reader *pfile, cppchar_t c)
+{
+  cpp_buffer *buffer = pfile->buffer;
+  bool saw_NUL = false;
+
+  do
+    {
+      /* Horizontal space always OK.  */
+      if (c == ' ' || c == '\t')
+       ;
+      /* Just \f \v or \0 left.  */
+      else if (c == '\0')
+       saw_NUL = true;
+      else if (pfile->state.in_directive && CPP_PEDANTIC (pfile))
+       cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
+                            CPP_BUF_COL (buffer),
+                            "%s in preprocessing directive",
+                            c == '\f' ? "form feed" : "vertical tab");
+
+      c = *buffer->cur++;
+    }
+  /* We only want non-vertical space, i.e. ' ' \t \f \v \0.  */
+  while (is_nvspace (c));
+
+  if (saw_NUL)
+    cpp_error (pfile, CPP_DL_WARNING, "null character(s) ignored");
+
+  buffer->cur--;
+}
+
+/* See if the characters of a number token are valid in a name (no
+   '.', '+' or '-').  */
+static int
+name_p (cpp_reader *pfile, const cpp_string *string)
+{
+  unsigned int i;
+
+  for (i = 0; i < string->len; i++)
+    if (!is_idchar (string->text[i]))
+      return 0;
+
+  return 1;
+}
+
+/* After parsing an identifier or other sequence, produce a warning about
+   sequences not in NFC/NFKC.  */
+static void
+warn_about_normalization (cpp_reader *pfile, 
+                         const cpp_token *token,
+                         const struct normalize_state *s)
+{
+  if (CPP_OPTION (pfile, warn_normalize) < NORMALIZE_STATE_RESULT (s)
+      && !pfile->state.skipping)
+    {
+      /* Make sure that the token is printed using UCNs, even
+        if we'd otherwise happily print UTF-8.  */
+      unsigned char *buf = XNEWVEC (unsigned char, cpp_token_len (token));
+      size_t sz;
+
+      sz = cpp_spell_token (pfile, token, buf, false) - buf;
+      if (NORMALIZE_STATE_RESULT (s) == normalized_C)
+       cpp_error_with_line (pfile, CPP_DL_WARNING, token->src_loc, 0,
+                            "`%.*s' is not in NFKC", (int) sz, buf);
+      else
+       cpp_error_with_line (pfile, CPP_DL_WARNING, token->src_loc, 0,
+                            "`%.*s' is not in NFC", (int) sz, buf);
+    }
+}
+
+/* Returns TRUE if the sequence starting at buffer->cur is invalid in
+   an identifier.  FIRST is TRUE if this starts an identifier.  */
+static bool
+forms_identifier_p (cpp_reader *pfile, int first,
+                   struct normalize_state *state)
+{
+  cpp_buffer *buffer = pfile->buffer;
+
+  if (*buffer->cur == '$')
+    {
+      if (!CPP_OPTION (pfile, dollars_in_ident))
+       return false;
+
+      buffer->cur++;
+      if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
+       {
+         CPP_OPTION (pfile, warn_dollars) = 0;
+         cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
+       }
+
+      return true;
+    }
+
+  /* Is this a syntactically valid UCN?  */
+  if (CPP_OPTION (pfile, extended_identifiers)
+      && *buffer->cur == '\\'
+      && (buffer->cur[1] == 'u' || buffer->cur[1] == 'U'))
+    {
+      buffer->cur += 2;
+      if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first,
+                         state))
+       return true;
+      buffer->cur -= 2;
+    }
+
+  return false;
+}
+
+/* Lex an identifier starting at BUFFER->CUR - 1.  */
+static cpp_hashnode *
+lex_identifier (cpp_reader *pfile, const uchar *base, bool starts_ucn,
+               struct normalize_state *nst)
+{
+  cpp_hashnode *result;
+  const uchar *cur;
+  unsigned int len;
+  unsigned int hash = HT_HASHSTEP (0, *base);
+
+  cur = pfile->buffer->cur;
+  if (! starts_ucn)
+    while (ISIDNUM (*cur))
+      {
+       hash = HT_HASHSTEP (hash, *cur);
+       cur++;
+      }
+  pfile->buffer->cur = cur;
+  if (starts_ucn || forms_identifier_p (pfile, false, nst))
+    {
+      /* Slower version for identifiers containing UCNs (or $).  */
+      do {
+       while (ISIDNUM (*pfile->buffer->cur))
+         {
+           pfile->buffer->cur++;
+           NORMALIZE_STATE_UPDATE_IDNUM (nst);
+         }
+      } while (forms_identifier_p (pfile, false, nst));
+      result = _cpp_interpret_identifier (pfile, base,
+                                         pfile->buffer->cur - base);
+    }
+  else
+    {
+      len = cur - base;
+      hash = HT_HASHFINISH (hash, len);
+
+      result = (cpp_hashnode *)
+       ht_lookup_with_hash (pfile->hash_table, base, len, hash, HT_ALLOC);
+    }
+
+  /* Rarely, identifiers require diagnostics when lexed.  */
+  if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
+                       && !pfile->state.skipping, 0))
+    {
+      /* It is allowed to poison the same identifier twice.  */
+      if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
+       cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
+                  NODE_NAME (result));
+
+      /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
+        replacement list of a variadic macro.  */
+      if (result == pfile->spec_nodes.n__VA_ARGS__
+         && !pfile->state.va_args_ok)
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "__VA_ARGS__ can only appear in the expansion"
+                  " of a C99 variadic macro");
+    }
+
+  return result;
+}
+
+/* Lex a number to NUMBER starting at BUFFER->CUR - 1.  */
+static void
+lex_number (cpp_reader *pfile, cpp_string *number,
+           struct normalize_state *nst)
+{
+  const uchar *cur;
+  const uchar *base;
+  uchar *dest;
+
+  base = pfile->buffer->cur - 1;
+  do
+    {
+      cur = pfile->buffer->cur;
+
+      /* N.B. ISIDNUM does not include $.  */
+      while (ISIDNUM (*cur) || *cur == '.' || VALID_SIGN (*cur, cur[-1]))
+       {
+         cur++;
+         NORMALIZE_STATE_UPDATE_IDNUM (nst);
+       }
+
+      pfile->buffer->cur = cur;
+    }
+  while (forms_identifier_p (pfile, false, nst));
+
+  number->len = cur - base;
+  dest = _cpp_unaligned_alloc (pfile, number->len + 1);
+  memcpy (dest, base, number->len);
+  dest[number->len] = '\0';
+  number->text = dest;
+}
+
+/* Create a token of type TYPE with a literal spelling.  */
+static void
+create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base,
+               unsigned int len, enum cpp_ttype type)
+{
+  uchar *dest = _cpp_unaligned_alloc (pfile, len + 1);
+
+  memcpy (dest, base, len);
+  dest[len] = '\0';
+  token->type = type;
+  token->val.str.len = len;
+  token->val.str.text = dest;
+}
+
+/* Lexes a string, character constant, or angle-bracketed header file
+   name.  The stored string contains the spelling, including opening
+   quote and leading any leading 'L'.  It returns the type of the
+   literal, or CPP_OTHER if it was not properly terminated.
+
+   The spelling is NUL-terminated, but it is not guaranteed that this
+   is the first NUL since embedded NULs are preserved.  */
+static void
+lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
+{
+  bool saw_NUL = false;
+  const uchar *cur;
+  cppchar_t terminator;
+  enum cpp_ttype type;
+
+  cur = base;
+  terminator = *cur++;
+  if (terminator == 'L')
+    terminator = *cur++;
+  if (terminator == '\"')
+    type = *base == 'L' ? CPP_WSTRING: CPP_STRING;
+  else if (terminator == '\'')
+    type = *base == 'L' ? CPP_WCHAR: CPP_CHAR;
+  else
+    terminator = '>', type = CPP_HEADER_NAME;
+
+  for (;;)
+    {
+      cppchar_t c = *cur++;
+
+      /* In #include-style directives, terminators are not escapable.  */
+      if (c == '\\' && !pfile->state.angled_headers && *cur != '\n')
+       cur++;
+      else if (c == terminator)
+       break;
+      else if (c == '\n')
+       {
+         cur--;
+         type = CPP_OTHER;
+         break;
+       }
+      else if (c == '\0')
+       saw_NUL = true;
+    }
+
+  if (saw_NUL && !pfile->state.skipping)
+    cpp_error (pfile, CPP_DL_WARNING,
+              "null character(s) preserved in literal");
+
+  if (type == CPP_OTHER && CPP_OPTION (pfile, lang) != CLK_ASM)
+    cpp_error (pfile, CPP_DL_PEDWARN, "missing terminating %c character",
+              (int) terminator);
+
+  pfile->buffer->cur = cur;
+  create_literal (pfile, token, base, cur - base, type);
+}
+
+/* The stored comment includes the comment start and any terminator.  */
+static void
+save_comment (cpp_reader *pfile, cpp_token *token, const unsigned char *from,
+             cppchar_t type)
+{
+  unsigned char *buffer;
+  unsigned int len, clen;
+
+  len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'.  */
+
+  /* C++ comments probably (not definitely) have moved past a new
+     line, which we don't want to save in the comment.  */
+  if (is_vspace (pfile->buffer->cur[-1]))
+    len--;
+
+  /* If we are currently in a directive, then we need to store all
+     C++ comments as C comments internally, and so we need to
+     allocate a little extra space in that case.
+
+     Note that the only time we encounter a directive here is
+     when we are saving comments in a "#define".  */
+  clen = (pfile->state.in_directive && type == '/') ? len + 2 : len;
+
+  buffer = _cpp_unaligned_alloc (pfile, clen);
+
+  token->type = CPP_COMMENT;
+  token->val.str.len = clen;
+  token->val.str.text = buffer;
+
+  buffer[0] = '/';
+  memcpy (buffer + 1, from, len - 1);
+
+  /* Finish conversion to a C comment, if necessary.  */
+  if (pfile->state.in_directive && type == '/')
+    {
+      buffer[1] = '*';
+      buffer[clen - 2] = '*';
+      buffer[clen - 1] = '/';
+    }
+}
+
+/* Allocate COUNT tokens for RUN.  */
+void
+_cpp_init_tokenrun (tokenrun *run, unsigned int count)
+{
+  run->base = XNEWVEC (cpp_token, count);
+  run->limit = run->base + count;
+  run->next = NULL;
+}
+
+/* Returns the next tokenrun, or creates one if there is none.  */
+static tokenrun *
+next_tokenrun (tokenrun *run)
+{
+  if (run->next == NULL)
+    {
+      run->next = XNEW (tokenrun);
+      run->next->prev = run;
+      _cpp_init_tokenrun (run->next, 250);
+    }
+
+  return run->next;
+}
+
+/* Allocate a single token that is invalidated at the same time as the
+   rest of the tokens on the line.  Has its line and col set to the
+   same as the last lexed token, so that diagnostics appear in the
+   right place.  */
+cpp_token *
+_cpp_temp_token (cpp_reader *pfile)
+{
+  cpp_token *old, *result;
+
+  old = pfile->cur_token - 1;
+  if (pfile->cur_token == pfile->cur_run->limit)
+    {
+      pfile->cur_run = next_tokenrun (pfile->cur_run);
+      pfile->cur_token = pfile->cur_run->base;
+    }
+
+  result = pfile->cur_token++;
+  result->src_loc = old->src_loc;
+  return result;
+}
+
+/* Lex a token into RESULT (external interface).  Takes care of issues
+   like directive handling, token lookahead, multiple include
+   optimization and skipping.  */
+const cpp_token *
+_cpp_lex_token (cpp_reader *pfile)
+{
+  cpp_token *result;
+
+  for (;;)
+    {
+      if (pfile->cur_token == pfile->cur_run->limit)
+       {
+         pfile->cur_run = next_tokenrun (pfile->cur_run);
+         pfile->cur_token = pfile->cur_run->base;
+       }
+      /* We assume that the current token is somewhere in the current
+        run.  */
+      if (pfile->cur_token < pfile->cur_run->base
+         || pfile->cur_token >= pfile->cur_run->limit)
+       abort ();
+
+      if (pfile->lookaheads)
+       {
+         pfile->lookaheads--;
+         result = pfile->cur_token++;
+       }
+      else
+       result = _cpp_lex_direct (pfile);
+
+      if (result->flags & BOL)
+       {
+         /* Is this a directive.  If _cpp_handle_directive returns
+            false, it is an assembler #.  */
+         if (result->type == CPP_HASH
+             /* 6.10.3 p 11: Directives in a list of macro arguments
+                gives undefined behavior.  This implementation
+                handles the directive as normal.  */
+             && pfile->state.parsing_args != 1)
+           {
+             if (_cpp_handle_directive (pfile, result->flags & PREV_WHITE))
+               {
+                 if (pfile->directive_result.type == CPP_PADDING)
+                   continue;
+                 result = &pfile->directive_result;
+               }
+           }
+         else if (pfile->state.in_deferred_pragma)
+           result = &pfile->directive_result;
+
+         if (pfile->cb.line_change && !pfile->state.skipping)
+           pfile->cb.line_change (pfile, result, pfile->state.parsing_args);
+       }
+
+      /* We don't skip tokens in directives.  */
+      if (pfile->state.in_directive || pfile->state.in_deferred_pragma)
+       break;
+
+      /* Outside a directive, invalidate controlling macros.  At file
+        EOF, _cpp_lex_direct takes care of popping the buffer, so we never
+        get here and MI optimization works.  */
+      pfile->mi_valid = false;
+
+      if (!pfile->state.skipping || result->type == CPP_EOF)
+       break;
+    }
+
+  return result;
+}
+
+/* Returns true if a fresh line has been loaded.  */
+bool
+_cpp_get_fresh_line (cpp_reader *pfile)
+{
+  int return_at_eof;
+
+  /* We can't get a new line until we leave the current directive.  */
+  if (pfile->state.in_directive)
+    return false;
+
+  for (;;)
+    {
+      cpp_buffer *buffer = pfile->buffer;
+
+      if (!buffer->need_line)
+       return true;
+
+      if (buffer->next_line < buffer->rlimit)
+       {
+         _cpp_clean_line (pfile);
+         return true;
+       }
+
+      /* First, get out of parsing arguments state.  */
+      if (pfile->state.parsing_args)
+       return false;
+
+      /* End of buffer.  Non-empty files should end in a newline.  */
+      if (buffer->buf != buffer->rlimit
+         && buffer->next_line > buffer->rlimit
+         && !buffer->from_stage3)
+       {
+         /* Clip to buffer size.  */
+         buffer->next_line = buffer->rlimit;
+       }
+
+      return_at_eof = buffer->return_at_eof;
+      _cpp_pop_buffer (pfile);
+      if (pfile->buffer == NULL || return_at_eof)
+       return false;
+    }
+}
+
+#define IF_NEXT_IS(CHAR, THEN_TYPE, ELSE_TYPE)         \
+  do                                                   \
+    {                                                  \
+      result->type = ELSE_TYPE;                                \
+      if (*buffer->cur == CHAR)                                \
+       buffer->cur++, result->type = THEN_TYPE;        \
+    }                                                  \
+  while (0)
+
+/* Lex a token into pfile->cur_token, which is also incremented, to
+   get diagnostics pointing to the correct location.
+
+   Does not handle issues such as token lookahead, multiple-include
+   optimization, directives, skipping etc.  This function is only
+   suitable for use by _cpp_lex_token, and in special cases like
+   lex_expansion_token which doesn't care for any of these issues.
+
+   When meeting a newline, returns CPP_EOF if parsing a directive,
+   otherwise returns to the start of the token buffer if permissible.
+   Returns the location of the lexed token.  */
+cpp_token *
+_cpp_lex_direct (cpp_reader *pfile)
+{
+  cppchar_t c;
+  cpp_buffer *buffer;
+  const unsigned char *comment_start;
+  cpp_token *result = pfile->cur_token++;
+
+ fresh_line:
+  result->flags = 0;
+  buffer = pfile->buffer;
+  if (buffer->need_line)
+    {
+      if (pfile->state.in_deferred_pragma)
+       {
+         result->type = CPP_PRAGMA_EOL;
+         pfile->state.in_deferred_pragma = false;
+         if (!pfile->state.pragma_allow_expansion)
+           pfile->state.prevent_expansion--;
+         return result;
+       }
+      if (!_cpp_get_fresh_line (pfile))
+       {
+         result->type = CPP_EOF;
+         if (!pfile->state.in_directive)
+           {
+             /* Tell the compiler the line number of the EOF token.  */
+             result->src_loc = pfile->line_table->highest_line;
+             result->flags = BOL;
+           }
+         return result;
+       }
+      if (!pfile->keep_tokens)
+       {
+         pfile->cur_run = &pfile->base_run;
+         result = pfile->base_run.base;
+         pfile->cur_token = result + 1;
+       }
+      result->flags = BOL;
+      if (pfile->state.parsing_args == 2)
+       result->flags |= PREV_WHITE;
+    }
+  buffer = pfile->buffer;
+ update_tokens_line:
+  result->src_loc = pfile->line_table->highest_line;
+
+ skipped_white:
+  if (buffer->cur >= buffer->notes[buffer->cur_note].pos
+      && !pfile->overlaid_buffer)
+    {
+      _cpp_process_line_notes (pfile, false);
+      result->src_loc = pfile->line_table->highest_line;
+    }
+  c = *buffer->cur++;
+
+  LINEMAP_POSITION_FOR_COLUMN (result->src_loc, pfile->line_table,
+                              CPP_BUF_COLUMN (buffer, buffer->cur));
+
+  switch (c)
+    {
+    case ' ': case '\t': case '\f': case '\v': case '\0':
+      result->flags |= PREV_WHITE;
+      skip_whitespace (pfile, c);
+      goto skipped_white;
+
+    case '\n':
+      if (buffer->cur < buffer->rlimit)
+       CPP_INCREMENT_LINE (pfile, 0);
+      buffer->need_line = true;
+      goto fresh_line;
+
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+       struct normalize_state nst = INITIAL_NORMALIZE_STATE;
+       result->type = CPP_NUMBER;
+       lex_number (pfile, &result->val.str, &nst);
+       warn_about_normalization (pfile, result, &nst);
+       break;
+      }
+
+    case 'L':
+      /* 'L' may introduce wide characters or strings.  */
+      if (*buffer->cur == '\'' || *buffer->cur == '"')
+       {
+         lex_string (pfile, result, buffer->cur - 1);
+         break;
+       }
+      /* Fall through.  */
+
+    case '_':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+      result->type = CPP_NAME;
+      {
+       struct normalize_state nst = INITIAL_NORMALIZE_STATE;
+       result->val.node = lex_identifier (pfile, buffer->cur - 1, false,
+                                          &nst);
+       warn_about_normalization (pfile, result, &nst);
+      }
+
+      /* Convert named operators to their proper types.  */
+      if (result->val.node->flags & NODE_OPERATOR)
+       {
+         result->flags |= NAMED_OP;
+         result->type = (enum cpp_ttype) result->val.node->directive_index;
+       }
+      break;
+
+    case '\'':
+    case '"':
+      lex_string (pfile, result, buffer->cur - 1);
+      break;
+
+    case '/':
+      /* A potential block or line comment.  */
+      comment_start = buffer->cur;
+      c = *buffer->cur;
+      
+      if (c == '*')
+       {
+         if (_cpp_skip_block_comment (pfile))
+           cpp_error (pfile, CPP_DL_ERROR, "unterminated comment");
+       }
+      else if (c == '/' && (CPP_OPTION (pfile, cplusplus_comments)
+                           || cpp_in_system_header (pfile)))
+       {
+         /* Warn about comments only if pedantically GNUC89, and not
+            in system headers.  */
+         if (CPP_OPTION (pfile, lang) == CLK_GNUC89 && CPP_PEDANTIC (pfile)
+             && ! buffer->warned_cplusplus_comments)
+           {
+             cpp_error (pfile, CPP_DL_PEDWARN,
+                        "C++ style comments are not allowed in ISO C90");
+             cpp_error (pfile, CPP_DL_PEDWARN,
+                        "(this will be reported only once per input file)");
+             buffer->warned_cplusplus_comments = 1;
+           }
+
+         if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments))
+           cpp_error (pfile, CPP_DL_WARNING, "multi-line comment");
+       }
+      else if (c == '=')
+       {
+         buffer->cur++;
+         result->type = CPP_DIV_EQ;
+         break;
+       }
+      else
+       {
+         result->type = CPP_DIV;
+         break;
+       }
+
+      if (!pfile->state.save_comments)
+       {
+         result->flags |= PREV_WHITE;
+         goto update_tokens_line;
+       }
+
+      /* Save the comment as a token in its own right.  */
+      save_comment (pfile, result, comment_start, c);
+      break;
+
+    case '<':
+      if (pfile->state.angled_headers)
+       {
+         lex_string (pfile, result, buffer->cur - 1);
+         break;
+       }
+
+      result->type = CPP_LESS;
+      if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_LESS_EQ;
+      else if (*buffer->cur == '-')
+       buffer->cur++, result->type = CPP_FERED;
+      else if (*buffer->cur == '<')
+       {
+         buffer->cur++;
+         IF_NEXT_IS ('=', CPP_LSHIFT_EQ, CPP_LSHIFT);
+       }
+      else if (CPP_OPTION (pfile, digraphs))
+       {
+         if (*buffer->cur == ':')
+           {
+             buffer->cur++;
+             result->flags |= DIGRAPH;
+             result->type = CPP_OPEN_SQUARE;
+           }
+         else if (*buffer->cur == '%')
+           {
+             buffer->cur++;
+             result->flags |= DIGRAPH;
+             result->type = CPP_OPEN_BRACE;
+           }
+       }
+      break;
+
+    case '>':
+      result->type = CPP_GREATER;
+      if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_GREATER_EQ;
+      else if (*buffer->cur == '>')
+       {
+         buffer->cur++;
+         IF_NEXT_IS ('=', CPP_RSHIFT_EQ, CPP_RSHIFT);
+       }
+      break;
+
+    case '%':
+      result->type = CPP_MOD;
+      if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_MOD_EQ;
+      else if (CPP_OPTION (pfile, digraphs))
+       {
+         if (*buffer->cur == ':')
+           {
+             buffer->cur++;
+             result->flags |= DIGRAPH;
+             result->type = CPP_HASH;
+             if (*buffer->cur == '%' && buffer->cur[1] == ':')
+               buffer->cur += 2, result->type = CPP_PASTE;
+           }
+         else if (*buffer->cur == '>')
+           {
+             buffer->cur++;
+             result->flags |= DIGRAPH;
+             result->type = CPP_CLOSE_BRACE;
+           }
+       }
+      break;
+
+    case '.':
+      result->type = CPP_DOT;
+      if (ISDIGIT (*buffer->cur))
+       {
+         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
+         result->type = CPP_NUMBER;
+         lex_number (pfile, &result->val.str, &nst);
+         warn_about_normalization (pfile, result, &nst);
+       }
+      else if (*buffer->cur == '.' && buffer->cur[1] == '.')
+       buffer->cur += 2, result->type = CPP_ELLIPSIS;
+      else if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
+       buffer->cur++, result->type = CPP_DOT_STAR;
+      break;
+
+    case '+':
+      result->type = CPP_PLUS;
+      if (*buffer->cur == '+')
+       buffer->cur++, result->type = CPP_PLUS_PLUS;
+      else if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_PLUS_EQ;
+      break;
+
+    case '-':
+      result->type = CPP_MINUS;
+      if (*buffer->cur == '>')
+       {
+         buffer->cur++;
+         result->type = CPP_DEREF;
+         if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
+           buffer->cur++, result->type = CPP_DEREF_STAR;
+       }
+      else if (*buffer->cur == '-')
+       buffer->cur++, result->type = CPP_MINUS_MINUS;
+      else if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_MINUS_EQ;
+      break;
+
+    case '&':
+      result->type = CPP_AND;
+      if (*buffer->cur == '&')
+       buffer->cur++, result->type = CPP_AND_AND;
+      else if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_AND_EQ;
+      break;
+
+    case '|':
+      result->type = CPP_OR;
+      if (*buffer->cur == '|')
+       buffer->cur++, result->type = CPP_OR_OR;
+      else if (*buffer->cur == '=')
+       buffer->cur++, result->type = CPP_OR_EQ;
+      break;
+
+    case ':':
+      result->type = CPP_COLON;
+      if (*buffer->cur == ':' && CPP_OPTION (pfile, cplusplus))
+       buffer->cur++, result->type = CPP_SCOPE;
+      else if (*buffer->cur == '>' && CPP_OPTION (pfile, digraphs))
+       {
+         buffer->cur++;
+         result->flags |= DIGRAPH;
+         result->type = CPP_CLOSE_SQUARE;
+       }
+      break;
+
+    case '*': IF_NEXT_IS ('=', CPP_MULT_EQ, CPP_MULT); break;
+    case '=': IF_NEXT_IS ('=', CPP_EQ_EQ, CPP_EQ); break;
+    case '!': IF_NEXT_IS ('=', CPP_NOT_EQ, CPP_NOT); break;
+    case '^': IF_NEXT_IS ('=', CPP_XOR_EQ, CPP_XOR); break;
+    case '#': IF_NEXT_IS ('#', CPP_PASTE, CPP_HASH); break;
+
+    case '?': result->type = CPP_QUERY; break;
+    case '~': result->type = CPP_COMPL; break;
+    case ',': result->type = CPP_COMMA; break;
+    case '(': result->type = CPP_OPEN_PAREN; break;
+    case ')': result->type = CPP_CLOSE_PAREN; break;
+    case '[': result->type = CPP_OPEN_SQUARE; break;
+    case ']': result->type = CPP_CLOSE_SQUARE; break;
+    case '{': result->type = CPP_OPEN_BRACE; break;
+    case '}': result->type = CPP_CLOSE_BRACE; break;
+    case ';': result->type = CPP_SEMICOLON; break;
+
+      /* @ is a punctuator in Objective-C.  */
+    case '@': result->type = CPP_ATSIGN; break;
+
+    case '$':
+    case '\\':
+      {
+       const uchar *base = --buffer->cur;
+       struct normalize_state nst = INITIAL_NORMALIZE_STATE;
+
+       if (forms_identifier_p (pfile, true, &nst))
+         {
+           result->type = CPP_NAME;
+           result->val.node = lex_identifier (pfile, base, true, &nst);
+           warn_about_normalization (pfile, result, &nst);
+           break;
+         }
+       buffer->cur++;
+      }
+
+    default:
+      create_literal (pfile, result, buffer->cur - 1, 1, CPP_OTHER);
+      break;
+    }
+
+  return result;
+}
+
+/* An upper bound on the number of bytes needed to spell TOKEN.
+   Does not include preceding whitespace.  */
+unsigned int
+cpp_token_len (const cpp_token *token)
+{
+  unsigned int len;
+
+  switch (TOKEN_SPELL (token))
+    {
+    default:           len = 4;                                break;
+    case SPELL_LITERAL:        len = token->val.str.len;               break;
+    case SPELL_IDENT:  len = NODE_LEN (token->val.node) * 10;  break;
+    }
+
+  return len;
+}
+
+/* Parse UTF-8 out of NAMEP and place a \U escape in BUFFER.
+   Return the number of bytes read out of NAME.  (There are always
+   10 bytes written to BUFFER.)  */
+
+static size_t
+utf8_to_ucn (unsigned char *buffer, const unsigned char *name)
+{
+  int j;
+  int ucn_len = 0;
+  int ucn_len_c;
+  unsigned t;
+  unsigned long utf32;
+  
+  /* Compute the length of the UTF-8 sequence.  */
+  for (t = *name; t & 0x80; t <<= 1)
+    ucn_len++;
+  
+  utf32 = *name & (0x7F >> ucn_len);
+  for (ucn_len_c = 1; ucn_len_c < ucn_len; ucn_len_c++)
+    {
+      utf32 = (utf32 << 6) | (*++name & 0x3F);
+      
+      /* Ill-formed UTF-8.  */
+      if ((*name & ~0x3F) != 0x80)
+       abort ();
+    }
+  
+  *buffer++ = '\\';
+  *buffer++ = 'U';
+  for (j = 7; j >= 0; j--)
+    *buffer++ = "0123456789abcdef"[(utf32 >> (4 * j)) & 0xF];
+  return ucn_len;
+}
+
+
+/* Write the spelling of a token TOKEN to BUFFER.  The buffer must
+   already contain the enough space to hold the token's spelling.
+   Returns a pointer to the character after the last character written.
+   FORSTRING is true if this is to be the spelling after translation
+   phase 1 (this is different for UCNs).
+   FIXME: Would be nice if we didn't need the PFILE argument.  */
+unsigned char *
+cpp_spell_token (cpp_reader *pfile, const cpp_token *token,
+                unsigned char *buffer, bool forstring)
+{
+  switch (TOKEN_SPELL (token))
+    {
+    case SPELL_OPERATOR:
+      {
+       const unsigned char *spelling;
+       unsigned char c;
+
+       if (token->flags & DIGRAPH)
+         spelling
+           = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH];
+       else if (token->flags & NAMED_OP)
+         goto spell_ident;
+       else
+         spelling = TOKEN_NAME (token);
+
+       while ((c = *spelling++) != '\0')
+         *buffer++ = c;
+      }
+      break;
+
+    spell_ident:
+    case SPELL_IDENT:
+      if (forstring)
+       {
+         memcpy (buffer, NODE_NAME (token->val.node),
+                 NODE_LEN (token->val.node));
+         buffer += NODE_LEN (token->val.node);
+       }
+      else
+       {
+         size_t i;
+         const unsigned char * name = NODE_NAME (token->val.node);
+         
+         for (i = 0; i < NODE_LEN (token->val.node); i++)
+           if (name[i] & ~0x7F)
+             {
+               i += utf8_to_ucn (buffer, name + i) - 1;
+               buffer += 10;
+             }
+           else
+             *buffer++ = NODE_NAME (token->val.node)[i];
+       }
+      break;
+
+    case SPELL_LITERAL:
+      memcpy (buffer, token->val.str.text, token->val.str.len);
+      buffer += token->val.str.len;
+      break;
+
+    case SPELL_NONE:
+      cpp_error (pfile, CPP_DL_ICE,
+                "unspellable token %s", TOKEN_NAME (token));
+      break;
+    }
+
+  return buffer;
+}
+
+/* Returns TOKEN spelt as a null-terminated string.  The string is
+   freed when the reader is destroyed.  Useful for diagnostics.  */
+unsigned char *
+cpp_token_as_text (cpp_reader *pfile, const cpp_token *token)
+{ 
+  unsigned int len = cpp_token_len (token) + 1;
+  unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end;
+
+  end = cpp_spell_token (pfile, token, start, false);
+  end[0] = '\0';
+
+  return start;
+}
+
+/* Used by C front ends, which really should move to using
+   cpp_token_as_text.  */
+const char *
+cpp_type2name (enum cpp_ttype type)
+{
+  return (const char *) token_spellings[type].name;
+}
+
+/* Writes the spelling of token to FP, without any preceding space.
+   Separated from cpp_spell_token for efficiency - to avoid stdio
+   double-buffering.  */
+void
+cpp_output_token (const cpp_token *token, FILE *fp)
+{
+  switch (TOKEN_SPELL (token))
+    {
+    case SPELL_OPERATOR:
+      {
+       const unsigned char *spelling;
+       int c;
+
+       if (token->flags & DIGRAPH)
+         spelling
+           = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH];
+       else if (token->flags & NAMED_OP)
+         goto spell_ident;
+       else
+         spelling = TOKEN_NAME (token);
+
+       c = *spelling;
+       do
+         putc (c, fp);
+       while ((c = *++spelling) != '\0');
+      }
+      break;
+
+    spell_ident:
+    case SPELL_IDENT:
+      {
+       size_t i;
+       const unsigned char * name = NODE_NAME (token->val.node);
+       
+       for (i = 0; i < NODE_LEN (token->val.node); i++)
+         if (name[i] & ~0x7F)
+           {
+             unsigned char buffer[10];
+             i += utf8_to_ucn (buffer, name + i) - 1;
+             fwrite (buffer, 1, 10, fp);
+           }
+         else
+           fputc (NODE_NAME (token->val.node)[i], fp);
+      }
+      break;
+
+    case SPELL_LITERAL:
+      fwrite (token->val.str.text, 1, token->val.str.len, fp);
+      break;
+
+    case SPELL_NONE:
+      /* An error, most probably.  */
+      break;
+    }
+}
+
+/* Compare two tokens.  */
+int
+_cpp_equiv_tokens (const cpp_token *a, const cpp_token *b)
+{
+  if (a->type == b->type && a->flags == b->flags)
+    switch (TOKEN_SPELL (a))
+      {
+      default:                 /* Keep compiler happy.  */
+      case SPELL_OPERATOR:
+       return 1;
+      case SPELL_NONE:
+       return (a->type != CPP_MACRO_ARG || a->val.arg_no == b->val.arg_no);
+      case SPELL_IDENT:
+       return a->val.node == b->val.node;
+      case SPELL_LITERAL:
+       return (a->val.str.len == b->val.str.len
+               && !memcmp (a->val.str.text, b->val.str.text,
+                           a->val.str.len));
+      }
+
+  return 0;
+}
+
+/* Returns nonzero if a space should be inserted to avoid an
+   accidental token paste for output.  For simplicity, it is
+   conservative, and occasionally advises a space where one is not
+   needed, e.g. "." and ".2".  */
+int
+cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1,
+                const cpp_token *token2)
+{
+  enum cpp_ttype a = token1->type, b = token2->type;
+  cppchar_t c;
+
+  if (token1->flags & NAMED_OP)
+    a = CPP_NAME;
+  if (token2->flags & NAMED_OP)
+    b = CPP_NAME;
+
+  c = EOF;
+  if (token2->flags & DIGRAPH)
+    c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0];
+  else if (token_spellings[b].category == SPELL_OPERATOR)
+    c = token_spellings[b].name[0];
+
+  /* Quickly get everything that can paste with an '='.  */
+  if ((int) a <= (int) CPP_LAST_EQ && c == '=')
+    return 1;
+
+  switch (a)
+    {
+    case CPP_GREATER:  return c == '>';
+    case CPP_LESS:     return c == '<' || c == '%' || c == ':';
+    case CPP_PLUS:     return c == '+';
+    case CPP_MINUS:    return c == '-' || c == '>';
+    case CPP_DIV:      return c == '/' || c == '*'; /* Comments.  */
+    case CPP_MOD:      return c == ':' || c == '>';
+    case CPP_AND:      return c == '&';
+    case CPP_OR:       return c == '|';
+    case CPP_COLON:    return c == ':' || c == '>';
+    case CPP_DEREF:    return c == '*';
+    case CPP_DOT:      return c == '.' || c == '%' || b == CPP_NUMBER;
+    case CPP_HASH:     return c == '#' || c == '%'; /* Digraph form.  */
+    case CPP_NAME:     return ((b == CPP_NUMBER
+                                && name_p (pfile, &token2->val.str))
+                               || b == CPP_NAME
+                               || b == CPP_CHAR || b == CPP_STRING); /* L */
+    case CPP_NUMBER:   return (b == CPP_NUMBER || b == CPP_NAME
+                               || c == '.' || c == '+' || c == '-');
+                                     /* UCNs */
+    case CPP_OTHER:    return ((token1->val.str.text[0] == '\\'
+                                && b == CPP_NAME)
+                               || (CPP_OPTION (pfile, objc)
+                                   && token1->val.str.text[0] == '@'
+                                   && (b == CPP_NAME || b == CPP_STRING)));
+    default:           break;
+    }
+
+  return 0;
+}
+
+/* Output all the remaining tokens on the current line, and a newline
+   character, to FP.  Leading whitespace is removed.  If there are
+   macros, special token padding is not performed.  */
+void
+cpp_output_line (cpp_reader *pfile, FILE *fp)
+{
+  const cpp_token *token;
+
+  token = cpp_get_token (pfile);
+  while (token->type != CPP_EOF)
+    {
+      cpp_output_token (token, fp);
+      token = cpp_get_token (pfile);
+      if (token->flags & PREV_WHITE)
+       putc (' ', fp);
+    }
+
+  putc ('\n', fp);
+}
+
+/* Memory buffers.  Changing these three constants can have a dramatic
+   effect on performance.  The values here are reasonable defaults,
+   but might be tuned.  If you adjust them, be sure to test across a
+   range of uses of cpplib, including heavy nested function-like macro
+   expansion.  Also check the change in peak memory usage (NJAMD is a
+   good tool for this).  */
+#define MIN_BUFF_SIZE 8000
+#define BUFF_SIZE_UPPER_BOUND(MIN_SIZE) (MIN_BUFF_SIZE + (MIN_SIZE) * 3 / 2)
+#define EXTENDED_BUFF_SIZE(BUFF, MIN_EXTRA) \
+       (MIN_EXTRA + ((BUFF)->limit - (BUFF)->cur) * 2)
+
+#if MIN_BUFF_SIZE > BUFF_SIZE_UPPER_BOUND (0)
+  #error BUFF_SIZE_UPPER_BOUND must be at least as large as MIN_BUFF_SIZE!
+#endif
+
+/* Create a new allocation buffer.  Place the control block at the end
+   of the buffer, so that buffer overflows will cause immediate chaos.  */
+static _cpp_buff *
+new_buff (size_t len)
+{
+  _cpp_buff *result;
+  unsigned char *base;
+
+  if (len < MIN_BUFF_SIZE)
+    len = MIN_BUFF_SIZE;
+  len = CPP_ALIGN (len);
+
+  base = XNEWVEC (unsigned char, len + sizeof (_cpp_buff));
+  result = (_cpp_buff *) (base + len);
+  result->base = base;
+  result->cur = base;
+  result->limit = base + len;
+  result->next = NULL;
+  return result;
+}
+
+/* Place a chain of unwanted allocation buffers on the free list.  */
+void
+_cpp_release_buff (cpp_reader *pfile, _cpp_buff *buff)
+{
+  _cpp_buff *end = buff;
+
+  while (end->next)
+    end = end->next;
+  end->next = pfile->free_buffs;
+  pfile->free_buffs = buff;
+}
+
+/* Return a free buffer of size at least MIN_SIZE.  */
+_cpp_buff *
+_cpp_get_buff (cpp_reader *pfile, size_t min_size)
+{
+  _cpp_buff *result, **p;
+
+  for (p = &pfile->free_buffs;; p = &(*p)->next)
+    {
+      size_t size;
+
+      if (*p == NULL)
+       return new_buff (min_size);
+      result = *p;
+      size = result->limit - result->base;
+      /* Return a buffer that's big enough, but don't waste one that's
+         way too big.  */
+      if (size >= min_size && size <= BUFF_SIZE_UPPER_BOUND (min_size))
+       break;
+    }
+
+  *p = result->next;
+  result->next = NULL;
+  result->cur = result->base;
+  return result;
+}
+
+/* Creates a new buffer with enough space to hold the uncommitted
+   remaining bytes of BUFF, and at least MIN_EXTRA more bytes.  Copies
+   the excess bytes to the new buffer.  Chains the new buffer after
+   BUFF, and returns the new buffer.  */
+_cpp_buff *
+_cpp_append_extend_buff (cpp_reader *pfile, _cpp_buff *buff, size_t min_extra)
+{
+  size_t size = EXTENDED_BUFF_SIZE (buff, min_extra);
+  _cpp_buff *new_buff = _cpp_get_buff (pfile, size);
+
+  buff->next = new_buff;
+  memcpy (new_buff->base, buff->cur, BUFF_ROOM (buff));
+  return new_buff;
+}
+
+/* Creates a new buffer with enough space to hold the uncommitted
+   remaining bytes of the buffer pointed to by BUFF, and at least
+   MIN_EXTRA more bytes.  Copies the excess bytes to the new buffer.
+   Chains the new buffer before the buffer pointed to by BUFF, and
+   updates the pointer to point to the new buffer.  */
+void
+_cpp_extend_buff (cpp_reader *pfile, _cpp_buff **pbuff, size_t min_extra)
+{
+  _cpp_buff *new_buff, *old_buff = *pbuff;
+  size_t size = EXTENDED_BUFF_SIZE (old_buff, min_extra);
+
+  new_buff = _cpp_get_buff (pfile, size);
+  memcpy (new_buff->base, old_buff->cur, BUFF_ROOM (old_buff));
+  new_buff->next = old_buff;
+  *pbuff = new_buff;
+}
+
+/* Free a chain of buffers starting at BUFF.  */
+void
+_cpp_free_buff (_cpp_buff *buff)
+{
+  _cpp_buff *next;
+
+  for (; buff; buff = next)
+    {
+      next = buff->next;
+      free (buff->base);
+    }
+}
+
+/* Allocate permanent, unaligned storage of length LEN.  */
+unsigned char *
+_cpp_unaligned_alloc (cpp_reader *pfile, size_t len)
+{
+  _cpp_buff *buff = pfile->u_buff;
+  unsigned char *result = buff->cur;
+
+  if (len > (size_t) (buff->limit - result))
+    {
+      buff = _cpp_get_buff (pfile, len);
+      buff->next = pfile->u_buff;
+      pfile->u_buff = buff;
+      result = buff->cur;
+    }
+
+  buff->cur = result + len;
+  return result;
+}
+
+/* Allocate permanent, unaligned storage of length LEN from a_buff.
+   That buffer is used for growing allocations when saving macro
+   replacement lists in a #define, and when parsing an answer to an
+   assertion in #assert, #unassert or #if (and therefore possibly
+   whilst expanding macros).  It therefore must not be used by any
+   code that they might call: specifically the lexer and the guts of
+   the macro expander.
+
+   All existing other uses clearly fit this restriction: storing
+   registered pragmas during initialization.  */
+unsigned char *
+_cpp_aligned_alloc (cpp_reader *pfile, size_t len)
+{
+  _cpp_buff *buff = pfile->a_buff;
+  unsigned char *result = buff->cur;
+
+  if (len > (size_t) (buff->limit - result))
+    {
+      buff = _cpp_get_buff (pfile, len);
+      buff->next = pfile->a_buff;
+      pfile->a_buff = buff;
+      result = buff->cur;
+    }
+
+  buff->cur = result + len;
+  return result;
+}
+
+/* Say which field of TOK is in use.  */
+
+enum cpp_token_fld_kind
+cpp_token_val_index (cpp_token *tok)
+{
+  switch (TOKEN_SPELL (tok))
+    {
+    case SPELL_IDENT:
+      return CPP_TOKEN_FLD_NODE;
+    case SPELL_LITERAL:
+      return CPP_TOKEN_FLD_STR;
+    case SPELL_NONE:
+      if (tok->type == CPP_MACRO_ARG)
+       return CPP_TOKEN_FLD_ARG_NO;
+      else if (tok->type == CPP_PADDING)
+       return CPP_TOKEN_FLD_SOURCE;
+      else if (tok->type == CPP_PRAGMA)
+       return CPP_TOKEN_FLD_PRAGMA;
+      /* else fall through */
+    default:
+      return CPP_TOKEN_FLD_NONE;
+    }
+}
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
new file mode 100644 (file)
index 0000000..c13a82d
--- /dev/null
@@ -0,0 +1,355 @@
+/* Map logical line numbers to (source file, line number) pairs.
+   Copyright (C) 2001, 2003, 2004, 2007
+   Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "line-map.h"
+
+static void trace_include (const struct line_maps *, const struct line_map *);
+
+/* Initialize a line map set.  */
+
+void
+linemap_init (struct line_maps *set)
+{
+  set->maps = NULL;
+  set->allocated = 0;
+  set->used = 0;
+  set->last_listed = -1;
+  set->trace_includes = false;
+  set->depth = 0;
+  set->cache = 0;
+  set->highest_location = 0;
+  set->highest_line = 0;
+  set->max_column_hint = 0;
+}
+
+/* Check for and warn about line_maps entered but not exited.  */
+
+void
+linemap_check_files_exited (struct line_maps *set)
+{
+  struct line_map *map;
+  /* Depending upon whether we are handling preprocessed input or
+     not, this can be a user error or an ICE.  */
+  for (map = &set->maps[set->used - 1]; ! MAIN_FILE_P (map);
+       map = INCLUDED_FROM (set, map))
+    fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n",
+            map->to_file);
+}
+/* Free a line map set.  */
+
+void
+linemap_free (struct line_maps *set)
+{
+  if (set->maps)
+    {
+      linemap_check_files_exited (set);
+
+      free (set->maps);
+    }
+}
+
+/* Add a mapping of logical source line to physical source file and
+   line number.
+
+   The text pointed to by TO_FILE must have a lifetime
+   at least as long as the final call to lookup_line ().  An empty
+   TO_FILE means standard input.  If reason is LC_LEAVE, and
+   TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their
+   natural values considering the file we are returning to.
+
+   FROM_LINE should be monotonic increasing across calls to this
+   function.  A call to this function can relocate the previous set of
+   A call to this function can relocate the previous set of
+   maps, so any stored line_map pointers should not be used.  */
+
+const struct line_map *
+linemap_add (struct line_maps *set, enum lc_reason reason,
+            unsigned int sysp, const char *to_file, unsigned int to_line)
+{
+  struct line_map *map;
+  source_location start_location = set->highest_location + 1;
+
+  if (set->used && start_location < set->maps[set->used - 1].start_location)
+    abort ();
+
+  if (set->used == set->allocated)
+    {
+      line_map_realloc reallocator
+       = set->reallocator ? set->reallocator : xrealloc;
+      set->allocated = 2 * set->allocated + 256;
+      set->maps
+       = (struct line_map *) (*reallocator) (set->maps,
+                                             set->allocated
+                                             * sizeof (struct line_map));
+      memset (&set->maps[set->used], 0, ((set->allocated - set->used)
+                                        * sizeof (struct line_map)));
+    }
+
+  map = &set->maps[set->used];
+
+  if (to_file && *to_file == '\0')
+    to_file = "<stdin>";
+
+  /* If we don't keep our line maps consistent, we can easily
+     segfault.  Don't rely on the client to do it for us.  */
+  if (set->depth == 0)
+    reason = LC_ENTER;
+  else if (reason == LC_LEAVE)
+    {
+      struct line_map *from;
+      bool error;
+
+      if (MAIN_FILE_P (map - 1))
+       {
+         if (to_file == NULL)
+           {
+             set->depth--;
+             return NULL;
+           }
+         error = true;
+          reason = LC_RENAME;
+          from = map - 1;
+       }
+      else
+       {
+         from = INCLUDED_FROM (set, map - 1);
+         error = to_file && strcmp (from->to_file, to_file);
+       }
+
+      /* Depending upon whether we are handling preprocessed input or
+        not, this can be a user error or an ICE.  */
+      if (error)
+       fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n",
+                to_file);
+
+      /* A TO_FILE of NULL is special - we use the natural values.  */
+      if (error || to_file == NULL)
+       {
+         to_file = from->to_file;
+         to_line = SOURCE_LINE (from, from[1].start_location);
+         sysp = from->sysp;
+       }
+    }
+
+  map->reason = reason;
+  map->sysp = sysp;
+  map->start_location = start_location;
+  map->to_file = to_file;
+  map->to_line = to_line;
+  set->cache = set->used++;
+  map->column_bits = 0;
+  set->highest_location = start_location;
+  set->highest_line = start_location;
+  set->max_column_hint = 0;
+
+  if (reason == LC_ENTER)
+    {
+      map->included_from = set->depth == 0 ? -1 : (int) (set->used - 2);
+      set->depth++;
+      if (set->trace_includes)
+       trace_include (set, map);
+    }
+  else if (reason == LC_RENAME)
+    map->included_from = map[-1].included_from;
+  else if (reason == LC_LEAVE)
+    {
+      set->depth--;
+      map->included_from = INCLUDED_FROM (set, map - 1)->included_from;
+    }
+
+  return map;
+}
+
+source_location
+linemap_line_start (struct line_maps *set, unsigned int to_line,
+                   unsigned int max_column_hint)
+{
+  struct line_map *map = &set->maps[set->used - 1];
+  source_location highest = set->highest_location;
+  source_location r;
+  unsigned int last_line = SOURCE_LINE (map, set->highest_line);
+  int line_delta = to_line - last_line;
+  bool add_map = false;
+  if (line_delta < 0
+      || (line_delta > 10 && line_delta * map->column_bits > 1000)
+      || (max_column_hint >= (1U << map->column_bits))
+      || (max_column_hint <= 80 && map->column_bits >= 10))
+    {
+      add_map = true;
+    }
+  else
+    max_column_hint = set->max_column_hint;
+  if (add_map)
+    {
+      int column_bits;
+      if (max_column_hint > 100000 || highest > 0xC0000000)
+       {
+         /* If the column number is ridiculous or we've allocated a huge
+            number of source_locations, give up on column numbers. */
+         max_column_hint = 0;
+         if (highest >0xF0000000)
+           return 0;
+         column_bits = 0;
+       }
+      else
+       {
+         column_bits = 7;
+         while (max_column_hint >= (1U << column_bits))
+           column_bits++;
+         max_column_hint = 1U << column_bits;
+       }
+      /* Allocate the new line_map.  However, if the current map only has a
+        single line we can sometimes just increase its column_bits instead. */
+      if (line_delta < 0
+         || last_line != map->to_line
+         || SOURCE_COLUMN (map, highest) >= (1U << column_bits))
+       map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp,
+                                     map->to_file, to_line);
+      map->column_bits = column_bits;
+      r = map->start_location + ((to_line - map->to_line) << column_bits);
+    }
+  else
+    r = highest - SOURCE_COLUMN (map, highest)
+      + (line_delta << map->column_bits);
+  set->highest_line = r;
+  if (r > set->highest_location)
+    set->highest_location = r;
+  set->max_column_hint = max_column_hint;
+  return r;
+}
+
+source_location
+linemap_position_for_column (struct line_maps *set, unsigned int to_column)
+{
+  source_location r = set->highest_line;
+  if (to_column >= set->max_column_hint)
+    {
+      if (r >= 0xC000000 || to_column > 100000)
+       {
+         /* Running low on source_locations - disable column numbers.  */
+         return r;
+       }
+      else
+       {
+         struct line_map *map = &set->maps[set->used - 1];
+         r = linemap_line_start (set, SOURCE_LINE (map, r), to_column + 50);
+       }
+    }
+  r = r + to_column;
+  if (r >= set->highest_location)
+    set->highest_location = r;
+  return r;
+}
+
+/* Given a logical line, returns the map from which the corresponding
+   (source file, line) pair can be deduced.  Since the set is built
+   chronologically, the logical lines are monotonic increasing, and so
+   the list is sorted and we can use a binary search.  */
+
+const struct line_map *
+linemap_lookup (struct line_maps *set, source_location line)
+{
+  unsigned int md, mn, mx;
+  const struct line_map *cached;
+
+  mn = set->cache;
+  mx = set->used;
+  
+  cached = &set->maps[mn];
+  /* We should get a segfault if no line_maps have been added yet.  */
+  if (line >= cached->start_location)
+    {
+      if (mn + 1 == mx || line < cached[1].start_location)
+       return cached;
+    }
+  else
+    {
+      mx = mn;
+      mn = 0;
+    }
+
+  while (mx - mn > 1)
+    {
+      md = (mn + mx) / 2;
+      if (set->maps[md].start_location > line)
+       mx = md;
+      else
+       mn = md;
+    }
+
+  set->cache = mn;
+  return &set->maps[mn];
+}
+
+/* Print the file names and line numbers of the #include commands
+   which led to the map MAP, if any, to stderr.  Nothing is output if
+   the most recently listed stack is the same as the current one.  */
+
+void
+linemap_print_containing_files (struct line_maps *set,
+                               const struct line_map *map)
+{
+  if (MAIN_FILE_P (map) || set->last_listed == map->included_from)
+    return;
+
+  set->last_listed = map->included_from;
+  map = INCLUDED_FROM (set, map);
+
+  fprintf (stderr,  _("In file included from %s:%u"),
+          map->to_file, LAST_SOURCE_LINE (map));
+
+  while (! MAIN_FILE_P (map))
+    {
+      map = INCLUDED_FROM (set, map);
+      /* Translators note: this message is used in conjunction
+        with "In file included from %s:%ld" and some other
+        tricks.  We want something like this:
+
+        | In file included from sys/select.h:123,
+        |                  from sys/types.h:234,
+        |                  from userfile.c:31:
+        | bits/select.h:45: <error message here>
+
+        with all the "from"s lined up.
+        The trailing comma is at the beginning of this message,
+        and the trailing colon is not translated.  */
+      fprintf (stderr, _(",\n                 from %s:%u"),
+              map->to_file, LAST_SOURCE_LINE (map));
+    }
+
+  fputs (":\n", stderr);
+}
+
+/* Print an include trace, for e.g. the -H option of the preprocessor.  */
+
+static void
+trace_include (const struct line_maps *set, const struct line_map *map)
+{
+  unsigned int i = set->depth;
+
+  while (--i)
+    putc ('.', stderr);
+  fprintf (stderr, " %s\n", map->to_file);
+}
diff --git a/libcpp/macro.c b/libcpp/macro.c
new file mode 100644 (file)
index 0000000..754e2f7
--- /dev/null
@@ -0,0 +1,1876 @@
+/* Part of CPP library.  (Macro and #define handling.)
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005,
+   2006, 2007 Free Software Foundation, Inc.
+   Written by Per Bothner, 1994.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+typedef struct macro_arg macro_arg;
+struct macro_arg
+{
+  const cpp_token **first;     /* First token in unexpanded argument.  */
+  const cpp_token **expanded;  /* Macro-expanded argument.  */
+  const cpp_token *stringified;        /* Stringified argument.  */
+  unsigned int count;          /* # of tokens in argument.  */
+  unsigned int expanded_count; /* # of tokens in expanded argument.  */
+};
+
+/* Macro expansion.  */
+
+static int enter_macro_context (cpp_reader *, cpp_hashnode *);
+static int builtin_macro (cpp_reader *, cpp_hashnode *);
+static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
+                                const cpp_token **, unsigned int);
+static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *);
+static cpp_context *next_context (cpp_reader *);
+static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
+static void expand_arg (cpp_reader *, macro_arg *);
+static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
+static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
+static void paste_all_tokens (cpp_reader *, const cpp_token *);
+static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
+static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
+                         macro_arg *);
+static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *);
+static bool create_iso_definition (cpp_reader *, cpp_macro *);
+
+/* #define directive parsing and handling.  */
+
+static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
+static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
+static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
+                                 const cpp_macro *);
+static bool parse_params (cpp_reader *, cpp_macro *);
+static void check_trad_stringification (cpp_reader *, const cpp_macro *,
+                                       const cpp_string *);
+
+/* Emits a warning if NODE is a macro defined in the main file that
+   has not been used.  */
+int
+_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
+                          void *v ATTRIBUTE_UNUSED)
+{
+  if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
+    {
+      cpp_macro *macro = node->value.macro;
+
+      if (!macro->used
+         && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
+       cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
+                            "macro \"%s\" is not used", NODE_NAME (node));
+    }
+
+  return 1;
+}
+
+/* Allocates and returns a CPP_STRING token, containing TEXT of length
+   LEN, after null-terminating it.  TEXT must be in permanent storage.  */
+static const cpp_token *
+new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
+{
+  cpp_token *token = _cpp_temp_token (pfile);
+
+  text[len] = '\0';
+  token->type = CPP_STRING;
+  token->val.str.len = len;
+  token->val.str.text = text;
+  token->flags = 0;
+  return token;
+}
+
+static const char * const monthnames[] =
+{
+  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+/* Helper function for builtin_macro.  Returns the text generated by
+   a builtin macro. */
+const uchar *
+_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
+{
+  const struct line_map *map;
+  const uchar *result = NULL;
+  unsigned int number = 1;
+
+  switch (node->value.builtin)
+    {
+    default:
+      cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
+                NODE_NAME (node));
+      break;
+
+    case BT_TIMESTAMP:
+      {
+       cpp_buffer *pbuffer = cpp_get_buffer (pfile);
+       if (pbuffer->timestamp == NULL)
+         {
+           /* Initialize timestamp value of the assotiated file. */
+            struct _cpp_file *file = cpp_get_file (pbuffer);
+           if (file)
+             {
+               /* Generate __TIMESTAMP__ string, that represents 
+                  the date and time of the last modification 
+                  of the current source file. The string constant 
+                  looks like "Sun Sep 16 01:03:52 1973".  */
+               struct tm *tb = NULL;
+               struct stat *st = _cpp_get_file_stat (file);
+               if (st)
+                 tb = localtime (&st->st_mtime);
+               if (tb)
+                 {
+                   char *str = asctime (tb);
+                   size_t len = strlen (str);
+                   unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
+                   buf[0] = '"';
+                   strcpy ((char *) buf + 1, str);
+                   buf[len] = '"';
+                   pbuffer->timestamp = buf;
+                 }
+               else
+                 {
+                   cpp_errno (pfile, CPP_DL_WARNING,
+                       "could not determine file timestamp");
+                   pbuffer->timestamp = U"\"??? ??? ?? ??:??:?? ????\"";
+                 }
+             }
+         }
+       result = pbuffer->timestamp;
+      }
+      break;
+    case BT_FILE:
+    case BT_BASE_FILE:
+      {
+       unsigned int len;
+       const char *name;
+       uchar *buf;
+       map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
+
+       if (node->value.builtin == BT_BASE_FILE)
+         while (! MAIN_FILE_P (map))
+           map = INCLUDED_FROM (pfile->line_table, map);
+
+       name = map->to_file;
+       len = strlen (name);
+       buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
+       result = buf;
+       *buf = '"';
+       buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
+       *buf++ = '"';
+       *buf = '\0';
+      }
+      break;
+
+    case BT_INCLUDE_LEVEL:
+      /* The line map depth counts the primary source as level 1, but
+        historically __INCLUDE_DEPTH__ has called the primary source
+        level 0.  */
+      number = pfile->line_table->depth - 1;
+      break;
+
+    case BT_SPECLINE:
+      map = &pfile->line_table->maps[pfile->line_table->used-1];
+      /* If __LINE__ is embedded in a macro, it must expand to the
+        line of the macro's invocation, not its definition.
+        Otherwise things like assert() will not work properly.  */
+      if (CPP_OPTION (pfile, traditional))
+       number = pfile->line_table->highest_line;
+      else
+       number = pfile->cur_token[-1].src_loc;
+      number = SOURCE_LINE (map, number);
+      break;
+
+      /* __STDC__ has the value 1 under normal circumstances.
+        However, if (a) we are in a system header, (b) the option
+        stdc_0_in_system_headers is true (set by target config), and
+        (c) we are not in strictly conforming mode, then it has the
+        value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
+    case BT_STDC:
+      if (cpp_in_system_header (pfile))
+       number = 0;
+      else
+       number = 1;
+      break;
+
+    case BT_DATE:
+    case BT_TIME:
+      if (pfile->date == NULL)
+       {
+         /* Allocate __DATE__ and __TIME__ strings from permanent
+            storage.  We only do this once, and don't generate them
+            at init time, because time() and localtime() are very
+            slow on some systems.  */
+         time_t tt;
+         struct tm *tb = NULL;
+
+         /* (time_t) -1 is a legitimate value for "number of seconds
+            since the Epoch", so we have to do a little dance to
+            distinguish that from a genuine error.  */
+         errno = 0;
+         tt = time(NULL);
+         if (tt != (time_t)-1 || errno == 0)
+           tb = localtime (&tt);
+
+         if (tb)
+           {
+             pfile->date = _cpp_unaligned_alloc (pfile,
+                                                 sizeof ("\"Oct 11 1347\""));
+             sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
+                      monthnames[tb->tm_mon], tb->tm_mday,
+                      tb->tm_year + 1900);
+
+             pfile->time = _cpp_unaligned_alloc (pfile,
+                                                 sizeof ("\"12:34:56\""));
+             sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
+                      tb->tm_hour, tb->tm_min, tb->tm_sec);
+           }
+         else
+           {
+             cpp_errno (pfile, CPP_DL_WARNING,
+                        "could not determine date and time");
+               
+             pfile->date = U"\"??? ?? ????\"";
+             pfile->time = U"\"??:??:??\"";
+           }
+       }
+
+      if (node->value.builtin == BT_DATE)
+       result = pfile->date;
+      else
+       result = pfile->time;
+      break;
+
+    case BT_COUNTER:
+      if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
+       cpp_error (pfile, CPP_DL_ERROR,
+           "__COUNTER__ expanded inside directive with -fdirectives-only");
+      number = pfile->counter++;
+      break;
+    }
+
+  if (result == NULL)
+    {
+      /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
+      result = _cpp_unaligned_alloc (pfile, 21);
+      sprintf ((char *) result, "%u", number);
+    }
+
+  return result;      
+}
+
+/* Convert builtin macros like __FILE__ to a token and push it on the
+   context stack.  Also handles _Pragma, for which a new token may not
+   be created.  Returns 1 if it generates a new token context, 0 to
+   return the token to the caller.  */
+static int
+builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
+{
+  const uchar *buf;
+  size_t len;
+  char *nbuf;
+
+  if (node->value.builtin == BT_PRAGMA)
+    {
+      /* Don't interpret _Pragma within directives.  The standard is
+         not clear on this, but to me this makes most sense.  */
+      if (pfile->state.in_directive)
+       return 0;
+
+      return _cpp_do__Pragma (pfile);
+    }
+
+  buf = _cpp_builtin_macro_text (pfile, node);
+  len = ustrlen (buf);
+  nbuf = (char *) alloca (len + 1);
+  memcpy (nbuf, buf, len);
+  nbuf[len]='\n';
+
+  cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
+  _cpp_clean_line (pfile);
+
+  /* Set pfile->cur_token as required by _cpp_lex_direct.  */
+  pfile->cur_token = _cpp_temp_token (pfile);
+  _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
+  if (pfile->buffer->cur != pfile->buffer->rlimit)
+    cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
+              NODE_NAME (node));
+  _cpp_pop_buffer (pfile);
+
+  return 1;
+}
+
+/* Copies SRC, of length LEN, to DEST, adding backslashes before all
+   backslashes and double quotes. DEST must be of sufficient size.
+   Returns a pointer to the end of the string.  */
+uchar *
+cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
+{
+  while (len--)
+    {
+      uchar c = *src++;
+
+      if (c == '\\' || c == '"')
+       {
+         *dest++ = '\\';
+         *dest++ = c;
+       }
+      else
+         *dest++ = c;
+    }
+
+  return dest;
+}
+
+/* Convert a token sequence ARG to a single string token according to
+   the rules of the ISO C #-operator.  */
+static const cpp_token *
+stringify_arg (cpp_reader *pfile, macro_arg *arg)
+{
+  unsigned char *dest;
+  unsigned int i, escape_it, backslash_count = 0;
+  const cpp_token *source = NULL;
+  size_t len;
+
+  if (BUFF_ROOM (pfile->u_buff) < 3)
+    _cpp_extend_buff (pfile, &pfile->u_buff, 3);
+  dest = BUFF_FRONT (pfile->u_buff);
+  *dest++ = '"';
+
+  /* Loop, reading in the argument's tokens.  */
+  for (i = 0; i < arg->count; i++)
+    {
+      const cpp_token *token = arg->first[i];
+
+      if (token->type == CPP_PADDING)
+       {
+         if (source == NULL)
+           source = token->val.source;
+         continue;
+       }
+
+      escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
+                  || token->type == CPP_CHAR || token->type == CPP_WCHAR);
+
+      /* Room for each char being written in octal, initial space and
+        final quote and NUL.  */
+      len = cpp_token_len (token);
+      if (escape_it)
+       len *= 4;
+      len += 3;
+
+      if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
+       {
+         size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
+         _cpp_extend_buff (pfile, &pfile->u_buff, len);
+         dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
+       }
+
+      /* Leading white space?  */
+      if (dest - 1 != BUFF_FRONT (pfile->u_buff))
+       {
+         if (source == NULL)
+           source = token;
+         if (source->flags & PREV_WHITE)
+           *dest++ = ' ';
+       }
+      source = NULL;
+
+      if (escape_it)
+       {
+         _cpp_buff *buff = _cpp_get_buff (pfile, len);
+         unsigned char *buf = BUFF_FRONT (buff);
+         len = cpp_spell_token (pfile, token, buf, true) - buf;
+         dest = cpp_quote_string (dest, buf, len);
+         _cpp_release_buff (pfile, buff);
+       }
+      else
+       dest = cpp_spell_token (pfile, token, dest, true);
+
+      if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
+       backslash_count++;
+      else
+       backslash_count = 0;
+    }
+
+  /* Ignore the final \ of invalid string literals.  */
+  if (backslash_count & 1)
+    {
+      cpp_error (pfile, CPP_DL_WARNING,
+                "invalid string literal, ignoring final '\\'");
+      dest--;
+    }
+
+  /* Commit the memory, including NUL, and return the token.  */
+  *dest++ = '"';
+  len = dest - BUFF_FRONT (pfile->u_buff);
+  BUFF_FRONT (pfile->u_buff) = dest + 1;
+  return new_string_token (pfile, dest - len, len);
+}
+
+/* Try to paste two tokens.  On success, return nonzero.  In any
+   case, PLHS is updated to point to the pasted token, which is
+   guaranteed to not have the PASTE_LEFT flag set.  */
+static bool
+paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
+{
+  unsigned char *buf, *end, *lhsend;
+  cpp_token *lhs;
+  unsigned int len;
+
+  len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
+  buf = (unsigned char *) alloca (len);
+  end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
+
+  /* Avoid comment headers, since they are still processed in stage 3.
+     It is simpler to insert a space here, rather than modifying the
+     lexer to ignore comments in some circumstances.  Simply returning
+     false doesn't work, since we want to clear the PASTE_LEFT flag.  */
+  if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
+    *end++ = ' ';
+  /* In one obscure case we might see padding here.  */
+  if (rhs->type != CPP_PADDING)
+    end = cpp_spell_token (pfile, rhs, end, false);
+  *end = '\n';
+
+  cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
+  _cpp_clean_line (pfile);
+
+  /* Set pfile->cur_token as required by _cpp_lex_direct.  */
+  pfile->cur_token = _cpp_temp_token (pfile);
+  lhs = _cpp_lex_direct (pfile);
+  if (pfile->buffer->cur != pfile->buffer->rlimit)
+    {
+      source_location saved_loc = lhs->src_loc;
+
+      _cpp_pop_buffer (pfile);
+      _cpp_backup_tokens (pfile, 1);
+      *lhsend = '\0';
+
+      /* We have to remove the PASTE_LEFT flag from the old lhs, but
+        we want to keep the new location.  */
+      *lhs = **plhs;
+      *plhs = lhs;
+      lhs->src_loc = saved_loc;
+      lhs->flags &= ~PASTE_LEFT;
+
+      /* Mandatory error for all apart from assembler.  */
+      if (CPP_OPTION (pfile, lang) != CLK_ASM)
+       cpp_error (pfile, CPP_DL_ERROR,
+        "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
+                  buf, cpp_token_as_text (pfile, rhs));
+      return false;
+    }
+
+  *plhs = lhs;
+  _cpp_pop_buffer (pfile);
+  return true;
+}
+
+/* Handles an arbitrarily long sequence of ## operators, with initial
+   operand LHS.  This implementation is left-associative,
+   non-recursive, and finishes a paste before handling succeeding
+   ones.  If a paste fails, we back up to the RHS of the failing ##
+   operator before pushing the context containing the result of prior
+   successful pastes, with the effect that the RHS appears in the
+   output stream after the pasted LHS normally.  */
+static void
+paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
+{
+  const cpp_token *rhs;
+  cpp_context *context = pfile->context;
+
+  do
+    {
+      /* Take the token directly from the current context.  We can do
+        this, because we are in the replacement list of either an
+        object-like macro, or a function-like macro with arguments
+        inserted.  In either case, the constraints to #define
+        guarantee we have at least one more token.  */
+      if (context->direct_p)
+       rhs = FIRST (context).token++;
+      else
+       rhs = *FIRST (context).ptoken++;
+
+      if (rhs->type == CPP_PADDING)
+       {
+         if (rhs->flags & PASTE_LEFT)
+           abort ();
+       }
+      if (!paste_tokens (pfile, &lhs, rhs))
+       break;
+    }
+  while (rhs->flags & PASTE_LEFT);
+
+  /* Put the resulting token in its own context.  */
+  _cpp_push_token_context (pfile, NULL, lhs, 1);
+}
+
+/* Returns TRUE if the number of arguments ARGC supplied in an
+   invocation of the MACRO referenced by NODE is valid.  An empty
+   invocation to a macro with no parameters should pass ARGC as zero.
+
+   Note that MACRO cannot necessarily be deduced from NODE, in case
+   NODE was redefined whilst collecting arguments.  */
+bool
+_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
+{
+  if (argc == macro->paramc)
+    return true;
+
+  if (argc < macro->paramc)
+    {
+      /* As an extension, a rest argument is allowed to not appear in
+        the invocation at all.
+        e.g. #define debug(format, args...) something
+        debug("string");
+
+        This is exactly the same as if there had been an empty rest
+        argument - debug("string", ).  */
+
+      if (argc + 1 == macro->paramc && macro->variadic)
+       {
+         if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
+           cpp_error (pfile, CPP_DL_PEDWARN,
+                      "ISO C99 requires rest arguments to be used");
+         return true;
+       }
+
+      cpp_error (pfile, CPP_DL_ERROR,
+                "macro \"%s\" requires %u arguments, but only %u given",
+                NODE_NAME (node), macro->paramc, argc);
+    }
+  else
+    cpp_error (pfile, CPP_DL_ERROR,
+              "macro \"%s\" passed %u arguments, but takes just %u",
+              NODE_NAME (node), argc, macro->paramc);
+
+  return false;
+}
+
+/* Reads and returns the arguments to a function-like macro
+   invocation.  Assumes the opening parenthesis has been processed.
+   If there is an error, emits an appropriate diagnostic and returns
+   NULL.  Each argument is terminated by a CPP_EOF token, for the
+   future benefit of expand_arg().  */
+static _cpp_buff *
+collect_args (cpp_reader *pfile, const cpp_hashnode *node)
+{
+  _cpp_buff *buff, *base_buff;
+  cpp_macro *macro;
+  macro_arg *args, *arg;
+  const cpp_token *token;
+  unsigned int argc;
+
+  macro = node->value.macro;
+  if (macro->paramc)
+    argc = macro->paramc;
+  else
+    argc = 1;
+  buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
+                                      + sizeof (macro_arg)));
+  base_buff = buff;
+  args = (macro_arg *) buff->base;
+  memset (args, 0, argc * sizeof (macro_arg));
+  buff->cur = (unsigned char *) &args[argc];
+  arg = args, argc = 0;
+
+  /* Collect the tokens making up each argument.  We don't yet know
+     how many arguments have been supplied, whether too many or too
+     few.  Hence the slightly bizarre usage of "argc" and "arg".  */
+  do
+    {
+      unsigned int paren_depth = 0;
+      unsigned int ntokens = 0;
+
+      argc++;
+      arg->first = (const cpp_token **) buff->cur;
+
+      for (;;)
+       {
+         /* Require space for 2 new tokens (including a CPP_EOF).  */
+         if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
+           {
+             buff = _cpp_append_extend_buff (pfile, buff,
+                                             1000 * sizeof (cpp_token *));
+             arg->first = (const cpp_token **) buff->cur;
+           }
+
+         token = cpp_get_token (pfile);
+
+         if (token->type == CPP_PADDING)
+           {
+             /* Drop leading padding.  */
+             if (ntokens == 0)
+               continue;
+           }
+         else if (token->type == CPP_OPEN_PAREN)
+           paren_depth++;
+         else if (token->type == CPP_CLOSE_PAREN)
+           {
+             if (paren_depth-- == 0)
+               break;
+           }
+         else if (token->type == CPP_COMMA)
+           {
+             /* A comma does not terminate an argument within
+                parentheses or as part of a variable argument.  */
+             if (paren_depth == 0
+                 && ! (macro->variadic && argc == macro->paramc))
+               break;
+           }
+         else if (token->type == CPP_EOF
+                  || (token->type == CPP_HASH && token->flags & BOL))
+           break;
+
+         arg->first[ntokens++] = token;
+       }
+
+      /* Drop trailing padding.  */
+      while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
+       ntokens--;
+
+      arg->count = ntokens;
+      arg->first[ntokens] = &pfile->eof;
+
+      /* Terminate the argument.  Excess arguments loop back and
+        overwrite the final legitimate argument, before failing.  */
+      if (argc <= macro->paramc)
+       {
+         buff->cur = (unsigned char *) &arg->first[ntokens + 1];
+         if (argc != macro->paramc)
+           arg++;
+       }
+    }
+  while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
+
+  if (token->type == CPP_EOF)
+    {
+      /* We still need the CPP_EOF to end directives, and to end
+        pre-expansion of a macro argument.  Step back is not
+        unconditional, since we don't want to return a CPP_EOF to our
+        callers at the end of an -include-d file.  */
+      if (pfile->context->prev || pfile->state.in_directive)
+       _cpp_backup_tokens (pfile, 1);
+      cpp_error (pfile, CPP_DL_ERROR,
+                "unterminated argument list invoking macro \"%s\"",
+                NODE_NAME (node));
+    }
+  else
+    {
+      /* A single empty argument is counted as no argument.  */
+      if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
+       argc = 0;
+      if (_cpp_arguments_ok (pfile, macro, node, argc))
+       {
+         /* GCC has special semantics for , ## b where b is a varargs
+            parameter: we remove the comma if b was omitted entirely.
+            If b was merely an empty argument, the comma is retained.
+            If the macro takes just one (varargs) parameter, then we
+            retain the comma only if we are standards conforming.
+
+            If FIRST is NULL replace_args () swallows the comma.  */
+         if (macro->variadic && (argc < macro->paramc
+                                 || (argc == 1 && args[0].count == 0
+                                     && !CPP_OPTION (pfile, std))))
+           args[macro->paramc - 1].first = NULL;
+         return base_buff;
+       }
+    }
+
+  /* An error occurred.  */
+  _cpp_release_buff (pfile, base_buff);
+  return NULL;
+}
+
+/* Search for an opening parenthesis to the macro of NODE, in such a
+   way that, if none is found, we don't lose the information in any
+   intervening padding tokens.  If we find the parenthesis, collect
+   the arguments and return the buffer containing them.  */
+static _cpp_buff *
+funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node)
+{
+  const cpp_token *token, *padding = NULL;
+
+  for (;;)
+    {
+      token = cpp_get_token (pfile);
+      if (token->type != CPP_PADDING)
+       break;
+      if (padding == NULL
+         || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
+       padding = token;
+    }
+
+  if (token->type == CPP_OPEN_PAREN)
+    {
+      pfile->state.parsing_args = 2;
+      return collect_args (pfile, node);
+    }
+
+  /* CPP_EOF can be the end of macro arguments, or the end of the
+     file.  We mustn't back up over the latter.  Ugh.  */
+  if (token->type != CPP_EOF || token == &pfile->eof)
+    {
+      /* Back up.  We may have skipped padding, in which case backing
+        up more than one token when expanding macros is in general
+        too difficult.  We re-insert it in its own context.  */
+      _cpp_backup_tokens (pfile, 1);
+      if (padding)
+       _cpp_push_token_context (pfile, NULL, padding, 1);
+    }
+
+  return NULL;
+}
+
+/* Push the context of a macro with hash entry NODE onto the context
+   stack.  If we can successfully expand the macro, we push a context
+   containing its yet-to-be-rescanned replacement list and return one.
+   Otherwise, we don't push a context and return zero.  */
+static int
+enter_macro_context (cpp_reader *pfile, cpp_hashnode *node)
+{
+  /* The presence of a macro invalidates a file's controlling macro.  */
+  pfile->mi_valid = false;
+
+  pfile->state.angled_headers = false;
+
+  /* Handle standard macros.  */
+  if (! (node->flags & NODE_BUILTIN))
+    {
+      cpp_macro *macro = node->value.macro;
+
+      if (macro->fun_like)
+       {
+         _cpp_buff *buff;
+
+         pfile->state.prevent_expansion++;
+         pfile->keep_tokens++;
+         pfile->state.parsing_args = 1;
+         buff = funlike_invocation_p (pfile, node);
+         pfile->state.parsing_args = 0;
+         pfile->keep_tokens--;
+         pfile->state.prevent_expansion--;
+
+         if (buff == NULL)
+           {
+             if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
+               cpp_error (pfile, CPP_DL_WARNING,
+ "function-like macro \"%s\" must be used with arguments in traditional C",
+                          NODE_NAME (node));
+
+             return 0;
+           }
+
+         if (macro->paramc > 0)
+           replace_args (pfile, node, macro, (macro_arg *) buff->base);
+         _cpp_release_buff (pfile, buff);
+       }
+
+      /* Disable the macro within its expansion.  */
+      node->flags |= NODE_DISABLED;
+
+      macro->used = 1;
+
+      if (macro->paramc == 0)
+       _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count);
+
+      return 1;
+    }
+
+  /* Handle built-in macros and the _Pragma operator.  */
+  return builtin_macro (pfile, node);
+}
+
+/* Replace the parameters in a function-like macro of NODE with the
+   actual ARGS, and place the result in a newly pushed token context.
+   Expand each argument before replacing, unless it is operated upon
+   by the # or ## operators.  */
+static void
+replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
+{
+  unsigned int i, total;
+  const cpp_token *src, *limit;
+  const cpp_token **dest, **first;
+  macro_arg *arg;
+  _cpp_buff *buff;
+
+  /* First, fully macro-expand arguments, calculating the number of
+     tokens in the final expansion as we go.  The ordering of the if
+     statements below is subtle; we must handle stringification before
+     pasting.  */
+  total = macro->count;
+  limit = macro->exp.tokens + macro->count;
+
+  for (src = macro->exp.tokens; src < limit; src++)
+    if (src->type == CPP_MACRO_ARG)
+      {
+       /* Leading and trailing padding tokens.  */
+       total += 2;
+
+       /* We have an argument.  If it is not being stringified or
+          pasted it is macro-replaced before insertion.  */
+       arg = &args[src->val.arg_no - 1];
+
+       if (src->flags & STRINGIFY_ARG)
+         {
+           if (!arg->stringified)
+             arg->stringified = stringify_arg (pfile, arg);
+         }
+       else if ((src->flags & PASTE_LEFT)
+                || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
+         total += arg->count - 1;
+       else
+         {
+           if (!arg->expanded)
+             expand_arg (pfile, arg);
+           total += arg->expanded_count - 1;
+         }
+      }
+
+  /* Now allocate space for the expansion, copy the tokens and replace
+     the arguments.  */
+  buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
+  first = (const cpp_token **) buff->base;
+  dest = first;
+
+  for (src = macro->exp.tokens; src < limit; src++)
+    {
+      unsigned int count;
+      const cpp_token **from, **paste_flag;
+
+      if (src->type != CPP_MACRO_ARG)
+       {
+         *dest++ = src;
+         continue;
+       }
+
+      paste_flag = 0;
+      arg = &args[src->val.arg_no - 1];
+      if (src->flags & STRINGIFY_ARG)
+       count = 1, from = &arg->stringified;
+      else if (src->flags & PASTE_LEFT)
+       count = arg->count, from = arg->first;
+      else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
+       {
+         count = arg->count, from = arg->first;
+         if (dest != first)
+           {
+             if (dest[-1]->type == CPP_COMMA
+                 && macro->variadic
+                 && src->val.arg_no == macro->paramc)
+               {
+                 /* Swallow a pasted comma if from == NULL, otherwise
+                    drop the paste flag.  */
+                 if (from == NULL)
+                   dest--;
+                 else
+                   paste_flag = dest - 1;
+               }
+             /* Remove the paste flag if the RHS is a placemarker.  */
+             else if (count == 0)
+               paste_flag = dest - 1;
+           }
+       }
+      else
+       count = arg->expanded_count, from = arg->expanded;
+
+      /* Padding on the left of an argument (unless RHS of ##).  */
+      if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
+         && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
+       *dest++ = padding_token (pfile, src);
+
+      if (count)
+       {
+         memcpy (dest, from, count * sizeof (cpp_token *));
+         dest += count;
+
+         /* With a non-empty argument on the LHS of ##, the last
+            token should be flagged PASTE_LEFT.  */
+         if (src->flags & PASTE_LEFT)
+           paste_flag = dest - 1;
+       }
+
+      /* Avoid paste on RHS (even case count == 0).  */
+      if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
+       *dest++ = &pfile->avoid_paste;
+
+      /* Add a new paste flag, or remove an unwanted one.  */
+      if (paste_flag)
+       {
+         cpp_token *token = _cpp_temp_token (pfile);
+         token->type = (*paste_flag)->type;
+         token->val = (*paste_flag)->val;
+         if (src->flags & PASTE_LEFT)
+           token->flags = (*paste_flag)->flags | PASTE_LEFT;
+         else
+           token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
+         *paste_flag = token;
+       }
+    }
+
+  /* Free the expanded arguments.  */
+  for (i = 0; i < macro->paramc; i++)
+    if (args[i].expanded)
+      free (args[i].expanded);
+
+  push_ptoken_context (pfile, node, buff, first, dest - first);
+}
+
+/* Return a special padding token, with padding inherited from SOURCE.  */
+static const cpp_token *
+padding_token (cpp_reader *pfile, const cpp_token *source)
+{
+  cpp_token *result = _cpp_temp_token (pfile);
+
+  result->type = CPP_PADDING;
+
+  /* Data in GCed data structures cannot be made const so far, so we
+     need a cast here.  */
+  result->val.source = (cpp_token *) source;
+  result->flags = 0;
+  return result;
+}
+
+/* Get a new uninitialized context.  Create a new one if we cannot
+   re-use an old one.  */
+static cpp_context *
+next_context (cpp_reader *pfile)
+{
+  cpp_context *result = pfile->context->next;
+
+  if (result == 0)
+    {
+      result = XNEW (cpp_context);
+      result->prev = pfile->context;
+      result->next = 0;
+      pfile->context->next = result;
+    }
+
+  pfile->context = result;
+  return result;
+}
+
+/* Push a list of pointers to tokens.  */
+static void
+push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
+                    const cpp_token **first, unsigned int count)
+{
+  cpp_context *context = next_context (pfile);
+
+  context->direct_p = false;
+  context->macro = macro;
+  context->buff = buff;
+  FIRST (context).ptoken = first;
+  LAST (context).ptoken = first + count;
+}
+
+/* Push a list of tokens.  */
+void
+_cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
+                        const cpp_token *first, unsigned int count)
+{
+  cpp_context *context = next_context (pfile);
+
+  context->direct_p = true;
+  context->macro = macro;
+  context->buff = NULL;
+  FIRST (context).token = first;
+  LAST (context).token = first + count;
+}
+
+/* Push a traditional macro's replacement text.  */
+void
+_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
+                       const uchar *start, size_t len)
+{
+  cpp_context *context = next_context (pfile);
+
+  context->direct_p = true;
+  context->macro = macro;
+  context->buff = NULL;
+  CUR (context) = start;
+  RLIMIT (context) = start + len;
+  macro->flags |= NODE_DISABLED;
+}
+
+/* Expand an argument ARG before replacing parameters in a
+   function-like macro.  This works by pushing a context with the
+   argument's tokens, and then expanding that into a temporary buffer
+   as if it were a normal part of the token stream.  collect_args()
+   has terminated the argument's tokens with a CPP_EOF so that we know
+   when we have fully expanded the argument.  */
+static void
+expand_arg (cpp_reader *pfile, macro_arg *arg)
+{
+  unsigned int capacity;
+  bool saved_warn_trad;
+
+  if (arg->count == 0)
+    return;
+
+  /* Don't warn about funlike macros when pre-expanding.  */
+  saved_warn_trad = CPP_WTRADITIONAL (pfile);
+  CPP_WTRADITIONAL (pfile) = 0;
+
+  /* Loop, reading in the arguments.  */
+  capacity = 256;
+  arg->expanded = XNEWVEC (const cpp_token *, capacity);
+
+  push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
+  for (;;)
+    {
+      const cpp_token *token;
+
+      if (arg->expanded_count + 1 >= capacity)
+       {
+         capacity *= 2;
+         arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
+                                      capacity);
+       }
+
+      token = cpp_get_token (pfile);
+
+      if (token->type == CPP_EOF)
+       break;
+
+      arg->expanded[arg->expanded_count++] = token;
+    }
+
+  _cpp_pop_context (pfile);
+
+  CPP_WTRADITIONAL (pfile) = saved_warn_trad;
+}
+
+/* Pop the current context off the stack, re-enabling the macro if the
+   context represented a macro's replacement list.  The context
+   structure is not freed so that we can re-use it later.  */
+void
+_cpp_pop_context (cpp_reader *pfile)
+{
+  cpp_context *context = pfile->context;
+
+  if (context->macro)
+    context->macro->flags &= ~NODE_DISABLED;
+
+  if (context->buff)
+    _cpp_release_buff (pfile, context->buff);
+
+  pfile->context = context->prev;
+}
+
+/* External routine to get a token.  Also used nearly everywhere
+   internally, except for places where we know we can safely call
+   _cpp_lex_token directly, such as lexing a directive name.
+
+   Macro expansions and directives are transparently handled,
+   including entering included files.  Thus tokens are post-macro
+   expansion, and after any intervening directives.  External callers
+   see CPP_EOF only at EOF.  Internal callers also see it when meeting
+   a directive inside a macro call, when at the end of a directive and
+   state.in_directive is still 1, and at the end of argument
+   pre-expansion.  */
+const cpp_token *
+cpp_get_token (cpp_reader *pfile)
+{
+  const cpp_token *result;
+  bool can_set = pfile->set_invocation_location;
+  pfile->set_invocation_location = false;
+
+  for (;;)
+    {
+      cpp_hashnode *node;
+      cpp_context *context = pfile->context;
+
+      /* Context->prev == 0 <=> base context.  */
+      if (!context->prev)
+       result = _cpp_lex_token (pfile);
+      else if (FIRST (context).token != LAST (context).token)
+       {
+         if (context->direct_p)
+           result = FIRST (context).token++;
+         else
+           result = *FIRST (context).ptoken++;
+
+         if (result->flags & PASTE_LEFT)
+           {
+             paste_all_tokens (pfile, result);
+             if (pfile->state.in_directive)
+               continue;
+             return padding_token (pfile, result);
+           }
+       }
+      else
+       {
+         _cpp_pop_context (pfile);
+         if (pfile->state.in_directive)
+           continue;
+         return &pfile->avoid_paste;
+       }
+
+      if (pfile->state.in_directive && result->type == CPP_COMMENT)
+       continue;
+
+      if (result->type != CPP_NAME)
+       break;
+
+      node = result->val.node;
+
+      if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
+       break;
+
+      if (!(node->flags & NODE_DISABLED))
+       {
+         /* If not in a macro context, and we're going to start an
+            expansion, record the location.  */
+         if (can_set && !context->macro)
+           pfile->invocation_location = result->src_loc;
+         if (!pfile->state.prevent_expansion
+             && enter_macro_context (pfile, node))
+           {
+             if (pfile->state.in_directive)
+               continue;
+             return padding_token (pfile, result);
+           }
+       }
+      else
+       {
+         /* Flag this token as always unexpandable.  FIXME: move this
+            to collect_args()?.  */
+         cpp_token *t = _cpp_temp_token (pfile);
+         t->type = result->type;
+         t->flags = result->flags | NO_EXPAND;
+         t->val = result->val;
+         result = t;
+       }
+
+      break;
+    }
+
+  return result;
+}
+
+/* Like cpp_get_token, but also returns a location separate from the
+   one provided by the returned token.  LOC is an out parameter; *LOC
+   is set to the location "as expected by the user".  This matters
+   when a token results from macro expansion -- the token's location
+   will indicate where the macro is defined, but *LOC will be the
+   location of the start of the expansion.  */
+const cpp_token *
+cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
+{
+  const cpp_token *result;
+
+  pfile->set_invocation_location = true;
+  result = cpp_get_token (pfile);
+  if (pfile->context->macro)
+    *loc = pfile->invocation_location;
+  else
+    *loc = result->src_loc;
+
+  return result;
+}
+
+/* Returns true if we're expanding an object-like macro that was
+   defined in a system header.  Just checks the macro at the top of
+   the stack.  Used for diagnostic suppression.  */
+int
+cpp_sys_macro_p (cpp_reader *pfile)
+{
+  cpp_hashnode *node = pfile->context->macro;
+
+  return node && node->value.macro && node->value.macro->syshdr;
+}
+
+/* Read each token in, until end of the current file.  Directives are
+   transparently processed.  */
+void
+cpp_scan_nooutput (cpp_reader *pfile)
+{
+  /* Request a CPP_EOF token at the end of this file, rather than
+     transparently continuing with the including file.  */
+  pfile->buffer->return_at_eof = true;
+
+  pfile->state.discarding_output++;
+  pfile->state.prevent_expansion++;
+
+  if (CPP_OPTION (pfile, traditional))
+    while (_cpp_read_logical_line_trad (pfile))
+      ;
+  else
+    while (cpp_get_token (pfile)->type != CPP_EOF)
+      ;
+
+  pfile->state.discarding_output--;
+  pfile->state.prevent_expansion--;
+}
+
+/* Step back one (or more) tokens.  Can only step back more than 1 if
+   they are from the lexer, and not from macro expansion.  */
+void
+_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
+{
+  if (pfile->context->prev == NULL)
+    {
+      pfile->lookaheads += count;
+      while (count--)
+       {
+         pfile->cur_token--;
+         if (pfile->cur_token == pfile->cur_run->base
+             /* Possible with -fpreprocessed and no leading #line.  */
+             && pfile->cur_run->prev != NULL)
+           {
+             pfile->cur_run = pfile->cur_run->prev;
+             pfile->cur_token = pfile->cur_run->limit;
+           }
+       }
+    }
+  else
+    {
+      if (count != 1)
+       abort ();
+      if (pfile->context->direct_p)
+       FIRST (pfile->context).token--;
+      else
+       FIRST (pfile->context).ptoken--;
+    }
+}
+
+/* #define directive parsing and handling.  */
+
+/* Returns nonzero if a macro redefinition warning is required.  */
+static bool
+warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
+                     const cpp_macro *macro2)
+{
+  const cpp_macro *macro1;
+  unsigned int i;
+
+  /* Some redefinitions need to be warned about regardless.  */
+  if (node->flags & NODE_WARN)
+    return true;
+
+  /* Redefinition of a macro is allowed if and only if the old and new
+     definitions are the same.  (6.10.3 paragraph 2).  */
+  macro1 = node->value.macro;
+
+  /* Don't check count here as it can be different in valid
+     traditional redefinitions with just whitespace differences.  */
+  if (macro1->paramc != macro2->paramc
+      || macro1->fun_like != macro2->fun_like
+      || macro1->variadic != macro2->variadic)
+    return true;
+
+  /* Check parameter spellings.  */
+  for (i = 0; i < macro1->paramc; i++)
+    if (macro1->params[i] != macro2->params[i])
+      return true;
+
+  /* Check the replacement text or tokens.  */
+  if (CPP_OPTION (pfile, traditional))
+    return _cpp_expansions_different_trad (macro1, macro2);
+
+  if (macro1->count != macro2->count)
+    return true;
+
+  for (i = 0; i < macro1->count; i++)
+    if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
+      return true;
+
+  return false;
+}
+
+/* Free the definition of hashnode H.  */
+void
+_cpp_free_definition (cpp_hashnode *h)
+{
+  /* Macros and assertions no longer have anything to free.  */
+  h->type = NT_VOID;
+  /* Clear builtin flag in case of redefinition.  */
+  h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
+}
+
+/* Save parameter NODE to the parameter list of macro MACRO.  Returns
+   zero on success, nonzero if the parameter is a duplicate.  */
+bool
+_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
+{
+  unsigned int len;
+  /* Constraint 6.10.3.6 - duplicate parameter names.  */
+  if (node->flags & NODE_MACRO_ARG)
+    {
+      cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
+                NODE_NAME (node));
+      return true;
+    }
+
+  if (BUFF_ROOM (pfile->a_buff)
+      < (macro->paramc + 1) * sizeof (cpp_hashnode *))
+    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
+
+  ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
+  node->flags |= NODE_MACRO_ARG;
+  len = macro->paramc * sizeof (union _cpp_hashnode_value);
+  if (len > pfile->macro_buffer_len)
+    {
+      pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
+                                        len);
+      pfile->macro_buffer_len = len;
+    }
+  ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
+    = node->value;
+  
+  node->value.arg_index  = macro->paramc;
+  return false;
+}
+
+/* Check the syntax of the parameters in a MACRO definition.  Returns
+   false if an error occurs.  */
+static bool
+parse_params (cpp_reader *pfile, cpp_macro *macro)
+{
+  unsigned int prev_ident = 0;
+
+  for (;;)
+    {
+      const cpp_token *token = _cpp_lex_token (pfile);
+
+      switch (token->type)
+       {
+       default:
+         /* Allow/ignore comments in parameter lists if we are
+            preserving comments in macro expansions.  */
+         if (token->type == CPP_COMMENT
+             && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
+           continue;
+
+         cpp_error (pfile, CPP_DL_ERROR,
+                    "\"%s\" may not appear in macro parameter list",
+                    cpp_token_as_text (pfile, token));
+         return false;
+
+       case CPP_NAME:
+         if (prev_ident)
+           {
+             cpp_error (pfile, CPP_DL_ERROR,
+                        "macro parameters must be comma-separated");
+             return false;
+           }
+         prev_ident = 1;
+
+         if (_cpp_save_parameter (pfile, macro, token->val.node))
+           return false;
+         continue;
+
+       case CPP_CLOSE_PAREN:
+         if (prev_ident || macro->paramc == 0)
+           return true;
+
+         /* Fall through to pick up the error.  */
+       case CPP_COMMA:
+         if (!prev_ident)
+           {
+             cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
+             return false;
+           }
+         prev_ident = 0;
+         continue;
+
+       case CPP_ELLIPSIS:
+         macro->variadic = 1;
+         if (!prev_ident)
+           {
+             _cpp_save_parameter (pfile, macro,
+                                  pfile->spec_nodes.n__VA_ARGS__);
+             pfile->state.va_args_ok = 1;
+             if (! CPP_OPTION (pfile, c99)
+                 && CPP_OPTION (pfile, pedantic)
+                 && CPP_OPTION (pfile, warn_variadic_macros))
+               cpp_error (pfile, CPP_DL_PEDWARN,
+                          "anonymous variadic macros were introduced in C99");
+           }
+         else if (CPP_OPTION (pfile, pedantic)
+                  && CPP_OPTION (pfile, warn_variadic_macros))
+           cpp_error (pfile, CPP_DL_PEDWARN,
+                      "ISO C does not permit named variadic macros");
+
+         /* We're at the end, and just expect a closing parenthesis.  */
+         token = _cpp_lex_token (pfile);
+         if (token->type == CPP_CLOSE_PAREN)
+           return true;
+         /* Fall through.  */
+
+       case CPP_EOF:
+         cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
+         return false;
+       }
+    }
+}
+
+/* Allocate room for a token from a macro's replacement list.  */
+static cpp_token *
+alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
+{
+  if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
+    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
+
+  return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
+}
+
+/* Lex a token from the expansion of MACRO, but mark parameters as we
+   find them and warn of traditional stringification.  */
+static cpp_token *
+lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
+{
+  cpp_token *token, *saved_cur_token;
+
+  saved_cur_token = pfile->cur_token;
+  pfile->cur_token = alloc_expansion_token (pfile, macro);
+  token = _cpp_lex_direct (pfile);
+  pfile->cur_token = saved_cur_token;
+
+  /* Is this a parameter?  */
+  if (token->type == CPP_NAME
+      && (token->val.node->flags & NODE_MACRO_ARG) != 0)
+    {
+      token->type = CPP_MACRO_ARG;
+      token->val.arg_no = token->val.node->value.arg_index;
+    }
+  else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
+          && (token->type == CPP_STRING || token->type == CPP_CHAR))
+    check_trad_stringification (pfile, macro, &token->val.str);
+
+  return token;
+}
+
+static bool
+create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
+{
+  cpp_token *token;
+  const cpp_token *ctoken;
+  bool following_paste_op = false;
+  const char *paste_op_error_msg =
+    N_("'##' cannot appear at either end of a macro expansion");
+
+  /* Get the first token of the expansion (or the '(' of a
+     function-like macro).  */
+  ctoken = _cpp_lex_token (pfile);
+
+  if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
+    {
+      bool ok = parse_params (pfile, macro);
+      macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
+      if (!ok)
+       return false;
+
+      /* Success.  Commit or allocate the parameter array.  */
+      if (pfile->hash_table->alloc_subobject)
+       {
+         cpp_hashnode **params =
+            (cpp_hashnode **) pfile->hash_table->alloc_subobject
+            (sizeof (cpp_hashnode *) * macro->paramc);
+         memcpy (params, macro->params,
+                 sizeof (cpp_hashnode *) * macro->paramc);
+         macro->params = params;
+       }
+      else
+       BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
+      macro->fun_like = 1;
+    }
+  else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
+    {
+      /* While ISO C99 requires whitespace before replacement text
+        in a macro definition, ISO C90 with TC1 allows there characters
+        from the basic source character set.  */
+      if (CPP_OPTION (pfile, c99))
+       cpp_error (pfile, CPP_DL_PEDWARN,
+                  "ISO C99 requires whitespace after the macro name");
+      else
+       {
+         int warntype = CPP_DL_WARNING;
+         switch (ctoken->type)
+           {
+           case CPP_ATSIGN:
+           case CPP_AT_NAME:
+           case CPP_OBJC_STRING:
+             /* '@' is not in basic character set.  */
+             warntype = CPP_DL_PEDWARN;
+             break;
+           case CPP_OTHER:
+             /* Basic character set sans letters, digits and _.  */
+             if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
+                         ctoken->val.str.text[0]) == NULL)
+               warntype = CPP_DL_PEDWARN;
+             break;
+           default:
+             /* All other tokens start with a character from basic
+                character set.  */
+             break;
+           }
+         cpp_error (pfile, warntype,
+                    "missing whitespace after the macro name");
+       }
+    }
+
+  if (macro->fun_like)
+    token = lex_expansion_token (pfile, macro);
+  else
+    {
+      token = alloc_expansion_token (pfile, macro);
+      *token = *ctoken;
+    }
+
+  for (;;)
+    {
+      /* Check the stringifying # constraint 6.10.3.2.1 of
+        function-like macros when lexing the subsequent token.  */
+      if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
+       {
+         if (token->type == CPP_MACRO_ARG)
+           {
+             token->flags &= ~PREV_WHITE;
+             token->flags |= STRINGIFY_ARG;
+             token->flags |= token[-1].flags & PREV_WHITE;
+             token[-1] = token[0];
+             macro->count--;
+           }
+         /* Let assembler get away with murder.  */
+         else if (CPP_OPTION (pfile, lang) != CLK_ASM)
+           {
+             cpp_error (pfile, CPP_DL_ERROR,
+                        "'#' is not followed by a macro parameter");
+             return false;
+           }
+       }
+
+      if (token->type == CPP_EOF)
+       {
+         /* Paste operator constraint 6.10.3.3.1:
+            Token-paste ##, can appear in both object-like and
+            function-like macros, but not at the end.  */
+         if (following_paste_op)
+           {
+             cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
+             return false;
+           }
+         break;
+       }
+
+      /* Paste operator constraint 6.10.3.3.1.  */
+      if (token->type == CPP_PASTE)
+       {
+         /* Token-paste ##, can appear in both object-like and
+            function-like macros, but not at the beginning.  */
+         if (macro->count == 1)
+           {
+             cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
+             return false;
+           }
+
+         --macro->count;
+         token[-1].flags |= PASTE_LEFT;
+       }
+
+      following_paste_op = (token->type == CPP_PASTE);
+      token = lex_expansion_token (pfile, macro);
+    }
+
+  macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
+  macro->traditional = 0;
+
+  /* Don't count the CPP_EOF.  */
+  macro->count--;
+
+  /* Clear whitespace on first token for warn_of_redefinition().  */
+  if (macro->count)
+    macro->exp.tokens[0].flags &= ~PREV_WHITE;
+
+  /* Commit or allocate the memory.  */
+  if (pfile->hash_table->alloc_subobject)
+    {
+      cpp_token *tokns =
+        (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
+                                                          * macro->count);
+      memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
+      macro->exp.tokens = tokns;
+    }
+  else
+    BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
+
+  return true;
+}
+
+/* Parse a macro and save its expansion.  Returns nonzero on success.  */
+bool
+_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
+{
+  cpp_macro *macro;
+  unsigned int i;
+  bool ok;
+
+  if (pfile->hash_table->alloc_subobject)
+    macro = (cpp_macro *) pfile->hash_table->alloc_subobject
+      (sizeof (cpp_macro));
+  else
+    macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
+  macro->line = pfile->directive_line;
+  macro->params = 0;
+  macro->paramc = 0;
+  macro->variadic = 0;
+  macro->used = !CPP_OPTION (pfile, warn_unused_macros);
+  macro->count = 0;
+  macro->fun_like = 0;
+  /* To suppress some diagnostics.  */
+  macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
+
+  if (CPP_OPTION (pfile, traditional))
+    ok = _cpp_create_trad_definition (pfile, macro);
+  else
+    {
+      ok = create_iso_definition (pfile, macro);
+
+      /* We set the type for SEEN_EOL() in directives.c.
+
+        Longer term we should lex the whole line before coming here,
+        and just copy the expansion.  */
+
+      /* Stop the lexer accepting __VA_ARGS__.  */
+      pfile->state.va_args_ok = 0;
+    }
+
+  /* Clear the fast argument lookup indices.  */
+  for (i = macro->paramc; i-- > 0; )
+    {
+      struct cpp_hashnode *node = macro->params[i];
+      node->flags &= ~ NODE_MACRO_ARG;
+      node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
+    }
+
+  if (!ok)
+    return ok;
+
+  if (node->type == NT_MACRO)
+    {
+      if (CPP_OPTION (pfile, warn_unused_macros))
+       _cpp_warn_if_unused_macro (pfile, node, NULL);
+
+      if (warn_of_redefinition (pfile, node, macro))
+       {
+         cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
+                              "\"%s\" redefined", NODE_NAME (node));
+
+         if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
+           cpp_error_with_line (pfile, CPP_DL_PEDWARN,
+                                node->value.macro->line, 0,
+                        "this is the location of the previous definition");
+       }
+    }
+
+  if (node->type != NT_VOID)
+    _cpp_free_definition (node);
+
+  /* Enter definition in hash table.  */
+  node->type = NT_MACRO;
+  node->value.macro = macro;
+  if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
+      && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS"))
+    node->flags |= NODE_WARN;
+
+  return ok;
+}
+
+/* Warn if a token in STRING matches one of a function-like MACRO's
+   parameters.  */
+static void
+check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
+                           const cpp_string *string)
+{
+  unsigned int i, len;
+  const uchar *p, *q, *limit;
+
+  /* Loop over the string.  */
+  limit = string->text + string->len - 1;
+  for (p = string->text + 1; p < limit; p = q)
+    {
+      /* Find the start of an identifier.  */
+      while (p < limit && !is_idstart (*p))
+       p++;
+
+      /* Find the end of the identifier.  */
+      q = p;
+      while (q < limit && is_idchar (*q))
+       q++;
+
+      len = q - p;
+
+      /* Loop over the function macro arguments to see if the
+        identifier inside the string matches one of them.  */
+      for (i = 0; i < macro->paramc; i++)
+       {
+         const cpp_hashnode *node = macro->params[i];
+
+         if (NODE_LEN (node) == len
+             && !memcmp (p, NODE_NAME (node), len))
+           {
+             cpp_error (pfile, CPP_DL_WARNING,
+          "macro argument \"%s\" would be stringified in traditional C",
+                        NODE_NAME (node));
+             break;
+           }
+       }
+    }
+}
+
+/* Returns the name, arguments and expansion of a macro, in a format
+   suitable to be read back in again, and therefore also for DWARF 2
+   debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
+   Caller is expected to generate the "#define" bit if needed.  The
+   returned text is temporary, and automatically freed later.  */
+const unsigned char *
+cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
+{
+  unsigned int i, len;
+  const cpp_macro *macro = node->value.macro;
+  unsigned char *buffer;
+
+  if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
+    {
+      cpp_error (pfile, CPP_DL_ICE,
+                "invalid hash type %d in cpp_macro_definition", node->type);
+      return 0;
+    }
+
+  /* Calculate length.  */
+  len = NODE_LEN (node) + 2;                   /* ' ' and NUL.  */
+  if (macro->fun_like)
+    {
+      len += 4;                /* "()" plus possible final ".." of named
+                          varargs (we have + 1 below).  */
+      for (i = 0; i < macro->paramc; i++)
+       len += NODE_LEN (macro->params[i]) + 1; /* "," */
+    }
+
+  /* This should match below where we fill in the buffer.  */
+  if (CPP_OPTION (pfile, traditional))
+    len += _cpp_replacement_text_len (macro);
+  else
+    {
+      for (i = 0; i < macro->count; i++)
+       {
+         cpp_token *token = &macro->exp.tokens[i];
+
+         if (token->type == CPP_MACRO_ARG)
+           len += NODE_LEN (macro->params[token->val.arg_no - 1]);
+         else
+           len += cpp_token_len (token);
+
+         if (token->flags & STRINGIFY_ARG)
+           len++;                      /* "#" */
+         if (token->flags & PASTE_LEFT)
+           len += 3;           /* " ##" */
+         if (token->flags & PREV_WHITE)
+           len++;              /* " " */
+       }
+    }
+
+  if (len > pfile->macro_buffer_len)
+    {
+      pfile->macro_buffer = XRESIZEVEC (unsigned char,
+                                        pfile->macro_buffer, len);
+      pfile->macro_buffer_len = len;
+    }
+
+  /* Fill in the buffer.  Start with the macro name.  */
+  buffer = pfile->macro_buffer;
+  memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
+  buffer += NODE_LEN (node);
+
+  /* Parameter names.  */
+  if (macro->fun_like)
+    {
+      *buffer++ = '(';
+      for (i = 0; i < macro->paramc; i++)
+       {
+         cpp_hashnode *param = macro->params[i];
+
+         if (param != pfile->spec_nodes.n__VA_ARGS__)
+           {
+             memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
+             buffer += NODE_LEN (param);
+           }
+
+         if (i + 1 < macro->paramc)
+           /* Don't emit a space after the comma here; we're trying
+              to emit a Dwarf-friendly definition, and the Dwarf spec
+              forbids spaces in the argument list.  */
+           *buffer++ = ',';
+         else if (macro->variadic)
+           *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
+       }
+      *buffer++ = ')';
+    }
+
+  /* The Dwarf spec requires a space after the macro name, even if the
+     definition is the empty string.  */
+  *buffer++ = ' ';
+
+  if (CPP_OPTION (pfile, traditional))
+    buffer = _cpp_copy_replacement_text (macro, buffer);
+  else if (macro->count)
+  /* Expansion tokens.  */
+    {
+      for (i = 0; i < macro->count; i++)
+       {
+         cpp_token *token = &macro->exp.tokens[i];
+
+         if (token->flags & PREV_WHITE)
+           *buffer++ = ' ';
+         if (token->flags & STRINGIFY_ARG)
+           *buffer++ = '#';
+
+         if (token->type == CPP_MACRO_ARG)
+           {
+             memcpy (buffer,
+                     NODE_NAME (macro->params[token->val.arg_no - 1]),
+                     NODE_LEN (macro->params[token->val.arg_no - 1]));
+             buffer += NODE_LEN (macro->params[token->val.arg_no - 1]);
+           }
+         else
+           buffer = cpp_spell_token (pfile, token, buffer, false);
+
+         if (token->flags & PASTE_LEFT)
+           {
+             *buffer++ = ' ';
+             *buffer++ = '#';
+             *buffer++ = '#';
+             /* Next has PREV_WHITE; see _cpp_create_definition.  */
+           }
+       }
+    }
+
+  *buffer = '\0';
+  return pfile->macro_buffer;
+}
diff --git a/libcpp/makeucnid.c b/libcpp/makeucnid.c
new file mode 100644 (file)
index 0000000..b452e08
--- /dev/null
@@ -0,0 +1,342 @@
+/* Make ucnid.h from various sources.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Run this program as
+   ./makeucnid ucnid.tab UnicodeData.txt DerivedNormalizationProps.txt \
+       > ucnid.h
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+enum {
+  C99 = 1,
+  CXX = 2,
+  digit = 4,
+  not_NFC = 8,
+  not_NFKC = 16,
+  maybe_not_NFC = 32
+};
+
+static unsigned flags[65536];
+static unsigned short decomp[65536][2];
+static unsigned char combining_value[65536];
+
+/* Die!  */
+
+static void
+fail (const char *s)
+{
+  fprintf (stderr, "%s\n", s);
+  exit (1);
+}
+
+/* Read ucnid.tab and set the C99 and CXX flags in header[].  */
+
+static void
+read_ucnid (const char *fname)
+{
+  FILE *f = fopen (fname, "r");
+  unsigned fl = 0;
+  
+  if (!f)
+    fail ("opening ucnid.tab");
+  for (;;)
+    {
+      char line[256];
+
+      if (!fgets (line, sizeof (line), f))
+       break;
+      if (strcmp (line, "[C99]\n") == 0)
+       fl = C99;
+      else if (strcmp (line, "[CXX]\n") == 0)
+       fl = CXX;
+      else if (isxdigit (line[0]))
+       {
+         char *l = line;
+         while (*l)
+           {
+             unsigned long start, end;
+             char *endptr;
+             start = strtoul (l, &endptr, 16);
+             if (endptr == l || (*endptr != '-' && ! isspace (*endptr)))
+               fail ("parsing ucnid.tab [1]");
+             l = endptr;
+             if (*l != '-')
+               end = start;
+             else
+               {
+                 end = strtoul (l + 1, &endptr, 16);
+                 if (end < start)
+                   fail ("parsing ucnid.tab, end before start");
+                 l = endptr;
+                 if (! isspace (*l))
+                   fail ("parsing ucnid.tab, junk after range");
+               }
+             while (isspace (*l))
+               l++;
+             if (end > 0xFFFF)
+               fail ("parsing ucnid.tab, end too large");
+             while (start <= end)
+               flags[start++] |= fl;
+           }
+       }
+    }
+  if (ferror (f))
+    fail ("reading ucnid.tab");
+  fclose (f);
+}
+
+/* Read UnicodeData.txt and set the 'digit' flag, and
+   also fill in the 'decomp' table to be the decompositions of
+   characters for which both the character decomposed and all the code
+   points in the decomposition are either C99 or CXX.  */
+
+static void
+read_table (char *fname)
+{
+  FILE * f = fopen (fname, "r");
+  
+  if (!f)
+    fail ("opening UnicodeData.txt");
+  for (;;)
+    {
+      char line[256];
+      unsigned long codepoint, this_decomp[4];
+      char *l;
+      int i;
+      int decomp_useful;
+
+      if (!fgets (line, sizeof (line), f))
+       break;
+      codepoint = strtoul (line, &l, 16);
+      if (l == line || *l != ';')
+       fail ("parsing UnicodeData.txt, reading code point");
+      if (codepoint > 0xffff || ! (flags[codepoint] & (C99 | CXX)))
+       continue;
+
+      do {
+       l++;
+      } while (*l != ';');
+      /* Category value; things starting with 'N' are numbers of some
+        kind.  */
+      if (*++l == 'N')
+       flags[codepoint] |= digit;
+
+      do {
+       l++;
+      } while (*l != ';');
+      /* Canonical combining class; in NFC/NFKC, they must be increasing
+        (or zero).  */
+      if (! isdigit (*++l))
+       fail ("parsing UnicodeData.txt, combining class not number");
+      combining_value[codepoint] = strtoul (l, &l, 10);
+      if (*l++ != ';')
+       fail ("parsing UnicodeData.txt, junk after combining class");
+       
+      /* Skip over bidi value.  */
+      do {
+       l++;
+      } while (*l != ';');
+      
+      /* Decomposition mapping.  */
+      decomp_useful = flags[codepoint];
+      if (*++l == '<')  /* Compatibility mapping. */
+       continue;
+      for (i = 0; i < 4; i++)
+       {
+         if (*l == ';')
+           break;
+         if (!isxdigit (*l))
+           fail ("parsing UnicodeData.txt, decomposition format");
+         this_decomp[i] = strtoul (l, &l, 16);
+         decomp_useful &= flags[this_decomp[i]];
+         while (isspace (*l))
+           l++;
+       }
+      if (i > 2)  /* Decomposition too long.  */
+       fail ("parsing UnicodeData.txt, decomposition too long");
+      if (decomp_useful)
+       while (--i >= 0)
+         decomp[codepoint][i] = this_decomp[i];
+    }
+  if (ferror (f))
+    fail ("reading UnicodeData.txt");
+  fclose (f);
+}
+
+/* Read DerivedNormalizationProps.txt and set the flags that say whether
+   a character is in NFC, NFKC, or is context-dependent.  */
+
+static void
+read_derived (const char *fname)
+{
+  FILE * f = fopen (fname, "r");
+  
+  if (!f)
+    fail ("opening DerivedNormalizationProps.txt");
+  for (;;)
+    {
+      char line[256];
+      unsigned long start, end;
+      char *l;
+      bool not_NFC_p, not_NFKC_p, maybe_not_NFC_p;
+
+      if (!fgets (line, sizeof (line), f))
+       break;
+      not_NFC_p = (strstr (line, "; NFC_QC; N") != NULL);
+      not_NFKC_p = (strstr (line, "; NFKC_QC; N") != NULL);
+      maybe_not_NFC_p = (strstr (line, "; NFC_QC; M") != NULL);
+      if (! not_NFC_p && ! not_NFKC_p && ! maybe_not_NFC_p)
+       continue;
+       
+      start = strtoul (line, &l, 16);
+      if (l == line)
+       fail ("parsing DerivedNormalizationProps.txt, reading start");
+      if (start > 0xffff)
+       continue;
+      if (*l == '.' && l[1] == '.')
+       end = strtoul (l + 2, &l, 16);
+      else
+       end = start;
+
+      while (start <= end)
+       flags[start++] |= ((not_NFC_p ? not_NFC : 0) 
+                          | (not_NFKC_p ? not_NFKC : 0)
+                          | (maybe_not_NFC_p ? maybe_not_NFC : 0)
+                          );
+    }
+  if (ferror (f))
+    fail ("reading DerivedNormalizationProps.txt");
+  fclose (f);
+}
+
+/* Write out the table.
+   The table consists of two words per entry.  The first word is the flags
+   for the unicode code points up to and including the second word.  */
+
+static void
+write_table (void)
+{
+  unsigned i;
+  unsigned last_flag = flags[0];
+  bool really_safe = decomp[0][0] == 0;
+  unsigned char last_combine = combining_value[0];
+  
+  for (i = 1; i <= 65536; i++)
+    if (i == 65536
+       || (flags[i] != last_flag && ((flags[i] | last_flag) & (C99 | CXX)))
+       || really_safe != (decomp[i][0] == 0)
+       || combining_value[i] != last_combine)
+      {
+       printf ("{ %s|%s|%s|%s|%s|%s|%s, %3d, %#06x },\n",
+               last_flag & C99 ? "C99" : "  0",
+               last_flag & digit ? "DIG" : "  0",
+               last_flag & CXX ? "CXX" : "  0",
+               really_safe ? "CID" : "  0",
+               last_flag & not_NFC ? "  0" : "NFC",
+               last_flag & not_NFKC ? "  0" : "NKC",
+               last_flag & maybe_not_NFC ? "CTX" : "  0",
+               combining_value[i - 1],
+               i - 1);
+       last_flag = flags[i];
+       last_combine = combining_value[0];
+       really_safe = decomp[i][0] == 0;
+      }
+}
+
+/* Print out the huge copyright notice.  */
+
+static void
+write_copyright (void)
+{
+  static const char copyright[] = "\
+/* Unicode characters and various properties.\n\
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.\n\
+\n\
+   This program is free software; you can redistribute it and/or modify it\n\
+   under the terms of the GNU General Public License as published by the\n\
+   Free Software Foundation; either version 2, or (at your option) any\n\
+   later version.\n\
+\n\
+   This program is distributed in the hope that it will be useful,\n\
+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
+   GNU General Public License for more details.\n\
+\n\
+   You should have received a copy of the GNU General Public License\n\
+   along with this program; if not, write to the Free Software\n\
+   Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\
+\n\
+\n\
+   Copyright (C) 1991-2005 Unicode, Inc.  All rights reserved.\n\
+   Distributed under the Terms of Use in\n\
+   http://www.unicode.org/copyright.html.\n\
+\n\
+   Permission is hereby granted, free of charge, to any person\n\
+   obtaining a copy of the Unicode data files and any associated\n\
+   documentation (the \"Data Files\") or Unicode software and any\n\
+   associated documentation (the \"Software\") to deal in the Data Files\n\
+   or Software without restriction, including without limitation the\n\
+   rights to use, copy, modify, merge, publish, distribute, and/or\n\
+   sell copies of the Data Files or Software, and to permit persons to\n\
+   whom the Data Files or Software are furnished to do so, provided\n\
+   that (a) the above copyright notice(s) and this permission notice\n\
+   appear with all copies of the Data Files or Software, (b) both the\n\
+   above copyright notice(s) and this permission notice appear in\n\
+   associated documentation, and (c) there is clear notice in each\n\
+   modified Data File or in the Software as well as in the\n\
+   documentation associated with the Data File(s) or Software that the\n\
+   data or software has been modified.\n\
+\n\
+   THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY\n\
+   OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n\
+   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\
+   NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE\n\
+   COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR\n\
+   ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY\n\
+   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\n\
+   WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\n\
+   ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE\n\
+   OF THE DATA FILES OR SOFTWARE.\n\
+\n\
+   Except as contained in this notice, the name of a copyright holder\n\
+   shall not be used in advertising or otherwise to promote the sale,\n\
+   use or other dealings in these Data Files or Software without prior\n\
+   written authorization of the copyright holder.  */\n";
+   
+   puts (copyright);
+}
+
+/* Main program.  */
+
+int
+main(int argc, char ** argv)
+{
+  if (argc != 4)
+    fail ("too few arguments to makeucn");
+  read_ucnid (argv[1]);
+  read_table (argv[2]);
+  read_derived (argv[3]);
+
+  write_copyright ();
+  write_table ();
+  return 0;
+}
diff --git a/libcpp/mkdeps.c b/libcpp/mkdeps.c
new file mode 100644 (file)
index 0000000..8aa96c5
--- /dev/null
@@ -0,0 +1,418 @@
+/* Dependency generator for Makefile fragments.
+   Copyright (C) 2000, 2001, 2003, 2007 Free Software Foundation, Inc.
+   Contributed by Zack Weinberg, Mar 2000
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "mkdeps.h"
+
+/* Keep this structure local to this file, so clients don't find it
+   easy to start making assumptions.  */
+struct deps
+{
+  const char **targetv;
+  unsigned int ntargets;       /* number of slots actually occupied */
+  unsigned int targets_size;   /* amt of allocated space - in words */
+
+  const char **depv;
+  unsigned int ndeps;
+  unsigned int deps_size;
+
+  const char **vpathv;
+  size_t *vpathlv;
+  unsigned int nvpaths;
+  unsigned int vpaths_size;
+};
+
+static const char *munge (const char *);
+
+/* Given a filename, quote characters in that filename which are
+   significant to Make.  Note that it's not possible to quote all such
+   characters - e.g. \n, %, *, ?, [, \ (in some contexts), and ~ are
+   not properly handled.  It isn't possible to get this right in any
+   current version of Make.  (??? Still true?  Old comment referred to
+   3.76.1.)  */
+
+static const char *
+munge (const char *filename)
+{
+  int len;
+  const char *p, *q;
+  char *dst, *buffer;
+
+  for (p = filename, len = 0; *p; p++, len++)
+    {
+      switch (*p)
+       {
+       case ' ':
+       case '\t':
+         /* GNU make uses a weird quoting scheme for white space.
+            A space or tab preceded by 2N+1 backslashes represents
+            N backslashes followed by space; a space or tab
+            preceded by 2N backslashes represents N backslashes at
+            the end of a file name; and backslashes in other
+            contexts should not be doubled.  */
+         for (q = p - 1; filename <= q && *q == '\\';  q--)
+           len++;
+         len++;
+         break;
+
+       case '$':
+         /* '$' is quoted by doubling it.  */
+         len++;
+         break;
+       }
+    }
+
+  /* Now we know how big to make the buffer.  */
+  buffer = XNEWVEC (char, len + 1);
+
+  for (p = filename, dst = buffer; *p; p++, dst++)
+    {
+      switch (*p)
+       {
+       case ' ':
+       case '\t':
+         for (q = p - 1; filename <= q && *q == '\\';  q--)
+           *dst++ = '\\';
+         *dst++ = '\\';
+         break;
+
+       case '$':
+         *dst++ = '$';
+         break;
+
+       default:
+         /* nothing */;
+       }
+      *dst = *p;
+    }
+
+  *dst = '\0';
+  return buffer;
+}
+
+/* If T begins with any of the partial pathnames listed in d->vpathv,
+   then advance T to point beyond that pathname.  */
+static const char *
+apply_vpath (struct deps *d, const char *t)
+{
+  if (d->vpathv)
+    {
+      unsigned int i;
+      for (i = 0; i < d->nvpaths; i++)
+       {
+         if (!strncmp (d->vpathv[i], t, d->vpathlv[i]))
+           {
+             const char *p = t + d->vpathlv[i];
+             if (!IS_DIR_SEPARATOR (*p))
+               goto not_this_one;
+
+             /* Do not simplify $(vpath)/../whatever.  ??? Might not
+                be necessary. */
+             if (p[1] == '.' && p[2] == '.' && IS_DIR_SEPARATOR (p[3]))
+               goto not_this_one;
+
+             /* found a match */
+             t = t + d->vpathlv[i] + 1;
+             break;
+           }
+       not_this_one:;
+       }
+    }
+
+  /* Remove leading ./ in any case.  */
+  while (t[0] == '.' && IS_DIR_SEPARATOR (t[1]))
+    {
+      t += 2;
+      /* If we removed a leading ./, then also remove any /s after the
+        first.  */
+      while (IS_DIR_SEPARATOR (t[0]))
+       ++t;
+    }
+
+  return t;
+}
+
+/* Public routines.  */
+
+struct deps *
+deps_init (void)
+{
+  return XCNEW (struct deps);
+}
+
+void
+deps_free (struct deps *d)
+{
+  unsigned int i;
+
+  if (d->targetv)
+    {
+      for (i = 0; i < d->ntargets; i++)
+       free ((void *) d->targetv[i]);
+      free (d->targetv);
+    }
+
+  if (d->depv)
+    {
+      for (i = 0; i < d->ndeps; i++)
+       free ((void *) d->depv[i]);
+      free (d->depv);
+    }
+
+  if (d->vpathv)
+    {
+      for (i = 0; i < d->nvpaths; i++)
+       free ((void *) d->vpathv[i]);
+      free (d->vpathv);
+      free (d->vpathlv);
+    }
+
+  free (d);
+}
+
+/* Adds a target T.  We make a copy, so it need not be a permanent
+   string.  QUOTE is true if the string should be quoted.  */
+void
+deps_add_target (struct deps *d, const char *t, int quote)
+{
+  if (d->ntargets == d->targets_size)
+    {
+      d->targets_size = d->targets_size * 2 + 4;
+      d->targetv = XRESIZEVEC (const char *, d->targetv, d->targets_size);
+    }
+
+  t = apply_vpath (d, t);
+  if (quote)
+    t = munge (t);  /* Also makes permanent copy.  */
+  else
+    t = xstrdup (t);
+
+  d->targetv[d->ntargets++] = t;
+}
+
+/* Sets the default target if none has been given already.  An empty
+   string as the default target in interpreted as stdin.  The string
+   is quoted for MAKE.  */
+void
+deps_add_default_target (struct deps *d, const char *tgt)
+{
+  /* Only if we have no targets.  */
+  if (d->ntargets)
+    return;
+
+  if (tgt[0] == '\0')
+    deps_add_target (d, "-", 1);
+  else
+    {
+#ifndef TARGET_OBJECT_SUFFIX
+# define TARGET_OBJECT_SUFFIX ".o"
+#endif
+      const char *start = lbasename (tgt);
+      char *o = (char *) alloca (strlen (start)
+                                 + strlen (TARGET_OBJECT_SUFFIX) + 1);
+      char *suffix;
+
+      strcpy (o, start);
+
+      suffix = strrchr (o, '.');
+      if (!suffix)
+        suffix = o + strlen (o);
+      strcpy (suffix, TARGET_OBJECT_SUFFIX);
+
+      deps_add_target (d, o, 1);
+    }
+}
+
+void
+deps_add_dep (struct deps *d, const char *t)
+{
+  t = munge (apply_vpath (d, t));  /* Also makes permanent copy.  */
+
+  if (d->ndeps == d->deps_size)
+    {
+      d->deps_size = d->deps_size * 2 + 8;
+      d->depv = XRESIZEVEC (const char *, d->depv, d->deps_size);
+    }
+  d->depv[d->ndeps++] = t;
+}
+
+void
+deps_add_vpath (struct deps *d, const char *vpath)
+{
+  const char *elem, *p;
+  char *copy;
+  size_t len;
+
+  for (elem = vpath; *elem; elem = p)
+    {
+      for (p = elem; *p && *p != ':'; p++);
+      len = p - elem;
+      copy = XNEWVEC (char, len + 1);
+      memcpy (copy, elem, len);
+      copy[len] = '\0';
+      if (*p == ':')
+       p++;
+
+      if (d->nvpaths == d->vpaths_size)
+       {
+         d->vpaths_size = d->vpaths_size * 2 + 8;
+         d->vpathv = XRESIZEVEC (const char *, d->vpathv, d->vpaths_size);
+         d->vpathlv = XRESIZEVEC (size_t, d->vpathlv, d->vpaths_size);
+       }
+      d->vpathv[d->nvpaths] = copy;
+      d->vpathlv[d->nvpaths] = len;
+      d->nvpaths++;
+    }
+}
+
+void
+deps_write (const struct deps *d, FILE *fp, unsigned int colmax)
+{
+  unsigned int size, i, column;
+
+  column = 0;
+  if (colmax && colmax < 34)
+    colmax = 34;
+
+  for (i = 0; i < d->ntargets; i++)
+    {
+      size = strlen (d->targetv[i]);
+      column += size;
+      if (colmax && column > colmax)
+       {
+         fputs (" \\\n ", fp);
+         column = 1 + size;
+       }
+      if (i)
+       {
+         putc (' ', fp);
+         column++;
+       }
+      fputs (d->targetv[i], fp);
+    }
+
+  putc (':', fp);
+  putc (' ', fp);
+  column += 2;
+
+  for (i = 0; i < d->ndeps; i++)
+    {
+      size = strlen (d->depv[i]);
+      column += size;
+      if (colmax && column > colmax)
+       {
+         fputs (" \\\n ", fp);
+         column = 1 + size;
+       }
+      if (i)
+       {
+         putc (' ', fp);
+         column++;
+       }
+      fputs (d->depv[i], fp);
+    }
+  putc ('\n', fp);
+}
+
+void
+deps_phony_targets (const struct deps *d, FILE *fp)
+{
+  unsigned int i;
+
+  for (i = 1; i < d->ndeps; i++)
+    {
+      putc ('\n', fp);
+      fputs (d->depv[i], fp);
+      putc (':', fp);
+      putc ('\n', fp);
+    }
+}
+
+/* Write out a deps buffer to a file, in a form that can be read back
+   with deps_restore.  Returns nonzero on error, in which case the
+   error number will be in errno.  */
+
+int
+deps_save (struct deps *deps, FILE *f)
+{
+  unsigned int i;
+
+  /* The cppreader structure contains makefile dependences.  Write out this
+     structure.  */
+
+  /* The number of dependences.  */
+  if (fwrite (&deps->ndeps, sizeof (deps->ndeps), 1, f) != 1)
+      return -1;
+  /* The length of each dependence followed by the string.  */
+  for (i = 0; i < deps->ndeps; i++)
+    {
+      size_t num_to_write = strlen (deps->depv[i]);
+      if (fwrite (&num_to_write, sizeof (size_t), 1, f) != 1)
+          return -1;
+      if (fwrite (deps->depv[i], num_to_write, 1, f) != 1)
+          return -1;
+    }
+
+  return 0;
+}
+
+/* Read back dependency information written with deps_save into
+   the deps buffer.  The third argument may be NULL, in which case
+   the dependency information is just skipped, or it may be a filename,
+   in which case that filename is skipped.  */
+
+int
+deps_restore (struct deps *deps, FILE *fd, const char *self)
+{
+  unsigned int i, count;
+  size_t num_to_read;
+  size_t buf_size = 512;
+  char *buf = XNEWVEC (char, buf_size);
+
+  /* Number of dependences.  */
+  if (fread (&count, 1, sizeof (count), fd) != sizeof (count))
+    return -1;
+
+  /* The length of each dependence string, followed by the string.  */
+  for (i = 0; i < count; i++)
+    {
+      /* Read in # bytes in string.  */
+      if (fread (&num_to_read, 1, sizeof (size_t), fd) != sizeof (size_t))
+       return -1;
+      if (buf_size < num_to_read + 1)
+       {
+         buf_size = num_to_read + 1 + 127;
+         buf = XRESIZEVEC (char, buf, buf_size);
+       }
+      if (fread (buf, 1, num_to_read, fd) != num_to_read)
+       return -1;
+      buf[num_to_read] = '\0';
+
+      /* Generate makefile dependencies from .pch if -nopch-deps.  */
+      if (self != NULL && strcmp (buf, self) != 0)
+        deps_add_dep (deps, buf);
+    }
+
+  free (buf);
+  return 0;
+}
diff --git a/libcpp/pch.c b/libcpp/pch.c
new file mode 100644 (file)
index 0000000..bf7b9be
--- /dev/null
@@ -0,0 +1,739 @@
+/* Part of CPP library.  (Precompiled header reading/writing.)
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
+   Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+#include "hashtab.h"
+#include "mkdeps.h"
+
+static int write_macdef (cpp_reader *, cpp_hashnode *, void *);
+static int save_idents (cpp_reader *, cpp_hashnode *, void *);
+static hashval_t hashmem (const void *, size_t);
+static hashval_t cpp_string_hash (const void *);
+static int cpp_string_eq (const void *, const void *);
+static int count_defs (cpp_reader *, cpp_hashnode *, void *);
+static int comp_hashnodes (const void *, const void *);
+static int collect_ht_nodes (cpp_reader *, cpp_hashnode *, void *);
+static int write_defs (cpp_reader *, cpp_hashnode *, void *);
+static int save_macros (cpp_reader *, cpp_hashnode *, void *);
+
+/* This structure represents a macro definition on disk.  */
+struct macrodef_struct
+{
+  unsigned int definition_length;
+  unsigned short name_length;
+  unsigned short flags;
+};
+
+/* This is how we write out a macro definition.
+   Suitable for being called by cpp_forall_identifiers.  */
+
+static int
+write_macdef (cpp_reader *pfile, cpp_hashnode *hn, void *file_p)
+{
+  FILE *f = (FILE *) file_p;
+  switch (hn->type)
+    {
+    case NT_VOID:
+      if (! (hn->flags & NODE_POISONED))
+       return 1;
+
+    case NT_MACRO:
+      if ((hn->flags & NODE_BUILTIN))
+       return 1;
+
+      {
+       struct macrodef_struct s;
+       const unsigned char *defn;
+
+       s.name_length = NODE_LEN (hn);
+       s.flags = hn->flags & NODE_POISONED;
+
+       if (hn->type == NT_MACRO)
+         {
+           defn = cpp_macro_definition (pfile, hn);
+           s.definition_length = ustrlen (defn);
+         }
+       else
+         {
+           defn = NODE_NAME (hn);
+           s.definition_length = s.name_length;
+         }
+
+       if (fwrite (&s, sizeof (s), 1, f) != 1
+           || fwrite (defn, 1, s.definition_length, f) != s.definition_length)
+         {
+           cpp_errno (pfile, CPP_DL_ERROR,
+                      "while writing precompiled header");
+           return 0;
+         }
+      }
+      return 1;
+
+    case NT_ASSERTION:
+      /* Not currently implemented.  */
+      return 1;
+
+    default:
+      abort ();
+    }
+}
+
+/* This structure records the names of the defined macros.
+   It's also used as a callback structure for size_initial_idents
+   and save_idents.  */
+
+struct cpp_savedstate
+{
+  /* A hash table of the defined identifiers.  */
+  htab_t definedhash;
+  /* The size of the definitions of those identifiers (the size of
+     'definedstrs').  */
+  size_t hashsize;
+  /* Number of definitions */
+  size_t n_defs;
+  /* Array of definitions.  In cpp_write_pch_deps it is used for sorting.  */
+  cpp_hashnode **defs;
+  /* Space for the next definition.  Definitions are null-terminated
+     strings.  */
+  unsigned char *definedstrs;
+};
+
+/* Save this identifier into the state: put it in the hash table,
+   put the definition in 'definedstrs'.  */
+
+static int
+save_idents (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
+{
+  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
+
+  if (hn->type != NT_VOID)
+    {
+      struct cpp_string news;
+      void **slot;
+
+      news.len = NODE_LEN (hn);
+      news.text= NODE_NAME (hn);
+      slot = htab_find_slot (ss->definedhash, &news, INSERT);
+      if (*slot == NULL)
+       {
+         struct cpp_string *sp;
+         unsigned char *text;
+
+         sp = XNEW (struct cpp_string);
+         *slot = sp;
+
+         sp->len = NODE_LEN (hn);
+         sp->text = text = XNEWVEC (unsigned char, NODE_LEN (hn));
+         memcpy (text, NODE_NAME (hn), NODE_LEN (hn));
+       }
+    }
+
+  return 1;
+}
+
+/* Hash some memory in a generic way.  */
+
+static hashval_t
+hashmem (const void *p_p, size_t sz)
+{
+  const unsigned char *p = (const unsigned char *)p_p;
+  size_t i;
+  hashval_t h;
+
+  h = 0;
+  for (i = 0; i < sz; i++)
+    h = h * 67 - (*p++ - 113);
+  return h;
+}
+
+/* Hash a cpp string for the hashtable machinery.  */
+
+static hashval_t
+cpp_string_hash (const void *a_p)
+{
+  const struct cpp_string *a = (const struct cpp_string *) a_p;
+  return hashmem (a->text, a->len);
+}
+
+/* Compare two cpp strings for the hashtable machinery.  */
+
+static int
+cpp_string_eq (const void *a_p, const void *b_p)
+{
+  const struct cpp_string *a = (const struct cpp_string *) a_p;
+  const struct cpp_string *b = (const struct cpp_string *) b_p;
+  return (a->len == b->len
+         && memcmp (a->text, b->text, a->len) == 0);
+}
+
+/* Save the current definitions of the cpp_reader for dependency
+   checking purposes.  When writing a precompiled header, this should
+   be called at the same point in the compilation as cpp_valid_state
+   would be called when reading the precompiled header back in.  */
+
+int
+cpp_save_state (cpp_reader *r, FILE *f)
+{
+  /* Save the list of non-void identifiers for the dependency checking.  */
+  r->savedstate = XNEW (struct cpp_savedstate);
+  r->savedstate->definedhash = htab_create (100, cpp_string_hash,
+                                           cpp_string_eq, NULL);
+  cpp_forall_identifiers (r, save_idents, r->savedstate);
+
+  /* Write out the list of defined identifiers.  */
+  cpp_forall_identifiers (r, write_macdef, f);
+
+  return 0;
+}
+
+/* Calculate the 'hashsize' field of the saved state.  */
+
+static int
+count_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
+{
+  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
+
+  switch (hn->type)
+    {
+    case NT_MACRO:
+      if (hn->flags & NODE_BUILTIN)
+       return 1;
+
+      /* else fall through.  */
+
+    case NT_VOID:
+      {
+       struct cpp_string news;
+       void **slot;
+
+       news.len = NODE_LEN (hn);
+       news.text = NODE_NAME (hn);
+       slot = (void **) htab_find (ss->definedhash, &news);
+       if (slot == NULL)
+         {
+           ss->hashsize += NODE_LEN (hn) + 1;
+           ss->n_defs += 1;
+         }
+      }
+      return 1;
+
+    case NT_ASSERTION:
+      /* Not currently implemented.  */
+      return 1;
+
+    default:
+      abort ();
+    }
+}
+
+/* Collect the identifiers into the state's string table.  */
+static int
+write_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
+{
+  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
+
+  switch (hn->type)
+    {
+    case NT_MACRO:
+      if (hn->flags & NODE_BUILTIN)
+       return 1;
+
+      /* else fall through.  */
+
+    case NT_VOID:
+      {
+       struct cpp_string news;
+       void **slot;
+
+       news.len = NODE_LEN (hn);
+       news.text = NODE_NAME (hn);
+       slot = (void **) htab_find (ss->definedhash, &news);
+       if (slot == NULL)
+         {
+           ss->defs[ss->n_defs] = hn;
+           ss->n_defs += 1;
+         }
+      }
+      return 1;
+
+    case NT_ASSERTION:
+      /* Not currently implemented.  */
+      return 1;
+
+    default:
+      abort ();
+    }
+}
+
+/* Comparison function for qsort.  The arguments point to pointers of
+   type ht_hashnode *.  */
+static int
+comp_hashnodes (const void *px, const void *py)
+{
+  cpp_hashnode *x = *(cpp_hashnode **) px;
+  cpp_hashnode *y = *(cpp_hashnode **) py;
+  return ustrcmp (NODE_NAME (x), NODE_NAME (y));
+}
+
+/* Write out the remainder of the dependency information.  This should be
+   called after the PCH is ready to be saved.  */
+
+int
+cpp_write_pch_deps (cpp_reader *r, FILE *f)
+{
+  struct macrodef_struct z;
+  struct cpp_savedstate *const ss = r->savedstate;
+  unsigned char *definedstrs;
+  size_t i;
+
+  /* Collect the list of identifiers which have been seen and
+     weren't defined to anything previously.  */
+  ss->hashsize = 0;
+  ss->n_defs = 0;
+  cpp_forall_identifiers (r, count_defs, ss);
+
+  ss->defs = XNEWVEC (cpp_hashnode *, ss->n_defs);
+  ss->n_defs = 0;
+  cpp_forall_identifiers (r, write_defs, ss);
+
+  /* Sort the list, copy it into a buffer, and write it out.  */
+  qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
+  definedstrs = ss->definedstrs = XNEWVEC (unsigned char, ss->hashsize);
+  for (i = 0; i < ss->n_defs; ++i)
+    {
+      size_t len = NODE_LEN (ss->defs[i]);
+      memcpy (definedstrs, NODE_NAME (ss->defs[i]), len + 1);
+      definedstrs += len + 1;
+    }
+
+  memset (&z, 0, sizeof (z));
+  z.definition_length = ss->hashsize;
+  if (fwrite (&z, sizeof (z), 1, f) != 1
+      || fwrite (ss->definedstrs, ss->hashsize, 1, f) != 1)
+    {
+      cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
+      return -1;
+    }
+  free (ss->definedstrs);
+
+  /* Free the saved state.  */
+  free (ss);
+  r->savedstate = NULL;
+
+  /* Save the next value of __COUNTER__. */
+  if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1)
+    {
+      cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
+      return -1;
+    }
+
+  return 0;
+}
+
+/* Write out the definitions of the preprocessor, in a form suitable for
+   cpp_read_state.  */
+
+int
+cpp_write_pch_state (cpp_reader *r, FILE *f)
+{
+  if (!r->deps)
+    r->deps = deps_init ();
+
+  if (deps_save (r->deps, f) != 0)
+    {
+      cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
+      return -1;
+    }
+
+  if (! _cpp_save_file_entries (r, f))
+    {
+      cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
+      return -1;
+    }
+
+  /* Save the next __COUNTER__ value.  When we include a precompiled header,
+     we need to start at the offset we would have if the header had been
+     included normally. */
+  if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1)
+    {
+      cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
+      return -1;
+    }
+
+  return 0;
+}
+
+
+/* Data structure to transform hash table nodes into a sorted list */
+
+struct ht_node_list
+{
+  /* Array of nodes */
+  cpp_hashnode **defs;
+  /* Number of nodes in the array */
+  size_t n_defs;
+  /* Size of the allocated array */
+  size_t asize;
+};
+
+/* Callback for collecting identifiers from hash table */
+
+static int
+collect_ht_nodes (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn,
+                 void *nl_p)
+{
+  struct ht_node_list *const nl = (struct ht_node_list *)nl_p;
+
+  if (hn->type != NT_VOID || hn->flags & NODE_POISONED)
+    {
+      if (nl->n_defs == nl->asize)
+        {
+          nl->asize *= 2;
+          nl->defs = XRESIZEVEC (cpp_hashnode *, nl->defs, nl->asize);
+        }
+
+      nl->defs[nl->n_defs] = hn;
+      ++nl->n_defs;
+    }
+  return 1;
+}
+
+
+/* Return nonzero if FD is a precompiled header which is consistent
+   with the preprocessor's current definitions.  It will be consistent
+   when:
+
+   - anything that was defined just before the PCH was generated
+     is defined the same way now; and
+   - anything that was not defined then, but is defined now, was not
+     used by the PCH.
+
+   NAME is used to print warnings if `warn_invalid_pch' is set in the
+   reader's flags.
+*/
+
+int
+cpp_valid_state (cpp_reader *r, const char *name, int fd)
+{
+  struct macrodef_struct m;
+  size_t namebufsz = 256;
+  unsigned char *namebuf = XNEWVEC (unsigned char, namebufsz);
+  unsigned char *undeftab = NULL;
+  struct ht_node_list nl = { 0, 0, 0 };
+  unsigned char *first, *last;
+  unsigned int i;
+  unsigned int counter;
+
+  /* Read in the list of identifiers that must be defined
+     Check that they are defined in the same way.  */
+  for (;;)
+    {
+      cpp_hashnode *h;
+      const unsigned char *newdefn;
+
+      if (read (fd, &m, sizeof (m)) != sizeof (m))
+       goto error;
+
+      if (m.name_length == 0)
+       break;
+
+      /* If this file is already preprocessed, there won't be any
+        macros defined, and that's OK.  */
+      if (CPP_OPTION (r, preprocessed))
+       {
+         if (lseek (fd, m.definition_length, SEEK_CUR) == -1)
+           goto error;
+         continue;
+       }
+
+      if (m.definition_length > namebufsz)
+       {
+         free (namebuf);
+         namebufsz = m.definition_length + 256;
+         namebuf = XNEWVEC (unsigned char, namebufsz);
+       }
+
+      if ((size_t)read (fd, namebuf, m.definition_length)
+         != m.definition_length)
+       goto error;
+
+      h = cpp_lookup (r, namebuf, m.name_length);
+      if (m.flags & NODE_POISONED
+         || h->type != NT_MACRO
+         || h->flags & NODE_POISONED)
+       {
+         if (CPP_OPTION (r, warn_invalid_pch))
+           cpp_error (r, CPP_DL_WARNING_SYSHDR,
+                      "%s: not used because `%.*s' not defined",
+                      name, m.name_length, namebuf);
+         goto fail;
+       }
+
+      newdefn = cpp_macro_definition (r, h);
+
+      if (m.definition_length != ustrlen (newdefn)
+         || memcmp (namebuf, newdefn, m.definition_length) != 0)
+       {
+         if (CPP_OPTION (r, warn_invalid_pch))
+           cpp_error (r, CPP_DL_WARNING_SYSHDR,
+              "%s: not used because `%.*s' defined as `%s' not `%.*s'",
+                      name, m.name_length, namebuf, newdefn + m.name_length,
+                      m.definition_length - m.name_length,
+                      namebuf +  m.name_length);
+         goto fail;
+       }
+    }
+  free (namebuf);
+  namebuf = NULL;
+
+  /* Read in the list of identifiers that must not be defined.
+     Check that they really aren't.  */
+  undeftab = XNEWVEC (unsigned char, m.definition_length);
+  if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length)
+    goto error;
+
+  /* Collect identifiers from the current hash table.  */
+  nl.n_defs = 0;
+  nl.asize = 10;
+  nl.defs = XNEWVEC (cpp_hashnode *, nl.asize);
+  cpp_forall_identifiers (r, &collect_ht_nodes, &nl);
+  qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
+
+  /* Loop through nl.defs and undeftab, both of which are sorted lists.
+     There should be no matches.  */
+  first = undeftab;
+  last = undeftab + m.definition_length;
+  i = 0;
+
+  while (first < last && i < nl.n_defs)
+    {
+      int cmp = ustrcmp (first, NODE_NAME (nl.defs[i]));
+
+      if (cmp < 0)
+       first += ustrlen (first) + 1;
+      else if (cmp > 0)
+       ++i;
+      else
+       {
+         if (CPP_OPTION (r, warn_invalid_pch))
+           cpp_error (r, CPP_DL_WARNING_SYSHDR,
+                      "%s: not used because `%s' is defined",
+                      name, first);
+         goto fail;
+       }
+    }
+
+  free(nl.defs);
+  nl.defs = NULL;
+  free (undeftab);
+  undeftab = NULL;
+
+  /* Read in the next value of __COUNTER__.
+     Check that (a) __COUNTER__ was not used in the pch or (b) __COUNTER__
+     has not been used in this translation unit. */
+  if (read (fd, &counter, sizeof (counter)) != sizeof (counter))
+    goto error;
+  if (counter && r->counter)
+    {
+      if (CPP_OPTION (r, warn_invalid_pch))
+       cpp_error (r, CPP_DL_WARNING_SYSHDR,
+                  "%s: not used because `__COUNTER__' is invalid",
+                  name);
+       goto fail;
+    }
+
+  /* We win!  */
+  return 0;
+
+ error:
+  cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header");
+  return -1;
+
+ fail:
+  if (namebuf != NULL)
+    free (namebuf);
+  if (undeftab != NULL)
+    free (undeftab);
+  if (nl.defs != NULL)
+    free (nl.defs);
+  return 1;
+}
+
+/* Save all the existing macros.  */
+
+struct save_macro_data
+{
+  uchar **defns;
+  size_t count;
+  size_t array_size;
+  char **saved_pragmas;
+};
+
+/* Save the definition of a single macro, so that it will persist
+   across a PCH restore.  Because macro data is in GCed memory, which
+   will be blown away by PCH, it must be temporarily copied to
+   malloced memory.  (The macros will refer to identifier nodes which
+   are also GCed and so on, so the copying is done by turning them
+   into self-contained strings.)  The assumption is that most macro
+   definitions will come from the PCH file, not from the compilation
+   before the PCH file is loaded, so it doesn't matter that this is
+   a little expensive.
+
+   It would reduce the cost even further if macros defined in the PCH
+   file were not saved in this way, but this is not done (yet), except
+   for builtins, and for #assert by default.  */
+
+static int
+save_macros (cpp_reader *r, cpp_hashnode *h, void *data_p)
+{
+  struct save_macro_data *data = (struct save_macro_data *)data_p;
+  if (h->type != NT_VOID
+      && (h->flags & NODE_BUILTIN) == 0)
+    {
+      if (data->count == data->array_size)
+       {
+         data->array_size *= 2;
+         data->defns = XRESIZEVEC (uchar *, data->defns, (data->array_size));
+       }
+
+      switch (h->type)
+       {
+       case NT_ASSERTION:
+         /* Not currently implemented.  */
+         return 1;
+
+       case NT_MACRO:
+         {
+           const uchar * defn = cpp_macro_definition (r, h);
+           size_t defnlen = ustrlen (defn);
+
+           data->defns[data->count] = (uchar *) xmemdup (defn, defnlen,
+                                                          defnlen + 2);
+           data->defns[data->count][defnlen] = '\n';
+         }
+         break;
+
+       default:
+         abort ();
+       }
+      data->count++;
+    }
+  return 1;
+}
+
+/* Prepare to restore the state, by saving the currently-defined
+   macros in 'data'.  */
+
+void
+cpp_prepare_state (cpp_reader *r, struct save_macro_data **data)
+{
+  struct save_macro_data *d = XNEW (struct save_macro_data);
+
+  d->array_size = 512;
+  d->defns = XNEWVEC (uchar *, d->array_size);
+  d->count = 0;
+  cpp_forall_identifiers (r, save_macros, d);
+  d->saved_pragmas = _cpp_save_pragma_names (r);
+  *data = d;
+}
+
+/* Given a precompiled header that was previously determined to be valid,
+   apply all its definitions (and undefinitions) to the current state.
+   DEPNAME is passed to deps_restore.  */
+
+int
+cpp_read_state (cpp_reader *r, const char *name, FILE *f,
+               struct save_macro_data *data)
+{
+  size_t i;
+  struct lexer_state old_state;
+  unsigned int counter;
+
+  /* Restore spec_nodes, which will be full of references to the old
+     hashtable entries and so will now be invalid.  */
+  {
+    struct spec_nodes *s = &r->spec_nodes;
+    s->n_defined       = cpp_lookup (r, DSC("defined"));
+    s->n_true          = cpp_lookup (r, DSC("true"));
+    s->n_false         = cpp_lookup (r, DSC("false"));
+    s->n__VA_ARGS__     = cpp_lookup (r, DSC("__VA_ARGS__"));
+  }
+
+  old_state = r->state;
+  r->state.in_directive = 1;
+  r->state.prevent_expansion = 1;
+  r->state.angled_headers = 0;
+
+  /* Run through the carefully-saved macros, insert them.  */
+  for (i = 0; i < data->count; i++)
+    {
+      cpp_hashnode *h;
+      size_t namelen;
+      uchar *defn;
+
+      namelen = ustrcspn (data->defns[i], "( \n");
+      h = cpp_lookup (r, data->defns[i], namelen);
+      defn = data->defns[i] + namelen;
+
+      /* The PCH file is valid, so we know that if there is a definition
+        from the PCH file it must be the same as the one we had
+        originally, and so do not need to restore it.  */
+      if (h->type == NT_VOID)
+       {
+         if (cpp_push_buffer (r, defn, ustrchr (defn, '\n') - defn, true)
+             != NULL)
+           {
+             _cpp_clean_line (r);
+             if (!_cpp_create_definition (r, h))
+               abort ();
+             _cpp_pop_buffer (r);
+           }
+         else
+           abort ();
+       }
+
+      free (data->defns[i]);
+    }
+  r->state = old_state;
+
+  _cpp_restore_pragma_names (r, data->saved_pragmas);
+
+  free (data);
+
+  if (deps_restore (r->deps, f, CPP_OPTION (r, restore_pch_deps) ? name : NULL)
+      != 0)
+    goto error;
+
+  if (! _cpp_read_file_entries (r, f))
+    goto error;
+
+  if (fread (&counter, sizeof (counter), 1, f) != 1)
+    goto error;
+
+  if (!r->counter)
+    r->counter = counter;
+
+  return 0;
+
+ error:
+  cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header");
+  return -1;
+}
diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog
new file mode 100644 (file)
index 0000000..70da372
--- /dev/null
@@ -0,0 +1,184 @@
+2007-12-05  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * vi.po: Update.
+
+2007-11-15  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * es.po: Update.
+
+2007-11-11  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * de.po, zh_CN.po: Update.
+
+2007-11-10  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       sv.po, tr.po, uk,po, vi.po, zh_CN.po, zh_TW.po: Update.
+
+2007-11-08  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2007-10-21  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * es.po, vi.po: Update.
+
+2007-10-10  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       sv.po, tr.po, uk,po, vi.po, zh_CN.po, zh_TW.po: Update.
+
+2007-08-21  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update.
+       * uk.po: New.
+
+2007-06-26  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update.
+
+2007-03-07  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2006-10-22  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2006-09-03  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * vi.po: Update.
+
+2006-06-24  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * sv.po: Update.
+
+2006-06-24  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update.
+
+2006-04-21  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * de.po: Update.
+
+2006-03-31  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * sv.po: Update.
+
+2006-03-13  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po, zh_CN.po: Update.
+       * zh_TW.po: New file.
+
+2005-12-06  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * vi.po: Update.
+
+2005-12-03  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * zh_CN.po: New file.
+
+2005-12-01  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po: Update.
+
+2005-11-20  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2005-09-04  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po: Update.
+
+2005-06-18  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * tr.po, vi.po: Update.
+
+2005-06-16  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po: Update.
+
+2005-06-14  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * fr.po, sv.po: Update.
+
+2005-06-07  Jakub Jelinek  <jakub@redhat.com>
+
+       * cpplib.pot: Regenerate.
+
+2005-05-05  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * nl.po: Update.
+
+2005-04-27  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       rw.po, sv.po, tr.po, vi.po: Update.
+
+2005-04-06  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * rw.po: New file.
+
+2005-03-29  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * de.po: Update.
+
+2005-03-04  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * tr.po: Update.
+       * vi.po: New file.
+
+2005-03-04  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       sv.po, tr.po: Update.
+
+2005-02-25  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2004-12-15  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * fr.po: Update.
+
+2004-12-04  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * tr.po: Update.
+
+2004-12-02  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * es.po: Update.
+
+2004-12-01  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po,
+       sv.po, tr.po: Update.
+
+2004-11-27  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2004-11-09  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * cpplib.pot: Regenerate.
+
+2004-05-23  Paolo Bonzini  <bonzini@gnu.org>
+
+       * be.po: Extracted from gcc/po/be.po.
+       * ca.po: Extracted from gcc/po/ca.po.
+       * da.po: Extracted from gcc/po/da.po.
+       * de.po: Extracted from gcc/po/de.po.
+       * el.po: Extracted from gcc/po/el.po.
+       * es.po: Extracted from gcc/po/es.po.
+       * fr.po: Extracted from gcc/po/fr.po.
+       * ja.po: Extracted from gcc/po/ja.po.
+       * nl.po: Extracted from gcc/po/nl.po.
+       * sv.po: Extracted from gcc/po/sv.po.
+       * tr.po: Extracted from gcc/po/tr.po.
diff --git a/libcpp/po/be.po b/libcpp/po/be.po
new file mode 100644 (file)
index 0000000..44c500b
--- /dev/null
@@ -0,0 +1,2937 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Ales Nyakhaychyk <nyakhaychyk@i18n.linux.by>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gcc 3.1\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2002-05-17 15:54+0200\n"
+"Last-Translator: Ales Nyakhaychyk <nyakhaychyk@i18n.linux.by>\n"
+"Language-Team: Belarusian <i18n@tut.by>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr ""
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr ""
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr ""
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr ""
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr ""
+
+#: charset.c:998
+#, fuzzy, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "\"%s\" - гэта не пачатак дэкларацыі"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr ""
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr ""
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr ""
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr ""
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr ""
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr ""
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr ""
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr ""
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr ""
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr ""
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr ""
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "невядомая ESC-паслядоўнасць '\\%c'"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "невядомая ESC-паслядоўнасць '\\%c'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr ""
+
+#: charset.c:1415 charset.c:1478
+#, fuzzy
+msgid "character constant too long for its type"
+msgstr "сімвальная канстанта вельмі доўгая"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "мнагасімвальная сімвальная канстанта"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "пустая сімвальная канстанта"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr ""
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr ""
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr ""
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr ""
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr ""
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr ""
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr ""
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr ""
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr ""
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr ""
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr ""
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr ""
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr ""
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr ""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr ""
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr ""
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr ""
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr ""
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr ""
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr ""
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr ""
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr ""
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr ""
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr ""
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "нерэчаісны ініцыялізатар"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr ""
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr ""
+
+#: directives.c:1119
+#, fuzzy, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "Клас \"%s\" ужо існуе"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr ""
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr ""
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr ""
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr ""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr ""
+
+#: directives.c:1437
+#, fuzzy, c-format
+msgid "cannot find source file %s"
+msgstr "не магу знайсці крыніцу %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr ""
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr ""
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr ""
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr ""
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr ""
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr ""
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr ""
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr ""
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr ""
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr ""
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr ""
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr ""
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr ""
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr ""
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr ""
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "незавершаныя каментарыі"
+
+#: errors.c:118
+msgid "warning: "
+msgstr ""
+
+#: errors.c:120
+msgid "internal error: "
+msgstr ""
+
+#: errors.c:122
+msgid "error: "
+msgstr ""
+
+#: errors.c:186
+#, fuzzy
+msgid "stdout"
+msgstr "структура"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr ""
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr ""
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "`%E' - нерэчаісная нязьменная тыпу string"
+
+#: expr.c:305
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "`%E' - нерэчаісная нязьменная тыпу string"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "`%E' - нерэчаісная нязьменная тыпу string"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr ""
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr ""
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr ""
+
+#: expr.c:341
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "`%E' - нерэчаісная нязьменная тыпу string"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr ""
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr ""
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr ""
+
+#: expr.c:379
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "`%E' - нерэчаісная нязьменная тыпу string"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr ""
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr ""
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr ""
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr ""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr ""
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr ""
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr ""
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr ""
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr ""
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr ""
+
+#: expr.c:855 expr.c:884
+#, fuzzy, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "прапушчан прабел пасля нумара \"%.*s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr ""
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr ""
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr ""
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr ""
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr ""
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr ""
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr ""
+
+#: expr.c:975
+#, fuzzy, c-format
+msgid "impossible operator '%u'"
+msgstr "немагчымы апэратар '%s'"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr ""
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr ""
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr ""
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr ""
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr ""
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr ""
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr ""
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s - гэта блёчная прылада"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s - вельмі вялікі"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr ""
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr ""
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr ""
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr ""
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr ""
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr ""
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr ""
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr ""
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr ""
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr ""
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr ""
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr ""
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr ""
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr ""
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr ""
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr ""
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr ""
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr ""
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr ""
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "`%D' - гэта ня функцыя,"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr ""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr ""
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr ""
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "прапушчан завяршаючы сімвал %c"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr ""
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr ""
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr ""
+
+#: lex.c:1347
+#, fuzzy, c-format
+msgid "unspellable token %s"
+msgstr "немагу адчыніць файл \"%s\""
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr ""
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr ""
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr ""
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "не магу знайсці крыніцу %s\n"
+
+#: macro.c:254
+#, fuzzy
+msgid "could not determine date and time"
+msgstr "Немагчыма адчыніць файл з дадзенымі %s.\n"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr ""
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr ""
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr ""
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr ""
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr ""
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr ""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr ""
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr ""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr ""
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr ""
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr ""
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr ""
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr ""
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr ""
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr ""
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr ""
+
+#: macro.c:1534
+#, fuzzy
+msgid "missing whitespace after the macro name"
+msgstr "прапушчан прабел пасля нумара \"%.*s\""
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr ""
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr ""
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr ""
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr ""
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr ""
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:485
+#, fuzzy, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "адмеціна `%s' выкарыстоўвываецца, але ня вызначана"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr ""
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr ""
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr ""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr ""
+
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "памылковая колькасьць аргументаў, зададзеных для атрыбута `%s'"
+
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "\"%s\" атрыбут ігнарыруецца"
+
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "невядомы рэжым машыны \"%s\""
+
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "няма тыпа дадзеных для рэжыма \"%s\""
+
+#~ msgid "section of `%s' conflicts with previous declaration"
+#~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй"
+
+#~ msgid "section attributes are not supported for this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "\"%s\" атрыбут ігнарыруецца"
+
+#, fuzzy
+#~ msgid "second arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#, fuzzy
+#~ msgid "third arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай"
+
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "аргумент `__builtin_args_info' выйшаў за межы"
+
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "прапушчан аргумент у `__builtin_args_info'"
+
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr ""
+#~ "`va_start' выкарыстоўвываецца ў функцыі з нязьменнай\n"
+#~ "           колькасьцю аргументаў"
+
+#~ msgid "`__builtin_next_arg' called without an argument"
+#~ msgstr "\"__buitin_next_arg\" выклікаецца без аргумента"
+
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "нехапае аргументаў у функцыі \"%s\""
+
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "вельмі шмат аргумэнтаў у функцыі `%s'"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking the address of a label"
+#~ msgstr "ISO C не дазваляе пусты ізыходны файл"
+
+#, fuzzy
+#~ msgid "ISO C forbids taking the address of a label"
+#~ msgstr "ISO C не дазваляе пусты ізыходны файл"
+
+#~ msgid "unknown C standard `%s'"
+#~ msgstr "невядомы C стандарт `%s'"
+
+#~ msgid "label `%s' defined but not used"
+#~ msgstr "адмеціна `%s' вызначана, але ня выкарыстоўваецца"
+
+#, fuzzy
+#~ msgid "previous declaration of function `%s' with attribute noinline"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "previous declaration of function `%s' was inline"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "a parameter"
+#~ msgstr "невыкарыстаемы параметр \"%s\""
+
+#, fuzzy
+#~ msgid "a global declaration"
+#~ msgstr "Нерэчаіснае абвяшчэнне"
+
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "паўторнае абвяшчэньне адмеціны `%s'"
+
+#~ msgid "this is a previous declaration"
+#~ msgstr "гэта папярэдняе абвяшчэньне"
+
+#~ msgid "empty declaration"
+#~ msgstr "пустое абвяшчэньне"
+
+#, fuzzy
+#~ msgid "ISO C89 does not support `[*]' array declarators"
+#~ msgstr "ISO C89 не падтрымлівае \"long long\""
+
+#~ msgid "`%s' is usually a function"
+#~ msgstr "`%s' - звычайна функцыя"
+
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "параметр \"%s\" ініцыялізаваны"
+
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "`long long long' - вельмі доўга для GCC"
+
+#~ msgid "ISO C89 does not support `long long'"
+#~ msgstr "ISO C89 не падтрымлівае `long long'"
+
+#~ msgid "duplicate `%s'"
+#~ msgstr "паўтарэньне `%s'"
+
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "long, short, signed ці unsigned нерэчаісны для \"%s\""
+
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "complex нерэчаісны для \"%s\""
+
+#~ msgid "ISO C89 does not support complex types"
+#~ msgstr "ISO C89 не падтрымлівае комлексныя тыпы"
+
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "ISO C не падтрымлівае просты \"complex\" у значэнні \"double complex\""
+
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "ISO C не падтрымлівае комлексныя цэлалікавыя тыпы"
+
+#~ msgid "duplicate `const'"
+#~ msgstr "паўтарэнне \"const\""
+
+#~ msgid "duplicate `restrict'"
+#~ msgstr "паўтарэнне \"restrict\""
+
+#~ msgid "duplicate `volatile'"
+#~ msgstr "паўтарэнне \"volatile\""
+
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "памер масіва \"%s\" адмоўны"
+
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "памер масіва \"%s\" вельмі вялікі"
+
+#, fuzzy
+#~ msgid "redefinition of `struct %s'"
+#~ msgstr "перанакіраванне stdout: %s"
+
+#~ msgid "union"
+#~ msgstr "аб'яднанне"
+
+#~ msgid "structure"
+#~ msgstr "структура"
+
+#~ msgid "members"
+#~ msgstr "члены"
+
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып"
+
+#~ msgid "no previous prototype for `%s'"
+#~ msgstr "няма папярэдняга прататыпа для \"%s\""
+
+#~ msgid "no previous declaration for `%s'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#~ msgid "return type of `%s' is not `int'"
+#~ msgstr "вяртаемы тып \"%s\" не \"int\""
+
+#~ msgid "first argument of `%s' should be `int'"
+#~ msgstr "першым аргументам \"%s\" павінен быць \"int\""
+
+#~ msgid "second argument of `%s' should be `char **'"
+#~ msgstr "другім аргументам \"%s\" павінен быць \"char **\""
+
+#~ msgid "size of return value of `%s' is %u bytes"
+#~ msgstr "памер вяртаемага значэння \"%s\" %u байт"
+
+#~ msgid "size of return value of `%s' is larger than %d bytes"
+#~ msgstr "памер вяртаемага значэння \"%s\" больш чым %d байт"
+
+#~ msgid "function does not return string type"
+#~ msgstr "функцыя не вяртае тып string"
+
+#~ msgid "`0' flag"
+#~ msgstr "'0' флаг"
+
+#~ msgid "`O' modifier"
+#~ msgstr "'O' мадыфікатар"
+
+#~ msgid "%s does not support %s"
+#~ msgstr "%s не падтрымлівае %s"
+
+#~ msgid "syntax error"
+#~ msgstr "сінтаксічная памылка"
+
+#, fuzzy
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "сінтаксічная памылка"
+
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "ISO C не дазваляе пусты ізыходны файл"
+
+#, fuzzy
+#~ msgid "first argument to __builtin_choose_expr not a constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "\"%s\" - гэта не пачатак дэкларацыі"
+
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "ISO C не дазваляе дэкларацыі метак (label)"
+
+#~ msgid "empty body in an else-statement"
+#~ msgstr "пустое цела ў else-выражэнні"
+
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "ISO C не падтрымлівае \"goto *expr;\""
+
+#~ msgid "parse error"
+#~ msgstr "граматычная памылка"
+
+#~ msgid "%s at end of input"
+#~ msgstr "%s на прыканцы ўводу"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s перад %s'%c'"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s перад %s'\\x%x'"
+
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s перад \"%s\""
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s перад знакам '%s'"
+
+#, fuzzy
+#~ msgid "YYDEBUG not defined"
+#~ msgstr "YYDEBUG не вызначан."
+
+#, fuzzy
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "asm declaration conficts with previous rename"
+#~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй"
+
+#~ msgid "destructor needed for `%#D'"
+#~ msgstr "дэструктару неабходны \"%#D\""
+
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(Аб кожным неабвешчаным ідэнтыфікатары паведамляецца"
+
+#~ msgid "for each function it appears in.)"
+#~ msgstr "адзін раз для кожнай функцыі, дзе ён з'яўляецца.)"
+
+#~ msgid "too many arguments to function"
+#~ msgstr "вельмі шмат аргументаў у функцыі"
+
+#~ msgid "too few arguments to function"
+#~ msgstr "не хапае аргументаў у функцыі"
+
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "ISO C не падтрымлівае \"++\" і \"--\" для тыпу complex"
+
+#, fuzzy
+#~ msgid "wrong type argument to increment"
+#~ msgstr "не хапае аргументаў у функцыі"
+
+#, fuzzy
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "не магу атрымаць адрас бітавага поля \"%s\""
+
+#~ msgid "initialization"
+#~ msgstr "ініцыялізацыя"
+
+#~ msgid "invalid initializer"
+#~ msgstr "нерэчаісны ініцыялізатар"
+
+#~ msgid "missing initializer"
+#~ msgstr "прапушчан ініцыялізатар"
+
+#~ msgid "return"
+#~ msgstr "вяртанне"
+
+#~ msgid "called from here"
+#~ msgstr "выклікана адсюль"
+
+#~ msgid "internal error"
+#~ msgstr "унутраная памылка"
+
+#~ msgid "no arguments"
+#~ msgstr "няма аргументаў"
+
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%d канструктар(аў) знойдзен(а)\n"
+
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%d дэструктар(аў) знойдзен(а)\n"
+
+#~ msgid "[cannot find %s]"
+#~ msgstr "[нельга знайсці %s]"
+
+#~ msgid "cannot find `%s'"
+#~ msgstr "нельга знайсці \"%s\""
+
+#~ msgid "redirecting stdout: %s"
+#~ msgstr "перанакіраванне stdout: %s"
+
+#~ msgid "cannot find `nm'"
+#~ msgstr "нельга знайсці \"nm\""
+
+#~ msgid "pipe"
+#~ msgstr "канвеер"
+
+#~ msgid "unable to open file '%s'"
+#~ msgstr "немагу адчыніць файл \"%s\""
+
+#~ msgid "not found\n"
+#~ msgstr "не знойдзена\n"
+
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "дрэнная магічная лічба ў файле \"%s\""
+
+#~ msgid "cannot find `ldd'"
+#~ msgstr "не магу знайсці \"ldd\""
+
+#, fuzzy
+#~ msgid "library lib%s not found"
+#~ msgstr "Бібліятэка lib%s не знойдзена"
+
+#~ msgid "bad magic number"
+#~ msgstr "дрэнны \"магічны\" нумар"
+
+#~ msgid "bad header version"
+#~ msgstr "дрэнная версія загалоўка"
+
+#~ msgid "unsupported version"
+#~ msgstr "непадтрымліваемая версія"
+
+#, fuzzy
+#~ msgid "missing binary operator"
+#~ msgstr "прапушчан ініцыялізатар"
+
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s: не дырэкторыя"
+
+#, fuzzy
+#~ msgid "changing search order for system directory \"%s\""
+#~ msgstr "немагчыма стварыць дырэкторыю \"%s\""
+
+#, fuzzy
+#~ msgid "argument missing after %s"
+#~ msgstr "аргумент для \"%s\" прапушчан"
+
+#, fuzzy
+#~ msgid "output filename specified twice"
+#~ msgstr "не зададзены ўваходзячыя файлы"
+
+#, fuzzy
+#~ msgid "unknown string token %s\n"
+#~ msgstr "невядомая назва рэгістра: %s\n"
+
+#, fuzzy
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "невядомая ESC-паслядоўнасць '\\%c'"
+
+#, fuzzy
+#~ msgid "invalid option %s"
+#~ msgstr "Нерэчаісны выбар %s"
+
+#~ msgid "too many input files"
+#~ msgstr "вельмі шмат уваходзячых файлаў"
+
+#~ msgid "%s:%d: warning: "
+#~ msgstr "%s:%d: увага: "
+
+#~ msgid "%s: warning: "
+#~ msgstr "%s: увага: "
+
+#~ msgid "%s: %s: "
+#~ msgstr "%s: %s: "
+
+#, fuzzy
+#~ msgid "In member function `%s':"
+#~ msgstr "у функцыі \"%s\":"
+
+#~ msgid "In function `%s':"
+#~ msgstr "у функцыі \"%s\":"
+
+#~ msgid "compilation terminated.\n"
+#~ msgstr "кампіляцыя завершана.\n"
+
+#~ msgid "In file included from %s:%d"
+#~ msgstr "У файле уключаным з %s:%d"
+
+#~ msgid ":\n"
+#~ msgstr ":\n"
+
+#~ msgid "can't get current directory"
+#~ msgstr "не магу атрымаць бягучую дырэкторыю"
+
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "спынена ў %s, ля %s:%d"
+
+#~ msgid "invalid %%-code"
+#~ msgstr "нерэчаісны %%-код"
+
+#~ msgid "unused parameter `%s'"
+#~ msgstr "невыкарыстаемы параметр \"%s\""
+
+#, fuzzy
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "аргумент для \"%s\" прапушчан"
+
+#, fuzzy
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "аргумент для \"%s\" прапушчан"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "-pipe не падтрымліваецца"
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "Выкарыстанне: %s [выбары] файл...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "Выбары:\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   Адлюстраваць гэту інфармацыю\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             Адлюстраваць версію кампілятара\n"
+
+#, fuzzy
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr "  -o <файл>                Памясціць вывад у <файл>\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <файл>                Памясціць вывад у <файл>\n"
+
+#, fuzzy
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "аргумент для \"-x\" прапушчан"
+
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "аргумент для \"-x\" прапушчан"
+
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "аргумент для \"-%s\" прапушчан"
+
+#, fuzzy
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "Нерэчаісная спецыфікацыя! Памылка ў cc."
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#, fuzzy
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "нераспазнаны выбар \"-%s\""
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "нераспазнаны выбар \"-%s\""
+
+#~ msgid "programs: %s\n"
+#~ msgstr "праграмы: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "бібліятэкі: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Інструкцыі для паведамленняў аб памылках глядзіце тут:\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "версія gcc %s\n"
+
+#, fuzzy
+#~ msgid "no input files"
+#~ msgstr "няма ўваходзячых файлаў"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: %s кампілятар не ўсталяваны на гэтай сістэме"
+
+#~ msgid "language %s not recognized"
+#~ msgstr "мова %s не распазнана"
+
+#, fuzzy
+#~ msgid "internal gcc abort"
+#~ msgstr "унутраная памылка"
+
+#, fuzzy
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "  --help                   Адлюстраваць гэту інфармацыю\n"
+
+#, fuzzy
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "  -dumpversion             Адлюстраваць версію кампілятара\n"
+
+#, fuzzy
+#~ msgid "  -n, --no-output                 Do not create an output file\n"
+#~ msgstr "  -o <файл>                Памясціць вывад у <файл>\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Інструкцыі для паведамленняў аб памылках глядзіце тут:\n"
+
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+
+#~ msgid "can't open %s"
+#~ msgstr "немагчыма адчыніць %s"
+
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "нерэчаісны парамэтр `%s'"
+
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s: унутраная памылка (датэрміновае завяршэньне)\n"
+
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: кампілюецца \"%s\"\n"
+
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: немагчыма знішчыць файл \"%s\": %s\n"
+
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: %d: увага: няма знешняга (extern) абвяшчэння для \"%s\"\n"
+
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: немагчыма адчыніць файл `%s' для чытаньня: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: памылка чытаньня файла ўводу `%s': %s\n"
+
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s: увага: файл \"%s\" ужо запісан у \"%s\"\n"
+
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: немагчыма зьмяніць рэжым файла `%s': %s\n"
+
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: файл уводу павінен мець суфікс .c: %s\n"
+
+#~ msgid "floating point overflow"
+#~ msgstr "перапаўненьне плаваючай кропкі"
+
+#~ msgid "unknown register name: %s"
+#~ msgstr "невядомая назва рэгістра: %s"
+
+#, fuzzy
+#~ msgid "could not find a spill register"
+#~ msgstr "Не выкарыстоўваць рэгістра sb"
+
+#, fuzzy
+#~ msgid "unrecognizable insn:"
+#~ msgstr "нераспазнаны выбар \"-%s\""
+
+#, fuzzy
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "нераспазнаны аператар %s"
+
+#~ msgid "unused variable `%s'"
+#~ msgstr "невыкарыстоўваемая пераменная \"%s\""
+
+#~ msgid "size of `%s' is %d bytes"
+#~ msgstr "памер \"%s\" - %d байт"
+
+#~ msgid "size of `%s' is larger than %d bytes"
+#~ msgstr "памер \"%s\" больш чам %d байт"
+
+#~ msgid "Enable exception handling"
+#~ msgstr "Уключыць апрацоўку выключэньняў"
+
+#~ msgid "Insert stack checking code into the program"
+#~ msgstr "Уключаць код правэркі стэку ў праграму"
+
+#~ msgid "Enable SSA optimizations"
+#~ msgstr "Уключаць SSA аптымізацыю"
+
+#, fuzzy
+#~ msgid "Do not recognize any built in functions"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#, fuzzy
+#~ msgid "invalid option `%s'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "internal error: %s"
+#~ msgstr "Унутраная памылка: %s"
+
+#~ msgid ""
+#~ "\n"
+#~ "Language specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Выбары, спецыфічныя для мовы:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " Options for %s:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Выбары для %s:\n"
+
+#, fuzzy
+#~ msgid "unrecognized option `%s'"
+#~ msgstr "нераспазнаны выбар \"-%s\""
+
+#, fuzzy
+#~ msgid "-Wid-clash-LEN is no longer supported"
+#~ msgstr "-pipe не падтрымліваецца."
+
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "\"%s\" : невядомы ці непадтрымліваемы выбар -g"
+
+#~ msgid "invalid --param option: %s"
+#~ msgstr "нерэчаісны выбар --param : %s"
+
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr ""
+#~ "%s%s%s версія %s (%s)\n"
+#~ "%s\tзкампілявана GNU C версія %s.\n"
+#~ "%s%s%s версія %s (%s) зкампілявана CC.\n"
+
+#~ msgid "options enabled: "
+#~ msgstr "выбары ўключаны:"
+
+#~ msgid "can't open %s for writing"
+#~ msgstr "немагчыма адчыніць %s для запісу"
+
+#, fuzzy
+#~ msgid "ignoring command line option '%s'"
+#~ msgstr "Нераспазнаны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#~ msgid "error writing to %s"
+#~ msgstr "памылка запісу ў %s"
+
+#, fuzzy
+#~ msgid "invalid character constant in #if"
+#~ msgstr "сімвальная канстанта вельмі доўгая"
+
+#~ msgid "usage: %s [switches] input output"
+#~ msgstr "выкарыстаньне: %s [выключальнікі] увод вывад"
+
+#~ msgid "#error%.*s"
+#~ msgstr "#памылка%.*s"
+
+#~ msgid "#warning%.*s"
+#~ msgstr "#увага%.*s"
+
+#~ msgid "unbalanced #endif"
+#~ msgstr "незбалансаваны #endif"
+
+#~ msgid "invalid register name for `%s'"
+#~ msgstr "нерэчаісная назва рэгістра `%s'"
+
+#~ msgid "optimization turned on"
+#~ msgstr "аптымізацыя уключана"
+
+#~ msgid "optimization turned off"
+#~ msgstr "аптымізацыя выключана"
+
+#~ msgid "invalid %%Q value"
+#~ msgstr "дрэннае %%Q значэнне"
+
+#~ msgid "invalid %%C value"
+#~ msgstr "нерэчаіснае значэньне %%C"
+
+#~ msgid "invalid %%N value"
+#~ msgstr "нерэчаіснае значэньне %%N"
+
+#~ msgid "invalid %%M value"
+#~ msgstr "нерэчаіснае значэньне %%M"
+
+#~ msgid "invalid %%m value"
+#~ msgstr "нерэчаіснае значэньне %%m"
+
+#~ msgid "invalid %%L value"
+#~ msgstr "нерэчаіснае значэньне %%L"
+
+#~ msgid "invalid %%O value"
+#~ msgstr "нерэчаіснае значэньне %%O"
+
+#~ msgid "invalid %%P value"
+#~ msgstr "нерэчаіснае значэньне %%P"
+
+#~ msgid "invalid %%V value"
+#~ msgstr "нерэчаіснае значэньне %%V"
+
+#, fuzzy
+#~ msgid "-f%s ignored for Unicos/Mk (not supported)"
+#~ msgstr "-pipe не падтрымліваецца."
+
+#, fuzzy
+#~ msgid "-mieee not supported on Unicos/Mk"
+#~ msgstr "-pipe не падтрымліваецца"
+
+#~ msgid "invalid %%H value"
+#~ msgstr "нерэчаіснае значэньне %%H"
+
+#, fuzzy
+#~ msgid "invalid %%J value"
+#~ msgstr "дрэннае %%Q значэнне"
+
+#~ msgid "invalid %%r value"
+#~ msgstr "нерэчаіснае значэньне %%r"
+
+#~ msgid "invalid %%R value"
+#~ msgstr "нерэчаіснае значэньне %%R"
+
+#~ msgid "invalid %%h value"
+#~ msgstr "нерэчаіснае значэньне %%h"
+
+#~ msgid "invalid %%U value"
+#~ msgstr "нерэчаіснае значэньне %%U"
+
+#~ msgid "invalid %%s value"
+#~ msgstr "нерэчаіснае значэньне %%v"
+
+#~ msgid "invalid %%E value"
+#~ msgstr "нерэчаіснае значэньне %%E"
+
+#~ msgid "invalid %%xn code"
+#~ msgstr "нерэчаіснае значэньне %%xn"
+
+#~ msgid "Use hardware fp"
+#~ msgstr "Выкарыстоўваць апаратную плаваючую кропку"
+
+#~ msgid "Do not use hardware fp"
+#~ msgstr "Не выкарыстоўваць апаратную плаваючую кропку"
+
+#, fuzzy
+#~ msgid "argument of `%s' attribute is not a string constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#, fuzzy
+#~ msgid "invalid operand to %%R code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%H/%%L code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%U code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%V code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "target CPU does not support THUMB instructions"
+#~ msgstr "ISO C не падтрымлівае комлексныя цэлалікавыя тыпы"
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to functions"
+#~ msgstr "\"%s\" звычайна функцыя"
+
+#, fuzzy
+#~ msgid "invalid insn:"
+#~ msgstr "Нерэчаісны выбар %s"
+
+#~ msgid "internal error: bad register: %d"
+#~ msgstr "унутраная памылка: дрэнны рэгістр: %d"
+
+#~ msgid "unrecognized address"
+#~ msgstr "нераспазнаны адрас"
+
+#, fuzzy
+#~ msgid "unrecognized supposed constant"
+#~ msgstr "нераспазнаны выбар \"-%s\""
+
+#, fuzzy
+#~ msgid "Do not use condition codes from normal instructions"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#, fuzzy
+#~ msgid "Generate code for the specified chip or CPU version"
+#~ msgstr "Генерыраваць код для дадзенага ЦП"
+
+#, fuzzy
+#~ msgid "Do not make adjacent short instructions parallel"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#~ msgid "invalid mode for gen_tst_reg"
+#~ msgstr "нерэчаісны рэжым для gen_tst_reg"
+
+#, fuzzy
+#~ msgid "Don't pass parameters in registers"
+#~ msgstr "Не выкарыстоўваць рэгістра sb"
+
+#, fuzzy
+#~ msgid "Generate code for near calls"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Don't generate code for near calls"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Generate code for near jumps"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Don't generate code for near jumps"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Generate code for a bit-manipulation unit"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Don't generate code for a bit-manipulation unit"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#, fuzzy
+#~ msgid "Generate code for memory map1"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Generate code for memory map2"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Generate code for memory map3"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "Generate code for memory map4"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#, fuzzy
+#~ msgid "-ms2600 is used without -ms"
+#~ msgstr "-ms2600 ужываецца без -ms."
+
+#~ msgid "Do not generate char instructions"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#, fuzzy
+#~ msgid "argument to `%s' attribute larger than %d"
+#~ msgstr "памер \"%s\" больш чам %d байт"
+
+#, fuzzy
+#~ msgid "invalid operand code `%c'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "unknown insn mode"
+#~ msgstr "невядомы рэжым машыны \"%s\""
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to variables"
+#~ msgstr "\"%s\" атрыбут ігнарыруецца"
+
+#~ msgid "Create GUI application"
+#~ msgstr "Стварыць GUI прыдатак"
+
+#~ msgid "Create console application"
+#~ msgstr "Стварыць кансольны прыдатак"
+
+#~ msgid "Generate code for a DLL"
+#~ msgstr "Стварыць код для DLL"
+
+#~ msgid "Generate code for given CPU"
+#~ msgstr "Генерыраваць код для дадзенага ЦП"
+
+#~ msgid "Use given assembler dialect"
+#~ msgstr "Выкарыстоўвываць зададзены дыялект асэмблера"
+
+#~ msgid "Generate ELF output"
+#~ msgstr "Стварыць ELF-вывад"
+
+#~ msgid "Generate code for GNU as"
+#~ msgstr "Генерыраваць код для GNU as"
+
+#~ msgid "Generate code for Intel as"
+#~ msgstr "Генерыраваць код для Intel as"
+
+#~ msgid "Generate code for GNU ld"
+#~ msgstr "Генерыраваць код для GNU ld"
+
+#~ msgid "Generate code for Intel ld"
+#~ msgstr "Генерыраваць код для Intel ld"
+
+#~ msgid "Generate code without GP reg"
+#~ msgstr "Генерыраваць код без GP reg"
+
+#, fuzzy
+#~ msgid "invalid argument of `%s' attribute"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "invalid operand to %%s code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%p code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%T/%%B code"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid operand to %%N code"
+#~ msgstr "нерэчаісны %%-код"
+
+#~ msgid "bad address"
+#~ msgstr "дрэнны адрас"
+
+#, fuzzy
+#~ msgid "lo_sum not of register"
+#~ msgstr "Не выкарыстоўваць рэгістра sb"
+
+#, fuzzy
+#~ msgid "invalid register in the instruction"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "invalid rotate insn"
+#~ msgstr "Нерэчаісны выбар %s"
+
+#~ msgid "Generate code for a 68020"
+#~ msgstr "Ствараць код для 68020"
+
+#~ msgid "Generate code for a 68000"
+#~ msgstr "Ствараць код для 68000"
+
+#, fuzzy
+#~ msgid "Do not use the bit-field instructions"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#, fuzzy
+#~ msgid "Generate code for a Sun FPA"
+#~ msgstr "Стварыць код для DLL"
+
+#, fuzzy
+#~ msgid "Do not generate code for a Sun FPA"
+#~ msgstr "Стварыць код для DLL"
+
+#, fuzzy
+#~ msgid "Generate code for a Sun Sky board"
+#~ msgstr "Стварыць код для DLL"
+
+#~ msgid "Generate code for a 68881"
+#~ msgstr "Ствараць код для 68881"
+
+#~ msgid "Generate code for a 68030"
+#~ msgstr "Ствараць код для 68030"
+
+#~ msgid "Generate code for a 68040"
+#~ msgstr "Ствараць код для 68040"
+
+#~ msgid "Generate code for a 68060"
+#~ msgstr "Ствараць код для 68060"
+
+#~ msgid "Generate code for a 520X"
+#~ msgstr "Ствараць код для 520X"
+
+#~ msgid "Generate code for a 68851"
+#~ msgstr "Ствараць код для 68851"
+
+#~ msgid "Do no generate code for a 68851"
+#~ msgstr "Не ствараць код для 68851"
+
+#~ msgid "Generate code for a 68302"
+#~ msgstr "Ствараць код для 68302"
+
+#~ msgid "Generate code for a 68332"
+#~ msgstr "Ствараць код для 68332"
+
+#~ msgid "Generate code for a cpu32"
+#~ msgstr "Ствараць код для цп32"
+
+#~ msgid "invalid %%x/X value"
+#~ msgstr "нерэчаіснае значэньне %%x/X"
+
+#~ msgid "invalid %%o value"
+#~ msgstr "нерэчаіснае значэньне %%o"
+
+#, fuzzy
+#~ msgid "invalid %%s/S value"
+#~ msgstr "дрэннае %%Q значэнне"
+
+#, fuzzy
+#~ msgid "invalid %%P operand"
+#~ msgstr "нерэчаісны %%-код"
+
+#, fuzzy
+#~ msgid "invalid %%D value"
+#~ msgstr "дрэннае %%Q значэнне"
+
+#, fuzzy
+#~ msgid "invalid option `-mshort-data-%s'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "invalid option `-mstack-increment=%s'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "invalid option `entry%s'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "can't rewind temp file"
+#~ msgstr "немагчыма стварыць часовы файл"
+
+#, fuzzy
+#~ msgid "can't write to output file"
+#~ msgstr "не магу запісаць ў %s"
+
+#, fuzzy
+#~ msgid "can't read from temp file"
+#~ msgstr "не магу прачытаць з %s"
+
+#, fuzzy
+#~ msgid "can't close temp file"
+#~ msgstr "немагчыма зачыніць уваходзячы файл %s"
+
+#~ msgid "Use GNU as"
+#~ msgstr "Выкарыстоўваць GNU як"
+
+#~ msgid "Use symbolic register names"
+#~ msgstr "Ужываць сімвалічныя назвы рэгістраў"
+
+#~ msgid "Don't use symbolic register names"
+#~ msgstr "Не ўжываць сімвалічныя назва рэгістраў"
+
+#~ msgid "Output compiler statistics"
+#~ msgstr "Вывесці статыстыку капілятара"
+
+#~ msgid "Don't output compiler statistics"
+#~ msgstr "Не выводзіць статыстыку кампілятара"
+
+#~ msgid "Use hardware floating point"
+#~ msgstr "Выкарыстоўваць апаратную \"плаваючую кропку\""
+
+#~ msgid "Use 64-bit FP registers"
+#~ msgstr "Выкарыстоўваць 64-бітныя FP-рэгістры"
+
+#~ msgid "Use 32-bit FP registers"
+#~ msgstr "Выкарыстоўваць 32-бітныя FP-рэгістры"
+
+#~ msgid "Use 64-bit general registers"
+#~ msgstr "Выкарыстоўваць 64-бітныя галоўныя рэгістры"
+
+#~ msgid "Use 32-bit general registers"
+#~ msgstr "Выкарыстоўваць 32-бітныя галоўныя рэгістры"
+
+#~ msgid "Use Irix PIC"
+#~ msgstr "Выкарыстоўваць Irix PIC"
+
+#~ msgid "Don't use Irix PIC"
+#~ msgstr "Не выкарыстоўваць Irix PIC"
+
+#~ msgid "Use OSF PIC"
+#~ msgstr "Выкарыстоўваць OSF PIC"
+
+#~ msgid "Don't use OSF PIC"
+#~ msgstr "Не выкарыстоўваць OSF PIC"
+
+#~ msgid "Optimize for 3900"
+#~ msgstr "Аптымізаваць для 3900"
+
+#~ msgid "Optimize for 4650"
+#~ msgstr "Аптымізаваць для 4650"
+
+#, fuzzy
+#~ msgid "-f%s not supported: ignored"
+#~ msgstr "-pipe не падтрымліваецца"
+
+#~ msgid "Target the AM33 processor"
+#~ msgstr "Мэта - AM33 працэсар"
+
+#~ msgid "Don't use hardware fp"
+#~ msgstr "Не выкарыстоўваць апаратную fp"
+
+#~ msgid "Optimize for 32532 cpu"
+#~ msgstr "Аптымізаваць для 32532 ЦП"
+
+#~ msgid "Optimize for 32332 cpu"
+#~ msgstr "Аптымізаваць для 32332 ЦП"
+
+#~ msgid "Optimize for 32032"
+#~ msgstr "Аптымізаваць для 32032 ЦП"
+
+#~ msgid "Do not use register sb"
+#~ msgstr "Не выкарыстоўваць рэгістра sb"
+
+#, fuzzy
+#~ msgid "Do not use bit-field instructions"
+#~ msgstr "Не генерыраваць сімвальныя інструкцыі"
+
+#~ msgid "Use 32 bit int"
+#~ msgstr "Выкарыстоўваць 32-х бітны int"
+
+#~ msgid "Use 16 bit int"
+#~ msgstr "Выкарыстоўваць 16-ці бітны int"
+
+#~ msgid "Use 32 bit float"
+#~ msgstr "Выкарыстоўваць 32-х бітны float"
+
+#~ msgid "Use 64 bit float"
+#~ msgstr "Выкарыстоўваць 64-х бітны float"
+
+#~ msgid "Use UNIX assembler syntax"
+#~ msgstr "Выкарыстоўваць UNIX-сінтакс для асэмблера"
+
+#~ msgid "Use DEC assembler syntax"
+#~ msgstr "Выкарыстоўваць DEC-сінтакс для асэмблера"
+
+#, fuzzy
+#~ msgid "unknown ABI specified: '%s'"
+#~ msgstr "невядомы рэжым машыны \"%s\""
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_altivec_predicate must be a constant"
+#~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай"
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_altivec_predicate is out of range"
+#~ msgstr "аргумент `__builtin_args_info' выйшаў за межы"
+
+#, fuzzy
+#~ msgid "argument 3 of `%s' must be a 2-bit literal"
+#~ msgstr "першым аргументам \"%s\" павінен быць \"int\""
+
+#~ msgid "Don't use AltiVec instructions"
+#~ msgstr "Не выкарыстоўваць інструкцыі AltiVec"
+
+#~ msgid "Don't use EABI"
+#~ msgstr "Не выкарыстоўваць EABI"
+
+#~ msgid "Use alternate register names"
+#~ msgstr "Выкарыстоўвываць альтэрнатыўныя назвы рэгістраў"
+
+#~ msgid "Don't use alternate register names"
+#~ msgstr "Не выкарыстоўвываць альтэрнатыўныя назвы рэгістраў"
+
+#, fuzzy
+#~ msgid "Don't use bras"
+#~ msgstr "Не выкарыстоўваць Irix PIC"
+
+#, fuzzy
+#~ msgid "__builtin_saveregs not supported by this subtarget"
+#~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай"
+
+#, fuzzy
+#~ msgid "Profiling is not supported on this target."
+#~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай"
+
+#~ msgid "invalid %%Y operand"
+#~ msgstr "нерэчаісны %%Y аперанд"
+
+#~ msgid "invalid %%A operand"
+#~ msgstr "нерэчаісны %%A аперанд"
+
+#~ msgid "invalid %%B operand"
+#~ msgstr "нерэчаісны %%B аперанд"
+
+#~ msgid "invalid %%c operand"
+#~ msgstr "нерэчаісны %%c аперанд"
+
+#~ msgid "invalid %%C operand"
+#~ msgstr "нерэчаісны %%C аперанд"
+
+#~ msgid "invalid %%d operand"
+#~ msgstr "нерэчаісны %%d аперанд"
+
+#~ msgid "invalid %%D operand"
+#~ msgstr "нерэчаісны %%D аперанд"
+
+#~ msgid "invalid %%f operand"
+#~ msgstr "нерэчаісны %%f аперанд"
+
+#~ msgid "Optimize for Cypress processors"
+#~ msgstr "Аптымізацыя для Cypress працэсараў"
+
+#~ msgid "Optimize for SparcLite processors"
+#~ msgstr "Аптымізацыя для SparcLite працэсараў"
+
+#~ msgid "Optimize for F930 processors"
+#~ msgstr "Аптымізацыя для  F930 працэсараў"
+
+#~ msgid "Optimize for F934 processors"
+#~ msgstr "Аптымізацыя для F934 працэсараў"
+
+#~ msgid "Optimize for SuperSparc processors"
+#~ msgstr "Аптымізацыя для SuperSparc працэсараў"
+
+#~ msgid "unrecognized section name \"%s\""
+#~ msgstr "нераспазнаная назва сэкцыі \"%s\""
+
+#~ msgid "%s=%s is too large"
+#~ msgstr "%s=%s вельмі вялікі"
+
+#~ msgid "invalid mask"
+#~ msgstr "нерэчаісная маска"
+
+#~ msgid "invalid address"
+#~ msgstr "нерэчаісны адрас"
+
+#, fuzzy
+#~ msgid "no register in address"
+#~ msgstr "невядомая назва рэгістра: %s"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa boolean register option"
+#~ msgstr "Не ўжываць сімвалічныя назва рэгістраў"
+
+#, fuzzy
+#~ msgid "Use the Xtensa floating-point unit"
+#~ msgstr "Выкарыстоўваць апаратную \"плаваючую кропку\""
+
+#, fuzzy
+#~ msgid "%s for `%T %s' operator"
+#~ msgstr "%s перад знакам \"%s\""
+
+#, fuzzy
+#~ msgid "%s for `%T %s %T' operator"
+#~ msgstr "%s перад знакам \"%s\""
+
+#, fuzzy
+#~ msgid "%s for `%s %T' operator"
+#~ msgstr "%s перад знакам \"%s\""
+
+#, fuzzy
+#~ msgid "duplicate enum value `%D'"
+#~ msgstr "паўтарэнне \"volatile\""
+
+#, fuzzy
+#~ msgid "duplicate nested type `%D'"
+#~ msgstr "паўтарэнне \"restrict\""
+
+#, fuzzy
+#~ msgid "duplicate member `%D'"
+#~ msgstr "паўтарэнне \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%T'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%#T'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#~ msgid "previous definition of `%#T'"
+#~ msgstr "папярэдняе вызначэньне `%#T'"
+
+#, fuzzy
+#~ msgid "bit-field `%#D' with non-integral type"
+#~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып"
+
+#, fuzzy
+#~ msgid "field `%D' invalidly declared method type"
+#~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып"
+
+#, fuzzy
+#~ msgid "field `%D' invalidly declared offset type"
+#~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып"
+
+#, fuzzy
+#~ msgid "field `%D' declared static in union"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#~ msgid "declaration of `%#D'"
+#~ msgstr "абвяшчэньне `%#D'"
+
+#~ msgid "converting from `%T' to `%T'"
+#~ msgstr "пераўтварэньне з `%T' у `%T'"
+
+#~ msgid "conflicts with previous declaration `%#D'"
+#~ msgstr "канфлікт з папярэднім абвяшчэньнем `%#D'"
+
+#~ msgid "label `%D' used but not defined"
+#~ msgstr "адмеціна `%D' выкарыстоўвываецца, але ня вызначана"
+
+#~ msgid "label `%D' defined but not used"
+#~ msgstr "адмеціна `%D' вызначана, але не выкарыстоўваецца"
+
+#~ msgid "previous declaration of `%D'"
+#~ msgstr "папярэдняе абвяшчэньне `%D'"
+
+#, fuzzy
+#~ msgid "shadowing %s function `%#D'"
+#~ msgstr "у функцыі \"%s\":"
+
+#, fuzzy
+#~ msgid "conflicts with built-in declaration `%#D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#~ msgid "new declaration `%#D'"
+#~ msgstr "новае абвяшчэньне `%#D'"
+
+#, fuzzy
+#~ msgid "ambiguates built-in declaration `%#D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#~ msgid "previous declaration of `%#D'"
+#~ msgstr "папярэдняе абвяшчэньне `%#D'"
+
+#~ msgid "declaration of template `%#D'"
+#~ msgstr "абвяшчэньне шаблёну `%#D'"
+
+#, fuzzy
+#~ msgid "ambiguates old declaration `%#D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "previous declaration `%#D' here"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "previous declaration as `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "prototype for `%#D'"
+#~ msgstr "няма папярэдняга прататыпа для \"%s\""
+
+#, fuzzy
+#~ msgid "previous declaration of `%#D' with %L linkage"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "after previous specification in `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "previous non-inline declaration here"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "than previous declaration `%F'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "`%#D' used prior to declaration"
+#~ msgstr "\"%s\" - гэта не пачатак дэкларацыі"
+
+#, fuzzy
+#~ msgid "redeclaration of `wchar_t' as `%T'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "invalid redeclaration of `%D'"
+#~ msgstr "Нерэчаіснае абвяшчэнне"
+
+#~ msgid "as `%D'"
+#~ msgstr "як `%D'"
+
+#, fuzzy
+#~ msgid "previous external decl of `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "global declaration `%#D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "`%#D' hides constructor for `%#T'"
+#~ msgstr "дэструктару неабходны \"%#D\""
+
+#, fuzzy
+#~ msgid "`%#D' conflicts with previous using declaration `%#D'"
+#~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй"
+
+#, fuzzy
+#~ msgid "previous non-function declaration `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "conflicts with function declaration `%#D'"
+#~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй"
+
+#, fuzzy
+#~ msgid "implicit declaration of function `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#~ msgid "  from here"
+#~ msgstr " адсюль"
+
+#, fuzzy
+#~ msgid "  skips initialization of `%#D'"
+#~ msgstr "ініцыялізацыя"
+
+#, fuzzy
+#~ msgid "duplicate label `%D'"
+#~ msgstr "паўтарэнне \"%s\""
+
+#~ msgid "invalid use of `%D'"
+#~ msgstr "нерэчаіснае выкарыстаньне `%D'"
+
+#, fuzzy
+#~ msgid "typedef `%D' is initialized"
+#~ msgstr "параметр \"%s\" ініцыялізаваны"
+
+#, fuzzy
+#~ msgid "variable `%#D' has initializer but incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "elements of array `%#D' have incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "cannot initialize `%T' from `%T'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#~ msgid "array size missing in `%D'"
+#~ msgstr "прапушчан памер масіва ў `%D'"
+
+#~ msgid "zero-size array `%D'"
+#~ msgstr "нулявы памер масіва `%D'"
+
+#, fuzzy
+#~ msgid "uninitialized const `%D'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' has incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "cannot initialize `%D' to namespace `%D'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#, fuzzy
+#~ msgid "shadowing previous type declaration of `%#D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' declared with an exception specification"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#~ msgid "`main' must return `int'"
+#~ msgstr "`main' павінна вяртаць `int'"
+
+#~ msgid "size of array `%D' has non-integer type"
+#~ msgstr "памер масіва `%D' не цэлалікавы тып"
+
+#, fuzzy
+#~ msgid "size of array has non-integer type"
+#~ msgstr "памер масіва \"%s\" адмоўны"
+
+#~ msgid "size of array `%D' is negative"
+#~ msgstr "памер масіва `%D' - адмоўны"
+
+#~ msgid "size of array is negative"
+#~ msgstr "адмоўны памер масіва "
+
+#, fuzzy
+#~ msgid "ISO C++ forbids zero-size array"
+#~ msgstr "ISO C не дазваляе дэкларацыі метак (label)"
+
+#, fuzzy
+#~ msgid "size of array `%D' is not an integral constant-expression"
+#~ msgstr "памер масіва \"%s\" адмоўны"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids variable-size array"
+#~ msgstr "ISO C не дазваляе дэкларацыі метак (label)"
+
+#~ msgid "invalid declarator"
+#~ msgstr "нерэчаісны абвяшчальнік"
+
+#~ msgid "multiple declarations `%T' and `%T'"
+#~ msgstr "неаднолькавае абвяшчэньне `%T' і `%T'"
+
+#~ msgid "ISO C++ does not support `long long'"
+#~ msgstr "ISO C++ не падтрымлівае \"long long\""
+
+#, fuzzy
+#~ msgid "ISO C++ forbids declaration of `%s' with no type"
+#~ msgstr "ISO C не дазваляе дэкларацыі метак (label)"
+
+#, fuzzy
+#~ msgid "size of member `%D' is not constant"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#~ msgid "virtual functions cannot be friends"
+#~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі"
+
+#, fuzzy
+#~ msgid "can't define friend function `%s' in a local class definition"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#, fuzzy
+#~ msgid "template parameters cannot be friends"
+#~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі"
+
+#~ msgid "invalid use of `::'"
+#~ msgstr "нерэчаіснае выкарыстаньне `::'"
+
+#, fuzzy
+#~ msgid "function `%D' cannot be declared friend"
+#~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі"
+
+#, fuzzy
+#~ msgid "function `%D' declared virtual inside a union"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#, fuzzy
+#~ msgid "field `%D' has incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "name `%T' has incomplete type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#~ msgid "default argument for `%#D' has type `%T'"
+#~ msgstr "звычайны аргумэнт для `%#D' мае тып `%T'"
+
+#, fuzzy
+#~ msgid "parameter `%D' invalidly declared method type"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#, fuzzy
+#~ msgid "parameter `%D' invalidly declared offset type"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#, fuzzy
+#~ msgid "use of enum `%#D' without previous declaration"
+#~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй"
+
+#~ msgid "previous definition here"
+#~ msgstr "папярэдняе вызначэньне"
+
+#, fuzzy
+#~ msgid "return type `%#T' is incomplete"
+#~ msgstr "вяртаемы тып \"%s\" не \"int\""
+
+#, fuzzy
+#~ msgid "semicolon missing after declaration of `%#T'"
+#~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' implicitly declared before its definition"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#, fuzzy
+#~ msgid "parameter `%D' declared void"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#, fuzzy
+#~ msgid "duplicate type qualifiers in %s declaration"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "deleting `%T' is undefined"
+#~ msgstr "метка \"%s\" ужываецца, але не вызначана"
+
+#, fuzzy
+#~ msgid "template declaration of `%#D'"
+#~ msgstr "пустое абвяшчэнне"
+
+#, fuzzy
+#~ msgid "invalid data member initialization"
+#~ msgstr "нерэчаісны ініцыялізатар"
+
+#, fuzzy
+#~ msgid "initializer specified for non-member function `%D'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#, fuzzy
+#~ msgid "invalid initializer for virtual method `%D'"
+#~ msgstr "нерэчаісны ініцыялізатар"
+
+#, fuzzy
+#~ msgid "use of `%D' is ambiguous"
+#~ msgstr "памер \"%s\" - %d байт"
+
+#, fuzzy
+#~ msgid "unknown namespace `%D'"
+#~ msgstr "невядомы рэжым машыны \"%s\""
+
+#, fuzzy
+#~ msgid "namespace `%D' not allowed in using-declaration"
+#~ msgstr "\"%s\" - гэта не пачатак дэкларацыі"
+
+#, fuzzy
+#~ msgid "`%D' is already a friend of class `%T'"
+#~ msgstr "не знойдзен клас \"%s\""
+
+#, fuzzy
+#~ msgid "previous friend declaration of `%D'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#, fuzzy
+#~ msgid "template parameter type `%T' declared `friend'"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#, fuzzy
+#~ msgid "member initializers for `%#D'"
+#~ msgstr "complex нерэчаісны для \"%s\""
+
+#, fuzzy
+#~ msgid "base initializers for `%#T'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#, fuzzy
+#~ msgid "base class `%T' already initialized"
+#~ msgstr "Клас \"%s\" ужо існуе"
+
+#, fuzzy
+#~ msgid "bad array initializer"
+#~ msgstr "нерэчаісны ініцыялізатар"
+
+#, fuzzy
+#~ msgid "`%T' is not an aggregate type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "invalid use of non-static field `%D'"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "invalid use of member `%D'"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "no method `%T::%D'"
+#~ msgstr "у метадзе \"%s\":"
+
+#, fuzzy
+#~ msgid "can't find class$"
+#~ msgstr "Не магу знайсці клас \"%s\""
+
+#, fuzzy
+#~ msgid "semicolon missing after declaration of `%T'"
+#~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' not defined"
+#~ msgstr "YYDEBUG не вызначан."
+
+#, fuzzy
+#~ msgid "`%D' was not declared in this scope"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#, fuzzy
+#~ msgid "`%D' undeclared (first use this function)"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#, fuzzy
+#~ msgid "`::%D' undeclared (first use here)"
+#~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)"
+
+#, fuzzy
+#~ msgid "no type `%D' in `%T'"
+#~ msgstr "вяртаемы тып \"%s\" не \"int\""
+
+#, fuzzy
+#~ msgid "invalid member template declaration `%D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "`%D' is not a function template"
+#~ msgstr "\"%s\" звычайна функцыя"
+
+#, fuzzy
+#~ msgid "no default argument for `%D'"
+#~ msgstr "нехапае аргументаў у функцыі \"%s\""
+
+#, fuzzy
+#~ msgid "`%T' is not a template type"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#~ msgid "previous declaration `%D'"
+#~ msgstr "папярэдняе абвяшчэньне `%D'"
+
+#, fuzzy
+#~ msgid "template parameter `%#D'"
+#~ msgstr "невыкарыстаемы параметр \"%s\""
+
+#, fuzzy
+#~ msgid "provided for `%D'"
+#~ msgstr "дэструктару неабходны \"%#D\""
+
+#, fuzzy
+#~ msgid "template argument %d is invalid"
+#~ msgstr "параметр \"%s\" ініцыялізаваны"
+
+#, fuzzy
+#~ msgid "for template declaration `%D'"
+#~ msgstr "пустое абвяшчэнне"
+
+#~ msgid "invalid parameter type `%T'"
+#~ msgstr "нерэчаісны тып парамэтра `%T'"
+
+#~ msgid "in declaration `%D'"
+#~ msgstr "у абвяшчэньні  `%D'"
+
+#, fuzzy
+#~ msgid "explicit specialization here"
+#~ msgstr "ініцыялізацыя"
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#D'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#T'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "type of asm operand `%E' could not be determined"
+#~ msgstr "тып параметра \"%s\" не аб'яўлены"
+
+#, fuzzy
+#~ msgid "base initializer for `%T'"
+#~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\""
+
+#~ msgid "%s before `%s'"
+#~ msgstr "%s перад \"%s\""
+
+#~ msgid "%s before `%c'"
+#~ msgstr "%s перад '%c'"
+
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%s перад \"\\%o\""
+
+#~ msgid "%s before `%s' token"
+#~ msgstr "%s перад знакам \"%s\""
+
+#, fuzzy
+#~ msgid "`%s' attribute is not supported on this platform"
+#~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты"
+
+#, fuzzy
+#~ msgid "`sizeof' applied to incomplete type `%T'"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "`%E' cannot be used as a function"
+#~ msgstr "\"%s\" звычайна функцыя"
+
+#, fuzzy
+#~ msgid "too many arguments to %s `%+#D'"
+#~ msgstr "вельмі шмат аргументаў у функцыі \"%s\""
+
+#, fuzzy
+#~ msgid "too few arguments to %s `%+#D'"
+#~ msgstr "нехапае аргументаў у функцыі \"%s\""
+
+#, fuzzy
+#~ msgid "attempt to take address of bit-field structure member `%D'"
+#~ msgstr "не магу атрымаць адрас бітавага поля \"%s\""
+
+#, fuzzy
+#~ msgid "cannot %s a pointer to incomplete type `%T'"
+#~ msgstr "\"%s\" мае незавершаны тып"
+
+#, fuzzy
+#~ msgid "invalid cast to function type `%T'"
+#~ msgstr "Нерэчаісны выбар \"%s\""
+
+#, fuzzy
+#~ msgid "invalid use of undefined type `%#T'"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "forward declaration of `%#T'"
+#~ msgstr "няма папярэдняга аб'яўлення для \"%s\""
+
+#~ msgid "invalid use of `%T'"
+#~ msgstr "нерэчаіснае выкарыстаньне `%T'"
+
+#, fuzzy
+#~ msgid "invalid use of template type parameter"
+#~ msgstr "нявернае выкарыстанне \"restict\""
+
+#, fuzzy
+#~ msgid "missing initializer for member `%D'"
+#~ msgstr "прапушчан ініцыялізатар"
+
+#, fuzzy
+#~ msgid "member `%D' with uninitialized const fields"
+#~ msgstr "параметр \"%s\" ініцыялізаваны"
+
+#, fuzzy
+#~ msgid "member `%D' is uninitialized reference"
+#~ msgstr "параметр \"%s\" ініцыялізаваны"
+
+#~ msgid "warning:"
+#~ msgstr "увага:"
+
+#, fuzzy
+#~ msgid "In statement function"
+#~ msgstr "вельмі шмат аргументаў у функцыі"
+
+#~ msgid "argument to `%s' missing"
+#~ msgstr "аргумент для \"%s\" прапушчан"
+
+#, fuzzy
+#~ msgid "Implicit declaration of `%A' at %0"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#~ msgid "Unknown escape sequence `\\%A' at %0"
+#~ msgstr "Невядомая ESC-паслядоўнасьць `\\%A' at %0"
+
+#, fuzzy
+#~ msgid "Unterminated escape sequence `\\' at %0"
+#~ msgstr "невядомая ESC-паслядоўнасць '\\%c'"
+
+#, fuzzy
+#~ msgid "non-ISO escape sequence `\\%c'"
+#~ msgstr "невядомая ESC-паслядоўнасць '\\%c'"
+
+#, fuzzy
+#~ msgid "Zero-length character constant at %0"
+#~ msgstr "пустая сімвальная канстанта"
+
+#, fuzzy
+#~ msgid "Character constant at %0 has no closing apostrophe at %1"
+#~ msgstr "сімвальная канстанта вельмі доўгая"
+
+#, fuzzy
+#~ msgid "Unable to open INCLUDE file `%A' at %0"
+#~ msgstr "немагу адчыніць файл \"%s\""
+
+#, fuzzy
+#~ msgid "Truncating characters on right side of character constant at %0"
+#~ msgstr "мнагасімвальная сімвальная канстанта"
+
+#, fuzzy
+#~ msgid "Array `%A' at %0 is too large to handle"
+#~ msgstr "памер масіва \"%s\" вельмі вялікі"
+
+#, fuzzy
+#~ msgid "Statement function `%A' defined at %0 is not used"
+#~ msgstr "метка \"%s\" вызначана, але не выкарыстоўваецца"
+
+#~ msgid "In function"
+#~ msgstr "У функцыі"
+
+#~ msgid "In program"
+#~ msgstr "У праграме"
+
+#~ msgid "In construct"
+#~ msgstr "У канструкцыі"
+
+#~ msgid "field '%s' not found in class"
+#~ msgstr "поле \"%s\" не знойдзена ў класе"
+
+#~ msgid "abstract method in non-abstract class"
+#~ msgstr "абстрактны метад у неабстрактным класе"
+
+#~ msgid "method '%s' not found in class"
+#~ msgstr "метад \"%s\" не знойдзен у класе"
+
+#~ msgid "failed to find class '%s'"
+#~ msgstr "не знойдзен клас \"%s\""
+
+#~ msgid "missing field '%s' in '%s'"
+#~ msgstr "прапушчана поле '%s' у '%s'"
+
+#, fuzzy
+#~ msgid "mismatching signature for field '%s' in '%s'"
+#~ msgstr "Прапушчана поле \"%s\" у \"%s\""
+
+#, fuzzy
+#~ msgid "can't expand %s"
+#~ msgstr "не магу прачытаць з %s"
+
+#~ msgid "can't close %s"
+#~ msgstr "не магу зачыніць %s"
+
+#~ msgid "cannot find file for class %s"
+#~ msgstr "немагчыма знайсьці файл для кляса %s"
+
+#~ msgid "no input file specified"
+#~ msgstr "не зададзены ўваходзячыя файлы"
+
+#~ msgid "can't close input file %s"
+#~ msgstr "немагчыма зачыніць уваходзячы файл %s"
+
+#~ msgid "bad zip/jar file %s"
+#~ msgstr "дрэнны zip/jar файл \"%s\""
+
+#, fuzzy
+#~ msgid "field initializer type mismatch"
+#~ msgstr "нерэчаісны ініцыялізатар"
+
+#~ msgid "can't create directory %s"
+#~ msgstr "немагчыма стварыць дырэкторыю \"%s\""
+
+#~ msgid "can't open output file `%s'"
+#~ msgstr "немагчыма адчыніць файл уводу `%s'"
+
+#~ msgid "file not found `%s'"
+#~ msgstr "файл `%s' ня знойдзен"
+
+#~ msgid "cannot create temporary file"
+#~ msgstr "немагчыма стварыць часовы файл"
+
+#, fuzzy
+#~ msgid "can't mangle %s"
+#~ msgstr "не магу зачыніць %s"
+
+#~ msgid "Missing name"
+#~ msgstr "Прапушчана назва"
+
+#~ msgid "Missing class name"
+#~ msgstr "Прапушчана назва класа"
+
+#~ msgid "Invalid declaration"
+#~ msgstr "Нерэчаіснае абвяшчэнне"
+
+#~ msgid "Missing identifier"
+#~ msgstr "Прапушчан ідэнтыфікатар"
+
+#~ msgid "unregistered operator %s"
+#~ msgstr "нераспазнаны аператар %s"
+
+#, fuzzy
+#~ msgid "cannot find protocol declaration for `%s'"
+#~ msgstr "Не магу знайсці дэкларацыю пратакола для \"%s\""
+
+#, fuzzy
+#~ msgid "cannot find interface declaration for `%s'"
+#~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\""
+
+#, fuzzy
+#~ msgid "cannot find reference tag for class `%s'"
+#~ msgstr "Не магу знайсці файл для класа %s."
+
+#~ msgid "cannot find class `%s'"
+#~ msgstr "немагчыма знайсьці кляс `%s'"
+
+#~ msgid "class `%s' already exists"
+#~ msgstr "кляс `%s' ужо існуе"
+
+#, fuzzy
+#~ msgid "cannot find interface declaration for `%s', superclass of `%s'"
+#~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\""
+
+#, fuzzy
+#~ msgid "circular inheritance in interface declaration for `%s'"
+#~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\""
+
+#, fuzzy
+#~ msgid "cannot find class (factory) method"
+#~ msgstr "не магу знайсці метад."
+
+#, fuzzy
+#~ msgid "method `%s' not implemented by protocol"
+#~ msgstr "метад \"%s\" не знойдзен у класе"
+
+#~ msgid "cannot find method"
+#~ msgstr "немагчыма знайсьці мэтад"
+
+#, fuzzy
+#~ msgid "duplicate definition of class method `%s'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "duplicate declaration of class method `%s'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#, fuzzy
+#~ msgid "duplicate declaration of instance method `%s'"
+#~ msgstr "паўторнае абвяшчэнне меткі \"%s\""
+
+#~ msgid "-pipe is not supported"
+#~ msgstr "-pipe не падтрымліваецца"
+
+#~ msgid "-mhard-float not supported"
+#~ msgstr "-mhard-float не падтрымліваецца"
diff --git a/libcpp/po/ca.po b/libcpp/po/ca.po
new file mode 100644 (file)
index 0000000..930aaef
--- /dev/null
@@ -0,0 +1,919 @@
+# translation of cpplib-4.0.1.po to Catalan
+# Catalan translation of gcc.
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gcc package.
+#
+# Gilles MATEU <mateu.gilles@wanadoo.fr>, 2002.
+# Gilles MATEU <mateu.gilles@wanadoo.fr>, 2003.
+# Gilles MATEU <mateu.gilles@wanadoo.fr>, 2004.
+# Mateu Gilles <gilles@mateu.org>, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib-4.0.1\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2005-11-25 22:56+0100\n"
+"Last-Translator: Mateu Gilles <gilles@mateu.org>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "iconv no dona suport a la conversió de %s a %s"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "cap implementació de iconv, no es pot convertir de %s a %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "el caràcter 0x%lx no és en el joc de caràcters de base\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "convertint al joc de caràcters d'execució"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "el caràcter 0x%lx no és mono octet en el joc de caràcters d'execució"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "els noms de caràcter universals nomès són vàlids en C++ i C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "el significat de \"\\%c\" és diferent en C tradicional"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "el nom de caràcter universal %.*s és incomplet"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s no és un caràcter universal vàlid"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "\"$\" en un identificador o un nombre"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "el nom de caràcter universal  %.*s no és vàlid en un identificador"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "el nom de caràcter universal  %.*s no és vàlid a l'inici d'un identificador"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "convertint UCN al joc font de caràcters"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "convertint UCN al joc de caràcters d'execució"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "el significat de \"\\x\" és diferent en C tradicional"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "es va usar \\x sense dígits hexadecimales a continuació"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "seqüència d'escapa hexadecimal fora de rang"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "seqüència d'escapa octal fora de rang"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "el significat de \"\\a\" és diferent en C tradicional"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "seqüència d'escapa que no és estàndard ISO, \"\\%c\""
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "seqüència d'escapa \"\\%c\" desconeguda"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "seqüència d'escapa \"\\%c\" desconeguda"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "convertint una seqüència d'escapa al joc de caràcters d'execució"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "constant de caràcter massa gran pel seu tipus"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "constant de caràcter amb múltiples caràcters"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "constant de caràter buida"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "fallada convertint %s a %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "elements superflus al final de la directiva #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s és una extenció del GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "es suggereix no usar #elif en C tradicional"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "C tradicional ignora #%s amb el # indentat"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "es suggereix ocultar #%s del C tradicional amb el # indentat"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "l'incrustació d'una directiva entre arguments de macro no és portable"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "la directiva d'estil de línia és una extenció del GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "directiva de preprocessament #%s invàlida"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" no es pot usar com un nom de macro"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "no es pot usar \"%s\" com un nom de macro perquè és un operador en C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "no es va donar un nom de macro en la directiva #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "els noms de macro han de ser identificadors"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "esborrant la definició de \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "falta el caràcter de terminació >"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s espera \"NOM_DE_FITXER\" o <NOM_DE_FITXER>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "nom de fitxer buit en #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include niat amb massa profunditat"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next en el fitxer font primari"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "indicador \"%s\" invàlid en la directiva de línia"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" desprès de #line no és un enter positiu"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "nombre de línia fora de rang"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" no és un nom de fitxer vàlid"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" desprès de # no és un enter positiu"
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "directiva #ident invàlida"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, fuzzy, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "desant \"%s\" com a pragma i espai de noms de pragma"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "desant \"%s\" com a pragma i espai de noms de pragma"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "ja s'ha desat #pragma %s %s"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "ja s'ha desat #pragma %s"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma una vegada en el fitxer principal"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "directiva #pragma de GCC enverinada invàlida"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "enverinant la macro existent \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header ignorat fora del fitxer d'inclusió"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "no es pot trobar la font %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "el fitxer actual és més vell que %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma pren una cadena literal entre parèntesis"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else sense #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else després de #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "el condicional va començar aquí"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif sense #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif després de #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif sense #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "falta \"(\" abans del predicat"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "falta \")\" per a completar la resposta"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "el predicat de la resposta està buit"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "afirmació sense predicat"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "el predicat ha de ser un identificador"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" reafirmat"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "#%s sense acabar"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "comentari sense acabar"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "avís: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "error intern: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "error: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "nombre amb massa punts decimals"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "les constants imaginàries són una extensió d'el GCC"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "dígit \"%c\" invàlid en la constant octal"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "dígit \"%c\" invàlid en la constant octal"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "sufix \"%.*s\" invàlid en la constant de coma flotant"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "ús d'una constant de coma flotant hexadecimal C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "exponent no té dígits"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "la constant de coma flotant hexadecimal requereix un exponent"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "sufix \"%.*s\" invàlid en la constant de coma flotant"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "el C tradicional rebutja el sufix \"%.*s\""
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "sufix \"%.*s\" invàlid en la constant de coma flotant"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "les constants imaginàries són una extensió d'el GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "sufix \"%.*s\" invàlid en constant entera"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "ús d'una constant entera long long C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "les constants imaginàries són una extensió d'el GCC"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "les constants imaginàries són una extensió d'el GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "la constant entera és massa gran pel seu tipus"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "la constant entera és tan gran que és unsigned"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "\")\" faltant després de \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "l'operador \"defined\" requereix un identificador"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" és un element alternatiu per a  \"%s\" en C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "aquest ùs de \"defined\" podria no ser portable"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "constant de coma flotant en l'expressió del preprocessador"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "nombre imaginari en l'expressió del preprocessador"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" no és definit"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "operador binari faltant abans de l'element \"%s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "l'element \"%s\" no és vàlid en les expressions del preprocesador"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "expressión faltant entre \"(\" i \")\""
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if sense expressió"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "l'operador \"%s\" no té operant de dreta"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "l'operador \"%s\" no té operant d'esquera"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " \":\" sense \"?\" precedent"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "pila desequilibrada en #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "operador \"%u\" impossible"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "\")\" faltant en l'expressió"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr " \"?\" sense el \":\" següent"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "desbordament d'enter en l'expressió del preprocessador"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "\"(\" faltant en l'expressió"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "l'operant esquera de \"%s\" canvia el signe quan és promogut"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "l'operant dreta de \"%s\" canvia el signe quan és promogut"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "C tradicional rebutja l'operador unari més"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "operador coma en operant de #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "divisió per zero en #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "directori NULL en find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "un o més fitxers PCH varen ser trobats, però varen ser invàlids"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "usi -Winvalid-pch per a més informació"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s és un dispositiu de blocs"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s és massa gran"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s és més curt qu'esperat"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "no hi ha ruta d'inclusió en la qual cercar %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Múltiples guàrdies d'inclusió poden ser útils per a:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t ha de ser d'un tipus unsigned"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "l'aritmètica del preprocesador té una precisió màxima de %lu bits; l'objectiu requereix %lu bits"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "l'aritmètica de CPP ha de ser almenys tan precisa com un int de l'objectiu"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "el char de l'objectiu té menys de 8 bits d'ampliaria"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "el wchar_t de l'objectiu és més estret qu'el char de l'objectiu"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "el int de l'objectiu és més estret qu'el char de l'objectiu"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "el half-integer de CPP és més estret que el caràcter de CPP"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP no pot manejar constants de caràcter amples més enllà de %lu bits en aquest ordinador, però l'objectiu requereix %lu bits"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "barra invertida i fi de línia separats per un espai"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "barra invertida i nova línia al final del fitxer"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigraph ??%c convertit a %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "s'ignora el trigraph ??%c, usi -trigraphs per permetre-ho"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" dintre d'un comentari"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s en una directiva de preprocessament"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "caràter(es) nul(s) ignorats"
+
+#: lex.c:460
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%s\" no és definit"
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%s\" no és definit"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "intent d'usar \"%s\" enverinat"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ solament pot aparèixer en l'expansió d'una macro variadic C99"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "caràcter(es) nul(s) preservats en la literal"
+
+#: lex.c:662
+#, fuzzy, c-format
+msgid "missing terminating %c character"
+msgstr "falta el caràcter de terminació >"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "els comentaris d'estil C++ no són permesos en ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(això es reportarà solament una vegada per cada fitxer d'entrada)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "comentari en múltiples línies"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "Element %s impronunciable"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "En el fitxer inclòs dès de %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 dès de %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "no s'usa la macro \"%s\""
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "macro interna \"%s\" invàlida"
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "no es pot determinar la data i l'hora"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "no es pot determinar la data i l'hora"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "cadena literal invàlida, s'ignora el \"\\\" final"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "enganxar \"%s\" i \"%s\" no dóna un element de preprocessament vàlid"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 requereix que la resta dels arguments sigui usat"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "la macro \"%s\" requereix %u arguments, però només %u passats"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "la macro \"%s\" va rebre %u arguments, però en va prendre solament %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "llista d'arguments sense acabar a l'invocar la macro \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "la funció de macro \"%s\" s'ha d'usar amb arguments en C tradicional"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "paràmetre de macro \"%s\" duplicat"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" podria faltar en la llista de paràmetre de macro"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "els paràmetres de macro han de ser separats per comes"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "falta el nom del paràmetre"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "els macros variadic anònims es van introduir en C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C no permet macros variadic nomenats"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "\")\" faltant en la llista de paràmetres de macro"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "\"##\" no pot apareixer en o al final d'una expansió de macro"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 requereix espais en blanc després del nom de macro"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "espais en blanc faltant després del nom de macro"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "\"#\" no és seguit per un paràmetre de macro"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" re-definit"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "aquesta és la ubicació de la definició prèvia"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "l'argument de macro \"%s\" hauria de ser convertit en cadena en C traditional"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "tipus de hash %d invàlid en cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "mentre escrivint capçalera precompilada"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: no utilitzat perquè \"%.*s\" no està definit"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: no utilitzat perquè \"%.*s\" està definit com a \"%s\" i no com a \"%.*s\""
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: no utilitzat perquè \"%s\" és definit"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: no utilitzat perquè \"%s\" és definit"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "mentre llegint capçalera precompilada"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "whilst recursiu detectat en expandint la macro \"%s\""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "error sintàctic en la llista de paràmetre de macro"
+
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "seqüència d'escapa desconeguda: '\\%03o'"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "no hi ha caràcter de fi de línia al final del fitxer"
diff --git a/libcpp/po/cpplib.pot b/libcpp/po/cpplib.pot
new file mode 100644 (file)
index 0000000..fdd1c41
--- /dev/null
@@ -0,0 +1,927 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr ""
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr ""
+
+#: charset.c:759
+#: charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr ""
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr ""
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr ""
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr ""
+
+#: charset.c:1008
+#: lex.c:484
+msgid "'$' in identifier or number"
+msgstr ""
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr ""
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr ""
+
+#: charset.c:1056
+#: charset.c:1571
+msgid "converting UCN to source character set"
+msgstr ""
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr ""
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr ""
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr ""
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr ""
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr ""
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr ""
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr ""
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr ""
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr ""
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr ""
+
+#: charset.c:1415
+#: charset.c:1478
+msgid "character constant too long for its type"
+msgstr ""
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr ""
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr ""
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr ""
+
+#: directives.c:215
+#: directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr ""
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr ""
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr ""
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr ""
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr ""
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr ""
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr ""
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr ""
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr ""
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr ""
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr ""
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr ""
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr ""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr ""
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr ""
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr ""
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr ""
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr ""
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr ""
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr ""
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr ""
+
+#: directives.c:887
+#: directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr ""
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr ""
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr ""
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr ""
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr ""
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr ""
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr ""
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr ""
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr ""
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr ""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr ""
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr ""
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr ""
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr ""
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr ""
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr ""
+
+#: directives.c:1700
+#: directives.c:1733
+msgid "the conditional began here"
+msgstr ""
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr ""
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr ""
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr ""
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr ""
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr ""
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr ""
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr ""
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr ""
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr ""
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr ""
+
+#: directives-only.c:221
+#: lex.c:1016
+#: traditional.c:162
+msgid "unterminated comment"
+msgstr ""
+
+#: errors.c:118
+msgid "warning: "
+msgstr ""
+
+#: errors.c:120
+msgid "internal error: "
+msgstr ""
+
+#: errors.c:122
+msgid "error: "
+msgstr ""
+
+#: errors.c:186
+msgid "stdout"
+msgstr ""
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr ""
+
+#: expr.c:290
+#: expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr ""
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr ""
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr ""
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr ""
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr ""
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr ""
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr ""
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr ""
+
+#: expr.c:351
+#: expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr ""
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr ""
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr ""
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr ""
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr ""
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr ""
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr ""
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr ""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr ""
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr ""
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr ""
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr ""
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr ""
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr ""
+
+#: expr.c:855
+#: expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr ""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr ""
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr ""
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr ""
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr ""
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr ""
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr ""
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr ""
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr ""
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr ""
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr ""
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr ""
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr ""
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr ""
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr ""
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr ""
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr ""
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr ""
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr ""
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr ""
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr ""
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr ""
+
+#: init.c:430
+#, c-format
+msgid ""
+"preprocessor arithmetic has maximum precision of %lu bits; target requires %"
+"lu bits"
+msgstr ""
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr ""
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr ""
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr ""
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr ""
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr ""
+
+#: init.c:457
+#, c-format
+msgid ""
+"CPP on this host cannot handle wide character constants over %lu bits, but "
+"the target requires %lu bits"
+msgstr ""
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr ""
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr ""
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr ""
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr ""
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr ""
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr ""
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr ""
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr ""
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr ""
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr ""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr ""
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr ""
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr ""
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr ""
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr ""
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr ""
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr ""
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr ""
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr ""
+
+#: macro.c:123
+#: macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr ""
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr ""
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr ""
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr ""
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr ""
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr ""
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr ""
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr ""
+
+#: macro.c:679
+#: traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr ""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr ""
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr ""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr ""
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr ""
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr ""
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr ""
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr ""
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr ""
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr ""
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr ""
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr ""
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr ""
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr ""
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr ""
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr ""
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr ""
+
+#: pch.c:84
+#: pch.c:332
+#: pch.c:344
+#: pch.c:362
+#: pch.c:368
+#: pch.c:377
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr ""
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr ""
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr ""
+
+#: pch.c:567
+#: pch.c:737
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr ""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr ""
diff --git a/libcpp/po/da.po b/libcpp/po/da.po
new file mode 100644 (file)
index 0000000..5224116
--- /dev/null
@@ -0,0 +1,16177 @@
+# Danish version of GCC strings.
+# Copyright (C) 2002, 03 Free Software Foundation, Inc.
+# Ole Laursen <olau@hardworking.dk>, 2001, 02, 03.
+#
+# Konventioner:
+#
+# ABI -> binær grænseflade
+# ANSI -> (har jeg tilladt mig at opdatere til (modsvarer Info-hjælpen)) ISO
+# access -> tilgangs-
+# aggregate -> en variabel af en sammensat type (fx struct, class)
+# ambigeous -> tvetydig
+# arg, argument -> parameter (for ikke at blande sammen med diskussionsargument)
+# array -> tabel
+# assembler -> maskinkodeoversætter
+# assertion -> postulat
+# attribute -> egenskab
+# base class -> stamklasse
+# basic block -> basisblok (funktioner deles op i disse under oversættelsen)
+# braces -> krøllede paranteser
+# braced-group -> sætningsblok
+# branch -> forgrening
+# buffer -> mellemlager
+# cast -> typetildeling, omtvingelse af typen
+# con-/destructor -> kon-/destruktionsfunktion
+# conflicting -> modstridende
+# convert -> konvertere, omdanne
+# declared -> erklæret
+# defaults to -> antages at være
+# dereference -> følge
+# discard -> fjerne
+# discard -> kassere
+# driver -> styringsprogram
+# duplicate -> optræder mere end én gang; mangfoldiggøre
+# edge list -> kantliste
+# elt -> udtrykstræ
+# endian -> endet (fx storendet, lillendet)
+# endianness -> endethed
+# exception handling -> håndtering af undtagelser
+# excess -> for mange
+# expansion -> udfoldning
+# extra -> (ret ofte) overskydende
+# floating point -> kommatal
+# formals -> parametre
+# format string -> formateringsstreng
+# forward -> forhånd (f.eks. forhåndserklæring)
+# frame table -> rammetabel
+# friend -> ven(ne-)
+# gp (general purpose) register -> alment register (havde først brug- med, med det er overflødigt)
+# hard register -> hardware-register
+# have no effect -> udvirker intet
+# identifier -> kaldenavn
+# incompatible -> uforenelig, passer ikke
+# incomplete -> ufuldstændig
+# initialize -> tildele startværdi, klargøre
+# initializer -> startværdi
+# initializer list -> klargøringsliste
+# inline -> integrede, indbygges (eller som reserveret ord: inline)
+# instance -> instans (fx af en klasse)
+# issue (fx warnings) -> fremkom med
+# iterator -> løkkevariabel
+# junk -> ragelse
+# keyword -> reserveret ord
+# label -> etiket
+# linking -> sammenkædning
+# lvalue -> venstreværdi
+# macro -> makro
+# malformed -> forkert udformet, misdannet
+# member function/method -> [medlems]funktion (metode i Objective C)
+# mismatch -> passer ikke med
+# mmap -> indlæse
+# modifier, qualifier -> modifikation
+# multiple inheritance -> multipel nedarvning
+# newline -> linjeskift
+# non-numeric -> ikke et tal
+# null character -> nultegn
+# null pointer -> nul[-]henvisning
+# offset -> forskydning
+# opcodes (til ovenstående) -> instruktioner
+# out of range -> uden for det gyldige (til tider mulige) interval
+# overflow -> (til tider) løber over
+# overlap -> [interval]sammenfald
+# overloading -> flertydiggørelse
+# padding -> udfylning
+# pass -> overbringe (fx parametre), videregive
+# pointer -> henvisning[svariabel]
+# preprocessor -> præprocessor
+# profiling -> profilering
+# promote -> forfremme
+# request -> (til tider) forespørgsel
+# return -> returnerer
+# schedule -> planlæg
+# scope -> virkningsfelt
+# shadowing -> skygger for
+# shift -> skift
+# specified -> (oftest) angivet
+# specifier -> anvisning, angivelse
+# stab -> stik (?)
+# statement -> sætning
+# storage class -> lagringsklasse
+# strict -> nøje
+# string -> streng
+# subscript -> indeks, opslag
+# target -> mål[arkitektur]
+# template -> skabelon
+# thrown -> kastet
+# token -> symbol
+# top-level -> øverste niveau
+# trigraphs ('??%c'-dimser) -> trigrafer
+# undefine -> glemme definitionen
+# undefined blahblah -> blahblah er ikke defineret
+# underscore -> understreg
+# universal-character-name -> universelt tegn[navn]
+# unsigned -> uden fortegn
+# varargs -> variable parameterlister
+# variadic macro -> makro med vilkårligt antal parametre
+# variabels -> variabler (med afslutnings-r)
+# vtable -> virtuel tabel
+# wide character -> bredtegn
+# white space -> mellemrum
+# whitespace -> mellemrum
+#
+# Reserverede ord ofte ikke oversat, ej heller er der anbragt ' omkring
+# (fx unsigned -> unsigned; derimod function -> funktion). Forkortelser
+# som decl (for declaration) og arg (for argument) er oversat uforkortet
+# - der er jo masser af plads at tage af.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gcc 3.3\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2003-05-25 18:00+0200\n"
+"Last-Translator: Ole Laursen <olau@hardworking.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, fuzzy, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "konvertering fra NaN til unsigned int"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, fuzzy, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "universelt tegnnavn står for '%c', som er en del af det basale kildekodetegnsæt"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+#, fuzzy
+msgid "universal character names are only valid in C++ and C99"
+msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "betydningen af '\\%c' er anderledes i traditionel C"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, fuzzy, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "ufuldstændigt universelt tegnnavn"
+
+#: charset.c:998
+#, fuzzy, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "'%T::%D' er ikke en gyldig erklærer"
+
+#: charset.c:1008 lex.c:484
+#, fuzzy
+msgid "'$' in identifier or number"
+msgstr "'$'-tegn i kaldenavn eller tal"
+
+#: charset.c:1018
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne"
+
+#: charset.c:1022
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne"
+
+#: charset.c:1056 charset.c:1571
+#, fuzzy
+msgid "converting UCN to source character set"
+msgstr "konverterer NULL til en ikke-henvisningstype"
+
+#: charset.c:1060
+#, fuzzy
+msgid "converting UCN to execution character set"
+msgstr "konverterer NULL til en ikke-henvisningstype"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "betydningen af '\\x' er anderledes i traditionel C"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x angivet uden efterfølgende hexadecimale cifre"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "den hexadecimale undvigesekvens er uden for det gyldige interval"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "den oktale undvigesekvens er uden for det gyldige interval"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "betydningen af '\\a' er anderledes i traditionel C"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "undvigesekvensen '\\%c' er ikke ISO-standard"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "ukendt undvigesekvensen '\\%c'"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "ukendt undvigesekvensen '\\%c'"
+
+#: charset.c:1293
+#, fuzzy
+msgid "converting escape sequence to execution character set"
+msgstr "undvigesekvens er uden for det gyldig interval for tegn"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "tegnkonstanten er for lang for dens type"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "flerbyte-tegnkonstant"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "tom tegnkonstant"
+
+#: charset.c:1612
+#, fuzzy, c-format
+msgid "failure to convert %s to %s"
+msgstr "kunne ikke konvertere '%E' til '%T'"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "ekstra symboler i slutningen af #%s-direktiv"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s er en GCC-udvidelse"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "foreslår undladelse af brug af #elif i traditionel C"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "traditionel C ignorerer #%s når '#' er indrykket"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "foreslår at skjule #%s fra traditionel C vha. indrykket '#'"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "indlejring af et direktiv inden i makroparametre er ikke portabelt"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "linjestilsdirektiv er en GCC-udvidelse"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "ugyldigt præprocessordirektiv #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" kan ikke bruges som makronavn"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" kan ikke bruges som et makronavn da det er en operator i C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "intet makronavn angivet i direktivet #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "makronavne skal være kaldenavne"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "glemmer definitionen af \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "manglende afsluttende '>'-tegn"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s forventer \"FILNAVN\" eller <FILNAVN>"
+
+#: directives.c:739
+#, fuzzy, c-format
+msgid "empty filename in #%s"
+msgstr "tomt filnavn i #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include indlejret for dybt"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next i den primære kildekodefil"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "ugyldigt flag \"%s\" i linjedirektiv"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" efter #line er ikke et positivt heltal"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "linjenummer er uden for det gyldige interval"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" er ikke et ugyldigt filnavn"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" efter # er ikke et positivt heltal"
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "ugyldigt #ident-direktiv"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, fuzzy, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "registrerer \"%s\" som både et pragma og som et pragmanavnerum"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "registrerer \"%s\" som både et pragma og som et pragmanavnerum"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s er allerede registreret"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s er allerede registreret"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "'#pragma once' i hovedfil"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "ugyldigt #pragma GCC poison-direktiv"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "forgifter eksisterende makro \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "'#pragma system_header' ignoreret uden for inkluderingsfil"
+
+#: directives.c:1437
+#, fuzzy, c-format
+msgid "cannot find source file %s"
+msgstr "kan ikke finde kilden %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "aktuel fil er ældre end %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma tager en strengkonstant med paranteser omkring"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else uden #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else efter #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "betingelsen begyndte her"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif uden #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif efter #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif uden #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "manglende '(' efter udsagn"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "manglende ')' til at fuldføre svar"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "udsagnets svar et tomt"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "postulat uden udsagn"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "udsagn skal være et kaldenavn"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" genpostuleret"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "uafsluttet #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "uafsluttet kommentar"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "advarsel: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "intern fejl: "
+
+#: errors.c:122
+#, fuzzy
+msgid "error: "
+msgstr "intern fejl: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "std-ud"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "for mange decimalkommaer i tal"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "imaginære konstanter er en GCC-udvidelse"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "ugyldig ciffer \"%c\" i oktal konstant"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "ugyldig ciffer \"%c\" i oktal konstant"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "brug af C99 hexadecimal kommatalskonstant"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "der er ingen cifre i eksponent"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "hexadecimal kommatalskonstant skal have en eksponent"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "traditionel C tillader ikke endelsen \"%.*s\""
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "imaginære konstanter er en GCC-udvidelse"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "ugyldig endelse \"%.*s\" i heltalskonstant"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "brug af ISO C99 long long-heltalskonstanter"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "imaginære konstanter er en GCC-udvidelse"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "imaginære konstanter er en GCC-udvidelse"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "heltalskonstanten er for stor for dens type"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "heltalskonstanten er så stor at den er unsigned"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "manglende ')' efter \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "operatoren \"defined\" kræver et kaldenavn"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" er et alternativt symbol for \"%s\" i C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "denne brug af \"defined\" er muligvis ikke portabel"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "kommatalskonstant i præprocessorudtryk"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "imaginært tal i præprocessorudtryk"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" er ikke defineret"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "manglende binær operator før symbolet \"%s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "symbolet \"%s\" er ikke gyldigt i præprocessorudtryk"
+
+#: expr.c:892
+#, fuzzy
+msgid "missing expression between '(' and ')'"
+msgstr "tomt udtryk mellem '(' og ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if uden noget udtryk"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "operatoren '%s' har ikke nogen højre operand"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "operatoren '%s' har ikke nogen venstre operand"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " ':' uden forudgående '?'"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "uafbalanceret stak i #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "umulig operator '%u'"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "manglende ')' i udtryk"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' uden efterfølgende ':'"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "heltallet løber over i præprocessorudtrykket"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "manglende '(' i udtryk"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "den venstre operand til \"%s\" ændrer fortegn ved forfremmelse"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "den højre operand til \"%s\" ændrer fortegn ved forfremmelse"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "traditionel C tillader ikke operatoren unær plus"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "kommeoperator i en operand til #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "division med nul i #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s er en blokenhed"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s er for stor"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s er kortere end forventet"
+
+#: files.c:852
+#, fuzzy, c-format
+msgid "no include path in which to search for %s"
+msgstr "der er ingen inkluderingssti at finde %s i"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Flere inkluderingsvagter kan være nyttige til:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t skal være en unsigned type"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "præprocessorberegning har en maksimal præcision på %lu bit; målarkitektur kræver %lu bit"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP-beregning skal være mindst lige så præcis som en målarkitekturs int"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "målarkitekturs char er mindre end 8 bit bred"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "målarkitekturs wchar_t er mindre end målarkitekturs char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "målarkitekturs int er mindre end målarkitekturs char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP-halvheltal er mindre end CPP-tegn"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP på denne vært kan ikke håndtere bredtegnkonstanter over %lu bit, men målarkitekturen kræver %lu bit"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "omvendt skråstreg og linjeskift er adskilt af mellemrum"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "omvendt skråstreg efterfulgt af linjeskift ved slutningen af filen"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigrafen ??%c konverteret til %c"
+
+#: lex.c:310
+#, fuzzy, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "trigrafen ??%c ignoreret"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" i en kommentar"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s i præprocessordirektiv"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "nultegn ignoreret"
+
+#: lex.c:460
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%s\" er ikke defineret"
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%s\" er ikke defineret"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "forsøg på at bruge forgiftet \"%s\""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ kan kun optræde i udfoldelsen af en C99-makro med vilkårligt antal parametre"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "nultegn bevaret i strengkonstant"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "manglende afsluttende '%c'-tegn"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "kommentarer i C++-stil er ikke tilladt i ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(dette rapporteres kun en enkelt gang per inddatafil)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "flerlinjers kommentar"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "symbol %s kan ikke staves"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "I filen inkluderet af %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                   af %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "makroen \"%s\" bliver ikke brugt"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ugyldig indbygget makro \"%s\""
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "kunne ikke bestemme dato og tid"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "kunne ikke bestemme dato og tid"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ugyldig strengkonstant, ignorerer afsluttende '\\'"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "indsættelse af \"%s\" og \"%s\" giver ikke et gyldigt præprocessorsymbol"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 påkræver at restparametrene skal bruges"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "makroen \"%s\" kræver %u parametre, men modtager kun %u"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "makroen \"%s\" bliver viderebragt %u parametre, men tager kun mod %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "uafsluttet parameterliste ved kald af makroen \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "funktionsagtig makro \"%s\" skal bruges med parametre i traditionel C"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "makroparameternavnet \"%s\" optræder mere end én gang"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" må ikke optræde i makroparameterliste"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "makroparametre skal være komma-adskilte"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "parameternavn mangler"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "anonyme makroer med vilkårligt antal parametre blev introduceret i C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C tillader ikke navngivne makroer med vilkårligt antal parametre"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "manglende ')' i makroparameterliste"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' må ikke optræde ved nogen af enderne i en makrokrop"
+
+#: macro.c:1510
+#, fuzzy
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C påkræver mellemrum efter makronavnet"
+
+#: macro.c:1534
+#, fuzzy
+msgid "missing whitespace after the macro name"
+msgstr "ISO C påkræver mellemrum efter makronavnet"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' efterfølges ikke af en makroparameter"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" omdefineret"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "den foregående definition er her"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "makroparameteren \"%s\" ville blive gjort til en streng i traditionel C"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "ugyldig hashtype %d i cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:485
+#, fuzzy, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "etiketten '%s' er benyttet, men ikke defineret"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:538
+#, fuzzy, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "'%s' brugt, men aldrig defineret"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr ""
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "opdagede rekursion ved udfoldelse af makroen \"%s\""
+
+#: traditional.c:917
+#, fuzzy
+msgid "syntax error in macro parameter list"
+msgstr "\"%s\" må ikke optræde i makroparameterliste"
+
+#~ msgid "`%s' attribute directive ignored"
+#~ msgstr "egenskabsdirektivet '%s' ignoreret"
+
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "forkert antal parametre angivet til egenskaben '%s'"
+
+#~ msgid "`%s' attribute does not apply to types"
+#~ msgstr "egenskaben '%s' kan ikke anvendes på typer"
+
+#~ msgid "`%s' attribute only applies to function types"
+#~ msgstr "egenskaben '%s' kan kun anvendes sammen med funktionstyper"
+
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "egenskaben '%s' ignoreret"
+
+#~ msgid "offset outside bounds of constant string"
+#~ msgstr "forskydning udenfor grænserne af konstant streng"
+
+#~ msgid "second arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "den anden parameter til '__builtin_prefetch' skal være en konstant"
+
+#~ msgid "invalid second arg to __builtin_prefetch; using zero"
+#~ msgstr "ugyldig anden parameter til '__builtin_prefetch'; benytter nul"
+
+#~ msgid "third arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "en tredje parameter til '__builtin_prefetch' skal være en konstant"
+
+#~ msgid "invalid third arg to __builtin_prefetch; using zero"
+#~ msgstr "ugyldig tredje parameter til '__builtin_prefetch'; benytter nul"
+
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "__builtin_saveregs understøttes ikke af denne målarkitektur"
+
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "parameteren til '__builtin_args_info' skal være konstant"
+
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "parameteren til '__builtin_args_info' er uden for det gyldige interval"
+
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "manglende parameter i '__builtin_args_info'"
+
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr "`va_start' benyttet i en funktion med fast antal parametre"
+
+#~ msgid "second parameter of `va_start' not last named argument"
+#~ msgstr "den anden parameter til 'va_start' er ikke den sidste navngivne parameter"
+
+#~ msgid "`__builtin_next_arg' called without an argument"
+#~ msgstr "`__builtin_next_arg' kaldt uden en parameter"
+
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "for mange parametre til funktionen 'va_start'"
+
+#~ msgid "first argument to `va_arg' not of type `va_list'"
+#~ msgstr "den første parameter til 'va_arg' er ikke af typen 'va_list'"
+
+#~ msgid "`%s' is promoted to `%s' when passed through `...'"
+#~ msgstr "'%s' forfremmes til '%s' ved overbringelse gennem '...'"
+
+#~ msgid "(so you should pass `%s' not `%s' to `va_arg')"
+#~ msgstr "(så du skal overbring '%s' ikke '%s' til 'va_arg')"
+
+#~ msgid "invalid arg to `__builtin_frame_address'"
+#~ msgstr "ugyldig parameter til '__builtin_frame_address'"
+
+#~ msgid "invalid arg to `__builtin_return_address'"
+#~ msgstr "ugyldig parameter til '__builtin_return_address'"
+
+#~ msgid "unsupported arg to `__builtin_frame_address'"
+#~ msgstr "ikke-understøttet parameter til '__builtin_frame_address'"
+
+#~ msgid "unsupported arg to `__builtin_return_address'"
+#~ msgstr "ikke-understøttet parameter til '__builtin_return_address'"
+
+#~ msgid "second arg to `__builtin_expect' must be a constant"
+#~ msgstr "den anden parameter til '__builtin_expect' skal være en konstant"
+
+#~ msgid "__builtin_longjmp second argument must be 1"
+#~ msgstr "den anden paramter til '__builtin_longjmp' skal være 1"
+
+#~ msgid "built-in function `%s' not currently supported"
+#~ msgstr "den indbyggede funktion '%s' understøttes i øjeblikket ikke"
+
+#~ msgid "target format does not support infinity"
+#~ msgstr "målprocessoren understøtter ikke uendelig"
+
+#~ msgid "`%s' is not defined outside of function scope"
+#~ msgstr "'%s' er ikke defineret uden for funktionsvirkefelt"
+
+#~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support"
+#~ msgstr "strenglængden '%d' er større end den længde på '%d' som ISO C%d-oversættere er pålagt at understøtte"
+
+#~ msgid "concatenation of string literals with __FUNCTION__ is deprecated"
+#~ msgstr "sammensætning af strengkonstanter med __FUNCTION__ er forældet"
+
+#~ msgid "overflow in constant expression"
+#~ msgstr "overløb i konstant udtryk"
+
+#~ msgid "integer overflow in expression"
+#~ msgstr "heltalsoverløb i udtryk"
+
+#~ msgid "floating point overflow in expression"
+#~ msgstr "kommatalsoverløb i udtryk"
+
+#~ msgid "vector overflow in expression"
+#~ msgstr "vektoroverløb i udtryk"
+
+#~ msgid "large integer implicitly truncated to unsigned type"
+#~ msgstr "stort heltal forkortes underforstået til type uden fortegn"
+
+#~ msgid "negative integer implicitly converted to unsigned type"
+#~ msgstr "negativt heltal forkortes underforstået til type uden fortegn"
+
+#~ msgid "overflow in implicit constant conversion"
+#~ msgstr "overløb i underforstået konstant konvertering"
+
+#~ msgid "operation on `%s' may be undefined"
+#~ msgstr "brug af '%s' er muligvis ikke defineret"
+
+#~ msgid "expression statement has incomplete type"
+#~ msgstr "udtrykket er af en ufuldstændig type"
+
+#~ msgid "case label does not reduce to an integer constant"
+#~ msgstr "case-etiketten kan ikke reduceres til en heltalskonstant"
+
+#~ msgid "invalid truth-value expression"
+#~ msgstr "ugyldigt sandhedsværdiudtryk"
+
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "ugyldige operander til binær %s"
+
+#~ msgid "comparison is always false due to limited range of data type"
+#~ msgstr "sammenligning er altid falsk på grund af den begrænsede rækkevidde af datatypen"
+
+#~ msgid "comparison is always true due to limited range of data type"
+#~ msgstr "sammenligning er altid sand på grund af den begrænsede rækkevidde af datatypen"
+
+#~ msgid "comparison of unsigned expression >= 0 is always true"
+#~ msgstr "sammenligning med unsigned udtryk >= 0 er altid sand"
+
+#~ msgid "comparison of unsigned expression < 0 is always false"
+#~ msgstr "sammenligning med unsigned udtryk < 0 er altid falsk"
+
+#~ msgid "pointer of type `void *' used in arithmetic"
+#~ msgstr "henvisning af typen 'void *' benyttet i udregning"
+
+#~ msgid "pointer to a function used in arithmetic"
+#~ msgstr "henvisning til en funktion benyttet i udregning"
+
+#~ msgid "pointer to member function used in arithmetic"
+#~ msgstr "henvisning til en medlemsfunktion benyttet i udregning"
+
+#~ msgid "pointer to a member used in arithmetic"
+#~ msgstr "henvisning til et medlem benyttet i udregning"
+
+#~ msgid "struct type value used where scalar is required"
+#~ msgstr "værdi af struct-type angivet hvor skalar er påkrævet"
+
+#~ msgid "union type value used where scalar is required"
+#~ msgstr "værdi af union-type angivet hvor skalar er påkrævet"
+
+#~ msgid "array type value used where scalar is required"
+#~ msgstr "værdi af tabeltype angivet hvor skalar er påkrævet"
+
+#~ msgid "suggest parentheses around assignment used as truth value"
+#~ msgstr "foreslår paranteser omkring tildeling der er benyttet som boolsk værdi"
+
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "ugyldig brug af 'restrict'"
+
+#~ msgid "invalid application of `sizeof' to a function type"
+#~ msgstr "ugyldig anvendelse af 'sizeof' på en funktionstype"
+
+#~ msgid "invalid application of `%s' to a void type"
+#~ msgstr "ugyldig anvendelse af '%s' på en void-type"
+
+#~ msgid "invalid application of `%s' to an incomplete type"
+#~ msgstr "ugyldig anvendelse af '%s' på en ufuldstændig type"
+
+#~ msgid "`__alignof' applied to a bit-field"
+#~ msgstr "'__alignof' benyttet på et bitfelt"
+
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "kan ikke deaktivere den indbyggede funktion '%s'"
+
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "for få parametre til funktionen '%s'"
+
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "for mange parametre til funktionen '%s'"
+
+#~ msgid "non-floating-point argument to function `%s'"
+#~ msgstr "parameter der ikke er et kommatal, til funktionen '%s'"
+
+#~ msgid "pointers are not permitted as case values"
+#~ msgstr "henvisningsvariabler er ikke tilladt som case-værdier"
+
+#~ msgid "ISO C++ forbids range expressions in switch statements"
+#~ msgstr "ISO C++ forbyder intervaludtryk i switch-sætninger"
+
+#~ msgid "ISO C forbids range expressions in switch statements"
+#~ msgstr "ISO C forbyder intervaludtryk i switch-sætninger"
+
+#~ msgid "empty range specified"
+#~ msgstr "tomt interval angivet"
+
+#~ msgid "duplicate (or overlapping) case value"
+#~ msgstr "case-værdi optræder mere end én gang (måske pga. intervalsammenfald)"
+
+#~ msgid "this is the first entry overlapping that value"
+#~ msgstr "dette er det første punkt som falder sammen med den værdi"
+
+#~ msgid "duplicate case value"
+#~ msgstr "case-værdi optræder mere end én gang"
+
+#~ msgid "previously used here"
+#~ msgstr "tidligere benyttet her"
+
+#~ msgid "multiple default labels in one switch"
+#~ msgstr "flere default-etiketter i én switch-konstruktion"
+
+#~ msgid "this is the first default label"
+#~ msgstr "dette er den første default-etiket"
+
+#~ msgid "ISO C++ forbids taking the address of a label"
+#~ msgstr "ISO C++ forbyder at tage adressen af en etiket"
+
+#~ msgid "ISO C forbids taking the address of a label"
+#~ msgstr "ISO C forbyder at tage adressen af en etiket"
+
+#~ msgid "declaration of `%s' shadows %s"
+#~ msgstr "erklæring af '%s' skygger for '%s'"
+
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "ukendt maskintilstand '%s'"
+
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "ingen datatype til tilstanden '%s'"
+
+#~ msgid "unable to emulate '%s'"
+#~ msgstr "kunne ikke emulere '%s'"
+
+#~ msgid "section attribute cannot be specified for local variables"
+#~ msgstr "sektionsegenskaben kan ikke angives for lokale variabler"
+
+#~ msgid "section of `%s' conflicts with previous declaration"
+#~ msgstr "sektionen '%s' strider mod tidligere erklæring"
+
+#~ msgid "section attribute not allowed for `%s'"
+#~ msgstr "sektionsegenskaben er ikke tilladt for '%s'"
+
+#~ msgid "section attributes are not supported for this target"
+#~ msgstr "sektionsegenskaber understøttes ikke på denne målarkitektur"
+
+#~ msgid "requested alignment is not a constant"
+#~ msgstr "angivet justering er ikke en konstant"
+
+#~ msgid "requested alignment is not a power of 2"
+#~ msgstr "angivet justering er ikke en potens af 2"
+
+#~ msgid "requested alignment is too large"
+#~ msgstr "angivet justering er for stor"
+
+#~ msgid "alignment may not be specified for `%s'"
+#~ msgstr "justering må ikke angives for '%s'"
+
+#~ msgid "`%s' defined both normally and as an alias"
+#~ msgstr "'%s' er defineret både normalt og som et alias"
+
+#~ msgid "alias arg not a string"
+#~ msgstr "aliasparameter er ikke en streng"
+
+#~ msgid "visibility arg not a string"
+#~ msgstr "synlighedsparameter er ikke en streng"
+
+#~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\""
+#~ msgstr "synlighedsparameter skal være en af \"default\", \"hidden\", \"protected\" eller \"internal\""
+
+#~ msgid "tls_model arg not a string"
+#~ msgstr "tls_model-parameter er ikke en streng"
+
+#~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\""
+#~ msgstr "tls_model-parameter skal være en af \"local-exec\", \"initial-exec\", \"local-dynamic\" eller \"global-dynamic\""
+
+#~ msgid "`%s' attribute applies only to functions"
+#~ msgstr "'%s'-egenskaben kan kun anvendes sammen med funktioner"
+
+#~ msgid "can't set `%s' attribute after definition"
+#~ msgstr "kan ikke angive '%s'-egenskaben efter definitionen"
+
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "'%s'-egenskaben ignoreret for '%s'"
+
+#~ msgid "invalid vector type for attribute `%s'"
+#~ msgstr "ugyldig vektortype for egenskaben '%s'"
+
+#~ msgid "no vector mode with the size and type specified could be found"
+#~ msgstr "ingen vektortilstand med den angivne størrelse og typen kunne findes"
+
+#~ msgid "nonnull attribute without arguments on a non-prototype"
+#~ msgstr "ikke-nul egenskab uden parametre til en ikke-prototype"
+
+#~ msgid "nonnull argument has invalid operand number (arg %lu)"
+#~ msgstr "ikke-nul parameter har ugyldig operandnummer (parameter %lu)"
+
+#~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)"
+#~ msgstr "ikke-nul parameter med operandnummer uden for det gyldig interval (parameter %lu, operand %lu)"
+
+#~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)"
+#~ msgstr "ikke-nul parameter refererer til ikke-henvisningsoperand (parameter %lu, operand %lu)"
+
+#~ msgid "null argument where non-null required (arg %lu)"
+#~ msgstr "nulparameter hvor ikke-nul er påkrævet (parameter %lu)"
+
+#~ msgid "void value not ignored as it ought to be"
+#~ msgstr "tom værdi er ikke ignoreret som den burde være"
+
+#~ msgid "conversion to non-scalar type requested"
+#~ msgstr "konvertering til ikke-skalartype udbedt"
+
+#~ msgid "array `%s' assumed to have one element"
+#~ msgstr "tabellen '%s' antages kun at have ét element"
+
+#~ msgid "`struct %s' incomplete in scope ending here"
+#~ msgstr "'struct %s' er ufuldstændig ved virkefeltets afslutning her"
+
+#~ msgid "`union %s' incomplete in scope ending here"
+#~ msgstr "'union %s' er ufuldstændig ved virkefeltets afslutning her"
+
+#~ msgid "`enum %s' incomplete in scope ending here"
+#~ msgstr "'enum %s' er ufuldstændig ved virkefeltets afslutning her"
+
+#~ msgid "label `%s' defined but not used"
+#~ msgstr "etiketten '%s' er defineret, men ikke benyttet"
+
+#~ msgid "function `%s' redeclared as inline"
+#~ msgstr "funktionen '%s' omerklæret som inline"
+
+#~ msgid "previous declaration of function `%s' with attribute noinline"
+#~ msgstr "tidligere erklæring af funktionen '%s' med egenskaben noinline"
+
+#~ msgid "function `%s' redeclared with attribute noinline"
+#~ msgstr "funktionen '%s' omerklæret med egenskaben noinline"
+
+#~ msgid "previous declaration of function `%s' was inline"
+#~ msgstr "tidligere erklæring af funktionen '%s' var inline"
+
+# shadowing betyder at en funktion har samme navn og dermed skjuler en anden
+#~ msgid "shadowing built-in function `%s'"
+#~ msgstr "skygger for den indbyggede funktion '%s'"
+
+#~ msgid "shadowing library function `%s'"
+#~ msgstr "skygger for biblioteksfunktionen '%s'"
+
+#~ msgid "library function `%s' declared as non-function"
+#~ msgstr "biblioteksfunktionen '%s' er erklæret som noget der ikke er en funktion"
+
+#~ msgid "built-in function `%s' declared as non-function"
+#~ msgstr "den indbyggede funktion '%s' er erklæret som noget der ikke er en funktion"
+
+#~ msgid "`%s' redeclared as different kind of symbol"
+#~ msgstr "'%s' omerklæret som en anden form for symbol"
+
+#~ msgid "previous declaration of `%s'"
+#~ msgstr "'%s' er tidligere erklæret"
+
+#~ msgid "conflicting types for built-in function `%s'"
+#~ msgstr "modstridende typer for den indbyggede funktion '%s'"
+
+#~ msgid "conflicting types for `%s'"
+#~ msgstr "modstridende typer for '%s'"
+
+#~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration"
+#~ msgstr "en parameterliste med '...' passer ikke til en erklæring med en tom parameterliste"
+
+#~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration"
+#~ msgstr "en parametertype med automatisk forfremmelse passer ikke til en erklæring med en tom parameterliste"
+
+#~ msgid "thread-local declaration of `%s' follows non thread-local declaration"
+#~ msgstr "trådlokal erklæring af '%s' følger ikke-trådlokal erklæring"
+
+#~ msgid "non thread-local declaration of `%s' follows thread-local declaration"
+#~ msgstr "ikke-trådlokal erklæring af '%s' følger trådlokal erklæring"
+
+#~ msgid "redefinition of `%s'"
+#~ msgstr "omdefinering af '%s'"
+
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "omerklæring af '%s'"
+
+#~ msgid "conflicting declarations of `%s'"
+#~ msgstr "modstridende erklæringer af '%s'"
+
+#~ msgid "prototype for `%s' follows"
+#~ msgstr "prototypen for '%s' følger"
+
+#~ msgid "non-prototype definition here"
+#~ msgstr "definition uden prototype her"
+
+#~ msgid "prototype for `%s' follows and number of arguments doesn't match"
+#~ msgstr "prototypen for '%s' følger og antallet af parametre passer ikke"
+
+#~ msgid "prototype for `%s' follows and argument %d doesn't match"
+#~ msgstr "prototypen for '%s' følger og den %d. parameter passer ikke"
+
+#~ msgid "`%s' declared inline after being called"
+#~ msgstr "'%s' er erklæret inline efter at være blevet kaldt"
+
+#~ msgid "`%s' declared inline after its definition"
+#~ msgstr "'%s' er erklæret inline efter dens definition"
+
+# anden 'declaration' er underforstået i engelsk original
+#~ msgid "static declaration for `%s' follows non-static"
+#~ msgstr "static-erklæring af '%s' følger erklæring uden static"
+
+#~ msgid "non-static declaration for `%s' follows static"
+#~ msgstr "erklæring uden static af '%s' følger static-erklæring"
+
+#~ msgid "const declaration for `%s' follows non-const"
+#~ msgstr "const-erklæring af '%s' følger ikke-konstant erklæring"
+
+#~ msgid "type qualifiers for `%s' conflict with previous decl"
+#~ msgstr "typemodifikationer for '%s' strider mod tidligere erklæring"
+
+#~ msgid "redundant redeclaration of `%s' in same scope"
+#~ msgstr "overflødig omerklæring af '%s' i samme virkefelt"
+
+#~ msgid "declaration of `%s' shadows a parameter"
+#~ msgstr "erklæring af '%s' skygger for en parameter"
+
+#~ msgid "declaration of `%s' shadows a symbol from the parameter list"
+#~ msgstr "erklæring af '%s' skygger for et symbol fra parameterlisten"
+
+#~ msgid "a parameter"
+#~ msgstr "en parameter"
+
+#~ msgid "a previous local"
+#~ msgstr "en tidligere lokal variabel"
+
+#~ msgid "a global declaration"
+#~ msgstr "en global erklæring"
+
+#~ msgid "nested extern declaration of `%s'"
+#~ msgstr "indlejret extern-erklæring af '%s'"
+
+#~ msgid "`%s' used prior to declaration"
+#~ msgstr "'%s' benyttes før erklæringen"
+
+#~ msgid "`%s' was declared implicitly `extern' and later `static'"
+#~ msgstr "'%s' blev underforstået erklæret 'extern' og derefter 'static'"
+
+#~ msgid "type mismatch with previous external decl"
+#~ msgstr "typen passer ikke med tidligere ekstern erklæring"
+
+#~ msgid "previous external decl of `%s'"
+#~ msgstr "tidligere ekstern erklæring af '%s'"
+
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "typen passer ikke med tidligere underforstået erklæring"
+
+#~ msgid "previous implicit declaration of `%s'"
+#~ msgstr "tidligere underforstået erklæring af '%s'"
+
+#~ msgid "`%s' was previously implicitly declared to return `int'"
+#~ msgstr "'%s' blev tidligere underforstået erklæret til at returnere 'int'"
+
+#~ msgid "`%s' was declared `extern' and later `static'"
+#~ msgstr "'%s' blev erklæret 'extern' og derefter 'static'"
+
+#~ msgid "extern declaration of `%s' doesn't match global one"
+#~ msgstr "extern-erklæring af '%s' passer ikke med den globale"
+
+#~ msgid "`%s' locally external but globally static"
+#~ msgstr "'%s' er lokalt ekstern, men globalt statisk"
+
+#~ msgid "function `%s' was previously declared within a block"
+#~ msgstr "funktionen '%s' blev tidligere erklæret inden for en blok"
+
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "underforstået erklæring af funktionen '%s'"
+
+#~ msgid "label %s referenced outside of any function"
+#~ msgstr "der er blevet henvist til etiketten '%s' uden for en funktion"
+
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "etiketten '%s' er blevet erklæret mere end én gang"
+
+#~ msgid "this is a previous declaration"
+#~ msgstr "dette er en tidligere erklæring"
+
+#~ msgid "unnamed struct/union that defines no instances"
+#~ msgstr "unavngiven struct/union som ikke definerer nogen instanser"
+
+#~ msgid "useless keyword or type name in empty declaration"
+#~ msgstr "ubrugeligt reserveret ord eller typenavn i tom erklæring"
+
+#~ msgid "two types specified in one empty declaration"
+#~ msgstr "to typer angivet i én tom erklæring"
+
+#~ msgid "empty declaration"
+#~ msgstr "tom erklæring"
+
+#~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators"
+#~ msgstr "ISO C90 understøtter ikke 'static' eller typemodifikationer i parametertabelerklæringer"
+
+#~ msgid "ISO C90 does not support `[*]' array declarators"
+#~ msgstr "ISO C90 understøtter ikke tabelerklæringer med '[*]'"
+
+#~ msgid "GCC does not yet properly implement `[*]' array declarators"
+#~ msgstr "GCC understøtter endnu ikke ordentligt tabelerklæringer med '[*]'"
+
+#~ msgid "static or type qualifiers in abstract declarator"
+#~ msgstr "static eller typemodifikationer i abstrakt erklæring"
+
+#~ msgid "`%s' is usually a function"
+#~ msgstr "'%s' er sædvanligvis en funktion"
+
+# init dækker over værditildeling her - samme for de næste mange
+#~ msgid "typedef `%s' is initialized (use __typeof__ instead)"
+#~ msgstr "typedef '%s' bliver tildelt en værdi (benyt __typeof__ i stedet)"
+
+#~ msgid "function `%s' is initialized like a variable"
+#~ msgstr "funktionen '%s' bliver tildelt en startværdi som en variabel"
+
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "parameteren '%s' bliver tildelt en startværdi"
+
+#~ msgid "variable-sized object may not be initialized"
+#~ msgstr "et objekt af variabel størrelse må ikke tildeles en startværdi"
+
+#~ msgid "variable `%s' has initializer but incomplete type"
+#~ msgstr "variablen '%s' bliver tildelt en startværdi, men er af en ufuldstændig type"
+
+#~ msgid "elements of array `%s' have incomplete type"
+#~ msgstr "elementer i tabellen '%s' er af en ufuldstændig type"
+
+#~ msgid "declaration of `%s' has `extern' and is initialized"
+#~ msgstr "erklæringen af '%s' indeholder 'extern' og variablen bliver tildelt en startværdi"
+
+#~ msgid "inline function `%s' given attribute noinline"
+#~ msgstr "inline funktion '%s' givet egenskaben noinline"
+
+#~ msgid "initializer fails to determine size of `%s'"
+#~ msgstr "startværdien giver ikke størrelsen af '%s'"
+
+#~ msgid "array size missing in `%s'"
+#~ msgstr "tabelstørrelsen mangler i '%s'"
+
+#~ msgid "zero or negative size array `%s'"
+#~ msgstr "nul eller negativ størrelse for tabellen '%s'"
+
+#~ msgid "storage size of `%s' isn't known"
+#~ msgstr "lagringsstørrelsen af '%s' er ikke kendt"
+
+#~ msgid "storage size of `%s' isn't constant"
+#~ msgstr "lagringsstørrelsen af '%s' er ikke konstant"
+
+#~ msgid "ignoring asm-specifier for non-static local variable `%s'"
+#~ msgstr "ignorerer asm-anvisning til den ikke-statiske, lokale variabel '%s'"
+
+#~ msgid "ISO C forbids parameter `%s' shadowing typedef"
+#~ msgstr "ISO C forbyder at parameteren '%s' skygger for typedef"
+
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "'long long long' er for langt for GCC"
+
+#~ msgid "ISO C90 does not support `long long'"
+#~ msgstr "ISO C90 understøtter ikke 'long long'"
+
+#~ msgid "duplicate `%s'"
+#~ msgstr "'%s' optræder mere end én gang"
+
+#~ msgid "`__thread' before `extern'"
+#~ msgstr "'__thread' før 'extern'"
+
+#~ msgid "`__thread' before `static'"
+#~ msgstr "'__thread' før 'static'"
+
+#~ msgid "two or more data types in declaration of `%s'"
+#~ msgstr "mere end én datatype i erklæringen af '%s'"
+
+#~ msgid "`%s' fails to be a typedef or built in type"
+#~ msgstr "'%s' er hverken en typedef eller en indbygget type"
+
+#~ msgid "type defaults to `int' in declaration of `%s'"
+#~ msgstr "typen antages at være 'int' i erklæringen af '%s'"
+
+#~ msgid "both long and short specified for `%s'"
+#~ msgstr "både long og short er angivet for '%s'"
+
+#~ msgid "long or short specified with char for `%s'"
+#~ msgstr "long eller short angivet samtidig med char for '%s'"
+
+#~ msgid "long or short specified with floating type for `%s'"
+#~ msgstr "long eller short angivet samtidig med en kommatalstype for '%s'"
+
+#~ msgid "the only valid combination is `long double'"
+#~ msgstr "den eneste gyldige kombination er 'long double'"
+
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "både signed og unsigned er angivet for '%s'"
+
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "long, short, signed og unsigned er ugyldige for '%s'"
+
+#~ msgid "long, short, signed or unsigned used invalidly for `%s'"
+#~ msgstr "long, short, signed og unsigned er benyttet på ugyldig vis for '%s'"
+
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "complex ugyldig for '%s'"
+
+#~ msgid "ISO C90 does not support complex types"
+#~ msgstr "ISO C90 understøtter ikke komplekse typer"
+
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "ISO C understøtter ikke at blot 'complex' betyder 'double complex'"
+
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "ISO C understøtter ikke komplekse heltalstyper"
+
+#~ msgid "duplicate `const'"
+#~ msgstr "'const' optræder mere end én gang"
+
+#~ msgid "duplicate `restrict'"
+#~ msgstr "'restrict' optræder mere end én gang"
+
+#~ msgid "duplicate `volatile'"
+#~ msgstr "'volatile' optræder mere end én gang"
+
+#~ msgid "multiple storage classes in declaration of `%s'"
+#~ msgstr "flere lagringsklasser optræder i erklæringen af '%s'"
+
+#~ msgid "function definition declared `auto'"
+#~ msgstr "'auto' er påhæftet funktionsdefinitionen"
+
+#~ msgid "function definition declared `register'"
+#~ msgstr "'register' er påhæftet funktionsdefinitionen"
+
+#~ msgid "function definition declared `typedef'"
+#~ msgstr "'typedef' er påhæftet funktionsdefinitionen"
+
+#~ msgid "function definition declared `__thread'"
+#~ msgstr "'__thread' er påhæftet funktionsdefinitionen"
+
+#~ msgid "storage class specified for structure field `%s'"
+#~ msgstr "lagringsklasse angivet for strukturfelt '%s'"
+
+#~ msgid "storage class specified for parameter `%s'"
+#~ msgstr "lagringsklasse angivet for parameter '%s'"
+
+#~ msgid "storage class specified for typename"
+#~ msgstr "lagringsklasse angivet for typenavn"
+
+#~ msgid "`%s' initialized and declared `extern'"
+#~ msgstr "'%s' bliver tildelt en startværdi og er samtidig erklæret 'extern'"
+
+#~ msgid "`%s' has both `extern' and initializer"
+#~ msgstr "'%s' er erklæret 'extern', men bliver tildelt en startværdi"
+
+#~ msgid "top-level declaration of `%s' specifies `auto'"
+#~ msgstr "erklæring af '%s' på øverste niveau angiver 'auto'"
+
+#~ msgid "nested function `%s' declared `extern'"
+#~ msgstr "indlejret funktion '%s' er erklæret 'extern'"
+
+#~ msgid "function-scope `%s' implicitly auto and declared `__thread'"
+#~ msgstr "'%s' i funktionsvirkefelt underforstået auto og erklæret '__thread'"
+
+#~ msgid "static or type qualifiers in non-parameter array declarator"
+#~ msgstr "static eller typemodifikationer i ikke-parametertabelerklæring"
+
+#~ msgid "declaration of `%s' as array of voids"
+#~ msgstr "'%s' erklæret som en tabel af void"
+
+#~ msgid "declaration of `%s' as array of functions"
+#~ msgstr "'%s' erklæret som en tabel af funktioner"
+
+#~ msgid "invalid use of structure with flexible array member"
+#~ msgstr "ugyldig brug af struktur med fleksibelt tabelmedlem"
+
+#~ msgid "size of array `%s' has non-integer type"
+#~ msgstr "størrelsen af tabellen '%s' er ikke af en heltalstype"
+
+#~ msgid "ISO C forbids zero-size array `%s'"
+#~ msgstr "ISO C forbyder tabellen '%s' med størrelsen nul"
+
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "størrelsen af tabellen '%s' er negativ"
+
+#~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated"
+#~ msgstr "ISO C90 forbyder tabellen '%s' hvis størrelse ikke kan bestemmes"
+
+#~ msgid "ISO C90 forbids variable-size array `%s'"
+#~ msgstr "ISO C90 forbyder tabellen '%s' med variabel størrelse"
+
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "størrelsen af tabellen '%s' er for stor"
+
+#~ msgid "ISO C90 does not support flexible array members"
+#~ msgstr "ISO C90 understøtter ikke fleksible tabelmedlemmer"
+
+#~ msgid "array type has incomplete element type"
+#~ msgstr "tabeltypen er af en ufuldstændig type"
+
+#~ msgid "ISO C forbids const or volatile function types"
+#~ msgstr "ISO C forbyder const eller volatile funktionstyper"
+
+#~ msgid "`%s' declared as function returning a function"
+#~ msgstr "'%s' er erklæret som en funktion der returnerer en funktion"
+
+#~ msgid "`%s' declared as function returning an array"
+#~ msgstr "'%s' er erklæret som en funktion der returnerer en tabel"
+
+#~ msgid "ISO C forbids qualified void function return type"
+#~ msgstr "ISO C forbyder void funktionsreturtype med modifikationer"
+
+#~ msgid "type qualifiers ignored on function return type"
+#~ msgstr "typemodifikationer ignoreret i funktionsreturtypen"
+
+#~ msgid "ISO C forbids qualified function types"
+#~ msgstr "ISO C forbyder funktionsreturtype med modifikationer"
+
+#~ msgid "invalid type modifier within pointer declarator"
+#~ msgstr "ugyldig typemodifikation i erklæring af henvisning"
+
+#~ msgid "variable or field `%s' declared void"
+#~ msgstr "variabel eller felt '%s' erklæret void"
+
+#~ msgid "attributes in parameter array declarator ignored"
+#~ msgstr "egenskaber i parametertabelerklæring ignoreret"
+
+#~ msgid "invalid type modifier within array declarator"
+#~ msgstr "ugyldig typemodifikation i tabelerklæring"
+
+#~ msgid "field `%s' declared as a function"
+#~ msgstr "feltet '%s' er erklæret som en funktion"
+
+#~ msgid "field `%s' has incomplete type"
+#~ msgstr "feltet '%s' er af en ufuldstændig type"
+
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "ugyldig lagringsklasse for funktion '%s'"
+
+#~ msgid "`noreturn' function returns non-void value"
+#~ msgstr "en funktion uden returtype returnerer en ikke-tom værdi"
+
+# at oversætte inline med et udsagnsord her bliver vist for tvetydigt
+#~ msgid "cannot inline function `main'"
+#~ msgstr "funktionen 'main' kan ikke være inline"
+
+#~ msgid "variable `%s' declared `inline'"
+#~ msgstr "variablen '%s' er erklæret 'inline'"
+
+#~ msgid "thread-local storage not supported for this target"
+#~ msgstr "trådlokal lagring understøttes ikke på målarkitekturen"
+
+#~ msgid "function declaration isn't a prototype"
+#~ msgstr "funktionserklæringen er ikke en prototype"
+
+#~ msgid "parameter names (without types) in function declaration"
+#~ msgstr "parameternavne (uden typer) i funktionserklæringen"
+
+#~ msgid "parameter `%s' has incomplete type"
+#~ msgstr "parameteren '%s' er af en ufuldstændig type"
+
+#~ msgid "parameter has incomplete type"
+#~ msgstr "parameteren er af en ufuldstændig type"
+
+# engelsk original upræcis (hvordan kan man henvise til en type?)
+#~ msgid "parameter `%s' points to incomplete type"
+#~ msgstr "parameteren '%s' er en henvisning til en ufuldstændig type"
+
+#~ msgid "parameter points to incomplete type"
+#~ msgstr "parameteren er en henvisning til en ufuldstændig type"
+
+#~ msgid "parameter `%s' has just a forward declaration"
+#~ msgstr "parameteren '%s' har kun en forhåndserklæring"
+
+#~ msgid "`void' in parameter list must be the entire list"
+#~ msgstr "'void' i en parameterliste skal udgøre hele listen"
+
+#~ msgid "`struct %s' declared inside parameter list"
+#~ msgstr "'struct %s' erklæret inde i en parameterliste"
+
+#~ msgid "`union %s' declared inside parameter list"
+#~ msgstr "'union %s' erklæret inde i en parameterliste"
+
+#~ msgid "`enum %s' declared inside parameter list"
+#~ msgstr "'enum %s' erklæret inde i en parameterliste"
+
+#~ msgid "anonymous struct declared inside parameter list"
+#~ msgstr "anonym struct erklæret inde i en parameterliste"
+
+#~ msgid "anonymous union declared inside parameter list"
+#~ msgstr "anonym union erklæret inde i en parameterliste"
+
+#~ msgid "anonymous enum declared inside parameter list"
+#~ msgstr "anonym enum erklæret inde i en parameterliste"
+
+#~ msgid "its scope is only this definition or declaration, which is probably not what you want"
+#~ msgstr "dens virkefelt er kun denne definition eller erklæring hvilket sandsynligvis ikke er hvad du ønsker."
+
+#~ msgid "redefinition of `union %s'"
+#~ msgstr "omdefinering af 'union %s'"
+
+#~ msgid "redefinition of `struct %s'"
+#~ msgstr "omdefinering af 'struct %s'"
+
+#~ msgid "declaration does not declare anything"
+#~ msgstr "erklæring erklærer ikke noget"
+
+# engelsk original forkortet
+#~ msgid "%s defined inside parms"
+#~ msgstr "%s defineret inden i parameterliste"
+
+#~ msgid "union"
+#~ msgstr "union"
+
+#~ msgid "structure"
+#~ msgstr "struktur"
+
+#~ msgid "%s has no %s"
+#~ msgstr "%s har ingen %s"
+
+#~ msgid "struct"
+#~ msgstr "struct"
+
+#~ msgid "named members"
+#~ msgstr "navngivne medlemmer"
+
+#~ msgid "members"
+#~ msgstr "medlemmer"
+
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "indlejret omdefinering af '%s'"
+
+#~ msgid "bit-field `%s' width not an integer constant"
+#~ msgstr "bredden af bitfeltet '%s' er ikke en heltalskonstant"
+
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "bitfeltet '%s' er af en ufuldstændig type"
+
+#~ msgid "bit-field `%s' type invalid in ISO C"
+#~ msgstr "typen af bitfeltet '%s' er ugyldig i ISO C"
+
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "negativ bredde i bitfeltet '%s'"
+
+#~ msgid "width of `%s' exceeds its type"
+#~ msgstr "bredden af '%s' overstiger typen"
+
+#~ msgid "zero width for bit-field `%s'"
+#~ msgstr "en bredde på nul for bitfeltet '%s'"
+
+# RETMIG: find på et eller andet med præcisionen
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "'%s' er smallere end værdier af dens type"
+
+#~ msgid "flexible array member in union"
+#~ msgstr "fleksibelt tabelmedlem i union"
+
+#~ msgid "flexible array member not at end of struct"
+#~ msgstr "fleksibelt tabelmedlem ikke i slutningen af struktur"
+
+#~ msgid "flexible array member in otherwise empty struct"
+#~ msgstr "fleksibelt tabelmedlem i ellers tom struktur"
+
+#~ msgid "duplicate member `%s'"
+#~ msgstr "medlemmet '%s' optræder mere end én gang"
+
+#~ msgid "union cannot be made transparent"
+#~ msgstr "union kan ikke ikke gøres gennemsigtig"
+
+#~ msgid "redeclaration of `enum %s'"
+#~ msgstr "omerklæring af 'enum %s'"
+
+# original forkortet
+#~ msgid "enum defined inside parms"
+#~ msgstr "enum defineret inden i parameterliste"
+
+#~ msgid "enumeration values exceed range of largest integer"
+#~ msgstr "enum-værdier overstige rækkevidden af det største heltal"
+
+#~ msgid "enumerator value for `%s' not integer constant"
+#~ msgstr "enum-værdien for '%s' er ikke en heltalskonstant"
+
+#~ msgid "overflow in enumeration values"
+#~ msgstr "enum-værdier for store"
+
+#~ msgid "ISO C restricts enumerator values to range of `int'"
+#~ msgstr "ISO C begrænser enum-værdier til rækkevidden af 'int'"
+
+#~ msgid "return type is an incomplete type"
+#~ msgstr "returtypen er en ufuldstændig type"
+
+#~ msgid "return type defaults to `int'"
+#~ msgstr "returtypen antages at være 'int'"
+
+#~ msgid "no previous prototype for `%s'"
+#~ msgstr "ingen tidligere prototype for '%s'"
+
+#~ msgid "`%s' was used with no prototype before its definition"
+#~ msgstr "'%s' blev brugt uden en prototype før dens definition"
+
+#~ msgid "no previous declaration for `%s'"
+#~ msgstr "ingen tidligere erklæring af '%s'"
+
+#~ msgid "`%s' was used with no declaration before its definition"
+#~ msgstr "'%s' blev brugt uden en erklæring før dens definition"
+
+#~ msgid "return type of `%s' is not `int'"
+#~ msgstr "returtypen til '%s' er ikke 'int'"
+
+#~ msgid "first argument of `%s' should be `int'"
+#~ msgstr "den første parameter til '%s' skal være 'int'"
+
+#~ msgid "second argument of `%s' should be `char **'"
+#~ msgstr "den anden parameter til '%s' skal være 'char **'"
+
+#~ msgid "third argument of `%s' should probably be `char **'"
+#~ msgstr "den tredje parameter til '%s' skal sandsynligvis være 'char **'"
+
+#~ msgid "`%s' takes only zero or two arguments"
+#~ msgstr "'%s' tager kun mod to eller ingen parametre"
+
+#~ msgid "`%s' is normally a non-static function"
+#~ msgstr "'%s' er normalt en ikke-statisk funktion"
+
+#~ msgid "parm types given both in parmlist and separately"
+#~ msgstr "parametertyper angivet både i parameterliste og separat"
+
+#~ msgid "parameter name omitted"
+#~ msgstr "parameternavn udeladt"
+
+#~ msgid "parameter `%s' declared void"
+#~ msgstr "parameteren '%s' erklæret void"
+
+#~ msgid "parameter name missing from parameter list"
+#~ msgstr "parameternavn mangler fra parameterliste"
+
+#~ msgid "multiple parameters named `%s'"
+#~ msgstr "flere parametre ved navn '%s'"
+
+#~ msgid "type of `%s' defaults to `int'"
+#~ msgstr "typen til '%s' antages at være 'int'"
+
+#~ msgid "declaration for parameter `%s' but no such parameter"
+#~ msgstr "erklæring af parameteren '%s', men ingen sådan parameter"
+
+#~ msgid "number of arguments doesn't match prototype"
+#~ msgstr "antallet af parametre passer ikke til prototypen"
+
+#~ msgid "promoted argument `%s' doesn't match prototype"
+#~ msgstr "den forfremmede parameter '%s' passer ikke til prototypen"
+
+#~ msgid "argument `%s' doesn't match prototype"
+#~ msgstr "parameteren '%s' passer ikke til prototypen"
+
+#~ msgid "no return statement in function returning non-void"
+#~ msgstr "ingen return-sætning i en funktion der ikke returnerer void"
+
+#~ msgid "this function may return with or without a value"
+#~ msgstr "denne funktion kan returnere med eller uden en værdi"
+
+#~ msgid "size of return value of `%s' is %u bytes"
+#~ msgstr "størrelsen af returtypen til '%s' er %u byte"
+
+#~ msgid "size of return value of `%s' is larger than %d bytes"
+#~ msgstr "størrelsen af returtypen til '%s' er større end %d byte"
+
+#~ msgid "`for' loop initial declaration used outside C99 mode"
+#~ msgstr "begyndelseserklæring i 'for'-løkke benyttet uden for C99-tilstand"
+
+#~ msgid "`struct %s' declared in `for' loop initial declaration"
+#~ msgstr "'struct %s' erklæret i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "`union %s' declared in `for' loop initial declaration"
+#~ msgstr "'union %s' erklæret i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "`enum %s' declared in `for' loop initial declaration"
+#~ msgstr "'enum %s' erklæret i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "declaration of non-variable `%s' in `for' loop initial declaration"
+#~ msgstr "erklæring af '%s' der ikke er en variabel, i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "declaration of static variable `%s' in `for' loop initial declaration"
+#~ msgstr "erklæring af '%s' der er en statisk variabel, i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration"
+#~ msgstr "erklæring af '%s' der er en 'extern'-variabel, i begyndelseserklæring i 'for'-løkke"
+
+#~ msgid "format string arg not a string type"
+#~ msgstr "formateringsstrengsparameter er ikke af en strengtype"
+
+#~ msgid "args to be formatted is not '...'"
+#~ msgstr "parametrene der skal formateres, er ikke '...'"
+
+#~ msgid "strftime formats cannot format arguments"
+#~ msgstr "strftime-formater kan ikke formatere parametre"
+
+#~ msgid "format string has invalid operand number"
+#~ msgstr "formateringsstrengen har et ugyldigt operandtal"
+
+#~ msgid "function does not return string type"
+#~ msgstr "funktionen returnerer ikke en strengtype"
+
+#~ msgid "unrecognized format specifier"
+#~ msgstr "ukendt formateringsanvisning"
+
+#~ msgid "`%s' is an unrecognized format function type"
+#~ msgstr "'%s' er en ukendt formateringsfunktionstype"
+
+#~ msgid "format string arg follows the args to be formatted"
+#~ msgstr "formateringsstrengsparameter efterfølger parametrene der skal formateres"
+
+# her er der tale om en signalering
+#~ msgid "` ' flag"
+#~ msgstr "' '-flag"
+
+#~ msgid "the ` ' printf flag"
+#~ msgstr "' '-printf-flaget"
+
+#~ msgid "`+' flag"
+#~ msgstr "'+'-flag"
+
+#~ msgid "the `+' printf flag"
+#~ msgstr "'+'-printf-flaget"
+
+#~ msgid "`#' flag"
+#~ msgstr "'#'-flag"
+
+#~ msgid "the `#' printf flag"
+#~ msgstr "'#'-printf-flaget"
+
+#~ msgid "`0' flag"
+#~ msgstr "'0'-flag"
+
+#~ msgid "the `0' printf flag"
+#~ msgstr "'0'-printf-flaget"
+
+#~ msgid "`-' flag"
+#~ msgstr "'-'-flag"
+
+#~ msgid "the `-' printf flag"
+#~ msgstr "'-'-printf-flaget"
+
+#~ msgid "`'' flag"
+#~ msgstr "'''-flag"
+
+#~ msgid "the `'' printf flag"
+#~ msgstr "'''-printf-flaget"
+
+#~ msgid "`I' flag"
+#~ msgstr "'I'-flag"
+
+#~ msgid "the `I' printf flag"
+#~ msgstr "'I'-printf-flaget"
+
+#~ msgid "field width"
+#~ msgstr "feltbredde"
+
+#~ msgid "field width in printf format"
+#~ msgstr "feltbredde i printf-formatering"
+
+#~ msgid "precision"
+#~ msgstr "præcision"
+
+#~ msgid "precision in printf format"
+#~ msgstr "præcision i printf-formatering"
+
+#~ msgid "length modifier"
+#~ msgstr "længdetilpasning"
+
+#~ msgid "length modifier in printf format"
+#~ msgstr "længdetilpasning i printf-formatering"
+
+#~ msgid "assignment suppression"
+#~ msgstr "tildelingsundertrykkelse"
+
+#~ msgid "the assignment suppression scanf feature"
+#~ msgstr "den tildelingsundertrykkende scanf-facilitet"
+
+#~ msgid "`a' flag"
+#~ msgstr "'a'-flag"
+
+#~ msgid "the `a' scanf flag"
+#~ msgstr "'a'-scanf-flaget"
+
+#~ msgid "field width in scanf format"
+#~ msgstr "feltbredde i scanf-formatering"
+
+#~ msgid "length modifier in scanf format"
+#~ msgstr "længdetilpasning i scanf-formatering"
+
+#~ msgid "the `'' scanf flag"
+#~ msgstr "'''-scanf-flaget"
+
+#~ msgid "the `I' scanf flag"
+#~ msgstr "'I'-scanf-flaget"
+
+#~ msgid "`_' flag"
+#~ msgstr "'_'-flag"
+
+#~ msgid "the `_' strftime flag"
+#~ msgstr "'_'-strftime-flaget"
+
+#~ msgid "the `-' strftime flag"
+#~ msgstr "'-'-strftime-flaget"
+
+#~ msgid "the `0' strftime flag"
+#~ msgstr "'0'-strftime-flaget"
+
+#~ msgid "`^' flag"
+#~ msgstr "'^'-flag"
+
+#~ msgid "the `^' strftime flag"
+#~ msgstr "'^'-strftime-flaget"
+
+#~ msgid "the `#' strftime flag"
+#~ msgstr "'#'-strftime-flaget"
+
+#~ msgid "field width in strftime format"
+#~ msgstr "feltbredde i strftime-formatering"
+
+#~ msgid "`E' modifier"
+#~ msgstr "'E'-modifikation"
+
+#~ msgid "the `E' strftime modifier"
+#~ msgstr "'E'-strftime-modifikationen"
+
+#~ msgid "`O' modifier"
+#~ msgstr "'O'-modifikation"
+
+#~ msgid "the `O' strftime modifier"
+#~ msgstr "'O'-strftime-modifikationen"
+
+#~ msgid "the `O' modifier"
+#~ msgstr "'O'-modifikation"
+
+#~ msgid "fill character"
+#~ msgstr "udfyldningstegn"
+
+#~ msgid "fill character in strfmon format"
+#~ msgstr "udfyldningstegn i strfmon-formatering"
+
+#~ msgid "the `^' strfmon flag"
+#~ msgstr "'^'-strfmon-flaget"
+
+#~ msgid "the `+' strfmon flag"
+#~ msgstr "'+'-strfmon-flaget"
+
+#~ msgid "`(' flag"
+#~ msgstr "'('-flag"
+
+#~ msgid "the `(' strfmon flag"
+#~ msgstr "'('-strfmon-flaget"
+
+#~ msgid "`!' flag"
+#~ msgstr "'!'-flag"
+
+#~ msgid "the `!' strfmon flag"
+#~ msgstr "'!'-strfmon-flaget"
+
+#~ msgid "the `-' strfmon flag"
+#~ msgstr "'-'-strfmon-flaget"
+
+#~ msgid "field width in strfmon format"
+#~ msgstr "feltbredde i strfmon-formatering"
+
+#~ msgid "left precision"
+#~ msgstr "venstrepræcision"
+
+#~ msgid "left precision in strfmon format"
+#~ msgstr "venstrepræcision i strfmon-formatering"
+
+#~ msgid "right precision"
+#~ msgstr "højrepræcision"
+
+#~ msgid "right precision in strfmon format"
+#~ msgstr "højrepræcision i strfmon-formatering"
+
+#~ msgid "length modifier in strfmon format"
+#~ msgstr "længdemodifikation i strfmon-formatering"
+
+#~ msgid "function might be possible candidate for `%s' format attribute"
+#~ msgstr "funktion er en mulig kandidat til '%s'-formateringsegenskab"
+
+#~ msgid "missing $ operand number in format"
+#~ msgstr "manglende $-operandnummer i formatering"
+
+#~ msgid "%s does not support %%n$ operand number formats"
+#~ msgstr "%s understøtter ikke %%n$-operandnummerformateringer"
+
+#~ msgid "operand number out of range in format"
+#~ msgstr "operandnummer uden for det gyldige interval"
+
+#~ msgid "format argument %d used more than once in %s format"
+#~ msgstr "formateringsparameter %d brugt mere end en gang i %s-formatering"
+
+#~ msgid "format argument %d unused before used argument %d in $-style format"
+#~ msgstr "formateringsparameter %d ubenyttet før den brugte parameter %d i formatering med $"
+
+#~ msgid "format not a string literal, format string not checked"
+#~ msgstr "formatering er ikke en strengkonstant, formateringsstrengen er ikke kontrolleret"
+
+#~ msgid "format not a string literal and no format arguments"
+#~ msgstr "formatering er ikke en strengkonstant og der er ingen formateringsparametre"
+
+#~ msgid "format not a string literal, argument types not checked"
+#~ msgstr "formatering er ikke en strengkonstant, parametertyper er ikke kontrolleret"
+
+#~ msgid "too many arguments for format"
+#~ msgstr "for mange parametre til formatering"
+
+#~ msgid "unused arguments in $-style format"
+#~ msgstr "ubenyttede parametre i formatering med $"
+
+#~ msgid "zero-length %s format string"
+#~ msgstr "formateringsstreng %s med længden nul"
+
+#~ msgid "format is a wide character string"
+#~ msgstr "formatering er en bredtegnsstreng"
+
+#~ msgid "unterminated format string"
+#~ msgstr "uafsluttet formateringsstreng"
+
+#~ msgid "embedded `\\0' in format"
+#~ msgstr "indlejret '\\0' i formatering"
+
+#~ msgid "spurious trailing `%%' in format"
+#~ msgstr "mystisk afsluttende '%%' i formatering"
+
+#~ msgid "repeated %s in format"
+#~ msgstr "gentaget %s i formatering"
+
+#~ msgid "missing fill character at end of strfmon format"
+#~ msgstr "mangler fyldtegn i slutningen af strfmon-formatering"
+
+#~ msgid "too few arguments for format"
+#~ msgstr "for få parametre til formatering"
+
+#~ msgid "zero width in %s format"
+#~ msgstr "bredde på nul i %s-formatering"
+
+#~ msgid "empty left precision in %s format"
+#~ msgstr "tom venstrepræcision i %s-formatering"
+
+#~ msgid "field precision"
+#~ msgstr "feltpræcision"
+
+#~ msgid "empty precision in %s format"
+#~ msgstr "tom præcision i %s-formatering"
+
+#~ msgid "%s does not support the `%s' %s length modifier"
+#~ msgstr "%s understøtter ikke '%s' %s-længdemodifikationen"
+
+#~ msgid "conversion lacks type at end of format"
+#~ msgstr "konvertering mangler type i slutningen af formatering"
+
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "ukendt konverteringstypetegn '%c' i formatering"
+
+#~ msgid "unknown conversion type character 0x%x in format"
+#~ msgstr "ukendt konverteringstypetegn 0x%x i formatering"
+
+#~ msgid "%s does not support the `%%%c' %s format"
+#~ msgstr "%s understøtter ikke '%%%c' %s-formateringen"
+
+#~ msgid "%s used with `%%%c' %s format"
+#~ msgstr "%s brugt med '%%%c' %s-formatering"
+
+#~ msgid "%s does not support %s"
+#~ msgstr "%s understøtter ikke %s"
+
+#~ msgid "%s does not support %s with the `%%%c' %s format"
+#~ msgstr "%s understøtter ikke %s med '%%%c' %s-formateringen"
+
+#~ msgid "%s ignored with %s and `%%%c' %s format"
+#~ msgstr "%s ignoreret med %s og '%%%c' %s-formatering"
+
+#~ msgid "%s ignored with %s in %s format"
+#~ msgstr "%s ignoreret med %s i %s-formatering"
+
+#~ msgid "use of %s and %s together with `%%%c' %s format"
+#~ msgstr "brug af %s og %s sammen med '%%%c' %s-formatering"
+
+#~ msgid "use of %s and %s together in %s format"
+#~ msgstr "brug af %s og %s sammen i %s-formatering"
+
+#~ msgid "`%%%c' yields only last 2 digits of year in some locales"
+#~ msgstr "'%%%c' giver kun de to sidste cifre af året under nogle regionalindstillinger"
+
+#~ msgid "`%%%c' yields only last 2 digits of year"
+#~ msgstr "'%%%c' giver kun de to sidste cifre af året"
+
+#~ msgid "no closing `]' for `%%[' format"
+#~ msgstr "ingen afsluttende '[' til '%%['-formatering"
+
+#~ msgid "use of `%s' length modifier with `%c' type character"
+#~ msgstr "brug af '%s'-længdemodifikation med '%c'-typetegn"
+
+#~ msgid "%s does not support the `%%%s%c' %s format"
+#~ msgstr "%s understøtter ikke '%%%s%c' %s-formateringen"
+
+#~ msgid "operand number specified with suppressed assignment"
+#~ msgstr "operandnummer angivet med undertrykt tildeling"
+
+#~ msgid "operand number specified for format taking no argument"
+#~ msgstr "operandnummer angiver for formatering der ikke tager mod parametre"
+
+#~ msgid "writing through null pointer (arg %d)"
+#~ msgstr "skrivning gennem nulhenvisning (parameter %d)"
+
+#~ msgid "reading through null pointer (arg %d)"
+#~ msgstr "læsning gennem nulhenvisning (parameter %d)"
+
+#~ msgid "writing into constant object (arg %d)"
+#~ msgstr "skrivning til konstant objekt (parameter %d)"
+
+#~ msgid "extra type qualifiers in format argument (arg %d)"
+#~ msgstr "ekstra typemodifikationer i formateringsparameter (parameter %d)"
+
+#~ msgid "format argument is not a pointer (arg %d)"
+#~ msgstr "formateringsparameter er ikke en henvisning (parameter %d)"
+
+#~ msgid "format argument is not a pointer to a pointer (arg %d)"
+#~ msgstr "formateringsparameter er ikke en henvisning til en henvisning (parameter %d)"
+
+#~ msgid "pointer"
+#~ msgstr "henvisning"
+
+#~ msgid "different type"
+#~ msgstr "anden type"
+
+#~ msgid "%s is not type %s (arg %d)"
+#~ msgstr "%s er ikke af typen %s (parameter %d)"
+
+#~ msgid "%s format, %s arg (arg %d)"
+#~ msgstr "%s-formatering, %s-parameter (parameter %d)"
+
+#~ msgid "YYDEBUG not defined"
+#~ msgstr "YYDEBUG ikke defineret"
+
+#~ msgid "badly nested C headers from preprocessor"
+#~ msgstr "ugyldigt indlejrede C-inkluderingsfiler fra præprocessoren"
+
+#~ msgid "ignoring #pragma %s %s"
+#~ msgstr "ignorerer #pragma %s %s"
+
+#~ msgid "universal-character-name '\\u%04x' not valid in identifier"
+#~ msgstr "universelt tegn '\\u%04x' er ikke gyldigt i kaldenavne"
+
+#~ msgid "stray '%c' in program"
+#~ msgstr "vildfaren '%c' i program"
+
+#~ msgid "stray '\\%o' in program"
+#~ msgstr "vildfaren '\\%o' i program"
+
+#~ msgid "this decimal constant is unsigned only in ISO C90"
+#~ msgstr "denne kommatalskonstant er kun unsigned i ISO C90"
+
+#~ msgid "this decimal constant would be unsigned in ISO C90"
+#~ msgstr "denne kommatalskonstant ville være unsigned i ISO C90"
+
+#~ msgid "integer constant is too large for \"%s\" type"
+#~ msgstr "heltalskonstanten er for stor til typen '%s'"
+
+#~ msgid "floating constant exceeds range of \"%s\""
+#~ msgstr "kommatalskonstant overskrider intervallet for '%s'"
+
+#~ msgid "ignoring invalid multibyte character"
+#~ msgstr "ignorerer ugyldigt flerbyte-tegn"
+
+#~ msgid "missing argument to \"-%s\""
+#~ msgstr "der mangler en parameter til tilvalget '-%s'"
+
+#~ msgid "no class name specified with \"-%s\""
+#~ msgstr "intet klassenavn angivet med '-%s'"
+
+#~ msgid "missing filename after \"-%s\""
+#~ msgstr "et filnavn mangler efter '-%s'"
+
+#~ msgid "missing target after \"-%s\""
+#~ msgstr "et mål mangler efter '-%s'"
+
+#~ msgid "options array incorrectly sorted: %s is before %s"
+#~ msgstr "tilvalgstabel sorteret forkert: %s er før %s"
+
+#~ msgid "too many filenames given.  Type %s --help for usage"
+#~ msgstr "for mange filnavne angivet - vejledning i brug kan fås med '%s --help'"
+
+#~ msgid "-Wno-strict-prototypes is not supported in C++"
+#~ msgstr "-Wno-strict-prototypes er ikke understøttet i C++"
+
+#~ msgid "switch \"%s\" is no longer supported"
+#~ msgstr "tilvalget '%s' understøttes ikke længere"
+
+#~ msgid "switch \"%s\" is deprecated, please see documentation for details"
+#~ msgstr "tilvalget '%s' er forældet, se venligst dokumentationen for detaljer"
+
+#~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)"
+#~ msgstr "-fhandle-exceptions er blevet omdøbt til -fexceptions (og er nu til som standard)"
+
+#~ msgid "output filename specified twice"
+#~ msgstr "uddatafilnavnet er angivet to gange"
+
+#~ msgid "-Wformat-y2k ignored without -Wformat"
+#~ msgstr "-Wformat-y2k ignoreret uden -Wformat"
+
+#~ msgid "-Wformat-extra-args ignored without -Wformat"
+#~ msgstr "-Wformat-extra-args ignoreret uden -Wformat"
+
+#~ msgid "-Wformat-zero-length ignored without -Wformat"
+#~ msgstr "-Wformat-zero-length ignoreret uden -Wformat"
+
+#~ msgid "-Wformat-nonliteral ignored without -Wformat"
+#~ msgstr "-Wformat-nonliteral ignoreret uden -Wformat"
+
+#~ msgid "-Wformat-security ignored without -Wformat"
+#~ msgstr "-Wformat-security ignoreret uden -Wformat"
+
+#~ msgid "-Wmissing-format-attribute ignored without -Wformat"
+#~ msgstr "-Wmissing-format-attribute ignoreret uden -Wformat"
+
+#~ msgid "opening output file %s"
+#~ msgstr "åbner uddatafilen %s"
+
+#~ msgid "opening dependency file %s"
+#~ msgstr "åbner afhængighedsfilen %s"
+
+#~ msgid "closing dependency file %s"
+#~ msgstr "lukker afhængighedsfilen %s"
+
+#~ msgid "when writing output to %s"
+#~ msgstr "ved skrivning af uddata til %s"
+
+#~ msgid "to generate dependencies you must specify either -M or -MM"
+#~ msgstr "for at generere afhængigheder skal du angive enten -M eller -MM"
+
+#~ msgid "\"-%s\" is valid for %s but not for %s"
+#~ msgstr "'-%s' er gyldigt for %s, men ikke for %s"
+
+# den fulde tekst til disse bidder findes også senere
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ msgstr ""
+#~ "Tilvalg:\n"
+#~ "  -include <fil>            Inkludér indholdet af <fil> før andre filer\n"
+#~ "  -imacros <fil>            Læs makrodefinitionerne i <fil>\n"
+#~ "  -iprefix <sti>            Angiv <sti> som et præfiks til de næste to tilvalg\n"
+#~ "  -iwithprefix <ktlg>       Føj <ktlg> til slutningen af systeminkluderingsstien\n"
+#~ "  -withprefixbefore <ktlg>  Føj <ktlg> til slutningen af den alm. inkluderingssti\n"
+#~ "  -isystem <ktlg>           Føj <ktlg> til begyndelsen af systeminkluderingsstien\n"
+
+#~ msgid ""
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ msgstr ""
+#~ "  -idirafter <ktlg>         Føj <ktlg> til slutningen af systeminkluderingsstien\n"
+#~ "  -I <ktlg>                 Føj <ktlg> til slutningen af den alm. inkluderingssti\n"
+#~ "  -I-                       Nøje kontrolleret inkluderingssti; se info-hjælpen\n"
+#~ "  -nostdinc                 Søg ikke i systeminkluderingskataloger\n"
+#~ "                             (kataloger angivet med -isystem søges dog stadig)\n"
+#~ "  -nostdinc++               Søg ikke i systeminkluderingskataloger til C++\n"
+#~ "  -o <fil>                  Send uddata til <fil>\n"
+
+#~ msgid ""
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -W[no-]trigraphs          Warn if trigraphs are encountered\n"
+#~ "  -W[no-]comment{s}         Warn if one comment starts inside another\n"
+#~ msgstr ""
+#~ "  -trigraphs                Understøt ISO C trigrafer\n"
+#~ "  -std=<standardnavn>       Angiv at koden retter sig efter en af standarderne:\n"
+#~ "                             gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                             iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Undertryk advarselsmeddelelser\n"
+#~ "  -W[no-]trigraphs          Advar hvis trigrafer mødes\n"
+#~ "  -W[no-]comment{s}         Advar hvis en kommentar begynder inden i en anden\n"
+
+#~ msgid ""
+#~ "  -W[no-]traditional        Warn about features not present in traditional C\n"
+#~ "  -W[no-]undef              Warn if an undefined macro is used by #if\n"
+#~ "  -W[no-]import             Warn about the use of the #import directive\n"
+#~ msgstr ""
+#~ "  -W[no-]traditional        Advar om utilgængelige faciliteter i traditionel C\n"
+#~ "  -W[no-]undef              Advar hvis en ikkedefineret makro bruges med #if\n"
+#~ "  -W[no-]import             Advar om brug af #import-direktivet\n"
+
+#~ msgid ""
+#~ "  -W[no-]error              Treat all warnings as errors\n"
+#~ "  -W[no-]system-headers     Do not suppress warnings from system headers\n"
+#~ "  -W[no-]all                Enable most preprocessor warnings\n"
+#~ msgstr ""
+#~ "  -W[no-]error              Behandl alle advarsler som fejl\n"
+#~ "  -W[no-]system-headers     Undertryk ikke advarsler fra systeminkluderingsfiler\n"
+#~ "  -W[no-]all                Slå alle præprocessoradvarsler til\n"
+
+#~ msgid ""
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       Generate make dependencies and compile\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MF <file>                Write dependency output to the given file\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ msgstr ""
+#~ "  -M                        Generér afhængigheder til make\n"
+#~ "  -MM                       Som -M, men ignorér systeminkluderingsfiler\n"
+#~ "  -MD                       Generer make-afhængigheder og oversæt\n"
+#~ "  -MMD                      Som -MD, men ignorér systeminkluderingsfiler\n"
+#~ "  -MF <fil>                 Skriv afhænghedsuddata til den givne fil\n"
+#~ "  -MG                       Behandl manglende inkl.-filer som genererede filer\n"
+
+# make kalder phony targets for falske mål
+#~ msgid ""
+#~ "  -MP\t\t\t    Generate phony targets for all headers\n"
+#~ "  -MQ <target>              Add a MAKE-quoted target\n"
+#~ "  -MT <target>              Add an unquoted target\n"
+#~ msgstr ""
+#~ "  -MP                       Generér \"falske\" mål for alle inkluderingsfiler\n"
+#~ "  -MQ <mål>                 Tilføj et MAKE-mål i anførselstegn\n"
+#~ "  -MT <mål>                 Tilføj et mål uden anførselstegn\n"
+
+#~ msgid ""
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question>=<answer>     Assert the <answer> to <question>\n"
+#~ "  -A-<question>=<answer>    Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ msgstr ""
+#~ "  -D<makro>                 Definér makroen <makro> med strengen '1' som værdi\n"
+#~ "  -D<makro>=<værdi>         Definér makroen <makro> med værdien <værdi>\n"
+#~ "  -A<spørgsmål>=<svar>      Angiv at <svar> er svar på <spørgsmål>\n"
+#~ "  -A-<spørgsmål>=<svar>     Angiv at <svar> ikke er svar på <spørgsmål>\n"
+#~ "  -U<makro>                 Glem definitionen af <makro>\n"
+#~ "  -v                        Skriv versionsnummeret\n"
+
+#~ msgid ""
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ msgstr ""
+#~ "  -H                        Skriv navnene på inkluderingsfilerne når de bruges\n"
+#~ "  -C                        Fjern ikke kommentarer\n"
+#~ "  -dM                       Vis til sidst de aktive makrodefinitioner\n"
+#~ "  -dD                       Bevar makrodefinitioner i uddata\n"
+#~ "  -dN                       Som -dD bortset fra at kun navnene bevares\n"
+#~ "  -dI                       Inkludér #include-anvisninger i uddata\n"
+
+#~ msgid ""
+#~ "  -f[no-]preprocessed       Treat the input file as already preprocessed\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -remap                    Remap file names when including files\n"
+#~ "  --help                    Display this information\n"
+#~ msgstr ""
+#~ "  -f[no-]preprocessed       Behandl inddatafilen som allerede præprocesseret\n"
+#~ "  -ftabstop=<tal>           Afstand mellem tabulatorstop i kolonnerapportering\n"
+#~ "  -P                        Generér ikke #line-angivelser\n"
+#~ "  -remap                    Omdan filnavne ved filinkludering\n"
+#~ "  --help                    Vis denne vejledning\n"
+
+#~ msgid "syntax error"
+#~ msgstr "syntaksfejl"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "syntaksfejl: kan ikke gå tilbage"
+
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "ISO C forbyder en tom kildefil"
+
+#~ msgid "argument of `asm' is not a constant string"
+#~ msgstr "parameteren til 'asm' er ikke en konstant streng"
+
+#~ msgid "ISO C forbids data definition with no type or storage class"
+#~ msgstr "ISO C forbyder definition af data uden angivelse af type eller lagringsklasse"
+
+#~ msgid "data definition has no type or storage class"
+#~ msgstr "definition af data uden angivelse af type eller lagringsklasse"
+
+#~ msgid "ISO C does not allow extra `;' outside of a function"
+#~ msgstr "ISO C tillader ikke ekstra ';' uden for funktioner"
+
+#~ msgid "`sizeof' applied to a bit-field"
+#~ msgstr "'sizeof' benyttet på et bitfelt"
+
+#~ msgid "ISO C forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C forbyder udeladelse af den midterste del af et '?:'-udtryk"
+
+#~ msgid "ISO C89 forbids compound literals"
+#~ msgstr "ISO C89 forbyder sammensatte konstanter"
+
+#~ msgid "ISO C forbids braced-groups within expressions"
+#~ msgstr "ISO C forbyder sætningsblokke inden i udtryk"
+
+#~ msgid "first argument to __builtin_choose_expr not a constant"
+#~ msgstr "første parameter til '__builtin_choose_expr' skal være en konstant"
+
+#~ msgid "traditional C rejects ISO C style function definitions"
+#~ msgstr "traditionel C tillader ikke ISO C-functionsdefinitioner"
+
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "'%s' er ikke ved begyndelsen af erklæringen"
+
+#~ msgid "ISO C forbids empty initializer braces"
+#~ msgstr "ISO C forbyder tom startværdiblok"
+
+#~ msgid "ISO C89 forbids specifying subobject to initialize"
+#~ msgstr "ISO C89 forbyder angivelse af underobjekt til klargøring"
+
+# RETMIG: hm, gad vide om dette er rigtigt
+#~ msgid "obsolete use of designated initializer without `='"
+#~ msgstr "forældet brug af udpeget startværdi uden '='"
+
+#~ msgid "obsolete use of designated initializer with `:'"
+#~ msgstr "forældet brug af udpeget startværdi med ':'"
+
+#~ msgid "ISO C forbids specifying range of elements to initialize"
+#~ msgstr "ISO C forbyder angivelse af interval af elementer til klargøring"
+
+#~ msgid "ISO C forbids nested functions"
+#~ msgstr "ISO C forbyder indlejrede funktioner"
+
+#~ msgid "ISO C forbids forward references to `enum' types"
+#~ msgstr "ISO C forbyder forhåndsreferencer til 'enum'-typer"
+
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "komma i slutningen af enum-liste"
+
+#~ msgid "no semicolon at end of struct or union"
+#~ msgstr "intet semikolon i slutningen af struct eller union"
+
+#~ msgid "extra semicolon in struct or union specified"
+#~ msgstr "ekstra semikolon angivet i struct eller union"
+
+#~ msgid "ISO C doesn't support unnamed structs/unions"
+#~ msgstr "ISO C understøtter ikke unavngivne struct/union-konstruktioner"
+
+#~ msgid "ISO C forbids member declarations with no members"
+#~ msgstr "ISO C forbyder medlemserklæringer uden medlemmer"
+
+#~ msgid "deprecated use of label at end of compound statement"
+#~ msgstr "forældet brug af etiket i slutningen af sammensat sætning"
+
+#~ msgid "ISO C89 forbids mixed declarations and code"
+#~ msgstr "ISO C89 forbyder blandede erklæringer og kode"
+
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "ISO C forbyder etiketerklæringer"
+
+#~ msgid "braced-group within expression allowed only inside a function"
+#~ msgstr "sætningsblokke i udtryk er kun tilladt inde i en funktion"
+
+#~ msgid "empty body in an else-statement"
+#~ msgstr "tom krop i en else-sætning"
+
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "ISO C forbyder 'goto *udtryk;'"
+
+#~ msgid "ISO C forbids forward parameter declarations"
+#~ msgstr "ISO C forbyder forhåndsparametererklæringer"
+
+#~ msgid "ISO C requires a named argument before `...'"
+#~ msgstr "ISO C påkræver en navngiven parameter før '...'"
+
+#~ msgid "`...' in old-style identifier list"
+#~ msgstr "'...' i gammeldags liste af kaldenavne"
+
+#~ msgid "parse error; also virtual memory exhausted"
+#~ msgstr "tolkningsfejl; desuden løbet tør for virtuel hukommelse"
+
+#~ msgid "parse error"
+#~ msgstr "tolkningsfejl"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "overløb i tolkerens stak"
+
+#~ msgid "%s at end of input"
+#~ msgstr "%s ved slutning af inddata"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s før %s'%c'"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s før %s'\\x%x'"
+
+#~ msgid "%s before string constant"
+#~ msgstr "%s før strengkonstant"
+
+#~ msgid "%s before numeric constant"
+#~ msgstr "%s før talkonstant"
+
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s før \"%s\""
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s før symbolet '%s'"
+
+#~ msgid "traditional C rejects string concatenation"
+#~ msgstr "traditionel C tillader ikke strengsammensætning"
+
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "syntaksfejl ved symbolet '%s'"
+
+#~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+#~ msgstr "'#pragma pack (pop)' mødt uden tilsvarende '#pragma pack (push, <n>)'"
+
+#~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
+#~ msgstr "'#pragma pack(pop, %s)' mødt uden tilsvarende '#pragma pack(push, %s, <n>)'"
+
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(push[, id], <n>) understøttes ikke på målarkitekturen"
+
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(pop[, id], <n>) understøttes ikke på målarkitekturen"
+
+#~ msgid "missing '(' after '#pragma pack' - ignored"
+#~ msgstr "manglende '(' efter '#pragma pack' - ignoreret"
+
+#~ msgid "malformed '#pragma pack' - ignored"
+#~ msgstr "forkert udformet '#pragma pack' - ignoreret"
+
+#~ msgid "malformed '#pragma pack(push[, id], <n>)' - ignored"
+#~ msgstr "forkert udformet '#pragma pack(push[, id], <n>)' - ignoreret"
+
+#~ msgid "malformed '#pragma pack(pop[, id])' - ignored"
+#~ msgstr "forkert udformet '#pragma pack(pop[, id])' - ignoreret"
+
+#~ msgid "unknown action '%s' for '#pragma pack' - ignored"
+#~ msgstr "ukendt handling '%s' for '#pragma pack' - ignoreret"
+
+#~ msgid "junk at end of '#pragma pack'"
+#~ msgstr "ragelse i slutningen af '#pragma pack'"
+
+#~ msgid "alignment must be a small power of two, not %d"
+#~ msgstr "justering skal være en lille potens af to, ikke %d"
+
+#~ msgid "applying #pragma weak `%s' after first use results in unspecified behavior"
+#~ msgstr "anvendelse af #pragma weak '%s' efter første brug resulterer i ikke-defineret opførsel"
+
+#~ msgid "malformed #pragma weak, ignored"
+#~ msgstr "forkert udformet '#pragma weak' - ignoreret"
+
+#~ msgid "junk at end of #pragma weak"
+#~ msgstr "ragelse i slutningen af '#pragma weak'"
+
+#~ msgid "malformed #pragma redefine_extname, ignored"
+#~ msgstr "forkert udformet '#pragma redefine_extname' - ignoreret"
+
+#~ msgid "junk at end of #pragma redefine_extname"
+#~ msgstr "ragelse i slutningen af '#pragma redefine_extname'"
+
+#~ msgid "#pragma redefine_extname conflicts with declaration"
+#~ msgstr "#pragma redefine_extname er i konflikt med erklæring"
+
+#~ msgid "malformed #pragma extern_prefix, ignored"
+#~ msgstr "forkert udformet '#pragma extern_prefix' - ignoreret"
+
+#~ msgid "junk at end of #pragma extern_prefix"
+#~ msgstr "ragelse i slutningen af '#pragma extern_prefix'"
+
+#~ msgid "asm declaration conflicts with previous rename"
+#~ msgstr "asm-erklæring er i konflikt med tidligere omdøbelse"
+
+#~ msgid "break statement not within loop or switch"
+#~ msgstr "break-sætning befinder sig ikke i en løkke- eller switch-konstruktion"
+
+#~ msgid "continue statement not within a loop"
+#~ msgstr "continue-sætning befinder sig ikke i en løkke"
+
+#~ msgid "destructor needed for `%#D'"
+#~ msgstr "destruktionsfunktion påkrævet til '%#D'"
+
+#~ msgid "where case label appears here"
+#~ msgstr "hvor case-etiket optræder her"
+
+#~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)"
+#~ msgstr "(indesluttede handlinger fra tidligere case-sætninger kræver destruktionsfunktioner i deres eget virkefelt)"
+
+#~ msgid "%s qualifier ignored on asm"
+#~ msgstr "%s-modifikation ignoreret ved asm"
+
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "'%s' er af en ufuldstændig type"
+
+#~ msgid "invalid use of void expression"
+#~ msgstr "ugyldig brug af void-udtryk"
+
+#~ msgid "invalid use of flexible array member"
+#~ msgstr "ugyldig brug af fleksibelt tabelmedlem"
+
+#~ msgid "invalid use of array with unspecified bounds"
+#~ msgstr "ugyldig brug af tabel uden angivne grænser"
+
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "ugyldig brug af en type '%s %s' der ikke er defineret"
+
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "ugyldig brug af ufuldstændig typedef '%s'"
+
+#~ msgid "function types not truly compatible in ISO C"
+#~ msgstr "funktionstyper ikke er fuldt ud forenelige i ISO C"
+
+#~ msgid "types are not quite compatible"
+#~ msgstr "typer er ikke helt forenelige"
+
+#~ msgid "arithmetic on pointer to an incomplete type"
+#~ msgstr "beregninger udført på en henvisning til en ufuldstændig type"
+
+#~ msgid "%s has no member named `%s'"
+#~ msgstr "%s har intet medlem ved navn '%s'"
+
+#~ msgid "request for member `%s' in something not a structure or union"
+#~ msgstr "forespørgsel efter medlemmet '%s' i noget der hverken er en union eller en struktur"
+
+#~ msgid "dereferencing pointer to incomplete type"
+#~ msgstr "forsøg på at følge en henvisning til en variabel af en ufuldstændig type"
+
+#~ msgid "dereferencing `void *' pointer"
+#~ msgstr "forsøg på at følge en 'void *'-henvisning"
+
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "ugyldig typeparameter '%s'"
+
+#~ msgid "subscript missing in array reference"
+#~ msgstr "indeks mangler i tabelopslag"
+
+#~ msgid "array subscript has type `char'"
+#~ msgstr "tabelindeks er af typen 'char'"
+
+#~ msgid "array subscript is not an integer"
+#~ msgstr "tabelindeks er ikke et heltal"
+
+#~ msgid "ISO C forbids subscripting `register' array"
+#~ msgstr "ISO C forbyder opslag i 'register'-tabel"
+
+#~ msgid "ISO C90 forbids subscripting non-lvalue array"
+#~ msgstr "ISO C90 forbyder opslag i tabel der ikke er venstreværdi"
+
+#~ msgid "subscript has type `char'"
+#~ msgstr "indeks er af typen 'char'"
+
+#~ msgid "subscripted value is neither array nor pointer"
+#~ msgstr "værdien der er påført et indeks, er hverken en tabel eller en henvisningsvariabel"
+
+#~ msgid "`%s' undeclared here (not in a function)"
+#~ msgstr "'%s' ikke erklæret her (ikke i en funktion)"
+
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "'%s' er ikke erklæret (først benyttet i denne funktion)"
+
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(et kaldenavn der ikke er erklæret, rapporteres kun én gang"
+
+#~ msgid "for each function it appears in.)"
+#~ msgstr "per funktion)"
+
+#~ msgid "local declaration of `%s' hides instance variable"
+#~ msgstr "den lokale erklæring af funktionen '%s' skjuler instansvariabel"
+
+#~ msgid "called object is not a function"
+#~ msgstr "det kaldte objekt er ikke en funktion"
+
+#~ msgid "too many arguments to function"
+#~ msgstr "for mange parametre til funktionen"
+
+#~ msgid "type of formal parameter %d is incomplete"
+#~ msgstr "typen af den formelle parameter %d er ufuldstændig"
+
+#~ msgid "%s as integer rather than floating due to prototype"
+#~ msgstr "%s som heltal i stedet for kommatal på grund af prototypen"
+
+#~ msgid "%s as integer rather than complex due to prototype"
+#~ msgstr "%s som heltal i stedet for complex på grund af prototypen"
+
+#~ msgid "%s as complex rather than floating due to prototype"
+#~ msgstr "%s som complex i stedet for kommatal på grund af prototypen"
+
+#~ msgid "%s as floating rather than integer due to prototype"
+#~ msgstr "%s som kommatal i stedet for heltal på grund af prototypen"
+
+#~ msgid "%s as complex rather than integer due to prototype"
+#~ msgstr "%s som complex i stedet for heltal på grund af prototypen"
+
+#~ msgid "%s as floating rather than complex due to prototype"
+#~ msgstr "%s som kommatal i stedet for complex på grund af prototypen"
+
+#~ msgid "%s as `float' rather than `double' due to prototype"
+#~ msgstr "%s som float i stedet for double på grund af prototypen"
+
+#~ msgid "%s with different width due to prototype"
+#~ msgstr "%s med anderledes bredde på grund af prototypen"
+
+#~ msgid "%s as unsigned due to prototype"
+#~ msgstr "%s som unsigned på grund af prototypen"
+
+#~ msgid "%s as signed due to prototype"
+#~ msgstr "%s som signed på grund af prototypen"
+
+#~ msgid "too few arguments to function"
+#~ msgstr "for få parametre til funktionen"
+
+#~ msgid "suggest parentheses around + or - inside shift"
+#~ msgstr "foreslår paranteser omkring + eller - inden i skifteoperation"
+
+#~ msgid "suggest parentheses around && within ||"
+#~ msgstr "foreslår paranteser omkring && inden i ||"
+
+#~ msgid "suggest parentheses around arithmetic in operand of |"
+#~ msgstr "foreslår paranteser omkring beregning i operand til |"
+
+#~ msgid "suggest parentheses around comparison in operand of |"
+#~ msgstr "foreslår paranteser omkring sammenligning i operand til |"
+
+#~ msgid "suggest parentheses around arithmetic in operand of ^"
+#~ msgstr "foreslår paranteser omkring beregning i operand til ^"
+
+#~ msgid "suggest parentheses around comparison in operand of ^"
+#~ msgstr "foreslår paranteser omkring sammenligning i operand til ^"
+
+#~ msgid "suggest parentheses around + or - in operand of &"
+#~ msgstr "foreslår paranteser omkring + eller - i operand til &"
+
+#~ msgid "suggest parentheses around comparison in operand of &"
+#~ msgstr "foreslår paranteser omkring sammenligning i operand til &"
+
+#~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+#~ msgstr "sammenligninger som 'x <= y <= z' følger ikke den matematiske betydning"
+
+#~ msgid "division by zero"
+#~ msgstr "division med nul"
+
+#~ msgid "right shift count is negative"
+#~ msgstr "højreskiftsantal er negativ"
+
+#~ msgid "right shift count >= width of type"
+#~ msgstr "højreskiftsantal er større end bredden af typen"
+
+#~ msgid "left shift count is negative"
+#~ msgstr "venstreskiftsantal er negativ"
+
+#~ msgid "left shift count >= width of type"
+#~ msgstr "venstreskiftsantal er større end bredden af typen"
+
+#~ msgid "shift count is negative"
+#~ msgstr "skifteantal er negativ"
+
+#~ msgid "shift count >= width of type"
+#~ msgstr "skifteantal er større end bredden af typen"
+
+#~ msgid "comparing floating point with == or != is unsafe"
+#~ msgstr "sammenligning af kommatal med == eller != er ikke sikkert"
+
+#~ msgid "ISO C forbids comparison of `void *' with function pointer"
+#~ msgstr "ISO C forbyder sammenligning af 'void *' med funktionshenvisning"
+
+#~ msgid "comparison of distinct pointer types lacks a cast"
+#~ msgstr "sammenligning med forskellige henvisningstyper mangler en typeomtvingelse"
+
+#~ msgid "comparison between pointer and integer"
+#~ msgstr "sammenligning mellem henvisningsvariabel og heltal"
+
+#~ msgid "ISO C forbids ordered comparisons of pointers to functions"
+#~ msgstr "ISO C forbyder ordnede sammenligninger af henvisninger til funktioner"
+
+#~ msgid "comparison of complete and incomplete pointers"
+#~ msgstr "sammenligning mellem en fuldstændig og ufuldstændig henvisning"
+
+#~ msgid "ordered comparison of pointer with integer zero"
+#~ msgstr "ordnet sammenligning af henvisning med heltallet nul"
+
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "uordnet sammenligning af ikke-kommatalsparameter"
+
+#~ msgid "comparison between signed and unsigned"
+#~ msgstr "sammenligning mellem signed og unsigned"
+
+#~ msgid "comparison of promoted ~unsigned with constant"
+#~ msgstr "sammenligning af forfremmet ~unsigned med konstant"
+
+#~ msgid "comparison of promoted ~unsigned with unsigned"
+#~ msgstr "sammenligning af forfremmet ~unsigned med unsigned"
+
+#~ msgid "pointer of type `void *' used in subtraction"
+#~ msgstr "henvisning af typen 'void *' benyttet i subtraktion"
+
+#~ msgid "pointer to a function used in subtraction"
+#~ msgstr "henvisning til en funktion benyttet i subtraktion"
+
+#~ msgid "wrong type argument to unary plus"
+#~ msgstr "forkert parametertype til unært plus"
+
+#~ msgid "wrong type argument to unary minus"
+#~ msgstr "forkert parametertype til unært minus"
+
+#~ msgid "ISO C does not support `~' for complex conjugation"
+#~ msgstr "ISO C understøtter ikke '~' til compleks-konjugering"
+
+#~ msgid "wrong type argument to bit-complement"
+#~ msgstr "forkert parametertype til bitkomplement"
+
+#~ msgid "wrong type argument to abs"
+#~ msgstr "forkert parametertype til abs"
+
+#~ msgid "wrong type argument to conjugation"
+#~ msgstr "forkert parametertype til konjugation"
+
+#~ msgid "wrong type argument to unary exclamation mark"
+#~ msgstr "forkert parametertype til unært udråbstegn"
+
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "ISO C understøtter ikke '++' og '--' for complex-typer"
+
+# man kan ikke stikke en forøgelse (++) en type som parameter, 'type
+# argument' skal opfattes på en anden måde
+#~ msgid "wrong type argument to increment"
+#~ msgstr "forkert parametertype til forøgelse"
+
+#~ msgid "wrong type argument to decrement"
+#~ msgstr "forkert parametertype til formindskelse"
+
+#~ msgid "increment of pointer to unknown structure"
+#~ msgstr "forøgelse af henvisning til en ukendt struktur"
+
+#~ msgid "decrement of pointer to unknown structure"
+#~ msgstr "formindskelse af henvisning til en ukendt struktur"
+
+# RETMIG: hvad betyder dette?
+#~ msgid "ISO C forbids the address of a cast expression"
+#~ msgstr "ISO C forbyder adressen af et typeomtvingningsudtryk"
+
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "ugyldig venstreværdi i unær '&'"
+
+#~ msgid "attempt to take address of bit-field structure member `%s'"
+#~ msgstr "forsøg på at finde adressen af bitfeltstrukturmedlemmet '%s'"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "ISO C forbids use of conditional expressions as lvalues"
+#~ msgstr "ISO C forbyder brug af betingede udtryk som venstreværdier"
+
+#~ msgid "ISO C forbids use of compound expressions as lvalues"
+#~ msgstr "ISO C forbyder brug af sammensatte udtryk som venstreværdier"
+
+#~ msgid "ISO C forbids use of cast expressions as lvalues"
+#~ msgstr "ISO C forbyder brug af typeomtvingningsudtryk som venstreværdier"
+
+# RETMIG: lettere klodset konstruktion
+#~ msgid "%s of read-only member `%s'"
+#~ msgstr "%s af medlemmet '%s' der kun må læses"
+
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "%s af variablen '%s' der kun må læses"
+
+#~ msgid "%s of read-only location"
+#~ msgstr "%s af placering der kun må læses"
+
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "kan ikke finde adressen af bitfeltet '%s'"
+
+#~ msgid "global register variable `%s' used in nested function"
+#~ msgstr "global registervariabel '%s' benyttet i indlejret funktion"
+
+#~ msgid "register variable `%s' used in nested function"
+#~ msgstr "registervariabel '%s' benyttet i indlejret funktion"
+
+#~ msgid "address of global register variable `%s' requested"
+#~ msgstr "forespørgsel efter adressen af den globale registervariabel '%s'"
+
+#~ msgid "cannot put object with volatile field into register"
+#~ msgstr "kan ikke anbringe et objekt med et volatile-felt i et register"
+
+#~ msgid "address of register variable `%s' requested"
+#~ msgstr "forespørgsel efter adressen af registervariablen '%s'"
+
+#~ msgid "signed and unsigned type in conditional expression"
+#~ msgstr "signed og unsigned type i betinget udtryk"
+
+#~ msgid "ISO C forbids conditional expr with only one void side"
+#~ msgstr "ISO C forbyder betingede udtryk med kun én tom side"
+
+#~ msgid "ISO C forbids conditional expr between `void *' and function pointer"
+#~ msgstr "ISO C++ forbyder betinget udtryk mellem 'void *' og funktionshenvisning"
+
+#~ msgid "pointer type mismatch in conditional expression"
+#~ msgstr "henvisningstyperne i betingelsesudtrykket passer ikke sammen"
+
+#~ msgid "pointer/integer type mismatch in conditional expression"
+#~ msgstr "henvisnings- og heltalstype i betingelsesudtrykket passer ikke sammen"
+
+#~ msgid "type mismatch in conditional expression"
+#~ msgstr "typerne i betingelsesudtrykket passer ikke sammen"
+
+#~ msgid "left-hand operand of comma expression has no effect"
+#~ msgstr "venstreoperanden til kommaudtrykket har ingen virkning"
+
+#~ msgid "cast specifies array type"
+#~ msgstr "typetildelingen angiver en tabeltype"
+
+#~ msgid "cast specifies function type"
+#~ msgstr "typetildelingen angiver en funktionstype"
+
+#~ msgid "ISO C forbids casting nonscalar to the same type"
+#~ msgstr "ISO C forbyder omtvingelse af ikke-skalar til den samme type"
+
+#~ msgid "ISO C forbids casts to union type"
+#~ msgstr "ISO C forbyder omtvingelse til uniontype"
+
+#~ msgid "cast to union type from type not present in union"
+#~ msgstr "typetildeling til en uniontype fra en type der ikke findes i union'en"
+
+#~ msgid "cast adds new qualifiers to function type"
+#~ msgstr "typeomtvingning tilføjer modifikationer til en funktionstype"
+
+#~ msgid "cast discards qualifiers from pointer target type"
+#~ msgstr "typeomtvingelse kasserer modifikationer på henvisningsmålets type"
+
+#~ msgid "cast increases required alignment of target type"
+#~ msgstr "typeomtvingelse forøger den påkrævne justering af måltypen"
+
+#~ msgid "cast from pointer to integer of different size"
+#~ msgstr "typeomtvingelse fra henvisning til heltal af en anden størrelse"
+
+#~ msgid "cast does not match function type"
+#~ msgstr "typeomtvingelse passer ikke til funktionstype"
+
+#~ msgid "cast to pointer from integer of different size"
+#~ msgstr "typeomtvingelse fra heltal til henvisning af en anden størrelse"
+
+#~ msgid "type-punning to incomplete type might break strict-aliasing rules"
+#~ msgstr "typeomtvingning af ufuldstændig type bryder muligvis strenge aliasregler"
+
+#~ msgid "dereferencing type-punned pointer will break strict-aliasing rules"
+#~ msgstr "følgning af en typeomtvunget henvisning vil bryde strenge aliasregler"
+
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "ugyldig venstreværdi i tildeling"
+
+#~ msgid "assignment"
+#~ msgstr "tildeling"
+
+#~ msgid "cannot pass rvalue to reference parameter"
+#~ msgstr "kan ikke videregive højreværdi til referenceparameter"
+
+#~ msgid "%s makes qualified function pointer from unqualified"
+#~ msgstr "%s opretter en funktionshenvisning med modifikationer fra én uden"
+
+#~ msgid "%s discards qualifiers from pointer target type"
+#~ msgstr "%s kasserer modifikationer på henvisningsmålets type"
+
+#~ msgid "ISO C prohibits argument conversion to union type"
+#~ msgstr "ISO C forbyder parameterkonvertering til uniontype"
+
+#~ msgid "ISO C forbids %s between function pointer and `void *'"
+#~ msgstr "ISO C forbyder %s mellem funktionshenvisning og 'void *'"
+
+#~ msgid "pointer targets in %s differ in signedness"
+#~ msgstr "fortegnene i henvisningsmål i %s er forskellige"
+
+#~ msgid "%s from incompatible pointer type"
+#~ msgstr "%s fra en henvisningstype der ikke er forenelig med målets"
+
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%s opretter en henvisningsvariabel ud fra et heltal uden en typeomtvingning"
+
+#~ msgid "%s makes integer from pointer without a cast"
+#~ msgstr "%s opretter et heltal ud fra en henvisningsvariabel uden en typeomtvingning"
+
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "typen af den %d. parameter i '%s' passer ikke"
+
+#~ msgid "incompatible type for argument %d of indirect function call"
+#~ msgstr "typen af den %d. parameter i det indirekte funktionskald passer ikke"
+
+#~ msgid "incompatible types in %s"
+#~ msgstr "uforenelige typer i %s"
+
+#~ msgid "passing arg of `%s'"
+#~ msgstr "videregiver parameter til '%s'"
+
+#~ msgid "passing arg of pointer to function"
+#~ msgstr "videregiver parameter af henvisning til funktion"
+
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "videregiver den %d. parameter til '%s'"
+
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "videregiver den %d. parameter af henvisning til funktion"
+
+#~ msgid "initializer for static variable is not constant"
+#~ msgstr "startværdien for den statiske variabel er ikke en konstant"
+
+#~ msgid "initializer for static variable uses complicated arithmetic"
+#~ msgstr "startværdien for den statiske variabel benytter komplicerede beregninger"
+
+#~ msgid "aggregate initializer is not constant"
+#~ msgstr "startværdi til variabel af en sammensat type er ikke en konstant"
+
+#~ msgid "aggregate initializer uses complicated arithmetic"
+#~ msgstr "startværdien til variabel af en sammensat type benytter komplicerede beregninger"
+
+# 'automatic aggregate' betyder automatisk allokerede variabler, dvs.
+# ganske almindelige lokale variabler (kan evt. erklæres med 'auto')
+#~ msgid "traditional C rejects automatic aggregate initialization"
+#~ msgstr "traditionel C forbyder klargøring af auto-variabler af sammensatte typer"
+
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "(i nærheden af klargøringen af '%s')"
+
+#~ msgid "char-array initialized from wide string"
+#~ msgstr "char-tabel får tildelt startværdi fra en bred streng"
+
+#~ msgid "int-array initialized from non-wide string"
+#~ msgstr "int-tabel får tildelt startværdi fra en ikke-bred streng"
+
+#~ msgid "initializer-string for array of chars is too long"
+#~ msgstr "startværdistrengen til char-tabellen er for lang"
+
+#~ msgid "array initialized from non-constant array expression"
+#~ msgstr "tabel får tildelt en startværdi fra et tabeludtryk der ikke er konstant"
+
+#~ msgid "initializer element is not constant"
+#~ msgstr "startværdielement er ikke en konstant"
+
+#~ msgid "initialization"
+#~ msgstr "klargøring"
+
+#~ msgid "initializer element is not computable at load time"
+#~ msgstr "startværdielement kan ikke beregnes ved indlæsningstidspunktet"
+
+#~ msgid "invalid initializer"
+#~ msgstr "ugyldig startværdi"
+
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "overskydende krøllede paranteser ved slutningen af startværdien"
+
+#~ msgid "missing braces around initializer"
+#~ msgstr "krøllede paranteser mangler omkring startværdien"
+
+#~ msgid "braces around scalar initializer"
+#~ msgstr "krøllede paranteser omkring skalarstartværdi"
+
+# RETMIG: eller er det fleksibel tabel-medlem
+#~ msgid "initialization of flexible array member in a nested context"
+#~ msgstr "klargøring af fleksibelt tabelmedlem i en indlejret kontekst"
+
+#~ msgid "initialization of a flexible array member"
+#~ msgstr "klargøring af fleksibelt tabelmedlem"
+
+#~ msgid "missing initializer"
+#~ msgstr "manglende startværdi"
+
+#~ msgid "empty scalar initializer"
+#~ msgstr "tom skalarstartværdi"
+
+#~ msgid "extra elements in scalar initializer"
+#~ msgstr "overskydende elementer i skalarstarværdi"
+
+#~ msgid "initialization designators may not nest"
+#~ msgstr "klargøringstegn må ikke indlejres"
+
+#~ msgid "array index in non-array initializer"
+#~ msgstr "tabelindeks i en startværdi der ikke er en tabel"
+
+# RETMIG: record?
+#~ msgid "field name not in record or union initializer"
+#~ msgstr "feltnavn ikke i struktur- eller union-startværdi"
+
+#~ msgid "nonconstant array index in initializer"
+#~ msgstr "tabelindekset i startværdien er ikke en konstant"
+
+#~ msgid "array index in initializer exceeds array bounds"
+#~ msgstr "tabelindeks i startværdi overskrider tabelgrænser"
+
+#~ msgid "empty index range in initializer"
+#~ msgstr "tomt indeksinterval i startværdi"
+
+#~ msgid "array index range in initializer exceeds array bounds"
+#~ msgstr "tabelindeksinterval i startværdi overskrider tabelgrænser"
+
+#~ msgid "unknown field `%s' specified in initializer"
+#~ msgstr "ukendt felt '%s' angivet i startværdi"
+
+#~ msgid "initialized field with side-effects overwritten"
+#~ msgstr "klargjort felt med bivirkninger overskrevet"
+
+#~ msgid "excess elements in char array initializer"
+#~ msgstr "for mange elementer i char-tabelstartværdien"
+
+#~ msgid "excess elements in struct initializer"
+#~ msgstr "for mange elementer i struct-startværdi"
+
+#~ msgid "non-static initialization of a flexible array member"
+#~ msgstr "ikke-statisk klargøring af fleksibelt tabelmedlem"
+
+#~ msgid "excess elements in union initializer"
+#~ msgstr "for mange elementer i union-startværdi"
+
+#~ msgid "traditional C rejects initialization of unions"
+#~ msgstr "traditionel C forbyder tildeling af startværdi til unioner"
+
+#~ msgid "excess elements in array initializer"
+#~ msgstr "for mange elementer i tabelstartværdi"
+
+#~ msgid "excess elements in vector initializer"
+#~ msgstr "for mange elementer i vektorstartværdi"
+
+#~ msgid "excess elements in scalar initializer"
+#~ msgstr "for mange elementer i skalarstartværdi"
+
+#~ msgid "asm template is not a string constant"
+#~ msgstr "asm-sætning er ikke en strengkonstant"
+
+#~ msgid "invalid lvalue in asm statement"
+#~ msgstr "ugyldig venstreværdi i asm-sætning"
+
+#~ msgid "modification by `asm'"
+#~ msgstr "ændring af 'asm'"
+
+#~ msgid "function declared `noreturn' has a `return' statement"
+#~ msgstr "funktion der er erklæret 'noreturn' har en 'return'-sætning"
+
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "'return' uden nogen værdi i en funktion der ikke returnerer void"
+
+#~ msgid "`return' with a value, in function returning void"
+#~ msgstr "'return' med en værdi i en funktion der returnerer void"
+
+#~ msgid "return"
+#~ msgstr "returnering"
+
+#~ msgid "function returns address of local variable"
+#~ msgstr "funktion returnerer adressen på en lokal variabel"
+
+#~ msgid "switch quantity not an integer"
+#~ msgstr "switch-størrelsen er ikke et heltal"
+
+#~ msgid "`long' switch expression not converted to `int' in ISO C"
+#~ msgstr "'long'-udtryk i switch konverteres ikke til 'int' i ISO C"
+
+#~ msgid "case label not within a switch statement"
+#~ msgstr "case-etiket befinder sig ikke inden i en switch-sætning"
+
+#~ msgid "`default' label not within a switch statement"
+#~ msgstr "'default'-etiket befinder sig ikke inden i en switch-sætning"
+
+#~ msgid "inlining failed in call to `%s'"
+#~ msgstr "indlejring mislykkedes i kald til '%s'"
+
+#~ msgid "called from here"
+#~ msgstr "kaldt herfra"
+
+#~ msgid "can't inline call to `%s'"
+#~ msgstr "kan ikke indlejre kald til '%s'"
+
+#~ msgid "function call has aggregate value"
+#~ msgstr "funktionskald har en sammensat værdi"
+
+#~ msgid "Size of loop %d should be %d, not %d."
+#~ msgstr "Størrelsen af løkke %d burde være %d, ikke %d."
+
+#~ msgid "Bb %d do not belong to loop %d."
+#~ msgstr "Basisblok %d hører ikke til løkke %d."
+
+#~ msgid "Loop %d's header does not have exactly 2 entries."
+#~ msgstr "Løkke %d's hoved har ikke præcis 2 elementer."
+
+#~ msgid "Loop %d's latch does not have exactly 1 successor."
+#~ msgstr "Løkke %d's ende har ikke præcis 1 efterfølger."
+
+#~ msgid "Loop %d's latch does not have header as successor."
+#~ msgstr "Løkke %d's ende har ikke hoved som efterfølger."
+
+#~ msgid "Loop %d's latch does not belong directly to it."
+#~ msgstr "Løkke %d's ende tilhører ikke direkte løkken."
+
+#~ msgid "Loop %d's header does not belong directly to it."
+#~ msgstr "Løkke %d's hoved tilhører ikke direkte løkken."
+
+#~ msgid "bb %d on wrong place"
+#~ msgstr "basisblok %d ved et forkerte sted"
+
+#~ msgid "prev_bb of %d should be %d, not %d"
+#~ msgstr "prev_bb for %d bør være %d, ikke %d"
+
+#~ msgid "end insn %d for block %d not found in the insn stream"
+#~ msgstr "slutinstruktion %d for blok %d ikke fundet i instruktionsstrømmen"
+
+#~ msgid "insn %d is in multiple basic blocks (%d and %d)"
+#~ msgstr "instruktion %d er i flere basisblokke (%d og %d)"
+
+#~ msgid "head insn %d for block %d not found in the insn stream"
+#~ msgstr "hovedinstruktion %d for blok %d ikke fundet i instruktionsstrømmen"
+
+#~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
+#~ msgstr "verify_flow_info: REG_BR_PROB passer ikke til konf. %i %i"
+
+#~ msgid "verify_flow_info: Wrong count of block %i %i"
+#~ msgstr "verify_flow_info: Ukorrekt antal af blok %i %i"
+
+#~ msgid "verify_flow_info: Wrong frequency of block %i %i"
+#~ msgstr "verify_flow_info: Ukorrekt frekvens af blok %i %i"
+
+#~ msgid "verify_flow_info: Duplicate edge %i->%i"
+#~ msgstr "verify_flow_info: Dobbelt kant %i->%i"
+
+#~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+#~ msgstr "verify_flow_info: Ukorrekt sandsynlighed for kant %i->%i %i"
+
+#~ msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+#~ msgstr "verify_flow_info: Ukorrekt antal for kant %i->%i %i"
+
+#~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
+#~ msgstr "verify_flow_info: Ukorrekte blokke til fald-gennem %i->%i"
+
+#~ msgid "verify_flow_info: Incorrect fallthru %i->%i"
+#~ msgstr "verify_flow_info: Ukorrekt fald-gennem %i->%i"
+
+#~ msgid "wrong insn in the fallthru edge"
+#~ msgstr "forkert instruktion i fald-gennem-kant"
+
+#~ msgid "verify_flow_info: Basic block %d succ edge is corrupted"
+#~ msgstr "verify_flow_info: Efterfølgende kant til basisblok %d er ødelagt"
+
+#~ msgid "Missing REG_EH_REGION note in the end of bb %i"
+#~ msgstr "Mangler REG_EH_REGION-note i slutningen af basisblok %i"
+
+#~ msgid "Too many outgoing branch edges from bb %i"
+#~ msgstr "For mange udgående forgreningskanter fra basisblok %i"
+
+#~ msgid "Fallthru edge after unconditional jump %i"
+#~ msgstr "Fald gennem-kant efter ubetinget spring %i"
+
+#~ msgid "Wrong amount of branch edges after unconditional jump %i"
+#~ msgstr "Forkert antal forgreningskanter efter ubetinget spring %i"
+
+#~ msgid "Wrong amount of branch edges after conditional jump %i"
+#~ msgstr "Forkert antal forgreningskanter efter betinget spring %i"
+
+#~ msgid "Call edges for non-call insn in bb %i"
+#~ msgstr "Kaldekanter for ikke-kaldsinstruktion i basisblok %i"
+
+#~ msgid "Abnormal edges for no purpose in bb %i"
+#~ msgstr "Unormale kanter uden noget formål i basisblok %i"
+
+#~ msgid "missing barrier after block %i"
+#~ msgstr "manglende barriere efter blok %i"
+
+#~ msgid "basic block %d pred edge is corrupted"
+#~ msgstr "foregående kant til basisblok %d er ødelagt"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is NULL"
+#~ msgstr "instruktion %d inden i basisblok %d, men block_for_insn er NULL"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is %i"
+#~ msgstr "instruktion %d inden i basisblok %d, men block_for_insn er %i"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK %d i midten af basisblok %d"
+
+#~ msgid "in basic block %d:"
+#~ msgstr "i basisblok %d:"
+
+#~ msgid "flow control insn inside a basic block"
+#~ msgstr "strømkontrolinstruktion inden i en basisblok"
+
+#~ msgid "basic block %i edge lists are corrupted"
+#~ msgstr "kantlister til basisblok %i er ødelagt"
+
+#~ msgid "basic blocks not numbered consecutively"
+#~ msgstr "basisblokkene er ikke nummeret i rækkefølge"
+
+#~ msgid "insn outside basic block"
+#~ msgstr "instruktion uden for basisblok"
+
+#~ msgid "return not followed by barrier"
+#~ msgstr "returnering følges ikke af barriere"
+
+#~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+#~ msgstr "antallet af basisbloknoter i instruktionskæden (%d) != n_basic_blocks (%d)"
+
+#~ msgid "verify_flow_info failed"
+#~ msgstr "verify_flow_info mislykkedes"
+
+#~ msgid "internal error"
+#~ msgstr "intern fejl"
+
+#~ msgid "no arguments"
+#~ msgstr "ingen parametre"
+
+#~ msgid "fopen %s"
+#~ msgstr "fopen %s"
+
+#~ msgid "fclose %s"
+#~ msgstr "fclose %s"
+
+#~ msgid "collect2 version %s"
+#~ msgstr "collect2 version %s"
+
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%d konstruktionsfunktion(er) fundet\n"
+
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%d destruktionsfunktion(er) fundet\n"
+
+#~ msgid "%d frame table(s) found\n"
+#~ msgstr "%d rammetabel(ler) fundet\n"
+
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%s afsluttet af signal %d [%s]%s"
+
+#~ msgid "%s returned %d exit status"
+#~ msgstr "%s returnerede afslutningskoden %d"
+
+#~ msgid "[cannot find %s]"
+#~ msgstr "[kan ikke finde %s]"
+
+#~ msgid "cannot find `%s'"
+#~ msgstr "kan ikke finde '%s'"
+
+#~ msgid "redirecting stdout: %s"
+#~ msgstr "omdirigerer standard-ud: %s"
+
+#~ msgid "[Leaving %s]\n"
+#~ msgstr "[Efterlader %s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "write_c_file - output name is %s, prefix is %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "write_c_file - uddatanavnet er %s, præfikset er %s\n"
+
+#~ msgid "cannot find `nm'"
+#~ msgstr "kan ikke finde 'nm'"
+
+#~ msgid "pipe"
+#~ msgstr "pipe"
+
+#~ msgid "fdopen"
+#~ msgstr "fdopen"
+
+#~ msgid "dup2 %d 1"
+#~ msgstr "dup2 %d 1"
+
+#~ msgid "close %d"
+#~ msgstr "close %d"
+
+#~ msgid "execv %s"
+#~ msgstr "fejl under kørsel (vha. execv) af %s"
+
+#~ msgid "init function found in object %s"
+#~ msgstr "klargøringsfunktion fundet i objekt %s"
+
+#~ msgid "fini function found in object %s"
+#~ msgstr "afslutningsfunktion fundet i objekt %s"
+
+#~ msgid "fclose"
+#~ msgstr "fclose"
+
+#~ msgid "unable to open file '%s'"
+#~ msgstr "kunne ikke åbne filen '%s'"
+
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "kunne ikke få fat i oplysninger om filen '%s'"
+
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "kunne ikke indlæse filen '%s'"
+
+#~ msgid "not found\n"
+#~ msgstr "ikke fundet\n"
+
+#~ msgid "dynamic dependency %s not found"
+#~ msgstr "dynamisk afhængighed %s ikke fundet"
+
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "ugyldigt magisk tal i filen '%s'"
+
+#~ msgid "dynamic dependencies.\n"
+#~ msgstr "dynamiske afhængigheder.\n"
+
+#~ msgid "cannot find `ldd'"
+#~ msgstr "kan ikke finde 'ldd'"
+
+#~ msgid ""
+#~ "\n"
+#~ "ldd output with constructors/destructors.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ldd-uddata med konstruktions-/destruktionsfunktioner.\n"
+
+#~ msgid "unable to open dynamic dependency '%s'"
+#~ msgstr "kan ikke åbne den dynamiske afhængighed '%s'"
+
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s: ikke en COFF-fil"
+
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "%s: kan ikke åbnes som en COFF-fil"
+
+#~ msgid "library lib%s not found"
+#~ msgstr "biblioteket lib%s ikke fundet"
+
+#~ msgid "open %s"
+#~ msgstr "fejl ved åbning af %s"
+
+#~ msgid "incompatibilities between object file & expected values"
+#~ msgstr "uoverensstemmelser mellem objektfil og forventede værdier"
+
+#~ msgid ""
+#~ "\n"
+#~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Behandler symboltabel nr. %d, forskydning = 0x%.8lx, form = %s\n"
+
+#~ msgid "string section missing"
+#~ msgstr "strengsektion mangler"
+
+#~ msgid "section pointer missing"
+#~ msgstr "sektionshenvisning mangler"
+
+#~ msgid "no symbol table found"
+#~ msgstr "ingen symboltabel fundet"
+
+#~ msgid "no cmd_strings found"
+#~ msgstr "ingen cmd_strings fundet"
+
+#~ msgid ""
+#~ "\n"
+#~ "Updating header and load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Opdaterer hoved- og indlæsningskommandoer.\n"
+#~ "\n"
+
+#~ msgid "load command map, %d cmds, new size %ld.\n"
+#~ msgstr "indlæser kommandooversigt, %d kommandoer, ny størrelse %ld.\n"
+
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "skriver indlæsningskommandoer.\n"
+#~ "\n"
+
+#~ msgid "close %s"
+#~ msgstr "fejl ved lukning af %s"
+
+#~ msgid "could not convert 0x%l.8x into a region"
+#~ msgstr "kunne ikke konvertere 0x%l.8x til en region"
+
+#~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+#~ msgstr "%s-funktion, region %d, forskydning = %ld (0x%.8lx)\n"
+
+#~ msgid "bad magic number"
+#~ msgstr "ugyldigt magisk tal"
+
+#~ msgid "bad header version"
+#~ msgstr "ugyldig version af hovedet"
+
+#~ msgid "bad raw header version"
+#~ msgstr "ugyldig version af råhovedet"
+
+#~ msgid "raw header buffer too small"
+#~ msgstr "råhoved-mellemlager for småt"
+
+#~ msgid "old raw header file"
+#~ msgstr "gammel råhovedfil"
+
+#~ msgid "unsupported version"
+#~ msgstr "versionen er ikke understøttet"
+
+#~ msgid "unknown {de,en}code_mach_o_hdr return value %d"
+#~ msgstr "ukendt {de,en}code_mach_o_hdr returneringsværdi %d"
+
+#~ msgid "fstat %s"
+#~ msgstr "fejl ved egenskabsundersøgelse af filen %s"
+
+#~ msgid "lseek %s 0"
+#~ msgstr "fejl ved søgning til begyndelsen i filen %s"
+
+#~ msgid "read %s"
+#~ msgstr "fejl ved læsning af %s"
+
+#~ msgid "read %ld bytes, expected %ld, from %s"
+#~ msgstr "læste %ld byte, forventede %ld, fra %s"
+
+#~ msgid "msync %s"
+#~ msgstr "fejl ved synkronisering mellem hukommelse og disk af %s"
+
+#~ msgid "munmap %s"
+#~ msgstr "fejl ved fjernelse af %s fra hukommelsen"
+
+#~ msgid "write %s"
+#~ msgstr "fejl ved skrivning til %s"
+
+#~ msgid "wrote %ld bytes, expected %ld, to %s"
+#~ msgstr "skrev %ld byte, forventede %ld, til %s"
+
+#~ msgid ""
+#~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ "\n"
+#~ msgstr ""
+#~ ";; kombineringsstatistik: %d forsøg, %d udskiftninger (%d kræver ny plads),\n"
+#~ ";; %d vellykkede.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ msgstr ""
+#~ "\n"
+#~ ";; kombineringstotal: %d forsøg, %d udskiftninger (%d kræver ny plads),\n"
+#~ ";; %d succeser.\n"
+
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "kan ikke konverteres til en henvisningstype"
+
+#~ msgid "pointer value used where a floating point value was expected"
+#~ msgstr "en henvisningsværdi er angivet hvor der forventedes en kommatalsværdi"
+
+#~ msgid "aggregate value used where a float was expected"
+#~ msgstr "en værdi af en sammensat type er angivet hvor der forventedes et kommatal"
+
+#~ msgid "conversion to incomplete type"
+#~ msgstr "konvertering til en ufuldstændig type"
+
+#~ msgid "can't convert between vector values of different size"
+#~ msgstr "kan ikke konvertere vektorværdier af forskellige størrelser"
+
+#~ msgid "aggregate value used where an integer was expected"
+#~ msgstr "en værdi af en sammensat type er angivet hvor der forventedes et heltal"
+
+#~ msgid "pointer value used where a complex was expected"
+#~ msgstr "en henvisningsværdi er angivet hvor der forventedes et komplekst tal"
+
+#~ msgid "aggregate value used where a complex was expected"
+#~ msgstr "en værdi af en sammensat type er angivet hvor der forventedes et komplekst tal"
+
+#~ msgid "can't convert value to a vector"
+#~ msgstr "kan ikke konvertere værdi til en vektor"
+
+#~ msgid "ISO C++ does not permit \"%s\" in #if"
+#~ msgstr "ISO C++ tillader ikke \"%s\" i #if"
+
+#~ msgid "invalid character '%c' in #if"
+#~ msgstr "ugyldigt tegn '%c' i #if"
+
+#~ msgid "invalid character '\\%03o' in #if"
+#~ msgstr "ugyldigt tegn '\\%03o' i #if"
+
+#~ msgid "absolute file name in remap_filename"
+#~ msgstr "absolut filnavn i remap_filename"
+
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "ignorerer det ikke-eksisterende katalog \"%s\"\n"
+
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s: ikke et katalog"
+
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "ignorerer mere end én angivelse af kataloget \"%s\"\n"
+
+#~ msgid "  as it is a non-system directory that duplicates a system directory\n"
+#~ msgstr "  da det er et ikke-systemkatalog som dublerer et systemkatalog\n"
+
+#~ msgid "#include \"...\" search starts here:\n"
+#~ msgstr "#include \"...\"-søgning begynder her:\n"
+
+#~ msgid "#include <...> search starts here:\n"
+#~ msgstr "#include <...>-søgning begynder her:\n"
+
+#~ msgid "End of search list.\n"
+#~ msgstr "Slut på søgningslisten.\n"
+
+#~ msgid "<built-in>"
+#~ msgstr "<indbygget>"
+
+#~ msgid "<command line>"
+#~ msgstr "<kommandolinje>"
+
+#~ msgid "assertion missing after %s"
+#~ msgstr "et postulat mangler efter %s"
+
+#~ msgid "directory name missing after %s"
+#~ msgstr "et katalognavn mangler efter %s"
+
+#~ msgid "file name missing after %s"
+#~ msgstr "et filnavn mangler efter %s"
+
+#~ msgid "macro name missing after %s"
+#~ msgstr "et makronavn mangler efter %s"
+
+#~ msgid "path name missing after %s"
+#~ msgstr "navnet på en sti mangler efter %s"
+
+#~ msgid "-I- specified twice"
+#~ msgstr "-I- er angivet to gange"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "ingen linjeskift ved slutningen af filen"
+
+#~ msgid "unknown string token %s\n"
+#~ msgstr "ukendt strengsymbol %s\n"
+
+#~ msgid "non-hex digit '%c' in universal-character-name"
+#~ msgstr "'%c' der ikke er et hexadecimalt ciffer, optræder i universelt tegnnavn"
+
+#~ msgid "universal-character-name on EBCDIC target"
+#~ msgstr "universelt tegnnavn på EBCDIC-mål"
+
+#~ msgid "universal-character-name out of range"
+#~ msgstr "universelt tegnnavn uden for det gyldige interval"
+
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "ukendt undvigesekvensen '\\%03o'"
+
+#~ msgid "escape sequence out of range for its type"
+#~ msgstr "undvigesekvensen er uden for det gyldig interval for dens type"
+
+#~ msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+#~ msgstr "#import er forældet, brug en #ifndef-indpakning i inkluderingsfilen"
+
+#~ msgid "#pragma once is obsolete"
+#~ msgstr "'#pragma once' er forældet"
+
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "\"%s\" er ikke et gyldigt tilvalg til præprocessoren"
+
+#~ msgid "too many input files"
+#~ msgstr "for mange inddatafiler"
+
+#~ msgid ";; Processing block from %d to %d, %d sets.\n"
+#~ msgstr ";; Behandler blok fra %d til %d, %d mængder.\n"
+
+#~ msgid "((anonymous))"
+#~ msgstr "((anonym))"
+
+#~ msgid "%s: warnings being treated as errors\n"
+#~ msgstr "%s: advarsler bliver opfattet som fejl\n"
+
+#~ msgid "%s: %s: "
+#~ msgstr "%s: %s: "
+
+#~ msgid "%s "
+#~ msgstr "%s "
+
+#~ msgid " %s"
+#~ msgstr " %s"
+
+#~ msgid "At top level:"
+#~ msgstr "Ved øverste niveau:"
+
+#~ msgid "In member function `%s':"
+#~ msgstr "I medlemsfunktionen '%s':"
+
+#~ msgid "In function `%s':"
+#~ msgstr "I funktionen '%s':"
+
+#~ msgid "compilation terminated.\n"
+#~ msgstr "oversættelse afsluttede.\n"
+
+#~ msgid "%s:%d: confused by earlier errors, bailing out\n"
+#~ msgstr "%s:%d: forvirret af tidligere fejl, opgiver ævred\n"
+
+#~ msgid ""
+#~ "Please submit a full bug report,\n"
+#~ "with preprocessed source if appropriate.\n"
+#~ "See %s for instructions.\n"
+#~ msgstr ""
+#~ "Indsend venligst en komplet fejlrapport med\n"
+#~ "præprocesseret kildekode om nødvendigt.\n"
+#~ "Se %s for instruktioner.\n"
+
+#~ msgid "Internal compiler error: Error reporting routines re-entered.\n"
+#~ msgstr "Intern oversætterfejl: fejlrapporteringsrutiner blev kaldt igen.\n"
+
+#~ msgid "in %s, at %s:%d"
+#~ msgstr "i %s, ved %s:%d"
+
+#~ msgid "In file included from %s:%d"
+#~ msgstr "I filen inkluderet af %s:%d"
+
+# kommer til at stå neden under ovenstående, derfor "af"
+#~ msgid ""
+#~ ",\n"
+#~ "                 from %s:%d"
+#~ msgstr ""
+#~ ",\n"
+#~ "                   af %s:%d"
+
+#~ msgid ":\n"
+#~ msgstr ":\n"
+
+#~ msgid "`%s' is deprecated (declared at %s:%d)"
+#~ msgstr "'%s' er forældet (erklæret ved %s:%d)"
+
+#~ msgid "`%s' is deprecated"
+#~ msgstr "'%s' er forældet"
+
+#~ msgid "type is deprecated (declared at %s:%d)"
+#~ msgstr "type er forældet (erklæret ved %s:%d)"
+
+#~ msgid "type is deprecated"
+#~ msgstr "type er forældet"
+
+#~ msgid "dominator of %d should be %d, not %d"
+#~ msgstr "dominator for %d burde være %d, ikke %d"
+
+#~ msgid "DW_LOC_OP %s not implemented\n"
+#~ msgstr "DW_LOC_OP %s understøttes ikke\n"
+
+#~ msgid "internal regno botch: `%s' has regno = %d\n"
+#~ msgstr "internt reg.nr.-problem: '%s' har reg.nr. = %d\n"
+
+#~ msgid "support for the DWARF1 debugging format is deprecated"
+#~ msgstr "understøttelse for DWARF1-fejlanalyseringsformatet er forældet"
+
+#~ msgid "can't get current directory"
+#~ msgstr "kan ikke få fat i det aktuelle katalog"
+
+#~ msgid "can't access real part of complex value in hard register"
+#~ msgstr "kan ikke tilgå den reelle del af komplekst tal i et hardwareregister"
+
+#~ msgid "can't access imaginary part of complex value in hard register"
+#~ msgstr "kan ikke tilgå den imaginære del af komplekst tal i et hardwareregister"
+
+#~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
+#~ msgstr "ICE: emit_insn brugt hvor emit_jump_insn behøves:\n"
+
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "afbrudt i %s ved %s:%d"
+
+#~ msgid "exception handling disabled, use -fexceptions to enable"
+#~ msgstr "håndtering af undtagelser er slået fra, angiv -fexceptions for at slå dem til"
+
+#~ msgid "argument of `__builtin_eh_return_regno' must be constant"
+#~ msgstr "parameteren til '__builtin_eh_return_regno' skal være konstant"
+
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "__builtin_eh_return understøttes ikke på målarkitekturen"
+
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "stakgrænser understøttes ikke på målarkitekturen"
+
+#~ msgid "function using short complex types cannot be inline"
+#~ msgstr "funktioner der benytter short complex-typer, kan ikke indbygges"
+
+#~ msgid "unsupported wide integer operation"
+#~ msgstr "bred heltalsoperation understøttes ikke"
+
+#~ msgid "prior parameter's size depends on `%s'"
+#~ msgstr "foregående parameters størrelse afhænger af '%s'"
+
+#~ msgid "returned value in block_exit_expr"
+#~ msgstr "returnerede værdi i block_exit_expr"
+
+#~ msgid "cannot take the address of an unaligned member"
+#~ msgstr "kan ikke tage adressen af et ikke-justeret medlem"
+
+#~ msgid "negative insn length"
+#~ msgstr "negativ instruktionslængde"
+
+#~ msgid "could not split insn"
+#~ msgstr "kunne ikke dele instruktion"
+
+#~ msgid "invalid `asm': "
+#~ msgstr "ugyldig 'asm': "
+
+#~ msgid "nested assembly dialect alternatives"
+#~ msgstr "indlejrede alternativer for maskinkodedialekter"
+
+#~ msgid "unterminated assembly dialect alternative"
+#~ msgstr "uafsluttet alternativ for maskinkodedialekt"
+
+#~ msgid "operand number missing after %%-letter"
+#~ msgstr "operandtal mangler efter %%-letter"
+
+#~ msgid "operand number out of range"
+#~ msgstr "operandtal er uden for det gyldige interval"
+
+#~ msgid "invalid %%-code"
+#~ msgstr "ugyldig %%-kode"
+
+#~ msgid "`%%l' operand isn't a label"
+#~ msgstr "'%%l'-operand er ikke en etiket"
+
+#~ msgid "floating constant misused"
+#~ msgstr "kommatalskonstant misbrugt"
+
+#~ msgid "invalid expression as operand"
+#~ msgstr "ugyldigt udtryk som operand"
+
+#~ msgid "function might be possible candidate for attribute `noreturn'"
+#~ msgstr "funktion er muligvis en kandidat til egenskaben 'noreturn'"
+
+#~ msgid "`noreturn' function does return"
+#~ msgstr "funktion med egenskaben 'noreturn' returnerer"
+
+# RETMIG: dette må kunne gøres bedre
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "kontrol når til slutningen af ikke-void funktion"
+
+#~ msgid "Attempt to delete prologue/epilogue insn:"
+#~ msgstr "forsøg på at slette indledende/afsluttende instruktion:"
+
+#~ msgid "comparison is always %d due to width of bit-field"
+#~ msgstr "sammenligning er altid %d på grund af den begrænsede rækkevidde af bitfeltet"
+
+#~ msgid "comparison is always %d"
+#~ msgstr "sammenligning er altid %d"
+
+# RETMIG: det giver ikke mening
+#~ msgid "`or' of unmatched not-equal tests is always 1"
+#~ msgstr "'or' af uafbalancerede sammenligninger med forskellig fra er altid 1"
+
+#~ msgid "`and' of mutually exclusive equal-tests is always 0"
+#~ msgstr "'and' af udtryk der hver for sig udelukker hinanden, er altid 0"
+
+#~ msgid "size of variable `%s' is too large"
+#~ msgstr "størrelsen af variablen '%s' er for stor"
+
+#~ msgid "impossible constraint in `asm'"
+#~ msgstr "umulig begrænsing i 'asm'"
+
+#~ msgid "`%s' might be used uninitialized in this function"
+#~ msgstr "'%s' bliver måske brugt uden at have en startværdi i denne funktion"
+
+#~ msgid "variable `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "variablen '%s' bliver måske overskrevet af 'longjmp' eller 'vfork'"
+
+#~ msgid "argument `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "parameteren '%s' bliver måske overskrevet af 'longjmp' eller 'vfork'"
+
+#~ msgid "function returns an aggregate"
+#~ msgstr "funktion returnerer en værdi af en sammensat type"
+
+#~ msgid "unused parameter `%s'"
+#~ msgstr "ubenyttet parameter '%s'"
+
+#~ msgid "ambiguous abbreviation %s"
+#~ msgstr "tvetydig forkortelse %s"
+
+#~ msgid "incomplete `%s' option"
+#~ msgstr "ufuldstændigt tilvalg '%s'"
+
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "der mangler en parameter til tilvalget '%s'"
+
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "der er en parameter for meget til tilvalget '%s'"
+
+#~ msgid "Using built-in specs.\n"
+#~ msgstr "Benytter indbyggede specifikationer.\n"
+
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sætter specifikation %s til '%s'\n"
+#~ "\n"
+
+#~ msgid "Reading specs from %s\n"
+#~ msgstr "Læser specifikationer fra %s\n"
+
+#~ msgid "specs %%include syntax malformed after %ld characters"
+#~ msgstr "%%include-syntaks i specifikationer misdannet efter %ld tegn"
+
+#~ msgid "could not find specs file %s\n"
+#~ msgstr "kunne ikke finde specifikationsfilen %s\n"
+
+#~ msgid "specs %%rename syntax malformed after %ld characters"
+#~ msgstr "%%rename-syntaks i specifikationer misdannet efter %ld tegn"
+
+#~ msgid "specs %s spec was not found to be renamed"
+#~ msgstr "%s-specifikation i specifikationer kunne ikke findes til omdøbelse"
+
+#~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
+#~ msgstr "%s: forsøg på at omdøbe specifikation '%s' til allerede defineret specifikation '%s'"
+
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "omdøb specifikation %s til %s\n"
+
+#~ msgid ""
+#~ "spec is '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "specifikation er '%s'\n"
+#~ "\n"
+
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "ukendt %%-kommando i specifikationer efter %ld tegn"
+
+#~ msgid "specs file malformed after %ld characters"
+#~ msgstr "specifikationsfil misdannet efter %ld tegn"
+
+#~ msgid "spec file has no spec for linking"
+#~ msgstr "specifikationsfil har ingen specifikation til sammenkædning"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "-pipe understøttes ikke"
+
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr ""
+#~ "\n"
+#~ "Fortsæt, ja (y) eller nej (n)?"
+
+#~ msgid ""
+#~ "Internal error: %s (program %s)\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "Intern fejl: %s (programmet %s)\n"
+#~ "Indsend venligst en komplet fejlrapport.\n"
+#~ "Se %s for instruktioner."
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "Brug: %s [tilvalg] fil...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "Tilvalg:\n"
+
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr "  -pass-exit-codes         Afslut med den højeste fejlkode fra en fase\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   Vis disse oplysninger\n"
+
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "  --target-help            Vis målspecifikke kommandolinjetilvalg\n"
+
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "  (benyt '-v --help' for at vise kommandolinjetilvalg for underprocesser)\n"
+
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "  -dumpspecs               Vis alle de indbyggede specifikationsstrenge\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             Vis versionsnummeret af oversætteren\n"
+
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "  -dumpmachine             Vis oversætterens målprocessor\n"
+
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "  -print-search-dirs       Vis katalogerne i oversætterens søgesti\n"
+
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "  -print-libgcc-file-name  Vis navnet på oversætterens tilhørende bibliotek\n"
+
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "  -print-file-name=<bibl>  Vis den komplette sti til biblioteket <bibl>\n"
+
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "  -print-prog-name=<prog>  Vis den komplette sti til oversætterkomponenten <prog>\n"
+
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "  -print-multi-directory   Vis rodkataloget for versioner af libgcc\n"
+
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr ""
+#~ "  -print-multi-lib         Vis afbildningen mellem kommandolinjetilvalg og\n"
+#~ "                           flere bibliotekssøgekataloger\n"
+
+#~ msgid "  -print-multi-os-directory Display the relative path to OS libraries\n"
+#~ msgstr "  -print-multi-os-directory Vis den relative sti for OS-biblioteker\n"
+
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "  -Wa,<tilvalg>            Videregiv komma-adskilte <tilvalg> til maskinkodeoversætteren\n"
+
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "  -Wp,<tilvalg>            Videregiv komma-adskilte <tilvalg> til præprocessoren\n"
+
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "  -Wl,<tilvalg>            Videregiv komma-adskilte <tilvalg> til sammenkæderen\n"
+
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "  -Xlinker <para>          Videregiv <para> til sammenkæderen\n"
+
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "  -save-temps              Slet ikke midlertidige filer\n"
+
+#~ msgid "  -pipe                    Use pipes rather than intermediate files\n"
+#~ msgstr "  -pipe                    Brug datakanaler i stedet for midlertidige filer\n"
+
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "  -time                    Tag tid på udførslen af hver underproces\n"
+
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr "  -specs=<fil>             Overskriv indbyggede specifikationer med indholdet af <fil>\n"
+
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr "  -std=<standard>          Antag at inddatakildekoden er skrevet til <standard>\n"
+
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "  -B <katalog>             Tilføj katalog til oversætterens søgestier\n"
+
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr "  -b <maskine>             Kør GCC til målet <maskine>, hvis installeret\n"
+
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr "  -V <version>             Kør GCC med versionsnummeret <version>, hvis installeret\n"
+
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "  -v                       Vis de programmer der startes af oversætteren\n"
+
+#~ msgid "  -###                     Like -v but options quoted and commands not executed\n"
+#~ msgstr ""
+#~ "  -###                     Som '-v', men tilvalg anbringes i anførselstegn\n"
+#~ "                           og kommandoerne udføres ikke\n"
+
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr "  -E                       Forbehandl kun; oversæt og sammenkæd ikke\n"
+
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "  -S                       Oversæt kun; maskinekodeoversæt og sammenkæd ikke\n"
+
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "  -c                       Oversæt, også til maskinkode, men sammenkæd ikke\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <fil>                 Anbring uddataene i <fil>\n"
+
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissible languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behavior of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr ""
+#~ "  -x <sprog>               Angiv sproget for de følgende inddatafiler.\n"
+#~ "                           Tilladte sprog inkluderer: c c++ assembler none\n"
+#~ "                           'none' betyder at standardopførslen med at gætte\n"
+#~ "                           sproget på filendelsen udføres\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Tilvalg der begynder med -g, -f, -m, -O, -W eller --param bliver automatisk\n"
+#~ " givet videre til de forskellige underprocesser som %s starter. For at\n"
+#~ " videregive andre indstillinger til disse processer kan tilvalg på formen\n"
+#~ " '-W<bogstav>' bruges.\n"
+
+#~ msgid "`-%c' option must have argument"
+#~ msgstr "tilvalget '-%c' skal have en parameter"
+
+#~ msgid "couldn't run `%s': %s"
+#~ msgstr "kunne ikke køre '%s': %s"
+
+#~ msgid "%s (GCC) %s\n"
+#~ msgstr "%s (GCC) %s\n"
+
+#~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2003 Free Software Foundation, Inc.\n"
+
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.  There is NO\n"
+#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dette er et frit program; se kildekoden for kopieringsbetingelser. Der er\n"
+#~ "INGEN garanti; ikke engang for SALGBARHED eller BRUGBARHED TIL NOGET FORMÅL.\n"
+
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "der mangler en parameter til '-Xlinker'"
+
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "der mangler en parameter til '-l'"
+
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "der mangler en parameter til '-specs'"
+
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "der mangler en parameter til '-specs='"
+
+#~ msgid "`-%c' must come at the start of the command line"
+#~ msgstr "'-%c' skal være i begyndelsen af kommandolinjen"
+
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "der mangler en parameter til '-B'"
+
+#~ msgid "cannot specify -o with -c or -S and multiple compilations"
+#~ msgstr "kan ikke angive -o med -c eller -S og flere oversættelser"
+
+#~ msgid "warning: -pipe ignored because -save-temps specified"
+#~ msgstr "advarsel: -pipe ignoreret fordi -save-temps er angivet"
+
+#~ msgid "warning: -pipe ignored because -time specified"
+#~ msgstr "advarsel: -pipe ignoreret fordi -time er angivet"
+
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "der mangler en parameter til '-x'"
+
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "der mangler en parameter til '-%s'"
+
+#~ msgid "warning: `-x %s' after last input file has no effect"
+#~ msgstr "advarsel: '-x %s' efter den sidste inddatafil har ingen effekt"
+
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "ugyldig specifikation! Fejl i cc."
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "spec failure: '%%*' has not been initialized by pattern match"
+#~ msgstr "specifikationsfejl: '%%*' er ikke blevet klargjort af mønstersøgning"
+
+#~ msgid "warning: use of obsolete %%[ operator in specs"
+#~ msgstr "advarsel: forældet '%%['-operator benyttet i specifikationer"
+
+#~ msgid "Processing spec %c%s%c, which is '%s'\n"
+#~ msgstr "Behandler specifikation %c%s%c, som er '%s'\n"
+
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "specifikationsfejl: ukendt specifikationstilvalg '%c'"
+
+#~ msgid "unknown spec function `%s'"
+#~ msgstr "ukendt specifikationsfunktion '%s'"
+
+#~ msgid "error in args to spec function `%s'"
+#~ msgstr "fejl i parametre til specifikationsfunktion '%s'"
+
+#~ msgid "malformed spec function name"
+#~ msgstr "forkert udformet specifikationsfunktionsnavn"
+
+#~ msgid "no arguments for spec function"
+#~ msgstr "ingen parametre til specifikationsfunktion"
+
+#~ msgid "malformed spec function arguments"
+#~ msgstr "forkert udformede specifikationsfunktionsparametre"
+
+#~ msgid "mismatched braces in specs"
+#~ msgstr "uafbalancerede krøllede paranteser i specifikationer"
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "ukendt tilvalg '-%s'"
+
+#~ msgid "install: %s%s\n"
+#~ msgstr "installering: %s%s\n"
+
+#~ msgid "programs: %s\n"
+#~ msgstr "programmer: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "biblioteker: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "For fejlrapporteringsinstruktioner, se:\n"
+
+#~ msgid "Configured with: %s\n"
+#~ msgstr "Konfigureret med: %s\n"
+
+#~ msgid "Thread model: %s\n"
+#~ msgstr "Trådmodel: %s\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "GCC version %s\n"
+
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "GCC-styringsprogram version %s kører GCCc version %s\n"
+
+#~ msgid "no input files"
+#~ msgstr "ingen inddatafiler"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: %s-oversætter ikke installeret på dette system"
+
+#~ msgid "%s: linker input file unused because linking not done"
+#~ msgstr "%s: sammenkæderinddatafil ikke benyttet eftersom sammenkædning ikke blev foretaget"
+
+#~ msgid "language %s not recognized"
+#~ msgstr "sproget %s ikke genkendt"
+
+#~ msgid "internal gcc abort"
+#~ msgstr "intern GCC-afbrydelse"
+
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "Intern gcov afbrydelse.\n"
+
+#~ msgid ""
+#~ "Usage: gcov [OPTION]... SOURCEFILE\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brug: gcov [TILVALG]... KILDEFIL\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Print code coverage information.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Udskriv kodedækningsoplysninger.\n"
+#~ "\n"
+
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "  -h, --help                      Udskriv denne hjælp og afslut\n"
+
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "  -v, --version                   Udskriv versionsnummeret og afslut\n"
+
+#~ msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
+#~ msgstr "  -b, --branch-probabilities      Medtag forgreningssandsynligheder i uddata\n"
+
+#~ msgid ""
+#~ "  -c, --branch-counts             Given counts of branches taken\n"
+#~ "                                    rather than percentages\n"
+#~ msgstr "  -c, --branch-counts             Antal forgreninger taget i stedet for procenter\n"
+
+#~ msgid "  -n, --no-output                 Do not create an output file\n"
+#~ msgstr "  -n, --no-output                 Opret ikke en uddatafil\n"
+
+#~ msgid ""
+#~ "  -l, --long-file-names           Use long output file names for included\n"
+#~ "                                    source files\n"
+#~ msgstr "  -l, --long-file-names           Brug lange filnavne til inkluderede kildefiler\n"
+
+#~ msgid "  -f, --function-summaries        Output summaries for each function\n"
+#~ msgstr "  -f, --function-summaries        Udskriv sammendrag for hver funktion\n"
+
+#~ msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+#~ msgstr "  -o, --object-directory KAT|FIL  Søg efter objektfiler i KAT eller kaldt FIL\n"
+
+#~ msgid "  -p, --preserve-paths            Preserve all pathname components\n"
+#~ msgstr "  -p, --preserve-paths            Bevar alle stinavnskomponenter\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "For fejlrapporteringsinstruktioner, se:\n"
+#~ "%s.\n"
+
+#~ msgid "gcov (GCC) %s\n"
+#~ msgstr "gcov (GCC) %s\n"
+
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2001 Free Software Foundation, Inc.\n"
+
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "Kunne ikke åbne basisblokfilen %s.\n"
+
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "Kunne ikke åbne programstrømsgraffilen %s.\n"
+
+#~ msgid "Could not open data file %s.\n"
+#~ msgstr "Kunne ikke åbne datafilen %s.\n"
+
+#~ msgid "Assuming that all execution counts are zero.\n"
+#~ msgstr "Antager at alle kørselstællere er nul.\n"
+
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "Ingen kørbar kode associeret med filen %s.\n"
+
+#~ msgid "%s of %d lines executed in %s %s\n"
+#~ msgstr "%s af %d linjer udført i %s %s\n"
+
+#~ msgid "No executable lines in %s %s\n"
+#~ msgstr "Ingen kørbare linjer i %s %s\n"
+
+#~ msgid "%s of %d branches executed in %s %s\n"
+#~ msgstr "%s af %d forgreninger udført i %s %s\n"
+
+#~ msgid "%s of %d branches taken at least once in %s %s\n"
+#~ msgstr "%s af %d forgreninger valgt mindst én gang i %s %s\n"
+
+#~ msgid "No branches in %s %s\n"
+#~ msgstr "Ingen forgreninger i %s %s\n"
+
+#~ msgid "%s of %d calls executed in %s %s\n"
+#~ msgstr "%s af %d kald udført i %s %s\n"
+
+#~ msgid "No calls in %s %s\n"
+#~ msgstr "Ingen kald i %s %s\n"
+
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "brugte ikke alle grafens basisblokelementer, funktion %s\n"
+
+#~ msgid "block_num = %ld, num_blocks = %d\n"
+#~ msgstr "block_num = %ld, num_blocks = %d\n"
+
+#~ msgid "ERROR: unexpected line number %ld\n"
+#~ msgstr "Fejl: uventet linjenummer %ld\n"
+
+#~ msgid "ERROR: too many basic blocks in function %s\n"
+#~ msgstr "Fejl: for mange basisblokke i funktionen %s\n"
+
+#~ msgid "ERROR: out of range line number in function %s\n"
+#~ msgstr "Fejl: linjenummer uden for det gyldige interval i funktionen %s\n"
+
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "Kunne ikke åbne kildefilen %s.\n"
+
+#~ msgid "Warning: source file %s is newer than %s\n"
+#~ msgstr "Advarsel: kildefil %s er nyere end %s\n"
+
+#~ msgid "Unexpected EOF while reading source file %s.\n"
+#~ msgstr "Stødt på slutningen af kildefilen %s tidligere end forventet.\n"
+
+#~ msgid "call   %2d never executed\n"
+#~ msgstr "kald %2d aldrig udført\n"
+
+#~ msgid "call   %2d returns %s\n"
+#~ msgstr "kald %2d returnerer %s\n"
+
+#~ msgid "branch %2d never executed\n"
+#~ msgstr "forgrening %2d aldrig udført\n"
+
+#~ msgid "branch %2d taken %s\n"
+#~ msgstr "forgrening %2d valgt %s\n"
+
+#~ msgid "Creating %s.\n"
+#~ msgstr "Opretter %s.\n"
+
+#~ msgid "Error writing output file %s.\n"
+#~ msgstr "Fejl ved skrivning af uddatafilen %s.\n"
+
+#~ msgid "Could not open output file %s.\n"
+#~ msgstr "Kunne ikke åbne uddatafilen %s.\n"
+
+#~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+#~ msgstr "GCSE deaktiveret: %d > 1000 basisblokke og %d >= 20 kanter/basisblok"
+
+#~ msgid "GCSE disabled: %d basic blocks and %d registers"
+#~ msgstr "GCSE deaktiveret: %d basisblokke og %d registre"
+
+#~ msgid "Name `%s' contains quotes"
+#~ msgstr "Navnet '%s' indeholder citationstegn"
+
+#~ msgid "invalid string `%s' in define_cpu_unit"
+#~ msgstr "ugyldig streng '%s' i define_cpu_unit"
+
+#~ msgid "invalid string `%s' in define_query_cpu_unit"
+#~ msgstr "ugyldig streng '%s' i define_query_cpu_unit"
+
+#~ msgid "invalid string `%s' in define_bypass"
+#~ msgstr "ugyldig streng '%s' i define_bypass"
+
+#~ msgid "invalid first string `%s' in exclusion_set"
+#~ msgstr "ugyldig første streng '%s' i exclusion_set"
+
+#~ msgid "invalid second string `%s' in exclusion_set"
+#~ msgstr "ugyldig anden streng '%s' i exclusion_set"
+
+#~ msgid "invalid first string `%s' in presence_set"
+#~ msgstr "ugyldig første streng '%s' i presence_set"
+
+#~ msgid "invalid second string `%s' in presence_set"
+#~ msgstr "ugyldig anden streng '%s' i presence_set"
+
+#~ msgid "invalid first string `%s' in absence_set"
+#~ msgstr "ugyldig første streng '%s' i absence_set"
+
+#~ msgid "invalid second string `%s' in absence_set"
+#~ msgstr "ugyldig anden streng '%s' i absence_set"
+
+#~ msgid "invalid string `%s' in define_automaton"
+#~ msgstr "ugyldig streng '%s' i define_automaton"
+
+#~ msgid "invalid option `%s' in automata_option"
+#~ msgstr "ugyldigt tilvalg '%s' i automata_option"
+
+#~ msgid "garbage after ) in reservation `%s'"
+#~ msgstr "ragelse efter ) i reservering '%s'"
+
+#~ msgid "invalid `%s' in reservation `%s'"
+#~ msgstr "ugyldig '%s' i reservering '%s'"
+
+#~ msgid "repetition `%s' <= 1 in reservation `%s'"
+#~ msgstr "gentagelse '%s' <= 1 i reservering '%s'"
+
+#~ msgid "unit `%s' in exclusion is not declared"
+#~ msgstr "enhed '%s' i ekskludering er ikke erklæret"
+
+#~ msgid "`%s' in exclusion is not unit"
+#~ msgstr "'%s' i ekskludering er ikke enhed"
+
+#~ msgid "unit `%s' excludes itself"
+#~ msgstr "enheden '%s' ekskluderer sig selv"
+
+#~ msgid "units `%s' and `%s' in exclusion set belong to different automata"
+#~ msgstr "enhederne '%s' og '%s' i ekskluderingsmængde tilhører forskellige automater"
+
+#~ msgid "unit `%s' excludes and requires presence of `%s'"
+#~ msgstr "enheden '%s' ekskluderer og kræver tilstedeværelse af '%s'"
+
+#~ msgid "unit `%s' requires absence and presence of `%s'"
+#~ msgstr "enheden '%s' kræver tilstedeværelse og fravær af '%s'"
+
+#~ msgid "repeated declaration of automaton `%s'"
+#~ msgstr "gentaget erklæring af automaten '%s'"
+
+#~ msgid "define_insn_reservation `%s' has negative latency time"
+#~ msgstr "define_insn_reservation '%s' har negativ ventetid"
+
+#~ msgid "`%s' is already used as insn reservation name"
+#~ msgstr "`%s' bliver allerede benyttet som instruktionsreserveringsnavn"
+
+#~ msgid "define_bypass `%s - %s' has negative latency time"
+#~ msgstr "define_bypass '%s - %s' har negativ ventetid"
+
+#~ msgid "automaton `%s' is not declared"
+#~ msgstr "automaten '%s' er ikke erklæret"
+
+#~ msgid "define_unit `%s' without automaton when one defined"
+#~ msgstr "define_unit '%s' uden automat når en er defineret"
+
+#~ msgid "`%s' is declared as cpu unit"
+#~ msgstr "'%s' er erklæret som CPU-enhed"
+
+#~ msgid "`%s' is declared as cpu reservation"
+#~ msgstr "'%s' er erklæret som CPU-reservering"
+
+#~ msgid "repeated declaration of unit `%s'"
+#~ msgstr "gentaget erklæring af enheden '%s'"
+
+#~ msgid "repeated declaration of reservation `%s'"
+#~ msgstr "gentaget erklæring af reserveringen '%s'"
+
+#~ msgid "there is no insn reservation `%s'"
+#~ msgstr "der er ingen instruktionsreservering '%s'"
+
+#~ msgid "the same bypass `%s - %s' is already defined"
+#~ msgstr "den samme videreledning '%s - %s' er allerede defineret"
+
+#~ msgid "bypass `%s - %s' is already defined"
+#~ msgstr "videreledning '%s - %s' er allerede defineret"
+
+#~ msgid "automaton `%s' is not used"
+#~ msgstr "automat '%s' bliver ikke benyttet"
+
+#~ msgid "undeclared unit or reservation `%s'"
+#~ msgstr "ikke-erklæret enhed eller reservering '%s'"
+
+#~ msgid "unit `%s' is not used"
+#~ msgstr "enhed '%s' bliver ikke benyttet"
+
+#~ msgid "reservation `%s' is not used"
+#~ msgstr "reservering '%s' bliver ikke benyttet"
+
+#~ msgid "cycle in definition of reservation `%s'"
+#~ msgstr "cyklus i definering af reservering '%s'"
+
+#~ msgid "Units `%s' and `%s' should be in the same automaton"
+#~ msgstr "Enhederne '%s' og '%s' skal være i den samme automat"
+
+#~ msgid "-split has no argument."
+#~ msgstr "-split uden parametre"
+
+#~ msgid "option `-split' has not been implemented yet\n"
+#~ msgstr "tilvalget '-split' understøttes ikke endnu\n"
+
+#~ msgid "Automaton `%s': Insn `%s' will never be issued"
+#~ msgstr "Automat '%s': instruktion '%s' vil aldrig blive udført"
+
+#~ msgid "Insn `%s' will never be issued"
+#~ msgstr "Instruktion '%s' vil aldrig blive udført"
+
+#~ msgid "Errors in DFA description"
+#~ msgstr "Fejl i DFA-beskrivelse"
+
+#~ msgid "Error in writing DFA description file %s"
+#~ msgstr "Fejl ved skrivning af DFA-beskrivelsesfil %s"
+
+#~ msgid "No input file name."
+#~ msgstr "Intet inddatafilnavn."
+
+#~ msgid "can't open %s"
+#~ msgstr "kan ikke åbne %s"
+
+#~ msgid "fix_sched_param: unknown param: %s"
+#~ msgstr "fix_sched_param: ukendt parameter: %s"
+
+#~ msgid "function cannot be inline"
+#~ msgstr "funktion kan ikke indbygges"
+
+#~ msgid "varargs function cannot be inline"
+#~ msgstr "funktion med variabel parameterliste kan ikke indbygges"
+
+#~ msgid "function using alloca cannot be inline"
+#~ msgstr "funktion der bruger alloca, kan ikke indbygges"
+
+#~ msgid "function using setjmp cannot be inline"
+#~ msgstr "funktion der bruger setjmp, kan ikke indbygges"
+
+#~ msgid "function uses __builtin_eh_return"
+#~ msgstr "funktionen bruger __builtin_eh_return"
+
+#~ msgid "function with nested functions cannot be inline"
+#~ msgstr "funktion med indlejrede funktioner kan ikke indbygges"
+
+#~ msgid "function with label addresses used in initializers cannot inline"
+#~ msgstr "funktion hvor etiketadresser benyttes i klargøringer, kan ikke indbygges"
+
+#~ msgid "function too large to be inline"
+#~ msgstr "funktionen er for stor til at blive indbygget"
+
+#~ msgid "no prototype, and parameter address used; cannot be inline"
+#~ msgstr "ingen prototype, og parameteradressen benyttes; kan ikke indbygges"
+
+#~ msgid "inline functions not supported for this return value type"
+#~ msgstr "integrerede funktioner understøttes ikke for denne returværditype"
+
+#~ msgid "function with varying-size return value cannot be inline"
+#~ msgstr "funktioner med returværdier af varierende størrelse kan ikke indbygges"
+
+#~ msgid "function with varying-size parameter cannot be inline"
+#~ msgstr "funktioner med parametre af varierende størrelse kan ikke indbygges"
+
+#~ msgid "function with transparent unit parameter cannot be inline"
+#~ msgstr "funktioner med gennemsigtig union-parameter kan ikke indbygges"
+
+#~ msgid "function with computed jump cannot inline"
+#~ msgstr "funktioner med beregnede spring kan ikke indbygges"
+
+#~ msgid "function with nonlocal goto cannot be inline"
+#~ msgstr "funktioner med ikke-lokale goto'er kan ikke indbygges"
+
+#~ msgid "function with target specific attribute(s) cannot be inlined"
+#~ msgstr "funktioner med målspecifikke egenskaber kan ikke indbygges"
+
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "ugyldig parameter '%s'"
+
+#~ msgid "Profile does not match flowgraph of function %s (out of date?)"
+#~ msgstr "Profil passer ikke til flowgraph af funktionen %s (forældet?)"
+
+#~ msgid ".da file corrupted"
+#~ msgstr ".da-fil ødelagt"
+
+# 'prob' står for sandsynlighed
+#~ msgid "corrupted profile info: prob for %d-%d thought to be %d"
+#~ msgstr "ødelagte profilinfo: sandsynlighed for %d-%d menes at være %d"
+
+#~ msgid "file %s not found, execution counts assumed to be zero"
+#~ msgstr "filen %s ikke fundet, antager at kørselstællere er nul"
+
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s: intern afbrydelse\n"
+
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s: fejl ved skrivning til filen '%s': %s\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s: brug '%s [ -VqfnkN ] [ -i <istreng> ] [ filenavn ... ]'\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s: brug '%s [ -VqfnkNlgC ] [ -B <katalognavn> ] [ filnavn ... ]'\n"
+
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s: advarsel: ingen læseadgang til filen '%s'\n"
+
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s: advarsel: ingen skriveadgang til filen '%s'\n"
+
+#~ msgid "%s: warning: no write access for dir containing `%s'\n"
+#~ msgstr "%s: advarsel: ingen skriveadgang til kataloget der indeholder '%s'\n"
+
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s: ugyldigt filnavn: %s\n"
+
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s: %s: kan ikke finde ud af filens status: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: fatal error: aux info file corrupted at line %d\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: fatal fejl: hjælpeinformationsfilen er beskadiget ved linje %d\n"
+
+#~ msgid "%s:%d: declaration of function `%s' takes different forms\n"
+#~ msgstr "%s:%d: erklæringen af funktionen '%s' antager forskellige former\n"
+
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: oversætter '%s'\n"
+
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s: vent: %s\n"
+
+#~ msgid "%s: subprocess got fatal signal %d\n"
+#~ msgstr "%s: underprocessen modtog fatalt signal %d\n"
+
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s: %s afsluttede med status %d\n"
+
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s: advarsel: manglende SYSCALLS-fil '%s'\n"
+
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s: kan ikke læse hjælpeinformationsfilen '%s': %s\n"
+
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "%s: kan ikke få status for hjælpeinformationsfilen '%s': %s\n"
+
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "%s: kan ikke åbne hjælpeinformationsfilen '%s' til at læse fra: %s\n"
+
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s: fejl ved læsning af hjælpeinformationsfilen '%s': %s\n"
+
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s: fejl ved lukning af hjælpeinformationsfilen '%s': %s\n"
+
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s: kan ikke slette hjælpeinformationsfilen '%s': %s\n"
+
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: kan ikke slette filen '%s': %s\n"
+
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s: advarsel: kan ikke omdøbe filen '%s' til '%s': %s\n"
+
+#~ msgid "%s: conflicting extern definitions of '%s'\n"
+#~ msgstr "%s: modstridende eksterne definitioner af '%s'\n"
+
+#~ msgid "%s: declarations of '%s' will not be converted\n"
+#~ msgstr "%s: erklæringer af '%s' vil ikke blive omdannet\n"
+
+#~ msgid "%s: conflict list for '%s' follows:\n"
+#~ msgstr "%s: modstridene for '%s' følger:\n"
+
+#~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+#~ msgstr "%s: advarsel: bruger parameterlisten fra %s(%d) til funktionen '%s'\n"
+
+#~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+#~ msgstr "%s: %d: '%s' benyttet, men mangler i SYSCALLS\n"
+
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: %d: advarsel: ingen ekstern definition af '%s'\n"
+
+#~ msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+#~ msgstr "%s: advarsel: ingen statisk definition af '%s' i filen '%s'\n"
+
+#~ msgid "%s: multiple static defs of `%s' in file `%s'\n"
+#~ msgstr "%s: flere statiske definitioner af '%s' i filen '%s'\n"
+
+#~ msgid "%s: %d: warning: source too confusing\n"
+#~ msgstr "%s: %d: advarsel: koden er for forvirrende\n"
+
+#~ msgid "%s: %d: warning: varargs function declaration not converted\n"
+#~ msgstr "%s: %d: advarsel: funktionserklæring med variabel parameterliste er ikke omdannet\n"
+
+#~ msgid "%s: declaration of function `%s' not converted\n"
+#~ msgstr "%s: erklæringen af funktionen '%s' er ikke omdannet\n"
+
+#~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+#~ msgstr "%s: advarsel: for mange parameterlister i erklæringen af '%s'\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: advarsel: for få parameterlister i erklæringen af '%s'\n"
+
+#~ msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+#~ msgstr "%s: %d: advarsel: fandt '%s', men forventede '%s'\n"
+
+#~ msgid "%s: local declaration for function `%s' not inserted\n"
+#~ msgstr "%s: den lokale erklæring af funktionen '%s' er ikke indsat\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %d: warning: can't add declaration of `%s' into macro call\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %d: advarsel: kan ikke tilføje erklæringen af '%s' i makrokald\n"
+
+#~ msgid "%s: global declarations for file `%s' not inserted\n"
+#~ msgstr "%s: globale erklæringer for filen '%s' er ikke indsat\n"
+
+#~ msgid "%s: definition of function `%s' not converted\n"
+#~ msgstr "%s: definitionen af funktionen '%s' er ikke omdannet\n"
+
+#~ msgid "%s: %d: warning: definition of %s not converted\n"
+#~ msgstr "%s: %d: advarsel: definitionen af '%s' er ikke omdannet\n"
+
+#~ msgid "%s: found definition of `%s' at %s(%d)\n"
+#~ msgstr "%s: fandt definitionen af '%s' ved %s(%d)\n"
+
+#~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+#~ msgstr "%s: %d: advarsel: '%s' ekskluderet af forbehandlingen\n"
+
+#~ msgid "%s: function definition not converted\n"
+#~ msgstr "%s: funktionsdefinitionen er ikke omdannet\n"
+
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s: '%s' ikke omdannet\n"
+
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s: ville omdanne filen '%s'\n"
+
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "%s: omdanner filen '%s'\n"
+
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "%s: kan ikke få status for filen '%s': %s\n"
+
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: kan ikke åbne filen '%s' til at læse fra: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: fejl ved læsning af inddatafilen '%s': %s\n"
+
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s: kan ikke oprette/åbne oprydningsfilen '%s': %s\n"
+
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s: advarsel: filen '%s' er allerede gemt i '%s'\n"
+
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s: kan ikke kæde filen '%s' sammen med '%s': %s\n"
+
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "%s: kan ikke oprette/åbne uddatafilen '%s': %s\n"
+
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: kan ikke ændre tilstanden af filen '%s': '%s'\n"
+
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s: kan ikke få fat i arbejdskataloget: %s\n"
+
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: inddatafilnavn skal have '.c'-endelser: %s\n"
+
+#~ msgid "Didn't find a coloring.\n"
+#~ msgstr "Kunne ikke finde en farvning.\n"
+
+#~ msgid "output constraint %d must specify a single register"
+#~ msgstr "uddatabegrænsning %d skal angive et enkelt register"
+
+#~ msgid "output constraint %d cannot be specified together with \"%s\" clobber"
+#~ msgstr "uddatabegrænsning %d kan ikke angives samtidig med overskrivning af \"%s\""
+
+#~ msgid "output regs must be grouped at top of stack"
+#~ msgstr "uddataregistre skal grupperes i toppen af stakken"
+
+#~ msgid "implicitly popped regs must be grouped at top of stack"
+#~ msgstr "implicit aflæste registre skal grupperes i toppen af stakken"
+
+#~ msgid "output operand %d must use `&' constraint"
+#~ msgstr "uddataoperand %d skal bruge begrænsningen '&'"
+
+#~ msgid "can't use '%s' as a %s register"
+#~ msgstr "kan ikke bruge '%s' som et %s-register"
+
+#~ msgid "unknown register name: %s"
+#~ msgstr "ukendt registernavn: %s"
+
+#~ msgid "global register variable follows a function definition"
+#~ msgstr "en global registervariabel følger en funktionsdefinition"
+
+#~ msgid "register used for two global register variables"
+#~ msgstr "register brugt til to globale registervariabler"
+
+#~ msgid "call-clobbered register used for global register variable"
+#~ msgstr "kaldeoverskrevet register brugt til global registervariabel"
+
+#~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
+#~ msgstr "validate_value_data: [%u] Ugyldig next_regno til tom kæde (%u)"
+
+#~ msgid "validate_value_data: Loop in regno chain (%u)"
+#~ msgstr "validate_value_data: Løkke i registertalskæde (%u)"
+
+#~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
+#~ msgstr "validate_value_data: [%u] Ugyldig oldest_regno (%u)"
+
+#~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
+#~ msgstr "validate_value_data: [%u] Ikke-tomt register i kæde (%s %u %i)"
+
+#~ msgid "cannot reload integer constant operand in `asm'"
+#~ msgstr "kan ikke genindlæse heltalskonstantoperand i 'asm'"
+
+#~ msgid "impossible register constraint in `asm'"
+#~ msgstr "umulig registerbegrænsing i 'asm'"
+
+#~ msgid "`&' constraint used with no register class"
+#~ msgstr "'&'-begrænsning brugt uden registerklasse"
+
+#~ msgid "unable to generate reloads for:"
+#~ msgstr "kunne ikke generere genindlæsninger for:"
+
+#~ msgid "inconsistent operand constraints in an `asm'"
+#~ msgstr "inkonsistente operandbegræsninger i 'asm'"
+
+#~ msgid "frame size too large for reliable stack checking"
+#~ msgstr "rammestørrelse for stor til pålidelig stakkontrol"
+
+#~ msgid "try reducing the number of local variables"
+#~ msgstr "forsøg at reducere antallet af lokale variable"
+
+#~ msgid "can't find a register in class `%s' while reloading `asm'"
+#~ msgstr "kan ikke finde et register i klassen '%s' ved genindlæsning af 'asm'"
+
+#~ msgid "unable to find a register to spill in class `%s'"
+#~ msgstr "kan ikke finde et register at bortødsle i klassen '%s'"
+
+#~ msgid "this is the insn:"
+#~ msgstr "dette er instruktionen:"
+
+#~ msgid "`asm' operand requires impossible reload"
+#~ msgstr "'asm'-operand kræver umulig genindlæsning"
+
+#~ msgid "could not find a spill register"
+#~ msgstr "kunne ikke finde et register at bortødsle"
+
+#~ msgid "`asm' operand constraint incompatible with operand size"
+#~ msgstr "'asm'-operandbegrænsning ikke forenelig med operandstørrelse"
+
+#~ msgid "VOIDmode on an output"
+#~ msgstr "VOID-tilstand ved uddata"
+
+#~ msgid "output operand is constant in `asm'"
+#~ msgstr "uddataoperand er konstant i 'asm'"
+
+#~ msgid "unrecognizable insn:"
+#~ msgstr "ukendt instruktion:"
+
+#~ msgid "insn does not satisfy its constraints:"
+#~ msgstr "instruktion tilfredsstiller ikke sine begrænsninger:"
+
+#~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: tilgang til udtrykstræ %d fra '%s' med sidste udtrykstræ %d i %s, ved %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: forventede udtrykstræ %d type '%c', har '%c' (registeroverførselsudtryk %s) i %s, ved %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: forventede udtrykstræ %d type '%c' eller '%c', har '%c' (registeroverførselsudtryk %s) i %s, ved %s:%d"
+
+#~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: forventede koden '%s', har '%s' i %s, ved %s:%d"
+
+#~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: forventede koden '%s' eller '%s', har '%s' i %s, ved %s:%d"
+
+#~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: tilgang til udtrykstræ %d af vektor hvis sidste udtrykstræ er %d i %s, ved %s:%d"
+
+#~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d"
+#~ msgstr "RTL-flagskontrol: %s benyttet med uventet rtx-kode '%s' i %s, ved %s:%d"
+
+#~ msgid "jump to `%s' invalidly jumps into binding contour"
+#~ msgstr "spring til '%s' rammer på ugyldig vis ind i bindingskontur"
+
+#~ msgid "label `%s' used before containing binding contour"
+#~ msgstr "etiket '%s' brugt før indholdende bindingskontur"
+
+#~ msgid "output operand constraint lacks `='"
+#~ msgstr "uddataoperandbegrænsning mangler '='"
+
+#~ msgid "output constraint `%c' for operand %d is not at the beginning"
+#~ msgstr "uddatabegrænsning '%c' for operanden %d er ikke ved begyndelsen"
+
+#~ msgid "operand constraint contains incorrectly positioned '+' or '='"
+#~ msgstr "operandbegrænsning indeholder forkert placeret '+' eller '='"
+
+#~ msgid "`%%' constraint used with last operand"
+#~ msgstr "'%%'-begrænsning brugt med sidste operand"
+
+#~ msgid "matching constraint not valid in output operand"
+#~ msgstr "begrænsningen er ikke gyldig for uddataoperanden"
+
+#~ msgid "input operand constraint contains `%c'"
+#~ msgstr "inddataoperandbegrænsningen indeholder '%c'"
+
+#~ msgid "matching constraint references invalid operand number"
+#~ msgstr "begrænsning refererer til et ugyldigt operandtal"
+
+#~ msgid "invalid punctuation `%c' in constraint"
+#~ msgstr "ugyldig punktuering '%c' i begrænsning"
+
+#~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list"
+#~ msgstr "asm-anvisning for variablen '%s' strider mod asm-overskrivelsesliste"
+
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "ukendt registernavn '%s' i 'asm'"
+
+#~ msgid "more than %d operands in `asm'"
+#~ msgstr "mere end %d operander i 'asm'"
+
+#~ msgid "output number %d not directly addressable"
+#~ msgstr "uddata nr. %d kan ikke adresseres direkte"
+
+#~ msgid "asm operand %d probably doesn't match constraints"
+#~ msgstr "'asm'-operand %d passer sandsynligvis ikke til begrænsninger"
+
+#~ msgid "asm clobber conflict with output operand"
+#~ msgstr "asm-overskrivelse er i modstrid med uddataoperander"
+
+#~ msgid "asm clobber conflict with input operand"
+#~ msgstr "asm-overskrivelse er i modstrid med inddataoperander"
+
+#~ msgid "too many alternatives in `asm'"
+#~ msgstr "for mange alternativer i 'asm'"
+
+#~ msgid "operand constraints for `asm' differ in number of alternatives"
+#~ msgstr "operandbegrænsninger til 'asm' har forskellige antal alternativer"
+
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "'asm'-operandnavnet '%s' optræder mere end én gang"
+
+#~ msgid "missing close brace for named operand"
+#~ msgstr "manglende afsluttende krøllet parantes til navngiven operand"
+
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "ikkedefineret navngiven operand '%s'"
+
+#~ msgid "unused variable `%s'"
+#~ msgstr "ubrugt variabel '%s'"
+
+#~ msgid "enumeration value `%s' not handled in switch"
+#~ msgstr "enum-værdien '%s' håndteres ikke i switch-sætning"
+
+#~ msgid "case value `%ld' not in enumerated type"
+#~ msgstr "case-værdien '%ld' eksisterer ikke i enum-type"
+
+#~ msgid "case value `%ld' not in enumerated type `%s'"
+#~ msgstr "case-værdien '%ld' eksisterer ikke i enum-typen '%s'"
+
+#~ msgid "switch missing default case"
+#~ msgstr "switch-konstruktion mangler default"
+
+#~ msgid "type size can't be explicitly evaluated"
+#~ msgstr "det er ikke muligt eksplicit at finde typens størrelse"
+
+#~ msgid "variable-size type declared outside of any function"
+#~ msgstr "en type med en variabel størrelse er erklæret uden for en funktion"
+
+#~ msgid "size of `%s' is %d bytes"
+#~ msgstr "størrelsen af '%s' er %d byte"
+
+#~ msgid "size of `%s' is larger than %d bytes"
+#~ msgstr "størrelsen af '%s' er større end %d byte"
+
+#~ msgid "packed attribute causes inefficient alignment for `%s'"
+#~ msgstr "packed-egenskab forårsager ineffektiv justering af '%s'"
+
+#~ msgid "packed attribute is unnecessary for `%s'"
+#~ msgstr "packed-egenskab er unødvendig for '%s'"
+
+#~ msgid "padding struct to align `%s'"
+#~ msgstr "udfylder struct for at justere '%s'"
+
+#~ msgid "padding struct size to alignment boundary"
+#~ msgstr "udfylder struct-størrelse til justeringskant"
+
+#~ msgid "packed attribute causes inefficient alignment"
+#~ msgstr "packed-egenskab forårsager ineffektiv justering"
+
+#~ msgid "packed attribute is unnecessary"
+#~ msgstr "packed-egenskab er unødvendig"
+
+#~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'"
+#~ msgstr "kan ikke udføre timevar_pop '%s' når toppen af timevars-stakken er '%s'"
+
+#~ msgid ""
+#~ "\n"
+#~ "Execution times (seconds)\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Udførselstid (sekunder)\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "collect: reading %s\n"
+#~ msgstr "collect: læser %s\n"
+
+#~ msgid "collect: recompiling %s\n"
+#~ msgstr "collect: genoversætter '%s'\n"
+
+# RETMIG: rigtigt?
+#~ msgid "collect: tweaking %s in %s\n"
+#~ msgstr "collect: presser %s i %s\n"
+
+#~ msgid "collect: relinking\n"
+#~ msgstr "collect: kæder sammen igen\n"
+
+#~ msgid "ld returned %d exit status"
+#~ msgstr "ld returnerede afslutningskoden %d"
+
+#~ msgid "Generate debugging info in default format"
+#~ msgstr "Generér fejlfindingsinfo i standardformat"
+
+#~ msgid "Generate debugging info in default extended format"
+#~ msgstr "Generér fejlfindingsinfo i udvidet standardformat"
+
+#~ msgid "Generate STABS format debug info"
+#~ msgstr "Generér fejlfindingsinfo i STABS-format"
+
+#~ msgid "Generate extended STABS format debug info"
+#~ msgstr "Generér fejlfindingsinfo i udvidet STABS-format"
+
+#~ msgid "Generate DWARF-1 format debug info"
+#~ msgstr "Generér fejlfindingsinfo i DWARF-1-format"
+
+#~ msgid "Generate extended DWARF-1 format debug info"
+#~ msgstr "Generér fejlfindingsinfo i udvidet DWARF-1-format"
+
+#~ msgid "Generate DWARF-2 debug info"
+#~ msgstr "Generér fejlfindingsinfo i DWARF-2-format"
+
+#~ msgid "Generate XCOFF format debug info"
+#~ msgstr "Generér fejlfindingsinfo i XCOFF-format"
+
+#~ msgid "Generate extended XCOFF format debug info"
+#~ msgstr "Generér fejlfindingsinfo i udvidet XCOFF-format"
+
+#~ msgid "Generate COFF format debug info"
+#~ msgstr "Generér fejlfindingsinfo i COFF-format"
+
+#~ msgid "Generate VMS format debug info"
+#~ msgstr "Generér fejlfindingsinfo i VMS-format"
+
+#~ msgid "Perform DWARF2 duplicate elimination"
+#~ msgstr "Udfør DWARF2-eliminering af dubletter"
+
+#~ msgid "Do not store floats in registers"
+#~ msgstr "Lagr ikke kommatal i registre"
+
+#~ msgid "Consider all mem refs through pointers as volatile"
+#~ msgstr "Betragt alle hukommelsesferencer gennem henvisninger som volatile"
+
+#~ msgid "Consider all mem refs to global data to be volatile"
+#~ msgstr "Betragt alle hukommelsesferencer til globale data som volatile"
+
+#~ msgid "Consider all mem refs to static data to be volatile"
+#~ msgstr "Betragt alle hukommelsesferencer til statiske data som volatile"
+
+#~ msgid "Defer popping functions args from stack until later"
+#~ msgstr "Vent med fjernelse af funktionsparametre fra stakken til senere"
+
+#~ msgid "When possible do not generate stack frames"
+#~ msgstr "Generér ikke stakrammer når det kan undgås"
+
+#~ msgid "Optimize sibling and tail recursive calls"
+#~ msgstr "Optimér søskende- og halerekursive kald"
+
+#~ msgid "Perform superblock formation via tail duplication"
+#~ msgstr "Udfør superbloksformering vha. haleduplikering"
+
+# RETMIG: hvad er CSE?
+#~ msgid "When running CSE, follow jumps to their targets"
+#~ msgstr "Ved kørsel af CSE følg spring til deres mål"
+
+#~ msgid "When running CSE, follow conditional jumps"
+#~ msgstr "Ved kørsel af CSE følg betingede spring"
+
+#~ msgid "Perform a number of minor, expensive optimizations"
+#~ msgstr "Udfør et antal mindre, dyre optimeringer"
+
+#~ msgid "Perform jump threading optimizations"
+#~ msgstr "Udfør springtrådningsoptimeringer"
+
+#~ msgid "Perform strength reduction optimizations"
+#~ msgstr "Udfør styrkereduceringsoptimeringer"
+
+#~ msgid "Perform loop unrolling when iteration count is known"
+#~ msgstr "Udfør løkkeudrulning når iterationsantallet er kendt"
+
+#~ msgid "Perform loop unrolling for all loops"
+#~ msgstr "Udfør løkkeudrulning for alle løkker"
+
+#~ msgid "Generate prefetch instructions, if available, for arrays in loops"
+#~ msgstr "Generér præhentningsinstruktioner, hvis tilgængelige, for tabeller i løkker"
+
+#~ msgid "Force all loop invariant computations out of loops"
+#~ msgstr "Tving alle løkkeinvariansberegninger ud af løkker"
+
+#~ msgid "Strength reduce all loop general induction variables"
+#~ msgstr "Styrkereducér alle generelle løkkeinduktionsvariabler"
+
+#~ msgid "Store strings in writable data section"
+#~ msgstr "Gem strenge i en skrivbar datasektion"
+
+#~ msgid "Enable machine specific peephole optimizations"
+#~ msgstr "Aktivér maskinspecifikke kighulsoptimeringer"
+
+#~ msgid "Copy memory operands into registers before using"
+#~ msgstr "Kopiér hukommelsesoperander ind i registre før brug"
+
+#~ msgid "Copy memory address constants into regs before using"
+#~ msgstr "Kopiér hukommelsesadressekonstanter ind i registre før brug"
+
+#~ msgid "Allow function addresses to be held in registers"
+#~ msgstr "Tillad funktionsadresser at blive opbevaret i registre"
+
+#~ msgid "Integrate simple functions into their callers"
+#~ msgstr "Integrér simple funktioner i deres kaldere"
+
+#~ msgid "Generate code for funcs even if they are fully inlined"
+#~ msgstr "Generér kode for funktioner selv hvis de indlejres helt"
+
+#~ msgid "Pay attention to the 'inline' keyword"
+#~ msgstr "Læg mærke til 'inline'-nøgleordet"
+
+#~ msgid "Emit static const variables even if they are not used"
+#~ msgstr "Konstruér statiske, konstante variabler selv hvis de ikke bruges"
+
+#~ msgid "Check for syntax errors, then stop"
+#~ msgstr "Kontrollér syntaks og stop derefter"
+
+#~ msgid "Mark data as shared rather than private"
+#~ msgstr "Markér data som delt snarere end privat"
+
+#~ msgid "Enable saving registers around function calls"
+#~ msgstr "Aktivér gemning af registrer omkring funktionskald"
+
+#~ msgid "Return 'short' aggregates in memory, not registers"
+#~ msgstr "Returnér små sammensatte værdier i hukommelsen, ikke i registre"
+
+#~ msgid "Return 'short' aggregates in registers"
+#~ msgstr "Returnér små sammensatte værdier i registre"
+
+#~ msgid "Attempt to fill delay slots of branch instructions"
+#~ msgstr "Forsøg at udfylde ventepladser med forgreningsinstruktioner"
+
+#~ msgid "Perform the global common subexpression elimination"
+#~ msgstr "Udfør global eliminering af fælles underudtryk"
+
+#~ msgid "Perform enhanced load motion during global subexpression elimination"
+#~ msgstr "Udfør forbedret indlæsningsbevægelse under eliminering af fælles underudtryk"
+
+#~ msgid "Perform store motion after global subexpression elimination"
+#~ msgstr "Udfør lagringsbevægelse efter eliminering af fælles underudtryk"
+
+#~ msgid "Perform the loop optimizations"
+#~ msgstr "Udfør løkkeoptimeringerne"
+
+#~ msgid "Perform cross-jumping optimization"
+#~ msgstr "Udfør krydsspringsoptimering"
+
+#~ msgid "Perform conversion of conditional jumps to branchless equivalents"
+#~ msgstr "Udfør konvertering af betingede spring til forgreningsløse ækvivalenter"
+
+#~ msgid "Perform conversion of conditional jumps to conditional execution"
+#~ msgstr "Udfør konvertering af betingede spring til betinget udførsel"
+
+#~ msgid "Run CSE pass after loop optimizations"
+#~ msgstr "Kør CSE-fase efter løkkeoptimeringer"
+
+#~ msgid "Run the loop optimizer twice"
+#~ msgstr "Kør løkkeoptimeringen to gange"
+
+#~ msgid "Delete useless null pointer checks"
+#~ msgstr "Fjern ubrugelige nul-henvisningstjek"
+
+#~ msgid "Reschedule instructions before register allocation"
+#~ msgstr "Omplanlæg instruktioner før registerallokering"
+
+#~ msgid "Reschedule instructions after register allocation"
+#~ msgstr "Omplanlæg instruktioner efter registerallokering"
+
+#~ msgid "Enable scheduling across basic blocks"
+#~ msgstr "Aktivér planlægning over basisblokke"
+
+#~ msgid "Allow speculative motion of non-loads"
+#~ msgstr "Tillad spekulativ bevægelse af ikke-indlæsninger"
+
+#~ msgid "Allow speculative motion of some loads"
+#~ msgstr "Tillad spekulativ bevægelse af nogle indlæsninger"
+
+#~ msgid "Allow speculative motion of more loads"
+#~ msgstr "Tillad spekulativ bevægelse af flere indlæsninger"
+
+# RETMIG: rigtig?
+#~ msgid "Replace add,compare,branch with branch on count reg"
+#~ msgstr "Erstat tilføj,sammenlign,forgrening med forgrening på tælleregister"
+
+#~ msgid "Generate position independent code, if possible"
+#~ msgstr "Generér placeringsuafhængig kode, om muligt"
+
+#~ msgid "Enable exception handling"
+#~ msgstr "Aktivér undtagelseshåndtering"
+
+#~ msgid "Just generate unwind tables for exception handling"
+#~ msgstr "Generér blot afvindingstabeller for undtagelseshåndtering"
+
+#~ msgid "Generate unwind tables exact at each instruction boundary"
+#~ msgstr "Generér afvindingstabeller eksakt for hver instruktionsgrænse"
+
+#~ msgid "Support synchronous non-call exceptions"
+#~ msgstr "Understøt synkrone ikke-kaldende undtagelser"
+
+#~ msgid "Insert arc based program profiling code"
+#~ msgstr "Indsæt buebaseret programprofileringskode"
+
+#~ msgid "Create data files needed by gcov"
+#~ msgstr "Opret datafiler som gcov har brug for"
+
+#~ msgid "Use profiling information for branch probabilities"
+#~ msgstr "Benyt profileringsoplysninger til forgreningssandsynligheder"
+
+#~ msgid "Enable basic program profiling code"
+#~ msgstr "Aktivér basal programprofileringskode"
+
+#~ msgid "Reorder basic blocks to improve code placement"
+#~ msgstr "Omordn basisblokke for at forbedre kodeplacering"
+
+#~ msgid "Reorder functions to improve code placement"
+#~ msgstr "Omordn funktioner for at forbedre kodeplacering"
+
+#~ msgid "Do the register renaming optimization pass"
+#~ msgstr "Foretag registeromdøbningsoptimering"
+
+#~ msgid "Do the register copy-propagation optimization pass"
+#~ msgstr "Foretag registerkopipropageringsoptimering"
+
+#~ msgid "Do not put uninitialized globals in the common section"
+#~ msgstr "Anbring ikke uklargjorte globale variabler i den fælles sektion"
+
+#~ msgid "Do not generate .size directives"
+#~ msgstr "Generér ikke .size-direktiver"
+
+#~ msgid "place each function into its own section"
+#~ msgstr "placér hver funktion i dens egen sektion"
+
+#~ msgid "place data items into their own section"
+#~ msgstr "placér dataelementer i deres egen sektion"
+
+#~ msgid "Add extra commentary to assembler output"
+#~ msgstr "Tilføj ekstra kommentarer til menneskeligt læsbar maskinkodeuddata"
+
+#~ msgid "Output GNU ld formatted global initializers"
+#~ msgstr "Udskriv GNU ld-formaterede globale startværdier"
+
+#~ msgid "Enables a register move optimization"
+#~ msgstr "Aktivér en registerflytningsoptimering"
+
+#~ msgid "Do the full regmove optimization pass"
+#~ msgstr "Foretag en komplet registerflytningsoptimering"
+
+#~ msgid "Pack structure members together without holes"
+#~ msgstr "Pak strukturmedlemmer sammen uden mellemrum"
+
+#~ msgid "Insert stack checking code into the program"
+#~ msgstr "Indsæt stakkontrolleringskode i programmet"
+
+#~ msgid "Specify that arguments may alias each other & globals"
+#~ msgstr "Angiv at parametre kan være aliaser for hinanden og for globale variable"
+
+#~ msgid "Assume arguments may alias globals but not each other"
+#~ msgstr "Antag at parametre kan være aliaser for globale variable, men ikke for hinanden"
+
+#~ msgid "Assume arguments do not alias each other or globals"
+#~ msgstr "Antag at parametre ikke er aliaser for hinanden eller for globale variable"
+
+#~ msgid "Assume strict aliasing rules apply"
+#~ msgstr "Antag at strenge aliasregler skal anvendes"
+
+#~ msgid "Align the start of loops"
+#~ msgstr "Justér begyndelsen af løkker"
+
+#~ msgid "Align labels which are only reached by jumping"
+#~ msgstr "Justér etiketter som kun nås ved spring"
+
+#~ msgid "Align all labels"
+#~ msgstr "Justér alle etiketter"
+
+#~ msgid "Align the start of functions"
+#~ msgstr "Justér begyndelsen af funktioner"
+
+#~ msgid "Attempt to merge identical constants across compilation units"
+#~ msgstr "Forsøg at forene identiske konstanter over forskellige oversættelsesenheder"
+
+#~ msgid "Attempt to merge identical constants and constant variables"
+#~ msgstr "Forsøg at forene identiske konstanter og konstante variabler"
+
+#~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps"
+#~ msgstr "Undtryk udskrift af instruktionstal og linjenummernoter i fejlfindingsdump"
+
+#~ msgid "Instrument function entry/exit with profiling calls"
+#~ msgstr "Instrumentér funktionsindgange/-afslutninger med profileringskald"
+
+#~ msgid "Put zero initialized data in the bss section"
+#~ msgstr "Anbring nul-klargjorte data i bss-sektionen"
+
+#~ msgid "Enable SSA optimizations"
+#~ msgstr "Aktivér SSA-optimeringer"
+
+#~ msgid "Enable SSA conditional constant propagation"
+#~ msgstr "Aktivér betinget konstant SSA-propagering"
+
+#~ msgid "Enable aggressive SSA dead code elimination"
+#~ msgstr "Aktivér aggressiv SSA-eliminering af ubrugt kode"
+
+#~ msgid "External symbols have a leading underscore"
+#~ msgstr "Eksterne symboler har indledende understreg"
+
+#~ msgid "Process #ident directives"
+#~ msgstr "Behandl #ident-direktiver"
+
+#~ msgid "Enables an rtl peephole pass run before sched2"
+#~ msgstr "Aktivér en RTL-kikhulsfase før sched2"
+
+#~ msgid "Assume no NaNs or +-Infs are generated"
+#~ msgstr "Antag at ingen NaN eller +-Inf bliver genereret"
+
+#~ msgid "Enables guessing of branch probabilities"
+#~ msgstr "Aktivér gæt af forgreningssandsynligheder"
+
+#~ msgid "Set errno after built-in math functions"
+#~ msgstr "Sæt errno efter indbyggede matematikfunktioner"
+
+#~ msgid "Floating-point operations can trap"
+#~ msgstr "Kommatalsoperationer kan fange"
+
+#~ msgid "Allow math optimizations that may violate IEEE or ANSI standards"
+#~ msgstr "Tillad matematikoptimeringer der kan overtræde IEEE- eller ANSI-standarderne"
+
+#~ msgid "Disable optimizations observable by IEEE signaling NaNs"
+#~ msgstr "Deaktivér optimeringer som kan opdages ved IEEE-signalerende NaN'er"
+
+#~ msgid "Generate code to check bounds before indexing arrays"
+#~ msgstr "Generér kode til at kontrollere grænserne før tabeller indekseres"
+
+#~ msgid "Convert floating point constant to single precision constant"
+#~ msgstr "Konvertér kommatalskonstanter til enkeltpræcisionskonstanter"
+
+#~ msgid "Report time taken by each compiler pass at end of run"
+#~ msgstr "Rapportér den tid det tager for hver oversættelsesfase ved afslutningen af kørslen"
+
+#~ msgid "Report on permanent memory allocation at end of run"
+#~ msgstr "Rapportér om permanente hukommelsesallokering ved afslutningen af kørslen"
+
+#~ msgid "Trap for signed overflow in addition / subtraction / multiplication"
+#~ msgstr "Opsæt fælde for overløb med fortegn i addition/subtraktion/multiplikation"
+
+#~ msgid "Use graph coloring register allocation."
+#~ msgstr "Allokér registre vha. graffarvning"
+
+#~ msgid "Compile just for ISO C90"
+#~ msgstr "Oversæt kun til ISO C90"
+
+#~ msgid "Determine language standard"
+#~ msgstr "Bestem sprogstandarden"
+
+#~ msgid "Make bit-fields by unsigned by default"
+#~ msgstr "Lad bitfelter være uden fortegn som standard"
+
+#~ msgid "Make 'char' be signed by default"
+#~ msgstr "Lad 'char' være med fortegn som standard"
+
+#~ msgid "Make 'char' be unsigned by default"
+#~ msgstr "Lad 'char' være uden fortegn som standard"
+
+#~ msgid "Do not recognize the 'asm' keyword"
+#~ msgstr "Genkend ikke det reserverede ord 'asm'"
+
+#~ msgid "Do not recognize any built in functions"
+#~ msgstr "Genkend ikke nogen indbyggede funktioner"
+
+#~ msgid "Assume normal C execution environment"
+#~ msgstr "Antag normalt C-kørselsmiljø"
+
+#~ msgid "Assume that standard libraries & main might not exist"
+#~ msgstr "Antag at standardbibliotekerne og main måske ikke eksisterer"
+
+#~ msgid "Allow different types as args of ? operator"
+#~ msgstr "Tillad forskellige typer som parametre til ?-operatoren"
+
+#~ msgid "Allow the use of $ inside identifiers"
+#~ msgstr "Tillad brug af $ inden i kaldenavne"
+
+#~ msgid "Use the same size for double as for float"
+#~ msgstr "Benyt den samme størrelse til double som til float"
+
+#~ msgid "Use the smallest fitting integer to hold enums"
+#~ msgstr "Benyt den mindst mulige størrelse heltal til enum-værdier"
+
+#~ msgid "Override the underlying type for wchar_t to `unsigned short'"
+#~ msgstr "Overskriv den underliggende type af wchar_t til 'unsigned short'"
+
+#~ msgid "Enable most warning messages"
+#~ msgstr "Aktivér de fleste advarselsbeskeder"
+
+#~ msgid "Warn about casting functions to incompatible types"
+#~ msgstr "Advar om omtvingning af funktioner til ikke-kompatible typer"
+
+#~ msgid "Warn about functions which might be candidates for format attributes"
+#~ msgstr "Advar om funktioner som kan være kandidater til formateringsegenskaber"
+
+#~ msgid "Warn about casts which discard qualifiers"
+#~ msgstr "Advar om typeomtvingninger som forkaster modifikationer"
+
+#~ msgid "Warn about subscripts whose type is 'char'"
+#~ msgstr "Advar som tabelindeksering hvis type er 'char'"
+
+#~ msgid "Warn if nested comments are detected"
+#~ msgstr "Advar hvis indlejrede kommentarer mødes"
+
+#~ msgid "Warn about possibly confusing type conversions"
+#~ msgstr "Advar om typekonverteringer der kan være forvirrende"
+
+#~ msgid "Do not warn about compile-time integer division by zero"
+#~ msgstr "Advar ikke om heltalsdivision på oversættelsestidspunktet med nul"
+
+#~ msgid "Warn about testing equality of floating point numbers"
+#~ msgstr "Advar om lighedssammenligninger mellem kommatal"
+
+#~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies"
+#~ msgstr "Advar om printf/scanf/strftime/strfmon-formateringsanormaliteter"
+
+#~ msgid "Don't warn about too many arguments to format functions"
+#~ msgstr "Advar ikke om for mange parametre til formateringsfunktioner"
+
+#~ msgid "Warn about non-string-literal format strings"
+#~ msgstr "Advar om formateringsstrenge der ikke er strengkonstanter"
+
+#~ msgid "Warn about possible security problems with format functions"
+#~ msgstr "Advar om mulige sikkerhedsproblemer i forbindelse med formateringsfunktioner"
+
+#~ msgid "Don't warn about strftime formats yielding 2 digit years"
+#~ msgstr "Advar ikke om strftime-formateringer med 2-cifres år"
+
+#~ msgid "Warn about implicit function declarations"
+#~ msgstr "Advar om underforståede funktionserklæringer"
+
+#~ msgid "Warn when a declaration does not specify a type"
+#~ msgstr "Advar når en erklæring ikke angiver en type"
+
+#~ msgid "Warn about the use of the #import directive"
+#~ msgstr "Advar om brug af #import-direktivet"
+
+#~ msgid "Do not warn about using 'long long' when -pedantic"
+#~ msgstr "Advar ikke om brug af 'long long' når -pedantic benyttes"
+
+#~ msgid "Warn about suspicious declarations of main"
+#~ msgstr "Advar om mistænkelige erklæringer af main"
+
+#~ msgid "Warn about possibly missing braces around initializers"
+#~ msgstr "Advar om mulige manglende krøllede paranteser omkring startværdier"
+
+#~ msgid "Warn about global funcs without previous declarations"
+#~ msgstr "Advar om globale funktioner uden tidligere erklæringer"
+
+#~ msgid "Warn about global funcs without prototypes"
+#~ msgstr "Advar om globale funktioner uden prototyper"
+
+#~ msgid "Warn about use of multicharacter literals"
+#~ msgstr "Advar om brug af multitegnskonstanter"
+
+#~ msgid "Warn about externs not at file scope level"
+#~ msgstr "Advar om extern-erklæringer som ikke er ved filvirkefeltsniveauet"
+
+#~ msgid "Warn about possible missing parentheses"
+#~ msgstr "Advar om mulige manglende paranteser"
+
+#~ msgid "Warn about function pointer arithmetic"
+#~ msgstr "Advar om beregninger på funktionshenvisninger"
+
+#~ msgid "Warn about multiple declarations of the same object"
+#~ msgstr "Advar om flere erklæring af det samme objekt"
+
+#~ msgid "Warn whenever a function's return-type defaults to int"
+#~ msgstr "Advar når en funktions returtype antages at være int"
+
+#~ msgid "Warn about possible violations of sequence point rules"
+#~ msgstr "Advar om mulige brud på sekvenspunktreglerne"
+
+#~ msgid "Warn about signed/unsigned comparisons"
+#~ msgstr "Advar om sammenligninger mellem typer med og uden fortegn"
+
+#~ msgid "Warn about non-prototyped function decls"
+#~ msgstr "Advar om funktionserklæringer uden prototype"
+
+#~ msgid "Warn about constructs whose meanings change in ISO C"
+#~ msgstr "Advar om konstruktioner hvis betydning er ændret i ISO C"
+
+#~ msgid "Warn when trigraphs are encountered"
+#~ msgstr "Advar når trigrafer mødes"
+
+#~ msgid "Warn about unrecognized pragmas"
+#~ msgstr "Advar om ukendte pragmaer"
+
+#~ msgid "Mark strings as 'const char *'"
+#~ msgstr "Markér strenge som 'const char *'"
+
+#~ msgid "Warn when a function is unused"
+#~ msgstr "Advar når en funktion ikke benyttes"
+
+#~ msgid "Warn when a label is unused"
+#~ msgstr "Advar når en etiket ikke benyttes"
+
+#~ msgid "Warn when a function parameter is unused"
+#~ msgstr "Advar når en funktionsparameter ikke benyttes"
+
+#~ msgid "Warn when a variable is unused"
+#~ msgstr "Advar når en variabel ikke benyttes"
+
+#~ msgid "Warn when an expression value is unused"
+#~ msgstr "Advar når værdien af et udtryk ikke benyttes"
+
+#~ msgid "Do not suppress warnings from system headers"
+#~ msgstr "Undertryk ikke advarsler fra systeminkluderingsfiler"
+
+#~ msgid "Treat all warnings as errors"
+#~ msgstr "Behandl alle advarsler som fejl"
+
+#~ msgid "Warn when one local variable shadows another"
+#~ msgstr "Advar når en lokal variabel skygger for en anden"
+
+#~ msgid "Warn about enumerated switches, with no default, missing a case"
+#~ msgstr "Advar om switch-sætninger over enum-typer som mangler et tilfælde og ikke har default"
+
+#~ msgid "Warn about enumerated switches missing a default case"
+#~ msgstr "Advar om switch-sætninger over enum-typer som mangler default"
+
+#~ msgid "Warn about all enumerated switches missing a specific case"
+#~ msgstr "Advar om alle switch-sætninger over enum-typer som mangler et bestemt tilfælde"
+
+#~ msgid "Warn about returning structures, unions or arrays"
+#~ msgstr "Advar om returnering af struct, union og tabeller"
+
+#~ msgid "Warn about pointer casts which increase alignment"
+#~ msgstr "Advar om typeomtvingning af henvisninger som forøger justeringen"
+
+#~ msgid "Warn about code that will never be executed"
+#~ msgstr "Advar om kode som aldrig bliver udført"
+
+#~ msgid "Warn about uninitialized automatic variables"
+#~ msgstr "Advar om ikke-klargjorte automatiske variabler"
+
+#~ msgid "Warn when an inlined function cannot be inlined"
+#~ msgstr "Advar når en inline funktion ikke kan indbygges"
+
+#~ msgid "Warn when the packed attribute has no effect on struct layout"
+#~ msgstr "Advar når packed-egenskaben ikke har nogen effekt på struct-layoutet"
+
+#~ msgid "Warn when padding is required to align struct members"
+#~ msgstr "Advar når udfyldning er påkrævet for at justere struct-medlemmer"
+
+#~ msgid "Warn when an optimization pass is disabled"
+#~ msgstr "Advar når en optimeringsfase deaktiveres"
+
+#~ msgid "Warn about uses of __attribute__((deprecated)) declarations"
+#~ msgstr "Advar om brug af __attribute__((deprecated))-erklæringer"
+
+#~ msgid "Warn about functions which might be candidates for attribute noreturn"
+#~ msgstr "Advar om funktioner som kan være kandidater til egenskaben noreturn"
+
+#~ msgid "Warn about code which might break the strict aliasing rules"
+#~ msgstr "Advar om kode som kan bryde strenge aliasregler"
+
+#~ msgid "invalid option `%s'"
+#~ msgstr "ugyldigt tilvalg '%s'"
+
+#~ msgid "`%s' declared `static' but never defined"
+#~ msgstr "'%s' erklæret 'static', men aldrig defineret"
+
+#~ msgid "`%s' defined but not used"
+#~ msgstr "'%s' defineret, men aldrig brugt"
+
+#~ msgid "invalid register name `%s' for register variable"
+#~ msgstr "ugyldigt registernavn '%s' for registervariabel"
+
+#~ msgid "  -ffixed-<register>      Mark <register> as being unavailable to the compiler\n"
+#~ msgstr "  -ffixed-<register>      Markér <register> som værende utilgængeligt for oversætteren\n"
+
+#~ msgid "  -fcall-used-<register>  Mark <register> as being corrupted by function calls\n"
+#~ msgstr "  -fcall-used-<register>  Markér <register> som værende benyttet af funktionskald\n"
+
+#~ msgid "  -fcall-saved-<register> Mark <register> as being preserved across functions\n"
+#~ msgstr "  -fcall-saved-<register> Markér <register> som værende bevaret over funktioner\n"
+
+#~ msgid "  -finline-limit=<number> Limits the size of inlined functions to <number>\n"
+#~ msgstr "  -finline-limit=<str>    Begræns størrelsen af inlie funktion til <str>\n"
+
+#~ msgid "  -fmessage-length=<number> Limits diagnostics messages lengths to <number> characters per line.  0 suppresses line-wrapping\n"
+#~ msgstr "  -fmessage-length=<antal>  Begræns længden af diagnosticeringmeddelelser til længden <antal> tegn/linje. 0 undertrykker linjeombrydning\n"
+
+#~ msgid "  -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n"
+#~ msgstr "  -fdiagnostics-show-location=[once | every-line] Indikerer hvor ofte kildeplaceringsoplysninger skal udsendes som præfiks til begyndelsen af meddelelserne ved linjeombrydning\n"
+
+#~ msgid "  -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indicates the default thread-local storage code generation model\n"
+#~ msgstr "  -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indikerer den forvalgte tråd-lokale lagringsmodel for kodegenerering\n"
+
+#~ msgid "  -O[number]              Set optimization level to [number]\n"
+#~ msgstr "  -O[tal]                 Sæt optimeringsniveauet til [tal]\n"
+
+#~ msgid "  -Os                     Optimize for space rather than speed\n"
+#~ msgstr "  -Os                     Optimér mht. plads i stedet for hastighed\n"
+
+#~ msgid "  -pedantic               Issue warnings needed by strict compliance to ISO C\n"
+#~ msgstr "  -pedantic               Udsend advarsler som er nødvendige for streng overholdelse af ISO C\n"
+
+#~ msgid "  -pedantic-errors        Like -pedantic except that errors are produced\n"
+#~ msgstr "  -pedantic-errors        Som -pedantic bortset fra at problemer bliver til fejl\n"
+
+#~ msgid "  -w                      Suppress warnings\n"
+#~ msgstr "  -w                      Undertryk advarsler\n"
+
+#~ msgid "  -W                      Enable extra warnings\n"
+#~ msgstr "  -W                      Aktivér ekstra advarsler\n"
+
+#~ msgid "  -Wunused                Enable unused warnings\n"
+#~ msgstr "  -Wunused                Aktivér ubrugthedsadvarsler\n"
+
+#~ msgid "  -Wlarger-than-<number>  Warn if an object is larger than <number> bytes\n"
+#~ msgstr "  -Wlarger-than-<tal>     Advar hvis et objekt er større end <tal> byte\n"
+
+#~ msgid "  -p                      Enable function profiling\n"
+#~ msgstr "  -p                      Aktivér funktionsprofilering\n"
+
+#~ msgid "  -o <file>               Place output into <file> \n"
+#~ msgstr "  -o <fil>                Anbring uddata i <fil>\n"
+
+#~ msgid ""
+#~ "  -G <number>             Put global and static data smaller than <number>\n"
+#~ "                          bytes into a special section (on some targets)\n"
+#~ msgstr "  -G <str>                Anbring globale og statiske data mindre end <tal> byte i en specialsektion (på nogle målarkitekturer)\n"
+
+#~ msgid "  -aux-info <file>        Emit declaration info into <file>\n"
+#~ msgstr "  -aux-info <fil>         Udskriv erklæringsoplysninger til <fil>\n"
+
+#~ msgid "  -quiet                  Do not display functions compiled or elapsed time\n"
+#~ msgstr "  -quiet                  Vis ikke funktioner der oversættes eller forløbet tid\n"
+
+#~ msgid "  -version                Display the compiler's version\n"
+#~ msgstr "  -version                Udskriv oversætterens version\n"
+
+#~ msgid "  -d[letters]             Enable dumps from specific passes of the compiler\n"
+#~ msgstr "  -d[bogstaver]           Aktivér dump fra specifikke faser i oversætteren\n"
+
+#~ msgid "  -dumpbase <file>        Base name to be used for dumps from specific passes\n"
+#~ msgstr "  -dumpbase <fil>         Basisnavn til brug for dump fra specifikke faser\n"
+
+#~ msgid "  -fsched-verbose=<number> Set the verbosity level of the scheduler\n"
+#~ msgstr "  -fsched-verbose=<tal>    Angiv hvor meget planlæggeren skal fortælle\n"
+
+#~ msgid "  --help                  Display this information\n"
+#~ msgstr "  --help                  Vis disse oplysninger\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Language specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Sprogspecifikke tilvalg:\n"
+
+#~ msgid "  %-23.23s [undocumented]\n"
+#~ msgstr "  %-23.23s [ikke dokumenteret]\n"
+
+# %s er et sprog
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented %s specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Der er også ikke-dokumenterede specifikke tilvalg til %s.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " Options for %s:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Tilvalg til %s:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Målspecifikke tilvalg:\n"
+
+#~ msgid "  -m%-23.23s [undocumented]\n"
+#~ msgstr "  -m%-23.23s [ikke dokumenteret]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented target specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Der er også ikke-dokumenterede målspecifikke tilvalg.\n"
+
+#~ msgid "  They exist, but they are not documented.\n"
+#~ msgstr "  De eksisterer, men er ikke dokumenteret.\n"
+
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "ukendt GCC-fejlfindingstilvalg: %c"
+
+#~ msgid "`%s': unknown tls-model option"
+#~ msgstr "'%s': ukendt tls-model-tilvalg"
+
+#~ msgid "unrecognized register name `%s'"
+#~ msgstr "ukendt registernavn '%s'"
+
+#~ msgid "unrecognized option `%s'"
+#~ msgstr "ukendt tilvalg '%s'"
+
+#~ msgid "-Wid-clash-LEN is no longer supported"
+#~ msgstr "-Wid-clash-LEN understøttes ikke længere"
+
+#~ msgid "use -gdwarf -g%d for DWARF v1, level %d"
+#~ msgstr "benyt - gdwarf -g%d til DWARF v1, niveau %d"
+
+#~ msgid "use -gdwarf-2   for DWARF v2"
+#~ msgstr "benyt -gdwarf-2 til DWARF v2"
+
+#~ msgid "ignoring option `%s' due to invalid debug level specification"
+#~ msgstr "ignorerer tilvalget '%s' på grund af ugyldig specifikation af fejlfindingsniveau"
+
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "'%s': ukendt eller ikke-understøttet '-g'-tilvalg"
+
+#~ msgid "`%s' ignored, conflicts with `-g%s'"
+#~ msgstr "'%s' ignoreret, er i konflikt med '-g%s'"
+
+#~ msgid "-param option missing argument"
+#~ msgstr "'-param'-tilvalg mangler parameter"
+
+#~ msgid "invalid --param option: %s"
+#~ msgstr "ugyldigt '--param'-tilvalg: %s"
+
+#~ msgid "invalid parameter value `%s'"
+#~ msgstr "ugyldig parameterværdi '%s'"
+
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\toversat af GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) oversat af CC.\n"
+
+#~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+#~ msgstr "%s%sGGC-heuristikker: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+
+#~ msgid "options passed: "
+#~ msgstr "tilvalg overbragt: "
+
+#~ msgid "options enabled: "
+#~ msgstr "tilvalg slået til: "
+
+#~ msgid "can't open %s for writing"
+#~ msgstr "kan ikke åbne '%s' til skrivning"
+
+#~ msgid "ignoring command line option '%s'"
+#~ msgstr "ignorerer kommandolinjetilvalget '%s'"
+
+#~ msgid "(it is valid for %s but not the selected language)"
+#~ msgstr "(det er gyldigt for %s, men ikke for det valgte sprog)"
+
+#~ msgid "-Wuninitialized is not supported without -O"
+#~ msgstr "-Wuninitialized understøttes ikke uden -O"
+
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "instruktionsplanlægning understøttes ikke på målarkitekturen"
+
+#~ msgid "this target machine does not have delayed branches"
+#~ msgstr "målarkitekturen har ikke forsinkede forgreninger"
+
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "-f%sleading-underscore understøttes ikke på målarkitekturen"
+
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "-ffunction-sections understøttes ikke på målarkitekturen"
+
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "-fdata-sections understøttes ikke på målarkitekturen"
+
+#~ msgid "-ffunction-sections disabled; it makes profiling impossible"
+#~ msgstr "-ffunction-sections deaktiveret; dette gør profilering umulig"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "-fprefetch-loop-arrays understøttes ikke på målarkitekturen"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)"
+#~ msgstr "-fprefetch-loop-arrays understøttes ikke på målarkitekturen (prøv '-march'-tilvalgene)"
+
+#~ msgid "-fprefetch-loop-arrays is not supported with -Os"
+#~ msgstr "-fprefetch-loop-arrays understøttes ikke med -Os"
+
+#~ msgid "-ffunction-sections may affect debugging on some targets"
+#~ msgstr "-ffunction-sections kan have indflydelse på fejlfinding på nogle målarkitekturer"
+
+#~ msgid "error writing to %s"
+#~ msgstr "fejl ved skrivning til %s"
+
+#~ msgid "error closing %s"
+#~ msgstr "fejl ved lukning af %s"
+
+#~ msgid "could not open dump file `%s'"
+#~ msgstr "kunne ikke åbne dumpningsfilen '%s'"
+
+#~ msgid "ignoring unknown option `%.*s' in `-f%s'"
+#~ msgstr "ignorerer ukendt tilvalg '%.*s' i '-f%s'"
+
+#~ msgid "arrays of functions are not meaningful"
+#~ msgstr "en tabel af funktioner giver ikke mening"
+
+#~ msgid "function return type cannot be function"
+#~ msgstr "en funktions returtype kan ikke være en funktion"
+
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "ugyldig startværdi til bitstreng"
+
+#~ msgid "tree check: expected %s, have %s in %s, at %s:%d"
+#~ msgstr "træ-kontrol: forventede %s, har %s i %s, ved %s:%d"
+
+#~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
+#~ msgstr "træ-kontrol: forventede klasse '%c', har '%c' (%s) i %s, ved %s:%d"
+
+#~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
+#~ msgstr "RTL-kontrol: tilgik udtrykstræ %d af tree_vec med %d udtrykstræer i %s, ved %s:%d"
+
+#~ msgid "%s causes a section type conflict"
+#~ msgstr "%s forårsager en sektionstypekonflikt"
+
+#~ msgid "register name not specified for `%s'"
+#~ msgstr "registernavn ikke angivet for '%s'"
+
+#~ msgid "invalid register name for `%s'"
+#~ msgstr "ugyldigt registernavn for '%s'"
+
+#~ msgid "data type of `%s' isn't suitable for a register"
+#~ msgstr "datatypen for '%s' passer ikke med et register"
+
+#~ msgid "register specified for `%s' isn't suitable for data type"
+#~ msgstr "registeret som er angivet for '%s' passer ikke med datatypen"
+
+#~ msgid "global register variable has initial value"
+#~ msgstr "global registervariabel har en startværdi"
+
+#~ msgid "volatile register variables don't work as you might wish"
+#~ msgstr "registervariable erklæret volatile virker ikke som du måske ønsker"
+
+#~ msgid "register name given for non-register variable `%s'"
+#~ msgstr "registernavn givet for ikke-registervariablen '%s'"
+
+#~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d"
+#~ msgstr "justering af '%s' er større end den maksimale objektfilsjustering - bruger %d"
+
+#~ msgid "thread-local COMMON data not implemented"
+#~ msgstr "tråd-lokal COMMON-data er ikke implementeret"
+
+#~ msgid "requested alignment for %s is greater than implemented alignment of %d"
+#~ msgstr "forespurgt justering for %s er større end den implementerede justering af %d"
+
+#~ msgid "initializer for integer value is too complicated"
+#~ msgstr "startværdien for heltallet er for kompliceret"
+
+#~ msgid "initializer for floating value is not a floating constant"
+#~ msgstr "startværdien for kommatal er ikke en kommatalskonstant"
+
+#~ msgid "unknown set constructor type"
+#~ msgstr "ukendt mængdekonstruktionstype"
+
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "ugyldig startværdi for medlemmet '%s'"
+
+#~ msgid "weak declaration of `%s' must precede definition"
+#~ msgstr "svag erklæring af '%s' skal komme før definitionen"
+
+#~ msgid "weak declaration of `%s' after first use results in unspecified behavior"
+#~ msgstr "svag erklæring af '%s' efter første brug resulterer i ikke-defineret opførsel"
+
+#~ msgid "weak declaration of `%s' must be public"
+#~ msgstr "svag erklæring af '%s' skal være public"
+
+#~ msgid "weak declaration of `%s' not supported"
+#~ msgstr "svag erklæring af '%s' ikke understøttet"
+
+#~ msgid "only weak aliases are supported in this configuration"
+#~ msgstr "kun svage aliaser understøttes i denne konfiguration"
+
+#~ msgid "alias definitions not supported in this configuration; ignored"
+#~ msgstr "aliasdefinitioner er ikke understøttet i denne konfiguration; ignoreret"
+
+#~ msgid "visibility attribute not supported in this configuration; ignored"
+#~ msgstr "synlighedsegenskab er ikke understøttet i denne konfiguration; ignoreret"
+
+#~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
+#~ msgstr "virtuel tabel %s[%lu]: element %lu ude over grænserne i %s, ved %s:%d"
+
+#~ msgid "no sclass for %s stab (0x%x)\n"
+#~ msgstr "ingen sclass for %s stab (0x%x)\n"
+
+#~ msgid "#`%s' not supported by %s#"
+#~ msgstr "#'%s' ikke understøttet af %s#"
+
+#~ msgid "The maximum number of instructions in a single function eligible for inlining"
+#~ msgstr "Det maksimale antal instruktioner i en enkelt funktion der må indbygges"
+
+#~ msgid "The maximum number of instructions when automatically inlining"
+#~ msgstr "Det maksimale antal instruktioner ved automatisk indbygning"
+
+#~ msgid "The maximum number of instructions by repeated inlining before gcc starts to throttle inlining"
+#~ msgstr "Det maksimale antal instruktioner ved gentagen indbygning før GCC dæmper indbygningen"
+
+#~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter"
+#~ msgstr "Hældningen af den lineære funktion der dæmper indbygning efter at den rekursive indbygningsgrænse er nået, er givet ved den negative, reciprokke værdi af denne parameter"
+
+#~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining"
+#~ msgstr "Antallet af instruktioner i en enkelt funktion der stadig indbygges efter megen rekursiv indbygning"
+
+#~ msgid "The maximum number of instructions for the RTL inliner"
+#~ msgstr "Det maksimale antal instruktioner til RTL-indbyggeren"
+
+#~ msgid "The maximum number of instructions to consider to fill a delay slot"
+#~ msgstr "Det maksimale antal instruktioner det overvejes at udfylde ventepladser med"
+
+#~ msgid "The maximum number of instructions to consider to find accurate live register information"
+#~ msgstr "Det maksimale antal instruktioner der overvejes under søgning efter præcis registerinfo"
+
+#~ msgid "The maximum length of scheduling's pending operations list"
+#~ msgstr "Den maksimale længde af planlæggerens liste over ventende operationer"
+
+#~ msgid "The maximum amount of memory to be allocated by GCSE"
+#~ msgstr "Den maksimale mængde hukommelse som skal allokeres af GCSE"
+
+#~ msgid "The maximum number of passes to make when doing GCSE"
+#~ msgstr "Det maksimale antal faser der skal gennemgås ved udførsel af GCSE"
+
+#~ msgid "The maximum number of instructions to consider to unroll in a loop"
+#~ msgstr "Det maksimale antal instruktioner der overvejes at udrulle i en løkke"
+
+#~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot"
+#~ msgstr "Vælg den andel af det maksimale antal gentagelser af basisblokke i et program en given basisblok skal have for at blive betragtet som \"varm\""
+
+#~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#~ msgstr "Vælg den andel af den maksimale frekvens af udførsler af basisblokke i et program en given basisblok skal have for at blive betragtet som \"varm\""
+
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#~ msgstr "Den procendel af funktioner vægtet efter udførselsfrekvens som skal dækkes af sporingsformering; benyttes når profileringsfeedback er tilgængeligt"
+
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#~ msgstr "Den procendel af funktioner vægtet efter udførselsfrekvens som skal dækkes af sporingsformering; benyttes når profileringsfeedback ikke er tilgængeligt"
+
+#~ msgid "Maximal code growth caused by tail duplication (in percents)"
+#~ msgstr "Maksimal kodevækst forårsaget af haleduplikering (i procent)"
+
+#~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percents)"
+#~ msgstr "Stop omvendt vækst hvis den omvendte sandsynlighed for den bedste kant er mindre end denne tærskel (i procent)"
+
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is available"
+#~ msgstr "Stop fremadrettet vækst hvis sandsynligheden for den bedste kant er mindre end denne tærskel (i procent); benyttes når profileringsfeedback er tilgængeligt"
+
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is not available"
+#~ msgstr "Stop fremadrettet vækst hvis sandsynligheden for den bedste kant er mindre end denne tærskel (i procent); benyttes når profileringsfeedback ikke er tilgængeligt"
+
+#~ msgid "The maximum number of incoming edges to consider for crossjumping"
+#~ msgstr "Det maksimale antal indadgående kanter der overvejes til krydsspring"
+
+#~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
+#~ msgstr "Minimal heap-udvidelse for at udløse garbage collection, som en procentdel af den totale heap"
+
+#~ msgid "Minimum heap size before we start collecting garbage, in kilobytes."
+#~ msgstr "Minimal heap-størrelse før garbage collection startes, i kilobyte."
+
+#~ msgid "too many #pragma options align=reset"
+#~ msgstr "for mange '#pragma options align=reset'"
+
+#~ msgid "malformed '#pragma options', ignoring"
+#~ msgstr "forkert udformet '#pragma options', ignorerer"
+
+#~ msgid "junk at end of '#pragma options'"
+#~ msgstr "ragelse i slutningen af '#pragma options'"
+
+#~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring"
+#~ msgstr "forkert udformet '#pragma options align={mac68k|power|reset}', ignorerer"
+
+#~ msgid "missing '(' after '#pragma unused', ignoring"
+#~ msgstr "manglende '(' efter '#pragma unused', ignorerer"
+
+#~ msgid "missing ')' after '#pragma unused', ignoring"
+#~ msgstr "manglende ')' efter '#pragma unused', ignorerer"
+
+#~ msgid "junk at end of '#pragma unused'"
+#~ msgstr "ragelse i slutningen af '#pragma unused'"
+
+#~ msgid "-msystem-v and -p are incompatible"
+#~ msgstr "-msystem-v og -p er indbyrdes uforenelige"
+
+#~ msgid "-msystem-v and -mthreads are incompatible"
+#~ msgstr "-msystem-v og -mthreads er indbyrdes uforenelige"
+
+#~ msgid "-f%s ignored for Unicos/Mk (not supported)"
+#~ msgstr "-f%s ignoreret for Unicos/Mk (ikke understøttet)"
+
+#~ msgid "-mieee not supported on Unicos/Mk"
+#~ msgstr "-mieee understøttes ikke på Unicos/Mk"
+
+#~ msgid "-mieee-with-inexact not supported on Unicos/Mk"
+#~ msgstr "-mieee-with-inexact understøttes ikke på Unicos/Mk"
+
+#~ msgid "bad value `%s' for -mtrap-precision switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mtrap-precision"
+
+#~ msgid "bad value `%s' for -mfp-rounding-mode switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mfp-rounding-mode"
+
+#~ msgid "bad value `%s' for -mfp-trap-mode switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mfp-trap-mode"
+
+#~ msgid "bad value `%s' for -mtls-size switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mtls-size"
+
+#~ msgid "bad value `%s' for -mcpu switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mcpu"
+
+#~ msgid "trap mode not supported on Unicos/Mk"
+#~ msgstr "fældetilstand understøttes ikke på Unicos/Mk"
+
+#~ msgid "fp software completion requires -mtrap-precision=i"
+#~ msgstr "kommatalssoftwarefuldførelse kræver -mtrap-precision=i"
+
+#~ msgid "rounding mode not supported for VAX floats"
+#~ msgstr "afrundingstilstand er ikke understøttet for VAX-kommatal"
+
+#~ msgid "trap mode not supported for VAX floats"
+#~ msgstr "fældetilstand er ikke understøttet for VAX-kommatal"
+
+#~ msgid "L%d cache latency unknown for %s"
+#~ msgstr "L%d-mellemlagersventetid ukendt for %s"
+
+#~ msgid "bad value `%s' for -mmemory-latency"
+#~ msgstr "ugyldig værdi '%s' for -mmemory-latency"
+
+#~ msgid "invalid %%H value"
+#~ msgstr "ugyldig %%H-værdi"
+
+#~ msgid "invalid %%J value"
+#~ msgstr "ugyldig %%J-værdi"
+
+#~ msgid "invalid %%r value"
+#~ msgstr "ugyldig %%r-værdi"
+
+#~ msgid "invalid %%R value"
+#~ msgstr "ugyldig %%R-værdi"
+
+#~ msgid "invalid %%N value"
+#~ msgstr "ugyldig %%N-værdi"
+
+#~ msgid "invalid %%P value"
+#~ msgstr "ugyldig %%P-værdi"
+
+#~ msgid "invalid %%h value"
+#~ msgstr "ugyldig %%h-værdi"
+
+#~ msgid "invalid %%L value"
+#~ msgstr "ugyldig %%L-værdi"
+
+#~ msgid "invalid %%m value"
+#~ msgstr "ugyldig %%m-værdi"
+
+#~ msgid "invalid %%M value"
+#~ msgstr "ugyldig %%M-værdi"
+
+#~ msgid "invalid %%U value"
+#~ msgstr "ugyldig %%U-værdi"
+
+#~ msgid "invalid %%s value"
+#~ msgstr "ugyldig %%s-værdi"
+
+#~ msgid "invalid %%C value"
+#~ msgstr "ugyldig %%C-værdi"
+
+#~ msgid "invalid %%E value"
+#~ msgstr "ugyldig %%E-værdi"
+
+#~ msgid "unknown relocation unspec"
+#~ msgstr "ukendt relokaliserings-unspec"
+
+#~ msgid "invalid %%xn code"
+#~ msgstr "ugyldig %%xn-kode"
+
+#~ msgid "bad builtin fcode"
+#~ msgstr "ugyldig indbygget fcode"
+
+#~ msgid "Use hardware fp"
+#~ msgstr "Brug hardwarekommatal"
+
+#~ msgid "Do not use hardware fp"
+#~ msgstr "Brug ikke hardwarekommatal"
+
+#~ msgid "Use fp registers"
+#~ msgstr "Brug kommatalsregistre"
+
+#~ msgid "Do not use fp registers"
+#~ msgstr "Brug ikke kommatalsregistre"
+
+#~ msgid "Do not assume GAS"
+#~ msgstr "Antag ikke GAS"
+
+#~ msgid "Assume GAS"
+#~ msgstr "Antag GAS"
+
+#~ msgid "Request IEEE-conformant math library routines (OSF/1)"
+#~ msgstr "Påkræv at matematiksbibliotekrutiner opfylder IEEE-standarden (OSF/1)"
+
+#~ msgid "Emit IEEE-conformant code, without inexact exceptions"
+#~ msgstr "Udsend kode der opfylder IEEE-standarden, uden ineksakte undtagelser"
+
+#~ msgid "Emit IEEE-conformant code, with inexact exceptions"
+#~ msgstr "Udsend kode der opfylder IEEE-standarden, med ineksakte undtagelser"
+
+#~ msgid "Do not emit complex integer constants to read-only memory"
+#~ msgstr "Udsend ikke komplekse heltalskonstanter til skrivebeskyttet hukommelse"
+
+#~ msgid "Use VAX fp"
+#~ msgstr "Benyt VAX-kommatal"
+
+#~ msgid "Do not use VAX fp"
+#~ msgstr "Benyt ikke VAX-kommatal"
+
+#~ msgid "Emit code for the byte/word ISA extension"
+#~ msgstr "Udsend kode for byte/word-ISA-udvidelsen"
+
+#~ msgid "Emit code for the motion video ISA extension"
+#~ msgstr "Udsend kode for video-ISA-udvidelsen"
+
+#~ msgid "Emit code for the fp move and sqrt ISA extension"
+#~ msgstr "Udsend kode for kommatalsflytning og kvadratrod-ISA-udvidelsen"
+
+#~ msgid "Emit code for the counting ISA extension"
+#~ msgstr "Udsend kode for tæller-ISA-udvidelsen"
+
+#~ msgid "Emit code using explicit relocation directives"
+#~ msgstr "Udsend kode der bruger eksplicitte relokaliseringsdirektiver"
+
+#~ msgid "Emit 16-bit relocations to the small data areas"
+#~ msgstr "Udsend 16-bit relokalisering til det lille dataområde"
+
+#~ msgid "Emit 32-bit relocations to the small data areas"
+#~ msgstr "Udsend 32-bit relokalisering til det lille dataområde"
+
+#~ msgid "Emit rdval instead of rduniq for thread pointer"
+#~ msgstr "Udsend rdval i stedet for rduniq for trådhenvisning"
+
+#~ msgid "Use features of and schedule given CPU"
+#~ msgstr "Brug faciliteter fra og planlæg mht. den givne processor"
+
+#~ msgid "Schedule given CPU"
+#~ msgstr "Planlæg til en given processor"
+
+#~ msgid "Control the generated fp rounding mode"
+#~ msgstr "Kontrollér den genererede kommatalsafrundingstilstand"
+
+#~ msgid "Control the IEEE trap mode"
+#~ msgstr "Kontrollér IEEE-fældetilstanden"
+
+#~ msgid "Control the precision given to fp exceptions"
+#~ msgstr "Kontrollér den præcision der gives til kommatalsundtagelser"
+
+#~ msgid "Tune expected memory latency"
+#~ msgstr "Justér den forventede hukommelsesventetid"
+
+#~ msgid "Specify bit size of immediate TLS offsets"
+#~ msgstr "Angiv bitstørrelse for umiddelbar TLS-afsæt"
+
+#~ msgid "bad value (%s) for -mcpu switch"
+#~ msgstr "ugyldig værdi '%s' til tilvalget -mcpu"
+
+#~ msgid "argument of `%s' attribute is not a string constant"
+#~ msgstr "parameteren til egenskaben '%s er ikke en strengkonstant"
+
+#~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\""
+#~ msgstr "parameteren til egenskaben '%s er ikke \"ilink1\" eller \"ilink2\""
+
+#~ msgid "invalid operand to %%R code"
+#~ msgstr "ugyldig operand til %%R-koden"
+
+#~ msgid "invalid operand to %%H/%%L code"
+#~ msgstr "ugyldig operand til %%H/%%L-koden"
+
+#~ msgid "invalid operand to %%U code"
+#~ msgstr "ugyldig operand til %%U-koden"
+
+#~ msgid "invalid operand to %%V code"
+#~ msgstr "ugyldig operand til %%V-koden"
+
+#~ msgid "invalid operand output code"
+#~ msgstr "ugyldig operand-uddatakode"
+
+#~ msgid "switch -mcpu=%s conflicts with -march= switch"
+#~ msgstr "tilvalget -mcpu=%s er i konflikt med tilvalget -march="
+
+#~ msgid "bad value (%s) for %s switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget %s"
+
+#~ msgid "target CPU does not support APCS-32"
+#~ msgstr "målprocessoren understøtter ikke APCS-32"
+
+#~ msgid "target CPU does not support APCS-26"
+#~ msgstr "målprocessoren understøtter ikke APCS-26"
+
+#~ msgid "target CPU does not support interworking"
+#~ msgstr "målprocessoren understøtter ikke interarbejde"
+
+#~ msgid "target CPU does not support THUMB instructions"
+#~ msgstr "målprocessoren understøtter ikke THUMB-instruktioner"
+
+#~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
+#~ msgstr "aktivering af tilbagesporingsunderstøttelse giver kun mening ved oversættelse for en Thumb"
+
+#~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "aktivering af interarbejdeunderstøttelse for kaldte objekter giver kun mening ved oversættelse for en Thumb"
+
+#~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "aktivering af interarbejdeunderstøttelse for kaldere giver kun mening ved oversættelse for en Thumb"
+
+#~ msgid "interworking forces APCS-32 to be used"
+#~ msgstr "interarbejde tvinger APCS-32 til at blive brugt"
+
+#~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+#~ msgstr "-mapcs-stack-check og -mno-apcs-frame er indbyrdes uforenelige"
+
+#~ msgid "-fpic and -mapcs-reent are incompatible"
+#~ msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige"
+
+#~ msgid "APCS reentrant code not supported.  Ignored"
+#~ msgstr "APCS-genindtrædelig kode er ikke understøttet - ignoreret"
+
+#~ msgid "-g with -mno-apcs-frame may not give sensible debugging"
+#~ msgstr "-g med -mno-apcs-frame giver måske ikke fornuftig fejlanalysering"
+
+#~ msgid "passing floating point arguments in fp regs not yet supported"
+#~ msgstr "overbringelse af kommatalsparametre i kommatalsregistre er ikke understøttet endnu"
+
+#~ msgid "invalid floating point emulation option: -mfpe-%s"
+#~ msgstr "ugyldigt tilvalg til kommatalsemulering: -mfpe-%s"
+
+#~ msgid "structure size boundary can only be set to 8 or 32"
+#~ msgstr "strukturstørrelsesgrænse kan kun sættes til 8 eller 32"
+
+#~ msgid "-mpic-register= is useless without -fpic"
+#~ msgstr "-mpic-register= er ubrugelig uden -fpic"
+
+#~ msgid "unable to use '%s' for PIC register"
+#~ msgstr "kan ikke bruge '%s' til PIC-register"
+
+#~ msgid "`%s' attribute only applies to functions"
+#~ msgstr "egenskaben '%s' kan kun anvendes sammen med funktioner"
+
+#~ msgid "unable to compute real location of stacked parameter"
+#~ msgstr "kan ikke beregne virkelig placering af stakkede parametre"
+
+#~ msgid "no low registers available for popping high registers"
+#~ msgstr "ingen lave registre er tilgængelige til at modtage værdier fra høje registre"
+
+#~ msgid "interrupt Service Routines cannot be coded in Thumb mode"
+#~ msgstr "afbrydelsesservicerutiner kan ikke kodes i Thumb-tilstand"
+
+#~ msgid "initialized variable `%s' is marked dllimport"
+#~ msgstr "variablen '%s' med startværdi er markeret dllimport"
+
+#~ msgid "static variable `%s' is marked dllimport"
+#~ msgstr "statisk variabel '%s' er markeret dllimport"
+
+#~ msgid "Generate APCS conformant stack frames"
+#~ msgstr "Generér APCS-overholdende stakrammer"
+
+#~ msgid "Store function names in object code"
+#~ msgstr "Gem funktionsnavne i objektkode"
+
+#~ msgid "Use the 32-bit version of the APCS"
+#~ msgstr "Benyt 32 bit-udgaven af APCS"
+
+#~ msgid "Use the 26-bit version of the APCS"
+#~ msgstr "Benyt 26 bit-udgaven af APCS"
+
+#~ msgid "Pass FP arguments in FP registers"
+#~ msgstr "Videregiv kommatalsparametre i kommatalsregistre"
+
+#~ msgid "Generate re-entrant, PIC code"
+#~ msgstr "Generér genindtrædelig PIC-kode"
+
+#~ msgid "The MMU will trap on unaligned accesses"
+#~ msgstr "MMU'en vil aktiveres ved ikke-justerede tilgange"
+
+#~ msgid "Use library calls to perform FP operations"
+#~ msgstr "Benyt bibliotekskald til at udføre kommatalsoperationer"
+
+#~ msgid "Use hardware floating point instructions"
+#~ msgstr "Benyt hardware-kommatalsinstruktioner"
+
+#~ msgid "Assume target CPU is configured as big endian"
+#~ msgstr "Antag at målprocessoren er konfigureret som storendet"
+
+#~ msgid "Assume target CPU is configured as little endian"
+#~ msgstr "Antag at målprocessoren er konfigureret som lilleendet"
+
+#~ msgid "Assume big endian bytes, little endian words"
+#~ msgstr "Antag storendede byte og lilleendede word"
+
+#~ msgid "Support calls between Thumb and ARM instruction sets"
+#~ msgstr "Understøt kald mellem Thumb- og ARM-instruktionssættene"
+
+#~ msgid "Generate a call to abort if a noreturn function returns"
+#~ msgstr "Generér et kald til abort hvis en noreturn-funktion returnerer"
+
+#~ msgid "Do not move instructions into a function's prologue"
+#~ msgstr "Flyt ikke instruktioner til en funktions begyndelse"
+
+#~ msgid "Do not load the PIC register in function prologues"
+#~ msgstr "Indlæs ikke PIC-registeret i funktionsbegyndelser"
+
+#~ msgid "Generate call insns as indirect calls, if necessary"
+#~ msgstr "Generér kaldeinstruktioner som indirekte kald, om nødvendigt"
+
+#~ msgid "Compile for the Thumb not the ARM"
+#~ msgstr "Oversæt til Thymb, ikke til ARM"
+
+#~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
+#~ msgstr "Thumb: Generér (ikke-yderste) stakrammer selv hvis det ikke er nødvendigt"
+
+#~ msgid "Thumb: Generate (leaf) stack frames even if not needed"
+#~ msgstr "Thumb: Generér (yderste) stakrammer selv hvis det ikke er nødvendigt"
+
+#~ msgid "Thumb: Assume non-static functions may be called from ARM code"
+#~ msgstr "Thumb: Antag at ikke-statiske funktioner kan kaldes fra ARM-kode"
+
+#~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
+#~ msgstr "Thumb: Antag at funktionshenvisninger kan gå til kode der ikke er opmærksom på Thumb"
+
+#~ msgid "Specify the name of the target CPU"
+#~ msgstr "Angiv navnet på målprocessoren"
+
+#~ msgid "Specify the name of the target architecture"
+#~ msgstr "Angiv navnet på målarkitekturen"
+
+#~ msgid "Specify the version of the floating point emulator"
+#~ msgstr "Angiv versionen af kommatalsemulatoren"
+
+#~ msgid "Specify the minimum bit alignment of structures"
+#~ msgstr "Angiv den mindste bitjustering af strukturer"
+
+#~ msgid "Specify the register to be used for PIC addressing"
+#~ msgstr "Angiv det register der skal bruges til PIC-adressering"
+
+#~ msgid "Ignore dllimport attribute for functions"
+#~ msgstr "Ignorér dllimport-egenskaben for funktioner"
+
+#~ msgid "large frame pointer change (%d) with -mtiny-stack"
+#~ msgstr "stor rammehenvisningsændring (%d) med -mtiny-stack"
+
+#~ msgid "bad address, not (reg+disp):"
+#~ msgstr "ugyldig adresse, ikke (reg+disp):"
+
+#~ msgid "internal compiler error.  Bad address:"
+#~ msgstr "intern oversætterfejl - ugyldig adresse:"
+
+#~ msgid "internal compiler error.  Unknown mode:"
+#~ msgstr "intern oversætterfejl - ugyldig tilstand:"
+
+#~ msgid "invalid insn:"
+#~ msgstr "ugyldig instruktion:"
+
+#~ msgid "incorrect insn:"
+#~ msgstr "ukorrekt instruktion:"
+
+#~ msgid "unknown move insn:"
+#~ msgstr "ukendt flytteinstruktion:"
+
+#~ msgid "bad shift insn:"
+#~ msgstr "ugyldig skifteinstruktion:"
+
+#~ msgid "internal compiler error.  Incorrect shift:"
+#~ msgstr "intern oversætterfejl - ukorrekt skift:"
+
+#~ msgid "only initialized variables can be placed into program memory area"
+#~ msgstr "kun variabler med startværdi kan placeres i programhukommelsesområdet"
+
+#~ msgid "only uninitialized variables can be placed in the .noinit section"
+#~ msgstr "kun variabler uden startværdi kan placeres i .noinit-sektionen"
+
+#~ msgid "MCU `%s' supported for assembler only"
+#~ msgstr "MCU '%s' understøttes kun for maskinkode"
+
+#~ msgid "Assume int to be 8 bit integer"
+#~ msgstr "Antag at int er 8 bit-heltal"
+
+#~ msgid "Change the stack pointer without disabling interrupts"
+#~ msgstr "Ændr stakhenvisningen uden at deaktivere afbrydelser"
+
+#~ msgid "Use subroutines for function prologue/epilogue"
+#~ msgstr "Benyt subrutiner for funktionsindledning/-afslutninger"
+
+#~ msgid "Change only the low 8 bits of the stack pointer"
+#~ msgstr "Ændr kun de laveste 8 bit af stakhenvisningen"
+
+#~ msgid "Do not generate tablejump insns"
+#~ msgstr "Generér ikke tabelspringsinstruktioner"
+
+#~ msgid "Use rjmp/rcall (limited range) on >8K devices"
+#~ msgstr "Benyt rjmp/rcall (begrænset omfang) på >8K-enheder"
+
+#~ msgid "Output instruction sizes to the asm file"
+#~ msgstr "Anbring instruktionsstørrelser i asm-filen"
+
+#~ msgid "Specify the initial stack address"
+#~ msgstr "Angiv den første stakadresse"
+
+#~ msgid "Specify the MCU name"
+#~ msgstr "Angiv MCU-navnet"
+
+#~ msgid "trampolines not supported"
+#~ msgstr "trampoliner understøttes ikke"
+
+#~ msgid "missing '(' after '#pragma %s' - ignored"
+#~ msgstr "manglende '(' efter '#pragma %s' - ignoreret"
+
+#~ msgid "missing function name in '#pragma %s' - ignored"
+#~ msgstr "manglende funktionsnavn i '#pragma %s' - ignoreret"
+
+#~ msgid "malformed '#pragma %s' - ignored"
+#~ msgstr "forkert udformet '#pragma %s' - ignoreret"
+
+#~ msgid "missing section name in '#pragma %s' - ignored"
+#~ msgstr "manglende sektionsnavn i '#pragma %s' - ignoreret"
+
+#~ msgid "missing ')' for '#pragma %s' - ignored"
+#~ msgstr "manglende '(' for '#pragma %s' - ignoreret"
+
+#~ msgid "junk at end of '#pragma %s'"
+#~ msgstr "ragelse i slutningen af '#pragma %s'"
+
+#~ msgid "unknown CPU version %d, using 40.\n"
+#~ msgstr "ukendt processorversion %d, bruger 40.\n"
+
+#~ msgid "ISR %s requires %d words of local vars, max is 32767"
+#~ msgstr "ISR %s kræver %d ord af lokale variable, maks. er 32767"
+
+#~ msgid "using CONST_DOUBLE for address"
+#~ msgstr "bruger CONST_DOUBLE til adresse"
+
+#~ msgid "c4x_address_cost: Invalid addressing mode"
+#~ msgstr "c4x_address_cost: Ugyldig adresseringstilstand"
+
+#~ msgid "c4x_print_operand: %%L inconsistency"
+#~ msgstr "c4x_print_operand: %%L-inkonsistens"
+
+#~ msgid "c4x_print_operand: %%N inconsistency"
+#~ msgstr "c4x_print_operand: %%N-inkonsistens"
+
+#~ msgid "c4x_print_operand: %%O inconsistency"
+#~ msgstr "c4x_print_operand: %%O-inkonsistens"
+
+#~ msgid "c4x_print_operand: Bad operand case"
+#~ msgstr "c4x_print_operand: Ugyldig operand-case"
+
+#~ msgid "c4x_print_operand_address: Bad post_modify"
+#~ msgstr "c4x_print_operand_address: Ugyldig post_modify"
+
+#~ msgid "c4x_print_operand_address: Bad pre_modify"
+#~ msgstr "c4x_print_operand_address: Ugyldig pre_modify"
+
+#~ msgid "c4x_print_operand_address: Bad operand case"
+#~ msgstr "c4x_print_operand_address: Ugyldig operand-case"
+
+#~ msgid "c4x_rptb_insert: Cannot find start label"
+#~ msgstr "c4x_rptb_insert: Kan ikke finde startetiket"
+
+#~ msgid "mode not QImode"
+#~ msgstr "tilstand ikke QImode"
+
+#~ msgid "invalid indirect memory address"
+#~ msgstr "ugyldig indirekte hukommelsesadresse"
+
+#~ msgid "invalid indirect (S) memory address"
+#~ msgstr "ugyldig indirekte (S) hukommelsesadresse"
+
+#~ msgid "c4x_valid_operands: Internal error"
+#~ msgstr "c4x_valid_operands: Intern fejl"
+
+#~ msgid "c4x_operand_subword: invalid mode"
+#~ msgstr "c4x_operand_subword: ugyldig tilstand"
+
+#~ msgid "c4x_operand_subword: invalid operand"
+#~ msgstr "c4x_operand_subword: ugyldig operand"
+
+#~ msgid "c4x_operand_subword: invalid autoincrement"
+#~ msgstr "c4x_operand_subword: ugyldig selvforøgelse"
+
+#~ msgid "c4x_operand_subword: invalid address"
+#~ msgstr "c4x_operand_subword: ugyldig adresse"
+
+#~ msgid "c4x_operand_subword: address not offsettable"
+#~ msgstr "c4x_operand_subword: adresse kan ikke tilføjes et offset"
+
+#~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n"
+#~ msgstr "c4x_rptb_rpts_p: Topetiket til gentagelsesblok flyttet\n"
+
+#~ msgid "Small memory model"
+#~ msgstr "Lille hukommelsesmodel"
+
+#~ msgid "Big memory model"
+#~ msgstr "Stor hukommelsesmodel"
+
+#~ msgid "Use MPYI instruction for C3x"
+#~ msgstr "Benyt MPYI-instruktionen til C3x"
+
+#~ msgid "Do not use MPYI instruction for C3x"
+#~ msgstr "Benyt ikke MPYI-instruktionen til C3x"
+
+#~ msgid "Use fast but approximate float to integer conversion"
+#~ msgstr "Benyt hurtig, men approksimativ konvertering fra komma- til heltal"
+
+#~ msgid "Use slow but accurate float to integer conversion"
+#~ msgstr "Benyt langsom, men nøjagtig konvertering fra komma- til heltal"
+
+#~ msgid "Enable use of RTPS instruction"
+#~ msgstr "Aktivér brug af RTPS-instruktionen"
+
+#~ msgid "Disable use of RTPS instruction"
+#~ msgstr "Deaktivér brug af RTPS-instruktionen"
+
+#~ msgid "Enable use of RTPB instruction"
+#~ msgstr "Aktivér brug af RTPB-instruktionen"
+
+#~ msgid "Disable use of RTPB instruction"
+#~ msgstr "Deaktivér brug af RTPB-instruktionen"
+
+#~ msgid "Generate code for C30 CPU"
+#~ msgstr "Generér kode til en C30-processor"
+
+#~ msgid "Generate code for C31 CPU"
+#~ msgstr "Generér kode til en C31-processor"
+
+#~ msgid "Generate code for C32 CPU"
+#~ msgstr "Generér kode til en C32-processor"
+
+#~ msgid "Generate code for C33 CPU"
+#~ msgstr "Generér kode til en C33-processor"
+
+#~ msgid "Generate code for C40 CPU"
+#~ msgstr "Generér kode til en C40-processor"
+
+#~ msgid "Generate code for C44 CPU"
+#~ msgstr "Generér kode til en C44-processor"
+
+#~ msgid "Emit code compatible with TI tools"
+#~ msgstr "Udsend kode der er kompatibel med TI-værktøjer"
+
+#~ msgid "Emit code to use GAS extensions"
+#~ msgstr "Udsend kode der bruger GAS-udvidelser"
+
+# RETMIG: hvad står ISR for?
+#~ msgid "Save DP across ISR in small memory model"
+#~ msgstr "Gem DP over ISR i lille hukommelsesmodel"
+
+#~ msgid "Don't save DP across ISR in small memory model"
+#~ msgstr "Gem ikke DP over ISR i lille hukommelsesmodel"
+
+#~ msgid "Pass arguments on the stack"
+#~ msgstr "Overbring parametre på stakken"
+
+#~ msgid "Pass arguments in registers"
+#~ msgstr "Overbring parametre i registre"
+
+#~ msgid "Enable new features under development"
+#~ msgstr "Aktivér nye faciliteter under udvikling"
+
+#~ msgid "Disable new features under development"
+#~ msgstr "Deaktivér nye faciliteter under udvikling"
+
+#~ msgid "Use the BK register as a general purpose register"
+#~ msgstr "Benyt BK-registeret som et alment register"
+
+#~ msgid "Do not allocate BK register"
+#~ msgstr "Allokér ikke BK-registeret"
+
+#~ msgid "Enable use of DB instruction"
+#~ msgstr "Aktivér brug af DB-instruktioner"
+
+#~ msgid "Disable use of DB instruction"
+#~ msgstr "Deaktivér brug af DB-instruktioner"
+
+#~ msgid "Enable debugging"
+#~ msgstr "Aktivér fejlanalyseringsinfo"
+
+#~ msgid "Disable debugging"
+#~ msgstr "Deaktivér fejlanalyseringsinfo"
+
+# RETMIG: hvad betyder hoisting? (det har noget med jage indlæsning af dem ud af registre)
+#~ msgid "Force constants into registers to improve hoisting"
+#~ msgstr "Tving konstanter ind i registre for at forbedre hoisting"
+
+#~ msgid "Don't force constants into registers"
+#~ msgstr "Tving ikke konstanter ind i registre"
+
+#~ msgid "Force RTL generation to emit valid 3 operand insns"
+#~ msgstr "Tving RTL-generering til at udsende gyldig 3-operandinstruktioner"
+
+#~ msgid "Allow RTL generation to emit invalid 3 operand insns"
+#~ msgstr "Tillad RTL-generering at udsende ugyldig 3-operandinstruktioner"
+
+#~ msgid "Allow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Tillad iterationstællere uden fortegn for RPTB/DB"
+
+#~ msgid "Disallow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Tillad ikke iterationstællere uden fortegn for RPTB/DB"
+
+#~ msgid "Preserve all 40 bits of FP reg across call"
+#~ msgstr "Bevar alle 40 bit af kommatalsregisteret på tværs af kald"
+
+#~ msgid "Only preserve 32 bits of FP reg across call"
+#~ msgstr "Bevar kun 32 bit af kommatalsregisteret på tværs af kald"
+
+#~ msgid "Enable parallel instructions"
+#~ msgstr "Aktivér parallelle instruktioner"
+
+#~ msgid "Disable parallel instructions"
+#~ msgstr "Deaktivér parallelle instruktioner"
+
+#~ msgid "Enable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Aktivér instruktionerne MPY||ADD og MPY||SUB"
+
+#~ msgid "Disable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Deaktivér instruktionerne MPY||ADD og MPY||SUB"
+
+#~ msgid "Assume that pointers may be aliased"
+#~ msgstr "Antag at henvisninger kan være aliaser"
+
+#~ msgid "Assume that pointers not aliased"
+#~ msgstr "Antag at henvisninger ikke kan være aliaser"
+
+#~ msgid "Specify maximum number of iterations for RPTS"
+#~ msgstr "Angiv maksimalt antal iterationer for RPTS"
+
+#~ msgid "Select CPU to generate code for"
+#~ msgstr "Vælg den processor der skal genereres kode til"
+
+#~ msgid "unexpected index-type in cris_print_index"
+#~ msgstr "uventet indekstype i cris_print_index"
+
+#~ msgid "unexpected base-type in cris_print_base"
+#~ msgstr "uventet grundtype in cris_print_base"
+
+#~ msgid "stackframe too big: %d bytes"
+#~ msgstr "stakramme for stor: %d byte"
+
+#~ msgid "allocated but unused delay list in epilogue"
+#~ msgstr "allokeret, men ubenyttet venteliste i afslutning"
+
+#~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return"
+#~ msgstr "uventet funktionstype behøver stak justering for __builtin_eh_return"
+
+#~ msgid "invalid operand for 'b' modifier"
+#~ msgstr "ugyldig operand til 'b'-ændring"
+
+#~ msgid "invalid operand for 'v' modifier"
+#~ msgstr "ugyldig operand til 'v'-ændring"
+
+#~ msgid "invalid operand for 'P' modifier"
+#~ msgstr "ugyldig operand til 'P'-ændring"
+
+#~ msgid "invalid operand for 'p' modifier"
+#~ msgstr "ugyldig operand til 'p'-ændring"
+
+#~ msgid "invalid operand for 'z' modifier"
+#~ msgstr "ugyldig operand til 'z'-ændring"
+
+#~ msgid "invalid operand for 'H' modifier"
+#~ msgstr "ugyldig operand til 'H'-ændring"
+
+#~ msgid "bad register"
+#~ msgstr "ugyldigt register"
+
+#~ msgid "invalid operand for 'e' modifier"
+#~ msgstr "ugyldig operand til 'e'-ændring"
+
+#~ msgid "invalid operand for 'm' modifier"
+#~ msgstr "ugyldig operand til 'm'-ændring"
+
+#~ msgid "invalid operand for 'A' modifier"
+#~ msgstr "ugyldig operand til 'A'-ændring"
+
+#~ msgid "invalid operand for 'D' modifier"
+#~ msgstr "ugyldig operand til 'D'-ændring"
+
+#~ msgid "invalid operand for 'T' modifier"
+#~ msgstr "ugyldig operand til 'T'-ændring"
+
+#~ msgid "invalid operand modifier letter"
+#~ msgstr "ugyldigt operandændringsbogstav"
+
+#~ msgid "internal error: bad register: %d"
+#~ msgstr "intern fejl: ugyldigt register: %d"
+
+#~ msgid "unexpected multiplicative operand"
+#~ msgstr "uventet multiplikativ operand"
+
+#~ msgid "unexpected operand"
+#~ msgstr "uventet operand"
+
+#~ msgid "unrecognized address"
+#~ msgstr "ukendt adresse"
+
+#~ msgid "internal error: sideeffect-insn affecting main effect"
+#~ msgstr "intern fejl: bivirkningsinstruktion påvirker hovedvirkning"
+
+#~ msgid "internal error: cris_side_effect_mode_ok with bad operands"
+#~ msgstr "intern fejl: cris_side_effect_mode_ok med ugyldige operander"
+
+#~ msgid "unrecognized supposed constant"
+#~ msgstr "ukendt formodet konstant"
+
+#~ msgid "unrecognized supposed constant in cris_global_pic_symbol"
+#~ msgstr "ukendt formodet konstant i cris_global_pic_symbol"
+
+#~ msgid "-max-stackframe=%d is not usable, not between 0 and %d"
+#~ msgstr "-max-stackframe=%d er ikke brugbar mellem 0 og %d"
+
+#~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
+#~ msgstr "ukendt CRIS-versionsspecifikation i -march= eller -mcpu=: %s"
+
+#~ msgid "unknown CRIS cpu version specification in -mtune= : %s"
+#~ msgstr "ukendt CRIS-versionsspecifikation i -mtune=: %s"
+
+#~ msgid "-fPIC and -fpic are not supported in this configuration"
+#~ msgstr "-fPIC og -fpic understøttes ikke af denne konfiguration"
+
+#~ msgid "that particular -g option is invalid with -maout and -melinux"
+#~ msgstr "det bestemte '-g'-tilvalg er ugyldigt med -maout og -melinux"
+
+#~ msgid "unexpected side-effects in address"
+#~ msgstr "uventede bivirkninger i adresse"
+
+#~ msgid "unexpected PIC symbol"
+#~ msgstr "uventet PIC-symbol"
+
+#~ msgid "PIC register isn't set up"
+#~ msgstr "PIC-register er ikke sat op"
+
+#~ msgid "unexpected address expression"
+#~ msgstr "uventet adresseudtryk"
+
+#~ msgid "emitting PIC operand, but PIC register isn't set up"
+#~ msgstr "udsender PIC-operand, men PIC-register er ikke sat op"
+
+#~ msgid "unexpected NOTE as addr_const:"
+#~ msgstr "uventet NOTE som addr_const:"
+
+#~ msgid "Compile for the MMU-less Etrax 100-based elinux system"
+#~ msgstr "Oversæt for det Etrax 100-baserede elinux-system uden MMU"
+
+#~ msgid "For elinux, request a specified stack-size for this program"
+#~ msgstr "For elinux; forespørg en angivet stakstørrelse for dette program"
+
+#~ msgid "Compile for ETRAX 4 (CRIS v3)"
+#~ msgstr "Oversæt for ETRAX 4 (CRIS v3)"
+
+#~ msgid "Compile for ETRAX 100 (CRIS v8)"
+#~ msgstr "Oversæt for ETRAX 100 (CRIS v8)"
+
+#~ msgid "Emit verbose debug information in assembly code"
+#~ msgstr "Udsend fejlanalyseringsinfo i maskinkode"
+
+#~ msgid "Do not use condition codes from normal instructions"
+#~ msgstr "Benyt ikke betingelseskoder fra normale instruktioner"
+
+#~ msgid "Do not emit addressing modes with side-effect assignment"
+#~ msgstr "Udsend ikke adresseringstilstande med bivirkningstildeling"
+
+#~ msgid "Do not tune stack alignment"
+#~ msgstr "Finjustér ikke stakjustering"
+
+#~ msgid "Do not tune writable data alignment"
+#~ msgstr "Finjustér ikke justering af skrivbare data"
+
+#~ msgid "Do not tune code and read-only data alignment"
+#~ msgstr "Finjustér ikke justering af kode og skrivebeskyttet data"
+
+#~ msgid "Align code and data to 32 bits"
+#~ msgstr "Justér kode og data til 32 bit"
+
+#~ msgid "Don't align items in code or data"
+#~ msgstr "Justér ikke elementer i kode eller data"
+
+#~ msgid "Do not emit function prologue or epilogue"
+#~ msgstr "Udsend ikke funktionsindledning eller -afslutning"
+
+#~ msgid "Use the most feature-enabling options allowed by other options"
+#~ msgstr "Benyt de tilvalg der giver de fleste faciliteter tilladt af andre tilvalg"
+
+#~ msgid "Override -mbest-lib-options"
+#~ msgstr "Overskriv -mbest-lib-options"
+
+#~ msgid "Generate code for the specified chip or CPU version"
+#~ msgstr "Generér kode til en given chip- eller processorversion"
+
+#~ msgid "Tune alignment for the specified chip or CPU version"
+#~ msgstr "Finjustér justering til en given chip- eller processorversion"
+
+#~ msgid "Warn when a stackframe is larger than the specified size"
+#~ msgstr "Advar når en stakramme er større end den angivne størrelse"
+
+#~ msgid "no FUNCTION_PROFILER for CRIS"
+#~ msgstr "ingen FUNCTION_PROFILER for CRIS"
+
+#~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
+#~ msgstr "Benyt ikke GOTPLT-referencer sammen med -fpic og -fPIC"
+
+#~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s"
+#~ msgstr "ugyldig modes_tieable_p for register %s, mode1 %s, mode2 %s"
+
+#~ msgid "bad insn to d30v_print_operand_address:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand_address:"
+
+#~ msgid "bad insn to d30v_print_operand_memory_reference:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand_memory_reference:"
+
+#~ msgid "bad insn to d30v_print_operand, 'f' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'f'-ændring:"
+
+#~ msgid "bad insn to d30v_print_operand, 'A' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'A'-ændring:"
+
+#~ msgid "bad insn to d30v_print_operand, 'M' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'M'-ændring:"
+
+#~ msgid "bad insn to print_operand, 'F' or 'T' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'F'- eller 'T'-ændring:"
+
+#~ msgid "bad insn to print_operand, 'B' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'B'-ændring:"
+
+#~ msgid "bad insn to print_operand, 'E' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'E'-ændring:"
+
+#~ msgid "bad insn to print_operand, 'R' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 'R'-ændring:"
+
+#~ msgid "bad insn to print_operand, 's' modifier:"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 's'-ændring:"
+
+#~ msgid "bad insn in d30v_print_operand, 0 case"
+#~ msgstr "ugyldig instruktion til d30v_print_operand, 0 case"
+
+#~ msgid "d30v_emit_comparison"
+#~ msgstr "d30v_emit_comparison"
+
+#~ msgid "bad call to d30v_move_2words"
+#~ msgstr "ugyldigt kald af d30v_move_2words"
+
+#~ msgid "Enable use of conditional move instructions"
+#~ msgstr "Aktivér brug af betingede flytteinstruktioner"
+
+#~ msgid "Disable use of conditional move instructions"
+#~ msgstr "Deaktivér brug af betingede flytteinstruktioner"
+
+#~ msgid "Debug argument support in compiler"
+#~ msgstr "Fejlanalyser parameterunderstøttelse i oversætteren"
+
+#~ msgid "Debug stack support in compiler"
+#~ msgstr "Fejlanalyser stakunderstøttelse i oversætteren"
+
+#~ msgid "Debug memory address support in compiler"
+#~ msgstr "Fejlanalyser hukommelsesadresseunderstøttelse i oversætteren"
+
+#~ msgid "Make adjacent short instructions parallel if possible"
+#~ msgstr "Gør nærliggende korte instruktioner parallelle om muligt"
+
+#~ msgid "Do not make adjacent short instructions parallel"
+#~ msgstr "Gør ikke nærliggende korte instruktioner parallelle"
+
+#~ msgid "Link programs/data to be in external memory by default"
+#~ msgstr "Sammenkæd program/data til at være i ekstern hukommelse som standard"
+
+#~ msgid "Link programs/data to be in onchip memory by default"
+#~ msgstr "Sammenkæd program/data til at være i hukommelsen på chippen som standard"
+
+#~ msgid "Change the branch costs within the compiler"
+#~ msgstr "Skift forgreningsomkostningen i oversætteren"
+
+#~ msgid "Change the threshold for conversion to conditional execution"
+#~ msgstr "Skift tærsklen for konvertering til betinget udførelse"
+
+#~ msgid "stack size > 32k"
+#~ msgstr "stakstørrelse > 32k"
+
+#~ msgid "invalid addressing mode"
+#~ msgstr "ugyldig adresseringstilstand"
+
+#~ msgid "bad register extension code"
+#~ msgstr "ugyldig registerudvidelseskode"
+
+#~ msgid "invalid offset in ybase addressing"
+#~ msgstr "ugyldigt afsæt i ybase-adressering"
+
+#~ msgid "invalid register in ybase addressing"
+#~ msgstr "ugyldigt register i ybase-adressering"
+
+#~ msgid "invalid shift operator in emit_1600_core_shift"
+#~ msgstr "ugyldig skifteoperator i emit_1600_core_shift"
+
+#~ msgid "invalid mode for gen_tst_reg"
+#~ msgstr "ugyldig tilstand for gen_tst_reg"
+
+#~ msgid "invalid mode for integer comparison in gen_compare_reg"
+#~ msgstr "ugyldig tilstand for heltalssammenligning i gen_compare_reg"
+
+#~ msgid "Pass parameters in registers (default)"
+#~ msgstr "Overbring parametre i registre (standard)"
+
+#~ msgid "Don't pass parameters in registers"
+#~ msgstr "Overbring ikke parametre i registre"
+
+#~ msgid "Generate code for near calls"
+#~ msgstr "Generér kode til nære kald"
+
+#~ msgid "Don't generate code for near calls"
+#~ msgstr "Generér ikke kode til nære kald"
+
+#~ msgid "Generate code for near jumps"
+#~ msgstr "Generér kode til nære spring"
+
+#~ msgid "Don't generate code for near jumps"
+#~ msgstr "Generér ikke kode til nære spring"
+
+#~ msgid "Generate code for a bit-manipulation unit"
+#~ msgstr "Generér kode til en bit-manipuleringsenhed"
+
+#~ msgid "Don't generate code for a bit-manipulation unit"
+#~ msgstr "Generér ikke kode til en bit-manipuleringsenhed"
+
+#~ msgid "Generate code for memory map1"
+#~ msgstr "Generér kode til memory map1"
+
+#~ msgid "Generate code for memory map2"
+#~ msgstr "Generér kode til memory map2"
+
+#~ msgid "Generate code for memory map3"
+#~ msgstr "Generér kode til memory map3"
+
+#~ msgid "Generate code for memory map4"
+#~ msgstr "Generér kode til memory map4"
+
+#~ msgid "Ouput extra code for initialized data"
+#~ msgstr "Udsend ekstra kode til data med startværdier"
+
+#~ msgid "Don't let reg. allocator use ybase registers"
+#~ msgstr "Lad ikke registerallokeringen benytte ybase-registre"
+
+#~ msgid "Output extra debug info in Luxworks environment"
+#~ msgstr "Udsend ekstra fejlanalyseringsinfo i Luxworks-miljøet"
+
+#~ msgid "Save temp. files in Luxworks environment"
+#~ msgstr "Gem midlertidige filer i Luxworks-miljøet"
+
+#~ msgid "Specify alternate name for text section"
+#~ msgstr "Angiv alternativt navn til tekstsektionen"
+
+#~ msgid "Specify alternate name for data section"
+#~ msgstr "Angiv alternativt navn til datasektionen"
+
+#~ msgid "Specify alternate name for bss section"
+#~ msgstr "Angiv alternativt navn til bss-sektionen"
+
+#~ msgid "Specify alternate name for constant section"
+#~ msgstr "Angiv alternativt navn til konstantsektionen"
+
+#~ msgid "Specify alternate name for dsp16xx chip"
+#~ msgstr "Angiv alternativt navn til dsp16xx-chippen"
+
+#~ msgid "profiling not implemented yet"
+#~ msgstr "profilering understøttes ikke endnu"
+
+#~ msgid "trampolines not yet implemented"
+#~ msgstr "trampoliner understøttes ikke endnu"
+
+#~ msgid "fr30_print_operand_address: unhandled address"
+#~ msgstr "fr30_print_operand_address: ikke-håndteret adresse"
+
+#~ msgid "fr30_print_operand: unrecognized %%p code"
+#~ msgstr "fr30_print_operand: ukendt '%%p'-kode"
+
+#~ msgid "fr30_print_operand: unrecognized %%b code"
+#~ msgstr "fr30_print_operand: ukendt '%%b'-kode"
+
+#~ msgid "fr30_print_operand: unrecognized %%B code"
+#~ msgstr "fr30_print_operand: ukendt '%%B'-kode"
+
+#~ msgid "fr30_print_operand: invalid operand to %%A code"
+#~ msgstr "fr30_print_operand: ugyldig operand til '%%A'-kode"
+
+#~ msgid "fr30_print_operand: invalid %%x code"
+#~ msgstr "fr30_print_operand: ugyldig '%%x'-kode"
+
+#~ msgid "fr30_print_operand: invalid %%F code"
+#~ msgstr "fr30_print_operand: ugyldig '%%F'-kode"
+
+#~ msgid "fr30_print_operand: unknown code"
+#~ msgstr "fr30_print_operand: ukendt kode"
+
+#~ msgid "fr30_print_operand: unhandled MEM"
+#~ msgstr "fr30_print_operand: ikke-håndteret MEM"
+
+#~ msgid "Assume small address space"
+#~ msgstr "Antag lille adresserum"
+
+#~ msgid "Unknown cpu: -mcpu=%s"
+#~ msgstr "Ukendt processor: -mcpu=%s"
+
+#~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)"
+#~ msgstr "-fpic og -gdwarf er indbyrdes uforenelige (-fpic og -g/-gdwarf-2 er i orden)"
+
+#~ msgid "Bad insn to frv_print_operand_address:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand_address:"
+
+#~ msgid "Bad register to frv_print_operand_memory_reference_reg:"
+#~ msgstr "Ugyldigt register til frv_print_operand_memory_reference_reg:"
+
+#~ msgid "Bad insn to frv_print_operand_memory_reference:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand_memory_reference:"
+
+#~ msgid "Bad insn in frv_print_operand, bad const_double"
+#~ msgstr "Ugyldig instruktion i frv_print_operand, ugyldig const_double"
+
+#~ msgid "Bad insn to frv_print_operand, 'C' modifier:"
+#~ msgstr "Ugyldig instruktionen til frv_print_operand, 'C'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'c' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'c'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'e' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'e'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'F' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'F'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'f' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'f'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'L' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'L'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'M/N'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, 'O' modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, 'O'-modifikation:"
+
+#~ msgid "Bad insn to frv_print_operand, P modifier:"
+#~ msgstr "Ugyldig instruktion til frv_print_operand, P-modifikation:"
+
+#~ msgid "Bad insn in frv_print_operand, z case"
+#~ msgstr "Ugyldig instruktion i frv_print_operand, tilfældet z"
+
+#~ msgid "Bad insn in frv_print_operand, 0 case"
+#~ msgstr "Ugyldig instruktion i frv_print_operand, tilfældet 0"
+
+#~ msgid "frv_print_operand: unknown code"
+#~ msgstr "fr_print_operand: ukendt kode"
+
+#~ msgid "Bad output_move_single operand"
+#~ msgstr "Ugyldig output_move_single-operand"
+
+#~ msgid "Bad output_move_double operand"
+#~ msgstr "Ugyldig output_move_double-operand"
+
+#~ msgid "Bad output_condmove_single operand"
+#~ msgstr "Ugyldig output_condmove_single-operand"
+
+#~ msgid "frv_registers_update"
+#~ msgstr "frv_registers_update"
+
+#~ msgid "frv_registers_used_p"
+#~ msgstr "frv_registers_used_p"
+
+#~ msgid "frv_registers_set_p"
+#~ msgstr "frv_registers_set_p"
+
+#~ msgid "accumulator is not a constant integer"
+#~ msgstr "akkumulator er ikke et konstant heltal"
+
+#~ msgid "accumulator number is out of bounds"
+#~ msgstr "akkumulatortal er uden for det gyldig interval"
+
+#~ msgid "inappropriate accumulator for `%s'"
+#~ msgstr "forkert akkumulator for '%s'"
+
+#~ msgid "`%s' expects a constant argument"
+#~ msgstr "'%s' forventer en konstant parameter"
+
+#~ msgid "constant argument out of range for `%s'"
+#~ msgstr "konstant parameter uden for det gyldige interval for '%s'"
+
+#~ msgid "media functions are not available unless -mmedia is used"
+#~ msgstr "mediafunktioner er ikke tilgængelige medmindre -mmedia benyttes"
+
+#~ msgid "this media function is only available on the fr500"
+#~ msgstr "denne mediafunktion er kun tilgængelig på fr500"
+
+#~ msgid "this media function is only available on the fr400"
+#~ msgstr "denne mediafunktion er kun tilgængelig på fr400"
+
+#~ msgid " (frv)"
+#~ msgstr " (frv)"
+
+#~ msgid "-ms2600 is used without -ms"
+#~ msgstr "-ms2600 benyttet uden -ms"
+
+#~ msgid "-mn is used without -mh or -ms"
+#~ msgstr "-mn benyttet uden -mh eller -ms"
+
+#~ msgid "Generate H8S code"
+#~ msgstr "Generér H8S-kode"
+
+#~ msgid "Do not generate H8S code"
+#~ msgstr "Generér ikke H8S-kode"
+
+#~ msgid "Generate H8S/2600 code"
+#~ msgstr "Generér H8S/2600-kode"
+
+#~ msgid "Do not generate H8S/2600 code"
+#~ msgstr "Generér ikke H8S/2600-kode"
+
+#~ msgid "Make integers 32 bits wide"
+#~ msgstr "Gør heltal 32 bit brede"
+
+#~ msgid "Use registers for argument passing"
+#~ msgstr "Benyt registre til parameteroverbringning"
+
+#~ msgid "Do not use registers for argument passing"
+#~ msgstr "Benyt ikke registre til parameteroverbringning"
+
+#~ msgid "Consider access to byte sized memory slow"
+#~ msgstr "Betragt tilgang til bytestørrelseshukommelse som langsomt"
+
+#~ msgid "Enable linker relaxing"
+#~ msgstr "Aktivér tolerant sammenkædning"
+
+#~ msgid "Generate H8/300H code"
+#~ msgstr "Generér H8/300H-kode"
+
+#~ msgid "Enable the normal mode"
+#~ msgstr "Aktivér den normale tilstand"
+
+#~ msgid "Do not generate H8/300H code"
+#~ msgstr "Generér ikke H8/300H-kode"
+
+#~ msgid "Use H8/300 alignment rules"
+#~ msgstr "Benyt H8/300-justeringsregler"
+
+#~ msgid "junk at end of #pragma map"
+#~ msgstr "ragelse i slutningen af #pragma map"
+
+#~ msgid "malformed #pragma map, ignored"
+#~ msgstr "forkert udformet '#pragma map' - ignoreret"
+
+#~ msgid "real name is too long - alias ignored"
+#~ msgstr "rigtigt navn for langt - alias ignoreret"
+
+#~ msgid "alias name is too long - alias ignored"
+#~ msgstr "aliasnavn for langt - alias ignoreret"
+
+#~ msgid "internal error--no jump follows compare:"
+#~ msgstr "intern fejl - intet spring efterfølger sammenligning:"
+
+#~ msgid "Generate char instructions"
+#~ msgstr "Generér char-instruktioner"
+
+#~ msgid "Do not generate char instructions"
+#~ msgstr "Generér ikke char-instruktioner"
+
+#~ msgid "code model %s not supported in PIC mode"
+#~ msgstr "kodemodellen %s er ikke understøttet i PIC-tilstand"
+
+#~ msgid "bad value (%s) for -mcmodel= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mcmodel="
+
+#~ msgid "bad value (%s) for -masm= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -masm="
+
+#~ msgid "code model `%s' not supported in the %s bit mode"
+#~ msgstr "kodemodellen %s er ikke understøttet i %s bit-tilstand"
+
+#~ msgid "code model `large' not supported yet"
+#~ msgstr "kodemodellen 'large' er ikke understøttet endnu"
+
+#~ msgid "%i-bit mode not compiled in"
+#~ msgstr "%i bit-tilstand er ikke oversat med ind"
+
+#~ msgid "bad value (%s) for -march= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -march="
+
+#~ msgid "bad value (%s) for -mcpu= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mcpu="
+
+#~ msgid "-mregparm=%d is not between 0 and %d"
+#~ msgstr "-mregparm=%d er ikke mellem 0 og %d"
+
+#~ msgid "-malign-loops is obsolete, use -falign-loops"
+#~ msgstr "-malign-loops er forældet, benyt -falign-loops"
+
+#~ msgid "-malign-loops=%d is not between 0 and %d"
+#~ msgstr "-malign-loops=%d er ikke mellem 0 og %d"
+
+#~ msgid "-malign-jumps is obsolete, use -falign-jumps"
+#~ msgstr "-malign-jumps er forældet, benyt -falign-jumps"
+
+#~ msgid "-malign-functions is obsolete, use -falign-functions"
+#~ msgstr "-malign-functions er forældet, benyt -falign-functions"
+
+#~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
+#~ msgstr "-mpreferred-stack-boundary=%d er ikke mellem %d og 12"
+
+#~ msgid "-mbranch-cost=%d is not between 0 and 5"
+#~ msgstr "-mbranch-cost=%d er ikke mellem 0 og 5"
+
+#~ msgid "bad value (%s) for -mtls-dialect= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mtls-dialect"
+
+#~ msgid "-malign-double makes no sense in the 64bit mode"
+#~ msgstr "-malign-double giver ikke mening i 64 bit-tilstand"
+
+#~ msgid "-mrtd calling convention not supported in the 64bit mode"
+#~ msgstr "kaldekonventionen -mrtd er ikke understøttet i 64 bit-tilstand"
+
+#~ msgid "SSE instruction set disabled, using 387 arithmetics"
+#~ msgstr "SSE-instruktionssæt deaktiveret, bruger 387-beregninger"
+
+#~ msgid "387 instruction set disabled, using SSE arithmetics"
+#~ msgstr "387-instruktionssæt deaktiveret, bruger SSE-beregninger"
+
+#~ msgid "bad value (%s) for -mfpmath= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mfpmath="
+
+#~ msgid "`%s' attribute requires an integer constant argument"
+#~ msgstr "egenskaben '%s' kræver en heltalskonstant som parameter"
+
+#~ msgid "argument to `%s' attribute larger than %d"
+#~ msgstr "parameter til egenskaben '%s' er større end %d"
+
+#~ msgid "invalid UNSPEC as operand"
+#~ msgstr "ugyldig UNSPEC som operand"
+
+#~ msgid "extended registers have no high halves"
+#~ msgstr "udvidede registre har ikke høje halvdele"
+
+#~ msgid "unsupported operand size for extended register"
+#~ msgstr "ikke-understøttet operandstørrelse for udvidede registre"
+
+#~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+#~ msgstr "operand er hverken en konstant eller en betingelseskode, ugyldig operandkode 'c'"
+
+#~ msgid "invalid operand code `%c'"
+#~ msgstr "ugyldig operandkode '%c'"
+
+#~ msgid "invalid constraints for operand"
+#~ msgstr "ugyldige begrænsninger for operand"
+
+#~ msgid "unknown insn mode"
+#~ msgstr "ukendt instruktionstilstand"
+
+#~ msgid "selector must be an immediate"
+#~ msgstr "vælger skal være en umiddelbar værdi"
+
+#~ msgid "mask must be an immediate"
+#~ msgstr "maske skal være en umiddelbar værdi"
+
+#~ msgid "shift must be an immediate"
+#~ msgstr "skifteværdi skal være en umiddelbar værdi"
+
+#~ msgid "`%s' attribute only applies to variables"
+#~ msgstr "egenskaben '%s' kan kun anvendes på variabler"
+
+#~ msgid "`%s' declared as both exported to and imported from a DLL"
+#~ msgstr "'%s' erklæret som både eksporteret til og importeret fra en DLL"
+
+#~ msgid "Use the Cygwin interface"
+#~ msgstr "Benyt Cygwin-grænsefladen"
+
+#~ msgid "Use the Mingw32 interface"
+#~ msgstr "Benyt Mingw32-grænsefladen"
+
+#~ msgid "Create GUI application"
+#~ msgstr "Opret grafisk program"
+
+#~ msgid "Don't set Windows defines"
+#~ msgstr "Angiv ikke Windows-definitioner"
+
+#~ msgid "Set Windows defines"
+#~ msgstr "Angiv Windows-definitioner"
+
+#~ msgid "Create console application"
+#~ msgstr "Opret konsolprogram"
+
+#~ msgid "Generate code for a DLL"
+#~ msgstr "Generér kode til en DLL"
+
+#~ msgid "Ignore dllimport for functions"
+#~ msgstr "Ignorér dllimport til funktioner"
+
+#~ msgid "Use Mingw-specific thread support"
+#~ msgstr "Benyt Mingw-specifik trådunderstøttelse"
+
+#~ msgid "-f%s ignored for target (all code is position independent)"
+#~ msgstr "-f%s ignoreret for målarkitekturen (all kode er positionsuafhængigt)"
+
+#~ msgid "-mbnu210 is ignored (option is obsolete)"
+#~ msgstr "-mbnu210 ignoreres (tilvalget er forældet)"
+
+#~ msgid "Alternate calling convention"
+#~ msgstr "Alternativ kaldekonvention"
+
+#~ msgid "Use normal calling convention"
+#~ msgstr "Brug normal kaldekonvention"
+
+#~ msgid "Align some doubles on dword boundary"
+#~ msgstr "Justér nogle double-variabler til dword-grænserne"
+
+#~ msgid "Align doubles on word boundary"
+#~ msgstr "Justér double-variabler til word-grænserne"
+
+#~ msgid "Uninitialized locals in .bss"
+#~ msgstr "Lokale variabler uden startværdi i .bss"
+
+#~ msgid "Uninitialized locals in .data"
+#~ msgstr "Lokale variabler uden startværdi i .data"
+
+#~ msgid "Use IEEE math for fp comparisons"
+#~ msgstr "Brug IEEE-matematik til kommatalssammenligninger"
+
+#~ msgid "Do not use IEEE math for fp comparisons"
+#~ msgstr "Brug ikke IEEE-matematik til kommatalssammenligninger"
+
+#~ msgid "Return values of functions in FPU registers"
+#~ msgstr "Returnér værdier fra funktioner i fpu-registre"
+
+#~ msgid "Do not return values of functions in FPU registers"
+#~ msgstr "Returnér ikke værdier fra funktioner i fpu-registre"
+
+#~ msgid "Do not generate sin, cos, sqrt for FPU"
+#~ msgstr "Generér ikke sin, cos, sqrt til fpu"
+
+#~ msgid "Generate sin, cos, sqrt for FPU"
+#~ msgstr "Generér sin, cos og sqrt til fpu"
+
+#~ msgid "Omit the frame pointer in leaf functions"
+#~ msgstr "Udelad rammehenvisningen i de yderste funktioner"
+
+#~ msgid "Enable stack probing"
+#~ msgstr "Aktivér stakprøvning"
+
+#~ msgid "Align destination of the string operations"
+#~ msgstr "Justér strengoperationernes destination"
+
+#~ msgid "Do not align destination of the string operations"
+#~ msgstr "Justér ikke strengoperationernes destination"
+
+#~ msgid "Inline all known string operations"
+#~ msgstr "Indbyg alle kendte strengoperationer"
+
+#~ msgid "Do not inline all known string operations"
+#~ msgstr "Indbyg ikke alle kendte strengoperationer"
+
+#~ msgid "Use push instructions to save outgoing arguments"
+#~ msgstr "Brug push-instruktioner til at gemme udgående parametre"
+
+#~ msgid "Do not use push instructions to save outgoing arguments"
+#~ msgstr "Brug ikke push-instruktioner til at gemme udgående parametre"
+
+# shadowing betyder at en funktion har samme navn og dermed skjuler en anden
+#~ msgid "Support MMX built-in functions"
+#~ msgstr "Understøt indbyggede MMX-funktioner"
+
+#~ msgid "Do not support MMX built-in functions"
+#~ msgstr "Understøt ikke indbyggede MMX-funktioner"
+
+# shadowing betyder at en funktion har samme navn og dermed skjuler en anden
+#~ msgid "Support 3DNow! built-in functions"
+#~ msgstr "Understøt indbyggede 3DNow!-funktioner"
+
+#~ msgid "Do not support 3DNow! built-in functions"
+#~ msgstr "Understøt ikke indbyggede 3DNow!-funktioner"
+
+#~ msgid "Support MMX and SSE built-in functions and code generation"
+#~ msgstr "Understøt indbyggede MMX- og SSE-funktioner og kodegenerering"
+
+#~ msgid "Do not support MMX and SSE built-in functions and code generation"
+#~ msgstr "Understøt ikke indbyggede MMX- og SSE-funktioner og kodegenerering"
+
+#~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "Understøt indbyggede MMX-, SSE- og SSE2-funktioner og kodegenerering"
+
+#~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "Understøt ikke indbyggede MMX-, SSE- og SSE2-funktioner og kodegenerering"
+
+#~ msgid "sizeof(long double) is 16"
+#~ msgstr "sizeof(long double) er 16"
+
+#~ msgid "sizeof(long double) is 12"
+#~ msgstr "sizeof(long double) er 12"
+
+#~ msgid "Generate 64bit x86-64 code"
+#~ msgstr "Generér 64 bit x86-64-kode"
+
+#~ msgid "Generate 32bit i386 code"
+#~ msgstr "Generér 64 bit i386-kode"
+
+#~ msgid "Use red-zone in the x86-64 code"
+#~ msgstr "Benyt rødzone i x86-64-koden"
+
+#~ msgid "Do not use red-zone in the x86-64 code"
+#~ msgstr "Benyt ikke rødzone i x86-64-koden"
+
+#~ msgid "Schedule code for given CPU"
+#~ msgstr "Planlæg koden til en given processor"
+
+#~ msgid "Generate floating point mathematics using given instruction set"
+#~ msgstr "Generér kommatalsmatematik vha. givent instruktionssæt"
+
+#~ msgid "Generate code for given CPU"
+#~ msgstr "Generér kode til en given processor"
+
+#~ msgid "Number of registers used to pass integer arguments"
+#~ msgstr "Antallet af registre der skal bruges til at overbringe heltalsparametre"
+
+#~ msgid "Loop code aligned to this power of 2"
+#~ msgstr "Løkkekode skal justeres til denne potens af 2"
+
+#~ msgid "Jump targets are aligned to this power of 2"
+#~ msgstr "Steder der skal springes til, justeres til denne potens af 2"
+
+#~ msgid "Function starts are aligned to this power of 2"
+#~ msgstr "Funktionsbegyndelser justeres til denne potens af 2"
+
+#~ msgid "Attempt to keep stack aligned to this power of 2"
+#~ msgstr "Forsøg at holde stakken justeret til denne potens af 2"
+
+#~ msgid "Branches are this expensive (1-5, arbitrary units)"
+#~ msgstr "Forgreninger koster dette (1-5, vilkårlige enheder)"
+
+#~ msgid "Use given x86-64 code model"
+#~ msgstr "Benyt den givne x86-64-kodemodel"
+
+#~ msgid "Use given assembler dialect"
+#~ msgstr "Benyt den givne maskinkodedialekt"
+
+#~ msgid "Use given thread-local storage dialect"
+#~ msgstr "Benyt den givne tråd-lokale lagringsdialekt"
+
+#~ msgid "Generate ELF output"
+#~ msgstr "Generér ELF-uddata"
+
+#~ msgid "Use Mingw32 interface"
+#~ msgstr "Benyt Mingw32-grænseflade"
+
+#~ msgid "Use Cygwin interface"
+#~ msgstr "Benyt Cygwin-grænseflade"
+
+#~ msgid "Use bare Windows interface"
+#~ msgstr "Benyt bar Windows-grænseflade"
+
+#~ msgid "environment variable DJGPP not defined"
+#~ msgstr "miljøvariablen DJGPP er ikke defineret"
+
+#~ msgid "environment variable DJGPP points to missing file '%s'"
+#~ msgstr "miljøvariablen DJGPP peger på den manglende fil '%s'"
+
+#~ msgid "environment variable DJGPP points to corrupt file '%s'"
+#~ msgstr "miljøvariablen DJGPP peger på den ødelagte fil '%s'"
+
+#~ msgid "sorry, not implemented: #pragma align NAME=SIZE"
+#~ msgstr "desværre, ikke implementeret: #pragma align NAVN=STØRRELSE"
+
+#~ msgid "malformed #pragma align - ignored"
+#~ msgstr "forkert udformet '#pragma align' - ignoreret"
+
+#~ msgid "sorry, not implemented: #pragma noalign NAME"
+#~ msgstr "desværre, ikke implementeret: #pragma noalign NAVN"
+
+#~ msgid "conflicting architectures defined - using C series"
+#~ msgstr "modstridende arkitekturer defineret - bruger C-serien"
+
+#~ msgid "conflicting architectures defined - using K series"
+#~ msgstr "modstridende arkitekturer defineret - bruger K-serien"
+
+#~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0"
+#~ msgstr "iC2.0 og iC3.0 er inkompatible - bruger iC3.0"
+
+#~ msgid "stack limit expression is not supported"
+#~ msgstr "stakgrænseudtryk understøttes ikke"
+
+#~ msgid "Generate SA code"
+#~ msgstr "Generér SA-kode"
+
+#~ msgid "Generate SB code"
+#~ msgstr "Generér SB-kode"
+
+#~ msgid "Generate KA code"
+#~ msgstr "Generér KA-kode"
+
+#~ msgid "Generate KB code"
+#~ msgstr "Generér KB-kode"
+
+#~ msgid "Generate JA code"
+#~ msgstr "Generér JA-kode"
+
+#~ msgid "Generate JD code"
+#~ msgstr "Generér JD-kode"
+
+#~ msgid "Generate JF code"
+#~ msgstr "Generér JF-kode"
+
+#~ msgid "generate RP code"
+#~ msgstr "Generér RP-kode"
+
+#~ msgid "Generate MC code"
+#~ msgstr "Generér MC-kode"
+
+#~ msgid "Generate CA code"
+#~ msgstr "Generér CA-kode"
+
+#~ msgid "Generate CF code"
+#~ msgstr "Generér CF-kode"
+
+#~ msgid "Use software floating point"
+#~ msgstr "Benyt softwarekommatal"
+
+#~ msgid "Use alternate leaf function entries"
+#~ msgstr "Benyt alternative elementer til yderste funktioner"
+
+#~ msgid "Do not use alternate leaf function entries"
+#~ msgstr "Benyt ikke alternative elementer til yderste funktioner"
+
+#~ msgid "Perform tail call optimization"
+#~ msgstr "Udfør halekaldsoptimering"
+
+#~ msgid "Do not perform tail call optimization"
+#~ msgstr "Udfør ikke halekaldsoptimering"
+
+#~ msgid "Use complex addressing modes"
+#~ msgstr "Benyt komplekse adresseringstilstande"
+
+#~ msgid "Do not use complex addressing modes"
+#~ msgstr "Benyt ikke komplekse adresseringstilstande"
+
+#~ msgid "Align code to 8 byte boundary"
+#~ msgstr "Justér kode til 8 byte-grænser"
+
+#~ msgid "Do not align code to 8 byte boundary"
+#~ msgstr "Justér ikke kode til 8 byte-grænser"
+
+#~ msgid "Enable compatibility with iC960 v2.0"
+#~ msgstr "Aktivér kompatibilitet med iC960 v2.0"
+
+#~ msgid "Enable compatibility with iC960 v3.0"
+#~ msgstr "Aktivér kompatibilitet med iC960 v3.0"
+
+#~ msgid "Enable compatibility with ic960 assembler"
+#~ msgstr "Aktivér kompatibilitet med ic960-maskinkodeoversætteren"
+
+#~ msgid "Do not permit unaligned accesses"
+#~ msgstr "Tillad ikke ikke-justeret adgang"
+
+#~ msgid "Permit unaligned accesses"
+#~ msgstr "Tillad ikke-justeret adgang"
+
+#~ msgid "Layout types like Intel's v1.3 gcc"
+#~ msgstr "Sammensæt typer som Intels v1.3 gcc"
+
+#~ msgid "Do not layout types like Intel's v1.3 gcc"
+#~ msgstr "Sammensæt ikke typer som Intels v1.3 gcc"
+
+#~ msgid "Use 64 bit long doubles"
+#~ msgstr "Benyt 64 bit long double"
+
+#~ msgid "Enable linker relaxation"
+#~ msgstr "Aktivér tolerant sammenkæder"
+
+#~ msgid "Do not enable linker relaxation"
+#~ msgstr "Aktivér ikke tolerant sammenkæder"
+
+#~ msgid "malformed #pragma builtin"
+#~ msgstr "forkert udformet '#pragma builtin'"
+
+#~ msgid "ia64_print_operand: unknown code"
+#~ msgstr "ia64_print_operand: ukendt kode"
+
+#~ msgid "value of -mfixed-range must have form REG1-REG2"
+#~ msgstr "værdien af -mfixed-range skal være på formen REG1-REG2"
+
+#~ msgid "%s-%s is an empty range"
+#~ msgstr "%s-%s er et tomt interval"
+
+#~ msgid "cannot optimize floating point division for both latency and throughput"
+#~ msgstr "kan ikke optimere kommatalsdivision for både ventetid og båndbredde"
+
+#~ msgid "cannot optimize integer division for both latency and throughput"
+#~ msgstr "kan ikke optimere heltalsdivision for både ventetid og båndbredde"
+
+#~ msgid "bad value (%s) for -mtls-size= switch"
+#~ msgstr "ugyldig værdi (%s) for tilvalget -mtls-size="
+
+#~ msgid "Generate big endian code"
+#~ msgstr "Generér storendet kode"
+
+#~ msgid "Generate little endian code"
+#~ msgstr "Generér lilleendet kode"
+
+#~ msgid "Generate code for GNU as"
+#~ msgstr "Generér kode til GNU as"
+
+#~ msgid "Generate code for Intel as"
+#~ msgstr "Generér kode til Intel as"
+
+#~ msgid "Generate code for GNU ld"
+#~ msgstr "Generér kode til GNU ld"
+
+#~ msgid "Generate code for Intel ld"
+#~ msgstr "Generér kode til Intel ld"
+
+#~ msgid "Generate code without GP reg"
+#~ msgstr "Generér kode uden GP-registeret"
+
+#~ msgid "Emit stop bits before and after volatile extended asms"
+#~ msgstr "Udsend stopbit før og efter volatile udvidede asm-sætninger"
+
+#~ msgid "Don't emit stop bits before and after volatile extended asms"
+#~ msgstr "Udsend ikke stopbit før og efter volatile udvidede asm-sætninger"
+
+#~ msgid "Emit code for Itanium (TM) processor B step"
+#~ msgstr "Udsend kode for Itanium (TM) processor B-skridt"
+
+#~ msgid "Use in/loc/out register names"
+#~ msgstr "Benyt in/loc/out-registernavne"
+
+#~ msgid "Disable use of sdata/scommon/sbss"
+#~ msgstr "Deaktivér brug af sdata/scommon/sbss"
+
+#~ msgid "Enable use of sdata/scommon/sbss"
+#~ msgstr "Aktivér brug af sdata/scommon/sbss"
+
+#~ msgid "gp is constant (but save/restore gp on indirect calls)"
+#~ msgstr "gp er konstant (men gem/gendan gp ved indirekte kald)"
+
+#~ msgid "Generate self-relocatable code"
+#~ msgstr "Generér selvflyttende kode"
+
+#~ msgid "Generate inline floating point division, optimize for latency"
+#~ msgstr "Generér indlejrede kommatalsdivisioner, optimér for ventetid"
+
+#~ msgid "Generate inline floating point division, optimize for throughput"
+#~ msgstr "Generér indlejrede kommatalsdivisioner, optimér for båndbredde"
+
+#~ msgid "Generate inline integer division, optimize for latency"
+#~ msgstr "Generér indlejrede heltalsdivisioner, optimér for ventetid"
+
+#~ msgid "Generate inline integer division, optimize for throughput"
+#~ msgstr "Generér indlejrede heltalsdivisioner, optimér for båndbredde"
+
+#~ msgid "Enable Dwarf 2 line debug info via GNU as"
+#~ msgstr "Aktivér Dwarf 2-linjefejlanalyseringsinfo via GNU as"
+
+#~ msgid "Disable Dwarf 2 line debug info via GNU as"
+#~ msgstr "Deaktivér Dwarf 2-linjefejlanalyseringsinfo via GNU as"
+
+#~ msgid "Specify range of registers to make fixed"
+#~ msgstr "Angiv interval af registre der skal gøres faste"
+
+#~ msgid "bad operand"
+#~ msgstr "ugyldig operand"
+
+#~ msgid "bad value (%s) for -mmodel switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mmodel"
+
+#~ msgid "bad value (%s) for -msdata switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -msdata"
+
+#~ msgid "invalid argument of `%s' attribute"
+#~ msgstr "ugyldig parameter til egenskaben '%s'"
+
+#~ msgid "const objects cannot go in .sdata/.sbss"
+#~ msgstr "konstante objekter kan ikke anbringes i .sdata/.sbss"
+
+#~ msgid "invalid operand to %%s code"
+#~ msgstr "ugyldig operand til %%s-koden"
+
+#~ msgid "invalid operand to %%p code"
+#~ msgstr "ugyldig operand til %%p-koden"
+
+#~ msgid "bad insn for 'A'"
+#~ msgstr "ugyldig instruktion for 'A'"
+
+#~ msgid "invalid operand to %%T/%%B code"
+#~ msgstr "ugyldig operand til %%T/%%B-koden"
+
+#~ msgid "invalid operand to %%N code"
+#~ msgstr "ugyldig operand til %%N-koden"
+
+#~ msgid "pre-increment address is not a register"
+#~ msgstr "præfiks forøgelsesadresse er ikke et register"
+
+#~ msgid "pre-decrement address is not a register"
+#~ msgstr "præfiks formindskelsesadresse er ikke et register"
+
+#~ msgid "post-increment address is not a register"
+#~ msgstr "postfiks forøgelsesadresse er ikke et register"
+
+#~ msgid "bad address"
+#~ msgstr "ugyldig adresse"
+
+#~ msgid "lo_sum not of register"
+#~ msgstr "lo_sum ikke af register"
+
+#~ msgid "Display compile time statistics"
+#~ msgstr "Vis oversættelsesstatistikker"
+
+#~ msgid "Align all loops to 32 byte boundary"
+#~ msgstr "Justér alle løkker til 32 byte-grænserne"
+
+#~ msgid "Only issue one instruction per cycle"
+#~ msgstr "Udfør kun én instruktion pr. cyklus"
+
+#~ msgid "Prefer branches over conditional execution"
+#~ msgstr "Foretræk forgrening frem for betinget udførelse"
+
+#~ msgid "Code size: small, medium or large"
+#~ msgstr "Kodestørrelse: small, medium eller large"
+
+#~ msgid "Small data area: none, sdata, use"
+#~ msgstr "Område til små data: none, sdata, use"
+
+#~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
+#~ msgstr "-f%s ignoreret for 68HC11/68HC12 (ikke understøttet)"
+
+#~ msgid "`trap' and `far' attributes are not compatible, ignoring `far'"
+#~ msgstr "egenskaberne 'trap' og 'far' kan ikke bruges på samme tid, ignorerer 'far'"
+
+#~ msgid "`trap' attribute is already used"
+#~ msgstr "egenskaben 'trap' er allerede benyttet"
+
+#~ msgid "move insn not handled"
+#~ msgstr "flytteinstruktion ikke håndteret"
+
+#~ msgid "invalid register in the move instruction"
+#~ msgstr "ugyldigt register i flytteinstruktionen"
+
+#~ msgid "invalid operand in the instruction"
+#~ msgstr "ugyldig operand i instruktionen"
+
+#~ msgid "invalid register in the instruction"
+#~ msgstr "ugyldigt register i instruktionen"
+
+#~ msgid "operand 1 must be a hard register"
+#~ msgstr "operand 1 skal være et hårdt register"
+
+#~ msgid "invalid rotate insn"
+#~ msgstr "ugyldig roteringsinstruktion"
+
+#~ msgid "registers IX, IY and Z used in the same INSN"
+#~ msgstr "registrene IX, IY og Z benyttet i samme INSN"
+
+#~ msgid "cannot do z-register replacement"
+#~ msgstr "kan ikke udføre Z-registererstatning"
+
+#~ msgid "invalid Z register replacement for insn"
+#~ msgstr "ugyldig Z-registererstatning for instruktion"
+
+#~ msgid "Compile with 16-bit integer mode"
+#~ msgstr "Oversæt med 16 bit-heltalstilstand"
+
+#~ msgid "Compile with 32-bit integer mode"
+#~ msgstr "Oversæt med 32 bit-heltalstilstand"
+
+#~ msgid "Auto pre/post decrement increment allowed"
+#~ msgstr "Selvformindskelse tilladt"
+
+#~ msgid "Auto pre/post decrement increment not allowed"
+#~ msgstr "Selvforøgelse ikke tilladt"
+
+#~ msgid "Min/max instructions allowed"
+#~ msgstr "Min/max-instruktioner tilladt"
+
+#~ msgid "Min/max instructions not allowed"
+#~ msgstr "Min/max-instruktioner ikke tilladt"
+
+#~ msgid "Use call and rtc for function calls and returns"
+#~ msgstr "Benyt call og rtc til funktionskald og returneringer"
+
+#~ msgid "Use jsr and rts for function calls and returns"
+#~ msgstr "Benyt jsr og rts til funktionskald og returneringer"
+
+#~ msgid "Do not use direct addressing mode for soft registers"
+#~ msgstr "Benyt ikke direkte adresseringstilstand til bløde registre"
+
+#~ msgid "Use direct addressing mode for soft registers"
+#~ msgstr "Benyt direkte adresseringstilstand til bløde registre"
+
+#~ msgid "Compile for a 68HC11"
+#~ msgstr "Oversæt til en 68HC11"
+
+#~ msgid "Compile for a 68HC12"
+#~ msgstr "Oversæt til en 68HC12"
+
+#~ msgid "Compile for a 68HCS12"
+#~ msgstr "Oversæt til en 68HCS12"
+
+#~ msgid "Specify the register allocation order"
+#~ msgstr "Angiv registerallokeringsordnen"
+
+#~ msgid "Indicate the number of soft registers available"
+#~ msgstr "Angiv antallet af bløde registre der er til rådighed"
+
+#~ msgid "-malign-loops=%d is not between 1 and %d"
+#~ msgstr "-malign-loops=%d er ikke mellem 1 og %d"
+
+#~ msgid "-malign-jumps=%d is not between 1 and %d"
+#~ msgstr "-malign-jumps=%d er ikke mellem 1 og %d"
+
+#~ msgid "-malign-functions=%d is not between 1 and %d"
+#~ msgstr "-malign-functions=%d er ikke mellem 1 og %d"
+
+#~ msgid "-fPIC is not currently supported on the 68000 or 68010\n"
+#~ msgstr "-fPIC understøttes ikke på nuværende tidspunkt på 68000 og 68010\n"
+
+#~ msgid "Generate code for a 68020"
+#~ msgstr "Generér kode til en 68020"
+
+#~ msgid "Generate code for a 68000"
+#~ msgstr "Generér kode til en 68000"
+
+#~ msgid "Use the bit-field instructions"
+#~ msgstr "Benyt bitfeltinstruktionerne"
+
+#~ msgid "Do not use the bit-field instructions"
+#~ msgstr "Benyt ikke bitfeltinstruktionerne"
+
+#~ msgid "Use different calling convention using 'rtd'"
+#~ msgstr "Benyt anden kaldekonvention vha. 'rtd'"
+
+#~ msgid "Consider type `int' to be 16 bits wide"
+#~ msgstr "Lad typen 'int' være 16 bit bred"
+
+#~ msgid "Consider type `int' to be 32 bits wide"
+#~ msgstr "Lad typen 'int' være 32 bit bred"
+
+#~ msgid "Generate code for a Sun FPA"
+#~ msgstr "Generér kode til en Sun FPA"
+
+#~ msgid "Do not generate code for a Sun FPA"
+#~ msgstr "Generér ikke kode til en Sun FPA"
+
+#~ msgid "Generate code for a Sun Sky board"
+#~ msgstr "Generér kode til et Sun Sky-kort"
+
+#~ msgid "Do not use Sky linkage convention"
+#~ msgstr "Benyt ikke Sky-kædningskonventionen"
+
+#~ msgid "Generate code for a 68881"
+#~ msgstr "Generér kode til en 68881"
+
+#~ msgid "Generate code with library calls for floating point"
+#~ msgstr "Generér kode med bibliotekskald for kommatalsoperationer"
+
+#~ msgid "Generate code for a 68040, without any new instructions"
+#~ msgstr "Generér kode til en 68040 uden nogen nye instruktioner"
+
+#~ msgid "Generate code for a 68060, without any new instructions"
+#~ msgstr "Generér kode til en 68060 uden nogen nye instruktioner"
+
+#~ msgid "Generate code for a 68030"
+#~ msgstr "Generér kode til en 68030"
+
+#~ msgid "Generate code for a 68040"
+#~ msgstr "Generér kode til en 68040"
+
+#~ msgid "Generate code for a 68060"
+#~ msgstr "Generér kode til en 68060"
+
+#~ msgid "Generate code for a 520X"
+#~ msgstr "Generér kode til en 520X"
+
+#~ msgid "Generate code for a 68851"
+#~ msgstr "Generér kode til en 68851"
+
+#~ msgid "Do no generate code for a 68851"
+#~ msgstr "Generér ikke kode til en 68851"
+
+#~ msgid "Generate code for a 68302"
+#~ msgstr "Generér kode til en 68302"
+
+#~ msgid "Generate code for a 68332"
+#~ msgstr "Generér kode til en 68332"
+
+#~ msgid "Generate code for a cpu32"
+#~ msgstr "Generér kode til en cpu32"
+
+#~ msgid "Align variables on a 32-bit boundary"
+#~ msgstr "Justér variabler til 32 bit-grænserne"
+
+#~ msgid "Align variables on a 16-bit boundary"
+#~ msgstr "Justér variabler til 16 bit-grænserne"
+
+#~ msgid "Generate pc-relative code"
+#~ msgstr "Generér pc-relativ kode"
+
+#~ msgid "Do not use unaligned memory references"
+#~ msgstr "Benyt ikke ikke-justerede hukommelsesreferencer"
+
+#~ msgid "Use unaligned memory references"
+#~ msgstr "Benyt ikke-justerede hukommelsesreferencer"
+
+#~ msgid "internal gcc monitor: short-branch(%x)"
+#~ msgstr "intern GCC-overvågning: short-branch(%x)"
+
+#~ msgid "internal gcc error: Can't express symbolic location"
+#~ msgstr "intern GCC-fejl: Kan ikke udtrykke symbolsk placering"
+
+#~ msgid "argument #%d is a structure"
+#~ msgstr "%d. parameter er en struktur"
+
+#~ msgid "%%R not followed by %%B/C/D/E"
+#~ msgstr "%%R efterfølges ikke af %%B/C/D/E"
+
+#~ msgid "invalid %%x/X value"
+#~ msgstr "ugyldig %%x/X-værdi"
+
+#~ msgid "invalid %%Q value"
+#~ msgstr "ugyldig %%Q-værdi"
+
+#~ msgid "invalid %%q value"
+#~ msgstr "ugyldig %%q-værdi"
+
+#~ msgid "invalid %%o value"
+#~ msgstr "ugyldig %%o-værdi"
+
+#~ msgid "invalid %%p value"
+#~ msgstr "ugyldig %%p-værdi"
+
+#~ msgid "invalid %%s/S value"
+#~ msgstr "ugyldig %%s/S-værdi"
+
+#~ msgid "invalid %%P operand"
+#~ msgstr "ugyldig %%P-operand"
+
+#~ msgid "invalid %%B value"
+#~ msgstr "ugyldig %%B-værdi"
+
+#~ msgid "invalid %%D value"
+#~ msgstr "ugyldig %%D-værdi"
+
+#~ msgid "`%%d' operand isn't a register"
+#~ msgstr "operanden '%%d' er ikke et register"
+
+#~ msgid "operand is r0"
+#~ msgstr "operanden er r0"
+
+#~ msgid "operand is const_double"
+#~ msgstr "operanden er const_double"
+
+#~ msgid "invalid code"
+#~ msgstr "ugyldig kode"
+
+#~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible"
+#~ msgstr "-mtrap-large-shift og -mhandle-large-shift er indbyrdes uforenelige"
+
+#~ msgid "invalid option `-mshort-data-%s'"
+#~ msgstr "ugyldigt tilvalg '-mshort-data-%s'"
+
+#~ msgid "-mshort-data-%s is too large "
+#~ msgstr "-mshort-data-%s er for stor"
+
+#~ msgid "-mshort-data-%s and PIC are incompatible"
+#~ msgstr "-mshort-data-%s og PIC er indbyrdes uforenelige"
+
+#~ msgid "invalid option `-mstack-increment=%s'"
+#~ msgstr "ugyldigt tilvalg '-mshort-increment=%s'"
+
+#~ msgid "Inline constants if it can be done in 2 insns or less"
+#~ msgstr "Indlejr konstanter hvis det kan gøres med 2 instruktioner eller mindre"
+
+#~ msgid "Inline constants if it only takes 1 instruction"
+#~ msgstr "Indlejr konstanter hvis det kan gøres med 1 instruktion"
+
+#~ msgid "Set maximum alignment to 4"
+#~ msgstr "Sæt maksimal justering til 4"
+
+#~ msgid "Set maximum alignment to 8"
+#~ msgstr "Sæt maksimal justering til 8"
+
+#~ msgid "Do not use the divide instruction"
+#~ msgstr "Benyt ikke divisionsinstruktionen"
+
+#~ msgid "Do not arbitrary sized immediates in bit operations"
+#~ msgstr "Benyt ikke vilkårlige størrelsers umiddelbare værdier i bitoperationer"
+
+#~ msgid "Always treat bit-field as int-sized"
+#~ msgstr "Behandl altid bitfelter som af størrelsen int"
+
+#~ msgid "Force functions to be aligned to a 4 byte boundary"
+#~ msgstr "Tving funktioner til at blive justeret til en 4 byte-grænse"
+
+#~ msgid "Force functions to be aligned to a 2 byte boundary"
+#~ msgstr "Tving funktioner til at blive justeret til en 2 byte-grænse"
+
+#~ msgid "Emit call graph information"
+#~ msgstr "Udsend kaldegrafinfo"
+
+#~ msgid "Prefer word accesses over byte accesses"
+#~ msgstr "Foretræk ord-tilgange frem for byte-tilgange"
+
+#~ msgid "Generate code for the M*Core M340"
+#~ msgstr "Generér kode til en M*Core M340"
+
+#~ msgid "Maximum amount for a single stack increment operation"
+#~ msgstr "Maksimalt antal for en enkelt stakforøgelsesoperation"
+
+#~ msgid "bad value (%s) for -mabi= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mabi="
+
+#~ msgid "-mips%d conflicts with the other architecture options, which specify a MIPS%d processor"
+#~ msgstr "-mips%d er i konflikt med de andre arkitekturtilvalg som angiver en MIPS%d-processor"
+
+#~ msgid "bad value (%s) for -mips switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mips"
+
+#~ msgid "-march=%s is not compatible with the selected ABI"
+#~ msgstr "-march=%s er ikke forenelig med den valgte ABI"
+
+#~ msgid "-mgp64 used with a 32-bit processor"
+#~ msgstr "-mgp64 benyttet med en 32 bit-processor"
+
+#~ msgid "-mgp32 used with a 64-bit ABI"
+#~ msgstr "-mgp32 benyttet med et 64 bit-ABI"
+
+#~ msgid "-mgp64 used with a 32-bit ABI"
+#~ msgstr "-mgp64 benyttet med et 32 bit-ABI"
+
+#~ msgid "unsupported combination: %s"
+#~ msgstr "ikke-understøttet kombination: %s"
+
+#~ msgid "generation of Branch Likely instructions enabled, but not supported by architecture"
+#~ msgstr "generering af Branch Likely-instruktioner er aktiveret, men ikke understøttet af arkitekturen"
+
+#~ msgid "-G is incompatible with PIC code which is the default"
+#~ msgstr "-G er uforenelig med PIC-kode som genereres som standard"
+
+#~ msgid "-membedded-pic and -mabicalls are incompatible"
+#~ msgstr "-membedded-pic og -mabicalls er indbyrdes uforenelige"
+
+#~ msgid "-G and -membedded-pic are incompatible"
+#~ msgstr "-G og -membedded-pic er indbyrdes uforenelige"
+
+#~ msgid "invalid option `entry%s'"
+#~ msgstr "ugyldigt tilvalg 'entry%s'"
+
+#~ msgid "-mentry is only meaningful with -mips-16"
+#~ msgstr "-mentry giver kun mening sammen med -mips-16"
+
+#~ msgid "internal error: %%) found without a %%( in assembler pattern"
+#~ msgstr "intern fejl: %%) fundet uden en %%) i maskinkodeoversættermønster"
+
+#~ msgid "internal error: %%] found without a %%[ in assembler pattern"
+#~ msgstr "intern fejl: %%] fundet uden en %%[ i maskinkodeoversættermønster"
+
+#~ msgid "internal error: %%> found without a %%< in assembler pattern"
+#~ msgstr "intern fejl: %%> fundet uden en %%< i maskinkodeoversættermønster"
+
+#~ msgid "internal error: %%} found without a %%{ in assembler pattern"
+#~ msgstr "intern fejl: %%} fundet uden en %%{ i maskinkodeoversættermønster"
+
+#~ msgid "PRINT_OPERAND: unknown punctuation '%c'"
+#~ msgstr "PRINT_OPERAND: ukendt tegnsætning '%c'"
+
+#~ msgid "PRINT_OPERAND null pointer"
+#~ msgstr "PRINT_OPERAND nul-henvisning"
+
+#~ msgid "invalid use of %%d, %%x, or %%X"
+#~ msgstr "ugyldigt brug af %%d, %%x eller %%X"
+
+#~ msgid "PRINT_OPERAND_ADDRESS, null pointer"
+#~ msgstr "PRINT_OPERAND_ADDRESS, nul-henvisning"
+
+#~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line"
+#~ msgstr "MIPS ECOFF-formatet tillader ikke skift af filnavne inden i funktioner med #line"
+
+#~ msgid "can't rewind temp file"
+#~ msgstr "kan ikke spole midlertidig fil tilbage"
+
+#~ msgid "can't write to output file"
+#~ msgstr "kan ikke skrive i uddatafil"
+
+#~ msgid "can't read from temp file"
+#~ msgstr "kan ikke læse fra midlertidig fil"
+
+#~ msgid "can't close temp file"
+#~ msgstr "kan ikke lukke midlertidig fil"
+
+#~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero"
+#~ msgstr "gp_offset (%ld) eller end_offset (%ld) er mindre end nul"
+
+#~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero"
+#~ msgstr "fp_offset (%ld) eller end_offset (%ld) er mindre end nul"
+
+#~ msgid "can not handle inconsistent calls to `%s'"
+#~ msgstr "kan ikke håndtere inkonsistente kald af '%s'"
+
+#~ msgid "the cpu name must be lower case"
+#~ msgstr "processornavnet skal staves med små bogstaver"
+
+#~ msgid "bad value (%s) for %s"
+#~ msgstr "ugyldig værdi (%s) for %s"
+
+#~ msgid "No default crt0.o"
+#~ msgstr "Ingen standard crt0.o"
+
+#~ msgid "Use 64-bit int type"
+#~ msgstr "Benyt 64 bit int-type"
+
+#~ msgid "Use 64-bit long type"
+#~ msgstr "Benyt 64 bit long-type"
+
+#~ msgid "Use 32-bit long type"
+#~ msgstr "Benyt 32 bit long-type"
+
+#~ msgid "Optimize lui/addiu address loads"
+#~ msgstr "Optimér lui/addiu-adresseindlæsninger"
+
+#~ msgid "Don't optimize lui/addiu address loads"
+#~ msgstr "Optimér ikke lui/addiu-adresseindlæsninger"
+
+# 'as' står for assembler
+#~ msgid "Use MIPS as"
+#~ msgstr "Benyt MIPS as"
+
+#~ msgid "Use GNU as"
+#~ msgstr "Benyt GNU as"
+
+#~ msgid "Use symbolic register names"
+#~ msgstr "Benyt symbolske registernavne"
+
+#~ msgid "Don't use symbolic register names"
+#~ msgstr "Benyt ikke symbolske registernavne"
+
+#~ msgid "Use GP relative sdata/sbss sections"
+#~ msgstr "Benyt GP-relative sdata/sbss-sektioner"
+
+#~ msgid "Don't use GP relative sdata/sbss sections"
+#~ msgstr "Benyt ikke GP-relative sdata/sbss-sektioner"
+
+#~ msgid "Output compiler statistics"
+#~ msgstr "Udsend oversættelsesstatistik"
+
+#~ msgid "Don't output compiler statistics"
+#~ msgstr "Udsend ikke oversættelsesstatistik"
+
+#~ msgid "Don't optimize block moves"
+#~ msgstr "Optimér ikke blokflytninger"
+
+#~ msgid "Optimize block moves"
+#~ msgstr "Optimér blokflytninger"
+
+#~ msgid "Use mips-tfile asm postpass"
+#~ msgstr "Benyt mips-tfile-maskinkodeefterfase"
+
+#~ msgid "Don't use mips-tfile asm postpass"
+#~ msgstr "Benyt ikke mips-tfile-maskinkodeefterfase"
+
+#~ msgid "Use hardware floating point"
+#~ msgstr "Benyt hardware-kommatal"
+
+#~ msgid "Use 64-bit FP registers"
+#~ msgstr "Benyt 64 bit-kommatalsregistre"
+
+#~ msgid "Use 32-bit FP registers"
+#~ msgstr "Benyt 32 bit-kommatalsregistre"
+
+#~ msgid "Use 64-bit general registers"
+#~ msgstr "Benyt 64 bit almene registre"
+
+#~ msgid "Use 32-bit general registers"
+#~ msgstr "Benyt 32 bit almene registre"
+
+#~ msgid "Use Irix PIC"
+#~ msgstr "Benyt Irix PIC"
+
+#~ msgid "Don't use Irix PIC"
+#~ msgstr "Benyt ikke Irix PIC"
+
+#~ msgid "Use indirect calls"
+#~ msgstr "Benyt indirekte kald"
+
+#~ msgid "Don't use indirect calls"
+#~ msgstr "Benyt ikke indirekte kald"
+
+#~ msgid "Use embedded PIC"
+#~ msgstr "Benyt indlejret PIC"
+
+#~ msgid "Don't use embedded PIC"
+#~ msgstr "Benyt ikke indlejret PIC"
+
+#~ msgid "Use ROM instead of RAM"
+#~ msgstr "Benyt ROM i stedet for RAM"
+
+#~ msgid "Don't use ROM instead of RAM"
+#~ msgstr "Benyt ikke ROM i stedet for RAM"
+
+#~ msgid "Put uninitialized constants in ROM (needs -membedded-data)"
+#~ msgstr "Anbring konstanter uden startværdi i ROM (behøver -membedded-data)"
+
+#~ msgid "Don't put uninitialized constants in ROM"
+#~ msgstr "Anbring ikke konstanter uden startværdi i ROM"
+
+#~ msgid "Use big-endian byte order"
+#~ msgstr "Benyt storendet byteordning"
+
+#~ msgid "Use little-endian byte order"
+#~ msgstr "Benyt lilleendet byteordning"
+
+#~ msgid "Use single (32-bit) FP only"
+#~ msgstr "Benyt kun enkeltpræcisions (32 bit) kommatal"
+
+#~ msgid "Don't use single (32-bit) FP only"
+#~ msgstr "Benyt ikke kun enkeltpræcisions (32 bit) kommatal"
+
+# hvad så det er...
+#~ msgid "Use multiply accumulate"
+#~ msgstr "Benyt multiplikationsakkumulering"
+
+#~ msgid "Don't use multiply accumulate"
+#~ msgstr "Benyt ikke multiplikationsakkumulering"
+
+#~ msgid "Don't generate fused multiply/add instructions"
+#~ msgstr "Generér ikke sammensatte gang/addér-instruktioner"
+
+#~ msgid "Generate fused multiply/add instructions"
+#~ msgstr "Generér sammensatte gang/addér-instruktioner"
+
+#~ msgid "Work around early 4300 hardware bug"
+#~ msgstr "Arbejd rundt om tidlig 4300-hardwarefejl"
+
+#~ msgid "Don't work around early 4300 hardware bug"
+#~ msgstr "Arbejd ikke rundt om tidlig 4300-hardwarefejl"
+
+#~ msgid "Trap on integer divide by zero"
+#~ msgstr "Forårsag undtagelse ved heltalsdivision med nul"
+
+#~ msgid "Don't trap on integer divide by zero"
+#~ msgstr "Forårsag ikke undtagelse ved heltalsdivision med nul"
+
+#~ msgid "Trap on integer divide overflow"
+#~ msgstr "Forårsag undtagelse ved heltalsdivisionsoverløb"
+
+#~ msgid "Don't trap on integer divide overflow"
+#~ msgstr "Forårsag ikke undtagelse ved heltalsdivisionsoverløb"
+
+#~ msgid "Use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Benyt Branch Likely-instruktioner, overskrivende forvalget for arkitektur"
+
+#~ msgid "Don't use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Benyt ikke Branch Likely-instruktioner, overskrivende forvalget for arkitektur"
+
+#~ msgid "Specify CPU for scheduling purposes"
+#~ msgstr "Angiv processor til planlægningsformål"
+
+#~ msgid "Specify CPU for code generation purposes"
+#~ msgstr "Angiv processor til kodegenereringsformål"
+
+#~ msgid "Specify an ABI"
+#~ msgstr "Angiv en ABI"
+
+#~ msgid "Specify a Standard MIPS ISA"
+#~ msgstr "Angiv en Standard MIPS ISA"
+
+#~ msgid "Use mips16 entry/exit psuedo ops"
+#~ msgstr "Benyt MIPS16-indtrædelse-/afslutningspseudooperationer"
+
+#~ msgid "Don't use MIPS16 instructions"
+#~ msgstr "Benyt ikke MIPS16-instruktioner"
+
+#~ msgid "Don't call any cache flush functions"
+#~ msgstr "Kald ikke nogen mellemlagertømningsfunktion"
+
+#~ msgid "Specify cache flush function"
+#~ msgstr "Angiv mellemlagertømningsfunktion"
+
+#~ msgid "mips16 function profiling"
+#~ msgstr "MIPS16-funktionsprofilering"
+
+#~ msgid "-f%s not supported: ignored"
+#~ msgstr "-f%s er ikke understøttet: ignoreret"
+
+#~ msgid "too large function value type, needs %d registers, have only %d registers for this"
+#~ msgstr "for stor funktionsværditype, behøver %d registre, har kun %d registre til dette"
+
+#~ msgid "function_profiler support for MMIX"
+#~ msgstr "function_profiler-understøttelse for MMIX"
+
+#~ msgid "MMIX Internal: Last named vararg would not fit in a register"
+#~ msgstr "MMIX-intern: Sidst navngivne variabel parameter kan ikke passes i et register"
+
+#~ msgid "MMIX Internal: Expected a CONST_INT, not this"
+#~ msgstr "MMIX-intern: Forventede en CONST_INT, ikke dette"
+
+#~ msgid "MMIX Internal: Bad register: %d"
+#~ msgstr "MMIX-intern: Ugyldigt register: %d"
+
+#~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+#~ msgstr "MMIX-intern: Ugyldigt værdi for 'm', ikke en CONST_INT"
+
+#~ msgid "MMIX Internal: Expected a register, not this"
+#~ msgstr "MMIX-intern: Forventede et register, ikke dette"
+
+#~ msgid "MMIX Internal: Expected a constant, not this"
+#~ msgstr "MMIX-intern: Forventede en konstant, ikke dette"
+
+#~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand"
+#~ msgstr "MMIX-intern: Mangler '%c'-case i mmix_print_operand"
+
+#~ msgid "MMIX Internal: Cannot decode this operand"
+#~ msgstr "MMIX-intern: Kan ikke dekode denne operand"
+
+#~ msgid "MMIX Internal: This is not a recognized address"
+#~ msgstr "MMIX-intern: Dette er ikke en genkendt adresse"
+
+#~ msgid "stack frame not a multiple of 8 bytes: %d"
+#~ msgstr "stakramme ikke et produkt af 8 byte: %d"
+
+#~ msgid "stack frame not a multiple of octabyte: %d"
+#~ msgstr "stakramme ikke et produkt af 8 byte: %d"
+
+#~ msgid "MMIX Internal: %s is not a shiftable int"
+#~ msgstr "MMIX-intern: %s er ikke en int der kan skiftes"
+
+#~ msgid "MMIX Internal: Trying to output invalidly reversed condition:"
+#~ msgstr "MMIX-intern: Forsøger at udskrive ugyldigt omvendt betingelse:"
+
+#~ msgid "MMIX Internal: What's the CC of this?"
+#~ msgstr "MMIX-intern: Hvad er CC af dette?"
+
+#~ msgid "MMIX Internal: What is the CC of this?"
+#~ msgstr "MMIX-intern: Hvad er CC af dette?"
+
+#~ msgid "MMIX Internal: This is not a constant:"
+#~ msgstr "MMIX-intern: Dette er ikke en konstant:"
+
+#~ msgid "Set start-address of the program"
+#~ msgstr "Angiv startadressen for programmet"
+
+#~ msgid "Set start-address of data"
+#~ msgstr "Angiv startadressen for data"
+
+#~ msgid "For intrinsics library: pass all parameters in registers"
+#~ msgstr "For indbyggede biblioteker: overbring alle parametre i registre"
+
+#~ msgid "Use register stack for parameters and return value"
+#~ msgstr "Benyt registerstakken til parametre og returværdier"
+
+#~ msgid "Use call-clobbered registers for parameters and return value"
+#~ msgstr "Benyt kaldeoptagne registre til parametre og returværdier"
+
+#~ msgid "Use epsilon-respecting floating point compare instructions"
+#~ msgstr "Benyt epsilon-respekterende instruktioner til kommatalssammenligning"
+
+#~ msgid "Use zero-extending memory loads, not sign-extending ones"
+#~ msgstr "Benyt nul-udvidende hukommelsesindlæsninger, ikke fortegnsudvidende"
+
+#~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
+#~ msgstr "Generér divisionsresultater med rest som har det samme fortegn som nævneren (ikke tælleren)"
+
+#~ msgid "Prepend global symbols with \":\" (for use with PREFIX)"
+#~ msgstr "Tilføj \":\" til starten af globale symboler (til brug sammen med PREFIX)"
+
+#~ msgid "Do not provide a default start-address 0x100 of the program"
+#~ msgstr "Tilbyd ikke standardstartadressen 0x100 for programmet"
+
+#~ msgid "Link to emit program in ELF format (rather than mmo)"
+#~ msgstr "Lad sammenkædningen udsende programmet i ELF-format (i stedet for mmo)"
+
+#~ msgid "Use P-mnemonics for branches statically predicted as taken"
+#~ msgstr "Benyt P-aliaser for forgreninger som statistisk forudses at blive taget"
+
+#~ msgid "Don't use P-mnemonics for branches"
+#~ msgstr "Benyt ikke P-aliaser for forgreninger"
+
+#~ msgid "Use addresses that allocate global registers"
+#~ msgstr "Benyt adresser der allokerer globale registre"
+
+#~ msgid "Do not use addresses that allocate global registers"
+#~ msgstr "Benyt ikke adresser der allokerer globale registre"
+
+#~ msgid "Generate a single exit point for each function"
+#~ msgstr "Generér et enkelt afslutningspunkt for hver funktion"
+
+#~ msgid "Do not generate a single exit point for each function"
+#~ msgstr "Generér ikke et enkelt afslutningspunkt for hver funktion"
+
+#~ msgid "Work around hardware multiply bug"
+#~ msgstr "Arbejd omkring hardware-multiplikationsfejl"
+
+#~ msgid "Do not work around hardware multiply bug"
+#~ msgstr "Arbejd ikke omkring hardware-multiplikationsfejl"
+
+#~ msgid "Target the AM33 processor"
+#~ msgstr "Målret mod AM33-processoren"
+
+#~ msgid "Enable linker relaxations"
+#~ msgstr "Aktivér tolerant sammenkædning"
+
+#~ msgid "Don't use hardware fp"
+#~ msgstr "Benyt ikke hardware-kommatal"
+
+#~ msgid "Alternative calling convention"
+#~ msgstr "Alternativ kaldekonvention"
+
+#~ msgid "Pass some arguments in registers"
+#~ msgstr "Overbring nogle parametre i registre"
+
+#~ msgid "Pass all arguments on stack"
+#~ msgstr "Overbring alle parametre på stakken"
+
+#~ msgid "Optimize for 32532 cpu"
+#~ msgstr "Optimér for en 32532-processor"
+
+#~ msgid "Optimize for 32332 cpu"
+#~ msgstr "Optimér for en 32332-processor"
+
+#~ msgid "Optimize for 32032"
+#~ msgstr "Optimér for en 32032-processor"
+
+#~ msgid "Register sb is zero. Use for absolute addressing"
+#~ msgstr "Registeret 'sb' er nul; benyt til absolut adressering"
+
+#~ msgid "Do not use register sb"
+#~ msgstr "Benyt ikke registeret 'sb'"
+
+#~ msgid "Use bit-field instructions"
+#~ msgstr "Benyt bitfeltinstruktioner"
+
+#~ msgid "Do not use bit-field instructions"
+#~ msgstr "Benyt ikke bitfeltinstruktioner"
+
+#~ msgid "Generate code for high memory"
+#~ msgstr "Generér kode til høj hukommelse"
+
+#~ msgid "Generate code for low memory"
+#~ msgstr "Generér kode til lav hukommelse"
+
+#~ msgid "32381 fpu"
+#~ msgstr "32381-fpu"
+
+#~ msgid "Use multiply-accumulate fp instructions"
+#~ msgstr "Benyt kommatalsinstruktioner til multiplikationsakkumulering"
+
+#~ msgid "Do not use multiply-accumulate fp instructions"
+#~ msgstr "Benyt ikke kommatalsinstruktioner til multiplikationsakkumulering"
+
+#~ msgid "\"Small register classes\" kludge"
+#~ msgstr "\"Små registerklasser\"-lapning"
+
+#~ msgid "No \"Small register classes\" kludge"
+#~ msgstr "Ingen \"Små registerklasser\"-lapning"
+
+#~ msgid ""
+#~ "unknown -mschedule= option (%s).\n"
+#~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n"
+#~ msgstr ""
+#~ "ukendt parameter til -mschedule= (%s).\n"
+#~ "Gyldige parametre er 700, 7100, 7100LC, 7200, 7300 og 8000\n"
+
+#~ msgid ""
+#~ "unknown -march= option (%s).\n"
+#~ "Valid options are 1.0, 1.1, and 2.0\n"
+#~ msgstr ""
+#~ "ukendt parameter til -march= (%s).\n"
+#~ "Gyldige parametre er 1.0, 1.1 og 2.0\n"
+
+#~ msgid "PIC code generation is not supported in the portable runtime model\n"
+#~ msgstr "PIC-kodegenerering er ikke understøttet i den portable kørselsmodel\n"
+
+#~ msgid "PIC code generation is not compatible with fast indirect calls\n"
+#~ msgstr "PIC-kodegenerering er ikke kompatibel med hurtige indirekte kald\n"
+
+#~ msgid "-g is only supported when using GAS on this processor,"
+#~ msgstr "-g er kun understøttet ved brug af GAS på denne processor,"
+
+#~ msgid "-g option disabled"
+#~ msgstr "tilvalget -g deaktiveret"
+
+#~ msgid "Generate cpp defines for server IO"
+#~ msgstr "Generér CPP-defineringer til server-IO"
+
+#~ msgid "Generate cpp defines for workstation IO"
+#~ msgstr "Generér CPP-defineringer til arbejdsstation-IO"
+
+#~ msgid "Generate PA1.1 code"
+#~ msgstr "Generér PA1.1-kode"
+
+#~ msgid "Generate PA1.0 code"
+#~ msgstr "Generér PA1.0-kode"
+
+#~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
+#~ msgstr "Generér PA2.0-kode (kræver binutils 2.10 eller nyere)"
+
+#~ msgid "Disable FP regs"
+#~ msgstr "Deaktivér kommatalsregistre"
+
+#~ msgid "Do not disable FP regs"
+#~ msgstr "Deaktivér ikke kommatalsregistre"
+
+#~ msgid "Disable space regs"
+#~ msgstr "Deaktivér pladsregistre"
+
+#~ msgid "Do not disable space regs"
+#~ msgstr "Deaktivér ikke pladsregistre"
+
+#~ msgid "Put jumps in call delay slots"
+#~ msgstr "Anbring spring på kaldeventetidspladser"
+
+#~ msgid "Do not put jumps in call delay slots"
+#~ msgstr "Anbring ikke spring på kaldeventetidspladser"
+
+#~ msgid "Disable indexed addressing"
+#~ msgstr "Deaktivér indekseret adressering"
+
+#~ msgid "Do not disable indexed addressing"
+#~ msgstr "Deaktivér ikke indekseret adressering"
+
+#~ msgid "Use portable calling conventions"
+#~ msgstr "Benyt portable kaldekonventioner"
+
+#~ msgid "Do not use portable calling conventions"
+#~ msgstr "Benyt ikke portable kaldekonventioner"
+
+#~ msgid "Assume code will be assembled by GAS"
+#~ msgstr "Antag at koden bliver oversat af GAS"
+
+#~ msgid "Do not assume code will be assembled by GAS"
+#~ msgstr "Antag ikke at koden bliver oversat af GAS"
+
+#~ msgid "Do not use software floating point"
+#~ msgstr "Benyt ikke softwarekommatal"
+
+#~ msgid "Emit long load/store sequences"
+#~ msgstr "Udsend lange load/store-sekvenser"
+
+#~ msgid "Do not emit long load/store sequences"
+#~ msgstr "Udsend ikke lange load/store-sekvenser"
+
+#~ msgid "Generate fast indirect calls"
+#~ msgstr "Generér hurtige indirekte kald"
+
+#~ msgid "Do not generate fast indirect calls"
+#~ msgstr "Generér ikke hurtige indirekte kald"
+
+#~ msgid "Generate code for huge switch statements"
+#~ msgstr "Generér kode til store switch-sætninger"
+
+#~ msgid "Do not generate code for huge switch statements"
+#~ msgstr "Generér ikke kode til store switch-sætninger"
+
+#~ msgid "Always generate long calls"
+#~ msgstr "Generér altid lange kalde"
+
+#~ msgid "Generate long calls only when needed"
+#~ msgstr "Generér kun lange kalde når det er nødvendigt"
+
+#~ msgid "Enable linker optimizations"
+#~ msgstr "Aktivér sammenkæderoptimeringer"
+
+#~ msgid "Specify architecture for code generation.  Values are 1.0, 1.1, and 2.0.  2.0 requires gas snapshot 19990413 or later."
+#~ msgstr "Angiv arkitekturen for kodegenerering. Mulige værdier er 1.0, 1.1 og 2.0. 2.0 kræver GAS-snapshot 19990413 eller senere."
+
+#~ msgid "Assume code will be linked by GNU ld"
+#~ msgstr "Antag at kode vil blive sammenkædet med GNU ld"
+
+#~ msgid "Assume code will be linked by HP ld"
+#~ msgstr "Antag at kode vil blive sammenkædet med HP ld"
+
+#~ msgid "Do not use hardware floating point"
+#~ msgstr "Benyt ikke hardware-kommatal"
+
+#~ msgid "Return floating point results in ac0"
+#~ msgstr "Returnér kommatalsresultater i ac0"
+
+#~ msgid "Return floating point results in memory"
+#~ msgstr "Returnér kommatalsresultater i hukommelse"
+
+#~ msgid "Generate code for an 11/40"
+#~ msgstr "Generér kode til en 11/40"
+
+#~ msgid "Generate code for an 11/45"
+#~ msgstr "Generér kode til en 11/45"
+
+#~ msgid "Generate code for an 11/10"
+#~ msgstr "Generér kode til en 11/10"
+
+#~ msgid "Use 32 bit int"
+#~ msgstr "Benyt 32 bit int"
+
+#~ msgid "Use 16 bit int"
+#~ msgstr "Benyt 16 bit int"
+
+#~ msgid "Use 32 bit float"
+#~ msgstr "Benyt 32 bit float"
+
+#~ msgid "Use 64 bit float"
+#~ msgstr "Benyt 64 bit float"
+
+#~ msgid "Target has split I&D"
+#~ msgstr "Målarkitektur har delt I&D"
+
+#~ msgid "Target does not have split I&D"
+#~ msgstr "Målarkitektur har ikke delt I&D"
+
+#~ msgid "Use UNIX assembler syntax"
+#~ msgstr "Benyt UNIX-maskinkodesyntaks"
+
+#~ msgid "Use DEC assembler syntax"
+#~ msgstr "Benyt DEC-maskinkodesyntaks"
+
+#~ msgid "invalid %%S value"
+#~ msgstr "ugyldig %%S-værdi"
+
+#~ msgid "invalid %%b value"
+#~ msgstr "ugyldig %%b-værdi"
+
+#~ msgid "invalid %%z value"
+#~ msgstr "ugyldig %%z-værdi"
+
+#~ msgid "invalid %%Z value"
+#~ msgstr "ugyldig %%Z-værdi"
+
+#~ msgid "invalid %%k value"
+#~ msgstr "ugyldig %%k-værdi"
+
+#~ msgid "invalid %%j value"
+#~ msgstr "ugyldig %%j-værdi"
+
+#~ msgid "can't have varargs with -mfp-arg-in-fp-regs"
+#~ msgstr "kan ikke have variable parameterlister med -mfp-arg-in-fp-regs"
+
+#~ msgid "ignoring malformed #pragma longcall"
+#~ msgstr "ignorerer forkert udformet #pragma longcall"
+
+#~ msgid "missing open paren"
+#~ msgstr "manglende startparantes"
+
+#~ msgid "missing number"
+#~ msgstr "manglende tal"
+
+#~ msgid "missing close paren"
+#~ msgstr "manglende slutparantes"
+
+#~ msgid "number must be 0 or 1"
+#~ msgstr "tal skal enten være 0 eller 1"
+
+#~ msgid "junk at end of #pragma longcall"
+#~ msgstr "ragelse i slutningen af #pragma longcall"
+
+#~ msgid "-mmultiple is not supported on little endian systems"
+#~ msgstr "-mmultiple er ikke understøttet på lilleendede systemer"
+
+#~ msgid "-mstring is not supported on little endian systems"
+#~ msgstr "-mstring er ikke understøttet på lilleendede systemer"
+
+#~ msgid "unknown -mdebug-%s switch"
+#~ msgstr "ukendt tilvalg -mdebug-%s"
+
+#~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'"
+#~ msgstr "ukendt parameter '%s' til -mtraceback; forventer 'full', 'partial' eller 'none'"
+
+#~ msgid "Unknown switch -mlong-double-%s"
+#~ msgstr "Ukendt tilvalg -mlong-double-%s"
+
+#~ msgid "unknown -misel= option specified: '%s'"
+#~ msgstr "ukendt tilvalg til -misel= angivet: '%s'"
+
+#~ msgid "unknown -mvrsave= option specified: '%s'"
+#~ msgstr "ukendt tilvalg til -mvrsave= angivet: '%s'"
+
+#~ msgid "unknown ABI specified: '%s'"
+#~ msgstr "ukendt ABI angivet: '%s'"
+
+#~ msgid "argument 1 must be a 5-bit signed literal"
+#~ msgstr "1. parameter skal være en 5 bit-konstant med fortegn"
+
+#~ msgid "argument 2 must be a 5-bit unsigned literal"
+#~ msgstr "2. parameter skal være en 5 bit-konstant uden fortegn"
+
+#~ msgid "argument 1 of __builtin_altivec_predicate must be a constant"
+#~ msgstr "1. parameter til __builtin_altivec_predicate skal være en konstant"
+
+#~ msgid "argument 1 of __builtin_altivec_predicate is out of range"
+#~ msgstr "1. parameter til __builtin_altivec_predicate er uden for det gyldige interval"
+
+#~ msgid "argument 3 must be a 4-bit unsigned literal"
+#~ msgstr "3. parameter skal være en 4 bit-konstant uden fortegn"
+
+#~ msgid "argument to `%s' must be a 2-bit unsigned literal"
+#~ msgstr "parameter til '%s' skal være en 2 bit-konstant uden fortegn"
+
+#~ msgid "argument to dss must be a 2-bit unsigned literal"
+#~ msgstr "parameter til dss skal være en 2 bit-konstant uden fortegn"
+
+#~ msgid "argument 1 of __builtin_spe_predicate must be a constant"
+#~ msgstr "1. parameter til __builtin_spe_predicate skal være en konstant"
+
+#~ msgid "argument 1 of __builtin_spe_predicate is out of range"
+#~ msgstr "1. parameter til __builtin_spe_predicate er uden for det gyldige interval"
+
+#~ msgid "invalid %%f value"
+#~ msgstr "ugyldig %%f-værdi"
+
+#~ msgid "invalid %%F value"
+#~ msgstr "ugyldig %%F-værdi"
+
+#~ msgid "invalid %%G value"
+#~ msgstr "ugyldig %%G-værdi"
+
+#~ msgid "invalid %%j code"
+#~ msgstr "ugyldig %%j-kode"
+
+#~ msgid "invalid %%J code"
+#~ msgstr "ugyldig %%J-kode"
+
+#~ msgid "invalid %%K value"
+#~ msgstr "ugyldig %%K-værdi"
+
+#~ msgid "invalid %%O value"
+#~ msgstr "ugyldig %%O-værdi"
+
+#~ msgid "invalid %%T value"
+#~ msgstr "ugyldig %%T-værdi"
+
+#~ msgid "invalid %%u value"
+#~ msgstr "ugyldig %%u-værdi"
+
+#~ msgid "invalid %%v value"
+#~ msgstr "ugyldig %%v-værdi"
+
+#~ msgid "no profiling of 64-bit code for this ABI"
+#~ msgstr "ingen profilering af 64 bit-kode for denne ABI"
+
+#~ msgid "Always pass floating-point arguments in memory"
+#~ msgstr "Overbring altid kommatalsparametre i hukommelse"
+
+#~ msgid "Don't always pass floating-point arguments in memory"
+#~ msgstr "Overbring ikke altid kommatalsparametre i hukommelse"
+
+#~ msgid "Support message passing with the Parallel Environment"
+#~ msgstr "Understøt meddelelsesoverbringelse med Parallel Environment"
+
+#~ msgid "Compile for 64-bit pointers"
+#~ msgstr "Oversæt for 64 bit-henvisninger"
+
+#~ msgid "Compile for 32-bit pointers"
+#~ msgstr "Oversæt for 32 bit-henvisninger"
+
+#~ msgid "-maix64 and POWER architecture are incompatible"
+#~ msgstr "-maix64 og POWER-arkitekturen er indbyrdes uforenelige"
+
+#~ msgid "-maix64 requires PowerPC64 architecture remain enabled"
+#~ msgstr "-maix64 kræver at PowerPC64-arkitekturen forbliver aktiveret"
+
+#~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
+#~ msgstr "-maix64 påkrævet: 64 bit-beregninger med 32 bit-adressering understøttes endnu ikke"
+
+#~ msgid "Use POWER instruction set"
+#~ msgstr "Benyt POWER-instruktionssættet"
+
+#~ msgid "Use POWER2 instruction set"
+#~ msgstr "Benyt POWER2-instruktionssættet"
+
+#~ msgid "Do not use POWER2 instruction set"
+#~ msgstr "Benyt ikke POWER2-instruktionssættet"
+
+#~ msgid "Do not use POWER instruction set"
+#~ msgstr "Benyt ikke POWER-instruktionssættet"
+
+#~ msgid "Use PowerPC instruction set"
+#~ msgstr "Benyt PowerPC-instruktionssættet"
+
+#~ msgid "Do not use PowerPC instruction set"
+#~ msgstr "Benyt ikke PowerPC-instruktionssættet"
+
+#~ msgid "Use PowerPC General Purpose group optional instructions"
+#~ msgstr "Benyt valgfrie instruktioner fra PowerPC General Purpose-gruppen"
+
+#~ msgid "Don't use PowerPC General Purpose group optional instructions"
+#~ msgstr "Benyt ikke valgfrie instruktioner fra PowerPC General Purpose-gruppen"
+
+#~ msgid "Use PowerPC Graphics group optional instructions"
+#~ msgstr "Benyt valgfrie instruktioner fra PowerPC Graphics-gruppen"
+
+#~ msgid "Don't use PowerPC Graphics group optional instructions"
+#~ msgstr "Benyt ikke valgfrie instruktioner fra PowerPC Graphics-gruppen"
+
+#~ msgid "Use PowerPC-64 instruction set"
+#~ msgstr "Benyt PowerPC-64-instruktionssættet"
+
+#~ msgid "Don't use PowerPC-64 instruction set"
+#~ msgstr "Benyt ikke PowerPC-64-instruktionssættet"
+
+#~ msgid "Use AltiVec instructions"
+#~ msgstr "Benyt AltiVec-instruktioner"
+
+#~ msgid "Don't use AltiVec instructions"
+#~ msgstr "Benyt ikke AltiVec-instruktioner"
+
+#~ msgid "Use new mnemonics for PowerPC architecture"
+#~ msgstr "Benyt nye aliaser for PowerPC-arkitekturen"
+
+#~ msgid "Use old mnemonics for PowerPC architecture"
+#~ msgstr "Benyt tidligere aliaser for PowerPC-arkitekturen"
+
+#~ msgid "Put everything in the regular TOC"
+#~ msgstr "Anbring alting i den regulære indholdsfortegnelse"
+
+#~ msgid "Place floating point constants in TOC"
+#~ msgstr "Anbring kommatalskonstanter i indholdsfortegnelsen"
+
+#~ msgid "Don't place floating point constants in TOC"
+#~ msgstr "Anbring ikke kommatalskonstanter i indholdsfortegnelsen"
+
+#~ msgid "Place symbol+offset constants in TOC"
+#~ msgstr "Anbring symbol+afsæt-konstanter i indholdsfortegnelsen"
+
+#~ msgid "Don't place symbol+offset constants in TOC"
+#~ msgstr "Anbring ikke symbol+afsæt-konstanter i indholdsfortegnelsen"
+
+#~ msgid "Place variable addresses in the regular TOC"
+#~ msgstr "Anbring variabeladresser i den regulære indholdsfortegnelse"
+
+#~ msgid "Generate load/store multiple instructions"
+#~ msgstr "Generér flere indlæsnings-/lagringsinstruktioner"
+
+#~ msgid "Do not generate load/store multiple instructions"
+#~ msgstr "Generér ikke flere indlæsnings-/lagringsinstruktioner"
+
+#~ msgid "Generate string instructions for block moves"
+#~ msgstr "Generér strengoperationer til blokflytninger"
+
+#~ msgid "Do not generate string instructions for block moves"
+#~ msgstr "Generér ikke strengoperationer til blokflytninger"
+
+#~ msgid "Generate load/store with update instructions"
+#~ msgstr "Generér indlæsning/lagring med opdateringsinstruktioner"
+
+#~ msgid "Do not generate load/store with update instructions"
+#~ msgstr "Generér ikke indlæsning/lagring med opdateringsinstruktioner"
+
+#~ msgid "Don't schedule the start and end of the procedure"
+#~ msgstr "Planlæg ikke begyndelsen og slutningen af proceduren"
+
+#~ msgid "Return all structures in memory (AIX default)"
+#~ msgstr "Returnér alle strukturer i hukommelse (SVR4-standard)"
+
+#~ msgid "Return small structures in registers (SVR4 default)"
+#~ msgstr "Returnér små strukturer i registre (SVR4-standard)"
+
+#~ msgid "Use features of and schedule code for given CPU"
+#~ msgstr "Benyt faciliteter fra og planlæg koden til en given processor"
+
+#~ msgid "Enable debug output"
+#~ msgstr "Aktivér fejlanalyseringsuddata"
+
+#~ msgid "Select full, part, or no traceback table"
+#~ msgstr "Vælg komplet, partiel eller ingen tilbagesporingstabel"
+
+#~ msgid "Specify ABI to use"
+#~ msgstr "Angiv ABI der skal bruges"
+
+#~ msgid "Specify size of long double (64 or 128 bits)"
+#~ msgstr "Angiv størrelsen af long double (64 eller 128 bit)"
+
+#~ msgid "Specify yes/no if isel instructions should be generated"
+#~ msgstr "Angiv yes/no hvis isel-instruktioner skal genereres"
+
+#~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec"
+#~ msgstr "Angiv yes/no hvis VRSAVE-instruktioner skal genereres til AltiVec"
+
+#~ msgid "Avoid all range limits on call instructions"
+#~ msgstr "Undgå alle områdegrænser ved kaldeinstruktioner"
+
+#~ msgid "RETURN_ADDRESS_OFFSET not supported"
+#~ msgstr "RETURN_ADDRESS_OFFSET er ikke understøttet"
+
+#~ msgid "Select ABI calling convention"
+#~ msgstr "Angiv ABI-kaldekonvention"
+
+#~ msgid "Select method for sdata handling"
+#~ msgstr "Angiv metode for sdata-håndtering"
+
+#~ msgid "Align to the base type of the bit-field"
+#~ msgstr "Justér til grundtypen for bitfeltet"
+
+#~ msgid "Don't align to the base type of the bit-field"
+#~ msgstr "Justér ikke til grundtypen for bitfeltet"
+
+#~ msgid "Don't assume that unaligned accesses are handled by the system"
+#~ msgstr "Antag ikke at ujusterede tilgange håndteres af systemet"
+
+#~ msgid "Assume that unaligned accesses are handled by the system"
+#~ msgstr "Antag at ujusterede tilgange håndteres af systemet"
+
+#~ msgid "Produce code relocatable at runtime"
+#~ msgstr "Generér kode som kan flyttes på kørselstidspunktet"
+
+#~ msgid "Don't produce code relocatable at runtime"
+#~ msgstr "Generér ikke kode som kan flyttes på kørselstidspunktet"
+
+#~ msgid "Produce little endian code"
+#~ msgstr "Generér lilleendet kode"
+
+#~ msgid "Produce big endian code"
+#~ msgstr "Generér storendet kode"
+
+#~ msgid "no description yet"
+#~ msgstr "ingen beskrivelse endnu"
+
+#~ msgid "Use EABI"
+#~ msgstr "Benyt EABI"
+
+#~ msgid "Don't use EABI"
+#~ msgstr "Benyt ikke EABI"
+
+#~ msgid "Do not allow bit-fields to cross word boundaries"
+#~ msgstr "Tillad ikke bitfelter at krydse ordgrænser"
+
+#~ msgid "Use alternate register names"
+#~ msgstr "Benyt alternative registernavne"
+
+#~ msgid "Don't use alternate register names"
+#~ msgstr "Benyt ikke alternative registernavne"
+
+#~ msgid "Link with libsim.a, libc.a and sim-crt0.o"
+#~ msgstr "Sammenkæd med libsim.a, libc.a og sim-crt0.o"
+
+#~ msgid "Link with libads.a, libc.a and crt0.o"
+#~ msgstr "Sammenkæd med libads.a, libc.a og crt0.o"
+
+#~ msgid "Link with libyk.a, libc.a and crt0.o"
+#~ msgstr "Sammenkæd med libyk.a, libc.a og crt0.o"
+
+#~ msgid "Link with libmvme.a, libc.a and crt0.o"
+#~ msgstr "Sammenkæd med libmvme.a, libc.a og crt0.o"
+
+#~ msgid "Set the PPC_EMB bit in the ELF flags header"
+#~ msgstr "Sæt PPC_EMB-bitten i ELF-tilvalgshovedet"
+
+#~ msgid "Use the WindISS simulator"
+#~ msgstr "Benyt WindISS-simulatoren"
+
+#~ msgid "bad value for -mcall-%s"
+#~ msgstr "ugyldig værdi til -mcall-%s"
+
+#~ msgid "bad value for -msdata=%s"
+#~ msgstr "ugyldig værdi til -msdata=%s"
+
+#~ msgid "-mrelocatable and -msdata=%s are incompatible"
+#~ msgstr "-mrelocatable og -msdata=%s er indbyrdes uforenelige"
+
+#~ msgid "-f%s and -msdata=%s are incompatible"
+#~ msgstr "-f%s og -msdata=%s er indbyrdes uforenelige"
+
+#~ msgid "-msdata=%s and -mcall-%s are incompatible"
+#~ msgstr "-msdata=%s og -mcall-%s er indbyrdes uforenelige"
+
+#~ msgid "-mrelocatable and -mno-minimal-toc are incompatible"
+#~ msgstr "-mrelocatable og -mno-minimal-toc er indbyrdes uforenelige"
+
+#~ msgid "-mrelocatable and -mcall-%s are incompatible"
+#~ msgstr "-mrelocatable og -mcall-%s er indbyrdes uforenelige"
+
+#~ msgid "-fPIC and -mcall-%s are incompatible"
+#~ msgstr "-fPIC og -mcall-%s er indbyrdes uforenelige"
+
+#~ msgid "-mcall-aixdesc must be big endian"
+#~ msgstr "-mcall-aixdesc skal være stor-endet"
+
+#~ msgid "invalid UNSPEC as operand (1)"
+#~ msgstr "ugyldig UNSPEC som operand (1)"
+
+#~ msgid "invalid UNSPEC as operand (2)"
+#~ msgstr "ugyldig UNSPEC som operand (2)"
+
+#~ msgid "UNKNOWN in s390_output_symbolic_const !?"
+#~ msgstr "UNKNOWN i s390_output_symbolic_const !?"
+
+#~ msgid "Cannot decompose address."
+#~ msgstr "Kan ikke adskille adresse."
+
+#~ msgid "UNKNOWN in print_operand !?"
+#~ msgstr "UNKNOWN i print_operand !?"
+
+#~ msgid "Total size of local variables exceeds architecture limit."
+#~ msgstr "Total størrelse af lokale variable overstiger arkitekturgrænsen."
+
+# RETMIG: hvad er backchain?
+#~ msgid "Set backchain"
+#~ msgstr "Sæt backchain"
+
+#~ msgid "Don't set backchain (faster, but debug harder"
+#~ msgstr "Sæt ikke backchain (hurtigere, men sværere at fejlanalysere)"
+
+#~ msgid "Use bras for executable < 64k"
+#~ msgstr "Benyt bras til kørbar fil < 64k"
+
+#~ msgid "Don't use bras"
+#~ msgstr "Benyt ikke bras"
+
+#~ msgid "Additional debug prints"
+#~ msgstr "Udskriv ekstra fejlanalyseringsinfo"
+
+#~ msgid "Don't print additional debug prints"
+#~ msgstr "Udskriv ikke ekstra fejlanalyseringsinfo"
+
+#~ msgid "64 bit mode"
+#~ msgstr "64 bit-tilstand"
+
+#~ msgid "31 bit mode"
+#~ msgstr "31 bit-tilstand"
+
+#~ msgid "mvcle use"
+#~ msgstr "Benyt mvcle"
+
+#~ msgid "mvc&ex"
+#~ msgstr "mvc&ex"
+
+#~ msgid "__builtin_saveregs not supported by this subtarget"
+#~ msgstr "__builtin_saveregs understøttes ikke af denne undermålarkitektur"
+
+#~ msgid "attribute interrupt_handler is not compatible with -m5-compact"
+#~ msgstr "egenskaben interrupt_handler er ikke forenelig med -m5-compact"
+
+#~ msgid "`%s' attribute only applies to interrupt functions"
+#~ msgstr "egenskaben '%s' kan kun anvendes sammen med afbrydelsesfunktioner"
+
+#~ msgid "`%s' attribute argument not a string constant"
+#~ msgstr "parameteren til egenskaben '%s' er ikke en strengkonstant"
+
+#~ msgid "`%s' attribute argument not an integer constant"
+#~ msgstr "parameteren til egenskaben '%s' er ikke en heltalskonstant"
+
+#~ msgid "Profiling is not supported on this target."
+#~ msgstr "Profilering er ikke understøttet på målarkitekturen."
+
+#~ msgid "%s is not supported by this configuration"
+#~ msgstr "%s understøttes ikke af denne konfiguration"
+
+#~ msgid "-mlong-double-64 not allowed with -m64"
+#~ msgstr "-mlong-double-64 er ikke tilladt med -m64"
+
+#~ msgid "-mcmodel= is not supported on 32 bit systems"
+#~ msgstr "-mcmodel= understøttes ikke på 32 bit-systemer"
+
+#~ msgid "invalid %%Y operand"
+#~ msgstr "ugyldig %%Y-operand"
+
+#~ msgid "invalid %%A operand"
+#~ msgstr "ugyldig %%A-operand"
+
+#~ msgid "invalid %%B operand"
+#~ msgstr "ugyldig %%B-operand"
+
+#~ msgid "invalid %%c operand"
+#~ msgstr "ugyldig %%c-operand"
+
+#~ msgid "invalid %%C operand"
+#~ msgstr "ugyldig %%C-operand"
+
+#~ msgid "invalid %%d operand"
+#~ msgstr "ugyldig %%d-operand"
+
+#~ msgid "invalid %%D operand"
+#~ msgstr "ugyldig %%D-operand"
+
+#~ msgid "invalid %%f operand"
+#~ msgstr "ugyldig %%f-operand"
+
+#~ msgid "invalid %%s operand"
+#~ msgstr "ugyldig %%s-operand"
+
+#~ msgid "long long constant not a valid immediate operand"
+#~ msgstr "long long-konstant er ikke en gyldig umiddelbar operand"
+
+#~ msgid "floating point constant not a valid immediate operand"
+#~ msgstr "kommatalskonstant er ikke en gyldig umiddelbar operand"
+
+#~ msgid "Use 128 bit long doubles"
+#~ msgstr "Benyt 128 bit long double"
+
+#~ msgid "Generate code for big endian"
+#~ msgstr "Generér kode til storendet"
+
+#~ msgid "Generate code for little endian"
+#~ msgstr "Generér kode til lilleendet"
+
+#~ msgid "Use little-endian byte order for data"
+#~ msgstr "Benyt lilleendet byte-orden til data"
+
+#~ msgid "Assume possible double misalignment"
+#~ msgstr "Antag at double-variabler kan være ujusterede"
+
+#~ msgid "Assume all doubles are aligned"
+#~ msgstr "Antag at alle double-variabler er justerede"
+
+#~ msgid "Pass -assert pure-text to linker"
+#~ msgstr "Overbring -assert pure-text til sammenkæderen"
+
+#~ msgid "Do not pass -assert pure-text to linker"
+#~ msgstr "Overbring ikke -assert pure-text til sammenkæderen"
+
+#~ msgid "Use flat register window model"
+#~ msgstr "Benyt flad registervinduesmodel"
+
+#~ msgid "Do not use flat register window model"
+#~ msgstr "Benyt ikke flad registervinduesmodel"
+
+#~ msgid "Use ABI reserved registers"
+#~ msgstr "Benyt ABI-reserverede registre"
+
+#~ msgid "Do not use ABI reserved registers"
+#~ msgstr "Benyt ikke ABI-reserverede registre"
+
+#~ msgid "Use hardware quad fp instructions"
+#~ msgstr "Benyt hardware quad-kommatalsinstruktioner"
+
+#~ msgid "Do not use hardware quad fp instructions"
+#~ msgstr "Benyt ikke hardware quad-kommatalsinstruktioner"
+
+#~ msgid "Compile for v8plus ABI"
+#~ msgstr "Oversæt for v8plus-ABI"
+
+#~ msgid "Do not compile for v8plus ABI"
+#~ msgstr "Oversæt ikke for v8plus-ABI"
+
+#~ msgid "Utilize Visual Instruction Set"
+#~ msgstr "Benyt Visual Instruction Set"
+
+#~ msgid "Do not utilize Visual Instruction Set"
+#~ msgstr "Benyt ikke Visual Instruction Set"
+
+#~ msgid "Optimize for Cypress processors"
+#~ msgstr "Optimér for Cypress-processorer"
+
+#~ msgid "Optimize for SPARCLite processors"
+#~ msgstr "Optimér for SPARCLite-processorer"
+
+#~ msgid "Optimize for F930 processors"
+#~ msgstr "Optimér for F930-processorer"
+
+#~ msgid "Optimize for F934 processors"
+#~ msgstr "Optimér for F934-processorer"
+
+#~ msgid "Use V8 SPARC ISA"
+#~ msgstr "Benyt V8 SPARC ISA"
+
+#~ msgid "Optimize for SuperSPARC processors"
+#~ msgstr "Optimér for SuperSPARC-processorer"
+
+#~ msgid "Pointers are 64-bit"
+#~ msgstr "Henvisninger er 64 bit"
+
+#~ msgid "Pointers are 32-bit"
+#~ msgstr "Henvisninger er 32 bit"
+
+#~ msgid "Use 32-bit ABI"
+#~ msgstr "Benyt 32 bit-API"
+
+#~ msgid "Use 64-bit ABI"
+#~ msgstr "Benyt 64 bit-API"
+
+#~ msgid "Use stack bias"
+#~ msgstr "Benyt stakafsæt"
+
+#~ msgid "Do not use stack bias"
+#~ msgstr "Benyt ikke stakafsæt"
+
+#~ msgid "Use structs on stronger alignment for double-word copies"
+#~ msgstr "Benyt strukturer på stærkere justering til dobbelt-ord kopier"
+
+#~ msgid "Do not use structs on stronger alignment for double-word copies"
+#~ msgstr "Benyt ikke strukturer på stærkere justering til dobbelt-ord kopier"
+
+#~ msgid "Optimize tail call instructions in assembler and linker"
+#~ msgstr "Optimér halekaldsinstruktioner i maskinkodeoversætteren og sammenkæderen"
+
+#~ msgid "Do not optimize tail call instructions in assembler or linker"
+#~ msgstr "Optimér ikke halekaldsinstruktioner i maskinkodeoversætteren og sammenkæderen"
+
+#~ msgid "Use given SPARC code model"
+#~ msgstr "Benyt given SPARC-kodemodel"
+
+#~ msgid "cannot use va_start in interrupt function"
+#~ msgstr "kan ikke bruge va_start i afbrydelsesfunktion"
+
+#~ msgid "`B' operand is not constant"
+#~ msgstr "'B'-operanden er ikke konstant"
+
+#~ msgid "`B' operand has multiple bits set"
+#~ msgstr "'B'-operanden har flere bit sat"
+
+#~ msgid "`o' operand is not constant"
+#~ msgstr "'o'-operanden er ikke konstant"
+
+#~ msgid "xstormy16_print_operand: unknown code"
+#~ msgstr "xstormy16_print_operand: ukendt kode"
+
+#~ msgid "switch statement of size %lu entries too large"
+#~ msgstr "switch-sætning med %lu elementer er for stor"
+
+#~ msgid "#pragma GHS endXXXX found without previous startXXX"
+#~ msgstr "'#pragma GHS endXXXX' fundet uden forudgående 'startXXX'"
+
+#~ msgid "#pragma GHS endXXX does not match previous startXXX"
+#~ msgstr "'#pragma GHS endXXXX' passer ikke med forudgående 'startXXX'"
+
+#~ msgid "cannot set interrupt attribute: no current function"
+#~ msgstr "kan ikke sætte afbrydelsesegenskaben: ingen aktuel funktion"
+
+#~ msgid "cannot set interrupt attribute: no such identifier"
+#~ msgstr "kan ikke sætte afbrydelsesegenskaben: intet sådant kaldenavn"
+
+#~ msgid "junk at end of #pragma ghs section"
+#~ msgstr "ragelse i slutningen af '#pragma ghs section'"
+
+#~ msgid "unrecognized section name \"%s\""
+#~ msgstr "ukendt sektionsnavn \"%s\""
+
+#~ msgid "malformed #pragma ghs section"
+#~ msgstr "forkert udformet '#pragma ghs section'"
+
+#~ msgid "junk at end of #pragma ghs interrupt"
+#~ msgstr "ragelse i slutningen af '#pragma ghs interrupt'"
+
+#~ msgid "junk at end of #pragma ghs starttda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs starttda'"
+
+#~ msgid "junk at end of #pragma ghs startsda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs startsda'"
+
+#~ msgid "junk at end of #pragma ghs startzda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs startzda'"
+
+#~ msgid "junk at end of #pragma ghs endtda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs endtda'"
+
+#~ msgid "junk at end of #pragma ghs endsda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs endsda'"
+
+#~ msgid "junk at end of #pragma ghs endzda"
+#~ msgstr "ragelse i slutningen af '#pragma ghs endzda'"
+
+#~ msgid "%s=%s is not numeric"
+#~ msgstr "%s=%s er ikke et tal"
+
+#~ msgid "%s=%s is too large"
+#~ msgstr "%s=%s er for stor"
+
+#~ msgid "const_double_split got a bad insn:"
+#~ msgstr "const_double_split modtog en ugyldig instruktion:"
+
+#~ msgid "output_move_single:"
+#~ msgstr "output_move_single:"
+
+#~ msgid "a data area attribute cannot be specified for local variables"
+#~ msgstr "en dataområdeegenskab kan ikke angives for lokale variable"
+
+#~ msgid "data area of '%s' conflicts with previous declaration"
+#~ msgstr "dataområdet '%s' er i modstrid med tidligere erklæring"
+
+#~ msgid "bogus JR construction: %d\n"
+#~ msgstr "falsk JR-konstruktion: %d\n"
+
+#~ msgid "bad amount of stack space removal: %d"
+#~ msgstr "ugyldig størrelse af stakpladsfjernelse: %d"
+
+#~ msgid "bogus JARL construction: %d\n"
+#~ msgstr "falsk JARL-konstruktion: %d\n"
+
+#~ msgid "Bogus DISPOSE construction: %d\n"
+#~ msgstr "Falsk DISPOSE-konstruktion: %d\n"
+
+#~ msgid "Too much stack space to dispose of: %d"
+#~ msgstr "For meget stakplads at tage sig af: %d"
+
+#~ msgid "Bogus PREPEARE construction: %d\n"
+#~ msgstr "Falsk PREPARE-konstruktion: %d\n"
+
+#~ msgid "Too much stack space to prepare: %d"
+#~ msgstr "For meget stakplads at forberede: %d"
+
+#~ msgid "Support Green Hills ABI"
+#~ msgstr "Understøt Green Hills-ABI"
+
+#~ msgid "Prohibit PC relative function calls"
+#~ msgstr "Forbyd PC-relative funktionskald"
+
+#~ msgid "Reuse r30 on a per function basis"
+#~ msgstr "Genbrug r30 på et pr. funktionsgrundlag"
+
+#~ msgid "Use stubs for function prologues"
+#~ msgstr "Benyt stubbe til funktionsindledninger"
+
+#~ msgid "Same as: -mep -mprolog-function"
+#~ msgstr "Samme som: -mep -mprolog-function"
+
+#~ msgid "Enable backend debugging"
+#~ msgstr "Aktivér bagendefejlanalyseringsinfo"
+
+#~ msgid "Compile for the v850 processor"
+#~ msgstr "Oversæt for v850-processoren"
+
+#~ msgid "Compile for v850e processor"
+#~ msgstr "Oversæt for v850e-processoren"
+
+#~ msgid "Enable the use of the short load instructions"
+#~ msgstr "Aktivér brug af short load-instruktioner"
+
+#~ msgid "Do not use the callt instruction"
+#~ msgstr "Benyt ikke callt-instruktionen"
+
+#~ msgid "Do not use registers r2 and r5"
+#~ msgstr "Benyt ikke registrene r2 og r5"
+
+#~ msgid "Enforce strict alignment"
+#~ msgstr "Gennemtving streng justering"
+
+#~ msgid "Use 4 byte entries in switch tables"
+#~ msgstr "Benyt 4 byte-elementer i switch-tabeller"
+
+#~ msgid "Set the max size of data eligible for the TDA area"
+#~ msgstr "Angiv den maks. størrelse af data til TDA-området"
+
+#~ msgid "Set the max size of data eligible for the SDA area"
+#~ msgstr "Angiv den maks. størrelse af data til SDA-området"
+
+#~ msgid "Set the max size of data eligible for the ZDA area"
+#~ msgstr "Angiv den maks. størrelse af data til ZDA-området"
+
+#~ msgid "bad test"
+#~ msgstr "ugyldig test"
+
+#~ msgid "boolean registers required for the floating-point option"
+#~ msgstr "booleske registre er påkrævet til kommatalsindstillingen"
+
+#~ msgid "invalid mask"
+#~ msgstr "ugyldig maske"
+
+#~ msgid "invalid address"
+#~ msgstr "ugyldig adresse"
+
+#~ msgid "no register in address"
+#~ msgstr "ingen registre i adresse"
+
+#~ msgid "address offset not a constant"
+#~ msgstr "adresseafsæt er ikke en konstant"
+
+#~ msgid "only uninitialized variables can be placed in a .bss section"
+#~ msgstr "kun variabler uden startværdi kan placeres i .bss-sektionen"
+
+#~ msgid "Use the Xtensa code density option"
+#~ msgstr "Benyt Xtensa-kodetæthedsindstillingen"
+
+#~ msgid "Do not use the Xtensa code density option"
+#~ msgstr "Benyt ikke Xtensa-kodetæthedsindstillingen"
+
+#~ msgid "Use the Xtensa MAC16 option"
+#~ msgstr "Benyt Xtensa-MAC16-indstillingen"
+
+#~ msgid "Do not use the Xtensa MAC16 option"
+#~ msgstr "Benyt ikke Xtensa-MAC16-indstillingen"
+
+#~ msgid "Use the Xtensa MUL16 option"
+#~ msgstr "Benyt Xtensa-MUL16-indstillingen"
+
+#~ msgid "Do not use the Xtensa MUL16 option"
+#~ msgstr "Benyt ikke Xtensa-MUL16-indstillingen"
+
+#~ msgid "Use the Xtensa MUL32 option"
+#~ msgstr "Benyt Xtensa-MUL32-indstillingen"
+
+#~ msgid "Do not use the Xtensa MUL32 option"
+#~ msgstr "Benyt ikke Xtensa-MUL32-indstillingen"
+
+#~ msgid "Use the Xtensa NSA option"
+#~ msgstr "Benyt Xtensa-NSA-indstillingen"
+
+#~ msgid "Do not use the Xtensa NSA option"
+#~ msgstr "Benyt ikke Xtensa-NSA-indstillingen"
+
+#~ msgid "Use the Xtensa MIN/MAX option"
+#~ msgstr "Benyt Xtensa-MIN/MAX-indstillingen"
+
+#~ msgid "Do not use the Xtensa MIN/MAX option"
+#~ msgstr "Benyt ikke Xtensa-MIN/MAX-indstillingen"
+
+#~ msgid "Use the Xtensa SEXT option"
+#~ msgstr "Benyt Xtensa-SEXT-indstillingen"
+
+#~ msgid "Do not use the Xtensa SEXT option"
+#~ msgstr "Benyt ikke Xtensa-SEXT-indstillingen"
+
+#~ msgid "Use the Xtensa boolean register option"
+#~ msgstr "Benyt Xtensa-indstillingen til booleske registre"
+
+#~ msgid "Do not use the Xtensa boolean register option"
+#~ msgstr "Benyt ikke Xtensa-indstillingen til booleske registre"
+
+#~ msgid "Use the Xtensa floating-point unit"
+#~ msgstr "Benyt kommatalsenheden til Xtensa"
+
+#~ msgid "Do not use the Xtensa floating-point unit"
+#~ msgstr "Benyt ikke kommatalsenheden til Xtensa"
+
+#~ msgid "Disable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Deaktivér sammensatte gang/addér- og gang/subtrahér-kommatalsinstruktioner"
+
+#~ msgid "Enable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Aktivér sammensatte gang/addér- og gang/subtrahér-kommatalsinstruktioner"
+
+#~ msgid "Serialize volatile memory references with MEMW instructions"
+#~ msgstr "Serialisér volatile hukommelsesreference med MEMW-instruktioner"
+
+#~ msgid "Do not serialize volatile memory references with MEMW instructions"
+#~ msgstr "Serialisér ikke volatile hukommelsesreference med MEMW-instruktioner"
+
+#~ msgid "Intersperse literal pools with code in the text section"
+#~ msgstr "Fordel konstanter med kode i tekstsektionen"
+
+#~ msgid "Put literal pools in a separate literal section"
+#~ msgstr "Anbring konstanter i en adskilt konstantsektion"
+
+#~ msgid "Automatically align branch targets to reduce branch penalties"
+#~ msgstr "Justér automatisk forgreningsmål for at reducere forgreningsstraffe"
+
+#~ msgid "Do not automatically align branch targets"
+#~ msgstr "Justér ikke automatisk forgreningsmål"
+
+#~ msgid "Use indirect CALLXn instructions for large programs"
+#~ msgstr "Benyt indirekte CALLXn-instruktioner for store programmer"
+
+#~ msgid "Use direct CALLn instructions for fast calls"
+#~ msgstr "Benyt direkte CALLn-instruktioner for hurtige kald"
+
+#~ msgid "`-gnat' misspelled as `-gant'"
+#~ msgstr "'-gnat' stavet forkert som '-gant'"
+
+#~ msgid "qualified type `%T' does not match destructor name `~%T'"
+#~ msgstr "den modificerede type '%T' passer ikke til destruktionsfunktionsnavnet '~%T'"
+
+#~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')"
+#~ msgstr "typen af '%E' passer ikke til destruktionsfunktionstypen '%T' (typen var '%T')"
+
+#~ msgid "`%D' is a namespace"
+#~ msgstr "'%D' er et navnerum"
+
+#~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'"
+#~ msgstr "stamobjektet '%E' fra metodekald forsynet med virkefelt er af en ikke-sammensat type '%T'"
+
+#~ msgid "unable to call pointer to member function here"
+#~ msgstr "kan ikke kalde henvisning til medlemsfunktion her"
+
+#~ msgid "destructors take no parameters"
+#~ msgstr "destruktionsfunktioner kan ikke have parametre"
+
+#~ msgid "destructor name `~%T' does not match type `%T' of expression"
+#~ msgstr "destruktionsfunktionsnavn '~T' passer ikke med typen '%T' for udtrykket"
+
+#~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'"
+#~ msgstr "forespørgsel efter medlemmet '%D' i '%E' som er af en ikke-sammensat type '%T'"
+
+#~ msgid "request for member `%D' is ambiguous"
+#~ msgstr "forespørgsel efter medlemmet '%D' er tvetydigt"
+
+#~ msgid "%s %D(%T, %T, %T) <built-in>"
+#~ msgstr "%s %D(%T, %T, %T) <indbygget>"
+
+#~ msgid "%s %D(%T, %T) <built-in>"
+#~ msgstr "%s %D(%T, %T) <indbygget>"
+
+#~ msgid "%s %D(%T) <built-in>"
+#~ msgstr "%s %D(%T) <indbygget>"
+
+#~ msgid "%s %T <conversion>"
+#~ msgstr "%s %T <konvertering>"
+
+#~ msgid "%s %+#D%s"
+#~ msgstr "%s %+#D%s"
+
+#~ msgid "conversion from `%T' to `%T' is ambiguous"
+#~ msgstr "konvertering fra '%T' til '%T' er tvetydigt"
+
+#~ msgid "incomplete type '%T' cannot be used to name a scope"
+#~ msgstr "ufuldstændig type '%T' kan ikke bruges til at navngive et virkefelt"
+
+#~ msgid "'%D' has no member named '%E'"
+#~ msgstr "'%D' har intet medlem ved navn '%E'"
+
+#~ msgid "no matching function for call to `%D(%A)'"
+#~ msgstr "ingen passende funktion for kald til '%D(%A)'"
+
+#~ msgid "call of overloaded `%D(%A)' is ambiguous"
+#~ msgstr "kald af flertydig '%D(%A)' er tvetydigt"
+
+#~ msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*"
+#~ msgstr "henvisning til medlemsfunktionen %E kan ikke kaldes uden et objekt; overvej at benytte .* eller ->*"
+
+#~ msgid "no match for call to `(%T) (%A)'"
+#~ msgstr "ingen passende fundet for kald til '(%T) (%A)'"
+
+#~ msgid "call of `(%T) (%A)' is ambiguous"
+#~ msgstr "kald af '(%T) (%A)' er tvetydigt"
+
+#~ msgid "%s for `%T ? %T : %T' operator"
+#~ msgstr "%s for operatoren '%T ? %T : %T'"
+
+#~ msgid "%s for `%T %s' operator"
+#~ msgstr "%s for operatoren '%T %s' "
+
+#~ msgid "%s for `%T [%T]' operator"
+#~ msgstr "%s for operatoren '%T [%T]'"
+
+#~ msgid "%s for `%T %s %T' operator"
+#~ msgstr "%s for operatoren '%T %s %T'"
+
+#~ msgid "%s for `%s %T' operator"
+#~ msgstr "%s for operatoren '%s %T'"
+
+#~ msgid "ISO C++ forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C++ forbyder udeladelse af den mellemste del af et ?:-udtryk"
+
+#~ msgid "`%E' has type `void' and is not a throw-expression"
+#~ msgstr "'%E' har typen 'void' og er ikke et throw-udtryk"
+
+#~ msgid "operands to ?: have different types"
+#~ msgstr "operander til ?: har forskellige typer"
+
+#~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'"
+#~ msgstr "enum-typer passer ikke sammen i betinget udtryk: '%T' og '%T'"
+
+#~ msgid "enumeral and non-enumeral type in conditional expression"
+#~ msgstr "enum- og ikke enum-type i betinget udtryk"
+
+#~ msgid "`%D' must be declared before use"
+#~ msgstr "'%D' skal erklæres før brug"
+
+#~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead"
+#~ msgstr "ingen '%D(int)' erklæret for suffiks '%s', prøver præfiksoperatoren i stedet"
+
+#~ msgid "using synthesized `%#D' for copy assignment"
+#~ msgstr "bruger syntetiseret '%#D' for kopitildeling"
+
+#~ msgid "  where cfront would use `%#D'"
+#~ msgstr "  hvor cfront ville bruge '%#D'"
+
+#~ msgid "comparison between `%#T' and `%#T'"
+#~ msgstr "sammenligning mellem '%#T' og '%#T'"
+
+#~ msgid "no suitable `operator delete' for `%T'"
+#~ msgstr "ingen passende 'operator delete' for '%T'"
+
+#~ msgid "`%+#D' is private"
+#~ msgstr "'%+#D' er privat"
+
+#~ msgid "`%+#D' is protected"
+#~ msgstr "'%+#D' er beskyttet"
+
+#~ msgid "`%+#D' is inaccessible"
+#~ msgstr "'%+#D' er ikke tilgængelig"
+
+#~ msgid "within this context"
+#~ msgstr "i denne kontekst"
+
+#~ msgid "invalid conversion from `%T' to `%T'"
+#~ msgstr "ugyldig konvertering fra '%T' til '%T'"
+
+#~ msgid "  initializing argument %P of `%D'"
+#~ msgstr "  ved klargøring af parameteren %P til '%D'"
+
+#~ msgid "  initializing argument %P of `%D' from result of `%D'"
+#~ msgstr "  ved klargøring af parameteren %P til '%D' fra resultatet af '%D'"
+
+#~ msgid "  initializing temporary from result of `%D'"
+#~ msgstr "  ved klargøring af midlertidig variabel fra resultatet af '%D'"
+
+#~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime"
+#~ msgstr "kan ikke videregive objekter af en ikke-POD type '%#T' gennem '...'; kald vil afbryde på kørselstidspunktet"
+
+#~ msgid "cannot receive objects of non-POD type `%#T' through `...'"
+#~ msgstr "kan ikke modtage objekter af en ikke-POD type '%#T' gennem '...'"
+
+#~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers"
+#~ msgstr "videregivelse af '%T' som 'this'-parameteren til '%#D' forkaster modifikationer"
+
+#~ msgid "could not find class$ field in java interface type `%T'"
+#~ msgstr "kunne ikke finde et class$-felt i Java-grænsefladetypen '%T'"
+
+#~ msgid "call to non-function `%D'"
+#~ msgstr "kald af ikke-funktion '%D'"
+
+#~ msgid "no matching function for call to `%T::%D(%A)%#V'"
+#~ msgstr "ingen passende funktion for kald til '%T::%D(%A)%#V'"
+
+#~ msgid "cannot call member function `%D' without object"
+#~ msgstr "kan ikke kalde medlemsfunktionen '%D' uden et objekt"
+
+#~ msgid "passing `%T' chooses `%T' over `%T'"
+#~ msgstr "videregivelse af '%T' vælger '%T' frem for '%T'"
+
+#~ msgid "  in call to `%D'"
+#~ msgstr "  i kald af '%D'"
+
+#~ msgid "choosing `%D' over `%D'"
+#~ msgstr "vælger '%D' frem for '%D'"
+
+#~ msgid "  for conversion from `%T' to `%T'"
+#~ msgstr "  for konvertering fra '%T' til '%T'"
+
+#~ msgid "  because conversion sequence for the argument is better"
+#~ msgstr "  fordi konverteringssekvensen for parameteren er bedre"
+
+#~ msgid "ISO C++ says that `%D' and `%D' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter"
+#~ msgstr "ifølge ISO C++ er '%D' og '%D' tvetydigt selvom den værste konvertering for førstnævnte er bedre end den værste konvertering for den sidstnævnte"
+
+#~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'"
+#~ msgstr "kan ikke konvertere fra stamklassen '%T' til den nedarvede type '%T' via den virtuelle stamklasse '%T'"
+
+#~ msgid "`%#D' and `%#D' cannot be overloaded"
+#~ msgstr "'%#D' og '%#D' kan ikke flertydiggøres"
+
+#~ msgid "duplicate enum value `%D'"
+#~ msgstr "enum-værdien '%D' optræder mere end én gang"
+
+#~ msgid "duplicate field `%D' (as enum and non-enum)"
+#~ msgstr "feltet '%D' optræder mere end én gang (som enum og som ikke-enum)"
+
+#~ msgid "duplicate nested type `%D'"
+#~ msgstr "den indlejrede type '%D' optræder mere end én gang"
+
+#~ msgid "duplicate field `%D' (as type and non-type)"
+#~ msgstr "feltet '%D' optræder mere end én gang (som type og som ikke-type)"
+
+#~ msgid "duplicate member `%D'"
+#~ msgstr "medlemmet '%D' optræder mere end én gang"
+
+#~ msgid "conflicting access specifications for method `%D', ignored"
+#~ msgstr "modstridende tilgangsanvisninger til metoden '%D', ignoreret"
+
+#~ msgid "conflicting access specifications for field `%s', ignored"
+#~ msgstr "modstridende tilgangsanvisninger til feltet '%s', ignoreret"
+
+#~ msgid "`%D' names constructor"
+#~ msgstr "'%D' navngiver en konstruktionsfunktion"
+
+#~ msgid "`%D' invalid in `%T'"
+#~ msgstr "'%D' ugyldig i '%T'"
+
+#~ msgid "no members matching `%D' in `%#T'"
+#~ msgstr "ingen medlemmer passer til '%D' i '%#T'"
+
+#~ msgid "`%D' invalid in `%#T'"
+#~ msgstr "'%D' ugyldig i '%#T'"
+
+#~ msgid "  because of local method `%#D' with same name"
+#~ msgstr "  på grund af den lokale metode '%#D' med det samme navn"
+
+#~ msgid "  because of local member `%#D' with same name"
+#~ msgstr "  på grund af det lokale medlem '%#D' med det samme navn"
+
+#~ msgid "base class `%#T' has a non-virtual destructor"
+#~ msgstr "stamklassen '%#T' har en ikke-virtuel destruktionsfunktion"
+
+#~ msgid "base `%T' with only non-default constructor in class without a constructor"
+#~ msgstr "stamklasse '%T' med kun ikke-standardkonstruktionsfunktion i klasse uden en konstruktionsfunktion"
+
+#~ msgid "all member functions in class `%T' are private"
+#~ msgstr "alle medlemsfunktioner i klassen '%T' er private"
+
+#~ msgid "`%#T' only defines a private destructor and has no friends"
+#~ msgstr "'%#T' definerer kun en privat destruktionsfunktion og har ingen venner"
+
+#~ msgid "`%#T' only defines private constructors and has no friends"
+#~ msgstr "'%#T' definerer kun private konstruktionsfunktioner og har ingen venner"
+
+#~ msgid "redefinition of `%#T'"
+#~ msgstr "omdefinering af '%#T'"
+
+#~ msgid "previous definition of `%#T'"
+#~ msgstr "tidligere definition af '%#T'"
+
+# %D er en funktion
+#~ msgid "no unique final overrider for `%D' in `%T'"
+#~ msgstr "ingen unik endelig overskrivning af '%D' i '%T'"
+
+#~ msgid "`%D' was hidden"
+#~ msgstr "'%D' var skjult"
+
+#~ msgid "  by `%D'"
+#~ msgstr "  af '%D'"
+
+#~ msgid "ISO C++ forbids member `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ forbyder medlemmet '%D' med samme navn som den omgivende klasse"
+
+#~ msgid "`%#D' invalid; an anonymous union can only have non-static data members"
+#~ msgstr "'%#D' er ugyldig; en anonym union kan kun have ikke-statiske datamedlemmer"
+
+#~ msgid "private member `%#D' in anonymous union"
+#~ msgstr "privat medlem '%#D' i en anonym union"
+
+#~ msgid "protected member `%#D' in anonymous union"
+#~ msgstr "beskyttet medlem '%#D' i en anonym union"
+
+#~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor"
+#~ msgstr "vtable-layout for klassen '%T' følger ikke nødvendigvis ABI'et og kan ændre sig i en fremtidig version af GCC pga. underforstået virtuel destruktionsfunktion"
+
+#~ msgid "bit-field `%#D' with non-integral type"
+#~ msgstr "bitfelt '%#D' med en ikke-heltalstype"
+
+#~ msgid "bit-field `%D' width not an integer constant"
+#~ msgstr "bredden af bitfeltet '%D' er ikke en heltalskonstant"
+
+#~ msgid "negative width in bit-field `%D'"
+#~ msgstr "negativ bredde i bitfeltet '%D'"
+
+#~ msgid "zero width for bit-field `%D'"
+#~ msgstr "en bredde på nul for bitfeltet '%D'"
+
+#~ msgid "width of `%D' exceeds its type"
+#~ msgstr "bredden af '%D' overstiger typen"
+
+#~ msgid "`%D' is too small to hold all values of `%#T'"
+#~ msgstr "'%D' er for lille til at indeholde alle værdierne af '%#T'"
+
+#~ msgid "member `%#D' with constructor not allowed in union"
+#~ msgstr "medlemmet '%#D' med en konstruktionsfunktion er ikke tilladt i en union"
+
+#~ msgid "member `%#D' with destructor not allowed in union"
+#~ msgstr "medlemmet '%#D' med en destruktionsfunktion er ikke tilladt i en union"
+
+#~ msgid "member `%#D' with copy assignment operator not allowed in union"
+#~ msgstr "medlemmet '%#D' med en kopitildelingsoperator er ikke tilladt i en union"
+
+#~ msgid "multiple fields in union `%T' initialized"
+#~ msgstr "flere felter i union '%T' tildeles startværdi"
+
+#~ msgid "field `%D' in local class cannot be static"
+#~ msgstr "feltet '%D' i lokal klasse kan ikke være statisk"
+
+#~ msgid "field `%D' invalidly declared function type"
+#~ msgstr "feltet '%D' er på ugyldig vis erklæret som en funktionstype"
+
+#~ msgid "field `%D' invalidly declared method type"
+#~ msgstr "feltet '%D' er på ugyldig vis erklæret som en medlemsfunktionstype"
+
+#~ msgid "field `%D' invalidly declared offset type"
+#~ msgstr "feltet '%D' er på ugyldig vis erklæret som en afstandstype"
+
+#~ msgid "field `%D' declared static in union"
+#~ msgstr "feltet '%D' er erklæret statisk i union"
+
+#~ msgid "non-static reference `%#D' in class without a constructor"
+#~ msgstr "ikke-statisk reference '%#D' i klasse uden en konstruktionsfunktion"
+
+#~ msgid "non-static const member `%#D' in class without a constructor"
+#~ msgstr "ikke-statisk konstant medlem '%#D' i klasse uden en konstruktionsfunktion"
+
+#~ msgid "field `%#D' with same name as class"
+#~ msgstr "felt '%#D' med samme navn som klassen"
+
+#~ msgid "`%#T' has pointer data members"
+#~ msgstr "'%#T' har henvisningsdatamedlemmer"
+
+#~ msgid "  but does not override `%T(const %T&)'"
+#~ msgstr "  men overskriver ikke '%T(const %T&)'"
+
+#~ msgid "  or `operator=(const %T&)'"
+#~ msgstr "  eller 'operator=(const %T&)'"
+
+#~ msgid "  but does not override `operator=(const %T&)'"
+#~ msgstr "  men overskriver ikke 'operator=(const %T&)'"
+
+#~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC"
+#~ msgstr "afsættet for tom stamklasse '%T' følger ikke nødvendigvis ABI'en og kan ændre sig i en fremtidig version af GCC"
+
+#~ msgid "class `%T' will be considered nearly empty in a future version of GCC"
+#~ msgstr "klassen '%T' vil blive betragtet som næsten tom i en fremtidig version af GCC"
+
+#~ msgid "initializer specified for non-virtual method `%D'"
+#~ msgstr "startværdi angivet for ikke-virtuel medlemsfunktion '%D'"
+
+#~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "afsættet for virtuel stamklasse '%T' følger ikke ABI'en og kan ændre sig i en fremtidig version af GCC"
+
+#~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "direkte stamklasse '%T' er ikke tilgængelig i '%T' på grund af tvetydighed"
+
+#~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "virtuel stamklasse '%T' er ikke tilgængelig i '%T' på grund af tvetydighed"
+
+#~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC"
+#~ msgstr "størrelsen der bliver tildelt '%T' følger ikke nødvendigvis ABI'en og kan ændre sig i en fremtidig version af GCC"
+
+#~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "afsættet for '%D' følger ikke ABI'en og kan ændre sig i en fremtidig version af GCC"
+
+#~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC"
+#~ msgstr "'%D' indeholder tomme klasser hvad der kan få stamklasser til at blive placeret andre steder i en fremtidig version af GCC"
+
+#~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC"
+#~ msgstr "layoutet af klasser der nedarver fra den tomme klasse '%T' kan ændre sig i en fremtidig version af GCC"
+
+#~ msgid "`%#T' has virtual functions but non-virtual destructor"
+#~ msgstr "'%#T' har virtuelle funktioner, men ikke-virtuel destruktionsfunktion"
+
+#~ msgid "trying to finish struct, but kicked out due to previous parse errors"
+#~ msgstr "forsøgte at afslutte struct, men blev stoppet af tidligere fortolkningsfejl"
+
+#~ msgid "language string `\"%s\"' not recognized"
+#~ msgstr "sprogstrengen '\"%s\"' ikke genkendt"
+
+#~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'"
+#~ msgstr "kan ikke benytte den flertydiggjorte funktion '%D' baseret på konvertering til typen '%T'"
+
+#~ msgid "no matches converting function `%D' to type `%#T'"
+#~ msgstr "ingen passende ved konvertering af funktionen '%D' til typen '%#T'"
+
+#~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous"
+#~ msgstr "konvertering af den flertydiggjorte funktion '%D' til typen '%T' er tvetydig"
+
+#~ msgid "assuming pointer to member `%D'"
+#~ msgstr "antager henvisning til medlemmet '%D'"
+
+#~ msgid "(a pointer to member can only be formed with `&%E')"
+#~ msgstr "(en henvisning til medlem kan kun dannes med '&%E')"
+
+#~ msgid "not enough type information"
+#~ msgstr "ikke tilstrækkelig information om typen"
+
+#~ msgid "argument of type `%T' does not match `%T'"
+#~ msgstr "parameter af typen '%T' passer ikke til '%T'"
+
+#~ msgid "invalid operation on uninstantiated type"
+#~ msgstr "ugyldig operation på uudskiftet type"
+
+#~ msgid "declaration of `%#D'"
+#~ msgstr "omerklæring af '%#D'"
+
+#~ msgid "changes meaning of `%D' from `%+#D'"
+#~ msgstr "skifter betydningen af '%D' fra '%+#D'"
+
+#~ msgid "can't convert from incomplete type `%T' to `%T'"
+#~ msgstr "kan ikke konvertere fra ufuldstændig type '%T' til '%T'"
+
+#~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous"
+#~ msgstr "konvertering af '%E' fra '%T' til '%T' er tvetydigt"
+
+#~ msgid "converting from `%T' to `%T'"
+#~ msgstr "konvertering fra '%T' til '%T'"
+
+#~ msgid "pointer to member cast from `%T' to `%T' is via virtual base"
+#~ msgstr "typekonvertering af henvisning til medlem fra '%T' til '%T' er via virtuel stamklasse"
+
+#~ msgid "cannot convert `%E' from type `%T' to type `%T'"
+#~ msgstr "kan ikke konvertere '%E' fra typen '%T' til typen '%T'"
+
+#~ msgid "invalid conversion from '%T' to '%T'"
+#~ msgstr "ugyldig konvertering fra '%T' til '%T'"
+
+#~ msgid "conversion from `%T' to `%T' discards qualifiers"
+#~ msgstr "konvertering fra '%T' til '%T' forkaster modifikationer"
+
+#~ msgid "casting `%T' to `%T' does not dereference pointer"
+#~ msgstr "typeomtvingning af '%T' til '%T' følger ikke henvisning"
+
+#~ msgid "cannot convert type `%T' to type `%T'"
+#~ msgstr "kan ikke konvertere typen '%T' til typen '%T'"
+
+#~ msgid "conversion from `%#T' to `%#T'"
+#~ msgstr "konvertering fra '%#T' til '%#T'"
+
+#~ msgid "`%#T' used where a `%T' was expected"
+#~ msgstr "'%#T' benyttet hvor '%T' var forventet"
+
+#~ msgid "the address of `%D', will always be `true'"
+#~ msgstr "adressen af '%D' vil altid være 'true'"
+
+#~ msgid "`%#T' used where a floating point value was expected"
+#~ msgstr "'%#T' benyttet hvor der forventedes en kommatalsværdi"
+
+#~ msgid "conversion from `%T' to non-scalar type `%T' requested"
+#~ msgstr "konvertering fra '%T' til en ikke-skalartype '%T' udbedt"
+
+#~ msgid "object of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "objekt af den ufuldstændige type '%T' vil ikke blive tilgået i %s"
+
+#~ msgid "object of type `%T' will not be accessed in %s"
+#~ msgstr "objekt af typen '%T' vil ikke blive tilgået i %s"
+
+#~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "objektet '%E' af den ufuldstændige type '%T' vil ikke blive tilgået i %s"
+
+#~ msgid "%s cannot resolve address of overloaded function"
+#~ msgstr "%s kan ikke finde adressen af flertydiggjort funktion"
+
+#~ msgid "%s is a reference, not call, to function `%E'"
+#~ msgstr "%s er en reference til og ikke et kald af funktionen '%E'"
+
+#~ msgid "ambiguous default type conversion from `%T'"
+#~ msgstr "tvetydig standardtypekonvertering fra '%T'"
+
+#~ msgid "  candidate conversions include `%D' and `%D'"
+#~ msgstr "  kandidater til konverteringen inkluderer '%D' og '%D'"
+
+#~ msgid "conflicts with previous declaration `%#D'"
+#~ msgstr "strider mod tidligere erklæring '%#D'"
+
+#~ msgid "label `%D' used but not defined"
+#~ msgstr "etiketten '%D' er benyttet, men ikke defineret"
+
+#~ msgid "label `%D' defined but not used"
+#~ msgstr "etiketten '%D' er defineret, men ikke benyttet"
+
+#~ msgid "namespace alias `%D' not allowed here, assuming `%D'"
+#~ msgstr "navnerumsalias '%D' er ikke tilladt her, antager '%D'"
+
+#~ msgid "previous declaration of `%D'"
+#~ msgstr "'%D' er tidligere erklæret"
+
+#~ msgid "shadowing %s function `%#D'"
+#~ msgstr "skygger for en %s-funktion '%#D'"
+
+#~ msgid "library function `%#D' redeclared as non-function `%#D'"
+#~ msgstr "biblioteksfunktionen '%#D' er omerklæret som '%#D' der ikke er en funktion"
+
+#~ msgid "conflicts with built-in declaration `%#D'"
+#~ msgstr "strider mod indbygget erklæring '%#D'"
+
+# følges af næste tekst
+#~ msgid "new declaration `%#D'"
+#~ msgstr "ny erklæring af '%#D'"
+
+#~ msgid "ambiguates built-in declaration `%#D'"
+#~ msgstr "tvetydiggør indbygget erklæring '%#D'"
+
+#~ msgid "`%#D' redeclared as different kind of symbol"
+#~ msgstr "'%#D' omerklæret som en anden form for symbol"
+
+#~ msgid "previous declaration of `%#D'"
+#~ msgstr "tidligere erklæring af '%#D'"
+
+#~ msgid "declaration of template `%#D'"
+#~ msgstr "erklæring af skabelon '%#D'"
+
+#~ msgid "ambiguates old declaration `%#D'"
+#~ msgstr "tvetydiggør tidligere erklæring '%#D'"
+
+#~ msgid "declaration of C function `%#D' conflicts with"
+#~ msgstr "erklæring af C-funktionen '%#D' strider mod"
+
+#~ msgid "previous declaration `%#D' here"
+#~ msgstr "tidligere erklæring af '%#D' her"
+
+#~ msgid "conflicting types for `%#D'"
+#~ msgstr "modstridende typer for '%#D'"
+
+#~ msgid "previous declaration as `%#D'"
+#~ msgstr "tidligere erklæring som '%#D'"
+
+#~ msgid "`%#D' previously defined here"
+#~ msgstr "'%#D' tidligere defineret her"
+
+#~ msgid "`%#D' previously declared here"
+#~ msgstr "'%#D' tidligere erklæret her"
+
+#~ msgid "prototype for `%#D'"
+#~ msgstr "prototypen for '%#D'"
+
+#~ msgid "follows non-prototype definition here"
+#~ msgstr "følger definition uden prototype her"
+
+#~ msgid "previous declaration of `%#D' with %L linkage"
+#~ msgstr "tidligere erklæring af '%#D' med %L-kædning"
+
+#~ msgid "conflicts with new declaration with %L linkage"
+#~ msgstr "strider mod ny erklæring af med %L-kædning"
+
+#~ msgid "default argument given for parameter %d of `%#D'"
+#~ msgstr "standardparameter givet til %d. parameter for '%#D'"
+
+#~ msgid "after previous specification in `%#D'"
+#~ msgstr "efter tidligere specifikation i '%#D'"
+
+#~ msgid "`%#D' was used before it was declared inline"
+#~ msgstr "'%#D' blev brugt før erklæring som inline"
+
+#~ msgid "previous non-inline declaration here"
+#~ msgstr "tidligere ikke-inline erklæring her"
+
+#~ msgid "redundant redeclaration of `%D' in same scope"
+#~ msgstr "overflødig omerklæring af '%D' i samme virkefelt"
+
+#~ msgid "declaration of `%F' throws different exceptions"
+#~ msgstr "erklæring af '%F' kaster forskellige undtagelser"
+
+#~ msgid "than previous declaration `%F'"
+#~ msgstr "end tidligere erklæring '%F'"
+
+#~ msgid "explicit specialization of %D after first use"
+#~ msgstr "eksplicit specialisering af %D efter første brug"
+
+#~ msgid "`%#D' used prior to declaration"
+#~ msgstr "'%#D' benyttet før erklæring"
+
+#~ msgid "redeclaration of `wchar_t' as `%T'"
+#~ msgstr "omerklæring af 'wchar_t' som '%T'"
+
+#~ msgid "invalid redeclaration of `%D'"
+#~ msgstr "ugyldig omerklæring af '%D'"
+
+#~ msgid "as `%D'"
+#~ msgstr "som '%D'"
+
+#~ msgid "previous external decl of `%#D'"
+#~ msgstr "tidligere ekstern erklæring af '%#D'"
+
+#~ msgid "`%D' was previously implicitly declared to return `int'"
+#~ msgstr "'%D' blev tidligere underforstået erklæret til at returnere 'int'"
+
+#~ msgid "extern declaration of `%#D' doesn't match"
+#~ msgstr "extern-erklæring af '%#D' passer ikke med"
+
+#~ msgid "global declaration `%#D'"
+#~ msgstr "global erklæring '%#D'"
+
+#~ msgid "declaration of `%#D' shadows a parameter"
+#~ msgstr "erklæring af '%#D' skygger for en parameter"
+
+#~ msgid "declaration of `%s' shadows a member of `this'"
+#~ msgstr "erklæring af '%s' skygger for et medlem af 'this'"
+
+#~ msgid "`%#D' hides constructor for `%#T'"
+#~ msgstr "'%#D' skjuler konstruktionsfunktion for '%#T'"
+
+#~ msgid "`%#D' conflicts with previous using declaration `%#D'"
+#~ msgstr "'%#D' strider mod tidligere using-erklæring '%#D'"
+
+#~ msgid "previous non-function declaration `%#D'"
+#~ msgstr "tidligere ikke-funktionserklæring '%#D'"
+
+#~ msgid "conflicts with function declaration `%#D'"
+#~ msgstr "strider mod funktionserklæring '%#D'"
+
+#~ msgid "implicit declaration of function `%#D'"
+#~ msgstr "underforstået erklæring af funktionen '%#D'"
+
+#~ msgid "label `%s' referenced outside of any function"
+#~ msgstr "der er blevet henvist til etiketten '%s' uden for en funktion"
+
+#~ msgid "jump to label `%D'"
+#~ msgstr "spring til etiketten '%D' "
+
+#~ msgid "jump to case label"
+#~ msgstr "spring til case-etiket"
+
+#~ msgid "  crosses initialization of `%#D'"
+#~ msgstr "  krydser klargøring af '%#D'"
+
+#~ msgid "  enters scope of non-POD `%#D'"
+#~ msgstr "  går ind i virkefelt af ikke-POD '%#D'"
+
+#~ msgid "  enters try block"
+#~ msgstr "  går ind i try-blok"
+
+#~ msgid "  enters catch block"
+#~ msgstr "  går ind i catch-blok"
+
+#~ msgid "  from here"
+#~ msgstr "  herfra"
+
+#~ msgid "  skips initialization of `%#D'"
+#~ msgstr "  springer over klargøring af '%#D'"
+
+#~ msgid "label named wchar_t"
+#~ msgstr "etiket med navnet wchar_t"
+
+#~ msgid "duplicate label `%D'"
+#~ msgstr "etiketten '%D' optræder mere end én gang"
+
+#~ msgid "case label `%E' not within a switch statement"
+#~ msgstr "case-etiket '%E' befinder sig ikke inden i en switch-sætning"
+
+#~ msgid "`%#D' redeclared as %C"
+#~ msgstr "'%#D' omerklæret som %C"
+
+#~ msgid "invalid use of `%D'"
+#~ msgstr "ugyldig brug af '%D"
+
+#~ msgid "`%D::%D' is not a template"
+#~ msgstr "'%D::%D' er ikke en skabelon"
+
+#~ msgid "`%D' undeclared in namespace `%D'"
+#~ msgstr "'%D' ikke erklæret i navnerummet '%D'"
+
+#~ msgid "`%D' used without template parameters"
+#~ msgstr "'%D' benyttet uden skabelonsparametre"
+
+#~ msgid "no class template named `%#T' in `%#T'"
+#~ msgstr "ingen klasseskabelon ved navn '%#T' i '%#T'"
+
+#~ msgid "no type named `%#T' in `%#T'"
+#~ msgstr "ingen type ved navn '%#T' i '%#T'"
+
+#~ msgid "lookup of `%D' finds `%#D'"
+#~ msgstr "opslag af '%D' finder '%#D'"
+
+#~ msgid "  instead of `%D' from dependent base class"
+#~ msgstr "  i stedet for '%D' fra afhængig stamklasse"
+
+#~ msgid "  (use `typename %T::%D' if that's what you meant)"
+#~ msgstr "  (benyt 'typename %T::%D' hvis det er hvad du mener)"
+
+#~ msgid "name lookup of `%D' changed"
+#~ msgstr "navneopslag for '%D' ændret"
+
+#~ msgid "  matches this `%D' under ISO standard rules"
+#~ msgstr "  passer med '%D' under ISO-standardreglerne"
+
+#~ msgid "  matches this `%D' under old rules"
+#~ msgstr "  passer med '%D' under tidligere regler"
+
+#~ msgid "name lookup of `%D' changed for new ISO `for' scoping"
+#~ msgstr "navneopslaget af '%D' er ændret til ISO 'for'-virkefelt"
+
+#~ msgid "  cannot use obsolete binding at `%D' because it has a destructor"
+#~ msgstr "  kan ikke bruge forældet binding til '%D' fordi den har en destruktionsfunktion"
+
+#~ msgid "  using obsolete binding at `%D'"
+#~ msgstr "  bruger forældet binding til '%D'"
+
+#~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')"
+#~ msgstr "opslag af '%D' i virkefeltet for '%#T' ('%#D') passer ikke med opslaget i det aktuelle virkefelt ('%#D')"
+
+#~ msgid "an anonymous union cannot have function members"
+#~ msgstr "en anonym union kan ikke have funktionsmedlemmer"
+
+#~ msgid "member %#D' with constructor not allowed in anonymous aggregate"
+#~ msgstr "medlemmet '%#D' med konstruktionsfunktion er ikke tilladt i anonym sammensat type"
+
+#~ msgid "member %#D' with destructor not allowed in anonymous aggregate"
+#~ msgstr "medlemmet '%#D' med destruktionsfunktion er ikke tilladt i anonym sammensat type"
+
+#~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate"
+#~ msgstr "medlemmet '%#D' med kopitildelingsoperator er ikke tilladt i anonym sammensat type"
+
+#~ msgid "redeclaration of C++ built-in type `%T'"
+#~ msgstr "omerklæring af indbygget type i C++ '%T'"
+
+#~ msgid "multiple types in one declaration"
+#~ msgstr "flere typer i én erklæring"
+
+#~ msgid "missing type-name in typedef-declaration"
+#~ msgstr "manglende typenavn i typedef-erklæring"
+
+#~ msgid "ISO C++ prohibits anonymous structs"
+#~ msgstr "ISO C++ forbyder anonyme strukturer"
+
+#~ msgid "`%D' can only be specified for functions"
+#~ msgstr "'%D' kan kun angives for funktioner"
+
+#~ msgid "`%D' can only be specified inside a class"
+#~ msgstr "'%D' kan kun angives inden i en klasse"
+
+#~ msgid "`%D' can only be specified for constructors"
+#~ msgstr "'%D' kan kun angives for konstruktionsfunktioner"
+
+#~ msgid "`%D' can only be specified for objects and functions"
+#~ msgstr "'%D' kan kun angives for objekter og funktioner"
+
+# init dækker over værditildeling her - samme for de næste mange
+#~ msgid "typedef `%D' is initialized (use __typeof__ instead)"
+#~ msgstr "typedef '%D' bliver tildelt en værdi (benyt __typeof__ i stedet)"
+
+#~ msgid "function `%#D' is initialized like a variable"
+#~ msgstr "funktionen '%#D' bliver tildelt en startværdi som en variabel"
+
+#~ msgid "declaration of `%#D' has `extern' and is initialized"
+#~ msgstr "erklæringen af '%#D' indeholder 'extern' og variablen bliver tildelt en startværdi"
+
+#~ msgid "`%#D' is not a static member of `%#T'"
+#~ msgstr "'%#D' er ikke et statisk medlem af '%#T'"
+
+#~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'"
+#~ msgstr "ISO C++ tillader ikke '%T::%D' at blive defineret som '%T::%D'"
+
+#~ msgid "duplicate initialization of %D"
+#~ msgstr "%D tildelt startværdi mere end én gang"
+
+#~ msgid "declaration of `%#D' outside of class is not definition"
+#~ msgstr "erklæring af '%#D' uden for en klasse er ikke en definition"
+
+#~ msgid "variable `%#D' has initializer but incomplete type"
+#~ msgstr "variablen '%#D' bliver tildelt en startværdi, men er af en ufuldstændig type"
+
+#~ msgid "elements of array `%#D' have incomplete type"
+#~ msgstr "elementer i tabellen '%#D' er af en ufuldstændig type"
+
+#~ msgid "aggregate `%#D' has incomplete type and cannot be defined"
+#~ msgstr "den sammensatte type '%#D' er af en ufuldstændig type og kan ikke defineres"
+
+#~ msgid "`%D' declared as reference but not initialized"
+#~ msgstr "'%D' erklæret som en reference, men bliver ikke tildelt en startværdi"
+
+#~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'"
+#~ msgstr "ISO C++ forbyder brug af en startværdiliste til at klargøre referencen '%D'"
+
+#~ msgid "cannot initialize `%T' from `%T'"
+#~ msgstr "kan ikke klargøre '%T' fra %T'"
+
+#~ msgid "initializer fails to determine size of `%D'"
+#~ msgstr "startværdien giver ikke størrelsen af '%D'"
+
+#~ msgid "array size missing in `%D'"
+#~ msgstr "tabelstørrelsen mangler i '%D'"
+
+#~ msgid "zero-size array `%D'"
+#~ msgstr "nulstørrelsestabel '%D'"
+
+#~ msgid "storage size of `%D' isn't known"
+#~ msgstr "lagringsstørrelsen af '%D' er ikke kendt"
+
+#~ msgid "storage size of `%D' isn't constant"
+#~ msgstr "lagringsstørrelsen af '%D' er ikke konstant"
+
+#~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)"
+#~ msgstr "semantikken for indlejret funktionsstatisk data '%#D' er forkert (du ender med flere kopier)"
+
+#~ msgid "  you can work around this by removing the initializer"
+#~ msgstr "  du kan arbejde dig rundt om dette ved at fjerne startværdien"
+
+#~ msgid "uninitialized const `%D'"
+#~ msgstr "konstant '%D' uden startværdi"
+
+#~ msgid "brace-enclosed initializer used to initialize `%T'"
+#~ msgstr "startværdi i krøllede paranteser benyttet til at klargøre '%T'"
+
+#~ msgid "initializer for `%T' must be brace-enclosed"
+#~ msgstr "startværdi for '%T' skal være indesluttet i krøllede paranteser"
+
+#~ msgid "ISO C++ does not allow designated initializers"
+#~ msgstr "ISO C++ tillader ikke udpegede startværdier"
+
+#~ msgid "`%T' has no non-static data member named `%D'"
+#~ msgstr "'%T' har intet ikke-statisk medlem ved navn '%D'"
+
+#~ msgid "too many initializers for `%T'"
+#~ msgstr "for mange startværdier for '%T'"
+
+#~ msgid "variable-sized object `%D' may not be initialized"
+#~ msgstr "objektet '%D' af variabel størrelse må ikke tildeles en startværdi"
+
+#~ msgid "`%D' has incomplete type"
+#~ msgstr "'%D' er af en ufuldstændig type"
+
+#~ msgid "`%D' must be initialized by constructor, not by `{...}'"
+#~ msgstr "'%D' skal klargøres af en konstruktionsfunktion, ikke af '{...}'"
+
+#~ msgid "structure `%D' with uninitialized const members"
+#~ msgstr "struktur '%D' med konstante medlemmer uden startværdi"
+
+#~ msgid "structure `%D' with uninitialized reference members"
+#~ msgstr "struktur '%D' med referencemedlemmer uden startværdi"
+
+#~ msgid "assignment (not initialization) in declaration"
+#~ msgstr "tildeling (ikke klargøring) i erklæring"
+
+#~ msgid "cannot initialize `%D' to namespace `%D'"
+#~ msgstr "kan ikke tildele startværdi til '%D' med navnerummet '%D'"
+
+#~ msgid "shadowing previous type declaration of `%#D'"
+#~ msgstr "skygger for tidligere typeerklæring af '%#D'"
+
+#~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'"
+#~ msgstr "'%D' kan ikke være trådlokal eftersom den er af en ikke-POD type '%T'"
+
+#~ msgid "`%D' is thread-local and so cannot be dynamically initialized"
+#~ msgstr "'%D' er trådlokal og kan derfor ikke blive tildelt en startværdi dynamisk"
+
+#~ msgid "multiple initializations given for `%D'"
+#~ msgstr "flere startværdier angivet for '%D'"
+
+#~ msgid "invalid catch parameter"
+#~ msgstr "ugyldig catch-parameter"
+
+#~ msgid "destructor for alien class `%T' cannot be a member"
+#~ msgstr "destruktionsfunktionen for den fremmede klasse '%T' kan ikke være et medlem"
+
+#~ msgid "constructor for alien class `%T' cannot be a member"
+#~ msgstr "konstruktionsfunktionen for den fremmede klasse '%T' kan ikke være et medlem"
+
+#~ msgid "`%D' declared as a `virtual' %s"
+#~ msgstr "'%D' erklæret som 'virtual' %s"
+
+#~ msgid "`%D' declared as an `inline' %s"
+#~ msgstr "'%D' erklæret som 'inline' %s"
+
+# %s bliver omsat til typen
+#~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration"
+#~ msgstr "'const'- og 'volatile'-funktionsangivelser til '%D' er ugyldigt i erklæring af %s"
+
+#~ msgid "`%D' declared as a friend"
+#~ msgstr "'%D' er erklæret som en ven"
+
+#~ msgid "`%D' declared with an exception specification"
+#~ msgstr "'%D' erklæret med en undtagelsesspecifikation"
+
+#~ msgid "cannot declare `::main' to be a template"
+#~ msgstr "kan ikke erklære '::main' som en skabelon"
+
+#~ msgid "cannot declare `::main' to be inline"
+#~ msgstr "kan ikke erklære '::main' som indlejret"
+
+#~ msgid "cannot declare `::main' to be static"
+#~ msgstr "kan ikke erklære '::main' som statisk"
+
+#~ msgid "`main' must return `int'"
+#~ msgstr "'main' skal returnere typen 'int'"
+
+#~ msgid "non-local function `%#D' uses anonymous type"
+#~ msgstr "ikke-lokal funktion '%#D' bruger anonym type"
+
+#~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage"
+#~ msgstr "'%#D' refererer ikke til den ikkemodificerede type, so den bruges ikke til sammenkædning"
+
+#~ msgid "non-local function `%#D' uses local type `%T'"
+#~ msgstr "ikke-lokal funktion '%#D' bruger lokal type '%T'"
+
+#~ msgid "%smember function `%D' cannot have `%T' method qualifier"
+#~ msgstr "%smedlemsfunktion '%D' kan ikke have metodemodifikationen '%T'"
+
+#~ msgid "defining explicit specialization `%D' in friend declaration"
+#~ msgstr "definering af eksplicit specialisering '%D' i friend-erklæring"
+
+#~ msgid "invalid use of template-id `%D' in declaration of primary template"
+#~ msgstr "ugyldig brug af skabelons-id '%D' i erklæring af primær skabelon"
+
+#~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "standardparametre er ikke tilladt i erklæring af venneskabelonsspecialisering '%D'"
+
+#~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "'inline' er ikke tilladt i erklæring venneskabelonsspecialisering '%D'"
+
+#~ msgid "definition of implicitly-declared `%D'"
+#~ msgstr "definition af underforstået-erklæret '%D'"
+
+#~ msgid "no `%#D' member function declared in class `%T'"
+#~ msgstr "ingen medlemsfunktion '%#D' erklæret i klassen '%T'"
+
+#~ msgid "non-local variable `%#D' uses local type `%T'"
+#~ msgstr "ikke-lokal variabel '%#D' bruger lokal type '%T'"
+
+#~ msgid "invalid in-class initialization of static data member of non-integral type `%T'"
+#~ msgstr "ugyldig tildeling af startværdi i klasse til statisk datamedlem af en ikke-heltalstype '%T'"
+
+#~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'"
+#~ msgstr "ISO C++ forbyder tildeling af startværdi i klasse til ikke-konstant statisk medlem '%D'"
+
+#~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'"
+#~ msgstr "ISO C++ forbyder tildeling af startværdi til medlemskonstant '%D' af en ikke-heltallig type"
+
+#~ msgid "size of array `%D' has non-integer type"
+#~ msgstr "størrelsen af tabellen '%D' er ikke af en heltalstype"
+
+#~ msgid "size of array has non-integer type"
+#~ msgstr "størrelsen af tabel er ikke af en heltalstype"
+
+#~ msgid "size of array `%D' is negative"
+#~ msgstr "størrelsen af tabellen '%D' er negativ"
+
+#~ msgid "size of array is negative"
+#~ msgstr "størrelsen af tabel er negativ"
+
+#~ msgid "ISO C++ forbids zero-size array `%D'"
+#~ msgstr "ISO C++ forbyder tabellen '%D' med størrelsen nul"
+
+#~ msgid "ISO C++ forbids zero-size array"
+#~ msgstr "ISO C++ forbyder tabel med størrelsen nul"
+
+#~ msgid "size of array `%D' is not an integral constant-expression"
+#~ msgstr "størrelsen af tabellen '%D' er ikke af et heltalligt konstantudtryk"
+
+#~ msgid "size of array is not an integral constant-expression"
+#~ msgstr "størrelsen af tabel er ikke af et heltalligt konstantudtryk"
+
+#~ msgid "ISO C++ forbids variable-size array `%D'"
+#~ msgstr "ISO C++ forbyder tabellen '%D' med variabel størrelse"
+
+#~ msgid "ISO C++ forbids variable-size array"
+#~ msgstr "ISO C++ forbyder tabel med variabel størrelse"
+
+#~ msgid "overflow in array dimension"
+#~ msgstr "tabeldimension for stor"
+
+#~ msgid "declaration of `%D' as %s"
+#~ msgstr "erklæring af '%D' som %s"
+
+#~ msgid "creating %s"
+#~ msgstr "opretter %s"
+
+#~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "erklæring af '%D' som flerdimensional tabel skal have grænser for alle dimensioner pånær den første"
+
+#~ msgid "multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "flerdimensional tabel skal have grænser for alle dimensioner pånær den første"
+
+#~ msgid "return type specification for constructor invalid"
+#~ msgstr "angivelse af returneringstypen til konstruktionsfunktion er ugyldigt"
+
+#~ msgid "return type specification for destructor invalid"
+#~ msgstr "angivelse af returneringstypen til destruktionsfunktion er ugyldigt"
+
+#~ msgid "operator `%T' declared to return `%T'"
+#~ msgstr "operator '%T' erklæret til at returnere '%T'"
+
+#~ msgid "return type specified for `operator %T'"
+#~ msgstr "returtype angivet for 'operator %T'"
+
+#~ msgid "destructors must be member functions"
+#~ msgstr "destruktionsfunktioner skal være medlemmer"
+
+#~ msgid "destructor `%T' must match class name `%T'"
+#~ msgstr "destruktionsfunktion '%T' skal passe til klassenavnet '%T'"
+
+#~ msgid "variable declaration is not allowed here"
+#~ msgstr "variabelerklæring er ikke tilladt her"
+
+#~ msgid "invalid declarator"
+#~ msgstr "ugyldig erklærer"
+
+#~ msgid "declarator-id missing; using reserved word `%D'"
+#~ msgstr "erklærer-id mangler; bruger reserveret ord '%D'"
+
+#~ msgid "type `%T' is not derived from type `%T'"
+#~ msgstr "typen '%T' er ikke nedarvet fra typen '%T'"
+
+#~ msgid "`%T' specified as declarator-id"
+#~ msgstr "'%T' angivet som erklærer-id"
+
+#~ msgid "  perhaps you want `%T' for a constructor"
+#~ msgstr "  måske ønsker du '%T' for en konstruktionsfunktion"
+
+#~ msgid "invalid use of template-name '%E' in a declarator"
+#~ msgstr "ugyldig brug af skabelonsnavn '%E' i erklæring"
+
+#~ msgid "declaration of `%D' as non-function"
+#~ msgstr "erklæring af '%D' som ikke-funktion"
+
+#~ msgid "`bool' is now a keyword"
+#~ msgstr "'bool' er et reserveret ord"
+
+#~ msgid "extraneous `%T' ignored"
+#~ msgstr "overflødig '%T' ignoreret"
+
+#~ msgid "multiple declarations `%T' and `%T'"
+#~ msgstr "flere erklæringer '%T' og '%T'"
+
+#~ msgid "ISO C++ does not support `long long'"
+#~ msgstr "ISO C++ understøtter ikke 'long long'"
+
+#~ msgid "ISO C++ forbids declaration of `%s' with no type"
+#~ msgstr "ISO C++ forbyder erklæring af '%s' uden en type"
+
+#~ msgid "`%T' is implicitly a typename"
+#~ msgstr "'%T' er underforstået et typenavn"
+
+#~ msgid "short, signed or unsigned invalid for `%s'"
+#~ msgstr "short, signed eller unsigned er ugyldig for '%s'"
+
+#~ msgid "long and short specified together for `%s'"
+#~ msgstr "long og short er begge angivet for '%s'"
+
+#~ msgid "signed and unsigned given together for `%s'"
+#~ msgstr "signed og unsigned er begge angivet for '%s'"
+
+#~ msgid "qualifiers are not allowed on declaration of `operator %T'"
+#~ msgstr "modifikationer er ikke tilladt i erklæring af 'operator %T'"
+
+#~ msgid "member `%D' cannot be declared both virtual and static"
+#~ msgstr "medlemmet '%D' kan ikke afklæres både virtual og static"
+
+#~ msgid "storage class specifiers invalid in parameter declarations"
+#~ msgstr "lagringsklasseanvisninger er ugyldige i parametererklæringer"
+
+#~ msgid "typedef declaration invalid in parameter declaration"
+#~ msgstr "typedef-erklæringer er ugyldig i parametererklæringer"
+
+#~ msgid "virtual outside class declaration"
+#~ msgstr "virtual angivet uden for klasseerklæring"
+
+#~ msgid "storage class specified for %s `%s'"
+#~ msgstr "lagringsklasse angivet for %s '%s'"
+
+#~ msgid "storage class specifiers invalid in friend function declarations"
+#~ msgstr "lagringsklasseanvisninger er ugyldige i vennefunktionserklæringer"
+
+#~ msgid "destructor cannot be static member function"
+#~ msgstr "destruktionsfunktionen kan ikke være en statisk medlemsfunktion"
+
+#~ msgid "destructors may not be `%s'"
+#~ msgstr "destruktionsfunktioner må ikke være '%s'"
+
+#~ msgid "constructor cannot be static member function"
+#~ msgstr "konstruktionsfunktionen kan ikke være en statisk medlemsfunktion"
+
+#~ msgid "constructors cannot be declared virtual"
+#~ msgstr "konstruktionsfunktioner kan ikke erklæres virtual"
+
+#~ msgid "constructors may not be `%s'"
+#~ msgstr "konstruktionsfunktioner må ikke være '%s'"
+
+#~ msgid "return value type specifier for constructor ignored"
+#~ msgstr "angivelse af typen af returværdien til konstruktionsfunktionen ignoreret"
+
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "kan ikke tildele en startværdi til vennefunktionen '%s'"
+
+#~ msgid "virtual functions cannot be friends"
+#~ msgstr "en virtuel funktion kan ikke erklæres som friend"
+
+#~ msgid "friend declaration not in class definition"
+#~ msgstr "friend-erklæringen er ikke i klassedefinitionen"
+
+#~ msgid "can't define friend function `%s' in a local class definition"
+#~ msgstr "kan ikke definere vennefunktion '%s' i en lokal klassedefinition"
+
+#~ msgid "destructors may not have parameters"
+#~ msgstr "destruktionsfunktioner må ikke have parametre"
+
+#~ msgid "cannot declare reference to `%#T'"
+#~ msgstr "kan ikke erklære reference til '%#T'"
+
+#~ msgid "cannot declare pointer to `%#T'"
+#~ msgstr "kan ikke erklære henvisning til '%#T'"
+
+#~ msgid "cannot declare pointer to `%#T' member"
+#~ msgstr "kan ikke erklære henvisning til medlemmet '%#T'"
+
+#~ msgid "extra qualification `%T::' on member `%s' ignored"
+#~ msgstr "ekstra modifikation '%T::' af medlemmet '%s' ignoreret"
+
+#~ msgid "cannot declare member function `%T::%s' within `%T'"
+#~ msgstr "kan ikke erklære medlemsfunktion '%T::%s' inde i '%T'"
+
+#~ msgid "cannot declare member `%T::%s' within `%T'"
+#~ msgstr "kan ikke erklære medlem '%T::%s' inde i '%T'"
+
+#~ msgid "data member may not have variably modified type `%T'"
+#~ msgstr "datamedlem må ikke have variabelt ændret type '%T'"
+
+#~ msgid "parameter may not have variably modified type `%T'"
+#~ msgstr "parameter må ikke have variabelt ændret type '%T'"
+
+#~ msgid "only declarations of constructors can be `explicit'"
+#~ msgstr "kun erklæringer af konstruktionsfunktioner kan være 'explicit'"
+
+#~ msgid "non-member `%s' cannot be declared `mutable'"
+#~ msgstr "'%s' som ikke er medlem, kan ikke erklæres 'mutable'"
+
+#~ msgid "non-object member `%s' cannot be declared `mutable'"
+#~ msgstr "'%s' som ikke er objektmedlem, kan ikke erklæres 'mutable'"
+
+#~ msgid "function `%s' cannot be declared `mutable'"
+#~ msgstr "funktionen '%s' kan ikke erklæres 'mutable'"
+
+#~ msgid "static `%s' cannot be declared `mutable'"
+#~ msgstr "static '%s' kan ikke erklæres 'mutable'"
+
+#~ msgid "const `%s' cannot be declared `mutable'"
+#~ msgstr "const '%s' kan ikke erklæres 'mutable'"
+
+#~ msgid "template-id `%D' used as a declarator"
+#~ msgstr "skabelons-id '%D' benyttet som erklærer"
+
+#~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ forbyder indlejret type '%D' med samme navn som den omgivende klasse"
+
+#~ msgid "typedef name may not be class-qualified"
+#~ msgstr "typedef-navn kan ikke klassemodificeres"
+
+#~ msgid "invalid type qualifier for non-member function type"
+#~ msgstr "ugyldig typemodifikation for ikke-medlemsfunktionstype"
+
+#~ msgid "type qualifiers specified for friend class declaration"
+#~ msgstr "typemodifikationer angivet for friend class-erklæring"
+
+#~ msgid "`inline' specified for friend class declaration"
+#~ msgstr "'inline' angivet for friend class-erklæring"
+
+#~ msgid "template parameters cannot be friends"
+#~ msgstr "skabelonsparametre kan ikke være venner"
+
+#~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'"
+#~ msgstr "friend-erklæring kræver klasseangivelse, dvs. 'friend class %T::%D'"
+
+#~ msgid "friend declaration requires class-key, i.e. `friend %#T'"
+#~ msgstr "friend-erklæring kræver klasseangivelse, dvs. 'friend %#T'"
+
+#~ msgid "trying to make class `%T' a friend of global scope"
+#~ msgstr "forsøg på at gøre klassen '%T' til ven af det globale virkningsfelt"
+
+#~ msgid "invalid qualifiers on non-member function type"
+#~ msgstr "ugyldige modifikationer for ikke-medlemsfunktionstype"
+
+#~ msgid "abstract declarator `%T' used as declaration"
+#~ msgstr "abstrakt erklærer '%T' benyttet som erklæring"
+
+#~ msgid "unnamed variable or field declared void"
+#~ msgstr "unavngiven variabel eller felt erklæret void"
+
+#~ msgid "variable or field declared void"
+#~ msgstr "variabel eller felt erklæret void"
+
+#~ msgid "cannot use `::' in parameter declaration"
+#~ msgstr "kan ikke bruge '::' i parametererklæring"
+
+#~ msgid "invalid use of `::'"
+#~ msgstr "ugyldig brug af '::'"
+
+#~ msgid "function `%D' cannot be declared friend"
+#~ msgstr "funktionen '%D' kan ikke erklæres friend"
+
+#~ msgid "can't make `%D' into a method -- not in a class"
+#~ msgstr "kan ikke gøre '%D' til en metode - er ikke i en klasse"
+
+#~ msgid "function `%D' declared virtual inside a union"
+#~ msgstr "funktionen '%D' erklæret virtual inden i en union"
+
+#~ msgid "`%D' cannot be declared virtual, since it is always static"
+#~ msgstr "'%D' kan ikke erklæres virtual eftersom den altid er statisk"
+
+#~ msgid "field `%D' has incomplete type"
+#~ msgstr "feltet '%D' er af en ufuldstændig type"
+
+#~ msgid "name `%T' has incomplete type"
+#~ msgstr "navnet '%T' er af en ufuldstændig type"
+
+#~ msgid "  in instantiation of template `%T'"
+#~ msgstr "  i instantiering af skabelonen '%T'"
+
+#~ msgid "`%s' is neither function nor member function; cannot be declared friend"
+#~ msgstr "'%s' er hverken en almindelig funktion eller en medlemsfunktion; kan ikke erklæres som friend"
+
+#~ msgid "member functions are implicitly friends of their class"
+#~ msgstr "medlemsfunktioner er underforstået venner af deres klasse"
+
+#~ msgid "ISO C++ forbids initialization of member `%D'"
+#~ msgstr "ISO C++ forbyder tildeling af startværdi til medlemmet '%D'"
+
+#~ msgid "making `%D' static"
+#~ msgstr "gør '%D' statisk"
+
+#~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ forbyder statisk datamedlem '%D' med samme navn som den omgivende klasse"
+
+#~ msgid "storage class `auto' invalid for function `%s'"
+#~ msgstr "lagringsklassen 'auto' er ugyldig for funktionen '%s'"
+
+#~ msgid "storage class `register' invalid for function `%s'"
+#~ msgstr "lagringsklassen 'register' er ugyldig for funktionen '%s'"
+
+#~ msgid "storage class `__thread' invalid for function `%s'"
+#~ msgstr "lagringsklassen '__thread' er ugyldig for funktionen '%s'"
+
+#~ msgid "storage class `static' invalid for function `%s' declared out of global scope"
+#~ msgstr "lagringsklassen 'static' er ugyldig for funktionen '%s' erklæret uden for det globale virkefelt"
+
+#~ msgid "storage class `inline' invalid for function `%s' declared out of global scope"
+#~ msgstr "lagringsklassen 'inline' er ugyldig for funktionen '%s' erklæret uden for det globale virkefelt"
+
+#~ msgid "virtual non-class function `%s'"
+#~ msgstr "virtuel funktion '%s' tilhører ikke en klasse"
+
+#~ msgid "cannot declare member function `%D' to have static linkage"
+#~ msgstr "kan ikke erklære medlemsfunktion '%D' til at have statisk kædning"
+
+#~ msgid "cannot declare static function inside another function"
+#~ msgstr "kan ikke erklære en funktion for static inden i en anden funktion"
+
+#~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member"
+#~ msgstr "'static' må ikke bruges ved definering (i modsætning til erklæring) af et statisk datamedlem"
+
+#~ msgid "static member `%D' declared `register'"
+#~ msgstr "statisk medlem '%D' erklæret 'register'"
+
+#~ msgid "cannot explicitly declare member `%#D' to have extern linkage"
+#~ msgstr "kan ikke eksplicit erklære medlemmet '%#D' til at have extern-kædning"
+
+#~ msgid "default argument for `%#D' has type `%T'"
+#~ msgstr "standardparameter for '%#D' har typen '%T'"
+
+#~ msgid "default argument for parameter of type `%T' has type `%T'"
+#~ msgstr "standardparameter for parameter af typen '%T' har typen '%T'"
+
+#~ msgid "default argument `%E' uses local variable `%D'"
+#~ msgstr "standardparameter '%E' bruger lokal variabel '%D'"
+
+#~ msgid "invalid string constant `%E'"
+#~ msgstr "ugyldig strengkonstant '%E'"
+
+#~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?"
+#~ msgstr "ugyldig heltalskonstant i parameterlisten, måske mangler parameternavnet?"
+
+#~ msgid "parameter `%D' invalidly declared method type"
+#~ msgstr "parameteren '%D' er på ugyldig vis erklæret som af en medlemsfunktionstype"
+
+#~ msgid "parameter `%D' invalidly declared offset type"
+#~ msgstr "parameteren '%D' er på ugyldig vis erklæret som af en offset-type"
+
+#~ msgid "parameter `%D' includes %s to array of unknown bound `%T'"
+#~ msgstr "parameteren '%D' inkluderer %s til tabel med ukendt grænse '%T'"
+
+#~ msgid "invalid constructor; you probably meant `%T (const %T&)'"
+#~ msgstr "ugyldig konstruktionsfunktion; du mente sandsynligvis '%T (const %T&)'"
+
+#~ msgid "`%D' must be a nonstatic member function"
+#~ msgstr "'%D' skal være en ikke-statisk medlemsfunktion"
+
+#~ msgid "`%D' must be either a non-static member function or a non-member function"
+#~ msgstr "'%D' skal enten være en ikke-statisk medlemsfunktion eller ikke en medlemsfunktion"
+
+#~ msgid "`%D' must have an argument of class or enumerated type"
+#~ msgstr "'%D' skal have en parameter af en klasse- eller enum-type"
+
+#~ msgid "conversion to %s%s will never use a type conversion operator"
+#~ msgstr "konvertering til %s%s vil aldrig bruge en typekonverteringsoperator"
+
+#~ msgid "ISO C++ prohibits overloading operator ?:"
+#~ msgstr "ISO C++ forbyder flertydiggørelse af operatoren ?:"
+
+#~ msgid "postfix `%D' must take `int' as its argument"
+#~ msgstr "postfiks '%D' skal tage mod 'int' som parameter"
+
+#~ msgid "postfix `%D' must take `int' as its second argument"
+#~ msgstr "postfiks '%D' skal tage mod 'int' som den anden parameter"
+
+#~ msgid "`%D' must take either zero or one argument"
+#~ msgstr "'%D' skal tage mod nul eller én parameter"
+
+#~ msgid "`%D' must take either one or two arguments"
+#~ msgstr "'%D' skal tage mod én eller to parametre"
+
+#~ msgid "prefix `%D' should return `%T'"
+#~ msgstr "præfiks '%D' skal returnere '%T'"
+
+#~ msgid "postfix `%D' should return `%T'"
+#~ msgstr "postfiks '%D' skal returnere '%T'"
+
+#~ msgid "`%D' must take `void'"
+#~ msgstr "'%D' skal tage mod 'void'"
+
+#~ msgid "`%D' must take exactly one argument"
+#~ msgstr "'%s' skal tage mod én parameter"
+
+#~ msgid "`%D' must take exactly two arguments"
+#~ msgstr "'%s' skal tage mod to parametre"
+
+#~ msgid "user-defined `%D' always evaluates both arguments"
+#~ msgstr "brugerdefineret '%D' evaluerer altid begge parametre"
+
+#~ msgid "`%D' should return by value"
+#~ msgstr "'%D' skal returnere pr. værdi (ikke reference)"
+
+#~ msgid "`%D' cannot have default arguments"
+#~ msgstr "'%D' kan ikke have standardparametre"
+
+#~ msgid "using typedef-name `%D' after `%s'"
+#~ msgstr "bruger typedef-navn '%D' efter '%s'"
+
+#~ msgid "using template type parameter `%T' after `%s'"
+#~ msgstr "bruger skabelonstypeparameter '%D' efter '%s'"
+
+#~ msgid "`%s %T' declares a new type at namespace scope"
+#~ msgstr "'%s %T' erklærer en ny type ved navnerumsvirkefelt"
+
+#~ msgid "  names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'"
+#~ msgstr "  navne fra afhængige stamklasser er ikke synlige for umodificerede navneopslag - benyt '%s %T::%T' for at referere til den nedarvede type"
+
+#~ msgid "use of enum `%#D' without previous declaration"
+#~ msgstr "brug af enum '%#D' uden tidligere erklæring"
+
+#~ msgid "derived union `%T' invalid"
+#~ msgstr "nedarvet union '%T' ugyldig"
+
+#~ msgid "base type `%T' fails to be a struct or class type"
+#~ msgstr "stamklassetype '%T' er hverken en struct- eller class-type"
+
+#~ msgid "base class `%T' has incomplete type"
+#~ msgstr "stamklasse '%T' er af en ufuldstændig type"
+
+#~ msgid "recursive type `%T' undefined"
+#~ msgstr "rekursiv type '%T' ikke defineret"
+
+#~ msgid "duplicate base type `%T' invalid"
+#~ msgstr "stamklassetype '%T' optræder mere end én gang"
+
+#~ msgid "multiple definition of `%#T'"
+#~ msgstr "flere definitioner af '%#T'"
+
+#~ msgid "previous definition here"
+#~ msgstr "tidligere definition her"
+
+#~ msgid "enumerator value for `%D' not integer constant"
+#~ msgstr "enum-værdi for '%D' er ikke en heltalskonstant"
+
+#~ msgid "overflow in enumeration values at `%D'"
+#~ msgstr "enum-værdier for store ved '%D'"
+
+#~ msgid "return type `%#T' is incomplete"
+#~ msgstr "returtype '%#T' er ufuldstændig"
+
+#~ msgid "semicolon missing after declaration of `%#T'"
+#~ msgstr "semikolon mangler efter erklæring af '%#T'"
+
+#~ msgid "return type for `main' changed to `int'"
+#~ msgstr "returtype for 'main' ændret til 'int'"
+
+#~ msgid "`%D' implicitly declared before its definition"
+#~ msgstr "'%s' er underforstået erklæret efter dens definition"
+
+#~ msgid "`operator=' should return a reference to `*this'"
+#~ msgstr "'operator=' bør returnere en reference til '*this'"
+
+#~ msgid "parameter `%D' declared void"
+#~ msgstr "parameteren '%D' erklæret void"
+
+#~ msgid "`%D' is already defined in class `%T'"
+#~ msgstr "'%D' er allerede defineret i klassen '%T'"
+
+#~ msgid "static member function `%#D' declared with type qualifiers"
+#~ msgstr "statisk medlemsfunktion '%#D' erklæret med typemodifikationer"
+
+#~ msgid "duplicate type qualifiers in %s declaration"
+#~ msgstr "dobbelte typemodifikationer i %s-erklæring"
+
+#~ msgid "template `%#D' instantiated in file without #pragma interface"
+#~ msgstr "skabelon '%#D' instantieret i fil uden #pragma interface"
+
+#~ msgid "template `%#D' defined in file without #pragma interface"
+#~ msgstr "skabelon '%#D' defineret i fil uden #pragma interface"
+
+#~ msgid "name missing for member function"
+#~ msgstr "navn mangler for medlemsfunktion"
+
+#~ msgid "parser may be lost: is there a '{' missing somewhere?"
+#~ msgstr "fortolkeren kan være faret vild: mangler der en '{' et eller andet sted?"
+
+#~ msgid "ambiguous conversion for array subscript"
+#~ msgstr "tvetydig konvertering af tabelindeks"
+
+#~ msgid "invalid types `%T[%T]' for array subscript"
+#~ msgstr "ugyldige typer '%T[%T]' for tabelopslag"
+
+#~ msgid "type `%#T' argument given to `delete', expected pointer"
+#~ msgstr "parameter af typen '%#T' givet til 'delete', forventede henvisning"
+
+#~ msgid "anachronistic use of array size in vector delete"
+#~ msgstr "forældet brug af tabelstørrelse i tabelformen af delete"
+
+#~ msgid "cannot delete a function.  Only pointer-to-objects are valid arguments to `delete'"
+#~ msgstr "kan ikke udføre delete på en funktion; kun henvisninger til objekter er gyldige som parameter til 'delete'"
+
+#~ msgid "deleting `%T' is undefined"
+#~ msgstr "benyttelse af delete på '%T' er ikke defineret"
+
+#~ msgid "deleting array `%#D'"
+#~ msgstr "benyttelse af delete på tabellen '%#D'"
+
+#~ msgid "invalid declaration of member template `%#D' in local class"
+#~ msgstr "ugyldig erklæring af medlemsskabelon '%#D' i lokal klasse"
+
+#~ msgid "invalid use of `virtual' in template declaration of `%#D'"
+#~ msgstr "ugyldig brug af 'virtual' i skabelonserklæring af '%#D'"
+
+#~ msgid "template declaration of `%#D'"
+#~ msgstr "skabelonserklæring af '%#D'"
+
+#~ msgid "Java method '%D' has non-Java return type `%T'"
+#~ msgstr "Java-metoden '%D' har har en returtype '%T' som ikke er fra Java"
+
+#~ msgid "Java method '%D' has non-Java parameter type `%T'"
+#~ msgstr "Java-metoden '%D' har har en parametertype '%T' som ikke er fra Java"
+
+#~ msgid "prototype for `%#D' does not match any in class `%T'"
+#~ msgstr "prototypen for '%#D' passer ikke nogen i klassen '%T'"
+
+#~ msgid "local class `%#T' shall not have static data member `%#D'"
+#~ msgstr "lokal klasse '%#T' må ikke have det statiske datamedlem '%#D'"
+
+#~ msgid "initializer invalid for static member with constructor"
+#~ msgstr "tildeling af startværdi er ugyldig for statisk medlem med konstruktionsfunktion"
+
+#~ msgid "(an out of class initialization is required)"
+#~ msgstr "(en klargøring uden for klassens erklæring er nødvendig)"
+
+#~ msgid "invalid data member initialization"
+#~ msgstr "ugyldig tildeling af startværdi til datamedlem"
+
+#~ msgid "(use `=' to initialize static data members)"
+#~ msgstr "(brug '=' for at klargøre statiske datamedlemmer)"
+
+#~ msgid "member `%D' conflicts with virtual function table field name"
+#~ msgstr "medlemmet '%D' er i konflikt med feltnavn fra den virtuelle funktionstabel"
+
+#~ msgid "`%D' is already defined in `%T'"
+#~ msgstr "'%D' er allerede defineret i '%T'"
+
+#~ msgid "field initializer is not constant"
+#~ msgstr "feltets startværdi er ikke en konstant"
+
+#~ msgid "`asm' specifiers are not permitted on non-static data members"
+#~ msgstr "'asm'-angivelser er ikke tilladt på ikke-statiske datamedlemmer"
+
+#~ msgid "cannot declare `%D' to be a bit-field type"
+#~ msgstr "kan ikke erklære '%D' til at være en bitfeltstype"
+
+#~ msgid "cannot declare bit-field `%D' with function type"
+#~ msgstr "kan ikke erklære bitfelt '%D' med funktionstype"
+
+#~ msgid "`%D' is already defined in the class %T"
+#~ msgstr "'%D' er allerede defineret i klassen '%T'"
+
+#~ msgid "static member `%D' cannot be a bit-field"
+#~ msgstr "statisk medlem '%D' kan ikke være et bitfelt"
+
+#~ msgid "initializer specified for non-member function `%D'"
+#~ msgstr "startværdi angivet for ikke-medlemsfunktion '%D'"
+
+#~ msgid "invalid initializer for virtual method `%D'"
+#~ msgstr "ugyldig startværdi til virtuel medlemsfunktion '%D'"
+
+#~ msgid "anonymous struct not inside named type"
+#~ msgstr "anonym struct er ikke inden i en navngiven type"
+
+#~ msgid "namespace-scope anonymous aggregates must be static"
+#~ msgstr "anonyme variabler af sammensatte typer i navnerumsvirkefelt skal erklæres static"
+
+#~ msgid "anonymous aggregate with no members"
+#~ msgstr "anonym sammensat type uden medlemmer"
+
+#~ msgid "`operator new' must return type `%T'"
+#~ msgstr "'operator new' skal returnere typen '%T'"
+
+#~ msgid "`operator new' takes type `size_t' (`%T') as first parameter"
+#~ msgstr "den første parameter til 'operator new' skal være af typen 'size_t' ('%T')"
+
+#~ msgid "`operator delete' must return type `%T'"
+#~ msgstr "'operator delete' skal returnere typen '%T'"
+
+#~ msgid "`operator delete' takes type `%T' as first parameter"
+#~ msgstr "den første parameter til 'operator delete' skal være af typen '%T'"
+
+#~ msgid "too many initialization functions required"
+#~ msgstr "for mange klargøringsfunktioner påkrævet"
+
+#~ msgid "inline function `%D' used but never defined"
+#~ msgstr "indbygget funktion '%D' benyttet, men aldrig defineret"
+
+#~ msgid "use of old-style cast"
+#~ msgstr "brug af ældre type typeomtvingning"
+
+#~ msgid "use of `%D' is ambiguous"
+#~ msgstr "brug af '%D' er tvetydigt"
+
+#~ msgid "  first declared as `%#D' here"
+#~ msgstr "  først erklæret som '%#D' her"
+
+#~ msgid "  also declared as `%#D' here"
+#~ msgstr "  også erklæret som '%#D' her"
+
+#~ msgid "`%D' denotes an ambiguous type"
+#~ msgstr "'%D' angiver en tvetydig type"
+
+#~ msgid "  first type here"
+#~ msgstr "  første type her"
+
+#~ msgid "  other type here"
+#~ msgstr "  anden type her"
+
+#~ msgid "declaration of `%D' not in a namespace surrounding `%D'"
+#~ msgstr "erklæring af '%D' er ikke i et navnerum der omgiver '%D'"
+
+#~ msgid "`%D' should have been declared inside `%D'"
+#~ msgstr "'%D' skulle have været erklæret inden i '%D'"
+
+#~ msgid "`%D' is not a function,"
+#~ msgstr "'%s' er ikke en funktion,"
+
+#~ msgid "  conflict with `%D'"
+#~ msgstr "  konflikt med '%D'"
+
+#~ msgid "unknown namespace `%D'"
+#~ msgstr "ukendt navnerum '%D'"
+
+#~ msgid "`%T' is not a namespace"
+#~ msgstr "'%T' er ikke et navnerum"
+
+#~ msgid "`%D' is not a namespace"
+#~ msgstr "'%D' er ikke et navnerum"
+
+#~ msgid "a using-declaration cannot specify a template-id.  Try `using %D'"
+#~ msgstr "en using-erklæring kan ikke angive en skabelons-id; prøv 'using %D'"
+
+#~ msgid "namespace `%D' not allowed in using-declaration"
+#~ msgstr "navnerum '%D' ikke tilladt i using-erklæring"
+
+#~ msgid "`%D' not declared"
+#~ msgstr "'%D' ikke erklæret"
+
+#~ msgid "`%D' is already declared in this scope"
+#~ msgstr "'%D' er allerede erklæret i dette navnerum"
+
+#~ msgid "using declaration `%D' introduced ambiguous type `%T'"
+#~ msgstr "using-erklæring '%D' introducerede tvetydig type '%T'"
+
+#~ msgid "using-declaration for non-member at class scope"
+#~ msgstr "using-erklæring for ikke-medlem ved klassevirkefelt"
+
+#~ msgid "using-declaration for destructor"
+#~ msgstr "using-erklæring for destruktionsfunktion"
+
+#~ msgid "a using-declaration cannot specify a template-id.  Try  `using %T::%D'"
+#~ msgstr "en using-erklæring kan ikke angive en skabelons-id; prøv 'using %T::%D'"
+
+#~ msgid "namespace `%T' undeclared"
+#~ msgstr "navnerummet '%T' er ikke erklæret"
+
+#~ msgid "default argument missing for parameter %P of `%+#D'"
+#~ msgstr "standardparameter mangler for parameter %P  i '%+#D'"
+
+#~ msgid "extra qualification `%T::' on member `%D' ignored"
+#~ msgstr "ekstra modifikation '%T::' af medlemmet '%D' ignoreret"
+
+#~ msgid "`%T' does not have a class or union named `%D'"
+#~ msgstr "'%T' har ikke en klasse eller en union ved navn '%D'"
+
+#~ msgid "`%T' is not a class or union type"
+#~ msgstr "'%T' er ikke af en klasse- eller union-type"
+
+#~ msgid "template argument is required for `%T'"
+#~ msgstr "skabelonsparameter er påkrævet for '%T'"
+
+#~ msgid "declaration of `%D' in `%D' which does not enclose `%D'"
+#~ msgstr "erklæring af '%D' i '%D' som ikke omgiver '%D'"
+
+#~ msgid "`%s' not supported by %s"
+#~ msgstr "'%s' ikke understøttet af %s"
+
+#~ msgid "<anonymous %s>"
+#~ msgstr "<anonym %s>"
+
+#~ msgid "(static %s for %s)"
+#~ msgstr "(statisk %s for %s)"
+
+#~ msgid "\\x%x"
+#~ msgstr "\\x%x"
+
+#~ msgid "In %s `%s':"
+#~ msgstr "I %s '%s':"
+
+#~ msgid "%s: In instantiation of `%s':\n"
+#~ msgstr "%s: i instantiering af '%s':\n"
+
+#~ msgid "%s:%d:   instantiated from `%s'\n"
+#~ msgstr "%s:%d:   instantieret fra '%s'\n"
+
+#~ msgid "%s:%d:   instantiated from here\n"
+#~ msgstr "%s:%d:   instantieret herfra\n"
+
+#~ msgid "unexpected letter `%c' in locate_error\n"
+#~ msgstr "uventet bogstav '%c' i locate_error\n"
+
+#~ msgid "type `%T' is disallowed in Java `throw' or `catch'"
+#~ msgstr "typen '%T' er ikke tilladt i Java 'throw' eller 'catch'"
+
+#~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined"
+#~ msgstr "kald til Java 'catch' eller 'throw' mens 'jthrowable' ikke er defineret"
+
+#~ msgid "type `%T' is not derived from `java::lang::Throwable'"
+#~ msgstr "typen '%T' nedarver ikke fra 'java::lang::Throwable'"
+
+#~ msgid "mixing C++ and Java catches in a single translation unit"
+#~ msgstr "blander C++ og Java 'catch' i én oversættelsesenhed"
+
+#~ msgid "throwing NULL, which has integral, not pointer type"
+#~ msgstr "kaster NULL som har en heltals-, ikke en henvisningstype"
+
+#~ msgid "  in thrown expression"
+#~ msgstr "  i kastet udtryk"
+
+#~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression"
+#~ msgstr "udtrykket '%E' med den abstrakte klassetype '%T' kan ikke bruges i throw-udtryk"
+
+#~ msgid "exception of type `%T' will be caught"
+#~ msgstr "undtagelse af typen '%T' vil blive fanget"
+
+#~ msgid "   by earlier handler for `%T'"
+#~ msgstr "  af tidligere håndtering af '%T'"
+
+#~ msgid "`...' handler must be the last handler for its try block"
+#~ msgstr "håndteringen '...' skal være den sidste håndtering i try-blokken"
+
+#~ msgid "`%D' is already a friend of class `%T'"
+#~ msgstr "'%D' er allerede en ven af klassen '%T'"
+
+#~ msgid "previous friend declaration of `%D'"
+#~ msgstr "tidligere friend-erklæring af '%D'"
+
+#~ msgid "invalid type `%T' declared `friend'"
+#~ msgstr "ugyldig type '%T' erklæret 'friend'"
+
+#~ msgid "partial specialization `%T' declared `friend'"
+#~ msgstr "partiel specialisering '%T' erklæret 'friend'"
+
+#~ msgid "class `%T' is implicitly friends with itself"
+#~ msgstr "klassen '%T' er underforstået ven med sig selv"
+
+#~ msgid "typename type `%#T' declared `friend'"
+#~ msgstr "typename-type '%#T' erklæret 'friend'"
+
+#~ msgid "template parameter type `%T' declared `friend'"
+#~ msgstr "skabelonsparametertypen '%T' erklæret 'friend'"
+
+#~ msgid "`%#T' is not a template"
+#~ msgstr "'%#T' er ikke en skabelon"
+
+#~ msgid "`%T' is already a friend of `%T'"
+#~ msgstr "'%T' er allerede en ven af '%T'"
+
+#~ msgid "member `%D' declared as friend before type `%T' defined"
+#~ msgstr "medlemmet '%D' erklæret som friend før typen '%T' er defineret"
+
+#~ msgid "friend declaration `%#D' declares a non-template function"
+#~ msgstr "friend-erklæring '%#D' erklærer en ikke-skabelonsfunktion"
+
+#~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning"
+#~ msgstr "(hvis dette er hvad du ønsker, så sikr dig at funktionsskabelonen allerede er blevet erklæret og tilføj <> efter funktionsnavnet her) -Wno-non-template-friend deaktiverer denne advarsel"
+
+#~ msgid "argument to `%s' missing\n"
+#~ msgstr "en parameter til '%s' mangler\n"
+
+#~ msgid "`%D' should be initialized in the member initialization list"
+#~ msgstr "'%D' bør blive klargjort i medlemsklargøringslisten"
+
+#~ msgid "default-initialization of `%#D', which has reference type"
+#~ msgstr "standardklargøring af '%#D' som er af en referencetype"
+
+#~ msgid "uninitialized reference member `%D'"
+#~ msgstr "referencemedlem '%D' uden startværdi"
+
+#~ msgid "initializer list treated as compound expression"
+#~ msgstr "klargøringsliste behandlet som et sammensat udtryk"
+
+#~ msgid "`%D' will be initialized after"
+#~ msgstr "'%D' vil blive klargjort efter"
+
+#~ msgid "base `%T' will be initialized after"
+#~ msgstr "stamklasse '%T' vil blive klargjort efter"
+
+#~ msgid "  `%#D'"
+#~ msgstr "  '%#D'"
+
+#~ msgid "  base `%T'"
+#~ msgstr "  stamklasse '%T'"
+
+#~ msgid "multiple initializations given for base `%T'"
+#~ msgstr "flere startværdier angivet for stamklassen '%T'"
+
+#~ msgid "initializations for multiple members of `%T'"
+#~ msgstr "startværdier for flere medlemmer af '%T'"
+
+#~ msgid "base class `%#T' should be explicitly initialized in the copy constructor"
+#~ msgstr "stamklassen '%#T' bør eksplicit blive klargjort i kopikonstruktionsfunktionen"
+
+#~ msgid "class `%T' does not have any field named `%D'"
+#~ msgstr "klassen '%T' har ikke et felt ved navn '%D'"
+
+#~ msgid "field `%#D' is static; the only point of initialization is its definition"
+#~ msgstr "feltet '%#D' er statisk; det eneste sted det kan klargøres er ved dets definition"
+
+#~ msgid "unnamed initializer for `%T', which has no base classes"
+#~ msgstr "unavngiven klargøring af '%T' som ikke har nogen stamklasser"
+
+#~ msgid "unnamed initializer for `%T', which uses multiple inheritance"
+#~ msgstr "unavngiven klargøring af '%T' som benytter multipel nedarvning"
+
+#~ msgid "type `%D' is not a direct or virtual base of `%T'"
+#~ msgstr "typen '%D' er ikke en direkte eller en virtuel stamklasse til '%T'"
+
+#~ msgid "type `%D' is not a direct base of `%T'"
+#~ msgstr "typen '%D' er ikke en direkte stamklasse til '%T'"
+
+#~ msgid "bad array initializer"
+#~ msgstr "ugyldig tildeling af startværdi til tabel"
+
+#~ msgid "`%T' is not an aggregate type"
+#~ msgstr "'%T' er ikke en sammensat type"
+
+#~ msgid "`%T' fails to be an aggregate typedef"
+#~ msgstr "'%T' er ikke en sammensat typedef"
+
+#~ msgid "type `%T' is of non-aggregate type"
+#~ msgstr "typen '%T' er ikke en sammensat type"
+
+#~ msgid "cannot call destructor `%T::~%T' without object"
+#~ msgstr "kan ikke kalde destruktionsfunktion '%T::~%T' uden objekt"
+
+#~ msgid "invalid use of non-static field `%D'"
+#~ msgstr "ugyldig brug af ikke-statisk felt '%D'"
+
+#~ msgid "invalid use of member `%D'"
+#~ msgstr "ugyldig brug af medlemmet '%D'"
+
+#~ msgid "no method `%T::%D'"
+#~ msgstr "ingen metode ved navn '%T::%D'"
+
+#~ msgid "incomplete type `%T' does not have member `%D'"
+#~ msgstr "ufuldstændig type '%T' har ikke medlemmet '%D'"
+
+#~ msgid "`%D' is not a member of type `%T'"
+#~ msgstr "'%D' er ikke et medlem af typen '%T'"
+
+#~ msgid "invalid pointer to bit-field `%D'"
+#~ msgstr "ugyldig henvisning til bitfeltet '%D'"
+
+#~ msgid "object missing in use of pointer-to-member construct"
+#~ msgstr "der mangler et objekt i henvisning til medlem-konstruktion"
+
+#~ msgid "member `%D' is non-static but referenced as a static member"
+#~ msgstr "medlemmet '%D' er ikke statisk, men refereres som et statisk medlem"
+
+#~ msgid "at this point in file"
+#~ msgstr "ved dette sted i filen"
+
+#~ msgid "object missing in `%E'"
+#~ msgstr "objekt mangler i '%E'"
+
+#~ msgid "new of array type fails to specify size"
+#~ msgstr "new virkende på en tabeltype mangler at angive størrelsen"
+
+#~ msgid "size in array new must have integral type"
+#~ msgstr "størrelse i tabel-new skal være en heltalstype"
+
+#~ msgid "zero size array reserves no space"
+#~ msgstr "tabel med størrelsen nul reserverer ingen plads"
+
+#~ msgid "new cannot be applied to a reference type"
+#~ msgstr "new kan ikke bruges på en referencetype"
+
+#~ msgid "new cannot be applied to a function type"
+#~ msgstr "new kan ikke bruges på en funktionstype"
+
+#~ msgid "call to Java constructor, while `jclass' undefined"
+#~ msgstr "kald af Java-konstruktionsfunktion mens 'jclass' ikke er defineret"
+
+#~ msgid "can't find class$"
+#~ msgstr "kan ikke finde class$"
+
+#~ msgid "invalid type `void' for new"
+#~ msgstr "ugyldig type 'void' til new"
+
+#~ msgid "call to Java constructor with `%s' undefined"
+#~ msgstr "kald af Java-konstruktionsfunktion mens '%s' ikke er defineret"
+
+#~ msgid "ISO C++ forbids initialization in array new"
+#~ msgstr "ISO C++ forbyder startværdier i tabel-new"
+
+#~ msgid "initializer list being treated as compound expression"
+#~ msgstr "klargøringsliste bliver behandlet som et sammensat udtryk"
+
+#~ msgid "ISO C++ forbids aggregate initializer to new"
+#~ msgstr "ISO C++ forbyder sammensat startværditildeling ved new"
+
+#~ msgid "uninitialized const in `new' of `%#T'"
+#~ msgstr "konstant uden startværdi i 'new' af '%#T'"
+
+#~ msgid "initializer ends prematurely"
+#~ msgstr "startværdien slutter for tidligt"
+
+#~ msgid "cannot initialize multi-dimensional array with initializer"
+#~ msgstr "kan ikke klargøre multidimensional tabel med startværdi"
+
+#~ msgid "unknown array size in delete"
+#~ msgstr "ukendt tabelstørrelse i delete"
+
+#~ msgid "type to vector delete is neither pointer or array type"
+#~ msgstr "variablen til tabel-delete er hverken af en henvisnings- eller en tabeltype"
+
+#~ msgid "type name expected before `*'"
+#~ msgstr "der forventedes et typenavn før '*'"
+
+#~ msgid "cannot declare references to references"
+#~ msgstr "kan ikke erklære referencer til referencer"
+
+#~ msgid "cannot declare pointers to references"
+#~ msgstr "kan ikke erklære henvisninger til referencer"
+
+#~ msgid "type name expected before `&'"
+#~ msgstr "der forventedes et typenavn før '&'"
+
+#~ msgid "semicolon missing after %s declaration"
+#~ msgstr "semikolon mangler efter %s-erklæring"
+
+#~ msgid "semicolon missing after declaration of `%T'"
+#~ msgstr "semikolon mangler efter erklæring af '%T'"
+
+#~ msgid "junk at end of #pragma %s"
+#~ msgstr "ragelse i slutningen 'af #pragma %s'"
+
+#~ msgid "invalid #pragma %s"
+#~ msgstr "ugyldig #pragma %s"
+
+#~ msgid "#pragma vtable no longer supported"
+#~ msgstr "'#pragma vtable' understøttes ikke længere"
+
+#~ msgid "#pragma implementation for %s appears after file is included"
+#~ msgstr "'#pragma implementation' til %s optræder efter filen er inkluderet"
+
+#~ msgid "junk at end of #pragma GCC java_exceptions"
+#~ msgstr "ragelse i slutningen af #pragma GCC java_exceptions"
+
+#~ msgid "`%D' not defined"
+#~ msgstr "'%D' er ikke defineret"
+
+#~ msgid "`%D' was not declared in this scope"
+#~ msgstr "'%D' blev ikke erklæret i dette virkefelt"
+
+#~ msgid "`%D' undeclared (first use this function)"
+#~ msgstr "'%D' er ikke erklæret (først benyttet i denne funktion)"
+
+# dækkende, og pænere end original i praktisk brug
+#~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)"
+#~ msgstr "(et kaldenavn der ikke er erklæret, rapporteres kun én gang per funktion)"
+
+#~ msgid "`::%D' undeclared (first use here)"
+#~ msgstr "'::%D' er ikke erklæret (først benyttet her)"
+
+#~ msgid "real-valued template parameters when cross-compiling"
+#~ msgstr "skabelonsparametre med reelle værdi ved krydsoversættelse"
+
+#~ msgid "the mangled name of `%D' will change in a future version of GCC"
+#~ msgstr "det ABI-navnet for '%D' vil ændre sig i en fremtidig version af GCC"
+
+#~ msgid "due to a defect in the G++ 3.2 ABI, G++ has assigned the same mangled name to two different types"
+#~ msgstr "pga. en fejl i G++ 3.2-ABI'en har G++ tildelt det samme sammensatte navn til det to forskellige typer"
+
+#~ msgid "invalid use of member `%D' in static member function"
+#~ msgstr "ugyldig brug af medlemmet '%D' i statisk medlemsfunktion"
+
+#~ msgid "use of namespace `%D' as expression"
+#~ msgstr "brug af navnerummet '%D' som udtryk"
+
+#~ msgid "use of class template `%T' as expression"
+#~ msgstr "brug af klasseskabelonen '%T' som udtryk"
+
+#~ msgid "use of %s from containing function"
+#~ msgstr "brug af %s fra indeholdende funktion"
+
+#~ msgid "  `%#D' declared here"
+#~ msgstr "  '%#D' erklæret her"
+
+#~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice"
+#~ msgstr "forespørgsel efter medlemmet '%D' er tvetydigt i det multiple nedarvningsnet"
+
+#~ msgid "generic thunk code fails for method `%#D' which uses `...'"
+#~ msgstr "generel thunk-kode mislykkes for metoden '%#D' som bruger '...'"
+
+#~ msgid "non-static const member `%#D', can't use default assignment operator"
+#~ msgstr "ikke-statisk konstant medlem '%#D' kan ikke bruge standardtildelingsoperatoren"
+
+#~ msgid "non-static reference member `%#D', can't use default assignment operator"
+#~ msgstr "ikke-statisk referencemedlem '%#D' kan ikke bruge standardtildelingsoperatoren"
+
+#~ msgid "`%s' tag used in naming `%#T'"
+#~ msgstr "'%s'-mærke benyttet i navngivning af '%#T'"
+
+#~ msgid "keyword `export' not implemented, and will be ignored"
+#~ msgstr "det reserverede ord 'export' er ikke implementeret og vil blive ignoreret"
+
+#~ msgid "use of linkage spec `%D' is different from previous spec `%D'"
+#~ msgstr "brug af kædningsangivelse '%D' er forskellig fra den tidligere angivelse '%D'"
+
+#~ msgid "no base or member initializers given following ':'"
+#~ msgstr "ingen stamklasse- eller medlemsklargøringer er angivet efter ':'"
+
+#~ msgid "anachronistic old style base class initializer"
+#~ msgstr "forældet stamklasseklargøring"
+
+#~ msgid "`>>' should be `> >' in template class name"
+#~ msgstr "'>>' skulle have været '> >' i skabelonsklassenavn"
+
+#~ msgid "use of template qualifier outside template"
+#~ msgstr "brug af skabelonsmodifikation uden for skabelon"
+
+#~ msgid "ISO C++ forbids an empty condition for `%s'"
+#~ msgstr "ISO C++ forbyder en tom betingelse til '%s'"
+
+#~ msgid "definition of class `%T' in condition"
+#~ msgstr "definition af klassen '%T' i betingelse"
+
+#~ msgid "definition of enum `%T' in condition"
+#~ msgstr "definition af enum '%T' i betingelse"
+
+#~ msgid "definition of array `%#D' in condition"
+#~ msgstr "definition af tabel '%#D' i betingelse"
+
+#~ msgid "old style placement syntax, use () instead"
+#~ msgstr "forældet placeringssyntaks, brug () i stedet"
+
+#~ msgid "`%T' is not a valid expression"
+#~ msgstr "'%T' er ikke et gyldigt udtryk"
+
+#~ msgid "initialization of new expression with `='"
+#~ msgstr "tildeling af startværdi til new-udtryk med '='"
+
+#~ msgid "ISO C++ forbids compound literals"
+#~ msgstr "ISO C++ forbyder sammensatte konstanter"
+
+#~ msgid "ISO C++ forbids braced-groups within expressions"
+#~ msgstr "ISO C++ forbyder krøllet parantes-grupper inden i udtryk"
+
+#~ msgid "sigof type specifier"
+#~ msgstr "sigof-typeangivelse"
+
+#~ msgid "`sigof' applied to non-aggregate expression"
+#~ msgstr "'sigof' benyttet på et udtryk der ikke er af en sammensat type"
+
+#~ msgid "`sigof' applied to non-aggregate type"
+#~ msgstr "'sigof' benyttet på en type der ikke er sammensat"
+
+#~ msgid "using `typename' outside of template"
+#~ msgstr "bruger 'typename' uden for en skabelon"
+
+#~ msgid "storage class specifier `%s' not allowed after struct or class"
+#~ msgstr "lagringsklasseangivelsen '%s' er ikke tilladt efter struct eller class"
+
+#~ msgid "type specifier `%s' not allowed after struct or class"
+#~ msgstr "typeangivelsen '%s' er ikke tilladt efter struct eller class"
+
+#~ msgid "type qualifier `%s' not allowed after struct or class"
+#~ msgstr "typemodifikationen '%s' er ikke tilladt efter struct eller class"
+
+#~ msgid "no body nor ';' separates two class, struct or union declarations"
+#~ msgstr "der er hverken en krop eller et semikolon mellem to class, struct eller union-erklæringer"
+
+#~ msgid "no bases given following `:'"
+#~ msgstr "ingen stamklasse er angivet efter ':'"
+
+#~ msgid "`%D' access"
+#~ msgstr "'%D'-tilgang"
+
+#~ msgid "multiple access specifiers"
+#~ msgstr "mere end én tilgangsangivelse"
+
+#~ msgid "multiple `virtual' specifiers"
+#~ msgstr "mere end én 'virtual'-angivelse"
+
+#~ msgid "missing ';' before right brace"
+#~ msgstr "der mangler et semikolon før en højre krøllet parantes"
+
+#~ msgid "ISO C++ forbids array dimensions with parenthesized type in new"
+#~ msgstr "ISO C++ forbyder tabeldimensioner med parantetiseret type i new"
+
+#~ msgid "`%T' is not a class or namespace"
+#~ msgstr "'%T' er ikke en klasse eller et navnerum"
+
+#~ msgid "ISO C++ forbids label declarations"
+#~ msgstr "ISO C++ forbyder etiketerklæringer"
+
+#~ msgid "ISO C++ forbids computed gotos"
+#~ msgstr "ISO C++ forbyder beregnede goto'er"
+
+#~ msgid "label must be followed by statement"
+#~ msgstr "etiketten skal efterfølges af en sætning"
+
+#~ msgid "must have at least one catch per try block"
+#~ msgstr "skal have mindst én catch pr. try-blok"
+
+#~ msgid "ISO C++ forbids compound statements inside for initializations"
+#~ msgstr "ISO C++ forbyder sammensatte sætninger inden i 'for'-klargøringer"
+
+#~ msgid "possibly missing ')'"
+#~ msgstr "muligvis mangler en ')'"
+
+#~ msgid "type specifier omitted for parameter"
+#~ msgstr "typeangivelsen er ikke angivet for parameteren"
+
+#~ msgid "`%E' is not a type, use `typename %E' to make it one"
+#~ msgstr "'%E' er ikke en type, benyt 'typename %E' for at gøre den til en"
+
+#~ msgid "no type `%D' in `%T'"
+#~ msgstr "ingen type '%D' i '%T'"
+
+#~ msgid "type specifier omitted for parameter `%E'"
+#~ msgstr "typeangivelse udeladt for parameteren '%E'"
+
+#~ msgid "'%D' is used as a type, but is not defined as a type."
+#~ msgstr "'%D' benyttes som en type, men er ikke defineret som en type"
+
+#~ msgid "data member `%D' cannot be a member template"
+#~ msgstr "datamedlem '%D' kan ikke være en medlemsskabelon"
+
+#~ msgid "invalid member template declaration `%D'"
+#~ msgstr "ugyldig medlemsskabelonerklæring '%D'"
+
+#~ msgid "explicit specialization in non-namespace scope `%D'"
+#~ msgstr "eksplicit specialisering i virkefeltet '%D' der ikke er et navnerum"
+
+#~ msgid "enclosing class templates are not explicitly specialized"
+#~ msgstr "omgivende klasseskabeloner er ikke eksplicit specialiserede"
+
+#~ msgid "specializing `%#T' in different namespace"
+#~ msgstr "specialiserer '%#T' i andet navnerum"
+
+# hænger sammen med foregående tekst, derfor ikke 'fra'
+#~ msgid "  from definition of `%#D'"
+#~ msgstr "  i forhold til definition af '%#D'"
+
+#~ msgid "specialization of `%T' after instantiation"
+#~ msgstr "specialisering af '%T' efter instantiering"
+
+#~ msgid "specialization `%T' after instantiation `%T'"
+#~ msgstr "specialisering af '%T' efter instantiering '%T'"
+
+#~ msgid "explicit specialization of non-template `%T'"
+#~ msgstr "eksplicit specialisering af '%T' der ikke er en skabelon"
+
+#~ msgid "specialization of %D after instantiation"
+#~ msgstr "specialisering af '%D' efter instantiering"
+
+#~ msgid "%s %+#D"
+#~ msgstr "%s %+#D"
+
+#~ msgid "`%D' is not a function template"
+#~ msgstr "'%D' er ikke en funktionsskabelon"
+
+#~ msgid "template-id `%D' for `%+D' does not match any template declaration"
+#~ msgstr "skabelons-id '%D' for '%+D' passer ikke til nogen skabelonserklæring"
+
+#~ msgid "ambiguous template specialization `%D' for `%+D'"
+#~ msgstr "tvetydig skabelonsspecialisering '%D' for '%+D'"
+
+#~ msgid "template-id `%D' in declaration of primary template"
+#~ msgstr "skabelons-id '%D' i erklæring af primær skabelon"
+
+#~ msgid "template parameter list used in explicit instantiation"
+#~ msgstr "skabelonsparameterliste benyttet i eksplicit instantiering"
+
+#~ msgid "definition provided for explicit instantiation"
+#~ msgstr "definition angivet for eksplicit instantiering"
+
+#~ msgid "too many template parameter lists in declaration of `%D'"
+#~ msgstr "for mange skabelonsparameterlister angivet i erklæring af '%D'"
+
+#~ msgid "too few template parameter lists in declaration of `%D'"
+#~ msgstr "for få skabelonsparameterlister angivet i erklæring af '%D'"
+
+#~ msgid "explicit specialization not preceded by `template <>'"
+#~ msgstr "eksplicit specialisering følger ikke efter 'template <>'"
+
+#~ msgid "partial specialization `%D' of function template"
+#~ msgstr "partiel specialisering '%D' af funktionsskabelon"
+
+#~ msgid "default argument specified in explicit specialization"
+#~ msgstr "standardparameter angivet i eksplicit specialisering"
+
+#~ msgid "template specialization with C linkage"
+#~ msgstr "skabelonsspecialisering med C-kædning"
+
+#~ msgid "specialization of implicitly-declared special member function"
+#~ msgstr "specialisering af underforstået erklæret speciel medlemsfunktion"
+
+#~ msgid "no member function `%D' declared in `%T'"
+#~ msgstr "ingen medlemsfunktion '%D' erklæret i '%T'"
+
+#~ msgid "too many template parameter lists in declaration of `%T'"
+#~ msgstr "for mange skabelonsparameterlister i erklæringen af '%T'"
+
+#~ msgid " shadows template parm `%#D'"
+#~ msgstr "  skygger for skabelonsparameter '%#D'"
+
+#~ msgid "template parameters not used in partial specialization:"
+#~ msgstr "skabelonsparametre der ikke bruges i partiel specialisering:"
+
+#~ msgid "        `%D'"
+#~ msgstr "        '%D'"
+
+#~ msgid "partial specialization `%T' does not specialize any template arguments"
+#~ msgstr "den partielle specialisering '%T' specialiserer ikke nogen skabelonsparametre"
+
+# flertalsform unødvendig
+#~ msgid "template argument `%E' involves template parameter(s)"
+#~ msgstr "skabelonsparameter '%E' involverer skabelonsparameter"
+
+# flertalsform unødvendig
+#~ msgid "type `%T' of template argument `%E' depends on template parameter(s)"
+#~ msgstr "typen '%T' af skabelonsparameteren '%E' afhænger af skabelonsparameter"
+
+#~ msgid "no default argument for `%D'"
+#~ msgstr "ingen standardparameter til '%D'"
+
+#~ msgid "template with C linkage"
+#~ msgstr "skabelon med C-kædning"
+
+#~ msgid "template class without a name"
+#~ msgstr "skabelonsklasse uden et navn"
+
+#~ msgid "`%D' does not declare a template type"
+#~ msgstr "'%D' erklærer ikke en skabelonstype"
+
+#~ msgid "template definition of non-template `%#D'"
+#~ msgstr "skabelonsdefinition af ikke-skabelon '%#D'"
+
+#~ msgid "expected %d levels of template parms for `%#D', got %d"
+#~ msgstr "forvented %d niveauer af skabelonsparametre for '%#D', modtog %d"
+
+#~ msgid "got %d template parameters for `%#D'"
+#~ msgstr "modtog %d skabelonsparametre for '%#D'"
+
+#~ msgid "got %d template parameters for `%#T'"
+#~ msgstr "modtog %d skabelonsparametre for '%#T'"
+
+#~ msgid "  but %d required"
+#~ msgstr "  men %d påkrævet"
+
+#~ msgid "`%T' is not a template type"
+#~ msgstr "'%T' er ikke en skabelonstype"
+
+# hænger sammen med næste tekst
+#~ msgid "previous declaration `%D'"
+#~ msgstr "tidligere erklæring '%D'"
+
+#~ msgid "used %d template parameter%s instead of %d"
+#~ msgstr "benyttede %d skabelonsparameter%s i stedet for %d"
+
+#~ msgid "template parameter `%#D'"
+#~ msgstr "skabelonsparameter '%#D'"
+
+#~ msgid "redeclared here as `%#D'"
+#~ msgstr "omerklæret her som '%#D'"
+
+#~ msgid "redefinition of default argument for `%#D'"
+#~ msgstr "omdefinering af standardparameter for '%#D'"
+
+#~ msgid "  original definition appeared here"
+#~ msgstr "  oprindelig definition er her"
+
+#~ msgid "`%E' is not a valid template argument"
+#~ msgstr "'%E' er ikke en gyldig skabelonsparameter"
+
+#~ msgid "it must be the address of a function with external linkage"
+#~ msgstr "den skal være adressen af en funktion med ekstern kædning"
+
+#~ msgid "it must be the address of an object with external linkage"
+#~ msgstr "den skal være adressen af et objekt med ekstern kædning"
+
+#~ msgid "it must be a pointer-to-member of the form `&X::Y'"
+#~ msgstr "den skal være en henvisning til medlem på formen '&X::Y'"
+
+#~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage"
+#~ msgstr "strengkonstanten %E er ikke en gyldig skabelonsparameter fordi den er adressen af et objekt med statisk kædning"
+
+#~ msgid "address of non-extern `%E' cannot be used as template argument"
+#~ msgstr "adresse på ikke-ekstern '%E' kan ikke bruges som skabelonsparameter"
+
+#~ msgid "non-constant `%E' cannot be used as template argument"
+#~ msgstr "ikke-konstant '%E' kan ikke bruges som skabelonsparameter"
+
+#~ msgid "object `%E' cannot be used as template argument"
+#~ msgstr "objektet '%E' kan ikke bruges som skabelonsparameter"
+
+#~ msgid "to refer to a type member of a template parameter, use `typename %E'"
+#~ msgstr "benyt 'typename %E' for at referere til et typemedlem af en skabelonsparameter"
+
+#~ msgid "type/value mismatch at argument %d in template parameter list for `%D'"
+#~ msgstr "type/værdi-konflikt ved %d. parameter i skabelonsparameterliste for '%D'"
+
+#~ msgid "  expected a constant of type `%T', got `%T'"
+#~ msgstr "  forventede en konstant af typen '%T', modtog '%T'"
+
+#~ msgid "  expected a type, got `%E'"
+#~ msgstr "  forventede en type, modtog '%E'"
+
+#~ msgid "  expected a type, got `%T'"
+#~ msgstr "  forventede en type, modtog '%T'"
+
+#~ msgid "  expected a class template, got `%T'"
+#~ msgstr "  forventede en klasseskabelon, modtog '%T'"
+
+#~ msgid "  expected a template of type `%D', got `%D'"
+#~ msgstr "  forventede en skabelon af typen '%D', modtog '%D'"
+
+#~ msgid "template-argument `%T' uses anonymous type"
+#~ msgstr "skabelonsparameter '%T' benytter anonym type"
+
+#~ msgid "template-argument `%T' uses local type `%T'"
+#~ msgstr "skabelonsparameter '%T' benytter lokal type '%T'"
+
+#~ msgid "template-argument `%T' is a variably modified type"
+#~ msgstr "skabelonsparameter '%T' er en variabelt ændret type"
+
+#~ msgid "could not convert template argument `%E' to `%T'"
+#~ msgstr "kunne ikke konvertere skabelonsparameteren '%E' til '%T'"
+
+#~ msgid "wrong number of template arguments (%d, should be %d)"
+#~ msgstr "forkert antal skabelonsparametre (%d, skulle være %d)"
+
+#~ msgid "provided for `%D'"
+#~ msgstr "angivet for '%D'"
+
+#~ msgid "template argument %d is invalid"
+#~ msgstr "skabelonsparameter %d er ugyldig"
+
+#~ msgid "non-template used as template"
+#~ msgstr "ikke-skabelon benyttet som skabelon"
+
+#~ msgid "`%T' is not a template"
+#~ msgstr "'%T' er ikke en skabelon"
+
+#~ msgid "non-template type `%T' used as a template"
+#~ msgstr "ikke-skabelonstype '%T' benyttet som skabelon"
+
+#~ msgid "for template declaration `%D'"
+#~ msgstr "til skabelonserklæring '%D'"
+
+#~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'"
+#~ msgstr "skabelonsinstantieringsdybden overskrider maksimum på %d (benyt -ftemplate-depth-NN for at forøge maksimum) ved instantiering af '%D'"
+
+#~ msgid "ambiguous class template instantiation for `%#T'"
+#~ msgstr "tvetydig klasseskabelonsinstantiering for '%#T'"
+
+#~ msgid "%s %+#T"
+#~ msgstr "%s %+#T"
+
+#~ msgid "instantiation of `%D' as type `%T'"
+#~ msgstr "instantiering af '%D' som typen '%T'"
+
+#~ msgid "invalid parameter type `%T'"
+#~ msgstr "ugyldig parametertype '%T'"
+
+#~ msgid "in declaration `%D'"
+#~ msgstr "i erklæringen '%D'"
+
+#~ msgid "creating pointer to member function of non-class type `%T'"
+#~ msgstr "opretter henvisning til medlemsfunktion af typen '%T' der ikke er en klasse"
+
+#~ msgid "creating array with size zero"
+#~ msgstr "opretter tabel med størrelsen nul"
+
+#~ msgid "creating array with size zero (`%E')"
+#~ msgstr "opretter tabel med størrelsen nul ('%E')"
+
+#~ msgid "forming reference to void"
+#~ msgstr "danner reference til void"
+
+#~ msgid "forming %s to reference type `%T'"
+#~ msgstr "danner %s til referencetypen '%T'"
+
+#~ msgid "creating pointer to member of non-class type `%T'"
+#~ msgstr "opretter henvisning til medlem af typen '%T' der ikke er en klasse"
+
+#~ msgid "creating pointer to member reference type `%T'"
+#~ msgstr "opretter henvisning til medlemsreference af typen '%T'"
+
+#~ msgid "creating array of `%T'"
+#~ msgstr "opretter tabel af '%T'"
+
+#~ msgid "`%T' is not a class, struct, or union type"
+#~ msgstr "'%T' er ikke en class-, struct- eller union-type"
+
+#~ msgid "use of `%s' in template"
+#~ msgstr "brug af '%s' i skabelon"
+
+#~ msgid "type `%T' composed from a local class is not a valid template-argument"
+#~ msgstr "typen '%T' sammensat fra lokal klasse er ikke en gyldig skabelonsparameter"
+
+#~ msgid "  trying to instantiate `%D'"
+#~ msgstr "  ved forsøg på at instantiere '%D'"
+
+#~ msgid "incomplete type unification"
+#~ msgstr "ufuldstændig typeforening"
+
+#~ msgid "use of `%s' in template type unification"
+#~ msgstr "brug af '%s' i skabelonstypeforening"
+
+#~ msgid "explicit instantiation of non-template `%#D'"
+#~ msgstr "eksplicit instantiering af ikke-skabelon '%#D'"
+
+#~ msgid "no matching template for `%D' found"
+#~ msgstr "ingen passende skabelon for '%D' fundet"
+
+#~ msgid "explicit instantiation of `%#D'"
+#~ msgstr "eksplicit instantiering af '%#D'"
+
+#~ msgid "duplicate explicit instantiation of `%#D'"
+#~ msgstr "'%#D' er blevet eksplicit instantieret mere end én gang"
+
+#~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations"
+#~ msgstr "ISO C++ forbyder brugen af 'extern' ved eksplicitte instantieringer"
+
+#~ msgid "storage class `%D' applied to template instantiation"
+#~ msgstr "lagringsklasse '%D' anvendt på skabelonsinstantiering"
+
+#~ msgid "explicit instantiation of non-template type `%T'"
+#~ msgstr "eksplicit instantiering af '%T' der ikke er en skabelonstype"
+
+#~ msgid "explicit instantiation of `%#T' before definition of template"
+#~ msgstr "eksplicit instantiering af '%T' før definering af skabelonen"
+
+#~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations"
+#~ msgstr "ISO C++ forbyder brugen af '%s ved eksplicitte instantieringer"
+
+#~ msgid "duplicate explicit instantiation of `%#T'"
+#~ msgstr "'%#T' er blevet eksplicit instantieret mere end én gang"
+
+#~ msgid "explicit instantiation of `%D' but no definition available"
+#~ msgstr "eksplicit instantiering af '%D', men ingen definition tilgængelig"
+
+#~ msgid "`%#T' is not a valid type for a template constant parameter"
+#~ msgstr "'%#T' er ikke en gyldig type for en skabelonsparameterkonstant "
+
+#~ msgid "-frepo must be used with -c"
+#~ msgstr "-frepo skal bruges med -c"
+
+#~ msgid "mysterious repository information in %s"
+#~ msgstr "mystisk info om opbevaringssted i '%s'"
+
+#~ msgid "can't create repository information file `%s'"
+#~ msgstr "kan ikke oprette informationsfilen '%s' til opbevaringssted"
+
+#~ msgid "cannot use typeid with -fno-rtti"
+#~ msgstr "kan ikke bruge typeid med -fno-rtti"
+
+#~ msgid "must #include <typeinfo> before using typeid"
+#~ msgstr "'#include <typeinfo>' er nødvendig før typeid kan benyttes"
+
+#~ msgid "cannot create type information for type `%T' because its size is variable"
+#~ msgstr "kan ikke oprette typeinformation for typen '%T' fordi dens størrelse er variabel"
+
+#~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed"
+#~ msgstr "dynamic_cast af '%#D' til '%#T' kan aldrig lykkes"
+
+#~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)"
+#~ msgstr "kan ikke anvende dynamic_cast på '%E' (af typen '%#T') til typen '%#T' (%s)"
+
+#~ msgid "`%T' is an inaccessible base of `%T'"
+#~ msgstr "'%T' er en utilgængelig stamklasse til '%T'"
+
+#~ msgid "`%T' is an ambiguous base of `%T'"
+#~ msgstr "'%T' er en tvetydig stamklasse til '%T'"
+
+#~ msgid "assignment to non-static member `%D' of enclosing class `%T'"
+#~ msgstr "tildeling til ikke-statisk medlem '%D' af omgivende klasse '%T'"
+
+#~ msgid "adjusting pointers for covariant returns"
+#~ msgstr "justerer henvisninger for kovariante returneringer"
+
+#~ msgid "invalid covariant return type for `%#D'"
+#~ msgstr "ugyldig kovariant returneringstype for '%#D'"
+
+#~ msgid "  overriding `%#D' (must be pointer or reference to class)"
+#~ msgstr "  overskriver '%#D' (skal være en henvisning eller reference til klasse)"
+
+#~ msgid "  overriding `%#D' (must use pointer or reference)"
+#~ msgstr "  overskriver '%#D' (skal være en henvisning eller reference)"
+
+#~ msgid "conflicting return type specified for `%#D'"
+#~ msgstr "modstridende returtyper angivet for '%#D'"
+
+#~ msgid "  overriding `%#D'"
+#~ msgstr "  overskriver '%#D'"
+
+#~ msgid "looser throw specifier for `%#F'"
+#~ msgstr "løsere throw-angivelse for '%#F'"
+
+#~ msgid "  overriding `%#F'"
+#~ msgstr "  overskriver '%#F'"
+
+#~ msgid "`%#D' cannot be declared"
+#~ msgstr "'%#D' kan ikke erklæres"
+
+#~ msgid "  since `%#D' declared in base class"
+#~ msgstr "  eftersom '%#D' er erklæret i stamklassen"
+
+#~ msgid "`%#D' needs a final overrider"
+#~ msgstr "'%#D' behøver en endelig overskrivning"
+
+#~ msgid "type of asm operand `%E' could not be determined"
+#~ msgstr "typen af asm-operanden '%E' kunne ikke afgøres"
+
+#~ msgid "ISO C++ does not permit named return values"
+#~ msgstr "ISO C++ tillader ikke navngivne returværdier"
+
+#~ msgid "return identifier `%D' already in place"
+#~ msgstr "returkaldenavn '%D' allerede på plads"
+
+#~ msgid "can't redefine default return value for constructors"
+#~ msgstr "kan ikke omdefinere standardreturværdi for konstruktionsfunktioner"
+
+#~ msgid "only constructors take base initializers"
+#~ msgstr "kun konstruktionsfunktioner har stamklasseklargøringer"
+
+#~ msgid "`this' is unavailable for static member functions"
+#~ msgstr "'this' er ikke tilgængelig for statiske medlemsfunktioner"
+
+#~ msgid "invalid use of `this' in non-member function"
+#~ msgstr "ugyldig brug af 'this' i ikke-medlemsfunktion"
+
+#~ msgid "invalid use of `this' at top level"
+#~ msgstr "ugyldig brug af 'this' ved øverste niveau"
+
+#~ msgid "calling type `%T' like a method"
+#~ msgstr "kalder typen '%T' som en metode"
+
+#~ msgid "destructor specifier `%T::~%T()' must have matching names"
+#~ msgstr "destruktionsangivelse '%T::~%T()' skal have ens navne"
+
+#~ msgid "`%E' is not of type `%T'"
+#~ msgstr "'%E' er ikke af typen '%T'"
+
+#~ msgid "template type parameters must use the keyword `class' or `typename'"
+#~ msgstr "skabelonstypeparametre skal begynde med 'class' eller 'typename'"
+
+#~ msgid "invalid default template argument"
+#~ msgstr "ugyldig standardparameter i skabelon"
+
+#~ msgid "definition of `%#T' inside template parameter list"
+#~ msgstr "definition af '%#T' inden i skabelonsparameterliste"
+
+#~ msgid "invalid definition of qualified type `%T'"
+#~ msgstr "ugyldig definition af modificeret type '%T'"
+
+#~ msgid "invalid base-class specification"
+#~ msgstr "ugyldig stamklasseangivelse"
+
+#~ msgid "base class `%T' has cv qualifiers"
+#~ msgstr "stamklassen '%T' har const/volatile-modifikationer"
+
+#~ msgid "multiple declarators in template declaration"
+#~ msgstr "flere erklærerer i skabelonserklæring"
+
+#~ msgid "type of `%E' is unknown"
+#~ msgstr "typen af '%E' er ukendt"
+
+#~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
+#~ msgstr "kaldenavnet '%s' er i modstrid med den interne navngivningsstrategi i GNU c++"
+
+#~ msgid "parse error at end of saved function text"
+#~ msgstr "tolkningsfejl ved slutningen af gemt funktionstekst"
+
+#~ msgid "%Hend of file read inside definition"
+#~ msgstr "%Hslutningen af filen læst inden i definition"
+
+#~ msgid "parse error in method specification"
+#~ msgstr "tolkningsfejl i medlemsfunktionsangivelsen"
+
+#~ msgid "function body for constructor missing"
+#~ msgstr "kroppen til konstruktionsfunktionen mangler"
+
+#~ msgid "%Hend of file read inside default argument"
+#~ msgstr "%Hslutningen af filen læst inden i standardparameter"
+
+#~ msgid "circular dependency in default args of `%#D'"
+#~ msgstr "cirkulær afhængighed i standardparametre til '%#D'"
+
+#~ msgid "invalid type `%T' for default argument to `%T'"
+#~ msgstr "ugyldig type '%T' for standardparameter til '%T'"
+
+#~ msgid "%s before `%s'"
+#~ msgstr "%s før '%s'"
+
+#~ msgid "%s before `%c'"
+#~ msgstr "%s før '%c'"
+
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%s før '\\%o'"
+
+#~ msgid "%s before `%s' token"
+#~ msgstr "%s før symbolet '%s'"
+
+#~ msgid "non-lvalue in %s"
+#~ msgstr "ikke-venstreværdi i %s"
+
+#~ msgid "`%V' qualifiers cannot be applied to `%T'"
+#~ msgstr "modifikationerne '%V' kan ikke anvendes på '%T'"
+
+#~ msgid "`%s' attribute can only be applied to Java class definitions"
+#~ msgstr "egenskaben '%s' kan kun anvendes med Java-klassedefinitioner"
+
+#~ msgid "`%s' attribute can only be applied to class definitions"
+#~ msgstr "egenskaben '%s' kan kun anvendes med klassedefinitioner"
+
+#~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default"
+#~ msgstr "'%s' er forældet; virtuelle tabeller i g++ er nu COM-kompatible som standard"
+
+#~ msgid "requested init_priority is not an integer constant"
+#~ msgstr "den udbedte init_priority er ikke en heltalskonstant"
+
+#~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type"
+#~ msgstr "kan kun bruge egenskaben '%s' på filvirkefeltsdefinitioner af objekter af klassetype"
+
+#~ msgid "requested init_priority is out of range"
+#~ msgstr "den udbedte init_priority er uden for det gyldige interval"
+
+#~ msgid "requested init_priority is reserved for internal use"
+#~ msgstr "den udbedte init_priority er reserveret til intern brug"
+
+#~ msgid "`%s' attribute is not supported on this platform"
+#~ msgstr "egenskaben '%s' er ikke understøttet på denne platform"
+
+#~ msgid "lang_* check: failed in %s, at %s:%d"
+#~ msgstr "lang_*-kontrol: mislykkedes i %s, ved %s:%d"
+
+#~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function"
+#~ msgstr "ISO C++ forbyder %s mellem henvisning af typen 'void *' og henvisning til funktion"
+
+#~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast"
+#~ msgstr "%s mellem forskellige henvisningstyper '%T' og '%T' mangler en typeomtvingelse"
+
+#~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'"
+#~ msgstr "ISO C++ forbyder konvertering fra '%#T' til '(...)'"
+
+#~ msgid "invalid application of `%s' to a member function"
+#~ msgstr "ugyldig brug af '%s' på en medlemsfunktion"
+
+#~ msgid "invalid application of `%s' to non-static member"
+#~ msgstr "ugyldig brug af '%s' på et ikke-statisk medlem"
+
+#~ msgid "sizeof applied to a bit-field"
+#~ msgstr "'sizeof' benyttet på et bitfelt"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type"
+#~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' på et udtryk af en funktionstype"
+
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "ugyldig brug af en tabel der ikke kan optræde som en venstreværdi"
+
+#~ msgid "deprecated conversion from string constant to `%T'"
+#~ msgstr "forældet konvertering fra strengkonstant til '%T'"
+
+#~ msgid "request for member `%D' in `%E', which is of non-class type `%T'"
+#~ msgstr "forespørgsel efter medlemmet '%D' i '%E' som er af en ikke-klassetype '%T'"
+
+#~ msgid "`%D' is not a member of `%T'"
+#~ msgstr "'%D' er ikke et medlem af '%T'"
+
+#~ msgid "invalid access to non-static data member `%D' of NULL object"
+#~ msgstr "ugyldig tilgang til ikke-statisk datamedlem '%D' af NULL-objekt"
+
+#~ msgid "(perhaps the `offsetof' macro was used incorrectly)"
+#~ msgstr "(måske blev 'offsetof'-makroen benyttet forkert)"
+
+#~ msgid "`%D::%D' is not a member of `%T'"
+#~ msgstr "'%D::%D' er ikke et medlem af '%T'"
+
+#~ msgid "destructor specifier `%T::~%T' must have matching names"
+#~ msgstr "destruktionsangivelse '%T::~%T' skal have ens navne"
+
+#~ msgid "type `%T' has no destructor"
+#~ msgstr "typen '%T' har ingen destruktionsfunktion"
+
+#~ msgid "`%D' is not a member template function"
+#~ msgstr "'%D' er ikke en medlemsskabelonfunktion"
+
+#~ msgid "`%T' is not a pointer-to-object type"
+#~ msgstr "'%T' er ikke af en henvisning til objekt-type"
+
+#~ msgid "invalid use of `%s' on pointer to member"
+#~ msgstr "ugyldig brug af '%s' på henvisning til medlem"
+
+#~ msgid "invalid type argument"
+#~ msgstr "ugyldig typeparameter"
+
+#~ msgid "ISO C++ forbids subscripting non-lvalue array"
+#~ msgstr "ISO C++ forbyder indeksering af en ikke-venstreværdis tabel"
+
+#~ msgid "subscripting array declared `register'"
+#~ msgstr "indeksering af tabel som er erklæret 'register'"
+
+#~ msgid "object missing in use of `%E'"
+#~ msgstr "objekt mangler i brug af '%E'"
+
+#~ msgid "ISO C++ forbids calling `::main' from within program"
+#~ msgstr "ISO C++ forbyder kald af '::main' inde fra programmet"
+
+#~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'"
+#~ msgstr "brug .* eller ->* i kald af henvisning til medlemsfunktion i '%E (...)'"
+
+#~ msgid "`%E' cannot be used as a function"
+#~ msgstr "'%E' kan ikke bruges som en funktion"
+
+#~ msgid "too many arguments to %s `%+#D'"
+#~ msgstr "for mange parametre til %s '%+#D'"
+
+#~ msgid "parameter type of called function is incomplete"
+#~ msgstr "parametertypen for den kaldte funktion er ufuldstændig"
+
+#~ msgid "too few arguments to %s `%+#D'"
+#~ msgstr "for få parametre til %s '%+#D'"
+
+#~ msgid "assuming cast to type `%T' from overloaded function"
+#~ msgstr "antager typeomtvingning til typen '%T' fra flertydig funktion"
+
+#~ msgid "division by zero in `%E / 0'"
+#~ msgstr "division med nul i '%E / 0'"
+
+#~ msgid "division by zero in `%E / 0.'"
+#~ msgstr "division med nul i '%E / 0.'"
+
+#~ msgid "division by zero in `%E %% 0'"
+#~ msgstr "division med nul i '%E %% 0'"
+
+#~ msgid "division by zero in `%E %% 0.'"
+#~ msgstr "division med nul i '%E %% 0.'"
+
+#~ msgid "%s rotate count is negative"
+#~ msgstr "%s-roteringsantal er negativt"
+
+#~ msgid "%s rotate count >= width of type"
+#~ msgstr "%s-roteringsantal >= bredden af typen"
+
+#~ msgid "ISO C++ forbids comparison between pointer and integer"
+#~ msgstr "ISO C++ forbyder sammenligning mellem henvisningsvariabel og heltal"
+
+#~ msgid "comparison between types `%#T' and `%#T'"
+#~ msgstr "sammenligning mellem typerne '%#T' og '%#T'"
+
+#~ msgid "comparison between signed and unsigned integer expressions"
+#~ msgstr "sammenlign mellem signed og unsigned heltalsudtryk"
+
+#~ msgid "invalid operands of types `%T' and `%T' to binary `%O'"
+#~ msgstr "ugyldige operander af typerne '%T' og '%T' til binær '%O'"
+
+#~ msgid "NULL used in arithmetic"
+#~ msgstr "NULL benyttet i udregning"
+
+#~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction"
+#~ msgstr "ISO C++ forbyder brug af henvisning af typen 'void *' i fratrækning"
+
+#~ msgid "ISO C++ forbids using pointer to a function in subtraction"
+#~ msgstr "ISO C++ forbyder brug af henvisning til funktion i fratrækning"
+
+#~ msgid "ISO C++ forbids using pointer to a method in subtraction"
+#~ msgstr "ISO C++ forbyder brug af henvisning til medlemsfunktion i fratrækning"
+
+#~ msgid "ISO C++ forbids using pointer to a member in subtraction"
+#~ msgstr "ISO C++ forbyder brug af henvisning til medlem i fratrækning"
+
+#~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
+#~ msgstr "ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegning"
+
+#~ msgid "invalid use of '%E' to form a pointer-to-member-function.  Use a qualified-id."
+#~ msgstr "ugyldig brug af '%E' til at danne en henvisning til medlemsfunktion; benyt et kaldenavn med klassepræfiks"
+
+#~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function"
+#~ msgstr "paranteser omkring '%E' kan ikke bruges til at danne en henvisning til medlemsfunktion"
+
+#~ msgid "taking address of temporary"
+#~ msgstr "tager adressen på midlertidig variabel"
+
+#~ msgid "ISO C++ forbids %sing an enum"
+#~ msgstr "ISO C++ forbyder %s af en enum"
+
+#~ msgid "cannot %s a pointer to incomplete type `%T'"
+#~ msgstr "kan ikke %s en henvisning til en ufuldstændig type '%T'"
+
+#~ msgid "ISO C++ forbids %sing a pointer of type `%T'"
+#~ msgstr "ISO C++ forbyder %s af en henvisning af typen '%T'"
+
+#~ msgid "cast to non-reference type used as lvalue"
+#~ msgstr "typeomtvingning til ikke-reference-type benyttet som venstreværdi"
+
+#~ msgid "invalid use of `--' on bool variable `%D'"
+#~ msgstr "ugyldig brug af '--' på den booleske variabel '%D'"
+
+#~ msgid "ISO C++ forbids taking address of function `::main'"
+#~ msgstr "ISO C++ forbyder at tage adressen på funktionen '::main'"
+
+#~ msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "ISO C++ forbyder at tage adressen på en ikke-modificeret, ikke-statisk medlemsfunktion for at danne en henvisning til medlemsfunktion; brug '&%T::%D'"
+
+#~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "ISO C++ forbyder at tage adressen på en bundet medlemsfunktion for at danne en henvisning til medlemsfunktion; brug '&%T::%D'"
+
+#~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
+#~ msgstr "ISO C++ forbyder at tage adressen på en typeomtvingning til et udtryk der ikke er en venstreværdi"
+
+#~ msgid "attempt to take address of bit-field structure member `%D'"
+#~ msgstr "forsøg på at finde adressen af bitfeltstrukturmedlemmet '%D'"
+
+#~ msgid "taking address of destructor"
+#~ msgstr "tager adressen på en destruktionsfunktion"
+
+#~ msgid "taking address of bound pointer-to-member expression"
+#~ msgstr "tager adressen på et bundet henvisning til medlem-udtryk"
+
+#~ msgid "cannot create pointer to reference member `%D'"
+#~ msgstr "kan ikke oprette henvisning til reference medlemmet '%D'"
+
+#~ msgid "cannot take the address of `this', which is an rvalue expression"
+#~ msgstr "kan ikke tage adressen af 'this' som er et højreværdiudtryk"
+
+#~ msgid "address requested for `%D', which is declared `register'"
+#~ msgstr "adresse forespurgt for '%D' som er erklæret 'register'"
+
+#~ msgid "static_cast from type `%T' to type `%T' casts away constness"
+#~ msgstr "static_cast fra typen '%T' til typen '%T' fjerner konstanthed"
+
+#~ msgid "invalid static_cast from type `%T' to type `%T'"
+#~ msgstr "ugyldig static_cast fra typen '%T' til typen '%T'"
+
+#~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'"
+#~ msgstr "ugyldig reinterpret_cast af et højreværdiudtryk fra typen '%T' til typen '%T'"
+
+#~ msgid "reinterpret_cast from `%T' to `%T' loses precision"
+#~ msgstr "reinterpret_cast fra '%T' til '%T' mister præcision"
+
+#~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)"
+#~ msgstr "reinterpret_cast fra '%T' til '%T' fjerner const (eller volatile)"
+
+#~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
+#~ msgstr "ISO C++ forbyder sammenligninger mellem henvisning til funktion og henvisning til objekt"
+
+#~ msgid "invalid reinterpret_cast from type `%T' to type `%T'"
+#~ msgstr "ugyldig reinterpret_cast fra typen '%T' til typen '%T'"
+
+#~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type"
+#~ msgstr "ugyldig brug af const_cast med typen '%T' som ikke er en henvisnings-, reference- eller en henvisning til datamedlem-type"
+
+#~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type"
+#~ msgstr "ugyldig brug af const_cast med typen '%T' som er en henvisning eller reference til funktion"
+
+#~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'"
+#~ msgstr "ugyldig const_cast af en højreværdi fra typen '%T' til typen '%T'"
+
+#~ msgid "invalid const_cast from type `%T' to type `%T'"
+#~ msgstr "ugyldig const_cast fra typen '%T' til typen '%T'"
+
+#~ msgid "ISO C++ forbids casting to an array type `%T'"
+#~ msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype '%T'"
+
+#~ msgid "invalid cast to function type `%T'"
+#~ msgstr "ugyldig omtvingelse til funktionstypen '%T'"
+
+#~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type"
+#~ msgstr "typeomtvingning fra '%T' til '%T' kasserer modifikationer på henvisningsmålets type"
+
+#~ msgid "cast from `%T' to `%T' increases required alignment of target type"
+#~ msgstr "typeomtvingning fra '%T' til '%T' forøger den påkrævede justering af målets type"
+
+#~ msgid "  in evaluation of `%Q(%#T, %#T)'"
+#~ msgstr "  i evaluering af '%Q(%#T, %#T)'"
+
+#~ msgid "ISO C++ forbids cast to non-reference type used as lvalue"
+#~ msgstr "ISO C++ forbyder omtvingelse af typen til en ikke-reference-type benyttet som venstreværdi"
+
+#~ msgid "incompatible types in assignment of `%T' to `%T'"
+#~ msgstr "uforenelige typer i tildeling af '%T' til '%T'"
+
+#~ msgid "ISO C++ forbids assignment of arrays"
+#~ msgstr "ISO C++ forbyder tildeling af tabeller"
+
+#~ msgid "   in pointer to member function conversion"
+#~ msgstr "   i henvisning til medlemsfunktion-omdannelse"
+
+#~ msgid "   in pointer to member conversion"
+#~ msgstr "   i henvisning til medlem-omdannelse"
+
+#~ msgid "pointer to member cast via virtual base `%T' of `%T'"
+#~ msgstr "henvisning til medlem-typeomtvingning via den virtuelle stamklasse '%T' af '%T'"
+
+#~ msgid "pointer to member conversion via virtual base `%T' of `%T'"
+#~ msgstr "henvisning til medlem-omdannelse via den virtuelle stamklasse '%T' af '%T'"
+
+#~ msgid "invalid conversion to type `%T' from type `%T'"
+#~ msgstr "ugyldig omdannelse til typen '%T' fra typen '%T'"
+
+# %s bliver til returnering eller tildeling eller noget i den retning
+#~ msgid "passing NULL used for non-pointer %s %P of `%D'"
+#~ msgstr "overbringelse af NULL benyttet for ikke-henvisnings%s %P af '%D'"
+
+#~ msgid "%s to non-pointer type `%T' from NULL"
+#~ msgstr "%s til ikke-henvisningstypen '%T' fra NULL"
+
+#~ msgid "passing `%T' for %s %P of `%D'"
+#~ msgstr "overbringelse af '%T' for ikke-henvisnings%s %P af '%D'"
+
+#~ msgid "%s to `%T' from `%T'"
+#~ msgstr "%s til '%T' fra '%T'"
+
+#~ msgid "passing negative value `%E' for %s %P of `%D'"
+#~ msgstr "overbringelse af negativ værdi '%E' for %s %P af '%D'"
+
+#~ msgid "%s of negative value `%E' to `%T'"
+#~ msgstr "%s af negativ værdi '%E' til `%T'"
+
+#~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'"
+#~ msgstr "kan ikke konvertere '%T' til '%T' for parameter '%P' til '%D'"
+
+#~ msgid "cannot convert `%T' to `%T' in %s"
+#~ msgstr "kan ikke konvertere '%T' til '%T' i %s"
+
+#~ msgid "in passing argument %P of `%+D'"
+#~ msgstr "i overbringelse af parameter %P af '%+D'"
+
+#~ msgid "returning reference to temporary"
+#~ msgstr "returnerer reference til midlertidig variabel"
+
+#~ msgid "reference to non-lvalue returned"
+#~ msgstr "reference til ikke-venstreværdi returneret"
+
+#~ msgid "reference to local variable `%D' returned"
+#~ msgstr "reference til den lokale variabel '%D' returneret"
+
+#~ msgid "address of local variable `%D' returned"
+#~ msgstr "adresse af den lokale variabel '%D' returneret"
+
+#~ msgid "returning a value from a destructor"
+#~ msgstr "returnerer en værdi fra en destruktionsfunktion"
+
+#~ msgid "cannot return from a handler of a function-try-block of a constructor"
+#~ msgstr "kan ikke returnere fra en håndtering af en funktions-try-blok i en konstruktionsfunktion"
+
+#~ msgid "returning a value from a constructor"
+#~ msgstr "returnerer en værdi fra en konstruktionsfunktion"
+
+#~ msgid "return-statement with no value, in function declared with a non-void return type"
+#~ msgstr "return-sætning uden en værdi i en funktion der er erklæret med en ikke-void returtype"
+
+#~ msgid "return-statement with a value, in function declared with a void return type"
+#~ msgstr "return-sætning med en værdi i en funktion der er erklæret med en void returtype"
+
+#~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)"
+#~ msgstr "'operator new' må ikke returnere NULL medmindre den er erklæret 'throw()' (eller -fcheck-new er benyttet)"
+
+#~ msgid "type `%T' is not a base type for type `%T'"
+#~ msgstr "typen '%T' er ikke en grundtype for typen '%T'"
+
+#~ msgid "cannot declare variable `%D' to be of type `%T'"
+#~ msgstr "kan ikke erklære variablen '%D' til at være af typen '%T'"
+
+#~ msgid "cannot declare parameter `%D' to be of type `%T'"
+#~ msgstr "kan ikke erklære parameteren '%D' til at være af typen '%T'"
+
+#~ msgid "cannot declare field `%D' to be of type `%T'"
+#~ msgstr "kan ikke erklære feltet '%D' til at være af typen '%T'"
+
+#~ msgid "invalid return type for member function `%#D'"
+#~ msgstr "ugyldig returtype for medlemsfunktionen '%#D'"
+
+#~ msgid "invalid return type for function `%#D'"
+#~ msgstr "ugyldig returtype for funktionen '%#D'"
+
+#~ msgid "cannot allocate an object of type `%T'"
+#~ msgstr "kan ikke allokere et objekt af typen '%T'"
+
+#~ msgid "  because the following virtual functions are abstract:"
+#~ msgstr "  eftersom de følgende virtuelle funktioner er abstrakte:"
+
+#~ msgid "\t%#D"
+#~ msgstr "\t%#D"
+
+#~ msgid "  since type `%T' has abstract virtual functions"
+#~ msgstr "  eftersom typen '%T' har abstrakte virtuelle funktioner"
+
+#~ msgid "constructor syntax used, but no constructor declared for type `%T'"
+#~ msgstr "konstruktionsfunktionsyntaks benyttet, men ingen konstruktionsfunktion er erklæret for typen '%T'"
+
+#~ msgid "comma expression used to initialize return value"
+#~ msgstr "kommaudtryk benyttet til at klargøre returværdi"
+
+#~ msgid "cannot initialize arrays using this syntax"
+#~ msgstr "kan ikke tildele tabeller startværdier med denne syntaks"
+
+#~ msgid "initializing array with parameter list"
+#~ msgstr "klargør tabel med en parameterliste"
+
+#~ msgid "initializer for scalar variable requires one element"
+#~ msgstr "startværdien for en skalarvariabel kan kun bestå af ét element"
+
+#~ msgid "braces around scalar initializer for `%T'"
+#~ msgstr "krøllede paranteser omkring skalarstartværdi for '%T'"
+
+#~ msgid "ignoring extra initializers for `%T'"
+#~ msgstr "ignorerer ekstra startværdier for '%T'"
+
+#~ msgid "variable-sized object of type `%T' may not be initialized"
+#~ msgstr "objekt af typen '%T' med variabel størrelse må ikke tildeles en startværdi"
+
+#~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'"
+#~ msgstr "underobjekt af typen '%T' skal klargøres af en konstruktionsfunktion, ikke af '%E'"
+
+#~ msgid "aggregate has a partly bracketed initializer"
+#~ msgstr "sammensat type har delvis indklammet startværdi"
+
+#~ msgid "non-trivial labeled initializers"
+#~ msgstr "ikke-trivielle navngivne startværdier"
+
+#~ msgid "non-empty initializer for array of empty elements"
+#~ msgstr "en startværdi der ikke er tom, tildeles til en tabel med tomme elementer"
+
+#~ msgid "initializer list for object of class with virtual base classes"
+#~ msgstr "klargøringsliste for objekt af en klasse med virtuelle stamklasser"
+
+#~ msgid "initializer list for object of class with base classes"
+#~ msgstr "klargøringsliste for objekt af en klasse med stamklasser"
+
+#~ msgid "initializer list for object using virtual functions"
+#~ msgstr "klargøringsliste for objekt med virtuelle funktioner"
+
+#~ msgid "missing initializer for member `%D'"
+#~ msgstr "manglende startværdi for medlemmet '%D'"
+
+#~ msgid "uninitialized const member `%D'"
+#~ msgstr "konstant medlem '%D' uden startværdi"
+
+#~ msgid "member `%D' with uninitialized const fields"
+#~ msgstr "medlem '%D' med konstante felter uden startværdi"
+
+#~ msgid "member `%D' is uninitialized reference"
+#~ msgstr "medlemmet '%D' er en reference uden startværdi"
+
+#~ msgid "index value instead of field name in union initializer"
+#~ msgstr "indeksværdi i stedet for feltnavn i union-startværdi"
+
+#~ msgid "no field `%D' in union being initialized"
+#~ msgstr "intet felt '%D' i union der tildeles startværdi"
+
+#~ msgid "union `%T' with no named members cannot be initialized"
+#~ msgstr "union '%T' uden navngivne elementer kan ikke tildeles startværdi"
+
+#~ msgid "excess elements in aggregate initializer"
+#~ msgstr "for mange elementer i startværdi til sammensat type"
+
+#~ msgid "circular pointer delegation detected"
+#~ msgstr "fundet en henvisningsefterfølgelse der går i ring"
+
+#~ msgid "base operand of `->' has non-pointer type `%T'"
+#~ msgstr "grundoperanden til '->' har en ikke-henvisningstype '%T'"
+
+#~ msgid "result of `operator->()' yields non-pointer result"
+#~ msgstr "resultatet af 'operator->()' er ikke en henvisning"
+
+#~ msgid "base operand of `->' is not a pointer"
+#~ msgstr "grundoperanden til '->' er ikke en henvisning"
+
+#~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'"
+#~ msgstr "'%E' kan ikke bruges som en medlemshenvisning eftersom udtrykkets type er '%T'"
+
+#~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'"
+#~ msgstr "kan ikke anvende medlemshenvisning '%E' på '%E' som er af den ikke-sammensatte type '%T'"
+
+#~ msgid "member type `%T::' incompatible with object type `%T'"
+#~ msgstr "medlemstypen '%T::' uforenelige med objekttypen '%T'"
+
+#~ msgid "`%T' fails to be a typedef or built-in type"
+#~ msgstr "'%T' er hverken en typedef eller en indbygget type"
+
+#~ msgid "ISO C++ forbids defining types within %s"
+#~ msgstr "ISO C++ forbyder definering af typer inden i %s"
+
+#~ msgid "call to function `%D' which throws incomplete type `%#T'"
+#~ msgstr "kald af en funktion '%D' som kaster en ufuldstændig type '%#T'"
+
+#~ msgid "call to function which throws incomplete type `%#T'"
+#~ msgstr "kald af en funktion som kaster en ufuldstændig type '%#T'"
+
+#~ msgid "%s is deprecated, please see the documentation for details"
+#~ msgstr "%s er forældet, se venligst dokumentationen for detaljer"
+
+#~ msgid "Do not obey access control semantics"
+#~ msgstr "Adlyd ikke tilgangskontrolsemantikker"
+
+#~ msgid "Change when template instances are emitted"
+#~ msgstr "Skift hvornår skabelonsinstanser udsendes"
+
+#~ msgid "Check the return value of new"
+#~ msgstr "Kontrollér returværdien for new"
+
+#~ msgid "Reduce size of object files"
+#~ msgstr "Reducér størrelsen af objektfiler"
+
+#~ msgid "Make string literals `char[]' instead of `const char[]'"
+#~ msgstr "Gør strengkonstanter til 'char[]' i stedet for 'const char[]'"
+
+#~ msgid "Dump the entire translation unit to a file"
+#~ msgstr "Anbring hele oversættelsesenheden i en fil"
+
+#~ msgid "Do not inline member functions by default"
+#~ msgstr "Integrér ikke medlemsfunktioner som standard"
+
+#~ msgid "Do not generate run time type descriptor information"
+#~ msgstr "Generér ikke typebeskrivelsesoplysninger til kørselstidspunktet"
+
+#~ msgid "Do not generate code to check exception specifications"
+#~ msgstr "Generér ikke kode til at kontrollere undtagelsesspecifikationer"
+
+#~ msgid "Scope of for-init-statement vars extends outside"
+#~ msgstr "Udvid virkefeltet for variabler i for-klargøringssætninger"
+
+#~ msgid "Do not recognize GNU defined keywords"
+#~ msgstr "Genkend ikke GNU-definerede reserverede ord"
+
+#~ msgid "Enable support for huge objects"
+#~ msgstr "Aktivér understøttelse af enorme objekter"
+
+#~ msgid "Export functions even if they can be inlined"
+#~ msgstr "Eksportér funktioner også selvom de kan integreres"
+
+#~ msgid "Only emit explicit template instantiations"
+#~ msgstr "Udsend kun eksplicitte skabelonsinstatieringer"
+
+#~ msgid "Only emit explicit instantiations of inline templates"
+#~ msgstr "Udsend kun eksplicitte instatieringer af indlejrede skabeloner"
+
+#~ msgid "Don't pedwarn about uses of Microsoft extensions"
+#~ msgstr "Udsend ikke pedantiske advarsler om brug af Microsoft-udvidelser"
+
+#~ msgid "Recognize and/bitand/bitor/compl/not/or/xor"
+#~ msgstr "Genkend and/bitand/bitor/compl/not/or/xor"
+
+#~ msgid "Disable optional diagnostics"
+#~ msgstr "Deaktivér valgfrie diagnosticeringer"
+
+#~ msgid "Downgrade conformance errors to warnings"
+#~ msgstr "Nedgradér standardoverholdelsesfejl til advarsler"
+
+#~ msgid "Enable automatic template instantiation"
+#~ msgstr "Aktivér automatisk skabelonsinstantiering"
+
+#~ msgid "Display statistics accumulated during compilation"
+#~ msgstr "Vis statistik som indsamles under oversættelsen"
+
+#~ msgid "Specify maximum template instantiation depth"
+#~ msgstr "Angiv maksimal skabelonsinstantieringsdybde"
+
+#~ msgid "Use __cxa_atexit to register destructors"
+#~ msgstr "Benyt __cxa_atexit til at registrere destruktionsfunktioner"
+
+#~ msgid "Discard unused virtual functions"
+#~ msgstr "Kassér ubrugte virtuelle funktioner"
+
+#~ msgid "Implement vtables using thunks"
+#~ msgstr "Implementér virtuelle tabeller vha. thunk-kode"
+
+#~ msgid "Emit common-like symbols as weak symbols"
+#~ msgstr "Udsend almindelige symboler som svage symboler"
+
+#~ msgid "Emit cross referencing information"
+#~ msgstr "Udsend krydsreferenceoplysninger"
+
+#~ msgid "Warn about inconsistent return types"
+#~ msgstr "Advar om inkonsistente returtyper"
+
+#~ msgid "Warn about overloaded virtual function names"
+#~ msgstr "Advar om flertydige virtuelle funktionsnavne"
+
+#~ msgid "Don't warn when all ctors/dtors are private"
+#~ msgstr "Advar ikke når alle konstruktions-/destruktionsfunktioner er private"
+
+#~ msgid "Warn about non virtual destructors"
+#~ msgstr "Advar om ikke-virtuelle destruktionsfunktioner"
+
+#~ msgid "Warn when a function is declared extern, then inline"
+#~ msgstr "Advar når en funktion erklæret extern erklæres inline"
+
+#~ msgid "Warn when the compiler reorders code"
+#~ msgstr "Advar når oversætteren ændrer på ordenen af kode"
+
+#~ msgid "Warn when synthesis behavior differs from Cfront"
+#~ msgstr "Advar når synteseopførslen adskiller sig fra Cfront"
+
+#~ msgid "Don't warn when type converting pointers to member functions"
+#~ msgstr "Advar ikke ved typeomdannelse af henvisninger til medlemsfunktioner"
+
+#~ msgid "Warn about violations of Effective C++ style rules"
+#~ msgstr "Advar om overtrædelser af stilreglerne fra Effective C++"
+
+#~ msgid "Warn when overload promotes from unsigned to signed"
+#~ msgstr "Advar når flertydiggørelse forfremmer fra unsigned til signed"
+
+#~ msgid "Warn if a C style cast is used in a program"
+#~ msgstr "Advar hvis en typeomtvingning i C-stil benyttes"
+
+#~ msgid "Don't warn when non-templatized friend functions are declared within a template"
+#~ msgstr "Advar ikke når ikke-skabelonsvennefunktioner erklæres inde i en skabelon"
+
+#~ msgid "Don't announce deprecation of compiler features"
+#~ msgstr "Annoncér ikke forældelse af oversætterfaciliteter"
+
+#~ msgid "note:"
+#~ msgstr "bemærk:"
+
+#~ msgid "warning:"
+#~ msgstr "advarsel: "
+
+#~ msgid "fatal:"
+#~ msgstr "fatal:"
+
+#~ msgid "(continued):"
+#~ msgstr "(fortsat):"
+
+#~ msgid "[REPORT BUG!!] %"
+#~ msgstr "[RAPPORTER FEJL!] %"
+
+#~ msgid "[REPORT BUG!!]"
+#~ msgstr "[RAPPORTER FEJL!]"
+
+#~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling"
+#~ msgstr "ASSIGN'et etiket kan ikke passe i '%A' ved %0 - bruger bredere søskende"
+
+#~ msgid "no INTEGER type can hold a pointer on this configuration"
+#~ msgstr "ingen INTEGER-type kan opbevare en henvisning i denne konfiguration"
+
+#~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide,"
+#~ msgstr "konfiguration: REAL, INTEGER og LOGICAL er %d bit brede,"
+
+#~ msgid "and pointers are %d bits wide, but g77 doesn't yet work"
+#~ msgstr "og henvisninger er %d bit brede, men g77 virker endnu ikke"
+
+#~ msgid "properly unless they all are 32 bits wide"
+#~ msgstr "ordentligt medmindre de alle er 32 bit brede"
+
+#~ msgid "Please keep this in mind before you report bugs."
+#~ msgstr "Husk venligst på dette før du rapporterer fejl."
+
+#~ msgid "configuration: char * holds %d bits, but ftnlen only %d"
+#~ msgstr "konfiguration: char * holder %d bit, men ftnlen kun %d"
+
+#~ msgid ""
+#~ "configuration: char * holds %d bits, but INTEGER only %d --\n"
+#~ " ASSIGN statement might fail"
+#~ msgstr "konfiguration: char * holder %d bit, men INTEGER kun %d - ASSIGN-sætning kan mislykkes"
+
+#~ msgid "In statement function"
+#~ msgstr "I sætningsfunktion"
+
+#~ msgid "Outside of any program unit:\n"
+#~ msgstr "Uden for nogen programenhed:\n"
+
+#~ msgid "%A from %B at %0%C"
+#~ msgstr "%A fra %B ved %0%C"
+
+#~ msgid "directory name must immediately follow -I"
+#~ msgstr "et katalognavn skal følge umiddelbart efter -I"
+
+#~ msgid "At %0, INCLUDE file %A exists, but is not readable"
+#~ msgstr "Ved %0 eksisterer INCLUDE-filen %A, men kan ikke læses"
+
+#~ msgid "At %0, INCLUDE nesting too deep"
+#~ msgstr "Ved %0 er INCLUDE-indlejring for dyb"
+
+#~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses"
+#~ msgstr "To aritmetiske operatorer efter hinanden ved %0 og %1 - benyt paranteser"
+
+#~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses"
+#~ msgstr "Operatoren ved %0 har lavere prioritet end den ved %1 - benyt paranteser"
+
+#~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2"
+#~ msgstr "Benyt .EQV./.NEQV. i stedet for .EQ./.NE. ved %0 for LOGICAL-operander ved %1 og %2"
+
+#~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER"
+#~ msgstr "Ikke-understøttet operand for ** ved %1 - konverterer til standard-INTEGER"
+
+#~ msgid "overflowed output arg list for `%s'"
+#~ msgstr "overløb i uddataparameterlist for '%s'"
+
+#~ msgid "--driver no longer supported"
+#~ msgstr "--driver understøttes ikke længere"
+
+#~ msgid "argument to `%s' missing"
+#~ msgstr "parameter til '%s' mangler"
+
+#~ msgid "no input files; unwilling to write output files"
+#~ msgstr "ingen inputfiler; vil ikke skrive outputfiler"
+
+#~ msgid "Implicit declaration of `%A' at %0"
+#~ msgstr "Implicit erklæring af '%A' ved %0"
+
+#~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0"
+#~ msgstr "Undvigesekvensen '\\%A' ved %0 følger ikke ISO C-standarden"
+
+#~ msgid "Unknown escape sequence `\\%A' at %0"
+#~ msgstr "Ukendt undvigesekvens '\\%A' ved %0"
+
+#~ msgid "Unterminated escape sequence `\\' at %0"
+#~ msgstr "Uafsluttet undvigsekvens '\\' ved %0"
+
+#~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0"
+#~ msgstr "Ukendt undvigesekvens '\\' efterfulgt af tegnkode 0x%A ved %0"
+
+#~ msgid "\\x used at %0 with no following hex digits"
+#~ msgstr "\\x angivet ved %0 uden efterfølgende hexadecimale cifre"
+
+#~ msgid "Hex escape at %0 out of range"
+#~ msgstr "Hexadecimal undvigesekvens ved %0 er uden for det gyldige interval"
+
+#~ msgid "Escape sequence at %0 out of range for character"
+#~ msgstr "Undvigesekvens ved %0 er uden for det gyldig interval for tegn"
+
+#~ msgid "hex escape out of range"
+#~ msgstr "hexadecimal undvigesekvens er uden for det gyldige interval"
+
+#~ msgid "non-ANSI-standard escape sequence, `\\%c'"
+#~ msgstr "undvigesekvensen '\\%c' følger ikke ANSI-standarden"
+
+#~ msgid "non-ISO escape sequence `\\%c'"
+#~ msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden"
+
+#~ msgid "unknown escape sequence `\\%c'"
+#~ msgstr "ukendt undvigesekvens '\\%c'"
+
+#~ msgid "unknown escape sequence: `\\' followed by char code 0x%x"
+#~ msgstr "ukendt undvigesekvens: '\\' efterfulgt af tegnkoden 0x%x"
+
+#~ msgid "badly formed directive -- no closing quote"
+#~ msgstr "forkert udformet direktiv - intet afsluttende anførselstegn"
+
+#~ msgid "#-lines for entering and leaving files don't match"
+#~ msgstr "#-linjer til at træde ind og ud af filer passer ikke"
+
+#~ msgid "bad directive -- missing close-quote"
+#~ msgstr "forkert udformet direktiv - intet afsluttende anførselstegn"
+
+#~ msgid "ignoring pragma: %s"
+#~ msgstr "ignorerer pragma: %s"
+
+#~ msgid "invalid #ident"
+#~ msgstr "ugyldig #ident"
+
+#~ msgid "undefined or invalid # directive"
+#~ msgstr "ugyldigt eller ikke-defineret #-direktiv"
+
+#~ msgid "invalid #line"
+#~ msgstr "ugyldig #line"
+
+#~ msgid "use `#line ...' instead of `# ...' in first line"
+#~ msgstr "benyt '#line ...' i stedet for '# ...' i første linje"
+
+#~ msgid "invalid #-line"
+#~ msgstr "ugyldig #-linje"
+
+#~ msgid "Null character at %0 -- line ignored"
+#~ msgstr "Nultegn ved %0 - linje ignoreret"
+
+#~ msgid "INCLUDE at %0 not the only statement on the source line"
+#~ msgstr "INCLUDE ved %0 er ikke den eneste sætning på kildekodelinjen"
+
+#~ msgid "ASSIGNed FORMAT specifier is too small"
+#~ msgstr "ASSIGN'et FORMAT-angivelse er for lille"
+
+#~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry"
+#~ msgstr "SELECT CASE på CHARACTER-type (ved %0) er ikke understøttet - desværre"
+
+#~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)"
+#~ msgstr "SELECT (ved %0) har ens tilfælde -- tjek heltalsoverløb af CASEs"
+
+#~ msgid "ASSIGN to variable that is too small"
+#~ msgstr "ASSIGN til variabel der er for lille"
+
+#~ msgid "ASSIGNed GOTO target variable is too small"
+#~ msgstr "ASSIGN'et GOTO-målvariabel er for lille"
+
+#~ msgid "Local adjustable symbol `%A' at %0"
+#~ msgstr "Lokalt justerbart symbol '%A' ved %0"
+
+#~ msgid "data initializer on host with different endianness"
+#~ msgstr "datastartværdi på vært med anden endethed"
+
+#~ msgid "%s no longer supported -- try -fvxt"
+#~ msgstr "%s er ikke længere understøttet - prøv -fvxt"
+
+#~ msgid "%s no longer supported -- try -fno-vxt -ff90"
+#~ msgstr "%s er ikke længere understøttet - prøv -fno-vxt -ff90"
+
+#~ msgid "%s disabled, use normal debugging flags"
+#~ msgstr "%s deaktiveret, benyt normale fejlanalyseringstilvalg"
+
+#~ msgid "Print g77-specific compiler version info, run internal tests"
+#~ msgstr "Udskriv g77-specifik oversætterversioninfo, kør interne test"
+
+#~ msgid "Program is written in typical FORTRAN 66 dialect"
+#~ msgstr "Program er skrevet i typisk FORTRAN 66-dialekt"
+
+#~ msgid "Program is written in typical Unix f77 dialect"
+#~ msgstr "Program er skrevet i typisk Unix f77-dialekt"
+
+#~ msgid "Program does not use Unix-f77 dialectal features"
+#~ msgstr "Program benytter ikke Unix f77-dialektiske faciliteter"
+
+#~ msgid "Program is written in Fortran-90-ish dialect"
+#~ msgstr "Program er skrevet i Fortran 90-agtig dialekt"
+
+#~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements"
+#~ msgstr "Behandl lokale variable og COMMON-blokke som om de var nævnt i SAVE-sætninger"
+
+#~ msgid "Allow $ in symbol names"
+#~ msgstr "Tillad $ i symbolnavne"
+
+#~ msgid "f2c-compatible code need not be generated"
+#~ msgstr "f2c-kompatibel kode behøver ikke at blive genereret"
+
+#~ msgid "Unsupported; do not generate libf2c-calling code"
+#~ msgstr "Ikke-understøttet; generér ikke libf2c-kaldende kode"
+
+#~ msgid "Unsupported; affects code-generation of arrays"
+#~ msgstr "Ikke-understøttet; påvirker kodegenerering af tabeller"
+
+#~ msgid "Program is written in Fortran-90-ish free form"
+#~ msgstr "Program er skrevet i Fortran 90-agtig fri stil"
+
+#~ msgid "Warn about use of (only a few for now) Fortran extensions"
+#~ msgstr "Advar om brug af (i øjeblikket kun nogle få) Fortran-udvidelser"
+
+#~ msgid "Program is written in VXT (Digital-like) FORTRAN"
+#~ msgstr "Program er skrevet i VXT (Digital-agtig) FORTRAN"
+
+#~ msgid "Disallow all ugly features"
+#~ msgstr "Forbyd alle grimme faciliteter"
+
+# hollerith?
+#~ msgid "Hollerith and typeless constants not passed as arguments"
+#~ msgstr "Hollerith og typeløse konstanter overbringes ikke som parametre"
+
+#~ msgid "Allow ordinary copying of ASSIGN'ed vars"
+#~ msgstr "Tillad almindelig kopiering af ASSIGN'ede variable"
+
+# RETMIG: ?
+#~ msgid "Dummy array dimensioned to (1) is assumed-size"
+#~ msgstr "Dummy-tabel dimensioneret til (1) er antaget størrelse"
+
+#~ msgid "Trailing comma in procedure call denotes null argument"
+#~ msgstr "Afsluttende komma i procedurekald angiver nulparameter"
+
+#~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z"
+#~ msgstr "Tillad REAL(Z) og AIMAG(Z) givet DOUBLE COMPLEX Z"
+
+#~ msgid "Initialization via DATA and PARAMETER is type-compatible"
+#~ msgstr "Klargøring via DATA og PARAMETER er type-kompatible"
+
+#~ msgid "Allow INTEGER and LOGICAL interchangeability"
+#~ msgstr "Tillad INTEGER og LOGICAL på hinandens plads"
+
+#~ msgid "Print internal debugging-related info"
+#~ msgstr "Udskriv intern fejlanalyseringsrelateret info"
+
+#~ msgid "Initialize local vars and arrays to zero"
+#~ msgstr "Klargør lokale variable og tabeller til nul"
+
+#~ msgid "Backslashes in character/hollerith constants not special (C-style)"
+#~ msgstr "Omvendte skråstreger i tegn/hollerith-konstanter er ikke specielle (C-stil)"
+
+#~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs"
+#~ msgstr "Lad forenden emulere COMPLEX-beregninger for at undgå fejl"
+
+#~ msgid "Disable the appending of underscores to externals"
+#~ msgstr "Deaktivér tilføjelse af understreger bag på eksterne variable"
+
+#~ msgid "Never append a second underscore to externals"
+#~ msgstr "Tilføj aldrig en anden understreg til eksterne variable"
+
+#~ msgid "Intrinsics spelled as e.g. SqRt"
+#~ msgstr "Indbyggede staves som f.eks. SqRt"
+
+#~ msgid "Intrinsics in uppercase"
+#~ msgstr "Indbyggede staves med store bogstaver"
+
+#~ msgid "Intrinsics letters in arbitrary cases"
+#~ msgstr "Der skelnes ikke mellem små og store bogstaver i indbyggede"
+
+#~ msgid "Language keywords spelled as e.g. IOStat"
+#~ msgstr "Sprognøgleord staves som f.eks. IOStat"
+
+#~ msgid "Language keywords in uppercase"
+#~ msgstr "Sprognøgleord staves med store bogstaver"
+
+#~ msgid "Language keyword letters in arbitrary cases"
+#~ msgstr "Der skelnes ikke mellem små og store bogstaver i sprognøgleord"
+
+#~ msgid "Internally convert most source to uppercase"
+#~ msgstr "Konvertér det meste kildekode til store bogstaver internt"
+
+#~ msgid "Internally preserve source case"
+#~ msgstr "Bevar de store/små bogstaver i kildekoden internt"
+
+#~ msgid "Symbol names spelled in mixed case"
+#~ msgstr "Symbolnavne staves med en blanding af store og små bogstaver"
+
+#~ msgid "Symbol names in uppercase"
+#~ msgstr "Symbolnavne staves med store bogstaver"
+
+#~ msgid "Symbol names in lowercase"
+#~ msgstr "Symbolnavne staves med små bogstaver"
+
+#~ msgid "Program written in uppercase"
+#~ msgstr "Program skrives med store bogstaver"
+
+#~ msgid "Program written in lowercase"
+#~ msgstr "Program skrives med små bogstaver"
+
+#~ msgid "Program written in strict mixed-case"
+#~ msgstr "Program skrives med streng blanding af store/små bogstaver"
+
+#~ msgid "Compile as if program written in uppercase"
+#~ msgstr "Oversæt som hvis programmet var skrevet med store bogstaver"
+
+#~ msgid "Compile as if program written in lowercase"
+#~ msgstr "Oversæt som hvis programmet var skrevet med små bogstaver"
+
+#~ msgid "Preserve all spelling (case) used in program"
+#~ msgstr "Bevar al stavning (store/små bogstaver) benyttet i programmet"
+
+#~ msgid "Delete libU77 intrinsics with bad interfaces"
+#~ msgstr "Slet libU77-indbyggede med dårlige grænseflader"
+
+#~ msgid "Disable libU77 intrinsics with bad interfaces"
+#~ msgstr "Deaktivér libU77-indbyggede med dårlige grænseflader"
+
+#~ msgid "Hide libU77 intrinsics with bad interfaces"
+#~ msgstr "Skjul libU77-indbyggede med dårlige grænseflader"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Slet f2c-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Deaktivér f2c-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Skjul f2c-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Slet F90-understøttelse af ikke-FORTRAN-77-indbyggede "
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Deaktivér F90-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Skjul F90-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports"
+#~ msgstr "Slet g77-understøttelse af ikke-FORTRAN-77-indbyggede "
+
+#~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "Deaktivér g77-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "Skjul g77-understøttelse af ikke-FORTRAN-77-indbyggede"
+
+#~ msgid "Delete MIL-STD 1753 intrinsics"
+#~ msgstr "Slet MIL-STD 1753-indbyggede"
+
+#~ msgid "Disable MIL-STD 1753 intrinsics"
+#~ msgstr "Deaktivér MIL-STD 1753-indbyggede"
+
+#~ msgid "Hide MIL-STD 1753 intrinsics"
+#~ msgstr "Skjul MIL-STD 1753-indbyggede"
+
+#~ msgid "Delete libU77 intrinsics"
+#~ msgstr "Slet libU77-indbyggede"
+
+#~ msgid "Disable libU77 intrinsics"
+#~ msgstr "Deaktivér libU77-indbyggede"
+
+#~ msgid "Hide libU77 intrinsics"
+#~ msgstr "Skjul libU77-indbyggede"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Slet VXT FORTRAN-understøttelse af ikke-FORTRAN-77-indbyggede "
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Deaktivér VXT FORTRAN-understøttelse af ikke-FORTRAN-77-indbyggede "
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Skjul VXT FORTRAN-understøttelse af ikke-FORTRAN-77-indbyggede "
+
+#~ msgid "Treat initial values of 0 like non-zero values"
+#~ msgstr "Behandl begyndelsesværdier på 0 som værdier forskellig fra nul"
+
+#~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)"
+#~ msgstr "Udsend speciel fejlanalyseringsinfo for COMMON og EQUIVALENCE (deaktiveret)"
+
+#~ msgid "Take at least one trip through each iterative DO loop"
+#~ msgstr "Tag i det mindste et skridt gennem hver DO-løkke"
+
+#~ msgid "Print names of program units as they are compiled"
+#~ msgstr "Udskriv navne på programenheder efterhånden som de oversættes"
+
+#~ msgid "Disable fatal diagnostics about inter-procedural problems"
+#~ msgstr "Deaktivér fatale diagnosticeringer af interprocedurale procedurer"
+
+#~ msgid "Make prefix-radix non-decimal constants be typeless"
+#~ msgstr "Gør præfiks-grundtal ikke-decimale konstanter typeløse"
+
+#~ msgid "Generate code to check subscript and substring bounds"
+#~ msgstr "Generér kode for at tjekke indekserings- og understrengsgrænser"
+
+#~ msgid "Fortran-specific form of -fbounds-check"
+#~ msgstr "Fortran-specifik form for -fbounds-check"
+
+#~ msgid "Disable warnings about inter-procedural problems"
+#~ msgstr "Deaktivér advarsler om interprocedurale problemer"
+
+#~ msgid "Warn about constructs with surprising meanings"
+#~ msgstr "Advar om konstruktioner med overraskende betydninger"
+
+#~ msgid "Add a directory for INCLUDE searching"
+#~ msgstr "Tilføj et katalog til INCLUDE-søgning"
+
+#~ msgid "Set the maximum line length"
+#~ msgstr "Angiv den maksimale linjelængde"
+
+#~ msgid "Missing first operand for binary operator at %0"
+#~ msgstr "Manglende første operand for binær operator ved %0"
+
+#~ msgid "Zero-length character constant at %0"
+#~ msgstr "Nul-længde tegnkonstant ved %0"
+
+#~ msgid "Invalid token at %0 in expression or subexpression at %1"
+#~ msgstr "Ugyldigt symbol ved %0 i udtryk eller underudtryk ved %1"
+
+#~ msgid "Missing operand for operator at %1 at end of expression at %0"
+#~ msgstr "Manglende operand for operator ved %1 i slutningen af udtryk ved %0"
+
+#~ msgid "Label %A already defined at %1 when redefined at %0"
+#~ msgstr "Etiket %A er allerede defineret ved %1 ved omdefinering ved %0"
+
+#~ msgid "Unrecognized character at %0 [info -f g77 M LEX]"
+#~ msgstr "Ukendt tegn ved %0 [info -f g77 M LEX]"
+
+#~ msgid "Label definition %A at %0 on empty statement (as of %1)"
+#~ msgstr "Etiketdefinition %A ved %0 i tom sætning (ved %1)"
+
+#~ msgid "Invalid first character at %0 [info -f g77 M LEX]"
+#~ msgstr "Ugyldig første tegn ved %0 [info -f g77 M LEX]"
+
+#~ msgid "Line too long as of %0 [info -f g77 M LEX]"
+#~ msgstr "Linje for lang ved %0 [info -f g77 M LEX]"
+
+#~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]"
+#~ msgstr "Tegn der ikke er tal ved %0 i etiketfelt [info -f g77 M LEX]"
+
+#~ msgid "Label number at %0 not in range 1-99999"
+#~ msgstr "Etiketnummer ved %0 er ikke i intervallet 1-99999"
+
+#~ msgid "At %0, '!' and '/*' are not valid comment delimiters"
+#~ msgstr "Ved %0 er '!' og '/*' ikke gyldige kommentarafgrænsninger"
+
+#~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]"
+#~ msgstr "Fortsættelsesindikator ved %0 skal optræde i kolonne 6 [info -f g77 M LEX]"
+
+#~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]"
+#~ msgstr "Etiket ved %0 er ugyldig med fortsættelseslinjeindikator ved %1 [info -f g77 M LEX]"
+
+#~ msgid "Character constant at %0 has no closing apostrophe at %1"
+#~ msgstr "Tenkonstant ved %0 har ingen afsluttende apostrof ved %1"
+
+#~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1"
+#~ msgstr "Hollerith-konstant ved %0 angiver %A flere tegn end der optræder ved %1"
+
+#~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1"
+#~ msgstr "Afsluttende parantes ved %0 behøves for at svare til åben parantes ved %1"
+
+#~ msgid "Integer at %0 too large"
+#~ msgstr "Heltal ved %0 for stort"
+
+#~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'"
+#~ msgstr "Punktum ved %0 efterfølges ikke af cifre til kommatal eller af 'NOT.', 'TRUE.' eller 'FALSE.'"
+
+#~ msgid "Missing close-period between `.%A' at %0 and %1"
+#~ msgstr "Manglende afsluttende punktum mellem '.%A' ved %0 og %1"
+
+#~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field"
+#~ msgstr "Ugyldig eksponent ved %0 for reel konstant ved %1; ikke-ciffer '%A' i eksponentfelt"
+
+#~ msgid "Missing value at %1 for real-number exponent at %0"
+#~ msgstr "Manglende værdi ved %1 for reel eksponent ved %0"
+
+#~ msgid "Expected binary operator between expressions at %0 and at %1"
+#~ msgstr "Forventede binær operator mellem udtryk ved %0 og ved %1"
+
+#~ msgid "Semicolon at %0 is an invalid token"
+#~ msgstr "Semikolon ved %0 er et ugyldigt symbol"
+
+#~ msgid "Extraneous comma in FORMAT statement at %0"
+#~ msgstr "Ekstra komma i FORMAT-sætning ved %0"
+
+#~ msgid "Missing comma in FORMAT statement at %0"
+#~ msgstr "Manglende komma i FORMAT-sætning ved %0"
+
+#~ msgid "Spurious sign in FORMAT statement at %0"
+#~ msgstr "Mystisk fortegn i FORMAT-sætning ved %0"
+
+#~ msgid "Spurious number in FORMAT statement at %0"
+#~ msgstr "Mystisk tal i FORMAT-sætning ved %0"
+
+#~ msgid "Spurious text trailing number in FORMAT statement at %0"
+#~ msgstr "Mystisk tekstafsluttende tal i FORMAT-sætning ved %0"
+
+#~ msgid "Unrecognized FORMAT specifier at %0"
+#~ msgstr "Ukendt FORMAT-angivelse ved %0"
+
+#~ msgid "Missing close-parenthese(s) in FORMAT statement at %0"
+#~ msgstr "Manglende afsluttende parantes i FORMAT-sætning ved %0"
+
+#~ msgid "Missing number following period in FORMAT statement at %0"
+#~ msgstr "Manglende tal efter punktum i FORMAT-sætning ved %0"
+
+#~ msgid "Missing number following `E' in FORMAT statement at %0"
+#~ msgstr "Manglende tal efter 'E' i FORMAT-sætning ved %0"
+
+#~ msgid "Spurious trailing comma preceding terminator at %0"
+#~ msgstr "Mystisk afsluttende komma før afslutningssymbol ved %0"
+
+#~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)"
+#~ msgstr "Angiv OPERATOR i stedet for ASSIGNMENT ved %0 for INTERFACE-sætning der ikke angiver tildelingsoperatoren (=)"
+
+#~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)"
+#~ msgstr "Angiv ASSIGNMENT i stedet for OPERATOR ved %0 for INTERFACE-sætning der angiver tildelingsoperatoren (=)"
+
+#~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects"
+#~ msgstr "Kan ikke angive =klargøringsudtryk ved %0 medmindre '::' optræder før listen af objekter"
+
+#~ msgid "Reference to label at %1 inconsistent with its definition at %0"
+#~ msgstr "Reference til etiket ved %1 er inkonsistent med dens definition ved %0"
+
+#~ msgid "Reference to label at %1 inconsistent with earlier reference at %0"
+#~ msgstr "Reference til etiket ved %1 er inkonsistent med tidligere reference ved %0"
+
+#~ msgid "DO-statement reference to label at %1 follows its definition at %0"
+#~ msgstr "DO-sætningsreference til etiket ved %1 følger dens definition ved %0"
+
+#~ msgid "Reference to label at %1 is outside block containing definition at %0"
+#~ msgstr "Reference til etiket ved %1 er uden for blok der indeholder definitionen ved %0"
+
+#~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1"
+#~ msgstr "DO-sætningsreferencer til etiket ved %0 og %2 adskilt af uafsluttet blok der begynder ved %1"
+
+#~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1"
+#~ msgstr "DO-sætningsreference til etiket ved %0 og etiketdefinition ved %2 adskilt af uafsluttet blok der begynder ved %1"
+
+#~ msgid "Label definition at %0 invalid on this kind of statement"
+#~ msgstr "Etiketdefinition ved %0 er ugyldig ved denne slags sætning"
+
+#~ msgid "Statement at %0 invalid in this context"
+#~ msgstr "Sætning ved %0 er ugyldig i denne kontekst"
+
+#~ msgid "Statement at %0 invalid in context established by statement at %1"
+#~ msgstr "Sætning ved %0 er ugyldig i den kontekst der er etableret af sætning ved %1"
+
+#~ msgid "Statement at %0 must specify construct name specified at %1"
+#~ msgstr "Sætning ved %0 skal angive konstruktionsnavn angivet ved %1"
+
+#~ msgid "Construct name at %0 superfluous, no construct name specified at %1"
+#~ msgstr "Kontruktionsnavn ved %0 er overflødigt, intet kontruktionsnavn angivet ved %1"
+
+#~ msgid "Construct name at %0 not the same as construct name at %1"
+#~ msgstr "Kontruktionsnavn ved %0 er ikke det samme som konstruktionsnavn ved %1"
+
+#~ msgid "Construct name at %0 does not match construct name for any containing DO constructs"
+#~ msgstr "Kontruktionsnavn ved %0 passer ikke med konstruktionsnavn for nogen indeholdende DO-konstruktioner"
+
+#~ msgid "Label definition missing at %0 for DO construct specifying label at %1"
+#~ msgstr "Etiketdefinition mangler ved %0 for DO-konstruktion der angiver etiket ved %1"
+
+#~ msgid "Statement at %0 follows ELSE block for IF construct at %1"
+#~ msgstr "Sætning ved %0 følger ELSE-blok for IF-konstruktion ved %1"
+
+#~ msgid "No label definition for FORMAT statement at %0"
+#~ msgstr "Ingen etiketdefinition for FORMAT-sætning ved %0"
+
+#~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1"
+#~ msgstr "Anden forekomst af ELSE WHERE ved %0 inden i WHERE ved %1"
+
+#~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1"
+#~ msgstr "END-sætning ved %0 mangler nøgleordet '%A' som er påkrævet for interne eller modul-procedurer afgrænset af %1"
+
+#~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment"
+#~ msgstr "MODULE PROCEDURE-sætning ved %0 er ikke tilladt da INTERFACE ved %1 ikke angiver generisk navn, operator eller tildeling"
+
+#~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1"
+#~ msgstr "BLOCK DATA-navn ved %0 er overflødigt, intet navn angivet ved %1"
+
+#~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1"
+#~ msgstr "Programnavn ved %0 er overflødigt, ingen PROGRAM-sætning angivet ved %1"
+
+#~ msgid "Program unit name at %0 not the same as name at %1"
+#~ msgstr "Programenhedsnavn ved %0 er ikke det samme som navn ved %1"
+
+#~ msgid "Type name at %0 not the same as name at %1"
+#~ msgstr "Typenavn ved %0 er ikke det samme som navn ved %1"
+
+#~ msgid "End of source file before end of block started at %0"
+#~ msgstr "Slutning på kildekodefil før slutning af blok begyndt ved %0"
+
+#~ msgid "Undefined label, first referenced at %0"
+#~ msgstr "Ikke-defineret etiket, første reference er ved %0"
+
+#~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0"
+#~ msgstr "SAVE-sætning eller -egenskab ved %1 kan ikke angives sammen med SAVE-sætning eller -egenskab ved %0"
+
+#~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0"
+#~ msgstr "PUBLIC- eller PRIVATE-sætning ved %1 kan ikke angives sammen med PUBLIC- eller PRIVATE-sætning ved %0"
+
+#~ msgid "RETURN statement at %0 invalid within a main program unit"
+#~ msgstr "RETURN-sætning ved %0 ugyldig inden i en hovedprogramenhed"
+
+#~ msgid "Alternate return specifier at %0 invalid within a main program unit"
+#~ msgstr "Alternativ returangivelse ved %0 er ugyldig inden i en hovedprogramenhed"
+
+#~ msgid "Alternate return specifier at %0 invalid within a function"
+#~ msgstr "Alternativ returangivelse ved %0 er ugyldig inden i en funktion"
+
+#~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module"
+#~ msgstr "Tilgangsangivelse eller PRIVATE-sætning ved %0 er ugyldig for nedarvet typedefinition som ikke er i specifikationsdelen af et modul"
+
+#~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements"
+#~ msgstr "Tilgangsangivelse ved %0 skal umiddelbart følge nedarvet type-sætning ved %1 uden nogen mellemliggende sætninger"
+
+#~ msgid "No components specified as of %0 for derived-type definition beginning at %1"
+#~ msgstr "Ingen komponenter angivet ved %0 for nedarvet typedefinition begyndende ved %1"
+
+#~ msgid "No components specified as of %0 for structure definition beginning at %1"
+#~ msgstr "Ingen komponenter angivet ved %0 for strukturdefinition begyndende ved %1"
+
+#~ msgid "Missing structure name for outer structure definition at %0"
+#~ msgstr "Manglende strukturnavn for ydre strukturdefinition ved %0"
+
+#~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead"
+#~ msgstr "Feltnavne ved %0 for ydre strukturdefinition - angiv dem i en efterfølgende RECORD-sætning i stedet"
+
+#~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1"
+#~ msgstr "Manglende feltnavne for strukturdefinition ved %0 inden i strukturdefinition ved %1"
+
+#~ msgid "No components specified as of %0 for map beginning at %1"
+#~ msgstr "Ingen komponenter angivet ved %0 for map begyndende ved %1"
+
+#~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required"
+#~ msgstr "Nul eller en map angivet ved %0 for union begyndende ved %1 - mindst to er påkrævet"
+
+#~ msgid "Missing %A specifier in statement at %0"
+#~ msgstr "Manglende %A-angivelse i sætning ved %0"
+
+#~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O"
+#~ msgstr "Elementer i I/O-liste begyndende ved %0 er ugyldigt for navnlistedirigeret I/O"
+
+#~ msgid "Conflicting I/O control specifications at %0 and %1"
+#~ msgstr "Modstridende I/O-kontrolangivelser ved %0 og %1"
+
+#~ msgid "No UNIT= specifier in I/O control list at %0"
+#~ msgstr "Inge UNIT=-angivelse i I/O-kontrolliste ved %0"
+
+#~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list"
+#~ msgstr "Specifikation ved %0 kræver ADVANCE='NO'-specifikation i samme I/O-kontrolliste"
+
+#~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list"
+#~ msgstr "Specifikation ved %0 kræver eksplicit FMT=-specifikation i samme I/O-kontrolliste"
+
+#~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1"
+#~ msgstr "Anden forekomst af CASE DEFAULT ved %0 inden i SELECT CASE ved %1"
+
+#~ msgid "Duplicate or overlapping case values/ranges at %0 and %1"
+#~ msgstr "CASE-værdi optræder mere end én gang eller intervaller overlapper ved %0 og %1"
+
+#~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1"
+#~ msgstr "Type og/eller form for type-parameter konflikt mellem CASE-værdi eller værdi i interval ved %0 og SELECT CASE ved %1"
+
+#~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement"
+#~ msgstr "Intervalangivelse ved %0 er ugyldig for CASE-sætning inden i SELECT CASE-sætning med logisk type"
+
+#~ msgid "Fortran 90 feature at %0 unsupported"
+#~ msgstr "Fortran 90-facilitet ved %0 er ikke understøttet"
+
+#~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]"
+#~ msgstr "Ugyldig erklæring af reference til symbolet '%A' ved %0 (først set ved %1)"
+
+#~ msgid "Null element at %0 for array reference at %1"
+#~ msgstr "Nulelement ved %0 for tabelreference ved %1"
+
+#~ msgid "Too few elements (%A missing) as of %0 for array reference at %1"
+#~ msgstr "For få elementer (%A mangler) ved %0 for tabelreference ved %1"
+
+#~ msgid "Too many elements as of %0 for array reference at %1"
+#~ msgstr "For mange elementer ved %0 for tabelreference ved %1"
+
+#~ msgid "Missing colon as of %0 in substring reference for %1"
+#~ msgstr "Manglende kolon ved %0 i understrengsreference for %1"
+
+#~ msgid "Invalid use at %0 of substring operator on %1"
+#~ msgstr "Ugyldig brug ved %0 af understrengsoperator på %1"
+
+#~ msgid "Substring begin/end point at %0 out of defined range"
+#~ msgstr "Understrengs begyndelses-/slutpunkt ved %0 er uden for det definerede interval"
+
+#~ msgid "Array element value at %0 out of defined range"
+#~ msgstr "Tabelelementværdi ved %0 er uden for det definerede interval"
+
+#~ msgid "Expression at %0 has incorrect data type or rank for its context"
+#~ msgstr "Udtryk ved %0 har forkert datatype eller rang for dets kontekst"
+
+#~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)"
+#~ msgstr "Division med nul ved %0 (IEEE understøttes ikke endnu)"
+
+#~ msgid "%A step count known to be 0 (zero) at %0"
+#~ msgstr "%A-skridttæller vides at være nul ved %0"
+
+#~ msgid "%A end value plus step count known to overflow at %0"
+#~ msgstr "%A-slutværdi plus skridttæller vides at forårsage overløb ved %0"
+
+#~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0"
+#~ msgstr "%A-begyndelses-, slut- og skridttæller-værdier vides at resultere i implementeringsafhængig opførsel pga. overløb i mellemregninger ved %0"
+
+#~ msgid "%A begin, end, and step-count values known to result in no iterations at %0"
+#~ msgstr "%A-begyndelses-, slut- og skridttæller-værdier vides at resultere i at der ikke foretages nogen iterationer ved %0"
+
+#~ msgid "Type disagreement between expressions at %0 and %1"
+#~ msgstr "Typekonflikt mellem udtryk ved %0 og %1"
+
+#~ msgid "No specification for implied-DO iterator `%A' at %0"
+#~ msgstr "Ingen angivelse af underforstået DO-iterator '%A' ved %0"
+
+#~ msgid "Gratuitous parentheses surround implied-DO construct at %0"
+#~ msgstr "Ekstra paranteser omkring underforstået DO-konstruktion ved %0"
+
+#~ msgid "Zero-size specification invalid at %0"
+#~ msgstr "Nulstørrelses angivelse ugyldig ved %0"
+
+#~ msgid "Zero-size array at %0"
+#~ msgstr "Nulstørrelsestabel ved %0"
+
+#~ msgid "Target machine does not support complex entity of kind specified at %0"
+#~ msgstr "Målarkitekturen understøtter ikke den form for kompleks enhed der er angivet ved %0"
+
+#~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0"
+#~ msgstr "Målarkitekturen understøtter ikke DOUBLE COMPLEX, som angivet ved %0"
+
+#~ msgid "Attempt to raise constant zero to a power at %0"
+#~ msgstr "Forsøg at opløfte konstant nul til en potens af %0"
+
+#~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C"
+#~ msgstr "Reference til generisk indbygget '%A' ved %0 kunne være for at danne %B eller %C"
+
+#~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]"
+#~ msgstr "Tvetydig brug af indbygget '%A' ved %0 [info -f g77 M CMPAMBIG]"
+
+#~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]"
+#~ msgstr "Indbygget '%A' refereret til som %B ved %0, som %C ved %1 [info -f g77 M EXPIMP]"
+
+#~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]"
+#~ msgstr "Samme navn '%A' benyttet for %B ved %0 og %C ved %1 [info -f g77 M INTGLOB]"
+
+#~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0"
+#~ msgstr "Eksplicit typeerklæring for indbygget '%A' er i modstrid med kald ved %0"
+
+#~ msgid "Unable to open INCLUDE file `%A' at %0"
+#~ msgstr "Kunne ikke åbne INCLUDE-filen '%A' ved %0"
+
+#~ msgid "Null argument at %0 for statement function reference at %1"
+#~ msgstr "Nulparameter ved %0 for sætningsfunktionsreference ved %1"
+
+#~ msgid "Null argument at %0 for procedure invocation at %1"
+#~ msgstr "Nulparameter ved %0 for procedurekald ved %1"
+
+#~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1"
+#~ msgstr "%A for få parametre (begyndende ved dummy-parameter '%B') ved %0 for sætningsfunktionsreference ved %1"
+
+#~ msgid "%A too many arguments as of %0 for statement function reference at %1"
+#~ msgstr "%A for mange parametre ved %0 for sætningsfunktionsreference ved %1"
+
+#~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0"
+#~ msgstr "Tabel angivet ved %1 for dummy-parameter '%A' i sætningsfunktionsreference ved %1"
+
+#~ msgid "Unsupported FORMAT specifier at %0"
+#~ msgstr "Ikke-understøttet FORMAT-angivelse ved %0"
+
+#~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported"
+#~ msgstr "Variabel-udtryks FORMAT-angivelse ved %0 - ikke-understøttet"
+
+#~ msgid "Unsupported VXT statement at %0"
+#~ msgstr "Ikke-understøttet VXT-sætning ved %0"
+
+#~ msgid "Attempt to specify second initial value for `%A' at %0"
+#~ msgstr "Forsøg på at angive anden startværdi for '%A' ved %0"
+
+#~ msgid "Too few initial values in list of initializers for `%A' at %0"
+#~ msgstr "For få startværdier i klargøringsliste for '%A' ved %0"
+
+#~ msgid "Too many initial values in list of initializers starting at %0"
+#~ msgstr "For mange startværdier i klargøringsliste ved %0"
+
+#~ msgid "Array or substring specification for `%A' out of range in statement at %0"
+#~ msgstr "Tabel- eller understrengsangivelse for '%A' er uden for det gyldige interval i sætning ved %0"
+
+#~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0"
+#~ msgstr "Tabelindeks nr. %B er uden for det gyldig interval ved klargøring af '%A' i sætning ved %0"
+
+#~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "Underforstået do-løkkeskridttæller på nul for iterationsvariablen '%A' i sætning ved %0"
+
+#~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "Underforstået do-løkkegentagelsestæller på nul for iterationsvariablen '%A' i sætning ved %0"
+
+#~ msgid "Not an integer constant expression in implied do-loop in statement at %0"
+#~ msgstr "Ikke et heltalskonstantudtryk i underforstået do-løkke i sætning ved %0"
+
+#~ msgid "Attempt to specify second initial value for element of `%A' at %0"
+#~ msgstr "Forsøg på at angive anden startvædi for element af '%A' ved %0"
+
+#~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0"
+#~ msgstr "Forsøg på at anvende EQUIVALENCE mellem de almene områder '%A' og '%B' ved %0"
+
+#~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions"
+#~ msgstr "Kan ikke placere '%A' som angivet af EQUIVALENCE pga. justeringsrestriktioner"
+
+#~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'"
+#~ msgstr "Forkerte EQUIVALENCE-krav for placering af '%A' ved både %C og %D bytes afstand fra '%B'"
+
+#~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement"
+#~ msgstr "Tabel- eller understrengsspecifikation for '%A' er uden for det gyldige interval i EQUIVALENCE-sætning"
+
+#~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement"
+#~ msgstr "Understreng af ikke-CHARACTER enhed '%A' i EQUIVALENCE-sætning"
+
+#~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement"
+#~ msgstr "Tabelreference til skalar variabel '%A' i EQUIVALENCE-sætning"
+
+#~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'"
+#~ msgstr "Tabelindeks nr. %B er uden for det gyldige interval for EQUIVALENCE '%A'"
+
+#~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'"
+#~ msgstr "Forsøg på at udvide COMMON-område over dets begyndelsespunkt vha. EQUIVALENCE '%A'"
+
+#~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "For få elementer i reference til tabllen '%A' i EQUIVALENCE-sætning"
+
+#~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "For mange elementer i reference til tabllen '%A' i EQUIVALENCE-sætning"
+
+#~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'"
+#~ msgstr "Blandede CHARACTER- og ikke-CHARACTER-typer vha. COMMON/EQUIVALENCE - f.eks. '%A' og '%B'"
+
+#~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram"
+#~ msgstr "Returværdi `%A' for FUNCTION ved %0 refereres ikke i underprogram"
+
+#~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1"
+#~ msgstr "Almen blok '%A' er SAVEd, eksplicit eller implicit, ved %0, men ikke ved %1"
+
+#~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1"
+#~ msgstr "Almen blok '%A' er %B %D i længde ved %0, men %C %E ved %1"
+
+#~ msgid "Blank common initialized at %0"
+#~ msgstr "Tom almen tildelt startværdi ved %0"
+
+#~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC"
+#~ msgstr "Indbygget '%A' er overbragt som faktisk parameter ved %0, men ikke eksplicit erklæret INTRINSIC"
+
+#~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL"
+#~ msgstr "Ekstern procedure '%A' er overbragt som faktisk parameter ved %0, men ikke eksplicit erklæret EXTERNAL"
+
+#~ msgid "Character `%A' (for example) is upper-case in symbol name at %0"
+#~ msgstr "Tegn '%A' (f.eks.) er et stort bogstav i symbolnavn ved %0"
+
+#~ msgid "Character `%A' (for example) is lower-case in symbol name at %0"
+#~ msgstr "Tegn '%A' (f.eks.) er et lille bogstav i symbolnavn ved %0"
+
+#~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0"
+#~ msgstr "Tegn '%A' følges ikke af lille bogstav i symbolnavn ved %0"
+
+#~ msgid "Initial character `%A' is lower-case in symbol name at %0"
+#~ msgstr "Begyndelsestegn '%A' er et lille bogstav i symbolnavn ved %0"
+
+#~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved"
+#~ msgstr "NAMELIST er ikke tilstrækkeligt understøttet af kørselsbiblioteket for kildefiler med store/små bogstaver bevaret"
+
+#~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0"
+#~ msgstr "Indlejret %%-konstruktion (%%VAL, %%REF eller %%DESCR) ved %0"
+
+#~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1"
+#~ msgstr "Sætning ved %0 er ugyldig  i BLOCK DATA-programenhed ved %1"
+
+#~ msgid "Truncating characters on right side of character constant at %0"
+#~ msgstr "Fjerner tegn på den højre side af tegnkonstant ved %0"
+
+#~ msgid "Truncating characters on right side of hollerith constant at %0"
+#~ msgstr "Fjerner tegn på den højre side af hollerith-konstant ved %0"
+
+#~ msgid "Truncating non-zero data on left side of numeric constant at %0"
+#~ msgstr "Fjerner data der ikke er nul, på den venstre side af numerisk konstant ved %0"
+
+#~ msgid "Truncating non-zero data on left side of typeless constant at %0"
+#~ msgstr "Fjerner data der ikke er nul, på den venstre side af typeløs konstant ved %0"
+
+#~ msgid "Typeless constant at %0 too large"
+#~ msgstr "Typeløs konstant ved %0 er for stor"
+
+#~ msgid "First-column ampersand continuation at %0"
+#~ msgstr "Førstekolonne og-tegnsfortsættelse ved %0"
+
+#~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Globalt navn '%A' defineret ved %0 er allerede defineret ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Globalt navn '%A' er %B ved %0, men er %C ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Globalt navn '%A' ved %0 har anden type ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "For %B parameter overbragt til '%A' ved %0 mod definitionen ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "For %B parametre til '%A' ved %0 mod kald ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Parameter nr. %B for '%A' er %C ved %0, men er %D ved %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Array `%A' at %0 is too large to handle"
+#~ msgstr "Tabellen '%A' ved %0 er for stor til at håndtere"
+
+#~ msgid "Statement function `%A' defined at %0 is not used"
+#~ msgstr "Sætningsfunktion '%A' defineret ved %0, men er ikke brugt"
+
+#~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]"
+#~ msgstr "Indbygget '%A', kaldt ved %0, vides ikke være år 2000-sikker [info -f g77 M Y2KBAD]"
+
+#~ msgid "Internal compiler error -- cannot perform operation"
+#~ msgstr "Intern oversætterfejl - kan ikke udføre operation"
+
+#~ msgid "In unknown kind"
+#~ msgstr "I ukendt ting"
+
+#~ msgid "In entity"
+#~ msgstr "I enheden"
+
+#~ msgid "In function"
+#~ msgstr "I funktionen"
+
+#~ msgid "In subroutine"
+#~ msgstr "I underrutinen"
+
+#~ msgid "In program"
+#~ msgstr "I programmet"
+
+#~ msgid "In block-data unit"
+#~ msgstr "I blokdataenheden"
+
+#~ msgid "In common block"
+#~ msgstr "I den almene blok"
+
+#~ msgid "In construct"
+#~ msgstr "I konstruktionen"
+
+#~ msgid "In namelist"
+#~ msgstr "I navnelisten"
+
+#~ msgid "In anything"
+#~ msgstr "I et eller andet"
+
+#~ msgid "internal error in check-init: tree code not implemented: %s"
+#~ msgstr "intern fejl i check-init: trækode ikke implementeret: %s"
+
+#~ msgid "final field '%s' may not have been initialized"
+#~ msgstr "slutfeltet '%s' bliver måske ikke klargjort"
+
+#~ msgid "internal error - too many interface type"
+#~ msgstr "intern fejl - for mange grænsefladetyper"
+
+#~ msgid "bad method signature"
+#~ msgstr "ugyldig metodesignatur"
+
+#~ msgid "misplaced ConstantValue attribute (not in any field)"
+#~ msgstr "forkert placeret ConstantValue-egenskab (ikke i noget felt)"
+
+#~ msgid "duplicate ConstantValue attribute for field '%s'"
+#~ msgstr "mere end én ConstantValue-egenskab for feltet '%s'"
+
+#~ msgid "ConstantValue attribute of field '%s' has wrong type"
+#~ msgstr "ConstantValue-egenskaben for feltet '%s' har forkert type"
+
+#~ msgid "field '%s' not found in class"
+#~ msgstr "feltet '%s' blev ikke fundet i klassen"
+
+#~ msgid "abstract method in non-abstract class"
+#~ msgstr "abstrakt metode i ikke-abstrakt klasse"
+
+#~ msgid "non-static method '%s' overrides static method"
+#~ msgstr "ikke-statisk metode '%s' overskriver statisk metode"
+
+#~ msgid "In %s: overlapped variable and exception ranges at %d"
+#~ msgstr "I %s: overlappende variabel- og undtagelsesintervaller ved %d"
+
+#~ msgid "bad type in parameter debug info"
+#~ msgstr "ugyldig type i parameterfejlanalyseringsinfo"
+
+#~ msgid "bad PC range for debug info for local `%s'"
+#~ msgstr "ugyldig PC-interval for fejlanalyseringsinfo for lokal '%s'"
+
+#~ msgid "stack underflow - dup* operation"
+#~ msgstr "stakunderløb - dup*-operation"
+
+#~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'"
+#~ msgstr "reference '%s' er tvetydig: den optræder i grænsefladen '%s' og grænsefladen '%s'"
+
+#~ msgid "field `%s' not found"
+#~ msgstr "feltet '%s' ikke fundet"
+
+#~ msgid "ret instruction not implemented"
+#~ msgstr "ret-instruktion ikke implementeret"
+
+#~ msgid "method '%s' not found in class"
+#~ msgstr "metoden '%s' ikke fundet i klassen"
+
+#~ msgid "failed to find class '%s'"
+#~ msgstr "kunne ikke finde klassen '%s'"
+
+#~ msgid "class '%s' has no method named '%s' matching signature '%s'"
+#~ msgstr "klassen '%s' har ingen metode ved navn '%s' der passer med signaturen '%s'"
+
+#~ msgid "invokestatic on non static method"
+#~ msgstr "invokestatic på en ikke-statisk metode"
+
+#~ msgid "invokestatic on abstract method"
+#~ msgstr "invokestatic på en abstrakt metode"
+
+#~ msgid "invoke[non-static] on static method"
+#~ msgstr "invoke[non-static] på en statisk metode"
+
+#~ msgid "missing field '%s' in '%s'"
+#~ msgstr "manglende felt '%s' i '%s'"
+
+#~ msgid "mismatching signature for field '%s' in '%s'"
+#~ msgstr "signatur passer ikke med feltet '%s' i '%s'"
+
+#~ msgid "assignment to final field `%s' not in field's class"
+#~ msgstr "tildeling til endeligt felt '%s' er ikke i feltets klasse"
+
+#~ msgid "assignment to final static field `%s' not in class initializer"
+#~ msgstr "tildeling til endeligt statisk felt '%s' er ikke i klassens klargøring"
+
+#~ msgid "assignment to final field `%s' not in constructor"
+#~ msgstr "tildeling til endeligt felt '%s' er ikke i konstruktionsfunktion"
+
+#~ msgid "can't expand %s"
+#~ msgstr "kan ikke udfolde %s"
+
+#~ msgid "invalid PC in line number table"
+#~ msgstr "ugyldig PC i linjetalstabel"
+
+#~ msgid "unreachable bytecode from %d to before %d"
+#~ msgstr "kan ikke nå bytekode fra %d til før %d"
+
+#~ msgid "unreachable bytecode from %d to the end of the method"
+#~ msgstr "kan ikke nå bytekode fra %d til slutningen af metoden"
+
+#~ msgid "unrecogized wide sub-instruction"
+#~ msgstr "ukendt bred underinstruktion"
+
+#~ msgid "source file for class `%s' is newer than its matching class file.  Source file `%s' used instead"
+#~ msgstr "kildekodefilen for klassen '%s' er nyere end dens tilsvarende klassefil; kildekodefilen '%s' benyttet i stedet"
+
+#~ msgid "bad string constant"
+#~ msgstr "ugyldig strengkonstant"
+
+#~ msgid "bad value constant type %d, index %d"
+#~ msgstr "ugyldig værdikonstanttype %d, indeks %d"
+
+#~ msgid "can't reopen %s"
+#~ msgstr "kan ikke genåbne %s"
+
+#~ msgid "can't close %s"
+#~ msgstr "kan ikke lukke %s"
+
+#~ msgid "cannot find file for class %s"
+#~ msgstr "kan ikke finde filen for klassen %s"
+
+#~ msgid "not a valid Java .class file"
+#~ msgstr "ikke en gyldig Java .class-fil"
+
+#~ msgid "error while parsing constant pool"
+#~ msgstr "fejl ved tolkning af konstant område"
+
+#~ msgid "error in constant pool entry #%d\n"
+#~ msgstr "fejl i konstantområdelement nr. %d\n"
+
+#~ msgid "reading class %s for the second time from %s"
+#~ msgstr "læser klassen %s for anden gang fra %s"
+
+#~ msgid "error while parsing fields"
+#~ msgstr "fejl ved tolkning af felter"
+
+#~ msgid "error while parsing methods"
+#~ msgstr "fejl ved tolkning af metoder"
+
+#~ msgid "error while parsing final attributes"
+#~ msgstr "fejl ved tolkning af endelige egenskaber"
+
+#~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute.  This generally means that your classpath is incorrectly set.  Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath"
+#~ msgstr "det 'java.lang.Object' som blev fundet i '%s' havde ikke den specielle nullængdes egenskab 'gnu.gcj.gcj-compiled'. Dette betyder som regel at din klassesti er angivet forkert. Prøv 'info gcj \"Input Options\"' for at se en infoside der beskriver hvordan man angiver klassestien"
+
+#~ msgid "missing Code attribute"
+#~ msgstr "manglende Code-egenskab"
+
+#~ msgid "source file seen twice on command line and will be compiled only once"
+#~ msgstr "kildekodefil angivet to gange i kommandolinjen og vil kun blive oversat én gang"
+
+#~ msgid "no input file specified"
+#~ msgstr "ingen inddatafiler angivet"
+
+#~ msgid "can't close input file %s"
+#~ msgstr "kan ikke lukke inddatafilen %s"
+
+#~ msgid "bad zip/jar file %s"
+#~ msgstr "ødelagt zip/jar-fil %s"
+
+#~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s"
+#~ msgstr "intern fejl i generate_bytecode_insn - trækode er ikke implementeret: %s"
+
+#~ msgid "field initializer type mismatch"
+#~ msgstr "typen af startværdien for feltet passer ikke"
+
+#~ msgid "can't create directory %s"
+#~ msgstr "kan ikke oprette kataloget %s"
+
+#~ msgid "can't create %s"
+#~ msgstr "kan ikke oprette %s"
+
+#~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed"
+#~ msgstr "kun én af '--print-main', '--list-class' og '--complexity' tilladt"
+
+#~ msgid "can't open output file `%s'"
+#~ msgstr "kan ikke åbne uddatafilen '%s'"
+
+#~ msgid "file not found `%s'"
+#~ msgstr "filen '%s' blev ikke fundet"
+
+#~ msgid "can't specify `-D' without `--main'\n"
+#~ msgstr "kan ikke angive '-D' uden '--main'\n"
+
+#~ msgid "`%s' is not a valid class name"
+#~ msgstr "'%s' er et ugyldigt klassenavn"
+
+#~ msgid "--resource requires -o"
+#~ msgstr "--resource påkræver -o"
+
+#~ msgid "warning: already-compiled .class files ignored with -C"
+#~ msgstr "advarsel: allerede oversatte .class-filer ignoreret med -C"
+
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "-C og -o er indbyrdes uforenelige"
+
+#~ msgid "cannot create temporary file"
+#~ msgstr "kan ikke oprette midlertidig fil"
+
+#~ msgid "using both @FILE with multiple files not implemented"
+#~ msgstr "brug af @FILE med flere filer er ikke implementeret"
+
+#~ msgid "cannot specify `main' class when not linking"
+#~ msgstr "kan ikke angive 'main'-klassen når der ikke sammenkædes"
+
+#~ msgid "can't do dependency tracking with input from stdin"
+#~ msgstr "kan ikke udføre afhængighedsfølgning med inddata fra standard-ind"
+
+#~ msgid "couldn't determine target name for dependency tracking"
+#~ msgstr "kunne ikke bestemme målnavn for afhængighedsfølgning"
+
+#~ msgid ""
+#~ "unknown encoding: `%s'\n"
+#~ "This might mean that your locale's encoding is not supported\n"
+#~ "by your system's iconv(3) implementation.  If you aren't trying\n"
+#~ "to use a particular encoding for your input file, try the\n"
+#~ "`--encoding=UTF-8' option"
+#~ msgstr ""
+#~ "ukendt kodning: '%s'\n"
+#~ "Dette betyder muligvis at kodningen fra dine regionaldata ikke\n"
+#~ "understøttes af dit systems iconv(3)-implementering. Hvis du \n"
+#~ "ikke ønske at bruge en bestemt kodning for dine inddatafiler, \n"
+#~ "så prøv tilvalget '--encoding=UTF-8'"
+
+#~ msgid "can't mangle %s"
+#~ msgstr "kan ikke sammensætte %s"
+
+#~ msgid "internal error - invalid Utf8 name"
+#~ msgstr "intern fejl - ugyldigt UTF-8-navn"
+
+#~ msgid "Missing term"
+#~ msgstr "Manglende term"
+
+#~ msgid "';' expected"
+#~ msgstr "';' forventet"
+
+#~ msgid "Missing name"
+#~ msgstr "Manglende navn"
+
+#~ msgid "'*' expected"
+#~ msgstr "'*' forventet"
+
+#~ msgid "Class or interface declaration expected"
+#~ msgstr "Klasse- eller grænsefladeerklæring forventet"
+
+#~ msgid "Missing class name"
+#~ msgstr "Manglende klassenavn"
+
+#~ msgid "'{' expected"
+#~ msgstr "'{' forventet"
+
+#~ msgid "Missing super class name"
+#~ msgstr "Manglende superklassenavn"
+
+#~ msgid "Missing interface name"
+#~ msgstr "Manglende grænsefladenavn"
+
+#~ msgid "Missing variable initializer"
+#~ msgstr "Manglende variabelstartværdi"
+
+#~ msgid "Invalid declaration"
+#~ msgstr "Ugyldig erklæring"
+
+#~ msgid "']' expected"
+#~ msgstr "']' forventet"
+
+#~ msgid "Unbalanced ']'"
+#~ msgstr "Uafbalanceret ']'"
+
+#~ msgid "Invalid method declaration, method name required"
+#~ msgstr "Ugyldig metodeerklæring, metodenavn påkrævet"
+
+#~ msgid "Identifier expected"
+#~ msgstr "Kaldenavn forventet"
+
+#~ msgid "Invalid method declaration, return type required"
+#~ msgstr "Ugyldig metodeerklæring, returtype påkrævet"
+
+#~ msgid "')' expected"
+#~ msgstr "')' forventet"
+
+#~ msgid "Missing formal parameter term"
+#~ msgstr "Manglende formel parameterterm"
+
+#~ msgid "Missing identifier"
+#~ msgstr "Manglende kaldenavn"
+
+#~ msgid "Missing class type term"
+#~ msgstr "Manglende klassetypeterm"
+
+#~ msgid "Invalid interface type"
+#~ msgstr "Ugyldig grænsefladetype"
+
+#~ msgid "':' expected"
+#~ msgstr "':' forventet"
+
+#~ msgid "Invalid expression statement"
+#~ msgstr "Ugyldig udtrykssætning"
+
+#~ msgid "'(' expected"
+#~ msgstr "'(' forventet"
+
+#~ msgid "Missing term or ')'"
+#~ msgstr "Manglende term eller ')'"
+
+#~ msgid "Missing or invalid constant expression"
+#~ msgstr "Manglende eller ugyldigt konstant udtryk"
+
+#~ msgid "Missing term and ')' expected"
+#~ msgstr "Manglende term eller ')' forventet"
+
+#~ msgid "Invalid control expression"
+#~ msgstr "Ugyldigt kontroludtryk"
+
+#~ msgid "Invalid update expression"
+#~ msgstr "Ugyldigt opdateringsudtryk"
+
+#~ msgid "Invalid init statement"
+#~ msgstr "Ugyldig klargøringssætning"
+
+#~ msgid "Missing term or ')' expected"
+#~ msgstr "Manglende term eller ')' forventet"
+
+#~ msgid "'class' or 'this' expected"
+#~ msgstr "'class' eller 'this' forventet"
+
+#~ msgid "'class' expected"
+#~ msgstr "'class' forventet"
+
+#~ msgid "')' or term expected"
+#~ msgstr "')' eller term forventet"
+
+#~ msgid "'[' expected"
+#~ msgstr "'[' forventet"
+
+#~ msgid "Field expected"
+#~ msgstr "Felt forventet"
+
+#~ msgid "Missing term and ']' expected"
+#~ msgstr "Manglende term og ']' forventet"
+
+#~ msgid "']' expected, invalid type expression"
+#~ msgstr "']' forventet, ugyldigt typeudtryk"
+
+#~ msgid "Invalid type expression"
+#~ msgstr "Ugyldigt typeudtryk"
+
+#~ msgid "Invalid reference type"
+#~ msgstr "Ugyldig referencetype"
+
+#~ msgid "Constructor invocation must be first thing in a constructor"
+#~ msgstr "Konstruktionsfunktionskald skal være det første i en konstruktionsfunktion"
+
+#~ msgid "Only constructors can invoke constructors"
+#~ msgstr "Kun konstruktionsfunktioner kan kalde konstruktionsfunktioner"
+
+#~ msgid ": `%s' JDK1.1(TM) feature"
+#~ msgstr ": '%s' JDK1.1(TM)-facilitet"
+
+#~ msgid ""
+#~ "%s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s.\n"
+#~ "%s"
+
+#~ msgid "malformed .zip archive in CLASSPATH: %s"
+#~ msgstr "ugyldigt udformet .zip-arkiv i CLASSPATH: %s"
+
+#~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives"
+#~ msgstr "Kan ikke finde standardpakken '%s'. Kontrollér CLASSPATH-miljøvariablen og tilgangen til arkiverne"
+
+#~ msgid "missing static field `%s'"
+#~ msgstr "manglende statisk felt '%s'"
+
+#~ msgid "not a static field `%s'"
+#~ msgstr "ikke et statisk felt '%s'"
+
+#~ msgid "No case for %s"
+#~ msgstr "Ingen case for %s"
+
+#~ msgid "unregistered operator %s"
+#~ msgstr "ikke-registreret operator %s"
+
+#~ msgid "junk at end of signature string"
+#~ msgstr "ragelse i slutningen signaturstreng"
+
+#~ msgid "bad pc in exception_table"
+#~ msgstr "ugyldig pc i exception_table"
+
+#~ msgid "exception handler inside code that is being protected"
+#~ msgstr "undtagelseshåndtering inden i kode der bliver beskyttet"
+
+#~ msgid "unknown opcode %d@pc=%d during verification"
+#~ msgstr "ukendt kode %d@pc=%d under verifikation"
+
+#~ msgid "verification error at PC=%d"
+#~ msgstr "verifikationsfejl ved PC=%d"
+
+#~ msgid "Disable automatic array bounds checking"
+#~ msgstr "Deaktivér automatisk tabelgrænsekontrollering"
+
+#~ msgid "Disable assignability checks for stores into object arrays"
+#~ msgstr "Deaktivér tildelingstjek for lagringer i objekttabeller"
+
+#~ msgid "Assume native functions are implemented using JNI"
+#~ msgstr "Antag at indfødte funktioner er implementeret vha. JNI"
+
+#~ msgid "Replace system path"
+#~ msgstr "Erstat systemsti"
+
+#~ msgid "Set class path"
+#~ msgstr "Angiv klassesti"
+
+#~ msgid "Set class path (deprecated: use --classpath instead)"
+#~ msgstr "Angiv klassesti (forældet: benyt --classpath i stedet)"
+
+#~ msgid "Choose class whose main method should be used"
+#~ msgstr "Vælg klasse hvis main-metode skal bruges"
+
+#~ msgid "Choose input encoding (default comes from locale)"
+#~ msgstr "Vælg inddatakodning (standardværdi kommer fra regionalindstillinger)"
+
+#~ msgid "Add directory to class path"
+#~ msgstr "Tilføj katalog til klassesti"
+
+#~ msgid "Directory where class files should be written"
+#~ msgstr "Katalog som klassefiler skrives i"
+
+#~ msgid "Warn if modifiers are specified when not necessary"
+#~ msgstr "Advar hvis modifikationer angives når det ikke er nødvendigt"
+
+#~ msgid "Warn if deprecated empty statements are found"
+#~ msgstr "Advar hvis forældede tomme sætninger bliver fundet"
+
+#~ msgid "Warn if .class files are out of date"
+#~ msgstr "Advar hvis .class-filer er forældede"
+
+#~ msgid "Always check for non gcj generated classes archives"
+#~ msgstr "Kontrollér altid for ikke-GCJ-genererede klassearkiver"
+
+#~ msgid "Never optimize static class initialization code"
+#~ msgstr "Optimér aldrig statiske klassers klargøringskode"
+
+#~ msgid "Use offset tables for virtual method calls"
+#~ msgstr "Benyt afsætstabeller til virtuelle metodekald"
+
+#~ msgid "object does not conform to the `%s' protocol"
+#~ msgstr "objekt overholder ikke protokollen '%s'"
+
+#~ msgid "class `%s' does not implement the `%s' protocol"
+#~ msgstr "klassen '%s' implementerer ikke protokollen '%s'"
+
+#~ msgid "`%s' cannot be statically allocated"
+#~ msgstr "'%s' kan ikke allokeres statisk"
+
+#~ msgid "unexpected type for `id' (%s)"
+#~ msgstr "uventet type for 'id' (%s)"
+
+#~ msgid "undefined type `id', please import <objc/objc.h>"
+#~ msgstr "typen 'id' er ikke defineret, importér venligst <objc/objc.h>"
+
+#~ msgid "protocol `%s' has circular dependency"
+#~ msgstr "protokollen '%s' har cirkulær afhængighed"
+
+#~ msgid "cannot find protocol declaration for `%s'"
+#~ msgstr "kan ikke finde protokolerklæringen af '%s'"
+
+#~ msgid "cannot find interface declaration for `%s'"
+#~ msgstr "kan ikke finde grænsefladeerklæringen af '%s'"
+
+#~ msgid "cannot find reference tag for class `%s'"
+#~ msgstr "kan ikke finde referencemærket for klassen '%s'"
+
+#~ msgid "creating selector for non existant method %s"
+#~ msgstr "opretter vælger for ikke-eksisterende metode '%s'"
+
+#~ msgid "cannot find class `%s'"
+#~ msgstr "kan ikke finde klassen '%s'"
+
+#~ msgid "class `%s' already exists"
+#~ msgstr "klassen '%s' eksisterer allerede"
+
+#~ msgid "cannot find interface declaration for `%s', superclass of `%s'"
+#~ msgstr "kan ikke grænsefladeerklæringen af '%s', superklasse til '%s'"
+
+#~ msgid "circular inheritance in interface declaration for `%s'"
+#~ msgstr "cirkulær nedarvning i interface-erklæringen af '%s'"
+
+#~ msgid "inconsistent instance variable specification"
+#~ msgstr "inkonsistent instansvariabelangivelse"
+
+#~ msgid "can not use an object as parameter to a method\n"
+#~ msgstr "kan ikke benytte et objekt som parameter til en metode\n"
+
+#~ msgid "multiple declarations for method `%s'"
+#~ msgstr "mere end én erklæring af metoden '%s'"
+
+#~ msgid "invalid receiver type `%s'"
+#~ msgstr "ugyldig modtagertype '%s'"
+
+#~ msgid "`%s' does not respond to `%s'"
+#~ msgstr "'%s' svarer ikke på '%s'"
+
+#~ msgid "no super class declared in interface for `%s'"
+#~ msgstr "ingen superklasse erklæret i grænsefladen for '%s'"
+
+#~ msgid "cannot find class (factory) method"
+#~ msgstr "kan ikke finde klasse(fabriks)metode"
+
+#~ msgid "return type for `%s' defaults to id"
+#~ msgstr "returtypen for '%s' får standardværdien id"
+
+#~ msgid "method `%s' not implemented by protocol"
+#~ msgstr "metoden '%s' er ikke implementeret af protokollen"
+
+#~ msgid "return type defaults to id"
+#~ msgstr "returtype får standardværdien id"
+
+#~ msgid "cannot find method"
+#~ msgstr "kan ikke finde metode"
+
+#~ msgid "undeclared selector `%s'"
+#~ msgstr "uerklæret vælger '%s'"
+
+#~ msgid "instance variable `%s' accessed in class method"
+#~ msgstr "instansvariablen '%s' tilgået i klassemetode"
+
+#~ msgid "duplicate definition of class method `%s'"
+#~ msgstr "mere end én definition af klassemetoden '%s'"
+
+#~ msgid "duplicate declaration of class method `%s'"
+#~ msgstr "mere end én erklæring af klassemetoden '%s'"
+
+#~ msgid "duplicate definition of instance method `%s'"
+#~ msgstr "mere end én definition af instansmetoden '%s'"
+
+#~ msgid "duplicate declaration of instance method `%s'"
+#~ msgstr "mere end én erklæring af instansmetoden '%s'"
+
+#~ msgid "duplicate interface declaration for category `%s(%s)'"
+#~ msgstr "mere end én grænsefladeerklæring af kategorien '%s(%s)'"
+
+#~ msgid "instance variable `%s' is declared private"
+#~ msgstr "instansvariablen '%s' er erklæret privat"
+
+#~ msgid "instance variable `%s' is declared %s"
+#~ msgstr "instansvariablen '%s' er erklæret '%s'"
+
+#~ msgid "static access to object of type `id'"
+#~ msgstr "statisk tilgang til objekt af typen 'id'"
+
+#~ msgid "incomplete implementation of class `%s'"
+#~ msgstr "ufuldstændig implementering af klassen '%s'"
+
+#~ msgid "incomplete implementation of category `%s'"
+#~ msgstr "ufuldstændig implementering af kategorien '%s'"
+
+#~ msgid "method definition for `%c%s' not found"
+#~ msgstr "metodedefinitionen for '%c%s' ikke fundet"
+
+#~ msgid "%s `%s' does not fully implement the `%s' protocol"
+#~ msgstr "%s '%s' implementerer ikke helt protokollen '%s'"
+
+#~ msgid "`@end' missing in implementation context"
+#~ msgstr "'@end' mangler i implementationskontekst"
+
+#~ msgid "reimplementation of class `%s'"
+#~ msgstr "omimplementering af klassen '%s'"
+
+#~ msgid "conflicting super class name `%s'"
+#~ msgstr "modstridende superklassenavn '%s'"
+
+#~ msgid "duplicate interface declaration for class `%s'"
+#~ msgstr "mere end én grænsefladeerklæring af klassen '%s'"
+
+#~ msgid "duplicate declaration for protocol `%s'"
+#~ msgstr "mere end én erklæring af protokollen '%s'"
+
+#~ msgid "[super ...] must appear in a method context"
+#~ msgstr "[super ...] skal optræde i en metodekontekst"
+
+#~ msgid "potential selector conflict for method `%s'"
+#~ msgstr "potentiel vælgerkonflikt for metoden '%s'"
+
+#~ msgid "`@end' must appear in an implementation context"
+#~ msgstr "'@end' skal optræde i en implementationskontekst"
+
+#~ msgid "method definition not in class context"
+#~ msgstr "metodedefinitionen optræder ikke i en klassekontekst"
+
+#~ msgid "Dump decls to a .decl file"
+#~ msgstr "Udskriv erklæringer i en .decl-fil"
+
+#~ msgid "Generate code for GNU runtime environment"
+#~ msgstr "Generér kode til GNU-kørselmiljø"
+
+#~ msgid "Generate code for NeXT runtime environment"
+#~ msgstr "Generér kode til NeXT-kørselmiljø"
+
+#~ msgid "Warn if a selector has multiple methods"
+#~ msgstr "Advar hvis en vælger har flere metoder"
+
+#~ msgid "Do not warn if inherited methods are unimplemented"
+#~ msgstr "Advar ikk hvis nedarvede metoder ikke implementeres"
+
+#~ msgid "Generate C header of platform specific features"
+#~ msgstr "Generér C-inkluderingsfil med platformspecifikke faciliteter"
+
+#~ msgid "Specify the name of the class for constant strings"
+#~ msgstr "Angiv navnet på klassen til konstante strenge"
+
+#~ msgid "(debug) trace parsing process"
+#~ msgstr "(fejlretning) følg fortolkningsprocessen"
+
+#~ msgid "(debug) trace lexical analysis"
+#~ msgstr "(fejlretning) følg lexikalsk analyse"
+
+#~ msgid "-current_version only allowed with -dynamiclib"
+#~ msgstr "-current_version er kun tilladt med -dynamiclib"
+
+#~ msgid "-install_name only allowed with -dynamiclib"
+#~ msgstr "-install_name er kun tilladt med -dynamiclib"
+
+#~ msgid "-bundle not allowed with -dynamiclib"
+#~ msgstr "-bundle er ikke tilladt med -dynamiclib"
+
+#~ msgid "-bundle_loader not allowed with -dynamiclib"
+#~ msgstr "-bundle_loader er ikke tilladt med -dynamiclib"
+
+#~ msgid "-client_name not allowed with -dynamiclib"
+#~ msgstr "-client_name er ikke tilladt med -dynamiclib"
+
+#~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib"
+#~ msgstr "-force_cpusubtype_ALL er ikke tilladt med -dynamiclib"
+
+#~ msgid "-force_flat_namespace not allowed with -dynamiclib"
+#~ msgstr "-force_flat_namespace er ikke tilladt med -dynamiclib"
+
+#~ msgid "-keep_private_externs not allowed with -dynamiclib"
+#~ msgstr "-keep_private_externs er ikke tilladt med -dynamiclib"
+
+#~ msgid "-private_bundle not allowed with -dynamiclib"
+#~ msgstr "-private_bundle er ikke tilladt med -dynamiclib"
+
+#~ msgid "GNU C does not support -C without using -E"
+#~ msgstr "GNU C understøtter ikke -C uden -E"
+
+#~ msgid "GNU C does not support -CC without using -E"
+#~ msgstr "GNU C understøtter ikke -CC uden -E"
+
+#~ msgid "`-p' not supported; use `-pg' and gprof(1)"
+#~ msgstr "'-p' understøttes ikke; brug '-pg' og gprof(1)"
+
+#~ msgid "may not use both -m32 and -m64"
+#~ msgstr "-m32 og -m64 er indbyrdes uforenelige"
+
+#~ msgid "The -shared option is not currently supported for VAX ELF."
+#~ msgstr "Tilvalget -shared understøttes i øjeblikket ikke for VAX ELF."
+
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "profilgenerering understøttes ikke med -mg\n"
+
+#~ msgid "-pipe is not supported"
+#~ msgstr "-pipe understøttes ikke"
+
+#~ msgid "may not use both -EB and -EL"
+#~ msgstr "kan ikke bruge både -EB og -EL"
+
+#~ msgid "-pg and -fomit-frame-pointer are incompatible"
+#~ msgstr "-pg og -fomit-frame-pointer er indbyrdes uforenelige"
+
+#~ msgid "mno-cygwin and mno-win32 are not compatible"
+#~ msgstr "-mno-cygwin og -mnowin32 er indbyrdes uforenelige"
+
+#~ msgid "shared and mdll are not compatible"
+#~ msgstr "shared og mdll er indbyrdes uforenelige"
+
+#~ msgid "-E required when input is from standard input"
+#~ msgstr "-E påkrævet når inddata kommer fra standardind"
+
+#~ msgid "compilation of header file requested"
+#~ msgstr "oversættelse af inkluderingsfil udbedt"
+
+#~ msgid " conflicting code gen style switches are used"
+#~ msgstr " konfliktende kodegenereringstilvalg er benyttet"
+
+#~ msgid "-pg or -p and -fomit-frame-pointer are incompatible"
+#~ msgstr "-pg eller -p og -fomit-frame-pointer er indbyrdes uforenelige"
+
+#~ msgid "choose either big or little endian, not both"
+#~ msgstr "vælg enten stor- eller lilleendet, ikke begge"
+
+#~ msgid "choose either m340 or m210 not both"
+#~ msgstr "vælg enten m340 eller m210, ikke begge"
+
+#~ msgid "the m210 does not have little endian support"
+#~ msgstr "m210 har ikke understøttelse for lilleendet"
+
+#~ msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#~ msgstr "-mapcs-26 og -mapcs-32 kan ikke bruges på samme tid"
+
+#~ msgid "-msoft-float and -mhard_float may not be used together"
+#~ msgstr "-msoft-float og -mhard_float kan ikke bruges på samme tid"
+
+#~ msgid "-mbig-endian and -mlittle-endian may not be used together"
+#~ msgstr "-mbig-endian og -mlittle-endian kan ikke bruges på samme tid"
+
+#~ msgid "-mhard-float not supported"
+#~ msgstr "-mhard-float understøttes ikke"
+
+#~ msgid "-msingle-float and -msoft-float can not both be specified"
+#~ msgstr "-msingle-float og -msoft-float er indbyrdes uforenelige"
+
+#~ msgid "-c or -S required for Ada"
+#~ msgstr "-c eller -S kræves til Ada"
+
+#~ msgid "-fjni and -femit-class-files are incompatible"
+#~ msgstr "-fjni og -femit-class-files er indbyrdes uforenelige"
+
+#~ msgid "-fjni and -femit-class-file are incompatible"
+#~ msgstr "-fjni og -femit-class-file er indbyrdes uforenelige"
+
+#~ msgid "-femit-class-file should used along with -fsyntax-only"
+#~ msgstr "-femit-class-file skal bruges sammen med -fsyntax-only"
+
+#~ msgid "-static not valid with -mcoff"
+#~ msgstr "-static er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-shared not valid with -mcoff"
+#~ msgstr "-shared er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-symbolic not valid with -mcoff"
+#~ msgstr "-symbolic er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-fpic is not valid with -mcoff"
+#~ msgstr "-fpic er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-fPIC is not valid with -mcoff"
+#~ msgstr "-fPIC er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-fpic not valid with -mcoff"
+#~ msgstr "-fpic er ikke gyldig sammen med -mcoff"
+
+#~ msgid "-fPIC not valid with -mcoff"
+#~ msgstr "-fPIC er ikke gyldig sammen med -mcoff"
+
+#~ msgid "__alignof__ applied to an incomplete type"
+#~ msgstr "__alignof__ benyttet på en ufuldstændig type"
+
+#~ msgid "-traditional is deprecated and may be removed"
+#~ msgstr "-traditional er forældet og kan blive fjernet"
+
+#~ msgid "unknown C standard `%s'"
+#~ msgstr "ukendt C-standard '%s'"
+
+#~ msgid "type of external `%s' is not global"
+#~ msgstr "typen af den eksterne '%s' er ikke global"
+
+#~ msgid "typedef `%s' is initialized"
+#~ msgstr "typedef '%s' bliver tildelt en startværdi"
+
+#~ msgid "unnamed fields of type other than struct or union are not allowed"
+#~ msgstr "unavngivne felter af andre typer end struct eller union er ikke tilladt"
+
+#~ msgid "null format string"
+#~ msgstr "formateringsstreng er nul"
+
+#~ msgid "ignoring #pragma %s"
+#~ msgstr "ignorerer #pragma: %s"
+
+#~ msgid "both 'f' and 'l' suffixes on floating constant"
+#~ msgstr "både 'f'- og 'l'-endelser i kommatalskonstant"
+
+#~ msgid "floating point number exceeds range of '%s'"
+#~ msgstr "kommatal overskrider intervallet for '%s"
+
+#~ msgid "decimal point in exponent - impossible!"
+#~ msgstr "decimalkomma i eksponent - umuligt!"
+
+#~ msgid "underscore in number"
+#~ msgstr "understreg i tal"
+
+#~ msgid "numeric constant with no digits"
+#~ msgstr "talkonstant uden cifre"
+
+#~ msgid "numeric constant contains digits beyond the radix"
+#~ msgstr "talkonstant indeholder cifre der ligger ud over grundtallet"
+
+#~ msgid "floating constant may not be in radix 16"
+#~ msgstr "kommatalskonstant må ikke skrives med grundtal 16"
+
+#~ msgid "more than one 'f' suffix on floating constant"
+#~ msgstr "mere end én 'f'-endelse i kommatalskonstant"
+
+#~ msgid "traditional C rejects the 'f' suffix"
+#~ msgstr "traditionel C tillader ikke endelsen 'f'"
+
+#~ msgid "more than one 'l' suffix on floating constant"
+#~ msgstr "mere end én 'l'-endelse i kommatalskonstant"
+
+#~ msgid "traditional C rejects the 'l' suffix"
+#~ msgstr "traditionel C tillader ikke endelsen 'l'"
+
+#~ msgid "more than one 'i' or 'j' suffix on floating constant"
+#~ msgstr "mere end én 'i'- eller 'j'-endelse i kommatalskonstant"
+
+#~ msgid "ISO C forbids imaginary numeric constants"
+#~ msgstr "ISO C forbyder imaginære talkonstanter"
+
+#~ msgid "floating constant out of range"
+#~ msgstr "kommatalskonstant er uden for det gyldige interval"
+
+#~ msgid "floating point number exceeds range of 'double'"
+#~ msgstr "kommatal overskrider intervallet for 'double'"
+
+#~ msgid "two 'u' suffixes on integer constant"
+#~ msgstr "to 'u'-endelser i heltalskonstant"
+
+#~ msgid "traditional C rejects the 'u' suffix"
+#~ msgstr "traditionel C tillader ikke 'u'-endelsen"
+
+#~ msgid "three 'l' suffixes on integer constant"
+#~ msgstr "tre 'l'-endelser i heltalskonstant"
+
+#~ msgid "'lul' is not a valid integer suffix"
+#~ msgstr "'lul' er ikke en gyldig heltalsendelse"
+
+#~ msgid "'Ll' and 'lL' are not valid integer suffixes"
+#~ msgstr "'Ll' og 'lL' er ikke gyldige heltalsendelser"
+
+#~ msgid "more than one 'i' or 'j' suffix on integer constant"
+#~ msgstr "mere end én 'i'- eller 'j'-endelse i heltalskonstant"
+
+#~ msgid "invalid suffix on integer constant"
+#~ msgstr "ugyldig endelse i heltalskonstant"
+
+#~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits"
+#~ msgstr "heltalskonstant er for stor til denne konfiguration af oversætteren - afkortet til %d bit"
+
+#~ msgid "width of integer constant changes with -traditional"
+#~ msgstr "bredden af heltalskonstant skifter med -traditional"
+
+#~ msgid "integer constant is unsigned in ISO C, signed with -traditional"
+#~ msgstr "heltalskonstant er unsigned i ISO C, signed med -traditional"
+
+#~ msgid "width of integer constant may change on other systems with -traditional"
+#~ msgstr "bredden af heltalskonstant kan skifte på andre systemer med -traditional"
+
+#~ msgid "integer constant larger than the maximum value of %s"
+#~ msgstr "heltalskonstant er større end den maksimale værdi for %s"
+
+#~ msgid "an unsigned long long int"
+#~ msgstr "en unsigned long long int"
+
+#~ msgid "a long long int"
+#~ msgstr "en long long int"
+
+#~ msgid "an unsigned long int"
+#~ msgstr "en unsigned long int"
+
+#~ msgid "decimal constant is so large that it is unsigned"
+#~ msgstr "decimalkonstant er så stor at den er unsigned"
+
+#~ msgid "complex integer constant is too wide for 'complex int'"
+#~ msgstr "kompleks heltalskonstant er for bred til 'complex int'"
+
+#~ msgid "integer constant is larger than the maximum value for its type"
+#~ msgstr "heltalskonstant er større end den maksimale værdi for dens type"
+
+#~ msgid "missing white space after number '%.*s'"
+#~ msgstr "manglende mellemrum efter tallet '%.*s'"
+
+#~ msgid "ISO C does not permit use of `varargs.h'"
+#~ msgstr "ISO C tillader ikke brug af 'varargs.h'"
+
+#~ msgid "storage class specifier in array declarator"
+#~ msgstr "lagringsklasseanvisning i tabelerklæring"
+
+#~ msgid "sizeof applied to a function type"
+#~ msgstr "sizeof benyttet på en funktionstype"
+
+#~ msgid "sizeof applied to a void type"
+#~ msgstr "sizeof benyttet på en void-type"
+
+#~ msgid "sizeof applied to an incomplete type"
+#~ msgstr "sizeof benyttet på en ufuldstændig type"
+
+#~ msgid "variable offset is passed partially in stack and in reg"
+#~ msgstr "variabelafsæt bliver viderebragt delvis i stak og i register"
+
+#~ msgid "variable size is passed partially in stack and in reg"
+#~ msgstr "variabelstørrelse bliver viderebragt delvis i stak og i register"
+
+#~ msgid "execvp %s"
+#~ msgstr "execvp %s"
+
+#~ msgid "floating point numbers are not valid in #if"
+#~ msgstr "kommatal er ikke tilladt i #if"
+
+#~ msgid "traditional C rejects the `U' suffix"
+#~ msgstr "traditionel C forbyder 'U'-endelsen"
+
+#~ msgid "too many 'l' suffixes in integer constant"
+#~ msgstr "for mange 'l'-endelser i heltalskonstant"
+
+#~ msgid "integer constant contains digits beyond the radix"
+#~ msgstr "heltalskonstanten indeholder cifre der er større end grundtallet"
+
+#~ msgid "integer constant out of range"
+#~ msgstr "heltalskonstanten er uden for det gyldige interval"
+
+#~ msgid "string constants are not valid in #if"
+#~ msgstr "strengkonstanter er ikke tilladt i #if"
+
+#~ msgid "missing binary operator"
+#~ msgstr "manglende binær operator"
+
+#~ msgid "changing search order for system directory \"%s\""
+#~ msgstr "skifter søgeorden for systemkataloget \"%s\""
+
+#~ msgid "  as it is the same as non-system directory \"%s\""
+#~ msgstr "  da det er det samme som ikke-system-kataloget \"%s\""
+
+#~ msgid "  as it has already been specified as a non-system directory"
+#~ msgstr "  da det allerede er blevet angivet som et ikke-system-katalog"
+
+#~ msgid "I/O error on output"
+#~ msgstr "I/O-fejl på uddata"
+
+#~ msgid "argument missing after %s"
+#~ msgstr "en parameter mangler efter %s"
+
+#~ msgid "number missing after %s"
+#~ msgstr "et tal mangler efter %s"
+
+#~ msgid "target missing after %s"
+#~ msgstr "et mål mangler efter %s"
+
+#~ msgid "GNU CPP version %s (cpplib)"
+#~ msgstr "GNU CPP version %s (cpplib)"
+
+#~ msgid ""
+#~ "  -pedantic                 Issue all warnings demanded by strict ISO C\n"
+#~ "  -pedantic-errors          Issue -pedantic warnings as errors instead\n"
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -lang-c                   Assume that the input sources are in C\n"
+#~ "  -lang-c89                 Assume that the input sources are in C89\n"
+#~ msgstr ""
+#~ "  -pedantic                 Fremkom med alle advarsler påkrævet for nøje ISO C\n"
+#~ "  -pedantic-errors          Behandl '-pedantic'-advarsler som fejl\n"
+#~ "  -traditional              Iagttag opførsel som en K&R-præprocessor\n"
+#~ "  -trigraphs                Understøt ANSI C-trigrafer\n"
+#~ "  -lang-c                   Antag at inddata er C\n"
+#~ "  -lang-c89                 Antag at inddata er C89\n"
+
+#~ msgid ""
+#~ "  -lang-c++                 Assume that the input sources are in C++\n"
+#~ "  -lang-objc                Assume that the input sources are in ObjectiveC\n"
+#~ "  -lang-objc++              Assume that the input sources are in ObjectiveC++\n"
+#~ "  -lang-asm                 Assume that the input sources are in assembler\n"
+#~ msgstr ""
+#~ "  -lang-c++                 Antag at inddata er C++\n"
+#~ "  -lang-cobjc               Antag at inddata er Objective C\n"
+#~ "  -lang-cobjc++             Antag at inddata er Objective C++\n"
+#~ "  -lang-asm                 Antag at inddata er maskinkode\n"
+
+#~ msgid "possible start of unterminated string literal"
+#~ msgstr "muligvis begyndelsen af uafsluttet strengkonstant"
+
+#~ msgid "multi-line string literals are deprecated"
+#~ msgstr "flerlinjers strengkonstanter er forældede"
+
+#~ msgid "the meaning of '\\%c' varies with -traditional"
+#~ msgstr "betydningen af '\\%c' skifter med -traditional"
+
+#~ msgid "the meaning of '\\a' varies with -traditional"
+#~ msgstr "betydningen af '\\a' skifter med -traditional"
+
+#~ msgid "the meaning of '\\x' varies with -traditional"
+#~ msgstr "betydningen af '\\x' skifter med -traditional"
+
+#~ msgid "\"%s\" cannot be used as a macro name"
+#~ msgstr "\"%s\" kan ikke bruges som et makronavn"
+
+#~ msgid "directives may not be used inside a macro argument"
+#~ msgstr "direktiver må ikke optræde inden i en makroparameter"
+
+#~ msgid "invalid option %s"
+#~ msgstr "ugyldigt tilvalg %s"
+
+#~ msgid "%s:%d: warning: "
+#~ msgstr "%s:%d: advarsel: "
+
+#~ msgid "%s: warning: "
+#~ msgstr "%s: advarsel: "
+
+#~ msgid "sorry, not implemented: "
+#~ msgstr "desværre, ikke implementeret: "
+
+#~ msgid "Internal compiler error in %s, at %s:%d"
+#~ msgstr "Intern oversætterfejl i %s ved %s:%d."
+
+#~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2002 Free Software Foundation, Inc.\n"
+
+#~ msgid "argument to `-b' is missing"
+#~ msgstr "der mangler en parameter til '-b'"
+
+#~ msgid "argument to `-V' is missing"
+#~ msgstr "der mangler en parameter til '-V'"
+
+#~ msgid "invalid version number format"
+#~ msgstr "ugyldigt versionsnummerformat"
+
+#~ msgid ".da file contents exhausted too early\n"
+#~ msgstr "indholdet af .da-filen er udtømt for tidligt\n"
+
+#~ msgid ".da file contents not exhausted\n"
+#~ msgstr "indholdet af .da-filen ikke udtømt\n"
+
+#~ msgid "%6.2f%% of %d source lines executed in function %s\n"
+#~ msgstr "%6.2f%% af %d kildekodelinjer udført i funktionen %s\n"
+
+#~ msgid "No executable source lines in function %s\n"
+#~ msgstr "Ingen kørbare kildelinjer i funktionen %s\n"
+
+#~ msgid "%6.2f%% of %d branches executed in function %s\n"
+#~ msgstr "%6.2f%% af %d forgreninger udført i funktionen %s\n"
+
+#~ msgid "%6.2f%% of %d branches taken at least once in function %s\n"
+#~ msgstr "%6.2f%% af %d forgreninger valgt mindst én gang i funktionen %s\n"
+
+#~ msgid "No branches in function %s\n"
+#~ msgstr "Ingen forgreninger i funktionen %s\n"
+
+#~ msgid "%6.2f%% of %d calls executed in function %s\n"
+#~ msgstr "%6.2f%% af %d kald udført i funktionen %s\n"
+
+#~ msgid "No calls in function %s\n"
+#~ msgstr "Ingen kald i funktionen %s\n"
+
+#~ msgid "%6.2f%% of %d source lines executed in file %s\n"
+#~ msgstr "%6.2f%% af %d kildekodelinjer udført i filen %s\n"
+
+#~ msgid "%6.2f%% of %d branches executed in file %s\n"
+#~ msgstr "%6.2f%% af %d forgreninger udført i filen %s\n"
+
+#~ msgid "%6.2f%% of %d branches taken at least once in file %s\n"
+#~ msgstr "%6.2f%% af %d forgreninger valgt mindst én gang i filen %s\n"
+
+#~ msgid "%6.2f%% of %d calls executed in file %s\n"
+#~ msgstr "%6.2f%% af %d kald udført i filen %s\n"
+
+#~ msgid "call %d returns = %s\n"
+#~ msgstr "kald %d returnerer = %s\n"
+
+#~ msgid "call %d returns = %s%%\n"
+#~ msgstr "kald %d returnerer = %s%%\n"
+
+#~ msgid "branch %d taken = %s\n"
+#~ msgstr "forgrening %d valgt = %s\n"
+
+#~ msgid "branch %d taken = %s%%\n"
+#~ msgstr "forgrening %d valgt = %s%%\n"
+
+#~ msgid ".da file contents exhausted too early"
+#~ msgstr "indholdet af .da-filen er udtømt for tidligt"
+
+#~ msgid ".da file contents not exhausted"
+#~ msgstr "indholdet af .da-filen ikke udtømt"
+
+#~ msgid "conversion from NaN to int"
+#~ msgstr "konvertering fra NaN til int"
+
+#~ msgid "floating point overflow"
+#~ msgstr "kommatalsoverløb"
+
+#~ msgid "overflow on truncation to integer"
+#~ msgstr "overløb ved afkortelse til heltal"
+
+#~ msgid "overflow on truncation to unsigned integer"
+#~ msgstr "overløb ved afkortelse til heltal uden fortegn"
+
+#~ msgid "%s: argument domain error"
+#~ msgstr "%s: parameterdomænefejl"
+
+#~ msgid "%s: function singularity"
+#~ msgstr "%s: funktionssingularitet"
+
+#~ msgid "%s: overflow range error"
+#~ msgstr "%s: overløbsintervalfejl"
+
+#~ msgid "%s: underflow range error"
+#~ msgstr "%s: underløbsintervalfejl"
+
+#~ msgid "%s: total loss of precision"
+#~ msgstr "%s: samlet tab af præcision"
+
+#~ msgid "%s: partial loss of precision"
+#~ msgstr "%s: delvist tab af præcision"
+
+#~ msgid "%s: NaN - producing operation"
+#~ msgstr "%s: NaN - producerer operation"
+
+#~ msgid "Pretend that host and target use the same FP format"
+#~ msgstr "Lad som om værten og målet bruger samme kommatalsformat"
+
+#~ msgid "Compile pointers as triples: value, base & end"
+#~ msgstr "Oversæt henvisningsvariabler som tretupler: værdi, basis og slut"
+
+#~ msgid "Do not promote floats to double if using -traditional"
+#~ msgstr "Forfrem ikke float til double hvis -traditional benyttes"
+
+#~ msgid "Attempt to support traditional K&R style C"
+#~ msgstr "Forsøg at understøtte traditionel K&R C"
+
+#~ msgid "internal error: %s"
+#~ msgstr "intern fejl: %s"
+
+#~ msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+#~ msgstr "krydsspring deaktiveret: %d > 1000 basisblokke og %d >= 20 kanter/basisblok"
+
+#~ msgid "  -a                      Enable block profiling \n"
+#~ msgstr "  -a                      Aktivér blokprofilering\n"
+
+#~ msgid "  -ax                     Enable jump profiling \n"
+#~ msgstr "  -ax                     Aktivér springprofilering\n"
+
+#~ msgid "profiling does not work without a frame pointer"
+#~ msgstr "profilering virker ikke uden en rammehenvisning"
+
+#~ msgid "floating point numbers not allowed in #if expressions"
+#~ msgstr "kommatal er ikke tilladt i #if-udtryk"
+
+#~ msgid "invalid number in #if expression"
+#~ msgstr "ugyldigt tal i #if-udtryk"
+
+#~ msgid "invalid character constant in #if"
+#~ msgstr "ugyldig tegnkonstant i #if"
+
+#~ msgid "double quoted strings not allowed in #if expressions"
+#~ msgstr "strenge med dobbelte anførselstegn er ikke tilladte i #if-udtryk"
+
+#~ msgid "invalid token in expression"
+#~ msgstr "ugyldigt symbol udtryk"
+
+#~ msgid "octal character constant does not fit in a byte"
+#~ msgstr "oktal tegnkonstant kan ikke være i en byte"
+
+#~ msgid "hex character constant does not fit in a byte"
+#~ msgstr "hexadecimal tegnkonstant kan ikke være i en byte"
+
+#~ msgid "empty #if expression"
+#~ msgstr "tomt #if-udtryk"
+
+#~ msgid "Junk after end of expression."
+#~ msgstr "ragelse efter slutningen af udtryk"
+
+#~ msgid "macro or #include recursion too deep"
+#~ msgstr "makro eller #include-rekursion er for dyb"
+
+#~ msgid "usage: %s [switches] input output"
+#~ msgstr "brug: %s [tilvalg] inddata uddata"
+
+#~ msgid "-traditional is not supported in C++"
+#~ msgstr "-traditional understøttes ikke i C++"
+
+#~ msgid "-traditional and -ansi are mutually exclusive"
+#~ msgstr "-traditional og -ansi er indbyrdes uforenelige"
+
+#~ msgid "filename missing after -i option"
+#~ msgstr "et filnavn mangler efter tilvalget -i"
+
+#~ msgid "filename missing after -o option"
+#~ msgstr "et filnavn mangler efter tilvalget -o"
+
+#~ msgid "target missing after %s option"
+#~ msgstr "et mål mangler efter tilvalget %s"
+
+#~ msgid "filename missing after %s option"
+#~ msgstr "et filnavn mangler efter tilvalget %s"
+
+#~ msgid "macro name missing after -%c option"
+#~ msgstr "et makronavn mangler efter tilvalget -%c"
+
+#~ msgid "-pedantic and -traditional are mutually exclusive"
+#~ msgstr "-pedantic og -traditional er indbyrdes uforenelige"
+
+#~ msgid "-trigraphs and -traditional are mutually exclusive"
+#~ msgstr "-trigraphs og -traditional er indbyrdes uforenelige"
+
+#~ msgid "directory name missing after -I option"
+#~ msgstr "et katalognavn mangler efter '-I'-tilvalg"
+
+#~ msgid "`/*' within comment"
+#~ msgstr "'/*' i en kommentar"
+
+#~ msgid "unterminated #%s conditional"
+#~ msgstr "uafsluttet #%s-betingelse"
+
+#~ msgid "not in any file?!"
+#~ msgstr "ikke i nogen fil?!"
+
+#~ msgid "`defined' must be followed by ident or (ident)"
+#~ msgstr "'defined' skal efterfølges af et kaldenavn eller (kaldenavn)"
+
+#~ msgid "cccp error: invalid special hash type"
+#~ msgstr "cccp-fejl: ugyldig speciel hash-type"
+
+#~ msgid "#include expects \"fname\" or <fname>"
+#~ msgstr "#include forventer \"filnavn\" eller <filnavn>"
+
+#~ msgid "no include path in which to find %.*s"
+#~ msgstr "der er ingen inkluderingssti at finde %.*s i"
+
+#~ msgid "invalid macro name"
+#~ msgstr "ugyldigt makronavn"
+
+#~ msgid "invalid macro name `%s'"
+#~ msgstr "ugyldigt makronavn '%s'"
+
+#~ msgid "parameter name starts with a digit in #define"
+#~ msgstr "parameternavn begynder med et ciffer i #define"
+
+#~ msgid "badly punctuated parameter list in #define"
+#~ msgstr "ugyldigt punktueret parameterliste i #define"
+
+#~ msgid "unterminated parameter list in #define"
+#~ msgstr "uafsluttet parameterliste i #define"
+
+#~ msgid "\"%.*s\" redefined"
+#~ msgstr "\"%.*s\" omdefineret"
+
+#~ msgid "# operator should be followed by a macro argument name"
+#~ msgstr "operatoren # skal efterfølges af et makroparameternavn"
+
+#~ msgid "invalid format #line command"
+#~ msgstr "ugyldigt formateret #line-kommando"
+
+#~ msgid "undefining `defined'"
+#~ msgstr "glemmer definitionen af 'defined'"
+
+#~ msgid "undefining `%s'"
+#~ msgstr "glemmer definitionen af '%s'"
+
+#~ msgid "extra text at end of directive"
+#~ msgstr "ekstra tekst i slutningen af direktiv"
+
+#~ msgid "#error%.*s"
+#~ msgstr "#error%.*s"
+
+#~ msgid "#warning%.*s"
+#~ msgstr "#warning%.*s"
+
+#~ msgid "#elif not within a conditional"
+#~ msgstr "#elif er ikke inde i betingelsessætning"
+
+#~ msgid "#%s not within a conditional"
+#~ msgstr "#%s ikke inde i betingelsessætning"
+
+#~ msgid "#else or #elif after #else"
+#~ msgstr "#else eller #elif efter #else"
+
+#~ msgid "#else not within a conditional"
+#~ msgstr "#else er ikke inde i betingelsessætning"
+
+#~ msgid "unbalanced #endif"
+#~ msgstr "uafbalanceret #endif"
+
+#~ msgid "unterminated string or character constant"
+#~ msgstr "uafsluttet streng- eller tegnkonstant"
+
+#~ msgid "arguments given to macro `%s'"
+#~ msgstr "parametre givet til makroen '%s'"
+
+#~ msgid "no args to macro `%s'"
+#~ msgstr "ingen parametre givet til makroen '%s'"
+
+#~ msgid "only 1 arg to macro `%s'"
+#~ msgstr "kun 1 parameter givet til makroen '%s'"
+
+#~ msgid "only %d args to macro `%s'"
+#~ msgstr "kun %d parametre givet til makroen '%s'"
+
+#~ msgid "too many (%d) args to macro `%s'"
+#~ msgstr "for mange (%d) parametre givet til makroen '%s'"
+
+#~ msgid ""
+#~ "internal error in %s, at tradcpp.c:%d\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "intern fejl i '%s', ved tradcpp:%d\n"
+#~ "Send venligst en komplet fejlrapport.\n"
+#~ "Se %s for instruktioner."
+
+#~ msgid "optimization turned on"
+#~ msgstr "optimeringer slået til"
+
+#~ msgid "optimization turned off"
+#~ msgstr "optimeringer slået fra"
+
+#~ msgid "optimization level restored"
+#~ msgstr "optimeringsniveau gendannet"
+
+#~ msgid "Use VAX-C alignment"
+#~ msgstr "Brug VAX-C-justering"
+
+#~ msgid "invalid %%V value"
+#~ msgstr "ugyldig %%V-værdi"
+
+#~ msgid "Generate code assuming DW bit is set"
+#~ msgstr "Generér kode der antager at DW-bitten er sat"
+
+#~ msgid "Generate code assuming DW bit is not set"
+#~ msgstr "Generér kode der antager at DW-bitten ikke er sat"
+
+#~ msgid "Generate code using byte writes"
+#~ msgstr "Generér kode der bruger byte-skrivninger"
+
+#~ msgid "Do not generate byte writes"
+#~ msgstr "Generér ikke byte-skrivninger"
+
+#~ msgid "Use small memory model"
+#~ msgstr "Brug en lille hukommelsesmodel"
+
+#~ msgid "Use normal memory model"
+#~ msgstr "Brug en normal hukommelsesmodel"
+
+#~ msgid "Use large memory model"
+#~ msgstr "Brug en stor hukommelsesmodel"
+
+#~ msgid "Generate 29050 code"
+#~ msgstr "Generér 29050-kode"
+
+#~ msgid "Generate 29000 code"
+#~ msgstr "Generér 29000-kode"
+
+#~ msgid "Use kernel global registers"
+#~ msgstr "Bruge kerneglobale registre"
+
+#~ msgid "Use user global registers"
+#~ msgstr "Bruge brugerglobale registre"
+
+#~ msgid "Emit stack checking code"
+#~ msgstr "Generér stakkontrolleringskode"
+
+#~ msgid "Do not emit stack checking code"
+#~ msgstr "Generér ikke stakkontrolleringskode"
+
+#~ msgid "Work around storem hardware bug"
+#~ msgstr "Arbejd rundt om storem-hardwarefejl"
+
+#~ msgid "Do not work around storem hardware bug"
+#~ msgstr "Arbejd ikke rundt om storem-hardwarefejl"
+
+#~ msgid "Store locals in argument registers"
+#~ msgstr "Gem lokale variable i parameterregistre"
+
+#~ msgid "Do not store locals in arg registers"
+#~ msgstr "Gem ikke lokale variable i parameterregistre"
+
+#~ msgid "Do not generate multm instructions"
+#~ msgstr "Generér ikke multm-instruktioner"
+
+#~ msgid "Do symbol renaming for BSD"
+#~ msgstr "Foretag symbolomdøbning for BSD"
+
+#~ msgid "Do symbol renaming for X/OPEN"
+#~ msgstr "Foretag symbolomdøbning for X/OPEN"
+
+#~ msgid "Don't do symbol renaming"
+#~ msgstr "Foretag ikke symbolomdøbning"
+
+#~ msgid "MCU `%s' not supported"
+#~ msgstr "MCU '%s' ikke understøttet"
+
+#~ msgid "Generate code for the C400"
+#~ msgstr "Generér kode til en C400"
+
+#~ msgid "Generate code for the C300"
+#~ msgstr "Generér kode til en C300"
+
+#~ msgid "Generate code for c1"
+#~ msgstr "Generér kode til en c1"
+
+#~ msgid "Generate code for c2"
+#~ msgstr "Generér kode til en c2"
+
+#~ msgid "Generate code for c32"
+#~ msgstr "Generér kode til en c32"
+
+#~ msgid "Generate code for c34"
+#~ msgstr "Generér kode til en c34"
+
+#~ msgid "Use standard calling sequence, with arg count word"
+#~ msgstr "Benyt standardkaldesekvens, med parameterantalsord"
+
+#~ msgid "Place arg count in a nop instruction (faster than push)"
+#~ msgstr "Anbring parameterantal i en nop-instruktion (hurtigere end push)"
+
+#~ msgid "Don't push arg count, depend on symbol table"
+#~ msgstr "Videresend ikke parameterantal, afhæng af symboltabel"
+
+#~ msgid "Use data cache for volatile mem refs (default)"
+#~ msgstr "Benyt datamellemlager for volatile hukommelsesreferencer (standard)"
+
+#~ msgid "Don't use data cache for volatile mem refs"
+#~ msgstr "Benyt ikke datamellemlager for volatile hukommelsesreferencer"
+
+#~ msgid "Bypass data cache for volatile mem refs"
+#~ msgstr "Forbigå datamellemlager for volatile hukommelsesreferencer"
+
+#~ msgid "Use 64-bit longs"
+#~ msgstr "Benyt 64 bit-long"
+
+#~ msgid "Use cc- and libc-compatible 32-bit longs"
+#~ msgstr "Benyt cc- og libc-kompatibel 32 bit-long"
+
+#~ msgid "inline float constants not supported on this host"
+#~ msgstr "integrerede kommatalskonstanter er ikke understøttede på denne vært"
+
+#~ msgid "Generate code the unix assembler can handle"
+#~ msgstr "Generér kode som Unix-maskinkodeoversætteren kan håndtere"
+
+#~ msgid "Generate code an embedded assembler can handle"
+#~ msgstr "Generér kode som en indlejret maskinkodeoversætter kan håndtere"
+
+#~ msgid "Retain standard MXDB information"
+#~ msgstr "Bevar standard-MXDB-info"
+
+#~ msgid "Retain legend information"
+#~ msgstr "Bevar indholdsinfo"
+
+#~ msgid "Generate external legend information"
+#~ msgstr "Generér ekstern indholdsinfo"
+
+#~ msgid "Emit identifying info in .s file"
+#~ msgstr "Udsend identificerende info i .s-fil"
+
+#~ msgid "Warn when a function arg is a structure"
+#~ msgstr "Advar når en funktionsparameter er en struktur"
+
+#~ msgid "argument is a structure"
+#~ msgstr "parameter er en struktur"
+
+#~ msgid "half-pic init called on systems that don't support it"
+#~ msgstr "half-PIC-klargøring kaldt på systemer der ikke understøtter det"
+
+#~ msgid "Profiling uses mcount"
+#~ msgstr "Profilering benytter mcount"
+
+#~ msgid "Emit half-PIC code"
+#~ msgstr "Udsend half-PIC-kode"
+
+#~ msgid "Emit ELF object code"
+#~ msgstr "Udsend ELF-objektkode"
+
+#~ msgid "Emit ROSE object code"
+#~ msgstr "Udsend ROSE-objektkode"
+
+#~ msgid "Symbols have a leading underscore"
+#~ msgstr "Symboler har en indledende understreg"
+
+#~ msgid "Align to >word boundaries"
+#~ msgstr "Justér til >word-grænserne"
+
+#~ msgid "Use mcount for profiling"
+#~ msgstr "Benyt mcount til profilering"
+
+#~ msgid "Use mcount_ptr for profiling"
+#~ msgstr "Benyt mcount_ptr til profilering"
+
+#~ msgid "Generate code which uses the FPU"
+#~ msgstr "Generér kode som bruger FPU'en"
+
+#~ msgid "Do not generate code which uses the FPU"
+#~ msgstr "Generér ikke kode som bruger FPU'en"
+
+#~ msgid "the -mlong-double-64 option does not work yet"
+#~ msgstr "tilvalget -mlong-double-64 virker ikke endnu"
+
+#~ msgid "The -march option is incompatible to -mipsN and therefore ignored."
+#~ msgstr "Tilvalget -march er uforeneligt med -mipsN og derfor ignoreret."
+
+#~ msgid "-mips%d not supported"
+#~ msgstr "-mips%d er ikke understøttet"
+
+#~ msgid "-mabi=%s does not support -mips%d"
+#~ msgstr "-mabi=%s understøtter ikke -mips%d"
+
+#~ msgid "this target does not support the -mabi switch"
+#~ msgstr "denne målarkitektur understøtter ikke tilvalget -mabi"
+
+#~ msgid "bad value (%s) for -mtune= switch"
+#~ msgstr "ugyldig værdi (%s) til tilvalget -mcpu="
+
+#~ msgid "-mips%d does not support 64 bit fp registers"
+#~ msgstr "-mips%d understøtter ikke 64-bit kommatalsregistre"
+
+#~ msgid "-mips%d does not support 64 bit gp registers"
+#~ msgstr "-mips%d understøtter ikke 64-bit almene registre"
+
+#~ msgid "Use OSF PIC"
+#~ msgstr "Benyt OSF PIC"
+
+#~ msgid "Don't use OSF PIC"
+#~ msgstr "Benyt ikke OSF PIC"
+
+#~ msgid "Optimize for 3900"
+#~ msgstr "Optimér for 3900"
+
+#~ msgid "Optimize for 4650"
+#~ msgstr "Optimér for 4650"
+
+#~ msgid "stack frame too big"
+#~ msgstr "stakramme for stor"
+
+#~ msgid "neither varargs or stdarg in mmix_setup_incoming_varargs"
+#~ msgstr "hverken variable parametre eller standardparametre mmix_setup_incoming_varargs"
+
+#~ msgid "oops, not debugged; fixing up value:"
+#~ msgstr "ups, ikke fejlanalyseret; retter værdi:"
+
+#~ msgid "Generate little endian data"
+#~ msgstr "Generér lilleendet data"
+
+#~ msgid "Generate big endian data"
+#~ msgstr "Generér storendet data"
+
+#~ msgid "Turn on maintainer testing code"
+#~ msgstr "Aktivér vedligeholdertestkode"
+
+#~ msgid "Enable Transmeta picoJava extensions"
+#~ msgstr "Aktivér Transmeta picoJava-udvidelser"
+
+#~ msgid "Disable Transmeta picoJava extensions"
+#~ msgstr "Deaktivér Transmeta picoJava-udvidelser"
+
+#~ msgid "Disable reorganization pass"
+#~ msgstr "Deaktivér omorganiseringsfase"
+
+#~ msgid "-f%s ignored (all code is position independent)"
+#~ msgstr "-f%s ignoreret (al kode er positionsuafhængigt)"
+
+#~ msgid "-ffunction-sections disabled on AIX when debugging"
+#~ msgstr "-ffunction-sections deaktiveret på AIX ved fejlanalysering"
+
+#~ msgid "-fdata-sections not supported on AIX"
+#~ msgstr "-fdata-sections er ikke understøttet på AIX"
+
+#~ msgid "argument 3 of `%s' must be a 2-bit literal"
+#~ msgstr "parameter til '%s' skal være en 2 bit-konstant"
+
+#~ msgid "%%S computed all 1's mask"
+#~ msgstr "%%S beregnede alle 1'eres maske"
+
+#~ msgid "%%S computed all 0's mask"
+#~ msgstr "%%S beregnede alle 0's maske"
+
+#~ msgid "no viable candidates"
+#~ msgstr "ingen mulige kandidater"
+
+#~ msgid "cannot pass objects of non-POD type `%#T' through `...'"
+#~ msgstr "kan ikke videregive objekter af en ikke-POD type '%#T' gennem '...'"
+
+#~ msgid "`%D' has already been declared in `%T'"
+#~ msgstr "'%D' er allerede blevet erklæret i '%T'"
+
+#~ msgid "typedef `%D' is initialized"
+#~ msgstr "typedef '%D' bliver tildelt en startværdi"
+
+#~ msgid "`%D' as declarator"
+#~ msgstr "'%D' som erklærer"
+
+#~ msgid "size of member `%D' is not constant"
+#~ msgstr "størrelsen af medlemmet '%D' er ikke konstant"
+
+#~ msgid "cannot declare %s to references"
+#~ msgstr "kan ikke erklære %s til referencer"
+
+#~ msgid "invalid type: `void &'"
+#~ msgstr "ugyldig type: 'void &'"
+
+#~ msgid "typedef declaration includes an initializer"
+#~ msgstr "typedef-erklæringen indeholder en startværdi"
+
+#~ msgid "-fname-mangling-version is no longer supported"
+#~ msgstr "-fname-mangling-version understøttes ikke længere"
+
+#~ msgid "candidate%s: %+#D"
+#~ msgstr "candidate%s: %+#D"
+
+#~ msgid "                %#D"
+#~ msgstr "                %#D"
+
+#~ msgid "member initializers for `%#D'"
+#~ msgstr "medlemsstartværdier for '%#D'"
+
+#~ msgid "  will be re-ordered to match declaration order"
+#~ msgstr "  vil blive omordnet for at passe til erklæringsordenen"
+
+#~ msgid "multiple initializations given for member `%D'"
+#~ msgstr "flere startværdier angivet for medlemmet '%D'"
+
+#~ msgid "base initializers for `%#T'"
+#~ msgstr "stamklasseklargøring for '%#T'"
+
+#~ msgid "  will be re-ordered to match inheritance order"
+#~ msgstr "  vil blive omordnet for at passe til nedarvningsordenen"
+
+#~ msgid "base class `%T' already initialized"
+#~ msgstr "stamklassen '%T' er allerede klargjort"
+
+#~ msgid "implementation-reserved name `%D' used"
+#~ msgstr "implementationsreserveret navn '%D' benyttet"
+
+#~ msgid "explicit instantiation of `%#D' after"
+#~ msgstr "eksplicit instantiering af '%#D' efter"
+
+#~ msgid "explicit specialization here"
+#~ msgstr "eksplicit specialisering her"
+
+#~ msgid "explicit instantiation of `%#T' after"
+#~ msgstr "eksplicit instantiering af '%#T' efter"
+
+#~ msgid "base initializer for `%T'"
+#~ msgstr "stamklasseklargøring for '%T'"
+
+#~ msgid "   will be re-ordered to precede member initializations"
+#~ msgstr "  vil blive omordnet for at komme før medlemsklargøringer"
+
+#~ msgid "ignoring `%V' qualifiers on `%T'"
+#~ msgstr "ignorerer modifikationerne '%V' til '%T'"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to a function type"
+#~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' på en funktionstype"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to a member function"
+#~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' på en medlemsfunktion"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type"
+#~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' på typen 'void' som er en ufuldstændig type"
+
+#~ msgid "`sizeof' applied to non-static member"
+#~ msgstr "'sizeof' benyttet på et ikke-statisk medlem"
+
+#~ msgid "`sizeof' applied to incomplete type `%T'"
+#~ msgstr "'sizeof' benyttet på en ufuldstændig type '%T'"
+
+#~ msgid "request for member `%T::%D' in expression of non-aggregate type `%T'"
+#~ msgstr "forespørgsel for medlemmet '%T::%D' i udtryk med den ikke-sammensatte type '%T'"
+
+#~ msgid "invalid use of type decl `%#D' as expression"
+#~ msgstr "ugyldig brug af typeerklæring '%#D' som udtryk"
+
+#~ msgid "invalid use of template `%#D' as expression"
+#~ msgstr "ugyldig brug af skabelon '%#D' som udtryk"
+
+#~ msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead"
+#~ msgstr "ugyldig offsetof fra ikke-POD type '%#T'; benyt henvisning til medlem i stedet"
+
+#~ msgid "pointer to member function called, but not in class scope"
+#~ msgstr "henvisning til medlem-funktion kaldt, men ikke i klassevirkefelt"
+
+#~ msgid "object missing in call to method `%D'"
+#~ msgstr "objekt mangler i kald til metoden '%D'"
+
+#~ msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?"
+#~ msgstr "funktionen '%D' erklæret flertydigt, men ingen definition optræder til at passe den sammen med?!?"
+
+#~ msgid "invalid call to member function needing `this' in static member function scope"
+#~ msgstr "ugyldigt kald af medlemsfunktion som har brug for 'this', i et statisk medlemsfunktionsvirkefelt"
+
+#~ msgid "unary `&'"
+#~ msgstr "unær '&'"
+
+#~ msgid "invalid use of undefined type `%#T'"
+#~ msgstr "ugyldig brug af en ikke-defineret type '%#T'"
+
+#~ msgid "forward declaration of `%#T'"
+#~ msgstr "forhåndserklæring af '%#T'"
+
+#~ msgid "invalid use of `%T'"
+#~ msgstr "ugyldig brug af '%T'"
+
+#~ msgid "invalid use of member (did you forget the `&' ?)"
+#~ msgstr "ugyldig brug af medlem (glemte du en '&'?)"
+
+#~ msgid "invalid use of template type parameter"
+#~ msgstr "ugyldig brug af skabelonstypeparameter"
+
+#~ msgid "address of overloaded function with no contextual type information"
+#~ msgstr "adresse af flertydig funktion uden kontekstuelle typeoplysninger"
+
+#~ msgid "overloaded function with no contextual type information"
+#~ msgstr "flertydig funktion uden kontekstuelle typeoplysninger"
+
+#~ msgid "insufficient contextual information to determine type"
+#~ msgstr "utilstrækkelige kontekstuelle oplysninger til at afgøre typen"
+
+#~ msgid "initializer list construction invalid for derived class object `%D'"
+#~ msgstr "klargøringslistekonstruktion er ugyldig for nedarvet klasseobjekt '%D'"
+
+#~ msgid "initializer list construction invalid for polymorphic class object `%D'"
+#~ msgstr "klargøringslistekonstruktion er ugyldig for polymorfisk klasseobjekt '%D'"
+
+#~ msgid "initializer list construction invalid for `%D'"
+#~ msgstr "klargøringslistekonstruktion er ugyldig for '%D'"
+
+#~ msgid "due to the presence of a constructor"
+#~ msgstr "pga. af tilstedeværelsen af en konstruktionsfunktion"
+
+#~ msgid "due to non-public access of member `%D'"
+#~ msgstr "pga. ikke-public tilgang af medlemmet '%D'"
+
+#~ msgid "ISO C++ forbids non-constant aggregate initializer expressions"
+#~ msgstr "ISO C++ forbyder ikke-konstante startværdiudtryk for sammensatte typer"
+
+#~ msgid "The meaning of `\\x' (at %0) varies with -traditional"
+#~ msgstr "Betydningen af '\\x' (ved %0) skifter med -traditional"
+
+#~ msgid "The meaning of `\\a' (at %0) varies with -traditional"
+#~ msgstr "Betydningen af '\\a' (ved %0) skifter med -traditional"
+
+#~ msgid "the meaning of `\\x' varies with -traditional"
+#~ msgstr "betydningen af '\\x' skifter med -traditional"
+
+#~ msgid "the meaning of `\\a' varies with -traditional"
+#~ msgstr "betydningen af '\\a' skifter med -traditional"
+
+#~ msgid "parse error; also virtual memory exceeded"
+#~ msgstr "tolkningsfejl; desuden løbet tør for virtuel hukommelse"
+
+#~ msgid "Can't specify array dimension in a declaration"
+#~ msgstr "Kan ikke angive tabeldimension i en erklæring"
+
+#~ msgid "internal error - use of undefined type"
+#~ msgstr "intern fejl - brug af ikke-defineret type"
+
+#~ msgid "no class name specified as argument to -fconstant-string-class"
+#~ msgstr "intet klassenavn angivet som parameter til -fconstant-string-class"
+
+#~ msgid "-p profiling is no longer supported.  Use -pg instead"
+#~ msgstr "profilgenerering med -p understøttes ikke længere; benyt -pg i stedet for"
+
+#~ msgid "incompatible interworking options"
+#~ msgstr "uforenelige samvirkende tilvalg"
+
+#~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive"
+#~ msgstr "-mabi=mmixware og -mabi=gnu er indbyrdes uforenelige"
+
+#~ msgid "-p option not supported: use -pg instead"
+#~ msgstr "tilvalget -p understøttes ikke; benyt -pg i stedet"
+
+#~ msgid "-mbsd and -pedantic incompatible"
+#~ msgstr "-mbsd og -pedantic er indbyrdes uforenelige"
+
+#~ msgid "-mbsd and -mxopen incompatible"
+#~ msgstr "-mbsd og -mxopen er indbyrdes uforenelige"
+
+#~ msgid "-mxopen and -pedantic incompatible"
+#~ msgstr "-mxopen og -pedantic er indbyrdes uforenelige"
+
+#~ msgid "may not use both -mfp64 and -msingle-float"
+#~ msgstr "-mfp64 og -msingle-float er indbyrdes uforenelige"
+
+#~ msgid "may not use both -mfp64 and -m4650"
+#~ msgstr "-mfp64 og -m4650 er indbyrdes uforenelige"
+
+#~ msgid "may not use both -mgp32 and -mfp64"
+#~ msgstr "-mgp32 og -mfp64 er indbyrdes uforenelige"
+
+#~ msgid "Only initialized variables can be placed into program memory area."
+#~ msgstr "Kun variabler med startværdi kan placeres i programhukommelsesområdet."
+
+#~ msgid "declaration of `%#T'"
+#~ msgstr "erklæring af '%#T'"
+
+#~ msgid "a -ifile option requires a -map option"
+#~ msgstr "et '-ifile'-tilvalg kræver et '-map'-tilvalg"
+
+#~ msgid "%s before character constant"
+#~ msgstr "%s før tegnkonstant"
+
+#~ msgid "%s before character 0%o"
+#~ msgstr "%s før tegn 0%o"
+
+#~ msgid "invalid identifier `%s'"
+#~ msgstr "ugyldigt kaldenavn '%s'"
+
+#~ msgid "parse error at `..'"
+#~ msgstr "tolkningsfejl ved '..'"
+
+#~ msgid "nondigits in number and not hexadecimal"
+#~ msgstr "tegn der ikke er cifre, optræder i tal"
+
+#~ msgid "two `u's in integer constant"
+#~ msgstr "to 'u'-endelser i heltalskonstant"
+
+#~ msgid "`[*]' in parameter declaration only allowed in ISO C 99"
+#~ msgstr "'[*]' i parametererklæring kun tilladt i ISO C 99"
+
+#~ msgid "invalid `for (ITERATOR)' syntax"
+#~ msgstr "ugyldigt 'for (LØKKEVARIABEL)'-syntaks"
+
+#~ msgid "`for (%s)' inside expansion of same iterator"
+#~ msgstr "'for (%s)' inden i udfoldning af samme løkkevariabel"
+
+#~ msgid "case label within scope of cleanup or variable array"
+#~ msgstr "case-etiket i oprydningsområde eller i en variabel tabel"
+
+#~ msgid "wrong type argument to %s"
+#~ msgstr "forkert parametertype til %s"
+
+#~ msgid "invalid lvalue in increment"
+#~ msgstr "ugyldig venstreværdi i forøgelse"
+
+#~ msgid "invalid lvalue in decrement"
+#~ msgstr "ugyldig venstreværdi i formindskelse"
+
+#~ msgid "increment"
+#~ msgstr "forøgelse"
+
+#~ msgid "decrement"
+#~ msgstr "formindskelse"
+
+#~ msgid "duplicate array index in initializer"
+#~ msgstr "tabelindeks i startværdi optræder mere end én gang"
+
+#~ msgid "thumb_load_double_from_address: destination is not a register"
+#~ msgstr "thumb_load_double_from_adress: destination er ikke et register"
+
+#~ msgid "thumb_load_double_from_address: source is not a computed memory address"
+#~ msgstr "thumb_load_double_from_adress: kilden er ikke en beregnet hukommelsesadresse"
+
+#~ msgid "thumb_load_double_from_address: Unhandled address calculation"
+#~ msgstr "thumb_load_double_from_adress: adresseberegningen er ikke håndteret"
+
+#~ msgid "ACCUM_HIGH_REGS class in limit_reload_class"
+#~ msgstr "ACCUM_HIGH_REGS-klasse i limit_reload_class"
+
+#~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class"
+#~ msgstr "YH_OR_ACCUM_HIGH_REGS fundet i limit_reload_class"
+
+#~ msgid "YL found in limit_reload_class"
+#~ msgstr "YL fundet i limit_reload_class"
+
+#~ msgid "Invalid register for compare"
+#~ msgstr "Ugyldigt register til sammenligningen"
+
+#~ msgid "Internal gcc abort from %s:%d"
+#~ msgstr "Intern GCC-afbrydelse fra %s:%d"
+
+#~ msgid "Register '%c' already specified in allocation order"
+#~ msgstr "Registret '%c' er allerede angivet i tildelingsordenen"
+
+#~ msgid "Same as -mcpu=i386"
+#~ msgstr "Magen til -mcpu=i386"
+
+#~ msgid "Same as -mcpu=i486"
+#~ msgstr "Magen til -mcpu=i486"
+
+#~ msgid "Same as -mcpu=pentium"
+#~ msgstr "Magen til -mcpu=pentium"
+
+#~ msgid "Same as -mcpu=pentiumpro"
+#~ msgstr "Magen til -mcpu=pentiumpro"
+
+#~ msgid "Emit Intel syntax assembler opcodes"
+#~ msgstr "Konstruér instruktionerne til maskinkodeoversætteren med Intel-syntaks"
+
+#~ msgid "invalid %H value"
+#~ msgstr "ugyldig %H-værdi"
+
+#~ msgid "invalid %h value"
+#~ msgstr "ugyldig %h-værdi"
+
+#~ msgid "invalid %Q value"
+#~ msgstr "ugyldig %Q-værdi"
+
+#~ msgid "invalid %q value"
+#~ msgstr "ugyldig %q-værdi"
+
+#~ msgid "invalid %p value"
+#~ msgstr "ugyldig %p-værdi"
+
+#~ msgid "invalid %B value"
+#~ msgstr "ugyldig %B-værdi"
+
+#~ msgid "invalid %C value"
+#~ msgstr "ugyldig %C-værdi"
+
+#~ msgid "invalid %E value"
+#~ msgstr "ugyldig %E-værdi"
+
+#~ msgid "invalid %r value"
+#~ msgstr "ugyldig %r-værdi"
+
+#~ msgid "-mcpu=%s does not support -mips%d"
+#~ msgstr "-mcpu=%s understøtter ikke -mips%d"
+
+#~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT"
+#~ msgstr "PRINT_OPERAND: bogstavet %c blev fundet og instruktionen var ikke CONST_INT"
+
+#~ msgid "-mptr%d not allowed on -m%d"
+#~ msgstr "-mptr%d er ikke tilladt på -m%d"
+
+#~ msgid "parse errors have confused me too much"
+#~ msgstr "tolkningsfejl er blevet for forvirrende"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "løbet tør for virtuel hukommelse"
+
+#~ msgid "the new ABI requires vtable thunks"
+#~ msgstr "den nye binære grænseflade kræver virtuel tabel-afdelinger"
+
+#~ msgid "`void' in parameter list must be entire list"
+#~ msgstr "'void' i en parameterliste skal udgøre hele listen"
+
+#~ msgid "no file specified with -fdump-translation-unit"
+#~ msgstr "ingen filer angivet med -fdump-translation-unit"
+
+#~ msgid "`__alignof__' applied to a bit-field"
+#~ msgstr "'__alignof__' brugt på et bitfelt"
+
+#~ msgid "(you really want to initialize it separately)"
+#~ msgstr "(klargør den separat)"
+
+#~ msgid "`operator new' takes type `size_t' parameter"
+#~ msgstr "'operator new' skal have en parameter af typen 'size_t'"
+
+#~ msgid "`...' invalid in specification of `operator delete'"
+#~ msgstr "'...' er ugyldigt i angivelsen af 'operator delete'"
+
+#~ msgid "`default' label within scope of cleanup or variable array"
+#~ msgstr "'default'-etiket i oprydningsområde eller i en variabel tabel"
+
+#~ msgid "initializer for unnamed base class ambiguous"
+#~ msgstr "klargøring af unavngiven stamklasse er flertydig"
+
+#~ msgid "invalid #pragma vtable"
+#~ msgstr "ugyldig #pragma vtable"
+
+#~ msgid "%s at end of saved text"
+#~ msgstr "%s ved slutningen af den gemte tekst"
+
+#~ msgid "complex integer constant is too wide for `__complex int'"
+#~ msgstr "kompleks heltalskonstant er for bred til '__complex int'"
+
+#~ msgid "ambiguous request for method pointer `%s'"
+#~ msgstr "flertydig forespørgsel efter medlemsfunktionshenvisningen '%s'"
+
+#~ msgid "taking dynamic typeid of object with -fno-rtti"
+#~ msgstr "forsøg på at finde den dynamiske typeid af et objekt med -fno-rtti"
+
+#~ msgid "`com_interface' only supported with -fvtable-thunks"
+#~ msgstr "'com_interface' understøttes kun med -fvtable-thunks"
+
+#~ msgid "invalid reference to NULL ptr, use ptr-to-member instead"
+#~ msgstr "ugyldig reference til NULL-henvisning, benyt en henvisning til medlem i stedet"
+
+#~ msgid "Please submit a full bug report."
+#~ msgstr "Send venligst en komplet fejlrapport."
+
+#~ msgid "duplicate label `%s' in switch statement"
+#~ msgstr "mere end én '%s'-etiket i switch-sætningen"
+
+#~ msgid "duplicate label (%d) in switch statement"
+#~ msgstr "mere end én etiket (%d) i switch-sætningen"
+
+#~ msgid "range values `%s' and `%s' reversed"
+#~ msgstr "intervalværdierne '%s' og '%s' vender omvendt"
+
+#~ msgid "range values reversed"
+#~ msgstr "intervalværdierne vender omvendt"
+
+#~ msgid "Can't create cross-reference file `%s'"
+#~ msgstr "Kan ikke oprette krydsreferencefilen '%s'"
+
+#~ msgid "bad is_error(%d) in v_message"
+#~ msgstr "ugyldig is_error(%d) i v_message"
+
+#~ msgid "'defined' without an identifier"
+#~ msgstr "'defined' optræder uden et kaldenavn"
+
+#~ msgid "`##' at start of macro definition"
+#~ msgstr "'##' i begyndelsen af makrodefinitionen"
+
+#~ msgid "empty object-like macro went through full #define"
+#~ msgstr "en tom objektlignende makro gik gennem komplet #define"
+
+#~ msgid "first token = %d not %d in collect_formal_parameters"
+#~ msgstr "første symbol = %d er ikke %d i collect_formal_parameters"
+
+#~ msgid "impossible token in macro argument list"
+#~ msgstr "umuligt symbol i makroparameterlisten"
+
+#~ msgid "illegal token in macro argument list"
+#~ msgstr "ugyldigt symbol i makroparameterlisten"
+
+#~ msgid "another parameter follows \"...\""
+#~ msgstr "der optræder en parameter mere efter \"...\""
+
+#~ msgid "collect_params: argc=%d argslen=0"
+#~ msgstr "collect_params: argc=%d argslen=0"
+
+#~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name"
+#~ msgstr "C99 tillader ikke brug af __VA_ARGS__ som makroparameternavn"
+
+#~ msgid "C89 does not permit varargs macros"
+#~ msgstr "C89 tillader ikke variabel parameterliste-makroer"
+
+#~ msgid "collect_params: impossible token type %d"
+#~ msgstr "collect_params: umulig symboltype %d"
+
+#~ msgid "attempt to use poisoned `%s'."
+#~ msgstr "forsøg på at bruge forgiftet '%s'"
+
+#~ msgid "macroexpand: unexpected token %d (wanted LPAREN)"
+#~ msgstr "macroexpand: forventede ikke symbol %d (skulle have været LPAREN)"
+
+#~ msgid "unterminated macro call"
+#~ msgstr "uafsluttet makrokald"
+
+#~ msgid "macro `%s' used with just one arg"
+#~ msgstr "makroen '%s' kaldt med kun én parameter"
+
+#~ msgid "macro `%s' used with only %d args"
+#~ msgstr "makroen '%s' kaldt med kun %d parametre"
+
+#~ msgid "macro `%s' used with too many (%d) args"
+#~ msgstr "makroen '%s' kaldt med for mange (%d) parametre"
+
+#~ msgid "buffers still stacked in cpp_finish"
+#~ msgstr "mellemlagre er stadig stakket op i cpp_finish"
+
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ "  -pedantic                 Issue all warnings demanded by strict ANSI C\n"
+#~ "  -pedantic-errors          Issue -pedantic warnings as errors instead\n"
+#~ "  -traditional              Follow K&R pre-processor behaviour\n"
+#~ "  -trigraphs                Support ANSI C trigraphs\n"
+#~ "  -lang-c                   Assume that the input sources are in C\n"
+#~ "  -lang-c89                 Assume that the input sources are in C89\n"
+#~ "  -lang-c++                 Assume that the input sources are in C++\n"
+#~ "  -lang-objc                Assume that the input sources are in ObjectiveC\n"
+#~ "  -lang-objc++              Assume that the input sources are in ObjectiveC++\n"
+#~ "  -lang-asm                 Assume that the input sources are in assembler\n"
+#~ "  -lang-fortran\t\t    Assume that the input sources are in Fortran\n"
+#~ "  -lang-chill               Assume that the input sources are in Chill\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999\n"
+#~ "  -+                        Allow parsing of C++ style features\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -Wtrigraphs               Warn if trigraphs are encountered\n"
+#~ "  -Wno-trigraphs            Do not warn about trigraphs\n"
+#~ "  -Wcomment{s}              Warn if one comment starts inside another\n"
+#~ "  -Wno-comment{s}           Do not warn about comments\n"
+#~ "  -Wtraditional             Warn if a macro argument is/would be turned into\n"
+#~ "                             a string if -traditional is specified\n"
+#~ "  -Wno-traditional          Do not warn about stringification\n"
+#~ "  -Wundef                   Warn if an undefined macro is used by #if\n"
+#~ "  -Wno-undef                Do not warn about testing undefined macros\n"
+#~ "  -Wimport                  Warn about the use of the #import directive\n"
+#~ "  -Wno-import               Do not warn about the use of #import\n"
+#~ "  -Werror                   Treat all warnings as errors\n"
+#~ "  -Wno-error                Do not treat warnings as errors\n"
+#~ "  -Wall                     Enable all preprocessor warnings\n"
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       As -M, but put output in a .d file\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ "  -g3                       Include #define and #undef directives in the output\n"
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question> (<answer>)   Assert the <answer> to <question>\n"
+#~ "  -A-<question> (<answer>)  Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -$                        Do not allow '$' in identifiers\n"
+#~ "  -remap                    Remap file names when including files.\n"
+#~ "  --version                 Display version information\n"
+#~ "  -h or --help              Display this information\n"
+#~ msgstr ""
+#~ "Tilvalg:\n"
+#~ "  -include <fil>            Inkludér indholdet af <fil> før andre filer\n"
+#~ "  -imacros <fil>            Læs makrodefinitionerne i <fil>\n"
+#~ "  -iprefix <sti>            Angiv <sti> som et præfiks til de næste to tilvalg\n"
+#~ "  -iwithprefix <ktlg>       Føj <ktlg> til slutningen af systeminkluderingsstien\n"
+#~ "  -withprefixbefore <ktlg>  Føj <ktlg> til slutningen af den alm. inkluderingssti\n"
+#~ "  -isystem <ktlg>           Føj <ktlg> til begyndelsen af systeminkluderingsstien\n"
+#~ "  -idirafter <ktlg>         Føj <ktlg> til slutningen af systeminkluderingsstien\n"
+#~ "  -I <ktlg>                 Føj <ktlg> til slutningen af den alm. inkluderingssti\n"
+#~ "  -I-                       Nøje kontrolleret inkluderingssti; se info-hjælpen\n"
+#~ "  -nostdinc                 Søg ikke i systeminkluderingskataloger\n"
+#~ "                             (kataloger angivet med -isystem søges dog stadig)\n"
+#~ "  -nostdinc++               Søg ikke i systeminkluderingskataloger til C++\n"
+#~ "  -o <fil>                  Send uddata til <fil>\n"
+#~ "  -pedantic                 Fremkom med alle advarsler påkrævet for nøje ISO C\n"
+#~ "  -pedantic-errors          Behandl '-pedantic'-advarsler som fejl\n"
+#~ "  -traditional              Iagttag opførsel som en K&R-præprocessor\n"
+#~ "  -trigraphs                Understøt ANSI C-trigrafer\n"
+#~ "  -lang-c                   Antag at inddata er C\n"
+#~ "  -lang-c89                 Antag at inddata er C89\n"
+#~ "  -lang-c++                 Antag at inddata er C++\n"
+#~ "  -lang-cobjc               Antag at inddata er Objective C\n"
+#~ "  -lang-cobjc++             Antag at inddata er Objective C++\n"
+#~ "  -lang-asm                 Antag at inddata er maskinkode\n"
+#~ "  -lang-fortran             Antag at inddata er Fortran\n"
+#~ "  -lang-chill               Antag at inddata er Chill\n"
+#~ "  -std=<standardnavn>       Angiv at koden retter sig efter en af standarderne:\n"
+#~ "                             gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                             iso9899:199409, iso9899:1999\n"
+#~ "  -+                        Tillad fortolkning af faciliteter i C++-stil\n"
+#~ "  -w                        Blokér advarselsmeddelelser\n"
+#~ "  -Wtrigraphs               Advar hvis der optræder trigrafer\n"
+#~ "  -Wno-trigraphs            Advar ikke om trigrafer\n"
+#~ "  -Wcomment{s}              Advar hvis en kommentar begynder inden i en anden\n"
+#~ "  -Wno-comment{s}           Advar ikke om kommentarer\n"
+#~ "  -Wtraditional             Advar hvis en makroparameter vil blive gjort til en\n"
+#~ "                             streng med -traditional\n"
+#~ "  -Wno-traditional          Advar ikke om omdannelse til streng\n"
+#~ "  -Wundef                   Advar hvis en ikkedefineret makro bruges med #if\n"
+#~ "  -Wno-undef                Advar ikke om test på makroer der ikke er definerede\n"
+#~ "  -Wimport                  Advar om brug af #import\n"
+#~ "  -Wno-import               Advar ikke om brug af #import\n"
+#~ "  -Werror                   Behandl alle advarsler som fejl\n"
+#~ "  -Wno-error                Behandl ikke alle advarsler som fejl\n"
+#~ "  -Wall                     Slå alle præprocessoradvarsler til\n"
+#~ "  -M                        Generér afhængigheder til make\n"
+#~ "  -MM                       Som -M, men ignorér systeminkluderingsfiler\n"
+#~ "  -MD                       Som -M, men anbring uddata i en '.d'-fil\n"
+#~ "  -MMD                      Som -MD, men ignorér systeminkluderingsfiler\n"
+#~ "  -MG                       Behandl manglende inkl.-filer som genererede filer\n"
+#~ "  -g3                       Inkludér #define- og #undef-direktiver i uddata\n"
+#~ "  -D<makro>                 Definér makroen <makro> med strengen '1' som værdi\n"
+#~ "  -D<makro>=<værdi>         Definér makroen <makro> med værdien <værdi>\n"
+#~ "  -A<spørgsmål> (<svar>)    Angiv at <svar> er svar på <spørgsmål>\n"
+#~ "  -A-<spørgsmål> (<svar>)   Angiv at <svar> ikke er svar på <spørgsmål>\n"
+#~ "  -U<makro>                 Glem definitionen af <makro>\n"
+#~ "  -v                        Skriv versionsnummeret\n"
+#~ "  -H                        Skriv navnene på inkluderingsfilerne når de bruges\n"
+#~ "  -C                        Fjern ikke kommentarer\n"
+#~ "  -dM                       Vis til sidst de aktive makrodefinitioner\n"
+#~ "  -dD                       Bevar makrodefinitioner i uddata\n"
+#~ "  -dN                       Som -dD bortset fra at kun navnene bevares\n"
+#~ "  -dI                       Inkludér #include-anvisninger i uddata\n"
+#~ "  -ftabstop=<tal>           Afstand mellem tabulatorstop i kolonnerapportering\n"
+#~ "  -P                        Generér ikke #line-angivelser\n"
+#~ "  -$                        Tillad ikke '$' i kaldenavne\n"
+#~ "  -remap                    Omdan filnavne ved filinkludering\n"
+#~ "  --version                 Udskriv versionsinformation\n"
+#~ "  -h eller --help           Vis denne vejledning\n"
+
+#~ msgid "mark active in cpp_pop_buffer"
+#~ msgstr "markér aktiv i cpp_pop_buffer"
+
+#~ msgid "length < 0 in cpp_expand_to_buffer"
+#~ msgstr "længden < 0 i cpp_expand_to_buffer"
+
+#~ msgid "backslash-newline within line comment"
+#~ msgstr "omvendt skråstreg efterfulgt af linjeskift fundet i en enkeltlinjeskommentar"
+
+#~ msgid "C++ style comments are not allowed in traditional C"
+#~ msgstr "kommentarer i C++-stil er ikke tilladt i traditionel C"
+
+#~ msgid "string constant runs past end of line"
+#~ msgstr "strengkonstanten går ud over slutningen af linjen"
+
+#~ msgid "missing '>' in `#include <FILENAME>'"
+#~ msgstr "manglende '>' i '#include <FILNAVN>'"
+
+#~ msgid "vertical tab in preprocessing directive"
+#~ msgstr "lodret tabulator i præprocessordirektiv"
+
+#~ msgid "form feed in preprocessing directive"
+#~ msgstr "sideskift i præprocessordirektiv"
+
+#~ msgid "null character preserved"
+#~ msgstr "nultegn bevaret"
+
+#~ msgid "comment start split across lines"
+#~ msgstr "kommentarbegyndelsen delt over to linjer"
+
+#~ msgid "comment start '/*' split across lines"
+#~ msgstr "kommentarbegyndelsen '/*' delt over to linjer"
+
+#~ msgid "comment end '*/' split across lines"
+#~ msgstr "kommentarslutningen '*/' delt over to linjer"
+
+#~ msgid "handle_directive called on macro buffer"
+#~ msgstr "handle_directive kaldt med et makromellemlager"
+
+#~ msgid "ignoring #%s because of its indented #"
+#~ msgstr "ignorerer #%s på grund af den indrykkede '#'"
+
+#~ msgid "ISO C does not allow #%s"
+#~ msgstr "ISO C tillader ikke #%s"
+
+#~ msgid "redefining poisoned `%.*s'"
+#~ msgstr "omdefinerer forgiftet '%.*s'"
+
+#~ msgid "garbage at end of #line"
+#~ msgstr "ragelse i slutningen af #line"
+
+#~ msgid "second token after #line is not a string"
+#~ msgstr "det andet symbol efter #line er ikke en streng"
+
+#~ msgid "junk on line after #undef"
+#~ msgstr "ragelse på linjen efter #undef"
+
+#~ msgid "cannot undefine poisoned \"%s\""
+#~ msgstr "kan ikke glemme definitionen af forgiftet \"%s\""
+
+#~ msgid "#%s with invalid argument"
+#~ msgstr "#%s med ugyldig parameter"
+
+#~ msgid "Cannot duplicate non-existant exception region."
+#~ msgstr "Kan ikke mangfoldiggøre en ikkeeksisterende undtagelsesregion."
+
+#~ msgid "Never issued previous false_label"
+#~ msgstr "Sørgede ikke for tidligere false_label"
+
+#~ msgid "output_operand: %s"
+#~ msgstr "output_operand: %s"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d\n"
+
+#~ msgid "file path prefix `%s%s' never used"
+#~ msgstr "stipræfikset '%s%s' blev aldrig brugt"
+
+#~ msgid "file path prefix `%s' never used"
+#~ msgstr "stipræfikset '%s' blev aldrig brugt"
+
+#~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n"
+#~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil\n"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget '--%s' tillader ikke en parameter\n"
+
+#~ msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget '%c%s' tillader ikke en parameter\n"
+
+#~ msgid "%s: option `%s' requires an argument\n"
+#~ msgstr "%s: tilvalget '%s' skal have en parameter\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: ukendt tilvalg '--%s'\n"
+
+#~ msgid "%s: unrecognized option `%c%s'\n"
+#~ msgstr "%s: ukendt tilvalg '%c%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#~ msgid "%s: invalid option -- %c\n"
+#~ msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#~ msgid "%s: option requires an argument -- %c\n"
+#~ msgstr "%s: tilvalget skal have en parameter -- %c\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget '-W %s' tillader ikke en parameter\n"
+
+#~ msgid "Objective-C text in C source file"
+#~ msgstr "Objective C-tekst i C-kildekodefil"
+
+#~ msgid "statically allocated objects not supported"
+#~ msgstr "statisk allokerede objekter understøttes ikke"
+
+#~ msgid "`asm' cannot be used in function where memory usage is checked"
+#~ msgstr "'asm' kan ikke benyttes i funktioner hvor hukommelsesforbruget bliver tjekket"
+
+#~ msgid "`asm' cannot be used with `-fcheck-memory-usage'"
+#~ msgstr "'asm' kan ikke benyttes sammen med '-fcheck-memory-usage'"
+
+#~ msgid "output operand constraint %d contains `+'"
+#~ msgstr "uddataoperandbegrænsning %d indeholder '+'"
+
+#~ msgid "hard register `%s' listed as input operand to `asm'"
+#~ msgstr "hardware-register '%s' angivet som inddataoperand til 'asm'"
+
+#~ msgid "output pipe has been closed"
+#~ msgstr "uddataledningen er blevet lukket"
+
+#~ msgid "Errors detected in input file (your bison.simple is out of date)\n"
+#~ msgstr "Fandt fejl i inddatafilen (din bison.simple er forældet)\n"
+
+#~ msgid "Data size %ld.\n"
+#~ msgstr "Datastørrelse %ld.\n"
+
+#~ msgid "Unknown stab %s: : 0x%x\n"
+#~ msgstr "Ukendt stab %s: : 0x%x\n"
+
+#~ msgid "__builtin_trap not supported by this target"
+#~ msgstr "__builtin_trap understøttes ikke på denne målarkitektur"
+
+#~ msgid "`%s' previously defined here"
+#~ msgstr "'%s' tidligere defineret her"
+
+#~ msgid "`%s' previously declared here"
+#~ msgstr "'%s' tidligere erklæret her"
+
+#~ msgid "profiling does not support code models other than medlow"
+#~ msgstr "profilgenerering understøtter ikke andre kodemodeller end medlow"
+
+#~ msgid "Control allocation order of integer registers"
+#~ msgstr "Kontrollér tildelingsordenen for heltalsregistrene"
diff --git a/libcpp/po/de.po b/libcpp/po/de.po
new file mode 100644 (file)
index 0000000..57dc56c
--- /dev/null
@@ -0,0 +1,6550 @@
+# German translation of gcc messages.
+# Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Karl Eichwalder <ke@suse.de>, 2002, 2003.
+# Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007.
+# This file is distributed under the same license as the gcc package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.3-b20071109\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-11-11 11:11+0100\n"
+"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "Konvertierung von %s nach %s wird von iconv nicht unterstützt"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "keine Implementation für iconv, es kann nicht von %s nach %s konvertiert werden"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "Zeichen 0x%lx ist nicht im regulären Quellzeichensatz\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "Konvertierung in Zeichensatz der Ausführung"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "Zeichen 0x%lx ist kein Unibyte im Ausführungs-Zeichensatz"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Zeichen %x ist nicht in NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "universelle Zeichennamen sind nur in C++ und C99 gültig"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "die Bedeutung von '\\%c' ist in traditionellem C anders"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "In _cpp_valid_ucn, aber kein UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "unvollständiger Universal-Zeichenname %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "»%.*s« ist kein gültiges universelles Zeichen"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "'$' in Bezeichner oder Zahl"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "universelles Zeichen %.*s ist nicht gültig in Bezeichner"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "universelles Zeichen %.*s ist nicht gültig am Anfang eines Bezeichners"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "UCN wird in Quellzeichensatz konvertiert"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "UCN wird in Ausführungszeichensatz konvertiert"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "die Bedeutung von '\\x' ist in traditionellem C anders"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x ohne folgende Hex-Ziffern verwendet"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "Hex-Fluchtsequenz außerhalb des Wertebereiches"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "Oktal-Fluchtsequenz außerhalb des Wertebereiches"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "die Bedeutung von '\\a' ist in traditionellem C anders"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "nicht-ISO-standardkonforme Fluchtsequenz '\\%c'"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "unbekannte Fluchtsequenz '\\%c'"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "unbekannte Fluchtsequenz: '\\%s'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "Fluchtsequenz wird in Zeichensatz der Ausführung konvertiert"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "Zeichenkonstante zu lang für ihren Typ"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "Zeichenkonstante mit mehreren Zeichen"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "Leere Zeichenkonstante"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "Fehler beim Konvertieren von %s nach %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "mehrere Token am Ende der Direktive #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s ist eine Erweiterung des GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "es wird empfohlen, in traditionellem C nicht #elif zu verwenden"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "traditionelles C ignoriert #%s mit eingerücktem #"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "es wird empfohlen, #%s vor traditionellem C mit # zu verbergen"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "das Einbetten einer Direktive innerhalb von Makroargumenten ist nicht portierbar"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "der Stil der line-Direktive ist eine Erweiterung des GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "ungültige Präprozessordirektive #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "»defined« kann nicht als Makroname verwendet werden"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "»%s« kann nicht als Makroname verwendet werden, da es ein Operator in C++ ist"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "kein Makroname in Direktive #%s angegeben"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "Makronamen müssen Bezeichner sein"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "»%s« wird un-definiert"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "fehlendes abschließendes »>«-Zeichen"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s erwartet \"DATEINAME\" oder <DATEINAME>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "leerer Dateiname in #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include ist zu tief geschachtelt"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next in erster Quelldatei"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "ungültiges Kennzeichen »%s« in line-Direktive"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "»%s« hinter #line ist keine positive Ganzzahl"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "Zeilennummer ist außerhalb des Wertebereiches"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "»%s« ist kein gültiger Dateiname"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "»%s« hinter # ist keine positive Ganzzahl"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "ungültige #%s-Direktive"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "Pragmas im Namespace »%s« werden ohne passende Namensauflösung registriert"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "Pragma »%s« wird mit Namensauflösung und ohne Namespace registriert"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "»%s« wird sowohl als Pragma als auch als Pragma-Namespace registriert"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s ist bereits registriert"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s ist bereits registriert"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "Pragma mit NULL-Handler wird registriert"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once in Hauptdatei"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "ungültige #pragma GCC Poison Direktive"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "schlechtes existierendes Makro »%s«"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header außerhalb include-Datei ignoriert"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "Quelldatei %s kann nicht gefunden werden"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "aktuelle Datei ist älter als %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma nimmt ein geklammertes Zeichenkettenliteral"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else ohne #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else hinter #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "die Bedingung begann hier"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif ohne #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif hinter #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif ohne #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "fehlendes '(' hinter Prädikat"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "fehlendes ')', um Antwort abzuschließen"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "Prädikatantwort ist leer"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "Behauptung ohne Prädikat"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "Prädikat muss ein Bezeichner sein"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "»%s« wieder behauptet"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "unbeendetes #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "nicht beendeter Kommentar"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "Warnung: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "interner Fehler: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "Fehler: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "Standardausgabe"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "zu viele Dezimalpunkte in Zahl"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr "Festkommakonstanten sind eine GCC-Erweiterung"
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "ungültige Ziffer »%c« in binärer Konstante"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "ungültige Ziffer »%c« in Oktal-Konstante"
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "ungültiger Prefix »0b« für Gleitkommakonstante"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "Verwendung von hexadezimaler C99-Gleitkommakonstante"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "Exponent hat keine Ziffern"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "hexadezimale Gleitkommakonstanten benötigen Exponenten"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "ungültiger Suffix »%.*s« an Gleitkommakonstante"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "traditionelles C lehnt den Suffix »%.*s« ab"
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "ungültiger Suffix »%.*s« mit hexadezimaler Gleitkommakonstante"
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr "dezimale Gleitkommakonstanten sind eine GCC-Erweiterung"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "ungültiger Suffix »%.*s« an Ganzzahlkonstante"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "C99 long long Ganzzahlkonstante verwendet"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "imaginäre Konstanten sind eine GCC-Erweiterung"
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr "binäre Konstanten sind eine GCC-Erweiterung"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "Ganzzahlkonstante ist zu groß für ihren Typ"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "Ganzzahlkonstante ist so groß, dass sie vorzeichenlos ist"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "fehlendes ')' hinter »defined«"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "Operator »defined« erfordert einen Bezeichner"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(»%s« ist ein alternatives Token for »%s« in C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "diese Verwendung von »defined« könnte nicht portierbar sein"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "Gleitkommakonstante in Präprozessorausdruck"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "imaginäre Zahl in Präprozessorausdruck"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "»%s« ist nicht definiert"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "fehlender binärer Operator vor Token »%s«"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "Token »%s« ist nicht gültig in Präprozessorausdrücken"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "fehlender Ausdruck zwischen '(' und ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if ohne Ausdruck"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "Operator »%s« hat keinen rechten Operanden"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "Operator »%s« hat keinen linken Operanden"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " ':' ohne vorangehendes '?'"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "unausgeglichener Keller in #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "unmöglicher Operator '%u'"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "fehlendes ')' in Ausdruck"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' ohne folgendes ':'"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "Ganzzahlüberlauf in Präprozessorausdruck"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "fehlendes '(' in Ausdruck"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "der linke Operand von »%s« ändert bei der Weitergabe das Vorzeichen"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "der rechte Operand von »%s« ändert bei der Weitergabe das Vorzeichen"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "traditionelles C weist den unären Plus-Operator zurück"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "Kommaoperator in Operand von #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "Division durch Null in #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "NULL-Verzeichnis in find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "ein oder mehrere PCH-Dateien wurden gefunden, aber sie sind ungültig"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "-Winvalid-pch für mehr Informationen verwenden"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s ist ein Block-Gerät"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s ist zu groß"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s ist kürzer als erwartet"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "kein Include-Pfad, um %s zu finden"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Mehrere Include-Wächter könnten nützlich sein für:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t muss ein vorzeichenloser Typ sein"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "Präprozessorarithmetik hat maximale Präzision von %lu Bits; Ziel erfordert %lu Bits"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP-Arithmetik muss mindestens so genau sein wie das Ziel int"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "Ziel-char ist weniger als 8 Bits breit"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "Ziel-wchar_t ist schmaler als Ziel char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "Ziel-int ist schmaler als Ziel-char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP Halb-Ganzzahl ist schmaler als CPP-Zeichen"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP kann auf diesem Computer keine Wide-Zeichenkonstanten über %lu Bits Breite behandeln, das Ziel benötigt %lu Bits"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "Backslash und Newline durch Leerzeichen getrennt"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "Backslash-Newline am Dateiende"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "Trigraph ??%c in %c konvertiert"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "Trigraph ??%c ignoriert, -trigraphs zum Aktivieren verwenden"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "»/*« innerhalb des Kommentars"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s in Präprozessordirektive"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "Null-Zeichen ignoriert"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "»%.*s« ist nicht in NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "»%.*s« ist nicht in NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "Versuch, schlechtes »%s« zu verwenden"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ kann nur in Erweiterung eines variadischen C99-Makros auftreten"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "Null-Zeichen im Literal erhalten"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "fehlendes abschließendes Zeichen %c"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++-Stil-Kommentare sind in ISO-C90 nicht erlaubt"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(dies wird nur einmal pro Eingabedatei gemeldet)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "mehrzeiliger Kommentar"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "nicht buchstabierbares Token %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "In Datei, eingefügt von %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 von %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "Makro »%s« wird nicht benutzt"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ungültiges eingebautes Makro »%s«"
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "Datum und Zeit der Datei konnten nicht bestimmt werden"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "Datum und Zeit konnten nicht bestimmt werden"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "__COUNTER__ innerhalb von Anweisung mit -fdirectives-only expandiert"
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ungültiges Zeichenkettenliteral, abschließendes '\\' wird ignoriert"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "das Einfügen von »%s« und »%s« ergibt kein gültiges Präprozessor-Token"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO-C99 erfordert, dass Restargumente verwendet werden"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "Makro »%s« erfordert %u Argumente, aber nur %u wurden angegeben"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "dem Makro »%s« wurden %u Argumente übergeben, aber es nimmt nur %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "unvollendete Argumentliste beim Makroaufruf »%s«"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "funktionsähnliches Makro »%s« muss mit Argumenten in traditionellem C verwendet werden"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "doppelter Makroparameter »%s«"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "»%s« darf nicht in Makroparameterliste auftreten"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "Makroparameter müssen mit Komma getrennt sein"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "Parametername fehlt"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "anonyme variadische Makros wurden in C99 eingeführt"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO-C erlaubt keine benannten variadischen Makros"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "fehlendes ')' in Makroparameterliste"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' kann nicht an den Enden einer Makroexpansion auftreten"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO-C99 erfordert Whitespace hinter Makroname"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "Whitespace hinter Makroname fehlt"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' wird nicht von einem Makroparameter gefolgt"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "»%s« redefiniert"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "dies ist die Stelle der vorherigen Definition"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "Makroargument »%s« würde in traditionellem C zum String gewandelt werden"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "ungültiger Hash-Typ %d in cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "beim Schreiben des vorkompilierten Headers"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: nicht verwendet, da »%.*s« nicht definiert"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: nicht verwendet, da »%.*s« als »%s« statt als »%.*s« definiert wurde"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: nicht verwendet, da »%s« definiert ist"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: nicht verwendet, da »__COUNTER__« ungültig ist"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "beim Lesen des vorkompilierten Headers"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "Rekursion bei Expansion des Makros »%s« entdeckt"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "Syntaxfehler in Makroparameterliste"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "Kein Newline am Dateiende"
+
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "unbekannte Fluchtsequenz: '\\%03o'"
+
+#~ msgid "`%s' attribute directive ignored"
+#~ msgstr "Attribut-Anweisung »%s« wird ignoriert"
+
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "falsche Anzahl an Argumenten für das Attribut »%s« angegeben"
+
+#~ msgid "`%s' attribute does not apply to types"
+#~ msgstr "Attribut »%s« kann nicht auf Typen angewandt werden"
+
+#~ msgid "`%s' attribute only applies to function types"
+#~ msgstr "Attribut »%s« kann nur auf Funktionstypen angewandt werden"
+
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "Attribut »%s« wird ignoriert"
+
+#~ msgid "offset outside bounds of constant string"
+#~ msgstr "Adressabstand ist außerhalb der Grenzen der konstanten Zeichenkette"
+
+#~ msgid "second arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "zweites Argument für »__builtin_prefetch« muss eine Konstante sein"
+
+#~ msgid "invalid second arg to __builtin_prefetch; using zero"
+#~ msgstr "ungültiges zweites Argument für »__builtin_prefetch«; es wird Null verwendet"
+
+#~ msgid "third arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "drittes Argument für »__builtin_prefetch« muss eine Konstante sein"
+
+#~ msgid "invalid third arg to __builtin_prefetch; using zero"
+#~ msgstr "ungültiges drittes Argument für »__builtin_prefetch«; es wird Null verwendet"
+
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "Argument von »__builtin_args_info« muss konstant sein"
+
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "Argument von »__builtin_args_info« außerhalb des Wertebereichs"
+
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "fehlendes Argument in »__builtin_args_info«"
+
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr "»va_start« in Funktion mit fester Parameterzahl verwendet"
+
+#~ msgid "second parameter of `va_start' not last named argument"
+#~ msgstr "zweiter Parameter von »va_start« ist nicht letztgenanntes Argument"
+
+#~ msgid "`__builtin_next_arg' called without an argument"
+#~ msgstr "»__builtin_next_arg« ohne Argument gerufen"
+
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "zu viele Argumente für »va_start«"
+
+#~ msgid "first argument to `va_arg' not of type `va_list'"
+#~ msgstr "erstes Argument für »va_arg« nicht vom Typ »va_list«"
+
+#~ msgid "`%s' is promoted to `%s' when passed through `...'"
+#~ msgstr "»%s« auf »%s« gesetzt beim Durchlaufen von »...«"
+
+#~ msgid "(so you should pass `%s' not `%s' to `va_arg')"
+#~ msgstr "(Sie sollten also »%s« statt »%s« an »va_arg« übergeben)"
+
+#~ msgid "invalid arg to `__builtin_frame_address'"
+#~ msgstr "ungültiges Argument für »__builtin_frame_address«"
+
+#~ msgid "invalid arg to `__builtin_return_address'"
+#~ msgstr "ungültiges Argument für »__builtin_return_address«"
+
+#~ msgid "unsupported arg to `__builtin_frame_address'"
+#~ msgstr "nicht unterstütztes Argument für »__builtin_frame_address«"
+
+#~ msgid "unsupported arg to `__builtin_return_address'"
+#~ msgstr "nicht unterstütztes Argument für »__builtin_return_address«"
+
+#~ msgid "second arg to `__builtin_expect' must be a constant"
+#~ msgstr "zweites Argument für »__builtin_expect« muss eine Konstante sein"
+
+#~ msgid "__builtin_longjmp second argument must be 1"
+#~ msgstr "zweites Argument für __builtin_longjmp muss 1 sein"
+
+#~ msgid "built-in function `%s' not currently supported"
+#~ msgstr "eingebaute Funktion »%s« gegenwärtig nicht unterstützt"
+
+#~ msgid "target format does not support infinity"
+#~ msgstr "Zielformat unterstützt nicht »unendlich«"
+
+#~ msgid "%Hsuggest explicit braces to avoid ambiguous `else'"
+#~ msgstr "%Hes wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeutiges »else« zu vermeiden"
+
+#~ msgid "%J'%D' is not defined outside of function scope"
+#~ msgstr "%J»%D« ist außerhalb des Funktionsgültigkeitsbereiches nicht definiert"
+
+#~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support"
+#~ msgstr "Zeichenkettenlänge »%d« ist größer als die Länge »%d«, die von ISO-C%d-Compilern unterstützt werden muss"
+
+#~ msgid "overflow in constant expression"
+#~ msgstr "Überlauf in Konstanten-Ausdruck"
+
+#~ msgid "integer overflow in expression"
+#~ msgstr "Ganzzahlüberlauf in Ausdruck"
+
+#~ msgid "floating point overflow in expression"
+#~ msgstr "Gleitkommaüberlauf in Ausdruck"
+
+#~ msgid "vector overflow in expression"
+#~ msgstr "Vektorüberlauf in Ausdruck"
+
+#~ msgid "large integer implicitly truncated to unsigned type"
+#~ msgstr "große Ganzzahl implizit auf vorzeichenlosen Typen abgeschnitten"
+
+#~ msgid "negative integer implicitly converted to unsigned type"
+#~ msgstr "negative Ganzzahl implizit in vorzeichenlosen Typen konvertiert"
+
+#~ msgid "overflow in implicit constant conversion"
+#~ msgstr "Überlauf in impliziter Konstantenkonvertierung"
+
+#~ msgid "operation on `%s' may be undefined"
+#~ msgstr "Operation auf »%s« könnte undefiniert sein"
+
+#~ msgid "expression statement has incomplete type"
+#~ msgstr "Ausdrucksanweisung hat unvollständigen Typ"
+
+#~ msgid "case label does not reduce to an integer constant"
+#~ msgstr "case-Marke reduziert nicht auf Ganzzahlkonstante"
+
+#~ msgid "invalid truth-value expression"
+#~ msgstr "ungültiger Wahrheitswert-Ausdruck"
+
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "ungültige Operanden für binäres %s"
+
+#~ msgid "comparison is always false due to limited range of data type"
+#~ msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »unwahr«"
+
+#~ msgid "comparison is always true due to limited range of data type"
+#~ msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »wahr«"
+
+#~ msgid "comparison of unsigned expression >= 0 is always true"
+#~ msgstr "Vergleich eines vorzeichenlosen Ausdrucks >= 0 ist stets »wahr«"
+
+#~ msgid "comparison of unsigned expression < 0 is always false"
+#~ msgstr "Vergleich eines vorzeichenlosen Ausdrucks < 0 ist stets »unwahr«"
+
+#~ msgid "pointer of type `void *' used in arithmetic"
+#~ msgstr "Zeiger auf Typen »void *« in Arithmetik verwendet"
+
+#~ msgid "pointer to a function used in arithmetic"
+#~ msgstr "Zeiger auf Funktion in Arithmetik verwendet"
+
+#~ msgid "pointer to member function used in arithmetic"
+#~ msgstr "Zeiger auf Elementfunktion in Arithmetik verwendet"
+
+#~ msgid "pointer to a member used in arithmetic"
+#~ msgstr "Zeiger auf Element in Arithmetik verwendet"
+
+#~ msgid "struct type value used where scalar is required"
+#~ msgstr "Wert eines struct-Typs anstelle des geforderten Skalars verwendet"
+
+#~ msgid "union type value used where scalar is required"
+#~ msgstr "Wert eines union-Typs anstelle des geforderten Skalars verwendet"
+
+#~ msgid "array type value used where scalar is required"
+#~ msgstr "Wert eines array-Typs anstelle des geforderten Skalars verwendet"
+
+#~ msgid "the address of `%D', will always evaluate as `true'"
+#~ msgstr "die Adresse von »%D« wird immer zu »true« auswerten"
+
+#~ msgid "suggest parentheses around assignment used as truth value"
+#~ msgstr "um Zuweisung, die als Wahrheitswert verwendet wird, werden Klammern vorgeschlagen"
+
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "ungültige Verwendung von »restrict«"
+
+#~ msgid "invalid application of `sizeof' to a function type"
+#~ msgstr "ungültige Anwendung von »sizeof« auf einen Funktionstypen"
+
+#~ msgid "invalid application of `%s' to a void type"
+#~ msgstr "ungültige Anwendung von »%s« auf einen void-Typen"
+
+#~ msgid "invalid application of `%s' to an incomplete type"
+#~ msgstr "ungültige Anwendung von »%s« auf einen unvollständigen Typen"
+
+#~ msgid "`__alignof' applied to a bit-field"
+#~ msgstr "»__alignof« auf Bitfeld angewandt"
+
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "kann eingebaute Funktion »%s« nicht abschalten"
+
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "zu wenig Argumente für Funktion »%s«"
+
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "zu viele Argumente für Funktion »%s«"
+
+#~ msgid "non-floating-point argument to function `%s'"
+#~ msgstr "nicht-Gleitkomma-Argument für Funktion »%s«"
+
+#~ msgid "pointers are not permitted as case values"
+#~ msgstr "Zeiger sind nicht als case-Werte zugelassen"
+
+#~ msgid "range expressions in switch statements are non-standard"
+#~ msgstr "Wertebereichsausdrücke in switch-Anweisungen sind nicht standardkonform"
+
+#~ msgid "empty range specified"
+#~ msgstr "leerer Wertebereich angegeben"
+
+#~ msgid "duplicate (or overlapping) case value"
+#~ msgstr "doppelte (oder sich überschneidende) case-Werte"
+
+#~ msgid "%Jthis is the first entry overlapping that value"
+#~ msgstr "%Jdies ist der erste Eintrag, der diesen Wert überschneidet"
+
+#~ msgid "duplicate case value"
+#~ msgstr "doppelter case-Wert"
+
+#~ msgid "%Jpreviously used here"
+#~ msgstr "%Jbereits hier verwendet"
+
+#~ msgid "multiple default labels in one switch"
+#~ msgstr "mehrere Standardmarken in einem »switch«"
+
+#~ msgid "%Jthis is the first default label"
+#~ msgstr "%Jdies ist die erste Standardmarke"
+
+#~ msgid "taking the address of a label is non-standard"
+#~ msgstr "das Ermitteln der Adresse einer Marke ist nicht standardkonform"
+
+#~ msgid "%Hignoring return value of `%D', declared with attribute warn_unused_result"
+#~ msgstr "%Hder Rückgabewert von »%D« mit dem Attribut warn_unused_result wird ignoriert"
+
+#~ msgid "%Hignoring return value of function declared with attribute warn_unused_result"
+#~ msgstr "%Hder Rückgabewert der Funktion, die mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert"
+
+#~ msgid "declaration of \"%s\" shadows a parameter"
+#~ msgstr "Deklaration von »%s« überdeckt einen Parameter"
+
+#~ msgid "declaration of \"%s\" shadows a previous local"
+#~ msgstr "Deklaration von »%s« überdeckt einen vorhergehenden lokalen Bezeichner"
+
+#~ msgid "declaration of \"%s\" shadows a global declaration"
+#~ msgstr "Deklaration von »%s« überdeckt eine globale Deklaration"
+
+#~ msgid "%Jshadowed declaration is here"
+#~ msgstr "%Jverdeckte Deklaration ist hier"
+
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "unbekannter Maschinenzustand »%s«"
+
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "kein Datentyp für Zustand »%s«"
+
+#~ msgid "invalid pointer mode `%s'"
+#~ msgstr "ungültiger Zeigermodus »%s«"
+
+#~ msgid "unable to emulate '%s'"
+#~ msgstr "»%s« kann nicht emuliert werden"
+
+#~ msgid "%Jsection attribute cannot be specified for local variables"
+#~ msgstr "%JAbschnitts-Attribut kann nicht für lokale Variablen angegeben werden"
+
+#~ msgid "%Jsection of '%D' conflicts with previous declaration"
+#~ msgstr "%JAbschnitt von »%D« in Konflikt mit vorheriger Deklaration"
+
+#~ msgid "%Jsection attribute not allowed for '%D'"
+#~ msgstr "%JAbschnitts-Attribute nicht erlaubt für »%D«"
+
+#~ msgid "%Jsection attributes are not supported for this target"
+#~ msgstr "%JAbschnitts-Attribute werden für dieses Ziel nicht unterstützt"
+
+#~ msgid "requested alignment is not a constant"
+#~ msgstr "verlangte Ausrichtung ist keine Konstante"
+
+#~ msgid "requested alignment is not a power of 2"
+#~ msgstr "verlangte Ausrichtung ist keine Zweierpotenz"
+
+#~ msgid "requested alignment is too large"
+#~ msgstr "verlangte Ausrichtung ist zu groß"
+
+#~ msgid "%Jalignment may not be specified for '%D'"
+#~ msgstr "%Jfür »%D« darf keine Ausrichtung angegeben werden"
+
+#~ msgid "%J'%D' defined both normally and as an alias"
+#~ msgstr "%J»%D« sowohl normal als auch als Alias definiert"
+
+#~ msgid "alias arg not a string"
+#~ msgstr "Alias-Argument ist keine Zeichenkette"
+
+#~ msgid "visibility arg not a string"
+#~ msgstr "Sichtbarkeitsargument ist keine Zeichenkette"
+
+#~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\""
+#~ msgstr "Sichtbarkeitsargument muss »default«, »hidden«, »protected« oder »internal« sein"
+
+#~ msgid "tls_model arg not a string"
+#~ msgstr "Argument für tls_model ist keine Zeichenkette"
+
+#~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\""
+#~ msgstr "Argument für tls_model muss »local-exec«, »initial-exec«, »local-dynamic« oder »global-dynamic« sein"
+
+#~ msgid "%J'%E' attribute applies only to functions"
+#~ msgstr "%JAttribut »%E« kann nur auf Funktionen angewandt werden"
+
+#~ msgid "%Jcan't set '%E' attribute after definition"
+#~ msgstr "%Jkann Attribut »%E« nicht nach der Definition setzen"
+
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "Attribut »%s« ignoriert für »%s«"
+
+#~ msgid "invalid vector type for attribute `%s'"
+#~ msgstr "ungültiger Vektortyp für Attribut »%s«"
+
+#~ msgid "no vector mode with the size and type specified could be found"
+#~ msgstr "Vektorzustand mit der angegebenen Größe und dem angegebenen Typ konnte nicht gefunden werden"
+
+#~ msgid "nonnull attribute without arguments on a non-prototype"
+#~ msgstr "Nicht-Null-Attribut ohne Argumente für einen Nicht-Prototyp"
+
+#~ msgid "nonnull argument has invalid operand number (arg %lu)"
+#~ msgstr "Nicht-Null-Argument hat ungültige Operandenzahl (Argument %lu)"
+
+#~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)"
+#~ msgstr "Nicht-Null-Argument mit Operandenzahl außerhalb des Wertebereiches (Argument %lu, Operand %lu)"
+
+#~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)"
+#~ msgstr "Nicht-Null-Argument referenziert Nicht-Zeiger-Operanden (Argument %lu, Operand %lu)"
+
+#~ msgid "null argument where non-null required (arg %lu)"
+#~ msgstr "Null-Argument, wo Nicht-Null erwartet (Argument %lu)"
+
+#~ msgid "cleanup arg not an identifier"
+#~ msgstr "Argument für cleanup ist kein Bezeichner"
+
+#~ msgid "cleanup arg not a function"
+#~ msgstr "Argument für cleanup ist keine Funktion"
+
+#~ msgid "%s at end of input"
+#~ msgstr "%s am Ende der Eingabe"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s vor %s'%c'"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s vor %s'\\x%x'"
+
+#~ msgid "%s before string constant"
+#~ msgstr "%s vor Zeichenkettenkonstante"
+
+#~ msgid "%s before numeric constant"
+#~ msgstr "%s vor numerischer Konstante"
+
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s vor \"%s\""
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s vor »%s«"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "void value not ignored as it ought to be"
+#~ msgstr "void-Wert nicht ignoriert wie es sein sollte"
+
+#~ msgid "conversion to non-scalar type requested"
+#~ msgstr "Konvertierung zu Nicht-Skalar-Typ verlangt"
+
+#~ msgid "%Jarray '%D' assumed to have one element"
+#~ msgstr "%JFeld »%D« als einelementig betrachtet"
+
+#~ msgid "%Jlabel `%D' used but not defined"
+#~ msgstr "%JMarke »%D« verwendet, aber nicht definiert"
+
+#~ msgid "%Jlabel `%D' defined but not used"
+#~ msgstr "%JMarke »%D« definiert aber nicht verwendet"
+
+#~ msgid "%Jlabel `%D' declared but not defined"
+#~ msgstr "%JMarke »%D« deklariert, aber nicht definiert"
+
+#~ msgid "%Junused variable `%D'"
+#~ msgstr "%JVariable »%D« wird nicht verwendet"
+
+#~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration"
+#~ msgstr "eine Parameterliste mit Auslassung passt nicht zu einer leeren Parameternamenslistendeklaration"
+
+#~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration"
+#~ msgstr "ein Argumenttyp mit Standard-Promotion passt nicht zu leerer Parameternamenslistendeklaration"
+
+#~ msgid "%Jprototype for '%D' declares more arguments than previous old-style definition"
+#~ msgstr "%JPrototyp für »%D« deklariert mehr Argumente als vorherige Definition im alten Stil"
+
+#~ msgid "%Jprototype for '%D' declares fewer arguments than previous old-style definition"
+#~ msgstr "%JPrototyp für »%D« deklariert weniger Argumente als vorherige Definition im alten Stil"
+
+#~ msgid "%Jprototype for '%D' declares arg %d with incompatible type"
+#~ msgstr "%JPrototyp für »%D« deklariert Argument %d mit inkompatiblem Typen"
+
+#~ msgid "%Jprototype for '%D' follows non-prototype definition"
+#~ msgstr "%JPrototyp für »%D« folgt einer Nicht-Prototyp-Definition"
+
+#~ msgid "%Jprevious definition of '%D' was here"
+#~ msgstr "%Jvorherige Definition von »%D« war hier"
+
+#~ msgid "%Jprevious implicit declaration of '%D' was here"
+#~ msgstr "%Jvorherige implizite Deklaration von »%D« war hier"
+
+#~ msgid "%Jprevious declaration of '%D' was here"
+#~ msgstr "%Jvorherige Deklaration von »%D« war hier"
+
+#~ msgid "%J'%D' redeclared as different kind of symbol"
+#~ msgstr "%J»%D« redeklariert als andere Symbolart"
+
+#~ msgid "%Jbuilt-in function '%D' declared as non-function"
+#~ msgstr "%Jeingebaute Funktion »%D« als Nicht-Funktion deklariert"
+
+#~ msgid "%Jshadowing built-in function '%D'"
+#~ msgstr "%Jeingebaute Funktion »%D« überdeckt"
+
+#~ msgid "%Jconflicting types for built-in function '%D'"
+#~ msgstr "%Jin Konflikt stehende Typen für eingebaute Funktion »%D«"
+
+#~ msgid "%Jconflicting types for '%D'"
+#~ msgstr "%Jin Konflikt stehende Typen für »%D«"
+
+#~ msgid "%Jredefinition of typedef '%D'"
+#~ msgstr "%JRedefinition des typedef »%D«"
+
+#~ msgid "%Jredefinition of '%D'"
+#~ msgstr "%JRedefinition von »%D«"
+
+#~ msgid "%Jstatic declaration of '%D' follows non-static declaration"
+#~ msgstr "%Jstatische Deklaration von »%D« folgt Nicht-statischer Deklaration"
+
+#~ msgid "%Jnon-static declaration of '%D' follows static declaration"
+#~ msgstr "%JNicht-statische-Deklaration von »%D« folgt statischer Deklaration"
+
+#~ msgid "%Jthread-local declaration of '%D' follows non-thread-local declaration"
+#~ msgstr "%JThread-lokale Deklaration von »%D« folgt nicht-Thread-lokaler Deklaration"
+
+#~ msgid "%Jnon-thread-local declaration of '%D' follows thread-local declaration"
+#~ msgstr "%JNicht-Thread-lokale Deklaration von »%D« folgt Thread-lokaler Deklaration"
+
+#~ msgid "%Jextern declaration of '%D' follows declaration with no linkage"
+#~ msgstr "%Jextern-Deklaration von »%D« folgt Deklaration ohne Bindung"
+
+#~ msgid "%Jdeclaration of '%D' with no linkage follows extern declaration"
+#~ msgstr "%JDeklaration von »%D« ohne Bindung folgt einer externen Deklaration"
+
+#~ msgid "%Jredeclaration of '%D' with no linkage"
+#~ msgstr "%JRedeklarationen von »%D« ohne Bindung"
+
+#~ msgid "%Jredeclaration of '%D' with different visibility (old visibility preserved)"
+#~ msgstr "%JRedeklaration von »%D« mit anderer Sichtbarkeit (alte Sichtbarkeit beibehalten)"
+
+#~ msgid "%Jinline declaration of '%D' follows declaration with attribute noinline"
+#~ msgstr "%Jinline-Deklaration von »%D« folgt Deklaration mit Attribut noinline"
+
+#~ msgid "%Jdeclaration of '%D' with attribute noinline follows inline declaration "
+#~ msgstr "%JDeklaration von »%D« mit Attribut noinline folgt inline-Deklaration "
+
+#~ msgid "%J'%D' declared inline after being called"
+#~ msgstr "%J»%D« als inline deklariert nachdem es aufgerufen wurde"
+
+#~ msgid "%J'%D' declared inline after its definition"
+#~ msgstr "%J»%D« nach der Definition als inline deklariert"
+
+#~ msgid "%Jvolatile declaration of '%D' follows non-volatile declaration"
+#~ msgstr "%J»volatile«-Deklaration von »%D« folgt nicht-»volatile«-Deklaration"
+
+#~ msgid "%Jnon-volatile declaration of '%D' follows volatile declaration"
+#~ msgstr "%JNicht-»volatile«-Deklaration von »%D« folgt »volatile«-Deklaration"
+
+#~ msgid "%Jconst declaration of '%D' follows non-const declaration"
+#~ msgstr "%Jconst-Deklaration für »%D« folgt Nicht-const Deklaration"
+
+#~ msgid "%Jnon-const declaration of '%D' follows const declaration"
+#~ msgstr "%JNicht-const-Deklaration von »%D« folgt const-Deklaration"
+
+#~ msgid "%Jredundant redeclaration of '%D'"
+#~ msgstr "%Jredundante Redeklaration von »%D«"
+
+#~ msgid "nested extern declaration of `%s'"
+#~ msgstr "geschachtelte extern-Deklaration von »%s«"
+
+#~ msgid "%Jprevious declaration of '%D'"
+#~ msgstr "%Jvorherige Deklaration von »%D«"
+
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "implizite Deklaration der Funktion »%s«"
+
+#~ msgid "`%s' undeclared here (not in a function)"
+#~ msgstr "»%s« ist hier nicht deklariert (nicht in einer Funktion)"
+
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "»%s« nicht deklariert (erste Benutzung in dieser Funktion)"
+
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt"
+
+#~ msgid "for each function it appears in.)"
+#~ msgstr "für jede Funktion in der er auftritt.)"
+
+#~ msgid "label %s referenced outside of any function"
+#~ msgstr "Marke %s außerhalb einer Funktion referenziert"
+
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "doppelte Markendeklaration »%s«"
+
+#~ msgid "%Jthis is a previous declaration"
+#~ msgstr "%Jdies ist eine vorherige Deklaration"
+
+#~ msgid "%Hduplicate label `%D'"
+#~ msgstr "%Hdoppelte Marke »%D«"
+
+#~ msgid "%J`%D' previously defined here"
+#~ msgstr "%J»%D« bereits hier definiert"
+
+#~ msgid "%J`%D' previously declared here"
+#~ msgstr "%J»%D« bereits hier deklariert"
+
+#~ msgid "%Htraditional C lacks a separate namespace for labels, identifier `%s' conflicts"
+#~ msgstr "%Htraditionelles C bietet keinen separaten Namespace für Marken an, Bezeichner »%s« steht in Konflikt"
+
+#~ msgid "%H`%s' defined as wrong kind of tag"
+#~ msgstr "%H»%s« definiert als falsche Symbolart"
+
+#~ msgid "unnamed struct/union that defines no instances"
+#~ msgstr "unbenannte struct/union, die keine Instanzen definiert"
+
+#~ msgid "useless keyword or type name in empty declaration"
+#~ msgstr "nutzloses Schlüsselwort oder Typenname in leerer Deklaration"
+
+#~ msgid "two types specified in one empty declaration"
+#~ msgstr "zwei Typen in einer leeren Deklaration angegeben"
+
+#~ msgid "empty declaration"
+#~ msgstr "leere Deklaration"
+
+#~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators"
+#~ msgstr "ISO-C90 unterstützt kein »static« oder Typkennzeichner in Parameterfelddeklaratoren"
+
+#~ msgid "ISO C90 does not support `[*]' array declarators"
+#~ msgstr "ISO-C90 unterstützt nicht »[*]«-Felddeklaratoren"
+
+#~ msgid "GCC does not yet properly implement `[*]' array declarators"
+#~ msgstr "GCC implementiert noch keine richtigen »[*]«-Felddeklaratoren"
+
+#~ msgid "static or type qualifiers in abstract declarator"
+#~ msgstr "static oder Typkennzeichner in abstraktem Deklarator"
+
+#~ msgid "%J'%D' is usually a function"
+#~ msgstr "%J»%D« ist üblicherweise eine Funktion"
+
+#~ msgid "typedef `%s' is initialized (use __typeof__ instead)"
+#~ msgstr "typedef »%s« ist initialisiert (benutzen Sie stattdessen __typeof__)"
+
+#~ msgid "function `%s' is initialized like a variable"
+#~ msgstr "Funktion »%s« ist wie eine Variable initialisiert"
+
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "Parameter »%s« ist initialisiert"
+
+#~ msgid "variable-sized object may not be initialized"
+#~ msgstr "Objekt variabler Größe darf nicht initialisiert werden"
+
+#~ msgid "variable `%s' has initializer but incomplete type"
+#~ msgstr "Variable »%s« hat Initialisierung, aber unvollständigen Typ"
+
+#~ msgid "elements of array `%s' have incomplete type"
+#~ msgstr "Elemente des Feldes »%s« haben unvollständigen Typ"
+
+#~ msgid "%Jinline function '%D' given attribute noinline"
+#~ msgstr "%Jinline-Funktion »%D« wurde das Attribut »noinline« gegeben"
+
+#~ msgid "%Jinitializer fails to determine size of '%D'"
+#~ msgstr "%JInitialisierung scheitert an Größenbestimmung von »%D«"
+
+#~ msgid "%Jarray size missing in '%D'"
+#~ msgstr "%JFeldgröße in »%D« fehlt"
+
+#~ msgid "%Jzero or negative size array '%D'"
+#~ msgstr "%JFeldgröße von »%D« ist null oder negativ"
+
+#~ msgid "%Jstorage size of '%D' isn't known"
+#~ msgstr "%JSpeichergröße von »%D« ist unbekannt"
+
+#~ msgid "%Jstorage size of '%D' isn't constant"
+#~ msgstr "%JSpeichergröße von »%D« ist nicht konstant"
+
+#~ msgid "%Jignoring asm-specifier for non-static local variable '%D'"
+#~ msgstr "%Jasm-Symbol für nicht-statische lokale Variable »%D« wird ignoriert"
+
+#~ msgid "ISO C forbids forward parameter declarations"
+#~ msgstr "ISO-C verbietet Vorwärtsdeklaration für Parameter"
+
+#~ msgid "<anonymous>"
+#~ msgstr "<anonym>"
+
+#~ msgid "bit-field `%s' width not an integer constant"
+#~ msgstr "Breite des Bitfeldes »%s« ist keine Ganzzahlkonstante"
+
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "negative Breite in Bitfeld »%s«"
+
+#~ msgid "zero width for bit-field `%s'"
+#~ msgstr "Breite null für Bitfeld »%s«"
+
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "Bitfeld »%s« hat ungültigen Typen"
+
+#~ msgid "type of bit-field `%s' is a GCC extension"
+#~ msgstr "der Typ des Bitfeldes »%s« ist eine Erweiterung des GCC"
+
+#~ msgid "width of `%s' exceeds its type"
+#~ msgstr "Breite von »%s« überschreitet dessen Typen"
+
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "»%s« ist schmaler als die Werte seines Typs"
+
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "»long long long« ist für GCC zu lang"
+
+#~ msgid "ISO C90 does not support `long long'"
+#~ msgstr "ISO-C90 unterstützt nicht »long long«"
+
+#~ msgid "duplicate `%s'"
+#~ msgstr "doppeltes »%s«"
+
+#~ msgid "`__thread' before `extern'"
+#~ msgstr "»__thread« vor »extern«"
+
+#~ msgid "`__thread' before `static'"
+#~ msgstr "»__thread« vor »static«"
+
+#~ msgid "two or more data types in declaration of `%s'"
+#~ msgstr "zwei oder mehr Datentypen in Deklaration von »%s«"
+
+#~ msgid "`%s' fails to be a typedef or built in type"
+#~ msgstr "»%s« ist kein typedef oder eingebauter Typ"
+
+#~ msgid "type defaults to `int' in declaration of `%s'"
+#~ msgstr "»int« ist Standardtyp in Deklaration von »%s«"
+
+#~ msgid "both long and short specified for `%s'"
+#~ msgstr "sowohl »long« als auch »short« für »%s« angegeben"
+
+#~ msgid "long or short specified with char for `%s'"
+#~ msgstr "»long« oder »short« mit »char« für »%s« angegeben"
+
+#~ msgid "long or short specified with floating type for `%s'"
+#~ msgstr "»long« oder »short« mit Gleitkommatyp für »%s« angegeben"
+
+#~ msgid "the only valid combination is `long double'"
+#~ msgstr "die einzig gültige Kombination ist »long double«"
+
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "sowohl »signed« als auch »unsigned« für »%s« angegeben"
+
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "long, short, signed oder unsigned ist ungültig für »%s«"
+
+#~ msgid "long, short, signed or unsigned used invalidly for `%s'"
+#~ msgstr "long, short, signed oder unsigned ungültig verwendet für »%s«"
+
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "complex ungültig für »%s«"
+
+#~ msgid "ISO C90 does not support complex types"
+#~ msgstr "ISO-C90 unterstützt nicht komplexe Typen"
+
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "ISO-C unterstützt nicht »double complex« bedeutendes »complex«"
+
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "ISO-C unterstützt keine komplexen Ganzzahltypen"
+
+#~ msgid "duplicate `const'"
+#~ msgstr "doppeltes »const«"
+
+#~ msgid "duplicate `restrict'"
+#~ msgstr "doppeltes »restrict«"
+
+#~ msgid "duplicate `volatile'"
+#~ msgstr "doppeltes »volatile«"
+
+#~ msgid "multiple storage classes in declaration of `%s'"
+#~ msgstr "mehrere Speicherklassen in Deklaration von »%s«"
+
+#~ msgid "function definition declared `auto'"
+#~ msgstr "Funktionsdefinition deklarierte »auto«"
+
+#~ msgid "function definition declared `register'"
+#~ msgstr "Funktionsdefinition deklarierte »register«"
+
+#~ msgid "function definition declared `typedef'"
+#~ msgstr "Funktionsdefinition deklarierte »typedef«"
+
+#~ msgid "function definition declared `__thread'"
+#~ msgstr "Funktionsdefinition deklarierte »__thread«"
+
+#~ msgid "storage class specified for structure field `%s'"
+#~ msgstr "Speicherklasse für Strukturfeld »%s« angegeben"
+
+#~ msgid "storage class specified for parameter `%s'"
+#~ msgstr "Speicherklasse für Parameter »%s« angegeben"
+
+#~ msgid "storage class specified for typename"
+#~ msgstr "Speicherklasse für Typnamen angegeben"
+
+#~ msgid "`%s' initialized and declared `extern'"
+#~ msgstr "»%s« initialisiert und als »extern« deklariert"
+
+#~ msgid "`%s' has both `extern' and initializer"
+#~ msgstr "»%s« hat sowohl »extern« als auch Initialisierung"
+
+#~ msgid "file-scope declaration of `%s' specifies `auto'"
+#~ msgstr "Deklaration von »%s« in Datei-Sichtbarkeitsbereich spezifiziert »auto«"
+
+#~ msgid "nested function `%s' declared `extern'"
+#~ msgstr "geschachtelte Funktion »%s« als »extern« deklariert"
+
+#~ msgid "function-scope `%s' implicitly auto and declared `__thread'"
+#~ msgstr "Funktions-Gültigkeitsbereich »%s« ist implizit auto und deklarierte »__thread«"
+
+#~ msgid "static or type qualifiers in non-parameter array declarator"
+#~ msgstr "»static« oder Typkennzeichner in Nicht-Parameter-Felddeklarator"
+
+#~ msgid "declaration of `%s' as array of voids"
+#~ msgstr "Deklaration von »%s« als Feld von voids"
+
+#~ msgid "declaration of `%s' as array of functions"
+#~ msgstr "Deklaration von »%s« als Feld von Funtionen"
+
+#~ msgid "invalid use of structure with flexible array member"
+#~ msgstr "ungültige Verwendung einer Struktur mit flexiblem Feldelement"
+
+#~ msgid "size of array `%s' has non-integer type"
+#~ msgstr "Feldgröße von »%s« hat Nicht-Ganzzahltyp"
+
+#~ msgid "ISO C forbids zero-size array `%s'"
+#~ msgstr "ISO-C verbietet Feld »%s« der Größe null"
+
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "Feldgröße von »%s« ist negativ"
+
+#~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated"
+#~ msgstr "ISO-C90 verbietet Feld »%s«, dessen Größe nicht ausgewertet werden kann"
+
+#~ msgid "ISO C90 forbids variable-size array `%s'"
+#~ msgstr "ISO-C90 verbietet Feld »%s« variabler Größe"
+
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "Feldgröße von »%s« ist zu groß"
+
+#~ msgid "ISO C90 does not support flexible array members"
+#~ msgstr "ISO-C90 unterstützt keine flexiblen Felder als Elemente"
+
+#~ msgid "array type has incomplete element type"
+#~ msgstr "Feldtyp hat unvollständigen Elementtypen"
+
+#~ msgid "`%s' declared as function returning a function"
+#~ msgstr "»%s« als Funktion, die eine Funktion zurückgibt, deklariert"
+
+#~ msgid "`%s' declared as function returning an array"
+#~ msgstr "»%s« als Funktion, die ein Feld zurückgibt, deklariert"
+
+#~ msgid "ISO C forbids qualified void function return type"
+#~ msgstr "ISO-C verbietet qualifiziertes void als Funktions-Rückgabetypen"
+
+#~ msgid "type qualifiers ignored on function return type"
+#~ msgstr "Typkennzeichner ignoriert an Funktions-Rückgabewert"
+
+#~ msgid "ISO C forbids qualified function types"
+#~ msgstr "ISO-C verbietet qualifizierte Funktionstypen"
+
+#~ msgid "invalid type modifier within pointer declarator"
+#~ msgstr "ungültiger Typmodifizierer innerhalb Zeigerdeklarator"
+
+#~ msgid "ISO C forbids const or volatile function types"
+#~ msgstr "ISO-C verbietet const- oder volatile-Funktionstypen"
+
+#~ msgid "variable or field `%s' declared void"
+#~ msgstr "Variable oder Feld »%s« als »void« deklariert"
+
+#~ msgid "attributes in parameter array declarator ignored"
+#~ msgstr "Attribute in Parameterfelddeklarator ignoriert"
+
+#~ msgid "invalid type modifier within array declarator"
+#~ msgstr "ungültiger Typmodifizierer in Felddeklarator"
+
+#~ msgid "field `%s' declared as a function"
+#~ msgstr "Feld »%s« als Funktion deklariert"
+
+#~ msgid "field `%s' has incomplete type"
+#~ msgstr "Feld »%s« hat unvollständigen Typen"
+
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "ungültige Speicherklasse für Funktion »%s«"
+
+#~ msgid "`noreturn' function returns non-void value"
+#~ msgstr "»noreturn«-Funktion gibt nicht-void-Wert zurück"
+
+#~ msgid "cannot inline function `main'"
+#~ msgstr "»main« ist nicht als »inline« möglich"
+
+#~ msgid "variable previously declared `static' redeclared `extern'"
+#~ msgstr "als »extern« redeklarierte Variable war bereits als »static« deklariert"
+
+#~ msgid "%Jvariable '%D' declared `inline'"
+#~ msgstr "%JVariable »%D« als »inline« deklariert"
+
+#~ msgid "thread-local storage not supported for this target"
+#~ msgstr "Thread-lokaler Speicher wird für dieses Ziel nicht unterstützt"
+
+#~ msgid "function declaration isn't a prototype"
+#~ msgstr "Funktionsdeklaration ist kein Prototyp"
+
+#~ msgid "parameter names (without types) in function declaration"
+#~ msgstr "Parameternamen (ohne Typen) in Funktionsdeklaration"
+
+#~ msgid "parameter `%s' has incomplete type"
+#~ msgstr "Parameter »%s« hat unvollständigen Typen"
+
+#~ msgid "parameter has incomplete type"
+#~ msgstr "Parameter hat unvollständigen Typen"
+
+#~ msgid "\"void\" as only parameter may not be qualified"
+#~ msgstr "\"void\" kann als einziger Parameter nicht qualifiziert werden"
+
+#~ msgid "\"void\" must be the only parameter"
+#~ msgstr "\"void\" muss der einzige Parameter sein"
+
+#~ msgid "%Jparameter \"%D\" has just a forward declaration"
+#~ msgstr "%JParameter »%D« hat nur eine Vorwärtsdeklaration"
+
+#~ msgid "\"%s %s\" declared inside parameter list"
+#~ msgstr "\"%s %s\" innerhalb Parameterliste deklariert"
+
+#~ msgid "anonymous %s declared inside parameter list"
+#~ msgstr "anonymes %s innerhalb Parameterliste deklariert"
+
+#~ msgid "its scope is only this definition or declaration, which is probably not what you want"
+#~ msgstr "sein Gültigkeitsbereich umfasst nur diese Definition bzw. Deklaration, was Sie wahrscheinlich nicht wollten"
+
+#~ msgid "redefinition of `union %s'"
+#~ msgstr "Redefinition von »union %s«"
+
+#~ msgid "redefinition of `struct %s'"
+#~ msgstr "Redefinition von »struct %s«"
+
+#~ msgid "declaration does not declare anything"
+#~ msgstr "Deklaration deklariert nichts"
+
+#~ msgid "%Jduplicate member '%D'"
+#~ msgstr "%Jdoppeltes Element »%D«"
+
+#~ msgid "%s defined inside parms"
+#~ msgstr "%s innerhalb Parameter definiert"
+
+#~ msgid "union"
+#~ msgstr "Union"
+
+#~ msgid "structure"
+#~ msgstr "Struktur"
+
+#~ msgid "%s has no %s"
+#~ msgstr "%s hat kein %s"
+
+#~ msgid "struct"
+#~ msgstr "struct"
+
+#~ msgid "named members"
+#~ msgstr "benannte Elemente"
+
+#~ msgid "members"
+#~ msgstr "Elemente"
+
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "Verschachtelte Redefinition von »%s«"
+
+#~ msgid "%Jflexible array member in union"
+#~ msgstr "%Jflexibles Feldelement in Union"
+
+#~ msgid "%Jflexible array member not at end of struct"
+#~ msgstr "%Jflexibles Feld-Element nicht am Ende von struct"
+
+#~ msgid "%Jflexible array member in otherwise empty struct"
+#~ msgstr "%Jlexibler Feld-Element in ansonsten leerem struct"
+
+#~ msgid "%Jinvalid use of structure with flexible array member"
+#~ msgstr "%Jungültige Verwendung einer Struktur mit flexiblem Feld-Element"
+
+#~ msgid "union cannot be made transparent"
+#~ msgstr "union kann nicht transparent gemacht werden"
+
+#~ msgid "redeclaration of `enum %s'"
+#~ msgstr "Redeklaration von »enum %s«"
+
+#~ msgid "enum defined inside parms"
+#~ msgstr "enum innerhalb von Parametern definiert"
+
+#~ msgid "enumeration values exceed range of largest integer"
+#~ msgstr "Aufzählungswerte überschreiten Wertebereich des größten Ganzzahltypen"
+
+#~ msgid "enumerator value for `%s' not integer constant"
+#~ msgstr "Aufzählungswert für »%s« ist keine Ganzzahlkonstante"
+
+#~ msgid "overflow in enumeration values"
+#~ msgstr "Überlauf in Aufzählungswerten"
+
+#~ msgid "ISO C restricts enumerator values to range of `int'"
+#~ msgstr "ISO-C beschränkt Aufzählungswerte auf Bereich von »int«"
+
+#~ msgid "return type is an incomplete type"
+#~ msgstr "Rückgabetyp ist unvollständig"
+
+#~ msgid "return type defaults to `int'"
+#~ msgstr "Rückgabetyp ist auf »int« voreingestellt"
+
+#~ msgid "%Jno previous prototype for '%D'"
+#~ msgstr "%Jkein vorheriger Prototyp für »%D«"
+
+#~ msgid "%J'%D' was used with no prototype before its definition"
+#~ msgstr "%J»%D« wurde vor seiner Definition ohne Prototyp verwendet"
+
+#~ msgid "%Jno previous declaration for '%D'"
+#~ msgstr "%Jkeine vorherige Deklaration für »%D«"
+
+#~ msgid "%J`%D' was used with no declaration before its definition"
+#~ msgstr "%J»%D« wurde vor seiner Definition ohne Deklaration verwendet"
+
+#~ msgid "%Jreturn type of '%D' is not `int'"
+#~ msgstr "%JRückgabetyp von »%D« ist nicht »int«"
+
+#~ msgid "%Jfirst argument of '%D' should be `int'"
+#~ msgstr "%Jerstes Argument von »%D« sollte »int« sein"
+
+#~ msgid "%Jsecond argument of '%D' should be 'char **'"
+#~ msgstr "%Jzweites Argument von »%D« sollte »char **« sein"
+
+#~ msgid "%Jthird argument of '%D' should probably be 'char **'"
+#~ msgstr "%Jdrittes Argument von »%D« sollte wahrscheinlich »char **« sein"
+
+#~ msgid "%J'%D' takes only zero or two arguments"
+#~ msgstr "%J»%D« benötigt entweder null oder zwei Argumente"
+
+#~ msgid "%J'%D' is normally a non-static function"
+#~ msgstr "%J»%D« ist normalerweise eine Nicht-static-Funktion"
+
+#~ msgid "%Jold-style parameter declarations in prototyped function definition"
+#~ msgstr "%JParameterdeklarationen alten Stils in Prototyp-Funktionsdeklaration"
+
+#~ msgid "%Jparameter name omitted"
+#~ msgstr "%JParametername ausgelassen"
+
+#~ msgid "%Jparameter name missing from parameter list"
+#~ msgstr "%JParametername fehlt in Parameterliste"
+
+#~ msgid "%J\"%D\" declared as a non-parameter"
+#~ msgstr "%J\"%D\" als Nicht-Parameter deklariert"
+
+#~ msgid "%Jmultiple parameters named \"%D\""
+#~ msgstr "%Jmehrere Parameter wurden »%D« genannt"
+
+#~ msgid "%Jparameter \"%D\" declared void"
+#~ msgstr "%JParameter »%D« als void deklariert"
+
+#~ msgid "%Jtype of \"%D\" defaults to \"int\""
+#~ msgstr "%JTyp von »%D« ist auf »int« voreingestellt"
+
+#~ msgid "%Jparameter \"%D\" has incomplete type"
+#~ msgstr "%JParameter \"%D\" hat unvollständigen Typen"
+
+#~ msgid "%Jdeclaration for parameter \"%D\" but no such parameter"
+#~ msgstr "%Jnicht vorhandener Parameter »%D« deklariert"
+
+#~ msgid "number of arguments doesn't match prototype"
+#~ msgstr "Anzahl der Argumente passt nicht zum Prototypen"
+
+#~ msgid "%Hprototype declaration"
+#~ msgstr "%HPrototyp-Deklaration"
+
+#~ msgid "promoted argument \"%D\" doesn't match prototype"
+#~ msgstr "weitergegebenes Argument »%D« passt nicht zum Prototypen"
+
+#~ msgid "argument \"%D\" doesn't match prototype"
+#~ msgstr "Argument »%D« passt nicht zum Prototypen"
+
+#~ msgid "no return statement in function returning non-void"
+#~ msgstr "keine return-Anweisung in nicht void zurückgebender Funktion"
+
+#~ msgid "this function may return with or without a value"
+#~ msgstr "diese Funktion kann mit oder ohne Wert zurückkehren"
+
+#~ msgid "'for' loop initial declaration used outside C99 mode"
+#~ msgstr "Anfangsdeklaration in »for«-Schleife außerhalb C99-Modus verwendet"
+
+#~ msgid "'struct %s' declared in 'for' loop initial declaration"
+#~ msgstr "»struct %s« in Anfangsdeklaration einer »for«-Schleife deklariert"
+
+#~ msgid "'union %s' declared in 'for' loop initial declaration"
+#~ msgstr "»union %s« in Anfangsdeklaration einer »for«-Schleife deklariert"
+
+#~ msgid "'enum %s' declared in 'for' loop initial declaration"
+#~ msgstr "»enum %s« in Anfangsdeklaration einer »for«-Schleife deklariert"
+
+#~ msgid "%Jdeclaration of non-variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%JDeklaration der Nicht-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife"
+
+#~ msgid "%Jdeclaration of static variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%JDeklaration der »static«-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife"
+
+#~ msgid "%Jdeclaration of 'extern' variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%JDeklaration der »extern«-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife"
+
+#~ msgid "%Jredefinition of global '%D'"
+#~ msgstr "%JRedefinition des globalen »%D«"
+
+#~ msgid "%J'%D' previously defined here"
+#~ msgstr "%J»%D« bereits hier verwendet"
+
+#~ msgid "format string has invalid operand number"
+#~ msgstr "Formatzeichenkette hat ungültige Operandenzahl"
+
+#~ msgid "function does not return string type"
+#~ msgstr "Funktion gibt keinen Zeichenkettentypen zurück"
+
+#~ msgid "format string arg not a string type"
+#~ msgstr "Format-Zeichenkettenargument ist kein Zeichenkettentyp"
+
+#~ msgid "unrecognized format specifier"
+#~ msgstr "unerkannte Formatangabe"
+
+#~ msgid "`%s' is an unrecognized format function type"
+#~ msgstr "»%s« ist ein nicht erkannter Formatfunktionstyp"
+
+#~ msgid "'...' has invalid operand number"
+#~ msgstr "»...« hat ungültige Operandenzahl"
+
+#~ msgid "format string arg follows the args to be formatted"
+#~ msgstr "Format-Zeichenkettenargument folgt den zu formatierenden Argumenten"
+
+#~ msgid "` ' flag"
+#~ msgstr "» «-Kennzeichen"
+
+#~ msgid "the ` ' printf flag"
+#~ msgstr "das » «-printf-Kennzeichen"
+
+#~ msgid "`+' flag"
+#~ msgstr "»+«-Kennzeichen"
+
+#~ msgid "the `+' printf flag"
+#~ msgstr "das »+«-printf-Kennzeichen"
+
+#~ msgid "`#' flag"
+#~ msgstr "»#«-Kennzeichen"
+
+#~ msgid "the `#' printf flag"
+#~ msgstr "das »#«-printf-Kennzeichen"
+
+#~ msgid "`0' flag"
+#~ msgstr "»0«-Kennzeichen"
+
+#~ msgid "the `0' printf flag"
+#~ msgstr "das »0«-printf-Kennzeichen"
+
+#~ msgid "`-' flag"
+#~ msgstr "»-«-Kennzeichen"
+
+#~ msgid "the `-' printf flag"
+#~ msgstr "das »-«-printf-Kennzeichen"
+
+#~ msgid "`'' flag"
+#~ msgstr "»'«-Kennzeichen"
+
+#~ msgid "the `'' printf flag"
+#~ msgstr "das »'«-printf-Kennzeichen"
+
+#~ msgid "`I' flag"
+#~ msgstr "»I«-Kennzeichen"
+
+#~ msgid "the `I' printf flag"
+#~ msgstr "das »I«-printf-Kennzeichen"
+
+#~ msgid "field width"
+#~ msgstr "Feldbreite"
+
+#~ msgid "field width in printf format"
+#~ msgstr "Feldbreite im printf-Format"
+
+#~ msgid "precision"
+#~ msgstr "Genauigkeit"
+
+#~ msgid "precision in printf format"
+#~ msgstr "Genauigkeit im printf-Format"
+
+#~ msgid "length modifier"
+#~ msgstr "Längenmodifizierer"
+
+#~ msgid "length modifier in printf format"
+#~ msgstr "Längenmodifizierer im printf-Format"
+
+#~ msgid "assignment suppression"
+#~ msgstr "Zuweisungsunterdrückung"
+
+#~ msgid "the assignment suppression scanf feature"
+#~ msgstr "das scanf-Merkmal der Zuweisungsunterdrückung"
+
+#~ msgid "`a' flag"
+#~ msgstr "»a«-Kennzeichen"
+
+#~ msgid "the `a' scanf flag"
+#~ msgstr "das »a«-scanf-Kennzeichen"
+
+#~ msgid "field width in scanf format"
+#~ msgstr "Feldbreite im scanf-Format"
+
+#~ msgid "length modifier in scanf format"
+#~ msgstr "Längenmodifizierer im scanf-Format"
+
+#~ msgid "the `'' scanf flag"
+#~ msgstr "das »'«-scanf-Kennzeichen"
+
+#~ msgid "the `I' scanf flag"
+#~ msgstr "das »I«-scanf-Kennzeichen"
+
+#~ msgid "`_' flag"
+#~ msgstr "»_«-Kennzeichen"
+
+#~ msgid "the `_' strftime flag"
+#~ msgstr "das »_«-strftime-Kennzeichen"
+
+#~ msgid "the `-' strftime flag"
+#~ msgstr "das »-«-strftime-Kennzeichen"
+
+#~ msgid "the `0' strftime flag"
+#~ msgstr "das »0«-strftime-Kennzeichen"
+
+#~ msgid "`^' flag"
+#~ msgstr "»^«-Kennzeichen"
+
+#~ msgid "the `^' strftime flag"
+#~ msgstr "das »^«-strftime-Kennzeichen"
+
+#~ msgid "the `#' strftime flag"
+#~ msgstr "das »#«-strftime-Kennzeichen"
+
+#~ msgid "field width in strftime format"
+#~ msgstr "Feldbreite im strftime-Format"
+
+#~ msgid "`E' modifier"
+#~ msgstr "»E«-Modifizierer"
+
+#~ msgid "the `E' strftime modifier"
+#~ msgstr "der »E«-strftime-Modifizierer"
+
+#~ msgid "`O' modifier"
+#~ msgstr "»O«-Modifizierer"
+
+#~ msgid "the `O' strftime modifier"
+#~ msgstr "der »O«-strftime-Modifizierer"
+
+#~ msgid "the `O' modifier"
+#~ msgstr "der »O«-Modifizierer"
+
+#~ msgid "fill character"
+#~ msgstr "Füllzeichen"
+
+#~ msgid "fill character in strfmon format"
+#~ msgstr "Füllzeichen im strfmon-Format"
+
+#~ msgid "the `^' strfmon flag"
+#~ msgstr "das »^«-strfmon-Kennzeichen"
+
+#~ msgid "the `+' strfmon flag"
+#~ msgstr "das »+«-strfmon-Kennzeichen"
+
+#~ msgid "`(' flag"
+#~ msgstr "»(«-Kennzeichen"
+
+#~ msgid "the `(' strfmon flag"
+#~ msgstr "das »(«-strfmon-Kennzeichen"
+
+#~ msgid "`!' flag"
+#~ msgstr "»!«-Kennzeichen"
+
+#~ msgid "the `!' strfmon flag"
+#~ msgstr "das »!«-strfmon-Kennzeichen"
+
+#~ msgid "the `-' strfmon flag"
+#~ msgstr "das »-«-strfmon-Kennzeichen"
+
+#~ msgid "field width in strfmon format"
+#~ msgstr "Feldbreite im strfmon-Format"
+
+#~ msgid "left precision"
+#~ msgstr "linke Präzision"
+
+#~ msgid "left precision in strfmon format"
+#~ msgstr "linke Präzision im strfmon-Format"
+
+#~ msgid "right precision"
+#~ msgstr "rechte Präzision"
+
+#~ msgid "right precision in strfmon format"
+#~ msgstr "rechte Präzision im strfmon-Format"
+
+#~ msgid "length modifier in strfmon format"
+#~ msgstr "Längenmodifizierer im strfmon-Format"
+
+#~ msgid "function might be possible candidate for `%s' format attribute"
+#~ msgstr "Funktion könnte möglicher Kandidat für Formatattribut »%s« sein"
+
+#~ msgid "missing $ operand number in format"
+#~ msgstr "fehlende $-Operandennummer im Format"
+
+#~ msgid "%s does not support %%n$ operand number formats"
+#~ msgstr "%s unterstützt nicht %%n$-Operandennummerformate"
+
+#~ msgid "operand number out of range in format"
+#~ msgstr "Operandennummer außerhalb des Wertebereiches im Format"
+
+#~ msgid "format argument %d used more than once in %s format"
+#~ msgstr "Formatargument %d mehr als einmal im %s-Format verwendet"
+
+#~ msgid "format argument %d unused before used argument %d in $-style format"
+#~ msgstr "Formatargument %d nicht verwendet vor benutztem Argument %d im $-Stil-Format"
+
+#~ msgid "format not a string literal, format string not checked"
+#~ msgstr "Format ist kein Zeichenkettenliteral, Formatzeichenkette ungeprüft"
+
+#~ msgid "format not a string literal and no format arguments"
+#~ msgstr "Format ist kein Zeichenkettenliteral, und keine Formatargumente"
+
+#~ msgid "format not a string literal, argument types not checked"
+#~ msgstr "Format ist kein Zeichenkettenliteral, Argumenttypen ungeprüft"
+
+#~ msgid "too many arguments for format"
+#~ msgstr "zu viele Argumente für Format"
+
+#~ msgid "unused arguments in $-style format"
+#~ msgstr "unbenutzte Argumente in $-Stil-Format"
+
+#~ msgid "zero-length %s format string"
+#~ msgstr "Format-Zeichenkette %s der Länge null"
+
+#~ msgid "format is a wide character string"
+#~ msgstr "Format ist »wide character«-Zeichenkette"
+
+#~ msgid "unterminated format string"
+#~ msgstr "unbeendete Formatzeichenkette"
+
+#~ msgid "embedded `\\0' in format"
+#~ msgstr "eingebettetes »\\0« im Format"
+
+#~ msgid "spurious trailing `%%' in format"
+#~ msgstr "störendes letztes »%%« im Format"
+
+#~ msgid "repeated %s in format"
+#~ msgstr "wiederholtes %s im Format"
+
+#~ msgid "missing fill character at end of strfmon format"
+#~ msgstr "fehlendes Füllzeichen am Ende des strfmon-Formates"
+
+#~ msgid "too few arguments for format"
+#~ msgstr "zu wenig Argumente für Format"
+
+#~ msgid "zero width in %s format"
+#~ msgstr "Breite null im Format %s"
+
+#~ msgid "empty left precision in %s format"
+#~ msgstr "leere linke Präzision im Format %s"
+
+#~ msgid "field precision"
+#~ msgstr "Feldpräzision"
+
+#~ msgid "empty precision in %s format"
+#~ msgstr "fehlende Präzision im Format %s"
+
+#~ msgid "%s does not support the `%s' %s length modifier"
+#~ msgstr "%s unterstützt nicht den Längenmodifizierer »%s« %s"
+
+#~ msgid "conversion lacks type at end of format"
+#~ msgstr "Konvertierung fehlt der Typ am Ende des Formates"
+
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "unbekanntes Konvertierungstyp-Zeichen »%c« im Format"
+
+#~ msgid "unknown conversion type character 0x%x in format"
+#~ msgstr "unbekanntes Konvertierungstyp-Zeichen 0x%x im Format"
+
+#~ msgid "%s does not support the `%%%c' %s format"
+#~ msgstr "%s unterstützt nicht das Format »%%%c« %s"
+
+#~ msgid "%s used with `%%%c' %s format"
+#~ msgstr "%s verwendet mit Format »%%%c« %s"
+
+#~ msgid "%s does not support %s"
+#~ msgstr "%s unterstützt nicht %s"
+
+#~ msgid "%s does not support %s with the `%%%c' %s format"
+#~ msgstr "%s unterstützt nicht %s mit dem Format »%%%c« %s"
+
+#~ msgid "%s ignored with %s and `%%%c' %s format"
+#~ msgstr "%s ignoriert mit %s und Format »%%%c« %s"
+
+#~ msgid "%s ignored with %s in %s format"
+#~ msgstr "%s ignoriert mit %s im Format %s"
+
+#~ msgid "use of %s and %s together with `%%%c' %s format"
+#~ msgstr "Verwendung von %s und %s zusammen mit Format »%%%c« %s"
+
+#~ msgid "use of %s and %s together in %s format"
+#~ msgstr "Verwendung von %s und %s zusammen im Format %s"
+
+#~ msgid "`%%%c' yields only last 2 digits of year in some locales"
+#~ msgstr "»%%%c« liefert in manchen Locales nur die letzten 2 Ziffern des Jahres"
+
+#~ msgid "`%%%c' yields only last 2 digits of year"
+#~ msgstr "»%%%c« liefert nur die letzten 2 Ziffern des Jahres"
+
+#~ msgid "no closing `]' for `%%[' format"
+#~ msgstr "kein schließendes »]« für »%%[«-Format"
+
+#~ msgid "use of `%s' length modifier with `%c' type character"
+#~ msgstr "Verwendung des »%s«-Längenmodifizierers mit »%c«-Typ-Zeichen"
+
+#~ msgid "%s does not support the `%%%s%c' %s format"
+#~ msgstr "%s unterstützt nicht das Format »%%%s%c« %s"
+
+#~ msgid "operand number specified with suppressed assignment"
+#~ msgstr "Operandennummer mit unterdrückter Zuweisung angegeben"
+
+#~ msgid "operand number specified for format taking no argument"
+#~ msgstr "Operandennummer für Format ohne Argumente angegeben"
+
+#~ msgid "writing through null pointer (arg %d)"
+#~ msgstr "Schreiben mit Null-Zeiger (Argument %d)"
+
+#~ msgid "reading through null pointer (arg %d)"
+#~ msgstr "Lesen mit Null-Zeiger (Argument %d)"
+
+#~ msgid "writing into constant object (arg %d)"
+#~ msgstr "Schreiben in konstantes Objekt (Argument %d)"
+
+#~ msgid "extra type qualifiers in format argument (arg %d)"
+#~ msgstr "zusätzliche Typqualifizierer in Format-Argument (Argument %d)"
+
+#~ msgid "format argument is not a pointer (arg %d)"
+#~ msgstr "Format-Argument ist kein Zeiger (Argument %d)"
+
+#~ msgid "format argument is not a pointer to a pointer (arg %d)"
+#~ msgstr "Format-Argument ist kein Zeiger auf einen Zeiger (Argument %d)"
+
+#~ msgid "pointer"
+#~ msgstr "Zeiger"
+
+#~ msgid "different type"
+#~ msgstr "anderer Typ"
+
+#~ msgid "%s is not type %s (arg %d)"
+#~ msgstr "%s ist nicht vom Typ %s (Argument %d)"
+
+#~ msgid "%s format, %s arg (arg %d)"
+#~ msgstr "%s Format, %s Argument (Argument %d)"
+
+#~ msgid "args to be formatted is not '...'"
+#~ msgstr "zu formatierendes Argument ist nicht »...«"
+
+#~ msgid "strftime formats cannot format arguments"
+#~ msgstr "strftime-Formate können keine Argumente formatieren"
+
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "doppeltes Verzeichnis »%s« wird ignoriert\n"
+
+#~ msgid "  as it is a non-system directory that duplicates a system directory\n"
+#~ msgstr "  da es ein Nicht-Systemverzeichnis ist, das ein Systemverzeichnis dupliziert\n"
+
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "nicht vorhandenes Verzeichnis »%s« wird ignoriert\n"
+
+#~ msgid "#include \"...\" search starts here:\n"
+#~ msgstr "#include \"...\" - Suche beginnt hier:\n"
+
+#~ msgid "#include <...> search starts here:\n"
+#~ msgstr "#include <...> - Suche beginnt hier:\n"
+
+#~ msgid "End of search list.\n"
+#~ msgstr "Ende der Suchliste.\n"
+
+#~ msgid "badly nested C headers from preprocessor"
+#~ msgstr "schlecht geschachtelte C-Header vom Präprozessor"
+
+#~ msgid "ignoring #pragma %s %s"
+#~ msgstr "ignoriere #pragma %s %s"
+
+#~ msgid "%Hstray '@' in program"
+#~ msgstr "%Hverirrtes »@« im Programm"
+
+#~ msgid "stray '%c' in program"
+#~ msgstr "verirrtes »%c« im Programm"
+
+#~ msgid "stray '\\%o' in program"
+#~ msgstr "verirrtes »\\%o« im Programm"
+
+#~ msgid "this decimal constant is unsigned only in ISO C90"
+#~ msgstr "diese Dezimalkonstante ist nur in ISO-C90 vorzeichenlos"
+
+#~ msgid "this decimal constant would be unsigned in ISO C90"
+#~ msgstr "diese Dezimalkonstante wäre in ISO-C90 vorzeichenlos"
+
+#~ msgid "integer constant is too large for \"%s\" type"
+#~ msgstr "Ganzzahlkonstante ist zu groß für »%s«-Typ"
+
+#~ msgid "floating constant exceeds range of \"%s\""
+#~ msgstr "Gleitkommakonstante überschreitet Wertebereich von »%s«"
+
+#~ msgid "traditional C rejects string constant concatenation"
+#~ msgstr "traditionelles C weist Stringkonstantenverkettung zurück"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it is supressed using -fno-inline"
+#~ msgstr "%JFunktion »%F« kann nie inline sein, da dies mit -fno-inline unterdrückt wird"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation"
+#~ msgstr "%JFunktion »%F« kann nie inline sein, da sie nicht in diese Übersetzungseinheit gebunden wird"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses attributes conflicting with inlining"
+#~ msgstr "%JFunktion »%F« kann nie inline sein, da sie mit inline in Konflikt stehende Attribute hat"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it has pending sizes"
+#~ msgstr "%JFunktion »%F« kann nie inline sein, da sie noch offene Größen hat"
+
+#~ msgid "%Jnested function '%F' can never be inlined because it has possibly saved pending sizes"
+#~ msgstr "%Jdie geschachtelte Funktion »%F« kann nie inline sein, da sie möglicherweise gespeicherte, noch offene Größen hat"
+
+#~ msgid "no class name specified with \"%s\""
+#~ msgstr "kein Klassenname mit \"%s\" angegeben"
+
+#~ msgid "assertion missing after \"%s\""
+#~ msgstr "Behauptung fehlt hinter \"%s\""
+
+#~ msgid "macro name missing after \"%s\""
+#~ msgstr "Makroname fehlt hinter \"%s\""
+
+#~ msgid "missing path after \"%s\""
+#~ msgstr "fehlender Pfad hinter \"%s\""
+
+#~ msgid "missing filename after \"%s\""
+#~ msgstr "fehlender Dateiname hinter \"%s\""
+
+#~ msgid "missing makefile target after \"%s\""
+#~ msgstr "fehlendes Makefile-Ziel hinter \"%s\""
+
+#~ msgid "-I- specified twice"
+#~ msgstr "-I- doppelt angegeben"
+
+#~ msgid "switch \"%s\" is no longer supported"
+#~ msgstr "Option »%s« wird nicht mehr unterstützt"
+
+#~ msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
+#~ msgstr "-fhandle-exceptions wurde in -fexceptions umbenannt (und ist nun voreingestellt)"
+
+#~ msgid "output filename specified twice"
+#~ msgstr "Ausgabedatei doppelt angegeben"
+
+#~ msgid "-Wformat-y2k ignored without -Wformat"
+#~ msgstr "-Wformat-y2k wird ohne -Wformat ignoriert"
+
+#~ msgid "-Wformat-extra-args ignored without -Wformat"
+#~ msgstr "-Wformat-extra-args wird ohne -Wformat ignoriert"
+
+#~ msgid "-Wformat-zero-length ignored without -Wformat"
+#~ msgstr "-Wformat-zero-length wird ohne -Wformat ignoriert"
+
+#~ msgid "-Wformat-nonliteral ignored without -Wformat"
+#~ msgstr "-Wformat-nonliteral wird ohne -Wformat ignoriert"
+
+#~ msgid "-Wformat-security ignored without -Wformat"
+#~ msgstr "-Wformat-security wird ohne -Wformat ignoriert"
+
+#~ msgid "-Wmissing-format-attribute ignored without -Wformat"
+#~ msgstr "-Wmissing-format-attribute wird ohne -Wformat ignoriert"
+
+#~ msgid "opening output file %s: %m"
+#~ msgstr "Ausgabedatei »%s« wird geöffnet: %m"
+
+#~ msgid "too many filenames given.  Type %s --help for usage"
+#~ msgstr "zu viele Dateinamen angegeben. Geben sie »%s --help« für Hilfe ein"
+
+#~ msgid "YYDEBUG not defined"
+#~ msgstr "YYDEBUG ist nicht definiert"
+
+#~ msgid "opening dependency file %s: %m"
+#~ msgstr "Abhängigkeitsdatei »%s« wird geöffnet: %m"
+
+#~ msgid "closing dependency file %s: %m"
+#~ msgstr "Abhängigkeitsdatei »%s« wird geschlossen: %m"
+
+#~ msgid "when writing output to %s: %m"
+#~ msgstr "beim Schreiben der Ausgabe nach %s: %m"
+
+#~ msgid "to generate dependencies you must specify either -M or -MM"
+#~ msgstr "um Abhängigkeiten zu erzeugen, müssen Sie entweder -M oder -MM angeben"
+
+#~ msgid "<built-in>"
+#~ msgstr "<eingebaut>"
+
+#~ msgid "<command line>"
+#~ msgstr "<Kommandozeile>"
+
+#~ msgid "too late for # directive to set debug directory"
+#~ msgstr "zu spät für »#«-Direktive, um Debug-Verzeichnis festzulegen"
+
+#~ msgid "syntax error"
+#~ msgstr "Syntaxfehler"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "Syntaxfehler: es kann nicht zurückgesetzt werden"
+
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "ISO-C erlaubt keine leeren Quelldateien"
+
+#~ msgid "argument of `asm' is not a constant string"
+#~ msgstr "Argument von »asm« ist keine konstante Zeichenkette"
+
+#~ msgid "ISO C forbids data definition with no type or storage class"
+#~ msgstr "ISO-C verbietet Datendefinition ohne Typ und Speicherklasse"
+
+#~ msgid "data definition has no type or storage class"
+#~ msgstr "Datendefinition hat keinen Typ oder Speicherklasse"
+
+#~ msgid "ISO C does not allow extra `;' outside of a function"
+#~ msgstr "ISO-C erlaubt kein extra »;« außerhalb einer Funktion"
+
+#~ msgid "`sizeof' applied to a bit-field"
+#~ msgstr "»sizeof«-Operator auf ein Bitfeld angewandt"
+
+#~ msgid "ISO C forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO-C verbietet das Weglassen des mittleren Terms eines ?:-Ausdruckes"
+
+#~ msgid "ISO C89 forbids compound literals"
+#~ msgstr "ISO-C89 verbietet zusammengesetzte Literale"
+
+#~ msgid "ISO C forbids braced-groups within expressions"
+#~ msgstr "ISO-C verbietet geklammerte Gruppen innerhalb von Ausdrücken"
+
+#~ msgid "first argument to __builtin_choose_expr not a constant"
+#~ msgstr "das erste Argument für __builtin_choose_expr ist keine Konstante"
+
+#~ msgid "traditional C rejects ISO C style function definitions"
+#~ msgstr "traditionelles C weist Funktionsdefinitionen im ISO-C-Stil zurück"
+
+#~ msgid "old-style parameter declaration"
+#~ msgstr "Parameterdeklaration alten Stils"
+
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "»%s« ist nicht am Beginn einer Deklaration"
+
+#~ msgid "`typeof' applied to a bit-field"
+#~ msgstr "»typeof« auf ein Bitfeld angewandt"
+
+#~ msgid "ISO C forbids empty initializer braces"
+#~ msgstr "ISO-C verbietet leere Initialisierungsklammern"
+
+#~ msgid "ISO C89 forbids specifying subobject to initialize"
+#~ msgstr "ISO-C89 verbietet die Angabe von zu initialisierenden Unterobjekten"
+
+#~ msgid "obsolete use of designated initializer without `='"
+#~ msgstr "veraltete Verwendung einer bestimmten Initialisierung ohne »=«"
+
+#~ msgid "obsolete use of designated initializer with `:'"
+#~ msgstr "veraltete Verwendung einer bestimmten Initialisierung mit »:«"
+
+#~ msgid "ISO C forbids specifying range of elements to initialize"
+#~ msgstr "ISO-C verbietet die Angabe eines zu initialisierenden Wertebereiches"
+
+#~ msgid "ISO C forbids nested functions"
+#~ msgstr "ISO-C verbietet verschachtelte Funktionen"
+
+#~ msgid "ISO C forbids forward references to `enum' types"
+#~ msgstr "ISO-C verbietet Vorwärts-Referenzen auf »enum«-Typen"
+
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "Komma am Ende der Aufzählungsliste"
+
+#~ msgid "no semicolon at end of struct or union"
+#~ msgstr "kein Semikolon am Ende von »struct« oder »union«"
+
+#~ msgid "extra semicolon in struct or union specified"
+#~ msgstr "zusätzliches Semikolon in »struct« oder »union« angegeben"
+
+#~ msgid "ISO C doesn't support unnamed structs/unions"
+#~ msgstr "ISO-C unterstützt keine namenlosen structs/unions"
+
+#~ msgid "ISO C forbids member declarations with no members"
+#~ msgstr "ISO-C verbietet Elementdeklarationen ohne Elemente"
+
+#~ msgid "label at end of compound statement"
+#~ msgstr "Marke am Ende einer Verbundanweisung"
+
+#~ msgid "ISO C90 forbids mixed declarations and code"
+#~ msgstr "ISO-C90 verbietet gemischte Deklarationen und Code"
+
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "ISO-C verbietet Markendeklarationen"
+
+#~ msgid "braced-group within expression allowed only inside a function"
+#~ msgstr "geklammerte Gruppe innerhalb eines Ausdrucks nur in Funktion erlaubt"
+
+#~ msgid "empty body in an else-statement"
+#~ msgstr "leerer Körper in einer else-Anweisung"
+
+#~ msgid "%Hempty body in an if-statement"
+#~ msgstr "%Hleerer Körper in einer if-Anweisung"
+
+#~ msgid "break statement not within loop or switch"
+#~ msgstr "break-Anweisung nicht innerhalb einer Schleife oder »switch«"
+
+#~ msgid "continue statement not within a loop"
+#~ msgstr "continue-Anweisung nicht innerhalb einer Schleife"
+
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "ISO-C verbietet »goto *expr;«"
+
+#~ msgid "ISO C requires a named argument before `...'"
+#~ msgstr "ISO-C erfordert ein benanntes Argument vor »...«"
+
+#~ msgid "`...' in old-style identifier list"
+#~ msgstr "»...« in einer Bezeichnerliste alten Stils"
+
+#~ msgid "syntax error; also virtual memory exhausted"
+#~ msgstr "Syntaxfehler; auch virtueller Speicher verbraucht"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "Parser-Keller-Überlauf"
+
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "Syntaxfehler beim Token »%s«"
+
+#~ msgid "can't create precompiled header %s: %m"
+#~ msgstr "der vorkompilierte Header »%s« kann nicht erzeugt werden: %m"
+
+#~ msgid "can't write to %s: %m"
+#~ msgstr "in %s kann nicht geschrieben werden: %m"
+
+#~ msgid "`%s' is not a valid output file"
+#~ msgstr "»%s« ist keine gültige Ausgabedatei"
+
+#~ msgid "can't write %s: %m"
+#~ msgstr "%s kann nicht geschrieben werden: %m"
+
+#~ msgid "can't seek in %s: %m"
+#~ msgstr "in %s kann nicht positioniert werden: %m"
+
+#~ msgid "can't read %s: %m"
+#~ msgstr "%s kann nicht gelesen werden: %m"
+
+#~ msgid "%s: not compatible with this GCC version"
+#~ msgstr "%s: nicht kompatibel mit dieser Version des GCC"
+
+#~ msgid "%s: not for %s"
+#~ msgstr "%s: nicht für %s"
+
+#~ msgid "%s: not a PCH file"
+#~ msgstr "%s: keine PCH-Datei"
+
+#~ msgid "%s: created on host `%.*s', but used on host `%s'"
+#~ msgstr "%s: auf Rechner »%.*s« erzeugt, aber auf Rechner »%s« verwendet"
+
+#~ msgid "%s: created for target `%.*s', but used for target `%s'"
+#~ msgstr "%s: für das Ziel »%.*s« erzeugt, aber für das Ziel »%s« verwendet"
+
+#~ msgid "%s: created by version `%.*s', but this is version `%s'"
+#~ msgstr "%s: durch Version »%.*s« erzeugt, aber dies ist Version »%s«"
+
+#~ msgid "%s: created with -g%s, but used with -g%s"
+#~ msgstr "%s: mit -g%s erzeugt, aber mit -g%s verwendet"
+
+#~ msgid "%s: had text segment at different address"
+#~ msgstr "%s: Textsegment trat an anderer Adresse auf"
+
+#~ msgid "calling fdopen"
+#~ msgstr "fdopen wird aufgerufen"
+
+#~ msgid "reading"
+#~ msgstr "Lesen"
+
+#~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+#~ msgstr "#pragma pack (pop) gefunden ohne passendes #pragma pack (push, <n>)"
+
+#~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
+#~ msgstr "#pragma pack(pop, %s) gefunden ohne passendes #pragma pack(push, %s, <n>)"
+
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(push[, id], <n>) wird von diesem Ziel nicht unterstützt"
+
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(pop[, id], <n>) wird von diesem Ziel nicht unterstützt"
+
+#~ msgid "missing '(' after '#pragma pack' - ignored"
+#~ msgstr "fehlendes »(« hinter »#pragma pack« - ignoriert"
+
+#~ msgid "malformed '#pragma pack' - ignored"
+#~ msgstr "falsch geformtes »#pragma pack« - ignoriert"
+
+#~ msgid "malformed '#pragma pack(push[, id], <n>)' - ignored"
+#~ msgstr "falsch geformtes »#pragma pack(push[, id], <n>)« - ignoriert"
+
+#~ msgid "malformed '#pragma pack(pop[, id])' - ignored"
+#~ msgstr "falsch geformtes »#pragma pack(pop[, id])« - ignoriert"
+
+#~ msgid "unknown action '%s' for '#pragma pack' - ignored"
+#~ msgstr "unbekannte Aktion »%s« für »#pragma pack« - ignoriert"
+
+#~ msgid "junk at end of '#pragma pack'"
+#~ msgstr "Ausschuss am Ende von »#pragma pack«"
+
+#~ msgid "alignment must be a small power of two, not %d"
+#~ msgstr "Ausrichtung muss eine kleine Zweierpotenz sein, nicht %d"
+
+#~ msgid "%Japplying #pragma weak '%D' after first use results in unspecified behavior"
+#~ msgstr "%JAnwendung von #pragma weak »%D« nach erster Benutzung führt zu nicht spezifiziertem Verhalten"
+
+#~ msgid "malformed #pragma weak, ignored"
+#~ msgstr "falsch geformtes #pragma weak, ignoriert"
+
+#~ msgid "junk at end of #pragma weak"
+#~ msgstr "Ausschuss am Ende von #pragma weak"
+
+#~ msgid "malformed #pragma redefine_extname, ignored"
+#~ msgstr "falsch geformtes #pragma redefine_extname, ignoriert"
+
+#~ msgid "junk at end of #pragma redefine_extname"
+#~ msgstr "Ausschuss am Ende von #pragma redefine_extname"
+
+#~ msgid "#pragma redefine_extname conflicts with declaration"
+#~ msgstr "#pragma redefine_extname steht in Konflikt mit Deklaration"
+
+#~ msgid "malformed #pragma extern_prefix, ignored"
+#~ msgstr "falsch geformtes #pragma extern_prefix, ignoriert"
+
+#~ msgid "junk at end of #pragma extern_prefix"
+#~ msgstr "Ausschuss am Ende von #pragma extern_prefix"
+
+#~ msgid "asm declaration conflicts with previous rename"
+#~ msgstr "asm-Deklaration steht in Konflikt mit vorheriger Umbenennung"
+
+#~ msgid "destructor needed for `%D'"
+#~ msgstr "Destruktor für »%D« benötigt"
+
+#~ msgid "where case label appears here"
+#~ msgstr "wobei die case-Marke hier auftritt"
+
+#~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)"
+#~ msgstr "(schließen Sie Aktionen vorheriger case-Anweisungen, die Destruktoren benötigen, in ihrem eigenen Gültigkeitsbereich ein)"
+
+#~ msgid "%s qualifier ignored on asm"
+#~ msgstr "%s-Qualifizierer für asm ignoriert"
+
+#~ msgid "will never be executed"
+#~ msgstr "wird niemals ausgeführt"
+
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "»%s« hat unvollständigen Typ"
+
+#~ msgid "invalid use of void expression"
+#~ msgstr "falsche Benutzung eines void-Ausdruckes"
+
+#~ msgid "invalid use of flexible array member"
+#~ msgstr "falsche Benutzung eines flexiblen Feldelements"
+
+#~ msgid "invalid use of array with unspecified bounds"
+#~ msgstr "falsche Benutzung eines Feldes mit unbekannten Grenzen"
+
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "falsche Benutzung des undefinierten Typs »%s %s«"
+
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "falsche Benutzung des unvollständigen typedef »%s«"
+
+#~ msgid "function types not truly compatible in ISO C"
+#~ msgstr "Funktionstypen nicht wirklich kompatibel in ISO-C"
+
+#~ msgid "types are not quite compatible"
+#~ msgstr "Typen nicht sehr kompatibel"
+
+#~ msgid "function return types not compatible due to `volatile'"
+#~ msgstr "Funktionsrückgabetypen nicht kompatibel wegen »volatile«"
+
+#~ msgid "arithmetic on pointer to an incomplete type"
+#~ msgstr "Arithmetik mit Zeiger auf unvollständigen Typen"
+
+#~ msgid "%s has no member named `%s'"
+#~ msgstr "%s hat kein Element namens »%s«"
+
+#~ msgid "request for member `%s' in something not a structure or union"
+#~ msgstr "Anfrage nach Element »%s« in etwas, was keine Struktur oder Variante ist"
+
+#~ msgid "dereferencing pointer to incomplete type"
+#~ msgstr "Dereferenzierung eines Zeigers auf unvollständigen Typen"
+
+#~ msgid "dereferencing `void *' pointer"
+#~ msgstr "Dereferenzierung eines »void *«-Zeigers"
+
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "falsches Typ-Argument von »%s«"
+
+#~ msgid "subscript missing in array reference"
+#~ msgstr "Index fehlt in Feldreferenz"
+
+#~ msgid "array subscript has type `char'"
+#~ msgstr "Feldindex hat Typ »char«"
+
+#~ msgid "array subscript is not an integer"
+#~ msgstr "Feldindex ist keine Ganzzahl"
+
+#~ msgid "ISO C forbids subscripting `register' array"
+#~ msgstr "ISO-C verbietet, ein »register«-Array zu indizieren"
+
+#~ msgid "ISO C90 forbids subscripting non-lvalue array"
+#~ msgstr "ISO-C90 verbietet, ein Nicht-L-Wert-Feld zu indizieren"
+
+#~ msgid "subscript has type `char'"
+#~ msgstr "Index hat Typ »char«"
+
+#~ msgid "subscripted value is neither array nor pointer"
+#~ msgstr "indizierter Wert ist weder ein Feld noch ein Zeiger"
+
+#~ msgid "local declaration of `%s' hides instance variable"
+#~ msgstr "lokale Deklaration von »%s« verdeckt Instanzvariable"
+
+#~ msgid "called object is not a function"
+#~ msgstr "gerufenes Objekt ist keine Funktion"
+
+#~ msgid "function called through a non-compatible type"
+#~ msgstr "Funktion über nicht kompatiblen Typen aufgerufen"
+
+#~ msgid "too many arguments to function"
+#~ msgstr "zu viele Argumente für Funktion"
+
+#~ msgid "type of formal parameter %d is incomplete"
+#~ msgstr "Typ des formalen Parameters %d ist unvollständig"
+
+#~ msgid "%s as integer rather than floating due to prototype"
+#~ msgstr "%s als Ganzzahl statt Gleitkomma aufgrund des Prototyps"
+
+#~ msgid "%s as integer rather than complex due to prototype"
+#~ msgstr "%s als Ganzzahl statt komplex aufgrund des Prototyps"
+
+#~ msgid "%s as complex rather than floating due to prototype"
+#~ msgstr "%s als komplex statt Gleitkomma aufgrund des Prototyps"
+
+#~ msgid "%s as floating rather than integer due to prototype"
+#~ msgstr "%s als Gleitkomma statt Ganzzahl aufgrund des Prototyps"
+
+#~ msgid "%s as complex rather than integer due to prototype"
+#~ msgstr "%s als komplex statt Ganzzahl aufgrund des Prototyps"
+
+#~ msgid "%s as floating rather than complex due to prototype"
+#~ msgstr "%s als Gleitkomma statt komplex aufgrund des Prototyps"
+
+#~ msgid "%s as `float' rather than `double' due to prototype"
+#~ msgstr "%s als »float« statt »double« aufgrund des Prototyps"
+
+#~ msgid "%s with different width due to prototype"
+#~ msgstr "%s mit anderer Breite aufgrund des Prototyps"
+
+#~ msgid "%s as unsigned due to prototype"
+#~ msgstr "%s als vorzeichenlos aufgrund des Prototyps"
+
+#~ msgid "%s as signed due to prototype"
+#~ msgstr "%s als vorzeichenbehaftet aufgrund des Prototyps"
+
+#~ msgid "too few arguments to function"
+#~ msgstr "zu wenige Argumente für Funktion"
+
+#~ msgid "suggest parentheses around + or - inside shift"
+#~ msgstr "Klammern um + oder - innerhalb von Schiebeoperation empfohlen"
+
+#~ msgid "suggest parentheses around && within ||"
+#~ msgstr "Klammern um && innerhalb von || empfohlen"
+
+#~ msgid "suggest parentheses around arithmetic in operand of |"
+#~ msgstr "Klammern um Arithmetik in Operand von | empfohlen"
+
+#~ msgid "suggest parentheses around comparison in operand of |"
+#~ msgstr "Klammern um Vergleich in Operand von | empfohlen"
+
+#~ msgid "suggest parentheses around arithmetic in operand of ^"
+#~ msgstr "Klammern um Arithmetik in Operand von ^ empfohlen"
+
+#~ msgid "suggest parentheses around comparison in operand of ^"
+#~ msgstr "Klammern um Vergleich in Operand von ^ empfohlen"
+
+#~ msgid "suggest parentheses around + or - in operand of &"
+#~ msgstr "Klammern um + oder - in Operand von & empfohlen"
+
+#~ msgid "suggest parentheses around comparison in operand of &"
+#~ msgstr "Klammern um Vergleich in Operand von & empfohlen"
+
+#~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+#~ msgstr "Vergleiche wie X<=Y<=Z haben nicht ihre mathematische Bedeutung"
+
+#~ msgid "pointer of type `void *' used in subtraction"
+#~ msgstr "Zeiger des Typs »void *« in Subtraktion verwendet"
+
+#~ msgid "pointer to a function used in subtraction"
+#~ msgstr "Zeiger auf eine Funktion in Subtraktion verwendet"
+
+#~ msgid "wrong type argument to unary plus"
+#~ msgstr "Argument falschen Typs für unäres Plus"
+
+#~ msgid "wrong type argument to unary minus"
+#~ msgstr "Argument falschen Typs für unäres Minus"
+
+#~ msgid "ISO C does not support `~' for complex conjugation"
+#~ msgstr "ISO-C unterstützt nicht »~« für komplexe Konjugation"
+
+#~ msgid "wrong type argument to bit-complement"
+#~ msgstr "Argument falschen Typs für Bit-Komplement"
+
+#~ msgid "wrong type argument to abs"
+#~ msgstr "Argument falschen Typs für abs"
+
+#~ msgid "wrong type argument to conjugation"
+#~ msgstr "Argument falschen Typs für Konjugation"
+
+#~ msgid "wrong type argument to unary exclamation mark"
+#~ msgstr "Argument falschen Typs für unäres Ausrufungszeichen"
+
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "ISO-C unterstützt kein »++« und »--« für komplexe Typen"
+
+#~ msgid "wrong type argument to increment"
+#~ msgstr "Argument falschen Typs für Inkrementierung"
+
+#~ msgid "wrong type argument to decrement"
+#~ msgstr "Argument falschen Typs für Dekrementierung"
+
+#~ msgid "increment of pointer to unknown structure"
+#~ msgstr "Erhöhung eines Zeigers auf unbekannte Struktur"
+
+#~ msgid "decrement of pointer to unknown structure"
+#~ msgstr "Verminderung eines Zeigers auf unbekannte Struktur"
+
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "ungültiger L-Wert in unärem »&«"
+
+#~ msgid "attempt to take address of bit-field structure member `%s'"
+#~ msgstr "Versuch, die Adresse des Bitfeld-Element »%s« einer Struktur zu verwenden"
+
+#~ msgid "use of conditional expressions as lvalues is deprecated"
+#~ msgstr "die Verwendung bedingter Ausdrücke als L-Werte ist veraltet"
+
+#~ msgid "use of compound expressions as lvalues is deprecated"
+#~ msgstr "Verwendung zusammengesetzter Ausdrücke als L-Werte ist veraltet"
+
+#~ msgid "use of cast expressions as lvalues is deprecated"
+#~ msgstr "die Verwendung von cast-Ausdrücken als L-Werte ist veraltet"
+
+#~ msgid "%s of read-only member `%s'"
+#~ msgstr "%s des schreibgeschützten Elementes »%s«"
+
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "%s der schreibgeschützten Variable »%s«"
+
+#~ msgid "%s of read-only location"
+#~ msgstr "%s der schreibgeschützten Speicherstelle"
+
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "die Adresse des Bit-Feldes »%s« kann nicht ermittelt werden"
+
+#~ msgid "global register variable `%s' used in nested function"
+#~ msgstr "globale Register-Variable »%s« in verschachtelter Funktion verwendet"
+
+#~ msgid "register variable `%s' used in nested function"
+#~ msgstr "Register-Variable »%s« in verschachtelter Funktion verwendet"
+
+#~ msgid "address of global register variable `%s' requested"
+#~ msgstr "Adresse der globalen Variable »%s« angefordert"
+
+#~ msgid "cannot put object with volatile field into register"
+#~ msgstr "kann kein Objekt mit volatile-Feld in Register laden"
+
+#~ msgid "address of register variable `%s' requested"
+#~ msgstr "Adresse der Register-Variablen »%s« angefordert"
+
+#~ msgid "signed and unsigned type in conditional expression"
+#~ msgstr "Vorzeichenloser und -behafteter Typ in bedingtem Ausdruck"
+
+#~ msgid "ISO C forbids conditional expr with only one void side"
+#~ msgstr "ISO-C verbietet bedingten Ausdruck mit nur einer void-Seite"
+
+#~ msgid "ISO C forbids conditional expr between `void *' and function pointer"
+#~ msgstr "ISO-C verbietet bedingten Ausdruck zwischen »void *« und Funktionszeiger"
+
+#~ msgid "pointer type mismatch in conditional expression"
+#~ msgstr "Zeigertyp passt nicht in bedingtem Ausdruck"
+
+#~ msgid "pointer/integer type mismatch in conditional expression"
+#~ msgstr "Zeiger-/Ganzzahltyp passt nicht in bedingtem Ausdruck"
+
+#~ msgid "type mismatch in conditional expression"
+#~ msgstr "Typ passt nicht in bedingtem Ausdruck"
+
+#~ msgid "left-hand operand of comma expression has no effect"
+#~ msgstr "linker Operand des Komma-Ausdrucks hat keinen Effekt"
+
+#~ msgid "cast specifies array type"
+#~ msgstr "Typkonvertierung gibt Feldtyp an"
+
+#~ msgid "cast specifies function type"
+#~ msgstr "Typkonvertierung gibt Funktionstyp an"
+
+#~ msgid "ISO C forbids casting nonscalar to the same type"
+#~ msgstr "ISO-C verbietet Typkonvertierung von Nicht-Skalar auf selben Typen"
+
+#~ msgid "ISO C forbids casts to union type"
+#~ msgstr "ISO-C verbietet Typkonvertierung auf union-Typ"
+
+#~ msgid "cast to union type from type not present in union"
+#~ msgstr "Typkonvertierung in union-Typ von nicht in union vorhandenem Typen"
+
+#~ msgid "cast adds new qualifiers to function type"
+#~ msgstr "Typkonvertierung fügt neue Typqualifizierer zu Funktionstypen hinzu"
+
+#~ msgid "cast discards qualifiers from pointer target type"
+#~ msgstr "Typkonvertierung streicht Qualifizierer von Zeiger-Zieltyp"
+
+#~ msgid "cast increases required alignment of target type"
+#~ msgstr "Typkonvertierung erfordert Ausrichtung des Zieltyps"
+
+#~ msgid "cast from pointer to integer of different size"
+#~ msgstr "Typkonvertierung von Zeiger auf Ganzzahl anderer Breite"
+
+#~ msgid "cast does not match function type"
+#~ msgstr "Typkonvertierung passt nicht zum Funktionstypen"
+
+#~ msgid "cast to pointer from integer of different size"
+#~ msgstr "Typkonvertierung in Zeiger von Ganzzahl anderer Breite"
+
+#~ msgid "type-punning to incomplete type might break strict-aliasing rules"
+#~ msgstr "Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen"
+
+#~ msgid "dereferencing type-punned pointer will break strict-aliasing rules"
+#~ msgstr "Dereferenzierung eines Type-Pun-Zeigers verletzt strict-aliasing-Regeln"
+
+#~ msgid "ISO C forbids conversion of function pointer to object pointer type"
+#~ msgstr "ISO-C verbietet Konvertierung von Funktionszeigern in Objektzeigertyp"
+
+#~ msgid "ISO C forbids conversion of object pointer to function pointer type"
+#~ msgstr "ISO-C verbietet Konvertierung von Objektzeigertypen in Funktionszeigertyp"
+
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "ungültiger L-Wert in Zuweisung"
+
+#~ msgid "assignment"
+#~ msgstr "Zuweisung"
+
+#~ msgid "cannot pass rvalue to reference parameter"
+#~ msgstr "kann R-Wert nicht an Referenzparameter übergeben"
+
+#~ msgid "%s makes qualified function pointer from unqualified"
+#~ msgstr "%s erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger"
+
+#~ msgid "%s discards qualifiers from pointer target type"
+#~ msgstr "%s streicht Qualifizierer von Zeiger-Zieltypen"
+
+#~ msgid "ISO C prohibits argument conversion to union type"
+#~ msgstr "ISO-C verbietet Argumentkonvertierung in union-Typ"
+
+#~ msgid "ISO C forbids %s between function pointer and `void *'"
+#~ msgstr "ISO-C verbietet %s zwischen Funktionszeiger und »void *«"
+
+#~ msgid "pointer targets in %s differ in signedness"
+#~ msgstr "Zeigerziele in %s unterscheiden sich im Vorzeichenbesitz"
+
+#~ msgid "%s from incompatible pointer type"
+#~ msgstr "%s von inkompatiblem Zeigertyp"
+
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "ungültige Verwendung eines Nicht-L-Wert-Feldes"
+
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%s erzeugt Zeiger von Ganzzahl ohne Typkonvertierung"
+
+#~ msgid "%s makes integer from pointer without a cast"
+#~ msgstr "%s erzeugt Ganzzahl von Zeiger ohne Typkonvertierung"
+
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "inkompatibler Typ für Argument %d von »%s«"
+
+#~ msgid "incompatible type for argument %d of indirect function call"
+#~ msgstr "inkompatibler Typ für Argument %d eines indirekten Funktionsaufrufes"
+
+#~ msgid "incompatible types in %s"
+#~ msgstr "inkompatible Typen in %s"
+
+#~ msgid "passing arg of `%s'"
+#~ msgstr "Verarbeiten des Argumentes von »%s«"
+
+#~ msgid "passing arg of pointer to function"
+#~ msgstr "Verarbeiten des Zeigerargumentes an Funktion"
+
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "Verarbeiten des Argumentes %d von »%s«"
+
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "Verarbeiten des Argumentes %d von Zeiger auf Funktion"
+
+#~ msgid "traditional C rejects automatic aggregate initialization"
+#~ msgstr "traditionelles C lehnt automatische Gesamt-Initialisierung ab"
+
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "(nahe der Initialisierung für »%s«)"
+
+#~ msgid "char-array initialized from wide string"
+#~ msgstr "char-Feld mit wide-Zeichenkette initialisiert"
+
+#~ msgid "int-array initialized from non-wide string"
+#~ msgstr "int-Feld mit Nicht-wide-Zeichenkette initialisiert"
+
+#~ msgid "initializer-string for array of chars is too long"
+#~ msgstr "Initialisierungs-Zeichenkette für char-Feld ist zu lang"
+
+#~ msgid "array initialized from non-constant array expression"
+#~ msgstr "Feld mit nicht konstantem Feldausdruck initialisiert"
+
+#~ msgid "initializer element is not constant"
+#~ msgstr "Initialisierungselement ist nicht konstant"
+
+#~ msgid "initialization"
+#~ msgstr "Initialisierung"
+
+#~ msgid "initializer element is not computable at load time"
+#~ msgstr "Initialisierungs-Element ist zur Lade-Zeit nicht berechenbar"
+
+#~ msgid "invalid initializer"
+#~ msgstr "ungültige Initialisierung"
+
+#~ msgid "opaque vector types cannot be initialized"
+#~ msgstr "opake Vektortypen können nicht initialisiert werden"
+
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "zusätzliche geschweifte Klammern am Ende der Initialisierung"
+
+#~ msgid "missing braces around initializer"
+#~ msgstr "geschweifte Klammern fehlen um Initialisierung"
+
+#~ msgid "braces around scalar initializer"
+#~ msgstr "geschweifte Klammern um Skalar-Initialisierung"
+
+#~ msgid "initialization of flexible array member in a nested context"
+#~ msgstr "Initialisierung eines flexiblen Feld-Elements in geschachteltem Kontext"
+
+#~ msgid "initialization of a flexible array member"
+#~ msgstr "Initialisierung eines flexiblen Feld-Elements"
+
+#~ msgid "missing initializer"
+#~ msgstr "fehlende Initialisierung"
+
+#~ msgid "empty scalar initializer"
+#~ msgstr "leere Skalar-Initialisierung"
+
+#~ msgid "extra elements in scalar initializer"
+#~ msgstr "zusätzliche Elemente in Skalar-Initialisierung"
+
+#~ msgid "initialization designators may not nest"
+#~ msgstr "Initialisierungs-Bezeichner dürfen nicht geschachtelt werden"
+
+#~ msgid "array index in non-array initializer"
+#~ msgstr "Feldindex in Nicht-Feld-Initialisierung"
+
+#~ msgid "field name not in record or union initializer"
+#~ msgstr "Feldname nicht in Datensatz- oder union-Initialisierung"
+
+#~ msgid "nonconstant array index in initializer"
+#~ msgstr "nichtkonstanter Feldindex in Initialisierung"
+
+#~ msgid "array index in initializer exceeds array bounds"
+#~ msgstr "Feldindex in Initialisierung überschreitet Feldgrenzen"
+
+#~ msgid "empty index range in initializer"
+#~ msgstr "leerer Indexbereich in Initialisierung"
+
+#~ msgid "array index range in initializer exceeds array bounds"
+#~ msgstr "Feldindexbereich in Initialisierung überschreitet Feldgrenzen"
+
+#~ msgid "unknown field `%s' specified in initializer"
+#~ msgstr "unbekanntes Feld »%s« in Initialisierung angegeben"
+
+#~ msgid "initialized field with side-effects overwritten"
+#~ msgstr "initialisiertes Feld mit Seiteneffekten überschrieben"
+
+#~ msgid "excess elements in char array initializer"
+#~ msgstr "Elementüberschreitung in char-Feld-Initialisierung"
+
+#~ msgid "excess elements in struct initializer"
+#~ msgstr "Elementüberschreitung in struct-Initialisierung"
+
+#~ msgid "non-static initialization of a flexible array member"
+#~ msgstr "nicht-statische Initialisierung eines flexiblen Feldelements"
+
+#~ msgid "excess elements in union initializer"
+#~ msgstr "Elementüberschreitung in union-Initialisierung"
+
+#~ msgid "traditional C rejects initialization of unions"
+#~ msgstr "traditionelles C lehnt Initialisierung von unions ab"
+
+#~ msgid "excess elements in array initializer"
+#~ msgstr "Elementüberschreitung in Feldinitialisierung"
+
+#~ msgid "excess elements in vector initializer"
+#~ msgstr "Elementüberschreitung in Vektorinitialisierung"
+
+#~ msgid "excess elements in scalar initializer"
+#~ msgstr "Elementüberschreitung in Skalar-Initialisierung"
+
+#~ msgid "asm template is not a string constant"
+#~ msgstr "asm-Template ist keine Zeichenkettenkonstante"
+
+#~ msgid "invalid lvalue in asm statement"
+#~ msgstr "ungültiger L-Wert in asm-Anweisung"
+
+#~ msgid "modification by `asm'"
+#~ msgstr "Modifizierung durch »asm«"
+
+#~ msgid "function declared `noreturn' has a `return' statement"
+#~ msgstr "als »noreturn« deklarierte Funktion hat »return«-Anweisung"
+
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "»return« ohne Wert in nicht void zurückgebender Funktion"
+
+#~ msgid "`return' with a value, in function returning void"
+#~ msgstr "»return« mit Wert in void zurückgebender Funktion"
+
+#~ msgid "return"
+#~ msgstr "return"
+
+#~ msgid "function returns address of local variable"
+#~ msgstr "Funktion liefert Adresse einer lokalen Variablen zurück"
+
+#~ msgid "switch quantity not an integer"
+#~ msgstr "switch-Größe keine Ganzzahl"
+
+#~ msgid "`long' switch expression not converted to `int' in ISO C"
+#~ msgstr "»long« switch-Ausdruck nicht nach »int« konvertiert in ISO C"
+
+#~ msgid "case label not within a switch statement"
+#~ msgstr "case-Marke nicht innerhalb einer switch-Anweisung"
+
+#~ msgid "`default' label not within a switch statement"
+#~ msgstr "»default«-Marke nicht innerhalb einer switch-Anweisung"
+
+#~ msgid "division by zero"
+#~ msgstr "Teilung durch Null"
+
+#~ msgid "right shift count is negative"
+#~ msgstr "Rechts-Schiebe-Weite ist negativ"
+
+#~ msgid "right shift count >= width of type"
+#~ msgstr "Rechts-Schiebe-Weite >= Breite des Typs"
+
+#~ msgid "left shift count is negative"
+#~ msgstr "Links-Schiebe-Weite ist negativ"
+
+#~ msgid "left shift count >= width of type"
+#~ msgstr "Links-Schiebe-Weite >= Breite des Typs"
+
+#~ msgid "shift count is negative"
+#~ msgstr "Schiebeweite ist negativ"
+
+#~ msgid "shift count >= width of type"
+#~ msgstr "Schiebeweite >= Breite des Typs"
+
+#~ msgid "comparing floating point with == or != is unsafe"
+#~ msgstr "Vergleich von Gleitkomma mit == oder != ist unsicher"
+
+#~ msgid "ISO C forbids comparison of `void *' with function pointer"
+#~ msgstr "ISO-C verbietet Vergleich von »void *« mit Funktionszeiger"
+
+#~ msgid "comparison of distinct pointer types lacks a cast"
+#~ msgstr "in Vergleich verschiedener Zeigertypen fehlt Typkonvertierung"
+
+#~ msgid "comparison between pointer and integer"
+#~ msgstr "Vergleich zwischen Zeiger und Ganzzahl"
+
+#~ msgid "ISO C forbids ordered comparisons of pointers to functions"
+#~ msgstr "ISO-C verbietet geordnete Vergleiche zwischen Zeigern auf Funktionen"
+
+#~ msgid "comparison of complete and incomplete pointers"
+#~ msgstr "Vergleich von vollständigen und unvollständigen Zeigern"
+
+#~ msgid "ordered comparison of pointer with integer zero"
+#~ msgstr "geordneter Vergleich von Zeiger mit Ganzzahlnull"
+
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "ungeordneter Vergleich mit Nicht-Gleitkomma-Argument"
+
+#~ msgid "comparison between signed and unsigned"
+#~ msgstr "Vergleich zwischen vorzeichenbehaftet und vorzeichenlos"
+
+#~ msgid "comparison of promoted ~unsigned with constant"
+#~ msgstr "Vergleich von weitergegebenem ~unsigned mit Konstante"
+
+#~ msgid "comparison of promoted ~unsigned with unsigned"
+#~ msgstr "Vergleich von weitergegebenem ~unsigned mit unsigned"
+
+#~ msgid "%Jinlining failed in call to '%F'"
+#~ msgstr "%J»inline« beim Aufruf von »%F« gescheitert"
+
+#~ msgid "called from here"
+#~ msgstr "von hier aufgerufen"
+
+#~ msgid "%Jcan't inline call to '%F'"
+#~ msgstr "%JAufruf von »%F« kann nicht »inline« erfolgen"
+
+#~ msgid "ignoring return value of `%D', declared with attribute warn_unused_result"
+#~ msgstr "Rückgabewert von »%D«, das mit dem Attribut warn_unused_result definiert wurde, wird ignoriert"
+
+#~ msgid "ignoring return value of function declared with attribute warn_unused_result"
+#~ msgstr "Rückgabewert der mit dem Attribut warn_unused_result definierten Funktion wird ignoriert"
+
+#~ msgid "function call has aggregate value"
+#~ msgstr "Funktionsaufruf hat zusammengesetzten Wert"
+
+#~ msgid "bb %d on wrong place"
+#~ msgstr "bb %d an falscher Stelle"
+
+#~ msgid "prev_bb of %d should be %d, not %d"
+#~ msgstr "prev_bb von %d sollte %d sein, nicht %d"
+
+#~ msgid "verify_flow_info: Wrong count of block %i %i"
+#~ msgstr "verify_flow_info: Falsche Blockzahl %i %i"
+
+#~ msgid "verify_flow_info: Wrong frequency of block %i %i"
+#~ msgstr "verify_flow_info: Falsche Blockfrequenz %i %i"
+
+#~ msgid "verify_flow_info: Duplicate edge %i->%i"
+#~ msgstr "verify_flow_info: Doppelte Kante %i->%i"
+
+#~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+#~ msgstr "verify_flow_info: Falsche Wahrscheinlichkeit der Kante %i->%i %i"
+
+#~ msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+#~ msgstr "verify_flow_info: Falsche Kantenzahl %i->%i %i"
+
+#~ msgid "verify_flow_info: Basic block %d succ edge is corrupted"
+#~ msgstr "verify_flow_info: Nachfolgekante des Basis-Blocks %d ist beschädigt"
+
+#~ msgid "Wrong amount of branch edges after unconditional jump %i"
+#~ msgstr "Falsche Summe der Zweig-Kanten nach unbedingtem Sprung %i"
+
+#~ msgid "basic block %d pred edge is corrupted"
+#~ msgstr "Vorgänger des Basis-Blocks %d ist beschädigt"
+
+#~ msgid "basic block %i edge lists are corrupted"
+#~ msgstr "Kantenlisten des Basis-Blockes %i sind beschädigt"
+
+#~ msgid "verify_flow_info failed"
+#~ msgstr "verify_flow_info gescheitert"
+
+#~ msgid "Size of loop %d should be %d, not %d."
+#~ msgstr "Größe der Schleife %d sollte %d sein, nicht %d"
+
+#~ msgid "Bb %d do not belong to loop %d."
+#~ msgstr "Bb %d gehört nicht zur Schleife %d."
+
+#~ msgid "Loop %d's header does not have exactly 2 entries."
+#~ msgstr "Kopf der Schleife %d hat nicht genau 2 Einträge."
+
+#~ msgid "Loop %d's latch does not have exactly 1 successor."
+#~ msgstr "Falle der Schleife %d hat nicht genau einen Nachfolger."
+
+#~ msgid "Loop %d's latch does not have header as successor."
+#~ msgstr "Falle der Schleife %d hat nicht den Kopf als Nachfolger."
+
+#~ msgid "Loop %d's latch does not belong directly to it."
+#~ msgstr "Falle der Schleife %d gehört nicht direkt zu ihr."
+
+#~ msgid "Loop %d's header does not belong directly to it."
+#~ msgstr "Kopf der Schleife %d gehört nicht direkt zu ihr."
+
+#~ msgid "Loop %d's latch is marked as part of irreducible region."
+#~ msgstr "Falle der Schleife %d ist als Teil einer irreduziblen Region markiert."
+
+#~ msgid "Basic block %d should be marked irreducible."
+#~ msgstr "Basisblock %d sollte als irreduzibel markiert werden."
+
+#~ msgid "Basic block %d should not be marked irreducible."
+#~ msgstr "Basisblock %d sollte nicht als irreduzibel markiert werden."
+
+#~ msgid "Edge from %d to %d should be marked irreducible."
+#~ msgstr "Kante von %d nach %d sollte als irreduzibel markiert werden."
+
+#~ msgid "Edge from %d to %d should not be marked irreducible."
+#~ msgstr "Kante von %d nach %d sollte nicht als irreduzibel markiert werden."
+
+#~ msgid "end insn %d for block %d not found in the insn stream"
+#~ msgstr "Ende-insn %d für Block %d nicht im insn-Stream gefunden"
+
+#~ msgid "insn %d is in multiple basic blocks (%d and %d)"
+#~ msgstr "insn %d ist in mehreren Basisblöcken (%d und %d)"
+
+#~ msgid "head insn %d for block %d not found in the insn stream"
+#~ msgstr "Kopf-insn %d für Block %d nicht im insn-Stream gefunden"
+
+#~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
+#~ msgstr "verify_flow_info: REG_BR_PROB passt nicht zu cfg %wi %i"
+
+#~ msgid "Missing REG_EH_REGION note in the end of bb %i"
+#~ msgstr "Fehlender Vermerk von REG_EH_REGION am Ende vom bb %i"
+
+#~ msgid "Too many outgoing branch edges from bb %i"
+#~ msgstr "Zu viele abgehende Zweig-Kanten vom bb %i"
+
+#~ msgid "Fallthru edge after unconditional jump %i"
+#~ msgstr "Fallthru-Kante nach unbedingtem Sprung %i"
+
+#~ msgid "Wrong amount of branch edges after conditional jump %i"
+#~ msgstr "Falsche Summe der Zweig-Kanten nach bedingtem Sprung %i"
+
+#~ msgid "Call edges for non-call insn in bb %i"
+#~ msgstr "Ruf-Kanten für Nicht-Aufruf-insn im bb %i"
+
+#~ msgid "Abnormal edges for no purpose in bb %i"
+#~ msgstr "Abnormale Kanten ohne Grund in bb %i"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is NULL"
+#~ msgstr "insn %d innerhalb des Basis-Blockes %d, aber block_for_insn ist NULL"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is %i"
+#~ msgstr "insn %d innerhalb Basis-Blockes %d, aber block_for_insn ist %i"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK fehlt für Block %d"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK %d in der Mitte des Basis-Blocks %d"
+
+#~ msgid "in basic block %d:"
+#~ msgstr "im Basis-Block %d:"
+
+#~ msgid "flow control insn inside a basic block"
+#~ msgstr "Flusskontroll-insn innerhalb eines Basis-Blockes"
+
+#~ msgid "missing barrier after block %i"
+#~ msgstr "fehlende Sperre nach Block %i"
+
+#~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
+#~ msgstr "verify_flow_info: Falsche Blöcke für »fallthru« %i->%i"
+
+#~ msgid "verify_flow_info: Incorrect fallthru %i->%i"
+#~ msgstr "verify_flow_info: Falsches »fallthru« %i->%i"
+
+#~ msgid "wrong insn in the fallthru edge"
+#~ msgstr "falsche insn in »fallthru«-Kante"
+
+#~ msgid "basic blocks not laid down consecutively"
+#~ msgstr "Basis-Blöcke sind nicht fortlaufend"
+
+#~ msgid "insn outside basic block"
+#~ msgstr "insn außerhalb eines Basis-Blockes"
+
+#~ msgid "return not followed by barrier"
+#~ msgstr "»return« nicht gefolgt von Sperre"
+
+#~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+#~ msgstr "Anzahl der bb-Vermerke in insn-Kette (%d) != n_basic_blocks (%d)"
+
+#~ msgid "function body not available"
+#~ msgstr "Funktionskörper nicht verfügbar"
+
+#~ msgid "redefined extern inline functions are not considered for inlining"
+#~ msgstr "redefinierte »extern inline«-Funktionen kommen nicht als »inline« in Betracht"
+
+#~ msgid "function not considered for inlining"
+#~ msgstr "Funktion kommt nicht für »inline« in Betracht"
+
+#~ msgid "function not inlinable"
+#~ msgstr "Funktion kann nicht »inline« sein"
+
+#~ msgid "%D renamed after being referenced in assembly"
+#~ msgstr "%D nach Referenzierung in Assemblierung umbenannt"
+
+#~ msgid "--param large-function-growth limit reached"
+#~ msgstr "--param large-function-growth: Limit erreicht"
+
+#~ msgid "--param large-function-growth limit reached while inlining the caller"
+#~ msgstr "--param large-function-growth: Limit bei »inline« des Aufrufers erreicht"
+
+#~ msgid "--param max-inline-insns-single limit reached"
+#~ msgstr "--param max-inline-insns-single: Limit erreicht"
+
+#~ msgid "--param max-inline-insns-single limit reached after inlining into the callee"
+#~ msgstr "--param max-inline-insns-single: Limit nach »inline« im Aufgerufenen erreicht"
+
+#~ msgid "--param inline-unit-growth limit reached"
+#~ msgstr "--param inline-unit-growth: Limit erreicht"
+
+#~ msgid "recursive inlining"
+#~ msgstr "rekursives inline"
+
+#~ msgid "internal error"
+#~ msgstr "interner Fehler"
+
+#~ msgid "no arguments"
+#~ msgstr "Keiner Argumente"
+
+#~ msgid "fopen %s"
+#~ msgstr "fopen %s"
+
+#~ msgid "fclose %s"
+#~ msgstr "fclose %s"
+
+#~ msgid "collect2 version %s"
+#~ msgstr "collect2-Version %s"
+
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%d Konstruktor(en) gefunden\n"
+
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%d Destruktor(en) gefunden\n"
+
+#~ msgid "%d frame table(s) found\n"
+#~ msgstr "%d Rahmentabelle(n) gefunden\n"
+
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%s mit Signal %d [%s]%s beendet"
+
+#~ msgid "%s returned %d exit status"
+#~ msgstr "%s gab Ende-Status %d zurück"
+
+#~ msgid "[cannot find %s]"
+#~ msgstr "[kann %s nicht finden]"
+
+#~ msgid "cannot find `%s'"
+#~ msgstr "kann »%s« nicht finden"
+
+#~ msgid "redirecting stdout: %s"
+#~ msgstr "leite Standardausgabe um: %s"
+
+#~ msgid "[Leaving %s]\n"
+#~ msgstr "[Verlasse %s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "write_c_file - output name is %s, prefix is %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "write_c_file - Ausgabename ist %s, Präfix ist %s\n"
+
+#~ msgid "cannot find `nm'"
+#~ msgstr "kann »nm« nicht finden"
+
+#~ msgid "pipe"
+#~ msgstr "Pipe"
+
+#~ msgid "fdopen"
+#~ msgstr "fdopen"
+
+#~ msgid "dup2 %d 1"
+#~ msgstr "dup2 %d 1"
+
+#~ msgid "close %d"
+#~ msgstr "close %d"
+
+#~ msgid "execv %s"
+#~ msgstr "execv %s"
+
+#~ msgid "init function found in object %s"
+#~ msgstr "init-Funktion im Objekt %s gefunden"
+
+#~ msgid "fini function found in object %s"
+#~ msgstr "fini-Funktion im Objekt %s gefunden"
+
+#~ msgid "fclose"
+#~ msgstr "fclose"
+
+#~ msgid "unable to open file '%s'"
+#~ msgstr "kann Datei »%s« nicht öffnen"
+
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "kann Dateistatus für »%s« nicht ermitteln"
+
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "kann mmap nicht auf Datei »%s« anwenden"
+
+#~ msgid "not found\n"
+#~ msgstr "nicht gefunden\n"
+
+#~ msgid "dynamic dependency %s not found"
+#~ msgstr "dynamische Abhängigkeit %s nicht gefunden"
+
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "Falsche magische Zahl in Datei »%s«"
+
+#~ msgid "dynamic dependencies.\n"
+#~ msgstr "dynamische Abhängigkeiten.\n"
+
+#~ msgid "cannot find `ldd'"
+#~ msgstr "kann »ldd« nicht finden"
+
+#~ msgid ""
+#~ "\n"
+#~ "ldd output with constructors/destructors.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ausgabe von ldd mit Konstruktoren/Destruktoren.\n"
+
+#~ msgid "unable to open dynamic dependency '%s'"
+#~ msgstr "kann dynamische Abhängigkeit »%s« nicht öffnen"
+
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s: keine COFF-Datei"
+
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "kann %s nicht als COFF-Datei öffnen"
+
+#~ msgid "library lib%s not found"
+#~ msgstr "Bibliothek lib%s nicht gefunden"
+
+#~ msgid ""
+#~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ "\n"
+#~ msgstr ""
+#~ ";; Kombinierer-Statistik: %d Versuche, %d Ersetzungen (%d benötigten neuen Platz),\n"
+#~ ";; %d Erfolge.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ msgstr ""
+#~ "\n"
+#~ ";; Kombinierer-Gesamtwerte: %d Versuche, %d Ersetzungen (%d benötigten neuen Platz),\n"
+#~ ";; %d Erfolge.\n"
+
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "kann nicht in Zeigertyp konvertieren"
+
+#~ msgid "pointer value used where a floating point value was expected"
+#~ msgstr "Zeigerwert verwendet, wo Gleitkommawert erwartet wurde"
+
+#~ msgid "aggregate value used where a float was expected"
+#~ msgstr "zusammengesetzten Wert verwendet, wo Gleitkomma erwartet wurde"
+
+#~ msgid "conversion to incomplete type"
+#~ msgstr "Konvertierung in unvollständigen Typen"
+
+#~ msgid "can't convert between vector values of different size"
+#~ msgstr "kann nicht zwischen Vektorwerten verschiedener Größen konvertieren"
+
+#~ msgid "aggregate value used where an integer was expected"
+#~ msgstr "zusammengesetzter Wert verwendet, wo Ganzzahl erwartet wurde"
+
+#~ msgid "pointer value used where a complex was expected"
+#~ msgstr "Zeigerwert verwendet, wo »complex« erwartet wurde"
+
+#~ msgid "aggregate value used where a complex was expected"
+#~ msgstr "zusammengesetzer Wert verwendet, wo »complex« erwartet wurde"
+
+#~ msgid "can't convert value to a vector"
+#~ msgstr "kann Wert nicht in Vektor konvertieren"
+
+#~ msgid "`%s' is not a gcov data file"
+#~ msgstr "»%s« ist keine gcov-Datei"
+
+#~ msgid "`%s' is version `%.4s', expected version `%.4s'"
+#~ msgstr "»%s« hat Version »%.4s«, Version »%.4s« erwartet"
+
+#~ msgid "coverage mismatch for function %u while reading execution counters."
+#~ msgstr "Überdeckung passt nicht für Funktion %u beim Lesen der Ausführungszähler."
+
+#~ msgid "checksum is %x instead of %x"
+#~ msgstr "Prüfsumme ist %x statt %x"
+
+#~ msgid "number of counters is %d instead of %d"
+#~ msgstr "Zahl der Zähler ist %d statt %d"
+
+#~ msgid "cannot merge separate %s counters for function %u"
+#~ msgstr "separate %s Zähler für die Funktion %u können nicht verschmolzen werden"
+
+#~ msgid "`%s' has overflowed"
+#~ msgstr "»%s« übergelaufen"
+
+#~ msgid "`%s' is corrupted"
+#~ msgstr "»%s« ist beschädigt"
+
+#~ msgid "file %s not found, execution counts assumed to be zero"
+#~ msgstr "Datei %s nicht gefunden, Ausführungszähler als null angenommen"
+
+#~ msgid "no coverage for function '%s' found."
+#~ msgstr "keine Überdeckung für Funktion »%s« gefunden."
+
+#~ msgid "coverage mismatch for function '%s' while reading counter '%s'."
+#~ msgstr "Überdeckung passt nicht bei Funktion »%s« beim Lesen des Zählers »%s«."
+
+#~ msgid "cannot open %s"
+#~ msgstr "Es ist nicht möglich, »%s« zu öffnen"
+
+#~ msgid "error writing `%s'"
+#~ msgstr "Fehler beim Schreiben der Datei »%s«"
+
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "»%s« ist keine gültige Präprozessoroption"
+
+#~ msgid "too many input files"
+#~ msgstr "zu viele Eingabedateien"
+
+#~ msgid ";; Processing block from %d to %d, %d sets.\n"
+#~ msgstr ";; Bearbeite Block von %d bis %d, %d Sets.\n"
+
+#~ msgid "%s:%d: confused by earlier errors, bailing out\n"
+#~ msgstr "%s:%d: durch frühere Fehler verwirrt, Abbruch\n"
+
+#~ msgid "compilation terminated.\n"
+#~ msgstr "Kompilierung beendet.\n"
+
+#~ msgid "Internal compiler error: Error reporting routines re-entered.\n"
+#~ msgstr "Interner Compilerfehler: Fehlerbehandlungsroutinen doppelt betreten.\n"
+
+#~ msgid "in %s, at %s:%d"
+#~ msgstr "in %s, bei %s:%d"
+
+#~ msgid "dominator of %d should be %d, not %d"
+#~ msgstr "Herrscher über %d sollte %d sein, nicht %d"
+
+#~ msgid "DW_LOC_OP %s not implemented\n"
+#~ msgstr "DW_LOC_OP %s nicht implementiert\n"
+
+#~ msgid "can't access real part of complex value in hard register"
+#~ msgstr "kann nicht auf realen Teil des komplexen Wertes im festen Register zugreifen"
+
+#~ msgid "can't access imaginary part of complex value in hard register"
+#~ msgstr "kann nicht auf imaginären Teil des komplexen Wertes im festen Register zugreifen"
+
+#~ msgid "Invalid rtl sharing found in the insn"
+#~ msgstr "ungültige gemeinsame rtl-Benutzung in insn gefunden"
+
+#~ msgid "Shared rtx"
+#~ msgstr "Gemeinsames rtx"
+
+#~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
+#~ msgstr "ICE: emit_insn verwendet, wo emit_jump_insn erforderlich:\n"
+
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "Abbruch in %s, bei %s:%d"
+
+#~ msgid "exception handling disabled, use -fexceptions to enable"
+#~ msgstr "Ausnahmebehandlung ausgeschaltet, benutzen Sie -fexeptions zum Anschalten"
+
+#~ msgid "argument of `__builtin_eh_return_regno' must be constant"
+#~ msgstr "Argument für »__builtin_eh_return_regno« muss konstant sein"
+
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "__builtin_eh_return für dieses Ziel nicht unterstützt"
+
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "Kellergrenzen nicht für dieses Ziel unterstützt"
+
+#~ msgid "function using short complex types cannot be inline"
+#~ msgstr "Funktion, die komplexe »short«-Typen verwendet, kann nicht »inline« sein"
+
+#~ msgid "%Jprior parameter's size depends on '%D'"
+#~ msgstr "%Jvorherige Parametergröße hängt von »%D« ab"
+
+#~ msgid "returned value in block_exit_expr"
+#~ msgstr "zurückgelieferter Wert in block_exit_expr"
+
+#~ msgid "cannot take the address of an unaligned member"
+#~ msgstr "die Adresse eines nicht ausgerichteten Elements kann nicht ermittelt werden"
+
+#~ msgid "negative insn length"
+#~ msgstr "negative insn-Länge"
+
+#~ msgid "could not split insn"
+#~ msgstr "insn kann nicht aufgeteilt werden"
+
+#~ msgid "invalid `asm': "
+#~ msgstr "ungültiges »asm«: "
+
+#~ msgid "nested assembly dialect alternatives"
+#~ msgstr "geschachtelte Assemblerdialekt-Alternativen"
+
+#~ msgid "unterminated assembly dialect alternative"
+#~ msgstr "unbeendete Assemblerdialekt-Alternative"
+
+#~ msgid "operand number missing after %%-letter"
+#~ msgstr "Operandenzahl fehlt hinter %%-Buchstabe"
+
+#~ msgid "operand number out of range"
+#~ msgstr "Operandenzahl außerhalb des Wertebereiches"
+
+#~ msgid "invalid %%-code"
+#~ msgstr "ungültiger %%-Code"
+
+#~ msgid "`%%l' operand isn't a label"
+#~ msgstr "»%%l«-Operand ist keine Marke"
+
+#~ msgid "floating constant misused"
+#~ msgstr "Gleitkommakonstante falsch benutzt"
+
+#~ msgid "invalid expression as operand"
+#~ msgstr "ungültiger Ausdruck als Operand"
+
+#~ msgid "function might be possible candidate for attribute `noreturn'"
+#~ msgstr "Funktion könnte möglicher Kandidat für Attribut »noreturn« sein"
+
+#~ msgid "`noreturn' function does return"
+#~ msgstr "»noreturn«-Funktion kehrt zurück"
+
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "Kontrollfluss erreicht Ende einer Nicht-void-Funktion"
+
+#~ msgid "Attempt to delete prologue/epilogue insn:"
+#~ msgstr "Versuch, Prolog/Epilog-insn zu löschen"
+
+#~ msgid "comparison is always %d due to width of bit-field"
+#~ msgstr "Vergleich ist immer %d wegen Breite des Bitfeldes"
+
+#~ msgid "comparison is always %d"
+#~ msgstr "Vergleich ist immer %d"
+
+#~ msgid "`or' of unmatched not-equal tests is always 1"
+#~ msgstr "»oder« nicht passender Ungleichheits-Tests ist immer 1"
+
+#~ msgid "`and' of mutually exclusive equal-tests is always 0"
+#~ msgstr "»und« gegenseitig ausschließender Gleichheits-Tests ist immer 0"
+
+#~ msgid "fold check: original tree changed by fold"
+#~ msgstr "Faltungstest: ursprünglicher Baum durch Faltung geändert"
+
+#~ msgid "%Jsize of variable '%D' is too large"
+#~ msgstr "%JGröße der Variable »%D« ist zu hoch"
+
+#~ msgid "impossible constraint in `asm'"
+#~ msgstr "unmögliche Bedingung in »asm«"
+
+#~ msgid "%J'%D' might be used uninitialized in this function"
+#~ msgstr "%J»%D« könnte in dieser Funktion uninitialisiert bleiben"
+
+#~ msgid "%Jvariable '%D' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "%JVariable »%D« könnte von »longjmp« oder »vfork« zerstört werden"
+
+#~ msgid "%Jargument '%D' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "%JArgument »%D« könnte von »longjmp« oder »vfork« zerstört werden"
+
+#~ msgid "function returns an aggregate"
+#~ msgstr "Funktion gibt Aggregat zurück"
+
+#~ msgid "%Junused parameter '%D'"
+#~ msgstr "%Jnicht benutzter Parameter »%D«"
+
+#~ msgid "ambiguous abbreviation %s"
+#~ msgstr "mehrdeutige Abkürzung %s"
+
+#~ msgid "incomplete `%s' option"
+#~ msgstr "unvollständige »%s«-Option"
+
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "fehlendes Argument für »%s«-Option"
+
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "zusätzliches (belangloses) Argument für »%s«-Option"
+
+#~ msgid "Using built-in specs.\n"
+#~ msgstr "Benutze eingebaute Spezifikationen.\n"
+
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Setze Spezifikation %s auf '%s'\n"
+#~ "\n"
+
+#~ msgid "Reading specs from %s\n"
+#~ msgstr "Lese Spezifikationen von %s\n"
+
+#~ msgid "specs %%include syntax malformed after %ld characters"
+#~ msgstr "falsche %%include-Syntax für Spezifikationen nach %ld Zeichen"
+
+#~ msgid "could not find specs file %s\n"
+#~ msgstr "konnte Spezifikationsdatei %s nicht finden\n"
+
+#~ msgid "specs %%rename syntax malformed after %ld characters"
+#~ msgstr "falsche %%rename-Syntax für Spezifikationen nach %ld Zeichen"
+
+#~ msgid "specs %s spec was not found to be renamed"
+#~ msgstr "keine %s-Spezifikation zum Umbenennen gefunden"
+
+#~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
+#~ msgstr "%s: Versuch, Spezifikation »%s« in bereits definierte Spezifikation »%s« umzubenennen"
+
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "benenne Spezifikation %s nach %s um\n"
+
+#~ msgid ""
+#~ "spec is '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Spezifikation ist '%s'\n"
+#~ "\n"
+
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "Spezifikation: unbekannter %%-Befehl nach %ld Zeichen"
+
+#~ msgid "specs file malformed after %ld characters"
+#~ msgstr "Fehler in Spezifikationsdatei nach %ld Zeichen"
+
+#~ msgid "spec file has no spec for linking"
+#~ msgstr "Spezifikationsdatei hat keine Spezifikation zum Binden"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "-pipe wird nicht unterstützt"
+
+# can we use j/n here, too?
+# 2002-04-23 18:57:43 CEST -ke-
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr ""
+#~ "\n"
+#~ "Fortfahren? (y oder n) "
+
+#~ msgid ""
+#~ "Internal error: %s (program %s)\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "Interner Fehler: %s (Programm %s)\n"
+#~ "Bitte senden Sie einen vollständigen Fehlerbericht\n"
+#~ "auf Englisch ein; Fehler in der deutschen Übersetzung\n"
+#~ "sind an de@li.org zu melden.\n"
+#~ "Gehen Sie gemäß den Hinweisen in %s vor."
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "Aufruf: %s [Optionen] Datei...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "Optionen:\n"
+
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr "  -pass-exit-codes         Ende mit höchstem Rückgabe-Code einer Phase\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   Diese Informationen anzeigen\n"
+
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "  --target-help            Zielspezifische Kommandozeilenoptionen anzeigen\n"
+
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "  ('-v --help' zum Anzeigen der Kommandozeilenoptionen von Subprozessen verwenden)\n"
+
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "  -dumpspecs               Alle eingebauten Spezifikationszeichenketten anzeigen\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             Compilerversion anzeigen\n"
+
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "  -dumpmachine             Zielprozessor des Compilers anzeigen\n"
+
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "  -print-search-dirs       Verzeichnisse im Suchpfad des Compilers anzeigen\n"
+
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "  -print-libgcc-file-name  Name der Begleitbibliothek des Compilers anzeigen\n"
+
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "  -print-file-name=<lib>   Vollen Pfad zur Bibliothek <lib> anzeigen\n"
+
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "  -print-prog-name=<prog>  Vollen Pfad zur Compilerkomponente <prog> anzeigen\n"
+
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "  -print-multi-directory   Wurzelverzeichnis für Versionen von libgcc anzeigen\n"
+
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr ""
+#~ "  -print-multi-lib         Abbildung zwischen Kommandozeilenoptionen und\n"
+#~ "                           mehreren Suchverzeichnissen für Bibliotheken anzeigen\n"
+
+#~ msgid "  -print-multi-os-directory Display the relative path to OS libraries\n"
+#~ msgstr ""
+#~ "  -print-multi-os-directory Relativen Pfad zu Betriebssystembibliotheken\n"
+#~ "                            anzeigen\n"
+
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "  -Wa,<Optionen>           Komma-getrennte <Optionen> an Assembler übergeben\n"
+
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "  -Wp,<Optionen>           Komma-getrennte <Optionen> an Präprozessor übergeben\n"
+
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "  -Wl,<Optionen>           Komma-getrennte <Optionen> an Linker übergeben\n"
+
+#~ msgid "  -Xassembler <arg>        Pass <arg> on to the assembler\n"
+#~ msgstr "  -Xassembler <arg>        <arg> an den Assembler übergeben\n"
+
+#~ msgid "  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor\n"
+#~ msgstr "  -Xpreprocessor <arg>     <arg> an den Präprozessor übergeben\n"
+
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "  -Xlinker <arg>           <arg> an den Linker übergeben\n"
+
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "  -save-temps              Temporäre Dateien nicht löschen\n"
+
+#~ msgid "  -pipe                    Use pipes rather than intermediate files\n"
+#~ msgstr "  -pipe                    Pipes statt temporärer Dateien verwenden\n"
+
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "  -time                    Zeit für Ausführung jedes Subprozesses stoppen\n"
+
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr ""
+#~ "  -specs=<Datei>           Eingebaute Spezifikationen mit Inhalt der <Datei>\n"
+#~ "                           überschreiben\n"
+
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr "  -std=<Standard>          Annehmen, dass die Eingabequellen für <Standard> sind\n"
+
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "  -B <Verzeichnis>         <Verzeichnis> zum Suchpfad des Compilers hinzufügen\n"
+
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr ""
+#~ "  -b <Maschine>            GCC für die Ziel-<Maschine> laufen lassen, falls\n"
+#~ "                           installiert\n"
+
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr "  -V <Version>             GCC <Version> laufen lassen, falls installiert\n"
+
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "  -v                       Vom Compiler aufgerufene Programme anzeigen\n"
+
+#~ msgid "  -###                     Like -v but options quoted and commands not executed\n"
+#~ msgstr ""
+#~ "  -###                     Wie -v, aber mit zitierten Optionen und nicht\n"
+#~ "                           ausgeführten Befehlen\n"
+
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr ""
+#~ "  -E                       Nur Präprozessor, kein Compiler, Assembler oder\n"
+#~ "                           Binder\n"
+
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "  -S                       Nur kompilieren, nicht assemblieren oder binden\n"
+
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "  -c                       Nur kompilieren und assemblieren, aber nicht binden\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <Datei>               Ausgabe in <Datei> schreiben\n"
+
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissible languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behavior of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr ""
+#~ "  -x <Sprache>             Sprache der folgenden Eingabedateien angeben\n"
+#~ "                           Zulässige Sprachen sind: c c++ assembler none\n"
+#~ "                           'none' bedeutet den Rückfall auf das Standard-\n"
+#~ "                           verhalten, die Sprache aufgrund der Dateinamens-\n"
+#~ "                           erweiterung zu vermuten\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Optionen, die mit -g, -f, -m, -O, -W, oder --param beginnen, werden automatisch\n"
+#~ " an die verschiedenen Subprozesse, die von %s aufgerufen werden, übergeben.\n"
+#~ " Um andere Optionen an diese Prozesse zu übergeben, müssen die Optionen\n"
+#~ " -W<Buchstabe> verwendet werden.\n"
+
+#~ msgid "`-%c' option must have argument"
+#~ msgstr "Die Option »-%c« muss ein Argument haben"
+
+#~ msgid "couldn't run `%s': %s"
+#~ msgstr "konnte »%s« nicht ausführen: %s"
+
+#~ msgid "%s (GCC) %s\n"
+#~ msgstr "%s (GCC) %s\n"
+
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.  There is NO\n"
+#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n"
+#~ "gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE.\n"
+#~ "\n"
+
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "Argument für »-Xlinker« fehlt"
+
+#~ msgid "argument to `-Xpreprocessor' is missing"
+#~ msgstr "Argument für »-Xpreprocessor« fehlt"
+
+#~ msgid "argument to `-Xassembler' is missing"
+#~ msgstr "Argument für »-Xassembler« fehlt"
+
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "Argument für »-l« fehlt"
+
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "Argument für »-specs« fehlt"
+
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "Argument für »-specs=« fehlt"
+
+#~ msgid "`-%c' must come at the start of the command line"
+#~ msgstr "»-%c« muss am Anfang der Kommandozeile stehen"
+
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "Argument für »-B« fehlt"
+
+#~ msgid "warning: -pipe ignored because -save-temps specified"
+#~ msgstr "Warnung: -pipe ignoriert, da -save-temps angegeben"
+
+#~ msgid "warning: -pipe ignored because -time specified"
+#~ msgstr "Warnung: -pipe ignoriert, da -time angegeben"
+
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "Argument für »-x« fehlt"
+
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "Argument für »-%s« fehlt"
+
+#~ msgid "warning: `-x %s' after last input file has no effect"
+#~ msgstr "Warnung: »-x %s« hinter letzter Eingabedatei hat keine Wirkung"
+
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "ungültige Spezifikation!  Fehler in cc"
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "spec failure: '%%*' has not been initialized by pattern match"
+#~ msgstr "Spezifikationsfehler: »%%*« wurde nicht durch Mustererkennung initialisiert"
+
+#~ msgid "warning: use of obsolete %%[ operator in specs"
+#~ msgstr "Warnung: Verwendung des veralteten Operators %%[ in Spezifikation"
+
+#~ msgid "Processing spec %c%s%c, which is '%s'\n"
+#~ msgstr "Verarbeite Spezifikation %c%s%c, welche »%s« ist\n"
+
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "Spezifikationsfehler: nicht erkannte Option »%c«"
+
+#~ msgid "unknown spec function `%s'"
+#~ msgstr "unbekannte Spezifikationsfunktion »%s«"
+
+#~ msgid "error in args to spec function `%s'"
+#~ msgstr "Fehler in Argumenten für Spezifikationsfunktion »%s«"
+
+#~ msgid "malformed spec function name"
+#~ msgstr "schlechter Name für Spezifikationsfunktion"
+
+#~ msgid "no arguments for spec function"
+#~ msgstr "keine Argumente für Spezifikationsfunktion"
+
+#~ msgid "malformed spec function arguments"
+#~ msgstr "schlechte Argumente für Spezifikationsfunktion"
+
+#~ msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC."
+#~ msgstr "Spezifikationsfehler: mehr als ein Argument für SYSROOT_SUFFIX_SPEC."
+
+#~ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC."
+#~ msgstr "Spezifikationsfehler: mehr als ein Argument für SYSROOT_HEADERS_SUFFIX_SPEC."
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "nicht erkannte Option »-%s«"
+
+#~ msgid "install: %s%s\n"
+#~ msgstr "installiere: %s%s\n"
+
+#~ msgid "programs: %s\n"
+#~ msgstr "Programme: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "Bibliotheken: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zum Einsenden von Fehlerberichten (auf Englisch) lesen Sie bitte die\n"
+#~ "folgenden Hinweise; Fehler in der deutschen Übersetzung sind an de@li.org\n"
+#~ "zu melden:\n"
+
+#~ msgid "Configured with: %s\n"
+#~ msgstr "Konfiguriert mit: %s\n"
+
+#~ msgid "Thread model: %s\n"
+#~ msgstr "Thread-Modell: %s\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "gcc-Version %s\n"
+
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "gcc-Treiberversion %s führt gcc Version %s aus\n"
+
+#~ msgid "no input files"
+#~ msgstr "keine Eingabedateien"
+
+#~ msgid "%s: linker input file unused because linking not done"
+#~ msgstr "%s: Eingabedateien des Binders unbenutzt, da keine Bindung geschieht"
+
+#~ msgid "cannot specify -o with -c or -S and multiple languages"
+#~ msgstr "-o kann nicht mit -c oder -S und mehreren Sprachen angegeben werden"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: %s-Compiler ist auf diesem System nicht installiert"
+
+#~ msgid "language %s not recognized"
+#~ msgstr "Sprache %s nicht erkannt"
+
+#~ msgid "internal gcc abort"
+#~ msgstr "interner Abruch des gcc"
+
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "Interner gcov-Abbruch.\n"
+
+#~ msgid ""
+#~ "Usage: gcov [OPTION]... SOURCEFILE\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aufruf: gcov [OPTION]... QUELLDATEI\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Print code coverage information.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Information zur Code-Überdeckung ausgeben.\n"
+#~ "\n"
+
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "  -h, --help                      Diese Hilfe anzeigen\n"
+
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "  -v, --version                   Versionsnummer anzeigen\n"
+
+#~ msgid "  -a, --all-blocks                Show information for every basic block\n"
+#~ msgstr "  -a, --all-blocks                Informationen für jeden Basisblock zeigen\n"
+
+#~ msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
+#~ msgstr "  -b, --branch-probabilities      Zweigwahrscheinlichkeiten in Ausgabe aufnehmen\n"
+
+#~ msgid ""
+#~ "  -c, --branch-counts             Given counts of branches taken\n"
+#~ "                                    rather than percentages\n"
+#~ msgstr "  -c, --branch-counts             Angegebene Zweigzahlen statt Anteilen nehmen\n"
+
+#~ msgid "  -n, --no-output                 Do not create an output file\n"
+#~ msgstr "  -n, --no-output                 Keine Ausgabedatei erzeugen\n"
+
+#~ msgid ""
+#~ "  -l, --long-file-names           Use long output file names for included\n"
+#~ "                                    source files\n"
+#~ msgstr ""
+#~ "  -l, --long-file-names           Lange Dateinamen für Ausgabedateien für\n"
+#~ "                                    eingefügte Quelldateien verwenden\n"
+
+#~ msgid "  -f, --function-summaries        Output summaries for each function\n"
+#~ msgstr "  -f, --function-summaries        Ausgabezusammenfassungen für jede Funktion\n"
+
+#~ msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+#~ msgstr ""
+#~ "  -o, --object-directory DIR|FILE In DIR oder aufgerufener Datei FILE nach\n"
+#~ "                                  Objektdateien suchen\n"
+
+#~ msgid "  -p, --preserve-paths            Preserve all pathname components\n"
+#~ msgstr "  -p, --preserve-paths            Alle Pfadnamenskomponenten bewahren\n"
+
+#~ msgid "  -u, --unconditional-branches    Show unconditional branch counts too\n"
+#~ msgstr "  -u, --unconditional-branches    Auch unbedingte Zweigzähler zeigen\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zum Einsenden von Fehlerberichten (auf Englisch) lesen Sie bitte die Hinweise in:\n"
+#~ "%s.\n"
+#~ "Fehler in der deutschen Übersetzung sind an de@li.org zu melden.\n"
+
+#~ msgid "gcov (GCC) %s\n"
+#~ msgstr "gcov (GCC) %s\n"
+
+#~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2003 Free Software Foundation, Inc.\n"
+
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or \n"
+#~ "FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n"
+#~ "gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE.\n"
+#~ "\n"
+
+#~ msgid "%s:no functions found\n"
+#~ msgstr "%s: keine Funktionen gefunden\n"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "%s:creating `%s'\n"
+#~ msgstr "%s: Erzeugen von »%s«\n"
+
+#~ msgid "%s:error writing output file `%s'\n"
+#~ msgstr "%s: Fehler beim Schreiben der Ausgabedatei »%s«\n"
+
+#~ msgid "%s:could not open output file `%s'\n"
+#~ msgstr "%s: Ausgabedatei %s konnte nicht geöffnet werden\n"
+
+#~ msgid "%s:cannot open graph file\n"
+#~ msgstr "%s: Graph-Datei kann nicht geöffnet werden\n"
+
+#~ msgid "%s:not a gcov graph file\n"
+#~ msgstr "%s: keine gcov-Graph-Datei\n"
+
+#~ msgid "%s:version `%.4s', prefer `%.4s'\n"
+#~ msgstr "%s: Version »%.4s«, aber »%.4s« wird bevorzugt\n"
+
+#~ msgid "%s:already seen blocks for `%s'\n"
+#~ msgstr "%s: bereits gesehene Blöcke für »%s«\n"
+
+#~ msgid "%s:corrupted\n"
+#~ msgstr "%s: beschädigt\n"
+
+#~ msgid "%s:cannot open data file\n"
+#~ msgstr "%s: kann nicht geöffnet werden\n"
+
+#~ msgid "%s:not a gcov data file\n"
+#~ msgstr "%s: keine gcov-Datei\n"
+
+#~ msgid "%s:version `%.4s', prefer version `%.4s'\n"
+#~ msgstr "%s: Version »%.4s«, aber Version »%.4s« wird bevorzugt\n"
+
+#~ msgid "%s:stamp mismatch with graph file\n"
+#~ msgstr "%s: Marke passt nicht zur Graph-Datei\n"
+
+#~ msgid "%s:unknown function `%u'\n"
+#~ msgstr "%s: unbekannte Funktion »%u«\n"
+
+#~ msgid "%s:profile mismatch for `%s'\n"
+#~ msgstr "%s: Profil passt nicht für `%s'\n"
+
+#~ msgid "%s:overflowed\n"
+#~ msgstr "%s: übergelaufen\n"
+
+#~ msgid "%s:`%s' lacks entry and/or exit blocks\n"
+#~ msgstr "%s: Eintrag und/oder Exit-Blöcke fehlen in »%s«\n"
+
+#~ msgid "%s:`%s' has arcs to entry block\n"
+#~ msgstr "%s: »%s« hat Bögen zum Eintrittsblock\n"
+
+#~ msgid "%s:`%s' has arcs from exit block\n"
+#~ msgstr "%s: »%s« hat Bögen vom Eintrittsblock\n"
+
+#~ msgid "%s:graph is unsolvable for `%s'\n"
+#~ msgstr "%s: Graph ist für »%s« unlösbar\n"
+
+#~ msgid "%s `%s'\n"
+#~ msgstr "%s: »%s«\n"
+
+#~ msgid "Lines executed:%s of %d\n"
+#~ msgstr "%s von %d Zeilen ausgeführt\n"
+
+#~ msgid "No executable lines"
+#~ msgstr "Keine ausführbaren Zeilen"
+
+#~ msgid "Branches executed:%s of %d\n"
+#~ msgstr "%s von %d Zweigen ausgeführt\n"
+
+#~ msgid "Taken at least once:%s of %d\n"
+#~ msgstr "%s von %d Zweigen mindestens einmal genommen\n"
+
+#~ msgid "No branches\n"
+#~ msgstr "Keine Zweige\n"
+
+#~ msgid "Calls executed:%s of %d\n"
+#~ msgstr "%s von %d Aufrufe ausgeführt\n"
+
+#~ msgid "No calls\n"
+#~ msgstr "Keine Aufrufe\n"
+
+#~ msgid "%s:no lines for `%s'\n"
+#~ msgstr "%s: keine Zeilen für »%s«\n"
+
+#~ msgid "call   %2d returned %s\n"
+#~ msgstr "Aufruf %2d gab %s zurück\n"
+
+#~ msgid "call   %2d never executed\n"
+#~ msgstr "Aufruf %2d niemals ausgeführt\n"
+
+#~ msgid "branch %2d taken %s%s\n"
+#~ msgstr "Zweig %2d wurde genommen: %s%s\n"
+
+#~ msgid "branch %2d never executed\n"
+#~ msgstr "Zweig %2d niemals ausgeführt\n"
+
+#~ msgid "unconditional %2d taken %s\n"
+#~ msgstr "unbedingtes %2d, genommen: %s\n"
+
+#~ msgid "unconditional %2d never executed\n"
+#~ msgstr "unbedingtes %2d niemals ausgeführt\n"
+
+#~ msgid "%s:cannot open source file\n"
+#~ msgstr "%s: Quelldatei kann nicht geöffnet werden\n"
+
+#~ msgid "%s:source file is newer than graph file `%s'\n"
+#~ msgstr "%s: Quelldatei ist neuer als Graph-Datei »%s«\n"
+
+#~ msgid "GCSE disabled"
+#~ msgstr "GCSE ausgeschaltet"
+
+#~ msgid "NULL pointer checks disabled"
+#~ msgstr "NULL-Zeiger Tests ausgeschaltet"
+
+#~ msgid "jump bypassing disabled"
+#~ msgstr "Sprungumgehungen ausgeschaltet"
+
+#~ msgid "%s: %d basic blocks and %d edges/basic block"
+#~ msgstr "%s: %d Basis-Blöcke und %d Kanten/Basis-Blöcke"
+
+#~ msgid "%s: %d basic blocks and %d registers"
+#~ msgstr "%s: %d Basis-Blöcke und %d Register"
+
+#~ msgid "can't write PCH file: %m"
+#~ msgstr "PCH-Datei kann nicht geschrieben werden: %m"
+
+#~ msgid "can't get position in PCH file: %m"
+#~ msgstr "Position in PCH-Datei kann nicht ermittelt werden: %m"
+
+#~ msgid "can't write padding to PCH file: %m"
+#~ msgstr "Auffüllung für PCH-Datei kann nicht geschrieben werden: %m"
+
+#~ msgid "can't read PCH file: %m"
+#~ msgstr "PCH-Datei kann nicht gelesen werden: %m"
+
+#~ msgid "had to relocate PCH"
+#~ msgstr "PCH musste verschoben werden"
+
+#~ msgid "open /dev/zero: %m"
+#~ msgstr "/dev/zero öffnen: %m"
+
+#~ msgid "can't write PCH file"
+#~ msgstr "PCH-Datei kann nicht geschrieben werden"
+
+#~ msgid "Generating PCH files is not supported when using ggc-simple.c"
+#~ msgstr "Das Erzeugen von PCH-Dateien wird bei Verwendung von ggc-simple.c nicht unterstützt"
+
+#~ msgid "%s cannot be used in asm here"
+#~ msgstr "%s kann nicht hier in »asm« verwendet werden"
+
+#~ msgid "can't open %s: %m"
+#~ msgstr "%s kann nicht geöffnet werden: %m"
+
+#~ msgid "fix_sched_param: unknown param: %s"
+#~ msgstr "fix_sched_param: unbekannter Parameter: %s"
+
+#~ msgid "function cannot be inline"
+#~ msgstr "Funktion kann nicht »inline« sein"
+
+#~ msgid "varargs function cannot be inline"
+#~ msgstr "Varargs-Funktion kann nicht »inline« sein"
+
+#~ msgid "function using alloca cannot be inline"
+#~ msgstr "alloca benutzende Funktion kann nicht »inline« sein"
+
+#~ msgid "function using longjmp cannot be inline"
+#~ msgstr "longjmp benutzende Funktion kann nicht »inline« sein"
+
+#~ msgid "function using setjmp cannot be inline"
+#~ msgstr "setjmp benutzende Funktion kann nicht »inline« sein"
+
+#~ msgid "function uses __builtin_eh_return"
+#~ msgstr "Funktion verwendet __builtin_eh_return"
+
+#~ msgid "function with nested functions cannot be inline"
+#~ msgstr "Funktion mit geschachtelten Funktionen kann nicht »inline« sein"
+
+#~ msgid "function with label addresses used in initializers cannot inline"
+#~ msgstr "Funktion mit Markenadressen in Initialisierungen kann nicht »inline« sein"
+
+#~ msgid "function too large to be inline"
+#~ msgstr "Funktion zu groß um »inline« sein zu können"
+
+#~ msgid "no prototype, and parameter address used; cannot be inline"
+#~ msgstr "kein Prototyp, und Parameteradresse verwendet; kann nicht »inline« sein"
+
+#~ msgid "inline functions not supported for this return value type"
+#~ msgstr "»inline«-Funktionen für diesen Rückgabetyp nicht unterstützt"
+
+#~ msgid "function with varying-size return value cannot be inline"
+#~ msgstr "Funktion mit Rückgabetyp variabler Größe kann nicht »inline« sein"
+
+#~ msgid "function with varying-size parameter cannot be inline"
+#~ msgstr "Funktion mit Parameter variabler Größe kann nicht »inline« sein"
+
+#~ msgid "function with transparent unit parameter cannot be inline"
+#~ msgstr "Funktion mit transparentem Einheiten-Parameter kann nicht »inline« sein"
+
+#~ msgid "function with computed jump cannot inline"
+#~ msgstr "Funktion mit berechnetem Sprung kann nicht »inline« sein"
+
+#~ msgid "function with nonlocal goto cannot be inline"
+#~ msgstr "Funktion mit nichtlokalem Goto kann nicht »inline« sein"
+
+#~ msgid "function with target specific attribute(s) cannot be inlined"
+#~ msgstr "Funktion mit zielspezifischen Attributen kann nicht »inline« sein"
+
+#~ msgid "%Hwill never be executed"
+#~ msgstr "%Hwird niemals ausgeführt"
+
+#~ msgid "This switch lacks documentation"
+#~ msgstr "Dieser Schalter ist undokumentiert"
+
+#~ msgid "command line option \"%s\" is valid for %s but not for %s"
+#~ msgstr "Kommandozeilenoption \"%s\" ist gültig für %s, aber nicht für %s"
+
+#~ msgid "missing argument to \"%s\""
+#~ msgstr "fehlendes Argument für »%s«"
+
+#~ msgid "argument to \"%s\" should be a non-negative integer"
+#~ msgstr "Argument von »%s« sollte eine nicht-negative Ganzzahl sein"
+
+#~ msgid "unrecognized command line option \"%s\""
+#~ msgstr "nicht erkannte Kommandozeilenoption »%s«"
+
+#~ msgid "-Wuninitialized is not supported without -O"
+#~ msgstr "-Wuninitialized wird nicht ohne -O unterstützt"
+
+#~ msgid "unrecognized register name \"%s\""
+#~ msgstr "unbekannter Registername: \"%s\""
+
+#~ msgid "unknown tls-model \"%s\""
+#~ msgstr "unbekanntes tls-Modell »%s«"
+
+#~ msgid "-fwritable-strings is deprecated; see documentation for details"
+#~ msgstr "-fwritable-strings veraltet, schauen Sie in die Dokumentation für Details"
+
+#~ msgid "%s: --param arguments should be of the form NAME=VALUE"
+#~ msgstr "%s: »--param«-Argumente sollten von der Form NAME=VALUE sein"
+
+#~ msgid "invalid --param value `%s'"
+#~ msgstr "ungültiger Wert für --param: »%s«"
+
+#~ msgid "target system does not support debug output"
+#~ msgstr "Zielsystem unterstützt nicht Testausgaben"
+
+#~ msgid "debug format \"%s\" conflicts with prior selection"
+#~ msgstr "Testformat »%s« steht in Konflikt mit vorheriger Auswahl"
+
+#~ msgid "unrecognised debug output level \"%s\""
+#~ msgstr "Testausgabestufe »%s« nicht erkannt"
+
+#~ msgid "debug output level %s is too high"
+#~ msgstr "Testausgabestufe »%s« ist zu groß"
+
+#~ msgid "The following options are language-independent:\n"
+#~ msgstr "Die folgenden Optionen sind sprach-unabhängig:\n"
+
+#~ msgid ""
+#~ "The %s front end recognizes the following options:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Das %s-Frontend erkennt die folgenden Optionen:\n"
+#~ "\n"
+
+#~ msgid "The --param option recognizes the following as parameters:\n"
+#~ msgstr "Die Option »--param« erkennt die folgenden Parameter:\n"
+
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "ungültiger Parameter »%s«"
+
+#~ msgid "corrupted profile info: run_max * runs < sum_max"
+#~ msgstr "beschädigte Profilinformation: run_max * runs < sum_max"
+
+#~ msgid "corrupted profile info: sum_all is smaller than sum_max"
+#~ msgstr "beschädigte Profilinformation: sum_all ist kleiner als sum_max"
+
+#~ msgid "corrupted profile info: edge from %i to %i exceeds maximal count"
+#~ msgstr "Info zum beschädigten Profil: Kante von %i nach %i überschreitet Höchstzahl"
+
+#~ msgid "corrupted profile info: number of iterations for basic block %d thought to be %i"
+#~ msgstr "Info zum beschädigten Profil: Anzahl der Durchläufe des Basisblocks %d sollte %i sein"
+
+#~ msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i"
+#~ msgstr "Info zum beschädigten Profil: Anzahl der Ausführungen der Kante »%d-%d« sollte %i sein"
+
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s: interner Abbruch\n"
+
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s: Fehler beim Schreiben der Datei »%s«: %s\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s: Aufruf '%s [ -VqfnkN ] [ -i <istring> ] [ Dateiname ... ]'\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s: Aufruf '%s [ -VqfnkNlgC ] [ -B <VerzName> ] [ Dateiname ... ]'\n"
+
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s: Warnung: kein Leserecht für Datei »%s«\n"
+
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s: Warnung: kein Schreibrecht für Datei »%s«\n"
+
+#~ msgid "%s: warning: no write access for dir containing `%s'\n"
+#~ msgstr "%s: Warnung: kein Schreibrecht für Verzeichnis von »%s«\n"
+
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s: ungültiger Dateiname: %s\n"
+
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s: %s: kann Status nicht ermitteln: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: fatal error: aux info file corrupted at line %d\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: kritischer Fehler: Datei mit Hilfsinformationen beschädigt in Zeile %d\n"
+
+#~ msgid "%s:%d: declaration of function `%s' takes different forms\n"
+#~ msgstr "%s:%d: Deklaration der Funktion »%s« nimmt verschiedene Formen an\n"
+
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: »%s« wird kompiliert\n"
+
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s: warten: %s\n"
+
+#~ msgid "%s: subprocess got fatal signal %d\n"
+#~ msgstr "%s: Subprozess empfing kritischen Fehler %d\n"
+
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s: %s beendet mit Status %d\n"
+
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s: Warnung: SYSCALLS-Datei »%s« fehlt\n"
+
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s: Datei mit Hilfsinformationen »%s« kann nicht gelesen werden: %s\n"
+
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "%s: Status der Datei mit Hilfsinformationen »%s« kann nicht ermittelt werden: %s\n"
+
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "%s: Datei mit Hilfsinformationen »%s« kann nicht zum Lesen geöffnet werden: %s\n"
+
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s: Fehler beim Lesen der Datei mit Hilfsinformationen »%s«: %s\n"
+
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s: Fehler beim Schließen der Datei mit Hilfsinformationen »%s«: %s\n"
+
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s: Fehler beim Löschen der Datei mit Hilfsinformationen »%s«: %s\n"
+
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: Fehler beim Löschen der Datei »%s«: %s\n"
+
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s: Warnung: Fehler beim Umbenennen der Datei »%s« in »%s«: %s\n"
+
+#~ msgid "%s: conflicting extern definitions of '%s'\n"
+#~ msgstr "%s: externe Definitionen von »%s« stehen in Konflikt\n"
+
+#~ msgid "%s: declarations of '%s' will not be converted\n"
+#~ msgstr "%s: Deklarationen von »%s« werden nicht konvertiert\n"
+
+#~ msgid "%s: conflict list for '%s' follows:\n"
+#~ msgstr "%s: Konfliktliste für »%s« folgt:\n"
+
+#~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+#~ msgstr "%s: Warnung: Formalliste von %s(%d) für Funktion »%s« verwendet\n"
+
+#~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+#~ msgstr "%s: %d: »%s« verwendet, fehlt jedoch in SYSCALLS\n"
+
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: %d: Warnung: keine externe Definition für »%s«\n"
+
+#~ msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+#~ msgstr "%s: Warnung: keine statische Definition für »%s« in Datei »%s«\n"
+
+#~ msgid "%s: multiple static defs of `%s' in file `%s'\n"
+#~ msgstr "%s: mehrere statische Definitionen von »%s« in Datei »%s«\n"
+
+#~ msgid "%s: %d: warning: source too confusing\n"
+#~ msgstr "%s: %d: Warnung: Quelle zu verworren\n"
+
+#~ msgid "%s: %d: warning: varargs function declaration not converted\n"
+#~ msgstr "%s: %d: Warnung: Funktionsdeklaration mit variablen Argumenten nicht konvertiert\n"
+
+#~ msgid "%s: declaration of function `%s' not converted\n"
+#~ msgstr "%s: Deklaration der Funktion »%s« nicht konvertiert\n"
+
+#~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+#~ msgstr "%s: Warnung: zu viele Parameterlisten in Deklaration von »%s«\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: Warnung: zu wenige Parameterlisten in Deklaration von »%s«\n"
+
+#~ msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+#~ msgstr "%s: %d: Warnung: »%s« gefunden, aber »%s« erwartet\n"
+
+#~ msgid "%s: local declaration for function `%s' not inserted\n"
+#~ msgstr "%s: lokale Deklaration für Funktion »%s« nicht eingefügt\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %d: warning: can't add declaration of `%s' into macro call\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %d: Warnung: kann Deklaration von »%s« nicht zu Makro-Aufruf hinzufügen\n"
+
+#~ msgid "%s: global declarations for file `%s' not inserted\n"
+#~ msgstr "%s: globale Deklarationen für Datei »%s« wurden nicht eingefügt\n"
+
+#~ msgid "%s: definition of function `%s' not converted\n"
+#~ msgstr "%s: Definition der Funktion »%s« nicht konvertiert\n"
+
+#~ msgid "%s: %d: warning: definition of %s not converted\n"
+#~ msgstr "%s: %d: Warnung: Definition von %s nicht konvertiert\n"
+
+#~ msgid "%s: found definition of `%s' at %s(%d)\n"
+#~ msgstr "%s: Definition von »%s« an Stelle %s(%d) gefunden\n"
+
+#~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+#~ msgstr "%s: %d: Warnung: »%s« durch Präprozessor ausgeschlossen\n"
+
+#~ msgid "%s: function definition not converted\n"
+#~ msgstr "%s: Funktionsdefinition nicht konvertiert\n"
+
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s: »%s« nicht konvertiert\n"
+
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s: würde Datei »%s« konvertieren\n"
+
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "%s: Datei »%s« wird konvertiert\n"
+
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "%s: Status der Datei »%s« kann nicht ermittelt werden: %s\n"
+
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: Datei »%s« kann nicht zum Schreiben geöffnet werden: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: Fehler beim Lesen der Eingabedatei »%s«: %s\n"
+
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s: die leere Datei »%s« kann nicht erzeugt oder geöffnet werden: %s\n"
+
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s: Warnung: Datei »%s« bereits in »%s« gesichert\n"
+
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s: die Datei »%s« kann nicht mit »%s« verbunden werden (Link): %s\n"
+
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "%s: die Ausgabedatei »%s« kann nicht erzeugt oder geöffnet werden: %s\n"
+
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: Rechte der Datei »%s« können nicht geändert werden: %s\n"
+
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s: aktuelles Verzeichnis kann nicht ermittelt werden: %s\n"
+
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: Namen der Eingabedateien müssen Suffix ».c« haben: %s\n"
+
+#~ msgid "Didn't find a coloring.\n"
+#~ msgstr "Färbung konnte nicht gefunden werden.\n"
+
+#~ msgid "output constraint %d must specify a single register"
+#~ msgstr "Ausgabebedingung %d muss ein einzelnes Register angeben"
+
+#~ msgid "output constraint %d cannot be specified together with \"%s\" clobber"
+#~ msgstr "Ausgabebedingung %d kann nicht zusammen mit »%s« angegeben werden"
+
+#~ msgid "output regs must be grouped at top of stack"
+#~ msgstr "Ausgaberegister müssen oben auf dem Stack gruppiert werden"
+
+#~ msgid "implicitly popped regs must be grouped at top of stack"
+#~ msgstr "implizit geholte (»pop«) Register müssen oben auf dem Stack gruppiert werden"
+
+#~ msgid "output operand %d must use `&' constraint"
+#~ msgstr "Ausgabeoperand %d muss »&«-Bedingung benutzen"
+
+#~ msgid "can't use '%s' as a %s register"
+#~ msgstr "»%s« kann nicht als ein %s-Register verwendet werden"
+
+#~ msgid "unknown register name: %s"
+#~ msgstr "unbekannter Registername: %s"
+
+#~ msgid "global register variable follows a function definition"
+#~ msgstr "globale Registervariable folgt einer Funktionsdefinition"
+
+#~ msgid "register used for two global register variables"
+#~ msgstr "Register für zwei globale Registervariablen verwendet"
+
+#~ msgid "call-clobbered register used for global register variable"
+#~ msgstr "für Ruf vorgesehenes Register wurde für globale Registervariable verwendet"
+
+#~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
+#~ msgstr "validate_value_data: [%u] Falsches next_regno für leere Kette (%u)"
+
+#~ msgid "validate_value_data: Loop in regno chain (%u)"
+#~ msgstr "validate_value_data: Zyklus in regno-Kette (%u)"
+
+#~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
+#~ msgstr "validate_value_data: [%u] Falsches oldest_regno (%u)"
+
+#~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
+#~ msgstr "validate_value_data: [%u] Nicht leeres Register in Kette (%s %u %i)"
+
+#~ msgid "cannot reload integer constant operand in `asm'"
+#~ msgstr "Ganzzahlkonstantenoperand kann in »asm« nicht neu geladen werden"
+
+#~ msgid "impossible register constraint in `asm'"
+#~ msgstr "unmögliche Registerbedingung in »asm«"
+
+#~ msgid "`&' constraint used with no register class"
+#~ msgstr "»&«-Bedingung ohne Registerklasse verwendet"
+
+#~ msgid "unable to generate reloads for:"
+#~ msgstr "Neuladungen konnten nicht generiert werden für:"
+
+#~ msgid "inconsistent operand constraints in an `asm'"
+#~ msgstr "inkonsistente Operandenbedingungen in einem »asm«"
+
+#~ msgid "frame size too large for reliable stack checking"
+#~ msgstr "Rahmengröße zu groß für zuverlässige Kellerüberprüfung"
+
+#~ msgid "try reducing the number of local variables"
+#~ msgstr "versuchen Sie, die Anzahl der lokalen Variablen zu verringern"
+
+#~ msgid "can't find a register in class `%s' while reloading `asm'"
+#~ msgstr "in der Klasse »%s« konnte während des Neuladens von »asm« kein Register gefunden werden"
+
+#~ msgid "unable to find a register to spill in class `%s'"
+#~ msgstr "in Klasse »%s« konnte kein Register für Überlauf gefunden werden"
+
+#~ msgid "this is the insn:"
+#~ msgstr "dies ist das insn:"
+
+#~ msgid "`asm' operand requires impossible reload"
+#~ msgstr "»asm«-Operand erfordert unmögliches Neuladen"
+
+#~ msgid "could not find a spill register"
+#~ msgstr "es konnte kein Überlaufregister gefunden werden"
+
+#~ msgid "`asm' operand constraint incompatible with operand size"
+#~ msgstr "»asm«-Operandenbedingung inkompatibel mit Operandengröße"
+
+#~ msgid "VOIDmode on an output"
+#~ msgstr "VOIDmode bei einer Ausgabe"
+
+#~ msgid "output operand is constant in `asm'"
+#~ msgstr "Ausgabeoperand ist in »asm« konstant"
+
+#~ msgid "unrecognizable insn:"
+#~ msgstr "unerkennbares insn:"
+
+#~ msgid "insn does not satisfy its constraints:"
+#~ msgstr "insn erfüllt nicht seine Bedingungen:"
+
+#~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Zugriff von Elt %d von »%s« mit letztem Elt %d in %s, bei %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Elt-%d-Typ %c erwartet, haben Typ %c (rtx %s) in %s, bei %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Elt-%d-Typ %c oder %c erwartet, haben Typ %c (rtx %s) in %s, bei %s:%d"
+
+#~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Code »%s« erwartet, haben »%s« in %s, bei %s:%d"
+
+#~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Code »%s« oder »%s« erwartet, haben »%s« in %s, bei %s:%d"
+
+#~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL-Überprüfung: Zugriff von Elt %d von Vektor mit letztem Elt %d in %s, bei %s:%d"
+
+#~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d"
+#~ msgstr "RTL-Kennzeichenüberprüfung: %s mit unerwartetem RTX-Code »%s« in %s bei %s:%d verwendet"
+
+#~ msgid "jump to `%s' invalidly jumps into binding contour"
+#~ msgstr "Sprung zu »%s« springt ungültig in bindenden Querschnitt"
+
+#~ msgid "%Jlabel '%D' used before containing binding contour"
+#~ msgstr "%JMarke »%D« verwendet vor enthaltendem bindenden Querschnitt"
+
+#~ msgid "output operand constraint lacks `='"
+#~ msgstr "Bedingung des Ausgabeoperanden erfordert »=«"
+
+#~ msgid "output constraint `%c' for operand %d is not at the beginning"
+#~ msgstr "Ausgabebedingung »%c« für Operand %d steht nicht am Anfang"
+
+#~ msgid "operand constraint contains incorrectly positioned '+' or '='"
+#~ msgstr "Operandenbedingung enthält falsch positioniertes »+« oder »=«"
+
+#~ msgid "`%%' constraint used with last operand"
+#~ msgstr "»%%«-Bedingung mit letztem Operanden verwendet"
+
+#~ msgid "matching constraint not valid in output operand"
+#~ msgstr "dazu passende Bedingung in Ausgabeoperanden ungültig"
+
+#~ msgid "read-write constraint does not allow a register"
+#~ msgstr "Schreib- und Lesebeschränkungen erlauben kein Register"
+
+#~ msgid "input operand constraint contains `%c'"
+#~ msgstr "Bedingung für Eingabeoperanden enthält »%c«"
+
+#~ msgid "matching constraint references invalid operand number"
+#~ msgstr "dazu passende Bedingung referenziert ungültige Operandennummer"
+
+#~ msgid "invalid punctuation `%c' in constraint"
+#~ msgstr "ungültiges Zeichen »%c« in Bedingung"
+
+#~ msgid "matching constraint does not allow a register"
+#~ msgstr "dazu passende Bedingung erlaubt kein Register"
+
+#~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list"
+#~ msgstr "asm-Spezifizierer für Variable »%s« steht in Konflikt mit asm-Konflikt-Liste"
+
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "unbekannter Registername »%s« in »asm«"
+
+#~ msgid "PIC register `%s' clobbered in `asm'"
+#~ msgstr "PIC-Register »%s« wird in »asm« zerstört"
+
+#~ msgid "more than %d operands in `asm'"
+#~ msgstr "mehr als %d Operanden in »asm«"
+
+#~ msgid "output number %d not directly addressable"
+#~ msgstr "Ausgabezahl %d nicht direkt adressierbar"
+
+#~ msgid "asm operand %d probably doesn't match constraints"
+#~ msgstr "asm-Operand %d passt wahrscheinlich nicht zu den Bedingungen"
+
+#~ msgid "use of memory input without lvalue in asm operand %d is deprecated"
+#~ msgstr "die Verwendung einer Speichereingabe ohne L-Wert in asm-Operand %d ist veraltet"
+
+#~ msgid "asm clobber conflict with output operand"
+#~ msgstr "asm-Konflikt mit Ausgabeoperand"
+
+#~ msgid "asm clobber conflict with input operand"
+#~ msgstr "asm-Konflikt mit Eingabeoperand"
+
+#~ msgid "too many alternatives in `asm'"
+#~ msgstr "zu viele Alternativen in »asm«"
+
+#~ msgid "operand constraints for `asm' differ in number of alternatives"
+#~ msgstr "Operandenbedingungen für »asm« unterscheiden sich in der Anzahl der Alternativen"
+
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "doppelter asm-Operandenname »%s«"
+
+#~ msgid "missing close brace for named operand"
+#~ msgstr "schließende geschweifte Klammer für benannten Operanden fehlt"
+
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "benannter Operand »%s« ist nicht definiert"
+
+#~ msgid "%Hstatement with no effect"
+#~ msgstr "%HAnweisung ohne Effekt"
+
+#~ msgid "%Hvalue computed is not used"
+#~ msgstr "%Hberechneter Wert ist unbenutzt"
+
+#~ msgid "%Junused variable '%D'"
+#~ msgstr "%JVariable »%D« wird nicht verwendet"
+
+#~ msgid "%Hunreachable code at beginning of %s"
+#~ msgstr "%Hunerreichbarer Code am Anfang von %s"
+
+#~ msgid "enumeration value `%s' not handled in switch"
+#~ msgstr "Aufzählungswert »%s« wird nicht von switch behandelt"
+
+#~ msgid "case value `%ld' not in enumerated type"
+#~ msgstr "case-Wert »%ld« nicht in Aufzählungstyp"
+
+#~ msgid "case value `%ld' not in enumerated type `%s'"
+#~ msgstr "case-Wert »%ld« nicht in Aufzählungstyp »%s«"
+
+#~ msgid "switch missing default case"
+#~ msgstr "die Standardfallbehandlung in switch fehlt"
+
+#~ msgid "type size can't be explicitly evaluated"
+#~ msgstr "die Typgröße kann nicht explizit ausgewertet werden"
+
+#~ msgid "variable-size type declared outside of any function"
+#~ msgstr "Typ mit variabler Größe wurde außerhalb einer Funktion definiert"
+
+#~ msgid "%Jsize of '%D' is %d bytes"
+#~ msgstr "%JGröße von »%Ds« ist %d Bytes"
+
+#~ msgid "%Jsize of '%D' is larger than %d bytes"
+#~ msgstr "%JGröße von »%D« übertrifft %d Bytes"
+
+#~ msgid "%Jpacked attribute causes inefficient alignment for '%D'"
+#~ msgstr "%Jgepacktes Attribut verursacht ineffiziente Ausrichtung für »%D«"
+
+#~ msgid "%Jpacked attribute is unnecessary for '%D'"
+#~ msgstr "%Jgepacktes Attribut ist unnötig für »%D«"
+
+#~ msgid "%Jpadding struct to align '%D'"
+#~ msgstr "%Jstruct wird aufgefüllt, um »%D« auszurichten"
+
+#~ msgid "padding struct size to alignment boundary"
+#~ msgstr "struct wird bis zur Ausrichtungsgrenze aufgefüllt"
+
+#~ msgid "packed attribute causes inefficient alignment for `%s'"
+#~ msgstr "gepacktes Attribut verursacht ineffiziente Ausrichtung für »%s«"
+
+#~ msgid "packed attribute is unnecessary for `%s'"
+#~ msgstr "gepacktes Attribut ist unnötig für »%s«"
+
+#~ msgid "packed attribute causes inefficient alignment"
+#~ msgstr "gepacktes Attribut führt zu ineffizienter Ausrichtung"
+
+#~ msgid "packed attribute is unnecessary"
+#~ msgstr "gepacktes Attribut ist unnötig"
+
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "__builtin_saveregs wird von diesem Ziel nicht unterstützt"
+
+#~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'"
+#~ msgstr "timevar_pop '%s' kann nicht ausgeführt werden, wenn am Anfang des timevars-Stacks '%s' steht"
+
+#~ msgid ""
+#~ "\n"
+#~ "Execution times (seconds)\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ausführungszeiten (Sekunden)\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " GESAMT                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "collect: reading %s\n"
+#~ msgstr "sammeln: %s lesen\n"
+
+#~ msgid "collect: recompiling %s\n"
+#~ msgstr "sammeln: %s neu kompilieren\n"
+
+#~ msgid "collect: tweaking %s in %s\n"
+#~ msgstr "sammeln: %s wird in %s eingestellt\n"
+
+#~ msgid "collect: relinking\n"
+#~ msgstr "sammeln: neu binden\n"
+
+#~ msgid "ld returned %d exit status"
+#~ msgstr "ld gab %d als Ende-Status zurück"
+
+#~ msgid "%s "
+#~ msgstr "%s "
+
+#~ msgid " %s"
+#~ msgstr " %s"
+
+#~ msgid "invalid option argument `%s'"
+#~ msgstr "ungültiges Optionsargument »%s«"
+
+#~ msgid "getting core file size maximum limit: %m"
+#~ msgstr "Kern-Dateigrößenlimit wird geholt: %m"
+
+#~ msgid "setting core file size limit to maximum: %m"
+#~ msgstr "Kern-Dateigrößenlimit wird gesetzt: %m"
+
+#~ msgid "%J'%F' used but never defined"
+#~ msgstr "%J»%F« verwendet, aber nirgendwo definiert"
+
+#~ msgid "%J'%F' declared `static' but never defined"
+#~ msgstr "%J»%F« als »static« deklariert, aber nirgendwo definiert"
+
+#~ msgid "%J'%D' defined but not used"
+#~ msgstr "%J»%D« definiert, aber nicht verwendet"
+
+#~ msgid "`%s' is deprecated (declared at %s:%d)"
+#~ msgstr "»%s« ist veraltet (deklariert bei %s:%d)"
+
+#~ msgid "`%s' is deprecated"
+#~ msgstr "»%s« ist veraltet"
+
+#~ msgid "type is deprecated (declared at %s:%d)"
+#~ msgstr "Typ ist veraltet (in %s:%d deklariert)"
+
+#~ msgid "type is deprecated"
+#~ msgstr "Typ ist veraltet"
+
+#~ msgid "invalid register name `%s' for register variable"
+#~ msgstr "ungültiger Registername »%s« für Registervariable"
+
+#~ msgid "branch target register load optimization is not intended to be run twice"
+#~ msgstr "Ladeoptimierung für Zweig-Zielregister ist nicht dafür vorgesehen, mehrfach zu laufen"
+
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zielspezifische Optionen:\n"
+
+#~ msgid "  -m%-23s [undocumented]\n"
+#~ msgstr "  -m%-23s [undokumentiert]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented target specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Es gibt auch undokumentierte zielspezifische Optionen.\n"
+
+#~ msgid "  They exist, but they are not documented.\n"
+#~ msgstr "  Es gibt sie, aber sie sind nicht dokumentiert.\n"
+
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "gcc-Debuggingoption nicht erkannt: %c"
+
+#~ msgid "invalid option `%s'"
+#~ msgstr "ungültige Option »%s«"
+
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr ""
+#~ "%s%s%s Version %s (%s)\n"
+#~ "%s\tkompiliert von GNU-C-Version %s.\n"
+#~ "%s%s%s Version %s (%s) kompiliert von CC.\n"
+
+#~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+#~ msgstr "%s%sGGC-Heuristik: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+
+#~ msgid "options passed: "
+#~ msgstr "angegebene Optionen: "
+
+#~ msgid "options enabled: "
+#~ msgstr "angeschaltete Optionen: "
+
+#~ msgid "can't open %s for writing: %m"
+#~ msgstr "Datei »%s« kann nicht zum Schreiben geöffnet werden: %m"
+
+#~ msgid "created and used with different settings of -fpic"
+#~ msgstr "erzeugt und mit anderen Einstellungen von -fpic verwendet"
+
+#~ msgid "created and used with different settings of -fpie"
+#~ msgstr "erzeugt und mit anderen Einstellungen von -fpie verwendet"
+
+#~ msgid "created and used with differing settings of `-m%s'"
+#~ msgstr "erzeugt und mit anderen Einstellungen von »-m%s« verwendet"
+
+#~ msgid "out of memory"
+#~ msgstr "Platz im Hauptspeicher reicht nicht aus"
+
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "Befehlsplanung wird von dieser Zielmaschine nicht unterstützt"
+
+#~ msgid "this target machine does not have delayed branches"
+#~ msgstr "diese Zielmaschine hat keine verzögerten Zweige"
+
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "-f%sleading-underscore wird auf dieser Zielmaschine nicht unterstützt"
+
+#~ msgid "target system does not support the \"%s\" debug format"
+#~ msgstr "Zielsystem unterstützt nicht das Testformat \"%s\""
+
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "-ffunction-sections wird für dieses Ziel nicht unterstützt"
+
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "-fdata-sections wird für dieses Ziel nicht unterstützt"
+
+#~ msgid "-ffunction-sections disabled; it makes profiling impossible"
+#~ msgstr "-ffunction-sections ausgeschaltet; das macht Profiling unmöglich"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "-fprefetch-loop-arrays wird für dieses Ziel nicht unterstützt"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)"
+#~ msgstr "-fprefetch-loop-arrays wird für dieses Ziel nicht unterstützt (versuchen Sie die »-march«-Schalter)"
+
+#~ msgid "-fprefetch-loop-arrays is not supported with -Os"
+#~ msgstr "-fprefetch-loop-arrays wird nicht mit -Os unterstützt"
+
+#~ msgid "-ffunction-sections may affect debugging on some targets"
+#~ msgstr "-ffunction-sections kann für verschiedene Ziele die Fehlersuche beeinträchtigen"
+
+#~ msgid "error writing to %s: %m"
+#~ msgstr "Fehler beim Schreiben der Datei %s: %m"
+
+#~ msgid "error closing %s: %m"
+#~ msgstr "Fehler beim Schließen von %s: %m"
+
+#~ msgid "could not open dump file `%s'"
+#~ msgstr "Abzugsdatei »%s« konnte nicht geöffnet werden"
+
+#~ msgid "ignoring unknown option `%.*s' in `-fdump-%s'"
+#~ msgstr "unbekannte Option »%.*s« in »-fdump-%s« wird ignoriert"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses alloca (override using the always_inline attribute)"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie alloca verwendet (zum Aufheben: Attribut »always_inline« verwenden)"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie setjmp verwendet"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses variable argument lists"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie eine variable Argumentliste verwendet"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp-longjmp exception handling"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie »setjmp-longjmp«-Ausnahmebehandlung verwendet"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a nested function"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie eine geschachtelte Funktion enthält"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a computed goto"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie ein berechnetes »goto« enthält"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a nonlocal goto"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie ein nichtlokales »goto« enthält"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses variable sized variables"
+#~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie Variablen variabler Größe verwendet"
+
+#~ msgid "%Jinlining failed in call to '%F': %s"
+#~ msgstr "%J»inline« beim Aufruf von »%F« gescheitert: %s"
+
+#~ msgid "%Jsize of return value of '%D' is %u bytes"
+#~ msgstr "%JGröße des Rückgabewertes von »%D« ist %u Bytes"
+
+#~ msgid "%Jsize of return value of '%D' is larger than %wd bytes"
+#~ msgstr "%JGröße des Rückgabewertes von »%D« ist größer als %wd Bytes"
+
+#~ msgid "arrays of functions are not meaningful"
+#~ msgstr "Felder von Funktionen sind sinnlos"
+
+#~ msgid "function return type cannot be function"
+#~ msgstr "Rückgabetyp der Funktion kann keine Funktion sein"
+
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "ungültige Initialisierung für Bitstring"
+
+#~ msgid "tree check: expected %s, have %s in %s, at %s:%d"
+#~ msgstr "Baumprüfung: %s erwartet, haben %s in %s, bei %s:%d"
+
+#~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
+#~ msgstr "Baumprüfung: Klasse %c erwartet, haben '%c' (%s) in %s, bei %s:%d"
+
+#~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
+#~ msgstr "Baumprüfung: auf Elt %d von tree_vec mit %d Elts in %s bei %s:%d zugegriffen"
+
+#~ msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
+#~ msgstr "Baumprüfung: auf Operand %d von %s mit %d Operanden in %s bei %s:%d zugegriffen"
+
+#~ msgid "%J%D causes a section type conflict"
+#~ msgstr "%J%D löst einen Abschnittstypkonflikt aus"
+
+#~ msgid "%Jregister name not specified for '%D'"
+#~ msgstr "%Jfür »%D« wurde kein Registername angegeben"
+
+#~ msgid "%Jinvalid register name for '%D'"
+#~ msgstr "%Jungültiger Registername für »%D«"
+
+#~ msgid "%Jdata type of '%D' isn't suitable for a register"
+#~ msgstr "%JDatentyp von »%D« eignet sich nicht für Register"
+
+#~ msgid "%Jregister specified for '%D' isn't suitable for data type"
+#~ msgstr "%Jfür »%D« angegebenes Register eignet sich nicht für Datentyp"
+
+#~ msgid "global register variable has initial value"
+#~ msgstr "globle Registervariable hat Anfangswert"
+
+#~ msgid "volatile register variables don't work as you might wish"
+#~ msgstr "»volatile«-Registervariablen funktionieren oft nicht so wie erhofft"
+
+#~ msgid "%Jregister name given for non-register variable '%D'"
+#~ msgstr "%JRegistername für Nicht-Registervariable »%D« verwendet"
+
+#~ msgid "%Jstorage size of `%D' isn't known"
+#~ msgstr "%JSpeichergröße von »%D« ist unbekannt"
+
+#~ msgid "%Jalignment of '%D' is greater than maximum object file alignment.  Using %d"
+#~ msgstr "%JAusrichtung von »%D ist größer als maximale Objektdateiausrichtung. %d verwendet«"
+
+#~ msgid "thread-local COMMON data not implemented"
+#~ msgstr "Thread-lokale COMMON-Daten nicht implementiert"
+
+#~ msgid "%Jrequested alignment for '%D' is greater than implemented alignment of %d"
+#~ msgstr "%Jangeforderte Ausrichtung für »%D« ist größer als die implementierte Ausrichtung von %d"
+
+#~ msgid "initializer for integer value is too complicated"
+#~ msgstr "Initialisierung für Ganzzahlwert ist zu kompliziert"
+
+#~ msgid "initializer for floating value is not a floating constant"
+#~ msgstr "Initialisierung für Gleitkommawert ist keine Gleitkommakonstante"
+
+#~ msgid "unknown set constructor type"
+#~ msgstr "unbekannter Mengenkonstruktortyp"
+
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "ungültiger Anfangswert für Element »%s«"
+
+#~ msgid "%Jweak declaration of '%D' must precede definition"
+#~ msgstr "%Jschwache Deklaration von »%D« muss der Definition vorangehen"
+
+#~ msgid "%Jweak declaration of '%D' after first use results in unspecified behavior"
+#~ msgstr "%Jschwache Deklaration von »%D« nach erster Benutzung führt zu undefiniertem Verhalten"
+
+#~ msgid "%Jweak declaration of '%D' must be public"
+#~ msgstr "%Jschwache Deklaration von »%D« muss öffentlich sein"
+
+#~ msgid "%Jweak declaration of '%D' not supported"
+#~ msgstr "%Jschwache Deklaration von »%D« wird nicht unterstützt"
+
+#~ msgid "only weak aliases are supported in this configuration"
+#~ msgstr "in dieser Konfiguration werden nur schwache Aliase unterstützt"
+
+#~ msgid "alias definitions not supported in this configuration; ignored"
+#~ msgstr "Alias-Definitionen werden in dieser Konfiguration nicht unterstützt; ignoriert"
+
+#~ msgid "visibility attribute not supported in this configuration; ignored"
+#~ msgstr "Sichtbarkeitsattribute werden in dieser Konfiguration nicht unterstützt; ignoriert"
+
+#~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
+#~ msgstr "virtuelles Feld %s[%lu]: Element %lu außerhalb der Grenzen in %s, bei %s:%d"
+
+#~ msgid "underflowed virtual array %s in %s, at %s:%d"
+#~ msgstr "Unterlauf im virtuellen Feld %s in %s bei %s:%d"
+
+#~ msgid "no sclass for %s stab (0x%x)\n"
+#~ msgstr "kein »sclass« für %s Stab (0x%x)\n"
+
+#~ msgid "fatal error: "
+#~ msgstr "schwerwiegender Fehler: "
+
+#~ msgid "internal compiler error: "
+#~ msgstr "interner Compiler-Fehler: "
+
+#~ msgid "sorry, unimplemented: "
+#~ msgstr "nicht implementiert: "
+
+#~ msgid "anachronism: "
+#~ msgstr "Anachronismus: "
+
+#~ msgid "note: "
+#~ msgstr "Anmerkung: "
+
+#~ msgid "debug: "
+#~ msgstr "zur Fehlersuche: "
+
+#~ msgid "The maximum number of instructions in a single function eligible for inlining"
+#~ msgstr "Die Höchstzahl der Anweisungen in einer einzelnen für »inline« geeigneten Funktion"
+
+#~ msgid "The maximum number of instructions when automatically inlining"
+#~ msgstr "Die Höchstzahl der Anweisungen für automatisches »inline«"
+
+#~ msgid "The maximum number of instructions for the RTL inliner"
+#~ msgstr "Die Höchstzahl der Anweisungen für RTL »inline«"
+
+#~ msgid "The maximum number of instructions to consider to fill a delay slot"
+#~ msgstr "Die Höchstzahl der zu betrachtenden Anweisungen um Verzögerungsschlitz zu füllen"
+
+#~ msgid "The maximum number of instructions to consider to find accurate live register information"
+#~ msgstr "Die Höchstzahl der zu betrachtenden Anweisungen um richtige aktive Registerinformationen zu finden"
+
+#~ msgid "The maximum length of scheduling's pending operations list"
+#~ msgstr "Die Maximallänge der Liste der anhängigen geplanten Operationen"
+
+#~ msgid "The size of function body to be considered large"
+#~ msgstr "Die Größe eines als groß angesehenen Funktionskörpers"
+
+#~ msgid "Maximal growth due to inlining of large function (in percent)"
+#~ msgstr "Maximales Wachstum durch »inline« einer großen Funktion (in Prozent)"
+
+#~ msgid "how much can given compilation unit grow because of the inlining (in percent)"
+#~ msgstr "um wie viel eine Übersetzungseinheit durch »inline« wachsen kann (in Prozent)"
+
+#~ msgid "The maximum amount of memory to be allocated by GCSE"
+#~ msgstr "Maximalbetrag des von GCSE zu belegenden Speichers"
+
+#~ msgid "The maximum number of passes to make when doing GCSE"
+#~ msgstr "Die Höchstzahl der Durchläufe für GCSE"
+
+#~ msgid "The maximum number of instructions to consider to unroll in a loop"
+#~ msgstr "Die Höchstzahl der zum Aufrollen von Schleifen zu betrachtenden Anweisungen"
+
+#~ msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#~ msgstr "Die Höchstzahl der zum Aufrollen von Schleifen im Mittel zu betrachtenden Anweisungen"
+
+#~ msgid "The maximum number of unrollings of a single loop"
+#~ msgstr "Die Höchstzahl der Iterationen zum Aufrollen in einzelner Schleife"
+
+#~ msgid "The maximum number of insns of a peeled loop"
+#~ msgstr "Die Höchstzahl der insns einer geschälten Schleife"
+
+#~ msgid "The maximum number of peelings of a single loop"
+#~ msgstr "Die Höchstzahl der Schälvorgänge einer einzelnen Schleife"
+
+#~ msgid "The maximum number of insns of a completely peeled loop"
+#~ msgstr "Die Höchstzahl der insns einer vollständig geschälten Schleife"
+
+#~ msgid "The maximum number of peelings of a single loop that is peeled completely"
+#~ msgstr "Die Höchstzahl der Schälvorgänge einer einzelnen Schleife, die vollständig geschält wird"
+
+#~ msgid "The maximum number of insns of a peeled loop that rolls only once"
+#~ msgstr "Die Höchstzahl der insns einer geschälten Schleife, die nur einmal rollt"
+
+#~ msgid "`%s' incompatible attribute ignored"
+#~ msgstr "»%s«-inkompatibles Attribut wird ignoriert"
+
+#~ msgid "%Jfunction `%D' definition is marked dllimport."
+#~ msgstr "%JFunktionsdefinition von »%D« ist als »dllimport« markiert"
+
+#~ msgid "%Jinline function '%D' is declared as dllimport: attribute ignored."
+#~ msgstr "%J»inline«-Funktion »%D« ist als »dllimport« deklariert: Attribute ignoriert."
+
+#~ msgid "ms-bitfields not supported for objc"
+#~ msgstr "ms-Bitfelder nicht unterstützt für objc"
+
+#~ msgid "%Jan address area attribute cannot be specified for local variables"
+#~ msgstr "%Jfür lokale Variablen kann kein Adressabschnittsattribut angegeben werden"
+
+#~ msgid "%Jaddress area of '%s' conflicts with previous declaration"
+#~ msgstr "%JAdressabschnitt von »%s« in Konflikt mit vorheriger Deklaration"
+
+#~ msgid "%Jaddress area attribute cannot be specified for functions"
+#~ msgstr "%JAdressabschnittsattribut kann nicht für Funktionen angegeben werden"
+
+#~ msgid "The compiler does not support -march=%s."
+#~ msgstr "Der Compiler unterstützt nicht -march=%s."
+
+#~ msgid "argument `%d' is not a constant"
+#~ msgstr "Argument »%d« ist keine Konstante"
+
+#~ msgid "`trap' attribute is already used"
+#~ msgstr "»trap«-Attribut wird bereits verwendet"
+
+#~ msgid "cannot specify both -msep-data and -mid-shared-library"
+#~ msgstr "-msep-data und -mid-shared-library können nicht zusammen angegeben werden"
+
+#~ msgid "Generate code for a 68040, without any new instructions"
+#~ msgstr "Code für einen 68040 ohne neue Befehle erzeugen"
+
+#~ msgid "Generate code for a 68060, without any new instructions"
+#~ msgstr "Code für einen 68060 ohne neue Befehle erzeugen"
+
+#~ msgid "Generate code for a 68030"
+#~ msgstr "Code für einen 68030 erzeugen"
+
+#~ msgid "Generate code for a 68040"
+#~ msgstr "Code für einen 68040 erzeugen"
+
+#~ msgid "Generate code for a 68060"
+#~ msgstr "Code für einen 68060 erzeugen"
+
+#~ msgid "Generate code for a 520X"
+#~ msgstr "Code für einen 520X erzeugen"
+
+#~ msgid "Generate code for a 5206e"
+#~ msgstr "Code für einen 5206e erzeugen"
+
+#~ msgid "Generate code for a 528x"
+#~ msgstr "Code für einen 528x erzeugen"
+
+#~ msgid "Generate code for a 5307"
+#~ msgstr "Code für einen 5307 erzeugen"
+
+#~ msgid "Generate code for a 5407"
+#~ msgstr "Code für einen 5407 erzeugen"
+
+#~ msgid "Generate code for a 68851"
+#~ msgstr "Code für einen 68851 erzeugen"
+
+#~ msgid "Do no generate code for a 68851"
+#~ msgstr "Code für einen 68851 erzeugen"
+
+#~ msgid "Generate code for a 68302"
+#~ msgstr "Code für einen 68302 erzeugen"
+
+#~ msgid "Generate code for a 68332"
+#~ msgstr "Code für einen 68332 erzeugen"
+
+#~ msgid "Generate code for a cpu32"
+#~ msgstr "Code für eine cpu32 erzeugen"
+
+#~ msgid "can't rewind temp file: %m"
+#~ msgstr "temporäre Datei konnte nicht zurückgesetzt werden: %m"
+
+#~ msgid "can't write to output file: %m"
+#~ msgstr "in die Ausgabedatei kann nicht geschrieben werden: %m"
+
+#~ msgid "can't read from temp file: %m"
+#~ msgstr "von der temporären Datei kann nicht gelesen werden: %m"
+
+#~ msgid "can't close temp file: %m"
+#~ msgstr "die temporäre Datei kann nicht geschlossen werden: %m"
+
+#~ msgid "-fpic is not supported; -fPIC assumed"
+#~ msgstr "-fpic wird nicht unterstützt; -fPIC angenommen"
+
+#~ msgid "-m%s not supported in this configuration"
+#~ msgstr "-m%s wird in dieser Konfiguration nicht unterstützt"
+
+#~ msgid "%Jdata area attributes cannot be specified for local variables"
+#~ msgstr "%JDatenabschnittsattribute können nicht für lokale Variablen angegeben werden"
+
+#~ msgid "%Jdata area of '%D' conflicts with previous declaration"
+#~ msgstr "%JDatenabschnitt von »%D« in Konflikt mit vorheriger Deklaration"
+
+#~ msgid "invalid %%x value"
+#~ msgstr "ungültiger %%x-Wert"
+
+#~ msgid "invalid %%d value"
+#~ msgstr "ungültiger %%x-Wert"
+
+#~ msgid "invalid %%t/%%b value"
+#~ msgstr "ungültiger %%t/%%b-Wert"
+
+#~ msgid "missing argument to \"-%s\""
+#~ msgstr "fehlendes Argument für »-%s«"
+
+#~ msgid "%s for '%s' in '%s %E'"
+#~ msgstr "%s vor »%s« in »%s %E«"
+
+#~ msgid "no suitable `operator %s' for `%T'"
+#~ msgstr "kein geeigneter »operator %s« für »%T«"
+
+#~ msgid "cannot bind bitfield `%E' to `%T'"
+#~ msgstr "das Bitfeld »%E« kann nicht mit »%T« verbunden werden"
+
+#~ msgid "cannot bind packed field `%E' to `%T'"
+#~ msgstr "das gepackte Feld »%E« kann nicht mit »%T« verbunden werden"
+
+#~ msgid "cannot bind rvalue `%E' to `%T'"
+#~ msgstr "der R-Wert »%E« kann nicht mit »%T« verbunden werden"
+
+#~ msgid "%s has no effect"
+#~ msgstr "%s hat keinen Effekt"
+
+#~ msgid "%Jfunction '%D' redeclared as inline"
+#~ msgstr "%JFunktion »%D« als inline redeklariert"
+
+#~ msgid "%Jprevious declaration of '%D' with attribute noinline"
+#~ msgstr "%Jvorherige Deklaration von »%D« mit Attribut noinline"
+
+#~ msgid "%Jfunction '%D' redeclared with attribute noinline"
+#~ msgstr "%JFunktion »%D« redeklariert mit Attribut noinline"
+
+#~ msgid "%Jprevious declaration of '%D' was inline"
+#~ msgstr "%Jvorherige Deklaration von »%D« war inline"
+
+#~ msgid "conflicting declaration '%#D'"
+#~ msgstr "in Konflikt stehende Deklaration »%#D«"
+
+#~ msgid "'%D' has a previous declaration as `%#D'"
+#~ msgstr "»%D« hat eine vorherige Deklaration als »%#Ds«"
+
+#~ msgid "%Jfollows non-prototype definition here"
+#~ msgstr "%Jfolgt Nicht-Prototyp-Definition hier"
+
+#~ msgid "%Jprevious non-inline declaration here"
+#~ msgstr "%Jvorherige nicht-inline-Deklaration hier"
+
+#~ msgid "%Jconflicts with previous declaration here"
+#~ msgstr "%Jin Konflikt mit vorheriger Deklaration hier"
+
+#~ msgid "%H  from here"
+#~ msgstr "%H  von hier"
+
+#~ msgid "too many initializers for `%T'"
+#~ msgstr "zu viele Initialisierer für »%T«"
+
+#~ msgid "size of array `%D' has non-integral type `%T'"
+#~ msgstr "Feldgröße von »%D« hat Nicht-Ganzzahltyp »%T«"
+
+#~ msgid "size of array has non-integral type `%T'"
+#~ msgstr "Feldgröße hat Nicht-Ganzzahltyp »%T«"
+
+#~ msgid "declaration of `%D' as %s"
+#~ msgstr "Deklaration von »%D« als %s"
+
+#~ msgid "creating %s"
+#~ msgstr "Erzeugen von %s"
+
+#~ msgid "top-level declaration of `%s' specifies `auto'"
+#~ msgstr "Deklaration höchster Ebene von »%s« spezifiziert »auto«"
+
+#~ msgid "%Jinvalid type qualifier for non-member function type"
+#~ msgstr "%Jungültiger Typkennzeichner für Nicht-Element-Funktionstyp"
+
+#~ msgid "%Jprevious definition here"
+#~ msgstr "%Jvorherige Definition hier"
+
+#~ msgid "invalid member function declaration"
+#~ msgstr "ungültige Elementfunktionsdeklaration"
+
+#~ msgid "anonymous union with no members"
+#~ msgstr "anonymes union ohne Element"
+
+#~ msgid "inline function `%D' used but never defined"
+#~ msgstr "inline-Funktion »%D«, aber nirgendwo definiert"
+
+#~ msgid "  when initialized here"
+#~ msgstr "  während es hier initialisiert wurde"
+
+#~ msgid "`%#D' is not a non-static data member of `%T'"
+#~ msgstr "»%#D« ist kein Nicht-static-Datenelement von »%T«"
+
+#~ msgid "invalid use of non-static member function `%D'"
+#~ msgstr "ungültige Verwendung der Nicht-static-Elementfunktion »%D«"
+
+#~ msgid "invalid use of non-static data member `%D'"
+#~ msgstr "ungültige Verwendung des Nicht-static-Datenelementes »%D«"
+
+#~ msgid "type mismatch with previous external decl of `%#D'"
+#~ msgstr "Typen passen nicht zu vorheriger externer Deklaration von »%#D«"
+
+#~ msgid "%s %s %p %d\n"
+#~ msgstr "%s %s %p %d\n"
+
+#~ msgid "`%D' attribute directive ignored"
+#~ msgstr "Attribut-Anweisung »%D« wird ignoriert"
+
+#~ msgid "invalid token"
+#~ msgstr "ungültiges Token"
+
+#~ msgid "`%D::%D' has not been declared"
+#~ msgstr "»%D::%D« wurde nicht deklariert"
+
+#~ msgid "`::%D' has not been declared"
+#~ msgstr "»::%D« wurde nicht deklariert"
+
+#~ msgid "`%D' has not been declared"
+#~ msgstr "»%D« wurde nicht deklariert"
+
+#~ msgid "`%D' %s"
+#~ msgstr "»%D« %s"
+
+#~ msgid "invalid template-id"
+#~ msgstr "ungültige Template-ID"
+
+#~ msgid "%s cannot appear in a constant-expression"
+#~ msgstr "%s kann nicht in einem Konstanten-Ausdruck auftreten"
+
+#~ msgid "`%s' does not name a type"
+#~ msgstr "»%s« bezeichnet keinen Typ"
+
+#~ msgid "statement-expressions are allowed only inside functions"
+#~ msgstr "Anweisungs-Ausdrücke sind nur innerhalb von Funktionen erlaubt"
+
+#~ msgid "ISO C++ forbids compound-literals"
+#~ msgstr "ISO-C++ verbietet zusammengesetzte Literale"
+
+#~ msgid "duplicate `friend'"
+#~ msgstr "doppeltes »friend«"
+
+#~ msgid "attributes are not allowed on a function-definition"
+#~ msgstr "bei einer Funktionsdefinition sind keine Attribute erlaubt"
+
+#~ msgid "attributes after parenthesized initializer ignored"
+#~ msgstr "Attribute hinter geklammerter Initialisierung werden ignoriert"
+
+#~ msgid "friend declaration does not name a class or function"
+#~ msgstr "»friend«-Deklaration benennt keine Klasse oder Funktion"
+
+#~ msgid "invalid function declaration"
+#~ msgstr "ungültige Funktionsdeklaration"
+
+#~ msgid "named return values are no longer supported"
+#~ msgstr "benannte Rückgabewerte werden nicht mehr unterstützt"
+
+#~ msgid "%D redeclared with different access"
+#~ msgstr "%D mit anderem Zugriff redeklariert"
+
+#~ msgid "destructor `%D' declared as member template"
+#~ msgstr "Destruktor »%D« als Element-Template deklariert"
+
+#~ msgid "%J  original definition appeared here"
+#~ msgstr "%J  ursprüngliche Definition trat hier auf"
+
+#~ msgid "`%T' uses anonymous type"
+#~ msgstr "»%T« verwendet anonymen Typen"
+
+#~ msgid "`%T' uses local type `%T'"
+#~ msgstr "»%T« verwendet lokalen Typen »%T«"
+
+#~ msgid "integral expression `%E' is not constant"
+#~ msgstr "Integralausdruck »%E« ist nicht konstant"
+
+#~ msgid "object missing in reference to `%D'"
+#~ msgstr "Objekt fehlt in Referenz auf »%D«"
+
+#~ msgid "`%D' is not a member of `%D'"
+#~ msgstr "»%D« ist kein Element von »%D«"
+
+#~ msgid "`%D' cannot appear in a constant-expression"
+#~ msgstr "»%D« kann nicht in Konstanten-Ausdruck auftreten"
+
+#~ msgid "%s between distinct pointer-to-member types `%T' and `%T' lacks a cast"
+#~ msgstr "%s zwischen verschiedenen Zeiger-auf-Element-Typen »%T« und »%T« fehlt eine Typkonvertierung"
+
+#~ msgid "invalid application of `%s' to a bit-field"
+#~ msgstr "ungültige Anwendung von »%s« auf ein Bitfeld"
+
+#~ msgid "ISO C++ forbids applying `%s' to an expression of function type"
+#~ msgstr "ISO-C++ verbietet Anwendung von »%s« auf einen Ausdruck mit Funktionstyp"
+
+#~ msgid "invalid use of non-static member function"
+#~ msgstr "falsche Benutzung einer nicht-statischen Elementfunktion"
+
+#~ msgid "invalid use of nonstatic data member '%E'"
+#~ msgstr "ungültige Benutzung des nicht-statischen Datenelements »%E«"
+
+#~ msgid "parameter %P of `%D' has incomplete type `%T'"
+#~ msgstr "Parameter %P von »%D« hat unvollständigen Typen »%T«"
+
+#~ msgid "parameter %P has incomplete type `%T'"
+#~ msgstr "Parameter %P hat unvollständigen Typen »%T«"
+
+#~ msgid "%s expression list treated as compound expression"
+#~ msgstr "%s Ausdrucksliste als zusammengesetzten Ausdruck behandelt"
+
+#~ msgid "pointer to member cast via virtual base `%T'"
+#~ msgstr "Typumwandlung von Zeiger in Element über virtuelle Basis »%T«"
+
+#~ msgid "pointer to member conversion via virtual base `%T'"
+#~ msgstr "Konvertierung von Zeiger in Element über virtuelle Basis »%T«"
+
+#~ msgid "return-statement with no value, in function returning '%T'"
+#~ msgstr "Return-Anweisung ohne Wert, in »%T« zurückgebender Funktion"
+
+#~ msgid "return-statement with a value, in function returning 'void'"
+#~ msgstr "Return-Anweisung mit Wert in »void« zurückgebender Funktion"
+
+#~ msgid "Please keep this in mind before you report bugs."
+#~ msgstr "Bitte bedenken Sie dies, wenn Sie einen Fehlerbericht einsenden."
+
+#~ msgid "%Jfinal field '%D' may not have been initialized"
+#~ msgstr "%Jletztes Feld »%D« könnte nicht initialisiert worden sein"
+
+#~ msgid "%J'%D' used prior to declaration"
+#~ msgstr "%J»%D« bereits vor Deklaration benutzt"
+
+#~ msgid "declaration of `%s' shadows a parameter"
+#~ msgstr "Deklaration von »%s« überdeckt einen Parameter"
+
+#~ msgid "declaration of `%s' shadows a symbol from the parameter list"
+#~ msgstr "Deklaration von »%s« überdeckt ein Symbol aus der Parameterliste"
+
+#~ msgid "%Jlabel '%D' used but not defined"
+#~ msgstr "%JMarke »%D« verwendet, aber nicht definiert"
+
+#~ msgid "%Jlabel '%D' defined but not used"
+#~ msgstr "%JMarke »%D« definiert, aber nicht verwendet"
+
+#~ msgid "can't reopen %s: %m"
+#~ msgstr "Es ist nicht möglich, »%s« erneut zu öffnen: %m"
+
+#~ msgid "can't close %s: %m"
+#~ msgstr "Es ist nicht möglich, »%s« zu schließen: %m"
+
+#~ msgid "can't close input file %s: %m"
+#~ msgstr "die Eingabedatei »%s« kann nicht geschlossen werden: %m"
+
+#~ msgid "can't create directory %s: %m"
+#~ msgstr "das Verzeichnis %s kann nicht erzeugt werden: %m"
+
+#~ msgid "can't create %s: %m"
+#~ msgstr "Es ist nicht möglich, %s zu erzeugen: %m"
+
+#~ msgid "`%s' is not a valid class name"
+#~ msgstr "»%s« ist kein gültiger Klassenname"
+
+#~ msgid "--resource requires -o"
+#~ msgstr "--resource erfordert -o"
+
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "-C und -o können nicht zusammen angegeben werden"
+
+#~ msgid "cannot create temporary file"
+#~ msgstr "temporäre Datei konnte nicht angelegt werden"
+
+#~ msgid "interface `%s' does not have valid constant string layout"
+#~ msgstr "die Schnittstelle »%s« hat nicht die Form einer konstanten Zeichenkette"
+
+#~ msgid "`%s' is not an Objective-C class name or alias"
+#~ msgstr "»%s« ist kein Klassenname oder Alias in Objective-C"
+
+#~ msgid "`%s' redeclared as different kind of symbol"
+#~ msgstr "»%s« redeklariert als andere Symbolart"
+
+#~ msgid "%J%s `%s'"
+#~ msgstr "%J%s: »%s«"
+
+#~ msgid "multiple %s named `%c%s' found"
+#~ msgstr "mehrere %s namens »%c%s« gefunden"
+
+#~ msgid "no super class declared in @interface for `%s'"
+#~ msgstr "keine Superklasse im @interface für »%s« deklariert"
+
+#~ msgid "`%s' may not respond to `%c%s'"
+#~ msgstr "»%s« antwortet möglicherweise nicht auf »%c%s«"
+
+#~ msgid "`%c%s' not implemented by protocol(s)"
+#~ msgstr "»%c%s« nicht von Protokoll(en) implementiert"
+
+#~ msgid "`...' as arguments.)"
+#~ msgstr "»...« als Argumente.)"
+
+#~ msgid "duplicate declaration of method `%c%s'"
+#~ msgstr "doppelte Deklaration der Methode »%c%s«"
+
+#~ msgid "illegal reference type specified for instance variable `%s'"
+#~ msgstr "unzulässiger Referenztyp für Instanzvariable »%s« angegeben"
+
+#~ msgid "instance variable `%s' has unknown size"
+#~ msgstr "Instanzvariable »%s« hat unbekannte Größe"
+
+#~ msgid "type `%s' has virtual member functions"
+#~ msgstr "der Typ »%s« hat virtuelle Elementfunktionen"
+
+#~ msgid "illegal aggregate type `%s' specified for instance variable `%s'"
+#~ msgstr "unzulässiger Aggregattyp »%s« für Instanzvariable »%s« angegeben"
+
+#~ msgid "%s `%s' does not fully implement the `%s' protocol"
+#~ msgstr "%s »%s« implementiert das »%s«-Protokoll nicht vollständig"
+
+#~ msgid "previous declaration of `%s'"
+#~ msgstr "vorherige Deklaration von »%s«"
+
+#~ msgid "Display this information"
+#~ msgstr "Diese Informationen anzeigen"
+
+#~ msgid "Do not discard comments"
+#~ msgstr "Kommentare nicht verwerfen"
+
+#~ msgid "Warn about subscripts whose type is \"char\""
+#~ msgstr "Vor Indizes mit Typ \"char\" warnen"
+
+#~ msgid "Make implicit function declarations an error"
+#~ msgstr "Fehler bei impliziten Funktionsdeklaration erzeugen"
+
+#~ msgid "Warn if passing too many arguments to a function for its format string"
+#~ msgstr "Bei zu vielen Argumenten für eine Funktion (anhand Formatzeichenkette) warnen"
+
+#~ msgid "Warn about suspicious declarations of \"main\""
+#~ msgstr "Vor verdächtigen Deklarationen von \"main\" warnen"
+
+#~ msgid "Warn about global functions without previous declarations"
+#~ msgstr "Vor globalen Funktionen ohne vorherige Deklaration warnen"
+
+#~ msgid "Warn about functions which might be candidates for __attribute__((noreturn))"
+#~ msgstr "Vor Funktionen, die Kandidaten für __attribute__((noreturn)) sind, warnen"
+
+#~ msgid "Warn about use of multi-character character constants"
+#~ msgstr "Bei Verwendung von Zeichenkonstanten mit mehreren Zeichen warnen"
+
+#~ msgid "Warn about \"extern\" declarations not at file scope"
+#~ msgstr "Vor \"extern\"-Deklarationen außerhalb des Dateisichtbarkeitsbereiches warnen"
+
+#~ msgid "Warn about code which might break strict aliasing rules"
+#~ msgstr "Vor Code warnen, der strict-aliasing-Regeln verletzen könnte"
+
+#~ msgid "Warn about unprototyped function declarations"
+#~ msgstr "Vor Funktionsdeklarationen ohne Prototyp warnen"
+
+#~ msgid "Warn about features not present in traditional C"
+#~ msgstr "Vor Sprachmerkmalen, die in traditionellem C nicht verfügbar sind, warnen"
+
+#~ msgid "Recognize built-in functions"
+#~ msgstr "Eingebaute Funktionen erkennen"
+
+#~ msgid "Preserve case used in program"
+#~ msgstr "Im Programm verwendete Groß-/Kleinschreibung beibehalten"
+
+#~ msgid "Inline member functions by default"
+#~ msgstr "Standardmäßig »inline«-Elementfunktionen"
+
+#~ msgid "Permit '$' as an identifier character"
+#~ msgstr "'$' als Bezeichnerzeichen zulassen"
+
+#~ msgid "Generate code to check exception specifications"
+#~ msgstr "Code zur Überprüfung von Exception-Spezifikationen erzeugen"
+
+#~ msgid "Place each function into its own section"
+#~ msgstr "Jede Funktion in ihren eigenen Abschnitt platzieren"
+
+#~ msgid "Generate code for GNU runtime environment"
+#~ msgstr "Code für die GNU-Laufzeitumgebung erzeugen"
+
+#~ msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
+#~ msgstr "Code für die NeXT (Apple Mac OS X) Laufzeitumgebung erzeugen"
+
+#~ msgid "Convert floating point constants to single precision constants"
+#~ msgstr "Fließkommakonstanten in Konstanten einfacher Genauigkeit konvertieren"
+
+#~ msgid "Print internal debugging-related information"
+#~ msgstr "Interne Testinformationen ausgeben"
+
+#~ msgid "Dump declarations to a .decl file"
+#~ msgstr "Deklaration in .decl-Datei ausgeben"
+
+#~ msgid "-o <file>\tPlace output into <file>"
+#~ msgstr "-o <Datei>\tAusgabe in <Datei> schreiben"
+
+#~ msgid "Generate C header of platform-specific features"
+#~ msgstr "C-Header mit Plattform-spezifischen Merkmalen erzeugen"
+
+#~ msgid "Remap file names when including files"
+#~ msgstr "Dateinamen beim Einfügen von Dateien neu abbilden"
+
+#~ msgid "GCC does not support -C or -CC without -E"
+#~ msgstr "GCC unterstützt nicht -C oder -CC ohne -E"
+
+#~ msgid "-pipe is not supported"
+#~ msgstr "-pipe wird nicht unterstützt"
+
+#~ msgid "-keep_private_externs not allowed with -dynamiclib"
+#~ msgstr "-keep_private_externs ist mit -dynamiclib nicht erlaubt"
+
+#~ msgid "-private_bundle not allowed with -dynamiclib"
+#~ msgstr "-private_bundle ist mit -dynamiclib nicht erlaubt"
+
+#~ msgid "-pg not supported on this platform"
+#~ msgstr "-pg wird auf dieser Plattform nicht unterstützt"
+
+#~ msgid "GCC does not support -C without using -E"
+#~ msgstr "GCC unterstützt nicht -C ohne -E"
+
+#~ msgid "GCC does not support -CC without using -E"
+#~ msgstr "GCC unterstützt nicht -CC ohne -E"
+
+#~ msgid "`-p' not supported; use `-pg' and gprof(1)"
+#~ msgstr "»-p« wird nicht unterstützt; verwenden Sie »-pg« und gprof(1)"
+
+#~ msgid "may not use both -m32 and -m64"
+#~ msgstr "-m32 und -m64 können nicht zusammen angegeben werden"
+
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "Profiling wird mit -mg nicht unterstützt\n"
+
+#~ msgid "does not support multilib"
+#~ msgstr "unterstützt nicht multilib"
+
+#~ msgid "concatenation of string literals with __FUNCTION__ is deprecated"
+#~ msgstr "Verkettung von Zeichenkettenliteralen mit __FUNCTION__ ist veraltet"
+
+#~ msgid "ISO C++ forbids range expressions in switch statements"
+#~ msgstr "ISO-C++ verbietet Wertebereichsausdrücke in switch-Anweisungen"
+
+#~ msgid "ISO C++ forbids taking the address of a label"
+#~ msgstr "ISO-C++ verbietet die Adresse einer Marke"
+
+#~ msgid "declaration of `%s' shadows %s"
+#~ msgstr "Deklaration von »%s« verdeckt %s"
+
+#~ msgid "`struct %s' incomplete in scope ending here"
+#~ msgstr "»struct %s« im Gültigkeitsbereich, der hier endet, unvollständig"
+
+#~ msgid "`union %s' incomplete in scope ending here"
+#~ msgstr "»union %s« im Gültigkeitsbereich, der hier endet, unvollständig"
+
+#~ msgid "`enum %s' incomplete in scope ending here"
+#~ msgstr "»enum %s« im Gültigkeitsbereich, der hier endet, unvollständig"
+
+#~ msgid "shadowing library function `%s'"
+#~ msgstr "Bibliotheksfunktion »%s« überdeckt"
+
+#~ msgid "library function `%s' declared as non-function"
+#~ msgstr "Bibliotheksfunktion »%s« als Nicht-Funktion deklariert"
+
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "Redeklaration von »%s«"
+
+#~ msgid "prototype for `%s' follows and number of arguments doesn't match"
+#~ msgstr "Prototyp für »%s« folgt und Anzahl der Argumente passt nicht"
+
+#~ msgid "prototype for `%s' follows and argument %d doesn't match"
+#~ msgstr "Prototyp für »%s« folgt und Argument %d passt nicht"
+
+#~ msgid "type qualifiers for `%s' conflict with previous decl"
+#~ msgstr "Typ-Kennzeichner für »%s« stehen in Konflikt mit vorheriger Deklaration"
+
+#~ msgid "a parameter"
+#~ msgstr "ein Parameter"
+
+#~ msgid "a previous local"
+#~ msgstr "ein vorheriges »local«"
+
+#~ msgid "a global declaration"
+#~ msgstr "eine globale Deklaration"
+
+#~ msgid "`%s' was declared implicitly `extern' and later `static'"
+#~ msgstr "»%s« wurde implizit als »extern« und später als »static« deklariert"
+
+#~ msgid "previous external decl of `%s'"
+#~ msgstr "vorherige externe Deklaration von »%s«"
+
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "Typen passen nicht zu vorheriger impliziter Deklaration"
+
+#~ msgid "`%s' was previously implicitly declared to return `int'"
+#~ msgstr "»%s« wurde bereits implizit deklariert, »int« zurückzugeben"
+
+#~ msgid "`%s' was declared `extern' and later `static'"
+#~ msgstr "»%s« wurde »extern« deklariert und später »static«"
+
+#~ msgid "`%s' locally external but globally static"
+#~ msgstr "»%s« ist lokal extern, aber global »static«"
+
+#~ msgid "function `%s' was previously declared within a block"
+#~ msgstr "Funktion »%s« wurde bereits innerhalb eines Blockes deklariert"
+
+#~ msgid "declaration of `%s' has `extern' and is initialized"
+#~ msgstr "Deklaration von »%s« hat »extern« und ist initialisiert"
+
+#~ msgid "ISO C forbids parameter `%s' shadowing typedef"
+#~ msgstr "ISO-C verbietet typedef verdeckenden Parameter »%s«"
+
+#~ msgid "parameter `%s' points to incomplete type"
+#~ msgstr "Parameter »%s« zeigt auf unvollständigen Typen"
+
+#~ msgid "parameter points to incomplete type"
+#~ msgstr "Parameter zeigt auf unvollständigen Typen"
+
+#~ msgid "`void' in parameter list must be the entire list"
+#~ msgstr "»void« in Parameterliste muss die gesamte Liste sein"
+
+#~ msgid "`union %s' declared inside parameter list"
+#~ msgstr "»union %s« innerhalb Parameterliste deklariert"
+
+#~ msgid "`enum %s' declared inside parameter list"
+#~ msgstr "»enum %s« innerhalb Parameterliste deklariert"
+
+#~ msgid "anonymous enum declared inside parameter list"
+#~ msgstr "anonymes »enum« innerhalb Parameterliste deklariert"
+
+#~ msgid "bit-field `%s' type invalid in ISO C"
+#~ msgstr "Typ des Bitfeldes »%s« ist ungültig in ISO-C"
+
+#~ msgid "parm types given both in parmlist and separately"
+#~ msgstr "Parametertypen sowohl in Parameterliste als auch separat angegeben"
+
+#~ msgid "universal-character-name '\\u%04x' not valid in identifier"
+#~ msgstr "universeller Zeichenname »\\u%04x« nicht gültig in Bezeichner"
+
+#~ msgid "ignoring invalid multibyte character"
+#~ msgstr "ungültiges Multibyte-Zeichen wird ignoriert"
+
+#~ msgid "options array incorrectly sorted: %s is before %s"
+#~ msgstr "Optionenliste falsch sortiert: %s kommt vor %s"
+
+#~ msgid "-Wno-strict-prototypes is not supported in C++"
+#~ msgstr "-Wno-strict-prototypes wird in C++ nicht unterstützt"
+
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ msgstr ""
+#~ "Optionen:\n"
+#~ "  -include <Datei>          Inhalt von <Datei> vor anderen Dateien einfügen\n"
+#~ "  -imacros <Datei>          die Definition von Makros in <Datei> akzeptieren\n"
+#~ "  -iprefix <Pfad>           <Pfad> als Präfix für die nächsten beiden Optionen\n"
+#~ "                            angeben\n"
+#~ "  -iwithprefix <Verz>       <Verz> zum Ende des System-Einfüge-Pfades\n"
+#~ "                            hinzufügen\n"
+#~ "  -iwithprefixbefore <Verz> <Verz> zum das Ende des Haupt-Einfüge-Pfades\n"
+#~ "                            hinzufügen\n"
+#~ "  -isystem <Verz>           <Verz> zum Anfang des System-Einfüge-Pfades\n"
+#~ "                            hinzufügen\n"
+
+#~ msgid ""
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ msgstr ""
+#~ "  -idirafter <Verz>         <Verz> zum Ende des System-Einfüge-Pfades\n"
+#~ "                             hinzufügen\n"
+#~ "  -I <Verz>                 <Verz> zum Anfang des Haupt-Einfüge-Pfades\n"
+#~ "                             hinzufügen\n"
+#~ "  -I-                       Feineinstellung des Einfügepfades; siehe info-\n"
+#~ "                             Seiten\n"
+#~ "  -nostdinc                 keine System-Einfüge-Verzeichnisse durchsuchen\n"
+#~ "                             (-isystem Verzeichnisse werden aber verwendet)\n"
+#~ "  -nostdinc++               keine System-Einfüge-Verzeichnisse nach C++\n"
+#~ "                             durchsuchen\n"
+#~ "  -o <Datei>                Ausgabe in <Datei> leiten\n"
+
+#~ msgid ""
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -W[no-]trigraphs          Warn if trigraphs are encountered\n"
+#~ "  -W[no-]comment{s}         Warn if one comment starts inside another\n"
+#~ msgstr ""
+#~ "  -trigraphs                ISO-C-»Trigraphs« unterstützen\n"
+#~ "  -std=<Name>               Standardkonformität angeben; eines von:\n"
+#~ "                             gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                             iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Warnungen unterdrücken\n"
+#~ "  -W[no-]trigraphs          Warnungen bei »Trigraphs«\n"
+#~ "  -W[no-]comment{s}         Warnungen bei geschachtelten Kommentaren\n"
+
+#~ msgid ""
+#~ "  -W[no-]traditional        Warn about features not present in traditional C\n"
+#~ "  -W[no-]undef              Warn if an undefined macro is used by #if\n"
+#~ "  -W[no-]import             Warn about the use of the #import directive\n"
+#~ msgstr ""
+#~ "  -W[no-]traditional        Warnungen bei Merkmalen von traditionellem C\n"
+#~ "  -W[no-]undef              Warnungen bei Verwendung undefinierter Makros\n"
+#~ "                             mit #if\n"
+#~ "  -W[no-]import             Warnungen über die Verwendung der Direktive\n"
+#~ "                             #import\n"
+
+#~ msgid ""
+#~ "  -W[no-]error              Treat all warnings as errors\n"
+#~ "  -W[no-]system-headers     Do not suppress warnings from system headers\n"
+#~ "  -W[no-]all                Enable most preprocessor warnings\n"
+#~ msgstr ""
+#~ "  -W[no-]error              alle Warnungen als Fehler behandeln\n"
+#~ "  -W[no-]system-headers     keine Warnungen von System-Headern unterdrücken\n"
+#~ "  -W[no-]all                die meisten Präprozessorwarnungen einschalten\n"
+
+#~ msgid ""
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       Generate make dependencies and compile\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MF <file>                Write dependency output to the given file\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ msgstr ""
+#~ "  -M                        make-Abhängigkeiten generieren\n"
+#~ "  -MM                       wie -M, aber System-Header ignorieren\n"
+#~ "  -MD                       make-Abhängigkeiten generieren und kompilieren\n"
+#~ "  -MMD                      wie -MD, aber System-Header ignorieren\n"
+#~ "  -MF <Datei>               Abhängigkeiten-Ausgabe in die angegebene Datei\n"
+#~ "                             schreiben\n"
+#~ "  -MG                       fehlende Header-Dateien als generierte Dateien\n"
+#~ "                             behandeln\n"
+
+#~ msgid ""
+#~ "  -MP\t\t\t    Generate phony targets for all headers\n"
+#~ "  -MQ <target>              Add a MAKE-quoted target\n"
+#~ "  -MT <target>              Add an unquoted target\n"
+#~ msgstr ""
+#~ "  -MP\t\t\t    Generiere falsche (phony) Ziele für Header\n"
+#~ "  -MQ <Ziel>                MAKE-zitiertes Ziel hinzufügen\n"
+#~ "  -MT <Ziel>                ein unzitiertes Ziel hinzufügen\n"
+
+#~ msgid ""
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question>=<answer>     Assert the <answer> to <question>\n"
+#~ "  -A-<question>=<answer>    Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ msgstr ""
+#~ "  -D<Makro>                 <Makro> mit Wert \"1\" definieren\n"
+#~ "  -D<Makro>=<Wert>          <Makro> mit Wert <Wert> definieren\n"
+#~ "  -A<Frage>=<Antwort>       die <Antwort> auf <Frage> annehmen\n"
+#~ "  -A-<Frage>=<Antwort>      die <Antwort> auf <Frage> abschalten\n"
+#~ "  -U<Makro>                 <Makro> löschen\n"
+#~ "  -v                        Version anzeigen\n"
+
+#~ msgid ""
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ msgstr ""
+#~ "  -H                        Namen von Header-Dateien anzeigen wenn sie\n"
+#~ "                             verwendet werden\n"
+#~ "  -C                        Kommentare nicht streichen\n"
+#~ "  -dM                       am Ende eine Liste von Makrodefinitionen anzeigen\n"
+#~ "  -dD                       Makrodefinitionen in der Ausgabe bewahren\n"
+#~ "  -dN                       wie -dD nur dass die Namen bewahrt werden\n"
+#~ "  -dI                       #include-Anweisungen in die Ausgabe einfügen\n"
+
+#~ msgid ""
+#~ "  -f[no-]preprocessed       Treat the input file as already preprocessed\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -remap                    Remap file names when including files\n"
+#~ "  --help                    Display this information\n"
+#~ msgstr ""
+#~ "  -f[no-]preprocessed       Eingabedatei als bereits vorverarbeitet behandeln\n"
+#~ "  -ftabstop=<Zahl>          Tabulatorenabstand für Spaltenmeldungen\n"
+#~ "  -P                        keine #line-Direktiven generieren\n"
+#~ "  -remap                    Dateinamen beim Einfügen neu abbilden\n"
+#~ "  --help                    diese Information anzeigen\n"
+
+#~ msgid "parse error"
+#~ msgstr "Fehler beim Parsen"
+
+#~ msgid "ISO C forbids the address of a cast expression"
+#~ msgstr "ISO-C verbietet die Adresse eines cast-Ausdruckes"
+
+#~ msgid "initializer for static variable is not constant"
+#~ msgstr "Initialisierer für statische Variable ist nicht konstant"
+
+#~ msgid "initializer for static variable uses complicated arithmetic"
+#~ msgstr "Initialisierer für statische Variable verwendet komplizierte Arithmetik"
+
+#~ msgid "aggregate initializer is not constant"
+#~ msgstr "Gesamt-Initialisierer ist nicht konstant"
+
+#~ msgid "aggregate initializer uses complicated arithmetic"
+#~ msgstr "Gesamt-Initialisierer verwendet komplizierte Arithmetik"
+
+#~ msgid "open %s"
+#~ msgstr "öffne %s"
+
+#~ msgid "incompatibilities between object file & expected values"
+#~ msgstr "Inkompatibilitäten zwischen Objektdatei und erwarteten Werten"
+
+#~ msgid ""
+#~ "\n"
+#~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Verarbeite Symboltabelle #%d, Versatz = 0x%.8lx, Art = %s\n"
+
+#~ msgid "string section missing"
+#~ msgstr "Zeichenkettenabschnitt fehlt"
+
+#~ msgid "section pointer missing"
+#~ msgstr "Abschnittszeiger fehlt"
+
+#~ msgid "no symbol table found"
+#~ msgstr "keine Symboltabelle gefunden"
+
+#~ msgid ""
+#~ "\n"
+#~ "Updating header and load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aktualisiere Kopf und lokale Befehle.\n"
+#~ "\n"
+
+#~ msgid "load command map, %d cmds, new size %ld.\n"
+#~ msgstr "lade Befehlstabelle, %d Befehle, neue Größe: %ld.\n"
+
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "schreibe Ladebefehle.\n"
+#~ "\n"
+
+#~ msgid "close %s"
+#~ msgstr "schließe %s"
+
+#~ msgid "could not convert 0x%l.8x into a region"
+#~ msgstr "konnte 0x%l.8x nicht in eine Region konvertieren"
+
+#~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+#~ msgstr "Funktion %s, Region %d, Versatz = %ld (0x%.8lx)\n"
+
+#~ msgid "bad magic number"
+#~ msgstr "falsche magische Zahl"
+
+#~ msgid "bad header version"
+#~ msgstr "falsche Kopf-Version"
+
+#~ msgid "bad raw header version"
+#~ msgstr "falsche Version des Original-Kopfes"
+
+#~ msgid "raw header buffer too small"
+#~ msgstr "Original-Kopf-Puffer zu klein"
+
+#~ msgid "old raw header file"
+#~ msgstr "alte Original-Kopf-Datei"
+
+#~ msgid "unsupported version"
+#~ msgstr "nicht unterstützte Version"
+
+#~ msgid "unknown {de,en}code_mach_o_hdr return value %d"
+#~ msgstr "unbekannter Rückgabewert %d für {de,en}code_mach_o_hdr"
+
+#~ msgid "fstat %s"
+#~ msgstr "fstat %s"
+
+#~ msgid "lseek %s 0"
+#~ msgstr "lseek %s 0"
+
+#~ msgid "read %s"
+#~ msgstr "Lese %s"
+
+#~ msgid "read %ld bytes, expected %ld, from %s"
+#~ msgstr "%ld Bytes gelesen, %ld erwartet, von %s"
+
+#~ msgid "msync %s"
+#~ msgstr "msync %s"
+
+#~ msgid "munmap %s"
+#~ msgstr "munmap %s"
+
+#~ msgid "write %s"
+#~ msgstr "schreibe %s"
+
+#~ msgid "wrote %ld bytes, expected %ld, to %s"
+#~ msgstr "%ld Bytes geschrieben, %ld erwartet, nach %s"
+
+#~ msgid "ISO C++ does not permit \"%s\" in #if"
+#~ msgstr "ISO-C++ lässt nicht »%s« in #if zu"
+
+#~ msgid "invalid character '%c' in #if"
+#~ msgstr "ungültiges Zeichen '%c' in #if"
+
+#~ msgid "invalid character '\\%03o' in #if"
+#~ msgstr "ungültiges Zeichen '\\%03o' in #if"
+
+#~ msgid "absolute file name in remap_filename"
+#~ msgstr "absoluter Dateiname in remap_filename"
+
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s: Kein Verzeichnis"
+
+#~ msgid "directory name missing after %s"
+#~ msgstr "Verzeichnisname fehlt hinter %s"
+
+#~ msgid "file name missing after %s"
+#~ msgstr "Dateiname fehlt hinter %s"
+
+#~ msgid "path name missing after %s"
+#~ msgstr "Pfadname fehlt hinter %s"
+
+#~ msgid "unknown string token %s\n"
+#~ msgstr "Unbekanntes Zeichenketten-Token %s\n"
+
+#~ msgid "non-hex digit '%c' in universal-character-name"
+#~ msgstr "Nicht-Hex-Ziffer '%c' in Universal-Zeichen-Name"
+
+#~ msgid "universal-character-name on EBCDIC target"
+#~ msgstr "Universal-Zeichen-Name auf EBCDIC Ziel"
+
+#~ msgid "universal-character-name out of range"
+#~ msgstr "Universal-Zeichen-Name außerhalb des Wertebereiches"
+
+#~ msgid "escape sequence out of range for its type"
+#~ msgstr "Fluchtsequenz außerhalb des Wertebereiches seines Typs"
+
+#~ msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+#~ msgstr "#import ist veraltet, benutzen Sie einen #ifndef-Wrapper in der Header-Datei"
+
+#~ msgid "#pragma once is obsolete"
+#~ msgstr "#pragma once ist veraltet"
+
+#~ msgid "%s: warnings being treated as errors\n"
+#~ msgstr "%s: Warnungen als Fehler behandelt\n"
+
+#~ msgid "At top level:"
+#~ msgstr "Auf höchster Ebene:"
+
+#~ msgid "In function `%s':"
+#~ msgstr "In Funktion »%s«:"
+
+#~ msgid ""
+#~ "Please submit a full bug report,\n"
+#~ "with preprocessed source if appropriate.\n"
+#~ "See %s for instructions.\n"
+#~ msgstr ""
+#~ "Bitte senden Sie einen vollständigen Fehlerbericht auf Englisch ein;\n"
+#~ "bearbeiten Sie die Quellen zunächst mit einem Präprozessor, wenn es\n"
+#~ "dienlich ist.\n"
+#~ "Fehler in der deutschen Übersetzung sind an de@li.org zu melden.\n"
+#~ "\n"
+#~ "Gehen Sie gemäß den Hinweisen in %s vor.\n"
+
+#~ msgid "In file included from %s:%d"
+#~ msgstr "In von %s:%d eingefügter Datei"
+
+#~ msgid ""
+#~ ",\n"
+#~ "                 from %s:%d"
+#~ msgstr ""
+#~ ",\n"
+#~ "                 von %s:%d"
+
+#~ msgid "internal regno botch: `%s' has regno = %d\n"
+#~ msgstr "interner RegNr-Fehler: »%s« hat RegNr = %d\n"
+
+#~ msgid "support for the DWARF1 debugging format is deprecated"
+#~ msgstr "Unterstützung für das DWARF1-Debugging-Format ist veraltet"
+
+#~ msgid "unsupported wide integer operation"
+#~ msgstr "breite Ganzzahloperation nicht unterstützt"
+
+#~ msgid "mismatched braces in specs"
+#~ msgstr "unpassende geschweifte Klammern in Spezifikation"
+
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2001 Free Software Foundation, Inc.\n"
+
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "Konnte einfache Blockdatei %s nicht öffnen.\n"
+
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "Konnte Programmflussgraphdatei %s nicht öffnen.\n"
+
+#~ msgid "Could not open data file %s.\n"
+#~ msgstr "Konnte Datei %s nicht öffnen.\n"
+
+#~ msgid "Assuming that all execution counts are zero.\n"
+#~ msgstr "Angenommen, dass alle Ausführungszähler null sind.\n"
+
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "Kein ausführbarer Code mit Datei %s verbunden.\n"
+
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "nicht alle bb-Einträge des Graphen wurden benutzt, Funktion %s\n"
+
+#~ msgid "block_num = %ld, num_blocks = %d\n"
+#~ msgstr "block_num = %ld, num_blocks = %d\n"
+
+#~ msgid "ERROR: unexpected line number %ld\n"
+#~ msgstr "FEHLER: nicht erwartete Zeilennummer %ld\n"
+
+#~ msgid "ERROR: too many basic blocks in function %s\n"
+#~ msgstr "FEHLER: zu viele Basis-Blöcke in Funktion %s\n"
+
+#~ msgid "ERROR: out of range line number in function %s\n"
+#~ msgstr "FEHLER: Zeilennummer außerhalb des Wertebereiches in Funktion %s\n"
+
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "Konnte Quelldatei %s nicht öffnen.\n"
+
+#~ msgid "Unexpected EOF while reading source file %s.\n"
+#~ msgstr "Unerwartetes Dateiende beim Lesen der Quelldatei %s.\n"
+
+#~ msgid "Creating %s.\n"
+#~ msgstr "Erzeuge %s.\n"
+
+#~ msgid "Name `%s' contains quotes"
+#~ msgstr "Name »%s« enthält Anführungszeichen"
+
+#~ msgid "invalid string `%s' in define_cpu_unit"
+#~ msgstr "ungültige Zeichenkette »%s« in define_cpu_unit"
+
+#~ msgid "invalid string `%s' in define_query_cpu_unit"
+#~ msgstr "ungültige Zeichenkette »%s« in define_query_cpu_unit"
+
+#~ msgid "invalid string `%s' in define_bypass"
+#~ msgstr "ungültige Zeichenkette »%s« in define_bypass"
+
+#~ msgid "invalid second string `%s' in exclusion_set"
+#~ msgstr "ungültige zweite Zeichenkette »%s« in exclusion_set"
+
+#~ msgid "invalid first string `%s' in presence_set"
+#~ msgstr "ungültige erste Zeichenkette »%s« in presence_set"
+
+#~ msgid "invalid second string `%s' in presence_set"
+#~ msgstr "ungültige zweite Zeichenkette »%s« in presence_set"
+
+#~ msgid "invalid first string `%s' in absence_set"
+#~ msgstr "ungültige erste Zeichenkette »%s« in absence_set"
+
+#~ msgid "invalid second string `%s' in absence_set"
+#~ msgstr "ungültige zweite Zeichenkette »%s« in absence_set"
+
+#~ msgid "invalid string `%s' in define_automaton"
+#~ msgstr "ungültige Zeichenkette »%s« in define_automaton"
+
+#~ msgid "invalid option `%s' in automata_option"
+#~ msgstr "ungültige Option »%s« in automata_option"
+
+#~ msgid "garbage after ) in reservation `%s'"
+#~ msgstr "Müll hinter ) in Reservierung »%s«"
+
+#~ msgid "invalid `%s' in reservation `%s'"
+#~ msgstr "ungültiges »%s« in Reservierung »%s«"
+
+#~ msgid "repetition `%s' <= 1 in reservation `%s'"
+#~ msgstr "Wiederholung »%s« <= 1 in Reservierung »%s«"
+
+#~ msgid "unit `%s' in exclusion is not declared"
+#~ msgstr "Einheit »%s« ist nicht im Ausschluss deklariert"
+
+#~ msgid "`%s' in exclusion is not unit"
+#~ msgstr "»%s« im Ausschluss ist keine Einheit"
+
+#~ msgid "unit `%s' excludes itself"
+#~ msgstr "Einheit »%s« schließt sich selbst aus"
+
+#~ msgid "units `%s' and `%s' in exclusion set belong to different automata"
+#~ msgstr "Einheiten »%s« und »%s« in Ausschlussmenge gehören zu verschiedenen Automaten"
+
+#~ msgid "unit `%s' excludes and requires presence of `%s'"
+#~ msgstr "Einheit »%s« schließt »%s« aus und erfordert dessen Anwesenheit"
+
+#~ msgid "unit `%s' requires absence and presence of `%s'"
+#~ msgstr "Einheit »%s« erfordert die An- und Abwesenheit von »%s«"
+
+#~ msgid "repeated declaration of automaton `%s'"
+#~ msgstr "wiederholte Deklaration des Automaten %s"
+
+#~ msgid "define_insn_reservation `%s' has negative latency time"
+#~ msgstr "define_insn_reservation »%s« hat negative Latenzzeit"
+
+#~ msgid "`%s' is already used as insn reservation name"
+#~ msgstr "»%s« wurde bereits als insn Reservierungsname verwendet"
+
+#~ msgid "define_bypass `%s - %s' has negative latency time"
+#~ msgstr "define_bypass »%s - %s« hat negative Latenzzeit"
+
+#~ msgid "define_unit `%s' without automaton when one defined"
+#~ msgstr "define_unit »%s« ohne Automat trotz Automatendefinition"
+
+#~ msgid "`%s' is declared as cpu unit"
+#~ msgstr "»%s« wurde als CPU-Einheit deklariert"
+
+#~ msgid "`%s' is declared as cpu reservation"
+#~ msgstr "»%s« wurde als CPU-Reservierung deklariert"
+
+#~ msgid "repeated declaration of unit `%s'"
+#~ msgstr "wiederholte Deklaration der Einheit »%s«"
+
+#~ msgid "repeated declaration of reservation `%s'"
+#~ msgstr "wiederholte Deklaration der Reservierung »%s«"
+
+#~ msgid "there is no insn reservation `%s'"
+#~ msgstr "es gibt keine insn-Reservierung »%s«"
+
+#~ msgid "the same bypass `%s - %s' is already defined"
+#~ msgstr "die selbe Überbrückung »%s - %s« wurde bereits definiert"
+
+#~ msgid "bypass `%s - %s' is already defined"
+#~ msgstr "Überbrückung »%s - %s« wurde bereits definiert"
+
+#~ msgid "undeclared unit or reservation `%s'"
+#~ msgstr "nicht deklarierte Einheit oder Reservierung »%s«"
+
+#~ msgid "unit `%s' is not used"
+#~ msgstr "Einheit »%s« wird nicht verwendet"
+
+#~ msgid "reservation `%s' is not used"
+#~ msgstr "Reservierung »%s« ist unbenutzt"
+
+#~ msgid "cycle in definition of reservation `%s'"
+#~ msgstr "Zyklus in Definition der Reservierung »%s«"
+
+#~ msgid "Units `%s' and `%s' should be in the same automaton"
+#~ msgstr "Einheiten »%s« und »%s« sollten im selben Automat sein"
+
+#~ msgid "-split has no argument."
+#~ msgstr "-split hat kein Argument."
+
+#~ msgid "option `-split' has not been implemented yet\n"
+#~ msgstr "Option »-split« wurde noch nicht implementiert\n"
+
+#~ msgid "Automaton `%s': Insn `%s' will never be issued"
+#~ msgstr "Automat »%s«: Insn »%s« wird nie verwendet"
+
+#~ msgid "Insn `%s' will never be issued"
+#~ msgstr "Insn »%s« wird nie verwendet"
+
+#~ msgid "Errors in DFA description"
+#~ msgstr "Fehler in DFA-Beschreibung"
+
+#~ msgid "Error in writing DFA description file %s"
+#~ msgstr "Fehler beim Schreiben der DFA-Definitionsdatei %s"
+
+#~ msgid "No input file name."
+#~ msgstr "Kein Eingabedateiname."
+
+#~ msgid "Profile does not match flowgraph of function %s (out of date?)"
+#~ msgstr "Profil passt nicht zum Flussgraphen der Funktion %s (veraltet?)"
+
+#~ msgid ".da file corrupted"
+#~ msgstr ".da-Datei beschädigt"
+
+#~ msgid "#`%s' not supported by %s#"
+#~ msgstr "#»%s« wird von %s# nicht unterstützt"
+
+#~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2002 Free Software Foundation, Inc.\n"
+
+#~ msgid "I/O error on output"
+#~ msgstr "Ein-/Ausgabefehler bei der Ausgabe"
+
+#~ msgid ""
+#~ "internal error in %s, at tradcpp.c:%d\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "Interner Fehler in %s bei tradcpp.c:%d\n"
+#~ "Bitte senden Sie einen vollständigen Fehlerbericht\n"
+#~ "auf Englisch ein; Fehler in der deutschen Übersetzung\n"
+#~ "sind an de@li.org zu melden.\n"
+#~ "Gehen Sie gemäß den Hinweisen in %s vor."
diff --git a/libcpp/po/el.po b/libcpp/po/el.po
new file mode 100644 (file)
index 0000000..cad6334
--- /dev/null
@@ -0,0 +1,5276 @@
+# Greek translation of gcc.
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Simos Xenitellis <simos@hellug.gr>, 2001, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gcc 3.2\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2002-08-18 15:46+0100\n"
+"Last-Translator: Simos Xenitellis <simos@hellug.gr>\n"
+"Language-Team: Greek <nls@tux.hellug.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-7\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, fuzzy, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr ""
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+#, fuzzy
+msgid "universal character names are only valid in C++ and C99"
+msgstr "U+%04X: åêôüò ïñßùí ÷áñáêôÞñáò"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr ""
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr ""
+
+#: charset.c:998
+#, fuzzy, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr ""
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr ""
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr ""
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr ""
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr ""
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr ""
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr ""
+
+#: charset.c:1156
+#, fuzzy
+msgid "hex escape sequence out of range"
+msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý"
+
+#: charset.c:1195
+#, fuzzy
+msgid "octal escape sequence out of range"
+msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr ""
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr ""
+
+# src/main.c:663
+#: charset.c:1278
+#, fuzzy, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+# src/main.c:663
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+#: charset.c:1293
+#, fuzzy
+msgid "converting escape sequence to execution character set"
+msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý"
+
+#: charset.c:1415 charset.c:1478
+#, fuzzy
+msgid "character constant too long for its type"
+msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü"
+
+#: charset.c:1418
+#, fuzzy
+msgid "multi-character character constant"
+msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#: charset.c:1510
+#, fuzzy
+msgid "empty character constant"
+msgstr "êåíü áëöáñéèìçôéêü"
+
+#: charset.c:1612
+#, fuzzy, c-format
+msgid "failure to convert %s to %s"
+msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr ""
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr ""
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr ""
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr ""
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr ""
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr ""
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr ""
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr ""
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr ""
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr ""
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr ""
+
+#: directives.c:544
+#, fuzzy
+msgid "macro names must be identifiers"
+msgstr "äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïò"
+
+#: directives.c:585
+#, fuzzy, c-format
+msgid "undefining \"%s\""
+msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+#: directives.c:640
+#, fuzzy
+msgid "missing terminating > character"
+msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr ""
+
+#: directives.c:739
+#, fuzzy, c-format
+msgid "empty filename in #%s"
+msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr ""
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr ""
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr ""
+
+#: directives.c:868
+#, fuzzy, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#: directives.c:874
+#, fuzzy
+msgid "line number out of range"
+msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá"
+
+#: directives.c:887 directives.c:964
+#, fuzzy, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#: directives.c:924
+#, fuzzy, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "%%%c: êáôåõèõíôÞñéïò ãñáììÞ ìç Ýãêõñç."
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr ""
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr ""
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr ""
+
+#: directives.c:1122
+#, fuzzy, c-format
+msgid "#pragma %s is already registered"
+msgstr "ï ÷Üñôçò ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr ""
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr ""
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr ""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr ""
+
+#: directives.c:1437
+#, fuzzy, c-format
+msgid "cannot find source file %s"
+msgstr "áäõíáìßá áíïßãìáôïò õðïäï÷Þò: %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr ""
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr ""
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr ""
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else ìåôÜ áðü #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr ""
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr ""
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif ìåôÜ áðü #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr ""
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr ""
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr ""
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr ""
+
+#: directives.c:1900
+#, fuzzy
+msgid "assertion without predicate"
+msgstr "Ç ëåéôïõñãßá äåí åðéôñÝðåôáé"
+
+#: directives.c:1902
+#, fuzzy
+msgid "predicate must be an identifier"
+msgstr "äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïò"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr ""
+
+#: directives.c:2271
+#, fuzzy, c-format
+msgid "unterminated #%s"
+msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+#, fuzzy
+msgid "unterminated comment"
+msgstr "Ìç ôåñìáôéóìÝíç åíôïëÞ `s'"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "ðñïåéäïðïßçóç: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "åóùôåñéêü óöÜëìá: "
+
+#: errors.c:122
+#, fuzzy
+msgid "error: "
+msgstr "åóùôåñéêü óöÜëìá: "
+
+#: errors.c:186
+#, fuzzy
+msgid "stdout"
+msgstr "äïìÞ"
+
+# src/request.c:37
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+#, fuzzy
+msgid "too many decimal points in number"
+msgstr "Õðåñâïëéêá ðïëëÜ áíïéêôÜ áñ÷åßá óôï óýóôçìá"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr ""
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#: expr.c:305
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr ""
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr ""
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr ""
+
+#: expr.c:341
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr ""
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "%s: ôï %s åßíáé ôüóï ìåãÜëï ðïõ äå ìðïñåß íá áíáðáñáóôáèåß"
+
+#: expr.c:379
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#: expr.c:401
+#, fuzzy
+msgid "use of C99 long long integer constant"
+msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr ""
+
+#: expr.c:505
+#, fuzzy
+msgid "integer constant is too large for its type"
+msgstr "%s: ôï %s åßíáé ôüóï ìåãÜëï ðïõ äå ìðïñåß íá áíáðáñáóôáèåß"
+
+#: expr.c:517
+#, fuzzy
+msgid "integer constant is so large that it is unsigned"
+msgstr "%s: ôï %s åßíáé ôüóï ìåãÜëï ðïõ äå ìðïñåß íá áíáðáñáóôáèåß"
+
+#: expr.c:612
+#, fuzzy
+msgid "missing ')' after \"defined\""
+msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr ""
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr ""
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr ""
+
+#: expr.c:676
+#, fuzzy
+msgid "floating constant in preprocessor expression"
+msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#: expr.c:682
+#, fuzzy
+msgid "imaginary number in preprocessor expression"
+msgstr "ìç Ýãêõñïò áñéèìüò áðü ãñáììÝò"
+
+#: expr.c:727
+#, fuzzy, c-format
+msgid "\"%s\" is not defined"
+msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#: expr.c:855 expr.c:884
+#, fuzzy, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "%s: Áíáìåíüôáí äõáäéêüò ÷åéñéóôÞò.\n"
+
+#: expr.c:875
+#, fuzzy, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr ""
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr ""
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr ""
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr ""
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr ""
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr ""
+
+#: expr.c:975
+#, fuzzy, c-format
+msgid "impossible operator '%u'"
+msgstr "RPC: Ìç óõìâáôÝò åêäüóåéò ôïõ RPC"
+
+#: expr.c:1065
+#, fuzzy
+msgid "missing ')' in expression"
+msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôéò èÝóåéò"
+
+#: expr.c:1086
+#, fuzzy
+msgid "'?' without following ':'"
+msgstr "óõíôáêôéêü óöÜëìá óôïí ðñüëïãï: %s"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr ""
+
+#: expr.c:1101
+#, fuzzy
+msgid "missing '(' in expression"
+msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôéò èÝóåéò"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr ""
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr ""
+
+#: expr.c:1612
+#, fuzzy
+msgid "division by zero in #if"
+msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:570
+#, fuzzy, c-format
+msgid "%s is a block device"
+msgstr "Äåí Ýìåéíå êáèüëïõ ÷þñïò óôç óõóêåõÞ"
+
+# src/shred.c:1134
+#: files.c:587
+#, fuzzy, c-format
+msgid "%s is too large"
+msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï"
+
+#: files.c:622
+#, fuzzy, c-format
+msgid "%s is shorter than expected"
+msgstr "%s: Áíáìåíüôáí äõáäéêüò ÷åéñéóôÞò.\n"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr ""
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr ""
+
+#: init.c:426
+#, fuzzy
+msgid "cppchar_t must be an unsigned type"
+msgstr "äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïò"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr ""
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr ""
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr ""
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr ""
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr ""
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr ""
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr ""
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr ""
+
+#: lex.c:288
+#, fuzzy
+msgid "backslash-newline at end of file"
+msgstr "ìç Ýãêõñç äéáöõãÞ ìå ðéóùêÜèåôï óôï ôÝëïò ôïõ áëöáñéèìçôéêïý"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr ""
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr ""
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr ""
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr ""
+
+#: lex.c:423
+#, fuzzy
+msgid "null character(s) ignored"
+msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: "
+
+#: lex.c:460
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr ""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr ""
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr ""
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "Ý÷åé ðáñáëçöèåß ôåñìáôéêüò ÷áñáêôÞñáò %c"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr ""
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr ""
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr ""
+
+#: lex.c:1347
+#, fuzzy, c-format
+msgid "unspellable token %s"
+msgstr "%s: áäýíáôï ôï Üíïéãìá ôïõ %s: %m\n"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr ""
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+
+#: macro.c:84
+#, fuzzy, c-format
+msgid "macro \"%s\" is not used"
+msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#: macro.c:123 macro.c:319
+#, fuzzy, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ìç Ýãêõñï ìÞêïò ãñáììÞò: %s"
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#: macro.c:254
+#, fuzzy
+msgid "could not determine date and time"
+msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+#, fuzzy
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ìç Ýãêõñïò áñ÷éêüò áñéèìüò ãñáììÞò: `%s'"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr ""
+
+#: macro.c:558
+#, fuzzy
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ÊáêÞ áßôçóç ðáñáìÝôñùí"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr ""
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr ""
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr ""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr ""
+
+#: macro.c:1325
+#, fuzzy, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr ""
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr ""
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr ""
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr ""
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr ""
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr ""
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr ""
+
+#: macro.c:1510
+#, fuzzy
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ÊáêÞ áßôçóç ðáñáìÝôñùí"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr ""
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr ""
+
+#: macro.c:1683
+#, fuzzy, c-format
+msgid "\"%s\" redefined"
+msgstr "áüñéóôï"
+
+#: macro.c:1688
+#, fuzzy
+msgid "this is the location of the previous definition"
+msgstr "áõôÞ åßíáé ç èÝóç ôïõ ðñþôïõ ïñéóìïý"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr ""
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr ""
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr ""
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr ""
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr ""
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr ""
+
+#: traditional.c:917
+#, fuzzy
+msgid "syntax error in macro parameter list"
+msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü êëÜóçò ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí"
+
+#, fuzzy
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "Üãíùóôï óåô `%s'"
+
+#, fuzzy
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "äåí ïñßóôçêå âáñýôçôá ãéá ôï óýìâïëï `%s'"
+
+#, fuzzy
+#~ msgid "section attributes are not supported for this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "requested alignment is too large"
+#~ msgstr "ÊáêÞ áßôçóç ðáñáìÝôñùí"
+
+#, fuzzy
+#~ msgid "alignment may not be specified for `%s'"
+#~ msgstr "ìüíï Ýíá üñéóìá ìðïñåß íá äçëùèåß"
+
+#, fuzzy
+#~ msgid "can't set `%s' attribute after definition"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "invalid vector type for attribute `%s'"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "vector overflow in expression"
+#~ msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#, fuzzy
+#~ msgid "invalid truth-value expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü ãñáììÝò"
+
+#, fuzzy
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'"
+
+#, fuzzy
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'"
+
+#, fuzzy
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "empty range specified"
+#~ msgstr "ìç ïñéóìÝíï"
+
+#, fuzzy
+#~ msgid "this is the first entry overlapping that value"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "duplicate case value"
+#~ msgstr "äéðëüò áñéèìüò ìçíýìáôïò"
+
+#, fuzzy
+#~ msgid "this is the first default label"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "unknown C standard `%s'"
+#~ msgstr "Üãíùóôï óåô `%s'"
+
+#, fuzzy
+#~ msgid "conflicting types for `%s'"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "redefinition of `%s'"
+#~ msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'"
+
+#, fuzzy
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "`%s' declared inline after its definition"
+#~ msgstr "%s: äéðëüò ïñéóìüò Ýêäïóçò êáôçãïñßáò"
+
+#, fuzzy
+#~ msgid "a parameter"
+#~ msgstr "êáêü üñéóìá"
+
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "óöÜëìá ôáéñéÜóìáôïò ôýðïõ ìå ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç"
+
+#~ msgid "previous implicit declaration of `%s'"
+#~ msgstr "ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç ôïõ `%s'"
+
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "áõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%s'"
+
+#, fuzzy
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "this is a previous declaration"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "empty declaration"
+#~ msgstr "êåíü áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "array size missing in `%s'"
+#~ msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "storage size of `%s' isn't known"
+#~ msgstr "Ôï üíïìá `%s' åßíáé Üãíùóôï\n"
+
+#, fuzzy
+#~ msgid "duplicate `%s'"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "ìç Ýãêõñïò äçëùôÞò ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'"
+
+#, fuzzy
+#~ msgid "duplicate `const'"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "duplicate `restrict'"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "duplicate `volatile'"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò."
+
+#, fuzzy
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "ìç Ýãêõñç ôÜîç ÷áñáêôÞñùí `%s'"
+
+#, fuzzy
+#~ msgid "cannot inline function `main'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï áñ÷åßï fifo `%s'"
+
+#, fuzzy
+#~ msgid "parameter has incomplete type"
+#~ msgstr "ìç ðëÞñçò åããñáöÞ"
+
+#, fuzzy
+#~ msgid "redefinition of `union %s'"
+#~ msgstr "Ïé ïñéóìïß ðçãÞ âñßóêïíôáé óôï ÁÑ×ÅÉÏ"
+
+#, fuzzy
+#~ msgid "%s defined inside parms"
+#~ msgstr "óõíå÷ßæåôáé óôï ôìÞìá"
+
+#~ msgid "union"
+#~ msgstr "Ýíùóç"
+
+#~ msgid "structure"
+#~ msgstr "äïìÞ"
+
+# src/request.c:37
+#, fuzzy
+#~ msgid "%s has no %s"
+#~ msgstr "%s óå %s"
+
+#~ msgid "named members"
+#~ msgstr "åðþíõìá ìÝëç"
+
+#~ msgid "members"
+#~ msgstr "ìÝëç"
+
+#, fuzzy
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#, fuzzy
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "Áñíçôéêü ðëÜôïò óôçí áðïôßìçóç"
+
+#, fuzzy
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "duplicate member `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "enum defined inside parms"
+#~ msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+#~ msgid "return type defaults to `int'"
+#~ msgstr "ï åðéóôñåöüìåíïò ôýðïò ðñïêáèïñßæåôáé óå `int'"
+
+#, fuzzy
+#~ msgid "`%s' was used with no declaration before its definition"
+#~ msgstr "áõôÞ åßíáé ç èÝóç ôïõ ðñþôïõ ïñéóìïý"
+
+#~ msgid "return type of `%s' is not `int'"
+#~ msgstr "ç åðéóôñåöüìåíç ôéìÞ ôçò `%s' äåí åßíáé `int'"
+
+#~ msgid "first argument of `%s' should be `int'"
+#~ msgstr "ôï ðñþôï üñéóìá ôçò `%s' ðñÝðåé íá åßíáé `int'"
+
+#~ msgid "second argument of `%s' should be `char **'"
+#~ msgstr "ôï äåýôåñï üñéóìá ôçò `%s' ðñÝðåé íá åßíáé `char **'"
+
+#~ msgid "third argument of `%s' should probably be `char **'"
+#~ msgstr "ôï ôñßôï üñéóìá ôçò `%s' ðñÝðåé íá åßíáé `char **'"
+
+#~ msgid "`%s' takes only zero or two arguments"
+#~ msgstr "ç `%s' ðáßñíåé åßôå êáíÝíá åßôå äýï ïñßóìáôá"
+
+#~ msgid "`%s' is normally a non-static function"
+#~ msgstr "ç `%s' åßíáé óõíÞèùò ìç-óôáôéêÞ óõíÜñôçóç"
+
+#~ msgid "parameter name omitted"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ôï üíïìá ôçò ðáñáìÝôñïõ"
+
+#, fuzzy
+#~ msgid "parameter `%s' declared void"
+#~ msgstr "ï ÷Üñôçò ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç"
+
+#, fuzzy
+#~ msgid "multiple parameters named `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "no return statement in function returning non-void"
+#~ msgstr "`return' ÷ùñßò ôéìÞ, óå óõíÜñôçóç ðïõ åðéóôñÝöåé ìç-êåíü"
+
+#, fuzzy
+#~ msgid "size of return value of `%s' is larger than %d bytes"
+#~ msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d"
+
+#, fuzzy
+#~ msgid "unrecognized format specifier"
+#~ msgstr "Üãíùóôï ðñüèåìá: %s"
+
+#~ msgid "field width"
+#~ msgstr "ìÝãåèïò ðåäßïõ"
+
+#~ msgid "precision"
+#~ msgstr "áêñßâåéá"
+
+#, fuzzy
+#~ msgid "fill character"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò"
+
+#, fuzzy
+#~ msgid "fill character in strfmon format"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: "
+
+#, fuzzy
+#~ msgid "right precision"
+#~ msgstr "ÅìöÜíéóç Ýêäïóçò ðñïãñÜììáôïò"
+
+#, fuzzy
+#~ msgid "missing $ operand number in format"
+#~ msgstr "Ëåßðåé ï äåêáåîáäéêüò áñéèìüò óôïí ÷áñáêôÞñá äéáöõãÞò."
+
+#, fuzzy
+#~ msgid "operand number out of range in format"
+#~ msgstr "Ï áñéèìüò óýíäåóìïõ åßíáé Ýîù áðü ôï üñéï"
+
+#, fuzzy
+#~ msgid "too many arguments for format"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "format is a wide character string"
+#~ msgstr "ëßóôá ìå üëá ôá ãíùóôÜ óýíïëá ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "unterminated format string"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "null format string"
+#~ msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'"
+
+#, fuzzy
+#~ msgid "repeated %s in format"
+#~ msgstr "repeated leap second moment"
+
+#, fuzzy
+#~ msgid "too few arguments for format"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "zero width in %s format"
+#~ msgstr "óöÜëìá åããñáöÞò %s"
+
+#, fuzzy
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'"
+
+#, fuzzy
+#~ msgid "%s does not support %s"
+#~ msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "different type"
+#~ msgstr "åßäïò ìïñöÞò"
+
+#, fuzzy
+#~ msgid "floating constant out of range"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "'lul' is not a valid integer suffix"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "integer constant is larger than the maximum value for its type"
+#~ msgstr ""
+#~ "ï äçëùìÝíïò áñéèìüò bytes `%s' åßíáé ìåãáëýôåñïò áðü ôï ìÝãéóôï\n"
+#~ "ðïõ ìðïñåß íá áíáðáñáóôáèåß áðü ôï ôýðï äåäïìÝíùí `long'"
+
+#, fuzzy
+#~ msgid "ignoring invalid multibyte character"
+#~ msgstr "Ìç Ýãêõñï Þ áóõìðëÞñùôï multibyte Þ ðëáôýò ÷áñáêôÞñáò"
+
+#~ msgid "syntax error"
+#~ msgstr "óöÜëìá óýíôáîçò"
+
+#, fuzzy
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "ï äéá÷ùñéóôÞò äå ìðïñåß íá åßíáé êåíüò"
+
+#, fuzzy
+#~ msgid "parser stack overflow"
+#~ msgstr "Õðåñ÷åßëéóç ðßíáêá áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "óêïõðßäéá óôï ôÝëïò ôïõ áñéèìïý"
+
+#~ msgid "parse error; also virtual memory exceeded"
+#~ msgstr "óöÜëìá åðåîåñãáóßáò· åðßóçò ç ìíÞìç åîáíôëÞèçêå"
+
+#~ msgid "parse error"
+#~ msgstr "óöÜëìá åðåîåñãáóßáò"
+
+#~ msgid "%s at end of input"
+#~ msgstr "%s óôï ôÝëïò ôçò åéóüäïõ"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s ðñéí áðü %s'%c'"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s ðñéí áðü %s'\\x%x'"
+
+#, fuzzy
+#~ msgid "%s before string constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#~ msgid "%s before numeric constant"
+#~ msgstr "%s ðñéí áðü áñéèìçôéêÞ óôáèåñÜ"
+
+# src/request.c:37
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s ðñéí áðü \"%s\""
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s ðñéí áðü ôï óýìâïëï '%s'"
+
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôï óýìâïëï '%s'"
+
+#, fuzzy
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "malformed '#pragma pack' - ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "malformed #pragma weak, ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "malformed #pragma redefine_extname, ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma redefine_extname"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "malformed #pragma extern_prefix, ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma extern_prefix"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "invalid use of void expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "invalid use of flexible array member"
+#~ msgstr "ìç Ýãêõñç þñá ôçò ìÝñáò"
+
+#, fuzzy
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'"
+
+#, fuzzy
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "ìç Ýãêõñïò äåýôåñïò ôåëåóôÞò óå êáôÜóôáóç óõìâáôüôçôáò `%s'"
+
+#, fuzzy
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "called object is not a function"
+#~ msgstr "Ôï åðþíõìï áíôéêåßìåíï äåí åßíáé áíáæçôÞóéìï"
+
+#, fuzzy
+#~ msgid "too many arguments to function"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too few arguments to function"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#~ msgid "division by zero"
+#~ msgstr "äéáßñåóç ìå ìçäÝí"
+
+#, fuzzy
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "wrong type argument to abs"
+#~ msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí"
+
+#, fuzzy
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "ìç Ýãêõñïò ÷ñüíïò áíáðÞäçò"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#, fuzzy
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'"
+
+#, fuzzy
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï áñ÷åßï fifo `%s'"
+
+#, fuzzy
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "assignment"
+#~ msgstr "ðñïóðÝñáóìá ïñßóìáôïò"
+
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%s ìåôáôñÝðåé áêÝñáéï óå äåßêôç ÷ùñßò ìåôáôñïðÝá"
+
+#, fuzzy
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#, fuzzy
+#~ msgid "incompatible types in %s"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "ôï ðÝñáóìá ôïõ ïñßóìáôïò %d áðü `%s'"
+
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "ôï ðÝñáóìá ôïõ ïñßóìáôïò %d ôïõ äåßêôç óôç óõíÜñôçóç"
+
+# src/request.c:263
+#, fuzzy
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å"
+
+#, fuzzy
+#~ msgid "initializer element is not constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+# src/request.c:263
+#~ msgid "initialization"
+#~ msgstr "áñ÷éêïðïßçóç"
+
+#, fuzzy
+#~ msgid "invalid initializer"
+#~ msgstr "ìç Ýãêõñï ìÝãåèïò ïñéæüíôéïõ óôçëïèÝôç: %s"
+
+#, fuzzy
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "áêïëïõèïýí óêïõðßäéá óôï ôÝëïò ôçò ãñáììÞò"
+
+#, fuzzy
+#~ msgid "missing initializer"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý"
+
+#, fuzzy
+#~ msgid "asm template is not a string constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "modification by `asm'"
+#~ msgstr "Ç ôñïðïðïßçóç áðÝôõ÷å"
+
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "`return' ÷ùñßò ôéìÞ, óå óõíÜñôçóç ðïõ åðéóôñÝöåé ìç-êåíü"
+
+#~ msgid "return"
+#~ msgstr "åðéóôñïöÞ"
+
+#, fuzzy
+#~ msgid "can't inline call to `%s'"
+#~ msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'"
+
+#~ msgid "internal error"
+#~ msgstr "åóùôåñéêü óöÜëìá"
+
+#~ msgid "no arguments"
+#~ msgstr "÷ùñßò ïñßóìáôá"
+
+# src/getopt1.c:132
+# src/getopt1.c:132
+#~ msgid "fopen %s"
+#~ msgstr "fopen %s"
+
+#~ msgid "fclose %s"
+#~ msgstr "fclose %s"
+
+#, fuzzy
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n"
+
+#, fuzzy
+#~ msgid "[cannot find %s]"
+#~ msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s"
+
+#, fuzzy
+#~ msgid "cannot find `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "[Leaving %s]\n"
+#~ msgstr "äéáãñáöÞ êáôáëüãïõ %s\n"
+
+#, fuzzy
+#~ msgid "cannot find `nm'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#~ msgid "pipe"
+#~ msgstr "óùëÞíùóç"
+
+#~ msgid "fdopen"
+#~ msgstr "fdopen"
+
+#~ msgid "dup2 %d 1"
+#~ msgstr "dup2 %d 1"
+
+#~ msgid "close %d"
+#~ msgstr "close %d"
+
+#~ msgid "execvp %s"
+#~ msgstr "execvp %s"
+
+#~ msgid "fclose"
+#~ msgstr "fclose"
+
+#, fuzzy
+#~ msgid "unable to open file '%s'"
+#~ msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#, fuzzy
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s"
+
+#, fuzzy
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "Áäõíáìßá ìåôáöïñÜò óôç ìíÞìç (mmap) ôïõ áñ÷åßïõ %s.\n"
+
+#~ msgid "not found\n"
+#~ msgstr "äå âñÝèçêå\n"
+
+#, fuzzy
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áñ÷åßïõ óôç äÞëùóç ðåäßïõ: `%s'"
+
+#~ msgid "dynamic dependencies.\n"
+#~ msgstr "äõíáìéêÝò åîáñôÞóåéò.\n"
+
+#, fuzzy
+#~ msgid "cannot find `ldd'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#~ msgid "execv %s"
+#~ msgstr "execv %s"
+
+#, fuzzy
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s: Äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "library lib%s not found"
+#~ msgstr "Ðéèáíüí äå âñÝèçêå"
+
+# src/getopt1.c:132
+# src/getopt1.c:132
+#~ msgid "open %s"
+#~ msgstr "open %s"
+
+#, fuzzy
+#~ msgid "section pointer missing"
+#~ msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s"
+
+#, fuzzy
+#~ msgid "no symbol table found"
+#~ msgstr "äåí äþèçêå óõìâïëéêü üíïìá"
+
+#, fuzzy
+#~ msgid "no cmd_strings found"
+#~ msgstr "Äåí âñÝèçêå ìÝóï"
+
+#, fuzzy
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ"
+
+#~ msgid "close %s"
+#~ msgstr "close %s"
+
+#, fuzzy
+#~ msgid "bad magic number"
+#~ msgstr "ÅóöáëìÝíïò áñéèìüò áñ÷åßïõ"
+
+#~ msgid "bad header version"
+#~ msgstr "åóöáëìÝíç Ýêäïóç êåöáëßäáò"
+
+#, fuzzy
+#~ msgid "old raw header file"
+#~ msgstr "Äåí åßíáé åðþíõìï áñ÷åßï"
+
+#, fuzzy
+#~ msgid "unsupported version"
+#~ msgstr "ÅìöÜíéóç Ýêäïóçò ðñïãñÜììáôïò"
+
+# src/request.c:37
+#~ msgid "fstat %s"
+#~ msgstr "fstat %s"
+
+#~ msgid "lseek %s 0"
+#~ msgstr "lseek %s 0"
+
+#~ msgid "read %s"
+#~ msgstr "read %s"
+
+#~ msgid "msync %s"
+#~ msgstr "msync %s"
+
+#~ msgid "munmap %s"
+#~ msgstr "munmap %s"
+
+#~ msgid "write %s"
+#~ msgstr "write %s"
+
+#, fuzzy
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ."
+
+#, fuzzy
+#~ msgid "conversion to incomplete type"
+#~ msgstr "ìç ðëÞñçò åããñáöÞ"
+
+#, fuzzy
+#~ msgid "integer constant out of range"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "invalid character '%c' in #if"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "invalid character '\\%03o' in #if"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "missing binary operator"
+#~ msgstr "Áãíùóôïò äõáäéêüò ÷åéñéóôÞò."
+
+#, fuzzy
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "äéáãñáöÞ ìç-êáôáëüãïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "%s: Not a directory"
+#~ msgstr "Äåí åßíáé êáôÜëïãïò"
+
+#, fuzzy
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï \"%s\""
+
+#, fuzzy
+#~ msgid "changing search order for system directory \"%s\""
+#~ msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï \"%s\""
+
+#, fuzzy
+#~ msgid "End of search list.\n"
+#~ msgstr "ÔÝëïò ôìÞìáôïò"
+
+#, fuzzy
+#~ msgid "I/O error on output"
+#~ msgstr "ÓöÜëìá åéóüäïõ/åîüäïõ"
+
+#, fuzzy
+#~ msgid "argument missing after %s"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "assertion missing after %s"
+#~ msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s"
+
+#, fuzzy
+#~ msgid "file name missing after %s"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "number missing after %s"
+#~ msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s"
+
+#, fuzzy
+#~ msgid "target missing after %s"
+#~ msgstr "Áñ÷Þ áñ÷åßïõ %s\n"
+
+#, fuzzy
+#~ msgid "-I- specified twice"
+#~ msgstr "ìç ïñéóìÝíï"
+
+#, fuzzy
+#~ msgid "possible start of unterminated string literal"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#~ msgid "multi-line string literals are deprecated"
+#~ msgstr "äå óõíßóôáôáé ðéá ç ÷ñÞóç áëöáñéèìçôéêþí óôáèåñþí ðïëëáðëþí ãñáììþí"
+
+#, fuzzy
+#~ msgid "no newline at end of file"
+#~ msgstr "%s: ðñüùñï ôÝëïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "unknown string token %s\n"
+#~ msgstr "¶ãíùóôÞ åðéëïãÞ ãéá ôï `s'"
+
+# src/main.c:663
+#, fuzzy
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+#~ msgid "invalid option %s"
+#~ msgstr "ìç Ýãêõñç åðéëïãÞ %s"
+
+#, fuzzy
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#~ msgid "too many input files"
+#~ msgstr "õðåñâïëéêÜ ðïëëÜ áñ÷åßá åéóüäïõ"
+
+#~ msgid "%s:%d: warning: "
+#~ msgstr "%s:%d: ðñïåéäïðïßçóç: "
+
+#~ msgid "%s: warning: "
+#~ msgstr "%s: ðñïåéäïðïßçóç: "
+
+#~ msgid "((anonymous))"
+#~ msgstr "((áíþíõìï))"
+
+# src/request.c:37
+#~ msgid "%s: %s: "
+#~ msgstr "%s: %s: "
+
+#~ msgid "sorry, not implemented: "
+#~ msgstr "óõããíþìç, ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß: "
+
+#~ msgid "%s "
+#~ msgstr "%s "
+
+#~ msgid " %s"
+#~ msgstr " %s"
+
+#~ msgid "In member function `%s':"
+#~ msgstr "Óôç óõíÜñôçóç ìÝëïò `%s':"
+
+#~ msgid "In function `%s':"
+#~ msgstr "Óôç óõíÜñôçóç `%s':"
+
+#, fuzzy
+#~ msgid "compilation terminated.\n"
+#~ msgstr "Ç ëåéôïõñãßá äåí åðéôñÝðåôáé"
+
+#, fuzzy
+#~ msgid "Internal compiler error in %s, at %s:%d"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#~ msgid ":\n"
+#~ msgstr ":\n"
+
+#, fuzzy
+#~ msgid "`%s' is deprecated"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "DW_LOC_OP %s not implemented\n"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "can't get current directory"
+#~ msgstr "Äåí åßíáé äõíáôüí íá ëçöèåß ï ôñÝ÷ùí êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "could not split insn"
+#~ msgstr "áäõíáìßá åýñåóçò âñü÷ïõ"
+
+#, fuzzy
+#~ msgid "invalid `asm': "
+#~ msgstr "ìç Ýãêõñï ìÝãåèïò ïñéæüíôéïõ óôçëïèÝôç: %s"
+
+#, fuzzy
+#~ msgid "unterminated assembly dialect alternative"
+#~ msgstr "ìç ôåñìáôéæüìåíï óõìâïëéêü üíïìá"
+
+#, fuzzy
+#~ msgid "operand number missing after %%-letter"
+#~ msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s"
+
+#, fuzzy
+#~ msgid "operand number out of range"
+#~ msgstr "Ï áñéèìüò óýíäåóìïõ åßíáé Ýîù áðü ôï üñéï"
+
+#, fuzzy
+#~ msgid "invalid %%-code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "invalid expression as operand"
+#~ msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s"
+
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "ï Ýëåã÷ïò öèÜíåé óôï ôÝëïò ìç-êåíÞò óõíÜñôçóçò"
+
+# src/shred.c:1134
+#, fuzzy
+#~ msgid "size of variable `%s' is too large"
+#~ msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï"
+
+#, fuzzy
+#~ msgid "unused parameter `%s'"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'"
+
+# src/main.c:785
+#, fuzzy
+#~ msgid "ambiguous abbreviation %s"
+#~ msgstr "ÁóáöÞò ìïñöÞ `%s'"
+
+#, fuzzy
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr "äçìéïõñãßá %s %s óôï %s"
+
+#, fuzzy
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "äçìéïõñãßá %s %s óôï %s"
+
+#, fuzzy
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "ëßóôá ìå üëá ôá ãíùóôÜ óýíïëá ÷áñáêôÞñùí"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "ôï -pipe äåí õðïóôçñßæåôáé"
+
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr ""
+#~ "\n"
+#~ "Íá óõíå÷ßóåôå; (y Þ n) "
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "÷ñÞóç: %s [åðéëïãÝò] áñ÷åßï...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "ÅðéëïãÝò:\n"
+
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr "  -pass-exit-codes         ¸îïäïò ìå ôï õøçëüôåñï êùäéêü óöÜëìáôïò ôçò öÜóçò\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   ÅìöÜíéóç áõôþí ôùí ðëçñïöïñéþí\n"
+
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "  --target-help            ÅìöÜíéóç åðéëïãÝò ãñáììþí åíôïëÞò ó÷åôéêÝò ìå ôï óôü÷ï\n"
+
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "  (×ñÞóç '-v --help' ãéá ôçí åìöÜíéóç åðéëïãþí ãñáììÞò åíôïëÞò õðïäéåñãáóéþí)\n"
+
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "  -dumpspecs               ÅìöÜíéóç üëùí ôùí ðñïêáèïñéóìÝíùí áëöáñéèìçôéêþí ôùí ðñïóäéïñéóìþí\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             ÅìöÜíéóç ôçò Ýêäïóçò ôïõ ìåôáãëùôôéóôÞ\n"
+
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "  -dumpmachine             ÅìöÜíéóç ôïõ åðåîåñãáóôÞ óôü÷ïõ ôïõ ìåôáãëùôôéóôÞ\n"
+
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "  -print-search-dirs       ÅìöÜíéóç ôùí êáôáëüãùí óôéò äéáäñïìÝò áíáæÞôçóçò ôïõ ìåôáãëùôôéóôÞ\n"
+
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "  -print-libgcc-file-name  ÅìöÜíéóç ôïõ ïíüìáôïò ôçò óõíïäåõôéêÞò âéâëéïèÞêçò ôïõ ìåôáãëùôôéóôÞ\n"
+
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "  -print-file-name=<âéâëéïè> ÅìöÜíéóç ôçò ðëÞñçò äéáäñïìÞò óôç âéâëéïèÞêç <âéâëéïè>\n"
+
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "  -print-prog-name=<ðñüãñ> ÅìöÜíéóç ôçò ðëÞñçò äéáäñïìÞò óôï óõóôáôéêü ìåôáãëùôôéóôÞ <ðñüãñ>\n"
+
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "  -print-multi-directory   ÅìöÜíéóç ôïõ ñéæéêïý êáôáëüãïõ ãéá åêäüóåéò ôçò libgcc\n"
+
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr ""
+#~ "  -print-multi-lib         ÅìöÜíéóç ôçò áíôéóôïß÷éóçò ìåôáîý åðéëïãþí ãñáììÞò\n"
+#~ "                           åíôïëÞò êáé êáôáëüãùí áíáæÞôçóçò ðïëëáðëþí\n"
+#~ "                           âéâëéïèçêþí\n"
+
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "  -Wa,<åðéëïãÝò>            ÐÝñáóìá <åðéëïãþí> äéá÷ùñéóìÝíùí ìå êüììá óôï óõíáñìïëïãçôÞ\n"
+
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "  -Wp,<åðéëïãÝò>            ÐÝñáóìá <åðéëïãþí> äéá÷ùñéóìÝíùí ìå êüììá óôïí ðñï-åðåîåñãáóôÞ\n"
+
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "  -Wl,<åðéëïãÝò>            ÐÝñáóìá <åðéëïãþí> äéá÷ùñéóìÝíùí ìå êüììá óôï óõíäÝôç\n"
+
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "  -Xlinker <üñéóìá>        ÐÝñáóìá <ïñßóìáôïò> óôï óõíäÝôç\n"
+
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "  -save-temps              Íá ìç äéáãñáöïýí ôá åíäéÜìåóá áñ÷åßá\n"
+
+#~ msgid "  -pipe                    Use pipes rather than intermediate files\n"
+#~ msgstr "  -pipe                    ×ñÞóç óùëçíþóåùí áíôß åíäéÜìåóùí áñ÷åßùí\n"
+
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "  -time                    ÌÝôñçóç ôïõ ÷ñüíïõ åêôÝëåóçò êÜèå õðïäéåñãáóßáò\n"
+
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr "  -specs=<áñ÷åßï>           ×ñÞóç ôïõ ðåñéå÷ïìÝíïõ ôïõ <áñ÷åßïõ> áíôß ôùí ðñïêáèïñéóìÝíùí ðñïóäéïñéóìþí\n"
+
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr ""
+#~ "  -std=<ðñüôõðï>           Èåþñçóå üôé ïé ðçãÝò êþäéêá åßíáé ãéá ôï <ðñüôõðï>\n"
+#~ "\n"
+
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "  -B <êáôÜëïãïò>           ÐñïóèÞêç ôïõ <êáôáëüãïõ> óôéò äéáäñïìÝò áíáæÞôçóçò ôïõ ìåôáãëùôôéóôÞ\n"
+
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr "  -b <ìç÷áíÞ>              ÅêôÝëåóç ôïõ gcc ãéá ôï óôü÷ï <ìç÷áíÞ>, áí åßíáé åãêáôåóôçìÝíïò\n"
+
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr "  -V <Ýêäïóç>              ÅêôÝëåóç ôçò Ýêäïóçò <Ýêäïóç> ôïõ gcc, áí åßíáé åãêáôåóôçìÝíç\n"
+
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "  -v                       ÅìöÜíéóç ôùí ðñïãñáììÜôùí ðïõ êáëåß ï ìåôáãëùôôéóôÞò\n"
+
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr "  -E                       Ðñïåðåîåñãáóßá ìüíï· ü÷é ìåôáãëþôôéóç, óõíáñìïëüãçóç Þ óýíäåóç\n"
+
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "  -S                       Ìåôáãëþôôéóç ìüíï· ü÷é óõíáñìïëüãçóç Þóýíäåóç\n"
+
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "  -c                       Ìåôáãëþôôéóç êáé óõíáñìïëüãçóç, ü÷éüìùò óýíäåóç\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <áñ÷åßï>              ÔïðïèÝôçóç ôçò åîüäïõ óôï <áñ÷åßï>\n"
+
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissable languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behavior of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr ""
+#~ "  -x <ãëþóóá>              Êáèïñéóìüò ôçò ãëþóóáò ôùí åðüìåíùí áñ÷Ýéùí åéóüäïõ\n"
+#~ "                           ÁðïäåêôÝò ãëþóóåò åßíáé: c c++ assembler none\n"
+#~ "                           Ôï 'none' óçìáßíåé åðáíáöïñÜ óôçí åî ïñéóìïý\n"
+#~ "                           óõìðåñéöïñÜ åýñåóçò ôçò ãëþóóáò âÜóåé ôçò åðÝêôáóçò\n"
+#~ "                           ôïõ áñ÷åßïõ\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ïé åðéëïãÝò ðïõ îåêéíïýí ìå -g, -f, -m, -O, -W Þ --param ðåñíïýí áõôüìáôá\n"
+#~ " óôéò äéÜöïñåò õðïäéåñãáóßåò ðïõ êáëåß ôï %s.  Ãéá íá ðåñÜóåôå Üëëåò\n"
+#~ " åðéëïãÝò óå áõôÝò ôéò äéåñãáóßåò, ðñÝðåé íá ÷ñçóéìïðïéÞóåôå ôéò åðéëïãÝò\n"
+#~ " -W<ãñÜììá>.\n"
+
+#~ msgid "%s (GCC) %s\n"
+#~ msgstr "%s (GCC) %s\n"
+
+#~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n"
+#~ msgstr "ÐíåõìáôéêÜ Äéêáéþìáôá (C) 2002 Free Software Foundation, Inc.\n"
+
+# src/main.c:850
+#, fuzzy
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.  There is NO\n"
+#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Áõôü åßíáé åëåýèåñï ëïãéóìéêü· äåßôå ôïí ðçãáßï êþäéêá ãéá ôïõò êáíïíéóìïýò\n"
+#~ "áíôéãñáöÞò. Äåí õðÜñ÷åé ÊÁÌÉÁ åããýçóç· ïýôå áêüìá ãéá ËÅÉÔÏÕÑÃÉÊÏÔÇÔÁ Þ \n"
+#~ "ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ ÅÍÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ.\n"
+
+#, fuzzy
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-b' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-V' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "invalid version number format"
+#~ msgstr "ìç Ýãêõñç äéáìüñöùóç óõíôüìåõóçò"
+
+#, fuzzy
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "Ìç Ýãêõñç ñýèìéóç èýñáò (port)"
+
+#, fuzzy
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "%s: ìç áíáãíùñßóéìç åðéëïãÞ `-%c'\n"
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%s'"
+
+#~ msgid "install: %s%s\n"
+#~ msgstr "åãêáôÜóôáóç: %s%s\n"
+
+#~ msgid "programs: %s\n"
+#~ msgstr "ðñïãñÜììáôá: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "âéâëéïèÞêåò: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ãéá ïäçãßåò ãéá áíáöïñÝò óöáëìÜôùí. ðáñáêáëþ äåßôå:\n"
+
+#~ msgid "Configured with: %s\n"
+#~ msgstr "¸÷åé ñõèìéóôåß ìå: %s\n"
+
+#~ msgid "Thread model: %s\n"
+#~ msgstr "ÌïíôÝëï íçìÜôùí: %s\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "Ýêäïóç gcc %s\n"
+
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "Ýêäïóç ïäçãïý gcc %s åêôåëåß ôçí Ýêäïóç gcc %s\n"
+
+#~ msgid "no input files"
+#~ msgstr "äåí õðÜñ÷ïõí áñ÷åßá åéóüäïõ"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: ï ìåôáãëùôôéóôÞò %s äåí Ý÷åé åãêáôáóôáèåß óôï óýóôçìá áõôü"
+
+#~ msgid "internal gcc abort"
+#~ msgstr "åóùôåñéêü óöÜëìá gcc"
+
+# src/main.c:178
+#, fuzzy
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "Åóùôåñéêü óöÜëìá (recoding)"
+
+#~ msgid ""
+#~ "Usage: gcov [OPTION]... SOURCEFILE\n"
+#~ "\n"
+#~ msgstr ""
+#~ "×ñÞóç: gcov [ÅÐÉËÏÃÇ]... [ÁÑןÏÐÇÃÇÓ]\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Print code coverage information.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "EìöÜíéóç ðëçñïöïñéþí êÜëõøçò êþäéêá.\n"
+#~ "\n"
+
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "  -h, --help                      ÅìöÜíéóç áõôÞò ôçò âïÞèåéáò, ìåôÜ Ýîïäïò\n"
+
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "  -v, --version                   ÅìöÜíéóç áñéèìïý Ýêäïóçò, ìåôÜ Ýîïäïò\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ãéá ïäçãßåò óôéò áíáöïñÝò óöáëìÜôùí, ðáñáêáëþ äåßôå:\n"
+#~ "%s.\n"
+
+#~ msgid "gcov (GCC) %s\n"
+#~ msgstr "gcov (GCC) %s\n"
+
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "ÐíåõìáôéêÜ Äéêáéþìáôá (C) 2001 Free Software Foundation, Inc.\n"
+
+#, fuzzy
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#, fuzzy
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "Áäýíáôç ç äçìéïõñãßá áñ÷åßïõ êáôáãñáöþí \"%s\""
+
+#, fuzzy
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "ÊáìéÜ äéåýèõíóç äåí óõíäÝåôáé ìå ôï üíïìá"
+
+#, fuzzy
+#~ msgid "No branches in function %s\n"
+#~ msgstr "Äåí âñÝèçêáí ôáéñéÜóìáôá óôç ìïñöÞ `%s'.\n"
+
+#, fuzzy
+#~ msgid "No calls in function %s\n"
+#~ msgstr "Äåí âñÝèçêáí URL óôï %s.\n"
+
+#, fuzzy
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "äéáãñáöÞ üëùí ôùí åããñáöþí ôïõ êáôáëüãïõ %s\n"
+
+#, fuzzy
+#~ msgid "No branches in file %s\n"
+#~ msgstr ""
+#~ "Äåí õðÜñ÷åé áñ÷åßï `%s'.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No calls in file %s\n"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#, fuzzy
+#~ msgid "Could not open output file %s.\n"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'"
+
+#~ msgid "Creating %s.\n"
+#~ msgstr "Äçìéïõñãßá ôïõ %s.\n"
+
+#, fuzzy
+#~ msgid "can't open %s"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "function cannot be inline"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "%s: internal abort\n"
+#~ msgstr "Åóùôåñéêü óöÜëìá ôïõ áíáëõôÞ äéåõèýíóåùí"
+
+#, fuzzy
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s: ÓöÜëìá êáôÜ ôçí åããñáöÞ ôïõ %s\n"
+
+#, fuzzy
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s: ç ÷ñÞóç åßíáé %s [ -v ] [ -c äéáêïðÞ ] ïíïìáóßá æþíçò ...\n"
+
+#, fuzzy
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s: ç ÷ñÞóç åßíáé %s [ -v ] [ -c äéáêïðÞ ] ïíïìáóßá æþíçò ...\n"
+
+#, fuzzy
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s: ìç Ýãêõñï åßäïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s: áäõíáìßá ðñüóâáóçò óôï %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: ÓöÜëìá êáôÜ ôçí åããñáöÞ ôïõ %s\n"
+
+# src/request.c:37
+#, fuzzy
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s óå %s"
+
+#, fuzzy
+#~ msgid "%s: subprocess got fatal signal %d\n"
+#~ msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n"
+
+#, fuzzy
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n"
+
+#, fuzzy
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s: áäõíáìßá óôçí áíÜãíùóç %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s"
+
+#, fuzzy
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäï `%s' ãéá ôçí êáôçãïñßá `%s'"
+
+# src/shred.c:1103
+#, fuzzy
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s: óöÜëìá åããñáöÞò óôç èÝóç %s"
+
+#, fuzzy
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßóéìï ôïõ %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s: Äå ìðïñåß íá äéáãñáöåß ôï %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: ðñïåéäïðïßçóç: äå âñÝèçêå áñ÷Þ êåöáëßäáò"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'"
+
+#, fuzzy
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s: `%s': äåí âñÝèçêå ôáßñéáóìá"
+
+#, fuzzy
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s: ç Ýîïäïò èá åðéêáëýøåé ôï %s\n"
+
+#, fuzzy
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s"
+
+#, fuzzy
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá áíïé÷ôåß ôï %s: %s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr "%s: ÓöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá óõíäåèåß ôï %s ìå ôï %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá áöáéñåèåß ôï %s: %s\n"
+
+#, fuzzy
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s: äåí åßíáé äõíáôü íá ãñáöôåß ðÜíù óå êáôÜëïãï"
+
+#, fuzzy
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: ôï áñ÷åßï åéóüäïõ åßíáé ôï áñ÷åßï åîüäïõ"
+
+#, fuzzy
+#~ msgid "conversion from NaN to int"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "floating point overflow"
+#~ msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#, fuzzy
+#~ msgid "%s: argument domain error"
+#~ msgstr "%s: óöÜëìá áíÜãíùóçò"
+
+#, fuzzy
+#~ msgid "%s: overflow range error"
+#~ msgstr "%s: óöÜëìá åããñáöÞò"
+
+#, fuzzy
+#~ msgid "%s: underflow range error"
+#~ msgstr "%s: óöÜëìá åããñáöÞò"
+
+#, fuzzy
+#~ msgid "unknown register name: %s"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'"
+
+#, fuzzy
+#~ msgid "unable to generate reloads for:"
+#~ msgstr "Áäýíáôç ç äçìéïõñãßá äéåñãáóßáò óôïí åîõðçñåôçôÞ"
+
+#, fuzzy
+#~ msgid "this is the insn:"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "could not find a spill register"
+#~ msgstr "áäõíáìßá åýñåóçò âñü÷ïõ"
+
+#, fuzzy
+#~ msgid "unrecognizable insn:"
+#~ msgstr "Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid punctuation `%c' in constraint"
+#~ msgstr "ìç Ýãêõñç ìÝôñçóç åðáíÜëçøçò `%s' óôç êáôáóêåõÞ [c*n]"
+
+#, fuzzy
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò óôï ðåäßï `%s' ôçò êáôçãïñßáò `%s'"
+
+#, fuzzy
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+#~ msgid "unused variable `%s'"
+#~ msgstr "á÷ñçóéìïðïßçôç ìåôáâëçôÞ `%s'"
+
+#, fuzzy
+#~ msgid "size of `%s' is larger than %d bytes"
+#~ msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " ÓÕÍÏËÉÊÁ              :"
+
+#, fuzzy
+#~ msgid "collect: reading %s\n"
+#~ msgstr "óöÜëìá áíÜãíùóçò %s"
+
+#~ msgid "ld returned %d exit status"
+#~ msgstr "ç ld åðÝóôñåøå êáôÜóôáóç åîüäïõ %d"
+
+#, fuzzy
+#~ msgid "Floating-point operations can trap"
+#~ msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#, fuzzy
+#~ msgid "Do not suppress warnings from system headers"
+#~ msgstr "Áðïóéþðçóç ðñïçäïðïéÞóåùí êáé ìçíõìÜôùí ðëçñïöüñçóçò"
+
+#~ msgid "invalid option `%s'"
+#~ msgstr "ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "internal error: %s"
+#~ msgstr "óöÜëìá óôçí áíÜãíùóç åéóüäïõ: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr "äÞëùóç ðëÜôïõò"
+
+#, fuzzy
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'"
+
+# src/request.c:806 src/request.c:912
+#, fuzzy
+#~ msgid "unrecognized register name `%s'"
+#~ msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'"
+
+#, fuzzy
+#~ msgid "unrecognized option `%s'"
+#~ msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'"
+
+#, fuzzy
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "%s: Üãíùóôï/ìç õðïóôçñéæüìåíï åßäïò áñ÷åßïõ.\n"
+
+#, fuzzy
+#~ msgid "-param option missing argument"
+#~ msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "invalid --param option: %s"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid parameter value `%s'"
+#~ msgstr "Ìç Ýãêõñï äéÜóôçìá ÷ñüíïõ `%s'"
+
+# src/getopt1.c:132
+# src/getopt1.c:132
+#, fuzzy
+#~ msgid "options passed: "
+#~ msgstr "åðéëïãÞ %s"
+
+# src/getopt1.c:155
+# src/getopt1.c:155
+#, fuzzy
+#~ msgid "options enabled: "
+#~ msgstr "åðéëïãÞ á\n"
+
+#, fuzzy
+#~ msgid "can't open %s for writing"
+#~ msgstr "%s: ÓöÜëìá åããñáöÞò "
+
+#, fuzzy
+#~ msgid "ignoring command line option '%s'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "ôï --no-dereference (-h) äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "ôï --no-dereference (-h) äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays is not supported with -Os"
+#~ msgstr "ôï --no-dereference (-h) äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "error writing to %s"
+#~ msgstr "óöÜëìá åããñáöÞò %s"
+
+#, fuzzy
+#~ msgid "error closing %s"
+#~ msgstr "óöÜëìá áíÜãíùóçò %s"
+
+#, fuzzy
+#~ msgid "invalid character constant in #if"
+#~ msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü"
+
+#, fuzzy
+#~ msgid "invalid token in expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "octal character constant does not fit in a byte"
+#~ msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü"
+
+#, fuzzy
+#~ msgid "hex character constant does not fit in a byte"
+#~ msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü"
+
+#, fuzzy
+#~ msgid "Junk after end of expression."
+#~ msgstr "Ðñüùñï ôÝëïò ôçò êáíïíéêÞò Ýêöñáóçò"
+
+#, fuzzy
+#~ msgid "-traditional is not supported in C++"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "-traditional and -ansi are mutually exclusive"
+#~ msgstr "ïé åðéëïãÝò --string êáé --check åßíáé áìïéâáßùò áðïêëåéüìåíåò"
+
+#, fuzzy
+#~ msgid "-pedantic and -traditional are mutually exclusive"
+#~ msgstr "\"Æþíç %s\" ãñáììÞ êáé åðéëïãÞ -l åßíáé áìïéâáßùò áðïêëåéüìåíá"
+
+#, fuzzy
+#~ msgid "-trigraphs and -traditional are mutually exclusive"
+#~ msgstr "ïé åðéëïãÝò --string êáé --check åßíáé áìïéâáßùò áðïêëåéüìåíåò"
+
+#, fuzzy
+#~ msgid "unterminated #%s conditional"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "not in any file?!"
+#~ msgstr "Äåí åßíáé åðþíõìï áñ÷åßï"
+
+#, fuzzy
+#~ msgid "invalid macro name"
+#~ msgstr "ìç Ýãêõñï üíïìá ìÞíá"
+
+#, fuzzy
+#~ msgid "invalid macro name `%s'"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "unterminated parameter list in #define"
+#~ msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò"
+
+#, fuzzy
+#~ msgid "invalid format #line command"
+#~ msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'"
+
+#, fuzzy
+#~ msgid "undefining `defined'"
+#~ msgstr "áüñéóôï"
+
+#, fuzzy
+#~ msgid "undefining `%s'"
+#~ msgstr "¶íïéãìá ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "#warning%.*s"
+#~ msgstr "ðñïåéäïðïßçóç: "
+
+# src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687
+# src/dfa.c:690 src/dfa.c:703 src/dfa.c:704
+# src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695
+# src/dfa.c:698 src/dfa.c:711 src/dfa.c:712
+#, fuzzy
+#~ msgid "unbalanced #endif"
+#~ msgstr "Ìç éóóïñïðçìÝíï ["
+
+#, fuzzy
+#~ msgid "unterminated string or character constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "arguments given to macro `%s'"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "no args to macro `%s'"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'"
+
+#, fuzzy
+#~ msgid "could not open dump file `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "ignoring unknown option `%.*s' in `-f%s'"
+#~ msgstr "¶ãíùóôç åðéëïãÞ: %s %s %s"
+
+#, fuzzy
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'"
+
+#, fuzzy
+#~ msgid "register name not specified for `%s'"
+#~ msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí ëÝîåùí-êëåéäéþí"
+
+#, fuzzy
+#~ msgid "invalid register name for `%s'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "unknown set constructor type"
+#~ msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ."
+
+#, fuzzy
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' after first use results in unspecified behavior"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' not supported"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "too many #pragma options align=reset"
+#~ msgstr "ÕðåñâïëéêÝò ðáñÜìåôñïé ðïõ äåí åßíáé åðéëïãÝò."
+
+#, fuzzy
+#~ msgid "malformed '#pragma options', ignoring"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "invalid %%Q value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%C value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%N value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%M value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%m value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%L value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%O value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%P value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%V value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "-f%s ignored for Unicos/Mk (not supported)"
+#~ msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "-mieee not supported on Unicos/Mk"
+#~ msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype"
+
+#, fuzzy
+#~ msgid "trap mode not supported on Unicos/Mk"
+#~ msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype"
+
+#, fuzzy
+#~ msgid "rounding mode not supported for VAX floats"
+#~ msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype"
+
+#, fuzzy
+#~ msgid "trap mode not supported for VAX floats"
+#~ msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype"
+
+#, fuzzy
+#~ msgid "invalid %%H value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%J value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%r value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%R value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%h value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%U value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%s value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%E value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%xn code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "argument of `%s' attribute is not a string constant"
+#~ msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "invalid operand to %%R code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%H/%%L code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%U code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%V code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand output code"
+#~ msgstr "Ìç Ýãêõñïò êþäéêáò áßôçóçò"
+
+#, fuzzy
+#~ msgid "invalid floating point emulation option: -mfpe-%s"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "Don't do symbol renaming"
+#~ msgstr "äåí äþèçêå óõìâïëéêü üíïìá"
+
+#, fuzzy
+#~ msgid "MCU `%s' not supported"
+#~ msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "invalid insn:"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "incorrect insn:"
+#~ msgstr "ëÜèïò óõíèçìáôéêü"
+
+#, fuzzy
+#~ msgid "unknown move insn:"
+#~ msgstr "Üãíùóôï óåô `%s'"
+
+#, fuzzy
+#~ msgid "Specify the MCU name"
+#~ msgstr "Ïñéóìüò ïíüìáôïò ðñïãñÜììáôïò"
+
+#, fuzzy
+#~ msgid "trampolines not supported"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "malformed '#pragma %s' - ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "mode not QImode"
+#~ msgstr "íåá_êáôÜóôáóç: êáôÜóôáóç ëåéôïõñãßáò\n"
+
+#, fuzzy
+#~ msgid "invalid indirect memory address"
+#~ msgstr "ìç Ýãêõñïò ÷ñüíïò ëÞîçò"
+
+#, fuzzy
+#~ msgid "Do not allocate BK register"
+#~ msgstr "Äåí åßíáé äõíáôü íá äåóìåõôåß ìíÞìç"
+
+#, fuzzy
+#~ msgid "Enable parallel instructions"
+#~ msgstr "ÁêáôÜëëçëç åíôïëÞ"
+
+#, fuzzy
+#~ msgid "Disable parallel instructions"
+#~ msgstr "ÁêáôÜëëçëç åíôïëÞ"
+
+#, fuzzy
+#~ msgid "invalid operand for 'b' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'v' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'P' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'p' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'z' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'H' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "bad register"
+#~ msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò"
+
+#, fuzzy
+#~ msgid "invalid operand for 'e' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'm' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'A' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'D' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand for 'T' modifier"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand modifier letter"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "internal error: bad register: %d"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "unexpected operand"
+#~ msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+# src/request.c:806 src/request.c:912
+#, fuzzy
+#~ msgid "unrecognized address"
+#~ msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'"
+
+#, fuzzy
+#~ msgid "unrecognized supposed constant"
+#~ msgstr "Üãíùóôï ðñüèåìá: %s"
+
+#, fuzzy
+#~ msgid "unknown CRIS cpu version specification in -mtune= : %s"
+#~ msgstr "ðÜñá ðïëëÝò äçëþóåéò ìåôáôñïðÞò óôçí êáôÜëçîç"
+
+#, fuzzy
+#~ msgid "-fPIC and -fpic are not supported in this configuration"
+#~ msgstr "Ç ïéêïãÝíåéá äéåõèýíóåùí äåí õðïóôçñßæåôáé áðü ôçí ïéêïãÝíåéá ðñùôïêüëëïõ"
+
+#, fuzzy
+#~ msgid "unexpected address expression"
+#~ msgstr "Ìç Ýãêõñç ðñïðïñåõüìåíç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Debug argument support in compiler"
+#~ msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n"
+
+#, fuzzy
+#~ msgid "Debug stack support in compiler"
+#~ msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n"
+
+#, fuzzy
+#~ msgid "invalid addressing mode"
+#~ msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò"
+
+#, fuzzy
+#~ msgid "bad register extension code"
+#~ msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò"
+
+#, fuzzy
+#~ msgid "invalid offset in ybase addressing"
+#~ msgstr "ìç Ýãêõñïò ÷ñüíïò Ýíáñîçò"
+
+#, fuzzy
+#~ msgid "invalid register in ybase addressing"
+#~ msgstr "ìç Ýãêõñïò ÷ñüíïò Ýíáñîçò"
+
+#, fuzzy
+#~ msgid "inline float constants not supported on this host"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "invalid mode for gen_tst_reg"
+#~ msgstr "ìç Ýãêõñç êáôÜóôáóç ãéá ôçí dlopen()"
+
+#, fuzzy
+#~ msgid "Generate code for near calls"
+#~ msgstr "×ñÞóç îå÷ùñéóôÞò ëáíèÜíïõóáò ìíÞìçò ãéá êÜèå ÷ñÞóôç"
+
+#, fuzzy
+#~ msgid "Generate code for near jumps"
+#~ msgstr "×ñÞóç îå÷ùñéóôÞò ëáíèÜíïõóáò ìíÞìçò ãéá êÜèå ÷ñÞóôç"
+
+#, fuzzy
+#~ msgid "profiling not implemented yet"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "trampolines not yet implemented"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: invalid operand to %%A code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: invalid %%x code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "Use registers for argument passing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "malformed #pragma map, ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "Generate char instructions"
+#~ msgstr "ÁêáôÜëëçëç åíôïëÞ"
+
+#, fuzzy
+#~ msgid "code model `large' not supported yet"
+#~ msgstr "åéäéêÜ áñ÷åßá ìðëïê äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "%i-bit mode not compiled in"
+#~ msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n"
+
+#, fuzzy
+#~ msgid "argument to `%s' attribute larger than %d"
+#~ msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d"
+
+#, fuzzy
+#~ msgid "invalid UNSPEC as operand"
+#~ msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC"
+
+#, fuzzy
+#~ msgid "invalid operand code `%c'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+# src/grep.c:1133
+#, fuzzy
+#~ msgid "unknown insn mode"
+#~ msgstr "Üãíùóôç ìÝèïäïò êáôáëüãùí"
+
+#, fuzzy
+#~ msgid "selector must be an immediate"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "mask must be an immediate"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "Retain legend information"
+#~ msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ"
+
+# lib/argmatch.c:188
+#, fuzzy
+#~ msgid "argument is a structure"
+#~ msgstr "¸ãêõñá ïñßóìáôá åßíáé:"
+
+#, fuzzy
+#~ msgid "Alternate calling convention"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "Use mcount for profiling"
+#~ msgstr "áäýíáôç ç öüñôùóç äåäïìÝíùí ðñïößë"
+
+#, fuzzy
+#~ msgid "malformed #pragma align - ignored"
+#~ msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå"
+
+#, fuzzy
+#~ msgid "stack limit expression is not supported"
+#~ msgstr "åéäéêÜ áñ÷åßá ìðëïê äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "Do not use complex addressing modes"
+#~ msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò"
+
+#, fuzzy
+#~ msgid "invalid argument of `%s' attribute"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "invalid operand to %%s code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%p code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%T/%%B code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid operand to %%N code"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "bad address"
+#~ msgstr "ÅóöáëìÝíç äéåýèõíóç"
+
+#, fuzzy
+#~ msgid "lo_sum not of register"
+#~ msgstr "RPC: Ôï ðñüãñáììá äåí Ý÷åé êáôá÷ùñçèåß"
+
+#, fuzzy
+#~ msgid "invalid operand in the instruction"
+#~ msgstr "ìç Ýãêõñç ìÝôñçóç åðáíÜëçøçò `%s' óôç êáôáóêåõÞ [c*n]"
+
+#, fuzzy
+#~ msgid "invalid register in the instruction"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "invalid rotate insn"
+#~ msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'."
+
+#, fuzzy
+#~ msgid "cannot do z-register replacement"
+#~ msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò"
+
+#, fuzzy
+#~ msgid "Do not use direct addressing mode for soft registers"
+#~ msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò"
+
+#, fuzzy
+#~ msgid "Specify the register allocation order"
+#~ msgstr "Áðïôõ÷ßá äÝóìåõóçò ðüñùí óõóôÞìáôïò"
+
+#, fuzzy
+#~ msgid "Use unaligned memory references"
+#~ msgstr "Ìç Ýãêõñç ðéóù-ðáñáðïìðÞ"
+
+#, fuzzy
+#~ msgid "invalid %%x/X value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%q value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%o value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%p value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%s/S value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%P operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%B value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%D value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "invalid option `-mshort-data-%s'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid option `-mstack-increment=%s'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "Emit call graph information"
+#~ msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ"
+
+#, fuzzy
+#~ msgid "-mips%d not supported"
+#~ msgstr "Ôï ai_family äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "-mabi=%s does not support -mips%d"
+#~ msgstr "Ôï ai_socktype äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "invalid option `entry%s'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "can't rewind temp file"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "can't write to output file"
+#~ msgstr "áäõíáìßá åããñáöÞò áñ÷åßùí åîüäïõ óôï `%s'"
+
+#, fuzzy
+#~ msgid "can't read from temp file"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "can't close temp file"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "can not handle inconsistent calls to `%s'"
+#~ msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'"
+
+#, fuzzy
+#~ msgid "Use symbolic register names"
+#~ msgstr "äåí äþèçêå óõìâïëéêü üíïìá"
+
+#, fuzzy
+#~ msgid "-f%s not supported: ignored"
+#~ msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "stack frame not a multiple of 8 bytes: %d"
+#~ msgstr "ï ßäéïò êáíüíáò óå ðïëëáðëÜ áñ÷åßá"
+
+#, fuzzy
+#~ msgid "Do not use addresses that allocate global registers"
+#~ msgstr "Äåí åßíáé äõíáôü íá äåóìåõôåß ìíÞìç"
+
+#, fuzzy
+#~ msgid "Do not use register sb"
+#~ msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò"
+
+#, fuzzy
+#~ msgid "Use bit-field instructions"
+#~ msgstr "ÁêáôÜëëçëç åíôïëÞ"
+
+#, fuzzy
+#~ msgid "-g option disabled"
+#~ msgstr "Ç ëåéôïõñãßá NIS+ áðÝôõ÷å"
+
+#, fuzzy
+#~ msgid "Return floating point results in ac0"
+#~ msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#, fuzzy
+#~ msgid "Target does not have split I&D"
+#~ msgstr "-nt äåí äÝ÷åôáé -l\n"
+
+#, fuzzy
+#~ msgid "invalid %%S value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%b value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%z value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%Z value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%k value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%j value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "-mmultiple is not supported on little endian systems"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "-mstring is not supported on little endian systems"
+#~ msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "-fdata-sections not supported on AIX"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "unknown ABI specified: '%s'"
+#~ msgstr "Üãíùóôï óåô `%s'"
+
+#, fuzzy
+#~ msgid "argument 3 of `%s' must be a 2-bit literal"
+#~ msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "invalid %%f value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%F value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%G value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%j code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "invalid %%J code"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "invalid %%K value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%T value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%u value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%v value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "Always pass floating-point arguments in memory"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "Don't always pass floating-point arguments in memory"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "Use AltiVec instructions"
+#~ msgstr "ÁêáôÜëëçëç åíôïëÞ"
+
+#, fuzzy
+#~ msgid "no description yet"
+#~ msgstr "(÷ùñßò ðåñéãñáöÞ)"
+
+#, fuzzy
+#~ msgid "Use alternate register names"
+#~ msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò"
+
+#, fuzzy
+#~ msgid "bad value for -mcall-%s"
+#~ msgstr "ÁêáôÜëëçëç ôéìÞ óôï ai_flags"
+
+#, fuzzy
+#~ msgid "bad value for -msdata=%s"
+#~ msgstr "ÁêáôÜëëçëç ôéìÞ óôï ai_flags"
+
+#, fuzzy
+#~ msgid "-mcall-aixdesc must be big endian"
+#~ msgstr "ôá ìåãÝèç ôïõ óôçëïãíþìïíá ðñÝðåé íá åßíáé êáôÜ áýîïõóá óåéñÜ"
+
+#, fuzzy
+#~ msgid "Cannot decompose address."
+#~ msgstr "Äåí åßíáé äõíáôÞ ç åê÷þñçóç ôçò æçôçèÞóáò äéåýèõíóçò"
+
+#~ msgid "64 bit mode"
+#~ msgstr "êáôÜóôáóç 64 bit"
+
+#~ msgid "31 bit mode"
+#~ msgstr "êáôÜóôáóç 31 bit"
+
+#, fuzzy
+#~ msgid "mvcle use"
+#~ msgstr "Ç óõóêåõÞ åßíáé áðáó÷ïëçìÝíç"
+
+#, fuzzy
+#~ msgid "__builtin_saveregs not supported by this subtarget"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "`%s' attribute argument not a string constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "Profiling is not supported on this target."
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "%s is not supported by this configuration"
+#~ msgstr "Ç ïéêïãÝíåéá äéåõèýíóåùí äåí õðïóôçñßæåôáé áðü ôçí ïéêïãÝíåéá ðñùôïêüëëïõ"
+
+#, fuzzy
+#~ msgid "-mcmodel= is not supported on 32 bit systems"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "invalid %%Y operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%A operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%B operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%c operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%C operand"
+#~ msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC"
+
+#, fuzzy
+#~ msgid "invalid %%d operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%D operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %%f operand"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "Utilize Visual Instruction Set"
+#~ msgstr "ÐáñÜíïìç ÅíôïëÞ"
+
+#~ msgid "Use 32-bit ABI"
+#~ msgstr "×ñÞóç ABI 32-bit"
+
+#~ msgid "Use 64-bit ABI"
+#~ msgstr "×ñÞóç ABI 64-bit"
+
+# src/request.c:806 src/request.c:912
+#, fuzzy
+#~ msgid "unrecognized section name \"%s\""
+#~ msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'"
+
+# src/dfa.c:569 src/dfa.c:583 src/dfa.c:587
+# src/dfa.c:577 src/dfa.c:591 src/dfa.c:595
+#, fuzzy
+#~ msgid "malformed #pragma ghs section"
+#~ msgstr "êáêïó÷çìáôéóìÝíïò ìåôñçôÞò åðáíÜëçøçò"
+
+# src/shred.c:1134
+#, fuzzy
+#~ msgid "%s=%s is too large"
+#~ msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï"
+
+#, fuzzy
+#~ msgid "output_move_single:"
+#~ msgstr "áñ÷åßï åîüäïõ"
+
+#, fuzzy
+#~ msgid "bad test"
+#~ msgstr "ÅóöáëìÝíç äéåýèõíóç"
+
+#, fuzzy
+#~ msgid "invalid mask"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid address"
+#~ msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò"
+
+#, fuzzy
+#~ msgid "no register in address"
+#~ msgstr "ìç Ýãêõñïò ÷ñüíïò Ýíáñîçò"
+
+#, fuzzy
+#~ msgid "address offset not a constant"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "Use the Xtensa boolean register option"
+#~ msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò"
+
+#, fuzzy
+#~ msgid "conversion from `%T' to `%T' is ambiguous"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+# src/getopt.c:813
+# src/getopt.c:813
+#, fuzzy
+#~ msgid "call of `(%T) (%A)' is ambiguous"
+#~ msgstr "%s: ç åðéëïãÞ `-W %s' åßíáé äéöïñïýìåíç\n"
+
+#, fuzzy
+#~ msgid "`%+#D' is inaccessible"
+#~ msgstr "ôï `%s' åßíáé ìç-ðñïóðåëÜóéìï"
+
+#, fuzzy
+#~ msgid "invalid conversion from `%T' to `%T'"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "  initializing argument %P of `%D'"
+#~ msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#, fuzzy
+#~ msgid "  in call to `%D'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "  for conversion from `%T' to `%T'"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "duplicate enum value `%D'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "duplicate nested type `%D'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "duplicate member `%D'"
+#~ msgstr "äéðëüò áñéèìüò ìçíýìáôïò"
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%T'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%#T'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "redefinition of `%#T'"
+#~ msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'"
+
+#, fuzzy
+#~ msgid "previous definition of `%#T'"
+#~ msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'"
+
+#~ msgid "  by `%D'"
+#~ msgstr "  êáôÜ `%D'"
+
+#, fuzzy
+#~ msgid "negative width in bit-field `%D'"
+#~ msgstr "Áñíçôéêü ðëÜôïò óôçí áðïôßìçóç"
+
+#, fuzzy
+#~ msgid "field `%#D' with same name as class"
+#~ msgstr "ÕðÜñ÷åé áíôéêåßìåíï ìå ôï ßäéï üíïìá"
+
+#, fuzzy
+#~ msgid "not enough type information"
+#~ msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ"
+
+#, fuzzy
+#~ msgid "declaration of `%#D'"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "converting from `%T' to `%T'"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "cannot convert `%E' from type `%T' to type `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "conversion from `%T' to `%T' discards qualifiers"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "cannot convert type `%T' to type `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "conversion from `%#T' to `%#T'"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "conversion from `%T' to non-scalar type `%T' requested"
+#~ msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå"
+
+#, fuzzy
+#~ msgid "`%#D' previously declared here"
+#~ msgstr "Äåí õðÜñ÷åé ðñïçãïýìåíç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "after previous specification in `%#D'"
+#~ msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n"
+
+#, fuzzy
+#~ msgid "invalid redeclaration of `%D'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "`%#D' hides constructor for `%#T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#~ msgid "implicit declaration of function `%#D'"
+#~ msgstr "áõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%#D'"
+
+#, fuzzy
+#~ msgid "duplicate label `%D'"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "invalid use of `%D'"
+#~ msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'."
+
+#, fuzzy
+#~ msgid "`%D::%D' is not a template"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%#D' is not a static member of `%#T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+# src/request.c:263
+#, fuzzy
+#~ msgid "duplicate initialization of %D"
+#~ msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å"
+
+#, fuzzy
+#~ msgid "cannot initialize `%T' from `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá ìåôáíïìáóôåß ôï `.' Þ ôï `..'"
+
+#, fuzzy
+#~ msgid "array size missing in `%D'"
+#~ msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "uninitialized const `%D'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid catch parameter"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò"
+
+#, fuzzy
+#~ msgid "creating %s"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "invalid declarator"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "`%D' as declarator"
+#~ msgstr "ôï `%s' åßíáé êáôÜëïãïò"
+
+#, fuzzy
+#~ msgid "`bool' is now a keyword"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "multiple declarations `%T' and `%T'"
+#~ msgstr "ðïëëáðëüò áñéèìüò åðéëïãþí ôçí åíôïëÞ `s'"
+
+#, fuzzy
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "Äåí Þôáí äõíáôÞ ç åýñåóç åôéêÝôôáò ãéá ìåôáãùãÞ óôï `%s'"
+
+#, fuzzy
+#~ msgid "friend declaration not in class definition"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü êëÜóçò ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "cannot declare %s to references"
+#~ msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï %s"
+
+#, fuzzy
+#~ msgid "invalid type: `void &'"
+#~ msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'"
+
+#, fuzzy
+#~ msgid "cannot declare member `%T::%s' within `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "template parameters cannot be friends"
+#~ msgstr "ï äéá÷ùñéóôÞò äå ìðïñåß íá åßíáé êåíüò"
+
+#, fuzzy
+#~ msgid "invalid use of `::'"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid string constant `%E'"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "duplicate base type `%T' invalid"
+#~ msgstr "äéðëüò ïñéóìüò óõíüëïõ"
+
+#, fuzzy
+#~ msgid "multiple definition of `%#T'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#, fuzzy
+#~ msgid "-f%s is no longer supported"
+#~ msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé"
+
+#, fuzzy
+#~ msgid "prototype for `%#D' does not match any in class `%T'"
+#~ msgstr "ôï áñ÷åßï äåäïìÝíùí ðñïößë `%s' äåí ôáéñéÜæåé ìå ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s'"
+
+#~ msgid "                %#D"
+#~ msgstr "                %#D"
+
+#, fuzzy
+#~ msgid "local class `%#T' shall not have static data member `%#D'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "invalid initializer for virtual method `%D'"
+#~ msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#, fuzzy
+#~ msgid "use of old-style cast"
+#~ msgstr "ðáëáéïý åßäïõò èÝóç"
+
+# src/getopt.c:628
+# src/getopt.c:628
+#, fuzzy
+#~ msgid "use of `%D' is ambiguous"
+#~ msgstr "%s: ç åðéëïãÞ `%s' åßíáé áóáöÞò\n"
+
+#, fuzzy
+#~ msgid "`%D' is not a function,"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "unknown namespace `%D'"
+#~ msgstr "Üãíùóôï óåô `%s'"
+
+#, fuzzy
+#~ msgid "`%T' is not a namespace"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%D' is not a namespace"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%D' not declared"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%T' does not have a class or union named `%D'"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%T' is not a class or union type"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%s' not supported by %s"
+#~ msgstr "Äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "%s: In instantiation of `%s':\n"
+#~ msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n"
+
+#, fuzzy
+#~ msgid "`%#T' is not a template"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "`%T' is already a friend of `%T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "argument to `%s' missing\n"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "base class `%T' already initialized"
+#~ msgstr "ç êëÜóç ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç"
+
+#, fuzzy
+#~ msgid "type `%D' is not a direct base of `%T'"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "`%T' is not an aggregate type"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "invalid use of non-static field `%D'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü óôÞëåò: `%s'"
+
+#, fuzzy
+#~ msgid "invalid use of member `%D'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "`%D' is not a member of type `%T'"
+#~ msgstr "äåí åßóôå ìÝëïò ôçò ïìÜäáò `%s'"
+
+#, fuzzy
+#~ msgid "illegal pointer to bit-field `%D'"
+#~ msgstr "áêáôÜëëçëïò ôýðïò äéêôýïõ :`%s'\n"
+
+#, fuzzy
+#~ msgid "invalid type `void' for new"
+#~ msgstr "ìç Ýãêõñç êáôÜóôáóç ãéá ôçí dlopen()"
+
+#, fuzzy
+#~ msgid "type name expected before `*'"
+#~ msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí êáôçãïñéþí"
+
+#, fuzzy
+#~ msgid "type name expected before `&'"
+#~ msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí êáôçãïñéþí"
+
+#, fuzzy
+#~ msgid "invalid #pragma %s"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "`%D' not defined"
+#~ msgstr "áüñéóôï"
+
+#, fuzzy
+#~ msgid "name lookup of `%s' changed"
+#~ msgstr "ç ïìÜäá ôïõ %s Üëëáîå óå %s\n"
+
+#, fuzzy
+#~ msgid "`%s' tag used in naming `%#T'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+# src/grep.c:785 src/grep.c:792
+# src/grep.c:1060 src/grep.c:1067 src/grep.c:1076
+#, fuzzy
+#~ msgid "invalid default template argument"
+#~ msgstr "ìç Ýãêõñï üñéóìá ìÞêïõò ðåñéå÷ïìÝíïõ"
+
+#, fuzzy
+#~ msgid "`%T' is not a valid expression"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+# src/dfa.c:962
+# src/dfa.c:970
+#, fuzzy
+#~ msgid "sigof type specifier"
+#~ msgstr "Äåí ïñßóôçêå óõíôáêôéêü"
+
+#, fuzzy
+#~ msgid "`%T' is not a class or namespace"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "no type `%D' in `%T'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "invalid member template declaration `%D'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'"
+
+#, fuzzy
+#~ msgid "  from definition of `%#D'"
+#~ msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'"
+
+#~ msgid "        `%D'"
+#~ msgstr "        `%D'"
+
+#, fuzzy
+#~ msgid "no default argument for `%D'"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "template class without a name"
+#~ msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò"
+
+#, fuzzy
+#~ msgid "template definition of non-template `%#D'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#~ msgid "  but %d required"
+#~ msgstr "  áëëÜ %d áðáéôïýíôáé"
+
+#, fuzzy
+#~ msgid "`%T' is not a template type"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "template parameter `%#D'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "`%E' is not a valid template argument"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "  expected a type, got `%E'"
+#~ msgstr "%s: áíáìåíüôáí áêÝñáéïò ìåôÜ ôï `%c'"
+
+#, fuzzy
+#~ msgid "  expected a type, got `%T'"
+#~ msgstr "%s: áíáìåíüôáí áêÝñáéïò ìåôÜ ôï `%c'"
+
+#, fuzzy
+#~ msgid "wrong number of template arguments (%d, should be %d)"
+#~ msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí"
+
+#, fuzzy
+#~ msgid "template argument %d is invalid"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "`%T' is not a template"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "invalid parameter type `%T'"
+#~ msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'"
+
+#, fuzzy
+#~ msgid "creating pointer to member reference type `%T'"
+#~ msgstr "äåí åßóôå ìÝëïò ôçò ïìÜäáò `%s'"
+
+#, fuzzy
+#~ msgid "creating array of `%T'"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "incomplete type unification"
+#~ msgstr "Ìåôáãëùôôéóìüò ðñïäéáãñáöþí ôïðéêþí ñõèìßóåùí"
+
+#, fuzzy
+#~ msgid "no matching template for `%D' found"
+#~ msgstr "Ï Ýëåã÷ïò ìïíïðáôéïý ãéá ôï `%s' âñÞêå `%s'"
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#D'"
+#~ msgstr "äéðëüò ïñéóìüò óõíüëïõ"
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#T'"
+#~ msgstr "äéðëüò ïñéóìüò óõíüëïõ"
+
+#, fuzzy
+#~ msgid "`%#T' is not a valid type for a template constant parameter"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "can't create repository information file `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#, fuzzy
+#~ msgid "cannot use typeid with -fno-rtti"
+#~ msgstr "Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèåß ç åðéëïãÞ -a ÷ùñßò ôï -n"
+
+#, fuzzy
+#~ msgid "`%T' is an inaccessible base of `%T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "`%T' is an ambiguous base of `%T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "invalid covariant return type for `%#D'"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "  overriding `%#D'"
+#~ msgstr "áíôéãñÜöåôáé áðü ðÜíù"
+
+#, fuzzy
+#~ msgid "  overriding `%#F'"
+#~ msgstr "áíôéãñÜöåôáé áðü ðÜíù"
+
+#, fuzzy
+#~ msgid "`%#D' cannot be declared"
+#~ msgstr "Äåí ìðïñåß íá ôåèåß ç çìåñïìçíßá."
+
+#, fuzzy
+#~ msgid "`%E' is not of type `%T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "invalid definition of qualified type `%T'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áñ÷åßïõ óôç äÞëùóç ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "parse error in method specification"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò"
+
+#, fuzzy
+#~ msgid "invalid type `%T' for default argument to `%T'"
+#~ msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'"
+
+#~ msgid "%s before `%s'"
+#~ msgstr "%s ðñéí áðü `%s'"
+
+#~ msgid "%s before `%c'"
+#~ msgstr "%s ðñéí áðü `%c'"
+
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%s ðñéí áðü `\\%o'"
+
+#, fuzzy
+#~ msgid "%s before `%s' token"
+#~ msgstr "%s (ãéá êáíïíéêÞ Ýêöñáóç `%s')"
+
+#, fuzzy
+#~ msgid "`%V' qualifiers cannot be applied to `%T'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "`%s' attribute is not supported on this platform"
+#~ msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá"
+
+#, fuzzy
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "ìç Ýãêõñç þñá ôçò ìÝñáò"
+
+#, fuzzy
+#~ msgid "type `%T' has no destructor"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "invalid use of type decl `%#D' as expression"
+#~ msgstr "Ìç Ýãêõñç ðñïðïñåõüìåíç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "invalid use of template `%#D' as expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "`%T' is not a pointer-to-object type"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "invalid type argument"
+#~ msgstr "Ìç Ýãêõñç ðáñÜìåôñïò"
+
+#, fuzzy
+#~ msgid "too many arguments to %s `%+#D'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too few arguments to %s `%+#D'"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "division by zero in `%E %% 0'"
+#~ msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s"
+
+#, fuzzy
+#~ msgid "division by zero in `%E %% 0.'"
+#~ msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s"
+
+#, fuzzy
+#~ msgid "invalid use of `--' on bool variable `%D'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'"
+
+#, fuzzy
+#~ msgid "cannot create pointer to reference member `%D'"
+#~ msgstr "äåí åßíáé äõíáôüí íá ãßíåé `stat' ôï locale áñ÷åßï `%s'"
+
+#, fuzzy
+#~ msgid "invalid static_cast from type `%T' to type `%T'"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "invalid const_cast from type `%T' to type `%T'"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "invalid cast to function type `%T'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "cannot convert `%T' to `%T' in %s"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "in passing argument %P of `%+D'"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "returning reference to temporary"
+#~ msgstr "xdr_reference: ç ìíÞìç åîáíôëÞèçêå\n"
+
+#, fuzzy
+#~ msgid "cannot declare variable `%D' to be of type `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "cannot declare parameter `%D' to be of type `%T'"
+#~ msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'"
+
+#, fuzzy
+#~ msgid "cannot declare field `%D' to be of type `%T'"
+#~ msgstr "Üãíùóôïò ÷áñáêôÞñáò óôï ðåäßï `%s' ôçò êáôçãïñßáò `%s'"
+
+#, fuzzy
+#~ msgid "invalid return type for function `%#D'"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "cannot allocate an object of type `%T'"
+#~ msgstr "áäõíáìßá áíÜãíùóçò êáôáëüãïõ locale `%s'"
+
+#, fuzzy
+#~ msgid "invalid use of undefined type `%#T'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'"
+
+#, fuzzy
+#~ msgid "declaration of `%#T'"
+#~ msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n"
+
+#, fuzzy
+#~ msgid "invalid use of `%T'"
+#~ msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'."
+
+#, fuzzy
+#~ msgid "Emit cross referencing information"
+#~ msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ"
+
+#~ msgid "note:"
+#~ msgstr "óçìåßùóç:"
+
+#, fuzzy
+#~ msgid "warning:"
+#~ msgstr "ðñïåéäïðïßçóç: "
+
+#~ msgid "fatal:"
+#~ msgstr "ìïéñáßï:"
+
+#~ msgid "(continued):"
+#~ msgstr "(óõíå÷ßæåôáé):"
+
+#~ msgid "[REPORT BUG!!] %"
+#~ msgstr "[ÁÍÁÖ¸ÑÅÔÅ ÔÏ ÓÖ¶ËÌÁ!!] %"
+
+#~ msgid "[REPORT BUG!!]"
+#~ msgstr "[ÁÍÁÖ¸ÑÅÔÅ ÔÏ ÓÖÁËÌÁ!!]"
+
+#, fuzzy
+#~ msgid "In statement function"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument to `%s' missing"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "no input files; unwilling to write output files"
+#~ msgstr "%s: ôï áñ÷åßï åéóüäïõ åßíáé ôï áñ÷åßï åîüäïõ"
+
+#, fuzzy
+#~ msgid "Implicit declaration of `%A' at %0"
+#~ msgstr "ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç ôïõ `%s'"
+
+# src/main.c:663
+#, fuzzy
+#~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0"
+#~ msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+# src/main.c:663
+#, fuzzy
+#~ msgid "Unknown escape sequence `\\%A' at %0"
+#~ msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+#, fuzzy
+#~ msgid "Unterminated escape sequence `\\' at %0"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "Hex escape at %0 out of range"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "Escape sequence at %0 out of range for character"
+#~ msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý"
+
+#, fuzzy
+#~ msgid "hex escape out of range"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+# src/main.c:663
+#, fuzzy
+#~ msgid "non-ISO escape sequence `\\%c'"
+#~ msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+# src/main.c:663
+#, fuzzy
+#~ msgid "unknown escape sequence `\\%c'"
+#~ msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'"
+
+#, fuzzy
+#~ msgid "ignoring pragma: %s"
+#~ msgstr "áãíïïýíôáé üëá ôá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "invalid #ident"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "undefined or invalid # directive"
+#~ msgstr "%%%c: êáôåõèõíôÞñéïò ãñáììÞ ìç Ýãêõñç."
+
+#, fuzzy
+#~ msgid "invalid #line"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò"
+
+#, fuzzy
+#~ msgid "invalid #-line"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò"
+
+#, fuzzy
+#~ msgid "Null character at %0 -- line ignored"
+#~ msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: "
+
+#, fuzzy
+#~ msgid "Set the maximum line length"
+#~ msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý"
+
+#, fuzzy
+#~ msgid "Missing first operand for binary operator at %0"
+#~ msgstr "Áãíùóôïò äõáäéêüò ÷åéñéóôÞò."
+
+#, fuzzy
+#~ msgid "Zero-length character constant at %0"
+#~ msgstr "êåíü áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "Invalid token at %0 in expression or subexpression at %1"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Character constant at %0 has no closing apostrophe at %1"
+#~ msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü"
+
+#, fuzzy
+#~ msgid "Integer at %0 too large"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "Unrecognized FORMAT specifier at %0"
+#~ msgstr "Üãíùóôï ðñüèåìá: %s"
+
+#, fuzzy
+#~ msgid "Zero-size specification invalid at %0"
+#~ msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n"
+
+#, fuzzy
+#~ msgid "Unable to open INCLUDE file `%A' at %0"
+#~ msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s"
+
+#, fuzzy
+#~ msgid "Truncating characters on right side of character constant at %0"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "Typeless constant at %0 too large"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "Array `%A' at %0 is too large to handle"
+#~ msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò."
+
+#, fuzzy
+#~ msgid "Internal compiler error -- cannot perform operation"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+# src/grep.c:1133
+#, fuzzy
+#~ msgid "In unknown kind"
+#~ msgstr "Üãíùóôç ìÝèïäïò êáôáëüãùí"
+
+#~ msgid "In function"
+#~ msgstr "Óôç óõíÜñôçóç"
+
+#~ msgid "In subroutine"
+#~ msgstr "Óôçí õðïñïõôßíá"
+
+#~ msgid "In program"
+#~ msgstr "Óôï ðñüãñáììá"
+
+#~ msgid "In block-data unit"
+#~ msgstr "Óôç ìïíÜäá ìðëïê-äåäïìÝíùí"
+
+#~ msgid "In common block"
+#~ msgstr "Óôï êïéíü ìðëïê"
+
+#, fuzzy
+#~ msgid "internal error - too many interface type"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "field `%s' not found"
+#~ msgstr "ôï áñ÷åßï ÷Üñôç ÷áñáêôÞñùí `%s' äåí âñÝèçêå"
+
+#, fuzzy
+#~ msgid "ret instruction not implemented"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "can't expand %s"
+#~ msgstr "%s: áäõíáìßá óôçí áíÜãíùóç %s: %s\n"
+
+#, fuzzy
+#~ msgid "invalid PC in line number table"
+#~ msgstr "ìç Ýãêõñïò áñ÷éêüò áñéèìüò ãñáììÞò: `%s'"
+
+#, fuzzy
+#~ msgid "bad string constant"
+#~ msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò"
+
+#, fuzzy
+#~ msgid "can't reopen %s"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "can't close %s"
+#~ msgstr "äåí åßíáé äõíáôü íá áëëá÷ôïýí ôá äéêáéþìáôá ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "cannot find file for class %s"
+#~ msgstr "äå âñÝèçêå ï ðñïåðåîåñãáóôÞò C: %s \n"
+
+#, fuzzy
+#~ msgid "not a valid Java .class file"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò"
+
+#, fuzzy
+#~ msgid "error while parsing constant pool"
+#~ msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "error while parsing fields"
+#~ msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ åîüäïõ"
+
+#, fuzzy
+#~ msgid "error while parsing methods"
+#~ msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôçò åéóüäïõ"
+
+#, fuzzy
+#~ msgid "error while parsing final attributes"
+#~ msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "missing Code attribute"
+#~ msgstr "ÅëëéðÞò Þ êáêïó÷çìáôéóìÝíç éäéüôçôá"
+
+#, fuzzy
+#~ msgid "no input file specified"
+#~ msgstr "Äåí õðÜñ÷ïõí áñ÷åßá åéóüäïõ"
+
+#, fuzzy
+#~ msgid "can't close input file %s"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åéóüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "field initializer type mismatch"
+#~ msgstr "Êáêïóõíôáßñéáóìá ôýðùí êáôá÷þñçóçò/ðßíáêá"
+
+#, fuzzy
+#~ msgid "can't create directory %s"
+#~ msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß ï êáôÜëïãïò %s: %s\n"
+
+#, fuzzy
+#~ msgid "can't create %s"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
+
+#, fuzzy
+#~ msgid "can't open output file `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'"
+
+#, fuzzy
+#~ msgid "file not found `%s'"
+#~ msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'"
+
+#, fuzzy
+#~ msgid "`%s' is not a valid class name"
+#~ msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò."
+
+#, fuzzy
+#~ msgid "--resource requires -o"
+#~ msgstr "ÅóöáëìÝíïò êþäéêáò áßôçóçò"
+
+#, fuzzy
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "äåí åßíáé äõíáôü íá ðáñáëçöèåß ï ÷ñÞóôçò êáé ç ïìÜäá"
+
+#, fuzzy
+#~ msgid "cannot create temporary file"
+#~ msgstr "ÓÖÁËÌÁ: Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ ãéá áëëáãÞ"
+
+#, fuzzy
+#~ msgid "cannot specify `main' class when not linking"
+#~ msgstr "Äåí åßíáé äõíáôü íá äçëùèåß áñéèìüò óôçëþí óôçí ðáñÜëëçëç åêôýðùóç."
+
+#, fuzzy
+#~ msgid "can't mangle %s"
+#~ msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s"
+
+#, fuzzy
+#~ msgid "internal error - invalid Utf8 name"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "Missing name"
+#~ msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ"
+
+#~ msgid "';' expected"
+#~ msgstr "áíáìåíüôáí ';'"
+
+#~ msgid "'*' expected"
+#~ msgstr "áíáìåíüôáí '*'"
+
+#, fuzzy
+#~ msgid "Missing class name"
+#~ msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ"
+
+#~ msgid "'{' expected"
+#~ msgstr "áíáìåíüôáí '{'"
+
+#, fuzzy
+#~ msgid "Missing interface name"
+#~ msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "Missing term"
+#~ msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ"
+
+#, fuzzy
+#~ msgid "Invalid declaration"
+#~ msgstr "Ìç Ýãêõñç áíôáëëáãÞ"
+
+#~ msgid "']' expected"
+#~ msgstr "áíáìåíüôáí ']'"
+
+# src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687
+# src/dfa.c:690 src/dfa.c:703 src/dfa.c:704
+# src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695
+# src/dfa.c:698 src/dfa.c:711 src/dfa.c:712
+#, fuzzy
+#~ msgid "Unbalanced ']'"
+#~ msgstr "Ìç éóóïñïðçìÝíï ["
+
+#, fuzzy
+#~ msgid "Identifier expected"
+#~ msgstr "ÐñïóäéïñéóôÞò áöáéñÝèçêå"
+
+#~ msgid "')' expected"
+#~ msgstr "áíáìåíüôáí '('"
+
+#, fuzzy
+#~ msgid "Missing formal parameter term"
+#~ msgstr "ÅëëéðÞò Þ êáêïó÷çìáôéóìÝíç éäéüôçôá"
+
+#, fuzzy
+#~ msgid "Missing identifier"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý"
+
+#, fuzzy
+#~ msgid "Invalid interface type"
+#~ msgstr "Ìç Ýãêõñïò åîáêñéâùôÞò(verifier) åîõðçñåôïýìåíïõ"
+
+#~ msgid "':' expected"
+#~ msgstr "áíáìåíüôáí ':'"
+
+#, fuzzy
+#~ msgid "Invalid expression statement"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#~ msgid "'(' expected"
+#~ msgstr "áíáìåíüôáí '('"
+
+#, fuzzy
+#~ msgid "Missing term or ')'"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "Missing or invalid constant expression"
+#~ msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s"
+
+#, fuzzy
+#~ msgid "Invalid control expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Invalid update expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Invalid init statement"
+#~ msgstr "Ìç Ýãêõñç ðáñÜìåôñïò"
+
+#, fuzzy
+#~ msgid "'class' expected"
+#~ msgstr "áíáìåíüôáí ')'\n"
+
+#, fuzzy
+#~ msgid "')' or term expected"
+#~ msgstr "áíáìåíüôáí ')'\n"
+
+#~ msgid "'[' expected"
+#~ msgstr "áíáìåíüôáí '['"
+
+#, fuzzy
+#~ msgid "Field expected"
+#~ msgstr "Ç èõãáôñéêÞ äéåñãáóßá ôåñìáôßóôçêå"
+
+#, fuzzy
+#~ msgid "']' expected, invalid type expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Invalid type expression"
+#~ msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç"
+
+#, fuzzy
+#~ msgid "Invalid reference type"
+#~ msgstr "Ìç Ýãêõñç ðéóù-ðáñáðïìðÞ"
+
+#~ msgid ""
+#~ "%s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s.\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "missing static field `%s'"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá"
+
+#, fuzzy
+#~ msgid "not a static field `%s'"
+#~ msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s"
+
+#, fuzzy
+#~ msgid "No case for %s"
+#~ msgstr "ÓöÜëìá åðåîåñãáóßáò: %s"
+
+#, fuzzy
+#~ msgid "unregistered operator %s"
+#~ msgstr "ðïôÝ äåí äçëþèçêå ôï ðñüãñáììá %d\n"
+
+#, fuzzy
+#~ msgid "internal error - use of undefined type"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "junk at end of signature string"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "bad pc in exception_table"
+#~ msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò"
+
+#, fuzzy
+#~ msgid "Warn if modifiers are specified when not necessary"
+#~ msgstr "äå ìðïñïýí íá äçëþíïíôáé áñ÷åßá üôáí ãßíåôáé ÷ñÞóç ôïõ --string"
+
+#, fuzzy
+#~ msgid "cannot find protocol declaration for `%s'"
+#~ msgstr "áäõíáìßá åéóáãùãÞò óôïé÷åßï ðáñáâïëÞò `%.*s'"
+
+#, fuzzy
+#~ msgid "cannot find interface declaration for `%s'"
+#~ msgstr "áäõíáìßá áíÜãíùóçò êåöáëßäáò áðü ôï `%s'"
+
+#, fuzzy
+#~ msgid "cannot find reference tag for class `%s'"
+#~ msgstr "äå âñÝèçêå ï ðñïåðåîåñãáóôÞò C: %s \n"
+
+#, fuzzy
+#~ msgid "cannot find class `%s'"
+#~ msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'"
+
+#, fuzzy
+#~ msgid "class `%s' already exists"
+#~ msgstr "(ôï áñ÷åßï Þäç õðÜñ÷åé)"
+
+#, fuzzy
+#~ msgid "inconsistent instance variable specification"
+#~ msgstr "Ìåôáãëùôôéóìüò ðñïäéáãñáöþí ôïðéêþí ñõèìßóåùí"
+
+#, fuzzy
+#~ msgid "multiple declarations for method `%s'"
+#~ msgstr "ðïëëáðëüò áñéèìüò åðéëïãþí ôçí åíôïëÞ `s'"
+
+#, fuzzy
+#~ msgid "invalid receiver type `%s'"
+#~ msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'"
+
+#, fuzzy
+#~ msgid "`%s' does not respond to `%s'"
+#~ msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'"
+
+# src/outer.c:102
+#, fuzzy
+#~ msgid "no super class declared in interface for `%s'"
+#~ msgstr "Ï áíôéôïðïèåôçôÞò åðéöÜíåéáò Ý÷åé ôåèåß ðåñéóóüôåñï áðü ìéá öïñÜ ãéá ôï `%s'"
+
+#, fuzzy
+#~ msgid "method `%s' not implemented by protocol"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé áðü ôï ðñùôüêïëëï"
+
+# src/install.c:562
+#, fuzzy
+#~ msgid "cannot find method"
+#~ msgstr "áäõíáìßá äéêñÜíùóçò"
+
+#, fuzzy
+#~ msgid "duplicate definition of class method `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#, fuzzy
+#~ msgid "duplicate declaration of class method `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "duplicate definition of instance method `%s'"
+#~ msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'"
+
+#, fuzzy
+#~ msgid "duplicate declaration of instance method `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "incomplete implementation of category `%s'"
+#~ msgstr "áðïôõ÷ßá êáôÜ ôçí åããñáöÞ äåäïìÝíùí ãéá ôçí êáôçãïñßá `%s'"
+
+# src/request.c:806 src/request.c:912
+#, fuzzy
+#~ msgid "conflicting super class name `%s'"
+#~ msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'"
+
+#, fuzzy
+#~ msgid "duplicate interface declaration for class `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "duplicate declaration for protocol `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "may not use both -m32 and -m64"
+#~ msgstr "äåí åßíáé äõíáôü íá ðáñáëçöèåß ï ÷ñÞóôçò êáé ç ïìÜäá"
+
+#, fuzzy
+#~ msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#~ msgstr ""
+#~ "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n"
+#~ "÷ñçóéìïðïéçèïýí ðáñÜëëçëá."
+
+#, fuzzy
+#~ msgid "-msoft-float and -mhard_float may not be used together"
+#~ msgstr ""
+#~ "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n"
+#~ "÷ñçóéìïðïéçèïýí ðáñÜëëçëá."
+
+#, fuzzy
+#~ msgid "-mbig-endian and -mlittle-endian may not be used together"
+#~ msgstr ""
+#~ "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n"
+#~ "÷ñçóéìïðïéçèïýí ðáñÜëëçëá."
+
+#, fuzzy
+#~ msgid "-p option not supported: use -pg instead"
+#~ msgstr "ôï -C äåí óõíßóôáôáé ðéá, ÷ñçóéìïðïéÞóôå -Z"
+
+#~ msgid "-pipe is not supported"
+#~ msgstr "ôï -pipe äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "-mhard-float not supported"
+#~ msgstr "Ôï ðñùôüêïëëï äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive"
+#~ msgstr "\"Æþíç %s\" ãñáììÞ êáé åðéëïãÞ -l åßíáé áìïéâáßùò áðïêëåéüìåíá"
+
+#, fuzzy
+#~ msgid "__builtin_trap not supported by this target"
+#~ msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü"
+
+#, fuzzy
+#~ msgid "ignoring #pragma %s"
+#~ msgstr "áãíïïýíôáé üëá ôá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "invalid %H value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %h value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %Q value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %q value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %p value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %B value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %C value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %E value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "invalid %r value"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "bad string length in %s"
+#~ msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý"
+
+#, fuzzy
+#~ msgid "mode mismatch in %s expression"
+#~ msgstr "ÓöÜëìá óôï ôáßñéáóìá óôçí êáíïíéêÞ Ýêöñáóç `%s'"
+
+# src/main.c:697 src/main.c:751
+#, fuzzy
+#~ msgid "no label named `%s'"
+#~ msgstr "¶ãíùóôç ãëþóóá `%s'"
+
+#, fuzzy
+#~ msgid "this is the first ELSE label"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "duplicate CASE value"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "this is the first entry for that value"
+#~ msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò"
+
+#, fuzzy
+#~ msgid "CASE value out of range"
+#~ msgstr "Ï áñéèìüò ôùí êáíáëéþí åßíáé Ýîù áðü ôá üñéá"
+
+#, fuzzy
+#~ msgid "empty range"
+#~ msgstr "êåíü áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "internal error - unknown type in multiple assignment"
+#~ msgstr "åóùôåñéêü óöÜëìá - êëÞèçêå ç addtype ìå êáêü ttisgmt"
+
+#, fuzzy
+#~ msgid "cannot convert to a boolean mode"
+#~ msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "cannot convert to a char mode"
+#~ msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "powerset tuple element out of range"
+#~ msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá"
+
+#, fuzzy
+#~ msgid "missing variant fields (at least `%s')"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "bad initializer for field `%s'"
+#~ msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí"
+
+#, fuzzy
+#~ msgid "invalid array tuple label"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò"
+
+#, fuzzy
+#~ msgid "array tuple index out of range"
+#~ msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá"
+
+#, fuzzy
+#~ msgid "too many array tuple values"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "missing array tuple element %s"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "missing array tuple elements %s : %s"
+#~ msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'"
+
+#, fuzzy
+#~ msgid "`%s' must not be declared readonly"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+# src/request.c:263
+#, fuzzy
+#~ msgid "no initialization allowed for `%s'"
+#~ msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å"
+
+#, fuzzy
+#~ msgid "location for `%s' not read-compatible"
+#~ msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò."
+
+#, fuzzy
+#~ msgid "too few tag labels"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too many tag labels"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "...is duplicated here"
+#~ msgstr "äéðëü êëåéäß"
+
+#, fuzzy
+#~ msgid "mode of `%s' is not a mode"
+#~ msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò."
+
+#, fuzzy
+#~ msgid "duplicate grant for `%s'"
+#~ msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'"
+
+#, fuzzy
+#~ msgid "previous grant for `%s'"
+#~ msgstr "äéáôÞñçóç ùñþí óôï %s"
+
+#, fuzzy
+#~ msgid "duplicate definition `%s'"
+#~ msgstr "äéðëüò ïñéóìüò óõíüëïõ"
+
+#, fuzzy
+#~ msgid "previous definition of `%s'"
+#~ msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'"
+
+# src/main.c:785
+#, fuzzy
+#~ msgid "ambiguous choice for seize `%s' -"
+#~ msgstr "ÁóáöÞò ìïñöÞ `%s'"
+
+#, fuzzy
+#~ msgid "INTERNAL ERROR: handle_one_level is broken"
+#~ msgstr "ÅÓÙÔÅÑÉÊÏ ÓÖÁËÌÁ: ËÜèïò åßäïò áíôéêåéìÝíïõ óôï expand_token ()"
+
+#, fuzzy
+#~ msgid "conditional expression not allowed in %s"
+#~ msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç (ëÜèïò åßóïäïò): %s"
+
+#, fuzzy
+#~ msgid "internal error:  unknown expression mode in %s"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "array is not addressable"
+#~ msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò."
+
+#~ msgid "too few arguments in call to `%s'"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá óôç êëÞóç ôçò `%s'"
+
+#~ msgid "too many arguments in call to `%s'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç êëÞóç ôçò `%s'"
+
+#, fuzzy
+#~ msgid "cannot dereference, not a pointer"
+#~ msgstr "Äåí ìðïñåß íá êáèïñéóôåß ôï üíïìá ôïõ óõóôÞìáôïò"
+
+#, fuzzy
+#~ msgid "invalid type argument of `->'"
+#~ msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç."
+
+#, fuzzy
+#~ msgid "no field named `%s'"
+#~ msgstr "Ìç ïñéóìÝíï üíïìá %s"
+
+#, fuzzy
+#~ msgid "argument %d to ABSTIME must be of integer type"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "parameter 2 must be a positive integer"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "argument 1 to `%s' must be of floating point mode"
+#~ msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "first argument to `%s' must be a mode"
+#~ msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#~ msgid "too many arguments to procedure `%s'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíá `%s'"
+
+#~ msgid "too many arguments to procedure"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíá"
+
+#, fuzzy
+#~ msgid "too few arguments to procedure `%s'"
+#~ msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'"
+
+#, fuzzy
+#~ msgid "too few arguments to procedure"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "syntax error (integer used as function)"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò"
+
+#, fuzzy
+#~ msgid "syntax error - missing operator, comma, or '('?"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü ôïõ ðßíáêá ñåðåñôïñßïõ: %s"
+
+#, fuzzy
+#~ msgid "internal error - bad built-in function `%s'"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "invalid operation on array of chars"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò"
+
+#, fuzzy
+#~ msgid "invalid left operand of %s"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "invalid right operand of %s"
+#~ msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'"
+
+#, fuzzy
+#~ msgid "ADDR requires a LOCATION argument"
+#~ msgstr "ç åðéëïãÞ `-k' áðáéôåß Ýíá üñéóìá"
+
+#, fuzzy
+#~ msgid "-> expression is not addressable"
+#~ msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s"
+
+#, fuzzy
+#~ msgid "%s is not addressable"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid "can't write to %s"
+#~ msgstr "áäõíáìßá åããñáöÞò áðïôåëÝóìáôïò: %s"
+
+#, fuzzy
+#~ msgid "FORBID is not yet implemented"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "text length must be greater then 0"
+#~ msgstr "%s: ï áñéèìüò ãñáììÞò ðñÝðåé íá åßíáé ìåãáëýôåñïò áðü ôï ìçäÝí"
+
+#, fuzzy
+#~ msgid "argument %d of %s must be a location"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "argument 2 of ASSOCIATE must not be an empty string"
+#~ msgstr "%s: ç ôéìÞ ãéá ôï ðåäßï `%s' äåí ðñÝðåé íá åßíáé Ýíá êåíü áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "argument 2 to ASSOCIATE must be a string"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "argument 3 to ASSOCIATE must be a string"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "too many arguments in call to MODIFY"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "argument 2 of MODIFY must not be an empty string"
+#~ msgstr "%s: ç ôéìÞ ãéá ôï ðåäßï `%s' äåí ðñÝðåé íá åßíáé Ýíá êåíü áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "argument 2 to MODIFY must be a string"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "argument 3 to MODIFY must be a string"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "incompatible index mode"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "argument %d of %s must be of mode ACCESS"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "too few arguments in call to `readrecord'"
+#~ msgstr "ðïëý ëßãá bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñá"
+
+#, fuzzy
+#~ msgid "incompatible record mode"
+#~ msgstr "ìçäåíéóìÝíç åããñáöÞ êáé ãñÜøéìï ðÜíù óå áõôÞ (truncated)"
+
+#, fuzzy
+#~ msgid "too few arguments in call to `writerecord'"
+#~ msgstr "ðïëý ëßãá bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñá"
+
+#, fuzzy
+#~ msgid "argument %d of %s must be of mode TEXT"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "argument %d must be referable"
+#~ msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò"
+
+#, fuzzy
+#~ msgid "too few arguments for this format string"
+#~ msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "internal error in check_format_string"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+# src/recode.c:171
+#, fuzzy
+#~ msgid "no padding character (offset %d)"
+#~ msgstr "ÊáíÝíáò ÷áñáêôÞñáò äåí ìåôáôñÝðåôáé óå %3d"
+
+#, fuzzy
+#~ msgid "too many arguments for this format string"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá óå áõôü ôï áëöáñéèìçôéêü ìïñöÞò"
+
+#, fuzzy
+#~ msgid "missing index expression"
+#~ msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "too few arguments in call to `readtext'"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "non-constant expression"
+#~ msgstr "Áäõíáìßá ðñïóðÝëáóçò ôïõ áñ÷åßïõ ôçò áëëáãÞò"
+
+#, fuzzy
+#~ msgid "invalid C'xx' "
+#~ msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC"
+
+#, fuzzy
+#~ msgid "unrecognized compiler directive"
+#~ msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'"
+
+#, fuzzy
+#~ msgid "unrecognized compiler directive `%s'"
+#~ msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'"
+
+#, fuzzy
+#~ msgid "invalid control sequence"
+#~ msgstr "ìç Ýãêõñï üíïìá ìÞíá"
+
+#, fuzzy
+#~ msgid "unterminated string literal"
+#~ msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü"
+
+#, fuzzy
+#~ msgid "invalid number format `%s'"
+#~ msgstr "ìç Ýãêõñïò áñéèìüò áðü óôÞëåò: `%s'"
+
+#, fuzzy
+#~ msgid "can't find %s"
+#~ msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s"
+
+#, fuzzy
+#~ msgid "invalid `%c' character in name"
+#~ msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò"
+
+#, fuzzy
+#~ msgid "loop identifier undeclared"
+#~ msgstr "áíáìåíüôáí óôáèåñÜ Þ ðñïóäéïñéóôÞò"
+
+#, fuzzy
+#~ msgid "BY expression is negative or zero"
+#~ msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s"
+
+#, fuzzy
+#~ msgid "start label '%s' does not match end label '%s'"
+#~ msgstr "ôï áñ÷åßï äåäïìÝíùí ðñïößë `%s' äåí ôáéñéÜæåé ìå ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s'"
+
+#, fuzzy
+#~ msgid "expected a name here"
+#~ msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ."
+
+#, fuzzy
+#~ msgid "expected a name string here"
+#~ msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ."
+
+#, fuzzy
+#~ msgid "missing defining occurrence"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý"
+
+#, fuzzy
+#~ msgid "missing '(' in exception list"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý"
+
+#, fuzzy
+#~ msgid "syntax error in exception list"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %s"
+
+#, fuzzy
+#~ msgid "empty ON-condition"
+#~ msgstr "Åðåßãïõóá êáôÜóôáóç åéóüäïõ/åîüäïõ"
+
+#, fuzzy
+#~ msgid "expected another rename clause"
+#~ msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ."
+
+#, fuzzy
+#~ msgid "syntax error while parsing signal definition statement"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %s"
+
+#, fuzzy
+#~ msgid "expression is not an action"
+#~ msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s"
+
+#, fuzzy
+#~ msgid "syntax error in action"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò"
+
+#, fuzzy
+#~ msgid "bad tuple field name list"
+#~ msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí"
+
+#, fuzzy
+#~ msgid "invalid syntax for label in tuple"
+#~ msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí"
+
+#, fuzzy
+#~ msgid "missing field name"
+#~ msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ"
+
+#, fuzzy
+#~ msgid "missing field"
+#~ msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá"
+
+#, fuzzy
+#~ msgid "VARYING bit-strings not implemented"
+#~ msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß"
+
+#, fuzzy
+#~ msgid "SIGNAL is not a valid mode"
+#~ msgstr "ìç Ýãêõñï äéêáßùìá"
+
+#, fuzzy
+#~ msgid "syntax error - missing mode"
+#~ msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìïý locale ìçíýìáôïò"
+
+#~ msgid "  `%s'"
+#~ msgstr "  `%s'"
+
+#, fuzzy
+#~ msgid "undeclared identifier `%s'"
+#~ msgstr "ìç Ýãêõñïò äçëùôÞò ðåäßïõ: `%s'"
+
+#, fuzzy
+#~ msgid "too many arguments to process `%s'"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too many arguments to process"
+#~ msgstr "ðÜñá ðïëëÜ ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too few arguments to process `%s'"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "too few arguments to process"
+#~ msgstr "ðïëý ëßãá ïñßóìáôá"
+
+#, fuzzy
+#~ msgid "GEN_INST parameter 2 must be an integer mode"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "%s is not a declared process"
+#~ msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï"
+
+#, fuzzy
+#~ msgid " and no default priority was set."
+#~ msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ç ðñïôåñáéüôçôá."
+
+#, fuzzy
+#~ msgid " and no destination process specified"
+#~ msgstr "Áðáéôåßôáé äéåýèõíóç ðñïïñéóìïý"
+
+#, fuzzy
+#~ msgid "slice length out-of-range"
+#~ msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí"
+
+#, fuzzy
+#~ msgid "too many index expressions"
+#~ msgstr "õðåñâïëéêÜ ðïëëÜ äåõôåñüëåðôá áíáðÞäçóçò"
+
+#, fuzzy
+#~ msgid "cannot convert to float"
+#~ msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí"
+
+#, fuzzy
+#~ msgid "cannot convert float to this mode"
+#~ msgstr "yp_update: áäõíáìßá ìåôáôñïðÞò ïíüìáôïò óõóôÞìáôïò óå üíïìá äéêôýïõ\n"
+
+#, fuzzy
+#~ msgid "internal error in chill_root_resulting_mode"
+#~ msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u"
+
+#, fuzzy
+#~ msgid "cannot process BIN (>32)"
+#~ msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ."
+
+#, fuzzy
+#~ msgid "negative string length"
+#~ msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý"
+
+#, fuzzy
+#~ msgid "floating point ranges"
+#~ msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s"
+
+#, fuzzy
+#~ msgid "starting word in POS must be an integer constant"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "length in POS must be an integer constant"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "end bit in POS must be an integer constant"
+#~ msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò"
+
+#, fuzzy
+#~ msgid "invalid parameterized type"
+#~ msgstr "%s: ìç Ýãêõñï åßäïò áñ÷åßïõ"
+
+# src/main.c:659
+#, fuzzy
+#~ msgid "ambiguous request for method pointer `%s'"
+#~ msgstr "ÁóáöÞò óõìâïëïóåéñÜ `%s'"
+
+#, fuzzy
+#~ msgid "invalid use of %D"
+#~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò"
+
+#, fuzzy
+#~ msgid "internal error #%d"
+#~ msgstr "Åóùôåñéêü óöÜëìá NIS"
+
+#, fuzzy
+#~ msgid "can't to open %s"
+#~ msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'"
diff --git a/libcpp/po/es.po b/libcpp/po/es.po
new file mode 100644 (file)
index 0000000..f027364
--- /dev/null
@@ -0,0 +1,909 @@
+# Mensajes en español para cpplib-4.3-b20071109
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Cristian Othón Martínez Vera <cfuga@itam.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib-4.3-b20071109\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-11-13 19:48-0600\n"
+"Last-Translator: Cristian Othón Martínez Vera <cfuga@itam.mx>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "la conversión de %s a %s no está soportada por iconv"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "no hay una implementación de iconv, no se puede convertir de %s a %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "el carácter 0x%lx no está en el conjunto básico de caracteres fuente\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "convirtiendo al conjunto de caracteres de ejecución"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "el carácter 0x%lx no es unibyte en el conjunto de caracteres de ejecución"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "El carácter %x puede no ser NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "los nombres universales de carácter sólo son válidos en C++ y C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "el significado de '\\%c' es diferente en C tradicional"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "En _cpp_valid_unc pero no es un UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "nombre universal de carácter %.*s incompleto"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s no es un carácter universal válido"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "'$' en el identificador o número"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "el carácter universal %.*s no es válido en un identificador"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "el carácter universal %.*s no es válido al inicio de un identificador"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "convirtiendo un NUC al conjunto de caracteres fuente"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "convirtiendo un NUC al conjunto de caracteres de ejecución"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "el significado de '\\x' es diferente en C tradicional"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "se usó \\x sin dígitos hexadecimales a continuación"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "secuencia de escape hexadecimal fuera de rango"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "secuencia de escape octal fuera de rango"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "el significado de '\\a' es diferente en C tradicional"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "secuencia de escape que no es estándard ISO, '\\%c'"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "secuencia de escape desconocida, '\\%c'"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "secuencia de escape desconocida: '\\%s'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "convirtiendo una secuencia de escape al conjunto de caracteres de ejecución"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "constante de carácter demasiado grande para su tipo"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "constante de carácter con múltiples caracteres"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "constante de carácter vacía"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "no se puede convertir %s a %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "elementos extra al final de la directiva #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s es una extensión de GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "se sugiere no usar #elif en C tradicional"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "C tradicional ignora #%s con el # indentado"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "se sugiere ocultar #%s de C tradicional con un # indentado"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "imbuir una directiva dentro de los argumentos de una macro no es transportable"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "la directiva de estilo de línea es una extensión de GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "directiva de preprocesamiento #%s inválida"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" no se puede usar como un nombre de macro"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "no se puede usar \"%s\" como un nombre de macro porque es un operador en C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "no se dio un nombre de macro en la directiva #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "los nombres de macro deben ser identificadores"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "borrando la definición de \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "falta el carácter de terminación >"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s espera \"NOMBRE_ARCHIVO\" ó <NOMBRE_ARCHIVO>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "nombre de fichero vacío en #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include anidado con demasiada profundidad"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next en fichero primario de código fuente"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "indicador \"%s\" inválido en la línea de la directiva"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" después de #line no es un entero positivo"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "número de línea fuera de rango"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" no es un nombre de fichero válido"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" después de # no es un entero positivo"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "directiva #%s inválida"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "registrando pragmas en el espaco de nombres \"%s\" con una expansión de nombre que no coincide"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "registrando el pragma \"%s\" con expansión de nombre y sin un espacio de nombres"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "registrando \"%s\" como un pragma y como un espacio de nombres de pragma"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s ya está registrado"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s ya está registrado"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "registrando un pragma con manejador NULL"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma una vez en el fichero principal"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "directiva #pragma de GCC envenenada inválida"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "envenenando la macro existente \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header ignorado fuera del fichero a incluir"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "no se puede encontrar el fichero fuente %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "el fichero actual es más antiguo que %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma lleva una cadena literal entre paréntesis"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else sin #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else después de #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "el condicional empezó aquí"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif sin #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif después de #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif sin #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "falta '(' antes del predicado"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "falta ')' para completar la respuesta"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "el predicado de la respuesta está vacío"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "afirmación sin predicado"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "el predicado debe ser un identificador"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" reafirmado"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "#%s sin terminar"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "comentario sin terminar"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "aviso: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "error interno: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "error: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "salida estándard"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "demasiados puntos decimales en el número"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr "las constantes de coma fija son una extensión GCC"
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "dígito \"%c\" inválido en la constante binaria"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "dígito \"%c\" inválido en la constante octal"
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "prefijo \"0b\" inválido en la constante de coma flotante"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "uso de una constante de coma flotante hexadecimal C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "el exponente no tiene dígitos"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "las constantes de coma flotante hexadecimal requieren un exponente"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "sufijo \"%.*s\" inválido en la constante de coma flotante"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "C tradicional rechaza el sufijo \"%.*s\""
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "sufijo \"%.*s\" inválido en la constante de coma flotante hexadecimal"
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr "las constantes de coma flotante decimal son una extensión GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "sufijo \"%.*s\" inválido en la constante entera"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "uso de una constante entera long long C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "las constantes imaginarias son una extensión GCC"
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr "las constantes binarias son una extensión GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "la constante entera es demasiado grande para su tipo"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "la constante entera es tan grande que es unsigned"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "falta `)' después de \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "el operador \"defined\" requiere un identificador"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" es un elemento alternativo para \"%s\" en C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "este uso de \"defined\" puede no ser transportable"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "constante de coma flotante en una expresión del preprocesador"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "número imaginario en una expresión del preprocesador"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" no está definido"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "falta un operador binario antes del elemento \"%s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "el elemento \"%s\" no es válido en las expresiones del preprocesador"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "falta una expresión entre '(' y ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if sin expresión"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "el operador '%s' no tiene operando derecho"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "el operador `%s' no tiene operando izquierdo"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " ':' sin una '?' precedente"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "pila desbalanceada en #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "operador '%u' imposible"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "falta un ')' en la expresión"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' sin ':' a continuación"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "desbordamiento entero en expresión del preprocesador"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "falta un '(' en la expresión"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "el operando izquierdo de \"%s\" cambia el signo cuando es promovido"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "el operando derecho de \"%s\" cambia el signo cuando es promovido"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "C tradicional rechaza el operador unario mas"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "operador coma en operando de #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "división por cero en #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "directorio NULL en find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "se encontró uno o más ficheros PCH, pero eran inválidos"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "use -Winvalid-pch para más información"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s es un dispositivo de bloques"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s es demasiado grande"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s es más corto de lo esperado"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "no hay ruta de inclusión en la cual se pueda buscar %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Guardias múltiples de include pueden ser útiles para:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t debe ser de un tipo unsigned"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "la aritmética del preprocesador tiene una precisión máxima de %lu bits; el objetivo requiere de %lu bits"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "la aritmética de CPP debe se al menos tan precisa como un int del objetivo"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "el char del objetivo tiene menos de 8 bits de ancho"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "el wchar_t del objetivo es más estrecho que el char del objetivo"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "el int del objetivo es más estrecho que el char del objetivo"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "el medio-entero de CPP es más estrecho que el carácter de CPP"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP no puede manejar constantes de carácter anchas más allá de %lu bits en este objetivo, pero el objetivo requiere %lu bits"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "caracteres de barra invertida y fin de línea separados por espacio"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "no hay caractér de barra invertida o fin de línea al final del fichero"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigrafo ??%c convertido a %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "se ignora el trigrafo ??%c, use -trigraphs para reconocerlo"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" dentro de un comentario"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s en la directiva de preprocesamiento"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "caracter(es) nulo(s) ignorados"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "`%.*s' no está en NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "`%.*s' no está en NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "intento de usar \"%s\" envenenado"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ solamente puede aparecer en la expansión de una macro variadic C99"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "caracter(es) nulo(s) preservados en la literal"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "falta el carácter de terminación %c"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "los comentarios de estilo C++ no se permiten en ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(esto se reportará solamente una vez por cada fichero de entrada)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "comentario en múltiples líneas"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "elemento %s impronunciable"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "En el fichero incluído de %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 de %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "la macro \"%s\" no se utiliza"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "macro interna \"%s\" inválida"
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "no se puede determinar la marca de fecha del fichero"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "no se puede determinar la fecha y la hora"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "se expande __COUNTER__ dentro de una directiva con -fdirectives-only"
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "cadena literal inválida, se ignora el '\\' final"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "pegar \"%s\" y \"%s\" no da un elemento válido de preprocesamiento"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 requiere que el resto de los argumentos sea usado"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "la macro \"%s\" requiere %u argumentos, pero solo se proporcionan %u"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "la macro \"%s\" recibió %u argumentos, pero solamente tomó %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "lista de argumentos sin terminar al invocar la macro \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "la función de macro \"%s\" se debe usar con argumentos en C tradicional"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "parámetro de macro \"%s\" duplicado"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" podría faltar en la lista de parámetro de macro"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "los parámetros de macro deben ser separados por comas"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "falta el nombre del parámetro"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "los macros variadic anónimos se introdujeron en C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C no permite macros variadic nombrados"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "falta paréntesis derecho en la lista de parámetros de macro"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' no puede aparece en o al final de una expansión de macro"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 requiere espacios en blanco después del nombre de macro"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "faltan espacios en blanco después del nombre de macro"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' no es seguido por un parámetro de macro"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "se redefinió \"%s\""
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "esta es la ubicación de la definición previa"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "el argumento de macro \"%s\" debería ser convertido a cadena en C tradicional"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "tipo de hash %d inválido en cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "al escribir el encabezado precompilado"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: no se usa porque `%.*s' no está definido"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: no se usa porque `%.*s' está definido como `%s' no como `%.*s'"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: no se usa porque `%s' está definido"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: no se usa porque `__COUNTER__' es inválido"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "al leer el encabezado precompilado"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "se detectó recursión al expandir la macro \"%s\""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "error de sintaxis en la lista de parámetros de macro"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "no hay caractér de fin de línea al final del fichero"
+
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "secuencia de escape desconocida: '\\%03o'"
diff --git a/libcpp/po/fr.po b/libcpp/po/fr.po
new file mode 100644 (file)
index 0000000..313bb89
--- /dev/null
@@ -0,0 +1,19955 @@
+# Messages français pour GNU concernant gcc.
+# Copyright © 2001 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
+#
+# Vocabulaire utilisé
+#      lvalue          = membre gauche
+#      deprecated      = obsolète
+#      out of range    = hors des limites
+#      range           = gamme
+#      scope           = porté, champ
+#      shadowing       = masquer
+#      embedded PIC    = PIC enchâssé
+#      CPU             = processeur
+#      structure with flexible member
+#                      = structure ayant un membre flexible
+#      flag            = fanion
+#      forward declaration
+#                      = déclaration anticipée
+#      token           = élément lexical (dans le contexte du parsing)
+#      to subscript    = indicer
+#      top-level       = hors de toute fonction
+#      member function = fonction membre
+#
+# Pas traduit:
+#      thread
+#
+# J'ai des doutes pour :
+#      inline          = enligne (pas systématiquement)
+#                         oui dans le contexte du langage C par exemple MR
+#                         non autrement ...de manière générale MR
+#      section attribute       attribut de section OK MR
+#      wide char               caractère long  ...non mieux caractère large MR 
+#                               plus conforme à l'esprit.
+#
+# ------
+#      literals                littéral, ou mot composé ?
+# msgid "ISO C89 forbids compound literals"
+# msgstr "le C89 ISO interdit les mots composés"
+#
+#      symbol table            table des symboles ou table de symbole
+#      command map             carte des commandes
+#      Combiner                combinateur
+# msgid ""
+# ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+# ";; %d successes.\n"
+# "\n"
+# msgstr ""
+# ";; Statistiques du combinateur : %d tentatives, %d substitutions (%d requérant un nouvel espace),\n"
+# ";; %d succès.\n"
+# "\n"
+#
+#      promote                 promouvoir
+# msgid "the left operand of \"%s\" changes sign when promoted"
+# msgstr "L'opérande gauche de « %s » change de signe lors de sa promotion"
+#
+#        include guards               ???
+# msgid "Multiple include guards may be useful for:\n"
+# msgstr "De multiples balises pour les inclusions peuvent être utiles pour :\n"
+#
+#
+#        universal-character-name ???
+# msgid "incomplete universal-character-name"
+# msgid "non-hex digit '%c' in universal-character-name"
+# msgid "universal-character-name on EBCDIC target"
+#
+#       poisoning                      empoisonnement
+# msgid "poisoning existing macro \"%s\""
+# msgstr "empoisonnement de la macro existente « %s »"
+# MR  9-jan 2004: poisoning etc... transformé par corruption corrompu etc..
+# MR 24-mai 2004: poison etc...suite au msg concernant le #pragma once et #pragma poison 
+#
+# Autres règles:
+#      - j'ai ajouté un adjectif par rapport à l'anglais si le message est
+#        une phrase avec verbe conjugé. 
+#      - ISO est considéré comme un adjectif dans « C ISO »
+#         
+# Erreurs corrigées:
+#      librairies, assumer
+#
+# A faire:
+#   - s/en ligne/en-ligne/  modifié 9-janv-2004 MR
+#   - s/en-ligne/enligne/  modifié 18-février-2004 MR pcq expression ou terme enlignage vs inlining
+#   - hors gamme  a été changé pour hors limite ...MR 09-jan-2004
+#   - literal
+#   - chaîne de format => formatage
+#   - scope
+#   - supporté est un faux ami
+#
+# A rapporter upstream:
+# <<<<<<<<
+# In c-opts.c, begining line 1732, a lot of options are of the kind:
+#    "  -W[no-]trigraphs          Warn if trigraphs are encountered\n"
+# I guess it would be better to change them all to something like
+#    "  -W[no-]trigraphs          Warn [or not] if trigraphs are encountered\n"
+#
+#
+# #: c-opts.c:1759
+# "  -MP\t\t\t    Generate phony targets for all headers\n"
+# you may want to change the \t to spaces, as it is done for the other lines.
+#
+# #: c-typeck.c:3166 c-typeck.c:4632 c-typeck.c:4648 c-typeck.c:4664
+# #: final.c:3146 final.c:3148 gcc.c:4397 rtl-error.c:122 toplev.c:1694
+# #: config/cris/cris.c:529 cp/typeck.c:4341 java/expr.c:364 java/verify.c:1467
+# #: java/verify.c:1468 java/verify.c:1483
+# #, c-format
+# msgid "%s"
+# msgstr "%s"
+#
+# Are you sure you want to translate the messages in cfgrtl.c, or are they
+#  debugging informations ?
+#
+# You may want to use ngettext instead of putting (s) in text.
+# msgid "null character(s) preserved in literal"
+#
+# >>>>>>>>>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU cpplib 4.0.0\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2005-06-12 08:00-0500\n"
+"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "conversion de %s vers %s n'est pas supporté par iconv"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "pas d'implantation iconv, ne peut convertir de %s vers %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "caractère 0x%lx n'est pas dans le jeu de caractères de base\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "conversion vers un jeu d'exécution de caractères"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "caractère 0x%lx n'est pas unibyte dans le jeu de caractères d'exécution"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "noms de caractère universel sont seulement valides en C++ et C89"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "la signification de « \\%c » est différente en C traditionel"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+# FIXME
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "nom de caractère universel incomplet %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s n'est pas un caractère universel valide"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "« $ » dans un identificateur ou un nombre"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "caractère universel %.*s n'est pas valide dans un identificcateur"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "caractère universel %.*s n'est pas valide au début d'un identificcateur"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "conversion UCN vers le jeu source de caractères"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "conversion UCN vers le jeu d'exécution de caractères"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "la signification de « \\x » est différente en C traditionel"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x utilisé sans être suivi de chiffres en hexdécimal"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "séquence d'échappement hexadécimale hors limite"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "séquence d'échappement octale hors limite"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "la signification de « \\a » est différente en C traditionel"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "séquence d'échappement « \\%c » non conforme au standard ISO"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "séquence d'échappement « \\%c » inconnue"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "séquence d'échappement « \\%c » inconnue"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "conversion d'une séquence d'échappement vers un jeu d'exécution de caractères"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "constante caractère trop longue pour son type"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "constante caractère multi-caractères"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "constante caractère vide"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "échec de conversion de %s vers %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "éléments lexicaux superflus à la fin de la directive #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s est une extension GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "il est suggéré de ne pas utiliser #elif en C traditionnel"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "le C traditionel ignore la directive #%s si le caractère # est indenté"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "il est suggéré de cacher #%s au C traditionel en indentant le « # »"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "placer une directive dans les arguments d'une macro n'est pas portable"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "la directive de style de ligne est extension GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "directive de pré-traitement #%s invalide"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "« defined » ne peut être utilisé comme nom de macro"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "« %s » ne peut être utilisé comme nom de macro car c'est un opérateur en C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "aucun nom de macro donné dans la directive #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "les noms de macro doivent être des identificateurs"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "indéfinition de « %s »"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "caractère > de terminaison manquant"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s attend \"NOM_DE_FICHIER\" ou <NOM_DE_FICHIER>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "nom de fichier vide dans #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include imbriqué trop profondément"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next dans un fichier source primaire"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "fanion « %s » invalide dans la ligne de directive"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "« %s » après #line n'est pas un nombre entier positif"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "numéro de ligne hors limite"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "« %s » n'est pas un nom de fichier valide"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "« %s » après # n'est pas un nombre entier positif"
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "directive #ident invalide"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+# FIXME
+#: directives.c:1098
+#, fuzzy, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "enregistrement de \"%s\" à la fois comme une pragma et un espace de nom de pragma"
+
+# FIXME
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "enregistrement de \"%s\" à la fois comme une pragma et un espace de nom de pragma"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "la #pragma %s %s est déjà enregistrée"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "la #pragma %s est déjà enregistrée"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+# FIXME
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once utilisée une seule fois dans le fichier principal"
+
+# FIXME
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "la directive GCC #pragma poison est invalide"
+
+# FIXME
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "élimination de la macro existente « %s »"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header ignorée en dehors du fichier d'inclusion"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "impossible de trouver le fichier source %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "le fichier courant est plus vieux que %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma prend une chaîne entourée de parenthèrese"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else sans #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else après #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "la condition débute ici"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif sans #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif après #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif sans #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "« ( » manquante après le prédicat"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "« ) » manquante pour completer la réponse"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "la réponse du prédicat est vide"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "assertion sans prédicat"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "le prédicat doit être un identificateur"
+
+# FIXME
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "« %s » re-asserti"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "#%s non terminé"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "commentaire non terminé"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "attention : "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "erreur interne : "
+
+#: errors.c:122
+msgid "error: "
+msgstr "erreur: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s : %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "trop de points décimaux dans le nombre"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "les constantes imaginaires sont une extension GCC"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "chiffre « %c » invalide dans la constante en base 8"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "chiffre « %c » invalide dans la constante en base 8"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "suffixe « %.*s » invalide pour une constante flottante"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "usage d'une constante hexadécimale constante à la C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "l'exposant n'a pas de chiffre"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "la contante hexadécimale flottante requière un exposant"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "suffixe « %.*s » invalide pour une constante flottante"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "le C traditionnel interdit le suffixe « %.*s »"
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "suffixe « %.*s » invalide pour une constante flottante"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "les constantes imaginaires sont une extension GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "suffixe « %.*s » invalide pour une constante entière"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "usage d'une constante entière « long long » à la C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "les constantes imaginaires sont une extension GCC"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "les constantes imaginaires sont une extension GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "constante entière trop grande pour tenir dans son type"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "cette constante entière est si grande qu'elle ne peut être signée"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "« ) » manquant après « defined »"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "l'opérateur « defined » requiert un identificateur"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(« %s » est un élément lexical alternatif pour « %s » en C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "cette utilisation de « defined » peut ne pas être portable"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "constante flottante dans une expresion pour le préprocesseur"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "constante complexe dans une expresion pour le préprocesseur"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "« %s » n'est pas défini"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "opérateur binaire manquant avant l'élément lexical « %s »"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "l'élément lexical « %s » n'est pas valide dans les expressions pour le préprocesseur"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "expression manquante entre '(' et ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if sans expression"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "l'opérateur « %s » n'a pas d'opérande droite"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "opérateur « %s » n'a pas d'opérande gauche"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr "« : » n'est pas précédé de « ? »"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "pile non balancée dans #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "opérateur impossible « %u »"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "« ) » manquante dans l'expresion"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "« ? » n'est pas suivi de « : »"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "débordement d'entier dans l'expresion pour le préprocesseur"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "« ( » manquante dans l'expresion"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "L'opérande gauche de « %s » change de signe lors de sa promotion"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "L'opérande droite de « %s » change de signe lors de sa promotion"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "le C traditionnel rejette le plus unaire"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "opérateur virgule dans l'opérande de #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "division par zéro dans #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "répertoire NUL dans find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "un ou plusieurs fichiers PCH ont été repérés, mais ils étaient invalides"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "utiliser -Winvalid-pch pour plus d'informations"
+
+# FIXME
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s est un périphérique de blocs"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s est trop grand"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s est plus petit que prévu"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "aucun chemin d'inclusion dans lequel on pourrait repérer %s"
+
+# FIXME
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "De multiples balises pour les inclusions peuvent être utiles pour:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t doit être d'un type non signé"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "l'arithmétique du préprocesseur a une précision maximale de %lu bits ; la cible requière %lu bits"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "l'arithmétique de CPP doit être au moins aussi précise que le type int de la cible"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "sur la cible, « char » fait moins de 8 bits"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "sur la cible, « wchar_t » est plus petit que « char »"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "sur la cible, « int » est plus petit que « char »"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "les demi-entiers de CPP sont plus petit que les caractères de CPP"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP sur cette machine ne peut gérer les constantes larges de caractères de plus de %lu bits, mais la cible requière %lu bits"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "« \\ » et retour de chariot séparés par un blanc"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "« \\ » en fin de ligne à la fin du fichier"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigraphe ??%c converti en %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "trigraphe ??%c ignoré, utilisez -trigraphs pour le permettre"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "« /* » à l'intérieur d'un commentaire"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s dans la directive du préprocesseur"
+
+# I18N
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "caractère(s) nul(s) ignoré(s)"
+
+#: lex.c:460
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "« %s » n'est pas un canevas"
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "« %s » n'est pas un canevas"
+
+# FIXME
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "tentative d'utilisation d'un « %s » corrompu"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "« __VA_ARGS__ » peut seulement appraître dans l'expansion des macros C99 à nombre variable d'arguments"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "caractère(s) nul préservé(s) dans la chaîne"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "caractère %c de terminaison manquant"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "Les commentaires à la C++ ne sont pas permis en C89 ISO"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(ceci sera rapporté une seule fois seulement par fichier d'entrée)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "commentaire multi-lignes"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "l'élément lexical %s ne peut être épelé"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "Dans le fichier inclus à partir de %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"          à partir de %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "la macro « %s » n'est pas utilisée"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "macro interne invalide « %s »"
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "ne peut déterminer la date et l'heure"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "ne peut déterminer la date et l'heure"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "chaîne invalide,  « \\ » final ignoré"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "le collage de « %s » et de « %s » ne donne pas d'élément lexical de pré-traitement valide"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 requiert que tous les arguments soient utilisés"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "macro « %s » requiert %u arguments, mais seulement %u ont été passés"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "la macro « %s » a reçu %u arguments, mais elle n'en prend que %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "liste d'arguments non terminée invoquant la macro « %s »"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "la macro « %s » ressemblant à une fonction doit utilisée avec des arguments en C traditionnel"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "paramètre de macro « %s » en double"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "« %s » peut ne pas apparaître parmi les paramètres de macros"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "les paramètres de macro doivent être séparés par des virgules"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "nom de paramètre manquant"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "les macros anonymes à nombre variable d'arguments ont été introduites avec le C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C ne permet pas les macros nommées à nombre variable d'arguments"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "« ) » manquante dans la liste des paramètres de macros"
+
+# FIXME
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "« ## » ne peut apparaître à chacune des fins de l'expansion de macros"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 requiert un blanc après le nom de la macro"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "blanc d'espacement manquant après le nom de la macro"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "« # » n'est pas suivi d'un paramètre de macro"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "« %s » redéfini"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "ceci est la localisation d'une précédente définition"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "l'argument macro « %s » serait changé en chaine en C traditionnel"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "type de hachage %d invalide dans cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "lors de l'écriture de l'en-tête pré-compilée"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: n'est pas utilisé parce que « %.*s » n'est pas définie"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: n'est pas utilisé parce que « %.*s » est défini en tant « %s » et non pas « %.*s »"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: non utilisé parce que « %s » est défini"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: non utilisé parce que « %s » est défini"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "lors de la lecture de l'en-tête pré-compilée"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "récursion détectée lors de l'expansion de la macro « %s »"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "erreur de syntaxe dans la liste de paramètres macro"
+
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "séquence d'échappement « \\%03o » inconnue"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "pas de retour chariot à la fin du fichier"
+
+#~ msgid "`%s' attribute directive ignored"
+#~ msgstr "attribut de directive « %s » ignoré"
+
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "nombre erroné d'arguments spécifié pour l'attribut « %s »"
+
+#~ msgid "`%s' attribute does not apply to types"
+#~ msgstr "l'attribut « %s » ne s'applique pas aux types"
+
+#~ msgid "`%s' attribute only applies to function types"
+#~ msgstr "l'attribut « %s » ne s'applique qu'à des types de fonction"
+
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "attribut « %s » ignoré"
+
+#~ msgid "offset outside bounds of constant string"
+#~ msgstr "décalage hors des limites d'une chaîne de constante"
+
+#~ msgid "second arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "second argument de « __builtin_prefetch » doit être une constante"
+
+#~ msgid "invalid second arg to __builtin_prefetch; using zero"
+#~ msgstr "second argument invalide de « __builtin_prefetch »; utilisation de zéro"
+
+#~ msgid "third arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "troisième argument de « __builtin_prefetch » doit être une constante"
+
+#~ msgid "invalid third arg to __builtin_prefetch; using zero"
+#~ msgstr "troisième argument invalide de « __builtin_prefetch »; utilisation de zéro"
+
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "argument de « __builtin_args_info » doit être une constante"
+
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "argument de « __builtin_args_info » hors des limites"
+
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "argument manquant dans « __builtin_args_info »"
+
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr "« va_start » utilisé dans une fonction ayant des arguments fixes"
+
+#~ msgid "second parameter of `va_start' not last named argument"
+#~ msgstr "second paramètre de « va_start » n'est pas le dernier argument nommé"
+
+#~ msgid "`__builtin_next_arg' called without an argument"
+#~ msgstr "« __builtin_next_arg » appelé sans argument"
+
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "trop d'arguments pour la function « va_start »"
+
+#~ msgid "first argument to `va_arg' not of type `va_list'"
+#~ msgstr "premier argument de « va_arg » n'est pas de type « va_list »"
+
+#~ msgid "`%s' is promoted to `%s' when passed through `...'"
+#~ msgstr "« %s » a été promu à « %s » lors du passage à travers « ... »"
+
+#~ msgid "(so you should pass `%s' not `%s' to `va_arg')"
+#~ msgstr "(vous devriez donc passer « %s » et non « %s » à « va_arg »)"
+
+#~ msgid "if this code is reached, the program will abort"
+#~ msgstr "si ce code est atteint, le programme s'arrêtera"
+
+#~ msgid "invalid arg to `__builtin_frame_address'"
+#~ msgstr "argument de « __builtin_frame_address » invalide"
+
+#~ msgid "invalid arg to `__builtin_return_address'"
+#~ msgstr "argument de « __builtin_return_address » invalide"
+
+#~ msgid "unsupported arg to `__builtin_frame_address'"
+#~ msgstr "argument de « __builtin_frame_address » non supporté"
+
+#~ msgid "unsupported arg to `__builtin_return_address'"
+#~ msgstr "argument de « __builtin_return_address » non supporté"
+
+#~ msgid "second arg to `__builtin_expect' must be a constant"
+#~ msgstr "le second argument de « __builtin_expect » doit être une constante"
+
+#~ msgid "__builtin_longjmp second argument must be 1"
+#~ msgstr "le second argument de « __builtin_longjmp » doit être 1"
+
+#~ msgid "built-in function `%s' not currently supported"
+#~ msgstr "fonction interne « %s » n'est pas actuellement supportée"
+
+#~ msgid "target format does not support infinity"
+#~ msgstr "le format cible ne supporte pas l'infini"
+
+#~ msgid "%Hsuggest explicit braces to avoid ambiguous `else'"
+#~ msgstr "%Hon vous suggère des accolades explicitement pour éviter des « else » ambiguës"
+
+#~ msgid "%J'%D' is not defined outside of function scope"
+#~ msgstr "%J« %D » n'est pas défini à l'extérieur de la portée de la fonction"
+
+#~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support"
+#~ msgstr "longueur de la chaîne « %d » plus grande que la longueur « %d » que les compilateurs ISO C%d doivent supporter"
+
+#~ msgid "overflow in constant expression"
+#~ msgstr "débordement dans l'expression de la constante"
+
+#~ msgid "integer overflow in expression"
+#~ msgstr "débordement d'entier dans l'expression"
+
+#~ msgid "floating point overflow in expression"
+#~ msgstr "débordement d'un nombre en virgule flottante dans l'expression"
+
+#~ msgid "vector overflow in expression"
+#~ msgstr "débordement du vecteur dans l'expression"
+
+#~ msgid "large integer implicitly truncated to unsigned type"
+#~ msgstr "grand entier implicitement tronqué pour un type non signé"
+
+#~ msgid "negative integer implicitly converted to unsigned type"
+#~ msgstr "entier négatif implicitement converti en un type non signé"
+
+#~ msgid "overflow in implicit constant conversion"
+#~ msgstr "débordement dans la conversion implicte de la constante"
+
+#~ msgid "operation on `%s' may be undefined"
+#~ msgstr "l'opération portant sur « %s » est peut être indéfinie"
+
+#~ msgid "expression statement has incomplete type"
+#~ msgstr "la déclaration de l'expression a un type incomplet"
+
+#~ msgid "case label does not reduce to an integer constant"
+#~ msgstr "l'étiquette du « case » ne se réduit pas en une constante entière"
+
+#~ msgid "invalid truth-value expression"
+#~ msgstr "expression valeur de vérité invalide"
+
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "opérandes invalides pour le binaire %s"
+
+#~ msgid "comparison is always false due to limited range of data type"
+#~ msgstr "comparaison est toujours fausse en raison d'une gamme limitée de type de données"
+
+#~ msgid "comparison is always true due to limited range of data type"
+#~ msgstr "comparaison est toujours vraie en raison d'une gamme limitée de type de données"
+
+#~ msgid "comparison of unsigned expression >= 0 is always true"
+#~ msgstr "comparaison d'une expression non signée >=0 est toujours vraie"
+
+#~ msgid "comparison of unsigned expression < 0 is always false"
+#~ msgstr "comparaison d'une expression non signée < 0 est toujours fausse"
+
+#~ msgid "pointer of type `void *' used in arithmetic"
+#~ msgstr "usage en arithmétique d'un pointeur de type « void * »"
+
+#~ msgid "pointer to a function used in arithmetic"
+#~ msgstr "usage en arithmétique d'un pointeur vers une fonction"
+
+#~ msgid "pointer to member function used in arithmetic"
+#~ msgstr "usage en arithmétique d'un pointeur vers une fonction membre"
+
+#~ msgid "struct type value used where scalar is required"
+#~ msgstr "valeur de type « struct » utilisé là où un scalaire est attendu"
+
+#~ msgid "union type value used where scalar is required"
+#~ msgstr "valeur de type « union » utilisé là où un scalaire est attendu"
+
+#~ msgid "array type value used where scalar is required"
+#~ msgstr "valeur de type « array » utilisé là où un scalaire est attendu"
+
+#~ msgid "the address of `%D', will always evaluate as `true'"
+#~ msgstr "l'adresse de « %D » sera toujours évaluée comme étant « true »"
+
+#~ msgid "suggest parentheses around assignment used as truth value"
+#~ msgstr "parenthèses suggérées autour de l'affectation utilisée comme valeur de vérité"
+
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "usage de « restrict » invalide"
+
+#~ msgid "invalid application of `sizeof' to a function type"
+#~ msgstr "application de « sizeof » sur un type de fonction invalide"
+
+#~ msgid "invalid application of `%s' to a void type"
+#~ msgstr "application invalide de « %s » sur un type void"
+
+#~ msgid "invalid application of `%s' to an incomplete type"
+#~ msgstr "application invalide de « %s » sur un type incomplet"
+
+#~ msgid "`__alignof' applied to a bit-field"
+#~ msgstr "« __alignof » appliqué sur un champ de bits"
+
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "ne peut désactiver la fonction interne « %s »"
+
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "pas assez d'arguments pour la fonction « %s »"
+
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "trop d'arguments pour la fonction « %s »"
+
+#~ msgid "non-floating-point argument to function `%s'"
+#~ msgstr "argument pour la fonction « %s » n'étant pas en virgule flottante"
+
+#~ msgid "pointers are not permitted as case values"
+#~ msgstr "les pointeurs ne sont pas permis comme valeurs de « case »"
+
+#~ msgid "range expressions in switch statements are non-standard"
+#~ msgstr "l'étendue des expressions dans les déclarations switch ne sont pas standard"
+
+#~ msgid "empty range specified"
+#~ msgstr "intervalle vide spécifié"
+
+#~ msgid "duplicate (or overlapping) case value"
+#~ msgstr "valeur du « case » duppliquée (ou en chevauchant une autre)"
+
+#~ msgid "%Jthis is the first entry overlapping that value"
+#~ msgstr "%Jest la première entrée chevauchant cette valeur"
+
+#~ msgid "duplicate case value"
+#~ msgstr "valeur du « case » duppliquée"
+
+#~ msgid "%Jpreviously used here"
+#~ msgstr "%Jprécédemment utilisé ici"
+
+#~ msgid "multiple default labels in one switch"
+#~ msgstr "plusieurs étiquettes par défaut dans un « switch »"
+
+#~ msgid "%Jthis is the first default label"
+#~ msgstr "%Jest la première étiquette par défaut"
+
+#~ msgid "taking the address of a label is non-standard"
+#~ msgstr "prendre l'adresse d'une étiquette n'est pas standard"
+
+#~ msgid "%Hignoring return value of `%D', declared with attribute warn_unused_result"
+#~ msgstr "%Hvaleur à retourner « %D » ignorée, déclarée avec l'attribut warn_unused_result"
+
+#~ msgid "%Hignoring return value of function declared with attribute warn_unused_result"
+#~ msgstr "%Hvaleur à retourner ignorée de la fonction déclarée avec l'attribut warn_unused_result"
+
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "mode machine « %s » inconnu"
+
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "aucun type de données pour le mode « %s »"
+
+#~ msgid "invalid pointer mode `%s'"
+#~ msgstr "mode pointeur invalide « %s »"
+
+#~ msgid "unable to emulate '%s'"
+#~ msgstr "impossible d'émuler « %s »"
+
+#~ msgid "%Jsection attribute cannot be specified for local variables"
+#~ msgstr "%Jl'attribut de section ne peut être spécifié pour des variables locales"
+
+#~ msgid "%Jsection of '%D' conflicts with previous declaration"
+#~ msgstr "%Jsection de « %D » en conflit avec une déclaration précédente"
+
+#~ msgid "%Jsection attribute not allowed for '%D'"
+#~ msgstr "%Jattribut de section n'est pas permis pour « %D »"
+
+#~ msgid "%Jsection attributes are not supported for this target"
+#~ msgstr "%Jattributs de section ne sont pas supportés pour la cible"
+
+#~ msgid "requested alignment is not a constant"
+#~ msgstr "l'alignement demandé n'est pas une constante"
+
+#~ msgid "requested alignment is not a power of 2"
+#~ msgstr "l'alignement demandé n'est pas une puissance de 2"
+
+#~ msgid "requested alignment is too large"
+#~ msgstr "l'alignement demandé est trop grand"
+
+#~ msgid "%Jalignment may not be specified for '%D'"
+#~ msgstr "%Jl'alignement ne peut pas être spécifié pour « %D »"
+
+#~ msgid "%J'%D' defined both normally and as an alias"
+#~ msgstr "%J'%D défini à la fois normalement et en tant qu'alias"
+
+#~ msgid "alias arg not a string"
+#~ msgstr "l'argument d'alias n'est pas une chaîne"
+
+#~ msgid "visibility arg not a string"
+#~ msgstr "l'argument de visibilité n'est pas une chaîne"
+
+#~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\""
+#~ msgstr "l'argument de visibilité doit être l'un de « default » (par défaut), « hidden » (masqué), « protected » (protégé) ou « internal » (interne)"
+
+#~ msgid "tls_model arg not a string"
+#~ msgstr "l'argument de tls_model n'est pas une chaîne"
+
+#~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\""
+#~ msgstr "l'argument de tls_model doit être l'un de « local-exec », « initial-exec », « local-dynamic » or « global-dynamic »"
+
+#~ msgid "%J'%E' attribute applies only to functions"
+#~ msgstr "%J'%E l'attribut ne s'applique seulement qu'à des fonctions"
+
+#~ msgid "%Jcan't set '%E' attribute after definition"
+#~ msgstr "%Jne peut initialiser l'attribut « %E » après définition"
+
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "attribut « %s » ignoré pour « %s »"
+
+#~ msgid "invalid vector type for attribute `%s'"
+#~ msgstr "type de vecteur invalide pour l'attribut « %s »"
+
+#~ msgid "no vector mode with the size and type specified could be found"
+#~ msgstr "aucun mode vecteur avec la taille et le type spécifié n'a été trouvé"
+
+#~ msgid "nonnull attribute without arguments on a non-prototype"
+#~ msgstr "attribut non nul sans argument sur un non-prototype"
+
+#~ msgid "nonnull argument has invalid operand number (arg %lu)"
+#~ msgstr "un argument non nul a un nombre d'opérande invalide (argument %lu)"
+
+#~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)"
+#~ msgstr "un argument non nul a un nombre d'opérande hors des bornes (arg %lu, opérande %lu)"
+
+#~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)"
+#~ msgstr "un argument non nul référence une opérande qui n'est pas un pointeur (arg %lu, opérande %lu)"
+
+#~ msgid "null argument where non-null required (arg %lu)"
+#~ msgstr "argument nul là où un non-nul est requis (arg %lu)"
+
+#~ msgid "cleanup arg not an identifier"
+#~ msgstr "argument de nettoyage n'est pas un identificateur"
+
+#~ msgid "cleanup arg not a function"
+#~ msgstr "argument de nettoyage n'est pas une fonction"
+
+#~ msgid "%s at end of input"
+#~ msgstr "%s à la fin de l'entrée"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s avant %s« %c »"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s avant %s'\\x%x'"
+
+#~ msgid "%s before string constant"
+#~ msgstr "%s avant une chaîne constante"
+
+#~ msgid "%s before numeric constant"
+#~ msgstr "%s avant une constante numérique"
+
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s avant « %s »"
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s avant un élément lexical « %s »"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "void value not ignored as it ought to be"
+#~ msgstr "valeur void n'a pas été ignorée comme elle aurait dû l'être"
+
+#~ msgid "conversion to non-scalar type requested"
+#~ msgstr "conversion vers un type non scalaire demandée"
+
+#~ msgid "%Jarray '%D' assumed to have one element"
+#~ msgstr "%Jon assume que le tableau « %D » n'a qu'un seul élément"
+
+#~ msgid "%Jlabel `%D' used but not defined"
+#~ msgstr "%Jétiquette « %D » utilisée mais non définie"
+
+#~ msgid "%Jlabel `%D' defined but not used"
+#~ msgstr "%Jétiquette « %D » définie mais non utilisée"
+
+#~ msgid "%Jlabel `%D' declared but not defined"
+#~ msgstr "%Jétiquette « %D » utilisée mais non définie"
+
+#~ msgid "%Junused variable `%D'"
+#~ msgstr "%Jvariable inutilisée « %D »"
+
+#~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration"
+#~ msgstr "un paramètre de la liste avec une ellipse ne peut concorder une déclaration vide de liste de noms de paramètres"
+
+#~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration"
+#~ msgstr "un type d'argument ayant une promotion par défaut ne peut concorder avec une déclaration vide de noms de paramètres"
+
+#~ msgid "%Jprototype for '%D' declares more arguments than previous old-style definition"
+#~ msgstr "%Jprototype pour « %D » déclare plus d'arguments que la définition précédente de style ancien"
+
+#~ msgid "%Jprototype for '%D' declares fewer arguments than previous old-style definition"
+#~ msgstr "%Jprototype pour « %D » déclare moins d'arguments que la définition précédente de style ancien"
+
+#~ msgid "%Jprototype for '%D' declares arg %d with incompatible type"
+#~ msgstr "%Jprototype pour « %D » déclare l'arguments %d avec un type incompatible"
+
+#~ msgid "%Jprototype for '%D' follows non-prototype definition"
+#~ msgstr "%Jprototype pour « %D » suit la définition d'un non prototype"
+
+#~ msgid "%Jprevious definition of '%D' was here"
+#~ msgstr "%Jdéfinition précédente de « %D » était ici"
+
+#~ msgid "%Jprevious implicit declaration of '%D' was here"
+#~ msgstr "%Jdéclaration précédente implicite de « %D » était ici"
+
+#~ msgid "%Jprevious declaration of '%D' was here"
+#~ msgstr "%Jdéclaration précédente de « %D » était ici"
+
+#~ msgid "%J'%D' redeclared as different kind of symbol"
+#~ msgstr "%J« %D » redéclaré comme une sorte différente de symbole"
+
+#~ msgid "%Jbuilt-in function '%D' declared as non-function"
+#~ msgstr "%Jfonction interne « %D » n'est pas déclarée comme une fonction"
+
+#~ msgid "%Jshadowing built-in function '%D'"
+#~ msgstr "%Jmasquage de la fonction interne « %D »"
+
+#~ msgid "%Jconflicting types for built-in function '%D'"
+#~ msgstr "%Jtypes conflictuels pour la fonction interne « %D »"
+
+#~ msgid "%Jconflicting types for '%D'"
+#~ msgstr "%Jtypes conflictuels pour « %D »"
+
+#~ msgid "%Jredefinition of typedef '%D'"
+#~ msgstr "%Jredéfinition de « %D »"
+
+#~ msgid "%Jredefinition of '%D'"
+#~ msgstr "%Jredéfinition de « %D »"
+
+#~ msgid "%Jstatic declaration of '%D' follows non-static declaration"
+#~ msgstr "%Jdéclaration statique de « %D » suit une déclaration non statique"
+
+#~ msgid "%Jnon-static declaration of '%D' follows static declaration"
+#~ msgstr "%Jdéclaration non statique de « %D » suite une déclaration statique"
+
+#~ msgid "%Jthread-local declaration of '%D' follows non-thread-local declaration"
+#~ msgstr "%Jdéclaration de thread local de « %D » suit une déclaration non thread-local"
+
+#~ msgid "%Jnon-thread-local declaration of '%D' follows thread-local declaration"
+#~ msgstr "%Jdéclaration non thread local de « %D » suit une déclaration de thread local"
+
+#~ msgid "%Jextern declaration of '%D' follows declaration with no linkage"
+#~ msgstr "%Jdéclaration externe de « %D » suit une déclaraion sans lien"
+
+#~ msgid "%Jdeclaration of '%D' with no linkage follows extern declaration"
+#~ msgstr "%Jdéclaration de « %D » sasn lien suivant une déclaration externe"
+
+#~ msgid "%Jredeclaration of '%D' with no linkage"
+#~ msgstr "%Jredéclaration de « %D » sans lien"
+
+#~ msgid "%Jredeclaration of '%D' with different visibility (old visibility preserved)"
+#~ msgstr "%Jredéclaration de « %D » avec une visibilité différente (visibilité précédente conservée)"
+
+#~ msgid "%Jinline declaration of '%D' follows declaration with attribute noinline"
+#~ msgstr "%Jdéclaration enligne de « %D » suit la déclaration avec un attribut non enligne"
+
+#~ msgid "%Jdeclaration of '%D' with attribute noinline follows inline declaration "
+#~ msgstr "%Jéclaration de « %D » avec un attribut non enligne suit une déclaration enligne"
+
+#~ msgid "%J'%D' declared inline after being called"
+#~ msgstr "%J« %D » déclaré enligne après avoir été appelé"
+
+#~ msgid "%J'%D' declared inline after its definition"
+#~ msgstr "%J« %D » déclaré enligne après sa définition"
+
+#~ msgid "%Jredefinition of parameter '%D'"
+#~ msgstr "%Jredéfinition du paramètre « %D »"
+
+#~ msgid "%Jvolatile declaration of '%D' follows non-volatile declaration"
+#~ msgstr "%Jdéclaration volatile de « %D » suit une déclaration non volatile"
+
+#~ msgid "%Jnon-volatile declaration of '%D' follows volatile declaration"
+#~ msgstr "%Jdéclaration non volatile de « %D » suit une déclaration volatile"
+
+#~ msgid "%Jconst declaration of '%D' follows non-const declaration"
+#~ msgstr "%Jdéclaration de constante de « %D » suit une déclaration de non constante"
+
+#~ msgid "%Jnon-const declaration of '%D' follows const declaration"
+#~ msgstr "%Jdéclaration de non constante de « %D » suit une déclaration de constante"
+
+#~ msgid "%Jredundant redeclaration of '%D'"
+#~ msgstr "%Jdéclaration redondante de « %D »"
+
+#~ msgid "%Jdeclaration of '%D' shadows a parameter"
+#~ msgstr "%Jdéclaration de « %D » masque un paramètre"
+
+#~ msgid "%Jdeclaration of '%D' shadows a global declaration"
+#~ msgstr "%Jdéclaration de « %D » masque une déclaration globale"
+
+#~ msgid "%Jdeclaration of '%D' shadows a previous local"
+#~ msgstr "%Jdéclaration de « %D » masque la déclaration d'un local précédent"
+
+#~ msgid "%Jshadowed declaration is here"
+#~ msgstr "%Jdéclaration est masquée ici"
+
+#~ msgid "nested extern declaration of `%s'"
+#~ msgstr "déclaration de « %s » externe imbriquée"
+
+#~ msgid "%Jprevious declaration of '%D'"
+#~ msgstr "%Jdéclaration précédente de « %D »"
+
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "déclaration implicite de la fonction « %s »"
+
+#~ msgid "`%s' undeclared here (not in a function)"
+#~ msgstr "« %s » non déclaré ici (hors de toute fonction)"
+
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "« %s » non déclaré (première utilisation dans cette fonction)"
+
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(Chaque identificateur non déclaré est rapporté une seule fois"
+
+#~ msgid "for each function it appears in.)"
+#~ msgstr "pour chaque fonction dans laquelle il apparaît.)"
+
+#~ msgid "label %s referenced outside of any function"
+#~ msgstr "étiquette %s référencée à l'extérieur de toute fonction"
+
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "déclaration de l'étiquette « %s » en double"
+
+#~ msgid "%Jthis is a previous declaration"
+#~ msgstr "%Jest la déclaration précédente"
+
+#~ msgid "%Hduplicate label `%D'"
+#~ msgstr "%Hétiquette « %D » apparaît en double"
+
+#~ msgid "%J`%D' previously defined here"
+#~ msgstr "%J« %D » précédemment défini ici"
+
+#~ msgid "%J`%D' previously declared here"
+#~ msgstr "%J« %D » précédemment déclaré ici"
+
+#~ msgid "%Htraditional C lacks a separate namespace for labels, identifier `%s' conflicts"
+#~ msgstr "%HC traditionnel manque d'un espace nom séparé pour les étiquettes, identificateur « %D » est en conflit"
+
+#~ msgid "%H`%s' defined as wrong kind of tag"
+#~ msgstr "%H« %s » défini incorrectement comme une mauvais sorte d'étiquette"
+
+#~ msgid "unnamed struct/union that defines no instances"
+#~ msgstr "struct/union sans nom ne définissant aucune instance"
+
+#~ msgid "useless keyword or type name in empty declaration"
+#~ msgstr "mot clé ou nom de type inutile dans une déclaration vide"
+
+#~ msgid "two types specified in one empty declaration"
+#~ msgstr "deux types spécifiés dans une déclaration vide"
+
+#~ msgid "empty declaration"
+#~ msgstr "déclaration vide"
+
+#~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators"
+#~ msgstr "ISO C90 ne supporte pas « static » ou les qualificateurs de type dans les déclarateurs de tableau de paramètres"
+
+#~ msgid "ISO C90 does not support `[*]' array declarators"
+#~ msgstr "ISO C90 ne supporte pas « [*] » dans les déclarateurs de tableau"
+
+#~ msgid "GCC does not yet properly implement `[*]' array declarators"
+#~ msgstr "GCC n'implémente pas encore correctement les déclarateurs de tableau « [*] »"
+
+#~ msgid "static or type qualifiers in abstract declarator"
+#~ msgstr "static ou qualificateurs de type dans un déclarateur abstrait"
+
+#~ msgid "%J'%D' is usually a function"
+#~ msgstr "%J« %D » est habituellement une fonction"
+
+#~ msgid "typedef `%s' is initialized (use __typeof__ instead)"
+#~ msgstr "typedef « %s » est initialisé (utilisez __typeof__ à la place)"
+
+#~ msgid "function `%s' is initialized like a variable"
+#~ msgstr "la fonction « %s » est initialisée comme une variable"
+
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "le paramètre « %s » est initialisé"
+
+#~ msgid "variable-sized object may not be initialized"
+#~ msgstr "un objet de taille variable peut ne pas être initialisé"
+
+#~ msgid "variable `%s' has initializer but incomplete type"
+#~ msgstr "la variable « %s » est initialisée alors qu'elle est de type incomplet"
+
+#~ msgid "elements of array `%s' have incomplete type"
+#~ msgstr "les éléments du tableau « %s » ont des types incomplets"
+
+#~ msgid "%Jinline function '%D' given attribute noinline"
+#~ msgstr "%J fonction enligne « %D » a reçu l'attribut non enligne"
+
+#~ msgid "%Jinitializer fails to determine size of '%D'"
+#~ msgstr "%Jinitialisateur a échoué à déterminer la taille de « %D »"
+
+#~ msgid "%Jarray size missing in '%D'"
+#~ msgstr "%Jtaille du tableau est manquante dans « %D »"
+
+#~ msgid "%Jzero or negative size array '%D'"
+#~ msgstr "%Jtableau « %D » de taille zéro ou négative"
+
+#~ msgid "%Jstorage size of '%D' isn't known"
+#~ msgstr "%Jtaille de stockage de « %D » n'est pas connue"
+
+#~ msgid "%Jstorage size of '%D' isn't constant"
+#~ msgstr "%Jtaille de stockage de « %D » n'est pas une constante"
+
+#~ msgid "%Jignoring asm-specifier for non-static local variable '%D'"
+#~ msgstr "%Jspécificateur asm ignoré pour la variable locale non statique « %D »"
+
+#~ msgid "ISO C forbids forward parameter declarations"
+#~ msgstr "ISO C interdit la déclaration anticipée de paramètres"
+
+#~ msgid "<anonymous>"
+#~ msgstr "<anonymous>"
+
+#~ msgid "bit-field `%s' width not an integer constant"
+#~ msgstr "la largeur du champ de bits « %s » n'est pas une constante entière"
+
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "largeur négative du champ de bits « %s »"
+
+#~ msgid "zero width for bit-field `%s'"
+#~ msgstr "largeur nulle pour le champ de bits « %s »"
+
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "le champ de bits « %s » a un type invalide"
+
+#~ msgid "type of bit-field `%s' is a GCC extension"
+#~ msgstr "le type de champ de bit « %s » est une extension GCC"
+
+#~ msgid "width of `%s' exceeds its type"
+#~ msgstr "la largeur de « %s » excède son type"
+
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "« %s » est plus étroit que les valeurs de son type"
+
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "« long long long » est trop long pour GCC"
+
+#~ msgid "ISO C90 does not support `long long'"
+#~ msgstr "ISO C90 ne permet pas « long long »"
+
+#~ msgid "duplicate `%s'"
+#~ msgstr "« %s » apparaît en double"
+
+#~ msgid "`__thread' before `extern'"
+#~ msgstr "« __thread » avant « extern »"
+
+#~ msgid "`__thread' before `static'"
+#~ msgstr "« __thread » avant « static »"
+
+#~ msgid "two or more data types in declaration of `%s'"
+#~ msgstr "deux types de données ou plus dans la déclaration de « %s »"
+
+#~ msgid "`%s' fails to be a typedef or built in type"
+#~ msgstr "« %s » n'a pu devenir un typedef ou un type construit"
+
+#~ msgid "type defaults to `int' in declaration of `%s'"
+#~ msgstr "dans la déclaration de « %s », utilisation de « int » par défaut pour le type"
+
+#~ msgid "both long and short specified for `%s'"
+#~ msgstr "« long » et « short » spécifiés à la fois pour « %s »"
+
+#~ msgid "long or short specified with char for `%s'"
+#~ msgstr "« long » ou « short » spécifié avec « char » pour « %s »"
+
+#~ msgid "long or short specified with floating type for `%s'"
+#~ msgstr "« long » ou « short » spécifié avec un type flottant pour « %s »"
+
+#~ msgid "the only valid combination is `long double'"
+#~ msgstr "la seule combinaison valide est « long double »"
+
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "« %s » est à la fois signé et non signé"
+
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "« long », « short », « signed » ou « unsigned » invalide pour « %s »"
+
+#~ msgid "long, short, signed or unsigned used invalidly for `%s'"
+#~ msgstr "« long », « short », « signed » ou « unsigned » utilisé incorrectement pour « %s »"
+
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "« complex » invalide pour « %s »"
+
+#~ msgid "ISO C90 does not support complex types"
+#~ msgstr "ISO C90 ne permet pas les types « complex »"
+
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "ISO C ne permet pas d'utiliser « complex » à la place de « double complex »"
+
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "ISO C interdit le type d'entiers complexes"
+
+#~ msgid "duplicate `const'"
+#~ msgstr "« const » apparaît en double"
+
+#~ msgid "duplicate `restrict'"
+#~ msgstr "« restrict » apparaît en double"
+
+#~ msgid "duplicate `volatile'"
+#~ msgstr "« volatile » apparaît en double"
+
+#~ msgid "multiple storage classes in declaration of `%s'"
+#~ msgstr "multiples classes de stockage dans la déclaration de « %s »"
+
+#~ msgid "function definition declared `auto'"
+#~ msgstr "définition de fonction déclaré « auto »"
+
+#~ msgid "function definition declared `register'"
+#~ msgstr "définition de fonction déclarée « register »"
+
+#~ msgid "function definition declared `typedef'"
+#~ msgstr "définition de fonction déclarée « typedef »"
+
+#~ msgid "function definition declared `__thread'"
+#~ msgstr "définition de fonction déclarée « __thread »"
+
+#~ msgid "storage class specified for structure field `%s'"
+#~ msgstr "classe de stockage spécifiée pour le champ de structure « %s »"
+
+#~ msgid "storage class specified for parameter `%s'"
+#~ msgstr "classe de stockage spécifiée pour le paramètre « %s »"
+
+#~ msgid "storage class specified for typename"
+#~ msgstr "classe de stockage spécifié pour un typename"
+
+#~ msgid "`%s' initialized and declared `extern'"
+#~ msgstr "« %s » initialisé et déclaré « extern »"
+
+#~ msgid "`%s' has both `extern' and initializer"
+#~ msgstr "« %s » a les deux « extern » et initialisateur"
+
+#~ msgid "file-scope declaration of `%s' specifies `auto'"
+#~ msgstr "la déclaration de l'étendue de fichier « %s » spécifie « auto »"
+
+#~ msgid "nested function `%s' declared `extern'"
+#~ msgstr "fonction imbriquée « %s » déclarée « extern »"
+
+#~ msgid "function-scope `%s' implicitly auto and declared `__thread'"
+#~ msgstr "« %s » dans le champ de la fonction est implicitement déclaré auto, et déclaré « __thread »"
+
+#~ msgid "static or type qualifiers in non-parameter array declarator"
+#~ msgstr "static ou qualificateurs de type dans un déclarateur de tableau n'étant pas un paramètre"
+
+#~ msgid "declaration of `%s' as array of voids"
+#~ msgstr "déclaration de « %s » comme un tableau de « void »"
+
+#~ msgid "declaration of `%s' as array of functions"
+#~ msgstr "déclaration de « %s » comme un tableau de fonctions"
+
+#~ msgid "invalid use of structure with flexible array member"
+#~ msgstr "utilisation invalide d'une structure ayant un membre flexible"
+
+#~ msgid "size of array `%s' has non-integer type"
+#~ msgstr "la taille du tableau « %s » n'est pas de type entier"
+
+#~ msgid "ISO C forbids zero-size array `%s'"
+#~ msgstr "ISO C interdit le tableau de taille zéro « %s »"
+
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "la taille du tableau « %s » est négative"
+
+#~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated"
+#~ msgstr "ISO C90 interdit le tableau « %s » dont la taille ne peut être évaluée"
+
+#~ msgid "ISO C90 forbids variable-size array `%s'"
+#~ msgstr "ISO C90 interdit le tableau « %s » de taille variable"
+
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "la taille du tableau « %s » est trop grande"
+
+#~ msgid "ISO C90 does not support flexible array members"
+#~ msgstr "ISO C90 interdit les tableaux ayant des membres flexibles"
+
+#~ msgid "array type has incomplete element type"
+#~ msgstr "les éléments du tableau sont de type incomplet"
+
+#~ msgid "`%s' declared as function returning a function"
+#~ msgstr "« %s » déclaré comme une fonction retournant une fonction"
+
+#~ msgid "`%s' declared as function returning an array"
+#~ msgstr "« %s » déclaré comme une fonction retournant un tableau"
+
+#~ msgid "ISO C forbids qualified void function return type"
+#~ msgstr "ISO C interdit d'utiliser un void qualifié en valeur à retourner par la fonction"
+
+#~ msgid "type qualifiers ignored on function return type"
+#~ msgstr "qualificateurs de type ignorés pour le type à retourner par la fonction"
+
+#~ msgid "ISO C forbids qualified function types"
+#~ msgstr "ISO C interdit les types de fonction qualifiés"
+
+#~ msgid "invalid type modifier within pointer declarator"
+#~ msgstr "modificateur de type invalide dans la déclaration de pointeur"
+
+#~ msgid "ISO C forbids const or volatile function types"
+#~ msgstr "ISO C interdit les fonction de type volatile ou constante"
+
+#~ msgid "variable or field `%s' declared void"
+#~ msgstr "variable ou champ « %s » déclaré « void »"
+
+#~ msgid "attributes in parameter array declarator ignored"
+#~ msgstr "les attributs dans un déclarateur de tableau de paramètres sont ignorés"
+
+#~ msgid "invalid type modifier within array declarator"
+#~ msgstr "modificateur invalide de type à l'intérieur d'un déclarateur de tableau"
+
+#~ msgid "field `%s' declared as a function"
+#~ msgstr "champ « %s » déclaré comme une fonction"
+
+#~ msgid "field `%s' has incomplete type"
+#~ msgstr "champ « %s » est de type incomplet"
+
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "classe de stockage invalide pour la fonction « %s »"
+
+#~ msgid "`noreturn' function returns non-void value"
+#~ msgstr "fonction marquée « noreturn » retourne une valeur n'étant pas de type « void »"
+
+#~ msgid "cannot inline function `main'"
+#~ msgstr "ne peut transformer « main » en fonction enligne"
+
+#~ msgid "variable previously declared `static' redeclared `extern'"
+#~ msgstr "variable précédemment déclarée « static » redéclarée « extern »"
+
+#~ msgid "%Jvariable '%D' declared `inline'"
+#~ msgstr "%Jvariable « %D » déclarée « inline »"
+
+#~ msgid "thread-local storage not supported for this target"
+#~ msgstr "cette cible ne permet pas le stockage en local au thread"
+
+#~ msgid "function declaration isn't a prototype"
+#~ msgstr "la déclaration de fonction n'est pas un prototype valide"
+
+#~ msgid "parameter names (without types) in function declaration"
+#~ msgstr "noms de paramètres (sans type) dans la déclaration de fonction"
+
+#~ msgid "parameter `%s' has incomplete type"
+#~ msgstr "le paramètre « %s » a un type incomplet"
+
+#~ msgid "parameter has incomplete type"
+#~ msgstr "le paramètre a un type incomplet"
+
+#~ msgid "\"void\" as only parameter may not be qualified"
+#~ msgstr "\"void\" comme seul paramètre ne peut être qualifié"
+
+#~ msgid "\"void\" must be the only parameter"
+#~ msgstr "\"void\" doit être le seul paramètre"
+
+#~ msgid "%Jparameter \"%D\" has just a forward declaration"
+#~ msgstr "%Jparamètre « %D » n'a qu'une déclaration anticipée"
+
+#~ msgid "\"%s %s\" declared inside parameter list"
+#~ msgstr "\"%s %s\" déclarée à l'intérieur de la liste de paramètres"
+
+#~ msgid "anonymous %s declared inside parameter list"
+#~ msgstr "structure anonyme %s déclarée à l'intérieur de la liste des paramètres"
+
+#~ msgid "its scope is only this definition or declaration, which is probably not what you want"
+#~ msgstr "visible uniquement depuis cette définition ou déclaration, ce qui n'est probablement pas ce que vous désirez"
+
+#~ msgid "redefinition of `union %s'"
+#~ msgstr "redéfinition de « union %s »"
+
+#~ msgid "redefinition of `struct %s'"
+#~ msgstr "redéfinition de « struct %s »"
+
+#~ msgid "declaration does not declare anything"
+#~ msgstr "déclaration ne déclarant rien du tout"
+
+#~ msgid "%Jduplicate member '%D'"
+#~ msgstr "%Jmembre « %D » est double"
+
+#~ msgid "%s defined inside parms"
+#~ msgstr "%s défini à l'intérieur des paramètres"
+
+#~ msgid "union"
+#~ msgstr "union"
+
+#~ msgid "structure"
+#~ msgstr "structure"
+
+#~ msgid "%s has no %s"
+#~ msgstr "%s n'a pas de %s"
+
+#~ msgid "struct"
+#~ msgstr "struct"
+
+#~ msgid "named members"
+#~ msgstr "membres nommés"
+
+#~ msgid "members"
+#~ msgstr "membres"
+
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "redéfinition imbriquée de « %s »"
+
+#~ msgid "%Jflexible array member in union"
+#~ msgstr "%Jmembre flexible de tableau dans l'union"
+
+#~ msgid "%Jflexible array member not at end of struct"
+#~ msgstr "%Jle membre flexible de tableau n'est pas à la fin de la structure"
+
+#~ msgid "%Jflexible array member in otherwise empty struct"
+#~ msgstr "%Jmembre flexible de tableau dans une structure vide par ailleurs"
+
+#~ msgid "%Jinvalid use of structure with flexible array member"
+#~ msgstr "%Jutilisation invalide d'une structure ayant un membre flexible"
+
+#~ msgid "union cannot be made transparent"
+#~ msgstr "union ne peut pas être rendu transparente"
+
+#~ msgid "redeclaration of `enum %s'"
+#~ msgstr "redéclaration de « enum %s »"
+
+#~ msgid "enum defined inside parms"
+#~ msgstr "enum défini à l'intérieur des paramètres"
+
+#~ msgid "enumeration values exceed range of largest integer"
+#~ msgstr "valeurs d'énumération excède les bornes du plus grand entier"
+
+#~ msgid "enumerator value for `%s' not integer constant"
+#~ msgstr "valeur de l'énumérateur pour « %s » n'est pas une constante entière"
+
+#~ msgid "overflow in enumeration values"
+#~ msgstr "débordement dans les valeurs de l'énumération"
+
+#~ msgid "ISO C restricts enumerator values to range of `int'"
+#~ msgstr "ISO C restreint les valeurs de l'énumérateur aux bornes d'un « int »"
+
+#~ msgid "return type is an incomplete type"
+#~ msgstr "le type du retour est incomplet"
+
+#~ msgid "return type defaults to `int'"
+#~ msgstr "le type du retour est « int » par défaut"
+
+#~ msgid "%Jno previous prototype for '%D'"
+#~ msgstr "%Jaucun prototype précédent pour « %D »"
+
+#~ msgid "%J'%D' was used with no prototype before its definition"
+#~ msgstr "%J« %D » a été utilisé sans prototype avant sa définition"
+
+#~ msgid "%Jno previous declaration for '%D'"
+#~ msgstr "%Jaucune déclaration précédente pour « %D »"
+
+#~ msgid "%J`%D' was used with no declaration before its definition"
+#~ msgstr "%J« %D » a été utilisé sans déclaration avant sa définition"
+
+#~ msgid "%Jreturn type of '%D' is not `int'"
+#~ msgstr "%Jle type de retour de « %D » n'est pas « int »"
+
+#~ msgid "%Jfirst argument of '%D' should be `int'"
+#~ msgstr "%Jle premier argument de « %D » devrait être « int »"
+
+#~ msgid "%Jsecond argument of '%D' should be 'char **'"
+#~ msgstr "%Jle second argument de « %D » devrait être « char ** »"
+
+#~ msgid "%Jthird argument of '%D' should probably be 'char **'"
+#~ msgstr "%Jle troisième argument de « %D » devrait probablement être « char ** »"
+
+#~ msgid "%J'%D' takes only zero or two arguments"
+#~ msgstr "%J« %D » prend soit aucun argument ou soit deux arguments"
+
+#~ msgid "%J'%D' is normally a non-static function"
+#~ msgstr "%J« %D » n'est pas normalement une fonction statique"
+
+#~ msgid "%Jold-style parameter declarations in prototyped function definition"
+#~ msgstr "%Jdéclaration de paramètre d'ancien style dans la définition prototypée de fonction"
+
+#~ msgid "%Jparameter name omitted"
+#~ msgstr "%Jnom de paramètre omis"
+
+#~ msgid "%Jparameter name missing from parameter list"
+#~ msgstr "%Jnom du paramètre manquant dans la liste des paramètres"
+
+#~ msgid "%J\"%D\" declared as a non-parameter"
+#~ msgstr "%J\"%D\" déclaré comme un non paramètre"
+
+#~ msgid "%Jmultiple parameters named \"%D\""
+#~ msgstr "%Jplusieurs paramètres nommés « %D »"
+
+#~ msgid "%Jparameter \"%D\" declared void"
+#~ msgstr "%Jparamètre \"%D\" déclaré «void »"
+
+#~ msgid "%Jtype of \"%D\" defaults to \"int\""
+#~ msgstr "%Jtype de « %D » est « int » par défaut"
+
+#~ msgid "%Jparameter \"%D\" has incomplete type"
+#~ msgstr "%Jparamètre \"%D\" a un type incomplet"
+
+#~ msgid "%Jdeclaration for parameter \"%D\" but no such parameter"
+#~ msgstr "%Jdéclaration du paramètre « %D » mais pas de tel paramètre"
+
+#~ msgid "number of arguments doesn't match prototype"
+#~ msgstr "le nombre d'arguments ne concorde pas avec celui du prototype"
+
+#~ msgid "%Hprototype declaration"
+#~ msgstr "%Hdéclaration de prototype"
+
+#~ msgid "promoted argument \"%D\" doesn't match prototype"
+#~ msgstr "argument promu \"%D\" ne concorde pas avec le prototype"
+
+#~ msgid "argument \"%D\" doesn't match prototype"
+#~ msgstr "argument \"%D\" ne concorde pas avec le prototype"
+
+#~ msgid "no return statement in function returning non-void"
+#~ msgstr "« return » manquant dans une fonction devant retourner une valeur"
+
+#~ msgid "this function may return with or without a value"
+#~ msgstr "cette fonction devrait finir en retournant ou non une valeur"
+
+#~ msgid "'for' loop initial declaration used outside C99 mode"
+#~ msgstr "déclaration initiale de la boucle « for » utilisée en dehors du mode C99"
+
+#~ msgid "'struct %s' declared in 'for' loop initial declaration"
+#~ msgstr "« struct %s » déclarée dans la déclaration initiale de la boucle « for »"
+
+#~ msgid "'union %s' declared in 'for' loop initial declaration"
+#~ msgstr "« union %s » déclarée dans la déclaration initiale de la boucle « for »"
+
+#~ msgid "'enum %s' declared in 'for' loop initial declaration"
+#~ msgstr "« enum %s » déclarée dans la déclaration initiale de la boucle « for »"
+
+#~ msgid "%Jdeclaration of non-variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%Jdéclaration de « %D » (qui n'est pas une variable) dans la déclaration initiale de « for »"
+
+#~ msgid "%Jdeclaration of static variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%Jdéclaration de la variable statique « %D » dans la déclaration initiale de la boucle « for »"
+
+#~ msgid "%Jdeclaration of 'extern' variable '%D' in 'for' loop initial declaration"
+#~ msgstr "%Jdéclaration de la variable externe « %D » dans la déclaration initiale « for »"
+
+#~ msgid "%Jredefinition of global '%D'"
+#~ msgstr "%Jredéfinition globale de « %D »"
+
+#~ msgid "%J'%D' previously defined here"
+#~ msgstr "%J« %D » précédemment défini ici"
+
+#~ msgid "format string has invalid operand number"
+#~ msgstr "la chaîne de format a un nombre invalide d'opérandes"
+
+#~ msgid "function does not return string type"
+#~ msgstr "fonction ne retourne pas un type « string »"
+
+#~ msgid "format string arg not a string type"
+#~ msgstr "l'argument de la chaîne de format n'est pas de type « string »"
+
+#~ msgid "unrecognized format specifier"
+#~ msgstr "spécificateur de format non reconnu"
+
+#~ msgid "`%s' is an unrecognized format function type"
+#~ msgstr "« %s » a un format de type de fonction non reconnu"
+
+#~ msgid "'...' has invalid operand number"
+#~ msgstr "« ... » a un nombre invalide d'opérandes"
+
+#~ msgid "format string arg follows the args to be formatted"
+#~ msgstr "l'argument de la chaîne de format suit les arguments devant être formatés"
+
+#~ msgid "` ' flag"
+#~ msgstr "fanion « »"
+
+#~ msgid "the ` ' printf flag"
+#~ msgstr "le fanion « » de printf"
+
+#~ msgid "`+' flag"
+#~ msgstr "fanion « + »"
+
+#~ msgid "the `+' printf flag"
+#~ msgstr "le fanion « + » de printf"
+
+#~ msgid "`#' flag"
+#~ msgstr "fanion « # »"
+
+#~ msgid "the `#' printf flag"
+#~ msgstr "le fanion « # » de printf"
+
+#~ msgid "`0' flag"
+#~ msgstr "fanion « 0 »"
+
+#~ msgid "the `0' printf flag"
+#~ msgstr "le fanion « 0 » de printf"
+
+#~ msgid "`-' flag"
+#~ msgstr "fanion « - »"
+
+#~ msgid "the `-' printf flag"
+#~ msgstr "le fanion « - » de printf"
+
+#~ msgid "`'' flag"
+#~ msgstr "fanion « ' »"
+
+#~ msgid "the `'' printf flag"
+#~ msgstr "le fanion « ' » de printf"
+
+#~ msgid "`I' flag"
+#~ msgstr "fanion « I »"
+
+#~ msgid "the `I' printf flag"
+#~ msgstr "le fanion « I » de printf"
+
+#~ msgid "field width"
+#~ msgstr "largeur de champ"
+
+#~ msgid "field width in printf format"
+#~ msgstr "largeur de champ dans le format de printf"
+
+#~ msgid "precision"
+#~ msgstr "précision"
+
+#~ msgid "precision in printf format"
+#~ msgstr "précision dans le format de printf"
+
+#~ msgid "length modifier"
+#~ msgstr "modificateur de longueur"
+
+#~ msgid "length modifier in printf format"
+#~ msgstr "modificateur de longueur dans le format printf"
+
+#~ msgid "assignment suppression"
+#~ msgstr "suppression d'affectation"
+
+#~ msgid "the assignment suppression scanf feature"
+#~ msgstr "options de scanf pour la suppression d'affectation"
+
+#~ msgid "`a' flag"
+#~ msgstr "fanion « a »"
+
+#~ msgid "the `a' scanf flag"
+#~ msgstr "le fanion « a » de scanf"
+
+#~ msgid "field width in scanf format"
+#~ msgstr "largeur de champ dans le format de scanf"
+
+#~ msgid "length modifier in scanf format"
+#~ msgstr "modificateur de longueur dans le format de scanf"
+
+#~ msgid "the `'' scanf flag"
+#~ msgstr "la fanion « ' » de scanf"
+
+#~ msgid "the `I' scanf flag"
+#~ msgstr "le fanion « I » de scanf"
+
+#~ msgid "`_' flag"
+#~ msgstr "fanion « _ »"
+
+#~ msgid "the `_' strftime flag"
+#~ msgstr "le fanion « _ » de strftime"
+
+#~ msgid "the `-' strftime flag"
+#~ msgstr "le fanion « - » de strftime"
+
+#~ msgid "the `0' strftime flag"
+#~ msgstr "le fanion « 0 » de strftime"
+
+#~ msgid "`^' flag"
+#~ msgstr "fanion « ^ »"
+
+#~ msgid "the `^' strftime flag"
+#~ msgstr "la fanion « ^ » de strftime"
+
+#~ msgid "the `#' strftime flag"
+#~ msgstr "le fanion « # » de strftime"
+
+#~ msgid "field width in strftime format"
+#~ msgstr "largeur de champ dans le format de strftime"
+
+#~ msgid "`E' modifier"
+#~ msgstr "modificateur « E »"
+
+#~ msgid "the `E' strftime modifier"
+#~ msgstr "le modificateur « E » de strftime"
+
+#~ msgid "`O' modifier"
+#~ msgstr "modificateur « O »"
+
+#~ msgid "the `O' strftime modifier"
+#~ msgstr "le modificateur « O » de strftime"
+
+#~ msgid "the `O' modifier"
+#~ msgstr "le modificateur « O »"
+
+#~ msgid "fill character"
+#~ msgstr "caractère de remplissage"
+
+#~ msgid "fill character in strfmon format"
+#~ msgstr "caractère de remplissage dans le format de strfmon"
+
+#~ msgid "the `^' strfmon flag"
+#~ msgstr "le fanion « ^ » de strfmon"
+
+#~ msgid "the `+' strfmon flag"
+#~ msgstr "le fanion « + » de strfmon"
+
+#~ msgid "`(' flag"
+#~ msgstr "fanion « ( »"
+
+#~ msgid "the `(' strfmon flag"
+#~ msgstr "le fanion « ( » de strfmon"
+
+#~ msgid "`!' flag"
+#~ msgstr "fanion « ! »"
+
+#~ msgid "the `!' strfmon flag"
+#~ msgstr "le fanion « ! » de strfmon"
+
+#~ msgid "the `-' strfmon flag"
+#~ msgstr "le fanion « - » de strfmon"
+
+#~ msgid "field width in strfmon format"
+#~ msgstr "largeur de champ dans le format de strfmon"
+
+#~ msgid "left precision"
+#~ msgstr "précision de gauche"
+
+#~ msgid "left precision in strfmon format"
+#~ msgstr "précision de gauche dans le format de strfmon"
+
+#~ msgid "right precision"
+#~ msgstr "précision de droite"
+
+#~ msgid "right precision in strfmon format"
+#~ msgstr "précision de droite dans le format de strfmon"
+
+#~ msgid "length modifier in strfmon format"
+#~ msgstr "modificateur de longueur dans le format de strfmon"
+
+#~ msgid "function might be possible candidate for `%s' format attribute"
+#~ msgstr "la fonction est peut être candidate pour l'attribut de format de « %s »"
+
+#~ msgid "missing $ operand number in format"
+#~ msgstr "$ manquant dans le format pour l'opérande du nombre"
+
+#~ msgid "%s does not support %%n$ operand number formats"
+#~ msgstr "%s ne permet pas le format d'opérande de nombre %%n$"
+
+#~ msgid "operand number out of range in format"
+#~ msgstr "opérande de nombre au delà de la limite dans le format"
+
+#~ msgid "format argument %d used more than once in %s format"
+#~ msgstr "argument de format %d utilisé plus d'une fois dans le format %s"
+
+#~ msgid "format argument %d unused before used argument %d in $-style format"
+#~ msgstr "argument de format %d inutilisé avant l'utilisation de l'argument %d dans le format de style $"
+
+#~ msgid "format not a string literal, format string not checked"
+#~ msgstr "le format n'est pas une chaîne littérale, le format n'est pas vérifé"
+
+#~ msgid "format not a string literal and no format arguments"
+#~ msgstr "le format n'est pas une chaîne littérale et pas d'argument de format"
+
+#~ msgid "format not a string literal, argument types not checked"
+#~ msgstr "le format n'est pas une chaîne littérale, le type des arguments n'est pas vérifié"
+
+#~ msgid "too many arguments for format"
+#~ msgstr "trop d'arguments pour le format"
+
+#~ msgid "unused arguments in $-style format"
+#~ msgstr "arguments inutilisés dans le format de style $"
+
+#~ msgid "zero-length %s format string"
+#~ msgstr "chaîne de format de longueur nulle %s"
+
+#~ msgid "format is a wide character string"
+#~ msgstr "le format est une chaîne large de caractères"
+
+#~ msgid "unterminated format string"
+#~ msgstr "chaîne de format non terminée"
+
+#~ msgid "embedded `\\0' in format"
+#~ msgstr "« \\0 » inclu dans le format"
+
+#~ msgid "spurious trailing `%%' in format"
+#~ msgstr "des caractères « %% » douteux traînent dans le format"
+
+#~ msgid "repeated %s in format"
+#~ msgstr "%s répété dans le format"
+
+#~ msgid "missing fill character at end of strfmon format"
+#~ msgstr "caractère de remplissage manquant à la fin du format pour strfmon"
+
+#~ msgid "too few arguments for format"
+#~ msgstr "trop peu d'arguments dans le format"
+
+#~ msgid "zero width in %s format"
+#~ msgstr "largeur zéro dans le format %s"
+
+#~ msgid "empty left precision in %s format"
+#~ msgstr "précision de gauche vide dans le format %s"
+
+#~ msgid "field precision"
+#~ msgstr "champ de précision"
+
+#~ msgid "empty precision in %s format"
+#~ msgstr "précision vide dans le format %s"
+
+#~ msgid "%s does not support the `%s' %s length modifier"
+#~ msgstr "%s ne supporte pas « %s » %s comme modificateur de longueur"
+
+#~ msgid "conversion lacks type at end of format"
+#~ msgstr "il manque un type pour la conversion à la fin du format"
+
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "type de caractère de conversion inconnu « %c » dans le format"
+
+#~ msgid "unknown conversion type character 0x%x in format"
+#~ msgstr "type de caractère de conversion inconnu 0x%x dans le format"
+
+#~ msgid "%s does not support the `%%%c' %s format"
+#~ msgstr "%s ne supporte pas le format « %%%c » %s"
+
+#~ msgid "%s used with `%%%c' %s format"
+#~ msgstr "%s utilisé avec le format « %%%c » %s"
+
+#~ msgid "%s does not support %s"
+#~ msgstr "%s ne supporte pas %s"
+
+#~ msgid "%s does not support %s with the `%%%c' %s format"
+#~ msgstr "%s ne supporte pas %s avec le format « %%%c » %s "
+
+#~ msgid "%s ignored with %s and `%%%c' %s format"
+#~ msgstr "%s ignoré avec %s et le format « %%%c » %s"
+
+#~ msgid "%s ignored with %s in %s format"
+#~ msgstr "%s ignoré avec %s dans le format %s"
+
+#~ msgid "use of %s and %s together with `%%%c' %s format"
+#~ msgstr "utilisation de %s et de %s ensemble dans le format « %%%c » %s"
+
+#~ msgid "use of %s and %s together in %s format"
+#~ msgstr "utilisation de %s et de %s ensemble dans le format %s"
+
+#~ msgid "`%%%c' yields only last 2 digits of year in some locales"
+#~ msgstr "« %%%c » laisse seulement les 2 derniers chiffres de l'année avec certaines locales"
+
+#~ msgid "`%%%c' yields only last 2 digits of year"
+#~ msgstr "« %%%c » laisse seulement les 2 derniers chiffres de l'année"
+
+#~ msgid "no closing `]' for `%%[' format"
+#~ msgstr "pas de « ] » fermant pour le format « %%[ »"
+
+#~ msgid "use of `%s' length modifier with `%c' type character"
+#~ msgstr "utilisation du modificateur de longueur « %s » avec le type de caractère « %c »"
+
+#~ msgid "%s does not support the `%%%s%c' %s format"
+#~ msgstr "%s ne supporte par le format « %%%s%c » %s"
+
+#~ msgid "operand number specified with suppressed assignment"
+#~ msgstr "nombre d'opérandes spécifié avec des affectations suprimées"
+
+#~ msgid "operand number specified for format taking no argument"
+#~ msgstr "nombre d'opérandes spécifié pour un format n'acceptant aucun argument"
+
+#~ msgid "writing through null pointer (arg %d)"
+#~ msgstr "écriture à travers un pointeur nul (arg %d)"
+
+#~ msgid "reading through null pointer (arg %d)"
+#~ msgstr "lecture à l'aide d'un pointeur nul (arg %d)"
+
+#~ msgid "writing into constant object (arg %d)"
+#~ msgstr "écriture dans un objet constant (arg %d)"
+
+#~ msgid "extra type qualifiers in format argument (arg %d)"
+#~ msgstr "qualificateur de type additionnel dans l'argument du format (arg %d)"
+
+#~ msgid "format argument is not a pointer (arg %d)"
+#~ msgstr "l'argument de format n'est pas un pointeur (arg %d)"
+
+#~ msgid "format argument is not a pointer to a pointer (arg %d)"
+#~ msgstr "l'argument de format n'est pas un pointeur de pointeur (arg %d)"
+
+#~ msgid "pointer"
+#~ msgstr "pointeur"
+
+#~ msgid "different type"
+#~ msgstr "type différent"
+
+#~ msgid "%s is not type %s (arg %d)"
+#~ msgstr "%s n'est pas de type %s (arg %d)"
+
+#~ msgid "%s format, %s arg (arg %d)"
+#~ msgstr "format %s, arg %s (arg %d)"
+
+#~ msgid "args to be formatted is not '...'"
+#~ msgstr "les arguments devant être formatés ne sont pas « ... »"
+
+#~ msgid "strftime formats cannot format arguments"
+#~ msgstr "Les formats de strftime ne peuvent pas formater d'argument"
+
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "le répertoire « %s » est ignoré car présent deux fois\n"
+
+#~ msgid "  as it is a non-system directory that duplicates a system directory\n"
+#~ msgstr "  car il s'agit d'un répertoire non système dupliquant un répertoire système\n"
+
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "le répertoire « %s » est ignoré car inexistant\n"
+
+#~ msgid "#include \"...\" search starts here:\n"
+#~ msgstr "la recherche pour #include \"...\" débute ici :\n"
+
+#~ msgid "#include <...> search starts here:\n"
+#~ msgstr "la recherche pour #include <...> débute ici:\n"
+
+#~ msgid "End of search list.\n"
+#~ msgstr "Fin de la liste de recherche.\n"
+
+#~ msgid "badly nested C headers from preprocessor"
+#~ msgstr "en-têtes C du préprocesseur incorrectement imbriqués"
+
+#~ msgid "ignoring #pragma %s %s"
+#~ msgstr "#pragma %s %s ignoré"
+
+#~ msgid "%Hstray '@' in program"
+#~ msgstr "%H« @ » perdu dans le programme"
+
+#~ msgid "stray '%c' in program"
+#~ msgstr "« %c » perdu dans le programme"
+
+#~ msgid "stray '\\%o' in program"
+#~ msgstr "« \\%o » perdu dans le programme"
+
+#~ msgid "this decimal constant is unsigned only in ISO C90"
+#~ msgstr "cette constante décimale est « unsigned » seulement en C90 ISO"
+
+#~ msgid "this decimal constant would be unsigned in ISO C90"
+#~ msgstr "cette constante décimale serait « unsigned » en C90 ISO"
+
+#~ msgid "integer constant is too large for \"%s\" type"
+#~ msgstr "constante entière trop grande pour le type « %s »"
+
+#~ msgid "floating constant exceeds range of \"%s\""
+#~ msgstr "constante en nombre flottant excédant les limites de « %s »"
+
+#~ msgid "traditional C rejects string constant concatenation"
+#~ msgstr "le C traditionel rejette la concaténation de chaînes de constantes"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it is suppressed using -fno-inline"
+#~ msgstr "%Jfonction « %F » ne jamais être enlignée parce qu'elle supprime l'utilisation de -fno-inline"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation"
+#~ msgstr "%Jfonction « %F » ne jamais être enlignée parce qu'elle ne peut être lié dans cette unité de traduction"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses attributes conflicting with inlining"
+#~ msgstr "%Jfonction « %F » ne jamais être enlignée parce qu'elle utilise un attribut en conflit avec l'enlignage"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it has pending sizes"
+#~ msgstr "%Jfonction « %F » ne jamais être enlignée parce qu'elle a des tailles en attente"
+
+#~ msgid "%Jnested function '%F' can never be inlined because it has possibly saved pending sizes"
+#~ msgstr "%Jfonction imbriqué « %F » ne peut jamais être enlignée parce qu'ella possiblement sauvegardé des tailles en attente"
+
+#~ msgid "no class name specified with \"%s\""
+#~ msgstr "aucun nom de classe spécifié avec \"%s\""
+
+#~ msgid "assertion missing after \"%s\""
+#~ msgstr "assertion manquante après \"%s\""
+
+#~ msgid "macro name missing after \"%s\""
+#~ msgstr "nom de macro manquant après \"%s\""
+
+#~ msgid "missing path after \"%s\""
+#~ msgstr "cible manquante après \"%s\""
+
+#~ msgid "missing filename after \"%s\""
+#~ msgstr "nom de fichier manquant après \"%s\""
+
+#~ msgid "missing makefile target after \"%s\""
+#~ msgstr "cible manquante dans le makefile après \"%s\""
+
+#~ msgid "-I- specified twice"
+#~ msgstr "-I- spécifié deux fois"
+
+#~ msgid "switch \"%s\" is no longer supported"
+#~ msgstr "l'option « %s » n'est plus supportée"
+
+#~ msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
+#~ msgstr "-fhandle-exceptions a été renommé -fexceptions (et est maintenant utilisé par défaut)"
+
+#~ msgid "output filename specified twice"
+#~ msgstr "nom du fichier de sortie spécifié deux fois"
+
+#~ msgid "-Wformat-y2k ignored without -Wformat"
+#~ msgstr "-Wformat-y2k ignorée sans -Wformat"
+
+#~ msgid "-Wformat-extra-args ignored without -Wformat"
+#~ msgstr "-Wformat-extra-args ignorée sans -Wformat"
+
+#~ msgid "-Wformat-zero-length ignored without -Wformat"
+#~ msgstr "-Wformat-zero-length ignorée sans -Wformat"
+
+#~ msgid "-Wformat-nonliteral ignored without -Wformat"
+#~ msgstr "-Wformat-nonliteral ignorée sans -Wformat"
+
+#~ msgid "-Wformat-security ignored without -Wformat"
+#~ msgstr "-Wformat-security ignorée sans -Wformat"
+
+#~ msgid "-Wmissing-format-attribute ignored without -Wformat"
+#~ msgstr "-Wmissing-format-attribute ignorée sans -Wformat"
+
+#~ msgid "opening output file %s: %m"
+#~ msgstr "ouverture du fichier de sortie %s: %m"
+
+#~ msgid "too many filenames given.  Type %s --help for usage"
+#~ msgstr "trop de noms de fichiers. Taper %s --help pour en connaître l'usage"
+
+#~ msgid "YYDEBUG not defined"
+#~ msgstr "YYDEBUG n'est pas défini"
+
+#~ msgid "opening dependency file %s: %m"
+#~ msgstr "ouverture du fichier de dépendances %s: %m"
+
+#~ msgid "closing dependency file %s: %m"
+#~ msgstr "fermeture du fichier de dépendances %s: %m"
+
+#~ msgid "when writing output to %s: %m"
+#~ msgstr "lors de l'écriture de la sortie dans %s: %m"
+
+#~ msgid "to generate dependencies you must specify either -M or -MM"
+#~ msgstr "pour générer les dépendances, vous devez spécifier -M ou -MM"
+
+#~ msgid "<built-in>"
+#~ msgstr "<interne>"
+
+#~ msgid "<command line>"
+#~ msgstr "<ligne de commande>"
+
+#~ msgid "too late for # directive to set debug directory"
+#~ msgstr "il est trop tard pour la directive # pour fixer un répertoire de mise au point"
+
+#~ msgid "syntax error"
+#~ msgstr "erreur de syntaxe"
+
+# FIXME
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "erreur de syntaxe : impossible de reculer"
+
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "ISO C interdit un fichier source vide"
+
+#~ msgid "argument of `asm' is not a constant string"
+#~ msgstr "l'argument de « asm » n'est pas une chaîne de constante"
+
+#~ msgid "ISO C forbids data definition with no type or storage class"
+#~ msgstr "ISO C interdit la définition de données sans type ni classe de stockage"
+
+#~ msgid "data definition has no type or storage class"
+#~ msgstr "la définition de données n'a pas de type ni de classe de stockage"
+
+#~ msgid "ISO C does not allow extra `;' outside of a function"
+#~ msgstr "ISO C ne permet pas de « ; » additionnel en dehors d'une fonction"
+
+#~ msgid "`sizeof' applied to a bit-field"
+#~ msgstr "« sizeof » appliqué à un champ de bits"
+
+#~ msgid "ISO C forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C interdit l'omission du terme central de l'expression ?:"
+
+# FIXME
+#~ msgid "ISO C90 forbids compound literals"
+#~ msgstr "ISO C90 interdit les mots composés"
+
+#~ msgid "ISO C forbids braced-groups within expressions"
+#~ msgstr "ISO C interdit les groupes d'accolades à l'intérieur d'expressions"
+
+#~ msgid "first argument to __builtin_choose_expr not a constant"
+#~ msgstr "le premier argument de « __builtin_choose_expr » n'est pas une constante"
+
+#~ msgid "traditional C rejects ISO C style function definitions"
+#~ msgstr "le C traditionel rejette les définitions de fonction de style ISO C"
+
+#~ msgid "old-style parameter declaration"
+#~ msgstr "déclaration de paramètre d'un style désuet"
+
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "« %s » n'est pas au début de la déclaration"
+
+#~ msgid "`typeof' applied to a bit-field"
+#~ msgstr "« typeof » appliqué à un champ de bits"
+
+#~ msgid "ISO C forbids empty initializer braces"
+#~ msgstr "ISO C interdit d'initialiser avec des accolades vides"
+
+#~ msgid "ISO C90 forbids specifying subobject to initialize"
+#~ msgstr "ISO C90 interdit de spécifier des sous-objets à initialiser"
+
+#~ msgid "obsolete use of designated initializer without `='"
+#~ msgstr "utilisation obsolète d'une initialisation désignée sans « = »"
+
+#~ msgid "obsolete use of designated initializer with `:'"
+#~ msgstr "utilisation obsolète d'une initialisation désignée avec « : »"
+
+#~ msgid "ISO C forbids specifying range of elements to initialize"
+#~ msgstr "ISO C interdit de spécifier les bornes des éléments à initaliser"
+
+#~ msgid "ISO C forbids nested functions"
+#~ msgstr "ISO C interdit les fonctions imbriquées"
+
+#~ msgid "ISO C forbids forward references to `enum' types"
+#~ msgstr "ISO C interdit les références anticipée vers un type « enum »"
+
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "virgule à la fin de liste d'énumerateurs"
+
+#~ msgid "no semicolon at end of struct or union"
+#~ msgstr "pas de point virgule à la fin de la structure ou de l'union"
+
+#~ msgid "extra semicolon in struct or union specified"
+#~ msgstr "point virgule superflu dans la structure ou dans l'union"
+
+#~ msgid "ISO C doesn't support unnamed structs/unions"
+#~ msgstr "ISO C ne permet pas les structures et unions sans nom"
+
+#~ msgid "ISO C forbids member declarations with no members"
+#~ msgstr "ISO C interdit les déclarations de membre sans aucun membre"
+
+#~ msgid "label at end of compound statement"
+#~ msgstr "étiquette à la fin d'une déclaration composée"
+
+#~ msgid "ISO C90 forbids mixed declarations and code"
+#~ msgstr "ISO C89 interdit les mélanges de déclarations et de code"
+
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "ISO C interdit la déclaration d'étiquette"
+
+#~ msgid "braced-group within expression allowed only inside a function"
+#~ msgstr "groupe entre accolades à l'intérieur d'expression permis seulement à l'intérieur d'une fonction"
+
+#~ msgid "empty body in an else-statement"
+#~ msgstr "le corps du else est vide"
+
+#~ msgid "%Hempty body in an if-statement"
+#~ msgstr "%Hle corps de la déclaration du if est vide"
+
+#~ msgid "break statement not within loop or switch"
+#~ msgstr "mot-clé « break » à l'extérieur de toute boucle ou « switch »"
+
+#~ msgid "continue statement not within a loop"
+#~ msgstr "mot-clé « continue » à l'extérieur de toute boucle"
+
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "ISO C interdit « goto *expr; »"
+
+#~ msgid "ISO C requires a named argument before `...'"
+#~ msgstr "ISO C requiert un argument nommé devant « ... »"
+
+#~ msgid "`...' in old-style identifier list"
+#~ msgstr "« ... » dans une liste d'identificateurs de style ancien"
+
+#~ msgid "parse error; also virtual memory exhausted"
+#~ msgstr "erreur d'analyse syntaxique; et la mémoire virtuelle est épuisée"
+
+#~ msgid "parse error"
+#~ msgstr "erreur d'analyse syntaxique"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "débordement de la pile de l'analyseur syntaxique"
+
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "erreur de syntaxe à l'élément lexical « %s »"
+
+#~ msgid "can't create precompiled header %s: %m"
+#~ msgstr "ne peut créer une en-tête précompilée %s: %m"
+
+#~ msgid "can't write to %s: %m"
+#~ msgstr "ne peut écrire dans %s: %m"
+
+#~ msgid "`%s' is not a valid output file"
+#~ msgstr "« %s » n'est pas un nom de fichier valide"
+
+#~ msgid "can't write %s: %m"
+#~ msgstr "ne peut écrire dans %s: %m"
+
+#~ msgid "can't seek in %s: %m"
+#~ msgstr "ne peut se positionner dans %s: %m"
+
+#~ msgid "can't read %s: %m"
+#~ msgstr "ne peut lire %s: %m"
+
+#~ msgid "%s: not compatible with this GCC version"
+#~ msgstr "%s: n'est pas compatible avec cette version de GCC"
+
+#~ msgid "%s: not for %s"
+#~ msgstr "%s: non pour %s"
+
+#~ msgid "%s: not a PCH file"
+#~ msgstr "%s: n'est pas un fichier PCH"
+
+#~ msgid "%s: created on host `%.*s', but used on host `%s'"
+#~ msgstr "%s: créé sur l'hôte « %.*s », mais utilisé sur l'hôte « %s »"
+
+#~ msgid "%s: created for target `%.*s', but used for target `%s'"
+#~ msgstr "%s: créé pour la cible « %.*s », mais utilisé pour la cible « %s »"
+
+#~ msgid "%s: created by version `%.*s', but this is version `%s'"
+#~ msgstr "%s: créé pour la version « %.*s », mais utilisé avec la version « %s »"
+
+#~ msgid "%s: created using different flags"
+#~ msgstr "%s: créé en utilisant des fanions différents"
+
+#~ msgid "%s: created with -g%s, but used with -g%s"
+#~ msgstr "%s: créé avec -g%s, mais utilisé avec -g%s"
+
+#~ msgid "%s: had text segment at different address"
+#~ msgstr "%s: a un segment texte à une adresse différente"
+
+# I18N
+#~ msgid "calling fdopen"
+#~ msgstr "appel de fdopen()"
+
+#~ msgid "reading"
+#~ msgstr "en lecture"
+
+#~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+#~ msgstr "#pragma pack (pop) rencontré sans #pragma pack (push, <n>) correspondant"
+
+#~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
+#~ msgstr "#pragma pack(pop, %s) rencontré sans #pragma pack(push, %s, <n>) correspondant"
+
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(push[, id], <n>) n'est pas permis sur cette cible"
+
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "#pragma pack(pop[, id], <n>) n'est pas permis sur cette cible"
+
+#~ msgid "missing '(' after '#pragma pack' - ignored"
+#~ msgstr "« ( » manquante après « #pragma pack » - ignoré"
+
+#~ msgid "malformed '#pragma pack' - ignored"
+#~ msgstr "« #pragma pack » mal composée - ignoré"
+
+#~ msgid "malformed '#pragma pack(push[, id], <n>)' - ignored"
+#~ msgstr "« #pragma pack(push[, id], <n>) » mal composée - ignoré"
+
+#~ msgid "malformed '#pragma pack(pop[, id])' - ignored"
+#~ msgstr "« #pragma pack(pop[, id]) » mal composée, ignoré"
+
+#~ msgid "unknown action '%s' for '#pragma pack' - ignored"
+#~ msgstr "action « %s » inconnue pour « #pragma pack » - ignoré"
+
+#~ msgid "junk at end of '#pragma pack'"
+#~ msgstr "rebut à la fin de « #pragma pack »"
+
+#~ msgid "alignment must be a small power of two, not %d"
+#~ msgstr "l'alignement doit être une petite puissance de 2, pas %d"
+
+#~ msgid "%Japplying #pragma weak '%D' after first use results in unspecified behavior"
+#~ msgstr "%Japplication de la #pragma weak « %D » après la première utilisation conduit à un comportement non spécifié"
+
+#~ msgid "malformed #pragma weak, ignored"
+#~ msgstr "#pragma weak mal composée, ignoré"
+
+#~ msgid "junk at end of #pragma weak"
+#~ msgstr "rebut à la fin de #pragma weak"
+
+#~ msgid "malformed #pragma redefine_extname, ignored"
+#~ msgstr "#pragma redefine_extname mal composée, ignoré"
+
+#~ msgid "junk at end of #pragma redefine_extname"
+#~ msgstr "rebut à la fin de #pragma redefine_extname"
+
+#~ msgid "#pragma redefine_extname conflicts with declaration"
+#~ msgstr "#pragma redefine_extname en conflit avec la déclaration"
+
+#~ msgid "malformed #pragma extern_prefix, ignored"
+#~ msgstr "#pragma extern_prefix mal composée, ignoré"
+
+#~ msgid "junk at end of #pragma extern_prefix"
+#~ msgstr "rebut à la fin de #pragma extern_prefix"
+
+#~ msgid "asm declaration conflicts with previous rename"
+#~ msgstr "déclaration asm en conflit avec le changement de nom précédent"
+
+#~ msgid "destructor needed for `%D'"
+#~ msgstr "destructeur requis pour « %D »"
+
+#~ msgid "where case label appears here"
+#~ msgstr "où les étiquettes de « case » apparaissent ici"
+
+# FIXME
+#~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)"
+#~ msgstr "(les actions dans les « case » précédents requierent des destructeurs dans leur propre champ.)"
+
+#~ msgid "%s qualifier ignored on asm"
+#~ msgstr "%s qualificateur ignoré avec asm"
+
+# FIXME: c'est de l'assembleur ?
+#~ msgid "will never be executed"
+#~ msgstr "ne sera jamais exécuté"
+
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "« %s » a un type incomplet"
+
+#~ msgid "invalid use of void expression"
+#~ msgstr "utilisation invalide d'expression void"
+
+#~ msgid "invalid use of flexible array member"
+#~ msgstr "utilisation invalide d'un membre flexible de tableau"
+
+#~ msgid "invalid use of array with unspecified bounds"
+#~ msgstr "utilisation invalide d'un tableau sans borne spécifiée"
+
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "utilisation invalide d'un type indéfini « %s %s »"
+
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "utilisation invalide d'un typedef incomplet « %s »"
+
+#~ msgid "function types not truly compatible in ISO C"
+#~ msgstr "types de fonction pas vraiment compatibles en C ISO"
+
+#~ msgid "types are not quite compatible"
+#~ msgstr "les types ne sont pas vraiment compatibles"
+
+#~ msgid "function return types not compatible due to `volatile'"
+#~ msgstr "les types retournés d'une fonction ne sont pas compatibles en raison de « volatile »"
+
+#~ msgid "arithmetic on pointer to an incomplete type"
+#~ msgstr "arithmétique sur un pointeur vers un type incomplet"
+
+#~ msgid "%s has no member named `%s'"
+#~ msgstr "%s n'a pas de membre nommé « %s »"
+
+#~ msgid "request for member `%s' in something not a structure or union"
+#~ msgstr "requête du membre « %s » dans quelque chose n'étant ni une structure ni une union"
+
+#~ msgid "dereferencing pointer to incomplete type"
+#~ msgstr "déréférencement d'un pointeur de type incomplet"
+
+#~ msgid "dereferencing `void *' pointer"
+#~ msgstr "déréférencement d'un pointeur « void * »"
+
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "type d'argument invalide pour « %s »"
+
+#~ msgid "subscript missing in array reference"
+#~ msgstr "indice manquant dans la référence du tableau"
+
+#~ msgid "array subscript has type `char'"
+#~ msgstr "l'indice du tableau est de type « char »"
+
+#~ msgid "array subscript is not an integer"
+#~ msgstr "l'indice du tableau n'est pas un entier"
+
+#~ msgid "ISO C forbids subscripting `register' array"
+#~ msgstr "ISO C interdit de sous-indicer des tableaux  « register »"
+
+#~ msgid "ISO C90 forbids subscripting non-lvalue array"
+#~ msgstr "ISO C90 interdit d'indicer de tableau n'étant pas membre gauche"
+
+#~ msgid "subscript has type `char'"
+#~ msgstr "indice de type « char »"
+
+#~ msgid "subscripted value is neither array nor pointer"
+#~ msgstr "la valeur indicée n'est ni un tableau ni un pointeur"
+
+#~ msgid "local declaration of `%s' hides instance variable"
+#~ msgstr "la déclaration locale de « %s » masque l'instance d'une variable"
+
+#~ msgid "called object is not a function"
+#~ msgstr "l'objet appelé n'est pas une fonction"
+
+#~ msgid "function called through a non-compatible type"
+#~ msgstr "fonction appellée à travers un type non compatible"
+
+#~ msgid "too many arguments to function"
+#~ msgstr "trop d'arguments pour la fonction"
+
+#~ msgid "type of formal parameter %d is incomplete"
+#~ msgstr "le type du paramètre formel %d est incomplet"
+
+#~ msgid "%s as integer rather than floating due to prototype"
+#~ msgstr "%s est entier plutôt que flottant en raison du prototype"
+
+#~ msgid "%s as integer rather than complex due to prototype"
+#~ msgstr "%s est entier plutôt que complexe en raison du prototype"
+
+#~ msgid "%s as complex rather than floating due to prototype"
+#~ msgstr "%s est complexe plutôt que flottant en raison du prototype"
+
+#~ msgid "%s as floating rather than integer due to prototype"
+#~ msgstr "%s est flottant plutôt qu'entier en raison du prototype"
+
+#~ msgid "%s as complex rather than integer due to prototype"
+#~ msgstr "%s est complexe plutôt qu'entier en raison du prototype"
+
+#~ msgid "%s as floating rather than complex due to prototype"
+#~ msgstr "%s est flottant plutôt que complexe en raison du prototype"
+
+#~ msgid "%s as `float' rather than `double' due to prototype"
+#~ msgstr "%s est « float » plutôt qu'un « double » en raison du prototype"
+
+#~ msgid "%s with different width due to prototype"
+#~ msgstr "%s a une largeur différente en raison du prototype"
+
+#~ msgid "%s as unsigned due to prototype"
+#~ msgstr "%s est non signé en raison du prototype"
+
+#~ msgid "%s as signed due to prototype"
+#~ msgstr "%s est signé en raison du prototype"
+
+#~ msgid "too few arguments to function"
+#~ msgstr "trop peu d'arguments pour la fonction"
+
+#~ msgid "suggest parentheses around + or - inside shift"
+#~ msgstr "parenthèses suggérées autour de + ou - à l'intérieur du décalage"
+
+#~ msgid "suggest parentheses around && within ||"
+#~ msgstr "parenthèses suggérées autour de && à l'intérieur de ||"
+
+#~ msgid "suggest parentheses around arithmetic in operand of |"
+#~ msgstr "parenthèses suggérées autour de l'arithmétique dans l'opérande de |"
+
+#~ msgid "suggest parentheses around comparison in operand of |"
+#~ msgstr "parenthèses suggérées autour de la comparaison dans l'opérande de |"
+
+#~ msgid "suggest parentheses around arithmetic in operand of ^"
+#~ msgstr "parenthèses suggérées autour de l'arithmétique dans l'opérande de ^"
+
+#~ msgid "suggest parentheses around comparison in operand of ^"
+#~ msgstr "parenthèses suggérées autour de la comparaison dans l'opérande de ^"
+
+#~ msgid "suggest parentheses around + or - in operand of &"
+#~ msgstr "parenthèses suggérées autour de + ou - dans l'opérande de &"
+
+#~ msgid "suggest parentheses around comparison in operand of &"
+#~ msgstr "parenthèses suggérées autour de la comparaison dans l'opérande de &"
+
+#~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+#~ msgstr "les comparaisons telles que X<=Y<=Z n'ont pas de signification mathématique"
+
+#~ msgid "pointer of type `void *' used in subtraction"
+#~ msgstr "pointeur de type « void * » utilisé dans une soustraction"
+
+#~ msgid "pointer to a function used in subtraction"
+#~ msgstr "pointeur vers un fonction utilisé dans une soustraction"
+
+#~ msgid "wrong type argument to unary plus"
+#~ msgstr "type d'argument erroné pour le plus unaire"
+
+#~ msgid "wrong type argument to unary minus"
+#~ msgstr "type d'argument erroné pour le moins unaire"
+
+#~ msgid "ISO C does not support `~' for complex conjugation"
+#~ msgstr "ISO C ne permet pas d'utiliser « ~ » pour le complexe conjugué"
+
+#~ msgid "wrong type argument to bit-complement"
+#~ msgstr "type d'argument erroné pour un complément de bit"
+
+#~ msgid "wrong type argument to abs"
+#~ msgstr "type d'argument erroné pour abs"
+
+#~ msgid "wrong type argument to conjugation"
+#~ msgstr "type d'argument erroné pour la conjugaison"
+
+#~ msgid "wrong type argument to unary exclamation mark"
+#~ msgstr "type d'argument erroné pour le point d'exclamation unaire"
+
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "ISO C ne permet pas « ++ » ni « -- » sur les types complexes"
+
+#~ msgid "wrong type argument to increment"
+#~ msgstr "type d'argument erroné pour un incrément"
+
+#~ msgid "wrong type argument to decrement"
+#~ msgstr "type d'argument erroné pour un décrément"
+
+#~ msgid "increment of pointer to unknown structure"
+#~ msgstr "incrément d'un pointeur vers une structure inconnue"
+
+#~ msgid "decrement of pointer to unknown structure"
+#~ msgstr "décrément d'un pointeur vers une structure inconnue"
+
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "membre gauche invalide pour le « & » unaire"
+
+#~ msgid "attempt to take address of bit-field structure member `%s'"
+#~ msgstr "tentative pour prendre l'adresse du membre « %s » d'une structure de champ de bits"
+
+#~ msgid "use of conditional expressions as lvalues is deprecated"
+#~ msgstr "utilisation d'expressions conditionnelles comme lvalues est obsolète"
+
+#~ msgid "use of compound expressions as lvalues is deprecated"
+#~ msgstr "utilisation d'expressions composées comme lvalues est obsolète"
+
+#~ msgid "use of cast expressions as lvalues is deprecated"
+#~ msgstr "utilisation de transtypage d'expressions comme lvalues est obsolète"
+
+#~ msgid "%s of read-only member `%s'"
+#~ msgstr "%s d'un membre en lecture seule « %s »"
+
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "%s d'une variable en lecture seule « %s »"
+
+#~ msgid "%s of read-only location"
+#~ msgstr "%s d'une position en lecture seule"
+
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "ne peut prendre l'adresse du champ de bits « %s »"
+
+#~ msgid "global register variable `%s' used in nested function"
+#~ msgstr "variable globale de registre « %s » utilisée dans une fonction imbriquée"
+
+#~ msgid "register variable `%s' used in nested function"
+#~ msgstr "variable de registre « %s » utilisée dans une fonction imbriquée"
+
+#~ msgid "address of global register variable `%s' requested"
+#~ msgstr "adresse d'une variable registre globale « %s » requise"
+
+#~ msgid "cannot put object with volatile field into register"
+#~ msgstr "impossible de mettre un objet avec un champ volatile dans un registre"
+
+#~ msgid "address of register variable `%s' requested"
+#~ msgstr "adresse d'une variable registre « %s » requise"
+
+#~ msgid "signed and unsigned type in conditional expression"
+#~ msgstr "type signé et non signé dans une expression conditionnelle"
+
+#~ msgid "ISO C forbids conditional expr with only one void side"
+#~ msgstr "ISO C interdit une expression conditionnelle dont un seul côté est « void »"
+
+#~ msgid "ISO C forbids conditional expr between `void *' and function pointer"
+#~ msgstr "ISO C interdit une expression conditionnelle entre « void * » et un pointeur de fonction"
+
+#~ msgid "pointer type mismatch in conditional expression"
+#~ msgstr "non concordance de type de pointeurs dans un expression conditionnelle"
+
+#~ msgid "pointer/integer type mismatch in conditional expression"
+#~ msgstr "non concordance entre pointeur et entier dans une expression conditionnelle"
+
+#~ msgid "type mismatch in conditional expression"
+#~ msgstr "non concordance de type dans une expression conditionnelle"
+
+#~ msgid "left-hand operand of comma expression has no effect"
+#~ msgstr "l'opérande à gauche de la virgule n'a pas d'effet"
+
+#~ msgid "cast specifies array type"
+#~ msgstr "le transtypage spécifie un type de tableau"
+
+#~ msgid "cast specifies function type"
+#~ msgstr "le transtypage spécifie un type de fonction"
+
+#~ msgid "ISO C forbids casting nonscalar to the same type"
+#~ msgstr "ISO C interdit le transtypage d'un type non scalaire vers lui-même"
+
+#~ msgid "ISO C forbids casts to union type"
+#~ msgstr "ISO C interdit le transtypage vers un type union"
+
+#~ msgid "cast to union type from type not present in union"
+#~ msgstr "transtypage vers un type union depuis un type absent de l'union"
+
+#~ msgid "cast adds new qualifiers to function type"
+#~ msgstr "le transtypage ajoute un nouveau qualificateur au type de la fonction"
+
+#~ msgid "cast discards qualifiers from pointer target type"
+#~ msgstr "le transtypage annule des qualificateurs du type pointeur ciblé"
+
+#~ msgid "cast increases required alignment of target type"
+#~ msgstr "le transtypage augmente l'alignement requis pour le type ciblé"
+
+#~ msgid "cast from pointer to integer of different size"
+#~ msgstr "transtypage d'un pointeur vers un entier de taille différente"
+
+#~ msgid "cast does not match function type"
+#~ msgstr "le transtypage ne concorde pas avec le type de la fonction"
+
+#~ msgid "cast to pointer from integer of different size"
+#~ msgstr "transtypage vers un pointeur depuis un entier de taille différente"
+
+# FIXME
+#~ msgid "type-punning to incomplete type might break strict-aliasing rules"
+#~ msgstr "type-punning vers un type incomplet peut briser les règles stricte d'aliases"
+
+# FIXME
+#~ msgid "dereferencing type-punned pointer will break strict-aliasing rules"
+#~ msgstr "déréférencement du pointeur type-punned brisera les strictes d'aliases"
+
+#~ msgid "ISO C forbids conversion of function pointer to object pointer type"
+#~ msgstr "ISO C interdit la conversion d'un pointeur de fonction en un type pointeur d'objet"
+
+#~ msgid "ISO C forbids conversion of object pointer to function pointer type"
+#~ msgstr "ISO C interdit la conversion d'un pointeur d'objet vers un type de pointeur à une fonction"
+
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "membre gauche de l'affectation invalide"
+
+#~ msgid "assignment"
+#~ msgstr "affectation"
+
+#~ msgid "cannot pass rvalue to reference parameter"
+#~ msgstr "impossible de passer un membre droit en paramètre par référence"
+
+#~ msgid "%s makes qualified function pointer from unqualified"
+#~ msgstr "%s qualifie un pointeur de fonction non qualifié"
+
+#~ msgid "%s discards qualifiers from pointer target type"
+#~ msgstr "%s annule des qualificateurs du type du pointeur cible"
+
+#~ msgid "ISO C prohibits argument conversion to union type"
+#~ msgstr "ISO C interdit la conversion d'argument en type union"
+
+#~ msgid "ISO C forbids %s between function pointer and `void *'"
+#~ msgstr "ISO C interdit %s entre pointeur de fonction et « void * »"
+
+#~ msgid "pointer targets in %s differ in signedness"
+#~ msgstr "les cibles des pointeurs dans %s n'ont pas toutes de signe"
+
+#~ msgid "%s from incompatible pointer type"
+#~ msgstr "%s d'un type pointeur incompatible"
+
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "utilisation invalide d'un tableau n'étant pas membre gauche"
+
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%s transforme un entier en pointeur sans transtypage"
+
+#~ msgid "%s makes integer from pointer without a cast"
+#~ msgstr "%s transforme un pointeur en entier sans transtypage"
+
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "type incompatible pour l'argument n°%d de « %s »"
+
+#~ msgid "incompatible type for argument %d of indirect function call"
+#~ msgstr "type incompatible pour l'argument n°%d de l'appel indirect de fonction"
+
+#~ msgid "incompatible types in %s"
+#~ msgstr "type incompatibles dans %s"
+
+#~ msgid "passing arg of `%s'"
+#~ msgstr "passage des arguments de « %s »"
+
+#~ msgid "passing arg of pointer to function"
+#~ msgstr "passage des arguments au pointeur de fonction"
+
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "passage de l'argument n°%d de « %s »"
+
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "passage de l'argument n°%d au pointeur de fonction"
+
+#~ msgid "traditional C rejects automatic aggregate initialization"
+#~ msgstr "le C traditionel rejette l'initialisation automatique d'aggrégats"
+
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "(près de l'initialisation de « %s »)"
+
+#~ msgid "char-array initialized from wide string"
+#~ msgstr "tableau de caractères initialisé à l'aide d'une chaîne large de caractères"
+
+#~ msgid "int-array initialized from non-wide string"
+#~ msgstr "tableau d'entier initialisé à l'aide d'une chaîne non-large"
+
+#~ msgid "initializer-string for array of chars is too long"
+#~ msgstr "la chaîne d'initialisation est trop longue pour le tableau de caractères"
+
+#~ msgid "array initialized from non-constant array expression"
+#~ msgstr "tableau initialisé à l'aide de l'expression de tableau non constante"
+
+#~ msgid "initializer element is not constant"
+#~ msgstr "un élément de l'initialisation n'est pas une constante"
+
+#~ msgid "initialization"
+#~ msgstr "initialisation"
+
+#~ msgid "initializer element is not computable at load time"
+#~ msgstr "un élément de l'initialisation n'est pas évaluable lors du chargement"
+
+#~ msgid "invalid initializer"
+#~ msgstr "initialisation invalide"
+
+#~ msgid "opaque vector types cannot be initialized"
+#~ msgstr "type de vecteur opaque ne peut être initialisé"
+
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "groupe d'accolades superflu à la fin de l'initialisation"
+
+#~ msgid "missing braces around initializer"
+#~ msgstr "accolades manquantes autour de l'initialisation"
+
+#~ msgid "braces around scalar initializer"
+#~ msgstr "accolades autour d'une initialisation de scalaire"
+
+#~ msgid "initialization of flexible array member in a nested context"
+#~ msgstr "initialisation d'un membre de tableau flexible dans un contexte imbriqué"
+
+#~ msgid "initialization of a flexible array member"
+#~ msgstr "initialisation d'un membre de tableau flexible"
+
+#~ msgid "missing initializer"
+#~ msgstr "initialisation manquante"
+
+#~ msgid "empty scalar initializer"
+#~ msgstr "initialisation vide de scalaire"
+
+#~ msgid "extra elements in scalar initializer"
+#~ msgstr "éléments superflus dans l'initialisation de scalaire"
+
+#~ msgid "initialization designators may not nest"
+#~ msgstr "l'initialisation des désignateurs ne doit pas être imbriquée"
+
+#~ msgid "array index in non-array initializer"
+#~ msgstr "index de tableau dans l'initialisation de quelque chose n'étant pas un tableau"
+
+#~ msgid "field name not in record or union initializer"
+#~ msgstr "nom de champ dans l'initialisation de quelque chose n'étant ni un enregistrement ni une union"
+
+#~ msgid "nonconstant array index in initializer"
+#~ msgstr "index de tableau non constant dans l'initialisation"
+
+#~ msgid "array index in initializer exceeds array bounds"
+#~ msgstr "index de tableau hors limites lors de l'initialisation"
+
+#~ msgid "empty index range in initializer"
+#~ msgstr "borne d'index vide lors de l'initialisation"
+
+#~ msgid "array index range in initializer exceeds array bounds"
+#~ msgstr "plage d'index du tableau excédant les bornes lors de l'initialisation"
+
+#~ msgid "unknown field `%s' specified in initializer"
+#~ msgstr "champ inconnu « %s » spécifié lors de l'initialisation"
+
+#~ msgid "initialized field with side-effects overwritten"
+#~ msgstr "le champ initialisé par effet de bord a été écrasé"
+
+#~ msgid "excess elements in char array initializer"
+#~ msgstr "éléments en excès dans l'initialisation de tableau de caractères"
+
+#~ msgid "excess elements in struct initializer"
+#~ msgstr "éléments en excès dans l'initialisation de la structure"
+
+#~ msgid "non-static initialization of a flexible array member"
+#~ msgstr "initialisation non statique d'un membre de tableau flexible"
+
+#~ msgid "excess elements in union initializer"
+#~ msgstr "éléments en excès dans l'initialisation d'union"
+
+#~ msgid "traditional C rejects initialization of unions"
+#~ msgstr "le C traditionel rejette l'initialisation d'union"
+
+#~ msgid "excess elements in array initializer"
+#~ msgstr "éléments en excès dans l'initialisation de tableau"
+
+#~ msgid "excess elements in vector initializer"
+#~ msgstr "éléments en excès dans l'initialisation du vecteur"
+
+#~ msgid "excess elements in scalar initializer"
+#~ msgstr "éléments en excès dans l'initialisation d'un scalaire"
+
+#~ msgid "asm template is not a string constant"
+#~ msgstr "le canevas asm n'est pas une chaîne de constante"
+
+#~ msgid "invalid lvalue in asm statement"
+#~ msgstr "membre gauche invalide avec asm"
+
+#~ msgid "modification by `asm'"
+#~ msgstr "modification par « asm »"
+
+#~ msgid "function declared `noreturn' has a `return' statement"
+#~ msgstr "fonction déclarée avec « noreturn» utilisant le mot-clé « return »"
+
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "« return » sans valeur dans une fonction retournant autre chose que void"
+
+#~ msgid "`return' with a value, in function returning void"
+#~ msgstr "« return » avec une valeur dans une fonction retournant un void"
+
+#~ msgid "return"
+#~ msgstr "return"
+
+#~ msgid "function returns address of local variable"
+#~ msgstr "cette fonction retourne l'adresse d'une variable locale"
+
+#~ msgid "switch quantity not an integer"
+#~ msgstr "quantité du switch n'est pas un entier"
+
+#~ msgid "`long' switch expression not converted to `int' in ISO C"
+#~ msgstr "expression « long » du switch non convertie en « int » par ISO C"
+
+#~ msgid "case label not within a switch statement"
+#~ msgstr "étiquette de « case » en dehors de tout switch"
+
+#~ msgid "`default' label not within a switch statement"
+#~ msgstr "étiquette « default » en dehors de tout switch"
+
+#~ msgid "division by zero"
+#~ msgstr "division par zéro"
+
+#~ msgid "right shift count is negative"
+#~ msgstr "le compteur de décalage vers la droite est négatif"
+
+#~ msgid "right shift count >= width of type"
+#~ msgstr "compteur de décalage vers la droite >= à la largeur du type"
+
+#~ msgid "left shift count is negative"
+#~ msgstr "le compteur de décalage vers la gauche est négatif"
+
+#~ msgid "left shift count >= width of type"
+#~ msgstr "compteur de décalage vers la gauche >= à la largeur du type"
+
+#~ msgid "shift count is negative"
+#~ msgstr "le compteur de décalage est négatif"
+
+#~ msgid "shift count >= width of type"
+#~ msgstr "compteur de décalage >= à la largeur du type"
+
+#~ msgid "comparing floating point with == or != is unsafe"
+#~ msgstr "comparer des nombres flottants à l'aide de == ou != n'est pas sûr"
+
+#~ msgid "ISO C forbids comparison of `void *' with function pointer"
+#~ msgstr "ISO C interdit la comparaison de « void * » avec un pointeur de fonction"
+
+#~ msgid "comparison of distinct pointer types lacks a cast"
+#~ msgstr "il manque un transtypage pour comparer des types distincts de pointeur"
+
+#~ msgid "comparison between pointer and integer"
+#~ msgstr "comparaison entre un pointeur et un entier"
+
+#~ msgid "ISO C forbids ordered comparisons of pointers to functions"
+#~ msgstr "ISO C interdit les comparaisons ordonnées de pointeurs vers des fonctions"
+
+#~ msgid "comparison of complete and incomplete pointers"
+#~ msgstr "comparaison de pointeurs complet et incomplet"
+
+#~ msgid "ordered comparison of pointer with integer zero"
+#~ msgstr "comparaison ordonnée de pointeur avec le zéro entier"
+
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "comparaison non ordonnée sur un argument n'étant pas en virgule flottante"
+
+#~ msgid "comparison between signed and unsigned"
+#~ msgstr "comparaison entre élément signé et élément non signé"
+
+#~ msgid "comparison of promoted ~unsigned with constant"
+#~ msgstr "comparaison entre élément promu ~unsigned et une constante"
+
+#~ msgid "comparison of promoted ~unsigned with unsigned"
+#~ msgstr "comparaison entre élément promu ~unsigned et un élément non signé"
+
+#~ msgid "%Jinlining failed in call to '%F'"
+#~ msgstr "%Jenlignage a échoué dans l'appel à « %F »"
+
+#~ msgid "called from here"
+#~ msgstr "appelé d'ici"
+
+#~ msgid "%Jcan't inline call to '%F'"
+#~ msgstr "%Jimpossible d'enligner l'appel à « %F »"
+
+#~ msgid "ignoring return value of `%D', declared with attribute warn_unused_result"
+#~ msgstr "valeur à retourner « %D » ignorée, déclaré avec l'attribut warn_unused_result"
+
+#~ msgid "ignoring return value of function declared with attribute warn_unused_result"
+#~ msgstr "valeur à retourner d'une fonction ignorée, déclaré avec l'attribut warn_unused_result"
+
+#~ msgid "function call has aggregate value"
+#~ msgstr "l'appel de fonction a une valeur d'aggrégat"
+
+#~ msgid "bb %d on wrong place"
+#~ msgstr "bb %d au mauvais endroit"
+
+#~ msgid "prev_bb of %d should be %d, not %d"
+#~ msgstr "prev_bb de %d devrait être %d, pas %d"
+
+#~ msgid "verify_flow_info: Wrong count of block %i %i"
+#~ msgstr "verify_flow_info: Nombre de blocs erroné %i %i"
+
+#~ msgid "verify_flow_info: Wrong frequency of block %i %i"
+#~ msgstr "verify_flow_info: Fréquence de blocs erronée %i %i"
+
+#~ msgid "verify_flow_info: Duplicate edge %i->%i"
+#~ msgstr "verify_flow_info: arrête dupliquée %i->%i"
+
+#~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+#~ msgstr "verify_flow_info: probabilité de l'arrête %i->%i %i erronée"
+
+#~ msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+#~ msgstr "verify_flow_info: Mauvais nombre d'arrête %i->%i %i"
+
+#~ msgid "verify_flow_info: Basic block %d succ edge is corrupted"
+#~ msgstr "verify_flow_info: l'arrête succ du bloc de base %d est corrompue"
+
+#~ msgid "Wrong amount of branch edges after unconditional jump %i"
+#~ msgstr "Mauvais nombre d'arrêtes de branchement après le branchement inconditionnel %i"
+
+#~ msgid "basic block %d pred edge is corrupted"
+#~ msgstr "arrête pred du bloc de base %d corrompue"
+
+#~ msgid "basic block %i edge lists are corrupted"
+#~ msgstr "les listes d'arrêtes du  bloc de base %i sont corrompues"
+
+#~ msgid "verify_flow_info failed"
+#~ msgstr "verify_flow_info a échoué"
+
+#~ msgid "Size of loop %d should be %d, not %d."
+#~ msgstr "La taille de la boucle %d devrait être %d, et non %d."
+
+# FIXME
+#~ msgid "Bb %d do not belong to loop %d."
+#~ msgstr "Bb %d n'appartient pas à la boucle %d."
+
+#~ msgid "Loop %d's header does not have exactly 2 entries."
+#~ msgstr "L'en-tête de la boucle %d n'a pas exactement 2 entrées."
+
+#~ msgid "Loop %d's latch does not have exactly 1 successor."
+#~ msgstr "Le verrou %d de la boucle n'a pas exactement 1 successeur."
+
+#~ msgid "Loop %d's latch does not have header as successor."
+#~ msgstr "Le verrou %d de la boucle n'a pas une en-tête comme successeur."
+
+#~ msgid "Loop %d's latch does not belong directly to it."
+#~ msgstr "Le verrou %d de la boucle ne lui appartient pas directement."
+
+#~ msgid "Loop %d's header does not belong directly to it."
+#~ msgstr "L'entête de la boucle %d ne lui appartient pas directement."
+
+#~ msgid "Loop %d's latch is marked as part of irreducible region."
+#~ msgstr "Le verrou %d de la boucle est défini comme faisant partie d'une zone irréductible"
+
+#~ msgid "Basic block %d should be marked irreducible."
+#~ msgstr "bloc de base %d devrait être marqué irréductible."
+
+#~ msgid "Basic block %d should not be marked irreducible."
+#~ msgstr "bloc de base %d ne devrait pas être marqué irréductible."
+
+#~ msgid "Edge from %d to %d should be marked irreducible."
+#~ msgstr "Bordures à partir de %d à %d devraient être marqués irréductibles."
+
+#~ msgid "Edge from %d to %d should not be marked irreducible."
+#~ msgstr "Bordures à partir de %d à %d ne devraient être marquées irréductibles."
+
+#~ msgid "end insn %d for block %d not found in the insn stream"
+#~ msgstr "fin insn %d du bloc %d n'a pas été repéré dans le flot insn"
+
+#~ msgid "insn %d is in multiple basic blocks (%d and %d)"
+#~ msgstr "insn %d est dans de multiples blocs de base (%d et %d)"
+
+#~ msgid "head insn %d for block %d not found in the insn stream"
+#~ msgstr "en-tête insn %d du bloc %d n'a pas été repérée dans le flot insn"
+
+#~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
+#~ msgstr "verify_flow_info: REG_BR_PROB ne correspond pas à la config %wi %i"
+
+#~ msgid "Missing REG_EH_REGION note in the end of bb %i"
+#~ msgstr "REG_EH_REGION note manquante à la fin du bb %i"
+
+#~ msgid "Too many outgoing branch edges from bb %i"
+#~ msgstr "Trop d'arrêtes de branchement sortantes dans le bb %i"
+
+#~ msgid "Fallthru edge after unconditional jump %i"
+#~ msgstr "Arrête fallthru après le branchement inconditionnel %i"
+
+#~ msgid "Wrong amount of branch edges after conditional jump %i"
+#~ msgstr "Mauvais nombre d'arrêtes de branchement après le branchement conditionnel %i"
+
+#~ msgid "Call edges for non-call insn in bb %i"
+#~ msgstr "Arrêtes d'appel pour un insn n'étant pas d'appel dans le bb %i"
+
+#~ msgid "Abnormal edges for no purpose in bb %i"
+#~ msgstr "Arrête anormale sans but dans le bb %i"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is NULL"
+#~ msgstr "insn %d à l'intérieur du bloc de base %d mais block_for_insn est NULL"
+
+#~ msgid "insn %d inside basic block %d but block_for_insn is %i"
+#~ msgstr "insn %d à l'intérieur du bloc de base %d mais block_for_insn est %i"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK manquant pour le bloc %d"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK %d au milieu du bloc de base %d"
+
+#~ msgid "in basic block %d:"
+#~ msgstr "dans le bloc de base %d :"
+
+#~ msgid "flow control insn inside a basic block"
+#~ msgstr "insn de contrôle de flot à l'intérieur d'un bloc de base"
+
+#~ msgid "missing barrier after block %i"
+#~ msgstr "barrière manquante après le boc %i"
+
+#~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
+#~ msgstr "verify_flow_info: blocs incorrects pour le fallthru %i->%i"
+
+#~ msgid "verify_flow_info: Incorrect fallthru %i->%i"
+#~ msgstr "verify_flow_info: fallthru incorrect %i->%i"
+
+#~ msgid "wrong insn in the fallthru edge"
+#~ msgstr "insn erronée dans l'arrête fallthru"
+
+#~ msgid "basic blocks not laid down consecutively"
+#~ msgstr "les blocs de base ne se suivent pas consécutivement"
+
+#~ msgid "insn outside basic block"
+#~ msgstr "insn à l'extérieur de tout bloc de base"
+
+#~ msgid "return not followed by barrier"
+#~ msgstr "return n'est pas suivi d'une barrière"
+
+# FIXME
+# bb est une abréviation courante dans cette partie du fichier pour « basic block »
+#~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+#~ msgstr "nombre de bb noté dans la chaîne d'insn (%d) != n_basic_blocks (%d)"
+
+#~ msgid "function body not available"
+#~ msgstr "corps de la fonction n'est pas disponible"
+
+#~ msgid "redefined extern inline functions are not considered for inlining"
+#~ msgstr "fonctions externes enlignes redéfinies n'ont pas été retenues pour l'enlignage"
+
+#~ msgid "function not considered for inlining"
+#~ msgstr "fonction n'a pas été retenue pour l'enlignage"
+
+#~ msgid "function not inlinable"
+#~ msgstr "fonction ne peut être enligne"
+
+#~ msgid "%D renamed after being referenced in assembly"
+#~ msgstr "« %D » renommé après avoir été référencé durant l'assemblage"
+
+#~ msgid "--param large-function-growth limit reached"
+#~ msgstr "--param large-function-growth limite atteinte"
+
+#~ msgid "--param large-function-growth limit reached while inlining the caller"
+#~ msgstr "--param large-function-growth limite atteinte lors de l'enlignage de l'appelant"
+
+#~ msgid "--param max-inline-insns-single limit reached"
+#~ msgstr "--param max-inline-insns-single limite atteinte"
+
+#~ msgid "--param max-inline-insns-single limit reached after inlining into the callee"
+#~ msgstr "--param max-inline-insns-single limite atteinte après l'enlignage dans l'appellé"
+
+#~ msgid "--param inline-unit-growth limit reached"
+#~ msgstr "--param inline-unit-growth limite atteinte"
+
+#~ msgid "recursive inlining"
+#~ msgstr "enlignage récursif"
+
+#~ msgid "internal error"
+#~ msgstr "erreur interne"
+
+#~ msgid "no arguments"
+#~ msgstr "pas d'argument"
+
+# I18N
+#~ msgid "fopen %s"
+#~ msgstr "fopen() %s"
+
+# I18N
+#~ msgid "fclose %s"
+#~ msgstr "fclose() %s"
+
+#~ msgid "collect2 version %s"
+#~ msgstr "collect2 version %s"
+
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%d constructeur(s) trouvé(s)\n"
+
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%d destructeur(s)  trouvé(s)\n"
+
+#~ msgid "%d frame table(s) found\n"
+#~ msgstr "%d table(s) de trame trouvée(s)\n"
+
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%s terminé par le signal %d [%s]%s"
+
+#~ msgid "%s returned %d exit status"
+#~ msgstr "%s a retourné %d comme valeur de sortie"
+
+#~ msgid "[cannot find %s]"
+#~ msgstr "[%s introuvable]"
+
+#~ msgid "cannot find `%s'"
+#~ msgstr "« %s » introuvable"
+
+#~ msgid "redirecting stdout: %s"
+#~ msgstr "redirection de stdout : %s"
+
+# FIXME
+#~ msgid "[Leaving %s]\n"
+#~ msgstr "[Laissant %s]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "write_c_file - output name is %s, prefix is %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "write_c_file - le nom de sortie est %s, le préfixe est %s\n"
+
+#~ msgid "cannot find `nm'"
+#~ msgstr "« nm » introuvable"
+
+# I18N
+#~ msgid "pipe"
+#~ msgstr "pipe"
+
+# I18N
+#~ msgid "fdopen"
+#~ msgstr "fdopen"
+
+# I18N
+#~ msgid "dup2 %d 1"
+#~ msgstr "dup2 %d 1"
+
+# I18N
+#~ msgid "close %d"
+#~ msgstr "close %d"
+
+# I18N
+#~ msgid "execv %s"
+#~ msgstr "execv %s"
+
+#~ msgid "init function found in object %s"
+#~ msgstr "fonction init trouvée dans l'objet %s"
+
+#~ msgid "fini function found in object %s"
+#~ msgstr "fonction fini() trouvée dans l'objet %s"
+
+# I18N
+#~ msgid "fclose"
+#~ msgstr "fclose"
+
+#~ msgid "unable to open file '%s'"
+#~ msgstr "impossible d'ouvrir le fichier « %s »"
+
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "impossible d'analyser le fichier  « %s » avec stat()"
+
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "incpable de projeter en mémoire le fichier « %s » avec nmap()"
+
+#~ msgid "not found\n"
+#~ msgstr "introuvable\n"
+
+#~ msgid "dynamic dependency %s not found"
+#~ msgstr "dépendance dynamique %s introuvable"
+
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "le nombre magique du fichier « %s » est erroné"
+
+#~ msgid "dynamic dependencies.\n"
+#~ msgstr "dépendances dynamiques.\n"
+
+#~ msgid "cannot find `ldd'"
+#~ msgstr "« ldd » introuvable"
+
+#~ msgid ""
+#~ "\n"
+#~ "ldd output with constructors/destructors.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "sortie de ldd avec constructeurs/destructeurs.\n"
+
+#~ msgid "unable to open dynamic dependency '%s'"
+#~ msgstr "incapable d'ouvrir la dépendance dynamique « %s »"
+
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s : n'est pas un fichier COFF"
+
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "%s : ne peut ouvrir en tant que fichier COFF"
+
+# I18N
+#~ msgid "library lib%s not found"
+#~ msgstr "bibliothèque lib%s introuvable"
+
+#~ msgid ""
+#~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ "\n"
+#~ msgstr ""
+#~ ";; Statistiques du combinateur : %d tentatives, %d substitutions (%d requérant un nouvel espace),\n"
+#~ ";; %d succès.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ msgstr ""
+#~ "\n"
+#~ ";; Totaux du combinateur : %d tentatives, %d substitutions (%d requérant un nouvel espace),\n"
+#~ ";; %d succès.\n"
+#~ "\n"
+
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "ne peut convertir en un type pointeur"
+
+#~ msgid "pointer value used where a floating point value was expected"
+#~ msgstr "valeur de pointeur utilisée là où une valeur à virgule flottante était attendue"
+
+#~ msgid "aggregate value used where a float was expected"
+#~ msgstr "valeur d'aggrégat utilisée là où un flottant était attendu"
+
+#~ msgid "conversion to incomplete type"
+#~ msgstr "conversion vers un type incomplet"
+
+#~ msgid "can't convert between vector values of different size"
+#~ msgstr "ne peut convertir entre des valeurs de vecteurs de tailles différentes"
+
+#~ msgid "aggregate value used where an integer was expected"
+#~ msgstr "valeur d'aggrégat utilisée là où un entier était attendu"
+
+#~ msgid "pointer value used where a complex was expected"
+#~ msgstr "valeur de pointeur utilisée là où un complexe était attendu"
+
+#~ msgid "aggregate value used where a complex was expected"
+#~ msgstr "valeur d'aggrégat utilisée là où un complexe était attendu"
+
+#~ msgid "can't convert value to a vector"
+#~ msgstr "ne peut convertir une valeur en vecteur"
+
+#~ msgid "`%s' is not a gcov data file"
+#~ msgstr "« %s » n'est pas un fichier de données gcov"
+
+#~ msgid "`%s' is version `%.4s', expected version `%.4s'"
+#~ msgstr "« %s » est de version « %.4s », version « %.4s » attendue"
+
+#~ msgid "coverage mismatch for function %u while reading execution counters."
+#~ msgstr "non concordance de la couverture pour la fonction %u lors de la lecture des compteurs d'exécution"
+
+#~ msgid "checksum is %x instead of %x"
+#~ msgstr "somme de contrôle est %x au lieu de %x"
+
+#~ msgid "number of counters is %d instead of %d"
+#~ msgstr "nombre de compteurs est %d au lieu de %d"
+
+#~ msgid "cannot merge separate %s counters for function %u"
+#~ msgstr "ne peut faire la fusion séparée des compteurs %s pour la fonction %u"
+
+#~ msgid "`%s' has overflowed"
+#~ msgstr "« %s » a déborbé"
+
+#~ msgid "`%s' is corrupted"
+#~ msgstr "« %s » est corrompu"
+
+#~ msgid "file %s not found, execution counts assumed to be zero"
+#~ msgstr "fichier %s non repéré, compteur d'exécution assumé être à zéro"
+
+#~ msgid "no coverage for function '%s' found."
+#~ msgstr "pas de couverture repérée pour la fonction « %s »"
+
+#~ msgid "coverage mismatch for function '%s' while reading counter '%s'."
+#~ msgstr "non concordance de la couverture pour la fonction « %s » lors de la lecture des compteurs d'exécution « %s »"
+
+#~ msgid "cannot open %s"
+#~ msgstr "ne peut ouvrir %s"
+
+#~ msgid "error writing `%s'"
+#~ msgstr "erreur d'écriture dans %s"
+
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "« %s » n'est pas une option valide pour le préprocesseur"
+
+#~ msgid "too many input files"
+#~ msgstr "trop de fichiers d'entrée"
+
+# FIXME: Initialisé, ou ensembles?
+#~ msgid ";; Processing block from %d to %d, %d sets.\n"
+#~ msgstr ";; traitement du bloc de %d à %d, %d initialisés.\n"
+
+#~ msgid "%s:%d: confused by earlier errors, bailing out\n"
+#~ msgstr "%s:%d: embrouillé par les erreurs précédentes, abandon\n"
+
+#~ msgid "compilation terminated.\n"
+#~ msgstr "compilation terminée.\n"
+
+# FIXME
+#~ msgid "Internal compiler error: Error reporting routines re-entered.\n"
+#~ msgstr "erreur interne au compilateur : routine de rapport d'erreur préemptée.\n"
+
+#~ msgid "in %s, at %s:%d"
+#~ msgstr "dans %s, à %s:%d"
+
+# FIXME
+#~ msgid "dominator of %d should be %d, not %d"
+#~ msgstr "le dominateur de %d devrait être %d, et non %d"
+
+#~ msgid "DW_LOC_OP %s not implemented\n"
+#~ msgstr "DW_LOC_OP %s n'est pas implanté\n"
+
+#~ msgid "can't access real part of complex value in hard register"
+#~ msgstr "ne peut accéder à la partie réelle d'une valeur complexe dans un registre matériel"
+
+#~ msgid "can't access imaginary part of complex value in hard register"
+#~ msgstr "ne peut accéder à la partie imaginaire d'une valeur complexe dans un registre matériel"
+
+#~ msgid "Invalid rtl sharing found in the insn"
+#~ msgstr "partage rtl invalide repéré dans l'insn"
+
+#~ msgid "Shared rtx"
+#~ msgstr "rtx partagé"
+
+#~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
+#~ msgstr "ICE : emit_insn utilisé là où emit_jump_insn était attendu :\n"
+
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "abandon dans %s, à %s:%d"
+
+#~ msgid "exception handling disabled, use -fexceptions to enable"
+#~ msgstr "traitement des exceptions désactivé, utiliser -fexceptions pour l'activer"
+
+#~ msgid "argument of `__builtin_eh_return_regno' must be constant"
+#~ msgstr "l'argument de « __builtin_eh_return_regno » doit être une constante"
+
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "« __builtin_eh_return » n'est pas possible sur cette cible"
+
+# FIXME
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "les limites de la pile ne sont pas supportées sur cette cible"
+
+#~ msgid "function using short complex types cannot be inline"
+#~ msgstr "un foncton utilisant un type « complex short » ne peut être enligne"
+
+#~ msgid "%Jprior parameter's size depends on '%D'"
+#~ msgstr "%Jtaille du paramètre précédent dépend de « %D »"
+
+#~ msgid "returned value in block_exit_expr"
+#~ msgstr "valeur retournée dans block_exit_expr"
+
+#~ msgid "cannot take the address of an unaligned member"
+#~ msgstr "ne peut prendre l'adresse d'un membre non aligné"
+
+#~ msgid "negative insn length"
+#~ msgstr "longueur négative insn"
+
+#~ msgid "could not split insn"
+#~ msgstr "n'a pu séparer insn"
+
+#~ msgid "invalid `asm': "
+#~ msgstr "« asm » invalide: "
+
+#~ msgid "nested assembly dialect alternatives"
+#~ msgstr "assemblage de dialectes alternatifs imbriqués"
+
+#~ msgid "unterminated assembly dialect alternative"
+#~ msgstr "assemblage de dialectes alternatifs non terminé"
+
+#~ msgid "operand number missing after %%-letter"
+#~ msgstr "numéro d'opérande manquant après %%-letter"
+
+#~ msgid "operand number out of range"
+#~ msgstr "nombre d'opérandes hors limite"
+
+#~ msgid "invalid %%-code"
+#~ msgstr "%%-code est invalide"
+
+#~ msgid "`%%l' operand isn't a label"
+#~ msgstr "opérande « %%l » n'est pas une étiquette"
+
+#~ msgid "floating constant misused"
+#~ msgstr "constante flottante mal utilisée"
+
+#~ msgid "invalid expression as operand"
+#~ msgstr "expression invalide comme opérande"
+
+#~ msgid "function might be possible candidate for attribute `noreturn'"
+#~ msgstr "fonction peut être une possible candidate pour l'attribut « norreturn »"
+
+#~ msgid "`noreturn' function does return"
+#~ msgstr "fonction avec « noreturn » effectue des retour"
+
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "contrôle a atteint la fin non void de la fonction"
+
+#~ msgid "Attempt to delete prologue/epilogue insn:"
+#~ msgstr "Tentative pour détruire le prologue/épilogue insn:"
+
+#~ msgid "comparison is always %d due to width of bit-field"
+#~ msgstr "comparaison est toujours %d en raison de la largeur du champ de bits"
+
+#~ msgid "comparison is always %d"
+#~ msgstr "comparaison est toujours %d"
+
+#~ msgid "`or' of unmatched not-equal tests is always 1"
+#~ msgstr "« or » de tests non pairé de non égalité est troujours 1"
+
+#~ msgid "`and' of mutually exclusive equal-tests is always 0"
+#~ msgstr "« and » de tests d'égalité mutuellement exclusifs est toujours 0"
+
+#~ msgid "fold check: original tree changed by fold"
+#~ msgstr "vérification fold: arbre originale modifié par fold"
+
+#~ msgid "%Jsize of variable '%D' is too large"
+#~ msgstr "%Jtaille de la variable « %D » est trop grande"
+
+#~ msgid "impossible constraint in `asm'"
+#~ msgstr "contrainte impossible dans « asm »"
+
+#~ msgid "%J'%D' might be used uninitialized in this function"
+#~ msgstr "%J« %D » pourrait être utilisé sans être initialisé dans cette fonction"
+
+#~ msgid "%Jvariable '%D' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "%Jvariable « %D » pourrait être maltraitée par un «longjmp» ou un «vfork »"
+
+#~ msgid "%Jargument '%D' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "%Jargument « %D » pourrait être maltraitée par un «longjmp» ou un «vfork »"
+
+#~ msgid "function returns an aggregate"
+#~ msgstr "fonction retourne un aggrégat"
+
+#~ msgid "%Junused parameter '%D'"
+#~ msgstr "%Jparamètre « %D » inutilisé"
+
+#~ msgid "ambiguous abbreviation %s"
+#~ msgstr "abréviation %s est ambiguë"
+
+#~ msgid "incomplete `%s' option"
+#~ msgstr "option « %s » est incomplète"
+
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "argument manquant à l'option « %s »"
+
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "argument superflu à l'option « %s »"
+
+#~ msgid "Using built-in specs.\n"
+#~ msgstr "Utilisation des specs internes.\n"
+
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Initialisation des spec %s à « %s »\n"
+#~ "\n"
+
+#~ msgid "Reading specs from %s\n"
+#~ msgstr "Lecture des spécification à partir de %s\n"
+
+#~ msgid "specs %%include syntax malformed after %ld characters"
+#~ msgstr "syntaxe des specs %%include mal composée après %ld caractères"
+
+#~ msgid "could not find specs file %s\n"
+#~ msgstr "ne peut repérer le fichiers des specs %s\n"
+
+#~ msgid "specs %%rename syntax malformed after %ld characters"
+#~ msgstr "specs de la syntaxe %%rename mal composées après %ld caractères"
+
+#~ msgid "specs %s spec was not found to be renamed"
+#~ msgstr "specs de la spécification %s n'a pas été trouvé pour être renommer"
+
+#~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
+#~ msgstr "%s: tentative pour renommner la spécification « %s » à un spécification « %s » déjà définie"
+
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "renommé les specs %s à %s\n"
+
+#~ msgid ""
+#~ "spec is '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "spec est « %s »\n"
+#~ "\n"
+
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "specs inconnus de la commande %% après %ld caractères"
+
+#~ msgid "specs file malformed after %ld characters"
+#~ msgstr "fichier de specs mal composé après %ld caractères"
+
+#~ msgid "spec file has no spec for linking"
+#~ msgstr "fichier de specs n'a pas de spécification pour l'édition de liens"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "-pipe n'est pas supporté"
+
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr ""
+#~ "\n"
+#~ "Aller de l'avant? (y ou n) "
+
+#~ msgid ""
+#~ "Internal error: %s (program %s)\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "Erreur internal error: %s (programme %s)\n"
+#~ "SVP soumettre un rapport complet d'anomalies.\n"
+#~ "Consulter %s pour les instructions."
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "Usage: %s [options] fichier...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "Options:\n"
+
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr "  -pass-exit-codes         quitter avec le plus grand code d'erreur de la phase\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   afficher l'aide mémoire\n"
+
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "  --target-help            afficher les options spécifiques de la ligne de commande\n"
+
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "  (Utiliser «-v --help» pour afficher les options de la ligne de commande des sous-processus)\n"
+
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "  -dumpspecs               afficher tous les construits des chaînes de specs\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             afficher la version du compilateur\n"
+
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "  -dumpmachine             afficher le processeur ciblé par le compilateur\n"
+
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "  -print-search-dirs       afficher les répertoires du chemin de recherche du compiltateur\n"
+
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "  -print-libgcc-file-name  afficher le nom de la bibliothèque compagne du compilateur\n"
+
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "  -print-file-name=<lib>   afficher le chemin d'accès complet vers la bibliothèque <lib>\n"
+
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "  -print-prog-name=<prog>  afficher le chemin d'accès complet vers le composant du compilateur <prog>\n"
+
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "  -print-multi-directory   afficher la racine du répertoire des version libgcc\n"
+
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr ""
+#~ "  -print-multi-lib         Afficher la table de projection entre les options de\n"
+#~ "                           la ligne de commande et les multiples répertoires de\n"
+#~ "                           recherches des bibliothèques\n"
+
+#~ msgid "  -print-multi-os-directory Display the relative path to OS libraries\n"
+#~ msgstr "  -print-multi-os-directory   afficher le chemin relatif du répertoire vers les librairies de l'OS\n"
+
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "  -Wa,<options>            passer les <options> séparées par des virgules à l'assembleur\n"
+
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "  -Wp,<options>            passer les <options> séparées par des virgules au préprocesseur\n"
+
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "  -Wl,<options>            passer les <options> séparées par des virgules  à l'éditeur de liens\n"
+
+#~ msgid "  -Xassembler <arg>        Pass <arg> on to the assembler\n"
+#~ msgstr "  -Xassembler <arg>        passer l'<arg>ument à l'assembleur\n"
+
+#~ msgid "  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor\n"
+#~ msgstr "  -Xpreprocessor <arg>     passer l'<arg>ument au pré-processeur\n"
+
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "  -Xlinker <argument>      passer l'<argument> à l'éditeur de liens\n"
+
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "  -save-temps              ne pas détruire les fichiers intermédiaires\n"
+
+#~ msgid "  -pipe                    Use pipes rather than intermediate files\n"
+#~ msgstr "  -pipe                    utiliser des pipes au lieu de fichiers intermédiares\n"
+
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "  -time                    mesurer le temps d'exécution de chaque sous-processus\n"
+
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr "  -specs=<fichier>         écraser les specs internes à l'aide du contenu du <fichier>\n"
+
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr "  -std=<standard>          Présumer que les fichiers sources respectent le <standard>\n"
+
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "  -B <répertoire>          ajouter le <répertoire> aux chemins de recherche du compilateur\n"
+
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr "  -b <machine>             exécuter gcc pour la <machine> cible, si installé\n"
+
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr "  -V <version>             exécuter le numéro de <version> de gcc, si installée\n"
+
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "  -v                       afficher les programmes invoqués par le compilateur\n"
+
+#~ msgid "  -###                     Like -v but options quoted and commands not executed\n"
+#~ msgstr "  -###                     identique à -v mais les options et les commandes entre guillemets ne sont pas exécutées\n"
+
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr "  -E                       pré-traiter seulement; ne pas compiler, assembler ou éditer les liens\n"
+
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "  -S                       compiler seulement; ne pas assembler ou éditer les liens\n"
+
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "  -S                       compiler et assembler, mais ne pas éditer les liens\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <fichier>             placer la sortie dans le <fichier>\n"
+
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissible languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behavior of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr ""
+#~ "  -x <langage>             spécifier le langage des fichiers suivants d'entrée\n"
+#~ "                           Les langages permis sont: c c++ assembler none\n"
+#~ "                           « none » signifiant d'utiliser le comportement par défaut\n"
+#~ "                           en tentant d'identifier le langage par l'extension du fichier\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Options débutant par -g, -f, -m, -O, -W, ou --param sont automatiquement\n"
+#~ " passés aux divers sous-processus invoqués par %s.  Afin de passer\n"
+#~ " les autres options à ces processus l'option -W<lettre> doit être utilisé.\n"
+
+#~ msgid "`-%c' option must have argument"
+#~ msgstr "l'option « -%c » requière un argument"
+
+#~ msgid "couldn't run `%s': %s"
+#~ msgstr "impossible d'exécuter « %s » : %s"
+
+#~ msgid "%s (GCC) %s\n"
+#~ msgstr "%s (GCC) %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.  There is NO\n"
+#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Ce logiciel est libre; voir les sources pour les conditions de copie.  Il n'y a PAS\n"
+#~ "GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.\n"
+#~ "\n"
+
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "argument de «-Xlinker» est manquant"
+
+#~ msgid "argument to `-Xpreprocessor' is missing"
+#~ msgstr "argument de « -Xpreprocessor » est manquant"
+
+#~ msgid "argument to `-Xassembler' is missing"
+#~ msgstr "argument de « -Xassembler » est manquant"
+
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "argument pour « -l » est manquant"
+
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "argument de « -specs » est manquant"
+
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "argument de «-specs=» est manquant"
+
+#~ msgid "`-%c' must come at the start of the command line"
+#~ msgstr "« -%c » doit apparaître au début de la ligne de commande"
+
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "argument de « -B » est manquant"
+
+#~ msgid "warning: -pipe ignored because -save-temps specified"
+#~ msgstr "AVERTISSEMENT: -pipe ignoré parce que -save-temps a été spécifié"
+
+#~ msgid "warning: -pipe ignored because -time specified"
+#~ msgstr "AVERTISSEMENT: -pipe ignoré parce que -time a été spécifié"
+
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "argument pour « -x » est manquant"
+
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "argument pour « -%s » est manquant"
+
+#~ msgid "warning: `-x %s' after last input file has no effect"
+#~ msgstr "AVERTISSEMENT: « -x %s » après le dernier fichier d'entrée n'a pas d'effet"
+
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "spécification invalide!  Bug dans cc."
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "spec failure: '%%*' has not been initialized by pattern match"
+#~ msgstr "échec du spec: « %%* » n'a pas été initialisé par concordance du canevas"
+
+#~ msgid "warning: use of obsolete %%[ operator in specs"
+#~ msgstr "AVERTISSEMENT: utilisation obsolète de l'opérateur %%[ dans les specs"
+
+#~ msgid "Processing spec %c%s%c, which is '%s'\n"
+#~ msgstr "Traitement du spec %c%s%c, lequel est « %s »\n"
+
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "échec de spec: option « %c » de spec non reconnue"
+
+#~ msgid "unknown spec function `%s'"
+#~ msgstr "spécification de fonction inconnue « %s »:"
+
+#~ msgid "error in args to spec function `%s'"
+#~ msgstr "ERREUR d'arguments pour la spécification de fonction « %s »"
+
+#~ msgid "malformed spec function name"
+#~ msgstr "nom de spécification de fonction mal composé"
+
+#~ msgid "no arguments for spec function"
+#~ msgstr "aucun argument pour la spécification de fonction"
+
+#~ msgid "malformed spec function arguments"
+#~ msgstr "arguments de spécification de fonction mal composés"
+
+#~ msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC."
+#~ msgstr "échec de spécification: plus d'un argument à SYSROOT_SUFFIX_SPEC."
+
+#~ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC."
+#~ msgstr "échec de spécification: plus d'un argument à SYSROOT_HEADERS_SUFFIX_SPEC."
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "option « -%s » non reconnue"
+
+#~ msgid "install: %s%s\n"
+#~ msgstr "installés: %s%s\n"
+
+#~ msgid "programs: %s\n"
+#~ msgstr "programmes: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "libraries: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Pour les instructons afin de rapporter des anomales, SVP consulter:\n"
+
+#~ msgid "Configured with: %s\n"
+#~ msgstr "Configuré avec: %s\n"
+
+#~ msgid "Thread model: %s\n"
+#~ msgstr "Modèle de thread: %s\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "version gcc %s\n"
+
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "version du pilote gcc %s exécutant le version %s de gcc\n"
+
+#~ msgid "no input files"
+#~ msgstr "pas de fichier à l'entrée"
+
+#~ msgid "%s: linker input file unused because linking not done"
+#~ msgstr "%s: fichier d'entrée d'édition de liens n'est pas utilisé parce l'édition de lien n'a pas été faite"
+
+#~ msgid "cannot specify -o with -c or -S and multiple languages"
+#~ msgstr "ne peut spécifier -o avec -c ou -S et de multiples langages"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: %s compilateur n'est pas installé sur ce système"
+
+#~ msgid "language %s not recognized"
+#~ msgstr "language %s n'est pas reconnu"
+
+#~ msgid "internal gcc abort"
+#~ msgstr "abandon interne de gcc"
+
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "Abandon interne de gcov.\n"
+
+#~ msgid ""
+#~ "Usage: gcov [OPTION]... SOURCEFILE\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: gcov [OPTION]... FICHIER-SOURCE\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Print code coverage information.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Produire les informations de la couverture du code.\n"
+#~ "\n"
+
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "  -h, --help               afficher l'aide mémoire\n"
+
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "  -v, --version            exécuter le numéro de <version> de gcc, si installée\n"
+
+#~ msgid "  -a, --all-blocks                Show information for every basic block\n"
+#~ msgstr "  -a, --all-blocks                afficher l'information pour chaque bloc de base\n"
+
+#~ msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
+#~ msgstr "  -b, --branch-probabilities      inclure les probabilités de branchement dans la sortie\n"
+
+#~ msgid ""
+#~ "  -c, --branch-counts             Given counts of branches taken\n"
+#~ "                                    rather than percentages\n"
+#~ msgstr ""
+#~ "  -c, --branch-counts             donner le décompte de branchements pris\n"
+#~ "                                    plutôt que les pourcentages\n"
+
+#~ msgid "  -n, --no-output                 Do not create an output file\n"
+#~ msgstr "  -n, --no-output                 ne créer de fichier de sortie\n"
+
+#~ msgid ""
+#~ "  -l, --long-file-names           Use long output file names for included\n"
+#~ "                                    source files\n"
+#~ msgstr ""
+#~ "  -l, --long-file-names           utiliser des longs noms de fichiers pour\n"
+#~ "                                    les fichier sources d'inclusion\n"
+
+#~ msgid "  -f, --function-summaries        Output summaries for each function\n"
+#~ msgstr "  -f, --function-summaries        produire un sommaire pour chaque fonction\n"
+
+#~ msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+#~ msgstr "  -o, --object-directory RÉP|FICHIERS  rechercher les fichiers objets dans le RÉPertoire ou appellés FICHIERS\n"
+
+#~ msgid "  -p, --preserve-paths            Preserve all pathname components\n"
+#~ msgstr "  -p, --preserve-paths            préserver tous les composants des chemins d'accès\n"
+
+#~ msgid "  -u, --unconditional-branches    Show unconditional branch counts too\n"
+#~ msgstr "  -u, --unconditional-branches    afficher les compteurs de branchement inconditionnel aussi\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Pour les instructons afin de rapporter des anomales, SVP consulter:\n"
+#~ "%s.\n"
+
+#~ msgid "gcov (GCC) %s\n"
+#~ msgstr "gcov (GCC) %s\n"
+
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.\n"
+#~ "There is NO warranty; not even for MERCHANTABILITY or \n"
+#~ "FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Ce logiciel est libre; voir les sources pour les conditions de copie. \n"
+#~ "Il n'y a PAS GARANTIE; ni implicite pour le MARCHANDAGE ou\n"
+#~ "pour un BUT PARTICULIER.\n"
+#~ "\n"
+
+#~ msgid "%s:no functions found\n"
+#~ msgstr "%s: aucune fonction repérée\n"
+
+# I18N
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "%s:creating `%s'\n"
+#~ msgstr "%s: création de « %s »\n"
+
+#~ msgid "%s:error writing output file `%s'\n"
+#~ msgstr "%s: ERREUR d'écriture dans le fichier de sortie « %s ».\n"
+
+#~ msgid "%s:could not open output file `%s'\n"
+#~ msgstr "%s: ne peut ouvrir le fichier de sortie « %s ».\n"
+
+#~ msgid "%s:cannot open graph file\n"
+#~ msgstr "%s: ne peut ouvrir le fichier de graphe\n"
+
+#~ msgid "%s:not a gcov graph file\n"
+#~ msgstr "%s: n'est pas un fichier de graphe gcov\n"
+
+#~ msgid "%s:version `%.4s', prefer `%.4s'\n"
+#~ msgstr "%s:version « %.4s », préfère « %.4s »\n"
+
+#~ msgid "%s:already seen blocks for `%s'\n"
+#~ msgstr "%s:blocs déjà vus pour « %s »\n"
+
+#~ msgid "%s:corrupted\n"
+#~ msgstr "%s:corrompu\n"
+
+#~ msgid "%s:cannot open data file\n"
+#~ msgstr "%s: ne peut ouvrir le fichier de données\n"
+
+#~ msgid "%s:not a gcov data file\n"
+#~ msgstr "%s: n'est pas un fichier de données gcov\n"
+
+#~ msgid "%s:version `%.4s', prefer version `%.4s'\n"
+#~ msgstr "%s:version « %.4s », préfère la version « %.4s »\n"
+
+#~ msgid "%s:stamp mismatch with graph file\n"
+#~ msgstr "%s: estampille ne concorde par avec le fichier de graphe\n"
+
+#~ msgid "%s:unknown function `%u'\n"
+#~ msgstr "%s: fonction inconnue « %u »\n"
+
+#~ msgid "%s:profile mismatch for `%s'\n"
+#~ msgstr "%s: profile ne concorde pas pour « %s »\n"
+
+#~ msgid "%s:overflowed\n"
+#~ msgstr "%s: débordement\n"
+
+#~ msgid "%s:`%s' lacks entry and/or exit blocks\n"
+#~ msgstr "%s:« %s » manque de blocs d'entrée et/ou de sortie\n"
+
+#~ msgid "%s:`%s' has arcs to entry block\n"
+#~ msgstr "%s:« %s » possède des arcs vers un bloc d'entrée\n"
+
+#~ msgid "%s:`%s' has arcs from exit block\n"
+#~ msgstr "%s:« %s » possèdes des arcs à partir du bloc de sortie\n"
+
+#~ msgid "%s:graph is unsolvable for `%s'\n"
+#~ msgstr "%s: graphe n'a pas de solution pour « %s »\n"
+
+#~ msgid "%s `%s'\n"
+#~ msgstr "%s « %s »\n"
+
+#~ msgid "Lines executed:%s of %d\n"
+#~ msgstr "Lignes exécutées: %s de %d\n"
+
+#~ msgid "No executable lines"
+#~ msgstr "Auncue ligne exécutable"
+
+#~ msgid "Branches executed:%s of %d\n"
+#~ msgstr "Branchements exécutés: %s de %d\n"
+
+#~ msgid "Taken at least once:%s of %d\n"
+#~ msgstr "Branchements pris au moins une fois: %s de %d\n"
+
+#~ msgid "No branches\n"
+#~ msgstr "Pas de branchement\n"
+
+#~ msgid "Calls executed:%s of %d\n"
+#~ msgstr "Appels exécutés: %s de %d\n"
+
+#~ msgid "No calls\n"
+#~ msgstr "Pas d'appel\n"
+
+#~ msgid "%s:no lines for `%s'\n"
+#~ msgstr "%s: pas de ligne pour « %s »\n"
+
+#~ msgid "call   %2d returned %s\n"
+#~ msgstr "appel  %2d a retourné %s\n"
+
+# FIXME: c'est de l'assembleur ?
+#~ msgid "call   %2d never executed\n"
+#~ msgstr "call   %2d n'est jamais été exécuté\n"
+
+#~ msgid "branch %2d taken %s%s\n"
+#~ msgstr "branchement %2d a pris %s%s\n"
+
+#~ msgid "branch %2d never executed\n"
+#~ msgstr "branchement %2d n'a jamais été exécuté\n"
+
+#~ msgid "unconditional %2d taken %s\n"
+#~ msgstr "inconditionnel %2d a pris %s\n"
+
+# FIXME: c'est de l'assembleur ?
+#~ msgid "unconditional %2d never executed\n"
+#~ msgstr "inconditionnel %2d n'a jamais été exécuté\n"
+
+#~ msgid "%s:cannot open source file\n"
+#~ msgstr "%s: ne peut ouvrir le fichier source\n"
+
+#~ msgid "%s:source file is newer than graph file `%s'\n"
+#~ msgstr "%s: fichier source est plus récent que le fichier graphe « %s »\n"
+
+#~ msgid "GCSE disabled"
+#~ msgstr "GCSE désactivé"
+
+#~ msgid "NULL pointer checks disabled"
+#~ msgstr "vérification des pointeurs NULS désactivée"
+
+#~ msgid "jump bypassing disabled"
+#~ msgstr "saut d'évitement désactivé"
+
+#~ msgid "%s: %d basic blocks and %d edges/basic block"
+#~ msgstr "%s: %d blocs de base et %d blocs edges/basic"
+
+#~ msgid "%s: %d basic blocks and %d registers"
+#~ msgstr "%s: %d blocs basic et %d registres"
+
+#~ msgid "can't write PCH file: %m"
+#~ msgstr "ne peut écrire le fichier PCH: %m"
+
+#~ msgid "can't get position in PCH file: %m"
+#~ msgstr "ne peut obtenir la position dans le fichier PCH: %m"
+
+#~ msgid "can't write padding to PCH file: %m"
+#~ msgstr "ne peut écrire de remplissage dans le fichier PCH: %m"
+
+#~ msgid "can't read PCH file: %m"
+#~ msgstr "ne peut lire le fichier PCH: %m"
+
+#~ msgid "had to relocate PCH"
+#~ msgstr "a dû relocaliser PCH"
+
+#~ msgid "open /dev/zero: %m"
+#~ msgstr "ouverture de /dev/zero: %m"
+
+#~ msgid "can't write PCH file"
+#~ msgstr "ne peut écrire dans le fichier PCH"
+
+#~ msgid "Generating PCH files is not supported when using ggc-simple.c"
+#~ msgstr "Génération des ficheirs PCH n'est pas supporté lors de l'utilisation de ggc-simple.c"
+
+#~ msgid "%s cannot be used in asm here"
+#~ msgstr "%s ne peut être utilisé dans asm ici"
+
+#~ msgid "can't open %s: %m"
+#~ msgstr "ne peut ouvrir %s: %m"
+
+#~ msgid "fix_sched_param: unknown param: %s"
+#~ msgstr "fix_sched_param: paramètre inconnu: %s"
+
+#~ msgid "function cannot be inline"
+#~ msgstr "fonction ne pas pas être enligne"
+
+#~ msgid "varargs function cannot be inline"
+#~ msgstr "varargs de fonction ne peuvent par être enligne"
+
+#~ msgid "function using alloca cannot be inline"
+#~ msgstr "fonction utilisant alloca ne pas pas être enligne"
+
+#~ msgid "function using longjmp cannot be inline"
+#~ msgstr "fonction utilisant longjmp ne peut pas être enligne"
+
+#~ msgid "function using setjmp cannot be inline"
+#~ msgstr "fonction utilisant setjmp ne peut pas être enligne"
+
+#~ msgid "function uses __builtin_eh_return"
+#~ msgstr "fonction utilise « __builtin_eh_return »"
+
+#~ msgid "function with nested functions cannot be inline"
+#~ msgstr "fonction avec fonctions imbriquées ne peut pas être enligne"
+
+#~ msgid "function with label addresses used in initializers cannot inline"
+#~ msgstr "un fonction avec étiquette d'adresses utilisée pour l'initialisation ne peut pas être enligne (inline)"
+
+#~ msgid "function too large to be inline"
+#~ msgstr "fonction trop grande pour être enligne"
+
+#~ msgid "no prototype, and parameter address used; cannot be inline"
+#~ msgstr "pas de prototpe, et de adresse de paramètre utilisée; ne peut pas être enligne"
+
+#~ msgid "inline functions not supported for this return value type"
+#~ msgstr "fonctions enligne ne peuvent pas être supportées pour ce type de valeur retournée"
+
+#~ msgid "function with varying-size return value cannot be inline"
+#~ msgstr "fonction avec une valeur retournée de taille variable ne peut pas être enligne"
+
+#~ msgid "function with varying-size parameter cannot be inline"
+#~ msgstr "fonction avec un paramètre de taille variable ne peut pas être enligne"
+
+#~ msgid "function with transparent unit parameter cannot be inline"
+#~ msgstr "fonction avec une unité transparente de paramètre ne peut pas être enligne"
+
+#~ msgid "function with computed jump cannot inline"
+#~ msgstr "fonction avec un saut calculé ne peut pas être enligne"
+
+#~ msgid "function with nonlocal goto cannot be inline"
+#~ msgstr "fonction avec un goto non local ne peut pas être enligne"
+
+#~ msgid "function with target specific attribute(s) cannot be inlined"
+#~ msgstr "fonction avec des attributs spécifiques à la cible ne peut pas être enligne"
+
+# FIXME: c'est de l'assembleur ?
+#~ msgid "%Hwill never be executed"
+#~ msgstr "%Hne sera jamais exécuté"
+
+#~ msgid "This switch lacks documentation"
+#~ msgstr "Cette option manque de documentation"
+
+#~ msgid "command line option \"%s\" is valid for %s but not for %s"
+#~ msgstr "l'option de la ligne de commande \"%s\" est valide pour %s mais pas pour %s"
+
+#~ msgid "missing argument to \"%s\""
+#~ msgstr "argument manquant à \"%s\""
+
+#~ msgid "argument to \"%s\" should be a non-negative integer"
+#~ msgstr "argument de \"%s\" doit être un entier non négatif"
+
+#~ msgid "unrecognized command line option \"%s\""
+#~ msgstr "option \"%s\" de la ligne de commande non reconnue"
+
+#~ msgid "-Wuninitialized is not supported without -O"
+#~ msgstr "-Wuninitialized n'est pas supporté sans -O"
+
+#~ msgid "unrecognized register name \"%s\""
+#~ msgstr "nom de registre non reconnue \"%s\""
+
+#~ msgid "unknown tls-model \"%s\""
+#~ msgstr "tls-model  \"%s\" inconnu"
+
+#~ msgid "-fwritable-strings is deprecated; see documentation for details"
+#~ msgstr "-fwritable-strings est obsolète, voir la documentation pour les détails"
+
+#~ msgid "%s: --param arguments should be of the form NAME=VALUE"
+#~ msgstr "%s: arguments de --param devrait être de la forme NOM=VALEUR"
+
+#~ msgid "invalid --param value `%s'"
+#~ msgstr "valeur de --param invalide « %s »"
+
+#~ msgid "target system does not support debug output"
+#~ msgstr "le ssytème cible ne supporte pas la sortie pour mise au point"
+
+#~ msgid "debug format \"%s\" conflicts with prior selection"
+#~ msgstr "le format de mise au point \"%s\" entre en conflit avec une sélection précédente"
+
+#~ msgid "unrecognised debug output level \"%s\""
+#~ msgstr "niveau de sortie de mise au point non reconnu \"%s\""
+
+#~ msgid "debug output level %s is too high"
+#~ msgstr "niveau de sortie de mise au point %s est trop élevé"
+
+#~ msgid "The following options are language-independent:\n"
+#~ msgstr "Les options suivantes sont indépendantes du langage:\n"
+
+#~ msgid ""
+#~ "The %s front end recognizes the following options:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "L'interface %s reconnaît les options suivantes:\n"
+#~ "\n"
+
+#~ msgid "The --param option recognizes the following as parameters:\n"
+#~ msgstr "L'option --param reconnaît les paramètres suivant:\n"
+
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "paramètre invalide « %s »"
+
+#~ msgid "corrupted profile info: run_max * runs < sum_max"
+#~ msgstr "profile info corrompu: run_max * runs < sum_max"
+
+#~ msgid "corrupted profile info: sum_all is smaller than sum_max"
+#~ msgstr "info profile corrompu: sum_all est plus petit que sum_max"
+
+#~ msgid "corrupted profile info: edge from %i to %i exceeds maximal count"
+#~ msgstr "info de profilage corrompu: bordure (edge) %i à %i excède le compte maximal"
+
+#~ msgid "corrupted profile info: number of iterations for basic block %d thought to be %i"
+#~ msgstr "info de profilage corrompu: nombre d'itérations pour un bloc basic %d devrait être %i"
+
+#~ msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i"
+#~ msgstr "info de profilage corrompu: nombre d'exécutions pour bordures (edge) %d-%d devrait être %i"
+
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s: abandon interne\n"
+
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s: erreur d'écriture au fichier « %s »: %s\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s: usage « %s [ -VqfnkN ] [ -i <chaîne> ] [ nom-de-fichier ... ] »\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s: usage « %s [ -VqfnkNlgC ] [ -B <répertoire> ] [ nom-de-fichier ... ] »\n"
+
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: aucun accès en lecture du fichier « %s »\n"
+
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: aucun accès en écriture du fichier « %s »\n"
+
+#~ msgid "%s: warning: no write access for dir containing `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: aucun accès en écriture du répertoire contenant « %s »\n"
+
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s: nom de fichier invalide: %s\n"
+
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s: %s: ne peut obtenir l'état: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: fatal error: aux info file corrupted at line %d\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: erreur fatale: fichier auxiliaire d'infos à la ligne %d\n"
+
+#~ msgid "%s:%d: declaration of function `%s' takes different forms\n"
+#~ msgstr "%s:%d: déclaration de fonction « %s » prend différentes formes\n"
+
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: en compilation « %s »\n"
+
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s: en attente: %s\n"
+
+#~ msgid "%s: subprocess got fatal signal %d\n"
+#~ msgstr "%s: sous-processus a reçu le signal fatal %d\n"
+
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s: %s a terminé avec le statut %d\n"
+
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: fichier des SYSCALLS « %s » est manquant\n"
+
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s: ne peut lire le fichier auxiliaire d'infos « %s »: %s\n"
+
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "%s: ne peut obtenir l'état du fichier auxiliaire d'infos « %s »: %s\n"
+
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "%s: ne peut ouvrir le fichier auxiliaire d'infos « %s » en lecture: %s\n"
+
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s: erreur lors de la lecture du fichier auxilaire d'infos « %s »: %s\n"
+
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s: erreur lors de la fermeture du fichier auxiliaire d'infos « %s »: %s\n"
+
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s: ne peut détruire le fichier auxiliaire d'infos « %s »: %s\n"
+
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: ne peut détruire le fichier « %s »: %s\n"
+
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s: AVERTISSEMENT: ne peut renommer le fichier « %s » à « %s »: %s\n"
+
+#~ msgid "%s: conflicting extern definitions of '%s'\n"
+#~ msgstr "%s: définitions externes conflictuelles de « %s »\n"
+
+#~ msgid "%s: declarations of '%s' will not be converted\n"
+#~ msgstr "%s: déclarations de « %s » ne seront pas converties\n"
+
+#~ msgid "%s: conflict list for '%s' follows:\n"
+#~ msgstr "%s: liste conflictuelle pour « %s » suit:\n"
+
+#~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: using la liste des formels de %s(%d) pour la fonction « %s »\n"
+
+#~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+#~ msgstr "%s: %d: « %s » utilisé mais manquant dans les SYSCALLS\n"
+
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: pas de définition externe pour « %s »\n"
+
+#~ msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: pas de définition statique pour « %s » dans le fichier« %s »\n"
+
+#~ msgid "%s: multiple static defs of `%s' in file `%s'\n"
+#~ msgstr "%s: multiples définitions statiques de « %s » dans le fichier « %s »\n"
+
+#~ msgid "%s: %d: warning: source too confusing\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: trop de confusions dans le source\n"
+
+#~ msgid "%s: %d: warning: varargs function declaration not converted\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: déclaration de varargs de fonction non convertis\n"
+
+#~ msgid "%s: declaration of function `%s' not converted\n"
+#~ msgstr "%s: déclaration de la fonction « %s » non convertie\n"
+
+#~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: trop de paramètres de listes dans la déclaration de « %s »\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: AVERTISSEMENT: trop peu de paramètres de listes dans la déclaration de « %s »\n"
+
+#~ msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: a obtenu « %s » mais attendait « %s »\n"
+
+#~ msgid "%s: local declaration for function `%s' not inserted\n"
+#~ msgstr "%s: déclaration locale pour la fonction « %s » n'a pas été insérée\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %d: warning: can't add declaration of `%s' into macro call\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %d: AVERTISSEMENT: ne peut ajouter une déclaration de « %s » dans l'appel macro\n"
+
+#~ msgid "%s: global declarations for file `%s' not inserted\n"
+#~ msgstr "%s: déclarations globale du fichier « %s » n'ont pas été insérées\n"
+
+#~ msgid "%s: definition of function `%s' not converted\n"
+#~ msgstr "%s: définition de la fonction « %s » n'a pas été convertie\n"
+
+#~ msgid "%s: %d: warning: definition of %s not converted\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: définition de %s n'a pas été convertie\n"
+
+#~ msgid "%s: found definition of `%s' at %s(%d)\n"
+#~ msgstr "%s: définition de « %s » trouvé à %s(%d)\n"
+
+#~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+#~ msgstr "%s: %d: AVERTISSEMENT: « %s » exclu par le préprocesseur\n"
+
+#~ msgid "%s: function definition not converted\n"
+#~ msgstr "%s: définition de fonction n'a pas été convertie\n"
+
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s: « %s » n'a pas été converti\n"
+
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s: devrait convertir le fichier « %s »\n"
+
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "%s: conversion du fichier « %s »\n"
+
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "%s: ne peut obtenur l'état du fichier « %s »: %s\n"
+
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: ne peut ouvrir le fichier « %s » en lecture: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: erreur de lecture du fichier d'entrée « %s »: %s\n"
+
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s: ne peut créer/ouvrir un fichier propre « %s »: %s\n"
+
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s: AVERTISSEMENT: fichier « %s » est déjà sauvegardé dans « %s »\n"
+
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s: ne peut lier le fichier « %s » à « %s »: %s\n"
+
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "%s: ne peut créer/ouvrier le fichier de sortie « %s »: %s\n"
+
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: ne peut changer le mode du fichier « %s »: %s\n"
+
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s: ne peut repérer le répertoire de travail: %s\n"
+
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: noms de fichiers d'entrée doivent avoir le suffixe .c: %s\n"
+
+#~ msgid "Didn't find a coloring.\n"
+#~ msgstr "N'a pas repéré une coloration.\n"
+
+#~ msgid "output constraint %d must specify a single register"
+#~ msgstr "Contrainte de sortie %d doit spécifier un simple registre"
+
+#~ msgid "output constraint %d cannot be specified together with \"%s\" clobber"
+#~ msgstr "contrainte de sortie %d ne doit pas être spécifié avec « %s » clobber"
+
+#~ msgid "output regs must be grouped at top of stack"
+#~ msgstr "registres de sortie doivent être regroupés au haut de la pile"
+
+#~ msgid "implicitly popped regs must be grouped at top of stack"
+#~ msgstr "les registres implicitement dépilés doivent être groupés au haut de la pile"
+
+#~ msgid "output operand %d must use `&' constraint"
+#~ msgstr "opérande de sortie %d doit utiliser la contrainte « & »"
+
+#~ msgid "can't use '%s' as a %s register"
+#~ msgstr "ne peut utiliser « %s » comme le registre %s"
+
+#~ msgid "unknown register name: %s"
+#~ msgstr "nom de registre inconnu: %s"
+
+#~ msgid "global register variable follows a function definition"
+#~ msgstr "variable registre globale suit la définition d'une fonction"
+
+#~ msgid "register used for two global register variables"
+#~ msgstr "registre utilisé pour deux variables registres globales"
+
+#~ msgid "call-clobbered register used for global register variable"
+#~ msgstr "registre maltraité par un appel utilisé par un variable registre globale"
+
+#~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
+#~ msgstr "validate_value_data: [%u] next_regno erroné pour une chaîne vide (%u)"
+
+#~ msgid "validate_value_data: Loop in regno chain (%u)"
+#~ msgstr "validate_value_data: boucle dans la chaîne regno (%u)"
+
+#~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
+#~ msgstr "validate_value_data: [%u] oldest_regno erroné (%u)"
+
+#~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
+#~ msgstr "validate_value_data: [%u] registre non vide dans la chaîne (%s %u %i)"
+
+#~ msgid "cannot reload integer constant operand in `asm'"
+#~ msgstr "ne peut recharger l'opérande de constante entière dans « asm »"
+
+#~ msgid "impossible register constraint in `asm'"
+#~ msgstr "impossible de contraindre les registres en « asm »"
+
+#~ msgid "`&' constraint used with no register class"
+#~ msgstr "contrainte « & » utilisé sans classe registre"
+
+#~ msgid "unable to generate reloads for:"
+#~ msgstr "incapable de générer des recharges pour:"
+
+#~ msgid "inconsistent operand constraints in an `asm'"
+#~ msgstr "contrainte d'opérande inconsistente en « asm »"
+
+#~ msgid "frame size too large for reliable stack checking"
+#~ msgstr "taille de trame trop grande pour une vérification fiable de la pile"
+
+#~ msgid "try reducing the number of local variables"
+#~ msgstr "essayer de réduire le nombre de variables locales"
+
+#~ msgid "can't find a register in class `%s' while reloading `asm'"
+#~ msgstr "ne peut repérer un registre dans la classe « %s » durant le rechargement «asm »"
+
+#~ msgid "unable to find a register to spill in class `%s'"
+#~ msgstr "incapable de trouver un registre de déversement dans la classe « %s »"
+
+#~ msgid "this is the insn:"
+#~ msgstr "ceci est le insn:"
+
+#~ msgid "`asm' operand requires impossible reload"
+#~ msgstr "opérande « asm » requiert une recharge impossible"
+
+#~ msgid "could not find a spill register"
+#~ msgstr "ne peut repérer un registre de déversement"
+
+#~ msgid "`asm' operand constraint incompatible with operand size"
+#~ msgstr "contrainte de l'opérande « asm » incompatible avec la taille de l'opérande"
+
+#~ msgid "VOIDmode on an output"
+#~ msgstr "mode VOID sur une sortie"
+
+#~ msgid "output operand is constant in `asm'"
+#~ msgstr "opérande de sortie est une constante dans « asm »"
+
+#~ msgid "unrecognizable insn:"
+#~ msgstr "insn non reconnaissable:"
+
+#~ msgid "insn does not satisfy its constraints:"
+#~ msgstr "insn ne satisfait pas à ses contraintes:"
+
+#~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
+#~ msgstr "vérification RTL: accès de elt %d de « %s » avec le dernier elt %d dans %s, à %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "vérification RTL: attendu elt %d de type « %c », a « %c » (rtx %s) dans %s, à %s:%d"
+
+#~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "vérification RTL: attendu elt %d de type « %c » ou « %c », a « %c » (rtx %s) dans %s, à %s:%d"
+
+#~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "vérification RTL: code attendu « %s », a « %s » dans %s, à %s:%d"
+
+#~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "vérification RTL: code attendu « %s » ou « %s », a « %s » dans %s, à %s:%d"
+
+#~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+#~ msgstr "vérification RTL: accès de elt %d du vecteur avec le dernier elt %d dans %s, à %s:%d"
+
+#~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d"
+#~ msgstr "vérification du fanion RTL: %s utilisé avec un code rtx inattendu, « %s » dans %s, à %s:%d"
+
+#~ msgid "jump to `%s' invalidly jumps into binding contour"
+#~ msgstr "saut vers « %s » saute de manière invalide dans un contour de liaison"
+
+#~ msgid "%Jlabel '%D' used before containing binding contour"
+#~ msgstr "%Jétiquette « %D » utilisé avant de contenir le contour de liaison"
+
+#~ msgid "output operand constraint lacks `='"
+#~ msgstr "contrainte de sortie de l'opérande manque « = »"
+
+#~ msgid "output constraint `%c' for operand %d is not at the beginning"
+#~ msgstr "contrainte de sortie « %c » pour l'opérande %d n'est pas au début"
+
+#~ msgid "operand constraint contains incorrectly positioned '+' or '='"
+#~ msgstr "contrainte de l'opérande contient « + » ou « - » incorrectement positionné"
+
+#~ msgid "`%%' constraint used with last operand"
+#~ msgstr "contrainte « %% » utilisée avec la dernière opérande"
+
+#~ msgid "matching constraint not valid in output operand"
+#~ msgstr "contrainte concordante n'est pas valide dans une opérande de sortie"
+
+#~ msgid "read-write constraint does not allow a register"
+#~ msgstr "contrainte de lecture-éccriture ne permet pas de registre"
+
+#~ msgid "input operand constraint contains `%c'"
+#~ msgstr "contrainte d'entrée de l'opérande contient « %c »"
+
+#~ msgid "matching constraint references invalid operand number"
+#~ msgstr "nombre d'opérandes invalides pour références de containte concordantes"
+
+#~ msgid "invalid punctuation `%c' in constraint"
+#~ msgstr "ponctuation invalide « %c » dans la contrainte"
+
+#~ msgid "matching constraint does not allow a register"
+#~ msgstr "contrainte de concordance ne permet pas de reigstre"
+
+#~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list"
+#~ msgstr "asm-specifier pour la variable « %s » est en conflit avec la liste asm clobber"
+
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "nom de registre inconnu « %s » dans «asm »"
+
+#~ msgid "PIC register `%s' clobbered in `asm'"
+#~ msgstr "registre PIC « %s » est maltraité dans «asm »"
+
+#~ msgid "more than %d operands in `asm'"
+#~ msgstr "plus que %d opérandes dans « asm »"
+
+#~ msgid "output number %d not directly addressable"
+#~ msgstr "nombre de sortie %d n,est pas directement adressable"
+
+#~ msgid "asm operand %d probably doesn't match constraints"
+#~ msgstr "opérande asm %d ne concorde pas probablement avec les contraintes"
+
+#~ msgid "use of memory input without lvalue in asm operand %d is deprecated"
+#~ msgstr "utilisation de l'entré mémoire sans lvalue dans l'opérande asm %d est obsolète"
+
+#~ msgid "asm clobber conflict with output operand"
+#~ msgstr "asm clobber est en conflit sans opérande de sortie"
+
+#~ msgid "asm clobber conflict with input operand"
+#~ msgstr "asm globber est en conflit avec l'opérande d'entrée"
+
+#~ msgid "too many alternatives in `asm'"
+#~ msgstr "trop d'alternatives dans « asm »"
+
+#~ msgid "operand constraints for `asm' differ in number of alternatives"
+#~ msgstr "contraintes de l'opérande pour « asm » diffèrent en nombre d'alternatives"
+
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "nom d'opérande asm « %s » apparaît en double"
+
+#~ msgid "missing close brace for named operand"
+#~ msgstr "accolade de fermeture manquante pour l'opérandé nommée"
+
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "opérande nommée « %s » indéfinie"
+
+#~ msgid "%Hstatement with no effect"
+#~ msgstr "%Hdéclaration sasn effet"
+
+#~ msgid "%Hvalue computed is not used"
+#~ msgstr "%Hvaleur calculée n'est pas utilisée"
+
+#~ msgid "%Junused variable '%D'"
+#~ msgstr "%Jvariable « %D » inutilisée"
+
+#~ msgid "%Hunreachable code at beginning of %s"
+#~ msgstr "%Hcode inatteignable au début de %s"
+
+#~ msgid "enumeration value `%s' not handled in switch"
+#~ msgstr "valeur d'énumération « %s » n'est pas traitée dans le switch"
+
+#~ msgid "case value `%ld' not in enumerated type"
+#~ msgstr "valeur du case « %ld » n'est pas dans le type énuméré"
+
+#~ msgid "case value `%ld' not in enumerated type `%s'"
+#~ msgstr "valeur du case « %ld » n'est pas dans le type énuméré « %s »"
+
+#~ msgid "switch missing default case"
+#~ msgstr "switch n'a pas de case par défaut"
+
+#~ msgid "type size can't be explicitly evaluated"
+#~ msgstr "taille du type ne peut être explicitement évaluée"
+
+#~ msgid "variable-size type declared outside of any function"
+#~ msgstr "type de taille variable déclaré à l'extérieur den'importe quelle fonction"
+
+#~ msgid "%Jsize of '%D' is %d bytes"
+#~ msgstr "%Jtaille de « %D » est de %d octets"
+
+#~ msgid "%Jsize of '%D' is larger than %d bytes"
+#~ msgstr "%Jtaille de « %D » est plus grande que %d octets"
+
+#~ msgid "%Jpacked attribute causes inefficient alignment for '%D'"
+#~ msgstr "%Jattribut empaqueté provoque un alignement inefficient pour « %D »"
+
+#~ msgid "%Jpacked attribute is unnecessary for '%D'"
+#~ msgstr "%Jattribut empaqueté n'est pas nécessaire pour « %D »"
+
+#~ msgid "%Jpadding struct to align '%D'"
+#~ msgstr "%Jremplissage du struct pour aligner « %D »"
+
+#~ msgid "padding struct size to alignment boundary"
+#~ msgstr "remplissage la taille du struct pour aligner les frontières"
+
+#~ msgid "packed attribute causes inefficient alignment for `%s'"
+#~ msgstr "attribut empaqueté provoque un alignement inefficient pour « %s »"
+
+#~ msgid "packed attribute is unnecessary for `%s'"
+#~ msgstr "attribut empaqueté n'est pas nécessaire pour « %s »"
+
+#~ msgid "packed attribute causes inefficient alignment"
+#~ msgstr "attribut empaqueté provoque un alignement inefficient"
+
+#~ msgid "packed attribute is unnecessary"
+#~ msgstr "attribut empaqueté n'est pas nécessaire"
+
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "« __builtin_saveregs » n'est pas supporté par cette cible"
+
+#~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'"
+#~ msgstr "ne peut faire timevar_pop « %s » lorsque le haut de la pile timevars est « %s »"
+
+#~ msgid ""
+#~ "\n"
+#~ "Execution times (seconds)\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Temps d'exécution (secondes)\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "temps passé dans %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "collect: reading %s\n"
+#~ msgstr "collect: lecture de %s\n"
+
+#~ msgid "collect: recompiling %s\n"
+#~ msgstr "collect: recompilation de %s\n"
+
+#~ msgid "collect: tweaking %s in %s\n"
+#~ msgstr "collect: tordage de %s dans %s\n"
+
+#~ msgid "collect: relinking\n"
+#~ msgstr "collect: ré-édition des liens\n"
+
+#~ msgid "ld returned %d exit status"
+#~ msgstr "ld a retourné %d code d'état d'exécution"
+
+# I18N
+#~ msgid "%s "
+#~ msgstr "%s "
+
+# I18N
+#~ msgid " %s"
+#~ msgstr " %s"
+
+#~ msgid "invalid option argument `%s'"
+#~ msgstr "argument de l'option invalide « %s »"
+
+#~ msgid "getting core file size maximum limit: %m"
+#~ msgstr "limite maximale obtenue de la taille du fichier de vidange (core file): %m"
+
+#~ msgid "setting core file size limit to maximum: %m"
+#~ msgstr "initialisation de la limite maximal de la taille du fichier de vidance (core file): %m"
+
+#~ msgid "%J'%F' used but never defined"
+#~ msgstr "%J« %F » utilisé mais n'a jamais été défini"
+
+#~ msgid "%J'%F' declared `static' but never defined"
+#~ msgstr "%J« %F » déclaré « static » mais n'a jamais été définie"
+
+#~ msgid "%J'%D' defined but not used"
+#~ msgstr "%J« %F » défini mais n'a pas été utilisé"
+
+#~ msgid "`%s' is deprecated (declared at %s:%d)"
+#~ msgstr "« %s » est obsolète (déclaré à %s:%d)"
+
+#~ msgid "`%s' is deprecated"
+#~ msgstr "« %s » est obsolète"
+
+#~ msgid "type is deprecated (declared at %s:%d)"
+#~ msgstr "type est obsolète (déclaré à %s:%d)"
+
+#~ msgid "type is deprecated"
+#~ msgstr "type est obsolète"
+
+#~ msgid "invalid register name `%s' for register variable"
+#~ msgstr "nom de registre invalide « %s » pour un variable registre"
+
+#~ msgid "branch target register load optimization is not intended to be run twice"
+#~ msgstr "optimisation du chargement du registre cible de branchement est pas prévu pour être exécuté deux fois"
+
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Options spécifiques à la cible:\n"
+
+#~ msgid "  -m%-23s [undocumented]\n"
+#~ msgstr "  -m%-23s [non documenté]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented target specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Il y a des options spécifiques à la cible qui ne sont pas documentés aussi.\n"
+
+#~ msgid "  They exist, but they are not documented.\n"
+#~ msgstr "  Ils existent, mais ils ne sont pas documentés.\n"
+
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "option gcc de mise au point non reconnue: %c"
+
+#~ msgid "invalid option `%s'"
+#~ msgstr "option invalide « %s »"
+
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompilé par GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compilé par CC.\n"
+
+#~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+#~ msgstr "heuristiques %s%sGGC: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+
+#~ msgid "options passed: "
+#~ msgstr "options passées: "
+
+#~ msgid "options enabled: "
+#~ msgstr "options autorisées: "
+
+#~ msgid "can't open %s for writing: %m"
+#~ msgstr "ne peut ouvrir %s en écriture: %m"
+
+#~ msgid "created and used with different settings of -fpic"
+#~ msgstr "créé et utilisé avec des configurations différentes de -fpic"
+
+#~ msgid "created and used with different settings of -fpie"
+#~ msgstr "créé et utilisé avec des configurations différentes de -fpie"
+
+#~ msgid "created and used with differing settings of `-m%s'"
+#~ msgstr "créé et utilisé avec des configurations différentes de « -m%s »"
+
+#~ msgid "out of memory"
+#~ msgstr "mémoire épuisée"
+
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "instruction d'ordonnancement n'est pas supportée sur cette machine cible"
+
+#~ msgid "this target machine does not have delayed branches"
+#~ msgstr "cette machine cible n'a pas de branchments avec délais"
+
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "-f%sleading-underscore n'est pas supporté sur cette machine cible"
+
+#~ msgid "target system does not support the \"%s\" debug format"
+#~ msgstr "système cible ne supporte par le format \"%s\" de mise au point"
+
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "-ffunction-sections n'est pas supporté pour cette cible"
+
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "-fdata-sections n'est pas supporté pour cette machine cible"
+
+#~ msgid "-ffunction-sections disabled; it makes profiling impossible"
+#~ msgstr "-ffunction-sections désactivé; cela rend le profilage impossible"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "-fprefetch-loop-arrays n'est pas supporté pour cette machine cible"
+
+#~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)"
+#~ msgstr "-fprefetch-loop-arrays n'est pas supporté sur cette machine cible (essayer -march options)"
+
+#~ msgid "-fprefetch-loop-arrays is not supported with -Os"
+#~ msgstr "-fprefetch-loop-arrays n'est pas supporté avec -Os"
+
+#~ msgid "-ffunction-sections may affect debugging on some targets"
+#~ msgstr "-ffunction-sections peut affecter la mise au point sur quelques machines cibles."
+
+#~ msgid "error writing to %s: %m"
+#~ msgstr "erreur d'écriture dans %s: %m"
+
+#~ msgid "error closing %s: %m"
+#~ msgstr "erreur de fermeture %s: %m"
+
+#~ msgid "could not open dump file `%s'"
+#~ msgstr "ne peut ouvrir le fichier de vidange « %s »"
+
+#~ msgid "ignoring unknown option `%.*s' in `-fdump-%s'"
+#~ msgstr "option inconnue « %.*s » ignorée dans « -fdump-%s »"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses alloca (override using the always_inline attribute)"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle utilise alloca (écrasant l'utiliastion de l'attribut always_inline)"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle utilise setjmp"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses variable argument lists"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle utilise une liste variable d'arguments"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp-longjmp exception handling"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle utilise le traitement d'exception setjmp-longjmp"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a nested function"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle contient une fonction imbriquée"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a computed goto"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle contient un goto calculé"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it contains a nonlocal goto"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle contient un goto qui n'est pas local"
+
+#~ msgid "%Jfunction '%F' can never be inlined because it uses variable sized variables"
+#~ msgstr "%Jfonction « %F » ne peut être enligne parce qu'elle utilise une taille variable de variables"
+
+#~ msgid "%Jinlining failed in call to '%F': %s"
+#~ msgstr "%Jl'enlignage de l'appel à « %F »: %s a échoué"
+
+#~ msgid "%Jsize of return value of '%D' is %u bytes"
+#~ msgstr "%Jtaille de la valeur retournée par « %D » est %u octets"
+
+#~ msgid "%Jsize of return value of '%D' is larger than %wd bytes"
+#~ msgstr "%Jtaille de la valeur retournée par « %D » supérieure à %wd octets"
+
+#~ msgid "arrays of functions are not meaningful"
+#~ msgstr "tableaux de fonctions n'a pas grand sens"
+
+#~ msgid "function return type cannot be function"
+#~ msgstr "Le type retourné d'une fonction ne peut être une fonction"
+
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "initialisation invalide pour une chaîne de bits"
+
+#~ msgid "tree check: expected %s, have %s in %s, at %s:%d"
+#~ msgstr "vérification de l'arbre: attendait %s, obtenu %s dans %s, à %s:%d"
+
+#~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
+#~ msgstr "vérification de l'arbre: attendait classe « %c », obtenu « %c » (%s) dans %s, à %s:%d"
+
+#~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
+#~ msgstr "vérification de l'arbre: accès de elt %d de tree-vec avec %d elts dans %s, à %s:%d"
+
+#~ msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
+#~ msgstr "vérification de l'arbre: opérande accédé %d de %s avec %d opérandes dans %s, à %s:%d"
+
+#~ msgid "%J%D causes a section type conflict"
+#~ msgstr "%J%D cause un conflit du type de section"
+
+#~ msgid "%Jregister name not specified for '%D'"
+#~ msgstr "%Jnom de registre n'est pas spécifié pour « %D »"
+
+#~ msgid "%Jinvalid register name for '%D'"
+#~ msgstr "%Jnom de registre invalide pour « %D »"
+
+#~ msgid "%Jdata type of '%D' isn't suitable for a register"
+#~ msgstr "%Jtype de données de « %D » n'est pas applicable pour un registre"
+
+#~ msgid "%Jregister specified for '%D' isn't suitable for data type"
+#~ msgstr "%Jregistre spécifié pour « %D » n'est applicable à un type de données"
+
+#~ msgid "global register variable has initial value"
+#~ msgstr "variable globale registre a une valeur initiale"
+
+#~ msgid "volatile register variables don't work as you might wish"
+#~ msgstr "variables resgistres volatiles ne fonctionne pas comme vous le souhaiteriez"
+
+#~ msgid "%Jregister name given for non-register variable '%D'"
+#~ msgstr "%Jnom de registre donné pour une variable non registre « %D »"
+
+#~ msgid "%Jstorage size of `%D' isn't known"
+#~ msgstr "%Jtaille de stockage de « %D » n'est pas connue"
+
+#~ msgid "%Jalignment of '%D' is greater than maximum object file alignment.  Using %d"
+#~ msgstr "%Jalignement de « %D » est plus grand que l'alignement maximal du fichier objet. %d est utilisé."
+
+#~ msgid "thread-local COMMON data not implemented"
+#~ msgstr "thread-local COMMON data n'est pas implanté"
+
+#~ msgid "%Jrequested alignment for '%D' is greater than implemented alignment of %d"
+#~ msgstr "%Jrequête d'alignement pour '%D' est plus grand que l'alignement implanté de %d"
+
+#~ msgid "initializer for integer value is too complicated"
+#~ msgstr "initialisation d'entier trop compliquée"
+
+#~ msgid "initializer for floating value is not a floating constant"
+#~ msgstr "l'initialisation d'une valeur à virgule flottante n'est pas une constante à virgule flottante"
+
+#~ msgid "unknown set constructor type"
+#~ msgstr "type de jeu de constructeurs inconnu"
+
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "valeur initiale invalide pour le membre « %s »"
+
+#~ msgid "%Jweak declaration of '%D' must precede definition"
+#~ msgstr "%Jdéclaration faible de « %D » qui doit être précédée d'une définition"
+
+#~ msgid "%Jweak declaration of '%D' after first use results in unspecified behavior"
+#~ msgstr "%Jdéclaration faible de « %D » après une première utilisation des résultats d'un comportement non spécifié"
+
+#~ msgid "%Jweak declaration of '%D' must be public"
+#~ msgstr "%Jdéclaration faible de « %D » doit être publique"
+
+#~ msgid "%Jweak declaration of '%D' not supported"
+#~ msgstr "%Jdéclaration faible de « %D » n'est pas supportée"
+
+#~ msgid "only weak aliases are supported in this configuration"
+#~ msgstr "seulement les alias faibles sont supportés dans cette configuration"
+
+#~ msgid "alias definitions not supported in this configuration; ignored"
+#~ msgstr "définitions d'alias ne sont pas supportés dans cette configuration; ignoré"
+
+#~ msgid "visibility attribute not supported in this configuration; ignored"
+#~ msgstr "visibilité de l'attribut n'est pas supporté dans cette configuration; ignoré"
+
+#~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
+#~ msgstr "tableau virtuel %s[%lu]: élément %lu hors limite dans %s, à %s:%d"
+
+#~ msgid "underflowed virtual array %s in %s, at %s:%d"
+#~ msgstr "sous débordement du tableau virtuele %s dans %s, à %s:%d"
+
+#~ msgid "no sclass for %s stab (0x%x)\n"
+#~ msgstr "pas de sclass pour le stab %s (0x%x)\n"
+
+#~ msgid "fatal error: "
+#~ msgstr "erreur fatale: "
+
+#~ msgid "internal compiler error: "
+#~ msgstr "erreur interne du compilateur: "
+
+#~ msgid "sorry, unimplemented: "
+#~ msgstr "désolé, pas implanté: "
+
+#~ msgid "anachronism: "
+#~ msgstr "anachronisme: "
+
+#~ msgid "note: "
+#~ msgstr "note: "
+
+#~ msgid "debug: "
+#~ msgstr "mise au point: "
+
+#~ msgid "The maximum number of instructions in a single function eligible for inlining"
+#~ msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne"
+
+#~ msgid "The maximum number of instructions when automatically inlining"
+#~ msgstr "Le nombre maximum d'instructions lorsqu'automatiquement de type enligne"
+
+#~ msgid "The maximum number of instructions for the RTL inliner"
+#~ msgstr "Le nombre maximum d'instructions pour la fonction d'enlignage RTL"
+
+#~ msgid "The maximum number of instructions to consider to fill a delay slot"
+#~ msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai"
+
+#~ msgid "The maximum number of instructions to consider to find accurate live register information"
+#~ msgstr "Le nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précis"
+
+#~ msgid "The maximum length of scheduling's pending operations list"
+#~ msgstr "La longueur maximale de la liste des opération en attente d'ordonnancement"
+
+#~ msgid "The size of function body to be considered large"
+#~ msgstr "La taille du corps de la fonction est considéré comme étant grande"
+
+#~ msgid "Maximal growth due to inlining of large function (in percent)"
+#~ msgstr "Croissance maximal en raison de l'enlignage d'une grande fonction (en pourcent)"
+
+#~ msgid "how much can given compilation unit grow because of the inlining (in percent)"
+#~ msgstr "quelle croissance d'une unité de compilation peut être tolérée en raison de l'enlignage (en pourcent)"
+
+#~ msgid "The maximum amount of memory to be allocated by GCSE"
+#~ msgstr "La taille maximale de mémoire à être alloué par GCSE"
+
+#~ msgid "The maximum number of passes to make when doing GCSE"
+#~ msgstr "Le nombre maxium de passes à effectuer lors de l'exécution de GCSE"
+
+#~ msgid "The maximum number of instructions to consider to unroll in a loop"
+#~ msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle"
+
+#~ msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#~ msgstr "Le nombre maximum d'instructions à considérer à inclure dans une boucle en moyenne"
+
+#~ msgid "The maximum number of unrollings of a single loop"
+#~ msgstr "Le nombre maximum d'instructions à inclure dans une boucle simple"
+
+#~ msgid "The maximum number of insns of a peeled loop"
+#~ msgstr "Le nombre maximum d'insns de boucle réduite"
+
+#~ msgid "The maximum number of peelings of a single loop"
+#~ msgstr "Le nombre maxium de passes de réduction d'une boucle simple"
+
+#~ msgid "The maximum number of insns of a completely peeled loop"
+#~ msgstr "Le nombre maximum d'insns d'une boucle complètement réduite"
+
+#~ msgid "The maximum number of peelings of a single loop that is peeled completely"
+#~ msgstr "Le nombre maximum de réductions d'une boucle simple qui a été complètement réduite"
+
+#~ msgid "The maximum number of insns of a peeled loop that rolls only once"
+#~ msgstr "Le nombre maximum d'insns d'une boucle réduite qui tourne une seule fois"
+
+#~ msgid "The maximum number of insns of an unswitched loop"
+#~ msgstr "Le nombre maximum d'insns d'une boucle sans branchement"
+
+#~ msgid "The maximum number of unswitchings in a single loop"
+#~ msgstr "Le nombre maximum de non branchement dans une boucle simple"
+
+#~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot"
+#~ msgstr "Sélectionner la fraction du décompte maximal de répétition du bloc de base dans le programme selon le bloc de bsae donné doit être considéré comme chaud « hot »"
+
+#~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#~ msgstr "Sélectionner la fraction de la fréquence maximale d'exécutions du bloc de base dans la fonction selon le bloc de bsae donné doit être considéré comme chaud « hot »"
+
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#~ msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profile est disponible"
+
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#~ msgstr "Le pourcentage de fonction, pondéré par la fréquence d'exécutions, qui doit être couvert la formation de la trace. Utilisé lorsque le feedback par profilage n'est disponible"
+
+#~ msgid "Maximal code growth caused by tail duplication (in percent)"
+#~ msgstr "Croissance maximal du code en raison de duplication de queue (en pourcent)"
+
+#~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+#~ msgstr "Stopper la croissance renversée si la probabilité inverse des meilleures bordures est inférieure à ce seuil (en pourcent)"
+
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
+#~ msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcent). Utilisé lorsque le feedback par profilage est disponible"
+
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
+#~ msgstr "Stopper la croissance anticipée si la probabilité des meilleures bordures est inférieure à ce seuil (en pourcent). Utilisé lorsque le feedback par profilage n'est pas disponible"
+
+#~ msgid "The maximum number of incoming edges to consider for crossjumping"
+#~ msgstr "Le nombre maximum de bordures à considérer pour les sauts croisés"
+
+#~ msgid "The maximum length of path considered in cse"
+#~ msgstr "La longueur maximale des chemins considérés dans cse"
+
+#~ msgid "The maximum memory locations recorded by cselib"
+#~ msgstr "Le nombre maximum de localisations mémoire enregistrées par cselib"
+
+#~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+#~ msgstr "L'expansion minimale des tas pour lancer la collecte des rebuts, en pourcentage de la taille totale du tas."
+
+#~ msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+#~ msgstr "La taille minimale du tas avant de lancer la collecte des rebuts, en kilo-octets."
+
+#~ msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+#~ msgstr "Le nombre maximum d'instructions à rechercher antérieurement lors d'une recherche d'une recharge équivalente"
+
+#~ msgid "too many #pragma options align=reset"
+#~ msgstr "trop d'options pour #pragma pour align=reset"
+
+#~ msgid "malformed '#pragma options', ignoring"
+#~ msgstr "« #pragma options » mal composé, ignoré"
+
+#~ msgid "junk at end of '#pragma options'"
+#~ msgstr "rebut à la fin de « #pragma options »"
+
+#~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring"
+#~ msgstr "« #pragma options align={mac68k|power|reset} » mal composé, ignoré"
+
+#~ msgid "missing '(' after '#pragma unused', ignoring"
+#~ msgstr "« ( » manquante après « #pragma unused », ignoré"
+
+#~ msgid "missing ')' after '#pragma unused', ignoring"
+#~ msgstr "« ( » manquante après « #pragma unused », ignoré"
+
+#~ msgid "junk at end of '#pragma unused'"
+#~ msgstr "rebut à la fin de « #pragma unused »"
+
+#~ msgid "internal and protected visibility attributes not supportedin this configuration; ignored"
+#~ msgstr "visibilité des attributs internes et protégées n'est pas supportée dans cette configuration; ignoré"
+
+#~ msgid "-msystem-v and -p are incompatible"
+#~ msgstr "-msystem-v et -p sont incompatibles"
+
+#~ msgid "-msystem-v and -mthreads are incompatible"
+#~ msgstr "-msystem-v et -mthreads sont incompatibles"
+
+#~ msgid "profiler support for WindISS"
+#~ msgstr "support du profileur pour WindISS"
+
+#~ msgid "-f%s ignored for Unicos/Mk (not supported)"
+#~ msgstr "-f%s ignoré pour Unicos/Mk (non supporté)"
+
+#~ msgid "-mieee not supported on Unicos/Mk"
+#~ msgstr "-mieee n'est pas supporté sur Unicos/Mk"
+
+#~ msgid "-mieee-with-inexact not supported on Unicos/Mk"
+#~ msgstr "-mieee-with-inexact n'est pas supporté sur Unicos/Mk"
+
+#~ msgid "bad value `%s' for -mtrap-precision switch"
+#~ msgstr "valeur « %s » erronée pour l'option -mtrap-precision"
+
+#~ msgid "bad value `%s' for -mfp-rounding-mode switch"
+#~ msgstr "valeur « %s » erronée pour l'option -mfp-rounding-mode"
+
+#~ msgid "bad value `%s' for -mfp-trap-mode switch"
+#~ msgstr "valeur « %s » erronée pour l'option -mfp-trap-mode"
+
+#~ msgid "bad value `%s' for -mtls-size switch"
+#~ msgstr "valeur « %s » erronée pour l'option -mtls-size"
+
+#~ msgid "bad value `%s' for -mcpu switch"
+#~ msgstr "valeur « %s » erronée pour l'option -mcpu"
+
+#~ msgid "trap mode not supported on Unicos/Mk"
+#~ msgstr "mode trappe n'est pas supporté sur Unicos/Mk"
+
+#~ msgid "fp software completion requires -mtrap-precision=i"
+#~ msgstr "complétion logicielle FP requiert -mtrap-precision=i"
+
+#~ msgid "rounding mode not supported for VAX floats"
+#~ msgstr "mode d'arondissement n'est pas supporté pour les flottants sur VAX"
+
+#~ msgid "trap mode not supported for VAX floats"
+#~ msgstr "mode trappe n'est pas supporté avec les flottants sur VAX"
+
+#~ msgid "128-bit long double not supported for VAX floats"
+#~ msgstr "long double de 128 bits ne sont pas supporté pour les flottants sur VAX"
+
+#~ msgid "L%d cache latency unknown for %s"
+#~ msgstr "latence de la cache L%d inconnue pour %s"
+
+#~ msgid "bad value `%s' for -mmemory-latency"
+#~ msgstr "valeur « %s » erronée pour -mmemory-latency"
+
+#~ msgid "invalid %%H value"
+#~ msgstr "valeur %%H invalide"
+
+#~ msgid "invalid %%J value"
+#~ msgstr "valeur %%J invalide"
+
+#~ msgid "invalid %%r value"
+#~ msgstr "valeur %%r invalide"
+
+#~ msgid "invalid %%R value"
+#~ msgstr "valeur %%R invalide"
+
+#~ msgid "invalid %%N value"
+#~ msgstr "valeur %%N invalide"
+
+#~ msgid "invalid %%P value"
+#~ msgstr "valeur %%P invalide"
+
+#~ msgid "invalid %%h value"
+#~ msgstr "valeur %%h invalide"
+
+#~ msgid "invalid %%L value"
+#~ msgstr "valeur %%L invalide"
+
+#~ msgid "invalid %%m value"
+#~ msgstr "valeur %%m invalide"
+
+#~ msgid "invalid %%M value"
+#~ msgstr "valeur %%M invalide"
+
+#~ msgid "invalid %%U value"
+#~ msgstr "valeur %%U invalide"
+
+#~ msgid "invalid %%s value"
+#~ msgstr "valeur %%s invalide"
+
+#~ msgid "invalid %%C value"
+#~ msgstr "valeur %%C invalide"
+
+#~ msgid "invalid %%E value"
+#~ msgstr "valeur %%E invalide"
+
+#~ msgid "unknown relocation unspec"
+#~ msgstr "relocalisation unspec inconnue"
+
+#~ msgid "invalid %%xn code"
+#~ msgstr "valeur %%xn invalide"
+
+#~ msgid "bad builtin fcode"
+#~ msgstr "construit interne erroné de fcode"
+
+#~ msgid "Use hardware fp"
+#~ msgstr "Utiliser le FP matériel"
+
+#~ msgid "Do not use hardware fp"
+#~ msgstr "Ne pas utiliser l'unité FP matérielle"
+
+#~ msgid "Use fp registers"
+#~ msgstr "Utiliser les registres FP"
+
+#~ msgid "Do not use fp registers"
+#~ msgstr "Ne pas utiliser les registres FP"
+
+#~ msgid "Do not assume GAS"
+#~ msgstr "Ne pas présumer la présence de GAS"
+
+#~ msgid "Assume GAS"
+#~ msgstr "Présumer la présence de GAS"
+
+#~ msgid "Request IEEE-conformant math library routines (OSF/1)"
+#~ msgstr "Requête des routine de la bibliothèque mathématique conforme IEEE (OSF/1)"
+
+#~ msgid "Emit IEEE-conformant code, without inexact exceptions"
+#~ msgstr "Produire du code conforme IEEE, sans exceptions inexactes"
+
+#~ msgid "Emit IEEE-conformant code, with inexact exceptions"
+#~ msgstr "Produire du code conforme IEEE, avec exceptions inexactes"
+
+#~ msgid "Do not emit complex integer constants to read-only memory"
+#~ msgstr "Ne pas produire des constantes entières complexes en mémoire en mode lecture seulement"
+
+#~ msgid "Use VAX fp"
+#~ msgstr "Utiliser les registres FP sur VAX"
+
+#~ msgid "Do not use VAX fp"
+#~ msgstr "Ne pas utiliser les registres FP sur VAX"
+
+#~ msgid "Emit code for the byte/word ISA extension"
+#~ msgstr "Produire du code pour les octets/mots des extensions ISA"
+
+#~ msgid "Emit code for the motion video ISA extension"
+#~ msgstr "Produire du code pour les extensions vidéo ISA"
+
+#~ msgid "Emit code for the fp move and sqrt ISA extension"
+#~ msgstr "Produire du code pour les déplacements FP et sqrt des extensions ISA"
+
+#~ msgid "Emit code for the counting ISA extension"
+#~ msgstr "Produire du code pour les extensions ISA de comptage"
+
+#~ msgid "Emit code using explicit relocation directives"
+#~ msgstr "Produire du code utilisant des directives explicites de relocalisation"
+
+#~ msgid "Emit 16-bit relocations to the small data areas"
+#~ msgstr "Produire du code de 16 bits pour le relocalisation des petites zones de données"
+
+#~ msgid "Emit 32-bit relocations to the small data areas"
+#~ msgstr "Produire du code de 32 bits pour le relocalisation des petites zones de données"
+
+#~ msgid "Emit direct branches to local functions"
+#~ msgstr "Omettre le branchement direct aux fonctions locales"
+
+#~ msgid "Emit rdval instead of rduniq for thread pointer"
+#~ msgstr "Produire rdval au lieu de rduniq pour le pointeur de thread"
+
+#~ msgid "Use 128-bit long double"
+#~ msgstr "Utiliser un long double de 128 bits"
+
+#~ msgid "Use 64-bit long double"
+#~ msgstr "Utiliser un long double de 64 bits"
+
+#~ msgid "Use features of and schedule given CPU"
+#~ msgstr "Utiliser les options et ordonnancer pour le processeur donné "
+
+#~ msgid "Schedule given CPU"
+#~ msgstr "Ordonnancer le processeur donné"
+
+#~ msgid "Control the generated fp rounding mode"
+#~ msgstr "Contrôler le mode d'arondissement FP généré"
+
+#~ msgid "Control the IEEE trap mode"
+#~ msgstr "Contrôler le mode trappe IEEE"
+
+#~ msgid "Control the precision given to fp exceptions"
+#~ msgstr "Contrôler la précision donnée des exceptions FP"
+
+#~ msgid "Tune expected memory latency"
+#~ msgstr "Ajuster la latence mémoire attendue"
+
+#~ msgid "Specify bit size of immediate TLS offsets"
+#~ msgstr "Spécifier la taille de bit des décalages immédiats TLS"
+
+#~ msgid "bad value (%s) for -mcpu switch"
+#~ msgstr "valeur (%s) erronée pour l'option -mcpu"
+
+#~ msgid "argument of `%s' attribute is not a string constant"
+#~ msgstr "argument de l'attribut « %s » n'est pas une chaîne de constante"
+
+#~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\""
+#~ msgstr "l'argument de l'attribut « %s » n'est pas «ilink1» ou «ilink2 »"
+
+#~ msgid "invalid operand to %%R code"
+#~ msgstr "opérande invalide pour le code %%R"
+
+#~ msgid "invalid operand to %%H/%%L code"
+#~ msgstr "opérande invalide pour le code %%H/%%L"
+
+#~ msgid "invalid operand to %%U code"
+#~ msgstr "opérande invalide pour le code %%U"
+
+#~ msgid "invalid operand to %%V code"
+#~ msgstr "opérande invalide pour le code %%V"
+
+#~ msgid "invalid operand output code"
+#~ msgstr "opérande invalide pour le code de sortie"
+
+#~ msgid "switch -mcpu=%s conflicts with -march= switch"
+#~ msgstr "l'option -mcpu=%s est en conflit avec l'option -march= "
+
+#~ msgid "bad value (%s) for %s switch"
+#~ msgstr "valeur (%s) erronée pour l'option %s"
+
+#~ msgid "target CPU does not support APCS-32"
+#~ msgstr "le processeur cible ne supporte pas APCS-32"
+
+#~ msgid "target CPU does not support APCS-26"
+#~ msgstr "le processeur cible ne supporte pas APCS-26"
+
+#~ msgid "target CPU does not support interworking"
+#~ msgstr "le processeur cible ne supporte pas l'inter-réseautage"
+
+#~ msgid "target CPU does not support THUMB instructions"
+#~ msgstr "le processeur cible ne supporte pas les instructions THUMB"
+
+#~ msgid "future releases of GCC will not support -mapcs-26"
+#~ msgstr "les prochaines versions de GCC ne supporteront pas -mapcs-26"
+
+#~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
+#~ msgstr "autoriser le support de pistage arrière si seulement significatif lors de la compilation pour le Thumb"
+
+#~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "autoriser le support d'inter-réseautage des appelés si seulement significatif lors de la compilation pour le Thumb"
+
+#~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "autoriser le support d'inter-réseautage des appelants si seulement significatif lors de la compilation pour le Thumb"
+
+#~ msgid "interworking forces APCS-32 to be used"
+#~ msgstr "l'inter-réseautage force l'utilisation de APCS-32"
+
+#~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+#~ msgstr "-mapcs-stack-check incompatible avec -mno-apcs-frame"
+
+#~ msgid "-fpic and -mapcs-reent are incompatible"
+#~ msgstr "-fpic et -mapcs-reent sont incompatibles"
+
+#~ msgid "APCS reentrant code not supported.  Ignored"
+#~ msgstr "Code réentrant APCS n'est pas supporté.  Ignoré"
+
+#~ msgid "-g with -mno-apcs-frame may not give sensible debugging"
+#~ msgstr "-g avec -mno-apcs-frame peut ne pas donner une mise au point sensée"
+
+#~ msgid "passing floating point arguments in fp regs not yet supported"
+#~ msgstr "passage d'argument en virgule flottante dans les registres FP n'est pas encore supporté"
+
+#~ msgid "invalid floating point emulation option: -mfpe-%s"
+#~ msgstr "option d'émulation en virgule flottante invalide: -mfpe-%s"
+
+#~ msgid "-mfpe switch not supported by ep9312 target cpu - ignored."
+#~ msgstr "opeion -mfpe n'est pas supportée par le processeur cible ep9312 - ignoré"
+
+#~ msgid "structure size boundary can only be set to 8 or 32"
+#~ msgstr "taille des bornes de la structure peut seulement être 8 ou 32"
+
+#~ msgid "-mpic-register= is useless without -fpic"
+#~ msgstr "-mpic-register= est inutile sans -fpic"
+
+#~ msgid "unable to use '%s' for PIC register"
+#~ msgstr "incapable d'utiliser « %s » pour un registre PIC"
+
+#~ msgid "`%s' attribute only applies to functions"
+#~ msgstr "attribut « %s » s'applique seulement aux fonctions"
+
+#~ msgid "unable to compute real location of stacked parameter"
+#~ msgstr "incapable de calculer la localisation réelle de la pile de paramètres"
+
+#~ msgid "selector must be an immediate"
+#~ msgstr "sélecteur doit être un immédiat"
+
+#~ msgid "mask must be an immediate"
+#~ msgstr "masque doit être un immédiat"
+
+#~ msgid "no low registers available for popping high registers"
+#~ msgstr "pas de registre bas disponible pour faire ressortir les registres du haut"
+
+#~ msgid "interrupt Service Routines cannot be coded in Thumb mode"
+#~ msgstr "routines d'interruption de service ne peuvent être codées en mode THUMB"
+
+#~ msgid "%Jinitialized variable '%D' is marked dllimport"
+#~ msgstr "%Jvariable initialisé « %D » est marquée dllimport"
+
+#~ msgid "%Jstatic variable '%D' is marked dllimport"
+#~ msgstr "%Jvariable statique « %D » est marquée dllimport"
+
+#~ msgid "Generate APCS conformant stack frames"
+#~ msgstr "Générer des trames de pile conformes à APCS"
+
+#~ msgid "Store function names in object code"
+#~ msgstr "Sotcker les noms de fonctions dans le code objet"
+
+#~ msgid "Use the 32-bit version of the APCS"
+#~ msgstr "Utilise la version 32 bts de APCS"
+
+#~ msgid "Pass FP arguments in FP registers"
+#~ msgstr "Passer les arguments FP par les registres FP"
+
+#~ msgid "Generate re-entrant, PIC code"
+#~ msgstr "Générer du code PIC ré-entrant"
+
+#~ msgid "The MMU will trap on unaligned accesses"
+#~ msgstr "Le MMU va intercepter les accès mal alignés"
+
+#~ msgid "Use library calls to perform FP operations"
+#~ msgstr "Utiliser les appels de bibliothèque pour exécuter les opérations FP"
+
+#~ msgid "Use hardware floating point instructions"
+#~ msgstr "Utiliser les instructions matérielles en virgule flottante"
+
+#~ msgid "Assume target CPU is configured as big endian"
+#~ msgstr "Présumer que le processeur cible est un système à octets de poids fort"
+
+#~ msgid "Assume target CPU is configured as little endian"
+#~ msgstr "Présumer que le processeur cible est un système à octets de poids faible"
+
+#~ msgid "Assume big endian bytes, little endian words"
+#~ msgstr "Présumer un système à octets de poids fort pour les octets et faible pour les mots"
+
+#~ msgid "Support calls between Thumb and ARM instruction sets"
+#~ msgstr "Supporter les appels des jeux d'instructions THUMB et ARM"
+
+#~ msgid "Generate a call to abort if a noreturn function returns"
+#~ msgstr "Générer un appel pour stopper si une fonction sans retour retourne un résultat"
+
+#~ msgid "Do not move instructions into a function's prologue"
+#~ msgstr "Ne pas déplacer les instruction dans le prologue de fonction"
+
+#~ msgid "Do not load the PIC register in function prologues"
+#~ msgstr "Ne pas charger le registre PIC dans les prologue de fonction"
+
+#~ msgid "Generate call insns as indirect calls, if necessary"
+#~ msgstr "Générer l'appel insn comme un appel indirect, si nécessaire"
+
+#~ msgid "Compile for the Thumb not the ARM"
+#~ msgstr "Compiler pour le THUMB et non pas le ARM"
+
+#~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
+#~ msgstr "Thumb: générer (non feuilles) trames de pile même si non nécessaire"
+
+#~ msgid "Thumb: Generate (leaf) stack frames even if not needed"
+#~ msgstr "Thumb : Générer (feuilles) trames de pile même si non nécessaire"
+
+#~ msgid "Thumb: Assume non-static functions may be called from ARM code"
+#~ msgstr "Thumb : Présumer que les fonctions non statiques peuvent être appelées du code ARM"
+
+#~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
+#~ msgstr "Thumb : Présumer que les pointeurs de fonction peuvent tomber dans le code en dehors non sensible au Thumb"
+
+#~ msgid "Cirrus: Place NOPs to avoid invalid instruction combinations"
+#~ msgstr "Cirrus: insérer des NOP pour éviter un combinaison d'instructions invalides"
+
+#~ msgid "Cirrus: Do not break up invalid instruction combinations with NOPs"
+#~ msgstr "Cirrus: ne pas briser la combinaison d'instructions invalides avec des NOP"
+
+#~ msgid "Specify the name of the target CPU"
+#~ msgstr "Spécifier le nom du processeur cible"
+
+#~ msgid "Specify the name of the target architecture"
+#~ msgstr "Spécifier le nom de l'architecture cible"
+
+#~ msgid "Specify the version of the floating point emulator"
+#~ msgstr "Spécifier la version de l'émulateur en virgule flottante"
+
+#~ msgid "Specify the minimum bit alignment of structures"
+#~ msgstr "Spécifier le minimum de bits pour l'alignement de structures"
+
+#~ msgid "Specify the register to be used for PIC addressing"
+#~ msgstr "Spécifier le registre à utiliser pour l'adressage PIC"
+
+#~ msgid "Ignore dllimport attribute for functions"
+#~ msgstr "Ignorer l'attribut dllimport pour les fonctions"
+
+#~ msgid "large frame pointer change (%d) with -mtiny-stack"
+#~ msgstr "grand pointeur de trames change (%d) avec -mtiny-stack"
+
+#~ msgid "bad address, not (reg+disp):"
+#~ msgstr "adresse erronée, pas (reg+disp):"
+
+#~ msgid "internal compiler error.  Bad address:"
+#~ msgstr "erreur internal du compilateur. Adresse erronée:"
+
+#~ msgid "internal compiler error.  Unknown mode:"
+#~ msgstr "erreur internal du compilateur. Mode inconnu:"
+
+#~ msgid "invalid insn:"
+#~ msgstr "insn invalide:"
+
+#~ msgid "incorrect insn:"
+#~ msgstr "insn incoorect:"
+
+#~ msgid "unknown move insn:"
+#~ msgstr "insn de déplacement inconnu:"
+
+#~ msgid "bad shift insn:"
+#~ msgstr "décalage insn erroné:"
+
+#~ msgid "internal compiler error.  Incorrect shift:"
+#~ msgstr "erreur internal du compilateur. Décalage incorrect:"
+
+#~ msgid "only initialized variables can be placed into program memory area"
+#~ msgstr "seules les variables initialisées peuvent être placées dans la zone mémoire du programme"
+
+#~ msgid "only uninitialized variables can be placed in the .noinit section"
+#~ msgstr "seuls les variables non initialisées peuvent être placées dans une section .noinit"
+
+#~ msgid "MCU `%s' supported for assembler only"
+#~ msgstr "MCU « %s » est supporté pour l'assembleur seulement"
+
+#~ msgid "Assume int to be 8 bit integer"
+#~ msgstr "Présumer que les int sont des entiers de 8 bits"
+
+#~ msgid "Change the stack pointer without disabling interrupts"
+#~ msgstr "Changer le pointeur de pile sans désactiver les interruptions"
+
+#~ msgid "Use subroutines for function prologue/epilogue"
+#~ msgstr "Utiliser des sous-routines pour le prologue/epilogue de fonction"
+
+#~ msgid "Change only the low 8 bits of the stack pointer"
+#~ msgstr "Changer seulement les 8 bits du bas du pointeur de pile"
+
+#~ msgid "Do not generate tablejump insns"
+#~ msgstr "Ne pas générer les sauts de table insns"
+
+#~ msgid "Use rjmp/rcall (limited range) on >8K devices"
+#~ msgstr "Utiliser rjpm/rcall (étendue limitée) sur des périphériques >8K"
+
+#~ msgid "Output instruction sizes to the asm file"
+#~ msgstr "Produire les tailles d'instructions dans le fichier asm"
+
+#~ msgid "Specify the initial stack address"
+#~ msgstr "Spécifier l'adresse initiale de la pile"
+
+#~ msgid "Specify the MCU name"
+#~ msgstr "Spécifier le nom du MCU"
+
+#~ msgid "trampolines not supported"
+#~ msgstr "trampolines ne sont pas supportées"
+
+#~ msgid "missing '(' after '#pragma %s' - ignored"
+#~ msgstr "«(» manquante après «#pragma %s» - ignoré"
+
+#~ msgid "missing function name in '#pragma %s' - ignored"
+#~ msgstr "nom de fonction manquant dans «#pragma %s» - ignoré"
+
+#~ msgid "malformed '#pragma %s' - ignored"
+#~ msgstr "«#pragma %s» mal composé - ignoré"
+
+#~ msgid "missing section name in '#pragma %s' - ignored"
+#~ msgstr "nom de section manquant dans «#pragma %s» - ignoré"
+
+#~ msgid "missing ')' for '#pragma %s' - ignored"
+#~ msgstr "«)» manquante pour «#pragma %s» - ignoré"
+
+#~ msgid "junk at end of '#pragma %s'"
+#~ msgstr "rebut à la fin de «#pragma %s'"
+
+#~ msgid "unknown CPU version %d, using 40.\n"
+#~ msgstr "version de processeur %d inconnue, 40 est utilisé.\n"
+
+#~ msgid "ISR %s requires %d words of local vars, max is 32767"
+#~ msgstr "ISR %s requiert %d mots de var. locales, max est 32767."
+
+#~ msgid "using CONST_DOUBLE for address"
+#~ msgstr "CONST_DOUBLE utilisé pour l'adresse"
+
+#~ msgid "c4x_address_cost: Invalid addressing mode"
+#~ msgstr "c4x_address_cost: mode d'adressage invalide"
+
+#~ msgid "c4x_print_operand: %%L inconsistency"
+#~ msgstr "c4x_print_operand: %%L inconsistent"
+
+#~ msgid "c4x_print_operand: %%N inconsistency"
+#~ msgstr "c4x_print_operand: %%N inconsistent"
+
+#~ msgid "c4x_print_operand: %%O inconsistency"
+#~ msgstr "c4x_print_operand: %%O inconsisten"
+
+#~ msgid "c4x_print_operand: Bad operand case"
+#~ msgstr "c4x_print_operand: opérande erronée pour un case"
+
+#~ msgid "c4x_print_operand_address: Bad post_modify"
+#~ msgstr "c4x_print_operand_address: post-modification erronée"
+
+#~ msgid "c4x_print_operand_address: Bad pre_modify"
+#~ msgstr "c4x_print_operand_address: pré-modification erronée"
+
+#~ msgid "c4x_print_operand_address: Bad operand case"
+#~ msgstr "c4x_print_operand_address: opérande erronée pour un case"
+
+#~ msgid "c4x_rptb_insert: Cannot find start label"
+#~ msgstr "c4x_rptb_insert: ne peut repérer l'étiquette de départ"
+
+#~ msgid "mode not QImode"
+#~ msgstr "mode n'est pas QImode"
+
+#~ msgid "invalid indirect memory address"
+#~ msgstr "adresse mémoire d'indirection invalide"
+
+#~ msgid "invalid indirect (S) memory address"
+#~ msgstr "adresse mémoire (S) d'indirection invalide"
+
+#~ msgid "c4x_valid_operands: Internal error"
+#~ msgstr "c4x_valid_operands: erreur interne"
+
+#~ msgid "c4x_operand_subword: invalid mode"
+#~ msgstr "c4x_oprande_subword: mode invalide"
+
+#~ msgid "c4x_operand_subword: invalid operand"
+#~ msgstr "c4x_operand_subword: opérande invalide"
+
+#~ msgid "c4x_operand_subword: invalid autoincrement"
+#~ msgstr "c4x_operand_subword: autoincrement invalide"
+
+#~ msgid "c4x_operand_subword: invalid address"
+#~ msgstr "c4x_operand_subword: adresse invalide"
+
+#~ msgid "c4x_operand_subword: address not offsettable"
+#~ msgstr "c4x_operand_subword: un décalage d'adresse ne peut s'appliquer sur cette adresse"
+
+#~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n"
+#~ msgstr "c4x_rptb_rpts_p: étiquette supérieur de bloc de répétition déplacée\n"
+
+#~ msgid "Small memory model"
+#~ msgstr "Modèle de mémoire petite"
+
+#~ msgid "Big memory model"
+#~ msgstr "Modèle de mémoire grande"
+
+#~ msgid "Use MPYI instruction for C3x"
+#~ msgstr "Utiliser les instructions MPYI pour C3x"
+
+#~ msgid "Do not use MPYI instruction for C3x"
+#~ msgstr "Ne pas utiliser les instructions MPYI pour C3x"
+
+#~ msgid "Use fast but approximate float to integer conversion"
+#~ msgstr "Utiliser le mode rapide mais approximatif de conversion de flottant à entier"
+
+#~ msgid "Use slow but accurate float to integer conversion"
+#~ msgstr "Utiliser le mode lent mais précis de conversion de flottant à entier"
+
+#~ msgid "Enable use of RTPS instruction"
+#~ msgstr "Autoriser l'utilisation de l'instruction RTPS"
+
+#~ msgid "Disable use of RTPS instruction"
+#~ msgstr "Interdire l'utilisation de l'instruction RTPS"
+
+#~ msgid "Enable use of RTPB instruction"
+#~ msgstr "Autoriser l'utilisation de l'instruction RTPB"
+
+#~ msgid "Disable use of RTPB instruction"
+#~ msgstr "Interdire l'utilisation de l'instruction RTPB"
+
+#~ msgid "Generate code for C30 CPU"
+#~ msgstr "Générer du code pour processeur C30"
+
+#~ msgid "Generate code for C31 CPU"
+#~ msgstr "Générer du code pour processeur C31"
+
+#~ msgid "Generate code for C32 CPU"
+#~ msgstr "Générer du code pour processeur C32"
+
+#~ msgid "Generate code for C33 CPU"
+#~ msgstr "Générer du code pour processeur C33"
+
+#~ msgid "Generate code for C40 CPU"
+#~ msgstr "Générer du code pour processeur C40"
+
+#~ msgid "Generate code for C44 CPU"
+#~ msgstr "Générer du code pour processeur C44"
+
+#~ msgid "Emit code compatible with TI tools"
+#~ msgstr "Produire du code compatible avec les outils TI"
+
+#~ msgid "Emit code to use GAS extensions"
+#~ msgstr "Produire du code pour utiliser les extensions GAS"
+
+#~ msgid "Save DP across ISR in small memory model"
+#~ msgstr "Sauvegarder DP à travers ISR dans le modèle de mémoire restreinte"
+
+#~ msgid "Don't save DP across ISR in small memory model"
+#~ msgstr "Ne pas sauvegarder DP à travers ISR dans le modèle de mémoire restreinte"
+
+#~ msgid "Pass arguments on the stack"
+#~ msgstr "Passer les arguments sur la pile"
+
+#~ msgid "Pass arguments in registers"
+#~ msgstr "Passer les arguments par les registres"
+
+#~ msgid "Enable new features under development"
+#~ msgstr "Autoriser les nouvelles options en développement"
+
+#~ msgid "Disable new features under development"
+#~ msgstr "Désactiver les nouvelles options en développement"
+
+#~ msgid "Use the BK register as a general purpose register"
+#~ msgstr "Utiliser le registre BK comme registre général tout usage"
+
+#~ msgid "Do not allocate BK register"
+#~ msgstr "Ne pas allouer de registre BK"
+
+#~ msgid "Enable use of DB instruction"
+#~ msgstr "Activer l'utilisation d'instruction DB"
+
+#~ msgid "Disable use of DB instruction"
+#~ msgstr "Désactiver l'utilisation d'instruction DB"
+
+#~ msgid "Enable debugging"
+#~ msgstr "Permettre la mise au point"
+
+#~ msgid "Disable debugging"
+#~ msgstr "Désactiver la mise au point"
+
+#~ msgid "Force constants into registers to improve hoisting"
+#~ msgstr "Forcer les constantes dans les registres pour améliorer la montée"
+
+#~ msgid "Don't force constants into registers"
+#~ msgstr "Ne pas forcer les constantes dans les registres"
+
+#~ msgid "Force RTL generation to emit valid 3 operand insns"
+#~ msgstr "Forcer la génération RTL pour produire des opérandes insn 3 valides"
+
+#~ msgid "Allow RTL generation to emit invalid 3 operand insns"
+#~ msgstr "Autoriser la génération RTL pour produire des opérandes insn 3 invalides"
+
+#~ msgid "Allow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Autoriser un compteur non signé d'itérations pour RPTB/DB"
+
+#~ msgid "Disallow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Interdire un compteur non signé d'itération pour RPTB/DB"
+
+#~ msgid "Preserve all 40 bits of FP reg across call"
+#~ msgstr "Préserver tous les 40 bits du registre FP à travers les appels"
+
+#~ msgid "Only preserve 32 bits of FP reg across call"
+#~ msgstr "Préserver seulement 32 bits du registre FP à travers les appels"
+
+#~ msgid "Enable parallel instructions"
+#~ msgstr "Autoriser les instructions parallèles"
+
+#~ msgid "Disable parallel instructions"
+#~ msgstr "Interdire les instructions parallèles"
+
+#~ msgid "Enable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Autoriser les instructions MPY||ADD et MPY||SUB"
+
+#~ msgid "Disable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Interdire les instructions MPY||ADD et MPY||SUB"
+
+#~ msgid "Assume that pointers may be aliased"
+#~ msgstr "Présumer que les pointeurs peuvent être aliasés"
+
+#~ msgid "Assume that pointers not aliased"
+#~ msgstr "Présumer que les pointeurs ne peuvent pas être aliasés"
+
+#~ msgid "Specify maximum number of iterations for RPTS"
+#~ msgstr "Spécifier le nombre maximum d'itérations pour RPTS"
+
+#~ msgid "Select CPU to generate code for"
+#~ msgstr "Sélectionner le processeur pour lequel le code doit être généré"
+
+#~ msgid "unexpected index-type in cris_print_index"
+#~ msgstr "type d'index inattendu dans cris_print_index"
+
+#~ msgid "unexpected base-type in cris_print_base"
+#~ msgstr "type de base inattendu dans cris_print_base"
+
+#~ msgid "stackframe too big: %d bytes"
+#~ msgstr "trame de pile trop grande: %d octets"
+
+#~ msgid "allocated but unused delay list in epilogue"
+#~ msgstr "alloué mais liste de délai non utilisée dans l'épilogue"
+
+#~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return"
+#~ msgstr "type de fonction inattendue ajustement de la pile nécessaire pour « __builtin_eh_return »"
+
+#~ msgid "invalid operand for 'b' modifier"
+#~ msgstr "opérande invalide pour le modificateur « b »"
+
+#~ msgid "invalid operand for 'v' modifier"
+#~ msgstr "opérande invalide pour le modificateur « v »"
+
+#~ msgid "invalid operand for 'P' modifier"
+#~ msgstr "opérande invalide pour le modificateur « P »"
+
+#~ msgid "invalid operand for 'p' modifier"
+#~ msgstr "opérande invalide pour le modificateur « p »"
+
+#~ msgid "invalid operand for 'z' modifier"
+#~ msgstr "opérande invalide pour le modificateur « z »"
+
+#~ msgid "invalid operand for 'H' modifier"
+#~ msgstr "opérande invalide pour le modificateur « H »"
+
+#~ msgid "bad register"
+#~ msgstr "registre erroné"
+
+#~ msgid "invalid operand for 'e' modifier"
+#~ msgstr "opérande invalide pour le modificateur « e »"
+
+#~ msgid "invalid operand for 'm' modifier"
+#~ msgstr "opérande invalide pour le modificateur « m »"
+
+#~ msgid "invalid operand for 'A' modifier"
+#~ msgstr "opérande invalide pour le modificateur « A »"
+
+#~ msgid "invalid operand for 'D' modifier"
+#~ msgstr "opérande invalide pour le modificateur « D »"
+
+#~ msgid "invalid operand for 'T' modifier"
+#~ msgstr "opérande invalide pour le modificateur « T »"
+
+#~ msgid "invalid operand modifier letter"
+#~ msgstr "opérande invalide pour le modificateur de lettre"
+
+#~ msgid "internal error: bad register: %d"
+#~ msgstr "erreur interne: registre erroné: %d"
+
+#~ msgid "unexpected multiplicative operand"
+#~ msgstr "opérande multiplicative inattendue"
+
+#~ msgid "unexpected operand"
+#~ msgstr "opérande inattendue"
+
+#~ msgid "unrecognized address"
+#~ msgstr "adresse non reconnue"
+
+#~ msgid "internal error: sideeffect-insn affecting main effect"
+#~ msgstr "erreur interne: effet de bord de insn sideeffect-insn ayant un effet principal"
+
+#~ msgid "internal error: cris_side_effect_mode_ok with bad operands"
+#~ msgstr "erreur interne: cris_side_effect_mode_ok avec des opérandes erronées"
+
+#~ msgid "unrecognized supposed constant"
+#~ msgstr "supposée constante non reconnue"
+
+#~ msgid "unrecognized supposed constant in cris_global_pic_symbol"
+#~ msgstr "supposée constante non reconnue dans cris_global_pic_symbol"
+
+#~ msgid "-max-stackframe=%d is not usable, not between 0 and %d"
+#~ msgstr "-max-stackframe=%d n'est pas utilisable, n'est pas entre 0 et %d"
+
+#~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
+#~ msgstr "spécification de version CRIS inconnue dans -march= ou -mcpu= : %s"
+
+#~ msgid "unknown CRIS cpu version specification in -mtune= : %s"
+#~ msgstr "spécification de version CRIS inconnue dans -mtune= : %s"
+
+#~ msgid "-fPIC and -fpic are not supported in this configuration"
+#~ msgstr "-fPIC et -fpic ne sont pas supportées par cette configuration"
+
+#~ msgid "that particular -g option is invalid with -maout and -melinux"
+#~ msgstr "l'option particulière -g est invalide avec -maout et -melinux"
+
+#~ msgid "unexpected side-effects in address"
+#~ msgstr "effets de bord inattendue dans l'adresse"
+
+#~ msgid "unexpected PIC symbol"
+#~ msgstr "symbole PIC inattendue"
+
+#~ msgid "PIC register isn't set up"
+#~ msgstr "le registre n'est pas initialisé"
+
+#~ msgid "unexpected address expression"
+#~ msgstr "expression d'adresse inattendue"
+
+#~ msgid "emitting PIC operand, but PIC register isn't set up"
+#~ msgstr "génération d'une opérande PIC mais le registre PIC n'est pas initialisé"
+
+#~ msgid "unexpected NOTE as addr_const:"
+#~ msgstr "NOTE inattendu comme addr_conts:"
+
+#~ msgid "Compile for the MMU-less Etrax 100-based elinux system"
+#~ msgstr "Compiler pour le MMU-less Etrax 100-based de système elinux"
+
+#~ msgid "For elinux, request a specified stack-size for this program"
+#~ msgstr "Pour elinux, faire la requête pour un taille de pile spécifique pour ce programme"
+
+#~ msgid "Work around bug in multiplication instruction"
+#~ msgstr "Travailler autour de l'anomalie dans l'instructions de multiplication"
+
+#~ msgid "Compile for ETRAX 4 (CRIS v3)"
+#~ msgstr "Compilé pour ETRAX 4 (CRIS v3)"
+
+#~ msgid "Compile for ETRAX 100 (CRIS v8)"
+#~ msgstr "Compile pour ETRAX 100 (CRIS v8)"
+
+#~ msgid "Emit verbose debug information in assembly code"
+#~ msgstr "Produire des informations de mise au point dans le code assemblé"
+
+#~ msgid "Do not use condition codes from normal instructions"
+#~ msgstr "Ne pas utiliser du code conditionnel pour des instructions normales"
+
+#~ msgid "Do not emit addressing modes with side-effect assignment"
+#~ msgstr "Ne pas produire de modes d'adressage avec des affectations avec effet de bord"
+
+#~ msgid "Do not tune stack alignment"
+#~ msgstr "Ne pas ajuster l'alignement de la pile"
+
+#~ msgid "Do not tune writable data alignment"
+#~ msgstr "Ne pas ajuster l'alignement les sections de données dynamiques"
+
+#~ msgid "Do not tune code and read-only data alignment"
+#~ msgstr "Ne pas ajuster l'alignement du code et des sections de données statiques"
+
+#~ msgid "Align code and data to 32 bits"
+#~ msgstr "Aligner le code et les données sur 32 bits"
+
+#~ msgid "Don't align items in code or data"
+#~ msgstr "Ne pas aligner les items dans le code ou les données"
+
+#~ msgid "Do not emit function prologue or epilogue"
+#~ msgstr "Ne pas générer de prologue ou d'épilogue de fonction"
+
+#~ msgid "Use the most feature-enabling options allowed by other options"
+#~ msgstr "Utiliser le plus d'options autorisant autorisant des options permises par les autres options"
+
+#~ msgid "Override -mbest-lib-options"
+#~ msgstr "Écraser -mbest-lib-options"
+
+#~ msgid "Generate code for the specified chip or CPU version"
+#~ msgstr "Générer le code pour la version de processeur ou de circuit spécifiée"
+
+#~ msgid "Tune alignment for the specified chip or CPU version"
+#~ msgstr "Ajuster l'alignement pour la version de processeur ou de circuit spécifiée"
+
+#~ msgid "Warn when a stackframe is larger than the specified size"
+#~ msgstr "Avertir lorsqu'une trame de pile est plus grande que la taille spécifiée"
+
+#~ msgid "no FUNCTION_PROFILER for CRIS"
+#~ msgstr "pas de FUNCTION_PROFILER pour CRIS"
+
+#~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
+#~ msgstr "ensemble avec -fpic et -fPIC, ne pas utiliser les références GOTPLT"
+
+#~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s"
+#~ msgstr "modes_tieable_p erronée pour le registre %s, mode1 %s, mode2 %s"
+
+#~ msgid "bad insn to d30v_print_operand_address:"
+#~ msgstr "insn erroné pour d30v_print_operand_addresse:"
+
+#~ msgid "bad insn to d30v_print_operand_memory_reference:"
+#~ msgstr "insn erroné pour d30v_print_operand_memory_reference:"
+
+#~ msgid "bad insn to d30v_print_operand, 'f' modifier:"
+#~ msgstr "insn erroné pour d30v_print_operand, modificateur « f »:"
+
+#~ msgid "bad insn to d30v_print_operand, 'A' modifier:"
+#~ msgstr "insn erroné pour d30v_print_operand, modificateur « A »:"
+
+#~ msgid "bad insn to d30v_print_operand, 'M' modifier:"
+#~ msgstr "insn erroné pour d30v_print_operand, modificateur « M »:"
+
+#~ msgid "bad insn to print_operand, 'F' or 'T' modifier:"
+#~ msgstr "insn erroné pour print_operand, modificateur « F » ou « T »:"
+
+#~ msgid "bad insn to print_operand, 'B' modifier:"
+#~ msgstr "insn erroné pour print_operand, modificateur « B »:"
+
+#~ msgid "bad insn to print_operand, 'E' modifier:"
+#~ msgstr "insn erroné pour print_operand, modificateur « E »:"
+
+#~ msgid "bad insn to print_operand, 'R' modifier:"
+#~ msgstr "insn erroné to print_operand, modificateur « R »:"
+
+#~ msgid "bad insn to print_operand, 's' modifier:"
+#~ msgstr "insn erroné to print_operand, modificateur « s »:"
+
+#~ msgid "bad insn in d30v_print_operand, 0 case"
+#~ msgstr "insn erroné dans d30v_print_operand, cas 0"
+
+#~ msgid "d30v_emit_comparison"
+#~ msgstr "d30v_emit_comparison"
+
+#~ msgid "bad call to d30v_move_2words"
+#~ msgstr "appel erroné à d30v_move_2words"
+
+#~ msgid "Enable use of conditional move instructions"
+#~ msgstr "Autoriser l'utilisation des instructions conditionnelles move"
+
+#~ msgid "Disable use of conditional move instructions"
+#~ msgstr "Interdire l'utilisation des instructions conditionnelles move"
+
+#~ msgid "Debug argument support in compiler"
+#~ msgstr "Mettre au point le support d'argument dans le compilateur"
+
+#~ msgid "Debug stack support in compiler"
+#~ msgstr "Mettre au point le support de la pile dans le compilateur"
+
+#~ msgid "Debug memory address support in compiler"
+#~ msgstr "Mettre au point le support d'adresses dans le compilateur"
+
+#~ msgid "Make adjacent short instructions parallel if possible"
+#~ msgstr "Rendre adjacentes les instructions short en instructions parallèles si possible"
+
+#~ msgid "Do not make adjacent short instructions parallel"
+#~ msgstr "Ne pas rendre adjacentes les instructions short en instructions parallèles"
+
+#~ msgid "Link programs/data to be in external memory by default"
+#~ msgstr "Faire l'édition de lien des programmes/données comme étant externe à la mémoire par défaut"
+
+#~ msgid "Link programs/data to be in onchip memory by default"
+#~ msgstr "Faire l'édition de lien des programmes/données comme étant interne dans la circuiterie de la mémoire par défaut"
+
+#~ msgid "Change the branch costs within the compiler"
+#~ msgstr "Changer les coûts de branchement à l'intérieur du compilateur"
+
+#~ msgid "Change the threshold for conversion to conditional execution"
+#~ msgstr "Changer le seuil pour la conversion en une exécution conditionnelle"
+
+#~ msgid "stack size > 32k"
+#~ msgstr "taille de la pile > 32k"
+
+#~ msgid "invalid addressing mode"
+#~ msgstr "mode d'adressage invalide"
+
+#~ msgid "bad register extension code"
+#~ msgstr "code d'extension de registre erroné"
+
+#~ msgid "invalid offset in ybase addressing"
+#~ msgstr "décalage invalide dans l'adresse ybase"
+
+#~ msgid "invalid register in ybase addressing"
+#~ msgstr "registre invalide dans l'adressage ybase"
+
+#~ msgid "invalid shift operator in emit_1600_core_shift"
+#~ msgstr "opérateur de décalage invalide dans emit_1600_core_shift"
+
+#~ msgid "invalid mode for gen_tst_reg"
+#~ msgstr "mode invalide pour gen_tst_reg"
+
+#~ msgid "invalid mode for integer comparison in gen_compare_reg"
+#~ msgstr "mode invalide pour la comparaison d'entiers dans gen_compare_reg"
+
+#~ msgid "Pass parameters in registers (default)"
+#~ msgstr "Passer les paramètres par les registres (par défaut)"
+
+#~ msgid "Don't pass parameters in registers"
+#~ msgstr "Ne pas passer les paramètres par les registres"
+
+#~ msgid "Generate code for near calls"
+#~ msgstr "Générer du code pour les appels proches"
+
+#~ msgid "Don't generate code for near calls"
+#~ msgstr "Ne pas générer du code pour les appels proches"
+
+#~ msgid "Generate code for near jumps"
+#~ msgstr "Générer du code pour les sauts proches"
+
+#~ msgid "Don't generate code for near jumps"
+#~ msgstr "Ne pas générer du code pour les sauts proches"
+
+#~ msgid "Generate code for a bit-manipulation unit"
+#~ msgstr "Générer du code pour une unité de manipulation de bits"
+
+#~ msgid "Don't generate code for a bit-manipulation unit"
+#~ msgstr "Ne pas générer du code pour une unité de manipulation de bits"
+
+#~ msgid "Generate code for memory map1"
+#~ msgstr "Générer du code pour la mémoire map1"
+
+#~ msgid "Generate code for memory map2"
+#~ msgstr "Générer du code pour la mémoire map2"
+
+#~ msgid "Generate code for memory map3"
+#~ msgstr "Générer du code pour la mémoire map3"
+
+#~ msgid "Generate code for memory map4"
+#~ msgstr "Générer du code pour la mémoire map4"
+
+#~ msgid "Ouput extra code for initialized data"
+#~ msgstr "Produire du code additionnel pour les données initialisées"
+
+#~ msgid "Don't let reg. allocator use ybase registers"
+#~ msgstr "Ne pas laisser l'allocateur de registres utiliser les registres ybase"
+
+#~ msgid "Output extra debug info in Luxworks environment"
+#~ msgstr "Produire des informations supplémentaires de mise au point dans l'environnement Luxworks"
+
+#~ msgid "Save temp. files in Luxworks environment"
+#~ msgstr "Sauvegarder les fichiers temporaires dans l'environnement Luxworks"
+
+#~ msgid "Specify alternate name for text section"
+#~ msgstr "Spécifier un nom alternatif pour la section texte"
+
+#~ msgid "Specify alternate name for data section"
+#~ msgstr "Spécifier un nom alternatif pour la section données"
+
+#~ msgid "Specify alternate name for bss section"
+#~ msgstr "Spécifier un nom alternatif pour la section bss"
+
+#~ msgid "Specify alternate name for constant section"
+#~ msgstr "Spécifier un nom alternatif pour la section des constantes"
+
+#~ msgid "Specify alternate name for dsp16xx chip"
+#~ msgstr "Spécifier un nom alternatif pour le cirsuit dsp16xx"
+
+#~ msgid "profiling not implemented yet"
+#~ msgstr "profilage n'est pas implanté encore"
+
+#~ msgid "trampolines not yet implemented"
+#~ msgstr "trampolines ne sont pas encore implantées"
+
+#~ msgid "fr30_print_operand_address: unhandled address"
+#~ msgstr "fr30_print_operand_address: adresse non traitée"
+
+#~ msgid "fr30_print_operand: unrecognized %%p code"
+#~ msgstr "fr30_print_operand: code %%p non reconnue"
+
+#~ msgid "fr30_print_operand: unrecognized %%b code"
+#~ msgstr "fr30_print_operand: code %%b non reconnue"
+
+#~ msgid "fr30_print_operand: unrecognized %%B code"
+#~ msgstr "fr30_print_operand: code %%B non reconnu"
+
+#~ msgid "fr30_print_operand: invalid operand to %%A code"
+#~ msgstr "fr30_print_operand: opérande invalide pour code %%A"
+
+#~ msgid "fr30_print_operand: invalid %%x code"
+#~ msgstr "fr30_print_operand: code %%x invalide"
+
+#~ msgid "fr30_print_operand: invalid %%F code"
+#~ msgstr "fr30_print_operand: code %%F invalide"
+
+#~ msgid "fr30_print_operand: unknown code"
+#~ msgstr "fr30_print_operand: code inconnu"
+
+#~ msgid "fr30_print_operand: unhandled MEM"
+#~ msgstr "fr30_print_operand: MEM non traité"
+
+#~ msgid "Assume small address space"
+#~ msgstr "Présumer un petit espace d'adressage"
+
+#~ msgid "Unknown cpu: -mcpu=%s"
+#~ msgstr "Processeur inconnu : -mcpu=%s"
+
+#~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)"
+#~ msgstr "-fpic et -gdwarf sont incompatibles (-fpic et -g/-gdwarf-2 sont acceptables)"
+
+#~ msgid "Bad insn to frv_print_operand_address:"
+#~ msgstr "insn erroné pour frv_print_operand_addresse:"
+
+#~ msgid "Bad register to frv_print_operand_memory_reference_reg:"
+#~ msgstr "registre erroné pour frv_print_operand_memory_reference_reg:"
+
+#~ msgid "Bad insn to frv_print_operand_memory_reference:"
+#~ msgstr "insn erroné pour frv_print_operand_memory_reference:"
+
+#~ msgid "Bad insn in frv_print_operand, bad const_double"
+#~ msgstr "insn erroné dans frv_print_operand, bad const_double"
+
+#~ msgid "Bad insn to frv_print_operand, 'C' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « C »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'c' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « c »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'e' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « e »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'F' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « F »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'f' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « f »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'L' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « L »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « M/N »:"
+
+#~ msgid "Bad insn to frv_print_operand, 'O' modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « O »:"
+
+#~ msgid "Bad insn to frv_print_operand, P modifier:"
+#~ msgstr "insn erroné pour frv_print_operand, modificateur « P »:"
+
+#~ msgid "Bad insn in frv_print_operand, z case"
+#~ msgstr "insn erroné dans frv_print_operand, case z"
+
+#~ msgid "Bad insn in frv_print_operand, 0 case"
+#~ msgstr "insn erroné dans frv_print_operand, case 0"
+
+#~ msgid "frv_print_operand: unknown code"
+#~ msgstr "frv_print_operand: code inconnu"
+
+#~ msgid "Bad output_move_single operand"
+#~ msgstr "opérande output_move_single erronée"
+
+#~ msgid "Bad output_move_double operand"
+#~ msgstr "opérande output_move_double erronée"
+
+#~ msgid "Bad output_condmove_single operand"
+#~ msgstr "opérande output_condmove_single erronée"
+
+#~ msgid "frv_registers_update"
+#~ msgstr "frv_registers_update"
+
+#~ msgid "frv_registers_used_p"
+#~ msgstr "frv_registers_used_p"
+
+#~ msgid "frv_registers_set_p"
+#~ msgstr "frv_registers_set_p"
+
+#~ msgid "accumulator is not a constant integer"
+#~ msgstr "accumulateur n'est pas une constante en entier"
+
+#~ msgid "accumulator number is out of bounds"
+#~ msgstr "numéro de l'accumulateur est hors limite"
+
+#~ msgid "inappropriate accumulator for `%s'"
+#~ msgstr "accumulateur inapproprié pour « %s »"
+
+#~ msgid "`%s' expects a constant argument"
+#~ msgstr "« %s » attend un argument de constante"
+
+#~ msgid "constant argument out of range for `%s'"
+#~ msgstr "argument de constante hors limite pour « %s »"
+
+#~ msgid "media functions are not available unless -mmedia is used"
+#~ msgstr "fonctions média ne sont pas disponibles à mois que -mmedia soit utilisé"
+
+#~ msgid "this media function is only available on the fr500"
+#~ msgstr "cette fonction média est seulement disponible sur le fr500"
+
+#~ msgid "this media function is only available on the fr400"
+#~ msgstr "cette fonction média est seulement disponible sur le fr400"
+
+#~ msgid " (frv)"
+#~ msgstr " (frv)"
+
+#~ msgid "-ms2600 is used without -ms"
+#~ msgstr "-ms2600 est utilisé sans -ms"
+
+#~ msgid "-mn is used without -mh or -ms"
+#~ msgstr "-mm est utilisé sans -mh ou -ms"
+
+#~ msgid "Generate H8S code"
+#~ msgstr "Générer du code H8S"
+
+#~ msgid "Do not generate H8S code"
+#~ msgstr "Ne pas générer du code H8S"
+
+#~ msgid "Generate H8S/2600 code"
+#~ msgstr "Générer du code H8S/S2600"
+
+#~ msgid "Do not generate H8S/2600 code"
+#~ msgstr "Ne pas générer du code H8S/2600"
+
+#~ msgid "Make integers 32 bits wide"
+#~ msgstr "Rendre les entiers larges de 32 bits"
+
+#~ msgid "Use registers for argument passing"
+#~ msgstr "Utiliser les registres pour le passage d'arguments"
+
+#~ msgid "Do not use registers for argument passing"
+#~ msgstr "Ne pas utiliser les registres pour le passage d'arguments"
+
+#~ msgid "Consider access to byte sized memory slow"
+#~ msgstr "Considérer l'accès mémoire lent pour la taille d'octets"
+
+#~ msgid "Enable linker relaxing"
+#~ msgstr "Activer la rélâche par l'éditeur de liens"
+
+#~ msgid "Generate H8/300H code"
+#~ msgstr "Générer du code H8/300H"
+
+#~ msgid "Enable the normal mode"
+#~ msgstr "Activer le mode normal"
+
+#~ msgid "Do not generate H8/300H code"
+#~ msgstr "Ne pas générer du code H8/300H"
+
+#~ msgid "Use H8/300 alignment rules"
+#~ msgstr "Utiliser les règles d'alignement H8/300"
+
+#~ msgid "junk at end of #pragma map"
+#~ msgstr "rebut à la fin de #pragma map"
+
+#~ msgid "malformed #pragma map, ignored"
+#~ msgstr "#pragma map mal composé, ignoré"
+
+#~ msgid "real name is too long - alias ignored"
+#~ msgstr "nom réel est trop long - alias ignoré"
+
+#~ msgid "alias name is too long - alias ignored"
+#~ msgstr "nom d'alias est trop long - alias ignoré"
+
+#~ msgid "internal error--no jump follows compare:"
+#~ msgstr "erreur interne--pas de saut suivant la comparaison:"
+
+#~ msgid "Generate char instructions"
+#~ msgstr "Générer des instructions « char »"
+
+#~ msgid "Do not generate char instructions"
+#~ msgstr "Ne pas générer des instructions « char »"
+
+#~ msgid "code model %s not supported in PIC mode"
+#~ msgstr "model de code %s n'est pas supporté en mode PIC"
+
+#~ msgid "bad value (%s) for -mcmodel= switch"
+#~ msgstr "valeur erronée (%s) pour l'opton -mcmodel="
+
+#~ msgid "bad value (%s) for -masm= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -masm"
+
+#~ msgid "code model `%s' not supported in the %s bit mode"
+#~ msgstr "model de code « %s » n'est pas supporté dans le mode %s bits"
+
+#~ msgid "code model `large' not supported yet"
+#~ msgstr "model de code « large » n'est pas supporté encore"
+
+#~ msgid "%i-bit mode not compiled in"
+#~ msgstr "mode %i bits pas compilé en"
+
+#~ msgid "CPU you selected does not support x86-64 instruction set"
+#~ msgstr "le processeur sélectionné ne supporte pas le jeu d'instructions x86-64"
+
+#~ msgid "bad value (%s) for -march= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -march="
+
+#~ msgid "bad value (%s) for -mtune= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mtune="
+
+#~ msgid "-mregparm=%d is not between 0 and %d"
+#~ msgstr "-mregparm=%d n'est pas entre 0 et %d"
+
+#~ msgid "-malign-loops is obsolete, use -falign-loops"
+#~ msgstr "-malign-loops est obsolète, utiliser -falign-loops"
+
+#~ msgid "-malign-loops=%d is not between 0 and %d"
+#~ msgstr "-malign-loops=%d n'est pas entre 0 et %d"
+
+#~ msgid "-malign-jumps is obsolete, use -falign-jumps"
+#~ msgstr "-malign-jumps est obsolète, utiliser -falign-loops"
+
+#~ msgid "-malign-functions is obsolete, use -falign-functions"
+#~ msgstr "-malign-functions est obsolète, utiliser -falign-loops"
+
+#~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
+#~ msgstr "-mpreferred-stack-boundary=%d n'est pas entre %d et 12"
+
+#~ msgid "-mbranch-cost=%d is not between 0 and 5"
+#~ msgstr "-mbranch-cost=%d n'est pas entre 0 et 5"
+
+#~ msgid "bad value (%s) for -mtls-dialect= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mtls-dialect"
+
+#~ msgid "-malign-double makes no sense in the 64bit mode"
+#~ msgstr "-malign-double n'a aucun sens en mode 64 bits"
+
+#~ msgid "-mrtd calling convention not supported in the 64bit mode"
+#~ msgstr "la conversion d'appel -mrtd n'est pas supporté en mode 64 bits"
+
+#~ msgid "SSE instruction set disabled, using 387 arithmetics"
+#~ msgstr "jeu d'instructions SSE désactivé, arithmétique 387 est utilisé"
+
+#~ msgid "387 instruction set disabled, using SSE arithmetics"
+#~ msgstr "jeu d'instructions 387 désactivé, arithmétique SSE est utilisé"
+
+#~ msgid "bad value (%s) for -mfpmath= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mfpmath"
+
+#~ msgid "fastcall and stdcall attributes are not compatible"
+#~ msgstr "les attributs fastcall et stdcall ne sont pas compatibles"
+
+#~ msgid "fastcall and regparm attributes are not compatible"
+#~ msgstr "les attributs fastcall et regparm ne sont pas compatibles"
+
+#~ msgid "`%s' attribute requires an integer constant argument"
+#~ msgstr "l'attribut « %s » requiert un argument de type constante entière"
+
+#~ msgid "argument to `%s' attribute larger than %d"
+#~ msgstr "l'argument pour l'attribut « %s » est plus grand que %d"
+
+#~ msgid "SSE vector argument without SSE enabled changes the ABI"
+#~ msgstr "l'argument vecteur SSE sans autorisation SSE modifie l'ABI "
+
+#~ msgid "MMX vector argument without MMX enabled changes the ABI"
+#~ msgstr "l'argument vecteur SSE sans autorisation MXX modifie l'ABI "
+
+#~ msgid "SSE vector return without SSE enabled changes the ABI"
+#~ msgstr "vecteur SSE retourné sans autorisation SSE des changements de l'ABI "
+
+#~ msgid "invalid UNSPEC as operand"
+#~ msgstr "UNSPEC invalide comme opérande"
+
+#~ msgid "extended registers have no high halves"
+#~ msgstr "registres étendus n'a pas de demis hauts"
+
+#~ msgid "unsupported operand size for extended register"
+#~ msgstr "taille d'opérande non supportée pour un registre étendu"
+
+#~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+#~ msgstr "l'opérande n'est ni une constante ni du code de condition, code d'opérande invalide « c »"
+
+#~ msgid "invalid operand code `%c'"
+#~ msgstr "opérande invalide pour « %c »"
+
+#~ msgid "invalid constraints for operand"
+#~ msgstr "contrainte invalide pour l'opérande"
+
+#~ msgid "unknown insn mode"
+#~ msgstr "mode insn inconnu"
+
+#~ msgid "selector must be an integer constant in the range 0..%i"
+#~ msgstr "le sélecteur doit être une constante entière entre les bornes 0..%i"
+
+#~ msgid "shift must be an immediate"
+#~ msgstr "décalage doit être un immédiat"
+
+#~ msgid "`%s' incompatible attribute ignored"
+#~ msgstr "attribut « %s » incompatible ignoré"
+
+#~ msgid "%Jfunction `%D' definition is marked dllimport."
+#~ msgstr "%Jdéfinition de la fonction « %D » est marquée dllimport"
+
+#~ msgid "%Jvariable `%D' definition is marked dllimport."
+#~ msgstr "%Jdéfinition de la variable « %D » est marquée dllimport"
+
+#~ msgid "%Jexternal linkage required for symbol '%D' because of '%s' attribute."
+#~ msgstr "%Jédition de lien externe requise pour le symbole « %D » en raison de l'attribut « %s »"
+
+#~ msgid "`%s' attribute only applies to variables"
+#~ msgstr "attribut « %s » s'applique seulement aux variables"
+
+#~ msgid "%Jfunction '%D' is defined after prior declaration as dllimport: attribute ignored"
+#~ msgstr "%Jfonction « %D » est définie après un déclaration antérieure en tant que dllimport: attribut ignoré"
+
+#~ msgid "%Jinline function '%D' is declared as dllimport: attribute ignored."
+#~ msgstr "%Jfonction enligne « %D » est déclarée en tant que dllimport: attribut ignoré."
+
+#~ msgid "%Jdefinition of static data member '%D' of dllimport'd class."
+#~ msgstr "%Jdéfinition d'un membre statique de données « %D » de la classe dllimport"
+
+#~ msgid "%Jinconsistent dll linkage for '%D', dllexport assumed."
+#~ msgstr "%Jédition de lien dll inconsistent pour « %D »: dllexport assumé."
+
+#~ msgid "`%s' declared as both exported to and imported from a DLL"
+#~ msgstr "« %s » déclaré à la fois comme exporté et importé d'une DLL"
+
+#~ msgid "%Jfailure in redeclaration of '%D': dllimport'd symbol lacks external linkage."
+#~ msgstr "%Jéchec dans la redéclation de « %D »: symbol dllimporté manque de liens externes."
+
+#~ msgid "%J'%D' defined locally after being referenced with dllimport linkage"
+#~ msgstr "%J« %D » défini localement après avoir été référencé avec lien dllimport."
+
+#~ msgid "%J'%D' redeclared without dllimport attribute after being referenced with dllimport linkage"
+#~ msgstr "%J« %D » redéclaré sans attribut dllimport après avoir été référencé avec lien dllimport."
+
+#~ msgid "%J'%D' causes a section type conflict"
+#~ msgstr "%J« %D » cause un conflit du type de section"
+
+#~ msgid "Use the Cygwin interface"
+#~ msgstr "Utiliser l'interface Cygwin"
+
+#~ msgid "Use the Mingw32 interface"
+#~ msgstr "Utiliser l'interface Mingw32"
+
+#~ msgid "Create GUI application"
+#~ msgstr "Créer une application de type GUI"
+
+#~ msgid "Don't set Windows defines"
+#~ msgstr "Ne pas initialiser les définitions Windows"
+
+#~ msgid "Set Windows defines"
+#~ msgstr "Initialiser les définitions Windows"
+
+#~ msgid "Create console application"
+#~ msgstr "Créer une application de type console"
+
+#~ msgid "Generate code for a DLL"
+#~ msgstr "Générer le code pour un DLL"
+
+#~ msgid "Ignore dllimport for functions"
+#~ msgstr "Ignorer dllimport pour fonctions"
+
+#~ msgid "Use Mingw-specific thread support"
+#~ msgstr "Utilise le support de thread spécifique à Mingw"
+
+#~ msgid "-f%s ignored for target (all code is position independent)"
+#~ msgstr "-f%s ignoré pour la cible (tout le code set indépendant de la position)"
+
+#~ msgid "-mbnu210 is ignored (option is obsolete)"
+#~ msgstr "-mbnu210 est ignoré (option obsolète)"
+
+#~ msgid "ms-bitfields not supported for objc"
+#~ msgstr "ms-bitfields n'est pas supporté pour objc"
+
+#~ msgid "Alternate calling convention"
+#~ msgstr "Convention alternative d'appels"
+
+#~ msgid "Use normal calling convention"
+#~ msgstr "Utiliser la convention normale d'appels"
+
+#~ msgid "Align some doubles on dword boundary"
+#~ msgstr "Aligner quelques doubles sur des frontières de mots doubles"
+
+#~ msgid "Align doubles on word boundary"
+#~ msgstr "Aligner les doubles sur des frontières de mots"
+
+#~ msgid "Uninitialized locals in .bss"
+#~ msgstr "Var. locales non initialisées dans .bss"
+
+#~ msgid "Uninitialized locals in .data"
+#~ msgstr "Var. locales non initialisées dans .data"
+
+#~ msgid "Use IEEE math for fp comparisons"
+#~ msgstr "Utiliser les mathématiques IEEE pour les comparaisons FP"
+
+#~ msgid "Do not use IEEE math for fp comparisons"
+#~ msgstr "Ne pas utiliser les mathématiques IEEE pour les comparaisons FP"
+
+#~ msgid "Return values of functions in FPU registers"
+#~ msgstr "Retourner les valeurs de fonctions dans les registres FPU"
+
+#~ msgid "Do not return values of functions in FPU registers"
+#~ msgstr "Ne pas retourner les valeurs de fonctions dans les registres FPU"
+
+#~ msgid "Do not generate sin, cos, sqrt for FPU"
+#~ msgstr "Ne pas générer sin, cos, sqrt pour le FPU"
+
+#~ msgid "Generate sin, cos, sqrt for FPU"
+#~ msgstr "Générer sin, cos, sqrt pour le FPU"
+
+#~ msgid "Omit the frame pointer in leaf functions"
+#~ msgstr "Omettre le pointeur de trame dans les fonctions feuilles"
+
+#~ msgid "Enable stack probing"
+#~ msgstr "Autoriser le sondage de la pile"
+
+#~ msgid "Align destination of the string operations"
+#~ msgstr "Aligner la destination des opérations sur les chaînes"
+
+#~ msgid "Do not align destination of the string operations"
+#~ msgstr "Ne pas aligner la destination des opérations sur les chaînes"
+
+#~ msgid "Inline all known string operations"
+#~ msgstr "Permettre l'enlignage dans toutes les opérations portant sur les chaînes"
+
+#~ msgid "Do not inline all known string operations"
+#~ msgstr "Ne pas permettre l'enlignage dans toutes les opérations portant sur les chaînes"
+
+#~ msgid "Use push instructions to save outgoing arguments"
+#~ msgstr "Utiliser les instructions push pour sauvegardes les arguments sortants"
+
+#~ msgid "Do not use push instructions to save outgoing arguments"
+#~ msgstr "Ne pas utiliser les instructions push pour sauvegardes les arguments sortants"
+
+#~ msgid "Support MMX built-in functions"
+#~ msgstr "Supporte les fonctions internes MMX"
+
+#~ msgid "Do not support MMX built-in functions"
+#~ msgstr "Ne supporte pas les fonctions internes MMX"
+
+#~ msgid "Support 3DNow! built-in functions"
+#~ msgstr "Supporte les fonctions internes 3DNOW!"
+
+#~ msgid "Do not support 3DNow! built-in functions"
+#~ msgstr "Ne supporte pas les fonctions internes 3DNOW!"
+
+#~ msgid "Support MMX and SSE built-in functions and code generation"
+#~ msgstr "Supporte les fonctions internes MMX et SSE et la génération de code"
+
+#~ msgid "Do not support MMX and SSE built-in functions and code generation"
+#~ msgstr "Ne supporte pas les fonctions internes MMX et SSE et la génération de code"
+
+#~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "Supporte les fonctions internes MMX, SSE et SSE2 et la génération de code"
+
+#~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "Ne supporte pas les fonctions internes MMX, SSE et SSE2 et la génération de code"
+
+#~ msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
+#~ msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code"
+
+#~ msgid "Do not support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
+#~ msgstr "Ne supporte pas les fonctions internes MMX, SSE, SSE2 et SSE3 et la génération de code"
+
+#~ msgid "sizeof(long double) is 16"
+#~ msgstr "sizeof(long double) est 16"
+
+#~ msgid "sizeof(long double) is 12"
+#~ msgstr "sizeof(long double) est 12"
+
+#~ msgid "Generate 64bit x86-64 code"
+#~ msgstr "Générer du code 64 bits pour x86-64"
+
+#~ msgid "Generate 32bit i386 code"
+#~ msgstr "Générer du code 32 bits pour i386"
+
+#~ msgid "Use native (MS) bitfield layout"
+#~ msgstr "Utiliser une configuration de champ de bits native (MS)"
+
+#~ msgid "Use gcc default bitfield layout"
+#~ msgstr "Utiliser la configuration par défaut de gcc pour les champs de bits"
+
+#~ msgid "Use red-zone in the x86-64 code"
+#~ msgstr "Utiliser la zone-rouge pour le code x86-64"
+
+#~ msgid "Do not use red-zone in the x86-64 code"
+#~ msgstr "Ne pas utiliser la zone-rouge pour le code x86-64"
+
+#~ msgid "Use direct references against %gs when accessing tls data"
+#~ msgstr "Utiliser la référence directe envers %gs lors de l'accès des données tls"
+
+#~ msgid "Do not use direct references against %gs when accessing tls data"
+#~ msgstr "Ne pas utiliser la référence directe envers %gs lors de l'accès des données tls"
+
+#~ msgid "Schedule code for given CPU"
+#~ msgstr "Ordonnancer le code pour le processeur donné"
+
+#~ msgid "Generate floating point mathematics using given instruction set"
+#~ msgstr "Générer les mathématiques en virgule flottante avec le jeu d'instructions données"
+
+#~ msgid "Generate code for given CPU"
+#~ msgstr "Générer le code pour le processeur donné"
+
+#~ msgid "Number of registers used to pass integer arguments"
+#~ msgstr "Nombre de registres utilisés pour passer les arguments entiers"
+
+#~ msgid "Loop code aligned to this power of 2"
+#~ msgstr "Codes de boucles alignés selon une puissance de 2"
+
+#~ msgid "Jump targets are aligned to this power of 2"
+#~ msgstr "Sauts de cibles alignés selon une puissance de 2"
+
+#~ msgid "Function starts are aligned to this power of 2"
+#~ msgstr "Débuts des fonction alignés selon une puissance de 2"
+
+#~ msgid "Attempt to keep stack aligned to this power of 2"
+#~ msgstr "Tentative de conservation de la pile alignée selon une puissance de 2"
+
+#~ msgid "Branches are this expensive (1-5, arbitrary units)"
+#~ msgstr "Branchements coûteux à ce point (1-4, unités arbitraires)"
+
+#~ msgid "Use given x86-64 code model"
+#~ msgstr "Utiliser le modèle de x86-64 donné"
+
+#~ msgid "Use given assembler dialect"
+#~ msgstr "Utiliser la syntaxe de l'assembleur donné"
+
+#~ msgid "Use given thread-local storage dialect"
+#~ msgstr "Utiliser le dialecte de stockage du thread local fourni"
+
+#~ msgid "Generate ELF output"
+#~ msgstr "Générer la sortie ELF"
+
+#~ msgid "environment variable DJGPP not defined"
+#~ msgstr "variable d'environment DJGPP non définie"
+
+#~ msgid "environment variable DJGPP points to missing file '%s'"
+#~ msgstr "variable d'environment DJGPP pointe sur un fichier manquant « %s »"
+
+#~ msgid "environment variable DJGPP points to corrupt file '%s'"
+#~ msgstr "variable d'environment DJGPP pointe vers un fichier corrompu « %s »"
+
+#~ msgid "Generate code which uses the FPU"
+#~ msgstr "Générer du code qui utilise le FPU"
+
+#~ msgid "Do not generate code which uses the FPU"
+#~ msgstr "Ne pas générer du code qui utilise le FPU"
+
+#~ msgid "sorry, not implemented: #pragma align NAME=SIZE"
+#~ msgstr "désolé, pas implanté: #pragma align NOM=TAILLE"
+
+#~ msgid "malformed #pragma align - ignored"
+#~ msgstr "#pragma align  mal composé - ignoré"
+
+#~ msgid "sorry, not implemented: #pragma noalign NAME"
+#~ msgstr "désolé, pas implanté: #pragma noalign NOM"
+
+#~ msgid "conflicting architectures defined - using C series"
+#~ msgstr "architectures conflictuelles définies - utilise les séries C"
+
+#~ msgid "conflicting architectures defined - using K series"
+#~ msgstr "architectures conflictuelles définies - utilise les séries K"
+
+#~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0"
+#~ msgstr "iC2.0 et iC3.0 sont incompatibles - utilise iC3.0"
+
+#~ msgid "stack limit expression is not supported"
+#~ msgstr "expression limitant la pile n'est pas supportée"
+
+#~ msgid "Generate SA code"
+#~ msgstr "Générer du code SA"
+
+#~ msgid "Generate SB code"
+#~ msgstr "Générer du code SB"
+
+#~ msgid "Generate KA code"
+#~ msgstr "Générer du code KA"
+
+#~ msgid "Generate KB code"
+#~ msgstr "Générer du code KB"
+
+#~ msgid "Generate JA code"
+#~ msgstr "Générer du code JA"
+
+#~ msgid "Generate JD code"
+#~ msgstr "Générer du code JD"
+
+#~ msgid "Generate JF code"
+#~ msgstr "Générer du code JF"
+
+#~ msgid "generate RP code"
+#~ msgstr "Générer du code RP"
+
+#~ msgid "Generate MC code"
+#~ msgstr "Générer du code MC"
+
+#~ msgid "Generate CA code"
+#~ msgstr "Générer du code CA"
+
+#~ msgid "Generate CF code"
+#~ msgstr "Générer du code CF"
+
+#~ msgid "Use software floating point"
+#~ msgstr "Utiliser le traitement par logiciel des nombres flottants"
+
+#~ msgid "Use alternate leaf function entries"
+#~ msgstr "Utiliser les entrées alternatives pour les fonctions de feuilles"
+
+#~ msgid "Do not use alternate leaf function entries"
+#~ msgstr "Ne pas utiliser les entrées alternatives pour les fonctions de feuilles"
+
+#~ msgid "Perform tail call optimization"
+#~ msgstr "Effectuer une optimisation sur mesure des appels"
+
+#~ msgid "Do not perform tail call optimization"
+#~ msgstr "Ne pas effectuer une optimisation sur mesure des appels"
+
+#~ msgid "Use complex addressing modes"
+#~ msgstr "Utiliser les modes d'adressage complexes"
+
+#~ msgid "Do not use complex addressing modes"
+#~ msgstr "Ne pas utiliser les modes d'adressage complexes"
+
+#~ msgid "Align code to 8 byte boundary"
+#~ msgstr "Aligner le code sur des frontières de 8 octets"
+
+#~ msgid "Do not align code to 8 byte boundary"
+#~ msgstr "Ne pas aligner le code sur des frontières de 8 octets"
+
+#~ msgid "Enable compatibility with iC960 v2.0"
+#~ msgstr "Autoriser la compatibilité avec iC960 v2.0"
+
+#~ msgid "Enable compatibility with iC960 v3.0"
+#~ msgstr "Autoriser la compatibilité avec iC960 v3.0"
+
+#~ msgid "Enable compatibility with ic960 assembler"
+#~ msgstr "Autoriser la compatibilité avec l'assembleur iC960"
+
+#~ msgid "Do not permit unaligned accesses"
+#~ msgstr "Ne pas permettre les accès non alignés"
+
+#~ msgid "Permit unaligned accesses"
+#~ msgstr "Permettre les accès non alignés"
+
+#~ msgid "Layout types like Intel's v1.3 gcc"
+#~ msgstr "Utiliser une disposition de type Intel's v1.3 gcc"
+
+#~ msgid "Do not layout types like Intel's v1.3 gcc"
+#~ msgstr "Ne pas utiliser une disposition de type Intel's v1.3 gcc"
+
+#~ msgid "Use 64 bit long doubles"
+#~ msgstr "Utiliser les doubles longs de 64 bits"
+
+#~ msgid "Enable linker relaxation"
+#~ msgstr "Autoriser la relâche par l'éditeur de liens"
+
+#~ msgid "Do not enable linker relaxation"
+#~ msgstr "Ne pas autoriser la relâche par l'éditeur de liens"
+
+#~ msgid "malformed #pragma builtin"
+#~ msgstr "construit #pragma mal composé"
+
+#~ msgid "invalid argument of `%s' attribute"
+#~ msgstr "type d'argument invalide pour l'attribut « %s »"
+
+#~ msgid "%Jan address area attribute cannot be specified for local variables"
+#~ msgstr "%Jun attribut d'adresse de zone de données ne peut pas être spécifié pour des variables locales"
+
+#~ msgid "%Jaddress area of '%s' conflicts with previous declaration"
+#~ msgstr "%Jl'adresse de la zone « %s » entre en conflit avec un déclaration précédente"
+
+#~ msgid "%Jaddress area attribute cannot be specified for functions"
+#~ msgstr "%Jl'attribut de la zone d'adresse ne peut pas être spécifié pour des fonctiones"
+
+#~ msgid "ia64_print_operand: unknown code"
+#~ msgstr "ia64_print_operand: code inconnu"
+
+#~ msgid "value of -mfixed-range must have form REG1-REG2"
+#~ msgstr "valeur de -mfixed-range doit avoir la forme REG1-REG2"
+
+#~ msgid "%s-%s is an empty range"
+#~ msgstr "%s-%s est une étendue vide"
+
+#~ msgid "cannot optimize floating point division for both latency and throughput"
+#~ msgstr "ne peut optimiser la division en point flottant à la fois pour la latence et le débit"
+
+#~ msgid "cannot optimize integer division for both latency and throughput"
+#~ msgstr "ne peut optimiser la division entière à la fois pour la latence et le débit"
+
+#~ msgid "cannot optimize square root for both latency and throughput"
+#~ msgstr "ne peut optimiser la racine carrée à la fois pour la latence et le débit"
+
+#~ msgid "not yet implemented: latency-optimized inline square root"
+#~ msgstr "pas encore implanté: racine carrée enligne optimisée pour la latence"
+
+#~ msgid "bad value (%s) for -mtls-size= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mtls-size"
+
+#~ msgid "bad value (%s) for -tune= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -tune="
+
+#~ msgid "Generate big endian code"
+#~ msgstr "Générer du code de système à octets de poids fort"
+
+#~ msgid "Generate little endian code"
+#~ msgstr "Générer du code de système à octets de poids faible"
+
+#~ msgid "Generate code for GNU as"
+#~ msgstr "Générer du code pour GNU tel que"
+
+#~ msgid "Generate code for Intel as"
+#~ msgstr "Générer du code pour Intel tel que"
+
+#~ msgid "Generate code for GNU ld"
+#~ msgstr "Générer du code pour GNU ld"
+
+#~ msgid "Generate code for Intel ld"
+#~ msgstr "Générer du code pour Intel ld"
+
+#~ msgid "Generate code without GP reg"
+#~ msgstr "Générer du code sans registre GP"
+
+#~ msgid "Emit stop bits before and after volatile extended asms"
+#~ msgstr "Produire de stop bits avant et après les asms étendus"
+
+#~ msgid "Don't emit stop bits before and after volatile extended asms"
+#~ msgstr "Ne pas produire de stop bits avant et après les asms étendus"
+
+#~ msgid "Emit code for Itanium (TM) processor B step"
+#~ msgstr "Produire du code pour le processeur B Itanium (TM)"
+
+#~ msgid "Use in/loc/out register names"
+#~ msgstr "Utilise les noms des registres in/loc/out "
+
+#~ msgid "Disable use of sdata/scommon/sbss"
+#~ msgstr "Interdire l'utilisation de sdata/scommon/sbss"
+
+#~ msgid "Enable use of sdata/scommon/sbss"
+#~ msgstr "Autoriser l'utilisation de sdata/scommon/sbss"
+
+#~ msgid "gp is constant (but save/restore gp on indirect calls)"
+#~ msgstr "gp est une constante (mais save/restore gp fait par appels indirects)"
+
+#~ msgid "Generate self-relocatable code"
+#~ msgstr "Générer du code auto-relocalisable"
+
+#~ msgid "Generate inline floating point division, optimize for latency"
+#~ msgstr "Générer la division enligne en point flottant, optimiser pour la latence"
+
+#~ msgid "Generate inline floating point division, optimize for throughput"
+#~ msgstr "Générer la division en point flottant enligne, optimiser pour le débit"
+
+#~ msgid "Generate inline integer division, optimize for latency"
+#~ msgstr "Générer la division entière enligne, optimiser pour la latence"
+
+#~ msgid "Generate inline integer division, optimize for throughput"
+#~ msgstr "Générer la divisions entière enligne, optimiser pour le débit"
+
+#~ msgid "Generate inline square root, optimize for latency"
+#~ msgstr "Générer la racine carrée enligne, optimiser pour la latence"
+
+#~ msgid "Generate inline square root, optimize for throughput"
+#~ msgstr "Générer la racine carrée enligne, optimiser pour le débit"
+
+#~ msgid "Enable Dwarf 2 line debug info via GNU as"
+#~ msgstr "Autoriser les infos de lignes de mise au point Dwarf 2 via GNU tel que"
+
+#~ msgid "Disable Dwarf 2 line debug info via GNU as"
+#~ msgstr "Interdire les infos de lignes de mise au point Dwarf 2 via GNU tel que"
+
+#~ msgid "Enable earlier placing stop bits for better scheduling"
+#~ msgstr "Autoriser l'insertion antérieure de stop bits pour un meilleur ordonnancement"
+
+#~ msgid "Disable earlier placing stop bits"
+#~ msgstr "Interdire l'installation antérieure de bits d'arrêt"
+
+#~ msgid "Specify range of registers to make fixed"
+#~ msgstr "spécifier l'étendue des registres pour la rendre fixe"
+
+#~ msgid "bad operand"
+#~ msgstr "opérande erronée"
+
+#~ msgid "bad value (%s) for -mcpu= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mcpu="
+
+#~ msgid "The compiler does not support -march=%s."
+#~ msgstr "Le compilateur ne supporte pas -march=%s."
+
+#~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero."
+#~ msgstr "gp_offset (%ld) ou end_offset (%ld) est plus petit que zéro."
+
+#~ msgid "argument `%d' is not a constant"
+#~ msgstr "l'argument de « %d » n'est pas une constante"
+
+#~ msgid "PRINT_OPERAND_ADDRESS, null pointer"
+#~ msgstr "PRINT_OPERAND_ADDRESS, pointeur nul"
+
+#~ msgid "PRINT_OPERAND: Unknown punctuation '%c'"
+#~ msgstr "PRINT_OPERAND: ponctuation « %c » inconnue"
+
+#~ msgid "PRINT_OPERAND null pointer"
+#~ msgstr "PRINT_OPERAND pointeur nul"
+
+#~ msgid "invalid %%P operand"
+#~ msgstr "opérande %%P invalide"
+
+#~ msgid "invalid %%p value"
+#~ msgstr "valeur %%p invalide"
+
+#~ msgid "invalid use of %%d, %%x, or %%X"
+#~ msgstr "utilisation invalide de %%d, %%x, ou %%X"
+
+#~ msgid "No default crt0.o"
+#~ msgstr "Aucun défaut pour crt0.o"
+
+#~ msgid "Use GP relative sdata/sbss sections"
+#~ msgstr "Utiliser GP en mode relatif aux sections sdata/sbss"
+
+#~ msgid "Don't use GP relative sdata/sbss sections"
+#~ msgstr "Ne pas utiliser GP en mode relatif aux sections sdata/sbss"
+
+#~ msgid "Use ROM instead of RAM"
+#~ msgstr "Utiliser le ROM au lieu de la RAM"
+
+#~ msgid "Don't use ROM instead of RAM"
+#~ msgstr "Ne pas utiliser le ROM au lieu de la RAM"
+
+#~ msgid "Put uninitialized constants in ROM (needs -membedded-data)"
+#~ msgstr "Placer les constantes non itialisées dans le ROM (a besoin de -membedded-data)"
+
+#~ msgid "Don't put uninitialized constants in ROM"
+#~ msgstr "Ne pas placer les constantes non itialisées dans le ROM (a besoin de -membedded-data)"
+
+#~ msgid "Specify CPU for scheduling purposes"
+#~ msgstr "Spécifier le processeur pour les besoins de l'ordonnancement"
+
+#~ msgid "Specify CPU for code generation purposes"
+#~ msgstr "Spécifier le processeur pour les besoins de la génération de code"
+
+#~ msgid "bad value (%s) for -mmodel switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mmodel"
+
+#~ msgid "bad value (%s) for -msdata switch"
+#~ msgstr "valeur erronée (%s) pour l'option -msdata"
+
+#~ msgid "bad value (%s) for -flush-trap=n (0=<n<=15)"
+#~ msgstr "valeur erronée (%s) pour l'option -flush-trap=n (0=<n<=15)"
+
+#~ msgid "invalid operand to %%s code"
+#~ msgstr "opérande invalide pour le code %%s"
+
+#~ msgid "invalid operand to %%p code"
+#~ msgstr "opérande invalide pour le code %%p"
+
+#~ msgid "bad insn for 'A'"
+#~ msgstr "insn erroné pour « A »"
+
+#~ msgid "invalid operand to %%T/%%B code"
+#~ msgstr "opérande invalide pour le code %%T/%%B"
+
+#~ msgid "invalid operand to %%N code"
+#~ msgstr "opérande invalide pour le code %%N"
+
+#~ msgid "pre-increment address is not a register"
+#~ msgstr "pré-incrément d'adresse n'est pas un registre"
+
+#~ msgid "pre-decrement address is not a register"
+#~ msgstr "pré-décrément d'adresse n'est pas un registre"
+
+#~ msgid "post-increment address is not a register"
+#~ msgstr "post-incrément d'adresse n'est pas un registre"
+
+#~ msgid "bad address"
+#~ msgstr "adresse erronée"
+
+#~ msgid "lo_sum not of register"
+#~ msgstr "lo_sum n'est pas un registre"
+
+#~ msgid "Display compile time statistics"
+#~ msgstr "Afficher les statistiques de temps de compilation"
+
+#~ msgid "Align all loops to 32 byte boundary"
+#~ msgstr "Aligner toutes les boucles sur des frontières de 32 octets"
+
+#~ msgid "Only issue one instruction per cycle"
+#~ msgstr "Émettre seulement une instruction par cycle"
+
+#~ msgid "Prefer branches over conditional execution"
+#~ msgstr "Privilégier les branchements au lieu d'une exécution conditionnelle"
+
+#~ msgid "Code size: small, medium or large"
+#~ msgstr "Taille du code: small, medium ou large"
+
+#~ msgid "Small data area: none, sdata, use"
+#~ msgstr "Petite zone de données: none, sdata, use"
+
+#~ msgid "Don't call any cache flush functions"
+#~ msgstr "Ne pas faire d'appel de fonction de vidange de la cache"
+
+#~ msgid "Specify cache flush function"
+#~ msgstr "Spécifier la fonction de vidange de la cache"
+
+#~ msgid "Don't call any cache flush trap"
+#~ msgstr "Ne pas faire d'appel de fonction de déroutement de vidange de la cache"
+
+#~ msgid "Specify cache flush trap number"
+#~ msgstr "Spécifier la fonction de déroutement de vidange de la cache"
+
+#~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
+#~ msgstr "-f%s ignoré pour 68HC11/68HC12 (non supporté)"
+
+#~ msgid "`trap' and `far' attributes are not compatible, ignoring `far'"
+#~ msgstr "attributs « trap » et « far » ne sont pas compatibles, « far » ignoré "
+
+#~ msgid "`trap' attribute is already used"
+#~ msgstr "attribut « trap » est déjà utilisé"
+
+#~ msgid "move insn not handled"
+#~ msgstr "déplacement insn non traité"
+
+#~ msgid "invalid register in the move instruction"
+#~ msgstr "registre invalide dans l'instruction de déplacement"
+
+#~ msgid "invalid operand in the instruction"
+#~ msgstr "opérande invalide dans l'instruction"
+
+#~ msgid "invalid register in the instruction"
+#~ msgstr "registre invalide dans l'instruction"
+
+#~ msgid "operand 1 must be a hard register"
+#~ msgstr "l'opérande 1 doit être un registre matériel"
+
+#~ msgid "invalid rotate insn"
+#~ msgstr "rotation invalide insn"
+
+#~ msgid "registers IX, IY and Z used in the same INSN"
+#~ msgstr "registres IX, IY et Z utilisés dans le même INSN"
+
+#~ msgid "cannot do z-register replacement"
+#~ msgstr "ne peut effectuer le remplacement d'un registre z"
+
+#~ msgid "invalid Z register replacement for insn"
+#~ msgstr "remplacement invalide de registre Z pour insn"
+
+#~ msgid "Compile with 16-bit integer mode"
+#~ msgstr "Compiler en mode entier de 16 bits"
+
+#~ msgid "Compile with 32-bit integer mode"
+#~ msgstr "Compiler en mode entier de 32 bits"
+
+#~ msgid "Auto pre/post decrement increment allowed"
+#~ msgstr "Auto pré/post décrementation incrémentation permise"
+
+#~ msgid "Auto pre/post decrement increment not allowed"
+#~ msgstr "Auto pré/post décrementation incrémentation non permise"
+
+#~ msgid "Min/max instructions allowed"
+#~ msgstr "instructions min/max permises"
+
+#~ msgid "Min/max instructions not allowed"
+#~ msgstr "instructions min/max ne sont pas permises"
+
+#~ msgid "Use call and rtc for function calls and returns"
+#~ msgstr "Utiliser call et rtc pour les appels fonction et les retours"
+
+#~ msgid "Use jsr and rts for function calls and returns"
+#~ msgstr "Utiliser jsr et rtc pour les appels de fonction et les retours"
+
+#~ msgid "Do not use direct addressing mode for soft registers"
+#~ msgstr "Ne pas utiliser les modes directs d'adressage pour des registres logiciels"
+
+#~ msgid "Use direct addressing mode for soft registers"
+#~ msgstr "Ne pas utiliser les modes directs d'adressage pour les registres logiciels"
+
+#~ msgid "Compile for a 68HC11"
+#~ msgstr "Compiler pour un 68HC11"
+
+#~ msgid "Compile for a 68HC12"
+#~ msgstr "Compiler pour un 68HC12"
+
+#~ msgid "Compile for a 68HCS12"
+#~ msgstr "Compiler pour un 68HCS12"
+
+#~ msgid "Specify the register allocation order"
+#~ msgstr "Spécifier l'ordre d'allocation des registres"
+
+#~ msgid "Indicate the number of soft registers available"
+#~ msgstr "Indiquer le nombre de registres logiciels disponibles"
+
+#~ msgid "-malign-loops=%d is not between 1 and %d"
+#~ msgstr "-malign-loops=%d n'est pas entre 1 et %d"
+
+#~ msgid "-mshared-library-id= specified without -mid-shared-library"
+#~ msgstr "-mshared-library-id= spécifié sans -mid-shared-library"
+
+#~ msgid "-mshared-library-id=%d is not between 0 and %d"
+#~ msgstr "-mshared-library-id=%d n'est pas entre 0 et %d"
+
+#~ msgid "cannot specify both -msep-data and -mid-shared-library"
+#~ msgstr "ne peut spécifier à la fois -msep-data et -mid-shared-library"
+
+#~ msgid "-malign-jumps=%d is not between 1 and %d"
+#~ msgstr "-malign-jumps=%d n'est pas entre 1 et %d"
+
+#~ msgid "-malign-functions=%d is not between 1 and %d"
+#~ msgstr "-malign-functions=%d n'est pas entre 1 et %d"
+
+#~ msgid "-fPIC is not currently supported on the 68000 or 68010\n"
+#~ msgstr "-fPIC n'est pas couramment supporté pour le 68000 ou 68010\n"
+
+#~ msgid "Generate code for a 68020"
+#~ msgstr "Générer le code pour un 68020"
+
+#~ msgid "Generate code for a 68000"
+#~ msgstr "Générer le code pour un 68000"
+
+#~ msgid "Use the bit-field instructions"
+#~ msgstr "Utiliser les instructions de champs de bits"
+
+#~ msgid "Do not use the bit-field instructions"
+#~ msgstr "Ne pas utiliser les instructions de champs de bits"
+
+#~ msgid "Consider type `int' to be 16 bits wide"
+#~ msgstr "Considérer le type « int » comme ayant une largeur de 16 bits"
+
+#~ msgid "Consider type `int' to be 32 bits wide"
+#~ msgstr "Considérer le type « int » comme ayant une largeur de 32 bits"
+
+#~ msgid "Generate code with library calls for floating point"
+#~ msgstr "Générer du code avec les appels de bibliothèques pour la virgule flottante"
+
+#~ msgid "Generate code for a 68040, without any new instructions"
+#~ msgstr "Générer du code pour un 68040 sans les nouvelles instructions"
+
+#~ msgid "Generate code for a 68060, without any new instructions"
+#~ msgstr "Générer du code pour un 68060 sans les nouvelles instructions"
+
+#~ msgid "Generate code for a 68030"
+#~ msgstr "Générer du code pour un 68030"
+
+#~ msgid "Generate code for a 68040"
+#~ msgstr "Générer du code pour un 68040"
+
+#~ msgid "Generate code for a 68060"
+#~ msgstr "Générer du code pour un 68060"
+
+#~ msgid "Generate code for a 520X"
+#~ msgstr "Générer du code pour un 520X"
+
+#~ msgid "Generate code for a 5206e"
+#~ msgstr "Générer du code pour un 5206e"
+
+#~ msgid "Generate code for a 528x"
+#~ msgstr "Générer du code pour un 528x"
+
+#~ msgid "Generate code for a 5307"
+#~ msgstr "Générer du code pour un 5307"
+
+#~ msgid "Generate code for a 5407"
+#~ msgstr "Générer du code pour un 5407"
+
+#~ msgid "Generate code for a 68851"
+#~ msgstr "Générer le code pour un 68851"
+
+#~ msgid "Do no generate code for a 68851"
+#~ msgstr "Ne pas générer de code pour un 68851"
+
+#~ msgid "Generate code for a 68302"
+#~ msgstr "Générer du code pour un 68302"
+
+#~ msgid "Generate code for a 68332"
+#~ msgstr "Générer du code pour un 68332"
+
+#~ msgid "Generate code for a cpu32"
+#~ msgstr "Générer du code pour un cpu32"
+
+#~ msgid "Align variables on a 32-bit boundary"
+#~ msgstr "Aligner les variables sur des frontières de 32 bits"
+
+#~ msgid "Align variables on a 16-bit boundary"
+#~ msgstr "Aligner les variables sur des frontières de 16 bits"
+
+#~ msgid "Enable separate data segment"
+#~ msgstr "Autoriser des segments de données séparés"
+
+#~ msgid "Disable separate data segment"
+#~ msgstr "Désactiver les segments séparés de données"
+
+#~ msgid "Enable ID based shared library"
+#~ msgstr "Autoriser les identificateurs de librairies partagées de base"
+
+#~ msgid "Disable ID based shared library"
+#~ msgstr "Interdire les identificateurs de librairies partagées de base"
+
+#~ msgid "Generate pc-relative code"
+#~ msgstr "Générer du code relatif au compteur de programme (PC)"
+
+#~ msgid "Do not use unaligned memory references"
+#~ msgstr "Ne pas utiliser des références mémoire non alignées"
+
+#~ msgid "Use unaligned memory references"
+#~ msgstr "Utiliser des références mémoire non alignées"
+
+#~ msgid "Use different calling convention using 'rtd'"
+#~ msgstr "Utiliser une convention différente d'appel en utilisant « rtd »"
+
+#~ msgid "ID of shared library to build"
+#~ msgstr "Identification de librairie partagé à construire"
+
+#~ msgid "invalid option `-mstack-increment=%s'"
+#~ msgstr "opton invalide « -mstack-increment=%s »"
+
+#~ msgid "Inline constants if it can be done in 2 insns or less"
+#~ msgstr "Constante enligne si elle peut être dans 2 insn ou moins"
+
+#~ msgid "Inline constants if it only takes 1 instruction"
+#~ msgstr "Constante enligne si elle prend seulement 1 instruction"
+
+#~ msgid "Set maximum alignment to 4"
+#~ msgstr "Initialiser l'alignement maximal à 4"
+
+#~ msgid "Set maximum alignment to 8"
+#~ msgstr "Initialiser l'alignement maximal à 8"
+
+#~ msgid "Do not use the divide instruction"
+#~ msgstr "Ne pas utiliser l'instruction de division"
+
+#~ msgid "Do not arbitrary sized immediates in bit operations"
+#~ msgstr "Ne pas calculer la taille des immédiats dans les opérations sur les bits"
+
+#~ msgid "Always treat bit-field as int-sized"
+#~ msgstr "Toujours traiter les champs de bits comme si la taille entière"
+
+#~ msgid "Force functions to be aligned to a 4 byte boundary"
+#~ msgstr "Forcer les fonctions à être alignés sur des frontières de 4 octets"
+
+#~ msgid "Force functions to be aligned to a 2 byte boundary"
+#~ msgstr "Forcer les fonctions à être alignés sur des frontières de 2 octets"
+
+#~ msgid "Emit call graph information"
+#~ msgstr "Produire les informations du graphe d'appel"
+
+#~ msgid "Prefer word accesses over byte accesses"
+#~ msgstr "Préférer l'accès à des mots plutôt qu'un accès à des octets"
+
+#~ msgid "Generate code for the M*Core M340"
+#~ msgstr "Générer du code pour M*Core M340"
+
+#~ msgid "Maximum amount for a single stack increment operation"
+#~ msgstr "Montant maximal pour une opération d'incrémentation simple de la pile"
+
+#~ msgid "bad test"
+#~ msgstr "test erroné"
+
+#~ msgid "bad value (%s) for -mabi= switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mabi"
+
+#~ msgid "-mips%s conflicts with the other architecture options, which specify a MIPS%d processor"
+#~ msgstr "-mips%s en conflit avec d'autres options d'architecture, lesquelles spécifie un processeur MIPS%d"
+
+#~ msgid "-march=%s is not compatible with the selected ABI"
+#~ msgstr "-march=%s n'est pas compatible avec l'ABI sélectionné"
+
+#~ msgid "-mgp64 used with a 32-bit processor"
+#~ msgstr "-mgp64 utilisé avec un processeur de 32 bits"
+
+#~ msgid "-mgp32 used with a 64-bit ABI"
+#~ msgstr "-mgp32 utilisé avec un ABI de 64 bits"
+
+#~ msgid "-mgp64 used with a 32-bit ABI"
+#~ msgstr "-mgp64 utilisé avec un ABI de 32 bits"
+
+#~ msgid "unsupported combination: %s"
+#~ msgstr "combinaison non supportée: %s"
+
+#~ msgid "-g is only supported using GNU as,"
+#~ msgstr "L'option -g est seulement supportée lorsque GNU est utilisé tel,"
+
+#~ msgid "-g is only supported using GNU as with -mabi=32,"
+#~ msgstr "L'option -g est seulement supportée lorsque GNU est utilisé avec -mabi=32,"
+
+#~ msgid "-g option disabled"
+#~ msgstr "option -g désactivée"
+
+#~ msgid "generation of Branch Likely instructions enabled, but not supported by architecture"
+#~ msgstr "activer la génération d'instructions identiques à des branchements mais non supportés par l'architecture"
+
+#~ msgid "-G is incompatible with PIC code which is the default"
+#~ msgstr "-G est incompatible avec le code PIC par défaut"
+
+#~ msgid "-membedded-pic and -mabicalls are incompatible"
+#~ msgstr "-membedded-pic et -mabicalls sont incompatibles"
+
+#~ msgid "-G and -membedded-pic are incompatible"
+#~ msgstr "-G et -membedded-pic sont incompatibles"
+
+#~ msgid "non-PIC n64 with explicit relocations"
+#~ msgstr "non PIC n64 avec une relocalisation explicite"
+
+#~ msgid "mips_debugger_offset called with non stack/frame/arg pointer"
+#~ msgstr "mips_debugger_offset appellé avec un pointeur non stack/frame/arg"
+
+#~ msgid "internal error: %%) found without a %%( in assembler pattern"
+#~ msgstr "erreur interne: %%) trouvé sans %%( dans le canevas d'assemblage"
+
+#~ msgid "internal error: %%] found without a %%[ in assembler pattern"
+#~ msgstr "erreur interne: %%] trouvé sans %%[ dans le canevas d'assemblage"
+
+#~ msgid "internal error: %%> found without a %%< in assembler pattern"
+#~ msgstr "erreur interne: %%> trouvé sans %%< dans le canevas d'assemblage"
+
+#~ msgid "internal error: %%} found without a %%{ in assembler pattern"
+#~ msgstr "erreur interne: %%} trouvé sans %%{ dans le canevas d'assemblage"
+
+#~ msgid "PRINT_OPERAND: unknown punctuation '%c'"
+#~ msgstr "PRINT_OPERAND: ponctuation « %c » inconnue"
+
+#~ msgid "PRINT_OPERAND, invalid insn for %%C"
+#~ msgstr "PRINT_OPERAND insn invalide pour %%C"
+
+#~ msgid "PRINT_OPERAND, invalid insn for %%N"
+#~ msgstr "PRINT_OPERAND insn invalide pour %%N"
+
+#~ msgid "PRINT_OPERAND, invalid insn for %%F"
+#~ msgstr "PRINT_OPERAND insn invalide pour %%F"
+
+#~ msgid "PRINT_OPERAND, invalid insn for %%W"
+#~ msgstr "PRINT_OPERAND insn invalide pour %%W"
+
+#~ msgid "PRINT_OPERAND, invalid operand for relocation"
+#~ msgstr "PRINT_OPERAND, opérande invalide pour la relocalisation"
+
+#~ msgid "can not handle inconsistent calls to `%s'"
+#~ msgstr "ne peut traiter des appels inconsistents à « %s »"
+
+#~ msgid "the cpu name must be lower case"
+#~ msgstr "le nom du cpu doit être en minuscules"
+
+#~ msgid "bad value (%s) for %s"
+#~ msgstr "valeur (%s) erronée pour %s"
+
+#~ msgid "can't rewind temp file: %m"
+#~ msgstr "ne peut rembobiner le fichier temporaire: %m"
+
+#~ msgid "can't write to output file: %m"
+#~ msgstr "ne peut écrire dans le fichier de sortie: %m"
+
+#~ msgid "can't read from temp file: %m"
+#~ msgstr "ne peut lire du fichier temporaire: %m"
+
+#~ msgid "can't close temp file: %m"
+#~ msgstr "ne peut fermer le fichier temporaire: %m"
+
+#~ msgid "Same as -mabi=32, just trickier"
+#~ msgstr "Identique à -mabi=32, juste plus complexe"
+
+#~ msgid "Use 64-bit int type"
+#~ msgstr "Utiliser le type int de 64 bits"
+
+#~ msgid "Use 64-bit long type"
+#~ msgstr "Utiliser le type long de 64 bits"
+
+#~ msgid "Use 32-bit long type"
+#~ msgstr "Utiliser le type long de 32 bits"
+
+#~ msgid "Optimize lui/addiu address loads"
+#~ msgstr "Optimiser les chargements d'adresses lui/addiu"
+
+#~ msgid "Don't optimize lui/addiu address loads"
+#~ msgstr "Ne pas optimiser les chargements d'adresses lui/addiu"
+
+#~ msgid "Use MIPS as"
+#~ msgstr "Utiliser MIPS tel que"
+
+#~ msgid "Use GNU as"
+#~ msgstr "Utiliser GNU tel que"
+
+#~ msgid "Use symbolic register names"
+#~ msgstr "Utiliser les noms de registres symboliques"
+
+#~ msgid "Don't use symbolic register names"
+#~ msgstr "Ne pas utiliser les noms de registres symboliques"
+
+#~ msgid "Use GP relative sdata/sbss sections (now ignored)"
+#~ msgstr "Utiliser GP en mode relatif aux sections sdata/sbss (maintenant ignoré)"
+
+#~ msgid "Don't use GP relative sdata/sbss sections (now ignored)"
+#~ msgstr "Ne pas utiliser GP en mode relatif aux sections sdata/sbss (maintenant ignoré)"
+
+#~ msgid "Output compiler statistics (now ignored)"
+#~ msgstr "Afficher les statistiques de compilation (maintenant ignoré)"
+
+#~ msgid "Don't output compiler statistics"
+#~ msgstr "Ne pas afficher les statistiques de compilation"
+
+#~ msgid "Don't optimize block moves"
+#~ msgstr "Ne pas optimiser les déplacements de blocs"
+
+#~ msgid "Optimize block moves"
+#~ msgstr "Optimiser les déplacements de blocs"
+
+#~ msgid "Use mips-tfile asm postpass"
+#~ msgstr "Utiliser la post-passe de type mips-tfile de l'assembleur"
+
+#~ msgid "Don't use mips-tfile asm postpass"
+#~ msgstr "Ne pas utiliser la post-passe de type mips-tfile de l'assembleur"
+
+#~ msgid "Use hardware floating point"
+#~ msgstr "Utiliser l'unité matérielle en virgule flottante"
+
+#~ msgid "Use 64-bit FP registers"
+#~ msgstr "Utiliser les registres FP de 64 bits"
+
+#~ msgid "Use 32-bit FP registers"
+#~ msgstr "Utiliser les registres FP de 32 bits"
+
+#~ msgid "Use 64-bit general registers"
+#~ msgstr "Utiliser les registres généraux de 64 bits"
+
+#~ msgid "Use 32-bit general registers"
+#~ msgstr "Utiliser les registres généraux de 32 bits"
+
+#~ msgid "Use Irix PIC"
+#~ msgstr "Utiliser le code PIC Irix"
+
+#~ msgid "Don't use Irix PIC"
+#~ msgstr "Ne pas utiliser le code PIC Irix"
+
+#~ msgid "Use indirect calls"
+#~ msgstr "Utiliser les appels indirects"
+
+#~ msgid "Don't use indirect calls"
+#~ msgstr "Ne pas utiliser les appels indirects"
+
+#~ msgid "Use embedded PIC"
+#~ msgstr "Utiliser le code PIC enchâssé"
+
+#~ msgid "Don't use embedded PIC"
+#~ msgstr "Ne pas utiliser le code PIC enchâssé"
+
+#~ msgid "Use big-endian byte order"
+#~ msgstr "Utiliser l'ordre des octets pour système à octets de poids fort"
+
+#~ msgid "Use little-endian byte order"
+#~ msgstr "Utiliser l'ordre des octets pour système à octets de poids faible"
+
+#~ msgid "Use single (32-bit) FP only"
+#~ msgstr "Utiliser un simple FP (32 bits) seulement"
+
+#~ msgid "Don't use single (32-bit) FP only"
+#~ msgstr "Ne pas utiliser un simple FP (32 bits) seulement"
+
+#~ msgid "Use multiply accumulate"
+#~ msgstr "Utiliser les multiplications par accumulations"
+
+#~ msgid "Don't use multiply accumulate"
+#~ msgstr "Ne pas utiliser les multiplications par accumulations"
+
+#~ msgid "Don't generate fused multiply/add instructions"
+#~ msgstr "Ne pas générer des instructions fusionnés de multiplication/addition"
+
+#~ msgid "Generate fused multiply/add instructions"
+#~ msgstr "Générer des instructions fusionnés de multiplication/addition"
+
+#~ msgid "Work around early 4300 hardware bug"
+#~ msgstr "Contourner le bug matériel des premiers 4300"
+
+#~ msgid "Don't work around early 4300 hardware bug"
+#~ msgstr "Ne pas contourner le bug matériel des premiers 4300"
+
+#~ msgid "Work around errata for early SB-1 revision 2 cores"
+#~ msgstr "Contourner l'erreur pour la révision 2 du noyau des versions initiales SB-1"
+
+#~ msgid "Don't work around errata for early SB-1 revision 2 cores"
+#~ msgstr "Ne pas contourner l'erreur pour la révision 2 du noyau des versions initiales SB-1"
+
+#~ msgid "Trap on integer divide by zero"
+#~ msgstr "Intercepter les divisions par zéros sur des entiers"
+
+#~ msgid "Don't trap on integer divide by zero"
+#~ msgstr "Ne pas intercepter les divisions par zéros sur des entiers"
+
+#~ msgid "Use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Utiliser des instructions se comportant comme des branchements, écrasant le défaut de l'architecture"
+
+#~ msgid "Don't use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Ne pas utiliser des instructions se comportant comme des branchements, écrasant le défaut de l'architecture"
+
+#~ msgid "Use NewABI-style %reloc() assembly operators"
+#~ msgstr "Utiliser NewABI-style %reloc() les opérateurs d'assemblage"
+
+#~ msgid "Use assembler macros instead of relocation operators"
+#~ msgstr "Utiliser les macros assembleurs au lieu des opérateurs de relocalisation"
+
+#~ msgid "Generate mips16 code"
+#~ msgstr "Générer du code mips16"
+
+#~ msgid "Generate normal-mode code"
+#~ msgstr "Générer du code en mode normal"
+
+#~ msgid "Lift restrictions on GOT size"
+#~ msgstr "Enlever les restrictions sur la taille GOT"
+
+#~ msgid "Do not lift restrictions on GOT size"
+#~ msgstr "Ne pas enlever les restrictions sur la taille GOT"
+
+#~ msgid "Specify an ABI"
+#~ msgstr "Spécifier une ABI"
+
+#~ msgid "Specify a Standard MIPS ISA"
+#~ msgstr "Spécifier le standard MIPS ISA"
+
+#~ msgid "mips16 function profiling"
+#~ msgstr "profilage de fonction mips16"
+
+#~ msgid "-f%s not supported: ignored"
+#~ msgstr "-f%s n'est pas supporté: ignoré"
+
+#~ msgid "too large function value type, needs %d registers, have only %d registers for this"
+#~ msgstr "valeur de type de fonction trop grande, a besoin de %d registres mais seuls %d disponibles"
+
+#~ msgid "function_profiler support for MMIX"
+#~ msgstr "function_profiler supporté pour MMIX"
+
+#~ msgid "MMIX Internal: Last named vararg would not fit in a register"
+#~ msgstr "MMIX interne: dernier vararg nommé ne pourra être inséré dans un registre"
+
+#~ msgid "MMIX Internal: Expected a CONST_INT, not this"
+#~ msgstr "MMIX interne: attendait CONST_INT, pas ceci"
+
+#~ msgid "MMIX Internal: Bad register: %d"
+#~ msgstr "MMIX interne: registre erroné: %d"
+
+#~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+#~ msgstr "MMIX interne: valeur erronée pour « m », pas un CONST_INT"
+
+#~ msgid "MMIX Internal: Expected a register, not this"
+#~ msgstr "MMIX interne: attendait un registre, pas ceci"
+
+#~ msgid "MMIX Internal: Expected a constant, not this"
+#~ msgstr "MMIX interne: attendait une constante, pas ceci"
+
+#~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand"
+#~ msgstr "MMIX interne: cas « %c » manquant dans mmix_print_operand"
+
+#~ msgid "MMIX Internal: Cannot decode this operand"
+#~ msgstr "MMIX interne: ne peut décoder cette opérande"
+
+#~ msgid "MMIX Internal: This is not a recognized address"
+#~ msgstr "MMIX interne: ce n'est pas une adresse reconnue"
+
+#~ msgid "stack frame not a multiple of 8 bytes: %d"
+#~ msgstr "trame de pile n'est pas un multiple de 8 octets: %d"
+
+#~ msgid "stack frame not a multiple of octabyte: %d"
+#~ msgstr "trame de pile n'est pas un multiple de 8 octets: %d"
+
+#~ msgid "MMIX Internal: %s is not a shiftable int"
+#~ msgstr "MMIX interne: %s n'est pas un entier pouvant décalé"
+
+#~ msgid "MMIX Internal: Trying to output invalidly reversed condition:"
+#~ msgstr "MMIX interne: tentative de produire incorrectement une condition renversée:"
+
+#~ msgid "MMIX Internal: What's the CC of this?"
+#~ msgstr "MMIX interne: quel sorte de CC est-ce?"
+
+#~ msgid "MMIX Internal: What is the CC of this?"
+#~ msgstr "MMIX interne: quel sorte de CC est-ce?"
+
+#~ msgid "MMIX Internal: This is not a constant:"
+#~ msgstr "interne MMIX: ce n'est pas une constante:"
+
+#~ msgid "Set start-address of the program"
+#~ msgstr "Adress de départ du programme fixée"
+
+#~ msgid "Set start-address of data"
+#~ msgstr "Adresse de départ des données fixée"
+
+#~ msgid "For intrinsics library: pass all parameters in registers"
+#~ msgstr "Pour les bibliothèques intrinsèques : passer tous les paramètres par registre"
+
+#~ msgid "Use register stack for parameters and return value"
+#~ msgstr "Utiliser le registre de la pile pour les paramètres et la valeur retournée"
+
+#~ msgid "Use call-clobbered registers for parameters and return value"
+#~ msgstr "utiliser les registres d'appels maltraités pour les paramètres et les valeurs retournées"
+
+#~ msgid "Use epsilon-respecting floating point compare instructions"
+#~ msgstr "Utiliser un epsilon respectant les instructions de comparaison en virgule flottante"
+
+#~ msgid "Use zero-extending memory loads, not sign-extending ones"
+#~ msgstr "utiliser des chargements mémoire avec zéro extension, pas celles avec signe d'extension"
+
+#~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
+#~ msgstr "générer des résultats de division avec reste ayant le même signe que le diviseur (pas le dividende)"
+
+#~ msgid "Prepend global symbols with \":\" (for use with PREFIX)"
+#~ msgstr "pré ajouter les symboles globaux avec «:» (pour l'utilisation avec PREFIX)"
+
+#~ msgid "Do not provide a default start-address 0x100 of the program"
+#~ msgstr "Ne pas fournir d'adresse de départ par défaut 0x100 du programme"
+
+#~ msgid "Link to emit program in ELF format (rather than mmo)"
+#~ msgstr "Faire l'édition de liens pour produire le programme en format ELF (au lieu de mmo)"
+
+#~ msgid "Use P-mnemonics for branches statically predicted as taken"
+#~ msgstr "Utiliser les mnémoniques P pour les branchements statiquement prévus à être pris"
+
+#~ msgid "Don't use P-mnemonics for branches"
+#~ msgstr "Ne pas utiliser les mnémoniques P pour les branchements"
+
+#~ msgid "Use addresses that allocate global registers"
+#~ msgstr "Utiliser les adresses qui allouent des registres globaux"
+
+#~ msgid "Do not use addresses that allocate global registers"
+#~ msgstr "Ne pas utiliser des adresses qui allouent des registres globaux"
+
+#~ msgid "Generate a single exit point for each function"
+#~ msgstr "Générer un point de sortie simple pour chaque fonction"
+
+#~ msgid "Do not generate a single exit point for each function"
+#~ msgstr "Ne pas générer un point de sortie simple pour chaque fonction"
+
+#~ msgid "Target the AM33 processor"
+#~ msgstr "Cible le processeur AM33"
+
+#~ msgid "Target the AM33/2.0 processor"
+#~ msgstr "Cibler le processeur AM33/2.0"
+
+#~ msgid "Enable linker relaxations"
+#~ msgstr "Autoriser la relâche de l'éditeur de liens"
+
+#~ msgid "Work around hardware multiply bug"
+#~ msgstr "Contourner le bug matériel de la multiplication"
+
+#~ msgid "Do not work around hardware multiply bug"
+#~ msgstr "Ne pas contourner le bug matériel de la multiplication"
+
+#~ msgid "Don't use hardware fp"
+#~ msgstr "Ne pas utiliser le FP matériel"
+
+#~ msgid "Alternative calling convention"
+#~ msgstr "Convention alternative d'appels"
+
+#~ msgid "Pass some arguments in registers"
+#~ msgstr "Passer quelques arguments par les registres"
+
+#~ msgid "Pass all arguments on stack"
+#~ msgstr "PAsser tous les arguments par la pile"
+
+#~ msgid "Optimize for 32532 cpu"
+#~ msgstr "Optimiser pour le processeur 32532"
+
+#~ msgid "Optimize for 32332 cpu"
+#~ msgstr "Optimiser pour le processeur 32332"
+
+#~ msgid "Optimize for 32032"
+#~ msgstr "Optimiser pour le 32022"
+
+#~ msgid "Register sb is zero. Use for absolute addressing"
+#~ msgstr "Registre sb est zéro. Utilisé pour l'adressage absolu"
+
+#~ msgid "Do not use register sb"
+#~ msgstr "Ne pas utiliser le registre sb"
+
+#~ msgid "Use bit-field instructions"
+#~ msgstr "Utiliser les instructions de champs de bits"
+
+#~ msgid "Do not use bit-field instructions"
+#~ msgstr "Ne pas utiliser les instructions de champs de bits"
+
+#~ msgid "Generate code for high memory"
+#~ msgstr "Générer du code pour la partie haute de la mémoire"
+
+#~ msgid "Generate code for low memory"
+#~ msgstr "Générer du code pour la partie basse de la mémoire"
+
+#~ msgid "32381 fpu"
+#~ msgstr "FPU 32381"
+
+#~ msgid "Use multiply-accumulate fp instructions"
+#~ msgstr "Utiliser les instructions FP de multiplications avec accumulations"
+
+#~ msgid "Do not use multiply-accumulate fp instructions"
+#~ msgstr "Ne pas utiliser les instructions FP de multiplications avec accumulations"
+
+#~ msgid "\"Small register classes\" kludge"
+#~ msgstr "\"Petites classes de registres\" kludge"
+
+#~ msgid "No \"Small register classes\" kludge"
+#~ msgstr "Pas de \"Petites classes de registres\" kludge"
+
+#~ msgid ""
+#~ "unknown -mschedule= option (%s).\n"
+#~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n"
+#~ msgstr ""
+#~ "Option inconnue -mschedule= (%s)\n"
+#~ "Les options valides sont 700, 7100, 7100LC, 7200, 7300 et 8000\n"
+
+#~ msgid ""
+#~ "unknown -march= option (%s).\n"
+#~ "Valid options are 1.0, 1.1, and 2.0\n"
+#~ msgstr ""
+#~ "Option inconnue -march= (%s)\n"
+#~ "Les options valides sont 1.0, 1.1 et 2.0\n"
+
+#~ msgid "PIC code generation is not supported in the portable runtime model\n"
+#~ msgstr "La génération de code PIC n'est pas supportée dans le modèle portable d'exécution\n"
+
+#~ msgid "PIC code generation is not compatible with fast indirect calls\n"
+#~ msgstr "La génération de code PIC n'est pas compatible avec les appels indirects rapides.\n"
+
+#~ msgid "-g is only supported when using GAS on this processor,"
+#~ msgstr "L'option -g est seulement supportée lorsque GAS est utilisé sur ce processeur,"
+
+#~ msgid "Generate cpp defines for server IO"
+#~ msgstr "Générer les defines pour les IO d'un serveur"
+
+#~ msgid "Generate cpp defines for workstation IO"
+#~ msgstr "Générer les defines pour les IO d'une station de travail"
+
+#~ msgid "Generate PA1.1 code"
+#~ msgstr "Générer du code PA1.1"
+
+#~ msgid "Generate PA1.0 code"
+#~ msgstr "Générer du code PA1.0"
+
+#~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
+#~ msgstr "Générer du code PA2.0 (nécessite binutils 2.10 ou supérieur)"
+
+#~ msgid "Disable FP regs"
+#~ msgstr "Désactiver les registres FP"
+
+#~ msgid "Do not disable FP regs"
+#~ msgstr "Ne pas désactiver les registres FP"
+
+#~ msgid "Disable space regs"
+#~ msgstr "Désactiver l'espace registre"
+
+#~ msgid "Do not disable space regs"
+#~ msgstr "Ne pas désactiver l'espace registre"
+
+#~ msgid "Put jumps in call delay slots"
+#~ msgstr "Mettre des sauts dant les fentes de délais"
+
+#~ msgid "Do not put jumps in call delay slots"
+#~ msgstr "Ne pas mettre des sauts dant les fentes de délais"
+
+#~ msgid "Disable indexed addressing"
+#~ msgstr "désactiver l'adressage indexé"
+
+#~ msgid "Do not disable indexed addressing"
+#~ msgstr "Ne pas désactiver l'adressage indexé"
+
+#~ msgid "Use portable calling conventions"
+#~ msgstr "Utiliser les conventions d'appels portables"
+
+#~ msgid "Do not use portable calling conventions"
+#~ msgstr "Ne pas utiliser les conventions d'appel portables"
+
+#~ msgid "Assume code will be assembled by GAS"
+#~ msgstr "Assumer que le code sera assemblé par GAS"
+
+#~ msgid "Do not assume code will be assembled by GAS"
+#~ msgstr "Ne pas assumer que le code sera assemblé par GAS"
+
+#~ msgid "Do not use software floating point"
+#~ msgstr "Ne pas utiliser le logiciel pour virgule flottante"
+
+#~ msgid "Emit long load/store sequences"
+#~ msgstr "Générer des instructions multiples pour chargement/stockage"
+
+#~ msgid "Do not emit long load/store sequences"
+#~ msgstr "Ne pas générer les instructions multiples de chargement/stockage"
+
+#~ msgid "Generate fast indirect calls"
+#~ msgstr "Ne pas utiliser les appels rapides indirects"
+
+#~ msgid "Do not generate fast indirect calls"
+#~ msgstr "Ne pas générer de directives rapides indirects"
+
+#~ msgid "Generate code for huge switch statements"
+#~ msgstr "Générer du code pour les grandes déclarations de branchements"
+
+#~ msgid "Do not generate code for huge switch statements"
+#~ msgstr "Ne pas générer du code pour les grandes déclarations de branchement"
+
+#~ msgid "Always generate long calls"
+#~ msgstr "Générer toujours des appels longs"
+
+#~ msgid "Generate long calls only when needed"
+#~ msgstr "Générer des appels longs lorsque nécessaire"
+
+#~ msgid "Enable linker optimizations"
+#~ msgstr "Activer les optimisations par l'éditeur de liens"
+
+#~ msgid "Specify architecture for code generation.  Values are 1.0, 1.1, and 2.0.  2.0 requires gas snapshot 19990413 or later."
+#~ msgstr "Spécifier l'architecture pour la génération de code. Les valeurs sont 1.0, 1.1 et 2.0. 2.0 requiert gas snapshot 19990413 ou plus récent."
+
+#~ msgid "Assume code will be linked by GNU ld"
+#~ msgstr "Assumer que le code sera lié par GNU ld"
+
+#~ msgid "Assume code will be linked by HP ld"
+#~ msgstr "Assumer que le code sera lié par HP ld"
+
+#~ msgid "Do not use hardware floating point"
+#~ msgstr "Ne pas utiliser le matériel pour virgule flottante"
+
+#~ msgid "Return floating point results in ac0"
+#~ msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0."
+
+#~ msgid "Return floating point results in memory"
+#~ msgstr "Le résultat retourné en virgule flottante se retrouve en mémoire."
+
+#~ msgid "Generate code for an 11/40"
+#~ msgstr "Générer du code pour un 11/40"
+
+#~ msgid "Generate code for an 11/45"
+#~ msgstr "Générer du code pour un 11/45"
+
+#~ msgid "Generate code for an 11/10"
+#~ msgstr "Générer du code pour un 11/10"
+
+#~ msgid "Use 32 bit int"
+#~ msgstr "Utiliser des int de 32 bits"
+
+#~ msgid "Use 16 bit int"
+#~ msgstr "Utiliser des int de 16 bits"
+
+#~ msgid "Use 32 bit float"
+#~ msgstr "Utiliser des flottants de 32 bits"
+
+#~ msgid "Use 64 bit float"
+#~ msgstr "Utiliser des flottants de 64 bits"
+
+#~ msgid "Target has split I&D"
+#~ msgstr "Cible a un I&D séparé"
+
+#~ msgid "Target does not have split I&D"
+#~ msgstr "Cible n'a pas un I&D séparé"
+
+#~ msgid "Use UNIX assembler syntax"
+#~ msgstr "Utliser la syntaxe de l'assembleur UNIX"
+
+#~ msgid "Use DEC assembler syntax"
+#~ msgstr "Utliser la syntaxe de l'assembleur DEC"
+
+#~ msgid "Segmentation Fault (code)"
+#~ msgstr "Faute de segmentation (code)"
+
+#~ msgid "Out of stack space.\n"
+#~ msgstr "Manque d'espace sur la pile.\n"
+
+#~ msgid "Try running `%s' in the shell to raise its limit.\n"
+#~ msgstr "Essayer d'exécuter « %s » dans le shell pour augmenter la limite.\n"
+
+#~ msgid "Segmentation Fault"
+#~ msgstr "Faute de segmentation"
+
+#~ msgid "While setting up signal stack: %m"
+#~ msgstr "Lors de la configuration de la pile de signaux: %m"
+
+#~ msgid "While setting up signal handler: %m"
+#~ msgstr "Lors de la configuration de la routine de traitement de signal: %m"
+
+#~ msgid "couldn't unmap pch_address_space: %m\n"
+#~ msgstr "ne peut défaire la map pch_address_space: %m\n"
+
+#~ msgid "ignoring malformed #pragma longcall"
+#~ msgstr "#pragma longcall mal composé"
+
+#~ msgid "missing open paren"
+#~ msgstr "parenthèse ouvrante manquante"
+
+#~ msgid "missing number"
+#~ msgstr "nombre manquant"
+
+#~ msgid "missing close paren"
+#~ msgstr "parenthèse fermante manquante"
+
+#~ msgid "number must be 0 or 1"
+#~ msgstr "le nombre doit être 0 ou 1"
+
+#~ msgid "junk at end of #pragma longcall"
+#~ msgstr "rebut à la fin de #pragma longcall"
+
+#~ msgid "-mmultiple is not supported on little endian systems"
+#~ msgstr "-mmultiple n'est pas supporté sur des système à octets de poids faible"
+
+#~ msgid "-mstring is not supported on little endian systems"
+#~ msgstr "-mstring n'est pas supporté sur des système à octets de poids faible"
+
+#~ msgid "unknown -mdebug-%s switch"
+#~ msgstr "option -mdebug-%s inconnue"
+
+#~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'"
+#~ msgstr "argument « %s » inconnu de l'option -mtraceback; attendu « full », « partial » ou « none »"
+
+#~ msgid "Unknown switch -mlong-double-%s"
+#~ msgstr "option -mlong-double-%s inconnue"
+
+#~ msgid "unknown -m%s= option specified: '%s'"
+#~ msgstr "option -m%s= inconnue spécifiée: « %s »"
+
+#~ msgid "not configured for ABI: '%s'"
+#~ msgstr "pas configuré pour ABI: « %s »"
+
+#~ msgid "unknown ABI specified: '%s'"
+#~ msgstr "ABI spécifié inconnu: « %s »"
+
+#~ msgid "unknown -malign-XXXXX option specified: '%s'"
+#~ msgstr "option -malign-XXXXX inconnue spécifiée: « %s »"
+
+#~ msgid "Cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them."
+#~ msgstr "Ne peut retourner la valeur dans le registre de vecteur parce que les instructions altivec sont désactivées, utiliser -maltivec pour les autoriser"
+
+#~ msgid "Cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them."
+#~ msgstr "Ne peut relayer l'argument dans le registre de vecteur parce que les instructions altivec sont désactivées, utiliser -maltivec pour les autoriser"
+
+#~ msgid "argument 1 must be a 5-bit signed literal"
+#~ msgstr "argument 1 doit être un litéral signé de 5 bits"
+
+#~ msgid "argument 2 must be a 5-bit unsigned literal"
+#~ msgstr "argument 2 doit être un litéral non signé de 5 bits"
+
+#~ msgid "argument 1 of __builtin_altivec_predicate must be a constant"
+#~ msgstr "argument 1 de « __builtin_altivec_predicate » doit être une constante"
+
+#~ msgid "argument 1 of __builtin_altivec_predicate is out of range"
+#~ msgstr "argument 1 de « __builtin_altivec_predicate » est hors limite"
+
+#~ msgid "argument 3 must be a 4-bit unsigned literal"
+#~ msgstr "argument 3 doit être un litéral non signé de 4 bits"
+
+#~ msgid "argument to `%s' must be a 2-bit unsigned literal"
+#~ msgstr "argument de « %s » doit être un litéral non signé de 2 bits"
+
+#~ msgid "argument to dss must be a 2-bit unsigned literal"
+#~ msgstr "argument de dss doit être un litéral non signé de 2 bits"
+
+#~ msgid "argument 1 of __builtin_spe_predicate must be a constant"
+#~ msgstr "argument 1 de « __builtin_spe_predicate » doit être une constante"
+
+#~ msgid "argument 1 of __builtin_spe_predicate is out of range"
+#~ msgstr "argument 1 de « __builtin_spe_predicate » est hors limite"
+
+#~ msgid "your function will be miscompiled"
+#~ msgstr "votre fonction sera mal compilée"
+
+#~ msgid "invalid %%f value"
+#~ msgstr "valeur %%f invalide"
+
+#~ msgid "invalid %%F value"
+#~ msgstr "valeur %%F invalide"
+
+#~ msgid "invalid %%G value"
+#~ msgstr "valeur %%G invalide"
+
+#~ msgid "invalid %%j code"
+#~ msgstr "valeur %%j invalide"
+
+#~ msgid "invalid %%J code"
+#~ msgstr "valeur %%J invalide"
+
+#~ msgid "invalid %%k value"
+#~ msgstr "valeur %%k invalide"
+
+#~ msgid "invalid %%K value"
+#~ msgstr "valeur %%K invalide"
+
+#~ msgid "invalid %%O value"
+#~ msgstr "valeur %%O invalide"
+
+#~ msgid "invalid %%q value"
+#~ msgstr "valeur %%q invalide"
+
+#~ msgid "invalid %%S value"
+#~ msgstr "valeur %%S invalide"
+
+#~ msgid "invalid %%T value"
+#~ msgstr "valeur %%T invalide"
+
+#~ msgid "invalid %%u value"
+#~ msgstr "valeur %%u invalide"
+
+#~ msgid "invalid %%v value"
+#~ msgstr "valeur %%v invalide"
+
+#~ msgid "no profiling of 64-bit code for this ABI"
+#~ msgstr "pas de profilage du code de 64 bits pour cet ABI"
+
+#~ msgid "Always pass floating-point arguments in memory"
+#~ msgstr "Toujours passer des arguments en virgule flottante en mémoire"
+
+#~ msgid "Don't always pass floating-point arguments in memory"
+#~ msgstr "Na pas toujours passer des arguments en virgule flottante en mémoire"
+
+#~ msgid "Support message passing with the Parallel Environment"
+#~ msgstr "Supporter le passage de messages dans un environnement parallèle"
+
+#~ msgid "Compile for 64-bit pointers"
+#~ msgstr "Compiler pour des pointeurs de 64 bits"
+
+#~ msgid "Compile for 32-bit pointers"
+#~ msgstr "Compiler pour des pointeurs de 32 bits"
+
+#~ msgid "-maix64 and POWER architecture are incompatible"
+#~ msgstr "-maix64 et architecture POWER sont incompatibles"
+
+#~ msgid "-maix64 requires PowerPC64 architecture remain enabled"
+#~ msgstr "-maix64 requiert une architecture PowerPC64 qui demeure sélectionnée"
+
+#~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
+#~ msgstr "-maix64 requis: calcul en 64 bits avec un adressage de 32 bits n'est pas encore supporté"
+
+#~ msgid "Generate code suitable for executables (NOT shared libs)"
+#~ msgstr "Générer du code adapté pour les exécutables (PAS les librairies partagées)"
+
+#~ msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
+#~ msgstr "-mdynamic-no-pic écrase -fpic ou -fPIC"
+
+#~ msgid "-fpic is not supported; -fPIC assumed"
+#~ msgstr "-fpic n'est pas supporté; -fPIC assumé"
+
+#~ msgid "-m64 requires a PowerPC64 cpu"
+#~ msgstr "-m64 requiert un processeur PowerPC64"
+
+#~ msgid "Call mcount for profiling before a function prologue"
+#~ msgstr "Appeller mcount pour le profilage avant le prologue de la fonction"
+
+#~ msgid "Call mcount for profiling after a function prologue"
+#~ msgstr "Ne pas appeller mcount pour le profilage avant le prologue de la fonction"
+
+#~ msgid "Use POWER instruction set"
+#~ msgstr "Utiliser le jeu d'instructions du POWER"
+
+#~ msgid "Use POWER2 instruction set"
+#~ msgstr "Utiliser le jeu d'instructions du POWER2"
+
+#~ msgid "Do not use POWER2 instruction set"
+#~ msgstr "Ne pas utiliser le jeu d'instructions du POWER2"
+
+#~ msgid "Do not use POWER instruction set"
+#~ msgstr "Ne pas utiliser le jeu d'instructions du POWER"
+
+#~ msgid "Use PowerPC instruction set"
+#~ msgstr "Utiliser le jeu d'instructions du PowerPC"
+
+#~ msgid "Do not use PowerPC instruction set"
+#~ msgstr "Ne pas utiliser le jeu d'instructions du PowerPC"
+
+#~ msgid "Use PowerPC General Purpose group optional instructions"
+#~ msgstr "Utiliser le groupe d'instructions optionnelles d'utilité général du PowerPC"
+
+#~ msgid "Do not use PowerPC General Purpose group optional instructions"
+#~ msgstr "Ne pas utiliser le groupe d'instructions optionnelles d'usage général du PowerPC"
+
+#~ msgid "Use PowerPC Graphics group optional instructions"
+#~ msgstr "Utiliser le groupe d'instructions graphiques optionnelles du PowerPC"
+
+#~ msgid "Do not use PowerPC Graphics group optional instructions"
+#~ msgstr "Ne pas utiliser le groupe d'instructions optionnelles graphiques du PowerPC"
+
+#~ msgid "Use PowerPC-64 instruction set"
+#~ msgstr "Utiliser le jeu d'instructions du PowerPC-64"
+
+#~ msgid "Do not use PowerPC-64 instruction set"
+#~ msgstr "Ne pas utiliser le jeu d'instructions du PowerPC-64"
+
+#~ msgid "Use AltiVec instructions"
+#~ msgstr "Utiliser les instructions AltiVec"
+
+#~ msgid "Do not use AltiVec instructions"
+#~ msgstr "Ne pas utiliser les instructions AltiVec"
+
+#~ msgid "Use new mnemonics for PowerPC architecture"
+#~ msgstr "Utiliser les nouvelles mnémoniques pour l'architecture du PowerPC"
+
+#~ msgid "Use old mnemonics for PowerPC architecture"
+#~ msgstr "Utiliser les anciennes mnémoniques pour l'architecture du PowerPC"
+
+#~ msgid "Put everything in the regular TOC"
+#~ msgstr "Place tout dans le TOC régulier"
+
+#~ msgid "Place floating point constants in TOC"
+#~ msgstr "Placer les constantes en virgule flottante dans le TOC"
+
+#~ msgid "Do not place floating point constants in TOC"
+#~ msgstr "Ne pas placer les constantes en virgule flottante dans le TOC"
+
+#~ msgid "Place symbol+offset constants in TOC"
+#~ msgstr "Placer les constantes symboles+décalages dans le TOC"
+
+#~ msgid "Do not place symbol+offset constants in TOC"
+#~ msgstr "Ne pas placer les constantes symboles+décalages dans le TOC"
+
+#~ msgid "Place variable addresses in the regular TOC"
+#~ msgstr "Placer les adresses variables dans un TOC régulier"
+
+#~ msgid "Generate load/store multiple instructions"
+#~ msgstr "Générer les instructions multiples de chargement/stockage"
+
+#~ msgid "Do not generate load/store multiple instructions"
+#~ msgstr "Ne pas générer les instructions multiples de chargement/stockage"
+
+#~ msgid "Generate string instructions for block moves"
+#~ msgstr "Générer les instructions chaînes pour les déplacements de blocs"
+
+#~ msgid "Do not generate string instructions for block moves"
+#~ msgstr "Ne pas générer les instructions chaînes pour les déplacements de blocs"
+
+#~ msgid "Generate load/store with update instructions"
+#~ msgstr "Générer les instructions de mise à jour de chargement/stockage"
+
+#~ msgid "Do not generate load/store with update instructions"
+#~ msgstr "Ne pas générer les instructions de mise à jour de chargement/stockage"
+
+#~ msgid "Do not generate fused multiply/add instructions"
+#~ msgstr "Ne pas générer des instructions fusionnés de multiplication/addition"
+
+#~ msgid "Do not schedule the start and end of the procedure"
+#~ msgstr "Ne pas ordonnancer le début et la fin de la procédure"
+
+#~ msgid "Return all structures in memory (AIX default)"
+#~ msgstr "Retourner toutes les structures en mémoire (par défaut sur AIX)"
+
+#~ msgid "Return small structures in registers (SVR4 default)"
+#~ msgstr "Retourner les petites structures par les registres (par défaut sur SVR4)"
+
+#~ msgid "Generate single field mfcr instruction"
+#~ msgstr "Générer des instructions à champ simple mfcr"
+
+#~ msgid "Do not generate single field mfcr instruction"
+#~ msgstr "Ne pas générer des instructions à champ simple mfcr"
+
+#~ msgid "Use features of and schedule code for given CPU"
+#~ msgstr "Utiliser les options et ordonnancer le code pour le processeur donné"
+
+#~ msgid "Enable debug output"
+#~ msgstr "Autoriser la sortie lors de la mise au point"
+
+#~ msgid "Select full, part, or no traceback table"
+#~ msgstr "Sélectionner « full », « part » ou « none »"
+
+#~ msgid "Specify ABI to use"
+#~ msgstr "Spécifier l'ABI à utiliser"
+
+#~ msgid "Specify size of long double (64 or 128 bits)"
+#~ msgstr "Spécifier la taille des long double (64 ou 128 bits)"
+
+#~ msgid "Specify yes/no if isel instructions should be generated"
+#~ msgstr "Spécifier yes (pour oui)/ no (pour non) si les instruction isel doivent être générés"
+
+#~ msgid "Specify yes/no if SPE SIMD instructions should be generated"
+#~ msgstr "Spécifier yes (pour oui) /no (pour non) si les instructions SPE SIMD doivent être générées"
+
+#~ msgid "Specify yes/no if using floating point in the GPRs"
+#~ msgstr "Spécifier yes (pour oui) /no (pour non) si les nombres en virgule flottante sont utilisés dans le GPR"
+
+#~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec"
+#~ msgstr "Spécifier yes (pour oui)/ no (pour non) si les instruction VRSAVE doivent être générés pour ALtiVec"
+
+#~ msgid "Avoid all range limits on call instructions"
+#~ msgstr "Éviter toutes les limites sur les instructions d'appel"
+
+#~ msgid "Determine which dependences between insns are considered costly"
+#~ msgstr "Déterminer laquelle des dépendances entre les insns qui sont considérées coûteuses"
+
+#~ msgid "Specify which post scheduling nop insertion scheme to apply"
+#~ msgstr "Spécifier lequel schème de post ordonnancement d'insertion de NOP doit être appliqué"
+
+#~ msgid "Specify alignment of structure fields default/natural"
+#~ msgstr "Spécifier l'alignement des champs de structure par défaut/naturel"
+
+#~ msgid "Specify scheduling priority for dispatch slot restricted insns"
+#~ msgstr "Spécifier la priorité d'ordonnancement pour la répartition de fentes insns restreintes"
+
+#~ msgid "RETURN_ADDRESS_OFFSET not supported"
+#~ msgstr "RETURN_ADDRESS_OFFSET n'est pas supporté"
+
+#~ msgid "Select ABI calling convention"
+#~ msgstr "Sélectionner la convention d'appel ABI"
+
+#~ msgid "Select method for sdata handling"
+#~ msgstr "Sélectionner la méthode de traitement sdata"
+
+#~ msgid "Align to the base type of the bit-field"
+#~ msgstr "Aligner à la base du type du champ de bits"
+
+#~ msgid "Don't align to the base type of the bit-field"
+#~ msgstr "Ne pas aligner à la base du type du champ de bits"
+
+#~ msgid "Don't assume that unaligned accesses are handled by the system"
+#~ msgstr "Ne pas présumer que les accès non alignées sont traités par le système"
+
+#~ msgid "Assume that unaligned accesses are handled by the system"
+#~ msgstr "Présumer que les accès non alignées sont traités par le système"
+
+#~ msgid "Produce code relocatable at runtime"
+#~ msgstr "Produire du code relocalisable au moment de l'exécution"
+
+#~ msgid "Don't produce code relocatable at runtime"
+#~ msgstr "Ne pas produire du code relocalisable au moment de l'exécution"
+
+#~ msgid "Produce little endian code"
+#~ msgstr "Produire du code pour système à octets de poids faible (little endian)"
+
+#~ msgid "Produce big endian code"
+#~ msgstr "Produire du code pour système à octets de poids fort (big endian)"
+
+#~ msgid "no description yet"
+#~ msgstr "aucune description encore"
+
+#~ msgid "Use EABI"
+#~ msgstr "Utiliser EABI"
+
+#~ msgid "Don't use EABI"
+#~ msgstr "Ne pas utiliser EABI"
+
+#~ msgid "Do not allow bit-fields to cross word boundaries"
+#~ msgstr "Ne pas permettre les champs de bits de traverser des frontières de mots"
+
+#~ msgid "Use alternate register names"
+#~ msgstr "Utiliser les noms alternatifs de registres"
+
+#~ msgid "Don't use alternate register names"
+#~ msgstr "Ne pas utiliser les noms alternatifs de registres"
+
+#~ msgid "Link with libsim.a, libc.a and sim-crt0.o"
+#~ msgstr "Faire l'édition de liens avec libsim.a, libc.a et sim-crt0.o"
+
+#~ msgid "Link with libads.a, libc.a and crt0.o"
+#~ msgstr "Faire l'édition de liens avec libads.a, libc.a and crt0.o"
+
+#~ msgid "Link with libyk.a, libc.a and crt0.o"
+#~ msgstr "Faire l'édition de liens avec libyk.a, libc.a and crt0.o"
+
+#~ msgid "Link with libmvme.a, libc.a and crt0.o"
+#~ msgstr "Faire l'édition de liens avec libmvme.a, libc.a and crt0.o"
+
+#~ msgid "Set the PPC_EMB bit in the ELF flags header"
+#~ msgstr "Initialiser le bit PPC_EMB bit dans l'en-tête des fanions ELF"
+
+#~ msgid "Use the WindISS simulator"
+#~ msgstr "Utiliser le simulateur WindISS"
+
+#~ msgid "Generate 64-bit code"
+#~ msgstr "Générer du code 64 bits"
+
+#~ msgid "Generate 32-bit code"
+#~ msgstr "Générer du code 32 bits"
+
+#~ msgid "bad value for -mcall-%s"
+#~ msgstr "valeur erronée pour -mcall-%s"
+
+#~ msgid "bad value for -msdata=%s"
+#~ msgstr "valeur erronée pour -msdata=%s"
+
+#~ msgid "-mrelocatable and -msdata=%s are incompatible"
+#~ msgstr "-mrelocatable et -msdata=%s sont incompatibles"
+
+#~ msgid "-f%s and -msdata=%s are incompatible"
+#~ msgstr "-f%s et -msdata=%s sont incompatibles"
+
+#~ msgid "-msdata=%s and -mcall-%s are incompatible"
+#~ msgstr "-msdata=%s et -mcall-%s sont incompatibles"
+
+#~ msgid "-mrelocatable and -mno-minimal-toc are incompatible"
+#~ msgstr "-mrelocatable et -mno-minimal-toc sont incompatibles"
+
+#~ msgid "-mrelocatable and -mcall-%s are incompatible"
+#~ msgstr "-mrelocatable et -mcall-%s sont incompatibles"
+
+#~ msgid "-fPIC and -mcall-%s are incompatible"
+#~ msgstr "-fPIC et -mcall-%s sont incompatibles"
+
+#~ msgid "-mcall-aixdesc must be big endian"
+#~ msgstr "-mcall-aixdesc doit être pour un système à octets de poids fort"
+
+#~ msgid "-m%s not supported in this configuration"
+#~ msgstr "-m%s n'est pas supporté par cette configuration"
+
+#~ msgid "Unknown cpu used in -march=%s."
+#~ msgstr "Processeur inconnu utilisé dans -march=%s"
+
+#~ msgid "Unknown cpu used in -mtune=%s."
+#~ msgstr "Processeur inconnu dans -mtune=%s"
+
+#~ msgid "z/Architecture mode not supported on %s."
+#~ msgstr "z/mode d'architecture n'est pas supporté sur %s"
+
+#~ msgid "64-bit ABI not supported in ESA/390 mode."
+#~ msgstr "ABI 64 bits n'est pas supporté en mode ESA/390"
+
+#~ msgid "invalid UNSPEC as operand (1)"
+#~ msgstr "UNSPEC invalide comme opérande (1)"
+
+#~ msgid "invalid UNSPEC as operand (2)"
+#~ msgstr "UNSPEC invalide comme opérande (2)"
+
+#~ msgid "UNKNOWN in s390_output_symbolic_const !?"
+#~ msgstr "INCONNU dans s390_output_symbolic_const !?"
+
+#~ msgid "Cannot decompose address."
+#~ msgstr "Ne pas décomposer l'adresse"
+
+#~ msgid "UNKNOWN in print_operand !?"
+#~ msgstr "INCONNNU dans print_operand !?"
+
+#~ msgid "Total size of local variables exceeds architecture limit."
+#~ msgstr "Taille totale des variables locales excède la limite de l'architecture"
+
+#~ msgid "Set backchain"
+#~ msgstr "Fixer la chaîne arrière"
+
+#~ msgid "Don't set backchain (faster, but debug harder"
+#~ msgstr "Ne pas fixer la chaîne arrière (plus rapide mais plus difficle à mettre au point)"
+
+#~ msgid "Use bras for executable < 64k"
+#~ msgstr "Utiliser « bras » pour les exécutables < 64k"
+
+#~ msgid "Don't use bras"
+#~ msgstr "Ne pas utiliser bras"
+
+#~ msgid "Additional debug prints"
+#~ msgstr "Imprimer des informations additionnelles en mode débug"
+
+#~ msgid "Don't print additional debug prints"
+#~ msgstr "Ne pas imprimer des informations additionnelles en mode débug"
+
+#~ msgid "64 bit ABI"
+#~ msgstr "ABI de 64 bits"
+
+#~ msgid "31 bit ABI"
+#~ msgstr "ABI de 64 bits"
+
+#~ msgid "z/Architecture"
+#~ msgstr "z/Architecture"
+
+#~ msgid "ESA/390 architecture"
+#~ msgstr "architecture ESA/390"
+
+#~ msgid "mvcle use"
+#~ msgstr "mvcle utilisé"
+
+#~ msgid "mvc&ex"
+#~ msgstr "mvc&ex"
+
+#~ msgid "enable tpf OS code"
+#~ msgstr "autoriser le code OS tpf"
+
+#~ msgid "disable tpf OS code"
+#~ msgstr "interdire le code OS tpf"
+
+#~ msgid "disable fused multiply/add instructions"
+#~ msgstr "interdire les instructions fusionnés de multiplication/addition"
+
+#~ msgid "enable fused multiply/add instructions"
+#~ msgstr "autoriser les instructions fusionnés de multiplication/addition"
+
+#~ msgid "__builtin_saveregs not supported by this subtarget"
+#~ msgstr "__builtin_saveregs n'est pas supporté par la sous-cible"
+
+#~ msgid "attribute interrupt_handler is not compatible with -m5-compact"
+#~ msgstr "attribut interrupt_handler n'est pas compatible avec -m5-compact"
+
+#~ msgid "`%s' attribute only applies to interrupt functions"
+#~ msgstr "attribut « %s » s'applique seulement à des fonctions d'interruption"
+
+#~ msgid "`%s' attribute argument not a string constant"
+#~ msgstr "l'attribut « %s » de l'argument n'est pas une contante chaîne"
+
+#~ msgid "`%s' attribute argument not an integer constant"
+#~ msgstr "l'attribut « %s » de l'argument n'est pas une contante entière"
+
+#~ msgid "Profiling is not supported on this target."
+#~ msgstr "le profilage n'est pas supporté sur cette cible"
+
+#~ msgid "%s is not supported by this configuration"
+#~ msgstr "%s n'est pas supporté par cette configuration"
+
+#~ msgid "-mlong-double-64 not allowed with -m64"
+#~ msgstr "-mlong-double-64 n'est pas permis avec -m64"
+
+#~ msgid "-mcmodel= is not supported on 32 bit systems"
+#~ msgstr "-mcmodel= n'est pas supporté sur les systèmes de 32 bits"
+
+#~ msgid "invalid %%Y operand"
+#~ msgstr "opérande %%Y invalide"
+
+#~ msgid "invalid %%A operand"
+#~ msgstr "opérande %%A invalide"
+
+#~ msgid "invalid %%B operand"
+#~ msgstr "Opérande %%B invalide"
+
+#~ msgid "invalid %%c operand"
+#~ msgstr "opérande %%c invalide"
+
+#~ msgid "invalid %%C operand"
+#~ msgstr "opérande %%C invalide"
+
+#~ msgid "invalid %%d operand"
+#~ msgstr "opérande %%d invalide"
+
+#~ msgid "invalid %%D operand"
+#~ msgstr "opérande %%D invalide"
+
+#~ msgid "invalid %%f operand"
+#~ msgstr "opérande %%f invalide"
+
+#~ msgid "invalid %%s operand"
+#~ msgstr "opérande %%s invalide"
+
+#~ msgid "long long constant not a valid immediate operand"
+#~ msgstr "constante long long n'est pas une opérande immédiate valide"
+
+#~ msgid "floating point constant not a valid immediate operand"
+#~ msgstr "constante en virgule flottante n'est pas une opérande immédiate valide"
+
+#~ msgid "Use 128 bit long doubles"
+#~ msgstr "Utiliser des longs doubles de 128 bits"
+
+#~ msgid "Generate code for big endian"
+#~ msgstr "Générer du code pour un système à octets de poids fort"
+
+#~ msgid "Generate code for little endian"
+#~ msgstr "Générer du code pour un système à octets de poids faible"
+
+#~ msgid "Use little-endian byte order for data"
+#~ msgstr "Utiliser l'ordre des octets de poids faible pour les données"
+
+#~ msgid "Assume possible double misalignment"
+#~ msgstr "Présumer un possible mauvais alignement des doubles"
+
+#~ msgid "Assume all doubles are aligned"
+#~ msgstr "Présumer que tous les doubles sont alignés"
+
+#~ msgid "Pass -assert pure-text to linker"
+#~ msgstr "Passer -assert pure-text à l'éditeur de liens"
+
+#~ msgid "Do not pass -assert pure-text to linker"
+#~ msgstr "Ne pas passer -assert pure-text à l'éditeur de liens"
+
+#~ msgid "Use flat register window model"
+#~ msgstr "Utiliser le modèle de fenêtre de registre plat"
+
+#~ msgid "Do not use flat register window model"
+#~ msgstr "Ne pas utiliser le modèle de fenêtre de registre plat"
+
+#~ msgid "Use ABI reserved registers"
+#~ msgstr "Utiliser les registres réservés ABI"
+
+#~ msgid "Do not use ABI reserved registers"
+#~ msgstr "Ne pas utiliser les registres réservés ABI"
+
+#~ msgid "Use hardware quad fp instructions"
+#~ msgstr "Utiliser les instructions matérielles quad FP"
+
+#~ msgid "Do not use hardware quad fp instructions"
+#~ msgstr "Ne pas utiliser les instructions matérielles quad FP"
+
+#~ msgid "Compile for v8plus ABI"
+#~ msgstr "Compiler pour ABI v8plus"
+
+#~ msgid "Do not compile for v8plus ABI"
+#~ msgstr "Ne pas compiler pour ABI v8plus"
+
+#~ msgid "Utilize Visual Instruction Set"
+#~ msgstr "Utiliser le jeu d'instructions Visual"
+
+#~ msgid "Do not utilize Visual Instruction Set"
+#~ msgstr "Ne pas utiliser le jeu d'instructions Visual"
+
+#~ msgid "Optimize for Cypress processors"
+#~ msgstr "Optimiser pour les processeurs Cypress"
+
+#~ msgid "Optimize for SPARCLite processors"
+#~ msgstr "Optimiser pour les processeurs SPARCLite"
+
+#~ msgid "Optimize for F930 processors"
+#~ msgstr "Optimiser pour les processeurs F930"
+
+#~ msgid "Optimize for F934 processors"
+#~ msgstr "Optimiser pour les processeurs F934"
+
+#~ msgid "Use V8 SPARC ISA"
+#~ msgstr "Utiliser le V8 SPARC ISA"
+
+#~ msgid "Optimize for SuperSPARC processors"
+#~ msgstr "Optimiser pour les processeurs SuperSPARC"
+
+#~ msgid "Pointers are 64-bit"
+#~ msgstr "Pointeurs sont de 64 bits"
+
+#~ msgid "Pointers are 32-bit"
+#~ msgstr "Pointeurs sont de 32 bits"
+
+#~ msgid "Use 32-bit ABI"
+#~ msgstr "Utiliser ABI de 32 bits"
+
+#~ msgid "Use 64-bit ABI"
+#~ msgstr "Utiliser ABI de 64 bits"
+
+#~ msgid "Use stack bias"
+#~ msgstr "Utiliser le biais de la pile"
+
+#~ msgid "Do not use stack bias"
+#~ msgstr "Ne pas utiliser le biais de la pile"
+
+#~ msgid "Use structs on stronger alignment for double-word copies"
+#~ msgstr "Utiliser des structs avec alignement plus fort pour les copies de mots-doubles"
+
+#~ msgid "Do not use structs on stronger alignment for double-word copies"
+#~ msgstr "Ne pas utiliser des structs avec alignement plus fort pour les copies de mots-doubles"
+
+#~ msgid "Optimize tail call instructions in assembler and linker"
+#~ msgstr "Optimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liens"
+
+#~ msgid "Do not optimize tail call instructions in assembler or linker"
+#~ msgstr "Ne pas optimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liens"
+
+#~ msgid "Use given SPARC code model"
+#~ msgstr "Utiliser le modèle donné de code pour le SPARC"
+
+#~ msgid "Constant halfword load operand out of range."
+#~ msgstr "chargement de l'opérande de la constante demi-mot est hors limite"
+
+#~ msgid "Constant arithmetic operand out of range."
+#~ msgstr "opérande arithmétique de la constante est hors limite"
+
+#~ msgid "Local variable memory requirements exceed capacity."
+#~ msgstr "La mémoire requise pour les variables locales excède la capacité disponible."
+
+#~ msgid "function_profiler support"
+#~ msgstr "function_profiler supporté"
+
+#~ msgid "cannot use va_start in interrupt function"
+#~ msgstr "ne peut utiliser va-start dans une fonction d'interruption"
+
+#~ msgid "`B' operand is not constant"
+#~ msgstr "opérande « B » n'est pas une constante"
+
+#~ msgid "`B' operand has multiple bits set"
+#~ msgstr "l'opérande « B » a de multiples jeux de bits"
+
+#~ msgid "`o' operand is not constant"
+#~ msgstr "opérande « o » n'est pas une constante"
+
+#~ msgid "xstormy16_print_operand: unknown code"
+#~ msgstr "xstormy16_print_operand: code inconnu"
+
+#~ msgid "switch statement of size %lu entries too large"
+#~ msgstr "déclaration de switch de taille %lu entrée est trop grande"
+
+#~ msgid "#pragma GHS endXXXX found without previous startXXX"
+#~ msgstr "#pragma GHS endXXXX repéré sans être précédé de startXXX"
+
+#~ msgid "#pragma GHS endXXX does not match previous startXXX"
+#~ msgstr "#pragma GHS endXXX ne concorde pas avec le précédent startXXX"
+
+#~ msgid "cannot set interrupt attribute: no current function"
+#~ msgstr "ne peut initialiser l'attribut d'interruption: aucune fonction courante"
+
+#~ msgid "cannot set interrupt attribute: no such identifier"
+#~ msgstr "ne peut initialiser l'attribut d'interruption: pas de tel identificateur"
+
+#~ msgid "junk at end of #pragma ghs section"
+#~ msgstr "rebut à la fin de la section #pragma ghs"
+
+#~ msgid "unrecognized section name \"%s\""
+#~ msgstr "nom de section non reconnue « %s »"
+
+#~ msgid "malformed #pragma ghs section"
+#~ msgstr "sectin mal composée #pragma ghs"
+
+#~ msgid "junk at end of #pragma ghs interrupt"
+#~ msgstr "rebut à la fin de l'interruption #pragma ghs"
+
+#~ msgid "junk at end of #pragma ghs starttda"
+#~ msgstr "rebut à la fin de #pragma ghs starttda"
+
+#~ msgid "junk at end of #pragma ghs startsda"
+#~ msgstr "rebut à la fin de #pragma ghs startsda"
+
+#~ msgid "junk at end of #pragma ghs startzda"
+#~ msgstr "rebut à la fin de #pragma ghs startzda"
+
+#~ msgid "junk at end of #pragma ghs endtda"
+#~ msgstr "rebut à la fin de #pragma ghs endtda"
+
+#~ msgid "junk at end of #pragma ghs endsda"
+#~ msgstr "rebut à la fin de #pragma ghs endsda"
+
+#~ msgid "junk at end of #pragma ghs endzda"
+#~ msgstr "rebut à la fin de #pragma ghs endzda"
+
+#~ msgid "%s=%s is not numeric"
+#~ msgstr "%s=%s n'est pas numérique"
+
+#~ msgid "%s=%s is too large"
+#~ msgstr "%s=%s est trop grand"
+
+#~ msgid "const_double_split got a bad insn:"
+#~ msgstr "const_double_split a reçu un insn erroné:"
+
+#~ msgid "output_move_single:"
+#~ msgstr "output_move_single:"
+
+#~ msgid "%Jdata area attributes cannot be specified for local variables"
+#~ msgstr "%Jattribut de zone de donnéées ne peut être spécifié pour des variables locales"
+
+#~ msgid "%Jdata area of '%D' conflicts with previous declaration"
+#~ msgstr "%Jzone de données de « %D » entre en conflit avec un déclaration précédente"
+
+#~ msgid "bogus JR construction: %d\n"
+#~ msgstr "construction JR boggé: %d\n"
+
+#~ msgid "bad amount of stack space removal: %d"
+#~ msgstr "taille erronée pour l'enlèvement d'espace de la pile: %d"
+
+#~ msgid "bogus JARL construction: %d\n"
+#~ msgstr "construction JARL boggée: %d\n"
+
+#~ msgid "Bogus DISPOSE construction: %d\n"
+#~ msgstr "construction DISPOSE boggé: %d\n"
+
+#~ msgid "Too much stack space to dispose of: %d"
+#~ msgstr "Trop d'espace pour l'empilage pour la disposition de: %d"
+
+#~ msgid "Bogus PREPEARE construction: %d\n"
+#~ msgstr "construction PREPEARE boggée: %d\n"
+
+#~ msgid "Too much stack space to prepare: %d"
+#~ msgstr "Trop d'espace pour l'empilage pour la préparation: %d"
+
+#~ msgid "Support Green Hills ABI"
+#~ msgstr "Supporter l'ABI Green Hills"
+
+#~ msgid "Prohibit PC relative function calls"
+#~ msgstr "Interdire les appels relatifs de fonctions par le PC"
+
+#~ msgid "Reuse r30 on a per function basis"
+#~ msgstr "Ré-utiliser R30 sur une base par fonction"
+
+#~ msgid "Use stubs for function prologues"
+#~ msgstr "Utiliser des stubs pour les prologues de fonction"
+
+#~ msgid "Same as: -mep -mprolog-function"
+#~ msgstr "Identique à: -mep -mprolog-function"
+
+#~ msgid "Enable backend debugging"
+#~ msgstr "Autoriser la mise au point par la fin"
+
+#~ msgid "Compile for the v850 processor"
+#~ msgstr "Compiler pour le processeur v850"
+
+#~ msgid "Compile for v850e1 processor"
+#~ msgstr "Compiler pour le processeur v850e1"
+
+#~ msgid "Compile for v850e processor"
+#~ msgstr "Compiler pour le processeur v850e"
+
+#~ msgid "Enable the use of the short load instructions"
+#~ msgstr "Activer l'utilisation d'instructions courtes de chargement"
+
+#~ msgid "Do not use the callt instruction"
+#~ msgstr "Ne pas utiliser l'instruction callt"
+
+#~ msgid "Do not use registers r2 and r5"
+#~ msgstr "Ne pas utiliser les registres r2 et r5"
+
+#~ msgid "Enforce strict alignment"
+#~ msgstr "Forcer l'alignement stricte"
+
+#~ msgid "Use 4 byte entries in switch tables"
+#~ msgstr "Utiliser des entrées de 4 octets dans les tables de switch"
+
+#~ msgid "Set the max size of data eligible for the TDA area"
+#~ msgstr "Initialiser la taille maximale des données éligibles pour la zone TDA"
+
+#~ msgid "Set the max size of data eligible for the SDA area"
+#~ msgstr "Initialiser la taille maximale des données éligibles pour la zone SDA"
+
+#~ msgid "Set the max size of data eligible for the ZDA area"
+#~ msgstr "Initialiser la taille maximale des données éligibles pour la zone ZDA"
+
+#~ msgid "boolean registers required for the floating-point option"
+#~ msgstr "registres booléens requis pour l'option de virgule flottante"
+
+#~ msgid "-f%s is not supported with CONST16 instructions"
+#~ msgstr "-f%s n'est pas supporté avec les instructions CONST16"
+
+#~ msgid "PIC is required but not supported with CONST16 instructions"
+#~ msgstr "PIC est requis mais non supporté avec des instructions CONST16"
+
+#~ msgid "invalid %%D value"
+#~ msgstr "valeur %%D invalide"
+
+#~ msgid "invalid mask"
+#~ msgstr "masque invalide"
+
+#~ msgid "invalid %%x value"
+#~ msgstr "valeur %%x invalide"
+
+#~ msgid "invalid %%d value"
+#~ msgstr "valeur %%d invalide"
+
+#~ msgid "invalid %%t/%%b value"
+#~ msgstr "valeur %%t/%%b invalide"
+
+#~ msgid "invalid address"
+#~ msgstr "adresse invalide"
+
+#~ msgid "no register in address"
+#~ msgstr "pas de registre dans l'adresse"
+
+#~ msgid "address offset not a constant"
+#~ msgstr "décalage d'adresse n'est pas une constante"
+
+#~ msgid "only uninitialized variables can be placed in a .bss section"
+#~ msgstr "seules les variables non initialisées peuvent être placées dans une section .bss"
+
+#~ msgid "Use CONST16 instruction to load constants"
+#~ msgstr "Utiliser les instructions CONST16 pour charger les constantes"
+
+#~ msgid "Use PC-relative L32R instruction to load constants"
+#~ msgstr "Utiliser les instructions L32R relatives au PC pour charger les constantes"
+
+#~ msgid "Disable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Interdire les instructions fusionnés FP de multiplication/addition et de multiplication/soustraction"
+
+#~ msgid "Enable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Permettre les instructions fusionnés FP de multiplication/addition et de multiplication/soustraction"
+
+#~ msgid "Intersperse literal pools with code in the text section"
+#~ msgstr "Entrecouper les lots de litéraux avec le code dans la section texte"
+
+#~ msgid "Put literal pools in a separate literal section"
+#~ msgstr "Placer les lots de litéraux dans des sections séparées de litéraux"
+
+#~ msgid "Automatically align branch targets to reduce branch penalties"
+#~ msgstr "Aligner automatiquement les branchements cibles pour réduire les pénalités de branchement"
+
+#~ msgid "Do not automatically align branch targets"
+#~ msgstr "Ne pas aligner automatiquement les branchements cibles pour réduire les pénalités de branchement"
+
+#~ msgid "Use indirect CALLXn instructions for large programs"
+#~ msgstr "Utiliser les instructions indirectes CALLXn pour les grands programmes"
+
+#~ msgid "Use direct CALLn instructions for fast calls"
+#~ msgstr "Utiliser les instructions directes CALLn pour des appels rapides"
+
+#~ msgid "missing argument to \"-%s\""
+#~ msgstr "argument manquant à « -%s »"
+
+#~ msgid "`-gnat' misspelled as `-gant'"
+#~ msgstr "« -gnat » mal épellé comme « -gant »"
+
+#~ msgid "unable to call pointer to member function here"
+#~ msgstr "incapable de faire l'appel avec le pointeur vers la fonction membre ici"
+
+#~ msgid "%s %D(%T, %T, %T) <built-in>"
+#~ msgstr "%s %D(%T, %T, %T) <construit-interne>"
+
+#~ msgid "%s %D(%T, %T) <built-in>"
+#~ msgstr "%s %D(%T, %T) <construit-interne>"
+
+#~ msgid "%s %D(%T) <built-in>"
+#~ msgstr "%s %D(%T) <interne>"
+
+#~ msgid "%s %T <conversion>"
+#~ msgstr "%s %T <conversion>"
+
+#~ msgid "%J%s %+#D <near match>"
+#~ msgstr "%J%s %+#D <près d'une concordance>"
+
+#~ msgid "%J%s %+#D"
+#~ msgstr "%J%s %+#D"
+
+#~ msgid "candidates are:"
+#~ msgstr "candidats sont:"
+
+#~ msgid "conversion from `%T' to `%T' is ambiguous"
+#~ msgstr "conversion de « %T » vers « %T » est ambiguë"
+
+#~ msgid "no matching function for call to `%D(%A)'"
+#~ msgstr "pas de fonction concordante pour l'appel de « %D(%A) »"
+
+#~ msgid "call of overloaded `%D(%A)' is ambiguous"
+#~ msgstr "appel du surchargé « %D(%A) » est ambiguë"
+
+#~ msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*"
+#~ msgstr "pointeur vers fonction membre %E ne peut être appelé sans un objet; utilisez  .* ou  ->*"
+
+#~ msgid "no match for call to `(%T) (%A)'"
+#~ msgstr "pas de concordance pour l'appel de « (%T) (%A) »"
+
+#~ msgid "call of `(%T) (%A)' is ambiguous"
+#~ msgstr "appel de « (%T) (%A) » est ambiguë"
+
+#~ msgid "%s for ternary 'operator?:' in '%E ? %E : %E'"
+#~ msgstr "%s pour « operator?: » ternaire dans « %E ? %E : %E »"
+
+#~ msgid "%s for 'operator%s' in '%E%s'"
+#~ msgstr "%s pour « operator%s » dans « %E%s »"
+
+#~ msgid "%s for 'operator[]' in '%E[%E]'"
+#~ msgstr "%s pour « operator[] » dans « %E[%E] »"
+
+#~ msgid "%s for '%s' in '%s %E'"
+#~ msgstr "%s pour « %s » dans « %s %E »"
+
+#~ msgid "%s for 'operator%s' in '%E %s %E'"
+#~ msgstr "%s pour « operator%s » dans « %E %s %E »"
+
+#~ msgid "%s for 'operator%s' in '%s%E'"
+#~ msgstr "%s pour « operator%s » dans « %s%E »"
+
+#~ msgid "ISO C++ forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C++ interdit l'omission du terme milieu de l'expression ?:"
+
+#~ msgid "`%E' has type `void' and is not a throw-expression"
+#~ msgstr "« %E » a le type « void » et n'est pas une expression de retour de type throw"
+
+#~ msgid "operands to ?: have different types"
+#~ msgstr "opérande vers ?: a différents types"
+
+#~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'"
+#~ msgstr "non concordance de type énuméré dans l'expression conditionnelle: « %T » vs « %T »"
+
+#~ msgid "enumeral and non-enumeral type in conditional expression"
+#~ msgstr "type énuméré et non énuméré dans l'expression conditionnelle"
+
+#~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead"
+#~ msgstr "pas « %D(int) » déclaré pour le postfixe « %s », essaie avec l'oprateur préfixe à la place"
+
+#~ msgid "using synthesized `%#D' for copy assignment"
+#~ msgstr "utilisation du synthétisé « %#D » pour l'affectaion par copie"
+
+#~ msgid "  where cfront would use `%#D'"
+#~ msgstr "  où cfront utiliserait « %#D »"
+
+#~ msgid "comparison between `%#T' and `%#T'"
+#~ msgstr "comparaison entre « %#T » et « %#T »"
+
+#~ msgid "no suitable `operator %s' for `%T'"
+#~ msgstr "pas « operator %s » adapté pour « %T »"
+
+#~ msgid "`%+#D' is private"
+#~ msgstr "« %+#D » est privé"
+
+#~ msgid "`%+#D' is protected"
+#~ msgstr "« %+#D » est protégé"
+
+#~ msgid "`%+#D' is inaccessible"
+#~ msgstr "« %+#D » et inaccessible"
+
+#~ msgid "within this context"
+#~ msgstr "à l'intérieur du contexte"
+
+#~ msgid "invalid conversion from `%T' to `%T'"
+#~ msgstr "conversion invalide de « %T » vers « %T »"
+
+#~ msgid "  initializing argument %P of `%D'"
+#~ msgstr "  initialisation de l'argument %P de « %D »"
+
+#~ msgid "cannot bind bitfield `%E' to `%T'"
+#~ msgstr "ne peut lier le champ de bits « %E » avec « %T »"
+
+#~ msgid "cannot bind packed field `%E' to `%T'"
+#~ msgstr "ne peut lier le champs empaqueté « %E » avec « %T »"
+
+#~ msgid "cannot bind rvalue `%E' to `%T'"
+#~ msgstr "ne peut lier la rvalue « %E » avec « %T »"
+
+#~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime"
+#~ msgstr "ne peut recevoir d'objets de type non POD « %#T » through « ... »; l'appel échouera lors de l'éxecution"
+
+#~ msgid "cannot receive objects of non-POD type `%#T' through `...'; call will abort at runtime"
+#~ msgstr "ne peut recevoir d'objets de type non POD « %#T » through « ... »; l'appel échouera lors de l'éxecution"
+
+#~ msgid "the default argument for parameter %d of `%D' has not yet been parsed"
+#~ msgstr "argument par défaut pour le paramètre %d de « %D » n'a pas encore été analysé"
+
+#~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers"
+#~ msgstr "passant « %T» comme «cet» argument de « %#D » écarte les qualificateurs"
+
+#~ msgid "`%T' is not an accessible base of `%T'"
+#~ msgstr "« %T » est une base accessible de « %T »"
+
+#~ msgid "could not find class$ field in java interface type `%T'"
+#~ msgstr "ne peut repérer le champ classe$ dans le type d'interface JAVA « %T »"
+
+#~ msgid "call to non-function `%D'"
+#~ msgstr "appel à une non fonction « %D »"
+
+#~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'"
+#~ msgstr "requête du membre « %D » dans « %E », lequel n'est pas de type aggrégat « %T »"
+
+#~ msgid "no matching function for call to `%T::%s(%A)%#V'"
+#~ msgstr "pas de fonction concordante pour l'appel à « %T::%s(%A)%#V »"
+
+#~ msgid "call of overloaded `%s(%A)' is ambiguous"
+#~ msgstr "appel du surchargé « %s(%A) » est ambiguë"
+
+#~ msgid "cannot call member function `%D' without object"
+#~ msgstr "ne peut appeler la fonction membre « %D » sans objet"
+
+#~ msgid "passing `%T' chooses `%T' over `%T'"
+#~ msgstr "passant « %T » à choisit « %T » au lieu de « %T »"
+
+#~ msgid "  in call to `%D'"
+#~ msgstr " dans l'appel de « %D »"
+
+#~ msgid "choosing `%D' over `%D'"
+#~ msgstr "choix de « %D » à la place de « %D »"
+
+#~ msgid "  for conversion from `%T' to `%T'"
+#~ msgstr " pour la conversion de « %T » vers « %T »"
+
+#~ msgid "  because conversion sequence for the argument is better"
+#~ msgstr "  parce que la séquence de conversion pour l'argument est meilleure"
+
+#~ msgid "ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:"
+#~ msgstr "ISO C++ indique qu'ils sont ambiguës même à travers la plus mauvaise conversion pour le premier que la plus mauvaise pour la seconde:"
+
+#~ msgid "candidate 1:"
+#~ msgstr "candidat 1:"
+
+#~ msgid "candidate 2:"
+#~ msgstr "candidat 2:"
+
+#~ msgid "could not convert `%E' to `%T'"
+#~ msgstr "ne peut convertir « %E » vers « %T »"
+
+#~ msgid "invalid initialization of non-const reference of type '%T' from a temporary of type '%T'"
+#~ msgstr "initialisation invalide pour une référence à un non constante de type « %T » à partir d'un type temporaire de type « %T »"
+
+#~ msgid "invalid initialization of reference of type '%T' from expression of type '%T'"
+#~ msgstr "initialisation invalide de référence d'un type « %T » à partir d'une expression de type « %T »"
+
+#~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'"
+#~ msgstr "ne peut convertir de la base « %T » à un type dérivé « %T » via la base virtuel « %T »"
+
+#~ msgid "Java class '%T' cannot have an implicit non-trivial destructor"
+#~ msgstr "classe Java « %T » ne peut avoir un destructeur implicite non trivial"
+
+#~ msgid "Java class '%T' cannot have a destructor"
+#~ msgstr "classe Java « %T » ne peut avoir un destructeur"
+
+#~ msgid "`%#D' and `%#D' cannot be overloaded"
+#~ msgstr "« %#D » et « %#D » ne peut être surchargé"
+
+#~ msgid "conflicting access specifications for method `%D', ignored"
+#~ msgstr "spécifications d'accès conflictuelles pour la méthode « %D », ignoré"
+
+#~ msgid "conflicting access specifications for field `%s', ignored"
+#~ msgstr "spécifications d'accès conflictuelles pour le champ « %s », ignoré"
+
+#~ msgid "`%D' names constructor"
+#~ msgstr "« %D » nomme le constructeur"
+
+#~ msgid "`%D' invalid in `%T'"
+#~ msgstr "« %D » invalide dans « %T »"
+
+#~ msgid "no members matching `%D' in `%#T'"
+#~ msgstr "aucun membre concordant « %D » dans « %#T »"
+
+#~ msgid "`%D' invalid in `%#T'"
+#~ msgstr "« %D » invalide dans « %#T »"
+
+#~ msgid "  because of local method `%#D' with same name"
+#~ msgstr "  parce que la méthode locale « %#D » a le même nom"
+
+#~ msgid "  because of local member `%#D' with same name"
+#~ msgstr "  parce que le membre local « %#D » a le même nom"
+
+#~ msgid "base class `%#T' has a non-virtual destructor"
+#~ msgstr "classe de base « %#T » a un destructeur non virtuel"
+
+#~ msgid "base `%T' with only non-default constructor in class without a constructor"
+#~ msgstr "base « %T » avec seulement le constructeur non par défaut dans la classe sans un constructeur"
+
+#~ msgid "all member functions in class `%T' are private"
+#~ msgstr "toutes les fonctions membres de la classe « %T » sont privés"
+
+#~ msgid "`%#T' only defines a private destructor and has no friends"
+#~ msgstr "« %#T » définit seulement les constructeurs privés et n'a pas d'amis"
+
+#~ msgid "`%#T' only defines private constructors and has no friends"
+#~ msgstr "« %#T » définit seulement les constructeurs privés et n'a pas d'amis"
+
+#~ msgid "no unique final overrider for `%D' in `%T'"
+#~ msgstr "pas d'écraseur unique final pour « %D » dans « %T »"
+
+#~ msgid "`%D' was hidden"
+#~ msgstr "« %D » était caché"
+
+#~ msgid "  by `%D'"
+#~ msgstr "  par « %D »"
+
+#~ msgid "`%#D' invalid; an anonymous union can only have non-static data members"
+#~ msgstr "« %#D » invalide; une union anonyme peut seulement avoir des données non statiques de membres"
+
+#~ msgid "private member `%#D' in anonymous union"
+#~ msgstr "membre privé « %#D » dans une union anonyme"
+
+#~ msgid "protected member `%#D' in anonymous union"
+#~ msgstr "membre protégé « %#D » dans une union anonyme"
+
+#~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor"
+#~ msgstr "disposition vtable pour la classe « %T » peut ne pas être compatible avec l'ABI et peut être modifié dans une version future deGCC en raison d'un destructeur virtuel implicite"
+
+#~ msgid "bit-field `%#D' with non-integral type"
+#~ msgstr "largeur du champ de bits « %#D » n'est pas une constante entière"
+
+#~ msgid "bit-field `%D' width not an integer constant"
+#~ msgstr "largeur du champ de bits « %D » n'est pas une constante entière"
+
+#~ msgid "negative width in bit-field `%D'"
+#~ msgstr "largeur négative du champ de bits « %D »"
+
+#~ msgid "zero width for bit-field `%D'"
+#~ msgstr "largeur zéro pour le champ de bits « %D »"
+
+#~ msgid "width of `%D' exceeds its type"
+#~ msgstr "largeur de « %D » excède son type"
+
+#~ msgid "`%D' is too small to hold all values of `%#T'"
+#~ msgstr "« %D » est trop petit pour contenir toutes les valeurs de « %#T »"
+
+#~ msgid "member `%#D' with constructor not allowed in union"
+#~ msgstr "membre « %#D » avec consructeur n'est pas permis dans l'union"
+
+#~ msgid "member `%#D' with destructor not allowed in union"
+#~ msgstr "membre « %#D » avec destructeur n'est pas permis dans l'union"
+
+#~ msgid "member `%#D' with copy assignment operator not allowed in union"
+#~ msgstr "membre « %#D » avec opérateur d,affectation par copie n'st pas permis dans l'union"
+
+#~ msgid "multiple fields in union `%T' initialized"
+#~ msgstr "champs multiples dans l'union « %T » initialisés"
+
+#~ msgid "ignoring packed attribute on unpacked non-POD field `%#D'"
+#~ msgstr "attribut empaqueté ignoré sur un champ non POD non paqueté « %#D »"
+
+#~ msgid "`%D' may not be static because it is a member of a union"
+#~ msgstr "« %D » peut ne pas être statique parce qu'il est membre de l'uniont"
+
+#~ msgid "`%D' may not have reference type `%T' because it is a member of a union"
+#~ msgstr "« %D » peut ne pas avoir de type référencé « %T » parce qu'il est membre de l'union"
+
+#~ msgid "field `%D' in local class cannot be static"
+#~ msgstr "champ « %D » dans une classe locale ne peut être statique"
+
+#~ msgid "field `%D' invalidly declared function type"
+#~ msgstr "champ « %D » incorrectement validé comme un type de fonction"
+
+#~ msgid "field `%D' invalidly declared method type"
+#~ msgstr "champ « %D » incorrectement validé comme un type de méthode"
+
+#~ msgid "non-static reference `%#D' in class without a constructor"
+#~ msgstr "référence non statique « %#D » dans la classe sans un constructeur"
+
+#~ msgid "non-static const member `%#D' in class without a constructor"
+#~ msgstr "constante non statique de membre « %#D » dans la classe sans un constructeur"
+
+#~ msgid "field `%#D' with same name as class"
+#~ msgstr "champ « %#D » avec le même nom qu'une classe"
+
+#~ msgid "`%#T' has pointer data members"
+#~ msgstr "« %#T » a un pointeur vers un membre de données"
+
+#~ msgid "  but does not override `%T(const %T&)'"
+#~ msgstr "  mais n'écrase pas « %T(const %T&) »"
+
+#~ msgid "  or `operator=(const %T&)'"
+#~ msgstr "  ou « operator=(const %T&) »"
+
+#~ msgid "  but does not override `operator=(const %T&)'"
+#~ msgstr "  mais n'écrase pas « operator=(const %T&) »"
+
+#~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC"
+#~ msgstr "décalage d'une base vide « %T » peut ne pas être compatible avec l'ABI et peut être modifié dans une version future de GCC"
+
+#~ msgid "class `%T' will be considered nearly empty in a future version of GCC"
+#~ msgstr "classe « %T » devra être considérée pratiquement vide dans une version future de GCC"
+
+#~ msgid "initializer specified for non-virtual method `%D'"
+#~ msgstr "initialisation spécifiée pour une méthode non virtuelle « %D »"
+
+#~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "décalage relatif d'une base virtuelle « %T » n'est pas compatible avec l'ABI et peut être modifié dans une version future de GCC"
+
+#~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "base directe « %T » inaccessible dans « %T » en raison de l'ambiguité"
+
+#~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "base virtuelle « %T » inaccessible dans « %T » en raison de l'ambiguité"
+
+#~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC"
+#~ msgstr "taille assignée à « %T » peut ne pas être compatible avec l'ABI et peut être modifié dans une version future de GCC"
+
+#~ msgid "the offset of `%D' may not be ABI-compliant and may change in a future version of GCC"
+#~ msgstr "le décalage relatif de « %D » peut ne pas être compatible avec l'ABI et peut être modifié dans une version future de GCC"
+
+#~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "le décalage relatif de « %D » peut ne pas être compatible avec l'ABI et peut être modifié dans une version future de GCC"
+
+#~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC"
+#~ msgstr "« %D » contient des classes vides lesquelles peuvent placer les classes de base à une localisation différente dans une version future de GCC"
+
+#~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC"
+#~ msgstr "disposition des classes est dérivés de la classe vide « %T » peut être modifiée dans une version future de GCC"
+
+#~ msgid "redefinition of `%#T'"
+#~ msgstr "redéfinition de « %#T »"
+
+#~ msgid "`%#T' has virtual functions but non-virtual destructor"
+#~ msgstr "« %#T » a des fonctions virtuelles mais un destructeur non virtuel"
+
+#~ msgid "trying to finish struct, but kicked out due to previous parse errors"
+#~ msgstr "tentative de complétion du struct, mais a été stoppé en raison d'erreurs précédentes d'analyses syntaxiques"
+
+#~ msgid "language string `\"%s\"' not recognized"
+#~ msgstr "chaîne du langage « \"%s\" » n'est pas reconnue"
+
+#~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'"
+#~ msgstr "ne peut résoudre la fonction surchargé « %D » basé sur la conversion vers le type « %T »"
+
+#~ msgid "no matches converting function `%D' to type `%#T'"
+#~ msgstr "pas de concordance de conversion de fonction « %D » vers le type « %#T »"
+
+#~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous"
+#~ msgstr "conversion d'une fonction surchargée « %D » vers le type « %#T » est ambiguë"
+
+#~ msgid "assuming pointer to member `%D'"
+#~ msgstr "pointeur assumé vers le membre « %D »"
+
+#~ msgid "(a pointer to member can only be formed with `&%E')"
+#~ msgstr "(un pointeur vers un membre peut seulement être formé avec «&%E»)"
+
+#~ msgid "not enough type information"
+#~ msgstr "pas assez d'information sur le type"
+
+#~ msgid "argument of type `%T' does not match `%T'"
+#~ msgstr "argument de type « %T » ne concorde pas avec « %T »"
+
+#~ msgid "invalid operation on uninstantiated type"
+#~ msgstr "opération invalide sur un type non instancié"
+
+#~ msgid "declaration of `%#D'"
+#~ msgstr "déclaration de « %#D »"
+
+#~ msgid "changes meaning of `%D' from `%+#D'"
+#~ msgstr "changements signifiant de « %D » à partir de « %+#D »"
+
+#~ msgid "inter-module optimisations not implemented yet"
+#~ msgstr "les optimisations inter-module n'est pas implanté encore"
+
+#~ msgid "can't convert from incomplete type `%T' to `%T'"
+#~ msgstr "ne peut convertir d'un type incomplet « %T » vers « %T »"
+
+#~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous"
+#~ msgstr "conversion de « %E » à partir de « %T » vers « %T » est ambiguë"
+
+#~ msgid "converting from `%T' to `%T'"
+#~ msgstr "conversion de « %T » vers « %T »"
+
+#~ msgid "cannot convert `%E' from type `%T' to type `%T'"
+#~ msgstr "ne peut convertir « %E » du type « %T » vers le type « %T »"
+
+#~ msgid "pointer to member cast from `%T' to `%T' is via virtual base"
+#~ msgstr "pointeur vers un membre transtypé de « %T » à « %T » est fait via une base virtuelle"
+
+#~ msgid "invalid conversion from '%T' to '%T'"
+#~ msgstr "conversion invalide de « %T » vers « %T »"
+
+#~ msgid "conversion from `%T' to `%T' discards qualifiers"
+#~ msgstr "conversion de « %T » à « %T » écarte les qualificateurs"
+
+#~ msgid "casting `%T' to `%T' does not dereference pointer"
+#~ msgstr "transtypage de « %T » vers « %T » ne fait pas de dé-référence de pointeur"
+
+#~ msgid "cannot convert type `%T' to type `%T'"
+#~ msgstr "ne peut convertir type « %T » vers le type « %T »"
+
+#~ msgid "conversion from `%#T' to `%#T'"
+#~ msgstr "conversion de « %#T » vers « %#T »"
+
+#~ msgid "`%#T' used where a `%T' was expected"
+#~ msgstr "« %#T » utilisé où « %T » était attendu"
+
+#~ msgid "`%#T' used where a floating point value was expected"
+#~ msgstr "« %#T » utilisé où un nombre flottant était attendu"
+
+#~ msgid "conversion from `%T' to non-scalar type `%T' requested"
+#~ msgstr "conversion de « %T » vers un type non scalaire « %T » demandée"
+
+#~ msgid "object of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "objet de type incomplet « %T » ne sera pas accessible dans %s"
+
+#~ msgid "object of type `%T' will not be accessed in %s"
+#~ msgstr "objet de type « %T » ne sera pas acccessible dans %s"
+
+#~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "objet « %E » d'un type incomplet « %T » ne sera pas accessible dans %s"
+
+#~ msgid "%s cannot resolve address of overloaded function"
+#~ msgstr "%s ne peut résoudre l'adresse la fonction surchargée"
+
+#~ msgid "%s is a reference, not call, to function `%E'"
+#~ msgstr "%s est un référence, pas un appel, à la fonction « %E »"
+
+#~ msgid "%s has no effect"
+#~ msgstr "%s n'a pas d'effet"
+
+#~ msgid "converting NULL to non-pointer type"
+#~ msgstr "conversion d'un NULL vers un type non pointeur"
+
+#~ msgid "ambiguous default type conversion from `%T'"
+#~ msgstr "conversion de type par défaut ambiguë à partir de « %T »"
+
+#~ msgid "  candidate conversions include `%D' and `%D'"
+#~ msgstr "  conversions de candidat inclut « %D » et « %D »"
+
+#~ msgid "label `%D' used but not defined"
+#~ msgstr "étiquette « %D » utilisée mais non définie"
+
+#~ msgid "label `%D' defined but not used"
+#~ msgstr "étiquette « %D » définie mais non utilisée"
+
+#~ msgid "previous declaration of `%D'"
+#~ msgstr "déclaration précédente de « %D »"
+
+#~ msgid "%Jfunction '%D' redeclared as inline"
+#~ msgstr "%Jfonction « %D » redéclarée comme étant enligne"
+
+#~ msgid "%Jprevious declaration of '%D' with attribute noinline"
+#~ msgstr "%Jdéclaration précédente de « %D » avec l'attribut non enligne"
+
+#~ msgid "%Jfunction '%D' redeclared with attribute noinline"
+#~ msgstr "%Jfonction « %D » redéclarée avec l'attribut non enligne"
+
+#~ msgid "%Jprevious declaration of '%D' was inline"
+#~ msgstr "%Jdéclaration précédente de « %D » était enligne"
+
+#~ msgid "shadowing %s function `%#D'"
+#~ msgstr "%s masque la fonction « %#D »"
+
+#~ msgid "library function `%#D' redeclared as non-function `%#D'"
+#~ msgstr "fonction « %#D » de la bibliothèque redéclarée comme n'étant pas une fonction « %#D »"
+
+#~ msgid "conflicts with built-in declaration `%#D'"
+#~ msgstr "conflits avec la déclaration interne de « %#D »"
+
+#~ msgid "new declaration `%#D'"
+#~ msgstr "nouvelle déclaration de « %#D »"
+
+#~ msgid "ambiguates built-in declaration `%#D'"
+#~ msgstr "ambiguités de la déclaration interne de « %#D »"
+
+#~ msgid "`%#D' redeclared as different kind of symbol"
+#~ msgstr "« %#D » redéclaré comme une sorte différente de symbole"
+
+#~ msgid "previous declaration of `%#D'"
+#~ msgstr "déclaration précédente de « %#D »"
+
+#~ msgid "declaration of template `%#D'"
+#~ msgstr "déclaration du canevas « %#D »"
+
+#~ msgid "conflicts with previous declaration `%#D'"
+#~ msgstr "conflits avec la déclaration précédente de « %#D »"
+
+#~ msgid "ambiguates old declaration `%#D'"
+#~ msgstr "ambiguités d'une vieille déclaration de « %#D »"
+
+#~ msgid "declaration of C function `%#D' conflicts with"
+#~ msgstr "déclaration de la fonction C « %#D » en conflit avec"
+
+#~ msgid "previous declaration `%#D' here"
+#~ msgstr "déclaration précédente de « %#D » ici"
+
+#~ msgid "conflicting declaration '%#D'"
+#~ msgstr "déclaration conflictuelle « %#D »"
+
+#~ msgid "'%D' has a previous declaration as `%#D'"
+#~ msgstr "« %D » a une déclaration précédente tel que « %#D »"
+
+#~ msgid "`%#D' previously defined here"
+#~ msgstr "« %#D » précédemment défini ici"
+
+#~ msgid "`%#D' previously declared here"
+#~ msgstr "« %#D » précédemment déclaré ici"
+
+#~ msgid "prototype for `%#D'"
+#~ msgstr "prototype de « %#D »"
+
+#~ msgid "%Jfollows non-prototype definition here"
+#~ msgstr "%Jsuit la définition d'un non prototype ici"
+
+#~ msgid "previous declaration of `%#D' with %L linkage"
+#~ msgstr "déclaration précédente de « %#D » avec le lien %L"
+
+#~ msgid "conflicts with new declaration with %L linkage"
+#~ msgstr "conflits avec la nouvelle déclaration avec le lien %L"
+
+#~ msgid "default argument given for parameter %d of `%#D'"
+#~ msgstr "argument par défaut donné pour le paramètre %d de « %#D »"
+
+#~ msgid "after previous specification in `%#D'"
+#~ msgstr "après la déclaration précédente dans « %#D »"
+
+#~ msgid "`%#D' was used before it was declared inline"
+#~ msgstr "« %#D » a été utilisé avant qu'il ne soit déclaré enligne"
+
+#~ msgid "%Jprevious non-inline declaration here"
+#~ msgstr "%Jdéclaration précédente non enligne ici"
+
+#~ msgid "redundant redeclaration of `%D' in same scope"
+#~ msgstr "déclaration redondante de « %D » dans la même étendue"
+
+#~ msgid "declaration of `%F' throws different exceptions"
+#~ msgstr "déclaration de « %F » amène différentes exceptions"
+
+#~ msgid "than previous declaration `%F'"
+#~ msgstr "qu'une précédente déclaratio « %F »"
+
+#~ msgid "explicit specialization of %D after first use"
+#~ msgstr "spécialisation explicite de %D après la première utilisation"
+
+#~ msgid "%J'%D': visibility attribute ignored because it"
+#~ msgstr "%J« %D »: attribut de visibilité ignoré en cause de lui"
+
+#~ msgid "%Jconflicts with previous declaration here"
+#~ msgstr "%Jentre en conflit avec la déclaration précédente ici"
+
+#~ msgid "implicit declaration of function `%#D'"
+#~ msgstr "déclaration implicite de la fonction « %#D »"
+
+#~ msgid "label `%s' referenced outside of any function"
+#~ msgstr "étiquette « %s » référencée à l'extérieur de n'importe quelle fonction"
+
+#~ msgid "jump to label `%D'"
+#~ msgstr "saut à l'étiquette « %D »"
+
+#~ msgid "jump to case label"
+#~ msgstr "saut à l'étiquette du « case »"
+
+#~ msgid "%H  from here"
+#~ msgstr "%H  à partir d'ici"
+
+#~ msgid "  crosses initialization of `%#D'"
+#~ msgstr " initialisation croisée pour « %#D »"
+
+#~ msgid "  enters scope of non-POD `%#D'"
+#~ msgstr "  entre dans la porté d'un non POD « %#D »"
+
+#~ msgid "  enters try block"
+#~ msgstr "  entre dans le bloc d'essais"
+
+#~ msgid "  enters catch block"
+#~ msgstr "  entre dans le bloc d'interceptions"
+
+#~ msgid "  from here"
+#~ msgstr "  à partir d'ici"
+
+#~ msgid "%J  enters catch block"
+#~ msgstr "%J  entre dans le bloc d'interception"
+
+#~ msgid "  skips initialization of `%#D'"
+#~ msgstr " saut d'initialisation pour « %#D »"
+
+#~ msgid "label named wchar_t"
+#~ msgstr "étiquette nommée wchar_t"
+
+#~ msgid "duplicate label `%D'"
+#~ msgstr "étiquette « %D » apparaît en double"
+
+#~ msgid "`%D' used without template parameters"
+#~ msgstr "« %D » utilisé sans canevas de paramétres"
+
+#~ msgid "no class template named `%#T' in `%#T'"
+#~ msgstr "pas de canevas de classe nommé « %#T » in « %#T »"
+
+#~ msgid "no type named `%#T' in `%#T'"
+#~ msgstr "pas de type nommé dans « %#T » dans « %#T »"
+
+#~ msgid "%Jan anonymous union cannot have function members"
+#~ msgstr "%Jun UNION  anonyme ne peut avoir de fonctions membres"
+
+#~ msgid "member %#D' with constructor not allowed in anonymous aggregate"
+#~ msgstr "membre « %#D » avec constructeur n'est pas permis dans un aggrégat anonyme"
+
+#~ msgid "member %#D' with destructor not allowed in anonymous aggregate"
+#~ msgstr "membre « %#D » avec destructeur n'est pas permis dans un aggrégat anonyme"
+
+#~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate"
+#~ msgstr "membre « %#D » avec opérateur d'affectation par copie n'est pas permis dans un aggrégat anonyme"
+
+#~ msgid "redeclaration of C++ built-in type `%T'"
+#~ msgstr "redéclaration du type interne C++ « %T »"
+
+#~ msgid "multiple types in one declaration"
+#~ msgstr "types multiples dans une déclaration"
+
+#~ msgid "missing type-name in typedef-declaration"
+#~ msgstr "nom de type manquant dans la déclaration typedef"
+
+#~ msgid "ISO C++ prohibits anonymous structs"
+#~ msgstr "ISO C++ interdit les structures anonymes"
+
+#~ msgid "`%D' can only be specified for functions"
+#~ msgstr "« %D » ne peut seulement être spécifier pour les fonctions"
+
+#~ msgid "`%D' can only be specified inside a class"
+#~ msgstr "« %D » peut seulement être spécifié à l'intérieur d'une classe"
+
+#~ msgid "`%D' can only be specified for constructors"
+#~ msgstr "« %D » ne peut seulement être spécifié pour les constructeurs"
+
+#~ msgid "`%D' can only be specified for objects and functions"
+#~ msgstr "« %D » ne peut seulement être spécifié pour les objets et les fonctions"
+
+#~ msgid "typedef `%D' is initialized (use __typeof__ instead)"
+#~ msgstr "typedef « %D » est initialisé (use __typeof__ instead)"
+
+#~ msgid "function `%#D' is initialized like a variable"
+#~ msgstr "fonction « %#D » est initialisée comme une variable"
+
+#~ msgid "declaration of `%#D' has `extern' and is initialized"
+#~ msgstr "déclaration de « %#D » est externe et initialisé"
+
+#~ msgid "`%#D' is not a static member of `%#T'"
+#~ msgstr "« %#D » n'est pas un membre statique de « %#T »"
+
+#~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'"
+#~ msgstr "ISO C++ ne permet pas que « %T::%D » soit défini comme « %T::%D »"
+
+#~ msgid "duplicate initialization of %D"
+#~ msgstr "initialisation en double de %D"
+
+#~ msgid "declaration of `%#D' outside of class is not definition"
+#~ msgstr "déclaraion de « %#D » en dehors de la classe n'est pas une définition"
+
+#~ msgid "variable `%#D' has initializer but incomplete type"
+#~ msgstr "la variable « %#D » est initialisée, mais a un type incomplet"
+
+#~ msgid "elements of array `%#D' have incomplete type"
+#~ msgstr "éléments du tableau « %#D » ont un type incomplet"
+
+#~ msgid "aggregate `%#D' has incomplete type and cannot be defined"
+#~ msgstr "aggrégat « %#D » a un type incomplet et ne peut être défini"
+
+#~ msgid "`%D' declared as reference but not initialized"
+#~ msgstr "« %D » déclaré comme référence mais n'est pas initialisé"
+
+#~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'"
+#~ msgstr "ISO C++ interdit l'usage de liste d'initialiseur pour initialiser la référence « %D »"
+
+#~ msgid "cannot initialize `%T' from `%T'"
+#~ msgstr "ne peut initialiser « %T » à partir de « %T »"
+
+#~ msgid "initializer fails to determine size of `%D'"
+#~ msgstr "l'initialisation n'a pu déterminer la taille de « %D »"
+
+#~ msgid "array size missing in `%D'"
+#~ msgstr "taille de tableau manquante dans « %D »"
+
+#~ msgid "zero-size array `%D'"
+#~ msgstr "tableau « %D » de taille zéro"
+
+#~ msgid "storage size of `%D' isn't known"
+#~ msgstr "taille de stockage de « %D » n'est pas connue"
+
+#~ msgid "storage size of `%D' isn't constant"
+#~ msgstr "taille de stockage de « %D » n'est pas une constante"
+
+#~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)"
+#~ msgstr "désolé: sémantique de fonction enligne de données statiques « %#D » est erronée (vous obtiendrez de multiples copies)"
+
+#~ msgid "%J  you can work around this by removing the initializer"
+#~ msgstr "%J  vous pouvez contourner cela en enlevant l'initialiseur"
+
+#~ msgid "uninitialized const `%D'"
+#~ msgstr "constante « %D » non initialisée"
+
+#~ msgid "brace-enclosed initializer used to initialize `%T'"
+#~ msgstr "initialiseur utilisé entre accolades pour initialiser « %T »"
+
+#~ msgid "initializer for `%T' must be brace-enclosed"
+#~ msgstr "initialiseur de « %T » doit être entre accolades"
+
+#~ msgid "ISO C++ does not allow designated initializers"
+#~ msgstr "ISO C++ ne permet de désigner les initialiseurs"
+
+#~ msgid "`%T' has no non-static data member named `%D'"
+#~ msgstr "« %T » n'a pas de membre de données non statique nommé « %D »"
+
+#~ msgid "name `%D' used in a GNU-style designated initializer for an array"
+#~ msgstr "nom « %D » utilisé dans un style GNU de l'initialisateur désigné pour un tableau"
+
+#~ msgid "too many initializers for `%T'"
+#~ msgstr "trop d'initialiseurs pour « %T »"
+
+#~ msgid "variable-sized object `%D' may not be initialized"
+#~ msgstr "objet de taille variable « %D » peut ne pas être initialisé"
+
+#~ msgid "`%D' has incomplete type"
+#~ msgstr "« %D » a un type incomplet"
+
+#~ msgid "`%D' must be initialized by constructor, not by `{...}'"
+#~ msgstr "« %D » doit être initialisé par un constructeur, non pas par « {...} »"
+
+#~ msgid "structure `%D' with uninitialized const members"
+#~ msgstr "structure « %D » avec constantes non initialisées de membres"
+
+#~ msgid "structure `%D' with uninitialized reference members"
+#~ msgstr "structure « %D » avec références non initialisées de membres"
+
+#~ msgid "assignment (not initialization) in declaration"
+#~ msgstr "affectation (non pas l'initialisation) dans la déclaration"
+
+#~ msgid "cannot initialize `%D' to namespace `%D'"
+#~ msgstr "ne peut initialiser « %D » à l'espace de noms « %D »"
+
+#~ msgid "shadowing previous type declaration of `%#D'"
+#~ msgstr "masque la déclaration précédente de « %#D »"
+
+#~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'"
+#~ msgstr "« %D » ne peut être utilisé comme un thread local parce qu'il a un non POD de type « %T »"
+
+#~ msgid "`%D' is thread-local and so cannot be dynamically initialized"
+#~ msgstr "« %D » est un thread local et ne peut donc pas être initialisé dynamiquement"
+
+#~ msgid "invalid catch parameter"
+#~ msgstr "paramètre d'interception invalide"
+
+#~ msgid "destructor for alien class `%T' cannot be a member"
+#~ msgstr "destructeur pour la classe étrangère « %T » ne peut être un membre"
+
+#~ msgid "constructor for alien class `%T' cannot be a member"
+#~ msgstr "constructeur pour la classe étrangère « %T » ne peut être un membre"
+
+#~ msgid "`%D' declared as a `virtual' %s"
+#~ msgstr "« %D» déclaré comme « virtual » %s"
+
+#~ msgid "`%D' declared as an `inline' %s"
+#~ msgstr "« %D» déclaré comme « inline » %s"
+
+#~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration"
+#~ msgstr "spécificateurs de fonction « const» et «volatile» invalide pour « %D » dans la déclaration %s"
+
+#~ msgid "`%D' declared as a friend"
+#~ msgstr "« %D » déclaré comme un ami"
+
+#~ msgid "`%D' declared with an exception specification"
+#~ msgstr "« %D » déclaré avec une exception de spécification"
+
+#~ msgid "cannot declare `::main' to be a template"
+#~ msgstr "ne peut déclarer « ::main » comme étant un canevas"
+
+#~ msgid "cannot declare `::main' to be inline"
+#~ msgstr "ne peut déclarer «::main» à être enligne"
+
+#~ msgid "cannot declare `::main' to be static"
+#~ msgstr "ne peut déclarer « ::main » comme étant static"
+
+#~ msgid "`main' must return `int'"
+#~ msgstr "« main» doit retourner « int »"
+
+#~ msgid "non-local function `%#D' uses anonymous type"
+#~ msgstr "fonction non locale « %#D » utilise un type anonyme"
+
+#~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage"
+#~ msgstr "« %#D » ne réfère pas à un type non qualifié, aussi il n'est pas utilisé pour la liaison"
+
+#~ msgid "non-local function `%#D' uses local type `%T'"
+#~ msgstr "fonction non locale « %#D » utilise un type local « %T »"
+
+#~ msgid "%smember function `%D' cannot have `%T' method qualifier"
+#~ msgstr "%sfonction membre « %D » ne peut avoir « %T » comme qualificateur de méthode"
+
+#~ msgid "defining explicit specialization `%D' in friend declaration"
+#~ msgstr "définition explicite de spécialisation « %D » dans lka déclaration ami"
+
+#~ msgid "invalid use of template-id `%D' in declaration of primary template"
+#~ msgstr "utilisation invalide du template-id « %D » dans la déclaration du canevas primaire"
+
+#~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "arguments par défaut ne sont pas permis dans la déclaration amie de la spécialisation du canevas « %D »"
+
+#~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "« inline» n'estpas permis dans la déclaration amie de la spécialisation du canevas « %D »"
+
+#~ msgid "definition of implicitly-declared `%D'"
+#~ msgstr "définition implicitement déclarée « %D »"
+
+#~ msgid "no `%#D' member function declared in class `%T'"
+#~ msgstr "pas de fonction membre « %#D » déclarée dans la classe « %T »"
+
+#~ msgid "non-local variable `%#D' uses local type `%T'"
+#~ msgstr "variable non locale « %#D » utilise un type local « %T »"
+
+#~ msgid "invalid in-class initialization of static data member of non-integral type `%T'"
+#~ msgstr "initialisation invalide dans la class de données de membre statiques d'un non entier de type « %T »"
+
+#~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'"
+#~ msgstr "ISO C++ interdit l'initialisation intra-classe d'un membre statique non constant « %D »"
+
+#~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'"
+#~ msgstr "ISO C++ interdit l'initialisation d'une membre constant « %D » d'un type non entier « %T »"
+
+#~ msgid "size of array `%D' has non-integral type `%T'"
+#~ msgstr "taille du tableau « %D » n'est pas de type entier « %T »"
+
+#~ msgid "size of array has non-integral type `%T'"
+#~ msgstr "taille du tableau a type non entier « %T »"
+
+#~ msgid "size of array `%D' is negative"
+#~ msgstr "taille du tableau « %D » est négative"
+
+#~ msgid "size of array is negative"
+#~ msgstr "taille du tableau est négative"
+
+#~ msgid "ISO C++ forbids zero-size array `%D'"
+#~ msgstr "ISO C++ interdit les tableaux de taille zéro « %D »"
+
+#~ msgid "ISO C++ forbids zero-size array"
+#~ msgstr "ISO C++ interdit les tableaux de taille zéro"
+
+#~ msgid "size of array `%D' is not an integral constant-expression"
+#~ msgstr "taille du tableau « %D » n'a pas une expression de constante de type entier"
+
+#~ msgid "size of array is not an integral constant-expression"
+#~ msgstr "taille du tableau n'est pas une expression de constante de type entier"
+
+#~ msgid "ISO C++ forbids variable-size array `%D'"
+#~ msgstr "ISO C++ interdit les tableaus de taille variable « %D »"
+
+#~ msgid "ISO C++ forbids variable-size array"
+#~ msgstr "ISO C++ interdit le tableau de taille variable"
+
+#~ msgid "overflow in array dimension"
+#~ msgstr "débordement dans les dimensions du tableau"
+
+#~ msgid "declaration of `%D' as %s"
+#~ msgstr "déclaration de « %D » comme « %s »"
+
+#~ msgid "creating %s"
+#~ msgstr "création de %s"
+
+#~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "déclaration de « %D » comme tableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la première"
+
+#~ msgid "multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "tableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la première"
+
+#~ msgid "return type specification for constructor invalid"
+#~ msgstr "spécification de type retourné pour un constructeur est invalide"
+
+#~ msgid "return type specification for destructor invalid"
+#~ msgstr "spécification de type retourné pour un destructeur est invalide"
+
+#~ msgid "operator `%T' declared to return `%T'"
+#~ msgstr "opérateur « %T » déclaré comme retournant « %T »"
+
+#~ msgid "return type specified for `operator %T'"
+#~ msgstr "type spécifié retourné pour l'opérateur « %T »"
+
+#~ msgid "destructors must be member functions"
+#~ msgstr "les destructeurs doivent être des fonctions membres"
+
+#~ msgid "destructor `%T' must match class name `%T'"
+#~ msgstr "destructeur « %T » doit concorder avec le nom de la classe « %T »"
+
+#~ msgid "declarator-id missing; using reserved word `%D'"
+#~ msgstr "declarator-id manquant; utilisation du mot réservé « %D »"
+
+#~ msgid "type `%T' is not derived from type `%T'"
+#~ msgstr "type « %T » n'est pas dérivé du type « %T »"
+
+#~ msgid "`%T' specified as declarator-id"
+#~ msgstr "« %T » spécifié comme declarator-id"
+
+#~ msgid "  perhaps you want `%T' for a constructor"
+#~ msgstr "  peut-être que vous voulez « %T » comme constructeur"
+
+#~ msgid "invalid use of template-name '%E' in a declarator"
+#~ msgstr "utilisation invalide du template-name « %E » dans le déclarateur"
+
+#~ msgid "declaration of `%D' as non-function"
+#~ msgstr "déclaration de « %D » comme non-fonction"
+
+#~ msgid "`bool' is now a keyword"
+#~ msgstr "« bool » est maintenant un mot clé"
+
+#~ msgid "extraneous `%T' ignored"
+#~ msgstr "« %T » surperflu ignoré"
+
+#~ msgid "multiple declarations `%T' and `%T'"
+#~ msgstr "multiples déclarations « %T » et « %T »"
+
+#~ msgid "ISO C++ does not support `long long'"
+#~ msgstr "ISO C++ ne permet pas « long long »"
+
+#~ msgid "ISO C++ forbids declaration of `%s' with no type"
+#~ msgstr "ISO C++ interdit la déclaration de « %s » sans type"
+
+#~ msgid "short, signed or unsigned invalid for `%s'"
+#~ msgstr "short, signed ou unsigned est invalide pour « %s »"
+
+#~ msgid "long and short specified together for `%s'"
+#~ msgstr "long et short spécifiés ensembles pour « %s »"
+
+#~ msgid "signed and unsigned given together for `%s'"
+#~ msgstr "signed et unsigned donnés ensembles pour « %s »"
+
+#~ msgid "qualifiers are not allowed on declaration of `operator %T'"
+#~ msgstr "qualificateurs ne sont pas permis dans la déclaration de « operator %T »"
+
+#~ msgid "member `%D' cannot be declared both virtual and static"
+#~ msgstr "membre « %D » ne peut être déclaré virtuel et statique"
+
+#~ msgid "`%T::%D' is not a valid declarator"
+#~ msgstr "« %T::%D » n'est pas un déclarateur valide"
+
+#~ msgid "storage class specifiers invalid in parameter declarations"
+#~ msgstr "spécificateurs de classe de stockage invalides dans la déclaration des paramètres"
+
+#~ msgid "typedef declaration invalid in parameter declaration"
+#~ msgstr "déclaration typedef invalide dans le paramètre de la déclaration"
+
+#~ msgid "virtual outside class declaration"
+#~ msgstr "virtuel en dehors de la déclaration de classe"
+
+#~ msgid "storage class specified for %s `%s'"
+#~ msgstr "classe de stockage spécifiée pour %s « %s »"
+
+#~ msgid "top-level declaration of `%s' specifies `auto'"
+#~ msgstr "la déclaration hors de toute fonction de « %s » a spécifié « auto »"
+
+#~ msgid "storage class specifiers invalid in friend function declarations"
+#~ msgstr "spécificateurs de classe de stockage invalide dans les déclarations de fonction amie"
+
+#~ msgid "destructor cannot be static member function"
+#~ msgstr "le destructeur ne peut être une fonction membre statique"
+
+#~ msgid "destructors may not be `%s'"
+#~ msgstr "destructeurs ne peut être « %s »"
+
+#~ msgid "constructor cannot be static member function"
+#~ msgstr "le constructeur ne peut être une fonction membre statique"
+
+#~ msgid "constructors cannot be declared virtual"
+#~ msgstr "constructeurs ne peut être déclarés virtuels"
+
+#~ msgid "constructors may not be `%s'"
+#~ msgstr "constructeurs ne peuvent pas être « %s »"
+
+#~ msgid "return value type specifier for constructor ignored"
+#~ msgstr "type de valeur retournée d'un spécificateur pour un constructeur est ignoré"
+
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "ne peut initialiser la fonction amie « %s »"
+
+#~ msgid "virtual functions cannot be friends"
+#~ msgstr "fonctions virtuelles ne peuvent être amies"
+
+#~ msgid "friend declaration not in class definition"
+#~ msgstr "déclaration amie n'est pas dans la définition de classe"
+
+#~ msgid "can't define friend function `%s' in a local class definition"
+#~ msgstr "ne peut définir une fonction amie « %s » dans une définition locale de classe"
+
+#~ msgid "destructors may not have parameters"
+#~ msgstr "destructeurs ne peuvent pas avoir de paramètre"
+
+#~ msgid "cannot declare reference to `%#T'"
+#~ msgstr "ne peut déclarer une référence vers « %#T »"
+
+#~ msgid "cannot declare pointer to `%#T'"
+#~ msgstr "ne peut déclarer un pointeur vers « %#T »"
+
+#~ msgid "cannot declare pointer to `%#T' member"
+#~ msgstr "ne peut déclarer un pointeur vers le membre « %#T »"
+
+#~ msgid "extra qualification `%T::' on member `%s' ignored"
+#~ msgstr "qualification additionnelle « %T:: » sur le membre « %s » est ignorée"
+
+#~ msgid "cannot declare member function `%T::%s' within `%T'"
+#~ msgstr "ne peut déclarer la fonction membre « %T::%s » à l'intérieur de « %T »"
+
+#~ msgid "cannot declare member `%T::%s' within `%T'"
+#~ msgstr "ne peut déclarer le membre « %T::%s » à l'intérieur de « %T »"
+
+#~ msgid "data member may not have variably modified type `%T'"
+#~ msgstr "membre de données peut ne pas avoir de type « %T » modifié de manière variable"
+
+#~ msgid "parameter may not have variably modified type `%T'"
+#~ msgstr "paramètre peut ne pas avoir de type « %T » modifié de manière variable"
+
+#~ msgid "only declarations of constructors can be `explicit'"
+#~ msgstr "seuls les déclarations de constructeurs peuvent être « explicit »"
+
+#~ msgid "non-member `%s' cannot be declared `mutable'"
+#~ msgstr "le non membre « %s » ne peut être déclaré « mutable »"
+
+#~ msgid "non-object member `%s' cannot be declared `mutable'"
+#~ msgstr "un membre non objet « %s » ne peut être déclaré « mutable »"
+
+#~ msgid "function `%s' cannot be declared `mutable'"
+#~ msgstr "fonction « %s » ne peut être déclarée « mutable »"
+
+#~ msgid "static `%s' cannot be declared `mutable'"
+#~ msgstr "static « %s » ne peut être déclaré « mutable »"
+
+#~ msgid "const `%s' cannot be declared `mutable'"
+#~ msgstr "const « %s » ne peut être déclaré « mutable »"
+
+#~ msgid "template-id `%D' used as a declarator"
+#~ msgstr "identificateur de canevas « %D » utilisé comme déclarateur"
+
+#~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ interdit le type imbriqué « %D » avec le même nom que la classe de fermeture"
+
+#~ msgid "%Jtypedef name may not be a nested-name-specifier"
+#~ msgstr "%Jnom du typedef peut ne pas être un nom de spécificateur imbriqué"
+
+#~ msgid "%Jinvalid type qualifier for non-member function type"
+#~ msgstr "%Jqualificateur de type invalide pour un type de fonction non membre"
+
+#~ msgid "type qualifiers specified for friend class declaration"
+#~ msgstr "qulificateurs de types spécifiés pour la déclaration d'une classe amie"
+
+#~ msgid "`inline' specified for friend class declaration"
+#~ msgstr "« inline » spécifié pour la déclaration d'une classe amie"
+
+#~ msgid "template parameters cannot be friends"
+#~ msgstr "paramètres du canevas ne peuvent pas être amis"
+
+#~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'"
+#~ msgstr "déclaration ami requiert une clé de classe, i.e. « friend class %T::%D »"
+
+#~ msgid "friend declaration requires class-key, i.e. `friend %#T'"
+#~ msgstr "déclaration amie requiert une clé de classes, i.e. « friend %#T »"
+
+#~ msgid "trying to make class `%T' a friend of global scope"
+#~ msgstr "tentative de rendre la classe « %T » un ami de la portée globale"
+
+#~ msgid "invalid qualifiers on non-member function type"
+#~ msgstr "qualificteurs invalide pour un type de fonction (autre que fonction membre)"
+
+#~ msgid "abstract declarator `%T' used as declaration"
+#~ msgstr "déclaration abstrait « %T » utilisé dans la déclaration"
+
+#~ msgid "unnamed variable or field declared void"
+#~ msgstr "variable non nommée ou champ déclaré void"
+
+#~ msgid "variable or field declared void"
+#~ msgstr "variable ou champ déclaré void"
+
+#~ msgid "cannot use `::' in parameter declaration"
+#~ msgstr "ne peut utiliser «::» dans le paramètre d'un déclaration"
+
+#~ msgid "invalid use of `::'"
+#~ msgstr "utilisation invalide de « :: »"
+
+#~ msgid "function `%D' cannot be declared friend"
+#~ msgstr "fonction « %D » ne peut être déclarée amie"
+
+#~ msgid "can't make `%D' into a method -- not in a class"
+#~ msgstr "ne peut rendre « %D » dans la méthode -- n'est pas dans la classe"
+
+#~ msgid "function `%D' declared virtual inside a union"
+#~ msgstr "fonction « %D » déclaré comme virtuelle à l'intérieur d'un agrégat"
+
+#~ msgid "`%D' cannot be declared virtual, since it is always static"
+#~ msgstr "« %D » ne peut être déclaré virtuel, alors qu'il est toujours statique"
+
+#~ msgid "field `%D' has incomplete type"
+#~ msgstr "champ « %D » a un type incomplet"
+
+#~ msgid "name `%T' has incomplete type"
+#~ msgstr "nom « %T » a un type incomplet"
+
+#~ msgid "  in instantiation of template `%T'"
+#~ msgstr " dans l'instanciation du canevas « %T »"
+
+#~ msgid "`%s' is neither function nor member function; cannot be declared friend"
+#~ msgstr "« %s » n'est ni une fonction ni une fonction membre ; ne peut être déclaré ami"
+
+#~ msgid "member functions are implicitly friends of their class"
+#~ msgstr "les fonctions membres sont implicitement amis de leur classe"
+
+#~ msgid "ISO C++ forbids initialization of member `%D'"
+#~ msgstr "ISO C++ interdit l'initialisation du membre « %D »"
+
+#~ msgid "making `%D' static"
+#~ msgstr "rendant « %D » statique"
+
+#~ msgid "storage class `auto' invalid for function `%s'"
+#~ msgstr "classe de stockage « auto» invalide pour une fonction « %s  »"
+
+#~ msgid "storage class `register' invalid for function `%s'"
+#~ msgstr "classe de stockage « register» invalide pour une fonction « %s  »"
+
+#~ msgid "storage class `__thread' invalid for function `%s'"
+#~ msgstr "classe de stockage « __thread » invalide pour la fonction « %s  »"
+
+#~ msgid "storage class `static' invalid for function `%s' declared out of global scope"
+#~ msgstr "classe de stockage « static» invalide pour une fonction « %s  » déclarée en dehors de la portée globale"
+
+#~ msgid "storage class `inline' invalid for function `%s' declared out of global scope"
+#~ msgstr "classe de stockage « inline» invalide pour une fonction « %s  » déclarée en dehors de la portée globale"
+
+#~ msgid "virtual non-class function `%s'"
+#~ msgstr "fonction virtuelle d'une non classe « %s »"
+
+#~ msgid "cannot declare member function `%D' to have static linkage"
+#~ msgstr "ne peut déclarer la fonction membre « %D » comme ayant un lien statique"
+
+#~ msgid "cannot declare static function inside another function"
+#~ msgstr "ne peut déclarer une fonction statique à l'intérieur d'une autre fonction"
+
+#~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member"
+#~ msgstr "« static » ne peut pas être utilisé lors de la définition (contrairement à la déclaration) de données de membres statiques"
+
+#~ msgid "static member `%D' declared `register'"
+#~ msgstr "mambre statique « %D» déclaré «register »"
+
+#~ msgid "cannot explicitly declare member `%#D' to have extern linkage"
+#~ msgstr "ne peut explicitement déclarer le membre « %#D » comme ayant une liaison externe"
+
+#~ msgid "default argument for `%#D' has type `%T'"
+#~ msgstr "argument par défaut pour « %#D » à un type « %T »"
+
+#~ msgid "default argument for parameter of type `%T' has type `%T'"
+#~ msgstr "argument par défaut pour le paramètre de type « %T » a le type « %T »"
+
+#~ msgid "default argument `%E' uses local variable `%D'"
+#~ msgstr "argument par défaut « %E » utiliser une variable locale « %D »"
+
+#~ msgid "invalid string constant `%E'"
+#~ msgstr "constante chaîne invalide « %E »"
+
+#~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?"
+#~ msgstr "constante entière invalide dans la liste de paramètre, avez-vous oublier de donner un nom de paramètre?"
+
+#~ msgid "parameter `%D' invalidly declared method type"
+#~ msgstr "paramètre « %D » incorrectement validé comme type de méthode"
+
+#~ msgid "parameter `%D' includes %s to array of unknown bound `%T'"
+#~ msgstr "paramètre « %D » inclut %s au tableau de bornes inconnues « %T »"
+
+#~ msgid "invalid constructor; you probably meant `%T (const %T&)'"
+#~ msgstr "constructeur invalide; vous vouliez probablement dire « %T (const %T&) »"
+
+#~ msgid "`%D' must be a nonstatic member function"
+#~ msgstr "« %D » doit être une fonction membre non statique"
+
+#~ msgid "`%D' must be either a non-static member function or a non-member function"
+#~ msgstr "« %D » doit être soit un membre non statique de fonction ou une fonction non membre"
+
+#~ msgid "`%D' must have an argument of class or enumerated type"
+#~ msgstr "« %D » doit avoir un argument de classe ou de type énuméré"
+
+#~ msgid "conversion to %s%s will never use a type conversion operator"
+#~ msgstr "conversion de %s%s ne sera jamais utilisé dans un type d'opérateur de conversion"
+
+#~ msgid "ISO C++ prohibits overloading operator ?:"
+#~ msgstr "ISO C++ interdit la surcharge de l'opérateur ?:"
+
+#~ msgid "postfix `%D' must take `int' as its argument"
+#~ msgstr "postfixe « %D» doit prendre « int » comme argument"
+
+#~ msgid "postfix `%D' must take `int' as its second argument"
+#~ msgstr "postfixe « %D» doit prndre « int » pour son second argument"
+
+#~ msgid "`%D' must take either zero or one argument"
+#~ msgstr "« %D » doit prendre seulement zéro ou un autre argument"
+
+#~ msgid "`%D' must take either one or two arguments"
+#~ msgstr "« %D » doit prendre seulement un OU deux arguments"
+
+#~ msgid "prefix `%D' should return `%T'"
+#~ msgstr "préfixe « %D » devrait retourner « %T »"
+
+#~ msgid "postfix `%D' should return `%T'"
+#~ msgstr "postfixe « %D » devrait retourner « %T »"
+
+#~ msgid "`%D' must take `void'"
+#~ msgstr "« %D» doit prendre « void »"
+
+#~ msgid "`%D' must take exactly one argument"
+#~ msgstr "« %D » doit prendre exactement un argument"
+
+#~ msgid "`%D' must take exactly two arguments"
+#~ msgstr "« %D » doit prendre exactemenr deux arguments"
+
+#~ msgid "user-defined `%D' always evaluates both arguments"
+#~ msgstr "« %D » défini par l'usager évalue toujours les 2 arguments"
+
+#~ msgid "`%D' should return by value"
+#~ msgstr "« %D » devrait retourner par valeur"
+
+#~ msgid "`%D' cannot have default arguments"
+#~ msgstr "« %D » ne peut avoir d'arguments par défaut"
+
+#~ msgid "using typedef-name `%D' after `%s'"
+#~ msgstr "utilisation d'un nom de typedef « %D » après « %s »"
+
+#~ msgid "using template type parameter `%T' after `%s'"
+#~ msgstr "utilisation de type de canevas de paramètre « %T » après « %s »"
+
+#~ msgid "`%T' referred to as `%s'"
+#~ msgstr "« %TD » référé comme « %s »"
+
+#~ msgid "`%T' referred to as enum"
+#~ msgstr "« %T » référé comme enum"
+
+#~ msgid "template argument required for `%s %T'"
+#~ msgstr "argument du canevas est requis pour « %s %T »"
+
+#~ msgid "use of enum `%#D' without previous declaration"
+#~ msgstr "utilisation de enum « %#D » sans déclaration précédente"
+
+#~ msgid "derived union `%T' invalid"
+#~ msgstr "union dérivée « %T » invalide"
+
+#~ msgid "base type `%T' fails to be a struct or class type"
+#~ msgstr "type de base « %T » a échoué pour devenir un type de classe ou un type construit"
+
+#~ msgid "recursive type `%T' undefined"
+#~ msgstr "type récursif « %T » non défini"
+
+#~ msgid "duplicate base type `%T' invalid"
+#~ msgstr "duplication du type de base « %T » invalide"
+
+#~ msgid "Java class '%T' cannot have multiple bases"
+#~ msgstr "classe Java « %T » ne peut avoir de bases multiples"
+
+#~ msgid "Java class '%T' cannot have virtual bases"
+#~ msgstr "classe Java « %T » ne peut avoir de bases virtuelles"
+
+#~ msgid "multiple definition of `%#T'"
+#~ msgstr "définition multiple de « %#T »"
+
+#~ msgid "%Jprevious definition here"
+#~ msgstr "%Jdéfinition précédente ici"
+
+#~ msgid "no integral type can represent all of the enumerator values for `%T'"
+#~ msgstr "aucun type entier peut représenter toutes les valeurs de l'énumérateur pour « %T »"
+
+#~ msgid "enumerator value for `%D' not integer constant"
+#~ msgstr "valeur de l'énumérateur pour « %D » n'est pas une constante entière"
+
+#~ msgid "overflow in enumeration values at `%D'"
+#~ msgstr "débordement dans les valeurs de l'énumération à « %D »"
+
+#~ msgid "return type `%#T' is incomplete"
+#~ msgstr "type retourné « %#T » est incomplet"
+
+#~ msgid "return type for `main' changed to `int'"
+#~ msgstr "type retourné pour « main » est changé pour «int »"
+
+#~ msgid "`%D' implicitly declared before its definition"
+#~ msgstr "« %D » implicitement déclaré avant sa définition"
+
+#~ msgid "`operator=' should return a reference to `*this'"
+#~ msgstr "« operator= » devrait retourner une référence à «*ceci »"
+
+#~ msgid "parameter `%D' declared void"
+#~ msgstr "paramètre « %D » déclaré «void »"
+
+#~ msgid "invalid member function declaration"
+#~ msgstr "déclaration de membre de fonction invalide"
+
+#~ msgid "`%D' is already defined in class `%T'"
+#~ msgstr "« %D » est déjà défini dans la classe « %T »"
+
+#~ msgid "static member function `%#D' declared with type qualifiers"
+#~ msgstr "membre de fonction statique « %#D » déclaré avec des qualificateurs de tyep"
+
+#~ msgid "duplicate type qualifiers in %s declaration"
+#~ msgstr "qualificateurs de types dupliqués dans déclaration %s"
+
+#~ msgid "name missing for member function"
+#~ msgstr "nom manquant pour le membre d'une fonction"
+
+#~ msgid "ambiguous conversion for array subscript"
+#~ msgstr "comversion ambigue pour un sous-tableau"
+
+#~ msgid "invalid types `%T[%T]' for array subscript"
+#~ msgstr "types invalides « %T[%T] » pour un sous-script de tableau"
+
+#~ msgid "deleting array `%#D'"
+#~ msgstr "destruction du tableau « %#D »"
+
+#~ msgid "type `%#T' argument given to `delete', expected pointer"
+#~ msgstr "type « %#T » de l'argument donné pour « delete », attendait un pointeur"
+
+#~ msgid "cannot delete a function.  Only pointer-to-objects are valid arguments to `delete'"
+#~ msgstr "ne peut détruire une fonction.  Seuls les pointeurs-d'objets sont des arguments valable pour destruction"
+
+#~ msgid "deleting `%T' is undefined"
+#~ msgstr "destruction de « %T » est indéfinie"
+
+#~ msgid "invalid declaration of member template `%#D' in local class"
+#~ msgstr "déclaration invalide du canevas de membre « %#D » dans la classe locale"
+
+#~ msgid "invalid use of `virtual' in template declaration of `%#D'"
+#~ msgstr "utilisation invalide de « virtual» dans la déclaration d'un canevas de « %#D »"
+
+#~ msgid "template declaration of `%#D'"
+#~ msgstr "déclaration du canevas de « %#D »"
+
+#~ msgid "Java method '%D' has non-Java return type `%T'"
+#~ msgstr "méthode Java « %D » a un type non Java retourné « %T »"
+
+#~ msgid "Java method '%D' has non-Java parameter type `%T'"
+#~ msgstr "méthode Java « %D » a un paramètre non Java de type « %T »"
+
+#~ msgid "prototype for `%#D' does not match any in class `%T'"
+#~ msgstr "prototype pour « %#D » ne concorde avec aucun dans la classe « %T »"
+
+#~ msgid "local class `%#T' shall not have static data member `%#D'"
+#~ msgstr "la classe locale « %#T » ne doit pas être un membre de données statiques de « %#D »"
+
+#~ msgid "initializer invalid for static member with constructor"
+#~ msgstr "initialisation invalide pour un membre statique avec constructeur"
+
+#~ msgid "(an out of class initialization is required)"
+#~ msgstr "(une initialisation en dehors de la classe est requise)"
+
+#~ msgid "member `%D' conflicts with virtual function table field name"
+#~ msgstr "membre « %D » en conflit avec un nom de champ de table d'une fonction virtuelle"
+
+#~ msgid "`%D' is already defined in `%T'"
+#~ msgstr "« %D » est déjà défini dans « %T »"
+
+#~ msgid "field initializer is not constant"
+#~ msgstr "l'initialisation du champ n'est pas une constante"
+
+#~ msgid "`asm' specifiers are not permitted on non-static data members"
+#~ msgstr "spécificateurs « asm » ne sont pas permis pour des données de membres non statiques"
+
+#~ msgid "cannot declare `%D' to be a bit-field type"
+#~ msgstr "ne peut déclarer « %D » comme étant un type de champ de bits"
+
+#~ msgid "cannot declare bit-field `%D' with function type"
+#~ msgstr "ne peut déclarer un champ de bits « %D » avec un type de fonction"
+
+#~ msgid "`%D' is already defined in the class %T"
+#~ msgstr "« %D » est déjà défini dans la classe %T"
+
+#~ msgid "static member `%D' cannot be a bit-field"
+#~ msgstr "membre statique « %D » ne peut être un champ de bits"
+
+#~ msgid "initializer specified for non-member function `%D'"
+#~ msgstr "initialisation spécifiée pour une fonction « %D » n'étant pas membre"
+
+#~ msgid "invalid initializer for virtual method `%D'"
+#~ msgstr "initialisation invalide pour la méthode virtuelle « %D »"
+
+#~ msgid "anonymous struct not inside named type"
+#~ msgstr "struct anonyme n'est pas l'intérieur du type nommé"
+
+#~ msgid "namespace-scope anonymous aggregates must be static"
+#~ msgstr "aggrégats anonymes de champs d'espace nom doit être statique"
+
+#~ msgid "anonymous union with no members"
+#~ msgstr "aggrégat anonyme sans aucun membre"
+
+#~ msgid "`operator new' must return type `%T'"
+#~ msgstr "« operator new » doit retourner un type « %T »"
+
+#~ msgid "`operator new' takes type `size_t' (`%T') as first parameter"
+#~ msgstr "« operator new » prend le type « size_t » (« %T ») comme premier paramètre"
+
+#~ msgid "`operator delete' must return type `%T'"
+#~ msgstr "« operator delete » doit retourner le type « %T »"
+
+#~ msgid "`operator delete' takes type `%T' as first parameter"
+#~ msgstr "« operator delete » prend le type « %T » comme premier paramètre"
+
+#~ msgid "inline function `%D' used but never defined"
+#~ msgstr "fonction enligne « %D » utilisé mais n'a jamais été défini"
+
+#~ msgid "default argument missing for parameter %P of `%+#D'"
+#~ msgstr "argument par défaut manquant pour le paramètre %P de « %+#D »"
+
+#~ msgid "unexpected letter `%c' in locate_error\n"
+#~ msgstr "lettre inattendue « %c » dans locate_error\n"
+
+#~ msgid "type `%T' is disallowed in Java `throw' or `catch'"
+#~ msgstr "type « %T» n'est pas permis en Java «throw» ou «catch »"
+
+#~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined"
+#~ msgstr "appel en Java de « catch» ou «throw» avec «jthrowable » undéfini"
+
+#~ msgid "type `%T' is not derived from `java::lang::Throwable'"
+#~ msgstr "type « %T» n'est pas dérivé de «java::lang::Throwable »"
+
+#~ msgid "mixing C++ and Java catches in a single translation unit"
+#~ msgstr "mélange des interceptions  C++ et Java dans une unité simple de traduction "
+
+#~ msgid "throwing NULL, which has integral, not pointer type"
+#~ msgstr "retounrnant NULL (par throw), lequel est entier, pas de type pointeur"
+
+#~ msgid "`%D' should never be overloaded"
+#~ msgstr "« %D » ne devrait jamais être surchargé"
+
+#~ msgid "  in thrown expression"
+#~ msgstr "  dans l'expression projetée"
+
+#~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression"
+#~ msgstr "expression « %E » de la classe abstraite de type « %T » ne peut être utilisé dans une expression throw"
+
+#~ msgid "exception of type `%T' will be caught"
+#~ msgstr "exception du type « %T » sera interceptée"
+
+#~ msgid "   by earlier handler for `%T'"
+#~ msgstr "   par un handler antérieur pour « %T »"
+
+#~ msgid "`...' handler must be the last handler for its try block"
+#~ msgstr "« ... » handler doit être le dernier handler de son bloc d'essai"
+
+#~ msgid "`%D' is already a friend of class `%T'"
+#~ msgstr "« %D » est déjà un ami de la classe « %T »"
+
+#~ msgid "invalid type `%T' declared `friend'"
+#~ msgstr "type invalide « %T» déclaré «friend »"
+
+#~ msgid "partial specialization `%T' declared `friend'"
+#~ msgstr "spécialisation partielle « %T» déclarée «friend »"
+
+#~ msgid "class `%T' is implicitly friends with itself"
+#~ msgstr "classe « %T » est implicitement ami avec elle-même"
+
+#~ msgid "typename type `%#T' declared `friend'"
+#~ msgstr "type typename « %#T» déclaré «friend »"
+
+#~ msgid "template parameter type `%T' declared `friend'"
+#~ msgstr "type paramètre du canevas « %T» déclaré «friend »"
+
+#~ msgid "`%#T' is not a template"
+#~ msgstr "« %#T » n'est pas un canevas"
+
+#~ msgid "`%D' is already a friend of `%T'"
+#~ msgstr "« %D » est déjà un ami de « %T »"
+
+#~ msgid "`%T' is already a friend of `%T'"
+#~ msgstr "« %T » est déjà un ami de « %T »"
+
+#~ msgid "member `%D' declared as friend before type `%T' defined"
+#~ msgstr "membre « %D » déclaré comme ami avant la définition du type « %T »"
+
+#~ msgid "friend declaration `%#D' declares a non-template function"
+#~ msgstr "déclaration amie « %#D » déclare une fonction non canevas"
+
+#~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning"
+#~ msgstr "(si ce n'est pas ce que vous vouliez faire, soyez sûr que le canevas de la fonction a déjà été déclaré et ajouter <> après le nom de la fonction ici) -Wno-non-template-friend désactive le présent avertissement"
+
+#~ msgid "argument to `%s' missing\n"
+#~ msgstr "argument pour « %s » est manquant\n"
+
+#~ msgid "`%D' should be initialized in the member initialization list"
+#~ msgstr "« %D » devrait être initialisé dans la liste d'initialisation du membre"
+
+#~ msgid "default-initialization of `%#D', which has reference type"
+#~ msgstr "initialisation par défaut de « %#D », lequel a un type référencé"
+
+#~ msgid "uninitialized reference member `%D'"
+#~ msgstr "référence de membre non initialisé « %D »"
+
+#~ msgid "uninitialized member `%D' with `const' type `%T'"
+#~ msgstr "membre non initialisé « %D » avec « const » type « %T »"
+
+#~ msgid "`%D' will be initialized after"
+#~ msgstr "« %D » sera initialisé après"
+
+#~ msgid "base `%T' will be initialized after"
+#~ msgstr "base « %T » sera initialisé après"
+
+#~ msgid "  `%#D'"
+#~ msgstr "  « %D »"
+
+#~ msgid "  base `%T'"
+#~ msgstr "  base « %T »"
+
+#~ msgid "  when initialized here"
+#~ msgstr "  lorsqu'initialisé ici"
+
+#~ msgid "multiple initializations given for `%D'"
+#~ msgstr "multiples initialisations données pour « %D »"
+
+#~ msgid "multiple initializations given for base `%T'"
+#~ msgstr "multiples initialisations données pour base « %T »"
+
+#~ msgid "initializations for multiple members of `%T'"
+#~ msgstr "initialisation de multiples membres de « %T »"
+
+#~ msgid "base class `%#T' should be explicitly initialized in the copy constructor"
+#~ msgstr "classe de base « %#T » devrait être explicitement initialisé dans la copie du constructeur"
+
+#~ msgid "class `%T' does not have any field named `%D'"
+#~ msgstr "classe « %T » n'a pas aucun champ nommé « %D »"
+
+#~ msgid "`%#D' is a static data member; it can only be initialized at its definition"
+#~ msgstr "« %#D » est un membre statique de données; il peut seulement être initialisée lors de sa définition"
+
+#~ msgid "`%#D' is not a non-static data member of `%T'"
+#~ msgstr "« %#D » n'est pas un membre statique de données de « %T »"
+
+#~ msgid "unnamed initializer for `%T', which has no base classes"
+#~ msgstr "initialiseur sans nom pour « %T », lequel n'a pas de classe de base"
+
+#~ msgid "unnamed initializer for `%T', which uses multiple inheritance"
+#~ msgstr "initialiseur sans nom pour « %T », lequel utilise de multiples héritages"
+
+#~ msgid "'%D' is both a direct base and an indirect virtual base"
+#~ msgstr "« %D » est à la fois une base directe et indirecte virtuelle"
+
+#~ msgid "type `%D' is not a direct or virtual base of `%T'"
+#~ msgstr "type « %D » n'est pas une base directe ou virtuelle de « %T »"
+
+#~ msgid "type `%D' is not a direct base of `%T'"
+#~ msgstr "type « %D » n'est pas une base directe de « %T »"
+
+#~ msgid "bad array initializer"
+#~ msgstr "mauvaise initialisation de tableau"
+
+#~ msgid "`%T' is not an aggregate type"
+#~ msgstr "« %T » n'est pas de type aggrégat"
+
+#~ msgid "`%T' fails to be an aggregate typedef"
+#~ msgstr "« %T » a échoué à être un typedef d'aggrégat"
+
+#~ msgid "type `%T' is of non-aggregate type"
+#~ msgstr "type « %T » est un type qui n'est pas d'aggrégat"
+
+#~ msgid "qualified type `%T' does not match destructor name `~%T'"
+#~ msgstr "type qualifé « %T » ne concorde pas le nom du destructeur «~%T»"
+
+#~ msgid "incomplete type `%T' does not have member `%D'"
+#~ msgstr "type incomplet « %T » n'a pas de membre « %D »"
+
+#~ msgid "`%D' is not a member of type `%T'"
+#~ msgstr "« %D » n'est pas un membre de type « %T »"
+
+#~ msgid "invalid pointer to bit-field `%D'"
+#~ msgstr "pointeur invalide pour un champ de bits « %D »"
+
+#~ msgid "invalid use of non-static member function `%D'"
+#~ msgstr "utilisation invalide d'un membre non statique de fonction « %D »"
+
+#~ msgid "invalid use of non-static data member `%D'"
+#~ msgstr "utilisation invalide d'un membre non statique de données « %D »"
+
+#~ msgid "new of array type fails to specify size"
+#~ msgstr "new sur un type tableau a échoué dans l'évaluation de la taille"
+
+#~ msgid "size in array new must have integral type"
+#~ msgstr "taille d'un nouveau tableau (new) doit avoir un type entier"
+
+#~ msgid "zero size array reserves no space"
+#~ msgstr "tableau de taille zéro ne réserve pas d'espace"
+
+#~ msgid "new cannot be applied to a reference type"
+#~ msgstr "new ne peut être appliqué à un type référencé"
+
+#~ msgid "new cannot be applied to a function type"
+#~ msgstr "new ne peut être appliqué à un type de fonction"
+
+#~ msgid "call to Java constructor, while `jclass' undefined"
+#~ msgstr "appel d'un constructeur Java, alors que « jclass » est indéfini"
+
+#~ msgid "can't find class$"
+#~ msgstr "ne peut repérer class$"
+
+#~ msgid "invalid type `void' for new"
+#~ msgstr "type « void » invalide pour new"
+
+#~ msgid "uninitialized const in `new' of `%#T'"
+#~ msgstr "constante non initialisée dans « new» pour « %#T »"
+
+#~ msgid "call to Java constructor with `%s' undefined"
+#~ msgstr "appel au constructeur Java avec « %s » indéfini"
+
+#~ msgid "request for member `%D' is ambiguous"
+#~ msgstr "la requête pour le membre « %D » est ambiguë"
+
+#~ msgid "ISO C++ forbids initialization in array new"
+#~ msgstr "ISO C++ interdit l'initialisation d'un nouveau tableau"
+
+#~ msgid "initializer ends prematurely"
+#~ msgstr "fin prématurée de l'initialisation"
+
+#~ msgid "cannot initialize multi-dimensional array with initializer"
+#~ msgstr "ne peut initialiser un table multi-dimensionnel avec initialiseur"
+
+#~ msgid "possible problem detected in invocation of delete operator:"
+#~ msgstr "problème possible détecté dans l'invocation de l'opérateur delete:"
+
+#~ msgid "neither the destructor nor the class-specific "
+#~ msgstr "ni le destructeur ni la classe spécifique"
+
+#~ msgid "operator delete will be called, even if they are "
+#~ msgstr "l'opérateur de destruction sera appellé, même s'ils sont "
+
+#~ msgid "declared when the class is defined."
+#~ msgstr "déclarés lorsque la classe est définie."
+
+#~ msgid "unknown array size in delete"
+#~ msgstr "taille du tableau inconnue dans delete"
+
+#~ msgid "type to vector delete is neither pointer or array type"
+#~ msgstr "type du vesteur delete n'est ni un pointeur ou un type tableau"
+
+#~ msgid "type name expected before `*'"
+#~ msgstr "nom de type attendu avec «*»"
+
+#~ msgid "junk at end of #pragma %s"
+#~ msgstr "rebut à la fin de #pragma %s"
+
+#~ msgid "invalid #pragma %s"
+#~ msgstr "#pragma %s invalde"
+
+#~ msgid "#pragma vtable no longer supported"
+#~ msgstr "#pragma vtable n'est plus supporté"
+
+#~ msgid "#pragma implementation for %s appears after file is included"
+#~ msgstr "implantation de #pragma pour %s apparaît après l'inclusion du fichier"
+
+#~ msgid "junk at end of #pragma GCC java_exceptions"
+#~ msgstr "rebut à la fin de #pragma GCC java_exceptions"
+
+#~ msgid "`%D' not defined"
+#~ msgstr "« %D » n'est pas défini"
+
+#~ msgid "`%D' was not declared in this scope"
+#~ msgstr "« %D » n'a pas été déclaré dans cet horizon"
+
+#~ msgid "`%D' undeclared (first use this function)"
+#~ msgstr "« %D » non déclaré (première utilisation dans cette fonction)"
+
+#~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)"
+#~ msgstr "(Chaque identificateur non déclaré est rapporté seulement une seule fois pour la fonction dans laquelle il apparaît.)"
+
+#~ msgid "there are no arguments to `%D' that depend on a template parameter, so a declaration of `%D' must be available"
+#~ msgstr "il n'y a pas d'argument à « %D » qui dépend d'un paramètre du canevas, aussi une déclaration de « %D » doit être disponible"
+
+#~ msgid "(if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)"
+#~ msgstr "(si vous utilisez « -fpermissive », G++ acceptera votre core, mais permettre l'utilisation d'un nom non déclaré est obsolète)"
+
+#~ msgid "call_expr cannot be mangled due to a defect in the C++ ABI"
+#~ msgstr "call_expr ne peut être mutilé en raison d'un faute dans l'ABI C++"
+
+#~ msgid "omitted middle operand to `?:' operand cannot be mangled"
+#~ msgstr "opérande du milieu « ?: » omise, l'opérande ne peut être mutilée"
+
+#~ msgid "the mangled name of `%D' will change in a future version of GCC"
+#~ msgstr "le nom mutilé de « %D » sera modifié dans une version future de GCC"
+
+#~ msgid "generic thunk code fails for method `%#D' which uses `...'"
+#~ msgstr "code « thunk» générique a échoué pour la méthode « %#D » laquelle utilise « ...  »"
+
+#~ msgid "non-static const member `%#D', can't use default assignment operator"
+#~ msgstr "constante non statique du membre « %#D », ne peut utiliser l'opérateur d'affectation par défaut"
+
+#~ msgid "non-static reference member `%#D', can't use default assignment operator"
+#~ msgstr "référence non statique du membre « %#D », ne peut utiliser l'opérateur d'affectation par défaut"
+
+#~ msgid "`%#D' used prior to declaration"
+#~ msgstr "« %#D » utilisé précédemment avant sa déclaration"
+
+#~ msgid "redeclaration of `wchar_t' as `%T'"
+#~ msgstr "redéclaration de « wchar_t» comme « %T »"
+
+#~ msgid "invalid redeclaration of `%D'"
+#~ msgstr "redéclaration invalide de « %D »"
+
+#~ msgid "as `%D'"
+#~ msgstr "comme « %D »"
+
+#~ msgid "type mismatch with previous external decl of `%#D'"
+#~ msgstr "non concordance de type avec la déclaration externe précédente de « %D »"
+
+#~ msgid "previous external decl of `%#D'"
+#~ msgstr "déclaration externe précédente de « %#D »"
+
+#~ msgid "`%D' was previously implicitly declared to return `int'"
+#~ msgstr "« %D » a été précédemment implicitement déclaré comme retournant un entier"
+
+#~ msgid "extern declaration of `%#D' doesn't match"
+#~ msgstr "déclaration externe de « %#D » ne concorde pas"
+
+#~ msgid "global declaration `%#D'"
+#~ msgstr "déclaration globale « %#D »"
+
+#~ msgid "declaration of '%#D' shadows a parameter"
+#~ msgstr "déclaration de « %#D » masque un paramètre"
+
+#~ msgid "declaration of '%D' shadows a member of 'this'"
+#~ msgstr "déclaration de « %D » masque un membre de « this »"
+
+#~ msgid "declaration of '%D' shadows a previous local"
+#~ msgstr "déclaration de « %D » masque la déclaration d'un local précédent"
+
+#~ msgid "declaration of '%D' shadows a global declaration"
+#~ msgstr "déclaration de « %D » masque une déclaration globale"
+
+#~ msgid "name lookup of `%D' changed"
+#~ msgstr "recherche du nom « %D » a changé"
+
+#~ msgid "  matches this `%D' under ISO standard rules"
+#~ msgstr "  concorde avec « %D » selon les règles standards ISO"
+
+#~ msgid "  matches this `%D' under old rules"
+#~ msgstr "  concorde avec « %D » selon les vieilles règles"
+
+#~ msgid "name lookup of `%D' changed for new ISO `for' scoping"
+#~ msgstr "recherche du nom de « %D » changé pour la nouvelle étendue ISO pour le « for »"
+
+#~ msgid "  cannot use obsolete binding at `%D' because it has a destructor"
+#~ msgstr "  ne peut utiliser une liaison obsolète à « %D » parce qu'il a un destructeur"
+
+#~ msgid "  using obsolete binding at `%D'"
+#~ msgstr "  utilisation de liaison obsolète à « %D »"
+
+#~ msgid "%s %s(%E) %p %d\n"
+#~ msgstr "%s %s(%E) %p %d\n"
+
+#~ msgid "%s %s %p %d\n"
+#~ msgstr "%s %s %p %d\n"
+
+#~ msgid "XXX is_class_level != (current_scope == class_scope)\n"
+#~ msgstr "XXX is_class_level != (current_scope == class_scope)\n"
+
+#~ msgid "`%#D' hides constructor for `%#T'"
+#~ msgstr "« %#D » cache un constructeur pour « %#T »"
+
+#~ msgid "`%#D' conflicts with previous using declaration `%#D'"
+#~ msgstr "« %#D » en conflit avec une déclaration précédente « %#D »"
+
+#~ msgid "previous non-function declaration `%#D'"
+#~ msgstr "déclaration précédente d'un non fonction « %#D »"
+
+#~ msgid "conflicts with function declaration `%#D'"
+#~ msgstr "conflits avec la déclaration de fonction de « %#D »"
+
+#~ msgid "a using-declaration cannot specify a template-id.  Try `using %D'"
+#~ msgstr "l'utilisation d'une déclaration ne peut spécifier un template-id.  Essayer « using %D »"
+
+#~ msgid "namespace `%D' not allowed in using-declaration"
+#~ msgstr "espace de noms « %D » n'est pas permis dans l'utilisation d'une déclaration"
+
+#~ msgid "`%T' is not a namespace"
+#~ msgstr "« %T » n'est pas un espace de noms"
+
+#~ msgid "`%D' not declared"
+#~ msgstr "« %D » n'est pas déclaré"
+
+#~ msgid "`%D' is already declared in this scope"
+#~ msgstr "« %D » est déjà déclaré dans cette portée"
+
+#~ msgid "using declaration `%D' introduced ambiguous type `%T'"
+#~ msgstr "l'utlisation de la déclaration « %D » introduit un type ambigu « %T »"
+
+#~ msgid "`%#D' redeclared as %C"
+#~ msgstr "« %#D » rédéclaré comme %C"
+
+#~ msgid "`%D' has the same name as the class in which it is declared"
+#~ msgstr "« %D » a le même nom que la classe dans laquelle il est déclaré"
+
+#~ msgid "using-declaration for non-member at class scope"
+#~ msgstr "l'utilisation de déclaration pour un non membre au niveau de la portée de la classe"
+
+#~ msgid "using-declaration cannot name destructor"
+#~ msgstr "utilisation de déclaration ne peut nommer le destructeur"
+
+#~ msgid "declaration of `%D' not in a namespace surrounding `%D'"
+#~ msgstr "déclaration de « %D » n'est pas dans l'espace de noms entourant « %D »"
+
+#~ msgid "`%D' should have been declared inside `%D'"
+#~ msgstr "« %D » devrait avoir été déclaré à l'intérieur de « %D »"
+
+#~ msgid "namespace alias `%D' not allowed here, assuming `%D'"
+#~ msgstr "alias d'espace de noms « %D » n'est pas permis ici, on assume « %D »"
+
+#~ msgid "unknown namespace `%D'"
+#~ msgstr "espace de nomes inconnu « %D »"
+
+#~ msgid "namespace `%T' undeclared"
+#~ msgstr "espace de noms « %T » n'est pas déclaré"
+
+#~ msgid "strong using only meaningful at namespace scope"
+#~ msgstr "forte n'ayant un sens seulement sur l'étendue de l'espace nom"
+
+#~ msgid "`%D' attribute directive ignored"
+#~ msgstr "« %D » attribut de directive ignoré"
+
+#~ msgid "use of `%D' is ambiguous"
+#~ msgstr "utilisation de « %D » est ambiguë"
+
+#~ msgid "  first declared as `%#D' here"
+#~ msgstr "  d'abord déclaré comme « %#D » ici"
+
+#~ msgid "  also declared as `%#D' here"
+#~ msgstr "  aussi déclaré comme « %#D » ici"
+
+#~ msgid "`%D' denotes an ambiguous type"
+#~ msgstr "« %D » dénote un type ambigu"
+
+#~ msgid "%J  first type here"
+#~ msgstr "%J  premier type ici"
+
+#~ msgid "%J  other type here"
+#~ msgstr "%J  autre type ici"
+
+#~ msgid "invalid use of `%D'"
+#~ msgstr "utilisation invalide de « %D »"
+
+#~ msgid "`%D::%D' is not a template"
+#~ msgstr "« %D::%D » n'est pas un canevas"
+
+#~ msgid "`%D' undeclared in namespace `%D'"
+#~ msgstr "« %D » non déclaré dans l'espace de noms « %D »"
+
+#~ msgid "`%D' is not a function,"
+#~ msgstr "« %D » n'est pas une fonction"
+
+#~ msgid "  conflict with `%D'"
+#~ msgstr "  en conflit avec « %D »"
+
+#~ msgid "XXX entering pop_everything ()\n"
+#~ msgstr "XXX on entre dans pop_everything ()\n"
+
+#~ msgid "XXX leaving pop_everything ()\n"
+#~ msgstr "XXX on quitte pop_everything ()\n"
+
+#~ msgid "invalid token"
+#~ msgstr "jeton invalide"
+
+#~ msgid "`%D::%D' has not been declared"
+#~ msgstr "« %D::%D » n'a pas été déclaré"
+
+#~ msgid "`::%D' has not been declared"
+#~ msgstr "« ::%D » n'a pas été déclaré"
+
+#~ msgid "`%D' has not been declared"
+#~ msgstr "« %D » n'a pas été déclaré"
+
+#~ msgid "`%D::%D' %s"
+#~ msgstr "« %D::%D » %s"
+
+#~ msgid "`::%D' %s"
+#~ msgstr "« ::%D » %s"
+
+#~ msgid "`%D' %s"
+#~ msgstr "« %D » %s"
+
+#~ msgid "new types may not be defined in a return type"
+#~ msgstr "nouveaux types ne peuvent être définis dans un type à retourner"
+
+#~ msgid "`%T' is not a template"
+#~ msgstr "« %T » n'est pas un canevas"
+
+#~ msgid "invalid template-id"
+#~ msgstr "id de canevas invalide"
+
+#~ msgid "%s cannot appear in a constant-expression"
+#~ msgstr "%s ne peut apparaître dans une expression de constante"
+
+#~ msgid "`%s' does not name a type"
+#~ msgstr "« %s » ne nomme pas un type"
+
+#~ msgid "(perhaps `typename %T::%s' was intended)"
+#~ msgstr "(peut-être « typename %T::%s » était votre intention"
+
+#~ msgid "ISO C++ forbids braced-groups within expressions"
+#~ msgstr "ISO C++ interdit les groupes d'accolades à l'intérieur des expressions"
+
+#~ msgid "statement-expressions are allowed only inside functions"
+#~ msgstr "expression de déclaration sont permises seulement à l'intérieur de fonctions"
+
+#~ msgid "`this' may not be used in this context"
+#~ msgstr "« cela » ne peut être utilisé dans ce contexte"
+
+#~ msgid "local variable `%D' may not appear in this context"
+#~ msgstr "variable locale « %D » ne peut apparaître dans ce contexte"
+
+#~ msgid "typedef-name `%D' used as destructor declarator"
+#~ msgstr "nom du typdef « %D » utilisé comme déclarateur de destructeur"
+
+#~ msgid "ISO C++ forbids compound-literals"
+#~ msgstr "ISO C++ interdit les chaînes composées"
+
+#~ msgid "array bound forbidden after parenthesized type-id"
+#~ msgstr "les limites du tableau interdisent ce qui suit après le type-id mis entre parenthèses"
+
+#~ msgid "try removing the parentheses around the type-id"
+#~ msgstr "essayer d'enlever les parenthèses autour du type-id"
+
+#~ msgid "expression in new-declarator must have integral or enumeration type"
+#~ msgstr "expression dans le nouveau déclarateur doit être un type entier ou d'énumération"
+
+#~ msgid "use of old-style cast"
+#~ msgstr "utilisation d'un vieux style de transtypage (cast)"
+
+#~ msgid "case label `%E' not within a switch statement"
+#~ msgstr "étiquette du CASE « %E » n'est pas à l'intérieur de la déclaration du SWITCH"
+
+#~ msgid "ISO C++ forbids computed gotos"
+#~ msgstr "ISO C++ interdit les gotos calculés"
+
+#~ msgid "extra `;'"
+#~ msgstr "« ; » superflu"
+
+#~ msgid "mixing declarations and function-definitions is forbidden"
+#~ msgstr "mélange de déclarations et de définitions de fonction est interdit"
+
+#~ msgid "duplicate `friend'"
+#~ msgstr "« friend » apparaît en double"
+
+#~ msgid "class definition may not be declared a friend"
+#~ msgstr "définition de classe ne peut pas être déclaré comme ami"
+
+#~ msgid "only constructors take base initializers"
+#~ msgstr "seuls les constructeurs prennent des initialiseurs de base"
+
+#~ msgid "anachronistic old-style base class initializer"
+#~ msgstr "ancien style anachronique d'initialiseur de classe de base"
+
+#~ msgid "keyword `export' not implemented, and will be ignored"
+#~ msgstr "mot clé « export » n'est pas implanté et sera ignoré"
+
+#~ msgid "`<::' cannot begin a template-argument list"
+#~ msgstr "« <:: » ne peut pas être au début d'une liste d'un canevas d'arguments"
+
+#~ msgid "`<:' is an alternate spelling for `['. Insert whitespace between `<' and `::'"
+#~ msgstr "« <: » est une épellation alternative pour « [ ». Insérer des blancs d,espacement entre « < » et « :: »"
+
+#~ msgid "(if you use `-fpermissive' G++ will accept your code)"
+#~ msgstr "(si vous utiliser « -fpermissive » G++ acceptera votre code)"
+
+#~ msgid "non-template `%D' used as template"
+#~ msgstr "« %D » qui n'est pas un canevas est utilisé comme canevas"
+
+#~ msgid "(use `%T::template %D' to indicate that it is a template)"
+#~ msgstr "(utiliser « %T::template %D » pour indiquer que c'est un canevas)"
+
+#~ msgid "using `typename' outside of template"
+#~ msgstr "utilisation de « typename » en dehors du canevas"
+
+#~ msgid "expected type-name"
+#~ msgstr "un nom de type attendu"
+
+#~ msgid "type attributes are honored only at type definition"
+#~ msgstr "type d'attributs sont honorés seulement lors de la définitions de type"
+
+#~ msgid "a template-id may not appear in a using-declaration"
+#~ msgstr "un id de canevas ne peut pas apparaître dans l'utilisation de la déclaration"
+
+#~ msgid "an asm-specification is not allowed on a function-definition"
+#~ msgstr "une spécification asm n'est pas permise dans la définition de fonction"
+
+#~ msgid "attributes are not allowed on a function-definition"
+#~ msgstr "attributs ne sont pas permis dans la définition de fonction"
+
+#~ msgid "attributes after parenthesized initializer ignored"
+#~ msgstr "attributs après l'initialisateur mis entre parenthèses sont ignorés"
+
+#~ msgid "file ends in default argument"
+#~ msgstr "fin de fichier dans l'argument par défaut"
+
+#~ msgid "deprecated use of default argument for parameter of non-function"
+#~ msgstr "utilisation de l'argument par défaut pour un paramètre d'une non fonction"
+
+#~ msgid "default arguments are only permitted for function parameters"
+#~ msgstr "arguments par défaut sont permis seulement pour les paramètres de fonction"
+
+#~ msgid "declaration of `%D' in `%D' which does not enclose `%D'"
+#~ msgstr "déclaration de « %D » dans « %D » lequel n'entoure pas « %D »"
+
+#~ msgid "extra qualification ignored"
+#~ msgstr "qualification superflue ignorée"
+
+#~ msgid "an explicit specialization must be preceded by 'template <>'"
+#~ msgstr "spécialisation explicite doit être précédé par « template <> »"
+
+#~ msgid "extra semicolon"
+#~ msgstr "« ; » superflu"
+
+#~ msgid "a class-key must be used when declaring a friend"
+#~ msgstr "une clé de classe doit être utilise lors de la déclaration d'un ami"
+
+#~ msgid "friend declaration does not name a class or function"
+#~ msgstr "déclaration amie ne nomme pas une classe ou une fonction"
+
+#~ msgid "pure-specifier on function-definition"
+#~ msgstr "spécificateur pur lors de la définition d'une fonction"
+
+#~ msgid "keyword `typename' not allowed outside of templates"
+#~ msgstr "mot clé « typename » n'est pas permis en dehors du canevas"
+
+#~ msgid "keyword `typename' not allowed in this context (the base class is implicitly a type)"
+#~ msgstr "mot clé « typename » n'est pas permis dans ce contexte (la classe de base est implicitement un type)"
+
+#~ msgid "reference to `%D' is ambiguous"
+#~ msgstr "référence à « %D » est ambiguë"
+
+#~ msgid "too few template-parameter-lists"
+#~ msgstr "trop peu de canevas de listes de paramètres"
+
+#~ msgid "too many template-parameter-lists"
+#~ msgstr "trop de canevas de listes de paramètres"
+
+#~ msgid "invalid function declaration"
+#~ msgstr "déclaration de fonction invalide"
+
+#~ msgid "named return values are no longer supported"
+#~ msgstr "valeurs nommées à retourner ne sont plus supportées"
+
+#~ msgid "`>>' should be `> >' within a nested template argument list"
+#~ msgstr "« >> » devrait être « > > » à l'intérieur du canevas de la liste d'arguments"
+
+#~ msgid "spurious `>>', use `>' to terminate a template argument list"
+#~ msgstr "faux « >> », utiliser « > » pour terminer la liste d'argument du canevas"
+
+#~ msgid "missing `>' to terminate the template argument list"
+#~ msgstr "« > » manquant pour terminer la liste d'argument du canevas"
+
+#~ msgid "`%s' tag used in naming `%#T'"
+#~ msgstr "étiquette « %s » utilisée dans la dénomination de « %#T »"
+
+#~ msgid "%D redeclared with different access"
+#~ msgstr "« %#D » redéclaré avec un accès différent"
+
+#~ msgid "`template' (as a disambiguator) is only allowed within templates"
+#~ msgstr "« template » (afin de rendre moins ambiguë) est seulement permis à l'intérieur des canevas"
+
+#~ msgid "data member `%D' cannot be a member template"
+#~ msgstr "membre de données « %D » ne peut être membre du canevas"
+
+#~ msgid "invalid member template declaration `%D'"
+#~ msgstr "déclaration de membre de canevas invalide « %D »"
+
+#~ msgid "explicit specialization in non-namespace scope `%D'"
+#~ msgstr "spécialisation explicite dans la portée d'un non espace de noms « %D »"
+
+#~ msgid "enclosing class templates are not explicitly specialized"
+#~ msgstr "fermetures de canevass de classe ne sont pas explicitement spécialisées"
+
+#~ msgid "specializing `%#T' in different namespace"
+#~ msgstr "spécialisation de « %#T » dans différents espaces de noms"
+
+#~ msgid "  from definition of `%#D'"
+#~ msgstr "  à partir de la définition de « %#D »"
+
+#~ msgid "specialization of `%T' after instantiation"
+#~ msgstr "spécialisation de « %T » après instanciation"
+
+#~ msgid "specialization `%T' after instantiation `%T'"
+#~ msgstr "spécialisation de « %T » après instanciation « %T »"
+
+#~ msgid "explicit specialization of non-template `%T'"
+#~ msgstr "spécialisation explicite du non canevas « %T »"
+
+#~ msgid "specialization of %D after instantiation"
+#~ msgstr "spécialisation de %D après instanciation"
+
+#~ msgid "%s %+#D"
+#~ msgstr "%s %+#D"
+
+#~ msgid "`%D' is not a function template"
+#~ msgstr "« %D » n'est pas un canevas de fonction"
+
+#~ msgid "template-id `%D' for `%+D' does not match any template declaration"
+#~ msgstr "template-id « %D » pour « %+D » ne concorde pas avec aucune déclaration de canevas"
+
+#~ msgid "ambiguous template specialization `%D' for `%+D'"
+#~ msgstr "spécialisation de canevas amibiguë « %D » pour « %+D »"
+
+#~ msgid "template-id `%D' in declaration of primary template"
+#~ msgstr "template-id « %D » dans la déclaration de canevas primaire"
+
+#~ msgid "template parameter list used in explicit instantiation"
+#~ msgstr "canevas de liste de paramètres utilisé dans une instanciation explicite"
+
+#~ msgid "definition provided for explicit instantiation"
+#~ msgstr "définition fournie pour une instanciation explicite"
+
+#~ msgid "too many template parameter lists in declaration of `%D'"
+#~ msgstr "trop de canevass de listes de paramètres dans la déclaration de « %D »"
+
+#~ msgid "too few template parameter lists in declaration of `%D'"
+#~ msgstr "trop peu de canevass de listes de paramètres dans la déclaration de « %D »"
+
+#~ msgid "explicit specialization not preceded by `template <>'"
+#~ msgstr "spécialisation explicite n'est pas précédée de « template <> »"
+
+#~ msgid "partial specialization `%D' of function template"
+#~ msgstr "spécialisation partielle « %D » du canevas de fonction"
+
+#~ msgid "default argument specified in explicit specialization"
+#~ msgstr "argument par défaut spécifié dans la spécialisation explicite"
+
+#~ msgid "template specialization with C linkage"
+#~ msgstr "spécialisation de canevas avec édition de liens C"
+
+#~ msgid "specialization of implicitly-declared special member function"
+#~ msgstr "spécialisation d'un membre spécial d'nue fonction déclaré implicitement"
+
+#~ msgid "no member function `%D' declared in `%T'"
+#~ msgstr "pas de membre de fonction « %D » déclaré dans « %T »"
+
+#~ msgid "too many template parameter lists in declaration of `%T'"
+#~ msgstr "trop de canevass de listes de paramètres dans la déclaration de « %T »"
+
+#~ msgid " shadows template parm `%#D'"
+#~ msgstr " masque le paramètre du canevas « %#D »"
+
+#~ msgid "template parameters not used in partial specialization:"
+#~ msgstr "paramètres du canevas ne sont pas utilisés dans la spécialisation partielle:"
+
+#~ msgid "        `%D'"
+#~ msgstr "        « %D »"
+
+#~ msgid "partial specialization `%T' does not specialize any template arguments"
+#~ msgstr "spécialisation partielle « %T » ne spécialise pas aucun canevas d'arguments"
+
+#~ msgid "template argument `%E' involves template parameter(s)"
+#~ msgstr "canevas d'argument « %E » implique des paramètres du canevas"
+
+#~ msgid "type `%T' of template argument `%E' depends on template parameter(s)"
+#~ msgstr "type « %T » du canevas d'argument « %E » dépend des paramètres du canevas"
+
+#~ msgid "no default argument for `%D'"
+#~ msgstr "pas d'argument par défaut pour « %D »"
+
+#~ msgid "template with C linkage"
+#~ msgstr "canevas avec liaison C"
+
+#~ msgid "template class without a name"
+#~ msgstr "canevas de classe sans nom"
+
+#~ msgid "destructor `%D' declared as member template"
+#~ msgstr "destructeur « %D » déclaré en tant que membre du canevas"
+
+#~ msgid "`%D' does not declare a template type"
+#~ msgstr "« %D » ne déclare pas un type de canevas"
+
+#~ msgid "template definition of non-template `%#D'"
+#~ msgstr "définition de canevas d'un non canevas « %#D »"
+
+#~ msgid "expected %d levels of template parms for `%#D', got %d"
+#~ msgstr "attendait %d niveaux de canevas de paramètres pour « %#D », obtenu %d"
+
+#~ msgid "got %d template parameters for `%#D'"
+#~ msgstr "a obtenu %d paramètres de canevas pour « %#D »"
+
+#~ msgid "got %d template parameters for `%#T'"
+#~ msgstr "a obtenu %d paramètres de canevas pour « %#T »"
+
+#~ msgid "  but %d required"
+#~ msgstr "  mais %d son requis"
+
+#~ msgid "`%T' is not a template type"
+#~ msgstr "« %T » n'est pas un type canevas"
+
+#~ msgid "previous declaration `%D'"
+#~ msgstr "déclaration précédente de « %D »"
+
+#~ msgid "used %d template parameter%s instead of %d"
+#~ msgstr "utilisé %d canevass paramètre%s au lieu de %d"
+
+#~ msgid "template parameter `%#D'"
+#~ msgstr "canevas de paramètre « %#D »"
+
+#~ msgid "redeclared here as `%#D'"
+#~ msgstr "redéclaré ici comme « %#D »"
+
+#~ msgid "redefinition of default argument for `%#D'"
+#~ msgstr "redéfinition de l'argument par défaut pour « %#D »"
+
+#~ msgid "%J  original definition appeared here"
+#~ msgstr "%J  définition originale apparaît ici"
+
+#~ msgid "`%E' is not a valid template argument"
+#~ msgstr "« %E » n'est pas un argument valide pour le canevas"
+
+#~ msgid "it must be the address of a function with external linkage"
+#~ msgstr "il doit être l'adresse d'une fonction avec lien externe"
+
+#~ msgid "it must be the address of an object with external linkage"
+#~ msgstr "il doît être l'adresse d'un objet avec lien externe"
+
+#~ msgid "it must be a pointer-to-member of the form `&X::Y'"
+#~ msgstr "il doit être un pointeur-vers-un-membre de la forme «&X::Y»"
+
+#~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage"
+#~ msgstr "chaîne %E n'est pas un canevas d'argument valide parce que c'est l'adresse d'un objet avec lien statique"
+
+#~ msgid "address of non-extern `%E' cannot be used as template argument"
+#~ msgstr "adresse du non externe « %E » ne peut être utilisé comme canevas d'argument"
+
+#~ msgid "non-constant `%E' cannot be used as template argument"
+#~ msgstr "la non const « %E » ne peut être utilisé comme un canevas d'argument"
+
+#~ msgid "type '%T' cannot be used as a value for a non-type template-parameter"
+#~ msgstr "type « %T » ne peut être utilisé comme une valeur pour un non type de paramètre de canevas"
+
+#~ msgid "invalid use of '%D' as a non-type template-argument"
+#~ msgstr "utilisation invalide de « %D » pour un non type de paramètre de canevas"
+
+#~ msgid "invalid use of '%E' as a non-type template-argument"
+#~ msgstr "utilisation invalide de « %E » pour un non type de paramètre de canevas"
+
+#~ msgid "to refer to a type member of a template parameter, use `typename %E'"
+#~ msgstr "pour référencer un type de membre de canevas de paramètres, utiliser « typename %E »"
+
+#~ msgid "type/value mismatch at argument %d in template parameter list for `%D'"
+#~ msgstr "non concordance de type/valeur pour l'argument %d dans la liste des paramètres du canevas de « %D »"
+
+#~ msgid "  expected a constant of type `%T', got `%T'"
+#~ msgstr "  attendait une constante de type « %T », a obtenu « %T »"
+
+#~ msgid "  expected a class template, got `%E'"
+#~ msgstr "  attendait un canevas de classe, a obtenu « %E »"
+
+#~ msgid "  expected a type, got `%E'"
+#~ msgstr "  attendait un type, a obtenu « %E »"
+
+#~ msgid "  expected a type, got `%T'"
+#~ msgstr "  attendait un type, a obtenu « %T »"
+
+#~ msgid "  expected a class template, got `%T'"
+#~ msgstr "  attendait un canevas de classe, a obtenu « %T »"
+
+#~ msgid "  expected a template of type `%D', got `%D'"
+#~ msgstr "  attendait un canevas de type « %D », a obtenu « %D »"
+
+#~ msgid "could not convert template argument `%E' to `%T'"
+#~ msgstr "ne peut convertir l'argument du canevas « %E » vers « %T »"
+
+#~ msgid "wrong number of template arguments (%d, should be %d)"
+#~ msgstr "nombre erroné d'arguments du canevas (%d devrait être %d)"
+
+#~ msgid "provided for `%D'"
+#~ msgstr "fournie pour « %D »"
+
+#~ msgid "template argument %d is invalid"
+#~ msgstr "canevas de l'argument %d est invalide"
+
+#~ msgid "non-template used as template"
+#~ msgstr "non canevas utilisé comme canevas"
+
+#~ msgid "non-template type `%T' used as a template"
+#~ msgstr "type non canevas « %T » utilisé comme un canevas"
+
+#~ msgid "for template declaration `%D'"
+#~ msgstr "pour la déclaration du canevas « %D »"
+
+#~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'"
+#~ msgstr "instantiation de la profondeur du canevas excède le maximum de %d (utiliser -ftemplate-depth-NN pour augmenter le maximum) lors de l'instanciation de « %D »"
+
+#~ msgid "ambiguous class template instantiation for `%#T'"
+#~ msgstr "instanciation ambiguë de canevas de classe pour « %#T »"
+
+#~ msgid "%s %+#T"
+#~ msgstr "%s %+#T"
+
+#~ msgid "instantiation of `%D' as type `%T'"
+#~ msgstr "instanciation de « %D » comme type « %T »"
+
+#~ msgid "invalid parameter type `%T'"
+#~ msgstr "paramètre invalide pour le type « %T »"
+
+#~ msgid "in declaration `%D'"
+#~ msgstr "dans la déclaration de « %D »"
+
+#~ msgid "creating pointer to member function of non-class type `%T'"
+#~ msgstr "création d'un pointeur vers le membre d'une fonction d'un type non classe « %T »"
+
+#~ msgid "creating array with size zero"
+#~ msgstr "création d'un tableau de taille zéro"
+
+#~ msgid "creating array with size zero (`%E')"
+#~ msgstr "création d'un tableau de taille zéro (« %E »)"
+
+#~ msgid "forming reference to void"
+#~ msgstr "formation d'une référence en void"
+
+#~ msgid "forming %s to reference type `%T'"
+#~ msgstr "formant %s pour référencer le type « %T »"
+
+#~ msgid "creating pointer to member of non-class type `%T'"
+#~ msgstr "création d'un pointeur vers le membre d'un type non classe « %T »"
+
+#~ msgid "creating pointer to member reference type `%T'"
+#~ msgstr "création d'un pointeur vers le membre de référence du type « %T »"
+
+#~ msgid "creating array of `%T'"
+#~ msgstr "création du tableau « %T »"
+
+#~ msgid "creating array of `%T', which is an abstract class type"
+#~ msgstr "création d'un tableau « %T », lequel est un type de classe abstraite"
+
+#~ msgid "`%T' is not a class, struct, or union type"
+#~ msgstr "« %T » n'est pas une classe, struct ou un type d'union"
+
+#~ msgid "use of `%s' in template"
+#~ msgstr "utilisation de « %s » dans le canevas"
+
+#~ msgid "dependent-name `%E' is parsed as a non-type, but instantiation yields a type"
+#~ msgstr "nom dépendant « %E » est analysé comme un non type, mais son instantiation le rend comme un type"
+
+#~ msgid "say `typename %E' if a type is meant"
+#~ msgstr "utiliser « typename %E » si un type est désiré"
+
+#~ msgid "`%T' uses anonymous type"
+#~ msgstr "« %T » utilise un type anonyme"
+
+#~ msgid "`%T' uses local type `%T'"
+#~ msgstr "« %T » utilise un type local « %T »"
+
+#~ msgid "`%T' is a variably modified type"
+#~ msgstr "« %T » est type modifié de manière variable"
+
+#~ msgid "integral expression `%E' is not constant"
+#~ msgstr "expression intégrale « %E » n'est pas une constante"
+
+#~ msgid "  trying to instantiate `%D'"
+#~ msgstr "  tentative d'instanciation « %D »"
+
+#~ msgid "incomplete type unification"
+#~ msgstr "type d'unification incomplète"
+
+#~ msgid "use of `%s' in template type unification"
+#~ msgstr "utilisation de « %s » dans le canevas du type d'unification"
+
+#~ msgid "explicit instantiation of non-template `%#D'"
+#~ msgstr "instanciation explicite d'un non canevas « %#D »"
+
+#~ msgid "no matching template for `%D' found"
+#~ msgstr "non concordance de canevas pour « %D » repéré"
+
+#~ msgid "explicit instantiation of `%#D'"
+#~ msgstr "instanciation explicite de « %#D »"
+
+#~ msgid "duplicate explicit instantiation of `%#D'"
+#~ msgstr "duplication d'instanciation explicite de « %#D »"
+
+#~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations"
+#~ msgstr "ISO C++ interdit l'utilisation de « extern » sur instanciations explicites"
+
+#~ msgid "storage class `%D' applied to template instantiation"
+#~ msgstr "classe de stockage « %D » appliqué à l'instanciation du canevas"
+
+#~ msgid "explicit instantiation of non-template type `%T'"
+#~ msgstr "instanciation explicite de type non canevas « %T »"
+
+#~ msgid "explicit instantiation of `%#T' before definition of template"
+#~ msgstr "instanciation explicite de « %#T » avant la définition de canevas"
+
+#~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations"
+#~ msgstr "ISO C++ interdit l'utilisation de « %s » sur instanciations explicites"
+
+#~ msgid "duplicate explicit instantiation of `%#T'"
+#~ msgstr "duplication d'instanciation explicite de « %#T »"
+
+#~ msgid "explicit instantiation of `%D' but no definition available"
+#~ msgstr "instanciation explicite de « %D » mais pas de définition disponible"
+
+#~ msgid "`%#T' is not a valid type for a template constant parameter"
+#~ msgstr "« %#T » n'a pas un type valide pour un canevas de parametre de constante"
+
+#~ msgid "-frepo must be used with -c"
+#~ msgstr "-frepo doit être utilisé avec -c"
+
+#~ msgid "mysterious repository information in %s"
+#~ msgstr "dépôt mystérieux d'informations dans %s"
+
+#~ msgid "can't create repository information file `%s'"
+#~ msgstr "ne peut créer le fichier « %s » pour dépôt d'informations"
+
+#~ msgid "cannot use typeid with -fno-rtti"
+#~ msgstr "ne peut utiliser typeid avec -fno-rtti"
+
+#~ msgid "must #include <typeinfo> before using typeid"
+#~ msgstr "doit utiliser  #include <typeinfo> avant d'utiliser typeid"
+
+#~ msgid "cannot create type information for type `%T' because its size is variable"
+#~ msgstr "ne peut créer une information pour le type « %T » parce que sa taille est variable"
+
+#~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed"
+#~ msgstr "dynamic_cast de « %#D » vers « %#T » ne pourra jamais réussir"
+
+#~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)"
+#~ msgstr "ne peut effectuer un dynamic_cast « %E » (du type « %#T ») vers le type « %#T » (%s)"
+
+#~ msgid "`%T' is an ambiguous base of `%T'"
+#~ msgstr "« %T » est une base ambiguë de « %T »"
+
+#~ msgid "`%T' is an inaccessible base of `%T'"
+#~ msgstr "« %T » est une base inaccessible de « %T »"
+
+#~ msgid "invalid covariant return type for `%#D'"
+#~ msgstr "type retourné covariant invalide pour « %#D »"
+
+#~ msgid "  overriding `%#D'"
+#~ msgstr "  écrasant « %#D »"
+
+#~ msgid "conflicting return type specified for `%#D'"
+#~ msgstr "types retournés conflictuels spécifiés pour « %#D »"
+
+#~ msgid "looser throw specifier for `%#F'"
+#~ msgstr "a placé un spécificateur pour « %#F »"
+
+#~ msgid "  overriding `%#F'"
+#~ msgstr "  écrasant « %#F »"
+
+#~ msgid "`%#D' cannot be declared"
+#~ msgstr "« %#D » ne peut être déclaré"
+
+#~ msgid "  since `%#D' declared in base class"
+#~ msgstr "  alors que « %#D » est déclaré dans la classe de base"
+
+#~ msgid "`%#D' needs a final overrider"
+#~ msgstr "« %#D » a besoin d'un écraseur final"
+
+#~ msgid "type of asm operand `%E' could not be determined"
+#~ msgstr "type d'opérande asm « %E » ne peut être déterminé"
+
+#~ msgid "invalid use of member `%D' in static member function"
+#~ msgstr "utilisation invalide du membre « %D » dans un membre statique de fonction"
+
+#~ msgid "from this location"
+#~ msgstr "à partir de cette localisation"
+
+#~ msgid "object missing in reference to `%D'"
+#~ msgstr "objet manquant dans la référence à « %D »"
+
+#~ msgid "arguments to destructor are not allowed"
+#~ msgstr "arguments au destructeur ne sont pas permis"
+
+#~ msgid "`this' is unavailable for static member functions"
+#~ msgstr "« cela » n'est pas disponible pour les membres statiques de fonctions"
+
+#~ msgid "invalid use of `this' in non-member function"
+#~ msgstr "utilisation invalide de « ceci » dans un non membre de fonction"
+
+#~ msgid "invalid use of `this' at top level"
+#~ msgstr "utilisation invalide de « this » hors de toute fonction"
+
+#~ msgid "invalid qualifying scope in pseudo-destructor name"
+#~ msgstr "étendue invalide du qualificateur dans un nom de pseudo-destructeur"
+
+#~ msgid "`%E' is not of type `%T'"
+#~ msgstr "« %E » n'est pas un type « %T »"
+
+#~ msgid "template type parameters must use the keyword `class' or `typename'"
+#~ msgstr "canevas de type de paramètres doit utiliser le mot clé « class» ou «typename »"
+
+#~ msgid "invalid use of type `%T' as a default value for a template template-parameter"
+#~ msgstr "utilisation invalide du type « %T » comme valeur par défaut pour un canevas de paramètres de canevas"
+
+#~ msgid "invalid use of `%D' as a default value for a template template-parameter"
+#~ msgstr "utilisation invalide de « %D » comme valeur par défaut pour un canevas de paramètres de canevas"
+
+#~ msgid "invalid default argument for a template template parameter"
+#~ msgstr "utilisation invalide d'argumenet pour un canevas de paramètres de canevas"
+
+#~ msgid "definition of `%#T' inside template parameter list"
+#~ msgstr "définition de « %#T » à l'intérieur d'un canevas de liste de paramètres"
+
+#~ msgid "invalid definition of qualified type `%T'"
+#~ msgstr "définition invalide d'un type qualifié « %T »"
+
+#~ msgid "previous definition of `%#T'"
+#~ msgstr "définition précédente de « %#T »"
+
+#~ msgid "invalid base-class specification"
+#~ msgstr "spécification de base de classe invalide"
+
+#~ msgid "base class `%T' has cv qualifiers"
+#~ msgstr "classe de base « %T » a des qualificateurs cv"
+
+#~ msgid "multiple declarators in template declaration"
+#~ msgstr "déclarateurs  multiples dans la déclaration de canevas"
+
+#~ msgid "incomplete type `%T' used in nested name specifier"
+#~ msgstr "type « %T » incomplet utilisé dans un spécificateur de noms imbriqué"
+
+#~ msgid "`%D' is not a member of `%T'"
+#~ msgstr "« %D » n'est pas un membre de « %T »"
+
+#~ msgid "`%D' is not a member of `%D'"
+#~ msgstr "« %D » n'est pas un membre de « %D »"
+
+#~ msgid "template parameter `%D' of type `%T' is not allowed in an integral constant expression because it is not of integral or enumeration type"
+#~ msgstr "paramètre « %D » du canevas du type « %T » ne sont pas permises dans une expression intégrale de constante parce qu'elle n'est pas intégral ou un type énumération"
+
+#~ msgid "`%D' cannot appear in a constant-expression"
+#~ msgstr "« %D » ne peut apparaître dans une expression de constante"
+
+#~ msgid "use of namespace `%D' as expression"
+#~ msgstr "utilisation d'un espace de dnomes « %D » comme expression"
+
+#~ msgid "use of class template `%T' as expression"
+#~ msgstr "utilisation du canevas de classe « %T » comme expression"
+
+#~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice"
+#~ msgstr "requête du membre « %D » est ambiquë dans de mutliples héritage de treillis"
+
+#~ msgid "use of %s from containing function"
+#~ msgstr "utilisation de %s d'un fonction contenante"
+
+#~ msgid "  `%#D' declared here"
+#~ msgstr "  « %#D » déclaré ici"
+
+#~ msgid "type of `%E' is unknown"
+#~ msgstr "type « %E » est inconnu"
+
+#~ msgid "non-lvalue in %s"
+#~ msgstr "n'est pas un membre gauche dans %s"
+
+#~ msgid "`%V' qualifiers cannot be applied to `%T'"
+#~ msgstr "qualificateur « %V » ne peut pas être appliqué à « %T »"
+
+#~ msgid "`%s' attribute can only be applied to Java class definitions"
+#~ msgstr "attribut « %s » peut seulement être appliqué aux définitions de classes Java"
+
+#~ msgid "`%s' attribute can only be applied to class definitions"
+#~ msgstr "attribut « %s » peut seulement être appliqué aux définitions de classes"
+
+#~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default"
+#~ msgstr "« %s » est obsolète; vtables g++ sont maintenant COM-compatibles par défaut"
+
+#~ msgid "requested init_priority is not an integer constant"
+#~ msgstr "init_priority demandé n'est pas une constante entière"
+
+#~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type"
+#~ msgstr "peut seulement utiliser l'attribut « %s » sur la portée de fichier de définitions des objets de type de classe"
+
+#~ msgid "requested init_priority is out of range"
+#~ msgstr "init_priority demandé est hors limite"
+
+#~ msgid "requested init_priority is reserved for internal use"
+#~ msgstr "init_priority demandé est réservé pour un usage interne"
+
+#~ msgid "`%s' attribute is not supported on this platform"
+#~ msgstr "attribut « %s » n'est pas supporté sur cette plate-forme"
+
+#~ msgid "lang_* check: failed in %s, at %s:%d"
+#~ msgstr "vérification lang_* : éched dans %s, à %s:%d"
+
+#~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast"
+#~ msgstr "%s entre des types distincs de pointeurs  « %T » et « %T » manque de transtypage"
+
+#~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function"
+#~ msgstr "ISO C++ interdit %s entre les pointeurs de type « void * » et les pointeurs de fonctions"
+
+#~ msgid "%s between distinct pointer-to-member types `%T' and `%T' lacks a cast"
+#~ msgstr "%s entre des types distincs de pointeurs vers les membres  « %T » et « %T » manque de transtypage"
+
+#~ msgid "invalid application of `%s' to a member function"
+#~ msgstr "application invalide de « %s » à une fonction membre"
+
+#~ msgid "invalid application of `%s' to a bit-field"
+#~ msgstr "application invalide de « %s » sur un champ de bits"
+
+#~ msgid "ISO C++ forbids applying `%s' to an expression of function type"
+#~ msgstr "ISO C++ interdit l'application de « %s » à une expression d'un type de fonction"
+
+#~ msgid "invalid use of non-static member function"
+#~ msgstr "utilisation invalide d'un membre non statique de fonction"
+
+#~ msgid "deprecated conversion from string constant to `%T'"
+#~ msgstr "conversion obsolète de la chaîne de constante vers « %T »"
+
+#~ msgid "request for member `%D' in `%E', which is of non-class type `%T'"
+#~ msgstr "requête du membre « %D » dans « %E », lequel n'est pas de type classe « %T »"
+
+#~ msgid "invalid use of nonstatic data member '%E'"
+#~ msgstr "utilisation invalide d'un membre de données non statique « %E »"
+
+#~ msgid "invalid access to non-static data member `%D' of NULL object"
+#~ msgstr "accès invalide à un membre de données non statique « %D » d'un objet null"
+
+#~ msgid "(perhaps the `offsetof' macro was used incorrectly)"
+#~ msgstr "(peut-être que le macro « offsetof » a été utilisé incorrectement)"
+
+#~ msgid "the type being destroyed is `%T', but the destructor refers to `%T'"
+#~ msgstr "le type devant être détruit est « %T », mais le destructeur réfère à « %T »"
+
+#~ msgid "`%D::%D' is not a member of `%T'"
+#~ msgstr "« %D::%D » n'est pas un membre de « %T »"
+
+#~ msgid "`%T' is not a base of `%T'"
+#~ msgstr "« %D » n'est pas une base de « %T »"
+
+#~ msgid "'%D' has no member named '%E'"
+#~ msgstr "« %D » n'a pas de membre nommé « %E »"
+
+#~ msgid "`%D' is not a member template function"
+#~ msgstr "« %D » n'est pas une membre du canevas de fonction"
+
+#~ msgid "`%T' is not a pointer-to-object type"
+#~ msgstr "« %T » n'est pas un type pointeur-vers-objet"
+
+#~ msgid "invalid use of `%s' on pointer to member"
+#~ msgstr "utilisation invalide de « %s » sur un pointeur vers un membre"
+
+#~ msgid "invalid type argument"
+#~ msgstr "type d'argument invalide"
+
+#~ msgid "ISO C++ forbids subscripting non-lvalue array"
+#~ msgstr "ISO C++ interdit le souscriptage de non lvalue de tableau"
+
+#~ msgid "subscripting array declared `register'"
+#~ msgstr "souscriptage de tableau déclaré « register »"
+
+#~ msgid "object missing in use of `%E'"
+#~ msgstr "objet manquant dans l'usage de « %E »"
+
+#~ msgid "ISO C++ forbids calling `::main' from within program"
+#~ msgstr "ISO C++ interdit l'appel de «::main» depuis l'intérieur du programme"
+
+#~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'"
+#~ msgstr "doit utiliser .* ou ->* pour l'appel de la fonction pointer-to-member dans « %E (...) »"
+
+#~ msgid "`%E' cannot be used as a function"
+#~ msgstr "« %E » ne peut être utilisé comme une fonction"
+
+#~ msgid "too many arguments to %s `%+#D'"
+#~ msgstr "trop d'arguments pour %s « %+#D »"
+
+#~ msgid "at this point in file"
+#~ msgstr "à ce point dans le fichier"
+
+#~ msgid "parameter %P of `%D' has incomplete type `%T'"
+#~ msgstr "paramètre %P de « %D » a un type incomplet « %T »"
+
+#~ msgid "parameter %P has incomplete type `%T'"
+#~ msgstr "paramètre %P a un type incomplet « %T »"
+
+#~ msgid "too few arguments to %s `%+#D'"
+#~ msgstr "pas assez d'argument pour %s « %+#D »"
+
+#~ msgid "assuming cast to type `%T' from overloaded function"
+#~ msgstr "transtypage vers le type « %T » est assumé à partir de la fonction surchargée"
+
+#~ msgid "division by zero in `%E / 0'"
+#~ msgstr "division par zéro dans « %E / 0 »"
+
+#~ msgid "division by zero in `%E / 0.'"
+#~ msgstr "division par zéro dans « %E / 0. »"
+
+#~ msgid "division by zero in `%E %% 0'"
+#~ msgstr "division par zéro dans « %E %% 0 »"
+
+#~ msgid "division by zero in `%E %% 0.'"
+#~ msgstr "division par zéro dans « %E %% 0. »"
+
+#~ msgid "%s rotate count is negative"
+#~ msgstr "compteur de rotation %s est négatif"
+
+#~ msgid "%s rotate count >= width of type"
+#~ msgstr "compteur de rotation %s >= largeur du type"
+
+#~ msgid "ISO C++ forbids comparison between pointer and integer"
+#~ msgstr "ISO C++ interdit la comparaison entre un pointeur et un entier"
+
+#~ msgid "comparison between types `%#T' and `%#T'"
+#~ msgstr "comparaison entre les types « %#T » et « %#T »"
+
+#~ msgid "comparison between signed and unsigned integer expressions"
+#~ msgstr "comparaison entre des expressions entières signée et non signée"
+
+#~ msgid "invalid operands of types `%T' and `%T' to binary `%O'"
+#~ msgstr "opérandes invalides pour les types « %T » et « %T » en binaire « %O »"
+
+#~ msgid "NULL used in arithmetic"
+#~ msgstr "NULL utilisé en arithmétique"
+
+#~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction"
+#~ msgstr "ISO C++ interdit l'utilisation d'un pointeur de type « void * » dans une soustraction"
+
+#~ msgid "ISO C++ forbids using pointer to a function in subtraction"
+#~ msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une fonction dans une soustraction"
+
+#~ msgid "ISO C++ forbids using pointer to a method in subtraction"
+#~ msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une méthode dans une soustraction"
+
+#~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
+#~ msgstr "utilisation invalide d'un pointeur vers un type incomplet dans un pointeur arithmétique"
+
+#~ msgid "invalid use of '%E' to form a pointer-to-member-function.  Use a qualified-id."
+#~ msgstr "utilisation invalide de « %E » pour former pointer-to-member-function.  Utiliser un identifateur qualifié"
+
+#~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function"
+#~ msgstr "parenthèses autour de « %E » ne peuvent être utilisées pour former pointer-to-member-function"
+
+#~ msgid "taking address of temporary"
+#~ msgstr "prise de l'adresse du temporaire"
+
+# FIXME: I18N
+#~ msgid "ISO C++ forbids %sing an enum"
+#~ msgstr "ISO C++ interdit de %ser un enum"
+
+#~ msgid "cannot %s a pointer to incomplete type `%T'"
+#~ msgstr "ne peut utiliser %s comme pointeur sur un type incomplet « %T »"
+
+#~ msgid "ISO C++ forbids %sing a pointer of type `%T'"
+#~ msgstr "ISO C++ interdit %s utilisation d'un pointeur de type « %T »"
+
+#~ msgid "cast to non-reference type used as lvalue"
+#~ msgstr "transtypage d'un type non référencé utilisé comme membre gauche"
+
+#~ msgid "invalid use of `--' on bool variable `%D'"
+#~ msgstr "utilisation invalide de «--» sur une variable booléenne « %D »"
+
+#~ msgid "ISO C++ forbids taking address of function `::main'"
+#~ msgstr "ISO C++ interdit de prendre l'adresse d'une fonction «::main»"
+
+#~ msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "ISO C++ interdit de prendre l'adress d'un membre de fonction non statique non qualifié ou entre parenthèses pour former un pointeur d'un membre de fonction. Utilisers «&%T::%D»"
+
+#~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "ISO C++ interdit de prendre l'adresse d'une borne d'un membre de fontion pour former un membre à la fonction. Disons «&%T::%D»"
+
+#~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
+#~ msgstr "ISO C++ interdit de prendre l'adresse du transtypage vers une expression n'etant pas membre gauche"
+
+#~ msgid "unary `&'"
+#~ msgstr "unaire « & »"
+
+#~ msgid "attempt to take address of bit-field structure member `%D'"
+#~ msgstr "tentative de prise d'adresse du membre « %D » d'une structure de champ de bits"
+
+#~ msgid "taking address of destructor"
+#~ msgstr "prise de l'adresse du destructeur"
+
+#~ msgid "taking address of bound pointer-to-member expression"
+#~ msgstr "prise de l'adresse de la borne de l'expression d'un pointeur-vers-un membre"
+
+#~ msgid "cannot create pointer to reference member `%D'"
+#~ msgstr "ne peut déclarer un pointeur vers le membre de référence « %D »"
+
+#~ msgid "cannot take the address of `this', which is an rvalue expression"
+#~ msgstr "ne peut prendre l'adresse de « ceci », laquelle est une expression rvalue"
+
+#~ msgid "address requested for `%D', which is declared `register'"
+#~ msgstr "adresse requise pour « %D», lequel est déclaré «register »"
+
+#~ msgid "%s expression list treated as compound expression"
+#~ msgstr "%s liste d'expressions traitée comme une expression composée"
+
+#~ msgid "%s from type `%T' to type `%T' casts away constness"
+#~ msgstr "%S à partir du « %T » vers le type « %T » provoque un transtypage sans constante"
+
+#~ msgid "invalid static_cast from type `%T' to type `%T'"
+#~ msgstr "static_cast invalide du type « %T » au type « %T »"
+
+#~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'"
+#~ msgstr "reinterpret_cast invalide d'une expression rvalue de type « %T » vers le type « %T »"
+
+#~ msgid "reinterpret_cast from `%T' to `%T' loses precision"
+#~ msgstr "reinterpret_cast de « %T » vers « %T » génère une perte de précision"
+
+#~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
+#~ msgstr "ISO C++ interdit le transtypage entre un pointeur de fonction et un pointeur d'objet"
+
+#~ msgid "invalid reinterpret_cast from type `%T' to type `%T'"
+#~ msgstr "reinterpret_cast invalide à partir du type « %T » vers le type « %T »"
+
+#~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type"
+#~ msgstr "utilisation invalide de const_cast avec le type « %T », lequel n'est pas un pointeur, une référence, ni un type pointeur-vers-données-membre"
+
+#~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type"
+#~ msgstr "utilisation invalide de const_cast avec le type « %T », lequel est un pointeur ou un référence à un type de fonction"
+
+#~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'"
+#~ msgstr "const_cast invalide de la rvalue du type « %T » vers le type « %T »"
+
+#~ msgid "invalid const_cast from type `%T' to type `%T'"
+#~ msgstr "const_cast invalide à partir du type « %T » vers le type « %T »"
+
+#~ msgid "ISO C++ forbids casting to an array type `%T'"
+#~ msgstr "ISO C++ interdit le transtypage vers un type tableau « %T »"
+
+#~ msgid "invalid cast to function type `%T'"
+#~ msgstr "transtypage invalide pour un type de fonction « %T »"
+
+#~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type"
+#~ msgstr "transtypage de « %T » vers « %T » écarte les qualificateurs du type cible du pointeur"
+
+#~ msgid "cast from `%T' to `%T' increases required alignment of target type"
+#~ msgstr "transtypage de « %T » vers « %T » augmente l'alignement requis pour le type ciblé"
+
+#~ msgid "  in evaluation of `%Q(%#T, %#T)'"
+#~ msgstr "  lors de l'évaluation de « %Q(%#T, %#T) »"
+
+#~ msgid "ISO C++ forbids cast to non-reference type used as lvalue"
+#~ msgstr "ISO C++ interdit le transtypage d'un type non référencé utilisé comme membre gauche"
+
+#~ msgid "incompatible types in assignment of `%T' to `%T'"
+#~ msgstr "type incompatible dans l'affectation de « %T » vers « %T »"
+
+#~ msgid "ISO C++ forbids assignment of arrays"
+#~ msgstr "ISO C++ interdit l'affectation de tableaux"
+
+#~ msgid "   in pointer to member function conversion"
+#~ msgstr "   dans la conversion d'un pointeur vers un membre de fonction"
+
+#~ msgid "   in pointer to member conversion"
+#~ msgstr "   dans la conversion d'un pointeur vers un membre"
+
+#~ msgid "pointer to member cast via virtual base `%T'"
+#~ msgstr "pointeur vers un membre transtypé via la base virtuelle « %T »"
+
+#~ msgid "pointer to member conversion via virtual base `%T'"
+#~ msgstr "conversion de pointeur à membre à l'aide de la base virtuelle « %T »"
+
+#~ msgid "invalid conversion to type `%T' from type `%T'"
+#~ msgstr "conversion invalide vers un type « %T » à partir du type « %T »"
+
+#~ msgid "passing NULL used for non-pointer %s %P of `%D'"
+#~ msgstr "passage d'un NULL utilisé pour un non pointeur %s %P de « %D »"
+
+#~ msgid "%s to non-pointer type `%T' from NULL"
+#~ msgstr "%s vers un type non pointeur « %T » à partir d'un NULL"
+
+#~ msgid "passing `%T' for %s %P of `%D'"
+#~ msgstr "passage « %T » pour %s %P de « %D »"
+
+#~ msgid "%s to `%T' from `%T'"
+#~ msgstr "%s vers « %T » à partir de « %T »"
+
+#~ msgid "passing negative value `%E' for %s %P of `%D'"
+#~ msgstr "passage de valeur négative « %E » pour %s %P de « %D »"
+
+#~ msgid "%s of negative value `%E' to `%T'"
+#~ msgstr "%s de valeur négative « %E » vers « %T »"
+
+#~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'"
+#~ msgstr "ne peut convertir « %T » à « %T » pour l'argument « %P » vers « %D »"
+
+#~ msgid "cannot convert `%T' to `%T' in %s"
+#~ msgstr "ne peut convertir « %T » vers « %T » dans %s"
+
+#~ msgid "in passing argument %P of `%+D'"
+#~ msgstr "dans le passage de l'argument %P de « %+D »"
+
+#~ msgid "returning reference to temporary"
+#~ msgstr "retourné la référence vers le temporaire"
+
+#~ msgid "reference to non-lvalue returned"
+#~ msgstr "une référence vers quelque chose n'étant pas un membre gauche a été retourné"
+
+#~ msgid "reference to local variable `%D' returned"
+#~ msgstr "référence vers une variable locale « %D » retourné"
+
+#~ msgid "address of local variable `%D' returned"
+#~ msgstr "adresse d'une variable locale « %D » retournée"
+
+#~ msgid "returning a value from a destructor"
+#~ msgstr "retourné une valeur du destructeur"
+
+#~ msgid "cannot return from a handler of a function-try-block of a constructor"
+#~ msgstr "ne peut retourner d'un handler d'une fonction try-block d'un constructeur"
+
+#~ msgid "returning a value from a constructor"
+#~ msgstr "retourné une valeur d'un constructeur"
+
+#~ msgid "return-statement with no value, in function returning '%T'"
+#~ msgstr "déclaration à retourner sans valeur dans une fonction retournant « %T »"
+
+#~ msgid "return-statement with a value, in function returning 'void'"
+#~ msgstr "déclaration éa retourner avec une valeur dans une fonction retournant un « void »"
+
+#~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)"
+#~ msgstr "« operator new» ne doit pas retourner NULL à moins qu'il ne soit déclaré «throw() » (ou -fcheck-new est utilisée)"
+
+#~ msgid "type `%T' is not a base type for type `%T'"
+#~ msgstr "type « %T » n'est pas un type de base pour le type « %T »"
+
+#~ msgid "cannot declare variable `%D' to be of type `%T'"
+#~ msgstr "ne peut déclarer la variable « %D » comme étant de type « %T »"
+
+#~ msgid "cannot declare parameter `%D' to be of type `%T'"
+#~ msgstr "ne peut déclarer la paramètre « %D » comme étant de type « %T »"
+
+#~ msgid "cannot declare field `%D' to be of type `%T'"
+#~ msgstr "ne peut déclarer la champ « %D » comme étant de type « %T »"
+
+#~ msgid "invalid return type for member function `%#D'"
+#~ msgstr "type retourné invalide pour le membre de la fonction « %#D »"
+
+#~ msgid "invalid return type for function `%#D'"
+#~ msgstr "type retourné invalide pour la fonction « %#D »"
+
+#~ msgid "cannot allocate an object of type `%T'"
+#~ msgstr "ne peut allouer un objet de type « %T »"
+
+#~ msgid "  because the following virtual functions are abstract:"
+#~ msgstr "  parce que les fonctions viruelles suivantes sont abstraites:"
+
+#~ msgid "\t%#D"
+#~ msgstr "\t%#D"
+
+#~ msgid "  since type `%T' has abstract virtual functions"
+#~ msgstr "  depuis que le type « %T » a des fonctions virtuelles abstraites"
+
+#~ msgid "constructor syntax used, but no constructor declared for type `%T'"
+#~ msgstr "syntaxe de constructeur utilisé mais aucun constructeur déclaré pour le type « %T »"
+
+#~ msgid "cannot initialize arrays using this syntax"
+#~ msgstr "ne peut initialiser les tableaux en utilisant la syntaxe"
+
+#~ msgid "initializing array with parameter list"
+#~ msgstr "initialise le tableau avec la liste des paramètres"
+
+#~ msgid "initializer for scalar variable requires one element"
+#~ msgstr "l'initialisation de variable scalaire requiert un élément"
+
+#~ msgid "braces around scalar initializer for `%T'"
+#~ msgstr "accolades autour de l'initialiseur scalaire pour « %T »"
+
+#~ msgid "ignoring extra initializers for `%T'"
+#~ msgstr "initialiseurs superflus pour « %T » ignorés"
+
+#~ msgid "variable-sized object of type `%T' may not be initialized"
+#~ msgstr "un objet de taille variable de type « %T » peut ne pas être initialisé"
+
+#~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'"
+#~ msgstr "sous-objet de type « %T » doit être initialisé par un constructeur, non pas par « %E »"
+
+#~ msgid "aggregate has a partly bracketed initializer"
+#~ msgstr "aggrégat a un initialiseur partiellement entouré d'accolades"
+
+#~ msgid "non-trivial labeled initializers"
+#~ msgstr "initialiseur étiqueté de manière non trivial"
+
+#~ msgid "non-empty initializer for array of empty elements"
+#~ msgstr "initialiseurs non vides pour un tableau d'éléments vides"
+
+#~ msgid "initializer list for object of class with virtual base classes"
+#~ msgstr "liste d'initialiseurs pour les objets de classe avec classes de base virtuelles"
+
+#~ msgid "initializer list for object of class with base classes"
+#~ msgstr "liste d'initialiseurs pour les objets de classe avec classes de base"
+
+#~ msgid "initializer list for object using virtual functions"
+#~ msgstr "liste d'initialiseurs pour objet utilisant des fonctions virtuelles"
+
+#~ msgid "missing initializer for member `%D'"
+#~ msgstr "initialiseur manquant pour le membre « %D »"
+
+#~ msgid "uninitialized const member `%D'"
+#~ msgstr "membre de constante non initialisé pour « %D »"
+
+#~ msgid "member `%D' with uninitialized const fields"
+#~ msgstr "membre « %D » avec des champs de constantes non initialisée"
+
+#~ msgid "member `%D' is uninitialized reference"
+#~ msgstr "membre « %D » est une référence non initialisée"
+
+#~ msgid "index value instead of field name in union initializer"
+#~ msgstr "valeur index au lieu du nom de champ dans l'initialiseur d'union"
+
+#~ msgid "no field `%D' in union being initialized"
+#~ msgstr "pas de champ « %D » dans l'aggrégat n'a été initialisé"
+
+#~ msgid "union `%T' with no named members cannot be initialized"
+#~ msgstr "aggrégat « %T » sans mambre nommé ne peut être initialisé"
+
+#~ msgid "excess elements in aggregate initializer"
+#~ msgstr "éléments en excès dans l'initialiseur d'aggrégat"
+
+#~ msgid "circular pointer delegation detected"
+#~ msgstr "délégation de pointeur circulaire détecté"
+
+#~ msgid "base operand of `->' has non-pointer type `%T'"
+#~ msgstr "l'opérande de base de «->» a un type non pointeur « %T »"
+
+#~ msgid "result of `operator->()' yields non-pointer result"
+#~ msgstr "résultat de « operator->() » laisse comme résultat un non pointeur"
+
+#~ msgid "base operand of `->' is not a pointer"
+#~ msgstr "l'opérande de base de «->» n'est pas un pointeur"
+
+#~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'"
+#~ msgstr "« %E » ne peut être utilisé comme pointeur de membre, alors qu'il est de type « %T »"
+
+#~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'"
+#~ msgstr "ne peut appliquer un pointeur de membre « %E » à « %E », lequel n'est pas un type d'aggrégat « %T »"
+
+#~ msgid "member type `%T::' incompatible with object type `%T'"
+#~ msgstr "type du membre « %T:: » incompatible avec le type d'objet « %T »"
+
+#~ msgid "call to function `%D' which throws incomplete type `%#T'"
+#~ msgstr "l'appel à la fonction « %D » laquelle écarte le type incomplet « %T »"
+
+#~ msgid "call to function which throws incomplete type `%#T'"
+#~ msgstr "l'appel à la fonction laquelle écarte le type incomplet « %T »"
+
+#~ msgid "%s is deprecated, please see the documentation for details"
+#~ msgstr "%s est obsolète, SVP voir la documentation pour les détails"
+
+#~ msgid "note:"
+#~ msgstr "note :"
+
+#~ msgid "warning:"
+#~ msgstr "avertissement :"
+
+#~ msgid "fatal:"
+#~ msgstr "fatal :"
+
+#~ msgid "(continued):"
+#~ msgstr "(suite) :"
+
+#~ msgid "[REPORT BUG!!] %"
+#~ msgstr "[RAPPORTER L'ANOMALIE!!] %"
+
+#~ msgid "[REPORT BUG!!]"
+#~ msgstr "[RAPPORTER L'ANOMALIE!!]"
+
+#~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling"
+#~ msgstr "l'étiquette affectée ne peut s'insérer dans « %A » à %0 - utilisation d'un voisinage plus grand"
+
+#~ msgid "no INTEGER type can hold a pointer on this configuration"
+#~ msgstr "AUCUN type ENTIER ne peut tenir un pointeur sur cette configuration"
+
+#~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide,"
+#~ msgstr "configuration : REAL, INTEGER, et LOGICAL ont %d bits,"
+
+#~ msgid "and pointers are %d bits wide, but g77 doesn't yet work"
+#~ msgstr "et les pointeurs ont %d bits, mais g77 ne fonctionne pas encore"
+
+#~ msgid "properly unless they all are 32 bits wide"
+#~ msgstr "correctement à moins qu'ils aient tous 32 bits de largeur"
+
+#~ msgid "Please keep this in mind before you report bugs."
+#~ msgstr "SVP garder cela en tête avant de rapporter les anomalies."
+
+#~ msgid "configuration: char * holds %d bits, but ftnlen only %d"
+#~ msgstr "configuration: char * contient %d bits, mais ftnlen seulement %d"
+
+#~ msgid ""
+#~ "configuration: char * holds %d bits, but INTEGER only %d --\n"
+#~ " ASSIGN statement might fail"
+#~ msgstr ""
+#~ "configuration: char * contient %d bits, mais INTEGER seulement %d --\n"
+#~ " déclaration ASSIGN pourrait échouer"
+
+#~ msgid "In statement function"
+#~ msgstr "Dans la déclaration de fonction"
+
+#~ msgid "Outside of any program unit:\n"
+#~ msgstr "En dehors de toute unité de programme:\n"
+
+#~ msgid "%A from %B at %0%C"
+#~ msgstr "%A à partir de %B à %0%C"
+
+#~ msgid "At %0, INCLUDE file %A exists, but is not readable"
+#~ msgstr "À %0, fichier INCLUDE %A existe mais n'est pas lisible"
+
+#~ msgid "At %0, INCLUDE nesting too deep"
+#~ msgstr "À %0, imbrication du INCLUDE est trop profonde"
+
+#~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses"
+#~ msgstr "Deux opérateurs arithmétiques dans la rangée à %0 et %1 -- utiliser des parenthèses"
+
+#~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses"
+#~ msgstr "L'opérateur à %0 a une précédence plus basse que celui à %1 -- utiliser des parenthèses"
+
+#~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2"
+#~ msgstr "Utiliser .EQV./.NEQV. au lieu de .EQ./.NE. à %0 pour les opérandes LOGICAL à %1 et %2"
+
+#~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER"
+#~ msgstr "Opérande non supportée pour ** à %1 -- conversion à INTEGER par défaut"
+
+#~ msgid "overflowed output arg list for `%s'"
+#~ msgstr "débordement de la liste d'arguments de sortie pour « %s »"
+
+#~ msgid ""
+#~ "GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n"
+#~ "You may redistribute copies of GNU Fortran\n"
+#~ "under the terms of the GNU General Public License.\n"
+#~ "For more information about these matters, see the file named COPYING\n"
+#~ "or type the command `info -f g77 Copying'.\n"
+#~ msgstr ""
+#~ "GNU Fortran est fourni sans aucune garantie, selon les limites permises par la loi.\n"
+#~ "Vous pouvez redistribuer des copies de GNU Fortran\n"
+#~ "selon les termes de la GNU General Public License.\n"
+#~ "Pour plus d'informations à ce sujet, consulter le fichier portant le nom COPYING\n"
+#~ "ou taper la commande `info -f g77 Copying'.\n"
+
+#~ msgid "--driver no longer supported"
+#~ msgstr "--driver n'est plus supporté"
+
+#~ msgid "argument to `%s' missing"
+#~ msgstr "argument pour « %s » est manquant"
+
+#~ msgid "no input files; unwilling to write output files"
+#~ msgstr "aucun fichier d'entrée; pas d'accord pour écrire dans les fichiers de sortie"
+
+#~ msgid "Implicit declaration of `%A' at %0"
+#~ msgstr "déclaration implicite de « %A » à %0"
+
+#~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0"
+#~ msgstr "séquence d'échappement non conforme au standard ISO C «\\%A» à %0"
+
+#~ msgid "Unknown escape sequence `\\%A' at %0"
+#~ msgstr "séquence d'échappement inconnue «\\%A» à %0"
+
+#~ msgid "Unterminated escape sequence `\\' at %0"
+#~ msgstr "séquence d'échappement non terminée «\\» at %0"
+
+#~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0"
+#~ msgstr "séquence d'échappement inconnue «\\» suivi par le code de caractères 0x%A at %0"
+
+#~ msgid "\\x used at %0 with no following hex digits"
+#~ msgstr "\\x utilisé à %0 sans être suivi des chiffres hexdécimaux"
+
+#~ msgid "Hex escape at %0 out of range"
+#~ msgstr "échappement hexadécimal à %0 hors limite"
+
+#~ msgid "Escape sequence at %0 out of range for character"
+#~ msgstr "séquence d'échappement à %0 hors limite pour le type caractère"
+
+#~ msgid "hex escape out of range"
+#~ msgstr "échappement hexadécimal hors limite"
+
+#~ msgid "non-ANSI-standard escape sequence, `\\%c'"
+#~ msgstr "séquence d'échappement n'est pas ANSI standard: «\\%c'"
+
+#~ msgid "non-ISO escape sequence `\\%c'"
+#~ msgstr "séquence d'échappement non ISO «\\%c'"
+
+#~ msgid "unknown escape sequence `\\%c'"
+#~ msgstr "séquence d'échappement inconnue: «\\%c'"
+
+#~ msgid "unknown escape sequence: `\\' followed by char code 0x%x"
+#~ msgstr "séquence d'échappement inconnue: «\\» suivi par le code de caractères 0x%x"
+
+#~ msgid "badly formed directive -- no closing quote"
+#~ msgstr "directive mal composée -- pas de guillement ou d'apostrophe de fermeture"
+
+#~ msgid "#-lines for entering and leaving files don't match"
+#~ msgstr "#-lines pour entrer et quitter les fichiers ne concordent pas"
+
+#~ msgid "bad directive -- missing close-quote"
+#~ msgstr "directive erronée -- manque un apostrophe ou un guillemet de fermeture"
+
+#~ msgid "invalid #ident"
+#~ msgstr "#ident invalide"
+
+#~ msgid "undefined or invalid # directive"
+#~ msgstr "directive # non définie ou invalide"
+
+#~ msgid "invalid #line"
+#~ msgstr "#line invalide"
+
+#~ msgid "use `#line ...' instead of `# ...' in first line"
+#~ msgstr "utiliser « #line ... » au lieu de « # ... » dans la première ligne"
+
+#~ msgid "invalid #-line"
+#~ msgstr "#-line invalide"
+
+#~ msgid "Null character at %0 -- line ignored"
+#~ msgstr "caractère null à %0 -- ligne ignorée"
+
+#~ msgid "INCLUDE at %0 not the only statement on the source line"
+#~ msgstr "INCLUDE à %0 n'est pas la seule déclaration sur la ligne source"
+
+#~ msgid "ASSIGNed FORMAT specifier is too small"
+#~ msgstr "spécificateur dans ASSIGN FORMAT est trop petit"
+
+#~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry"
+#~ msgstr "SÉLECTION du CASE sur un type CHARACTER (à %0) n'est pas supporté -- désolé"
+
+#~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)"
+#~ msgstr "SELECT (à %0) possède des cases doubles -- vérifier le débordement d'entier des CASES"
+
+#~ msgid "ASSIGN to variable that is too small"
+#~ msgstr "ASSIGN à la variable est trop petit"
+
+#~ msgid "ASSIGNed GOTO target variable is too small"
+#~ msgstr "variable cible par ASSIGN GOTO est trop petite"
+
+#~ msgid "Local adjustable symbol `%A' at %0"
+#~ msgstr "Symbole local ajustable « %A » à %0"
+
+#~ msgid "data initializer on host with different endianness"
+#~ msgstr "initialiseur de données sur l'hôte a un alignement des octets différent (endian)"
+
+#~ msgid "-fvxt-not-f90 no longer supported -- try -fvxt"
+#~ msgstr "-fvxt-not-f90 n'est plus supporté -- essayer -fvxt"
+
+#~ msgid "-ff90-not-vxt no longer supported -- try -fno-vxt -ff90"
+#~ msgstr "-ff90-not-vxt n'est plus supporté -- essayer -fno-vxt -ff90"
+
+#~ msgid "-fdebug-kludge is disabled, use normal debugging flags"
+#~ msgstr "-fdebug-kludge est désactivé, utiliser le fanion normal de mise au point"
+
+#~ msgid "Missing first operand for binary operator at %0"
+#~ msgstr "première opérande manquante pour l'opérateur biunaire à %0"
+
+#~ msgid "Zero-length character constant at %0"
+#~ msgstr "constante caractère de longueur zéro à %0"
+
+#~ msgid "Invalid token at %0 in expression or subexpression at %1"
+#~ msgstr "élément lexical invalide à %0 dans l'expression ou la sous-expression à %1"
+
+#~ msgid "Missing operand for operator at %1 at end of expression at %0"
+#~ msgstr "Opérande manquante pour l'opérateur %1 à la fin de l'expresssion à %0"
+
+#~ msgid "Label %A already defined at %1 when redefined at %0"
+#~ msgstr "Étiquette %A déjà définie à %1 et redéfinie à %0"
+
+#~ msgid "Unrecognized character at %0 [info -f g77 M LEX]"
+#~ msgstr "Caractère non reconnue à %0 [info -f g77 M LEX]"
+
+#~ msgid "Label definition %A at %0 on empty statement (as of %1)"
+#~ msgstr "Définition d'étiquette %A à %0 dans une déclaration vide (comme %1)"
+
+#~ msgid "Invalid first character at %0 [info -f g77 M LEX]"
+#~ msgstr "Premier caractère invalide à %0 [info -f g77 M LEX]"
+
+#~ msgid "Line too long as of %0 [info -f g77 M LEX]"
+#~ msgstr "Ligne trop longue tel que %0 [info -f g77 M LEX]"
+
+#~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]"
+#~ msgstr "Caractère non-numérique à %0 dans le champ d'étiquette [info -f g77 M LEX]"
+
+#~ msgid "Label number at %0 not in range 1-99999"
+#~ msgstr "Numéro d'étiquette à %0 n'est pas entre les bornes 1-99999"
+
+#~ msgid "At %0, '!' and '/*' are not valid comment delimiters"
+#~ msgstr "À %0, « ! » et « /* » ne sont pas des délimiteurs de commentaire valides"
+
+#~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]"
+#~ msgstr "Indicateur de continuation à %0 doit apparaître en colonne 6 [info -f g77 M LEX]"
+
+#~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]"
+#~ msgstr "Étiquette invalide à %0 avec l'indicateur de continuation de ligne à %1 [info -f g77 M LEX]"
+
+#~ msgid "Character constant at %0 has no closing apostrophe at %1"
+#~ msgstr "constante caractère à %0 n'a pas d'apostrophe de fermeture à %1"
+
+#~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1"
+#~ msgstr "Constante Hollerith à %0 spécifiée %A a plus de caractères que ceux présents dans %1"
+
+#~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1"
+#~ msgstr "Paranethèse fermante amnquante à %0 nécessaire pour pairer la parenthèse ouverte à %1"
+
+#~ msgid "Integer at %0 too large"
+#~ msgstr "entier à %0 est trop grand"
+
+#~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'"
+#~ msgstr "Période à %0 n'est pas suivie de chiffres en nombre flottant ou de « NOT.», «TRUE.», ou «FALSE. »"
+
+#~ msgid "Missing close-period between `.%A' at %0 and %1"
+#~ msgstr "Fermeture de période manquante entre «.%A» à %0 et %1"
+
+#~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field"
+#~ msgstr "Exposant invalide à %0 pour la constante réelle à %1; « %A » n'est pas un chiffre dans le champ de l'exposant"
+
+#~ msgid "Missing value at %1 for real-number exponent at %0"
+#~ msgstr "Valeur manquante à %1 pour l'exposant d'un nombre réeal à %0"
+
+#~ msgid "Expected binary operator between expressions at %0 and at %1"
+#~ msgstr "Opérateur binaire attendu entre les expressions à %0 et à %1"
+
+#~ msgid "Semicolon at %0 is an invalid token"
+#~ msgstr "Point-virgule (« ; ») en %0 est un élément lexical invalide"
+
+#~ msgid "Extraneous comma in FORMAT statement at %0"
+#~ msgstr "Virgule superflue dans la déclaration de FORMAT à %0"
+
+#~ msgid "Missing comma in FORMAT statement at %0"
+#~ msgstr "Virgule manquante dans la déclaration de FORMAT à %0"
+
+#~ msgid "Spurious sign in FORMAT statement at %0"
+#~ msgstr "faux signe dans la déclaration de FORMAT à %0"
+
+#~ msgid "Spurious number in FORMAT statement at %0"
+#~ msgstr "faux nombre dans la déclaration de FORMAT à %0"
+
+#~ msgid "Spurious text trailing number in FORMAT statement at %0"
+#~ msgstr "faux texte terminant le nombre dans la déclaration de FORMAT à %0"
+
+#~ msgid "Unrecognized FORMAT specifier at %0"
+#~ msgstr "spécificateur de FORMAT non reconnu à %0"
+
+#~ msgid "Missing close-parenthese(s) in FORMAT statement at %0"
+#~ msgstr "Parenthèse(s) fermante(s) manquante(s) dans la déclaration de FORMAT à %0"
+
+#~ msgid "Missing number following period in FORMAT statement at %0"
+#~ msgstr "Nombre manquant suivant la période dans la déclaration de FORMAT à %0"
+
+#~ msgid "Missing number following `E' in FORMAT statement at %0"
+#~ msgstr "Nombre manquant suivant « E » dans la déclaration de FORMAT à %0"
+
+#~ msgid "Spurious trailing comma preceding terminator at %0"
+#~ msgstr "fausse virgule qui traîne dans la précédente terminaison à %0"
+
+#~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)"
+#~ msgstr "À %0, spécifier l'OPÉRATEUR au lieu de l'AFFECTATION pour le déclaration d'INTERFACE ne spécifiant pas d'opérateur d'affectation (=)"
+
+#~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)"
+#~ msgstr "À %0, spécifier une AFFECTATION au lieu d'un OPÉRATEUR dans la déclaration d'INTERFACE spécifiant un opérateur d'affectation (=)"
+
+#~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects"
+#~ msgstr "Ne peut spécifier une expression d'initialisation = à %0 à moins que «::» n'apparaissae avant la liste d'objets"
+
+#~ msgid "Reference to label at %1 inconsistent with its definition at %0"
+#~ msgstr "La référence à l'étiquette à %1 est inconsistente avec sa définition à %0"
+
+#~ msgid "Reference to label at %1 inconsistent with earlier reference at %0"
+#~ msgstr "La référence à l'étiquette à %1 est inconsistente avec sa précédente référence à %0"
+
+#~ msgid "DO-statement reference to label at %1 follows its definition at %0"
+#~ msgstr "Déclaration DO utilisant une référence à l'étiquette à %1 suis sa définition à %0"
+
+#~ msgid "Reference to label at %1 is outside block containing definition at %0"
+#~ msgstr "Référence à l'étiquette à %1 est en dehors du bloc contenant la définition à %0"
+
+#~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1"
+#~ msgstr "Déclaration DO utilisant des références à l'étiquette à %0 et %2 séparés par un bloc non complet débutant à %1"
+
+#~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1"
+#~ msgstr "Déclaration DO utilisant une référence à l'étiquette à %0 et la définition d'étiquette à %2 séparés par un bloc non complet débutant à %1"
+
+#~ msgid "Label definition at %0 invalid on this kind of statement"
+#~ msgstr "définition d'étiquette à %0 invalide pour ce genre de déclaration"
+
+#~ msgid "Statement at %0 invalid in this context"
+#~ msgstr "déclaration à %0 invalide dans ce contexte"
+
+#~ msgid "Statement at %0 invalid in context established by statement at %1"
+#~ msgstr "déclaration à %0 invalide dans le contexte établi par la déclaration à %1"
+
+#~ msgid "Statement at %0 must specify construct name specified at %1"
+#~ msgstr "Déclaration à %0 doit spécifier un nom de construit spécifié à %1"
+
+#~ msgid "Construct name at %0 superfluous, no construct name specified at %1"
+#~ msgstr "Nom de construit à %0 superflue, aucun nom de construit spécifié à %1"
+
+#~ msgid "Construct name at %0 not the same as construct name at %1"
+#~ msgstr "Nom de construit à %0 n'est pas le même que celui à %1"
+
+#~ msgid "Construct name at %0 does not match construct name for any containing DO constructs"
+#~ msgstr "Nom de construit à %0 ne concorde pas avec un nom de construit contenant des construits DO"
+
+#~ msgid "Label definition missing at %0 for DO construct specifying label at %1"
+#~ msgstr "Définition d'étiquette manquante à %0 pour le construit DO spécifiant l'étiquette à %1"
+
+#~ msgid "Statement at %0 follows ELSE block for IF construct at %1"
+#~ msgstr "Déclaration à %0 suivant un bloc ELSE pour le construit IF à %1"
+
+#~ msgid "No label definition for FORMAT statement at %0"
+#~ msgstr "pas de définition d'étiquette pour la déclaration de FORMAT à %0"
+
+#~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1"
+#~ msgstr "Seconde occurente de ELSE WHERE à %0 à l'intérieur du WHERE à %1"
+
+#~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1"
+#~ msgstr "déclaration END à %0 manquante mot clé « %A » requis pour une procédure interne ou un module lié à %1"
+
+#~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment"
+#~ msgstr "déclaration de MODULE PROCEDURE à %0 non permise parce que l'INTERFACE à %1 ne spécifie pas de nom générique, d'opérateur ou d'affectation"
+
+#~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1"
+#~ msgstr "nom du BLOCK DATA à %0 superflue, aucun nom spécifié à %1"
+
+#~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1"
+#~ msgstr "nom de programme à %0 superflue, aucune déclaration PROGRAM spécifié à %1"
+
+#~ msgid "Program unit name at %0 not the same as name at %1"
+#~ msgstr "nom de l'unité programme à %0 n'est pas le même que le nom à %1"
+
+#~ msgid "Type name at %0 not the same as name at %1"
+#~ msgstr "Nom de type à %0 n'est pas le même que le nom à %1"
+
+#~ msgid "End of source file before end of block started at %0"
+#~ msgstr "Fin du fichier source avant la fin du bloc débutant à %0"
+
+#~ msgid "Undefined label, first referenced at %0"
+#~ msgstr "Étiquette non définie, première référence à %0"
+
+#~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0"
+#~ msgstr "déclaration SAVE ou attribut à %1 ne peut être spécifiée en même temps avec la déclaration SAVE ou l'attribut à %0"
+
+#~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0"
+#~ msgstr "déclaration PUBLIC ou PRIVATE à %1 ne peut être spécifié en même temps avec la déclaration PUBLIC ou PRIVATE à %0"
+
+#~ msgid "RETURN statement at %0 invalid within a main program unit"
+#~ msgstr "déclaration RETURN à %0 invalide à l'intérieur de l'unité du programme principal"
+
+#~ msgid "Alternate return specifier at %0 invalid within a main program unit"
+#~ msgstr "spécificateur alternatif de retour à %0 invalide à l'intérieur de l'unité du programme principal"
+
+#~ msgid "Alternate return specifier at %0 invalid within a function"
+#~ msgstr "spécificateur alternatif de retour à %0 invalide à l'intérieur de la fonction"
+
+#~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module"
+#~ msgstr "spécificateur d'accès ou déclaration PRIVATE à %0 invalide pour une définition de type dérivé à l'intérieur d'autre chose que la portion de spécification d'un module"
+
+#~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements"
+#~ msgstr "Spécificateur d'accès à %0 doit suivre immédaitement la déclaration de type dérivé à %1 sans intervention de déclarations"
+
+#~ msgid "No components specified as of %0 for derived-type definition beginning at %1"
+#~ msgstr "Aucun composant spécifié tel que %0 pour une définition de type dérivé débutant à %1"
+
+#~ msgid "No components specified as of %0 for structure definition beginning at %1"
+#~ msgstr "Aucun composant spécifié tel que %0 pour la définition de structure débutant à %1"
+
+#~ msgid "Missing structure name for outer structure definition at %0"
+#~ msgstr "Nom de structure manquant pour la définition de structure externe à %0"
+
+#~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead"
+#~ msgstr "Noms de champs à %0 pour la définition externe de structure -- les spécifier dans une déclaration subséquente de déclaration RECORD à la place"
+
+#~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1"
+#~ msgstr "noms de champs manquant pour la définition de strcutreu à %0 à l'intérieur de la définition de structure à %1"
+
+#~ msgid "No components specified as of %0 for map beginning at %1"
+#~ msgstr "Aucun composant spécifié tel que %0 pour la map débutant à %1"
+
+#~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required"
+#~ msgstr "Aucune ou une map spécifié tel que %0 pour l'union débutant à %1 -- au moins deux sont requises"
+
+#~ msgid "Missing %A specifier in statement at %0"
+#~ msgstr "spécificateur %A manquant dans la déclaration à %0"
+
+#~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O"
+#~ msgstr "Items dans la liste E/S débutant à %0 invalide pour un liste nommé d'E/S dirigées"
+
+#~ msgid "Conflicting I/O control specifications at %0 and %1"
+#~ msgstr "spécifications conflictuelles de contrôle d'E/S à %0 et %1"
+
+#~ msgid "No UNIT= specifier in I/O control list at %0"
+#~ msgstr "aucun spécificateur UNIT=1 dans la liste de contrôle d'E/S à %0"
+
+#~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list"
+#~ msgstr "spécification à %0 requiert la spécification ADVANCE=« NO » dans la même liste de contrôel d'E/S"
+
+#~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list"
+#~ msgstr "spécification à %0 requiert la spécification explicite FMT= dans la même liste de contrôel d'E/S"
+
+#~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1"
+#~ msgstr "Seconde occurence du CASE DEFAULT à %0 à l'intéreur de SELECT CASE à %1"
+
+#~ msgid "Duplicate or overlapping case values/ranges at %0 and %1"
+#~ msgstr "duplication ou chevauchement des valeurs/plages de case à %0 et %1"
+
+#~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1"
+#~ msgstr "Désaccord du paramètre du Type et/ou type de sorte entre la valeur du CASE ou la valeur à l'intérieur de l'étendue à %0 et le SELECT CASE à %1"
+
+#~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement"
+#~ msgstr "spécification d'étendue à %0 invalide pour la déclaration du CASE à l'intérieur de la déclaration du type logique du SELECT CASE"
+
+#~ msgid "Fortran 90 feature at %0 unsupported"
+#~ msgstr "option FORTRAN 90 à %0 non supportée"
+
+#~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]"
+#~ msgstr "déclaration invalide ou référence au symboe « %A » à %0 [initialement vu à %1]"
+
+#~ msgid "Null element at %0 for array reference at %1"
+#~ msgstr "élément nul à %0 pour la référence au tableau à %1"
+
+#~ msgid "Too few elements (%A missing) as of %0 for array reference at %1"
+#~ msgstr "Trop peu d'éléments (%A manquant) tel que %0 pour la référence au tableau à %1"
+
+#~ msgid "Too many elements as of %0 for array reference at %1"
+#~ msgstr "Trop peu d'éléments tel que %0 pour la référence au tableau à %1"
+
+#~ msgid "Missing colon as of %0 in substring reference for %1"
+#~ msgstr "«:» manquant dans %0 dans la sous-chaîne de référence pour %1"
+
+#~ msgid "Invalid use at %0 of substring operator on %1"
+#~ msgstr "utilisation invalide à %0 de l'opérateur de sous-chaîne sur %1"
+
+#~ msgid "Substring begin/end point at %0 out of defined range"
+#~ msgstr "point begin/end de la sous-chaîne à %0 en dehors de la plage définie"
+
+#~ msgid "Array element value at %0 out of defined range"
+#~ msgstr "Valeur de l'élément du tableau à %0 en dehors de la plage définie"
+
+#~ msgid "Expression at %0 has incorrect data type or rank for its context"
+#~ msgstr "expression à %0 a un type de données ou un rang incorrect pour son contexte"
+
+#~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)"
+#~ msgstr "division par 0 (zéro) à %0 (IEEE pas encore supporté)"
+
+#~ msgid "%A step count known to be 0 (zero) at %0"
+#~ msgstr "valeur du pas %A connu pour être à 0 (zéro) à %0"
+
+#~ msgid "%A end value plus step count known to overflow at %0"
+#~ msgstr "valeur finale %A plus la valeur du pas connus pour déborder à %0"
+
+#~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0"
+#~ msgstr "valeur de départ, fin et du pas %A connu pour résulter dans un comportement dépendant de l'implantation en raison d'un débordement dans les calculs intermédiaires à %0"
+
+#~ msgid "%A begin, end, and step-count values known to result in no iterations at %0"
+#~ msgstr "valeur de départ, fin et du pas %A connus pour ne faire aucune itération à %0"
+
+#~ msgid "Type disagreement between expressions at %0 and %1"
+#~ msgstr "désaccord de type entre les expressions à %0 et %1"
+
+#~ msgid "No specification for implied-DO iterator `%A' at %0"
+#~ msgstr "aucune spécification pour l'itération DO-implicite « %A » à %0"
+
+#~ msgid "Gratuitous parentheses surround implied-DO construct at %0"
+#~ msgstr "parenthèses gratuites entourant le construit DO implicite à %0"
+
+#~ msgid "Zero-size specification invalid at %0"
+#~ msgstr "spécification de taille zéro invalide à %0"
+
+#~ msgid "Zero-size array at %0"
+#~ msgstr "tableau de taille zéro à %0"
+
+#~ msgid "Target machine does not support complex entity of kind specified at %0"
+#~ msgstr "machine cible ne supporte par l'entité complexe de la sorte spécifié à %0"
+
+#~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0"
+#~ msgstr "machine cible ne supporte pas DOUBLE COMPLEX spécifié à %0"
+
+#~ msgid "Attempt to raise constant zero to a power at %0"
+#~ msgstr "Tentative d'augmentation d'une constante de valeur zéro à la puissance %0"
+
+#~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C"
+#~ msgstr "référence à un intrinsèque générique « %A » à %0 pourrait être de la forme %B ou %C"
+
+#~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]"
+#~ msgstr "utilisation ambiquë de l'intrinsèque « %A » à %0 [info -f g77 M CMPAMBIG]"
+
+#~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]"
+#~ msgstr "intrinsèque « %A » référencé %Bly à %0, %Cly à %1 [info -f g77 M EXPIMP]"
+
+#~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]"
+#~ msgstr "Même nom « %A » utilisé pour %B à %0 et %C à %1 [info -f g77 M INTGLOB]"
+
+#~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0"
+#~ msgstr "déclaration de type explicite pour l'intrinsèque « %A » en désaccord avec l'invocation à %0"
+
+#~ msgid "Unable to open INCLUDE file `%A' at %0"
+#~ msgstr "incapable d'ouvrir le fichier INCLUDE « %A » à %0"
+
+#~ msgid "Null argument at %0 for statement function reference at %1"
+#~ msgstr "argument nul à %0 pour la déclaration de la référence de fonction à %1"
+
+#~ msgid "Null argument at %0 for procedure invocation at %1"
+#~ msgstr "arguement nul à %0 pour l'invocation de la procédure à %1"
+
+#~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1"
+#~ msgstr "trop peu d'arguments %A (débutant avec l'argument factice « %B ») tel que %0 pour la déclaration de la référence de fonction à %1"
+
+#~ msgid "%A too many arguments as of %0 for statement function reference at %1"
+#~ msgstr "trop peu d'arguments %A tel que %0 pour la déclaration de la référence de fonction à %1"
+
+#~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0"
+#~ msgstr "tableau fourni à %1 pour l'argument factice « %A » dans la déclaration de référence de fonction à %0"
+
+#~ msgid "Unsupported FORMAT specifier at %0"
+#~ msgstr "spécificateur de FORMAT non supporté à %0"
+
+#~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported"
+#~ msgstr "expression variable dans le spécificateur de FORMAT à %0 -- non supportée"
+
+#~ msgid "Unsupported VXT statement at %0"
+#~ msgstr "déclaration VXT non supporté à %0"
+
+#~ msgid "Attempt to specify second initial value for `%A' at %0"
+#~ msgstr "Tentative de spécifier une seconde valeur initial pour « %A » à %0"
+
+#~ msgid "Too few initial values in list of initializers for `%A' at %0"
+#~ msgstr "Trop peu de valeurs initiales dans la liste des initialisations pour « %A » à %0"
+
+#~ msgid "Too many initial values in list of initializers starting at %0"
+#~ msgstr "Trop de valeurs initiales dans la liste des initialisations débutant à %0"
+
+#~ msgid "Array or substring specification for `%A' out of range in statement at %0"
+#~ msgstr "Tableau ou sous-chaîne de spécification pour « %A » hors limite dans la déclaration à %0"
+
+#~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0"
+#~ msgstr "souscript de tableau #%B hors limite pour l'initialisation de « %A » dans la déclaration à %0"
+
+#~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "le pas implicite de la boucle DO a un compte de 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 "
+
+#~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "le compte implicite de la boucle DO est à 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 "
+
+#~ msgid "Not an integer constant expression in implied do-loop in statement at %0"
+#~ msgstr "N'est pas un entier dans l'expression de la constante dans la déclaration implicite de la boucle DO à %0"
+
+#~ msgid "Attempt to specify second initial value for element of `%A' at %0"
+#~ msgstr "Tentative de spécifier une seconde valeur initiale pour l'élément « %A » à %0"
+
+#~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0"
+#~ msgstr "Tentative de définit une zone commmue par EQUIVALENCE « %A » et « %B » à %0"
+
+#~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions"
+#~ msgstr "ne peut insérer « %A » tel que demandé par EQUIVALENCE en raison des restrictions d'alignement"
+
+#~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'"
+#~ msgstr "Désaccord des conditions requises par EQUIVALENCE pour l'emplacement de « %A » aux deux décalages d'octets %C et %D à partir de %B"
+
+#~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement"
+#~ msgstr "spécification de tableau ou de sous-chaîne pour « %A » est hors limite dans la déclaration EQUIVALENCE"
+
+#~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement"
+#~ msgstr "Sous-chaîne de non caractères « %A » dans la déclaration EQUIVALENCE"
+
+#~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement"
+#~ msgstr "référence de tableau vers une variable scalaire « %A » dans une déclaraion EQUIVALENCE"
+
+#~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'"
+#~ msgstr "souscript de tableau #%B hors limite pour la déclaration EQUIVALENCE de « %A »"
+
+#~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'"
+#~ msgstr "Tentative d'étendre la zone COMMON au delà de son point de départ via EQUIVALENCE de « %A »"
+
+#~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "Trop peu d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCE"
+
+#~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "Trop d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCE"
+
+#~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'"
+#~ msgstr "Mélange de type caractère et de non caractère via le COMMON/EQUIVALENCE -- par exemple « %A » et « %B »"
+
+#~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram"
+#~ msgstr "valeur retournée « %A » pour FUNCTION  à %0 n'est pas référencé dans le sous-programme"
+
+#~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1"
+#~ msgstr "bloc commun « %A » est sauvegardé, explicitement ou implicitement, à %0 mais non pas %1"
+
+#~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1"
+#~ msgstr "bloc commun « %A » est %B %D en longueur à %0 mais %C %E à %1"
+
+#~ msgid "Blank common initialized at %0"
+#~ msgstr "commun vide initialisé à %0"
+
+#~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC"
+#~ msgstr "intrinsèque « %A » est passé comme argument actuel à %0 mais non pas explicitment déclaré INTRINSIC"
+
+#~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL"
+#~ msgstr "procédure externe « %A » est pass comme argument actuel à %0 mais non pas déclaré explicitement déclaré EXTERNAL"
+
+#~ msgid "Character `%A' (for example) is upper-case in symbol name at %0"
+#~ msgstr "caractère « %A » (par exemple) est en majuscule dans le nom de symbole à %0"
+
+#~ msgid "Character `%A' (for example) is lower-case in symbol name at %0"
+#~ msgstr "caractère « %A » (par exemple) est en minuscule dans le nom de symbole à %0"
+
+#~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0"
+#~ msgstr "caractère « %A » n'est pas suivi par un caractère en minuscule dans le nom de symbole à %0"
+
+#~ msgid "Initial character `%A' is lower-case in symbol name at %0"
+#~ msgstr "caractère initial « %A » est en minuscule dans le nom de symbole à %0"
+
+#~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved"
+#~ msgstr "nom de liste n'est pas adéquatement supporté par la bibliothèque d'exécution pour les fichiers source avec une casse préservée"
+
+#~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0"
+#~ msgstr "construit %% imbriqué (%%VAL, %%REF ou %%DESCR) à %0"
+
+#~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1"
+#~ msgstr "Déclaration à %0 invalide dans le bloc de donnée de l'unité programme à %1"
+
+#~ msgid "Truncating characters on right side of character constant at %0"
+#~ msgstr "troncation de caractères du côté droit de la constante caractères à %0"
+
+#~ msgid "Truncating characters on right side of hollerith constant at %0"
+#~ msgstr "troncation de caractères du côté droit de la constante Hollerith à %0"
+
+#~ msgid "Truncating non-zero data on left side of numeric constant at %0"
+#~ msgstr "troncation de données non à zéro du côté gauche de la constante numérique à %0"
+
+#~ msgid "Truncating non-zero data on left side of typeless constant at %0"
+#~ msgstr "troncation de données non à zéro du côté gauche de la constante sans type à %0"
+
+#~ msgid "Typeless constant at %0 too large"
+#~ msgstr "constante sans type à %0 trop grande"
+
+#~ msgid "First-column ampersand continuation at %0"
+#~ msgstr "«&» en première colonne de continuation à %0"
+
+#~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "nom global « %A » défini à %0 est déjà défini à %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "nom global « %A » est %B à %0 mais est %C à %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "nom global « %A » à %0 a un type différent à %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "trop %B d'arguments passé à « %A » à %0 par rapport à la définition à %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "trop %B d'arguments pour « %A » à %0 par rapport à l'invocation à %1 [info -f g77 M GLOBALS]"
+
+#~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Argument #%B de « %A » est %C à %0 mais est %D à %1  [info -f g77 M GLOBALS]"
+
+#~ msgid "Array `%A' at %0 is too large to handle"
+#~ msgstr "tableau « %A » à %0 est trop grand pour être traité"
+
+#~ msgid "Statement function `%A' defined at %0 is not used"
+#~ msgstr "déclaration de fonction « %A » définie à %0 n'est pas utilisée"
+
+#~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]"
+#~ msgstr "Intrinsèque « %A » invoqué à %0 est connu pour ne pas être conforme à l'An 2000 [info -f g77 M Y2KBAD]"
+
+#~ msgid "Internal compiler error -- cannot perform operation"
+#~ msgstr "erreur interne du compilateur -- ne peut exécuter l'opération"
+
+#~ msgid "In unknown kind"
+#~ msgstr "dans une sorte inconnue"
+
+#~ msgid "In entity"
+#~ msgstr "Dans l'entité"
+
+#~ msgid "In function"
+#~ msgstr "Dans la fonction"
+
+#~ msgid "In subroutine"
+#~ msgstr "Dans la sous-routine"
+
+#~ msgid "In program"
+#~ msgstr "Dans le programme"
+
+#~ msgid "In block-data unit"
+#~ msgstr "Dans l'unité du bloc de données"
+
+#~ msgid "In common block"
+#~ msgstr "Dans le bloc commun"
+
+#~ msgid "In construct"
+#~ msgstr "Dans le construit"
+
+#~ msgid "In namelist"
+#~ msgstr "Dans la liste de noms"
+
+#~ msgid "In anything"
+#~ msgstr "Dans n'importe quoi"
+
+#~ msgid "internal error in check-init: tree code not implemented: %s"
+#~ msgstr "erreur interne dans check-init: arbre de code n'est pas implanté: %s"
+
+#~ msgid "%Jfinal field '%D' may not have been initialized"
+#~ msgstr "%Jchamp final « %D » peut ne pas avoir été initialisé"
+
+#~ msgid "internal error - too many interface type"
+#~ msgstr "erreur interne - trop de type d'interface"
+
+#~ msgid "bad method signature"
+#~ msgstr "méthode de signature erronée"
+
+#~ msgid "misplaced ConstantValue attribute (not in any field)"
+#~ msgstr "attribut ConstantValue mal positionné (n'est dans aucun champ)"
+
+#~ msgid "duplicate ConstantValue attribute for field '%s'"
+#~ msgstr "duplication de  l'attribut ConstanValue pour le champ « %s »"
+
+#~ msgid "ConstantValue attribute of field '%s' has wrong type"
+#~ msgstr "attribut ConstanValue du champ « %s » a un type erroné"
+
+#~ msgid "field '%s' not found in class"
+#~ msgstr "champ « %s » n'a pas été repéré dans la classe"
+
+#~ msgid "%Jabstract method in non-abstract class"
+#~ msgstr "%Jméthode abstraite dans une classe non abstraite"
+
+#~ msgid "%Jnon-static method '%D' overrides static method"
+#~ msgstr "%Jméthode non statique « %D » écrase la méthode statique"
+
+#~ msgid "%J'%D' used prior to declaration"
+#~ msgstr "%J« %D » utilisé précédemment avant sa déclaration"
+
+#~ msgid "declaration of `%s' shadows a parameter"
+#~ msgstr "la déclaration de « %s » masque un paramètre"
+
+#~ msgid "declaration of `%s' shadows a symbol from the parameter list"
+#~ msgstr "la déclaration de « %s » masque un symbole de la liste des paramètres"
+
+#~ msgid "%Jlabel '%D' used but not defined"
+#~ msgstr "%Jétiquette « %D » utilisée mais non définie"
+
+#~ msgid "%Jlabel '%D' defined but not used"
+#~ msgstr "%Jétiquette « %D » définie mais non utilisée"
+
+#~ msgid "%JIn %D: overlapped variable and exception ranges at %d"
+#~ msgstr "%JDans %D: chevauchement de variable et plage d'exception à %d"
+
+#~ msgid "bad type in parameter debug info"
+#~ msgstr "type erroné dans les paramètres d'informations de mise au point"
+
+#~ msgid "%Jbad PC range for debug info for local '%D'"
+#~ msgstr "%Jplage PC erroné pour les infos de débug pour la var. locale « %D »"
+
+#~ msgid "stack underflow - dup* operation"
+#~ msgstr "sous débordement de la pile - opération dup*"
+
+#~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'"
+#~ msgstr "référence « %s » est ambigue: apparaît dans l'interface « %s » et l'interface « %s »"
+
+#~ msgid "field `%s' not found"
+#~ msgstr "champ « %s » n'a pas été trouvé"
+
+#~ msgid "ret instruction not implemented"
+#~ msgstr "instruction ret n'est pas implantée"
+
+#~ msgid "method '%s' not found in class"
+#~ msgstr "méthode « %s » n'a pas été repéré dans la classe"
+
+#~ msgid "failed to find class '%s'"
+#~ msgstr "échec de repérage de la classe « %s »"
+
+#~ msgid "class '%s' has no method named '%s' matching signature '%s'"
+#~ msgstr "classe « %s » n'a pas de méthode nommée « %s » concordant avec la signature « %s »"
+
+#~ msgid "invokestatic on non static method"
+#~ msgstr "invocation statique sur un méthode non statique"
+
+#~ msgid "invokestatic on abstract method"
+#~ msgstr "invocation statique sur un méthode abstraite"
+
+#~ msgid "invoke[non-static] on static method"
+#~ msgstr "invocation non statique sur un méthode statique"
+
+#~ msgid "missing field '%s' in '%s'"
+#~ msgstr "champ « %s » manquant dans « %s »"
+
+#~ msgid "mismatching signature for field '%s' in '%s'"
+#~ msgstr "aignature ne concorde pas pour le champ « %s » dans « %s »"
+
+#~ msgid "%Jassignment to final field '%D' not in field's class"
+#~ msgstr "%Jaffectation au champ final « %D » n'est pas le champ de la classe"
+
+#~ msgid "%Jassignment to final static field `%D' not in class initializer"
+#~ msgstr "%Jaffectation au champ statique final « %D » n'est pas dans l'initialiseur de la classe"
+
+#~ msgid "%Jassignment to final field '%D' not in constructor"
+#~ msgstr "%Jaffectation au champ final « %D » n'est pas dans le constructeur"
+
+#~ msgid "can't expand %s"
+#~ msgstr "ne peut faire l'expansion de %s"
+
+#~ msgid "invalid PC in line number table"
+#~ msgstr "PC invalide dans la numéro de ligne de la table"
+
+#~ msgid "unreachable bytecode from %d to before %d"
+#~ msgstr "bytcode n'est pas atteignable à partir de %d jusqu'à %d"
+
+#~ msgid "unreachable bytecode from %d to the end of the method"
+#~ msgstr "bytcode n'est pas atteignable à partir de %d jusqu'à la fin de la méthode."
+
+#~ msgid "unrecogized wide sub-instruction"
+#~ msgstr "sous-instruction très large non reconnue"
+
+#~ msgid "source file for class `%s' is newer than its matching class file.  Source file `%s' used instead"
+#~ msgstr "fichier source de la classe « %s » est plus récent que son fichier de classe concordant. Fichier source « %s » utilisé à la place."
+
+#~ msgid "bad string constant"
+#~ msgstr "constante chaîne erronée"
+
+#~ msgid "bad value constant type %d, index %d"
+#~ msgstr "valeur %d de type de constante erronée, index %d"
+
+#~ msgid "can't reopen %s: %m"
+#~ msgstr "ne peut ré-ouvrir %s: %m"
+
+#~ msgid "can't close %s: %m"
+#~ msgstr "ne peut fermer %s: %m"
+
+#~ msgid "cannot find file for class %s"
+#~ msgstr "ne peut repérer le fichier pour la classe %s."
+
+#~ msgid "not a valid Java .class file"
+#~ msgstr "n'est pas un fichier Java .class valide"
+
+#~ msgid "error while parsing constant pool"
+#~ msgstr "error lors de l'analyse syntaxique du lots de constantes"
+
+#~ msgid "error in constant pool entry #%d\n"
+#~ msgstr "erreur dans l'entrée #%d du lot de constantes\n"
+
+#~ msgid "reading class %s for the second time from %s"
+#~ msgstr "lecture de la classe %s pour la seconde fois depuis %s"
+
+#~ msgid "error while parsing fields"
+#~ msgstr "erreur lors de l'analyse syntaxique des champs"
+
+#~ msgid "error while parsing methods"
+#~ msgstr "erreur lors de l'analyse syntaxique des méthodes"
+
+#~ msgid "error while parsing final attributes"
+#~ msgstr "erreur lors de l'analyse syntaxique des attributs"
+
+#~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute.  This generally means that your classpath is incorrectly set.  Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath"
+#~ msgstr "« java.lang.Object» qui a été repéré dans « %s » n'avait pas l'attribut spécial de longueur zéro «gnu.gcj.gcj-compiled». Cela généralement signifie que le chemin d'accès aux classes est incorrectement initialisé. Utiliser  «info gcj \"Input Options\" » pour accéder aux informations décrivant comment initialiser le chemin d'accès des classes."
+
+#~ msgid "missing Code attribute"
+#~ msgstr "attribut Code manquant"
+
+#~ msgid "%Hsource file seen twice on command line and will be compiled only once"
+#~ msgstr "%Hfichier source vu deux fois sur la ligne de commande et ne sera compilé une seule fois"
+
+#~ msgid "no input file specified"
+#~ msgstr "aucun fichier n'a été spécifié à l'entrée"
+
+#~ msgid "can't close input file %s: %m"
+#~ msgstr "ne peut fermer le fichier d'entrée %s: %m"
+
+#~ msgid "bad zip/jar file %s"
+#~ msgstr "fichier zip/jar erroné %s"
+
+#~ msgid "error while reading %s from zip file"
+#~ msgstr "erreur lors de la lecture de %s à partir du fichier zip"
+
+#~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s"
+#~ msgstr "erreur interne dans generate_bytecode_insn - arbre de code n'est pas implanté: %s"
+
+#~ msgid "field initializer type mismatch"
+#~ msgstr "type de initialiseur du champ ne concorde pas"
+
+#~ msgid "can't create directory %s: %m"
+#~ msgstr "ne peut créer le répertoire %s: %m"
+
+#~ msgid "can't create %s: %m"
+#~ msgstr "ne peut créer %s: %m"
+
+#~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed"
+#~ msgstr "seule une des options «--print-main», «--list-class» et «--complexity» est permise"
+
+#~ msgid "can't open output file `%s'"
+#~ msgstr "ne peut ouvrir le fichier de sortie « %s »"
+
+#~ msgid "file not found `%s'"
+#~ msgstr "fichier non repéré « %s »"
+
+#~ msgid "can't specify `-D' without `--main'\n"
+#~ msgstr "ne peut spécifier «-D» sans «--main»\n"
+
+#~ msgid "`%s' is not a valid class name"
+#~ msgstr "« %s » n'est pas un nom de classe valide"
+
+#~ msgid "--resource requires -o"
+#~ msgstr "--resource requiert -o"
+
+#~ msgid "warning: already-compiled .class files ignored with -C"
+#~ msgstr "AVERTISSEMENT: fichiers .class déjà compilés ignorés avec -C"
+
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "ne peut spécéfier à la fois -C et -o"
+
+#~ msgid "cannot create temporary file"
+#~ msgstr "ne peut créer un fichier temporaire"
+
+#~ msgid "using both @FILE with multiple files not implemented"
+#~ msgstr "utilisé ensemble @FICHIER avec de multiples fichiers bMest pas implanté"
+
+#~ msgid "cannot specify `main' class when not linking"
+#~ msgstr "ne peut spécifier la classe « main » lorsqu'il n'y a pas d'édition de liens"
+
+#~ msgid "can't do dependency tracking with input from stdin"
+#~ msgstr "ne peut faire le tracking de dépendance avec l'entrée à partir de stdin"
+
+#~ msgid "couldn't determine target name for dependency tracking"
+#~ msgstr "ne peut déterminer le nom de la cible pour le tracking de dépendance"
+
+#~ msgid ""
+#~ "unknown encoding: `%s'\n"
+#~ "This might mean that your locale's encoding is not supported\n"
+#~ "by your system's iconv(3) implementation.  If you aren't trying\n"
+#~ "to use a particular encoding for your input file, try the\n"
+#~ "`--encoding=UTF-8' option"
+#~ msgstr ""
+#~ "encodage inconnu: « %s »\n"
+#~ "Cela signifie que votre encodage local n'est pas supporté\n"
+#~ "par l'implantation iconv(3) sur votre système. Si vous n'essayez pas\n"
+#~ "d'utiliser un encodage particulier pour votre fichier d'entrée, essayer\n"
+#~ "l'option «--encoding=UTF-8»."
+
+#~ msgid "can't mangle %s"
+#~ msgstr "ne peut mutiler %s"
+
+#~ msgid "internal error - invalid Utf8 name"
+#~ msgstr "erreur interne - nom Utf8 invalide"
+
+#~ msgid "Missing term"
+#~ msgstr "Terme manquant"
+
+#~ msgid "';' expected"
+#~ msgstr "«;» attendu"
+
+#~ msgid "Missing name"
+#~ msgstr "Nom manquant"
+
+#~ msgid "'*' expected"
+#~ msgstr "« * » attendu"
+
+#~ msgid "Class or interface declaration expected"
+#~ msgstr "Déclaration de classe ou d'interface attendue"
+
+#~ msgid "Missing class name"
+#~ msgstr "Nom de classe manquant"
+
+#~ msgid "'{' expected"
+#~ msgstr "«{» attendu"
+
+#~ msgid "Missing super class name"
+#~ msgstr "Nom de super classe manquant"
+
+#~ msgid "Missing interface name"
+#~ msgstr "Nom d'interface manquant"
+
+#~ msgid "Missing variable initializer"
+#~ msgstr "Initialiseur de variable manquant"
+
+#~ msgid "Invalid declaration"
+#~ msgstr "Déclaration invalide"
+
+#~ msgid "']' expected"
+#~ msgstr "«]» attendu"
+
+#~ msgid "Unbalanced ']'"
+#~ msgstr "«]» non pairé"
+
+#~ msgid "Invalid method declaration, method name required"
+#~ msgstr "Déclaration de méthode invalide, nom de méthode requis"
+
+#~ msgid "Identifier expected"
+#~ msgstr "Identificateur attendu"
+
+#~ msgid "Invalid method declaration, return type required"
+#~ msgstr "Déclaration de méthode invalide, type retourné requis"
+
+#~ msgid "')' expected"
+#~ msgstr "«)» attendu"
+
+#~ msgid "Missing formal parameter term"
+#~ msgstr "Paramètre term formel manquant"
+
+#~ msgid "Missing identifier"
+#~ msgstr "Identificateur manquant"
+
+#~ msgid "Missing class type term"
+#~ msgstr "Type term de classe manquant"
+
+#~ msgid "Invalid interface type"
+#~ msgstr "Type d'interface invalide"
+
+#~ msgid "':' expected"
+#~ msgstr "«:» attendu"
+
+#~ msgid "Invalid expression statement"
+#~ msgstr "Déclaration d'expression invalide"
+
+#~ msgid "'(' expected"
+#~ msgstr "«(» attendu"
+
+#~ msgid "Missing term or ')'"
+#~ msgstr "Terme manquant ou «)»"
+
+#~ msgid "Missing or invalid constant expression"
+#~ msgstr "Expresion de constante manquante ou invalide"
+
+#~ msgid "Missing term and ')' expected"
+#~ msgstr "Terme manquant et «)» attendus"
+
+#~ msgid "Invalid control expression"
+#~ msgstr "Expression de contrôle invalide"
+
+#~ msgid "Invalid update expression"
+#~ msgstr "Expression de mise à jour invalide"
+
+#~ msgid "Invalid init statement"
+#~ msgstr "Déclaration init invalide"
+
+#~ msgid "Missing term or ')' expected"
+#~ msgstr "Terme manquant ou «)» attendu"
+
+#~ msgid "'class' or 'this' expected"
+#~ msgstr "« class» ou «ceci » attendu"
+
+#~ msgid "'class' expected"
+#~ msgstr "« class » attendu"
+
+#~ msgid "')' or term expected"
+#~ msgstr "«)» or terme attendu"
+
+#~ msgid "'[' expected"
+#~ msgstr "«[» attendu"
+
+#~ msgid "Field expected"
+#~ msgstr "Champ attendu"
+
+#~ msgid "Missing term and ']' expected"
+#~ msgstr "Terme manquant et «]» attendu"
+
+#~ msgid "']' expected, invalid type expression"
+#~ msgstr "«]» attendu, type d'expression invalide"
+
+#~ msgid "Invalid type expression"
+#~ msgstr "Type d'expression invalide"
+
+#~ msgid "Invalid reference type"
+#~ msgstr "Type de référence invalide"
+
+#~ msgid "Constructor invocation must be first thing in a constructor"
+#~ msgstr "L'invaocation d'un constructeur doit être la première chose dans un constructeur"
+
+#~ msgid "Only constructors can invoke constructors"
+#~ msgstr "Seuls les constructeurs peuvent invoquer des constructeurs"
+
+#~ msgid ": `%s' JDK1.1(TM) feature"
+#~ msgstr ": « %s » option JDK1.1(TM)"
+
+#~ msgid ""
+#~ "%s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s.\n"
+#~ "%s"
+
+#~ msgid "malformed .zip archive in CLASSPATH: %s"
+#~ msgstr "archive .zip mal composée dans CLASSPATH: %s"
+
+#~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives"
+#~ msgstr "ne peut repérer le package par défaut « %s ». Vérifier la variable d'environnement CLASSPATH et l'accès aux archives."
+
+#~ msgid "missing static field `%s'"
+#~ msgstr "champ statique manquant « %s »"
+
+#~ msgid "not a static field `%s'"
+#~ msgstr "n'est pas un champ statique « %s »"
+
+#~ msgid "No case for %s"
+#~ msgstr "Oas de case pour %s"
+
+#~ msgid "unregistered operator %s"
+#~ msgstr "opérator %s non enregistré"
+
+#~ msgid "junk at end of signature string"
+#~ msgstr "rebut à la fin de la chaîne de signature"
+
+#~ msgid "bad pc in exception_table"
+#~ msgstr "PC erroné dans exception_table"
+
+#~ msgid "unknown opcode %d@pc=%d during verification"
+#~ msgstr "code-op inconnu %d@pc=%d durant la vérification"
+
+#~ msgid "verification error at PC=%d"
+#~ msgstr "erreur de vérification au PC=%d"
+
+#~ msgid "object does not conform to the `%s' protocol"
+#~ msgstr "objet n'est pas conforme au protocole « %s »"
+
+#~ msgid "class `%s' does not implement the `%s' protocol"
+#~ msgstr "classe « %s » n'implante pas le protocole « %s »"
+
+#~ msgid "statically allocated instance of Objective-C class `%s'"
+#~ msgstr "instance allouée de manière statique de la classe Objective-C « %s »"
+
+#~ msgid "unexpected type for `id' (%s)"
+#~ msgstr "type inattendu pour « id » (%s)"
+
+#~ msgid "undefined type `id', please import <objc/objc.h>"
+#~ msgstr "type « id » indéfini, SVP importer <objc/objc.h>"
+
+#~ msgid "protocol `%s' has circular dependency"
+#~ msgstr "le protocole « %s » a une dépendance circulaire"
+
+#~ msgid "cannot find protocol declaration for `%s'"
+#~ msgstr "ne peut repérer la déclaration de protocole pour « %s »"
+
+#~ msgid "cannot find interface declaration for `%s'"
+#~ msgstr "ne peut repérer la déclaration d'interface pour « %s »"
+
+#~ msgid "interface `%s' does not have valid constant string layout"
+#~ msgstr "interface « %s » n'a pas une organisation valide de chaînes de constantes"
+
+#~ msgid "cannot find reference tag for class `%s'"
+#~ msgstr "ne peut repérer la référence pour l'étiquette de classe %s."
+
+#~ msgid "creating selector for non existant method %s"
+#~ msgstr "création du sélection pour une méthode inexistente %s"
+
+#~ msgid "`%s' is not an Objective-C class name or alias"
+#~ msgstr "« %s » n'est pas une classe Objective-C ou un alias"
+
+#~ msgid "Objective-C declarations may only appear in global scope"
+#~ msgstr "déclarations Objective-C peut seulement apparaître dans l'étendue globale"
+
+#~ msgid "cannot find class `%s'"
+#~ msgstr "ne peut repérer la classe « %s »"
+
+#~ msgid "class `%s' already exists"
+#~ msgstr "classe « %s » existe déjà"
+
+#~ msgid "`%s' redeclared as different kind of symbol"
+#~ msgstr "« %s » redéclaré comme une autre sorte de symbole"
+
+#~ msgid "cannot find interface declaration for `%s', superclass of `%s'"
+#~ msgstr "ne peut repérer une déclaration d'interface pour « %s », super classe de « %s »"
+
+#~ msgid "circular inheritance in interface declaration for `%s'"
+#~ msgstr "héritage circulaire dans la déclaration de l'interface pour « %s »"
+
+#~ msgid "Use `-fobjc-exceptions' to enable Objective-C exception syntax"
+#~ msgstr "Utiliser « -fobjc-exceptions » pour autoriser la syntaxe d'exception d'Objective-C"
+
+#~ msgid "`@throw;' (rethrow) used outside of a `@catch' block"
+#~ msgstr "« @throw; » (rethrow) utilisé en dehors d'un bloc « @catch »"
+
+#~ msgid "`@catch' parameter is not a known Objective-C class type"
+#~ msgstr "paramètre « @catch » n'est pas connu comme un type de classe Objective-C"
+
+#~ msgid "Exception already handled by preceding `@catch(id)'"
+#~ msgstr "Exception est déjà traité par le précédent « @catch(id) »"
+
+#~ msgid "Exception of type `%s *' already handled by `@catch (%s *)'"
+#~ msgstr "exception du type « %s * » est déjà traitée par « @catch (%s *) »"
+
+#~ msgid "`@try' without `@catch' or `@finally'"
+#~ msgstr "« @try » sans  « @catch » ou  « @finally »"
+
+#~ msgid "%Jtype '%D' does not have a known size"
+#~ msgstr "%Jtype  « %D » n'a pas de taille connue"
+
+#~ msgid "%J%s `%s'"
+#~ msgstr "%J%s « %s »"
+
+#~ msgid "inconsistent instance variable specification"
+#~ msgstr "spécification inconsistente avec l'instance de la vairable"
+
+#~ msgid "can not use an object as parameter to a method\n"
+#~ msgstr "ne peut utiliser un objet comme paramètre à une méthode\n"
+
+#~ msgid "multiple %s named `%c%s' found"
+#~ msgstr "multiples %s nommés « %c%s » repérés"
+
+#~ msgid "no super class declared in @interface for `%s'"
+#~ msgstr "pas de super classe déclarée dans @nterface pour « %s »"
+
+#~ msgid "invalid receiver type `%s'"
+#~ msgstr "type du receveur invalide « %s »"
+
+#~ msgid "`%s' may not respond to `%c%s'"
+#~ msgstr "« %s » peut ne pas répondre à « %c%s »"
+
+#~ msgid "`%c%s' not implemented by protocol(s)"
+#~ msgstr "« %c%s » n'est pas implantée dans le protocole"
+
+#~ msgid "(Messages without a matching method signature"
+#~ msgstr "(Messages sans une méthode concordante de signature"
+
+#~ msgid "will be assumed to return `id' and accept"
+#~ msgstr "sera assumé pour retourner « id » et accepter"
+
+#~ msgid "`...' as arguments.)"
+#~ msgstr " « ... » comme argument.)"
+
+#~ msgid "undeclared selector `%s'"
+#~ msgstr "sélecteur « %s » non déclaré"
+
+#~ msgid "instance variable `%s' accessed in class method"
+#~ msgstr "instance « %s » de la variable accédé par la méthode de classe"
+
+#~ msgid "duplicate declaration of method `%c%s'"
+#~ msgstr "duplication de déclaration de la méthode « %c%s »"
+
+#~ msgid "duplicate interface declaration for category `%s(%s)'"
+#~ msgstr "duplication de déclaration d'interface pour la catégorie « %s(%s) »"
+
+#~ msgid "illegal reference type specified for instance variable `%s'"
+#~ msgstr "type deréférence spécifié illégal pour l'instance de variable « %s »"
+
+#~ msgid "instance variable `%s' has unknown size"
+#~ msgstr "instance de la variable « %s » a une taille inconnue"
+
+#~ msgid "type `%s' has virtual member functions"
+#~ msgstr "type « %s » a des membres de fonction virtuelle"
+
+#~ msgid "illegal aggregate type `%s' specified for instance variable `%s'"
+#~ msgstr "type d'aggrégat illégal « %s » spécifié pour l'instance de la variable « %s »"
+
+#~ msgid "type `%s' has a user-defined constructor"
+#~ msgstr "type « %s » a un constructeur défini par l'usager"
+
+#~ msgid "type `%s' has a user-defined destructor"
+#~ msgstr "type « %s » a un destructeur défini par l'usager"
+
+#~ msgid "C++ constructors and destructors will not be invoked for Objective-C fields"
+#~ msgstr "constructeurs et destructeurs C++ ne seront pas invoqués pour les champs en Objective-C"
+
+#~ msgid "instance variable `%s' is declared private"
+#~ msgstr "instance de la variable « %s » est déclaré privée"
+
+#~ msgid "instance variable `%s' is %s; this will be a hard error in the future"
+#~ msgstr "instance de la variable « %s » est %s; cela déclenchera une erreur dure dans le futur"
+
+#~ msgid "instance variable `%s' is declared %s"
+#~ msgstr "instance de la variable « %s » est déclaré %s"
+
+#~ msgid "static access to object of type `id'"
+#~ msgstr "accès statique à un objket de type « id »"
+
+#~ msgid "incomplete implementation of class `%s'"
+#~ msgstr "implantation incomplète de la classe « %s »"
+
+#~ msgid "incomplete implementation of category `%s'"
+#~ msgstr "implantation incomplète de la catégorie « %s »"
+
+#~ msgid "method definition for `%c%s' not found"
+#~ msgstr "définition de la méthode pour « %c%s » n'a pas été repérée"
+
+#~ msgid "%s `%s' does not fully implement the `%s' protocol"
+#~ msgstr "%s « %s » n'implante pas complètement le protocole « %s »"
+
+#~ msgid "`@end' missing in implementation context"
+#~ msgstr "«@end» manquant dans l'implantation du contexte"
+
+#~ msgid "reimplementation of class `%s'"
+#~ msgstr "ré-implantation de la classe « %s »"
+
+#~ msgid "conflicting super class name `%s'"
+#~ msgstr "nom de super classe « %s » est conflictuel"
+
+#~ msgid "previous declaration of `%s'"
+#~ msgstr "déclaration précédente de « %s »"
+
+#~ msgid "duplicate interface declaration for class `%s'"
+#~ msgstr "double déclaration d'interface pour la classe « %s »"
+
+#~ msgid "duplicate declaration for protocol `%s'"
+#~ msgstr "double déclaration pour le protocole « %s »"
+
+#~ msgid "%J%s `%c%s'"
+#~ msgstr "%J%s « %c%s »"
+
+#~ msgid "no super class declared in interface for `%s'"
+#~ msgstr "pas de super classe déclarée dans l'interface pour « %s »"
+
+#~ msgid "[super ...] must appear in a method context"
+#~ msgstr "[super ...] doit apparaître dans une méthode du contexte"
+
+#~ msgid "`@end' must appear in an implementation context"
+#~ msgstr "«@end» doit appraître dans un contaxte d'implantation"
+
+#~ msgid "method definition not in class context"
+#~ msgstr "méthode de définition n'est pas dans un contexte de classe"
+
+#~ msgid "Display this information"
+#~ msgstr "afficher l'aide-mémoire"
+
+#~ msgid "--param <param>=<value>\tSet paramter <param> to value.  See below for a complete list of parameters"
+#~ msgstr "--param <paramètre>=<valeur>\tinitialiser le <paramètre> avec la valeur.  Voir ci-bas pour la liste complète des paramètres"
+
+#~ msgid "-A<question>=<answer>\tAssert the <answer> to <question>.  Putting '-' before <question> disables the <answer> to <question>"
+#~ msgstr "-A<question>=<réponse>\tassocier la <réponse> à la <question>.  Placer « - » devant la <question> désactive la <réponse> à la <question>"
+
+#~ msgid "Do not discard comments"
+#~ msgstr "Ne pas éliminer les commentaires"
+
+#~ msgid "Do not discard comments in macro expansions"
+#~ msgstr "Ne pas éliminer les commentaires dans les expansions macro"
+
+#~ msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value.  If just <macro> is given, <val> is taken to be 1"
+#~ msgstr "-D<macro>[=<valeur>]\tdéfinir le <macro> avec la <valeur>.  Si seul le <macro> est fourni, <valeur> vaut 1 par défaut"
+
+#~ msgid "-G<number>\tPut global and static data smaller than <number> bytes into a special section (on some targets)"
+#~ msgstr ""
+#~ "  -G <nombre>             placer les données globales et statiques plus\n"
+#~ "                          petites que <nombre> d'octets dans une section\n"
+#~ "                          spéciale (sur certaines cibles)"
+
+#~ msgid "Print the name of header files as they are used"
+#~ msgstr "Afficher les noms des en-têtes de fichiers tel qu'ils sont utilisés"
+
+#~ msgid "-I <dir>\tAdd <dir> to the end of the main include path.  -I- gives more include path control; see info documentation"
+#~ msgstr "-I <rép>\tajouter <rép> à la fin du chemin principal d'inclusion.  -I- donne plus de contrôle sur le chemin d'inclusion; voir la documentation info"
+
+#~ msgid "Generate make dependencies"
+#~ msgstr "Générer les dépendances pour make"
+
+#~ msgid "Generate make dependencies and compile"
+#~ msgstr "Générer les dépendances pour make et compiler"
+
+#~ msgid "-MF <file>\tWrite dependency output to the given file"
+#~ msgstr "-MF <fichier>\técrire les dépendances en sortie dans le fichier fourni"
+
+#~ msgid "Treat missing header files as generated files"
+#~ msgstr "Traiter les en-têtes manquantes de fichiers comme des fichiers générés"
+
+#~ msgid "Like -M but ignore system header files"
+#~ msgstr "Identique à -M mais ignore les en-têtes de fichiers système"
+
+#~ msgid "Like -MD but ignore system header files"
+#~ msgstr "Identique à -MD mais ignore les en-têtes de fichiers système"
+
+#~ msgid "Generate phony targets for all headers"
+#~ msgstr "Générer les cibles bidons pour toutes les en-têtes"
+
+#~ msgid "-MQ <target>\tAdd a MAKE-quoted target"
+#~ msgstr "-MQ <cible>\tajouter MAKE-quoted cible"
+
+#~ msgid "-MT <target>\tAdd an unquoted target"
+#~ msgstr "-MT <cible>\tajouter une cible sans quote"
+
+#~ msgid "-O<number>\tSet optimization level to <number>"
+#~ msgstr "-O<nombre>\tutiliser le niveau d'optimisation <nombre>"
+
+#~ msgid "Optimize for space rather than speed"
+#~ msgstr "Optimiser l'utilisation de l'espace plutôt que la vitesse"
+
+#~ msgid "Do not generate #line directives"
+#~ msgstr "Ne pas générer de directives #line"
+
+#~ msgid "-U<macro>\tUndefine <macro>"
+#~ msgstr "-U<macro>\tabandonner la définition <macro>"
+
+#~ msgid "This switch is deprecated; use -Wextra instead"
+#~ msgstr "Cette option est obsolète; utiliser -Wextra à la place"
+
+#~ msgid "Warn about returning structures, unions or arrays"
+#~ msgstr "Avertir à propos de structures retournés, unions ou tableaux"
+
+#~ msgid "Enable most warning messages"
+#~ msgstr "Autoriser la plupart des messages d'avertissement"
+
+#~ msgid "Warn about casting functions to incompatible types"
+#~ msgstr "Avertir à propos des fonctions de transtypage avec des types incompatibles"
+
+#~ msgid "Warn about pointer casts which increase alignment"
+#~ msgstr "Avertir à propos des pointeurs convertis lesquels augment l'alignement"
+
+#~ msgid "Warn about casts which discard qualifiers"
+#~ msgstr "Avertir à propos des transtypage qui écartent les qualificateurs"
+
+#~ msgid "Warn about subscripts whose type is \"char\""
+#~ msgstr "Avertir à propos des souscripts dont le type est \"char\""
+
+#~ msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line"
+#~ msgstr "Avertir à propos des blocs de commentaires imbriqués et les commentaires C++ qui s'étendent sur plus d'une ligne physique"
+
+#~ msgid "Synonym for -Wcomment"
+#~ msgstr "Synonyme pour -Wcommentaire"
+
+#~ msgid "Warn about possibly confusing type conversions"
+#~ msgstr "Avertir à propos des conversion confuses de types"
+
+#~ msgid "Warn when all constructors and destructors are private"
+#~ msgstr "Avertir lorsque tous les constructeurs et destructeurs sont privés"
+
+#~ msgid "Warn when a declaration is found after a statement"
+#~ msgstr "Avertir lorsqu'une déclaration est spécifiée après une déclaration"
+
+#~ msgid "Warn about deprecated compiler features"
+#~ msgstr "Avertir à propose de la dépréciation des options du compilateur"
+
+#~ msgid "Warn about uses of __attribute__((deprecated)) declarations"
+#~ msgstr "Avertir à propos de l'utilisation des déclarations « __attribute__ ((deprecated)) »"
+
+#~ msgid "Warn when an optimization pass is disabled"
+#~ msgstr "Avertir lorsque la passe d'optimisation est désactivée"
+
+#~ msgid "Warn about compile-time integer division by zero"
+#~ msgstr "Avertir au sujet de la division entière par zéro au moment de la compilation"
+
+#~ msgid "Warn about violations of Effective C++ style rules"
+#~ msgstr "Avertir à propos des violations des règles de style de Effective C++"
+
+#~ msgid "Warn about stray tokens after #elif and #endif"
+#~ msgstr "Avertir à propos des jetons perdus après #elif et #endif"
+
+#~ msgid "Treat all warnings as errors"
+#~ msgstr "Traiter tous les avertissements commes des erreurs"
+
+#~ msgid "Make implicit function declarations an error"
+#~ msgstr "Faire une erreur lors de déclaration de fonctions implicites"
+
+#~ msgid "Print extra (possibly unwanted) warnings"
+#~ msgstr "Afficher des avertissements superflus (possiblement non désirés)"
+
+#~ msgid "Warn if testing floating point numbers for equality"
+#~ msgstr "Avertir à propos des tests d'égalité sur des nombres flottants"
+
+#~ msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
+#~ msgstr "Avertir à propos des anomalies de format de chaînes pour printf/scanf/strftime/strfmon"
+
+#~ msgid "Warn if passing too many arguments to a function for its format string"
+#~ msgstr "Avertir lorsqu'il y a trop de passage d'arguments à une fonction pour le format de ses chaînes"
+
+#~ msgid "Warn about format strings that are not literals"
+#~ msgstr "Avertir à propos des chaînes de format qui n'ont pas de litérals"
+
+#~ msgid "Warn about possible security problems with format functions"
+#~ msgstr "Avertir à propos des problèmes possibles de sécurité avec les formats de fonction"
+
+#~ msgid "Warn about strftime formats yielding 2-digit years"
+#~ msgstr "Avertir à propos des formats strftime ne laissant que 2 chiffres pour l'année"
+
+#~ msgid "Warn about implicit function declarations"
+#~ msgstr "Avertir à propos des déclarations de fonctions implicites"
+
+#~ msgid "Warn when a declaration does not specify a type"
+#~ msgstr "Avertir lorsqu'une déclaration ne spécifie pas le type"
+
+#~ msgid "Deprecated.  This switch has no effect."
+#~ msgstr "Obsolète. Cette option n'a aucun effet."
+
+#~ msgid "Warn about variables which are initialized to themselves."
+#~ msgstr "Avertir au sujet des variables qui sont initialisés par elles-même"
+
+#~ msgid "Warn when an inlined function cannot be inlined"
+#~ msgstr "Avertir lorsque des fonctions en ligne ne peuvent être enligne"
+
+#~ msgid "Warn about invalid uses of the \"offsetof\" macro"
+#~ msgstr "Avertir à propos de l'utilisation invalide de macro \"offsetof\""
+
+#~ msgid "Warn about PCH files that are found but not used"
+#~ msgstr "Avertir à propos des fichier PCH qui sont repérés mais non utilisés"
+
+#~ msgid "-Wlarger-than-<number>\tWarn if an object is larger than <number> bytes"
+#~ msgstr "-Wlarger-than-<nombre>\tavertir si un objet est plus grand que <nombre> d'octets"
+
+#~ msgid "Do not warn about using \"long long\" when -pedantic"
+#~ msgstr "Ne pas avertir à propos de l'utilisation de \"long long\" avec -pedantic"
+
+#~ msgid "Warn about suspicious declarations of \"main\""
+#~ msgstr "Avertir à propos des déclarations douteuses de \"main\""
+
+#~ msgid "Warn about possibly missing braces around initializers"
+#~ msgstr "Avertir à propos des possibles accolades manquantes autour des initialisations"
+
+#~ msgid "Warn about global functions without previous declarations"
+#~ msgstr "Avertir à propos des fonctions globales sans déclaration précédente"
+
+#~ msgid "Warn about functions which might be candidates for format attributes"
+#~ msgstr "Avertir à propos des fonctions qui pourraient être candidates pour les attributs de format"
+
+#~ msgid "Warn about functions which might be candidates for __attribute__((noreturn))"
+#~ msgstr "Avertir à propos des fonctions qui seraient candidates pour __attribute__((noreturn))"
+
+#~ msgid "Warn about global functions without prototypes"
+#~ msgstr "Avertir à propos des fonctions globales sans prototype"
+
+#~ msgid "Warn about use of multi-character character constants"
+#~ msgstr "Avertir à propos de l'utilisation des chaînes de multi-caractères"
+
+#~ msgid "Warn about \"extern\" declarations not at file scope"
+#~ msgstr "Avertir à propos des déclarations \"extern\" qui n'est pas dans l'étendue du fichier"
+
+#~ msgid "Warn when non-templatized friend functions are declared within a template"
+#~ msgstr "Avertir lorsque des fonctions amis sans canevas sont déclarés à l'intérieur d'un canevas"
+
+#~ msgid "Warn about non-virtual destructors"
+#~ msgstr "Avertir à propos des destructeurs non virtuels"
+
+#~ msgid "Warn if a C-style cast is used in a program"
+#~ msgstr "Avertir si le style de transtypage C est utilisé dans un programme"
+
+#~ msgid "Warn if an old-style parameter definition is used"
+#~ msgstr "Avertir lorsqu'un paramètre de style ancien de définition est utilisé"
+
+#~ msgid "Warn about overloaded virtual function names"
+#~ msgstr "Avertir à propos de la surcharge des noms de fonctions virtuelles"
+
+#~ msgid "Warn when the packed attribute has no effect on struct layout"
+#~ msgstr "Avertir lorsque les attributs paquetés n'ont pas d'effet sur l'organisation d'un struct"
+
+#~ msgid "Warn when padding is required to align structure members"
+#~ msgstr "Avertir lorsque le remplissage est requis pour aligner les membres de structure"
+
+#~ msgid "Warn about possibly missing parentheses"
+#~ msgstr "Avertir à propos du manque possible de parenthèses"
+
+#~ msgid "Warn when converting the type of pointers to member functions"
+#~ msgstr "Avertir lors de la conversion des types de pointeurs en membres de fonctions"
+
+#~ msgid "Warn about function pointer arithmetic"
+#~ msgstr "Avertir à propos d'arithmétique portant sur un pointeur de fonction"
+
+#~ msgid "Warn if inherited methods are unimplemented"
+#~ msgstr "Avertir si les méthodes héritées ne sont pas implantées"
+
+#~ msgid "Warn about multiple declarations of the same object"
+#~ msgstr "Avertir à propos des déclarations multiples portant sur le même objet"
+
+#~ msgid "Warn when the compiler reorders code"
+#~ msgstr "Avertir lorsque le compilateur réordonne le code"
+
+#~ msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)"
+#~ msgstr "Avertir lorsque le type de fonction à retourner par défaut est \"int\" (C) ou à propos d'un type inconsisten à retourner (C++)"
+
+#~ msgid "Warn if a selector has multiple methods"
+#~ msgstr "Avertir si le sélecteur a de multiples méthodes"
+
+#~ msgid "Warn about possible violations of sequence point rules"
+#~ msgstr "Avertir à propos des violations possibles des règles de séquence de points"
+
+#~ msgid "Warn when one local variable shadows another"
+#~ msgstr "Avertir lorsqu'une variable locale masque une autre"
+
+#~ msgid "Warn about signed-unsigned comparisons"
+#~ msgstr "Avertir à propos des comparaisons signés ou non signés"
+
+#~ msgid "Warn when overload promotes from unsigned to signed"
+#~ msgstr "Avertir lorsque la surcharge fait la promotion d'un non signé en signé"
+
+#~ msgid "Warn about code which might break strict aliasing rules"
+#~ msgstr "Avertir à propos du code qui pourrait briser les règles strictes d'alias"
+
+#~ msgid "Warn about unprototyped function declarations"
+#~ msgstr "Avertir à propos des déclarations de fonctions sans prototype"
+
+#~ msgid "Warn about enumerated switches, with no default, missing a case"
+#~ msgstr "Avertir à propos d'un switch énuméré, sans défaut ou un case est manquant"
+
+#~ msgid "Warn about enumerated switches missing a \"default:\" statement"
+#~ msgstr "Avertir à propos d'un switch énuméré n'ayant pas de déclaration \"default:\""
+
+#~ msgid "Warn about all enumerated switches missing a specific case"
+#~ msgstr "Avertir à propos de tous les switch énumérés où un case spécific manque"
+
+#~ msgid "Warn when synthesis behavior differs from Cfront"
+#~ msgstr "Avertir lorsque le comportement de synthère diffère de Cfront"
+
+#~ msgid "Do not suppress warnings from system headers"
+#~ msgstr "Ne pas supprimer les avertissements pour les en-têtes système"
+
+#~ msgid "Warn about features not present in traditional C"
+#~ msgstr "Avertir à propos d'une option absente en C traditionnel"
+
+#~ msgid "Warn if trigraphs are encountered that might affect the meaning of the program"
+#~ msgstr "Avertir si des trigraphes sont rencontrés et qui pourraient affecter le sens du programme"
+
+#~ msgid "Warn if an undefined macro is used in an #if directive"
+#~ msgstr "Avertir si un macro indéfini est utilisé dans un directive #if"
+
+#~ msgid "Warn about uninitialized automatic variables"
+#~ msgstr "Avertir à propos des variables automatiques non initialisées"
+
+#~ msgid "Warn about unrecognized pragmas"
+#~ msgstr "Avertir à propos des pragmas non reconnus"
+
+#~ msgid "Warn about code that will never be executed"
+#~ msgstr "Avertir à propos du code qui ne sera jamais exécuté"
+
+#~ msgid "Enable all -Wunused- warnings"
+#~ msgstr "Autoriser tous les -Wunused- warnings"
+
+#~ msgid "Warn when a function is unused"
+#~ msgstr "Avertir lorsqu'une fonction est inutilisée"
+
+#~ msgid "Warn when a label is unused"
+#~ msgstr "Avertir lorsqu'une étiquette est inutilisée"
+
+#~ msgid "Warn about macros defined in the main file that are not used"
+#~ msgstr "Avertir à propos de macros définis dans le fichier principal qui ne sont pas utilisés"
+
+#~ msgid "Warn when a function parameter is unused"
+#~ msgstr "Avertir lorsqu'un paramètre de fonction est inutilisé"
+
+#~ msgid "Warn when an expression value is unused"
+#~ msgstr "Avertir lorsque la valeur d'une expression n'est pas utilisée"
+
+#~ msgid "Warn when a variable is unused"
+#~ msgstr "Avertir lorsque 'une variable est inutilisée"
+
+#~ msgid "Give strings the type \"array of char\""
+#~ msgstr "Fournir des chaînes de type \"array of char\""
+
+#~ msgid "A synonym for -std=c89.  In a future version of GCC it will become synonymous with -std=c99 instead"
+#~ msgstr "Un synonyme pour -std=c89.  Dans une version future de GCC cela deviendra synonyme de -std=c99 à la place"
+
+#~ msgid "-aux-info <file>\tEmit declaration information into <file>"
+#~ msgstr "-aux-info <fichier>\tproduire une déclaration d'information dans le <fichier>"
+
+#~ msgid "-d<letters>\tEnable dumps from specific passes of the compiler"
+#~ msgstr "-d<lettres>\tautoriser les vidanges pour des passes spécifiques du compilateur"
+
+#~ msgid "-dumpbase <file>\tSet the file basename to be used for dumps"
+#~ msgstr "-dumpbase <fichier>\tfixer le nom de base du fichier à utiliser pour les vidanges"
+
+#~ msgid "Enforce class member access control semantics"
+#~ msgstr "Forcer à la sémantique du contrôle d'accès à un membre de classe"
+
+#~ msgid "Align the start of functions"
+#~ msgstr "Aligner le début des fonctions"
+
+#~ msgid "Align labels which are only reached by jumping"
+#~ msgstr "Aligner les étiquettes qui sont seulement atteintes par sauts"
+
+#~ msgid "Align all labels"
+#~ msgstr "Aligner toutes les étiquettes"
+
+#~ msgid "Align the start of loops"
+#~ msgstr "Aligner le début des boucles"
+
+#~ msgid "Change when template instances are emitted"
+#~ msgstr "Changer lorsque les instances du canevas sont produites"
+
+#~ msgid "Specify that arguments may alias each other and globals"
+#~ msgstr "Spécifier que les arguments peuvent avoir des alias l'un vers l'autre et globaux"
+
+#~ msgid "Assume arguments may alias globals but not each other"
+#~ msgstr "Présumer que les arguments peuvent avoir des alias globaux mais pas l'un vers l'autre"
+
+#~ msgid "Assume arguments alias neither each other nor globals"
+#~ msgstr "Assumer que les alias d'arguments n'en ont pas l'un vers l'autre ou globaux"
+
+#~ msgid "Recognize the \"asm\" keyword"
+#~ msgstr "Reconnaître le mot clé « asm »"
+
+#~ msgid "Generate unwind tables that are exact at each instruction boundary"
+#~ msgstr "Générer des tables étendues qui soient exactes pour chaque borne d'instruction"
+
+#~ msgid "Generate code to check bounds before indexing arrays"
+#~ msgstr "Générer du code pour vérifier les bornes avant d'indexer les tableaux"
+
+#~ msgid "Replace add, compare, branch with branch on count register"
+#~ msgstr "Remplacer add,compare,branch avec des branchements utilisant un compteur registre"
+
+#~ msgid "Use profiling information for branch probabilities"
+#~ msgstr "Utiliser les informations de profilage pour les probabilités de branchements"
+
+#~ msgid "Perform branch target load optimization before prologue / epilogue threading"
+#~ msgstr "Effectuer l'optimisation du chargement du branchement cible avant le thread prologue / epilogue"
+
+#~ msgid "Perform branch target load optimization after prologue / epilogue threading"
+#~ msgstr "Effectuer l'optimisation du chargement du branchement cible après le thread prologue / epilogue"
+
+#~ msgid "Recognize built-in functions"
+#~ msgstr "Reconnaître aucun construit dans les fonctions"
+
+#~ msgid "-fcall-saved-<register>\tMark <register> as being preserved across functions"
+#~ msgstr "-fcall-saved-<registre>\tmarquer le <registre> comme étant préservé à travers les fonctions"
+
+#~ msgid "-fcall-used-<register>\tMark <register> as being corrupted by function calls"
+#~ msgstr "-fcall-used-<registre>\tmarquer le <registre> comme étant corrompu par les appels de fonctions"
+
+#~ msgid "Save registers around function calls"
+#~ msgstr "Sauvegarder les registres autour des appels de fonction"
+
+#~ msgid "Check the return value of new"
+#~ msgstr "Vérifier la valeur retournée de new"
+
+#~ msgid "Do not put uninitialized globals in the common section"
+#~ msgstr "Ne pas placer de globaux non initialisés dans la section commune"
+
+#~ msgid "Allow the arguments of the '?' operator to have different types"
+#~ msgstr "Permettre les arguments de l'opérateur « ? » d'avoir différents types"
+
+#~ msgid "Reduce the size of object files"
+#~ msgstr "Réduire la taille des fichiers objets"
+
+#~ msgid "Make string literals \"const char[]\" not \"char[]\""
+#~ msgstr "Rendre les chaînes de mots \"const char[]\" et non pas \"char[]\""
+
+#~ msgid "-fconst-string-class=<name>\tUse class <name> for constant strings"
+#~ msgstr "-fconst-string-class=<nom>\tutiliser la classe <nom> pour la chaînes de constantes"
+
+#~ msgid "Perform a register copy-propagation optimization pass"
+#~ msgstr "Effectuer la passe d'optimisation de la propagation-de-copie par registre"
+
+#~ msgid "Perform cross-jumping optimization"
+#~ msgstr "Exécuter des optimisations de sauts croisés"
+
+#~ msgid "When running CSE, follow jumps to their targets"
+#~ msgstr "Lorsque CSE s'exécute, suivre les sauts vers leurs cibles"
+
+#~ msgid "When running CSE, follow conditional jumps"
+#~ msgstr "Lorsque CSE s'exécute, suivre les sauts considitionnels vers leurs cibles"
+
+#~ msgid "Place data items into their own section"
+#~ msgstr "placer les items des données dans leur propre section"
+
+#~ msgid "Inline member functions by default"
+#~ msgstr "Rendre enligne un membre de fonction par défaut"
+
+#~ msgid "Defer popping functions args from stack until later"
+#~ msgstr "Déférer le dépilage des arguments de fonction de la pile plus tard"
+
+#~ msgid "Attempt to fill delay slots of branch instructions"
+#~ msgstr "Tented de remplir de délais les fentes des instructions de branchement"
+
+#~ msgid "Delete useless null pointer checks"
+#~ msgstr "Détruire les vérifications de pointeurs nul inutiles"
+
+#~ msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics"
+#~ msgstr "-fdiagnostics-show-location=[once|every-line]\tindiquer combien de fois les informations de localisation des sources doivent être produites au début d'un diagnostique lorsque les lignes doivent s'enrouler"
+
+#~ msgid "Permit '$' as an identifier character"
+#~ msgstr "Autoriser '$' comme identificateur de caractère"
+
+#~ msgid "-fdump-<type>\tDump various compiler internals to a file"
+#~ msgstr "-fdump-<type>\tvidander les divers internes du compilateur dans un fichier"
+
+#~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps"
+#~ msgstr "Supprimer dans la sortie les numéros d'instructions et de notes de lignes dans les vidanges de mises au point"
+
+#~ msgid "Perform DWARF2 duplicate elimination"
+#~ msgstr "Exécuter une élimination DAWRF2 des doublons"
+
+#~ msgid "Perform unused type elimination in debug info"
+#~ msgstr "Effectuer l'élimination des types non utilisés dans l'information de mise au point"
+
+#~ msgid "Generate code to check exception specifications"
+#~ msgstr "Générer le code pour vérifier les exceptions de spécifications"
+
+#~ msgid "Enable exception handling"
+#~ msgstr "Autoriser le traitement des exceptions"
+
+#~ msgid "-fexec-charset=<cset>\tConvert all strings and character constants to character set <cset>"
+#~ msgstr "-fexec-charset=<jeucar>\tconvertir toutes les chaînes et les constantes de caractères en jeu de caractères <jeucar>"
+
+#~ msgid "Perform a number of minor, expensive optimizations"
+#~ msgstr "Effectuer un nombre mineur d'optimisations coûteuses"
+
+#~ msgid "Assume no NaNs or infinities are generated"
+#~ msgstr "Assumer qu'aucun NaNs ou infinités ne soit généré"
+
+#~ msgid "-ffixed-<register>\tMark <register> as being unavailable to the compiler"
+#~ msgstr "-ffixed-<registre>\tmarquer le <registre> comme n'étant plus disponible pour le compilateur"
+
+#~ msgid "Do not store floats in registers"
+#~ msgstr "Ne pas stocker les flottants dans les registres"
+
+#~ msgid "Scope of for-init-statement variables is local to the loop"
+#~ msgstr "Étendue des variables for-init-statement est local à la boucle"
+
+#~ msgid "Copy memory address constants into registers before use"
+#~ msgstr "Copier les constantes d'adresses mémoire dans les registres avant de les utiliser"
+
+#~ msgid "Copy memory operands into registers before use"
+#~ msgstr "Copier les opérandes mémoire dans les registres avant de les utiliser"
+
+#~ msgid "Do not assume that standard C libraries and \"main\" exist"
+#~ msgstr "Ne pas assumer que les bibliothèques standards C et \"main\" existent"
+
+#~ msgid "Allow function addresses to be held in registers"
+#~ msgstr "Autoriser le maintien des adresses de fonction dans les registres"
+
+#~ msgid "Place each function into its own section"
+#~ msgstr "placer chaque fonction dans sa propre section"
+
+#~ msgid "Perform global common subexpression elimination"
+#~ msgstr "Exécuter l'élimination de sous-expression commune globale"
+
+#~ msgid "Perform redundant load after store elimination in global common subexpression elimination"
+#~ msgstr "Exécuter un stockage redondant après l'élimination de sous-expression commune globale"
+
+#~ msgid "Perform enhanced load motion during global common subexpression elimination"
+#~ msgstr "Exécuter un chargement amélioré lors de l'élimination de sous-expression commune globale"
+
+#~ msgid "Perform store motion after global common subexpression elimination"
+#~ msgstr "Exécuter un stockage après l'élimination de sous-expression commune globale"
+
+#~ msgid "Recognize GNU-defined keywords"
+#~ msgstr "Reconnaître les mots clés définis GNU"
+
+#~ msgid "Generate code for GNU runtime environment"
+#~ msgstr "Générer du code pour l'environnement GNU d'exécution"
+
+#~ msgid "Enable guessing of branch probabilities"
+#~ msgstr "Autoriser l'estimation des probabilités de branchement"
+
+#~ msgid "Assume normal C execution environment"
+#~ msgstr "Présumer que l'environnement d'exécution C est normal"
+
+#~ msgid "Enable support for huge objects"
+#~ msgstr "Autoriser le support des grands objets"
+
+#~ msgid "Process #ident directives"
+#~ msgstr "Traiter les directive #ident"
+
+#~ msgid "Perform conversion of conditional jumps to branchless equivalents"
+#~ msgstr "Exécuter la conversion des sauts conditionels à des équivalents sans branchements"
+
+#~ msgid "Perform conversion of conditional jumps to conditional execution"
+#~ msgstr "Exécuter la conversion des sauts conditionnels à une exécution conditionnel"
+
+#~ msgid "Export functions even if they can be inlined"
+#~ msgstr "Exporter les fonctions même si elles peuvent être enligne"
+
+#~ msgid "Emit implicit instantiations of inline templates"
+#~ msgstr "Produire les instanciations explicites de canevas enligne"
+
+#~ msgid "Emit implicit instantiations of templates"
+#~ msgstr "Produire les instanciations explicites de canevas"
+
+#~ msgid "Do not generate .size directives"
+#~ msgstr "Ne pas générer de directives .size"
+
+#~ msgid "Pay attention to the \"inline\" keyword"
+#~ msgstr "Porter attention au mot clé \"inline\""
+
+#~ msgid "Integrate simple functions into their callers"
+#~ msgstr "Intégrer les fonctions simples à l'intérieur des appelants"
+
+#~ msgid "-finline-limit=<number>\tLimit the size of inlined functions to <number>"
+#~ msgstr "-finline-limit=<nombre>\tlimiter la taille des fonction enligne à <nombre>"
+
+#~ msgid "-finput-charset=<cset>      Specify the default character set for source files."
+#~ msgstr "-finput-charset=<jeucar>    spécifier le jeu de caractères par défaut pour les fichiers source"
+
+#~ msgid "Instrument function entry and exit with profiling calls"
+#~ msgstr "Traiter les entrées et les sorties des fonctions avec appels de profilage"
+
+#~ msgid "Generate code for functions even if they are fully inlined"
+#~ msgstr "Générer le code pour les fonctions même si elles sont complètement enligne"
+
+#~ msgid "Emit static const variables even if they are not used"
+#~ msgstr "Produire des variables constantes statiques même si elles ne sont pas utilisées"
+
+#~ msgid "Give external symbols a leading underscore"
+#~ msgstr "Afficher les symboles externes préfixés d'un caractère de soulignement"
+
+#~ msgid "Perform loop optimizations"
+#~ msgstr "Exécuter l'optimisation des boucles"
+
+#~ msgid "Set errno after built-in math functions"
+#~ msgstr "Initialiser errno après les fonctions internes mathématiques"
+
+#~ msgid "Report on permanent memory allocation"
+#~ msgstr "Rapporter l'allocation de mémoire permanente"
+
+#~ msgid "Attempt to merge identical constants and constant variables"
+#~ msgstr "Tentative de fusion de constantes identique et des variables constantes"
+
+#~ msgid "Attempt to merge identical constants across compilation units"
+#~ msgstr "Tentative de fusion de constantes identiques à travers des unités de compilation"
+
+#~ msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per line.  0 suppresses line-wrapping"
+#~ msgstr "-fmessage-length=<nombre>\tlimiter la longueur des diagnotiques à <nombre> de caractères par ligne.  0 supprime l'enroulement de ligne"
+
+#~ msgid "Force all loop invariant computations out of loops"
+#~ msgstr "Forcer pour toutes les boucles des calculs invariants en dehors des boucles"
+
+#~ msgid "Don't warn about uses of Microsoft extensions"
+#~ msgstr "Ne donner d'avertissement au sujet de l'utilisation des extensions de Microsoft"
+
+#~ msgid "Use graph-coloring register allocation"
+#~ msgstr "Utiliser l'allocation des registres par coloriage de graphe"
+
+#~ msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
+#~ msgstr "Générer le code pour l'environnement d'exécution du NeXT (Apple Mac OS X)"
+
+#~ msgid "Assume that receivers of Objective-C messages may be nil"
+#~ msgstr "Assumer que les receveur de messages Objective-C peut être NIL"
+
+#~ msgid "Support synchronous non-call exceptions"
+#~ msgstr "Supporter les exceptions synchrones des non appels"
+
+#~ msgid "Enable Objective-C exception and synchronization syntax"
+#~ msgstr "Autoriser l'exception Objective-C et la synchronisation de syntaxe"
+
+#~ msgid "Perform loop unrolling for all loops"
+#~ msgstr "Exécuter la boucle par désenroulement de toutes les boucles"
+
+#~ msgid "Perform loop unrolling when iteration count is known"
+#~ msgstr "Exécuter un dé-roulement des boucles lorsque le compteur d'itération est connu"
+
+#~ msgid "When possible do not generate stack frames"
+#~ msgstr "Lorsque c'est possible ne pas générer des trames de pile"
+
+#~ msgid "Recognize C++ kewords like \"compl\" and \"xor\""
+#~ msgstr "Reconnaître les mots clés C++ comme \"compl\" et \"xor\""
+
+#~ msgid "Do the full register move optimization pass"
+#~ msgstr "Effectuer la passe d'optimisation complète des déplacements par les registres"
+
+#~ msgid "Optimize sibling and tail recursive calls"
+#~ msgstr "Optimiser sur mesure les appels enfants et récursif"
+
+#~ msgid "Enable optional diagnostics"
+#~ msgstr "Autoriser les diagnostiques optionnels"
+
+#~ msgid "Pack structure members together without holes"
+#~ msgstr "Empaqueter les membres des structures ensembles sans trous"
+
+#~ msgid "Return small aggregates in memory, not registers"
+#~ msgstr "Retourner les petits aggrégats en mémoire, pas dans les registres"
+
+#~ msgid "Perform loop peeling"
+#~ msgstr "Exécuter des réductions de boucles"
+
+#~ msgid "Enable machine specific peephole optimizations"
+#~ msgstr "Autoriser les optimisations des trous spécifiques à une machine"
+
+#~ msgid "Enable an RTL peephole pass before sched2"
+#~ msgstr "Autoriser l'exécution de la passe RTL avant sched2"
+
+#~ msgid "Downgrade conformance errors to warnings"
+#~ msgstr "Dégrader les erreurs de conformité en des avertissements"
+
+#~ msgid "Generate position-independent code if possible"
+#~ msgstr "Générer du code indépendant de la position si possible"
+
+#~ msgid "Generate position-independent code for executables if possible"
+#~ msgstr "Générer du code indépendant de la position pour les exécutables si possible"
+
+#~ msgid "Generate prefetch instructions, if available, for arrays in loops"
+#~ msgstr "Générer des instructions prérecherchées, si disponible, pour les tableaux dans les boucles"
+
+#~ msgid "Treat the input file as already preprocessed"
+#~ msgstr "Traiter le fichier d'entrée comme ayant déjà été pré-traité"
+
+#~ msgid "Enable basic program profiling code"
+#~ msgstr "Autoriser le code de profilage de base du programme"
+
+#~ msgid "Insert arc-based program profiling code"
+#~ msgstr "Insérer le code de profilage du programme de arc-based"
+
+#~ msgid "Enable common options for generating profile info for profile feedback directed optimizations"
+#~ msgstr "Autoriser les options communes pour la génération d'information de profile pour le feedback d'optimisation direct de profile"
+
+#~ msgid "Enable common options for performing profile feedback directed optimizations"
+#~ msgstr "Autoriser les options communes pour effectuer le feedback d'optimisation direct de profile"
+
+#~ msgid "Insert code to profile values of expressions"
+#~ msgstr "Insérer le code pour profile les expressions de valeurs"
+
+#~ msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
+#~ msgstr "-frandom-seed=<chaîne>\tfaire une compilation reproduisible en utilisant <chaîne>"
+
+#~ msgid "Strength reduce all loop general induction variables"
+#~ msgstr "Renforcer la réduction de toutes les boucles par induction des variables"
+
+#~ msgid "Return small aggregates in registers"
+#~ msgstr "Retourner les petits aggrégats dans les registres"
+
+#~ msgid "Enables a register move optimization"
+#~ msgstr "Autoriser l'optimisation des déplacements par registre"
+
+#~ msgid "Perform a register renaming optimization pass"
+#~ msgstr "Effectuer une changement de nom de registres après une passe d'optimisation"
+
+#~ msgid "Reorder basic blocks to improve code placement"
+#~ msgstr "Ré-ordonner les blocs de base pour améliorer l'emplacement de code"
+
+#~ msgid "Reorder functions to improve code placement"
+#~ msgstr "Ré-ordonner les fonctions pour améliorer l'emplacement de code"
+
+#~ msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime"
+#~ msgstr "Utiliser le mode Fix-and-=Continue pour indique que des fichiers objets peuvent interchangés lors de l'éexécution"
+
+#~ msgid "Enable automatic template instantiation"
+#~ msgstr "Autoriser l'instanciation automatique de canevas"
+
+#~ msgid "Add a common subexpression elimination pass after loop optimizations"
+#~ msgstr "Ajouter une passe d'élimination d'une sous-expression commune après les optimisations de boucle"
+
+#~ msgid "Run the loop optimizer twice"
+#~ msgstr "Exécuter l'optimiseur de boucle deux fois"
+
+#~ msgid "Disable optimizations that assume default FP rounding behavior"
+#~ msgstr "Interdire les optimisation qui assument un comportement d'arrondissement FP par défaut"
+
+#~ msgid "Generate run time type descriptor information"
+#~ msgstr "Générer l'information pour un type de descripteur lors de l'exécution"
+
+#~ msgid "Enable scheduling across basic blocks"
+#~ msgstr "Autoriser l'ordonnancement à travers les blocs de base"
+
+#~ msgid "Allow speculative motion of non-loads"
+#~ msgstr "Autoriser le mouvement spéculatif de non chargements"
+
+#~ msgid "Allow speculative motion of some loads"
+#~ msgstr "Autoriser le mouvement spéculatif de quelques chargements"
+
+#~ msgid "Allow speculative motion of more loads"
+#~ msgstr "Autoriser le mouvement spéculatif de plusieurs chargements"
+
+#~ msgid "Allow premature scheduling of queued insns"
+#~ msgstr "Autoriser l'ordonnancement prématuré de queues insns"
+
+#~ msgid "Set dependence distance checking in premature scheduling of queued insns"
+#~ msgstr "Fixer la distance de vérification de dépendance dans l'ordonnancement prématuré d'insns en queue"
+
+#~ msgid "-fsched-stalled-insns-dep=<number>   Set dependence distance checking in premature scheduling of queued insns"
+#~ msgstr "-fsched-stalled-insns-dep=<nombre>   fixer la distance de vérification de dépendance dans l'ordonnancement d'insnsn en queue"
+
+#~ msgid "-fsched-stalled-insns=<number>       Set number of queued insns that can be prematurely scheduled"
+#~ msgstr "-fsched-stalled-insns=<nombre>       fixer le nombre d'insns en queu qui peuvent être prématurément ordonnancés"
+
+#~ msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler"
+#~ msgstr "-fsched-verbose=<numéro>\tnitialiser le niveau de verbosité de l'ordonnanceur"
+
+#~ msgid "If scheduling post reload, do superblock scheduling"
+#~ msgstr "Si l'ordonnancement fait une post recharge, faire un ordonnancement de super bloc"
+
+#~ msgid "If scheduling post reload, do trace scheduling"
+#~ msgstr "Si l'ordonnancement fait une post recharge, laisse une trace de l'ordonnancement"
+
+#~ msgid "Reschedule instructions before register allocation"
+#~ msgstr "Réordonnancer les instructions avant l'allocation de registres"
+
+#~ msgid "Reschedule instructions after register allocation"
+#~ msgstr "Réordonnancer les instructions après l'allocation de registres"
+
+#~ msgid "Mark data as shared rather than private"
+#~ msgstr "Marquer les données comme partagées au lieu de privées"
+
+#~ msgid "Use the same size for double as for float"
+#~ msgstr "Utiliser la même taille pour un double que pour un flottant"
+
+#~ msgid "Use the narrowest integer type possible for enumeration types"
+#~ msgstr "Utiliser le type d'entier le moins large possible pour les types d'énumération"
+
+#~ msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\""
+#~ msgstr "Écraser le type sous-jacent de \"wchar_t\" vers \"unsigned short\""
+
+#~ msgid "Disable optimizations observable by IEEE signaling NaNs"
+#~ msgstr "Désactiver les optimisations observable par le signalement NaNs IEEE"
+
+#~ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed"
+#~ msgstr "Lorsque \"signed\" ou \"unsigned\" n,est pas fourni rendre le champ de bits signé"
+
+#~ msgid "Make \"char\" signed by default"
+#~ msgstr "Rendre les « char » signés par défaut"
+
+#~ msgid "Convert floating point constants to single precision constants"
+#~ msgstr "Convertir les constantes en virgules flottantes en constantes de simple précision"
+
+#~ msgid "Insert stack checking code into the program"
+#~ msgstr "Insérer du code de vérificaion de la pile dans le programme"
+
+#~ msgid "-fstack-limit-register=<register>\tTrap if the stack goes past <register>"
+#~ msgstr "-fstack-limit-register=<registre>\tfaire un déroutement si la pile va au delà du <registre>"
+
+#~ msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>"
+#~ msgstr "-fstack-limit-symbol=<nom>\tfaire un déroutement si la pile va au delà du symbole <nom>"
+
+#~ msgid "Display statistics accumulated during compilation"
+#~ msgstr "Afficher les statistiques accumulés durant la compilation"
+
+#~ msgid "Perform strength reduction optimizations"
+#~ msgstr "Exécuter un réduction en force des optimisations"
+
+#~ msgid "Assume strict aliasing rules apply"
+#~ msgstr "Présumer que des règles stricts d'alias s'appliquent"
+
+#~ msgid "Check for syntax errors, then stop"
+#~ msgstr "Vérifier les erreurs de syntaxes et puis stopper"
+
+#~ msgid "-ftabstop=<number>\tDistance between tab stops for column reporting"
+#~ msgstr "-ftabstop=<nombre>\tfixer la distance de la tabulation des colonnes dans les rapports"
+
+#~ msgid "-ftemplate-depth-<number>\tSpecify maximum template instantiation depth"
+#~ msgstr "-ftemplate-depth-<nombre>\tspécifier la profondeur maximale d'instanciation de canevas"
+
+#~ msgid "Create data files needed by \"gcov\""
+#~ msgstr "Créer les fichiers de données nécessaires à \"gcov\""
+
+#~ msgid "Perform jump threading optimizations"
+#~ msgstr "Exécuter des optimisations de sauts de thread"
+
+#~ msgid "Report the time taken by each compiler pass"
+#~ msgstr "Rapporter le temps pris par chaque passe de compilation"
+
+#~ msgid "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the default thread-local storage code generation model"
+#~ msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tinitialiser le modèle de génération de code par défaut de thread local"
+
+#~ msgid "Perform superblock formation via tail duplication"
+#~ msgstr "Exécuter la formation du super bloc via la duplication de la queue"
+
+#~ msgid "Assume floating-point operations can trap"
+#~ msgstr "On assume que les opérations en virgule flottante peuvent être attrappées"
+
+#~ msgid "Trap for signed overflow in addition, subtraction and multiplication"
+#~ msgstr "Attrapper les débordements de signe dans l'addition, la soustraction et la multiplication"
+
+#~ msgid "Compile whole compilation unit at a time"
+#~ msgstr "Compiler complètement à la fois une unité de compilation"
+
+#~ msgid "Allow math optimizations that may violate IEEE or ISO standards"
+#~ msgstr "Permettre les optimisations mathématiques qui peuvent violer les standards IEEE ou ISO"
+
+#~ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned"
+#~ msgstr "Lorsque \"signed\" ou \"unsigned\" n'est pas fourni rendre le champ de bits non signé"
+
+#~ msgid "Make \"char\" unsigned by default"
+#~ msgstr "Rendre les \"char\" non signés par défaut"
+
+#~ msgid "Perform loop unswitching"
+#~ msgstr "Exécuter des boucles sans branchement"
+
+#~ msgid "Just generate unwind tables for exception handling"
+#~ msgstr "Générer simplement des tables étendues pour le traitement des exceptions"
+
+#~ msgid "Use __cxa_atexit to register destructors"
+#~ msgstr "Utiliser « __cxa_atexit » pour enregistrer les destructeurs."
+
+#~ msgid "Add extra commentary to assembler output"
+#~ msgstr "Ajouter des commentaires additionnels à la sortie de l'assembleur"
+
+#~ msgid "Use expression value profiles in optimizations"
+#~ msgstr "Utiliser le profile de la valeur d'expression dans l'optimisation"
+
+#~ msgid "Discard unused virtual functions"
+#~ msgstr "Écarter les fonctions virtuelles non utilisées"
+
+#~ msgid "Implement vtables using thunks"
+#~ msgstr "Implanter les vtables en utilisant des thunks"
+
+#~ msgid "Emit common-like symbols as weak symbols"
+#~ msgstr "Produire les symboles communs comme des symboles faibles"
+
+#~ msgid "Construct webs and split unrelated uses of single variable"
+#~ msgstr "Construire une toile et séparer les utilisations de variables simples"
+
+#~ msgid "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants to character set <cset>"
+#~ msgstr "-fwide-exec-charset=<cset>\tconvertir toutes les chaînes et les constantes larges de caractères en jeux de caractères <cset>"
+
+#~ msgid "Generate a #line directive pointing at the current working directory"
+#~ msgstr "Générer une directive #line pointant sur le répertoire courant de travail"
+
+#~ msgid "Assume signed arithmetic overflow wraps around"
+#~ msgstr "Assumer un débordement arithmétique signé enroulé"
+
+#~ msgid "Store strings in writable data section"
+#~ msgstr "Stocker les chaînes dans les sections d'écriture des données"
+
+#~ msgid "Emit cross referencing information"
+#~ msgstr "Produire l'information des références croisées"
+
+#~ msgid "Put zero initialized data in the bss section"
+#~ msgstr "Placer des données initialisées de zéros dans la section bss"
+
+#~ msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode"
+#~ msgstr "Générer un recherche molle de class (via objc_getClass()) pour l'utilisation en mode Zero-Link"
+
+#~ msgid "Generate debug information in default format"
+#~ msgstr "Générer les informations de mise au point dans le format par défaut"
+
+#~ msgid "Generate debug information in COFF format"
+#~ msgstr "Générer les informations de mise au point dans le format COFF"
+
+#~ msgid "Generate debug information in DWARF v2 format"
+#~ msgstr "Générer les informations de mise au point dans le format DWARF v2"
+
+#~ msgid "Dump declarations to a .decl file"
+#~ msgstr "Vidanger les déclarations dans un fichier .decl"
+
+#~ msgid "Generate debug information in default extended format"
+#~ msgstr "Générer les informations de mise au point dans le format étendu par défaut"
+
+#~ msgid "Generate debug information in STABS format"
+#~ msgstr "Générer les informations de mise au point dans le format STABS"
+
+#~ msgid "Generate debug information in extended STABS format"
+#~ msgstr "Générer les informations de mise au point dans le format étendu STABS"
+
+#~ msgid "Generate debug information in VMS format"
+#~ msgstr "Générer les informations de mise au point dans le format VMS"
+
+#~ msgid "Generate debug information in XCOFF format"
+#~ msgstr "Générer les information de mise au point dans le format XCOFF"
+
+#~ msgid "Generate debug information in extended XCOFF format"
+#~ msgstr "Générer les informations de mise au point dans le format étendu XCOFF"
+
+#~ msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path"
+#~ msgstr "-idirafter <répertoire>\tajouter <répertoire> à la fin du chemin système d'inclusion"
+
+#~ msgid "-imacros <file>\tAccept definition of macros in <file>"
+#~ msgstr "-imacros <fichier>\taccepter la définition de macros dans le <fichier>"
+
+#~ msgid "-include <file>\tInclude the contents of <file> before other files"
+#~ msgstr "-include <fichier>\tinclure le contenu du <fichier> avant les autres fichiers"
+
+#~ msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options"
+#~ msgstr "-iprefix <chemin>\tsélectionner le <chemin> comme préfixer aux deux prochaines options"
+
+#~ msgid "-isysroot <dir>\tSet <dir> to be the system root directory"
+#~ msgstr "-isysroot <répertoire>\tsélectionner le <répertoire> comme répertoire racine du système"
+
+#~ msgid "-isystem <dir>\tAdd <dir> to the start of the system include path"
+#~ msgstr "-isystem <répertoire>\tajouter le <répertoire> au début du chemin d'inclusion principal"
+
+#~ msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path"
+#~ msgstr "-iwithprefix <répertoire>\tajouter le <répertoire> à la fin du chemin d'inclusion principal"
+
+#~ msgid "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path"
+#~ msgstr "-iwithprefixbefore <répertoire>\tajouter le <répertoire> à la fin du chemin d'inclusion principal"
+
+#~ msgid "Do not search standard system include directories (those specified with -isystem will still be used)"
+#~ msgstr "Ne pas rechercher les répertoires standard système d'inclusion (ceux spécifiés avec -isystem seront encore utilisés)"
+
+#~ msgid "Do not search standard system include directories for C++"
+#~ msgstr "Ne pas rechercher les répertoires standard système d'inclusion pour C++"
+
+#~ msgid "-o <file>\tPlace output into <file>"
+#~ msgstr "-o <fichier>\tproduire la sortie dans le <fichier>"
+
+#~ msgid "Enable function profiling"
+#~ msgstr "Autoriser le profilage de fonction"
+
+#~ msgid "Issue warnings needed for strict compliance to the standard"
+#~ msgstr "Émettre les avertissements nécessaires pour être conforme au standard"
+
+#~ msgid "Like -pedantic but issue them as errors"
+#~ msgstr "Identique à -pedantic mais les marque comme des erreurs"
+
+#~ msgid "Generate C header of platform-specific features"
+#~ msgstr "Générer les en-têtes C pour les options spécifiques à la plate-forme"
+
+#~ msgid "Do not display functions compiled or elapsed time"
+#~ msgstr "Ne pas afficher les fonctions compilées ou le temps écoulé"
+
+#~ msgid "Remap file names when including files"
+#~ msgstr "Rampper les noms lors de l'inclusion des fichiers"
+
+#~ msgid "Conform to the ISO 1998 C++ standard"
+#~ msgstr "Conforme au standard ISO C++ de 1998"
+
+#~ msgid "Conform to the ISO 1990 C standard"
+#~ msgstr "Conforme au standard ISO C de 1990"
+
+#~ msgid "Conform to the ISO 1999 C standard"
+#~ msgstr "Conforme au standard ISO C de 1999"
+
+#~ msgid "Deprecated in favor of -std=c99"
+#~ msgstr "Obsolète à la faveur de l'option -std=c99"
+
+#~ msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
+#~ msgstr "Conforme au standard ISO C++ de 1998 avec les extensions de GNU"
+
+#~ msgid "Conform to the ISO 1990 C standard with GNU extensions"
+#~ msgstr "Conforme au standard ISO C de 1990 avec les extensions de GNU"
+
+#~ msgid "Conform to the ISO 1999 C standard with GNU extensions"
+#~ msgstr "Conforme au standard ISO C de 1999 avec les extensions de GNU"
+
+#~ msgid "Deprecated in favor of -std=gnu99"
+#~ msgstr "Obsolète à la faveur de l'option -std=gnu99"
+
+#~ msgid "Deprecated in favor of -std=c89"
+#~ msgstr "Obsolète à la faveur de l'option -std=c89"
+
+#~ msgid "Conform to the ISO 1990 C standard as amended in 1994"
+#~ msgstr "Conforme au standard ISO C de 1990 tel amendé en 1994"
+
+#~ msgid "Enable traditional preprocessing"
+#~ msgstr "Autoriser le traitement traditionnel"
+
+#~ msgid "-trigraphs\tSupport ISO C trigraphs"
+#~ msgstr "-trigraphs\tSupporter les tri-graphes ISO C"
+
+#~ msgid "Do not predefine system-specific and GCC-specific macros"
+#~ msgstr "Ne pas prédéfinir les macros spécifiques au système ou à GCC"
+
+#~ msgid "Enable verbose output"
+#~ msgstr "Autoriser le mode bavard sur la sortie"
+
+#~ msgid "Display the compiler's version"
+#~ msgstr "Afficher la version du compilateur"
+
+#~ msgid "Suppress warnings"
+#~ msgstr "Supprimer les avertissements"
+
+#~ msgid "`-p' not supported; use `-pg' and gprof(1)"
+#~ msgstr "« -p » n'est pas supporté; utiliser « -pg » et gprof(1)"
+
+#~ msgid "GCC does not support -C without using -E"
+#~ msgstr "GCC ne supporte pas -C sans utiliser -E"
+
+#~ msgid "GCC does not support -CC without using -E"
+#~ msgstr "GCC ne supporte pas -CC sans utiliser -E"
+
+#~ msgid "may not use both -m32 and -m64"
+#~ msgstr "ne peut utiliser ensemble -m32 et -m64"
+
+#~ msgid "shared and mdll are not compatible"
+#~ msgstr "shared et mdll ne sont pas compatibles"
+
+#~ msgid "-current_version only allowed with -dynamiclib"
+#~ msgstr "-current_version permis seulement avec -dynamiclib"
+
+#~ msgid "-install_name only allowed with -dynamiclib"
+#~ msgstr "-install_name permis seulement avec with -dynamiclib"
+
+#~ msgid "-bundle not allowed with -dynamiclib"
+#~ msgstr "-bundle n'est pas permis avec -dynamiclib"
+
+#~ msgid "-bundle_loader not allowed with -dynamiclib"
+#~ msgstr "-bundle_loader n'est pas permis avec -dynamiclib"
+
+#~ msgid "-client_name not allowed with -dynamiclib"
+#~ msgstr "-client_name n'est pas permis avec -dynamiclib"
+
+#~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib"
+#~ msgstr "-force_cpusubtype_ALL n'est pas permis avec -dynamiclib"
+
+#~ msgid "-force_flat_namespace not allowed with -dynamiclib"
+#~ msgstr "-force_flat_namespace n'est pas permis avec -dynamiclib"
+
+#~ msgid "-keep_private_externs not allowed with -dynamiclib"
+#~ msgstr "-keep_private_externs n'est pas permis avec -dynamiclib"
+
+#~ msgid "-private_bundle not allowed with -dynamiclib"
+#~ msgstr "-private_bundle n'est pas permis avec -dynamiclib"
+
+#~ msgid "The -shared option is not currently supported for VAX ELF."
+#~ msgstr "L'option -shared n'est pas couramment supportée pour VAS ELF."
+
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "profilage n'est pas supporté avec -mg\n"
+
+#~ msgid "may not use both -EB and -EL"
+#~ msgstr "ne peut utiliser ensemble -EB et -EL"
+
+#~ msgid "-pipe is not supported"
+#~ msgstr "-pipe n'est pas supporté"
+
+#~ msgid "-pg and -fomit-frame-pointer are incompatible"
+#~ msgstr "-pg et -fomit-frame-pointer sont incompatibles"
+
+#~ msgid "-fjni and -femit-class-files are incompatible"
+#~ msgstr "-fjni et -femit-class-files sont incompatibles"
+
+#~ msgid "-fjni and -femit-class-file are incompatible"
+#~ msgstr "-fjni et -femit-class-file sont incompatibles"
+
+#~ msgid "-femit-class-file should used along with -fsyntax-only"
+#~ msgstr "-femit-class-file dervait être utilisé avec -fsyntax-only"
+
+#~ msgid "-pg or -p and -fomit-frame-pointer are incompatible"
+#~ msgstr "-pg et -p et -fomit-frame-pointer sont incompatibles"
+
+#~ msgid "does not support multilib"
+#~ msgstr "ne supporte pas multilib"
+
+#~ msgid "-pg not supported on this platform"
+#~ msgstr "-pg n'est pas supporté sur cette plate-forme"
+
+#~ msgid "-p and -pp specified - pick one"
+#~ msgstr "-p et -pp spécifié - n'en prendre qu'un seul"
+
+#~ msgid "-G and -static are mutually exclusive"
+#~ msgstr "-G et -static sont mutuellement exclusives"
+
+#~ msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#~ msgstr "-mapcs-26 et -mapcs-32 ne peuvent être utilisés ensembles"
+
+#~ msgid "-msoft-float and -mhard_float may not be used together"
+#~ msgstr "-msoft-float et -mhard_float ne peuvent être utilisées ensembles"
+
+#~ msgid "-mbig-endian and -mlittle-endian may not be used together"
+#~ msgstr "-mbig-endian et -mlittle-endian ne peuvent être utilisés ensemble"
+
+#~ msgid "the m210 does not have little endian support"
+#~ msgstr "Le m210 ne supporte pas le code pour système à octets de poids faible"
+
+#~ msgid "one of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada"
+#~ msgstr "une parmi -c, -S, -gnatc, -gnatz ou -gnats est requise pour Ada"
+
+#~ msgid "-mhard-float not supported"
+#~ msgstr "-mhard-float n'est pas supporté"
+
+#~ msgid "-msingle-float and -msoft-float can not both be specified"
+#~ msgstr "-msingle-float et -msoft-float ne peuvent être spécifiés ensembles"
+
+#~ msgid " conflicting code gen style switches are used"
+#~ msgstr " code de génération de style de switches utilisées est en conflit"
+
+#~ msgid "GCC does not support -C or -CC without -E"
+#~ msgstr "GCC ne supporte pas -C ou -CC sans utiliser -E"
+
+#~ msgid "-E required when input is from standard input"
+#~ msgstr "-E est requis lorsque l'entrée est faite à partir de l'entrée standard"
+
+#~ msgid "mno-cygwin and mno-win32 are not compatible"
+#~ msgstr "mno-cygwin et mno-win32 ne sont pas compatibles"
+
+#~ msgid "pointer to a member used in arithmetic"
+#~ msgstr "usage en arithmétique d'un pointeur vers un membre"
+
+#~ msgid "declaration of \"%s\" shadows a parameter"
+#~ msgstr "la déclaration de « %s » masque un paramètre"
+
+#~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2003 Free Software Foundation, Inc.\n"
+
+#~ msgid "Use the 26-bit version of the APCS"
+#~ msgstr "Utiliser la version 26 bits de APCS"
+
+#~ msgid "duplicate enum value `%D'"
+#~ msgstr "valeur d'énumérateur « %D » en double"
+
+#~ msgid "duplicate field `%D' (as enum and non-enum)"
+#~ msgstr "champ « %D » en double (comme enum et non enum)"
+
+#~ msgid "duplicate nested type `%D'"
+#~ msgstr "type « %D » imbriqué en double"
+
+#~ msgid "duplicate field `%D' (as type and non-type)"
+#~ msgstr "duplicattion du champ « %D » (comme type et non type)"
+
+#~ msgid "duplicate member `%D'"
+#~ msgstr "membre « %D » est double"
+
+#~ msgid "ISO C++ forbids member `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ interdit le membre « %D » avec le même non de la classe de fermeture"
+
+#~ msgid "field `%D' declared static in union"
+#~ msgstr "champ « %D » déclaré statique dans l'union"
+
+#~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class"
+#~ msgstr "ISO C++ interdit les données de membres statiques « %D » avec le même nom comme classe de fermeture"
+
+#~ msgid "anachronistic use of array size in vector delete"
+#~ msgstr "utilisation anachronique de la taille d'un tableau dans un vecteur delete"
+
+#~ msgid "ISO C++ forbids aggregate initializer to new"
+#~ msgstr "ISO C++ interdit l'aggrégation d'initialiseur à new"
+
+#~ msgid "neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined."
+#~ msgstr "ni le destructeur ni l'opérateur « delete » spécifique à la classe ne sera appellé, même s'ils sont déclarés lorsque la classe est définie"
+
+#~ msgid "Warn if deprecated class, method, or field is used"
+#~ msgstr "Avertir si une classe, une méthode ou un champ obsolète est utilisé"
+
+#~ msgid "Warn if deprecated empty statements are found"
+#~ msgstr "Avertir si des déclarations vides obsolètes sont trouvées"
+
+#~ msgid "Enable warnings about inter-procedural problems"
+#~ msgstr "Autoriser les avertissements à propos des problèmes inter-procédural"
+
+#~ msgid "Warn if .class files are out of date"
+#~ msgstr "Avertir si des fichier .class sont périmées"
+
+#~ msgid "Warn if modifiers are specified when not necessary"
+#~ msgstr "Avertir si des modificateurs sont spécifiés sans que cela ne soit nécessaires"
+
+#~ msgid "Warn about constructs with surprising meanings"
+#~ msgstr "Avertir à propos des construits ayant des sens surprenants"
+
+#~ msgid "--CLASSPATH\tDeprecated; use --classpath instead"
+#~ msgstr "--CLASSPATH\tobsolète; utiliser --classpath à la place"
+
+#~ msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
+#~ msgstr "Traiter les variables locales et les blocs COMMON comme s'ils étaient nommés dans une déclaration SAVE"
+
+#~ msgid "Backslashes in character and hollerith constants are special (not C-style)"
+#~ msgstr "Barres obliques inverses dans les constantes de caractères ou d'hollerith ne sont pas particulières (pas de style C)"
+
+#~ msgid "Delete libU77 intrinsics with bad interfaces"
+#~ msgstr "Détruire les intrinsèques libU77 ayant des interfaces erronées"
+
+#~ msgid "Disable libU77 intrinsics with bad interfaces"
+#~ msgstr "Désactiver les intrinsèques libU77 ayant des interfaces erronées"
+
+#~ msgid "Enable libU77 intrinsics with bad interfaces"
+#~ msgstr "Autoriser les intrinsèques libU77 ayant des interfaces erronées"
+
+#~ msgid "Hide libU77 intrinsics with bad interfaces"
+#~ msgstr "Cacher les intrinsèques libU77 ayant des interfaces erronées"
+
+#~ msgid "--bootclasspath=<path>\tReplace system path"
+#~ msgstr "--bootclasspath=<chemin>\tremplacer le <chemin> système"
+
+#~ msgid "Program written in strict mixed-case"
+#~ msgstr "Programme écrit dans une stricte casse mélangée"
+
+#~ msgid "Compile as if program written in lowercase"
+#~ msgstr "Compiler comme si le programme était écrit en minuscules"
+
+#~ msgid "Preserve case used in program"
+#~ msgstr "Préserver la casse utilisée dans un programme"
+
+#~ msgid "Program written in lowercase"
+#~ msgstr "Programmes écrit en minuscules"
+
+#~ msgid "Program written in uppercase"
+#~ msgstr "Programme écrit en majuscules"
+
+#~ msgid "Compile as if program written in uppercase"
+#~ msgstr "Compiler comme si le programme était écrit en majuscules"
+
+#~ msgid "--classpath=<path>\tSet class path"
+#~ msgstr "--classpath=<chemin>\tfixer le chemin des classes"
+
+#~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)"
+#~ msgstr "Produire des information spéciales de mise au point pour COMMON et EQUIVALENCE (désactivé)"
+
+#~ msgid "Allow '$' in symbol names"
+#~ msgstr "Permettre '$' dans les noms de symboles"
+
+#~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs"
+#~ msgstr "Avoir un frontal d'émulation pour l'arithmétique COMPLEXE pour éviter les bugs"
+
+#~ msgid "--encoding=<encoding>\tChoose input encoding (defaults from your locale)"
+#~ msgstr "--encoding=<encodage>\tchoisir l'encodade d'entrée (par défaut provient de la locale)"
+
+#~ msgid "f2c-compatible code can be generated"
+#~ msgstr "code f2c compatible peut être généré"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Détruire les supports f2c intrinsèques non Fortran 77"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Désactiver les supports f2c intrinsèques non Fortran 77"
+
+#~ msgid "Enable non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Autoriser les supports f2c intrinsèques non Fortran 77"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "Cacher les supports f2c intrinsèques non Fortran 77"
+
+#~ msgid "Unsupported; generate libf2c-calling code"
+#~ msgstr "Non supporté; générer le code d'appel libf2c"
+
+#~ msgid "Program is written in typical FORTRAN 66 dialect"
+#~ msgstr "Programme est écrit dans un dialecte typique FORTRAN 66"
+
+#~ msgid "Program is written in typical Unix-f77 dialect"
+#~ msgstr "Programme est écrit dans un dialecte typique Unix f77"
+
+#~ msgid "Program is written in Fortran-90-ish dialect"
+#~ msgstr "Programme est écrit dans un dialecte Fortran 90"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Détruire les supports F90 intrinsèques non Fortran 77"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Désactiver les supports F90 intrinsèques non Fortran 77"
+
+#~ msgid "Enable non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Autoriser  les supports F90 intrinsèques non Fortran 77"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "Cacher les supports F90 intrinsèques non Fortran 77"
+
+#~ msgid "ffixed-line-length-<number>\tSet the maximum line length to <number>"
+#~ msgstr "ffixed-line-limit-<nombre>\tfixer la longueur maximale de la ligne à <nombre>"
+
+#~ msgid "Unsupported; affects code generation of arrays"
+#~ msgstr "Non supporté; affecte la génération de code des tableaux"
+
+#~ msgid "Always check for non gcj generated classes archives"
+#~ msgstr "Toujours vérifier dans les archives de classes non générées gcj"
+
+#~ msgid "Generate code to check subscript and substring bounds"
+#~ msgstr "Générer du code pour vérifier les bornes des souscripts et des sous-chaînes"
+
+#~ msgid "Program is written in Fortran-90-ish free form"
+#~ msgstr "Programme est écrit dans un style libre Fortran 90"
+
+#~ msgid "Enable fatal diagnostics about inter-procedural problems"
+#~ msgstr "Autoriser les diagnostiques fatals à propos des problèmes entre procédures"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports"
+#~ msgstr "Détruire les supports g77 intrinsèques non Fortran 77"
+
+#~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "Désactiver les supports g77 intrinsèques non Fortran 77"
+
+#~ msgid "Enable non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "Autoriser les supports F90 intrinsèques non Fortran 77"
+
+#~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "Cacher les supports g77 intrinsèques non Fortran 77"
+
+#~ msgid "Use offset tables for virtual method calls"
+#~ msgstr "Utiliser des tables de décalage pour les appels de méthodes virtuelles"
+
+#~ msgid "Initialize local vars and arrays to zero"
+#~ msgstr "Initialiser les vars locales et les tableaux à zéro"
+
+#~ msgid "Intrinsics letters in arbitrary cases"
+#~ msgstr "Lettres d'instrinsèques en casse arbitraire"
+
+#~ msgid "Intrinsics spelled as e.g. SqRt"
+#~ msgstr "Intrinsèques épellées tel que SqRt"
+
+#~ msgid "Intrinsics in lowercase"
+#~ msgstr "Intrinsèques en minuscules"
+
+#~ msgid "Intrinsics in uppercase"
+#~ msgstr "Intrinsèques en majuscules"
+
+#~ msgid "Assume native functions are implemented using JNI"
+#~ msgstr "Présumer que les fonctions natives sont implantées et qu'elles utilisent JNI"
+
+#~ msgid "Language keyword letters in arbitrary cases"
+#~ msgstr "Lettres des mots clés du langage dans des casses arbitraires"
+
+#~ msgid "Language keywords spelled as e.g. IOStat"
+#~ msgstr "Mots clés du langage épellés tel que IOStat"
+
+#~ msgid "Language keywords in lowercase"
+#~ msgstr "Mots clés du langage en minuscules"
+
+#~ msgid "Language keywords in uppercase"
+#~ msgstr "Mots clés du langage en majuscules"
+
+#~ msgid "Delete MIL-STD 1753 intrinsics"
+#~ msgstr "Détruire les intrinsèques MIL-STD 1753"
+
+#~ msgid "Disable MIL-STD 1753 intrinsics"
+#~ msgstr "Désactiver les intrinsèques MIL-STD 1753"
+
+#~ msgid "Enable MIL-STD 1753 intrinsics"
+#~ msgstr "Autoriser intrinsèques MIL-STD 1753"
+
+#~ msgid "Hide MIL-STD 1753 intrinsics"
+#~ msgstr "Cacher les intrinsèques MIL-STD 1753"
+
+#~ msgid "Take at least one trip through each iterative DO loop"
+#~ msgstr "Exécuter une dernière fois la visite à traves chaque boucle itérative DO"
+
+#~ msgid "Enable optimization of static class initialization code"
+#~ msgstr "Autorisser l'optimisation du code d'initialisation de classe statique"
+
+#~ msgid "Warn about use of (only a few for now) Fortran extensions"
+#~ msgstr "Avertir à propos de l'utilisation (très peu pour l'instant) des extensions Fortran"
+
+#~ msgid "Allow appending a second underscore to externals"
+#~ msgstr "Permettre l'ajout d'un second caractère de soulignement aux externes"
+
+#~ msgid "Do not print names of program units as they are compiled"
+#~ msgstr "Afficher les noms des unités de programme tels que compilées"
+
+#~ msgid "Internally convert most source to lowercase"
+#~ msgstr "Convertir de manière interne la majorité des sources en majuscules"
+
+#~ msgid "Internally preserve source case"
+#~ msgstr "Préserver à l'interne la casse des sources"
+
+#~ msgid "Internally convert most source to uppercase"
+#~ msgstr "Convertir à l'interne la majorité des sources en majuscules"
+
+#~ msgid "Enable assignability checks for stores into object arrays"
+#~ msgstr "Autoriser la vérificaitions des affectations dans le stockage des tableaux d'objets"
+
+#~ msgid "Symbol names spelled in mixed case"
+#~ msgstr "Noms des symboles épellés dans des casses mélangées"
+
+#~ msgid "Symbol names in lowercase"
+#~ msgstr "Noms de symboles en minuscules"
+
+#~ msgid "Symbol names in uppercase"
+#~ msgstr "Noms des symboles en majuscules"
+
+#~ msgid "Make prefix-radix non-decimal constants be typeless"
+#~ msgstr "Rendre les préfixes des bases des constantes non décimales sans type"
+
+#~ msgid "Allow all ugly features"
+#~ msgstr "Permettre toutes les options laides"
+
+#~ msgid "Hollerith and typeless can be passed as arguments"
+#~ msgstr "Les Hollerith et sans type peuvent être passés comme arguments"
+
+#~ msgid "Allow ordinary copying of ASSIGN'ed vars"
+#~ msgstr "Permettre le copie ordinaire des variable affectées"
+
+#~ msgid "Dummy array dimensioned to (1) is assumed-size"
+#~ msgstr "Tableau factice dont la taille des dimensions (1) est assumée"
+
+#~ msgid "Trailing comma in procedure call denotes null argument"
+#~ msgstr "Virgule de fin dans l'appel de la procédure dénote un argument nul"
+
+#~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z"
+#~ msgstr "Permettre REAL(Z) et AIMAG(Z) pour les DOUBLE COMPLEX Z"
+
+#~ msgid "Initialization via DATA and PARAMETER is not type-compatible"
+#~ msgstr "Initialisation via DATA et PARAMETER n'est pas un type compatible"
+
+#~ msgid "Allow INTEGER and LOGICAL interchangeability"
+#~ msgstr "Permettre l'interchangeabilité de INTEGER et LOGICAL"
+
+#~ msgid "Append underscores to externals"
+#~ msgstr "Ajouter des caractères de soulignement aux externes"
+
+#~ msgid "Delete libU77 intrinsics"
+#~ msgstr "Détruire les intrinsèques libU77"
+
+#~ msgid "Disable libU77 intrinsics"
+#~ msgstr "Désactiver les intrinsèques libU77"
+
+#~ msgid "Enable libU77 intrinsics"
+#~ msgstr "Autoriser les intrinsèques libU77"
+
+#~ msgid "Hide libU77 intrinsics"
+#~ msgstr "Cacher les intrinsèques libU77"
+
+#~ msgid "Print g77-specific version information and run internal tests"
+#~ msgstr "Afficher les informations de version spécifiques du compilateur g77, exécuter les tests internes"
+
+#~ msgid "Program is written in VXT (Digital-like) FORTRAN"
+#~ msgstr "Programme est écrit en Fortran VXT (forme de Digital)"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Détruire les supports VXT Fortran intrinsèques non Fortran-77"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Désactiver les supports VXT Fortran intrinsèques non Fortran-77"
+
+#~ msgid "Enable non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Désactiver les supports VXT Fortran intrinsèques non Fortran-77"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "Cacher les supports VXT Fortran des intrinsèques non Fortran-77"
+
+#~ msgid "Print internal debugging-related information"
+#~ msgstr "Afficher les informations internes reliées à la mise au point"
+
+#~ msgid "Treat initial values of 0 like non-zero values"
+#~ msgstr "Traiter les valeurs initiales de 0 comme des valeurs non zéros"
+
+#~ msgid "-gnat<options>\tSpecify options to GNAT"
+#~ msgstr "-gnat<options>\tSpécifier les options pour GNAT"
+
+#~ msgid "concatenation of string literals with __FUNCTION__ is deprecated"
+#~ msgstr "la concaténation de chaînes de litéraux avec « __FUNCTION__ » est obsolète"
+
+#~ msgid "ISO C++ forbids range expressions in switch statements"
+#~ msgstr "ISO C++ interdit les intervalles dans les déclarations de « switch »"
+
+#~ msgid "ISO C++ forbids taking the address of a label"
+#~ msgstr "ISO C++ interdit de prendre l'adresse d'une étiquette"
+
+#~ msgid "ISO C forbids taking the address of a label"
+#~ msgstr "ISO C interdit de prendre l'adresse d'une étiquette"
+
+#~ msgid "declaration of `%s' shadows %s"
+#~ msgstr "la déclaration de « %s » masque %s"
+
+#~ msgid "`struct %s' incomplete in scope ending here"
+#~ msgstr "« struct %s » incomplète dans le champ terminant ici"
+
+#~ msgid "`union %s' incomplete in scope ending here"
+#~ msgstr "« union %s » incomplète dans le champ terminant ici"
+
+#~ msgid "`enum %s' incomplete in scope ending here"
+#~ msgstr "« enum %s » incomplète dans le champ terminant ici"
+
+#~ msgid "label `%s' defined but not used"
+#~ msgstr "étiquette « %s » définie mais pas utilisée"
+
+#~ msgid "shadowing library function `%s'"
+#~ msgstr "masquage de la fonction « %s » de la bibliothèque"
+
+#~ msgid "library function `%s' declared as non-function"
+#~ msgstr "fonction « %s » de la bibliothèque déclarée comme n'étant pas une fonction"
+
+#~ msgid "conflicting types for `%s'"
+#~ msgstr "types conflictuels pour « %s »"
+
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "redéclaration de « %s »"
+
+#~ msgid "prototype for `%s' follows"
+#~ msgstr "le prototype de « %s » suit"
+
+#~ msgid "non-prototype definition here"
+#~ msgstr "définition d'un non prototype ici"
+
+#~ msgid "prototype for `%s' follows and number of arguments doesn't match"
+#~ msgstr "le prototype de « %s » suit mais le nombre d'arguments ne concorde pas"
+
+#~ msgid "prototype for `%s' follows and argument %d doesn't match"
+#~ msgstr "le prototype de « %s » suit mais le nombre d'arguments %d ne concorde pas"
+
+#~ msgid "type qualifiers for `%s' conflict with previous decl"
+#~ msgstr "le qualificateur du type de « %s » est en conflit avec une déclaration précédente"
+
+#~ msgid "redundant redeclaration of `%s' in same scope"
+#~ msgstr "redéclaration redondante de « %s » dans le même champ"
+
+#~ msgid "a parameter"
+#~ msgstr "un paramètre"
+
+#~ msgid "a previous local"
+#~ msgstr "une locale précédente"
+
+#~ msgid "a global declaration"
+#~ msgstr "une déclaration globale"
+
+#~ msgid "`%s' used prior to declaration"
+#~ msgstr "« %s » utilisé avant sa déclaration"
+
+#~ msgid "`%s' was declared implicitly `extern' and later `static'"
+#~ msgstr "« %s » a été déclaré implicitement « extern » et plus loin « static »"
+
+#~ msgid "previous external decl of `%s'"
+#~ msgstr "déclaration externe précédente de « %s »"
+
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "non concordance de type avec la déclaration implicite précédente"
+
+#~ msgid "`%s' was previously implicitly declared to return `int'"
+#~ msgstr "« %s » a été précédemment déclaré implicitement comme retournant un « int »"
+
+#~ msgid "`%s' was declared `extern' and later `static'"
+#~ msgstr "« %s » a été déclaré « extern » et plus loin « static »"
+
+#~ msgid "`%s' locally external but globally static"
+#~ msgstr "« %s » localement externe mais globalement statique"
+
+#~ msgid "function `%s' was previously declared within a block"
+#~ msgstr "la fonction « %s » a été précédemment déclarée à l'intérieur d'un bloc"
+
+#~ msgid "declaration of `%s' has `extern' and is initialized"
+#~ msgstr "« %s » initialisé et déclaré « extern »"
+
+#~ msgid "initializer fails to determine size of `%s'"
+#~ msgstr "l'initialisation n'a pas pu déterminer la taille de « %s »"
+
+#~ msgid "array size missing in `%s'"
+#~ msgstr "taille du tableau manquante dans « %s »"
+
+#~ msgid "storage size of `%s' isn't known"
+#~ msgstr "taille de stockage de « %s » inconnue"
+
+#~ msgid "storage size of `%s' isn't constant"
+#~ msgstr "la taille de stockage de « %s » n'est pas une constante"
+
+#~ msgid "ISO C forbids parameter `%s' shadowing typedef"
+#~ msgstr "ISO C interdit que le paramètre « %s » masque un typedef"
+
+#~ msgid "parameter `%s' points to incomplete type"
+#~ msgstr "le paramètre « %s » pointe vers un type incomplet"
+
+#~ msgid "parameter points to incomplete type"
+#~ msgstr "le paramètre pointe vers un type incomplet"
+
+#~ msgid "`void' in parameter list must be the entire list"
+#~ msgstr "si « void » est dans une liste de paramètres, toute la liste doit l'être"
+
+#~ msgid "`union %s' declared inside parameter list"
+#~ msgstr "« union %s » déclarée à l'intérieur de la liste de paramètres"
+
+#~ msgid "`enum %s' declared inside parameter list"
+#~ msgstr "« enum %s » déclarée à l'intérieur de la liste de paramètres"
+
+#~ msgid "anonymous union declared inside parameter list"
+#~ msgstr "union anonyme déclarée à l'intérieur de la liste des paramètres"
+
+#~ msgid "anonymous enum declared inside parameter list"
+#~ msgstr "énumération anonyme déclarée à l'intérieur de la liste des paramètres"
+
+#~ msgid "bit-field `%s' type invalid in ISO C"
+#~ msgstr "le champ de bits « %s » a un type invalide en C ISO"
+
+#~ msgid "duplicate member `%s'"
+#~ msgstr "membre « %s » apparaît en double"
+
+#~ msgid "parm types given both in parmlist and separately"
+#~ msgstr "types des paramètres à la fois donnés dans la liste et séparément"
+
+#~ msgid "parameter `%s' declared void"
+#~ msgstr "paramètre « %s » déclaré « void »"
+
+#~ msgid "universal-character-name '\\u%04x' not valid in identifier"
+#~ msgstr "nom-de-caractère-universel « \\U%04x » invalide dans l'identificcateur"
+
+#~ msgid "ignoring invalid multibyte character"
+#~ msgstr "caractère multioctet invalide ignoré"
+
+#~ msgid "options array incorrectly sorted: %s is before %s"
+#~ msgstr "tableau des options mal trié : %s est avant %s"
+
+#~ msgid "-Wno-strict-prototypes is not supported in C++"
+#~ msgstr "-Wno-strict-prototypes n'est pas permis en C++"
+
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ msgstr ""
+#~ "Options:\n"
+#~ "  -include <fichier>        Inclure le contenu du <fichier> avant d'autres fichiers\n"
+#~ "  -imacros <fichier>        Accepter la définition de macros dans le <fichier>\n"
+#~ "  -iprefix <chemin>         Spécifier le <chemin> comme un préfixe aux prochaines deux options\n"
+#~ "  -iwithprefix <rép>        Ajouter le <rép>ertoire à la fin du chemin d'inclusion système\n"
+#~ "  -iwithprefixbefore <rép>  Ajouter le <rép>ertoire à la fin du chemin d'inclusion principal\n"
+#~ "  -isystem <rép>            Ajouter le <rép>ertoire au début du chemin d'inclusion système\n"
+
+#~ msgid ""
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ msgstr ""
+#~ "  -idirafter <rép>          Ajouter le <rép>ertoire à la fin du chemin d'inclusion système\n"
+#~ "  -I <rép>                  Ajouter le <rép>ertoire à la fin du chemin d'inclusion principal\n"
+#~ "  -I-                       Raffiner le contrôle du chemin d'inclusion; consulter la doc\n"
+#~ "  -nostdinc                 Ne pas rechercher dans les répertoires d'inclusion système\n"
+#~ "                             (les rép spécifiés avec -isystem seront encore utilisés)\n"
+#~ "  -nostdinc++               Ne pas rechercher dans les répertoires d'inclusion système pour C++\n"
+#~ "  -o <fichier>              Produire la sortie dans le <fichier>\n"
+
+#~ msgid ""
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -W[no-]trigraphs          Warn if trigraphs are encountered\n"
+#~ "  -W[no-]comment{s}         Warn if one comment starts inside another\n"
+#~ msgstr ""
+#~ "  -trigraphs                Permettre les trigraphes C ISO\n"
+#~ "  -std=<standard>           Spécifier le <standard> de conformité à utiliser; soit:\n"
+#~ "                             gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                             iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Inhiber les messages d'avertissement\n"
+#~ "  -W[no-]trigraphs          Avertir [ou non] si des trigraphes sont rencontrés\n"
+#~ "  -W[no-]comment{s}         Avertir [ou non] si un commentaire débute à l'intérieur \n"
+#~ "                             d'un autre\n"
+
+#~ msgid ""
+#~ "  -W[no-]traditional        Warn about features not present in traditional C\n"
+#~ "  -W[no-]undef              Warn if an undefined macro is used by #if\n"
+#~ "  -W[no-]import             Warn about the use of the #import directive\n"
+#~ msgstr ""
+#~ "  -W[no-]traditional        Avertir [ou non] à propos des fonctionnalités absentes\n"
+#~ "                             en C traditionnel\n"
+#~ "  -W[no-]undef              Avertir [ou non] à propos des macros utilisées dans des\n"
+#~ "                             #if sans être définies\n"
+#~ "  -W[no-]import             Avertir [ou non] de l'utilisation de la directive #import\n"
+
+#~ msgid ""
+#~ "  -W[no-]error              Treat all warnings as errors\n"
+#~ "  -W[no-]system-headers     Do not suppress warnings from system headers\n"
+#~ "  -W[no-]all                Enable most preprocessor warnings\n"
+#~ msgstr ""
+#~ "  -W[no-]error              Changer [ou non] les avertissements en erreurs\n"
+#~ "  -W[no-]system-headers     Supprimer [ou non] les avertissements à propos des \n"
+#~ "                             en-têtes système\n"
+#~ "  -W[no-]all                Générer [ou non] la plupart des avertissements du\n"
+#~ "                             préprocesseur\n"
+
+#~ msgid ""
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       Generate make dependencies and compile\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MF <file>                Write dependency output to the given file\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ msgstr ""
+#~ "  -M                        Générer les dépendances pour make\n"
+#~ "  -MM                       Comme -M, en ignorant les fichiers d'en-têtes système\n"
+#~ "  -MD                       Générer les dépendances pour make et compiler\n"
+#~ "  -MMD                      Comme -MD, en ignorant les fichiers d'en-têtes système\n"
+#~ "  -MF <fichier>             Écrire les dépendances dans le <fichier>\n"
+#~ "  -MG                       Traiter les en-têtes manquants comme des fichiers générés\n"
+
+#~ msgid ""
+#~ "  -MP\t\t\t    Generate phony targets for all headers\n"
+#~ "  -MQ <target>              Add a MAKE-quoted target\n"
+#~ "  -MT <target>              Add an unquoted target\n"
+#~ msgstr ""
+#~ "  -MP\t\t\t    Générer des cibles factices pour tous les en-têtes\n"
+#~ "  -MQ <target>              Ajouter une cible protégée pour MAKE\n"
+#~ "  -MT <target>              Ajouter une cible non protégée\n"
+
+#~ msgid ""
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question>=<answer>     Assert the <answer> to <question>\n"
+#~ "  -A-<question>=<answer>    Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ msgstr ""
+#~ "  -D<macro>                 Définir une <macro> avec la chaîne « 1 » pour valeur\n"
+#~ "  -D<macro>=<valeur>        Définir une <macro> de <valeur>\n"
+#~ "  -A<question>=(<réponse>)  Créer une assertion <question>=<réponse>\n"
+#~ "  -A-<question>=(<réponse>) Dissocier la <réponse> à la <question>\n"
+#~ "  -U<macro>                 Oublier la définition de la <macro> \n"
+#~ "  -v                        Afficher le numéro de version\n"
+
+#~ msgid ""
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ msgstr ""
+#~ "  -H                        Afficher le nom des fichiers en-tête tel qu'utilisés\n"
+#~ "  -C                        Ne pas mettre de côté les commantaires\n"
+#~ "  -dM                       Afficher la liste des définitions de macro actives à la fin\n"
+#~ "  -dD                       Préserver les définitions de macros dans la sortie\n"
+#~ "  -dN                       Comme -dD, mais seuls les noms sont préservés\n"
+#~ "  -dI                       Inclure la directive #include dans la sortie\n"
+
+#~ msgid ""
+#~ "  -f[no-]preprocessed       Treat the input file as already preprocessed\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -remap                    Remap file names when including files\n"
+#~ "  --help                    Display this information\n"
+#~ msgstr ""
+#~ "  -f[no-]preprocessed       Considérer [ou non] que le fichier d'entrée est \n"
+#~ "                             déjà pré-traité\n"
+#~ "  -ftabstop=<nombre>        Largeur des tabulations pour indiquer la colonne\n"
+#~ "  -P                        Ne pas générer des directives #line\n"
+#~ "  -remap                    Refaire la table des noms de fichiers lors de\n"
+#~ "                             l'inclusion de fichiers\n"
+#~ "  --help                    Afficher cet l'aide-mémoire\n"
+
+# FIXME
+#~ msgid "ISO C forbids the address of a cast expression"
+#~ msgstr "ISO C interdit l'adresse d'une expression transtypée"
+
+#~ msgid "initializer for static variable is not constant"
+#~ msgstr "l'initialisation d'une variable statique n'est pas une constante"
+
+#~ msgid "initializer for static variable uses complicated arithmetic"
+#~ msgstr "l'initialisation d'une variable statique utilise une artihmétique compliquée"
+
+# FIXME
+#~ msgid "aggregate initializer is not constant"
+#~ msgstr "l'initialisation d'aggrégat n'est pas une constante"
+
+# FIXME
+#~ msgid "aggregate initializer uses complicated arithmetic"
+#~ msgstr "l'initialisation d'un aggrégat utilise une arithmétique compliquée"
+
+# FIXME
+#~ msgid "variable offset is passed partially in stack and in reg"
+#~ msgstr "le décalage de variable est passé partiellement dans la pile et dans le registre"
+
+#~ msgid "variable size is passed partially in stack and in reg"
+#~ msgstr "la taille de la variable est passée partiellement dans la pile et le registre"
+
+# I18N
+#~ msgid "open %s"
+#~ msgstr "open %s"
+
+#~ msgid "incompatibilities between object file & expected values"
+#~ msgstr "incompatibilités entre le fichier objet et les valeurs attendues"
+
+#~ msgid ""
+#~ "\n"
+#~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Traitement de la table des symboles #%d, décalage = 0x%.8lx, sorte = %s\n"
+
+# FIXME
+#~ msgid "string section missing"
+#~ msgstr "chaîne de section manquante"
+
+#~ msgid "section pointer missing"
+#~ msgstr "pointeur de section manquant"
+
+#~ msgid "no symbol table found"
+#~ msgstr "aucune table des symboles trouvée"
+
+#~ msgid ""
+#~ "\n"
+#~ "Updating header and load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Mise à jour des en-têtes et des commandes de chargement.\n"
+#~ "\n"
+
+# FIXME
+#~ msgid "load command map, %d cmds, new size %ld.\n"
+#~ msgstr "Chargement de la carte des commandes, %d commandes, nouvelle taille %ld.\n"
+
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "écriture des commandes de chargement.\n"
+#~ "\n"
+
+# I18N
+#~ msgid "close %s"
+#~ msgstr "close %s"
+
+#~ msgid "could not convert 0x%l.8x into a region"
+#~ msgstr "ne peut convertir 0x%l.8x en région"
+
+#~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+#~ msgstr "fonction %s, région %d, décalage = %ld (0x%.8lx)\n"
+
+#~ msgid "bad magic number"
+#~ msgstr "nombre magique erroné"
+
+#~ msgid "bad header version"
+#~ msgstr "version d'en-tête erronée"
+
+# FIXME: ou version d'en-tête brut erronée
+#~ msgid "bad raw header version"
+#~ msgstr "version brute d'en-tête erronée"
+
+# FIXME: ou tampon d'en-tête brut trop petit
+#~ msgid "raw header buffer too small"
+#~ msgstr "tampon brut d'en-tête trop petit"
+
+#~ msgid "old raw header file"
+#~ msgstr "ancien fichier d'en-tête brute"
+
+#~ msgid "unsupported version"
+#~ msgstr "version non reconnue"
+
+#~ msgid "unknown {de,en}code_mach_o_hdr return value %d"
+#~ msgstr "mauvaise valeur de retour (%d) de {de,en}code_mach_o_hdr"
+
+# I18N
+#~ msgid "fstat %s"
+#~ msgstr "fstat %s"
+
+# I18N
+#~ msgid "lseek %s 0"
+#~ msgstr "lseek %s 0"
+
+# I18N
+#~ msgid "read %s"
+#~ msgstr "read %s"
+
+#~ msgid "read %ld bytes, expected %ld, from %s"
+#~ msgstr "lu %ld octets, attendu %ld, de %s"
+
+# I18N
+#~ msgid "msync %s"
+#~ msgstr "msync %s"
+
+# I18N
+#~ msgid "munmap %s"
+#~ msgstr "munmap %s"
+
+# I18N
+#~ msgid "write %s"
+#~ msgstr "write %s"
+
+#~ msgid "wrote %ld bytes, expected %ld, to %s"
+#~ msgstr "écrit %ld octets, attendu %ld, vers %s"
+
+#~ msgid "ISO C++ does not permit \"%s\" in #if"
+#~ msgstr "ISO C++ n'autorise pas « %s » dans #if"
+
+#~ msgid "invalid character '%c' in #if"
+#~ msgstr "caractère « %c » invalide dans #if"
+
+#~ msgid "invalid character '\\%03o' in #if"
+#~ msgstr "caractère « \\%03o » invalide dans #if"
+
+#~ msgid "absolute file name in remap_filename"
+#~ msgstr "nom de fichier absolu dans remap_filename"
+
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s : ce n'est pas un répertoire"
+
+#~ msgid "directory name missing after %s"
+#~ msgstr "nom de répertoire manquant après %s"
+
+#~ msgid "file name missing after %s"
+#~ msgstr "nom de fichier manquant après %s"
+
+#~ msgid "path name missing after %s"
+#~ msgstr "nom de chemin manquant après %s"
+
+#~ msgid "unknown string token %s\n"
+#~ msgstr "élément lexical %s inconnu\n"
+
+#~ msgid "non-hex digit '%c' in universal-character-name"
+#~ msgstr "chiffre « %c » non hexadécimal dans le nom-de-caractère-universel"
+
+#~ msgid "universal-character-name on EBCDIC target"
+#~ msgstr "nom-de-caractère-universel pour une cible EBCDIC"
+
+#~ msgid "universal-character-name out of range"
+#~ msgstr "nom-de-caractère-universel est hors limite"
+
+#~ msgid "escape sequence out of range for its type"
+#~ msgstr "séquence d'échappement hors limite pour son type"
+
+#~ msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+#~ msgstr "#import est obsolète, enveloppez le avec #ifndef dans le fichier d'en-tête"
+
+# FIXME
+#~ msgid "#pragma once is obsolete"
+#~ msgstr "utiliser #pragma once est obsolète"
+
+#~ msgid "((anonymous))"
+#~ msgstr "((anonyme))"
+
+#~ msgid "%s: warnings being treated as errors\n"
+#~ msgstr "%s : les avertissements sont traités commes des erreurs\n"
+
+#~ msgid "At top level:"
+#~ msgstr "Hors de toute fonction :"
+
+#~ msgid "In member function `%s':"
+#~ msgstr "Dans la fonction membre « %s » :"
+
+#~ msgid "In function `%s':"
+#~ msgstr "Dans la fonction « %s »:"
+
+#~ msgid ""
+#~ "Please submit a full bug report,\n"
+#~ "with preprocessed source if appropriate.\n"
+#~ "See %s for instructions.\n"
+#~ msgstr ""
+#~ "Veuillez soumettre un rapport complet d'anomalies,\n"
+#~ "avec le source pré-traité si nécessaire.\n"
+#~ "Consultez %s pour plus de détail.\n"
+
+# FRONT
+#~ msgid "In file included from %s:%d"
+#~ msgstr "Dans le fichier inclus depuis %s:%d"
+
+# I18N: This line should be indented with the previous entry
+#~ msgid ""
+#~ ",\n"
+#~ "                 from %s:%d"
+#~ msgstr ""
+#~ ",\n"
+#~ "                       depuis %s:%d"
+
+#~ msgid "internal regno botch: `%s' has regno = %d\n"
+#~ msgstr "regno interne mal fait : « %s » a regno = %d\n"
+
+#~ msgid "support for the DWARF1 debugging format is deprecated"
+#~ msgstr "le support du format de débogage DWARF1 est obsolète"
+
+#~ msgid "can't get current directory"
+#~ msgstr "ne peut repérer le répertoire courant"
+
+# FRONT
+#~ msgid "unsupported wide integer operation"
+#~ msgstr "opération sur de large entier non supportée"
+
+#~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2002 Free Software Foundation, Inc.\n"
+
+#~ msgid "mismatched braces in specs"
+#~ msgstr "accolades non concordantes dans les specs"
+
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "Ne pourrait pas ouvrir le fichier de blocs de base %s.\n"
+
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "Ne pourrait pas ouvrir le fichier de flux du programm  %s.\n"
+
+#~ msgid "Could not open data file %s.\n"
+#~ msgstr "Ne pourrait pas ouvrir le fichier de données %s.\n"
+
+#~ msgid "Assuming that all execution counts are zero.\n"
+#~ msgstr "Suppose que tous les compteurs d'exécution sont à zéro.\n"
+
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "Aucun code exécutable associé avec le fichier %s.\n"
+
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "N'a pas utiliser toutes les entrées bb du graphe, fonction %s\n"
+
+#~ msgid "block_num = %ld, num_blocks = %d\n"
+#~ msgstr "block_num = %ld, num_blocks = %d\n"
+
+#~ msgid "ERROR: unexpected line number %ld\n"
+#~ msgstr "ERREUR : ligne numéro %ld inattendue\n"
+
+#~ msgid "ERROR: too many basic blocks in function %s\n"
+#~ msgstr "ERREUR : trop de blocs de base dans la fonction %s\n"
+
+#~ msgid "ERROR: out of range line number in function %s\n"
+#~ msgstr "ERROR: numéro de ligne hors limite dans la fonction %s\n"
+
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "N'a pu ouvrir le fichier source %s.\n"
+
+#~ msgid "Unexpected EOF while reading source file %s.\n"
+#~ msgstr "EOF inattendue lors de la lecture du fichier source %s.\n"
+
+#~ msgid "Creating %s.\n"
+#~ msgstr "Création de %s.\n"
+
+#~ msgid "invalid string `%s' in define_cpu_unit"
+#~ msgstr "chaîne invalide « %s » dans define_cpu_unit"
+
+#~ msgid "invalid string `%s' in define_bypass"
+#~ msgstr "chaîne invalide « %s » dans define_bypass"
+
+#~ msgid "invalid first string `%s' in exclusion_set"
+#~ msgstr "première chaîne invalide « %s » dans exclusion_set"
+
+#~ msgid "invalid second string `%s' in exclusion_set"
+#~ msgstr "seconde chaîne invalide « %s » dans exclusion_set"
+
+#~ msgid "invalid second string `%s' in presence_set"
+#~ msgstr "seconde chaîne invalide « %s » dans presence_set"
+
+#~ msgid "invalid option `%s' in automata_option"
+#~ msgstr "option invalide « %s » dans automata_option"
+
+#~ msgid "invalid `%s' in reservation `%s'"
+#~ msgstr "« %s » invalide dans la réservation « %s »"
+
+#~ msgid "unit `%s' in exclusion is not declared"
+#~ msgstr "unité « %s » dans l'exclusion n'est pas déclaré"
+
+#~ msgid "unit `%s' excludes itself"
+#~ msgstr "unité « %s » s'exclue elle-même"
+
+#~ msgid "repeated declaration of automaton `%s'"
+#~ msgstr "déclaration répété de l'automate « %s »"
+
+#~ msgid "`%s' is already used as insn reservation name"
+#~ msgstr "« %s » est déjà utilisé dans le nom de réservation insn"
+
+#~ msgid "automaton `%s' is not declared"
+#~ msgstr "automate « %s » n'est pas déclaré"
+
+#~ msgid "`%s' is declared as cpu unit"
+#~ msgstr "« %s » déclaré comme unité cpu"
+
+#~ msgid "`%s' is declared as cpu reservation"
+#~ msgstr "« %s » est déclaré comme réservation cpu"
+
+#~ msgid "repeated declaration of unit `%s'"
+#~ msgstr "déclaration répété d'unité « %s »"
+
+#~ msgid "repeated declaration of reservation `%s'"
+#~ msgstr "déclaration répété de réservation « %s »"
+
+#~ msgid "there is no insn reservation `%s'"
+#~ msgstr "il n'y a pas de réservation insn « %s »"
+
+#~ msgid "the same bypass `%s - %s' is already defined"
+#~ msgstr "le même bypass « %s - %s » est déjà défini"
+
+#~ msgid "bypass `%s - %s' is already defined"
+#~ msgstr "bypass « %s - %s » est déjà défini"
+
+#~ msgid "undeclared unit or reservation `%s'"
+#~ msgstr "unité ou réservation « %s » non déclaré"
+
+#~ msgid "unit `%s' is not used"
+#~ msgstr "unité « %s » n'est utilisé"
+
+#~ msgid "reservation `%s' is not used"
+#~ msgstr "réservation « %s » n'est utilisé"
+
+#~ msgid "cycle in definition of reservation `%s'"
+#~ msgstr "cycle de définition de réservation « %s »"
+
+#~ msgid "-split has no argument."
+#~ msgstr "-split n'a pas d'argument."
+
+#~ msgid "option `-split' has not been implemented yet\n"
+#~ msgstr "l'option « -split » n'a pas été implanté encore\n"
+
+#~ msgid "Errors in DFA description"
+#~ msgstr "ERREURS dans la description DFA"
+
+#~ msgid "Error in writing DFA description file %s"
+#~ msgstr "Erreur dans l'écriture du fichier de description DFA %s"
+
+#~ msgid "No input file name."
+#~ msgstr "Pas de nom de fichier."
+
+#~ msgid ".da file corrupted"
+#~ msgstr "fichier .da corrompu"
+
+#~ msgid "Generate STABS format debug info"
+#~ msgstr "Générer des infos de mise au point de format STABS"
+
+#~ msgid "Generate extended STABS format debug info"
+#~ msgstr "Générer des infos de mise au point de format STABS étendu"
+
+#~ msgid "Generate DWARF-1 format debug info"
+#~ msgstr "Générer les informations de mise au point du format DWARF-1"
+
+#~ msgid "Generate extended DWARF-1 format debug info"
+#~ msgstr "Générer les extensions des informations de mise au point du format DWARF-1"
+
+#~ msgid "Generate DWARF-2 debug info"
+#~ msgstr "Générer les informations de mise au point DWARF-2"
+
+#~ msgid "Generate XCOFF format debug info"
+#~ msgstr "Générer les informations de mise au point du format XCOFF"
+
+#~ msgid "Generate extended XCOFF format debug info"
+#~ msgstr "Générer les extensions de mise au point du format XCOFF"
+
+#~ msgid "Generate COFF format debug info"
+#~ msgstr "Générer les informations de mise au point du format COFF"
+
+#~ msgid "Generate VMS format debug info"
+#~ msgstr "Générer des infos de mise au point de format VMS"
+
+#~ msgid "Consider all mem refs through pointers as volatile"
+#~ msgstr "Considérer toutes les référence en mémoire comme faite par des pointeurs volatiles"
+
+#~ msgid "Consider all mem refs to global data to be volatile"
+#~ msgstr "Considérer toutes les références mémoire à des données globales comme volatiles"
+
+#~ msgid "Consider all mem refs to static data to be volatile"
+#~ msgstr "Considérer toutes les références mémoire à des données statiques comme volatiles"
+
+#~ msgid "Output GNU ld formatted global initializers"
+#~ msgstr "Produire des initialisations de globlales au format GNU ld"
+
+#~ msgid "Enable SSA optimizations"
+#~ msgstr "Autoriser les optimisations SSA"
+
+#~ msgid "Enable SSA conditional constant propagation"
+#~ msgstr "Autoriser la propagation SSA de constante conditionnelle"
+
+#~ msgid "Enable aggressive SSA dead code elimination"
+#~ msgstr "Autoriser l'élimination agressive SSA du code mort"
+
+#~ msgid "Compile just for ISO C90"
+#~ msgstr "Compiler seulement pour ISO C90"
+
+#~ msgid "Determine language standard"
+#~ msgstr "Déterminer le standard du langage"
+
+#~ msgid "Make bit-fields by unsigned by default"
+#~ msgstr "Rendre les champs de bits non signés par défaut"
+
+#~ msgid "Allow different types as args of ? operator"
+#~ msgstr "Permettre des types différents pour les arguments de l'opérateur ?"
+
+#~ msgid "Allow the use of $ inside identifiers"
+#~ msgstr "Permettre l'utilisation de $ à l'intérieur d'identificateurs"
+
+#~ msgid "Use the smallest fitting integer to hold enums"
+#~ msgstr "Utiliser le plus petit entier pour contenir l'énumération (enums)"
+
+#~ msgid "Warn if nested comments are detected"
+#~ msgstr "Avertir si des commentaires imbriqués sont détectés"
+
+#~ msgid "Don't warn about too many arguments to format functions"
+#~ msgstr "Ne pas avertir à propos d'un surplus d'arguments pour des fonctions de format"
+
+#~ msgid "Warn about non-string-literal format strings"
+#~ msgstr "Avertir à propos des chaînes de format qui ne sont pas des chaînes"
+
+#~ msgid "Warn about constructs whose meanings change in ISO C"
+#~ msgstr "Avertir à propos de construits dont le sens change en C ISO"
+
+#~ msgid "Warn when trigraphs are encountered"
+#~ msgstr "Avertir lorsque des trigraphes sont rencontrés"
+
+#~ msgid "Mark strings as 'const char *'"
+#~ msgstr "Marque les chaînes comme étant 'const char *'"
+
+#~ msgid "  -pedantic-errors        Like -pedantic except that errors are produced\n"
+#~ msgstr "  -pedantic-errors        identique à -pedantic sauf que les erreurs sont produites\n"
+
+#~ msgid "  -w                      Suppress warnings\n"
+#~ msgstr "  -w                      supprimer les avertissements\n"
+
+#~ msgid "  -W                      Enable extra warnings\n"
+#~ msgstr "  -W                      autoriser les avertissements additionnels\n"
+
+#~ msgid "  -Wunused                Enable unused warnings\n"
+#~ msgstr "  -Wunused                autoriser les avertissements pour signaler les non utilisés\n"
+
+#~ msgid "  -p                      Enable function profiling\n"
+#~ msgstr "  -p                      autoriser le profilage des fonctions\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Language specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Options spécifiques au langage:\n"
+
+#~ msgid "  %-23.23s [undocumented]\n"
+#~ msgstr "  %-23.23s [non documenté]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented %s specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Il y a des options spécifiques %s qui ne sont pas documentés aussi.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " Options for %s:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " Options pour %s:\n"
+
+#~ msgid "unrecognized option `%s'"
+#~ msgstr "option « %s » non reconnue"
+
+#~ msgid "-Wid-clash-LEN is no longer supported"
+#~ msgstr "-Wid-clash-LEN n'est plus supportée"
+
+#~ msgid "use -gdwarf -g%d for DWARF v1, level %d"
+#~ msgstr "utiliser -gdwarf -g%d pour DWARF v1, niveau %d"
+
+#~ msgid "use -gdwarf-2   for DWARF v2"
+#~ msgstr "utiliser -gdwarf-2   pour  DWARF v2"
+
+#~ msgid "ignoring option `%s' due to invalid debug level specification"
+#~ msgstr "option « %s » ignorée en raison de la spécification du niveau de mise au poitn invalide"
+
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "« %s »: inconnu ou non supporté option -g"
+
+#~ msgid "`%s' ignored, conflicts with `-g%s'"
+#~ msgstr "« %s » ignoré, en conflit avec «-g%s»"
+
+#~ msgid "-param option missing argument"
+#~ msgstr "argument manquant pour l'option -param"
+
+#~ msgid "invalid --param option: %s"
+#~ msgstr "option invalide --param: %s"
+
+#~ msgid "(it is valid for %s but not the selected language)"
+#~ msgstr "(c'est valide pour %s mais pas pour le langage séclectionné)"
+
+#~ msgid "#`%s' not supported by %s#"
+#~ msgstr "« %s » n'est pas supporté par %s#"
+
+#~ msgid "The maximuem number of instructions by repeated inlining before gcc starts to throttle inlining"
+#~ msgstr "Le nombre maximum d'instructions par type inline répété avant l'exécution de gcc au « throttle » enligne"
+
+#~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining"
+#~ msgstr "Le nombre d'instructions dans une fonction simple encore éligible au type enligne après plusieurs inline récursifs"
+
+#~ msgid "Use Mingw32 interface"
+#~ msgstr "Utiliser l'interface Mingw32"
+
+#~ msgid "Use Cygwin interface"
+#~ msgstr "Utiliser l'interface Cygwin"
+
+#~ msgid "Use bare Windows interface"
+#~ msgstr "Utiliser l'interface brute Windows"
+
+#~ msgid "Only initialized variables can be placed into program memory area."
+#~ msgstr "seules les variables initialisées peuvent être placées dans la zone mémoire du programme"
+
+#~ msgid "const objects cannot go in .sdata/.sbss"
+#~ msgstr "constantes objets ne peuvent aller dans .sdata/.sbss"
+
+#~ msgid "Generate code for a Sun FPA"
+#~ msgstr "Générer le code pour un Sun FPA"
+
+#~ msgid "Do not generate code for a Sun FPA"
+#~ msgstr "Ne pas générer le code pour un Sun FPA"
+
+#~ msgid "Generate code for a Sun Sky board"
+#~ msgstr "Générer le code pour un Sun Sky board"
+
+#~ msgid "Do not use Sky linkage convention"
+#~ msgstr "Ne pas utiliser la convention d'édition de lien Sky"
+
+#~ msgid "Generate code for a 68881"
+#~ msgstr "Générer du code pour un 68881"
+
+#~ msgid "internal gcc monitor: short-branch(%x)"
+#~ msgstr "moniteur interne gcc: branchement court(%x)"
+
+#~ msgid "internal gcc error: Can't express symbolic location"
+#~ msgstr "erreur interne gcc: ne peut exprimer la localisation symbolique"
+
+#~ msgid "argument #%d is a structure"
+#~ msgstr "argument #%d est une structure"
+
+#~ msgid "%%R not followed by %%B/C/D/E"
+#~ msgstr "%%R n'est pas suivi de %%B/C/D/E"
+
+#~ msgid "invalid %%Q value"
+#~ msgstr "valeur %%Q invalide"
+
+#~ msgid "invalid %%o value"
+#~ msgstr "valeur %%o invalide"
+
+#~ msgid "invalid %%s/S value"
+#~ msgstr "valeur %%s/S invalide"
+
+#~ msgid "invalid %%B value"
+#~ msgstr "valeur %%B invalide"
+
+#~ msgid "`%%d' operand isn't a register"
+#~ msgstr "l'opérande «%%d» n'est pas un registre"
+
+#~ msgid "operand is r0"
+#~ msgstr "opérande est R0"
+
+#~ msgid "operand is const_double"
+#~ msgstr "opérande est de type const_double"
+
+#~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible"
+#~ msgstr "-mtrap-large-shift et -mhandle-large-shift sont incompatibles"
+
+#~ msgid "invalid option `-mshort-data-%s'"
+#~ msgstr "option invalide «-mshort-data-%s'"
+
+#~ msgid "-mshort-data-%s is too large "
+#~ msgstr "-mshort-data-%s est trop grande "
+
+#~ msgid "-mshort-data-%s and PIC are incompatible"
+#~ msgstr "-mshort-data-%s et PIC sont incompatibles"
+
+#~ msgid "bad value (%s) for -mips switch"
+#~ msgstr "valeur erronée (%s) pour l'option -mips"
+
+#~ msgid "invalid option `entry%s'"
+#~ msgstr "option invalide «entry%s'"
+
+#~ msgid "-mentry is only meaningful with -mips-16"
+#~ msgstr "-mentry n'a de sens qu'avec -mips-16"
+
+#~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line"
+#~ msgstr "format MIPS ECOFF ne permet pas de changer le nom des fichiers à l'intérieur des fonction avec #line"
+
+#~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero"
+#~ msgstr "fp_offset (%ld) ou end_offset (%ld) est plus petit que zéro"
+
+#~ msgid "Trap on integer divide overflow"
+#~ msgstr "Intercepter les débordements lors de divisions avec des entiers"
+
+#~ msgid "Don't trap on integer divide overflow"
+#~ msgstr "Ne pas intercepter les débordement lors de divisions avec des entiers"
+
+#~ msgid "Use mips16 entry/exit psuedo ops"
+#~ msgstr "Utiliser les pseudo-op mips16 d'entrée/sortie"
+
+#~ msgid "Don't use MIPS16 instructions"
+#~ msgstr "Ne pas utiliser les instructions MIPS16"
+
+#~ msgid "invalid %%z value"
+#~ msgstr "valeur %%z invalide"
+
+#~ msgid "invalid %%Z value"
+#~ msgstr "valeur %%Z invalide"
+
+#~ msgid "invalid %%j value"
+#~ msgstr "valeur %%j invalide"
+
+#~ msgid "can't have varargs with -mfp-arg-in-fp-regs"
+#~ msgstr "ne peut avoir varargs avec -mfp-arg-in-fp-regs"
+
+#~ msgid "unknown -mvrsave= option specified: '%s'"
+#~ msgstr "option -mvrsave inconnue spécifiés: « %s »"
+
+#~ msgid "64 bit mode"
+#~ msgstr "mode 64 bits"
+
+#~ msgid "31 bit mode"
+#~ msgstr "mode 31 bits"
+
+#~ msgid "Use the Xtensa code density option"
+#~ msgstr "Utiliser l'option de densité du code Xtensa"
+
+#~ msgid "Do not use the Xtensa code density option"
+#~ msgstr "Ne pas utiliser l'option de densité du code Xtensa"
+
+#~ msgid "Use the Xtensa MAC16 option"
+#~ msgstr "Utiliser l'option Xtensa MAC16"
+
+#~ msgid "Do not use the Xtensa MAC16 option"
+#~ msgstr "Ne pas utiliser l'option Xtensa MAC16"
+
+#~ msgid "Use the Xtensa MUL16 option"
+#~ msgstr "Utiliser l'option Xtensa MUL16"
+
+#~ msgid "Do not use the Xtensa MUL16 option"
+#~ msgstr "Ne pas utiliser l'option Xtensa MUL16"
+
+#~ msgid "Use the Xtensa MUL32 option"
+#~ msgstr "Utiliser l'option Xtensa MUL16"
+
+#~ msgid "Do not use the Xtensa MUL32 option"
+#~ msgstr "Ne pas utiliser l'option Xtensa MUL32"
+
+#~ msgid "Use the Xtensa NSA option"
+#~ msgstr "Utiliser l'option Xtensa NSA"
+
+#~ msgid "Do not use the Xtensa NSA option"
+#~ msgstr "Ne pas utiliser l'option Xtensa NSA"
+
+#~ msgid "Use the Xtensa MIN/MAX option"
+#~ msgstr "Utiliser l'option Xtensa MIN/MAX"
+
+#~ msgid "Do not use the Xtensa MIN/MAX option"
+#~ msgstr "Ne pas utiliser l'option Xtensa MIN/MAX"
+
+#~ msgid "Use the Xtensa SEXT option"
+#~ msgstr "Utiliser l'option Xtensa SEXT"
+
+#~ msgid "Do not use the Xtensa SEXT option"
+#~ msgstr "Ne pas utiliser l'option Xtensa SEXT"
+
+#~ msgid "Use the Xtensa boolean register option"
+#~ msgstr "Utiliser l'option des registres booléens Xtensa"
+
+#~ msgid "Do not use the Xtensa boolean register option"
+#~ msgstr "Ne pas utiliser l'option des registres booléens Xtensa"
+
+#~ msgid "Use the Xtensa floating-point unit"
+#~ msgstr "Utiliser l'unité matérielle pour virgule flottante Xtensa"
+
+#~ msgid "Do not use the Xtensa floating-point unit"
+#~ msgstr "Ne pas utiliser l'unité matérielle pour virgule flottante Xtensa"
+
+#~ msgid "Serialize volatile memory references with MEMW instructions"
+#~ msgstr "Sérialiser les références à la mémoire volatile avec des instructions MEMW"
+
+#~ msgid "Do not serialize volatile memory references with MEMW instructions"
+#~ msgstr "Ne pas sérialiser les références à la mémoire volatile avec des instructions MEMW"
+
+#~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')"
+#~ msgstr "type de « %E » ne concorde pas avec le type du destructeur « %T » (type était « %T »)"
+
+#~ msgid "`%D' is a namespace"
+#~ msgstr "« %D » est un nom d'espace"
+
+#~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'"
+#~ msgstr "objet de base « %E » de la portée d'appel de la méthode n'est pas de type aggrégat « %T »"
+
+#~ msgid "destructors take no parameters"
+#~ msgstr "destructeurs ne prend aucun paramètre"
+
+#~ msgid "destructor name `~%T' does not match type `%T' of expression"
+#~ msgstr "nom du destructeur «~%T» ne concorde pas avec le type « %T » de l'expression"
+
+#~ msgid "%s %+#D%s"
+#~ msgstr "%s %+#D%s"
+
+#~ msgid "%s for `%T ? %T : %T' operator"
+#~ msgstr "%s pour «%T ? %T : %T» comme opérateur"
+
+#~ msgid "%s for `%T [%T]' operator"
+#~ msgstr "%s pour l'opérateur «%T [%T]»"
+
+#~ msgid "%s for `%T %s %T' operator"
+#~ msgstr "%s pour l'opérateur «%T %s [%T]»"
+
+#~ msgid "%s for `%s %T' operator"
+#~ msgstr "%s pour l'opérateur «%s [%T]»"
+
+#~ msgid "`%D' must be declared before use"
+#~ msgstr "« %D » doit être déclaré avant son usage"
+
+#~ msgid "  initializing argument %P of `%D' from result of `%D'"
+#~ msgstr "  initialisation de l'argument %P de « %D » à partir du résultat « %D »"
+
+#~ msgid "  initializing temporary from result of `%D'"
+#~ msgstr "  initialisation temporaire à partir du résultat « %D »"
+
+#~ msgid "cannot receive objects of non-POD type `%#T' through `...'"
+#~ msgstr "ne peut recevoir d'objets de type non POD « %#T » through « ... »"
+
+#~ msgid "field `%D' invalidly declared offset type"
+#~ msgstr "champ « %D » incorrectement validé comme type de décalage"
+
+#~ msgid "lookup of `%D' finds `%#D'"
+#~ msgstr "recherche de « %D » a repéré « %#D »"
+
+#~ msgid "  instead of `%D' from dependent base class"
+#~ msgstr "  au lieu de « %D » à partir d'un classe de base dépendante"
+
+#~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')"
+#~ msgstr "recherche de « %D » dans la portée de « %#T » (« %#D ») ne concorde pas avec la recherche dans la portée courante (« %#D »)"
+
+#~ msgid "invalid declarator"
+#~ msgstr "déclarateur invalide"
+
+#~ msgid "`%T' is implicitly a typename"
+#~ msgstr "« %T » est implicitement un typename"
+
+#~ msgid "parameter `%D' invalidly declared offset type"
+#~ msgstr "paramètre « %D » incorrectement validé comme type de décalage"
+
+#~ msgid "`%s %T' declares a new type at namespace scope"
+#~ msgstr "« %s %T » déclare un nouveau type dans l'étendue de l'espace de noms"
+
+#~ msgid "  names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'"
+#~ msgstr "  noms des classes de base dépendantes ne sont pas visibles à la recherche de nom non qualifié - pour référer à type par héritage, disons «%s %T::%T»"
+
+#~ msgid "base class `%T' has incomplete type"
+#~ msgstr "classe de base « %T » a un type incomplet"
+
+#~ msgid "semicolon missing after declaration of `%#T'"
+#~ msgstr "point-virgule manquant après la déclaration %#T"
+
+#~ msgid "template `%#D' instantiated in file without #pragma interface"
+#~ msgstr "canevas « %#D » instancié dans le fichier sans interface #pragma"
+
+#~ msgid "template `%#D' defined in file without #pragma interface"
+#~ msgstr "canevas « %#D » défini dans le fichier sans interface #pragma"
+
+#~ msgid "parser may be lost: is there a '{' missing somewhere?"
+#~ msgstr "analyseur syntaxique est perdu: y-a-t-il un «{» manquant quelque part?"
+
+#~ msgid "invalid data member initialization"
+#~ msgstr "initialisation de données membres invalide"
+
+#~ msgid "(use `=' to initialize static data members)"
+#~ msgstr "(utiliser «=» pour initialiser les données de membres)"
+
+#~ msgid "too many initialization functions required"
+#~ msgstr "trop d'initialisations de fonctions requises"
+
+#~ msgid "`%D' is not a namespace"
+#~ msgstr "« %D » n'est pas un espace de noms"
+
+#~ msgid "a using-declaration cannot specify a template-id.  Try  `using %T::%D'"
+#~ msgstr "l'utilisation de déclaration ne peut spécifier template-id.  Essayer «using %T::%D'"
+
+#~ msgid "`%T' does not have a class or union named `%D'"
+#~ msgstr "« %T » n'a pas de classe ou d'union nommé « %D »"
+
+#~ msgid "`%T' is not a class or union type"
+#~ msgstr "« %T » n'est pas une classe ou un type d'union"
+
+#~ msgid "`%s' not supported by %s"
+#~ msgstr "« %s » n'est pas supporté par %s"
+
+#~ msgid "(static %s for %s)"
+#~ msgstr "(static %s pour %s)"
+
+#~ msgid "%s: In instantiation of `%s':\n"
+#~ msgstr "%s: dans l'instanciation de « %s »:\n"
+
+#~ msgid "%s:%d:   instantiated from `%s'\n"
+#~ msgstr "%s:%d:   instancié à partir de « %s »\n"
+
+#~ msgid "%s:%d:   instantiated from here\n"
+#~ msgstr "%s:%d:   instancié à partir d'ici\n"
+
+#~ msgid "previous friend declaration of `%D'"
+#~ msgstr "déclaration amie précédente de « %D »"
+
+#~ msgid "cannot call destructor `%T::~%T' without object"
+#~ msgstr "ne peut appeler le destructeur «%T::~%T» sans objet"
+
+#~ msgid "invalid use of member `%D'"
+#~ msgstr "utilisation invalide du membre « %D »"
+
+#~ msgid "no method `%T::%D'"
+#~ msgstr "pas de méthode «%T::%D»"
+
+#~ msgid "object missing in use of pointer-to-member construct"
+#~ msgstr "objet manquant dans l'utilisation du construit pointeur-à-membre"
+
+#~ msgid "member `%D' is non-static but referenced as a static member"
+#~ msgstr "membre « %D » est non statique mais référencé comme membre statique"
+
+#~ msgid "object missing in `%E'"
+#~ msgstr "objet manquant dans « %E »"
+
+#~ msgid "initializer list being treated as compound expression"
+#~ msgstr "liste d'initaliseurs a été traité comme une expression composée"
+
+#~ msgid "cannot declare references to references"
+#~ msgstr "ne peut décalrer des références vers des références"
+
+#~ msgid "cannot declare pointers to references"
+#~ msgstr "ne peut déclarer des pointeurs vers des références"
+
+#~ msgid "type name expected before `&'"
+#~ msgstr "nom de type attendu avant «&»"
+
+#~ msgid "semicolon missing after %s declaration"
+#~ msgstr "«;» manquant après la déclaration de %s"
+
+#~ msgid "semicolon missing after declaration of `%T'"
+#~ msgstr "«;» manquant après la déclaration « %T »"
+
+#~ msgid "`::%D' undeclared (first use here)"
+#~ msgstr "«::%D» non déclaré (première utilisation ici)"
+
+#~ msgid "real-valued template parameters when cross-compiling"
+#~ msgstr "canevas de paramètre en valeur réelle lors de la compilation croisée"
+
+#~ msgid "use of linkage spec `%D' is different from previous spec `%D'"
+#~ msgstr "utilisation de spéc de liaisons « %D » est différente de la spec précédente « %D »"
+
+#~ msgid "no base or member initializers given following ':'"
+#~ msgstr "pas d'initialiseur de base ou membre donné après «:»"
+
+#~ msgid "use of template qualifier outside template"
+#~ msgstr "utilisation d'un qualificateur de canevas en dehors d'un canevas"
+
+#~ msgid "ISO C++ forbids an empty condition for `%s'"
+#~ msgstr "ISO C++ interdit une condition vide pour « %s »"
+
+#~ msgid "definition of class `%T' in condition"
+#~ msgstr "définition de la classe « %T » dans la condition"
+
+#~ msgid "definition of enum `%T' in condition"
+#~ msgstr "définition de l'aggrégat « %T » dans la condition"
+
+#~ msgid "definition of array `%#D' in condition"
+#~ msgstr "définition du tableau « %#D » dans la condition"
+
+#~ msgid "old style placement syntax, use () instead"
+#~ msgstr "ancien style de syntaxe de positionnement, utiliser () à la place"
+
+#~ msgid "`%T' is not a valid expression"
+#~ msgstr "« %T » n'est pas une expression valide"
+
+#~ msgid "initialization of new expression with `='"
+#~ msgstr "initialisation de la nouvelle expression avec « = »"
+
+#~ msgid "sigof type specifier"
+#~ msgstr "spécificateur du type sigof"
+
+#~ msgid "`sigof' applied to non-aggregate expression"
+#~ msgstr "« sigof » appliqué à une expression de non aggrégats"
+
+#~ msgid "`sigof' applied to non-aggregate type"
+#~ msgstr "« sigof » appliqué à un type non aggrégat"
+
+#~ msgid "storage class specifier `%s' not allowed after struct or class"
+#~ msgstr "spécificateur de classe de stockages « %s » n'est pas permis après struct ou class"
+
+#~ msgid "type specifier `%s' not allowed after struct or class"
+#~ msgstr "spécificateur de type « %s » n'est pas permis après struct ou class"
+
+#~ msgid "type qualifier `%s' not allowed after struct or class"
+#~ msgstr "qualificateur de type « %s » n'est pas permis après struct ou class"
+
+#~ msgid "no body nor ';' separates two class, struct or union declarations"
+#~ msgstr "pas de corps ni de «;» séparant les deux déclarations de classes, struct ou union"
+
+#~ msgid "no bases given following `:'"
+#~ msgstr "pas de base donnée après «:»"
+
+#~ msgid "multiple access specifiers"
+#~ msgstr "spécificateurs d'accès multiples"
+
+#~ msgid "multiple `virtual' specifiers"
+#~ msgstr "spécificateurs « virtual » multiples"
+
+#~ msgid "missing ';' before right brace"
+#~ msgstr "«;» manquant avant l'accolade de droite"
+
+#~ msgid "ISO C++ forbids array dimensions with parenthesized type in new"
+#~ msgstr "ISO C++ interdit l'utilisation de parenthèses autour du type pour les dimensions de tableaux avec new"
+
+#~ msgid "`%T' is not a class or namespace"
+#~ msgstr "« %T » n'est pas une classe ou un espace de noms"
+
+#~ msgid "ISO C++ forbids label declarations"
+#~ msgstr "ISO C++ interdit la déclaration d'étiquette"
+
+#~ msgid "label must be followed by statement"
+#~ msgstr "l'étiquette doit être suivie d'une déclaration"
+
+#~ msgid "must have at least one catch per try block"
+#~ msgstr "doit avoir au moins un intercepteur par bloc d'essais"
+
+#~ msgid "ISO C++ forbids compound statements inside for initializations"
+#~ msgstr "ISO C++ interdit les déclarations composées à l'intérieur des initialisations"
+
+#~ msgid "possibly missing ')'"
+#~ msgstr "«)» possiblement manquante"
+
+#~ msgid "type specifier omitted for parameter"
+#~ msgstr "spécificateur de type omis pour le paramètre"
+
+#~ msgid "`%E' is not a type, use `typename %E' to make it one"
+#~ msgstr "« %E» n'est pas un type, utiliser «typename %E » pour en faire un"
+
+#~ msgid "no type `%D' in `%T'"
+#~ msgstr "pas de type « %D » dans « %T »"
+
+#~ msgid "type specifier omitted for parameter `%E'"
+#~ msgstr "spécificateur de type omis pour le paramètre « %E »"
+
+#~ msgid "type `%T' composed from a local class is not a valid template-argument"
+#~ msgstr "type « %T » composé à partir d'une classe locale n'est pas un canevas d'argument valide"
+
+#~ msgid "adjusting pointers for covariant returns"
+#~ msgstr "ajuster les pointeurs pour des retours co-variants"
+
+#~ msgid "  overriding `%#D' (must be pointer or reference to class)"
+#~ msgstr "  écrasant « %#D » (doit être un pointeur ou une référence vers un classe)"
+
+#~ msgid "  overriding `%#D' (must use pointer or reference)"
+#~ msgstr "  écrasant « %#D » (doit utiliser un pointeur ou un référence)"
+
+#~ msgid "return identifier `%D' already in place"
+#~ msgstr "identificateur retourné « %D » est déjà en place"
+
+#~ msgid "can't redefine default return value for constructors"
+#~ msgstr "ne peut redéfinir la valeur retournée par défaut pour les constructeurs"
+
+#~ msgid "calling type `%T' like a method"
+#~ msgstr "appel du type « %T » comme une méthode"
+
+#~ msgid "destructor specifier `%T::~%T()' must have matching names"
+#~ msgstr "spécificateur du destructeur «%T::~%T()» doit avoir des noms concordants"
+
+#~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
+#~ msgstr "nom d'identificateur « %s » entre en conflit avec la stratégie interne de dénomination de GNU C++"
+
+#~ msgid "parse error at end of saved function text"
+#~ msgstr "erreur d'analyse syntaxique à la fin de la sauvegarde de la fonction texte"
+
+#~ msgid "%Hend of file read inside definition"
+#~ msgstr "%H fin de fichier lors de la lecture à l'intérieur d'une définition"
+
+#~ msgid "parse error in method specification"
+#~ msgstr "erreur d'analyse syntaxique dans la spécification de fonction"
+
+#~ msgid "function body for constructor missing"
+#~ msgstr "corps de fonction pour le constructeur est manquante"
+
+#~ msgid "circular dependency in default args of `%#D'"
+#~ msgstr "dépendance circulaire dans les arguments par défaut de « %#D »"
+
+#~ msgid "invalid type `%T' for default argument to `%T'"
+#~ msgstr "type invalide « %T » pour l'argument par défaut « %T »"
+
+#~ msgid "%s before `%c'"
+#~ msgstr "%s avant « %c »"
+
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%s avant «\\%o»"
+
+#~ msgid "%s before `%s' token"
+#~ msgstr "%s avant l'élément lexical « %s »"
+
+#~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'"
+#~ msgstr "ISO C++ interdit la conversion de « %#T » en « (...) »"
+
+#~ msgid "invalid application of `%s' to non-static member"
+#~ msgstr "utilisation invalide de « %s » sur un membre non statique"
+
+#~ msgid "sizeof applied to a bit-field"
+#~ msgstr "sizeof appliqué sur un champ de bits"
+
+#~ msgid "destructor specifier `%T::~%T' must have matching names"
+#~ msgstr "spécificateur du destructeur «%T::~%T» doit des noms concordants"
+
+#~ msgid "parameter type of called function is incomplete"
+#~ msgstr "type de paramètre de la fonction appelée est incomplet"
+
+#~ msgid "ISO C++ forbids using pointer to a member in subtraction"
+#~ msgstr "ISO C++ interdit l'utilisation d'un pointeur vers un membre dans une soustraction"
+
+#~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)"
+#~ msgstr "reinterpret_cast de « %T » vers « %T » fait un transtypage écartant la constante (ou volatile)"
+
+#~ msgid "return-statement with no value, in function declared with a non-void return type"
+#~ msgstr "déclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné non void"
+
+#~ msgid "return-statement with a value, in function declared with a void return type"
+#~ msgstr "déclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné void"
+
+#~ msgid "comma expression used to initialize return value"
+#~ msgstr "expression virgule utilsée pour initialiser la valeur de retour"
+
+#~ msgid "ISO C++ forbids non-constant aggregate initializer expressions"
+#~ msgstr "ISO C++ interdit les expressions d'initialiseur d'aggrégat de non constante"
+
+#~ msgid "`%T' fails to be a typedef or built-in type"
+#~ msgstr "« %T » a échoué à devenir un typedef ou un type construit interne"
+
+#~ msgid "ISO C++ forbids defining types within %s"
+#~ msgstr "ISO C++ interdit la définition de types à l'intérieur de %s"
+
+#~ msgid "Only emit explicit template instatiations"
+#~ msgstr "Produire seulement des instanciations explicites du canevas"
+
+#~ msgid "Recognize and/bitand/bitor/compl/not/or/xor"
+#~ msgstr "Reconnaître and/bitand/bitor/compl/not/or/xor"
+
+#~ msgid "Warn about inconsistent return types"
+#~ msgstr "Avertir à propos des types retournés inconsistants"
+
+#~ msgid "Warn when a function is declared extern, then inline"
+#~ msgstr "Avertir lorsqu'un fonction est déclarée extern, puis inline"
+
+#~ msgid "directory name must immediately follow -I"
+#~ msgstr "nom du répertoire doit suivre immédiatement -I"
+
+#~ msgid "ignoring pragma: %s"
+#~ msgstr "pragma: %s ignoré"
+
+#~ msgid "Program does not use Unix-f77 dialectal features"
+#~ msgstr "Programme n'utilise pas les options du dialecte Unix f77"
+
+#~ msgid "Disable the appending of underscores to externals"
+#~ msgstr "Désactiver l'ajout de caractères de soulignement aux externes"
+
+#~ msgid "Fortran-specific form of -fbounds-check"
+#~ msgstr "Forme spécifique Fortran de -fbounds-check"
+
+#~ msgid "Add a directory for INCLUDE searching"
+#~ msgstr "Ajouter un répertoire pour la recherche par INCLUDE"
+
+#~ msgid "Set the maximum line length"
+#~ msgstr "Initialiser la longueur maximale des lignes"
+
+#~ msgid "Disable automatic array bounds checking"
+#~ msgstr "Vérification automatique désactivée des bornes de tableaux"
+
+#~ msgid "Set class path"
+#~ msgstr "Initialiser le chemin des classes"
+
+#~ msgid "Choose class whose main method should be used"
+#~ msgstr "Choisir la classe dont la méthode principale devrait être utilisée"
+
+#~ msgid "Add directory to class path"
+#~ msgstr "Ajouter un répertoire au chemin des classes"
+
+#~ msgid "Directory where class files should be written"
+#~ msgstr "Répertoire où les fichiers de classe devraient être écrits"
+
+#~ msgid "`%s' cannot be statically allocated"
+#~ msgstr "« %s » ne peut être statiquement alloué"
+
+#~ msgid "multiple declarations for method `%s'"
+#~ msgstr "multiples déclarations pour la méthode « %s »"
+
+#~ msgid "cannot find class (factory) method"
+#~ msgstr "ne peut repérer de méthode de classe (manufacturé)"
+
+#~ msgid "return type for `%s' defaults to id"
+#~ msgstr "type retourné pour « %s » par défaut est id"
+
+#~ msgid "return type defaults to id"
+#~ msgstr "type retourné par défaut est id"
+
+#~ msgid "cannot find method"
+#~ msgstr "ne peut repérer la méthode"
+
+#~ msgid "duplicate definition of class method `%s'"
+#~ msgstr "duplication de définition de la méthode de la classe « %s »"
+
+#~ msgid "duplicate definition of instance method `%s'"
+#~ msgstr "duplication de définition de la méthode d'instanciation « %s »"
+
+#~ msgid "duplicate declaration of instance method `%s'"
+#~ msgstr "duplication de déclaration de la méthode d'instanciation « %s »"
+
+#~ msgid "potential selector conflict for method `%s'"
+#~ msgstr "conflit potentiel sur le sélecteur pour la méthode « %s »"
+
+#~ msgid "Specify the name of the class for constant strings"
+#~ msgstr "Spécifier le nom de la classe pour les constantes chaînes"
+
+#~ msgid "compilation of header file requested"
+#~ msgstr "fichier d'en-tête requis pour la compilation"
+
+#~ msgid "choose either big or little endian, not both"
+#~ msgstr "choisir un système à octets de poids fort ou faible mais pas les deux"
+
+#~ msgid "choose either m340 or m210 not both"
+#~ msgstr "choisir m340 ou m210 mais pas les deux"
+
+#~ msgid "-c or -S required for Ada"
+#~ msgstr "-c ou -S requis pour Ada"
+
+#~ msgid "-static not valid with -mcoff"
+#~ msgstr "-static n'est pas valide avec -mcoff"
+
+#~ msgid "-shared not valid with -mcoff"
+#~ msgstr "-shared n'est pas valide avec -mcoff"
+
+#~ msgid "-symbolic not valid with -mcoff"
+#~ msgstr "-symbolic n'est pas valide avec -mcoff"
+
+#~ msgid "-fpic is not valid with -mcoff"
+#~ msgstr "-fpic n'est pas valide avec -mcoff"
+
+#~ msgid "-fPIC is not valid with -mcoff"
+#~ msgstr "-fPic n'est pas valide avec -mcoff"
+
+#~ msgid "-fpic not valid with -mcoff"
+#~ msgstr "-fpic n'est pas valide avec -mcoff"
+
+#~ msgid "-fPIC not valid with -mcoff"
+#~ msgstr "-fPIC n'est pas valide avec -mcoff"
+
+#~ msgid "unnamed fields of type other than struct or union are not allowed"
+#~ msgstr "champs sans nom de type autre que struct ou union ne sont pas permis"
+
+#~ msgid "numeric constant with no digits"
+#~ msgstr "constante numérique sans chiffre"
+
+#~ msgid "numeric constant contains digits beyond the radix"
+#~ msgstr "constante numérique contient des chiffres en dehors la base numérique"
+
+#~ msgid "floating constant may not be in radix 16"
+#~ msgstr "constante flottante peut ne pas être en base 16"
+
+#~ msgid "more than one 'f' suffix on floating constant"
+#~ msgstr "plus d'un « f » en suffixe sur une constante flottante"
+
+#~ msgid "more than one 'l' suffix on floating constant"
+#~ msgstr "plus d'un « l » en suffixe sur une constante flottante"
+
+#~ msgid "traditional C rejects the 'l' suffix"
+#~ msgstr "C traditionnel rejette le suffixe « l »"
+
+#~ msgid "more than one 'i' or 'j' suffix on floating constant"
+#~ msgstr "plus d'un « i » ou « j » en suffixe sur une constante flottante"
+
+#~ msgid "floating constant out of range"
+#~ msgstr "constante flottante est hors gamme"
+
+#~ msgid "floating point number exceeds range of 'double'"
+#~ msgstr "nombre en virgule flottante excède les limites de « double »"
+
+#~ msgid "two 'u' suffixes on integer constant"
+#~ msgstr "deux « u » en suffixe sur une constante entière"
+
+#~ msgid "traditional C rejects the 'u' suffix"
+#~ msgstr "C traditionnel rejette le suffixe « u »"
+
+#~ msgid "three 'l' suffixes on integer constant"
+#~ msgstr "trois « l » en suffixe sur une constante entière"
+
+#~ msgid "'lul' is not a valid integer suffix"
+#~ msgstr "'lul» n'est pas un suffixe valide pour un entier"
+
+#~ msgid "'Ll' and 'lL' are not valid integer suffixes"
+#~ msgstr "« Ll» et «1L » ne sont pas des suffixes valides pour un entier"
+
+#~ msgid "more than one 'i' or 'j' suffix on integer constant"
+#~ msgstr "plus d'un « i » ou « j » en suffixe sur une constante entière"
+
+#~ msgid "invalid suffix on integer constant"
+#~ msgstr "suffixe invalide pour une constante entière"
+
+#~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits"
+#~ msgstr "constante entière trop grande pour la configuration du compilateur - tronqué à %d bits"
+
+#~ msgid "width of integer constant changes with -traditional"
+#~ msgstr "largeur de la constante entière change avec -traditional"
+
+#~ msgid "width of integer constant may change on other systems with -traditional"
+#~ msgstr "largeur de la constante entière peut changer sur d'autres système avec -traditional"
+
+#~ msgid "integer constant larger than the maximum value of %s"
+#~ msgstr "constante entière plus grande que la valeur maximale de %s"
+
+#~ msgid "an unsigned long long int"
+#~ msgstr "un entier long long non signé"
+
+#~ msgid "a long long int"
+#~ msgstr "un entier long long"
+
+#~ msgid "an unsigned long int"
+#~ msgstr "un entier long non signé"
+
+#~ msgid "decimal constant is so large that it is unsigned"
+#~ msgstr "constante décimale est tellement grande qu'elle est non signée"
+
+#~ msgid "complex integer constant is too wide for 'complex int'"
+#~ msgstr "constante complexe entière est trop grande pour le type 'complex int'"
+
+#~ msgid "integer constant is larger than the maximum value for its type"
+#~ msgstr "constante entière est plus grande que la valeur maximale pour ce type"
+
+#~ msgid "missing white space after number '%.*s'"
+#~ msgstr "espace blanc manquant après le nombre '%.*s'"
+
+#~ msgid "storage class specifier in array declarator"
+#~ msgstr "spécificateur de classe de stockage dans le déclarateur de tableau"
+
+#~ msgid "sizeof applied to a function type"
+#~ msgstr "sizeof appliqué sur un type de fonction"
+
+#~ msgid "sizeof applied to a void type"
+#~ msgstr "sizeof appliqué sur un type void"
+
+#~ msgid "execvp %s"
+#~ msgstr "execvp %s"
+
+#~ msgid "floating point numbers are not valid in #if"
+#~ msgstr "nombres flottants ne sont pas valides dans un #if"
+
+#~ msgid "traditional C rejects the `U' suffix"
+#~ msgstr "C traditionel rejette le suffixe « U »"
+
+#~ msgid "too many 'l' suffixes in integer constant"
+#~ msgstr "trop de « l » en suffixe dans les constantes entières"
+
+#~ msgid "integer constant contains digits beyond the radix"
+#~ msgstr "constante entière contient des chiffres en dehors la base numérique"
+
+#~ msgid "integer constant out of range"
+#~ msgstr "constante entière est hors gamme"
+
+#~ msgid "string constants are not valid in #if"
+#~ msgstr "constantes de chaîne ne sont pas valides dasn un #if"
+
+#~ msgid "missing binary operator"
+#~ msgstr "opérateur binaire manquant"
+
+#~ msgid "changing search order for system directory \"%s\""
+#~ msgstr "modification de l'ordonnancement de recherche du répertoire système « %s »"
+
+#~ msgid "  as it is the same as non-system directory \"%s\""
+#~ msgstr "  comme c'est le même qu'un répertoire non système « %s »"
+
+#~ msgid "I/O error on output"
+#~ msgstr "Erreur E/S sur la sortie"
+
+#~ msgid "argument missing after %s"
+#~ msgstr "argument manquant après %s"
+
+#~ msgid "number missing after %s"
+#~ msgstr "nombre manquant après %s"
+
+#~ msgid "target missing after %s"
+#~ msgstr "cible manquante après %s"
+
+#~ msgid "GNU CPP version %s (cpplib)"
+#~ msgstr "GNU CPP version %s (cpplib)"
+
+#~ msgid ""
+#~ "  -lang-c++                 Assume that the input sources are in C++\n"
+#~ "  -lang-objc                Assume that the input sources are in ObjectiveC\n"
+#~ "  -lang-objc++              Assume that the input sources are in ObjectiveC++\n"
+#~ "  -lang-asm                 Assume that the input sources are in assembler\n"
+#~ msgstr ""
+#~ "  -lang-c++                 Présumer que les sources sont en C++\n"
+#~ "  -lang-objc                Présumer que les sources sont en ObjectiveC\n"
+#~ "  -lang-objc++              Présumer que les sources sont en ObjectiveC++\n"
+#~ "  -lang-asm                 Présumer que les sources sont en assembleur\n"
+
+#~ msgid "possible start of unterminated string literal"
+#~ msgstr "début possible d'une chaîne de mot non terminée"
+
+#~ msgid "multi-line string literals are deprecated"
+#~ msgstr "chaîne de mots multi-lignes sont obsolètes"
+
+#~ msgid "directives may not be used inside a macro argument"
+#~ msgstr "directives ne peuvent être utilisées à l'intérieur d'un argument macro"
+
+#~ msgid "invalid option %s"
+#~ msgstr "option invalide %s"
+
+#~ msgid "%s:%d: warning: "
+#~ msgstr "%s:%d: AVERTISSEMENT: "
+
+#~ msgid "argument to `-b' is missing"
+#~ msgstr "argument de «-b» est manquant"
+
+#~ msgid "argument to `-V' is missing"
+#~ msgstr "argument de «-V» est manquant"
+
+#~ msgid "invalid version number format"
+#~ msgstr "format de numéro de verson invalide"
+
+#~ msgid ".da file contents exhausted too early\n"
+#~ msgstr "Le contenu du fichier .da a été épuisé trop rapidement\n"
+
+#~ msgid ".da file contents not exhausted\n"
+#~ msgstr "Le contenu du fichier .da n'a pas été épuisé\n"
+
+#~ msgid "%6.2f%% of %d source lines executed in function %s\n"
+#~ msgstr "%6.2f%% des lignes sources %d exécutées dans la fonction %s\n"
+
+#~ msgid "%6.2f%% of %d branches executed in function %s\n"
+#~ msgstr "%6.2f%% de branchements %d exécutés dans la fonction %s\n"
+
+#~ msgid "%6.2f%% of %d branches taken at least once in function %s\n"
+#~ msgstr "%6.2f%% de branchements %d pris au mons une fois dans la fonction %s\n"
+
+#~ msgid "No branches in function %s\n"
+#~ msgstr "Pas de branchement dans la fonction %s\n"
+
+#~ msgid "%6.2f%% of %d calls executed in function %s\n"
+#~ msgstr "%6.2f%% d'appels %d exécutés dans la fonction %s\n"
+
+#~ msgid "No calls in function %s\n"
+#~ msgstr "Pas d'appel dans la fonction %s\n"
+
+#~ msgid "call %d returns = %s%%\n"
+#~ msgstr "appel %d a retourné = %s%%\n"
+
+#~ msgid "branch %d taken = %s%%\n"
+#~ msgstr "branchement %d a pris = %s%%\n"
+
+#~ msgid ".da file contents exhausted too early"
+#~ msgstr "Le contenu du fichier .da a été épuisé trop rapidement"
+
+#~ msgid "conversion from NaN to int"
+#~ msgstr "conversion de NaN en int"
+
+#~ msgid "floating point overflow"
+#~ msgstr "débordement de virgule flottante"
+
+#~ msgid "overflow on truncation to integer"
+#~ msgstr "débordement de troncation d'un entier"
+
+#~ msgid "overflow on truncation to unsigned integer"
+#~ msgstr "débordement lors de la troncation d'un entier non signé"
+
+#~ msgid "%s: argument domain error"
+#~ msgstr "%s: erreur d'argument de domaine"
+
+#~ msgid "%s: function singularity"
+#~ msgstr "%s: singularité de fonction"
+
+#~ msgid "%s: underflow range error"
+#~ msgstr "%s: erreur de sous débordement de bornes"
+
+#~ msgid "%s: total loss of precision"
+#~ msgstr "%s: perte totale de précision"
+
+#~ msgid "%s: partial loss of precision"
+#~ msgstr "%s: perte partielle de précision"
+
+#~ msgid "%s: NaN - producing operation"
+#~ msgstr "%s: NaN - opération produite"
+
+#~ msgid "Pretend that host and target use the same FP format"
+#~ msgstr "Prétendre que l'hôte et la cible utilise le format FP"
+
+#~ msgid "Compile pointers as triples: value, base & end"
+#~ msgstr "Compiler les pointeurs comme des triplets: valeur, base et fin"
+
+#~ msgid "Do not promote floats to double if using -traditional"
+#~ msgstr "Ne pas promouvoir les flottants à des doubles avec -traditional"
+
+#~ msgid "Attempt to support traditional K&R style C"
+#~ msgstr "Tenter de supporter le style de langage C traditionnel K&R"
+
+#~ msgid "internal error: %s"
+#~ msgstr "erreur interne: %s"
+
+#~ msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+#~ msgstr "saut croisé désactivé: %d > 1000 blocs de base  et %d >= 20 blocs edges/basic"
+
+#~ msgid "  -a                      Enable block profiling \n"
+#~ msgstr "  -a                      autoriser le profilage des blocs \n"
+
+#~ msgid "  -ax                     Enable jump profiling \n"
+#~ msgstr "  -ax                     autoriser le profilage des sauts \n"
+
+#~ msgid "profiling does not work without a frame pointer"
+#~ msgstr "profilage ne fonctionne pas sans un pointeur de trames"
+
+#~ msgid "floating point numbers not allowed in #if expressions"
+#~ msgstr "nombres flottants ne sont pas permis dans les expressions #if"
+
+#~ msgid "invalid number in #if expression"
+#~ msgstr "nombre invalide dans l'expression #if"
+
+#~ msgid "invalid character constant in #if"
+#~ msgstr "constante de caractères invalide dans le #if"
+
+#~ msgid "double quoted strings not allowed in #if expressions"
+#~ msgstr "chaînes entre quillemets ne sont pas allouées dans les expression #if"
+
+#~ msgid "octal character constant does not fit in a byte"
+#~ msgstr "constante de caractères en octal ne peut être insérée dans un octet"
+
+#~ msgid "empty #if expression"
+#~ msgstr "expression #if vide"
+
+#~ msgid "Junk after end of expression."
+#~ msgstr "Rebut à la fin de l'expression."
+
+#~ msgid "macro or #include recursion too deep"
+#~ msgstr "macro ou récursion de #include trop profonde"
+
+#~ msgid "usage: %s [switches] input output"
+#~ msgstr "usage: %s [options] entrée sortie"
+
+#~ msgid "-traditional is not supported in C++"
+#~ msgstr "-traditional n'est pas supporté en C++"
+
+#~ msgid "-traditional and -ansi are mutually exclusive"
+#~ msgstr "-traditional et -ansi sont mutuellement exclusives"
+
+#~ msgid "filename missing after -i option"
+#~ msgstr "nom de fichier manquant après l'option -i"
+
+#~ msgid "filename missing after -o option"
+#~ msgstr "nom de fichier manquant après l'option -o"
+
+#~ msgid "target missing after %s option"
+#~ msgstr "cible manquante après l'option %s"
+
+#~ msgid "filename missing after %s option"
+#~ msgstr "nom de fichier manquant après l'option %s"
+
+#~ msgid "macro name missing after -%c option"
+#~ msgstr "nom de macro manquant après l'option -%c"
+
+#~ msgid "-trigraphs and -traditional are mutually exclusive"
+#~ msgstr "-trigraphs et -traditional sont mutuellement exclusives"
+
+#~ msgid "directory name missing after -I option"
+#~ msgstr "nom de répertoire manquant après l'option -I"
+
+#~ msgid "`/*' within comment"
+#~ msgstr "« /* » à l'intérieur d'un commentaire"
+
+#~ msgid "unterminated #%s conditional"
+#~ msgstr "#%s conditionel non terminé"
+
+#~ msgid "not in any file?!"
+#~ msgstr "n'est pas dans aucun fichier?!"
+
+#~ msgid "`defined' must be followed by ident or (ident)"
+#~ msgstr "« defined » doit être suivi par ident ou (ident)"
+
+#~ msgid "cccp error: invalid special hash type"
+#~ msgstr "erreur cccp: type de hachage spécial invalide"
+
+#~ msgid "#include expects \"fname\" or <fname>"
+#~ msgstr "#include espère « fname » ou <fname>"
+
+#~ msgid "no include path in which to find %.*s"
+#~ msgstr "pas de chemin d'inclusion dans lequel trouver %.*s"
+
+#~ msgid "invalid macro name"
+#~ msgstr "nom de macro invalide"
+
+#~ msgid "invalid macro name `%s'"
+#~ msgstr "nom de macro invalide « %s »"
+
+#~ msgid "parameter name starts with a digit in #define"
+#~ msgstr "nom de paramètre débute avec un chiffre dans #define"
+
+#~ msgid "badly punctuated parameter list in #define"
+#~ msgstr "liste de paramètres incorrectement ponctués dans #define"
+
+#~ msgid "unterminated parameter list in #define"
+#~ msgstr "liste de paramètres non terminée dans #define"
+
+#~ msgid "\"%.*s\" redefined"
+#~ msgstr "\"%.*s\" redéfini"
+
+#~ msgid "# operator should be followed by a macro argument name"
+#~ msgstr "# opérator derait être suivi par le nom d'un argument macro"
+
+#~ msgid "invalid format #line command"
+#~ msgstr "format invalide dans la commande #line"
+
+#~ msgid "undefining `defined'"
+#~ msgstr "indéfinition « defined »"
+
+#~ msgid "undefining `%s'"
+#~ msgstr "indéfinition « %s »"
+
+#~ msgid "extra text at end of directive"
+#~ msgstr "texte superflu à la fin de la directive"
+
+#~ msgid "#error%.*s"
+#~ msgstr "#error%.*s"
+
+#~ msgid "#warning%.*s"
+#~ msgstr "#warning%.*s"
+
+#~ msgid "#elif not within a conditional"
+#~ msgstr "#elif n'est pas à l'intérieur d'un conditionel"
+
+#~ msgid "#%s not within a conditional"
+#~ msgstr "#%s n'est pas à l'intérieur d'un conditionel"
+
+#~ msgid "#else or #elif after #else"
+#~ msgstr "#else ou #elif après #else"
+
+#~ msgid "#else not within a conditional"
+#~ msgstr "#else n'est pas à l'intérieur d'un conditionel"
+
+#~ msgid "unbalanced #endif"
+#~ msgstr "#endif non pairé"
+
+#~ msgid "unterminated string or character constant"
+#~ msgstr "chaîne non terminée ou constante caractère"
+
+#~ msgid "arguments given to macro `%s'"
+#~ msgstr "argument donnée à la macro « %s »"
+
+#~ msgid "no args to macro `%s'"
+#~ msgstr "aucun argument pour la macro « %s »"
+
+#~ msgid "only 1 arg to macro `%s'"
+#~ msgstr "seulement 1 argument pour la macro « %s »"
+
+#~ msgid "only %d args to macro `%s'"
+#~ msgstr "seulement %d arguments pour la macro « %s »"
+
+#~ msgid "too many (%d) args to macro `%s'"
+#~ msgstr "trop d'arguments (%d) pour la macro « %s »"
+
+#~ msgid ""
+#~ "internal error in %s, at tradcpp.c:%d\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "Erreur interne dans %s, à tradcpp.c:%d\n"
+#~ "SVP soumettre un rapport complet des anomalies rencontrées.\n"
+#~ "Consulter %s pour les instructions."
+
+#~ msgid "optimization turned on"
+#~ msgstr "optimisation activée"
+
+#~ msgid "optimization turned off"
+#~ msgstr "optimisation désactivée"
+
+#~ msgid "optimization level restored"
+#~ msgstr "niveau d'optimisation restauré"
+
+#~ msgid "Use VAX-C alignment"
+#~ msgstr "Utiliser l'alignement VAX-C"
+
+#~ msgid "Generate code assuming DW bit is set"
+#~ msgstr "Générer le code en assumant que le bit DW est initialisé"
+
+#~ msgid "Generate code assuming DW bit is not set"
+#~ msgstr "Générer le code en assumant que le bit DW n'est pas initialisé"
+
+#~ msgid "Generate code using byte writes"
+#~ msgstr "Générer le code en utilisant des écritures par octets"
+
+#~ msgid "Do not generate byte writes"
+#~ msgstr "Ne pas générer des écritures par octets"
+
+#~ msgid "Use small memory model"
+#~ msgstr "Utiliser le modèle de petite mémoire"
+
+#~ msgid "Use normal memory model"
+#~ msgstr "Utiliser le modèle normal de mémoire"
+
+#~ msgid "Use large memory model"
+#~ msgstr "Utiliser le modèle de grande mémoire"
+
+#~ msgid "Generate 29050 code"
+#~ msgstr "Générer le code 29050"
+
+#~ msgid "Generate 29000 code"
+#~ msgstr "Générer le code 29000"
+
+#~ msgid "Use kernel global registers"
+#~ msgstr "Utiliser les registres globaux du kernel"
+
+#~ msgid "Use user global registers"
+#~ msgstr "Utiliser les registres globaux"
+
+#~ msgid "Emit stack checking code"
+#~ msgstr "Produire le code de vérification de la pile"
+
+#~ msgid "Do not emit stack checking code"
+#~ msgstr "Ne pas produire le code de vérification de la pile"
+
+#~ msgid "Work around storem hardware bug"
+#~ msgstr "Contourner le bug matériel de stockage"
+
+#~ msgid "Do not work around storem hardware bug"
+#~ msgstr "Ne pas contourner le bug matériel de stockage"
+
+#~ msgid "Store locals in argument registers"
+#~ msgstr "Stocker les var. locales dans redistres d'arguments"
+
+#~ msgid "Do not store locals in arg registers"
+#~ msgstr "Ne pas stocker les var. locales dans redistres d'arguments"
+
+#~ msgid "Do symbol renaming for BSD"
+#~ msgstr "Ne pas renommer les symboles pour BSD"
+
+#~ msgid "Do symbol renaming for X/OPEN"
+#~ msgstr "Ne pas renommer les symboles pour X/OPEN"
+
+#~ msgid "Don't do symbol renaming"
+#~ msgstr "Ne pas renommer les symboles"
+
+#~ msgid "Generate code for the C400"
+#~ msgstr "Générer le code pour le C400"
+
+#~ msgid "Generate code for the C300"
+#~ msgstr "Générer le code pour le C300"
+
+#~ msgid "Generate code for c1"
+#~ msgstr "Générer le code pour le c1"
+
+#~ msgid "Generate code for c2"
+#~ msgstr "Générer le code pour le c2"
+
+#~ msgid "Generate code for c32"
+#~ msgstr "Générer le code pour le c3"
+
+#~ msgid "Generate code for c34"
+#~ msgstr "Générer le code pour le c34"
+
+#~ msgid "Use standard calling sequence, with arg count word"
+#~ msgstr "Utiliser la séquence standard d'appel, avec arg et mot compteur"
+
+#~ msgid "Place arg count in a nop instruction (faster than push)"
+#~ msgstr "Placer le compteur d'arg dans une instruction NOP (plus rapide que push)"
+
+#~ msgid "Don't push arg count, depend on symbol table"
+#~ msgstr "Ne pas empiler le compteur d'arg, dépend de la table de symboles"
+
+#~ msgid "Use data cache for volatile mem refs (default)"
+#~ msgstr "Utiliser la cache de données pour les réf. mémoire volatiles (par défaut)"
+
+#~ msgid "Don't use data cache for volatile mem refs"
+#~ msgstr "Ne pas utiliser la cache de données pour les réf. mémoire volatiles"
+
+#~ msgid "Bypass data cache for volatile mem refs"
+#~ msgstr "Éviter la cache de données pour les réf. mémoire volatiles"
+
+#~ msgid "Use 64-bit longs"
+#~ msgstr "Utiliser des longs de 64 bits"
+
+#~ msgid "Use cc- and libc-compatible 32-bit longs"
+#~ msgstr "Utiliser cc- et libc-compatible longs de 32 bits"
+
+#~ msgid "inline float constants not supported on this host"
+#~ msgstr "enlignage des constantes flottantes n'est pas supporté sur cet hôte"
+
+#~ msgid "Generate code the unix assembler can handle"
+#~ msgstr "Générer du code que l'assembleur UNIX peut traiter"
+
+#~ msgid "Retain standard MXDB information"
+#~ msgstr "Retenir l'information standard MXDB"
+
+#~ msgid "Retain legend information"
+#~ msgstr "Retenir les informations de légende"
+
+#~ msgid "Generate external legend information"
+#~ msgstr "Générer les informations externes de légende"
+
+#~ msgid "Emit identifying info in .s file"
+#~ msgstr "Produire les infos d'identification dans le fichier .s"
+
+#~ msgid "Warn when a function arg is a structure"
+#~ msgstr "Avertir lorsque l'arg d'une fonction est une structure"
+
+#~ msgid "argument is a structure"
+#~ msgstr "argument est une structure"
+
+#~ msgid "half-pic init called on systems that don't support it"
+#~ msgstr "init à demi PIC appelé sur un système qui ne le supporte pas"
+
+#~ msgid "Profiling uses mcount"
+#~ msgstr "Profilage utilise mcount"
+
+#~ msgid "Emit half-PIC code"
+#~ msgstr "Produire du code à moitié PIC"
+
+#~ msgid "Emit ELF object code"
+#~ msgstr "Produire du code objet ELF"
+
+#~ msgid "Emit ROSE object code"
+#~ msgstr "Produire du code objet ROSE"
+
+#~ msgid "Symbols have a leading underscore"
+#~ msgstr "Les symboles sont précédées d'un caractère de soulignement "
+
+#~ msgid "Align to >word boundaries"
+#~ msgstr "Aligner sur >frontières de mots"
+
+#~ msgid "Use mcount for profiling"
+#~ msgstr "Utiliser mcount pour le profilage"
+
+#~ msgid "Use mcount_ptr for profiling"
+#~ msgstr "Utiliser mcount_ptr pour le profilage"
+
+#~ msgid "the -mlong-double-64 option does not work yet"
+#~ msgstr "l'option -mlong-double-64 n'est pas fonctionnelle encore"
+
+#~ msgid "The -march option is incompatible to -mipsN and therefore ignored."
+#~ msgstr "L'option -march est incompatible avec -mipsN et est alors ignorée."
+
+#~ msgid "-mips%d not supported"
+#~ msgstr "-mips%d n'est pas supporté"
+
+#~ msgid "-mabi=%s does not support -mips%d"
+#~ msgstr "-mabi=%s ne supporte pas -mips%d"
+
+#~ msgid "this target does not support the -mabi switch"
+#~ msgstr "cette cible ne supporte pas l'option -mabi"
+
+#~ msgid "-mips%d does not support 64 bit fp registers"
+#~ msgstr "-mips%d ne supporte pas les registres FP de 64 bits"
+
+#~ msgid "-mips%d does not support 64 bit gp registers"
+#~ msgstr "-mips%d ne supporte pas les registres GP de 64 bits"
+
+#~ msgid "Use OSF PIC"
+#~ msgstr "Utiliser le code PIC OSF"
+
+#~ msgid "Don't use OSF PIC"
+#~ msgstr "Ne pas utiliser le code PIC OSF"
+
+#~ msgid "Optimize for 3900"
+#~ msgstr "Optimiser pour le 3900"
+
+#~ msgid "Optimize for 4650"
+#~ msgstr "Optimiser pour le 4650"
+
+#~ msgid "stack frame too big"
+#~ msgstr "trame de pile trop grande"
+
+#~ msgid "neither varargs or stdarg in mmix_setup_incoming_varargs"
+#~ msgstr "ni varargs ou stdarg dans mmix_setup_incoming_varargs"
+
+#~ msgid "oops, not debugged; fixing up value:"
+#~ msgstr "oops, pas mis au point; correction de la valeur:"
+
+#~ msgid "Generate little endian data"
+#~ msgstr "Générer des données pour systèmes à octets de poids faible"
+
+#~ msgid "Generate big endian data"
+#~ msgstr "Générer des données pour systèmes à octets de poids fort"
+
+#~ msgid "Turn on maintainer testing code"
+#~ msgstr "Mettre en marche le code d'entretien de mise au point"
+
+#~ msgid "Enable Transmeta picoJava extensions"
+#~ msgstr "Autoriser les extensions Transmeta picoJava"
+
+#~ msgid "Disable Transmeta picoJava extensions"
+#~ msgstr "Interdire les extensions Transmeta picoJava"
+
+#~ msgid "Disable reorganization pass"
+#~ msgstr "Désactiver la passe de réorganisation"
+
+#~ msgid "-f%s ignored (all code is position independent)"
+#~ msgstr "-f%s ignoré (tout le code est indépendant de la position)"
+
+#~ msgid "-ffunction-sections disabled on AIX when debugging"
+#~ msgstr "-ffunction-sections désactivé sur AIX lors de la mise au point"
+
+#~ msgid "-fdata-sections not supported on AIX"
+#~ msgstr "-fdata-sections n'est pas supporté sur AIX"
+
+#~ msgid "%%S computed all 1's mask"
+#~ msgstr "%%S calculé avec un masque que uns"
+
+#~ msgid "%%S computed all 0's mask"
+#~ msgstr "%%S calculé avec un masque de zéros"
+
+#~ msgid "no viable candidates"
+#~ msgstr "pas de candidats viables"
+
+#~ msgid "`%D' has already been declared in `%T'"
+#~ msgstr "« %D » a déjà été déclaré dans « %T »"
+
+#~ msgid "`%D' as declarator"
+#~ msgstr "« %D » comme déclarateur"
+
+#~ msgid "cannot declare %s to references"
+#~ msgstr "ne peut déclarer %s comme références"
+
+#~ msgid "invalid type: `void &'"
+#~ msgstr "type invalide: « void & »"
+
+#~ msgid "typedef declaration includes an initializer"
+#~ msgstr "déclaration typedef inclut un initialiseur"
+
+#~ msgid "-fname-mangling-version is no longer supported"
+#~ msgstr "-fname-mangling-version n'est plus supportée"
+
+#~ msgid "                %#D"
+#~ msgstr "                %#D"
+
+#~ msgid "member initializers for `%#D'"
+#~ msgstr "initialiseur du membre pour « %#D »"
+
+#~ msgid "  will be re-ordered to match declaration order"
+#~ msgstr "  sera ré-odonné pour concorder avec l'ordre déclaré"
+
+#~ msgid "multiple initializations given for member `%D'"
+#~ msgstr "initialisations multiples données pour le membre « %D »"
+
+#~ msgid "  will be re-ordered to match inheritance order"
+#~ msgstr "  sera ré-ordonné pour concorder avec l'ordre d'héritage"
+
+#~ msgid "implementation-reserved name `%D' used"
+#~ msgstr "nom d'implantation réservé « %D » est utilisé"
+
+#~ msgid "explicit instantiation of `%#D' after"
+#~ msgstr "instanciation explicite de « %#D » après"
+
+#~ msgid "explicit specialization here"
+#~ msgstr "spécialisation explicite ici"
+
+#~ msgid "explicit instantiation of `%#T' after"
+#~ msgstr "instanciation explicite de « %#T » après"
+
+#~ msgid "base initializer for `%T'"
+#~ msgstr "initialiseur de base « %T »"
+
+#~ msgid "   will be re-ordered to precede member initializations"
+#~ msgstr "   sera ré-ordonné pour précéder les initialisations de membre"
+
+#~ msgid "ignoring `%V' qualifiers on `%T'"
+#~ msgstr "qualificateurs « %V » ignorés pour « %T »"
+
+#~ msgid "`sizeof' applied to non-static member"
+#~ msgstr "« sizeof » appliqué à un membre non statique"
+
+#~ msgid "`sizeof' applied to incomplete type `%T'"
+#~ msgstr "« sizeof» appliqué sur un type incomplet «%T »"
+
+#~ msgid "request for member `%T::%D' in expression of non-aggregate type `%T'"
+#~ msgstr "requête du membre «%T::%D» dans l'expression du type non aggrégat « %T »"
+
+#~ msgid "invalid use of type decl `%#D' as expression"
+#~ msgstr "utilisation invalide du type decl « %#D » comme expression"
+
+#~ msgid "invalid use of template `%#D' as expression"
+#~ msgstr "utilisation invalide du canevas « %#D » comme expression"
+
+#~ msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead"
+#~ msgstr "offsetof invalide du type non POD « %#T »; utiliser un pointeur vers un membre à la place"
+
+#~ msgid "pointer to member function called, but not in class scope"
+#~ msgstr "appel d'un pointeur vers un membre de fonction, mais n'est pas dans le champ de la classe"
+
+#~ msgid "object missing in call to method `%D'"
+#~ msgstr "objet manquant dans l'appel de la méthode « %D »"
+
+#~ msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?"
+#~ msgstr "fontion « %D » déclarée surchargée, mais aucune définition n'apparaît pour la résoudre?!?"
+
+#~ msgid "invalid call to member function needing `this' in static member function scope"
+#~ msgstr "appel invalide vers un membre de fonction ayant besoin de « ceci » dans le champ du membre statique de la fonction"
+
+#~ msgid "invalid use of undefined type `%#T'"
+#~ msgstr "utilisation invalide d'un type indéfini « %#T »"
+
+#~ msgid "invalid use of `%T'"
+#~ msgstr "utilisation invalide de « %T »"
+
+#~ msgid "invalid use of member (did you forget the `&' ?)"
+#~ msgstr "utilisation invalide de membre (avez-vous oublié le «&» ?)"
+
+#~ msgid "address of overloaded function with no contextual type information"
+#~ msgstr "adresse de la fonction surchargée sans information contextuelle de type"
+
+#~ msgid "overloaded function with no contextual type information"
+#~ msgstr "fonction surchargée sans information contextuelle de type"
+
+#~ msgid "insufficient contextual information to determine type"
+#~ msgstr "information contextuelle insuffisante pour déterminer le type"
+
+#~ msgid "initializer list construction invalid for derived class object `%D'"
+#~ msgstr "initialiseur de construction de liste invalide pour l'objet de classe dérivée « %D »"
+
+#~ msgid "initializer list construction invalid for polymorphic class object `%D'"
+#~ msgstr "initialiseur de construction de liste invalide pour l'objet de classe polymorphique « %D »"
+
+#~ msgid "initializer list construction invalid for `%D'"
+#~ msgstr "construction de la liste d'initialiseurs invalide pour « %D »"
+
+#~ msgid "due to the presence of a constructor"
+#~ msgstr "en raison de la présence d'un constructeur"
+
+#~ msgid "due to non-public access of member `%D'"
+#~ msgstr "en raison d'un accès non public du membre « %D »"
+
+#~ msgid "The meaning of `\\x' (at %0) varies with -traditional"
+#~ msgstr "La signification de «\\x» (à %0) varie avec l'option -traditional"
+
+#~ msgid "The meaning of `\\a' (at %0) varies with -traditional"
+#~ msgstr "La signification de «\\a»(à %0) varie avec -traditional"
+
+#~ msgid "the meaning of `\\x' varies with -traditional"
+#~ msgstr "la signification de «\\x» varie avec l'option -traditional"
+
+#~ msgid "the meaning of `\\a' varies with -traditional"
+#~ msgstr "le sens de «\\a» varie avec -traditional"
+
+#~ msgid "parse error; also virtual memory exceeded"
+#~ msgstr "erreur d,analyse syntaxique; aussi la mémoire virtuelle est épuisée"
+
+#~ msgid "Can't specify array dimension in a declaration"
+#~ msgstr "Ne peut spécifier la dimension du tableau dans la déclaration"
+
+#~ msgid "internal error - use of undefined type"
+#~ msgstr "erreur interne - utilisation d'un type non défini"
+
+#~ msgid "no class name specified as argument to -fconstant-string-class"
+#~ msgstr "pas de nom de classe spécifier dans l'argument à -fconstant-string-class"
+
+#~ msgid "-p profiling is no longer supported.  Use -pg instead"
+#~ msgstr "-p profilage n'est plus supporté.  Utiliser -pg à la place."
+
+#~ msgid "incompatible interworking options"
+#~ msgstr "options d'inter-réseautage incompatibles"
+
+#~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive"
+#~ msgstr "options -mabi=mmixware et -mabi=gnu sont mutuellement exclusives"
+
+#~ msgid "-p option not supported: use -pg instead"
+#~ msgstr "l'option -p n'est pas supportée: utitilse -pg à la place"
+
+#~ msgid "-mbsd and -pedantic incompatible"
+#~ msgstr "-mbsd et -pedantic incompatibles"
+
+#~ msgid "-mbsd and -mxopen incompatible"
+#~ msgstr "-mbsd et -mxopen incompatibles"
+
+#~ msgid "-mxopen and -pedantic incompatible"
+#~ msgstr "-mxopen et -pedantic incompatibles"
+
+#~ msgid "may not use both -mfp64 and -msingle-float"
+#~ msgstr "ne peut utiliser ensemble -mfp64 et -msingle-float"
+
+#~ msgid "may not use both -mfp64 and -m4650"
+#~ msgstr "ne peut utiliser ensemble -mfp64 et -m4650"
+
+#~ msgid "may not use both -mgp32 and -mfp64"
+#~ msgstr "ne peut utiliser ensemble -mfp32 et -mfp64"
+
+#~ msgid "declaration of `%#T'"
+#~ msgstr "déclaration de « %#T »"
+
+#~ msgid "a -ifile option requires a -map option"
+#~ msgstr "l'option -ifile requiert l'option -map"
+
+#~ msgid "__builtin_trap not supported by this target"
+#~ msgstr "__builtin_trap n'est pas supporté par la cible"
+
+#~ msgid "`%s' previously defined here"
+#~ msgstr "« %s » précédemment défini ici"
+
+#~ msgid "`%s' previously declared here"
+#~ msgstr "« %s » précédemment déclaré ici"
+
+#~ msgid "increment"
+#~ msgstr "incrément"
+
+#~ msgid "decrement"
+#~ msgstr "décrément"
+
+#~ msgid "Usage: %s [switches] input output\n"
+#~ msgstr "Usage: %s [options] entrée sortie\n"
+
+#~ msgid "output_operand: %s"
+#~ msgstr "output_operand: %s"
+
+#~ msgid "invalid %H value"
+#~ msgstr "valeur %H invalide"
+
+#~ msgid "invalid %h value"
+#~ msgstr "valeur %h invalide"
+
+#~ msgid "invalid %Q value"
+#~ msgstr "valeur %Q invalide"
+
+#~ msgid "invalid %q value"
+#~ msgstr "valeur %q invalide"
+
+#~ msgid "invalid %p value"
+#~ msgstr "valeur %p invalide"
+
+#~ msgid "invalid %B value"
+#~ msgstr "valeur %B invalide"
+
+#~ msgid "invalid %C value"
+#~ msgstr "valeur %C invalide"
+
+#~ msgid "invalid %E value"
+#~ msgstr "valeur %E invalide"
+
+#~ msgid "invalid %r value"
+#~ msgstr "valeur %r invalide"
+
+#~ msgid "-march=%s does not support -mips%d"
+#~ msgstr "-march=%s ne supporte pas -mips%d"
+
+#~ msgid "no code label found"
+#~ msgstr "pas d'étiquette de code trouvée"
+
+#~ msgid "profiling does not support code models other than medlow"
+#~ msgstr "profilage ne supporte pas le code pour les modèles autre que medlow"
+
+#~ msgid "%s and profiling conflict: disabling %s"
+#~ msgstr "%s avec des conflit de profilage: désactivation de %s"
+
+#~ msgid "Use function_epilogue()"
+#~ msgstr "Utiliser fonction_epilogue()"
+
+#~ msgid "Do not use function_epilogue()"
+#~ msgstr "Ne pas utiliser fonction_epilogue()"
+
+#~ msgid "%d errors, %d sorries, do granting"
+#~ msgstr "%d erreurs, %d plaintes, donner la permission"
+
+#~ msgid "GNU compiler does not support statically allocated objects"
+#~ msgstr "compilateur GNU ne supporte pas les objets alloués de manière statique"
+
+#~ msgid "causing unhandled exception `%s' (this is flaged only once)"
+#~ msgstr "causant l'exception non traité « %s » (ceci est relevé seulement une fois)"
+
+#~ msgid "range failure (not inside function)"
+#~ msgstr "échec sur l'étendue (n'est pas à l'intérieur de la fonction)"
+
+#~ msgid "possible range failure (not inside function)"
+#~ msgstr "échec possible de l'étendue (pas à l'intérique de la fonction)"
+
+#~ msgid "expression will always cause RANGEFAIL"
+#~ msgstr "l'expression causera toujours RENGEFAIL"
+
+#~ msgid "right hand side of assignment is a mode"
+#~ msgstr "côté droit de l'affectation est un mode"
+
+#~ msgid "bad string length in %s"
+#~ msgstr "chaîne de longueur erronée dans %s"
+
+#~ msgid "mode mismatch in %s expression"
+#~ msgstr "non concordance de mode dans l'expression %s"
+
+#~ msgid "%s expression must be referable"
+#~ msgstr "expression %s doit être référable"
+
+#~ msgid "%s not allowed outside a PROC"
+#~ msgstr "%s n'est pas permis en dehors d'une procédure"
+
+#~ msgid "%s action in PROC with no declared RESULTS"
+#~ msgstr "action %s dans la procédure sans RÉSULTATS déclarés"
+
+#~ msgid "RETURN not allowed outside PROC"
+#~ msgstr "RETURN n'est pas permis en dehors d'une procédure"
+
+#~ msgid "RETURN with a value, in PROC returning void"
+#~ msgstr "RETURN avec valeur dans une procédure retournant void"
+
+#~ msgid "RETURN with no value and no RESULT action in procedure"
+#~ msgstr "RETURN sans valeur et sans RÉSULTAT d'action dans la procédure"
+
+#~ msgid "no label named `%s'"
+#~ msgstr "pas d'étiquette nommée « %s »"
+
+#~ msgid "cannot GOTO label `%s' outside current function"
+#~ msgstr "ne peut aller à L'étiquette « %s » en dehors de la fonction courante"
+
+#~ msgid "no EXITable label named `%s'"
+#~ msgstr "pas d'étiquette de sortie portant le nom « %s »"
+
+#~ msgid "cannot EXIT label `%s' outside current function"
+#~ msgstr "ne sortir à l'aide de l'étiquette « %s » en dehors de la fonction courante"
+
+#~ msgid "ELSE label not within a CASE statement"
+#~ msgstr "étiquette du ELSE n'est pas n'est pas à l'intérieur de la déclaration du CASE"
+
+#~ msgid "multiple default labels found in a CASE statement"
+#~ msgstr "étiquettes multiples de défaut dans la déclaration d'un «case»"
+
+#~ msgid "this is the first ELSE label"
+#~ msgstr "ceci est la première étiquette ELSE"
+
+#~ msgid "label found outside of CASE statement"
+#~ msgstr "étiquette trouvée en dehors de la déclaration du CASE"
+
+#~ msgid "duplicate CASE value"
+#~ msgstr "valeur de CASE double"
+
+#~ msgid "this is the first entry for that value"
+#~ msgstr "c'est la première entrée pour cette valeur"
+
+#~ msgid "CASE value out of range"
+#~ msgstr "valeur du CASE hors gamme"
+
+#~ msgid "empty range"
+#~ msgstr "bornes vides"
+
+#~ msgid "label within scope of cleanup or variable array"
+#~ msgstr "étiquette à l'intérieur de la portée du nettoyage ou du tableau de variables"
+
+#~ msgid "mode in label is not discrete"
+#~ msgstr "mode dans l'étiquette n'est pas discret"
+
+#~ msgid "label not within a CASE statement"
+#~ msgstr "étiquette n'est pas à l'intérieur de la déclaration du CASE"
+
+#~ msgid "lower bound of range must be a discrete literal expression"
+#~ msgstr "borne inférieure de l'étendue doit être une expression litérale discrète"
+
+#~ msgid "upper bound of range must be a discrete literal expression"
+#~ msgstr "borne supérieure de l'étendue doit être une expression litérale discrète"
+
+#~ msgid "CASE label is not valid"
+#~ msgstr "étiquette du CASE n'est pas valide"
+
+#~ msgid "number of CASE selectors does not match the number of CASE label lists"
+#~ msgstr "nombre de sélecteurs de CASE ne concorde pas avec la liste des étiquettes du CASE"
+
+#~ msgid "incomplete CASE - %s not handled"
+#~ msgstr "CASE incomplet - %s n'est pas traité"
+
+#~ msgid "CASE selector with variable range"
+#~ msgstr "sélecteur du CASE avec un étendue variable"
+
+#~ msgid "too many cases to do CASE completeness testing"
+#~ msgstr "trop de cas pour la complétion de tests du CASE"
+
+#~ msgid "type of tuple cannot be implicit in multiple assignent"
+#~ msgstr "type de tuple ne peut être implicite dans de multiples affectations"
+
+#~ msgid "conditional expression cannot be used in multiple assignent"
+#~ msgstr "expression conditionnelle ne peut être utilisé dans de multiples affectations"
+
+#~ msgid "internal error - unknown type in multiple assignment"
+#~ msgstr "erreur interne - type inconnu dans une affectation multiple"
+
+#~ msgid "no operator allowed in multiple assignment,"
+#~ msgstr "pas d'opérateur permis dans de multiples affectations"
+
+#~ msgid "location modes in multiple assignment are not equivalent"
+#~ msgstr "modes de localisation dans de multiples affectations ne sont pas équivalents"
+
+#~ msgid "you may not assign a value to a BUFFER or EVENT location"
+#~ msgstr "vous pouvez affecter une valeur à la localisation d'un TAMPON ou d'un ÉVÉNEMENT "
+
+#~ msgid "can't assign value to READonly location"
+#~ msgstr "ne peut affecter une valeur à une localisation en mode LECTURE seulement"
+
+#~ msgid "cannot assign to location with non-value property"
+#~ msgstr "ne peut affecter une localisation avec une propriété sans valeur"
+
+#~ msgid "lefthand side of assignment is not a location"
+#~ msgstr "côté gauche de l'affectation n'est pas un localisation"
+
+#~ msgid "bitstring slice"
+#~ msgstr "tranche d'une chaîne de bits"
+
+#~ msgid "LENGTH on left-hand-side is non-portable"
+#~ msgstr "LONGUEUR sur le côté droit n'est pas portable"
+
+#~ msgid "can only set LENGTH of array location"
+#~ msgstr "peut seulement fixer la LONGUEUR de la localisation d'un tableau"
+
+#~ msgid "internal error: trying to make loc-identity with non-location"
+#~ msgstr "erreur interne: tentative de créer une identité de localisation avec une non localisation"
+
+#~ msgid "cannot convert to a boolean mode"
+#~ msgstr "ne peut convertir en un mode booléen"
+
+#~ msgid "cannot convert to a char mode"
+#~ msgstr "ne peut convertir en mode caractère"
+
+#~ msgid "powerset tuple element out of range"
+#~ msgstr "élément du tuple du powerset est hors gamme"
+
+#~ msgid "incompatible member of powerset tuple (at position #%d)"
+#~ msgstr "membre incompatible du tuple du powerset ( à la position #%d)"
+
+#~ msgid "non-constant value for tag field `%s'"
+#~ msgstr "valeur non constante pour l'étiquette de champ « %s »"
+
+#~ msgid "field `%s' in wrong variant"
+#~ msgstr "champ « %s » dans un variant erroné"
+
+#~ msgid "missing variant fields (at least `%s')"
+#~ msgstr "champs variants manquants (au moins « %s »)"
+
+#~ msgid "bad initializer for field `%s'"
+#~ msgstr "initialiseur erroné pour le champ « %s »"
+
+#~ msgid "no initializer value for variant field `%s'"
+#~ msgstr "pas de valeur d'initialiseur pour le champ « %s »"
+
+#~ msgid "no selected variant"
+#~ msgstr "pas de variant sélectionné"
+
+#~ msgid "mixture of labelled and unlabelled tuple elements"
+#~ msgstr "mélange de tuple d'éléments étiquettés et non étiquettés"
+
+#~ msgid "probably not a structure tuple"
+#~ msgstr "probablement pas une structure de tuple"
+
+#~ msgid "excess initializer for field `%s'"
+#~ msgstr "débordement de l'initialiseur pour le champ « %s »"
+
+#~ msgid "excess unnamed initializers"
+#~ msgstr "débordement d'initialiseurs sans nom"
+
+#~ msgid "non-constant start index for tuple"
+#~ msgstr "index de départ du tuple n'est pas une constante"
+
+#~ msgid "invalid array tuple label"
+#~ msgstr "étiquette invalide d'un tuple de tableau"
+
+#~ msgid "non-constant array tuple index range"
+#~ msgstr "étendue de l'index du tableau de tuples n'est pas une constante"
+
+#~ msgid "incompatible array tuple element %s"
+#~ msgstr "élément incompatible du tableau de tuples %s"
+
+#~ msgid "multiple (*) or (ELSE) array tuple labels"
+#~ msgstr "multiples étiquettes de tuples de tableaux (*) ou (ELSE)"
+
+#~ msgid "empty range in array tuple"
+#~ msgstr "étendue vide dans le tableau de tuples"
+
+#~ msgid "array tuple has duplicate index %s"
+#~ msgstr "tableau de tuples a un double index %s"
+
+#~ msgid "array tuple index out of range"
+#~ msgstr "index du tableau de tuples est hors gamme"
+
+#~ msgid "too many array tuple values"
+#~ msgstr "trop de valeurs de tuples de tableaux"
+
+#~ msgid "dynamic array tuple without (*) or (ELSE)"
+#~ msgstr "tuple de tableau dynamique sans (*) ou (ELSE)"
+
+#~ msgid "missing array tuple element %s"
+#~ msgstr "élément de tuple de tableau manquant %s"
+
+#~ msgid "missing array tuple elements %s : %s"
+#~ msgstr "éléments de tuple de tableau manquant %s : %s"
+
+#~ msgid "initializer is not an array or string mode"
+#~ msgstr "initialiseur n'est pas en mode tableau ou chaîne"
+
+#~ msgid "destination is too small"
+#~ msgstr "destination trop petite"
+
+#~ msgid "internal error:  unknown type of expression"
+#~ msgstr "erreur interne:  type d'expression inconnue"
+
+#~ msgid "`%s' must not be declared readonly"
+#~ msgstr "« %s » ne doit pas être déclaré en lecture seulement"
+
+#~ msgid "declaration of readonly variable without initialization"
+#~ msgstr "déclaration d'une variable en lecture seuelement sans initialisation"
+
+#~ msgid "no initialization allowed for `%s'"
+#~ msgstr "pas d'initialisation permise pour « %s »"
+
+#~ msgid "value for loc-identity `%s' is not a location"
+#~ msgstr "valeur pour l'identité de localisation « %s » n'est pas une localisation"
+
+#~ msgid "location for `%s' not read-compatible"
+#~ msgstr "localisation pour « %s » n'est pas compatible en lecture"
+
+#~ msgid "nonconstant initializer for `%s'"
+#~ msgstr "initialiseur n,est pas un constante pour « %s »"
+
+#~ msgid "do_decl: internal error: don't know what to initialize"
+#~ msgstr "do_decl: erreur interne: ne sait pas quoi initialiser"
+
+#~ msgid "RECURSIVE PROCs"
+#~ msgstr "PROCÉDURES RÉCURSIVES"
+
+#~ msgid "`%s' must not be READonly"
+#~ msgstr "« %s » ne doit pas être en lecture seulement"
+
+#~ msgid "POS may not be specified for a list of field declarations"
+#~ msgstr "POS ne peut pas être spécifiés pour une liste de déclarations de champs"
+
+#~ msgid "(ELSE) case label as well as ELSE variant"
+#~ msgstr "étiquette du cas (ELSE) aussi bien que le ELSE variant"
+
+#~ msgid "inconsistent modes between labels and tag field"
+#~ msgstr "modes inconsistents entre les étiquettes et le champ étiquette"
+
+#~ msgid "too few tag labels"
+#~ msgstr "pas assez d'étiquettes"
+
+#~ msgid "too many tag labels"
+#~ msgstr "trop d'étiquettes"
+
+#~ msgid "case label lower limit is not a discrete constant expression"
+#~ msgstr "limite inférieure de l'étiquette du CASE n'est pas une expression d'une constante discrète"
+
+#~ msgid "case label upper limit is not a discrete constant expression"
+#~ msgstr "limite supérieure de l'étiquette du CASE n'est pas une expression d'une constante discrète"
+
+#~ msgid "case label must be a discrete constant expression"
+#~ msgstr "l'étiquette du CASE doit être une expression de constante discrète"
+
+#~ msgid "variant label declared here..."
+#~ msgstr "étiquette variante déclarée ici..."
+
+#~ msgid "...is duplicated here"
+#~ msgstr "...est dupliqué ici"
+
+#~ msgid "no field (yet) for tag %s"
+#~ msgstr "pas de champ (encore) pour l'étiquette %s"
+
+#~ msgid "non-value mode may only returned by LOC"
+#~ msgstr "mode non-valeur peut seulement être retourné par LOC"
+
+#~ msgid "`%s' may only be passed by LOC"
+#~ msgstr "« %s » peut seulement être passé par LOC"
+
+#~ msgid "nothing named `%s' to grant"
+#~ msgstr "rien de nommé « %s » à autoriser"
+
+#~ msgid "duplicate grant for `%s'"
+#~ msgstr "duplication autorisée pour « %s »"
+
+#~ msgid "duplicate definition `%s'"
+#~ msgstr "double définition de « %s »"
+
+#~ msgid "previous definition of `%s'"
+#~ msgstr "définition précédente de « %s »"
+
+#~ msgid "ambiguous choice for seize `%s' -"
+#~ msgstr "¨choix ambigu pour évaluer « %s » -"
+
+#~ msgid " - can seize this `%s' -"
+#~ msgstr " - peut évaluer ceci « %s » -"
+
+#~ msgid " - or this granted decl `%s'"
+#~ msgstr " - ou cette decl « %s » autorisé"
+
+#~ msgid "enumerator value for `%s' is less than 0"
+#~ msgstr "valeur de l'énumérateur pour « %s » est plus petit que 0"
+
+#~ msgid "enumerators `%s' and `%s' have equal values"
+#~ msgstr "énumérateurs « %s » et « %s » ont les mêmes valeurs"
+
+#~ msgid "undefined value in SET mode is obsolete and deprecated"
+#~ msgstr "valeur non définie dans le mode SET est obsolète"
+
+#~ msgid "BASE variable never declared"
+#~ msgstr "variable de BASE jamais déclarée"
+
+#~ msgid "cannot BASE a variable on a PROC/PROCESS name"
+#~ msgstr "ne peut établir une variable sur le nom du PROC/PROCESSUS"
+
+#~ msgid "INTERNAL ERROR: handle_one_level is broken"
+#~ msgstr "ERREUR INTERNE: handle_one_level est brisé"
+
+#~ msgid "tuple without specified mode not allowed in %s"
+#~ msgstr "tuple sans mode spécifié n'est pas permis dans %s"
+
+#~ msgid "conditional expression not allowed in %s"
+#~ msgstr "expression conditionnelle n'est pas permise dans « %s »"
+
+#~ msgid "internal error:  unknown expression mode in %s"
+#~ msgstr "erreur interne: mode d'expression inconnnu dans %s"
+
+#~ msgid "CASE selector is not a discrete expression"
+#~ msgstr "sélecteur du CASE n'est pas une expression discrète"
+
+#~ msgid "The number of CASE selectors does not match the number of CASE label lists"
+#~ msgstr "Le nombre de sélecteurs de CASE ne concordent pas avec le nombre de listes d'étiquettes du CASE"
+
+#~ msgid "powerset is not addressable"
+#~ msgstr "powerset n'est pas adressable"
+
+#~ msgid "array is not addressable"
+#~ msgstr "tableau n'est pas adressable"
+
+#~ msgid "too few arguments in call to `%s'"
+#~ msgstr "pas assez d'argument pour l'appel de « %s »"
+
+#~ msgid "too many arguments in call to `%s'"
+#~ msgstr "trop d'arguments pour l'appel de « %s »"
+
+#~ msgid "cannot dereference, not a pointer"
+#~ msgstr "ne peut déréférencer, n'est pas un pointeur"
+
+#~ msgid "missing '.' operator or undefined mode name `%s'"
+#~ msgstr "opérateur «.» manquant ou nom de mode « %s » indéfini"
+
+#~ msgid "you have forgotten the '.' operator which must"
+#~ msgstr "vous avez oublié l'opérateur «.» lequel doit être"
+
+#~ msgid " precede a STRUCT field reference, or `%s' is an undefined mode"
+#~ msgstr " précède une référence sur champ STRUCT ou « %s » est un mode indéfini"
+
+#~ msgid "invalid type argument of `->'"
+#~ msgstr "type d'argument invalide de «->»"
+
+#~ msgid "operand of '.' is not a STRUCT"
+#~ msgstr "l'opérande de '.« n»est pas un STRUCT"
+
+#~ msgid "no field named `%s'"
+#~ msgstr "pas de champ nommé « %s »"
+
+#~ msgid "ABS argument must be discrete or real mode"
+#~ msgstr "argument ABS doit être en mode discret ou réel"
+
+#~ msgid "argument %d to ABSTIME must be of integer type"
+#~ msgstr "argument %d à ABSTIME doit être un type entier"
+
+#~ msgid "parameter 1 must be referable"
+#~ msgstr "paramètre 1 doit pouvoir être référencé"
+
+#~ msgid "parameter 2 must be a positive integer"
+#~ msgstr "paramètre 2 doit être un entier positif"
+
+#~ msgid "CARD argument must be powerset mode"
+#~ msgstr "argument CARD doit être un mode powerset"
+
+#~ msgid "expression for DESCR-built-in must be referable"
+#~ msgstr "expression pour DESCR-built-in doit pouvoir être référencé"
+
+#~ msgid "argument to `%s' must be of integer type"
+#~ msgstr "argument de « %s » doit être de type entier"
+
+#~ msgid "argument 1 to `%s' must be of floating point mode"
+#~ msgstr "argument 1 de « %s » doit être en mode virgule flottante"
+
+#~ msgid "first argument to `%s' must be a mode"
+#~ msgstr "premier argument de « %s » doit être un mode"
+
+#~ msgid "READonly modes for %s must have a value"
+#~ msgstr "mode LECTRURE seulement pour %s doit avoir une valeur"
+
+#~ msgid "argument to TERMINATE must be a reference primitive value"
+#~ msgstr "argument à TERMINATE doit être une référence à une valeur primitive"
+
+#~ msgid "argument 1 to INTTIME must be of mode TIME"
+#~ msgstr "argument 1 de INTTIME doit être de mode TIME"
+
+#~ msgid "LENGTH argument must be string, buffer, event mode, text location or mode"
+#~ msgstr "LONGUEUR de l'argument doit être une chaîne, un tampon, un mode d'événement, la localisation d'un texte ou un mode"
+
+#~ msgid "UPPER argument must have a mode, or be a mode"
+#~ msgstr "argument du HAUT doit avoir un mode ou être un mode"
+
+#~ msgid "LOWER argument must have a mode, or be a mode"
+#~ msgstr "argument du BAS doit avoir un mode ou être un mode"
+
+#~ msgid "UPPER argument must be string, array, mode or integer"
+#~ msgstr "argument du HAUT doit être une chaîne, un tableau, un mode ou un entier"
+
+#~ msgid "LOWER argument must be string, array, mode or integer"
+#~ msgstr "argument du BAS doit être une chaîne, un tableau, un mode ou un entier"
+
+#~ msgid "%s argument must be POWERSET mode"
+#~ msgstr "argument %s doit être un mode POWERSET"
+
+#~ msgid "%s called for empty POWERSET"
+#~ msgstr "%s appelé pour un POWERSET vide"
+
+#~ msgid "argument to NUM is not discrete"
+#~ msgstr "argument à NUM n'est pas discret"
+
+#~ msgid "no integer mode which matches expression's mode"
+#~ msgstr "pas de mode entier concordant au mode de l'expresion"
+
+#~ msgid "NUM's parameter is below its mode range"
+#~ msgstr "paramètre NUMÉRIQUE est en dessous de l'étendue de son mode"
+
+#~ msgid "NUM's parameter is above its mode range"
+#~ msgstr "paramètre NUMÉRIQUE est au dessus de l'étendue de son mode"
+
+#~ msgid "cannot take SUCC or PRED of a numbered SET"
+#~ msgstr "ne peut prendre le SUIVANT ou le PRÉCÉDENT d'un ensemble énuméré"
+
+#~ msgid "SUCC or PRED must not be done on a PTR"
+#~ msgstr "SUIVANT ou PRÉCÉDENT ne peuvent être pris sur un PTR"
+
+#~ msgid "SUCC or PRED for a reference type is not standard"
+#~ msgstr "SUIVANT ou PRÉCÉDENT pour un type référencé n'est pas standard"
+
+#~ msgid "SUCC or PRED argument must be a discrete mode"
+#~ msgstr "SUIVANT ou PRÉCÉDENT comme argument doit être en mode discret"
+
+#~ msgid "taking the %s of a value already at its %s value"
+#~ msgstr "prendre le %s d'une valeur déjà à sa %s valeur"
+
+#~ msgid "size applied to a function mode"
+#~ msgstr "taille appliquée au mode de la fonction"
+
+#~ msgid "sizeof applied to a void mode"
+#~ msgstr "sizeof appliqué sur un mode void"
+
+#~ msgid "sizeof applied to an incomplete mode"
+#~ msgstr "sizeof appliqué sur un mode incomplet"
+
+#~ msgid "cannot call a PROCESS, you START a PROCESS"
+#~ msgstr "ne peut lancer un PROCESSUS, vous devez lancer le PROCESSUS"
+
+#~ msgid "%s parameter %d must be a location"
+#~ msgstr "%s paramètre %d doit être une localisation"
+
+#~ msgid "%s parameter %d is READ-only"
+#~ msgstr "%s paramètre %d est en mode LECTURE seulement"
+
+#~ msgid "LOC actual parameter %d is a non-referable location"
+#~ msgstr "LOCALISATION du paramètre actuel %d est dans une localisation non référençable"
+
+#~ msgid "mode mismatch in parameter %d"
+#~ msgstr "non concordance du mode dans le paramètre %d"
+
+#~ msgid "too many arguments to procedure `%s'"
+#~ msgstr "trop d'arguments pour la procédure « %s »"
+
+#~ msgid "too many arguments to procedure"
+#~ msgstr "trop d'arguments pour la procédure"
+
+#~ msgid "too few arguments to procedure `%s'"
+#~ msgstr "pas assez d'argument pour la procédure « %s »"
+
+#~ msgid "too few arguments to procedure"
+#~ msgstr "trop peu d'arguments pour la procédure"
+
+#~ msgid "syntax error (integer used as function)"
+#~ msgstr "erreur de syntaxe (entier utilisé comme un fonction)"
+
+#~ msgid "syntax error - missing operator, comma, or '('?"
+#~ msgstr "erreur de syntaxe - opérateur manquant virgule ou «(»?"
+
+#~ msgid "unimplemented built-in function `%s'"
+#~ msgstr "fonction interne non implantée « %s »"
+
+#~ msgid "internal error - bad built-in function `%s'"
+#~ msgstr "erreur interne - mauvaise fonction interne « %s »"
+
+#~ msgid "empty expression in string index"
+#~ msgstr "expression vide dans la chaîne d'index"
+
+#~ msgid "only one expression allowed in string index"
+#~ msgstr "seul un expression est permise dans une chaîne d'index"
+
+#~ msgid "invalid: primval ( untyped_exprlist )"
+#~ msgstr "invalide: primval ( untyped_exprlist )"
+
+#~ msgid "operand is variable-size bitstring/power-set"
+#~ msgstr "opérande est de taille variable bitstring/power-set"
+
+#~ msgid "tree code `%s' unhandled in build_compare_set_expr"
+#~ msgstr "code de l'arbre « %s » n'est pas traitée dans build_compare_set_expr"
+
+#~ msgid "incompatible modes in concat expression"
+#~ msgstr "modes incompatibles dans l'expression de concaténation"
+
+#~ msgid "invalid operation on array of chars"
+#~ msgstr "opération invalide pour des tableaux de caractères"
+
+#~ msgid "comparison of variant structures is unsafe"
+#~ msgstr "comparaison de structures variantes n'est pas sûre"
+
+#~ msgid "compare with variant records"
+#~ msgstr "comparaison avec des enregistrements vairants"
+
+#~ msgid "incompatible operands to %s"
+#~ msgstr "type d'opérandes incompatibles pour %s"
+
+#~ msgid "relational operator not allowed for this mode"
+#~ msgstr "opérateur relationnel n'est pas permis pour ce mode"
+
+#~ msgid "cannot use %s operator on PROC mode variable"
+#~ msgstr "ne peut utiliser l'opérateur %s pour une variable en mode PROCÉDURE"
+
+#~ msgid "invalid left operand of %s"
+#~ msgstr "opérande de gauche invalide pour %s"
+
+#~ msgid "invalid right operand of %s"
+#~ msgstr "opérande de droite invalide pour %s"
+
+#~ msgid "repetition expression must be constant"
+#~ msgstr "répétitions d'expressions doit être une constante"
+
+#~ msgid "left argument to MOD/REM operator must be integral"
+#~ msgstr "argument de gauche de l'opérateur MOD/REM doit être entier"
+
+#~ msgid "right argument to MOD/REM operator must be integral"
+#~ msgstr "argument de droite de l'opérateur MOD/REM doit être entier"
+
+#~ msgid "right operand of IN is not a powerset"
+#~ msgstr "l'opérande de droite de IN n'est pas un POWERSET"
+
+#~ msgid "left operand of IN incompatible with right operand"
+#~ msgstr "opérande de gauche de IN incompatible avec l'opérande de droite"
+
+#~ msgid "-> operator not allow in constant expression"
+#~ msgstr "opérateur -> n'est pas permis dans l'expression d'une constante"
+
+#~ msgid "taking the address of a function is non-standard"
+#~ msgstr "prendre l'adresse d'une fonction n'est pas standard"
+
+#~ msgid "ADDR requires a LOCATION argument"
+#~ msgstr "ADDR requiert un argument de LOCALISATION"
+
+#~ msgid "-> expression is not addressable"
+#~ msgstr "expression -> n'est pas adressable"
+
+#~ msgid "ADDR parameter must be a LOCATION"
+#~ msgstr "paramètre ADDR doit être une LOCALISATION"
+
+#~ msgid "possible internal error in build_chill_arrow_expr"
+#~ msgstr "erreur interne possible dans build_chill_arrow_expr"
+
+#~ msgid "%s is not addressable"
+#~ msgstr "%s n'est pas adressable"
+
+#~ msgid "repetition count is not an integer constant"
+#~ msgstr "compteur de répétition n'est pas une constante entière"
+
+#~ msgid "repetition count < 0"
+#~ msgstr "compteur de répétition > que 0"
+
+#~ msgid "repetition value not constant"
+#~ msgstr "valeur de répétition n'est pas une constante"
+
+#~ msgid "bitstring repetition of non-constant boolean"
+#~ msgstr "répétition de chaîne de bits d'un booléen non constant"
+
+#~ msgid "string repetition operand is non-constant bitstring"
+#~ msgstr "opérande de répétition de chaînes n'est pas une contante de chaîne de bits"
+
+#~ msgid "non-char, non-bit string repetition"
+#~ msgstr "répétition de chaîne n'est pas de caractères ni de bits"
+
+#~ msgid "right operand of %s is not array of boolean"
+#~ msgstr "opérande de droite de %s n'est pas un tableau de booléens"
+
+#~ msgid "%s operator applied to boolean variable"
+#~ msgstr "opérateur %s appliqué à une variable booléenne"
+
+#~ msgid "non-boolean mode in conditional expression"
+#~ msgstr "mode non booléen dans l'expression conditionnelle"
+
+#~ msgid "decode_constant: invalid component_ref"
+#~ msgstr "decode_constant: component_ref invalide"
+
+#~ msgid "decode_constant: mode and value mismatch"
+#~ msgstr "decode_constant: mode et valeur ne concordent pas"
+
+#~ msgid "decode_constant: cannot decode this mode"
+#~ msgstr "decode_constant: ne peut décoder ce mode"
+
+#~ msgid "decode_constant_selective: mode and value mismatch"
+#~ msgstr "decode_constant_selective: mode et value ne concorde pas"
+
+#~ msgid "decode_constant_selective: cannot decode this mode"
+#~ msgstr "decode_constant_selective: ne peut décoder ce mode"
+
+#~ msgid "FORBID is not yet implemented"
+#~ msgstr "FORBID n'est pas encore implantée"
+
+#~ msgid "function \"really_grant_this\" called for `%s'"
+#~ msgstr "fonction «really_grant_this» appelée pour « %s »"
+
+#~ msgid "non-integral text length"
+#~ msgstr "longueur de texte non entier"
+
+#~ msgid "non-constant text length"
+#~ msgstr "longueur de texte non constante"
+
+#~ msgid "text length must be greater than 0"
+#~ msgstr "la longueur de texte doit être plus grande que 0"
+
+#~ msgid "argument %d of %s must be of mode ASSOCIATION"
+#~ msgstr "argument %d de %s doit être de mode ASSOCIATION"
+
+#~ msgid "argument %d of %s must be a location"
+#~ msgstr "argument %d de %s doit être une localisation"
+
+#~ msgid "argument 2 of ASSOCIATE must not be an empty string"
+#~ msgstr "argument 2 de ASSOCIATE ne doit pas être une chaîne vide"
+
+#~ msgid "argument 2 to ASSOCIATE must be a string"
+#~ msgstr "argument 2 de ASSOCIATE doit être une chaîne"
+
+#~ msgid "argument 3 to ASSOCIATE must be a string"
+#~ msgstr "argument 3 de ASSOCIATE doit être une chaîne"
+
+#~ msgid "too many arguments in call to MODIFY"
+#~ msgstr "trop d'arguments dans l'appel de MODIFY"
+
+#~ msgid "argument 2 of MODIFY must not be an empty string"
+#~ msgstr "argument 2 de MODIFY ne doit pas être une chaîne vide"
+
+#~ msgid "argument 2 to MODIFY must be a string"
+#~ msgstr "argument 2 de MODIFY doit être une chaîne"
+
+#~ msgid "argument 3 to MODIFY must be a string"
+#~ msgstr "argument 3 de MODIFY doit être une chaîne"
+
+#~ msgid "argument %d of %s must be an ACCESS or TEXT mode"
+#~ msgstr "argument %d de %s doit être de mode ACCESS ou TEXT"
+
+#~ msgid "argument 4 of CONNECT must be of mode WHERE"
+#~ msgstr "argument 4 de CONNECT doit être de mode WHERE"
+
+#~ msgid "index expression for ACCESS without index"
+#~ msgstr "expression d'index pour ACCESS sans index"
+
+#~ msgid "incompatible index mode"
+#~ msgstr "mode incompatible d'index"
+
+#~ msgid "argument 3 to CONNECT must be of mode USAGE"
+#~ msgstr "argument 3 de CONNECT doit être de mode USAGE"
+
+#~ msgid "argument %d of %s must be of mode ACCESS"
+#~ msgstr "argument %d de %s doit être de mode ACCESS"
+
+#~ msgid "too few arguments in call to `readrecord'"
+#~ msgstr "pas assez d'arguments dans l'appel de readrecord()"
+
+#~ msgid "store location must not be READonly"
+#~ msgstr "localisation de stockage ne doit pas être en LECTURE seulement"
+
+#~ msgid "too few arguments in call to `writerecord'"
+#~ msgstr "pas assez d'arguments pour l'appel de writerecord()"
+
+#~ msgid "transfer to ACCESS without record mode"
+#~ msgstr "transfer vers ACCESS sans mode d'enregistrement"
+
+#~ msgid "argument %d of %s must be of mode TEXT"
+#~ msgstr "argument %d de %s doit être de mode TEXT"
+
+#~ msgid "TEXT doesn't have a location"
+#~ msgstr "TEXT n'a pas de localisation"
+
+#~ msgid "incompatible index mode for SETETEXTACCESS"
+#~ msgstr "mode d'index incompatible pour SETETEXTACCESS"
+
+#~ msgid "incompatible record mode for SETTEXTACCESS"
+#~ msgstr "mode d'enregistrement incompatible pour SETTEXTACCESS"
+
+#~ msgid "parameter 2 must be a location"
+#~ msgstr "paramètre 2 doit être une localisation"
+
+#~ msgid "incompatible modes in parameter 2"
+#~ msgstr "modes incompatible dans le paramètre 2"
+
+#~ msgid "conditional expression not allowed in this context"
+#~ msgstr "expression conditionnelle n'est pas permise dans ce contexte"
+
+#~ msgid "untyped expression as argument %d"
+#~ msgstr "expression sans type comme argument %d"
+
+#~ msgid "cannot process %d bits integer for READTEXT argument %d"
+#~ msgstr "ne peut traiter %d bits entiers pour l'argument de READTEXT %d"
+
+#~ msgid "cannot process %d bits integer WRITETEXT argument %d"
+#~ msgstr "ne peut traiter %d bits entiers pour l'argument de WRITETEXT %d"
+
+#~ msgid "argument %d is READonly"
+#~ msgstr "argument %d est en LECTURE seulement"
+
+#~ msgid "argument %d must be referable"
+#~ msgstr "argument %d doit pouvoir être référencé"
+
+#~ msgid "cannot process argument %d of WRITETEXT, unknown size"
+#~ msgstr "ne peut traiter l'argument %d de WRITETEXT, taille inconnue"
+
+#~ msgid "cannot process mode of argument %d for %sTEXT"
+#~ msgstr "ne peut traiter le mode de l'argument %d pour %s de type TEXTE"
+
+#~ msgid "too few arguments for this format string"
+#~ msgstr "trop peu d'arguments pour ce format de chaîne"
+
+#~ msgid "type of argument %d invalid for conversion code at offset %d"
+#~ msgstr "type d'argument %d invalide pour la conversion du code au décalage %d"
+
+#~ msgid "unmatched open paren"
+#~ msgstr "parenthèse ouverte non pairée"
+
+#~ msgid "bad format specification character (offset %d)"
+#~ msgstr "caractère de format de spécification erroné (décalage %d)"
+
+#~ msgid "repetition factor overflow (offset %d)"
+#~ msgstr "débordement du facteur de répétition (décalage %d)"
+
+#~ msgid "duplicate qualifier (offset %d)"
+#~ msgstr "duplication du qualificateur (décalage %d)"
+
+#~ msgid "clause width overflow (offset %d)"
+#~ msgstr "débordement de la largeur de la clause (décalage %d)"
+
+#~ msgid "no fraction (offset %d)"
+#~ msgstr "pas de fraction (décalage %d)"
+
+#~ msgid "no fraction width (offset %d)"
+#~ msgstr "pas de largeur de fraction (décalage %d)"
+
+#~ msgid "fraction width overflow (offset %d)"
+#~ msgstr "débordement de largeur de fraction (décalage %d)"
+
+#~ msgid "no exponent (offset %d)"
+#~ msgstr "pas d'exposant (décalage %d)"
+
+#~ msgid "no exponent width (offset %d)"
+#~ msgstr "pas de largeur d'exposant (décalage %d)"
+
+#~ msgid "exponent width overflow (offset %d)"
+#~ msgstr "débordement de largeur d'exposant (décalage %d)"
+
+#~ msgid "internal error in check_format_string"
+#~ msgstr "erreur interne dans check_format_string"
+
+#~ msgid "no padding character (offset %d)"
+#~ msgstr "pas de caractère de remplissage (décalage %d)"
+
+#~ msgid "missing index expression"
+#~ msgstr "expresion d'index manquante"
+
+#~ msgid "too few arguments in call to `writetext'"
+#~ msgstr "pas assez d'arguments pour l'appel de writext()"
+
+#~ msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location"
+#~ msgstr "argument 1 de WRITETEXT doit être TEXT ou CHARS(n) VARYING location"
+
+#~ msgid "`format string' for WRITETEXT must be a CHARACTER string"
+#~ msgstr "«format string» pour WRITETEXT doit être une chaîne de caractères"
+
+#~ msgid "too few arguments in call to `readtext'"
+#~ msgstr "trop peu d'arguments dans l'appel de readtext()"
+
+#~ msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression"
+#~ msgstr "argument 1 de READTEXT doit être de localisation TEXT ou CHARS(n) [ VARYING ] expression"
+
+#~ msgid "`format string' for READTEXT must be a CHARACTER string"
+#~ msgstr "«format string» de READTEXT doit être une chaîne de caractères"
+
+#~ msgid "non-constant expression"
+#~ msgstr "expression n'est pas une constante"
+
+#~ msgid "ignoring case upon input and"
+#~ msgstr "ignorer la casse durant l'entrée et"
+
+#~ msgid "making special words uppercase wouldn't work"
+#~ msgstr "rendre les mots spéciaux en majuscule ne fonctionnerait pas"
+
+#~ msgid "making special words uppercase and"
+#~ msgstr "rendant les mots spéciaux en majuscule et"
+
+#~ msgid " ignoring case upon input wouldn't work"
+#~ msgstr " ignorer la casse durant ne fonctionnerait pas"
+
+#~ msgid "invalid C'xx' "
+#~ msgstr "C«xx» invalide"
+
+#~ msgid "malformed exponent part of floating-point literal"
+#~ msgstr "partie de l'exposant mal composée du litéral en virgule flottante"
+
+#~ msgid "real number exceeds range of REAL"
+#~ msgstr "nombre réel excède les limites de REAL"
+
+#~ msgid "end-of-file in '<>' directive"
+#~ msgstr "fin de fichier dans la directive «<>»"
+
+#~ msgid "unrecognized compiler directive"
+#~ msgstr "directive du compilateur non reconnue"
+
+#~ msgid "unrecognized compiler directive `%s'"
+#~ msgstr "directive du compilateur « %s » non reconnue"
+
+#~ msgid "unterminated control sequence"
+#~ msgstr "séquence de contrôle non terminée"
+
+#~ msgid "invalid integer literal in control sequence"
+#~ msgstr "chaîne d'entiers invalide dans la séquence de contrôle"
+
+#~ msgid "control sequence overflow"
+#~ msgstr "débordement de la chaîne de contrôle"
+
+#~ msgid "invalid base in read control sequence"
+#~ msgstr "base invalide dans la séquence de contrôle de lecture"
+
+#~ msgid "unterminated string literal"
+#~ msgstr "chaîne litérale non terminée"
+
+#~ msgid "invalid number format `%s'"
+#~ msgstr "format de numéro « %s » invalide"
+
+#~ msgid "integer literal too big"
+#~ msgstr "litéral d'entier trop grand"
+
+#~ msgid "can't find %s"
+#~ msgstr "ne peut repérer %s"
+
+#~ msgid "USE_SEIZE_FILE directive must be followed by string"
+#~ msgstr "directive USE_SEIZE_FILE doit être suivie d'une chaîne"
+
+#~ msgid "missing `=' in compiler directive"
+#~ msgstr "«=» manquant dans la directtive au compilateur"
+
+#~ msgid "invalid value follows `=' in compiler directive"
+#~ msgstr "valeur invalide suivant «=» dans la directive au compilateur"
+
+#~ msgid "invalid `%c' character in name"
+#~ msgstr "caractère «%c» invalide dans le nom"
+
+#~ msgid "`%s' not integer constant synonym "
+#~ msgstr "« %s » n'est pas un synonyme de constante entière"
+
+#~ msgid "value out of range in compiler directive"
+#~ msgstr "valeur hors gamme dans la directive au compilateur"
+
+#~ msgid "no modules seen"
+#~ msgstr "aucun module vu"
+
+#~ msgid "modeless tuple not allowed in this context"
+#~ msgstr "tuple sans modèle n'est pas permis dans ce contexte"
+
+#~ msgid "IN expression does not have a mode"
+#~ msgstr "expression IN n'a pas de mode"
+
+#~ msgid "location enumeration for BOOLS"
+#~ msgstr "localisation d'énumération pour BOOLÉENS"
+
+#~ msgid "location enumeration for bit-packed arrays"
+#~ msgstr "localisation d'énumération tableaux de bits paquetés"
+
+#~ msgid "loop's IN expression is not a composite object"
+#~ msgstr "boucle dans l'expression IN n'est pas un objet composite"
+
+#~ msgid "start expr must have discrete mode"
+#~ msgstr "début de l'expression doit avoir un mode discret"
+
+#~ msgid "DO FOR start expression is a numbered SET"
+#~ msgstr "expression de départ de DO FOR est un SET énuméré"
+
+#~ msgid "TO expression is a numbered SET"
+#~ msgstr "expression TO est un SET énuméré"
+
+#~ msgid "TO expr must have discrete mode"
+#~ msgstr "expression TO doit avoir un mode discret"
+
+#~ msgid "start expr and TO expr must be compatible"
+#~ msgstr "début de l'expression et l'expression TO doivent être compatibles"
+
+#~ msgid "BY expr must have discrete mode"
+#~ msgstr "expression BY doit avoir un mode discret"
+
+#~ msgid "start expr and BY expr must be compatible"
+#~ msgstr "début de l'expression et l'expression BY doivent être compatibles"
+
+#~ msgid "loop identifier undeclared"
+#~ msgstr "identificateur de boucle non déclaré"
+
+#~ msgid "loop variable incompatible with start expression"
+#~ msgstr "variable de boucle incompatible avec le début de l'expression"
+
+#~ msgid "body of DO FOR will never execute"
+#~ msgstr "corps de DO FOR ne sera jamais exécuté"
+
+#~ msgid "BY expression is negative or zero"
+#~ msgstr "expression BY est négative ou zéro"
+
+#~ msgid "can't iterate through array of BOOL"
+#~ msgstr "ne peut faire d'itération à travers le tableau de BOOLÉENS"
+
+#~ msgid "Can't iterate through array of BOOL"
+#~ msgstr "ne peut faire d'itération à travers le tableau de BOOLÉENS"
+
+#~ msgid "there was no start label to match the end label '%s'"
+#~ msgstr "il n'y a pas d'étiquette de départ concordant avec l'étiquette de fin « %s »"
+
+#~ msgid "start label '%s' does not match end label '%s'"
+#~ msgstr "étiquette de départ « %s » ne concorde pas avec l'étiquette de fin « %s »"
+
+#~ msgid "no RETURN or RESULT in procedure"
+#~ msgstr "pas de RETURN ou RESULT dans la procédure"
+
+#~ msgid "PREFIXED clause with no prelix in unlabeled module"
+#~ msgstr "cluase PREFIXÉ sans no prelix dans un module sans étiquette"
+
+#~ msgid "'%s!' is not followed by an identifier"
+#~ msgstr "« %s » n'est pas suivi d'un identificateur"
+
+#~ msgid "expected a name string here"
+#~ msgstr "un nom de chaîne est attendu ici"
+
+#~ msgid "`%s' undeclared"
+#~ msgstr "« %s » non déclaré"
+
+#~ msgid "action not allowed in SPEC MODULE"
+#~ msgstr "action n,est pas permise dans le MODULE SPEC"
+
+#~ msgid "missing defining occurrence"
+#~ msgstr "définition d'occurence manquante"
+
+#~ msgid "bad defining occurrence following ','"
+#~ msgstr "définition d'occurence erronée suivant «,»"
+
+#~ msgid "missing '(' in exception list"
+#~ msgstr "«)» manquante dans la liste d'exceptions"
+
+#~ msgid "ON exception names must be unique"
+#~ msgstr "noms d'exception ON doivent être uniques"
+
+#~ msgid "syntax error in exception list"
+#~ msgstr "erreur de syntaxe dans la liste d'exception"
+
+#~ msgid "empty ON-condition"
+#~ msgstr "condition ON vide"
+
+#~ msgid "INIT not allowed at loc-identity declaration"
+#~ msgstr "INIT n'est pas permis dans la déclaration d'identité de localisation"
+
+#~ msgid "'=' used where ':=' is required"
+#~ msgstr "«=» utilisé où «:=» est requis"
+
+#~ msgid "loc-identity declaration without initialization"
+#~ msgstr "déclaration de loc n'a pas d'initialisation"
+
+#~ msgid "bad syntax following FORBID"
+#~ msgstr "syntaxe erronée suivant FORBID"
+
+#~ msgid "expected a postfix name here"
+#~ msgstr "nom postfixe attendu ici"
+
+#~ msgid "expected another rename clause"
+#~ msgstr "attendait une autre clause de changement de nom"
+
+#~ msgid "NONREF specific without LOC in result attribute"
+#~ msgstr "NONREF spécifique sans LOCALISATION dans l'attribut résultant"
+
+#~ msgid "DYNAMIC specific without LOC in result attribute"
+#~ msgstr "DYNAMIC spécifique sans LOCALISATION dans l'attribut résultant"
+
+#~ msgid "exception names must be unique"
+#~ msgstr "noms d'exceptions doivent être uniques"
+
+#~ msgid "must specify a PROCESS name"
+#~ msgstr "doit spécifier un nom de processus"
+
+#~ msgid "SIGNAL must be in global reach"
+#~ msgstr "SIGNAL doit être dans l'étendue globale"
+
+#~ msgid "syntax error while parsing signal definition statement"
+#~ msgstr "erreur de syntaxe lors de l'analyse syntaxique de la déclaration de la définition"
+
+#~ msgid "case range list"
+#~ msgstr "liste d'étendue du CASE"
+
+#~ msgid "misplaced colon in case label"
+#~ msgstr "«:» mal placés dans l'étiquette du CASE"
+
+#~ msgid "unrecognized case label list after ','"
+#~ msgstr "étiquette non reconnue du CASE après «,»"
+
+#~ msgid "readonly location modified by 'asm'"
+#~ msgstr "localisation en lecture seulement modifiée par «asm»"
+
+#~ msgid "expected 'TO' in step enumeration"
+#~ msgstr "attendait «TO» dans l'énumération du PAS"
+
+#~ msgid "expected 'IN' in FOR control here"
+#~ msgstr "attendait «IN» dans le contrôle du FOR ici"
+
+#~ msgid "missing DELAY CASE alternative"
+#~ msgstr "alternative de délais du CASE manquante"
+
+#~ msgid "non-referable location in DO WITH"
+#~ msgstr "localisation non référençable dans le DO WITH"
+
+#~ msgid "WITH element must be of STRUCT mode"
+#~ msgstr "élément WITH doit être de mode STRUCT"
+
+#~ msgid "missing ')' in signal/buffer receive alternative"
+#~ msgstr "«)» manquant dans la réception alternative de signal/tampon"
+
+#~ msgid "misplaced 'IN' in signal/buffer receive alternative"
+#~ msgstr "«IN» mal placé dans la réception alternative de signal/tampon"
+
+#~ msgid "missing RECEIVE alternative"
+#~ msgstr "RECEIVE alternative manquant"
+
+#~ msgid "PROCESS copy number must be integer"
+#~ msgstr "processus de copie de nombres doit être entier"
+
+#~ msgid "missing parenthesis for procedure call"
+#~ msgstr "parenthèse manquante dans l'appel de procédure"
+
+#~ msgid "syntax error in action"
+#~ msgstr "erreur de syntaxe dans l,action"
+
+#~ msgid "no handler is permitted on this action"
+#~ msgstr "pas de handler permis pour cette action"
+
+#~ msgid "definition follows action"
+#~ msgstr "définition suit l'action"
+
+#~ msgid "bad tuple field name list"
+#~ msgstr "nom erroné de liste de champ de tuple"
+
+#~ msgid "invalid syntax for label in tuple"
+#~ msgstr "syntaxe invalide pour l'étiquette dans le tuple"
+
+#~ msgid "bad syntax in tuple"
+#~ msgstr "syntaxe erronée dans le tuple"
+
+#~ msgid "non-mode name before tuple"
+#~ msgstr "nom sans mode avant le tuple"
+
+#~ msgid "invalid expression/location syntax"
+#~ msgstr "expression/localisation syntaxe invalide"
+
+#~ msgid "RECEIVE expression"
+#~ msgstr "expression RECEIVE"
+
+#~ msgid "there should not be a ';' here"
+#~ msgstr "il ne devrait pas y avoir un «;» ici"
+
+#~ msgid "missing ELSE/ELSIF in IF expression"
+#~ msgstr "ELSE/ELSIF manquant dans l'expresion IF"
+
+#~ msgid "conditional expression not allowed inside parentheses"
+#~ msgstr "expression conditionnelle non permise à l'intérieur des parenthèses"
+
+#~ msgid "mode-less tuple not allowed inside parentheses"
+#~ msgstr "tuple sans modèle n'est pas permis à l'intérieur des parenthèses"
+
+#~ msgid "mixed numbered and unnumbered set elements is not standard"
+#~ msgstr "éléments de l'ensemble numérotés et non numérotés mélangés n'est pas standard"
+
+#~ msgid "SET mode must define at least one named value"
+#~ msgstr "mode SET doit définir au moins une valeur nommée"
+
+#~ msgid "POS not allowed for ARRAY"
+#~ msgstr "POSITION n'est pas permise pour un TABLEAU"
+
+#~ msgid "bad field name following ','"
+#~ msgstr "nom de champ erroné après «,»"
+
+#~ msgid "expected ':' in structure variant alternative"
+#~ msgstr "«:» attendu dans la structure variante alternative"
+
+#~ msgid "missing field"
+#~ msgstr "champ manquant"
+
+#~ msgid "VARYING bit-strings not implemented"
+#~ msgstr "chaîne variante de bits n'est pas implantée"
+
+#~ msgid "BUFFER modes may not be readonly"
+#~ msgstr "modes des TAMPOONS ne peuvent pas être en LECTURE seulement"
+
+#~ msgid "EVENT modes may not be readonly"
+#~ msgstr "modes d'ÉVÉVEMENTS ne peuvent pas être en LECTURE seulement"
+
+#~ msgid "SIGNAL is not a valid mode"
+#~ msgstr "SIGNAL n'est pas un mode valide"
+
+#~ msgid "syntax error - missing mode"
+#~ msgstr "erreur de syntaxe - mode manquant"
+
+#~ msgid "syntax error - expected a module or end of file"
+#~ msgstr "erreur de syntaxe - module attendu ou fin de fichier"
+
+#~ msgid "  `%s', which depends on ..."
+#~ msgstr "  « %s », laquel dépend de  ..."
+
+#~ msgid "cycle: `%s' depends on ..."
+#~ msgstr "cycle: « %s » dépend de ..."
+
+#~ msgid "  `%s'"
+#~ msgstr "  « %s »"
+
+#~ msgid "SYN of this mode not allowed"
+#~ msgstr "SYN de de mode n'est pas permis"
+
+#~ msgid "mode of SYN incompatible with value"
+#~ msgstr "mode de SYN incompatible avec la valeur"
+
+#~ msgid "SYN value outside range of its mode"
+#~ msgstr "valeur de SYN en dehors de l'étendue de son mode"
+
+#~ msgid "INIT string too large for mode"
+#~ msgstr "chaîne d'INIT trop grande pour ce mode"
+
+#~ msgid "mode with non-value property in signal definition"
+#~ msgstr "mode sans propriété de non valeur dans la définition de signal"
+
+#~ msgid "RETURNS spec with invalid mode"
+#~ msgstr "spécification de RETOUR avec un mode invalide"
+
+#~ msgid "operand to REF is not a mode"
+#~ msgstr "l'opérande de REF n'est pas un mode"
+
+#~ msgid "field with non-value mode in variant structure not allowed"
+#~ msgstr "champ avec un mode non valeur dans une structure variante n'est pas permis"
+
+#~ msgid "buffer element mode must not have non-value property"
+#~ msgstr "mode élément du tampon ne doit pas avoir une propriété de non valeur"
+
+#~ msgid "recordmode must not have the non-value property"
+#~ msgstr "mode d'enregistrement ne doit pas avoir une propriété de non valeur"
+
+#~ msgid "invalid attribute for argument `%s' (only IN or LOC allowed)"
+#~ msgstr "attribue invalide pour l'argument « %s » (seul IN ou LOC est permis)"
+
+#~ msgid "PROCESS may only be declared at module level"
+#~ msgstr "PROCESSUS peut seulement être déclaré au niveau module"
+
+#~ msgid "process name %s never declared"
+#~ msgstr "nom de processus %s n'a jamais été déclaré"
+
+#~ msgid "you may only START a process, not a proc"
+#~ msgstr "vous pouvez seulement LANCER un processus, pas une procédure"
+
+#~ msgid "SET expression not a location"
+#~ msgstr "expression de l'ENSEMBLE n'est pas une localisation"
+
+#~ msgid "SET location must be INSTANCE mode"
+#~ msgstr "localisation de l'ENSEMBLE doit être un mode d'INSTANCE"
+
+#~ msgid "too many arguments to process `%s'"
+#~ msgstr "trop d'arguments à traiter pour « %s »"
+
+#~ msgid "too many arguments to process"
+#~ msgstr "trop d'arguments à traiter"
+
+#~ msgid "too few arguments to process `%s'"
+#~ msgstr "pas assez d'arguments pour traiter « %s »"
+
+#~ msgid "too few arguments to process"
+#~ msgstr "trop peu d'arguments pour le traitement"
+
+#~ msgid "COPY_NUMBER argument must be INSTANCE expression"
+#~ msgstr "argument de COPY_NUMBER doit être une expression d'INSTANCE"
+
+#~ msgid "GEN_CODE argument must be a process or signal name"
+#~ msgstr "argument GEN_CODE doit être une processus ou un nom de signal"
+
+#~ msgid "GEN_INST parameter 2 must be an integer mode"
+#~ msgstr "paramètre 2 de GEN_INST doit être un mode entier"
+
+#~ msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression"
+#~ msgstr "paramètre 1 de GEN_INST doit être une PROCESSUS ou une expression entière"
+
+#~ msgid "%s is not a declared process"
+#~ msgstr "%s n'est pas processus déclaré"
+
+#~ msgid "PROC_TYPE argument must be INSTANCE expression"
+#~ msgstr "argument de PROC_TYPE doit être une expression d'INSTANCE"
+
+#~ msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location"
+#~ msgstr "argument de QUEUE_LENGTH doit avoir une localisation de TAMPON/ÉVÉNEMENT"
+
+#~ msgid "SEND requires a SIGNAL; %s is not a SIGNAL name"
+#~ msgstr "TRANSMISSION requiert un SIGNAL; %s n'est pas un nom de SIGNAL"
+
+#~ msgid "too many values for SIGNAL `%s'"
+#~ msgstr "trop de valeurs pour le SIGNAL « %s »"
+
+#~ msgid "too few values for SIGNAL `%s'"
+#~ msgstr "pas assez de valeurs pour le SIGNAL « %s »"
+
+#~ msgid "signal sent without priority"
+#~ msgstr "signal transmis sans priorité"
+
+#~ msgid " and no default priority was set."
+#~ msgstr " et aucune priorité par défaut n'a été définie."
+
+#~ msgid " PRIORITY defaulted to 0"
+#~ msgstr " PRIORITÉ par défaut est 0"
+
+#~ msgid "SEND without a destination instance"
+#~ msgstr "TRANSMISSION sans instance de destination"
+
+#~ msgid " and no destination process specified"
+#~ msgstr " et aucune destination de processus spécifiée"
+
+#~ msgid " for the signal"
+#~ msgstr " pour le signal"
+
+#~ msgid "SEND to ANY copy of process `%s'"
+#~ msgstr "TRANSMISSION vers N'IMPORTE QUELLE copie de processus « %s »"
+
+#~ msgid "SEND TO must be an INSTANCE mode"
+#~ msgstr "TRANSMISSION TO doit avoir un mode d'INSTANCE"
+
+#~ msgid "SEND WITH must have a mode"
+#~ msgstr "TRANSMISSION WITH doit avoir un mode"
+
+#~ msgid "internal error: RECEIVE CASE stack invalid"
+#~ msgstr "erreur interne: pile du RECEIVE CASE invalide"
+
+#~ msgid "SET requires INSTANCE location"
+#~ msgstr "ENSEMBLE requiert une INSTANCE de localisation"
+
+#~ msgid "SIGNAL in RECEIVE CASE alternative follows"
+#~ msgstr "SIGNAL dans un CASE de RÉCEPTION alternative suit"
+
+#~ msgid " a BUFFER name on line %d"
+#~ msgstr " un nom de TAMPON sur la ligne %d"
+
+#~ msgid "SIGNAL `%s' has no data fields"
+#~ msgstr "SIGNAL « %s » n'a pas de champs de données"
+
+#~ msgid "SIGNAL `%s' requires data fields"
+#~ msgstr "SIGNAL « %s » requiert des champs de données"
+
+#~ msgid "too few data fields provided for `%s'"
+#~ msgstr "trop peu de champs de données fournies pour « %s »"
+
+#~ msgid "too many data fields provided for `%s'"
+#~ msgstr "trop de champs de données fournis pour « %s »"
+
+#~ msgid "BUFFER in RECEIVE CASE alternative follows"
+#~ msgstr "TAMPON du CASE de RÉCEPTION alternative suit"
+
+#~ msgid " a SIGNAL name on line %d"
+#~ msgstr " un nom de SIGNAL sur la ligne %d"
+
+#~ msgid "BUFFER in RECEIVE CASE alternative must be a location"
+#~ msgstr "TAMPON dans un CASE de RÉCEPTION alternative doit être une localisation "
+
+#~ msgid "buffer receive alternative requires only 1 defining occurrence"
+#~ msgstr "tampon de réception alternatif requiert une seule définition d'occurence"
+
+#~ msgid "incompatible modes in receive buffer alternative"
+#~ msgstr "modes incompatibles dans le tampon alternatif de réception"
+
+#~ msgid "defining occurrence in receive buffer alternative must be a location"
+#~ msgstr "définition d'occurence dans un tampon de réception alternatif doit être une localisation"
+
+#~ msgid "buffer receive alternative without `IN location'"
+#~ msgstr "tampon de réception alternative sans «IN location»"
+
+#~ msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location"
+#~ msgstr "alternative de RÉCEPTION DE CASE doit spécifier un nom de SIGNAL ou la localisation d'un TAMPON"
+
+#~ msgid "RECEIVE CASE without alternatives"
+#~ msgstr "RÉCEPTION DE CASE sans alternative"
+
+#~ msgid "CONTINUE requires an event location"
+#~ msgstr "CONTINUE requiert une localisation d'événement"
+
+#~ msgid "PRIORITY must be of integer type"
+#~ msgstr "PRIORITÉ doit avoir un type entier"
+
+#~ msgid "delay alternative must be an EVENT location"
+#~ msgstr "délai alternatif doit avoir une localisation d'ÉVÉNEMENT"
+
+#~ msgid "DELAY CASE without alternatives"
+#~ msgstr "DÉLAI du CASE sans alternative"
+
+#~ msgid "DELAY action requires an event location"
+#~ msgstr "DÉLAI d'action requiert une localisation d'événement"
+
+#~ msgid "PRIORITY in DELAY action must be of integer type"
+#~ msgstr "PRIORITÉ dans le DÉLAI d'action doit avoir un type entier"
+
+#~ msgid "DELAY action without priority."
+#~ msgstr "DÉLAI d'action sans priorité"
+
+#~ msgid "send buffer action requires a BUFFER location"
+#~ msgstr "le tampon d'expédition de l'action requiert une localisation de TAMPON"
+
+#~ msgid "there must be only 1 value for send buffer action"
+#~ msgstr "il ne doit y avoir qu'une valeur pour le tampon de transmission d'action"
+
+#~ msgid "convert failed for send buffer action"
+#~ msgstr "échec de voncversion pour le tampon de transmission d'action"
+
+#~ msgid "incompatible modes in send buffer action"
+#~ msgstr "modes incompatibles dans le tampon de transmission d'action"
+
+#~ msgid "buffer sent without priority"
+#~ msgstr "tampon de transmission sans priorité"
+
+#~ msgid "WITH not allowed for send buffer action"
+#~ msgstr "WITH n'est pas permis pour le tampon de transmission d'action"
+
+#~ msgid "TO not allowed for send buffer action"
+#~ msgstr "TO n'est pas permis pour le tampon de transmission d'action"
+
+#~ msgid "SEND requires a BUFFER; `%s' is not a BUFFER name"
+#~ msgstr "SEND requiert un TAMPON; « %s » n'est pas un nom de TAMPON"
+
+#~ msgid "non-integral max queue size for EVENT/BUFFER mode"
+#~ msgstr "taille maximale de queue n'est pas un entier pour un mode ÉVÉNEMENT/TAMPON"
+
+#~ msgid "non-constant max queue size for EVENT/BUFFER mode"
+#~ msgstr "taille maximale de queue n'est pas une constante pour un mode ÉVÉNEMENT/TAMPON"
+
+#~ msgid "max queue_size for EVENT/BUFFER is not positive"
+#~ msgstr "taille maximale de queue pour un ÉVÉNEMENT/TAMPON n'est pas positive"
+
+#~ msgid "absolute time value must be of mode TIME"
+#~ msgstr "valeur absolue de temps doit être du mode TEMPS"
+
+#~ msgid "duration primitive value must be of mode DURATION"
+#~ msgstr "valeur de la durée de la primitive doit être un mode de DURÉE"
+
+#~ msgid "string length > UPPER (UINT)"
+#~ msgstr "longueur de la chaîne > UPPER (UINT)"
+
+#~ msgid "can only build a powerset from a discrete mode"
+#~ msgstr "peut seulement construire un powerset à partir d'un mode discret"
+
+#~ msgid "non-constant bitstring size invalid"
+#~ msgstr "taille du champ de bits n'est pas une constante valide"
+
+#~ msgid "non-constant powerset size invalid"
+#~ msgstr "taille de la non constante du powerset est invalide"
+
+#~ msgid "array or string index is a mode (instead of a value)"
+#~ msgstr "tableau ou chaîne d'index est une mode (au lieu d'une valeur)"
+
+#~ msgid "index is not an integer expression"
+#~ msgstr "index n'est pas une expression entière"
+
+#~ msgid "index is not discrete"
+#~ msgstr "index n'est pas discret"
+
+#~ msgid "possible internal error - slice argument is neither referable nor constant"
+#~ msgstr "erreur interne possible - l'argument de découpage n'est ni référençable ni une constante"
+
+#~ msgid "bit array slice with non-constant length"
+#~ msgstr "découpage de tableau de bits avec une longueur non constante"
+
+#~ msgid "bitstring slice with non-constant length"
+#~ msgstr "découpage de chaîne de bits avec une longueur non constante"
+
+#~ msgid "slice operation on non-array, non-bitstring value not supported"
+#~ msgstr "opération de découpage sur un non tableau ou sur une valeur non chaîne de bits n'est pas supportée"
+
+#~ msgid "can only take slice of array or string"
+#~ msgstr "peut seulement faire le découpage d'un tableau ou d'une chaîne"
+
+#~ msgid "slice length out-of-range"
+#~ msgstr "tranche de la longueur est hors gamme"
+
+#~ msgid "too many index expressions"
+#~ msgstr "trop d'expressions d'index"
+
+#~ msgid "array index is not discrete"
+#~ msgstr "index de tableau n'est pas discret"
+
+#~ msgid "invalid compound index for bitstring mode"
+#~ msgstr "index composé invalide pour un mode chaîne de bits"
+
+#~ msgid "conversions from variable_size value"
+#~ msgstr "conversions à partir de la valeur variable_size"
+
+#~ msgid "conversions to variable_size mode"
+#~ msgstr "conversion vers un mode variable_size"
+
+#~ msgid "cannot convert to float"
+#~ msgstr "ne peut convertir en un type flottant"
+
+#~ msgid "cannot convert float to this mode"
+#~ msgstr "ne peut convertir un flottant vers ce mode"
+
+#~ msgid "OVERFLOW in expression conversion"
+#~ msgstr "DÉBORDEMENT dans la conversion d'expression"
+
+#~ msgid "overflow (not inside function)"
+#~ msgstr "débordement (pas à l'intérieur de la fonction)"
+
+#~ msgid "possible overflow (not inside function)"
+#~ msgstr "débordement possible (pas à l'intérieur de la fonction)"
+
+#~ msgid "expression will always cause OVERFLOW"
+#~ msgstr "expression causera toujours un DÉBORDEMENT"
+
+#~ msgid "not implemented: constant conversion from that kind of expression"
+#~ msgstr "pas implanté: conversion de constante depuis quel sorte d'expression"
+
+#~ msgid "not implemented: constant conversion to that kind of mode"
+#~ msgstr "pas implanté: conversion de constante vers quell sorte de mode"
+
+#~ msgid "non-standard, non-portable value conversion"
+#~ msgstr "non standard, conversion de valeur non portable"
+
+#~ msgid "location conversion between differently-sized modes"
+#~ msgstr "conversion de localisation entre des mode de taille différentes"
+
+#~ msgid "size %d of BIN too big - no such integer mode"
+#~ msgstr "taille %d de BIN trop grand - pas de tel mode entier"
+
+#~ msgid "BIN in pass 2"
+#~ msgstr "BIN dans la passe 2"
+
+#~ msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET"
+#~ msgstr "mode du tuple n'est pas ARRAY, STRUCT, ni POWERSET"
+
+#~ msgid "internal error in chill_root_resulting_mode"
+#~ msgstr "erreur interne dans chill_root_resulting_mode"
+
+#~ msgid "string lengths not equal"
+#~ msgstr "longueurs de chaînes inégales"
+
+#~ msgid "can't do ARRAY assignment - too large"
+#~ msgstr "ne peut effectuer une affectation de tableau - trop grand"
+
+#~ msgid "rhs of array assignment is not addressable"
+#~ msgstr "rhs de l'affectation de tableau n'est pas adressable"
+
+#~ msgid "non-constant expression for BIN"
+#~ msgstr "expression n'est pas un constante pour BIN"
+
+#~ msgid "expression for BIN must not be negative"
+#~ msgstr "expression pour BIN ne doit pas être négatif"
+
+#~ msgid "cannot process BIN (>32)"
+#~ msgstr "ne peut traiter BIN (>32)"
+
+#~ msgid "bounds of range are not compatible"
+#~ msgstr "bornes de l'étendue ne sont pas compatibles"
+
+#~ msgid "negative string length"
+#~ msgstr "longueur négative de chaîne"
+
+#~ msgid "range's lower bound and parent mode don't match"
+#~ msgstr "borne inférieure de l'étendue et le mode parent ne concordent pas"
+
+#~ msgid "range's upper bound and parent mode don't match"
+#~ msgstr "borne supérieure de l'étendue et le mode parent ne concordent pas"
+
+#~ msgid "making range from non-mode"
+#~ msgstr "faisant une étendue à partir de non mode"
+
+#~ msgid "floating point ranges"
+#~ msgstr "étendues en virgules flottantes"
+
+#~ msgid "range mode has non-constant limits"
+#~ msgstr "mode d'étendue a des limites non contantes"
+
+#~ msgid "range's high bound < mode's low bound"
+#~ msgstr "borne supérieure de l'étendue < mode de la borne inférieure"
+
+#~ msgid "range's high bound > mode's high bound"
+#~ msgstr "borne supérieure de l'étendue > mode de la borne supérieure"
+
+#~ msgid "range mode high bound < range mode low bound"
+#~ msgstr "borne supérieure de l'étendue < mode de l'étendue la borne inférieure"
+
+#~ msgid "range's low bound < mode's low bound"
+#~ msgstr "borne inférieure de l'étendue < mode de la borne inférieure"
+
+#~ msgid "range's low bound > mode's high bound"
+#~ msgstr "borne inférieure de l'étendue > mode de la borne supérieure"
+
+#~ msgid "stepsize in STEP must be an integer constant"
+#~ msgstr "taille du PAS doit être une contante entière"
+
+#~ msgid "stepsize in STEP must be > 0"
+#~ msgstr "taille du PAS doit être > 0"
+
+#~ msgid "stepsize in STEP must be the natural width of the array element mode"
+#~ msgstr "taille du PAS doit être de largeur naturelle au mode d'éléments du tableau"
+
+#~ msgid "starting word in POS must be an integer constant"
+#~ msgstr "début du mot dans la POSITION doit être une constante entière"
+
+#~ msgid "starting word in POS must be >= 0"
+#~ msgstr "début du mot dans la POSITION doit être >= 0"
+
+#~ msgid "starting word in POS within STEP must be 0"
+#~ msgstr "début du mot dans la POSITION à l'intérieur du PAS doit être 0"
+
+#~ msgid "starting bit in POS must be an integer constant"
+#~ msgstr "bit de départ dans la POSITION doit être une constante entière"
+
+#~ msgid "starting bit in POS within STEP must be 0"
+#~ msgstr "bit de départ dans la POSITION à l'intérieur du PAS doit être 0"
+
+#~ msgid "starting bit in POS must be >= 0"
+#~ msgstr "bit de départ dans la POSITION doit être >= 0"
+
+#~ msgid "starting bit in POS must be < the width of a word"
+#~ msgstr "bit de départ dans la POSITION doit être < que la largeur d'un mot"
+
+#~ msgid "length in POS must be > 0"
+#~ msgstr "longueur dans la POSITION doit être > 0"
+
+#~ msgid "end bit in POS must be an integer constant"
+#~ msgstr "bit final dans la POSITION doit être une constante entière"
+
+#~ msgid "end bit in POS must be >= the start bit"
+#~ msgstr "bit final dans la POSITION doit être >= bit de départ"
+
+#~ msgid "end bit in POS must be < the width of a word"
+#~ msgstr "bit final dans la POSITION doit être <  la largeur de mot"
+
+#~ msgid "the length specified on POS within STEP must be the natural length of the array element type"
+#~ msgstr "la longueur spécifié de positionnement à l'intérieur du pas doit être naturelle à la longueur des types des éléments du tableau"
+
+#~ msgid "step size in STEP must be >= the length in POS"
+#~ msgstr "la taille du PAS doit être >= la longueur dans la POSITION"
+
+#~ msgid "array index must be a range, not a single integer"
+#~ msgstr "l'index d'un tableau doit être une étendue, pas un simple entier"
+
+#~ msgid "array index is not a discrete mode"
+#~ msgstr "index du tableau n'a pas un mode discret"
+
+#~ msgid "the length specified on POS must be the natural length of the field type"
+#~ msgstr "la longueur spécifiée de positionnement doit être de longueur naturel au type du champ"
+
+#~ msgid "STRUCT fields must be layed out in monotonically increasing order"
+#~ msgstr "champs STRUCT doit avoir été disposés en ordre monotonique croissant"
+
+#~ msgid "if one field has a POS layout, then all fields must have a POS layout"
+#~ msgstr "si un champ a une disposition de positionnement, alors tous les champs doivent avoir une disposition de positionnement"
+
+#~ msgid "parameterized structures not implemented"
+#~ msgstr "structure paramétrisées ne sont pas implantées"
+
+#~ msgid "invalid parameterized type"
+#~ msgstr "type paramétrisé invalide"
+
+#~ msgid "abstract virtual `%#D' called from constructor"
+#~ msgstr "abstrait virtuel « %#D » appelé à partir d'un constructeur"
+
+#~ msgid "abstract virtual `%#D' called from destructor"
+#~ msgstr "abstrait virtuel « %#D » appelé à partir d'un destructeur"
+
+#~ msgid "discarding `const' applied to a reference"
+#~ msgstr "mis de côté «const» appliqué à une référence"
+
+#~ msgid "discarding `volatile' applied to a reference"
+#~ msgstr "mis de côté «volatile» appliqué à une référence"
+
+#~ msgid "parser lost in parsing declaration of `%D'"
+#~ msgstr "analyseur syntaxique perdu dans l'analyse de la déclaration de «%D»"
+
+#~ msgid "methods cannot be converted to function pointers"
+#~ msgstr "méthode ne peuvent être converties en des pointeurs de fonction"
+
+#~ msgid "ambiguous request for method pointer `%s'"
+#~ msgstr "requête ambigue pour la méthode sur pointeur « %s »"
+
+#~ msgid "`%T' cannot be `restrict'-qualified"
+#~ msgstr "«%T» ne peut être «restrict»-qualified"
+
+#~ msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified"
+#~ msgstr "«%T» ne peut être «const»-, «volatile»- ou «restrict»-qualified"
+
+#~ msgid "invalid reference to NULL ptr, use ptr-to-member instead"
+#~ msgstr "référence invalide à un pointeur NUL, utiliser pointeur de membre à la place"
+
+#~ msgid "internal error #%d"
+#~ msgstr "erreur interne #%d"
+
+#~ msgid "can't create cross-reference file `%s'"
+#~ msgstr "ne peut produire un fichier de références croisées « %s »"
+
+#~ msgid "support non-32-bit machines better as of version 0.6"
+#~ msgstr "le support des machines n'ayant pas 32 bits est meilleur avec la version 0.6"
+
+#~ msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?"
+#~ msgstr "Définition superflue d'étiquette %A à %0 -- peut-être que la définition précédente d'étiquette %B à %1 aurait besoin d'une déclaration CONTINUE?"
+
+#~ msgid "Extra label definition %A at %0 following label definition %B at %1"
+#~ msgstr "Définition superflue d'étiquette %A à %0 après la définition de l'étiquette %B à %1"
+
+#~ msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]"
+#~ msgstr "Indicateur de continuation à %0 invalide sur la première ligne de non commentaire du fichier ou suivant END ou INCLUDE [info -f g77 M LEX]"
+
+#~ msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]"
+#~ msgstr "Indicateur de continuation à %0 invalide ici [info -f g77 M LEX]"
+
+#~ msgid "Non-negative integer at %0 too large"
+#~ msgstr "Entier non négatif à %0 trop grand"
+
+#~ msgid "Integer at %0 too large (%2 has precedence over %1)"
+#~ msgstr "Entier à %0 trop grand (%2 a précédence sur %1)"
+
+#~ msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator"
+#~ msgstr "Période à %0 n'est pas suivie d'un mot clé valide formant un opérateut binaire valide; «.%A,» n'est pas un opérateur binaire valide"
+
+#~ msgid "`.%A.' at %0 not a binary operator"
+#~ msgstr "«.%A.» n'est pas un opérateur binaire valide"
+
+#~ msgid "Double-quote at %0 not followed by a string of valid octal digits at %1"
+#~ msgstr "Double apostrophe à %0 pas suivi par une chaîne valide de chiffres en octal à %1"
+
+#~ msgid "Invalid octal constant at %0"
+#~ msgstr "constante octale invalide à %0"
+
+#~ msgid "Invalid binary digit(s) found in string of digits at %0"
+#~ msgstr "Chiffre binaire invalide trouvé dans la chaîne de chiffres à %0"
+
+#~ msgid "Invalid binary constant at %0"
+#~ msgstr "constante binaire invalide à %0"
+
+#~ msgid "Invalid hexadecimal digit(s) found in string of digits at %0"
+#~ msgstr "Chiffre hexadécimal invalide trouvé dans la chaîne de chiffres à %0"
+
+#~ msgid "Invalid hexadecimal constant at %0"
+#~ msgstr "constante hexadécimale invalide %0"
+
+#~ msgid "Invalid octal digit(s) found in string of digits at %0"
+#~ msgstr "Chiffre octal invalide trouvé dans la chaîne de chiffres à %0"
+
+#~ msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1"
+#~ msgstr "Spécificateur de base invalide «%A» à %0 pour un constante sans type  à %1"
+
+#~ msgid "Invalid typeless constant at %1"
+#~ msgstr "constante sans type invalide à %1"
+
+#~ msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()"
+#~ msgstr "la partie %A de la constante complexe à %0 doit être une constante réelle ou entière -- autrement utiliser CMPLX() ou COMPLEX() à la place de ()"
+
+#~ msgid "%A part of complex constant at %0 not a real or integer constant"
+#~ msgstr "la partie %A de la constante complexe à %0 n'est pas une constante réelle ou entière"
+
+#~ msgid "Invalid keyword `%%%A' at %0 in this context"
+#~ msgstr "mot clé invalide «%%%A» à %0 dans ce contexte"
+
+#~ msgid "Invalid keyword `%%%A' at %0"
+#~ msgstr "mot clé invalide «%%%A» à %0"
+
+#~ msgid "Null expression between %0 and %1 invalid in this context"
+#~ msgstr "expression nulle entre %0 et %1 invalide dans ce contexte"
+
+#~ msgid "Invalid null expression between %0 and %1"
+#~ msgstr "expression null invalide entre %0 et %1"
+
+#~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type"
+#~ msgstr "opérateur de concaténation à %0 doit opérer sur deux sous-expressions de type caractère, mais aucune des sous-expressions à %1 ou %2 n'est de type caractère"
+
+#~ msgid "Invalid operands at %1 and %2 for concatenation operator at %0"
+#~ msgstr "Opérandes invalides à %1 et %2 pour l'opérateur de concaténation à %0"
+
+#~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type"
+#~ msgstr "Opérateur de concaténation à %0 doit opérer sur deux sous-expressions de type caractère, mais la sous-expression à %1 n'est pas de type caractère"
+
+#~ msgid "Invalid operand at %1 for concatenation operator at %0"
+#~ msgstr "Opérande invalide à %1 pour l'opérateur de concaténation à %0"
+
+#~ msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A"
+#~ msgstr "Opérateur de concaténation à %0 doit opérer sur deux sous-expressions scalaires (non pas de tableau), deux invocations de fonctions retournant des caractères scalaires ou une combinaison des deux -- mais la sous-expression à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for concatenation operator at %0"
+#~ msgstr "Opérande invalide (est %A) à %1 pour l'opérateur de concaténation à %0"
+
+#~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type"
+#~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions de type artihmétique, mais aucune des sous-expressions à %1 ou %2 n'est pas de type arithmétique"
+
+#~ msgid "Invalid operands at %1 and %2 for arithmetic operator at %0"
+#~ msgstr "Opérande invalide à %1 et %2 pour l'opérateur arithmétique à %0"
+
+#~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type"
+#~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions de type artihmétique, mais la sous-expression à %1 n'est pas de type arithmétique"
+
+#~ msgid "Invalid operand at %1 for arithmetic operator at %0"
+#~ msgstr "Opérande invalide à %1 pour l'opérateur arithmétique à %0"
+
+#~ msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A"
+#~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions scalaires (pas de tableau), l'invocation des deux fonctions retournant un scalaire arithmétique ou une combinaison des deux -- mais la sous-expressions à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0"
+#~ msgstr "Opérande invalide (est %A) à %1 pour l'opérateur arithmétique à %0"
+
+#~ msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]"
+#~ msgstr "Constante caractère à %0 n'a pas de guillemets de fermeture à %1 [info -f g77 M LEX]"
+
+#~ msgid "Unterminated character constant at %0 [info -f g77 M LEX]"
+#~ msgstr "constante de caractères non terminée à %0 [info -f g77 M LEX]"
+
+#~ msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]"
+#~ msgstr "«&» initial manquant sur la ligne de continuation à %0 [info -f g77 M LEX]"
+
+#~ msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character"
+#~ msgstr "Ligne de continuation à %0 invalide parce qu'elle contient seulement un simple «&» comme seul caractère non blanc"
+
+#~ msgid "Invalid continuation line at %0"
+#~ msgstr "ligne de continuation invalide à %0"
+
+#~ msgid "Invalid statement at %0 [info -f g77 M LEX]"
+#~ msgstr "Déclaration invalide à %0 [info -f g77 M LEX]"
+
+#~ msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1"
+#~ msgstr "Déclaration de nom non reconnue à %0 et forme invalide pour l'affectation ou la définition de déclaration de fonction à %1"
+
+#~ msgid "Invalid statement at %0"
+#~ msgstr "Déclaration invalide à %0"
+
+#~ msgid "Invalid form for %A statement at %0"
+#~ msgstr "Forme invalide pour la déclaration %A à %0"
+
+#~ msgid "Invalid %A statement at %0"
+#~ msgstr "Déclaration %A invalide à %0"
+
+#~ msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))"
+#~ msgstr "Utilisation invalide d'une constante Hollerith à la déclaration à %0 -- encapsuler la constante entre parenthèses (par exemple, changer BACKSPACE 2HAB en BACKSPACE (2HAB) )"
+
+#~ msgid "Invalid I specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur I invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid B specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur B invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid O specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur O invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid Z specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur Z invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid F specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur F invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid E specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur E invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid EN specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur EN invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid G specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur G invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid L specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur L invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid A specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur A invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid D specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur D invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid Q specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur Q invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid $ specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur $ invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid P specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur P invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid T specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur T invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid TL specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur TL invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid TR specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur TR invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid X specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur X invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid S specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur S invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid SP specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur SP invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid SS specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur SS invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid BN specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur BN invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid BZ specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur BZ invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Invalid : specifier in FORMAT statement at %0"
+#~ msgstr "Invalide: spécificateur de déclaration de FORMAT à %0"
+
+#~ msgid "Invalid H specifier in FORMAT statement at %0"
+#~ msgstr "spécificateur H invalide dans la déclaration de FORMAT à %0"
+
+#~ msgid "Nonletter in defined operator at %0"
+#~ msgstr "ne contient pas une non lettre dans l'opérateur défini à %0"
+
+#~ msgid "Invalid type-declaration attribute at %0"
+#~ msgstr "type d'attribut de déclaration invalide à %0"
+
+#~ msgid "Unrecognized value for character constant at %0 -- expecting %A"
+#~ msgstr "valeur non reconnue pour la constante caractère à %0 -- %A attendu"
+
+#~ msgid "Unrecognized value for character constant at %0"
+#~ msgstr "valeur non reconnnue pour la constante caractère à %0"
+
+#~ msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT"
+#~ msgstr "spécification d'étendue à %0 invalide -- au moins une expression doit être spécifié ou utiliser CASE DEFAULT"
+
+#~ msgid "Range specification at %0 invalid"
+#~ msgstr "spécification d'étendue à %0 invalide"
+
+#~ msgid "Useless range at %0"
+#~ msgstr "étendue inutile à %0"
+
+#~ msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted"
+#~ msgstr "sorte invalide à %0 pour le type à %1 -- non supporté ou non permis"
+
+#~ msgid "Invalid kind at %0 for type at %1"
+#~ msgstr "sorte invalide à %0 pour le type à %1"
+
+#~ msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range"
+#~ msgstr "ne peut établir un type implicite pour la lettre initiale «%A» à %0 -- déjà explicitement établie ou utilisé pour initialiser un type implicite pour un nom quelconque ou un ordre arrière de lettres dans une étendue de lettres"
+
+#~ msgid "Cannot establish implicit type for initial letter `%A' at %0"
+#~ msgstr "ne peut établir un type implicite pour la lettre initiale «%A» à %0"
+
+#~ msgid "Label definition %A (at %0) invalid -- must be in columns 1-5"
+#~ msgstr "définition d'étiquette %A (à %0) invalide -- doit être en colonnes 1-5"
+
+#~ msgid "Invalid label definition %A (at %0)"
+#~ msgstr "définition d'étiquette invalide %A (à %0)"
+
+#~ msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement"
+#~ msgstr "expression lors de l'exécution à %0 dans la déclaration de FORMAT qui ne suit pas la première déclaration exécutable dans l'unité programme -- déplacer la déclaration"
+
+#~ msgid "FORMAT at %0 with run-time expression must follow first executable statement"
+#~ msgstr "FORMAT à %0 dans l'expression lors de l'exécution doit suivre la première déclaration exécutable"
+
+#~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type"
+#~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type logique mais aucune des sous-expressions à %1 ou %2 n'est de type logique"
+
+#~ msgid "Invalid operands at %1 and %2 for boolean operator at %0"
+#~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur booléen à %0"
+
+#~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type"
+#~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type logique mais la sous-expression à %1 n'est pas de type logique"
+
+#~ msgid "Invalid operand at %1 for boolean operator at %0"
+#~ msgstr "opérande invalide à %1 pour l'opérateur booléen à %0"
+
+#~ msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A"
+#~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type scalaire (pas tableau), deux invocations de fonction retournant des scalaires logique ou une combinaison des deux -- mais la sous-expression à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for boolean operator at %0"
+#~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur booléen à %0"
+
+#~ msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type"
+#~ msgstr "opérateur .NOT. à %0 doit opérer sur une sous-expression de type logique mais la sous-expression à %1 n'est pas de type logique"
+
+#~ msgid "Invalid operand at %1 for .NOT. operator at %0"
+#~ msgstr "opérande invalide à %1 pour l'opérateur .NOT. à %0"
+
+#~ msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A"
+#~ msgstr "opérateur .NOT. à %0 doit opérer sur une sous-expression scalaire mais la sous-expression à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0"
+#~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur .NOT. à %0"
+
+#~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type"
+#~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type artihmétique ou caractère mais aucune des sous-expressions à %1 ou %2 n'est de type arithmétique ou caractère"
+
+#~ msgid "Invalid operands at %1 and %2 for equality operator at %0"
+#~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur d'égalité à %0"
+
+#~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type"
+#~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type artihmétique ou caractère mais la sous-expression à %1 n'est pas de type arithmétique ou caractère"
+
+#~ msgid "Invalid operand at %1 for equality operator at %0"
+#~ msgstr "opérande invalide à %1 pour l'opérateur d'égalité à %0"
+
+#~ msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A"
+#~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type arithmétique ou scalaires caractère ou une combinaison des deux mais la sous-expression à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for equality operator at %0"
+#~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur d'égalité à %0"
+
+#~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type"
+#~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type entier, réel ou caractère, mais aucune des sous-expression à %1 ou %2 n'est de type entier, réel ou caractère"
+
+#~ msgid "Invalid operands at %1 and %2 for relational operator at %0"
+#~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur relationnel à %0"
+
+#~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type"
+#~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type entier, réel ou caractère, mais la sous-expression à %1 n'est pas de type entier, réel ou caractère"
+
+#~ msgid "Invalid operand at %1 for relational operator at %0"
+#~ msgstr "opérande invalide à %1 pour l'opérateur relationnel à %0"
+
+#~ msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A"
+#~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type entier, réel ou caractère ou une combinaison des deux mais la sous-expression à %1 est %A"
+
+#~ msgid "Invalid operand (is %A) at %1 for relational operator at %0"
+#~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur relationnel à %0"
+
+#~ msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type"
+#~ msgstr "référence à l'intrinsèque «%A» à %0 invalide -- un ou plusieurs d'arguments ont un type incorrect"
+
+#~ msgid "Invalid reference to intrinsic `%A' at %0"
+#~ msgstr "référence invalide vers l'intrinsèque «%A» à %0"
+
+#~ msgid "Too few arguments passed to intrinsic `%A' at %0"
+#~ msgstr "trop peu d'arguments passés à l'intrinsèque «%A» à %0"
+
+#~ msgid "Too few arguments for intrinsic `%A' at %0"
+#~ msgstr "trop peu d'arguments passés à l'intrinsèque «%A» à %0"
+
+#~ msgid "Too many arguments passed to intrinsic `%A' at %0"
+#~ msgstr "trop d'arguments passés à l'intrinsèque «%A» à %0"
+
+#~ msgid "Too many arguments for intrinsic `%A' at %0"
+#~ msgstr "trop d'arguments passés à l'intrinsèque «%A» à %0"
+
+#~ msgid "Reference to disabled intrinsic `%A' at %0"
+#~ msgstr "référence à l'intrinsèque désactivé «%A» à %0"
+
+#~ msgid "Disabled intrinsic `%A' at %0"
+#~ msgstr "Désactiver les intrinsèques «%A» à %0"
+
+#~ msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0"
+#~ msgstr "référence à la sous-routine intrinsèque «%A» comme s'il est une fonction à %0"
+
+#~ msgid "Function reference to intrinsic subroutine `%A' at %0"
+#~ msgstr "référence de fonction à la sous-routine intrinsèque «%A» à %0"
+
+#~ msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0"
+#~ msgstr "référence à une fonction intrinsèque «%A» comme s'il est une sous-routine à %0"
+
+#~ msgid "Subroutine reference to intrinsic function `%A' at %0"
+#~ msgstr "référence de sous-routine à la fonction «%A» à %0"
+
+#~ msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name"
+#~ msgstr "référence à un intrinsèque non implanté «%A» à %0 -- utiliser EXTERNAL pour référence la procédure ayant ce nom et écrite par l'usager"
+
+#~ msgid "Unimplemented intrinsic `%A' at %0"
+#~ msgstr "intrinsèque «%A» non implanté à %0"
+
+#~ msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)"
+#~ msgstr "référence à un intrinsèque non implanté «%A» à (EXTERNAL assumé)"
+
+#~ msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)"
+#~ msgstr "intrinsèque non implantée «%A» à (EXTERNAL assumé)"
+
+#~ msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1"
+#~ msgstr "Tentative de modification de la variable «%A» à %0 alors qu'il sert à l'itération de la boucle DO à %1"
+
+#~ msgid "Modification of DO-loop iterator `%A' at %0"
+#~ msgstr "Modification de l'itération de la boucle DO «%A» à %0"
+
+#~ msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1"
+#~ msgstr "Tentative de modification de la variable «%A» par le biais de l'item #%b dans la liste à %0 alors qu'il sert à l'itération implicite de la boucle DO à %1"
+
+#~ msgid "Array has too many dimensions, as of dimension specifier at %0"
+#~ msgstr "Tableau à trop de dimensions comme spécificateur de dimension à %0"
+
+#~ msgid "Too many dimensions at %0"
+#~ msgstr "trop de dimensions à %0"
+
+#~ msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported"
+#~ msgstr "Item de contrôle OPEN non supporté à %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED= et USEROPEN= ne sont pas supportés"
+
+#~ msgid "Unsupported OPEN control item at %0"
+#~ msgstr "item de contrôle OPEN non supporté à %0"
+
+#~ msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported"
+#~ msgstr "item de contrôle INQUIRE non supporté à %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE= et WRITE= ne sont pas supportés"
+
+#~ msgid "Unsupported INQUIRE control item at %0"
+#~ msgstr "item de contrôle INQUIRE non supporté à %0"
+
+#~ msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported"
+#~ msgstr "item de contrôle READ non supporté à %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS= et SIZE= ne sont pas supportés"
+
+#~ msgid "Unsupported READ control item at %0"
+#~ msgstr "item de contrôle READ non supporté à %0"
+
+#~ msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported"
+#~ msgstr "item de contrôle WRITE non supporté à %0 -- ADVANCE= et EOR= ne sont pas supportés"
+
+#~ msgid "Unsupported WRITE control item at %0"
+#~ msgstr "item de contrôle WRITE non supporté à %0"
+
+#~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first"
+#~ msgstr "Remplissage de %A %D requis avant «%B» dans le bloc commun «%C» à %0 -- considérer reordonner les membres, celui de plus grande taille en premier"
+
+#~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0"
+#~ msgstr "Remplissage de %A %D requis avant «%B» dans le bloc commun «%C» à %0"
+
+#~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type"
+#~ msgstr "Type du point d'entrée à %0 de la fonction est en conflit avec le type de point d'entrée précédent de la fonction -- doit être de longueur indentique ou zéro pour un type caractère"
+
+#~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)"
+#~ msgstr "type de point d'entré à %0 à la fonction est en conflit avec le type de point d'entrée précédent de la fonction"
+
+#~ msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block"
+#~ msgstr "bloc commun «%A» initialisé à %0 est déjà initialisé à %1 -- une seule unité de programme peut spécifier les valeurs initiales pour un bloc commun particulier"
+
+#~ msgid "Common block `%A' initialized at %0 already initialized at %1"
+#~ msgstr "bloc commun «%A» initialisé à %0 est déjà initialisé à %1"
+
+#~ msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first"
+#~ msgstr "remplissage initial pour le bloc commun «%A» est %B %C à %0 -- considérer réordonner les membres, celui de plus grande taille en premier"
+
+#~ msgid "Initial padding for common block `%A' is %B %C at %0"
+#~ msgstr "remplissage initial pour le bloc commun «%A» est %B %C à %0"
+
+#~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first"
+#~ msgstr "remplissage initial pour le bloc commun «%A» est %B %D à %0 mais %C %E à %1 -- considérer réordonner les membres, ceux de plus grande taille en premier"
+
+#~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1"
+#~ msgstr "remplissage initial pour le bloc commun «%A» est %B %D à %0 mais %C %E à %1"
+
+#~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file"
+#~ msgstr "bloc commun «%A» initialisé à un longueur %B %D à %0 mais augmenté à %C %E à %1 -- utiliser des définitions consistantes ou réordonner les unités de programmes dans le fichier source"
+
+#~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1"
+#~ msgstr "bloc commun «%A» initialisé à un longueur %B %D à %0 mais augmenté à %C %E à %1"
+
+#~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely"
+#~ msgstr "variable DO «%A» est de type REEL ou DOUBLE PRECISION à %0 -- comportement inattendue est à prévoir"
+
+#~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0"
+#~ msgstr "variable DO «%A» est de type REEL ou DOUBLE PRECISION à %0"
+
+#~ msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly"
+#~ msgstr "argument actuel invalide à %0 -- remplacer les constantes Hollerith avec %%REF('chaÎne') et des constantes sans type avec des équivalents entiers ou utiliser -fugly-args ou -fugly"
+
+#~ msgid "Invalid actual argument at %0"
+#~ msgstr "argument actuel invalide à %0"
+
+#~ msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision"
+#~ msgstr "virgule flottante en quadruple précision non supporté -- tratement de la constante à %0 en double précision"
+
+#~ msgid "Quadruple-precision floating-point unsupported"
+#~ msgstr "virgule flottante en quadruple précision non supporté"
+
+#~ msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6"
+#~ msgstr "initialisation d'une large zone aggrégat (unit %B) «%A» à %0 couramment lente et prenant beaucoup de mémoire durant la compilation g77 -- à être amélioré dans 0.6"
+
+#~ msgid "This could take a while (initializing `%A' at %0)..."
+#~ msgstr "Cela pourrait prendre du temps (initialisation «%A» à %0)..."
+
+#~ msgid "can't to open %s"
+#~ msgstr "ne peut ouvrir %s"
+
+#~ msgid "Set class path and suppress system path"
+#~ msgstr "Initialiser le chemin des classes et supprimer le chemin systèmes"
+
+#~ msgid "<stdin>"
+#~ msgstr "<stdin>"
+
+#~ msgid "hard register `%s' listed as input operand to `asm'"
+#~ msgstr "registre matériel `%s' est listé comme une opérande d'entrée à `asm'"
+
+#~ msgid "floating point trap outputting a constant"
+#~ msgstr "la trappe en virgule flottante produit une constante"
+
+#~ msgid "no file-scope type named `%D'"
+#~ msgstr "pas de type de portée de fichier nommé `%D'"
+
+#~ msgid "%T is not a class type"
+#~ msgstr "« %T » n'est pas un type de classe"
+
+#~ msgid "base clause without member specification for `%#T'"
+#~ msgstr "clause de base sans spécification de membre pour `%#T'"
+
+#~ msgid "non-`union' tag used in declaring `%#T'"
+#~ msgstr "étiquette non-`union' utilisé dans la déclaration de `%#T'"
+
+#~ msgid "invalid use of %D"
+#~ msgstr "utilisation invalide de %D"
+
+#~ msgid "return value from function receives multiple initializations"
+#~ msgstr "valeur retournée de la fonction reçoit de multiples initialisations"
+
+#~ msgid "Can't use '$' as a separator for inner classes"
+#~ msgstr "Ne peut utiliser '$' comme séparateur pour des classes internes"
+
+#~ msgid "-mlong32 and -mlong64 can not both be specified"
+#~ msgstr "-mlong32 et -mlong64 ne peuvent être spécifiés ensembles."
+
+#~ msgid "type with more precision than %s"
+#~ msgstr "type avec plus de precision que %s"
+
+#~ msgid "ANSI C forbids const or volatile function types"
+#~ msgstr "C ANSI interdit les types `const' ou de fonctions volatiles"
+
+#~ msgid "leaving more files than we entered"
+#~ msgstr "laissant plus de fichiers que nous en avons entrée"
+
+#~ msgid "universal-character-name used for '%c'"
+#~ msgstr "nom-de-caractère-universel utilisé pour `%c'"
+
+#~ msgid "unknown escape sequence: '\\' followed by char 0x%x"
+#~ msgstr "séquence d'échappement inconnue: '\\' suivi du caractère 0x%x"
+
+#~ msgid "wrong type argument to %s"
+#~ msgstr "type d'argument erroné pour %s"
+
+#~ msgid "deprecated initialization of zero-length array"
+#~ msgstr "initialisation obsolète d'un tableau de taille zéro"
+
+#~ msgid "initialization of zero-length array before end of structure"
+#~ msgstr "initialisation d'un tableau de taille zéro avant la fin de la structure"
+
+#~ msgid "initialization of zero-length array inside a nested context"
+#~ msgstr "initialisation d'un tableau de taille zéro à l'intérieur d'un contexte imbriqué"
+
+#~ msgid "Unable to find a temporary location for static chain register"
+#~ msgstr "Incapable de trouver une location temporaire pour un registre chaîné statique"
+
+#~ msgid "Internal gcc abort from %s:%d"
+#~ msgstr "Abandon interne gcc à partir de %s:%d"
+
+#~ msgid "The local variable `insn' has the value:"
+#~ msgstr "La variable locale `insn' a la valeur:"
+
+#~ msgid "Register '%c' already specified in allocation order"
+#~ msgstr "Registre '%c' est déjà spécifié dans l'ordre d'allocation"
+
+#~ msgid "Same as -mcpu=i386"
+#~ msgstr "Identique à -mcpu=i386"
+
+#~ msgid "Same as -mcpu=i486"
+#~ msgstr "Identique à -mcpu=i486"
+
+#~ msgid "Same as -mcpu=pentium"
+#~ msgstr "Identique à -mcpu=pentium"
+
+#~ msgid "Same as -mcpu=pentiumpro"
+#~ msgstr "Identique à -mcpu=pentiumpro"
+
+#~ msgid "Emit Intel syntax assembler opcodes"
+#~ msgstr "Produire les code-op pour la syntaxe d'assembleur Intel"
+
+#~ msgid "Control allocation order of integer registers"
+#~ msgstr "Contrôle l'ordre d'allocation des registres entier"
+
+#~ msgid "The -mabi=32 support does not work yet."
+#~ msgstr "L'option -mabi=32 n'est pas fonctionnelle encore."
+
+#~ msgid "-mcpu=%s does not support -mips%d"
+#~ msgstr "-mcpu=%s ne supporte par -mips%d"
+
+#~ msgid "Use FUNCTION_EPILOGUE"
+#~ msgstr "Utiliser FUNCTION_EPILOGUE"
+
+#~ msgid "Do not use FUNCTION_EPILOGUE"
+#~ msgstr "Ne pas utiliser FUNCTION_EPILOGUE"
+
+#~ msgid "object size exceeds built-in limit for virtual function table implementation"
+#~ msgstr "taille des objets excède les limites internes pour la table implantée de fonctions virtuelles"
+
+#~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects"
+#~ msgstr "taille des objets excède la limite normale pour la table implantée de foncions virtuelles, recompiler tous les sources et utiliser -fhuge-objects"
+
+#~ msgid "the ABI requires vtable thunks"
+#~ msgstr "l'ABI requiert vtable thunks"
+
+#~ msgid "`__alignof__' applied to a bit-field"
+#~ msgstr "`__alignof__' appliqué à un champ de bits"
+
+#~ msgid "Do not treat the namespace `std' as a normal namespace"
+#~ msgstr "Ne pas traiter l'espace nom `std' comme un espace nom normal"
+
+#~ msgid "taking dynamic typeid of object with -fno-rtti"
+#~ msgstr "prendre le typeid dynamique d'objet avec -fno-rtti"
+
+#~ msgid "recoverable compiler error, fixups for virtual function"
+#~ msgstr "erreur de recouvrement du compilateur, correctifs pour les fonctions virtuelles"
+
+#~ msgid "`com_interface' only supported with -fvtable-thunks"
+#~ msgstr "`com_interface' supporté seulement avec -fvtable-thunks"
+
+#~ msgid "\"defined\" operator appears during macro expansion"
+#~ msgstr "opérateur \"defined\" apparaît durant l'expansion de macro"
+
+#~ msgid "-include and -imacros cannot be used with -fpreprocessed"
+#~ msgstr "-include et -imacros ne peuvent être utilisés avec -fpreprocessed"
+
+#~ msgid "buffers still stacked in cpp_finish"
+#~ msgstr "tampons toujours empilés dans cpp_finish"
+
+#~ msgid "# followed by integer"
+#~ msgstr "# suivi d'un entier"
+
+#~ msgid "attempt to push file buffer with contexts stacked"
+#~ msgstr "tentative d'empilage du tampon fichier dans un contexte de pile"
+
+#~ msgid "file \"%s\" left but not entered"
+#~ msgstr "fichier \"%s\" a été laissé mais n'a pas été entré"
+
+#~ msgid "expected to return to file \"%s\""
+#~ msgstr "attendait retourner au fichier \"%s\""
+
+#~ msgid "header flags for \"%s\" have changed"
+#~ msgstr "fanion d'en-tête de \"%s\" a changé"
+
+#~ msgid "file \"%s\" entered but not left"
+#~ msgstr "fichier \"%s\" entrée mais non laissé"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK est manquant por le bloc %d\n"
+
+#~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n"
+#~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o RÉP_OBJ] fichier\n"
+
+#~ msgid "Premature end of input file %s"
+#~ msgstr "Fin prématuré du fichier d'entrée %s"
+
+#~ msgid "Make is_compiled_class return 1"
+#~ msgstr "Faire que is_compiled_class retourne 1"
+
+#~ msgid "Dump class files to <name>.class"
+#~ msgstr "Vidanger les fichiers de classs dans <nom>.class"
+
+#~ msgid "input file is list of file names to compile"
+#~ msgstr "fichier d'entrée est listé dans les noms de fichiers à compiler"
+
+#~ msgid "Generate code for Boehm GC"
+#~ msgstr "Générer le code pour Boehm GC"
+
+#~ msgid "Don't put synchronization structure in each object"
+#~ msgstr "Ne pas insérer de structure de synchronisation dans cahque objet"
+
+#~ msgid "Arc profiling: some edge counts were bad."
+#~ msgstr "profilage Arc: quelques compteurs de bordures étaient erronées."
+
+#~ msgid "`asm' cannot be used in function where memory usage is checked"
+#~ msgstr "`asm' ne peut être utilisé dans une fonction où l'usage de la mémoire est vérifié"
+
+#~ msgid "`asm' cannot be used with `-fcheck-memory-usage'"
+#~ msgstr "`asm' ne peut être utilisé `-fcheck-memory-usage'"
+
+#~ msgid "output operand constraint %d contains `+'"
+#~ msgstr "contrainte de sortie de l'opérande %d contient `+'"
+
+#~ msgid "\"%s\" and \"%s\" identical in first %d characters"
+#~ msgstr "\"%s\" et \"%s\" identique pour les premiers %d caractères"
+
+#~ msgid "Improve FP speed by violating ANSI & IEEE rules"
+#~ msgstr "Améliorer la vitesse FP en violant les règles ANSI & IEEE"
+
+#~ msgid "Generate code to check every memory access"
+#~ msgstr "Générer du code pour vérifier chaque accès mémoire"
+
+#~ msgid "Add a prefix to all function names"
+#~ msgstr "Ajouter un préfixe à tous les noms de fonctions"
+
+#~ msgid "Errors detected in input file (your bison.simple is out of date)\n"
+#~ msgstr "Erreurs détectées dans le fichier d'entrée (votre bison.simple est périmé)\n"
+
+#~ msgid "  -Wid-clash-<num>        Warn if 2 identifiers have the same first <num> chars\n"
+#~ msgstr "  -Wid-clash-<nombre>     avertir si 2 identificateurs one les mêmes premiers <nombre> de caractères\n"
+
+#~ msgid "Unrecognized option `%s'"
+#~ msgstr "Option non reconnue `%s'"
+
+#~ msgid "`-a' option (basic block profile) not supported"
+#~ msgstr "`-a' option (profile de blocs de base) non supporté"
+
+#~ msgid "`-ax' option (jump profiling) not supported"
+#~ msgstr "`-ax' option (profilage des sauts) non supporté"
+
+#~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored."
+#~ msgstr "`-ax' et `-a' sont des options conflictuelles. `-a' ignoré."
+
+#~ msgid "Data size %ld.\n"
+#~ msgstr "Taille des données %ld.\n"
+
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "Copyright © 2001 Free Software Foundation, Inc.\n"
+
+#~ msgid "Name `%s' contains quotes"
+#~ msgstr "Nom « %s » contient des guillemets"
+
+#~ msgid "invalid string `%s' in define_query_cpu_unit"
+#~ msgstr "chaîne invalide « %s » dans define_query_cpu_unit"
+
+#~ msgid "invalid first string `%s' in presence_set"
+#~ msgstr "première chaîne invalide « %s » dans presence_set"
+
+#~ msgid "invalid first string `%s' in absence_set"
+#~ msgstr "première chaîne invalide « %s » dans absence_set"
+
+#~ msgid "invalid second string `%s' in absence_set"
+#~ msgstr "seconde chaîne invalide « %s » dans absence_set"
+
+#~ msgid "invalid string `%s' in define_automaton"
+#~ msgstr "chaîne invalide « %s » dans define_automaton"
+
+#~ msgid "garbage after ) in reservation `%s'"
+#~ msgstr "rebut après « ) » dans la réservation « %s »"
+
+#~ msgid "repetition `%s' <= 1 in reservation `%s'"
+#~ msgstr "répétition « %s » <= 1 dans la réservation « %s »"
+
+#~ msgid "`%s' in exclusion is not unit"
+#~ msgstr "« %s » dans l'exclusion n'est pas une unité"
+
+#~ msgid "units `%s' and `%s' in exclusion set belong to different automata"
+#~ msgstr "unités « %s » et « %s » dans l'ensemble d'exclusions appartient à un automate différent"
+
+#~ msgid "unit `%s' excludes and requires presence of `%s'"
+#~ msgstr "unité « %s » exclue et requiert la présence de « %s »"
+
+#~ msgid "unit `%s' requires absence and presence of `%s'"
+#~ msgstr "unité « %s » exclue et requiert l'absence ou la présence de « %s »"
+
+#~ msgid "define_insn_reservation `%s' has negative latency time"
+#~ msgstr "define_insn_reservation « %s » a un temps de latence négatif"
+
+#~ msgid "define_bypass `%s - %s' has negative latency time"
+#~ msgstr "define_bypass « %s - %s » a un temps de latence négatif"
+
+#~ msgid "define_unit `%s' without automaton when one defined"
+#~ msgstr "define_unit « %s » sans automate alors qu'il y en a un défini"
+
+#~ msgid "Units `%s' and `%s' should be in the same automaton"
+#~ msgstr "Unités « %s » et « %s » devraient être dans le même automate"
+
+#~ msgid "Automaton `%s': Insn `%s' will never be issued"
+#~ msgstr "Automate « %s »: Insn « %s » ne sera jamais émis"
+
+#~ msgid "Insn `%s' will never be issued"
+#~ msgstr "Insn « %s » ne sera jamais émis"
+
+#~ msgid "Profile does not match flowgraph of function %s (out of date?)"
+#~ msgstr "Profil ne concorde pas le graphe de flux de la fonction %s (périmé?)"
+
+#~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter"
+#~ msgstr "La pente de la fonction linéaire d'étrnaglement d'enlignage après avoir atteint récursivement la limite d'enlignage récursif est obtenue par la valeur négative réciproque de ce paramètre"
+
+#~ msgid "push %s level %p line %d\n"
+#~ msgstr "empiler %s niveau %p ligne %d\n"
+
+#~ msgid "pop  %s level %p line %d\n"
+#~ msgstr "dépiler %s niveau %p ligne %d\n"
+
+#~ msgid "suspend  %s level %p line %d\n"
+#~ msgstr "suspendre %s niveau %p ligne %d\n"
+
+#~ msgid "resume %s level %p line %d\n"
+#~ msgstr "compléter %s niveau %p ligne %d\n"
+
+#~ msgid "\\x%x"
+#~ msgstr "\\x%x"
+
+#~ msgid "invalid use of template `%D'"
+#~ msgstr "utilisation invalide du canevas « %D »"
+
+#~ msgid "qualified name does not name a class"
+#~ msgstr "nom qualifié ne nomme pas une classe"
+
+#~ msgid "assignment to non-static member `%D' of enclosing class `%T'"
+#~ msgstr "affectation à un membre non statique « %D » de la classe « %T » entourée"
+
+#~ msgid "ISO C++ does not permit named return values"
+#~ msgstr "ISO C++ ne permet pas les valeurs retournées nommées"
+
+#~ msgid "exception handler inside code that is being protected"
+#~ msgstr "traitement d'exception à l'intérieur du code qui est protégé"
+
+#~ msgid "(debug) trace parsing process"
+#~ msgstr "(débug) tracer le traitement de l'analyse"
+
+#~ msgid "(debug) trace lexical analysis"
+#~ msgstr "(débug) trace l'analyse lexicale"
diff --git a/libcpp/po/ja.po b/libcpp/po/ja.po
new file mode 100644 (file)
index 0000000..27f5b69
--- /dev/null
@@ -0,0 +1,10550 @@
+# Japanese messages for gcc 3.0
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 1999-2001
+#    Masahito Yamaga <yamaga@ipc.chiba-u.ac.jp>, 1999.
+#    IIDA Yosiaki <iida@secom.ne.jp>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gcc 3.0\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2001-12-05 22:47+0900\n"
+"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
+"Language-Team: Japanese <ja@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, fuzzy, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "NaN ¤«¤éÉä¹ç̵¤·À°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, fuzzy, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "universal-character-name ¤Ï `%c' ¤ò»Ø¼¨¤·¤Þ¤·¤¿¤¬¡¢´ðËÜŪ¤Êʸ»ú½¸¹ç¤Î°ìÉô¤Ç¤¹"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+#, fuzzy
+msgid "universal character names are only valid in C++ and C99"
+msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\U%08x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: charset.c:952
+#, fuzzy, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "'\\%c' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, fuzzy, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "̵¸ú¤Ê ¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾"
+
+#: charset.c:998
+#, fuzzy, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "ÉÔŬÀڤʥæ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr ""
+
+#: charset.c:1018
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\U%08x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: charset.c:1022
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\U%08x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr ""
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr ""
+
+#: charset.c:1132
+#, fuzzy
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "`\\x' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x ¤Ë¡¢¤½¤ì¤Ë³¤¯¤Ï¤º¤Î 16 ¿Ê¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "8 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹"
+
+#: charset.c:1263
+#, fuzzy
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "'\\a' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "Èó ISO É¸½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹, '\\%c'"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ '\\%c'"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ '\\%c'"
+
+#: charset.c:1293
+#, fuzzy
+msgid "converting escape sequence to execution character set"
+msgstr "ʸ»ú¤ËÂФ¹¤ë¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹"
+
+#: charset.c:1415 charset.c:1478
+#, fuzzy
+msgid "character constant too long for its type"
+msgstr "ʸ»úÄê¿ô¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "Ê£¿ôʸ»ú¤«¤é¤Ê¤ëʸ»úÄê¿ô"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "¶õ¤Îʸ»úÄê¿ô"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr ""
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr ";ʬ¤Ê¥È¡¼¥¯¥ó¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë¤¢¤ê¤Þ¤¹"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "¸Å¤¤ C ¤Ç¤Ï #elif ¤ò»È¤ï¤Ê¤¤Êý¤¬¤¤¤¤¤Ç¤¹"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "¸Å¤¤ C ¤Ç¤Ï¡¢¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤Î #%s ¤ò̵»ë¤·¤Þ¤¹"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤¬¤¢¤ë¸Å¤¤ C ¤«¤é¤Ï #%s ¤ò±£¤¹¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr ""
+
+#: directives.c:409
+#, fuzzy
+msgid "style of line directive is a GCC extension"
+msgstr "#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "̵¸ú¤Ê¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" ¤ò¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" ¤Ï C++ ¤Î±é»»»Ò¤Ç¤¢¤ê¡¢¥Þ¥¯¥í̾¤È¤·¤Æ»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "¥Þ¥¯¥í̾¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÃæ¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "\"%s\" ¤ò undef ¤·¤Þ¤¹"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "½ªÃ¼Ê¸»ú > ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s ¤Ï \"¥Õ¥¡¥¤¥ë̾\" ¤¢¤ë¤¤¤Ï <¥Õ¥¡¥¤¥ë̾> ¤òɬÍפȤ·¤Þ¤¹"
+
+#: directives.c:739
+#, fuzzy, c-format
+msgid "empty filename in #%s"
+msgstr "#%s ¤Ç¤Î¥Õ¥¡¥¤¥ë̾¤¬¶õ¤Ç¤¹"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include ¤Î¥Í¥¹¥È¤¬¿¼¤¹¤®¤Þ¤¹"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next ¤¬¼ç¤¿¤ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "\"%s\" ¤Ï line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï̵¸ú¤Ê¥Õ¥é¥°¤Ç¤¹"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "#line ¤Î¸å¤í¤Î \"%s\" ¤¬Àµ¤ÎÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "¹ÔÈֹ椬Èϰϳ°¤Ç¤¹"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" ¤ÏÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:924
+#, fuzzy, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "#line ¤Î¸å¤í¤Î \"%s\" ¤¬Àµ¤ÎÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:1026
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "̤ÄêµÁËô¤ÏÉÔÀµ¤Ê # ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¹"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr ""
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr ""
+
+#: directives.c:1119
+#, fuzzy, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "¥¯¥é¥¹ `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr ""
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once ¤¬¥á¥¤¥ó¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "#pragma GCC ±øÀ÷¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤¬Ìµ¸ú¤Ç¤¹"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "´û¸¤Î¥Þ¥¯¥í \"%s' ¤ò±øÀ÷¤·¤Þ¤¹"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "include ¥Õ¥¡¥¤¥ë³°¤Î #pragma system_header ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: directives.c:1437
+#, fuzzy, c-format
+msgid "cannot find source file %s"
+msgstr "¥½¡¼¥¹ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "¸½ºß¤Î¥Õ¥¡¥¤¥ë¤Ï %s ¤è¤ê¸Å¤¤¤Ç¤¹"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pramga ¤¬³ç¸Ì¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¥ê¥Æ¥é¥ë¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "¤½¤Î¾ò·ï¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "²ò¤òÊä´°¤¹¤ë ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "½Ò¸ì¤Î²ò¤¬¶õ¤Ç¤¹"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "½Ò¸ì¤Î¤Ê¤¤¥¢¥µ¡¼¥·¥ç¥ó¤Ç¤¹"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "½Ò¸ì¤Ï¼±Ê̻ҤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" ¤¬ºÆ¥¢¥µ¡¼¥È¤µ¤ì¤Þ¤·¤¿"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "½ªÃ¼¤Î¤Ê¤¤ #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥³¥á¥ó¥È"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "·Ù¹ð: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "ÆâÉô¥¨¥é¡¼: "
+
+#: errors.c:122
+#, fuzzy
+msgid "error: "
+msgstr "ÆâÉô¥¨¥é¡¼: "
+
+#: errors.c:186
+#, fuzzy
+msgid "stdout"
+msgstr "¹½Â¤ÂÎ"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+#, fuzzy
+msgid "too many decimal points in number"
+msgstr "`asm' Ãæ¤ÎÂåÂØ¥­¡¼¥ï¡¼¥É¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr ""
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹"
+
+#: expr.c:305
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "̵¸ú¤Ê¶çÆÉÅÀ `%c' ¤¬À©ÌóÆâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹"
+
+#: expr.c:319
+#, fuzzy
+msgid "use of C99 hexadecimal floating constant"
+msgstr "16 ¿ÊÉâÆ°¾®¿ôÄê¿ô¤¬¤Ù¤­¾è¤ò»ý¤Á¤Þ¤»¤ó"
+
+#: expr.c:328
+#, fuzzy
+msgid "exponent has no digits"
+msgstr "ÉâÆ°¾®¿ôÄê¿ô¤Î¤Ù¤­¿ô¤¬¡¢¥¢¥é¥Ó¥¢¿ô»ú¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#: expr.c:335
+#, fuzzy
+msgid "hexadecimal floating constants require an exponent"
+msgstr "16 ¿ÊÉâÆ°¾®¿ôÄê¿ô¤¬¤Ù¤­¾è¤ò»ý¤Á¤Þ¤»¤ó"
+
+#: expr.c:341
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹"
+
+#: expr.c:351 expr.c:393
+#, fuzzy, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "¸Å¤¤ C ¤Ç¤Ï 'f' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹"
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "16 ¿ÊÉâÆ°¾®¿ôÄê¿ô¤¬¤Ù¤­¾è¤ò»ý¤Á¤Þ¤»¤ó"
+
+#: expr.c:379
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹"
+
+#: expr.c:401
+#, fuzzy
+msgid "use of C99 long long integer constant"
+msgstr "ISO C89 ¤Ç¤Ï long long À°¿ôÄê¿ô¤ò¶Ø¤¸¤Þ¤¹"
+
+#: expr.c:409
+#, fuzzy
+msgid "imaginary constants are a GCC extension"
+msgstr "#if ¼°¤ÎÃæ¤Ç¤Ïʸ»úÎóÄê¿ô¤¬»È¤¨¤Þ¤»¤ó"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹"
+
+#: expr.c:505
+#, fuzzy
+msgid "integer constant is too large for its type"
+msgstr "À°¿ôÄê¿ô¤¬Â礭¤¹¤®¤ë¤Î¤Ç unsigned ¤Ë¤Ê¤ê¤Þ¤·¤¿"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "À°¿ôÄê¿ô¤¬Â礭¤¹¤®¤ë¤Î¤Ç unsigned ¤Ë¤Ê¤ê¤Þ¤·¤¿"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "\"defined\" ¤Î¸å¤í¤Î ')' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "\"defined\" ±é»»»Ò¤Ï¼±Ê̻ҤòÍ׵ᤷ¤Þ¤¹"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "¡ÊC++ ¤Ç¤Ï \"%s\" ¤¬ \"%s\" ¤ÎÂåÂإȡ¼¥¯¥ó¤Ç¤¹¡Ë"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr ""
+
+#: expr.c:676
+#, fuzzy
+msgid "floating constant in preprocessor expression"
+msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: expr.c:682
+#, fuzzy
+msgid "imaginary number in preprocessor expression"
+msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr ""
+
+#: expr.c:875
+#, fuzzy, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr ""
+
+#: expr.c:895
+#, fuzzy
+msgid "#if with no expression"
+msgstr "  throw ¤µ¤ì¤¿¼°¤ÎÃæ"
+
+#: expr.c:898
+#, fuzzy, c-format
+msgid "operator '%s' has no right operand"
+msgstr "È¿Éü»Ò `%s' ¤ÏÈóÀ°¿ô·¿¤Ç¤¹"
+
+#: expr.c:903
+#, fuzzy, c-format
+msgid "operator '%s' has no left operand"
+msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr ""
+
+#: expr.c:956
+#, fuzzy
+msgid "unbalanced stack in #if"
+msgstr "Âбþ¤·¤Æ¤¤¤Ê¤¤ #endif"
+
+#: expr.c:975
+#, fuzzy, c-format
+msgid "impossible operator '%u'"
+msgstr "¤¢¤ê¤¨¤Ê¤¤±é»»»Ò '%s'"
+
+#: expr.c:1065
+#, fuzzy
+msgid "missing ')' in expression"
+msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr ""
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: expr.c:1101
+#, fuzzy
+msgid "missing '(' in expression"
+msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr ""
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "¸Å¤¤ C ¤Ç¤Ïñ¹à¥×¥é¥¹±é»»»Ò¤òµñÈݤ·¤Þ¤¹"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "¥«¥ó¥Þ±é»»»Ò¤¬ #if ±é»»»Ò¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s ¤Ï¥Ö¥í¥Ã¥¯¥Ç¥Ð¥¤¥¹¤Ç¤¹"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s ¤ÏÂ礭¤¹¤®¤Þ¤¹"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s ¤¬ËÜÍè¤è¤ê¤âû¤¤¤Ç¤¹"
+
+#: files.c:852
+#, fuzzy, c-format
+msgid "no include path in which to search for %s"
+msgstr "%s ¤ò¸«¤Ä¤±¤ë¤¿¤á¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "¿½Å include ¤«¤é¤ÎÊݸͭ±×¤È¤Ê¤ë¤Ç¤·¤ç¤¦:\n"
+
+#: init.c:426
+#, fuzzy
+msgid "cppchar_t must be an unsigned type"
+msgstr "½Ò¸ì¤Ï¼±Ê̻ҤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr ""
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr ""
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr ""
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr ""
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr ""
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr ""
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr ""
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤È²þ¹Ô¤¬¶õÇò¤Çʬ³ä¤µ¤ì¤Þ¤·¤¿"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å-²þ¹Ô¤¬¤¢¤ê¤Þ¤¹"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï %c ¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿"
+
+#: lex.c:310
+#, fuzzy, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "¥³¥á¥ó¥ÈÆâ¤Ë \"/*\" ¤¬¤¢¤ê¤Þ¤¹"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "¥×¥ê¥×¥í¥»¥¹Ì¿ÎáÃæ¤Ë %s ¤¬¤¢¤ê¤Þ¤¹"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "null Ê¸»ú¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: lex.c:460
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: lex.c:463
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "±øÀ÷¤µ¤ì¤¿ '%s' »È¤ª¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ ¤Ï C99 ²ÄÊÑ°ú¿ô¥Þ¥¯¥í³ÈÄ¥¤Ç¤Î¤ß½Ð¸½¤Ç¤­¤Þ¤¹"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "¥ê¥Æ¥é¥ëÃæ¤Ç null Ê¸»ú¤¬³ÎÊݤµ¤ì¤Þ¤·¤¿"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "%c Ê¸»ú¤Ç¤Î½ªÃ¼¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: lex.c:1027
+#, fuzzy
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++ ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤Ï ISO C89 ¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(¤³¤ì¤ÏÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤­°ì²ó¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "Ê£¿ô¹Ô¤Î¥³¥á¥ó¥È"
+
+#: lex.c:1347
+#, fuzzy, c-format
+msgid "unspellable token %s"
+msgstr "ÄÖ¤ì¤Ê¤¤¥È¡¼¥¯¥ó %s ¤Ç¤¹"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "%s:%u ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÃæ"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 %s:%u ¤«¤é"
+
+#: macro.c:84
+#, fuzzy, c-format
+msgid "macro \"%s\" is not used"
+msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: macro.c:123 macro.c:319
+#, fuzzy, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ÁȤ߹þ¤ß¥Þ¥¯¥í \"%s\" ¤Ï̵¸ú¤Ç¤¹"
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "¥À¥ó¥×¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: macro.c:254
+#, fuzzy
+msgid "could not determine date and time"
+msgstr "°Í¸´Ø·¸¤ÎÄÉÀפΤ¿¤á¤Î¥¿¡¼¥²¥Ã¥È̾¤¬ÆÃÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ʸ»úÎó¥ê¥Æ¥é¥ë¤¬Ìµ¸ú¤Ç¤¹¡¢ºÇ¸å¤Î '\\' ¤ò̵»ë¤·¤Þ¤¹"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "\"%s\" ¤È \"%s\" ¤òŽÉÕ¤±¤Þ¤·¤¿¤¬Àµ¾ï¤Ê¥×¥ê¥×¥í¥»¥Ã¥µ¥È¡¼¥¯¥ó¤È¤Ê¤ê¤Þ¤»¤ó"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 ¤Ï»ÈÍѤµ¤ì¤ë¤Ù¤­»Ä¤ê¤Î¤Î°ú¿ô¤òÍ׵ᤷ¤Þ¤¹"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "¥Þ¥¯¥í \"%s\" ¤Ï°ú¿ô¤ò %u Í׵ᤷ¤Þ¤¹¤¬¡¢%u ¸Ä¤·¤«Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "¥Þ¥¯¥í \"%s\" ¤Ë°ú¿ô¤¬ %u ÅϤµ¤ì¤Þ¤·¤¿¤¬¡¢%u ¤·¤«¼õ¤±¼è¤ê¤Þ¤»¤ó"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤°ú¿ô¥ê¥¹¥È¤¬¥Þ¥¯¥í \"%s\" ¤òµ¯Æ°¤·¤è¤¦¤È¤·¤Þ¤·¤¿"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "¸Å¤¤ C ¤Ç¤Ï¡¢´Ø¿ôŪ¥Þ¥¯¥í \"%s\" ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "¥Þ¥¯¥í²¾°ú¿ô \"%s\" ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" ¤Ï¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ë¸½¤ì¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "¥Þ¥¯¥í²¾°ú¿ô¤Ï¥«¥ó¥Þ¶èÀڤꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "̵̾²ÄÊÑ°ú¿ô¥Þ¥¯¥í¤Ï C99 ¤ÇºÎ¤êÆþ¤ì¤é¤ì¤Þ¤·¤¿"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C ¤Ç¤Ï̾Á°¤Ä¤­²ÄÊÑ°ú¿ô¥Þ¥¯¥í¤òµö¤·¤Þ¤»¤ó"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' ¤Ï¥Þ¥¯¥íŸ³«¤Îξü¤Ë¤Ï½Ð¸½¤Ç¤­¤Þ¤»¤ó"
+
+#: macro.c:1510
+#, fuzzy
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C ¤Ç¤Ï¥Þ¥¯¥í̾¤Î¸å¤í¤Ë¶õÇò¤òÍ׵ᤷ¤Þ¤¹"
+
+#: macro.c:1534
+#, fuzzy
+msgid "missing whitespace after the macro name"
+msgstr "ISO C ¤Ç¤Ï¥Þ¥¯¥í̾¤Î¸å¤í¤Ë¶õÇò¤òÍ׵ᤷ¤Þ¤¹"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "¤³¤³¤¬°ÊÁ°¤ÎÀë¸À¤¬¤¢¤ë°ÌÃ֤Ǥ¹"
+
+#: macro.c:1738
+#, fuzzy, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "¥Þ¥¯¥í°ú¿ô \"%s\" ¤Ï -traditional ¤ò¤Ä¤±¤ë¤Èʸ»úÎ󲽤µ¤ì¤¿»ö¤Ç¤·¤ç¤¦"
+
+#: macro.c:1761
+#, fuzzy, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "dump_definition ¤Ë Ìµ¸ú¤Ê¥Ï¥Ã¥·¥å¥¿¥¤¥× %d"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:485
+#, fuzzy, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "¥é¥Ù¥ë `%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:538
+#, fuzzy, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "`%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr ""
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:750
+#, fuzzy, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤°ú¿ô¥ê¥¹¥È¤¬¥Þ¥¯¥í \"%s\" ¤òµ¯Æ°¤·¤è¤¦¤È¤·¤Þ¤·¤¿"
+
+#: traditional.c:917
+#, fuzzy
+msgid "syntax error in macro parameter list"
+msgstr "\"%s\" ¤Ï¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ë¸½¤ì¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "offset outside bounds of constant string"
+#~ msgstr "¥ª¥Õ¥»¥Ã¥È¤¬Äê¿ôʸ»úÎó¤Î¶­³¦¤Î³°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "__builtin_saveregs ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "`__builtin_args_info' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "`__builtin_args_info' ¤Î°ú¿ô¤¬Èϰϳ°¤Ç¤¹"
+
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "`__builtin_args_info' ¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr "`va_start' ¤¬¸ÇÄê¸Ä°ú¿ô¤Î´Ø¿ôÆâ¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "second parameter of `va_start' not last named argument"
+#~ msgstr "`va_start' ¤ÎÆóÈÖÌܤÎÃͤ¬°ú¿ô¤ÎºÇ¸å¤Î̾Á°¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "`__builtin_next_arg' called without an argument"
+#~ msgstr "`__builtin_next_arg' ¤¬°ú¿ô̵¤·¤Ç¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "`va_start' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "first argument to `va_arg' not of type `va_list'"
+#~ msgstr "`va_arg' ¤ËÂФ¹¤ëÂè°ì°ú¿ô¤¬ `va_list' ·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' is promoted to `%s' when passed through `...'"
+#~ msgstr "`%s' ¤Ï `...' ¤Î½èÍý¤Î²áÄø¤Ç `%s' ¤Ë³Ê¾å¤²¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "(so you should pass `%s' not `%s' to `va_arg')"
+#~ msgstr "(½¾¤Ã¤Æ¡¢`va_arg' ¤Ë¤Ï `%s' ¤ò(`%s' ¤Ç¤Ê¤¯)ÅϤµ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó)"
+
+#~ msgid "invalid arg to `__builtin_frame_address'"
+#~ msgstr "`__builtin_frame_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹"
+
+#~ msgid "invalid arg to `__builtin_return_address'"
+#~ msgstr "`__builtin_return_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹"
+
+#~ msgid "unsupported arg to `__builtin_frame_address'"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_frame_address' ¤Ø¤Î°ú¿ô¤Ç¤¹"
+
+#~ msgid "unsupported arg to `__builtin_return_address'"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_return_address' ¤Ø°ú¿ô¤Ç¤¹"
+
+#~ msgid "second arg to `__builtin_expect' must be a constant"
+#~ msgstr "`__builtin_expect' ¤Ø¤ÎÂèÆó°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "__builtin_longjmp second argument must be 1"
+#~ msgstr "__builtin_longjmp ÂèÆó°ú¿ô¤Ï 1 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "__builtin_trap not supported by this target"
+#~ msgstr "__builtin_trap ¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "built-in function `%s' not currently supported"
+#~ msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤Ï¸½ºß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support"
+#~ msgstr "ʸ»úÎóĹ `%d' ¤Ï¡¢Ä¹¤µ `%d' (ISO C%d ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¥Ý¡¼¥ÈÍ×·ï)¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' attribute directive ignored"
+#~ msgstr "`%s' Â°À­¤Îµ¿»÷Ì¿Î᤬̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' attribute does not apply to types"
+#~ msgstr "`%s' Â°À­¤Ï·¿¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó"
+
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "`%s' Â°À­¤Ë»ØÄꤵ¤ì¤¿°ú¿ô¤Î¸Ä¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "`%s' Â°À­¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "ÉÔÌÀ¤Ê¥Þ¥·¥ó¥â¡¼¥É `%s'"
+
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "¥â¡¼¥É `%s' ¤ËÂФ¹¤ë¥Ç¡¼¥¿·¿¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "type with more precision than %s"
+#~ msgstr "%s ¤è¤ê¤âÀºÌ©¤Ê·¿"
+
+#~ msgid "section attribute cannot be specified for local variables"
+#~ msgstr "section Â°À­¤Ï¥í¡¼¥«¥ëÊÑ¿ô¤ËÂФ·¤Æ¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "section of `%s' conflicts with previous declaration"
+#~ msgstr "`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×Æͤ·¤Þ¤¹"
+
+#~ msgid "section attribute not allowed for `%s'"
+#~ msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "section attributes are not supported for this target"
+#~ msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "requested alignment is not a constant"
+#~ msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "requested alignment is not a power of 2"
+#~ msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬ 2 ¤Î¤Ù¤­¾è¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "requested alignment is too large"
+#~ msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Â礭¤¹¤®¤Þ¤¹"
+
+#~ msgid "alignment may not be specified for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤Æ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "`%s' defined both normally and as an alias"
+#~ msgstr "`%s' ¤¬Ä̾ï¤Î¤â¤Î¤È¥¨¥¤¥ê¥¢¥¹¤È¤ÎξÊý¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "alias arg not a string"
+#~ msgstr "alias °ú¿ô¤¬Ê¸»úÎó¤Ç¤Ï¤Ê¤¤"
+
+#~ msgid "`%s' attribute applies only to functions"
+#~ msgstr "`%s' Â°À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹"
+
+#~ msgid "can't set `%s' attribute after definition"
+#~ msgstr "ÄêµÁ¤Î¸å¤Ç `%s' Â°À­¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "overflow in constant expression"
+#~ msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "integer overflow in expression"
+#~ msgstr "¼°¤ÎÀ°¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "floating point overflow in expression"
+#~ msgstr "¼°¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "large integer implicitly truncated to unsigned type"
+#~ msgstr "Â礭¤ÊÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÀÚ¤êµÍ¤á¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "negative integer implicitly converted to unsigned type"
+#~ msgstr "Éé¤ÎÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "overflow in implicit constant conversion"
+#~ msgstr "°ÅÌÛ¤ÎÄê¿ôÊÑ´¹¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "operation on `%s' may be undefined"
+#~ msgstr "`%s' ¤Ç¤Î±é»»¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È»×¤ï¤ì¤Þ¤¹"
+
+#~ msgid "expression statement has incomplete type"
+#~ msgstr "¼°¤ÎÃæ¤Îʸ¤ËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "case label does not reduce to an integer constant"
+#~ msgstr "case ¥é¥Ù¥ë¤òÀ°¿ôÄê¿ô¤Ë´Ô¸µ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "invalid truth-value expression"
+#~ msgstr "¿¿µ¶Ãͼ°¤¬ÉÔŬÀڤǤ¹"
+
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "Æó¹à±é»»»Ò %s ¤¬ÉÔŬÀڤǤ¹"
+
+#~ msgid "comparison is always false due to limited range of data type"
+#~ msgstr "¥Ç¡¼¥¿·¿¤ÎÈÏ°ÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë false ¤È¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "comparison is always true due to limited range of data type"
+#~ msgstr "¥Ç¡¼¥¿·¿¤ÎÈÏ°ÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë true ¤È¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "comparison of unsigned expression >= 0 is always true"
+#~ msgstr "Éä¹ç̵¤·¤Î¼° >= 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë true ¤Ç¤¹"
+
+#~ msgid "comparison of unsigned expression < 0 is always false"
+#~ msgstr "Éä¹ç̵¤·¤Î¼° < 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë false ¤Ç¤¹"
+
+#~ msgid "struct type value used where scalar is required"
+#~ msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¹½Â¤Âη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "union type value used where scalar is required"
+#~ msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¶¦ÍÑÂη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "array type value used where scalar is required"
+#~ msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤ËÇÛÎ󷿤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "suggest parentheses around assignment used as truth value"
+#~ msgstr "¿¿µ¶ÃͤȤ·¤Æ»È¤ï¤ì¤ëÂåÆþ¤Î¤Þ¤ï¤ê¤Ç¤Ï¡¢´Ý³ç¸Ì¤Î»ÈÍѤò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹"
+
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹"
+
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "pointers are not permitted as case values"
+#~ msgstr "case ¤ÎÃͤȤ·¤Æ¤Î¥Ý¥¤¥ó¥¿¤Ïµö¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "ISO C++ forbids range expressions in switch statements"
+#~ msgstr "ISO C++ ¤Ç¤Ï switch Ê¸¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids range expressions in switch statements"
+#~ msgstr "ISO C ¤Ç¤Ï switch Ê¸¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "empty range specified"
+#~ msgstr "¶õ¤ÎÈϰϤ¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "duplicate (or overlapping) case value"
+#~ msgstr "Æó½Å¤Î(¤¢¤ë¤¤¤Ï½ÅÊ£¤·¤Æ¤¤¤ë) case ¤ÎÃÍ"
+
+#~ msgid "this is the first entry overlapping that value"
+#~ msgstr "¤³¤ì¤¬¤½¤ÎÃͤȽÅÊ£¤·¤¿ºÇ½é¤Î¹àÌܤǤ¹"
+
+#~ msgid "duplicate case value"
+#~ msgstr "½ÅÊ£¤·¤¿ case ¤ÎÃÍ"
+
+#~ msgid "previously used here"
+#~ msgstr "Á°¤Ë¤³¤³¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "multiple default labels in one switch"
+#~ msgstr "°ì¤Ä¤Î switch ¤ËÊ£¿ô¤Î default ¥é¥Ù¥ë¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "this is the first default label"
+#~ msgstr "¤³¤ì¤¬ºÇ½é¤Î default ¥é¥Ù¥ë¤Ç¤¹"
+
+#~ msgid "-Wformat-y2k ignored without -Wformat"
+#~ msgstr "-Wformat-y2k ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "-Wformat-extra-args ignored without -Wformat"
+#~ msgstr "-Wformat-extra-args ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "-Wformat-nonliteral ignored without -Wformat"
+#~ msgstr "-Wformat-nonliteral ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "-Wformat-security ignored without -Wformat"
+#~ msgstr "-Wformat-security ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "-Wmissing-format-attribute ignored without -Wformat"
+#~ msgstr "-Wmissing-format-attribute ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "void value not ignored as it ought to be"
+#~ msgstr "void ¤ÎÃͤ¬ËÜÍè¤Î°ÕÌ£Ä̤ê¤Ë̵»ë¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "conversion to non-scalar type requested"
+#~ msgstr "Èó¥¹¥«¥é¡¼·¿¤Ø¤ÎÊÑ´¹¤¬Í׵ᤵ¤ì¤Þ¤¹"
+
+#~ msgid "unknown C standard `%s'"
+#~ msgstr "ÉÔÌÀ¤Ê C É¸½à `%s'"
+
+#~ msgid "array `%s' assumed to have one element"
+#~ msgstr "ÇÛÎó `%s' ¤Ï°ìÍ×ÁǤò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹"
+
+#~ msgid "`struct %s' incomplete in scope ending here"
+#~ msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤Î°ÌÃ֤ǡ¢`struct %s' ¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "`union %s' incomplete in scope ending here"
+#~ msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `union %s' ¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "`enum %s' incomplete in scope ending here"
+#~ msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `enum %s' ¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "label `%s' defined but not used"
+#~ msgstr "¥é¥Ù¥ë `%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "shadowing built-in function `%s'"
+#~ msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "shadowing library function `%s'"
+#~ msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "library function `%s' declared as non-function"
+#~ msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "built-in function `%s' declared as non-function"
+#~ msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' redeclared as different kind of symbol"
+#~ msgstr "`%s' ¤¬Ê̤Υ·¥ó¥Ü¥ë¼ï¤È¤·¤ÆºÆÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "previous declaration of `%s'"
+#~ msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À"
+
+#~ msgid "conflicting types for built-in function `%s'"
+#~ msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹"
+
+#~ msgid "conflicting types for `%s'"
+#~ msgstr "`%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹"
+
+#~ msgid "A parameter list with an ellipsis can't match an empty parameter name list declaration."
+#~ msgstr "¾Êάµ­¹æÉÕ¤­¥Ñ¥é¥á¥¿¥ê¥¹¥È¤Ï¡¢¶õ¤Î²¾°ú¿ô̾¥ê¥¹¥ÈÀë¸À¤È°ìÃפǤ­¤Þ¤»¤ó¡£"
+
+#~ msgid "An argument type that has a default promotion can't match an empty parameter name list declaration."
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È¤Ç³Ê¾å¤²¤µ¤ì¤ë·¿¤Î°ú¿ô¤¬¡¢¶õ¤Î²¾°ú¿ô̾¥ê¥¹¥ÈÀë¸À¤ÈŬ¹ç¤·¤Þ¤»¤ó¡£"
+
+#~ msgid "redefinition of `%s'"
+#~ msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "conflicting declarations of `%s'"
+#~ msgstr "`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' previously defined here"
+#~ msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' previously declared here"
+#~ msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "prototype for `%s' follows"
+#~ msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "non-prototype definition here"
+#~ msgstr "Èó¥×¥í¥È¥¿¥¤¥×ÄêµÁ¤¬¤³¤³¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "prototype for `%s' follows and number of arguments doesn't match"
+#~ msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô¤Î¸Ä¿ô¤¬°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "prototype for `%s' follows and argument %d doesn't match"
+#~ msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô %d ¤¬°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "`%s' declared inline after being called"
+#~ msgstr "`%s' ¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¤è¤ê¤â¸å¤í¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' declared inline after its definition"
+#~ msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤è¤ê¤â¸å¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "static declaration for `%s' follows non-static"
+#~ msgstr "`%s' ¤ÏÈó static ¤Î¸å¤Ç static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "non-static declaration for `%s' follows static"
+#~ msgstr "`%s' ¤Ï static ¤Î¸å¤ÇÈó static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "const declaration for `%s' follows non-const"
+#~ msgstr "`%s' ¤ÏÈó const ¤Î¸å¤Ç const Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "type qualifiers for `%s' conflict with previous decl"
+#~ msgstr "`%s' ¤Î·¿½¤¾þ»Ò¤¬Á°Êý¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹"
+
+#~ msgid "redundant redeclaration of `%s' in same scope"
+#~ msgstr "`%s' ¤Î¾éĹ¤ÊºÆÀë¸À¤¬Æ±°ì¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "nested extern declaration of `%s'"
+#~ msgstr "`%s' ¤Î extern Àë¸À¤¬¥Í¥¹¥È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' used prior to declaration"
+#~ msgstr "`%s' ¤ÏÀë¸À¤è¤ê¤âÀè¤Ë»ÈÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' was declared implicitly `extern' and later `static'"
+#~ msgstr "`%s' ¤Ï°ÅÌۤˠ`extern' Àë¸À¤µ¤ì¡¢¸å¤Ë `static' Àë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "type mismatch with previous external decl"
+#~ msgstr "·¿¤¬Á°Êý¤Î³°ÉôÀë¸À¤È°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "previous external decl of `%s'"
+#~ msgstr "Á°Êý¤Î `%s' ¤Î³°ÉôÀë¸À"
+
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "·¿¤¬Á°Êý¤Î°ÅÌÛ¤ÎÀë¸À¤È°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "previous implicit declaration of `%s'"
+#~ msgstr "Á°Êý¤Ç¤Î `%s' ¤Î°ÅÌÛŪ¤ÊÀë¸À"
+
+#~ msgid "type of external `%s' is not global"
+#~ msgstr "³°Éô `%s' ¤Î·¿¤Ï¥°¥í¡¼¥Ð¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' was previously implicitly declared to return `int'"
+#~ msgstr "`%s' ¤ÏÁ°Êý¤Ç°ÅÌÛŪ¤Ë `int' ¤òÊÖ¤¹¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' was declared `extern' and later `static'"
+#~ msgstr "`%s' ¤Ï `extern' ¤ÈÀë¸À¤µ¤ì¡¢¸å¤Ç `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "extern declaration of `%s' doesn't match global one"
+#~ msgstr "`%s' ¤Îextern Àë¸À¤Ï¥°¥í¡¼¥Ð¥ë¤Î¤½¤ì¤È°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "`%s' locally external but globally static"
+#~ msgstr "`%s' ¤Ï¥í¡¼¥«¥ëŪ¤Ë¤Ï extern ¤Ç¤¹¤¬¡¢¥°¥í¡¼¥Ð¥ëŪ¤Ë static ¤Ç¤¹"
+
+#~ msgid "declaration of `%s' shadows a parameter"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "declaration of `%s' shadows a symbol from the parameter list"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¥ê¥¹¥È¤Î¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "declaration of `%s' shadows previous local"
+#~ msgstr "`%s' ¤ÎÀë¸À¤ÏÁ°Êý¤Î¥í¡¼¥«¥ë¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "declaration of `%s' shadows global declaration"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ï¥°¥í¡¼¥Ð¥ëÀë¸À¤òʤ¤¤±£¤·¤Þ¤¹"
+
+#~ msgid "function `%s' was previously declared within a block"
+#~ msgstr "´Ø¿ô `%s' ¤Ï¥Ö¥í¥Ã¥¯Æâ¤ÎÁ°Êý¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤Î°ÅÌÛ¤ÎÀë¸À"
+
+#~ msgid "label %s referenced outside of any function"
+#~ msgstr "¥é¥Ù¥ë %s ¤¬¤¢¤é¤æ¤ë´Ø¿ô¤Î³°Â¦¤Ç»²¾È¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "this is a previous declaration"
+#~ msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À"
+
+#~ msgid "unnamed struct/union that defines no instances"
+#~ msgstr "̵̾¹½Â¤ÂÎ/¶¦ÍÑÂΤ¬¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÄêµÁ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "useless keyword or type name in empty declaration"
+#~ msgstr "¶õ¤ÎÀë¸À¤ÎÃæ¤Ë¡¢Ìµ°ÕÌ£¤Ê¥­¡¼¥ï¡¼¥ÉËô¤Ï·¿Ì¾¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "two types specified in one empty declaration"
+#~ msgstr "°ì¤Ä¤Î¶õ¤ÎÀë¸ÀÃæ¤Ë¡¢Æó¤Ä¤Î·¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "empty declaration"
+#~ msgstr "¶õ¤ÎÀë¸À¤Ç¤¹"
+
+#~ msgid "`%s' is usually a function"
+#~ msgstr "`%s' ¤ÏÄ̾ï¤Ï´Ø¿ô¤Ç¤¹"
+
+#~ msgid "typedef `%s' is initialized"
+#~ msgstr "typedef `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "function `%s' is initialized like a variable"
+#~ msgstr "´Ø¿ô `%s' ¤¬ÊÑ¿ô¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë½é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "²¾°ú¿ô `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "variable-sized object may not be initialized"
+#~ msgstr "²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦"
+
+#~ msgid "variable `%s' has initializer but incomplete type"
+#~ msgstr "ÊÑ¿ô `%s' ¤Ë¤Ï½é´ü²½»Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ÉÔ´°Á´·¿¤Ç¤¹"
+
+#~ msgid "elements of array `%s' have incomplete type"
+#~ msgstr "ÇÛÎó `%s' ¤ÎÍ×ÁǤËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "declaration of `%s' has `extern' and is initialized"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ë `extern' ¤¬¤Ä¤¤¤Æ¤ª¤ê¡¢½é´ü²½¤â¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "initializer fails to determine size of `%s'"
+#~ msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#~ msgid "array size missing in `%s'"
+#~ msgstr "`%s' ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "zero or negative size array `%s'"
+#~ msgstr "`%s' ¤ÎÇÛÎó¥µ¥¤¥º¤¬¥¼¥íËô¤ÏÉé¤Ç¤¹"
+
+#~ msgid "storage size of `%s' isn't known"
+#~ msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬¤ï¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "storage size of `%s' isn't constant"
+#~ msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬°ìÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ignoring asm-specifier for non-static local variable `%s'"
+#~ msgstr "Èó static ¥í¡¼¥«¥ëÊÑ¿ô `%s' ¤Ø¤Î asm »ØÄê»Ò¤Ï̵»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "ANSI C forbids parameter `%s' shadowing typedef"
+#~ msgstr "ANSI C ¤Ï typedef ¤òʤ¤¤±£¤¹²¾°ú¿ô `%s' ¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "`long long long' ¤Ï GCC ¤Ë¤È¤Ã¤ÆŤ¹¤®¤Þ¤¹"
+
+#~ msgid "ISO C89 does not support `long long'"
+#~ msgstr "ISO C89 ¤Ï `long long' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "duplicate `%s'"
+#~ msgstr "`%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "two or more data types in declaration of `%s'"
+#~ msgstr "`%s' ¤ÎÀë¸À¤ËÆó¤Ä°Ê¾å¤Î¥Ç¡¼¥¿·¿¤¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' fails to be a typedef or built in type"
+#~ msgstr "`%s' ¤ò typedef ¤Þ¤¿¤ÏÁȤ߹þ¤ß·¿¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "type defaults to `int' in declaration of `%s'"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ç·¿¤¬¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "both long and short specified for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤Æ long ¤È short ¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "long or short specified with char for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤Æ char ¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "long or short specified with floating type for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤ÆÉâÆ°¾®¿ô·¿¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "the only valid combination is `long double'"
+#~ msgstr "Í£°ì¤ÎÍ­¸ú¤ÊÁȹç¤ï¤»¤Ï `long double' ¤Ç¤¹"
+
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤ÆÉä¹æ¤¢¤ê¤ÈÉä¹æ¤Ê¤·¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤Æ long, short, signed ¤Þ¤¿¤Ï unsigned ¤ÏÉÔŬÀڤǤ¹"
+
+#~ msgid "long, short, signed or unsigned used invalidly for `%s'"
+#~ msgstr "`%s' ¤ËÂФ¹¤ë long, short, singed ¤ä unsigned ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹"
+
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "`%s' ¤ËÂФ·¤Æ complex ¤ÏÉÔŬÀڤǤ¹"
+
+#~ msgid "ISO C89 does not support complex types"
+#~ msgstr "ISO C89 ¤Ï complex ·¿¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "ISO C ¤Ï `double complex' ¤ò°ÕÌ£¤¹¤ë̵½¤¾þ¤Î `complex' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "ISO C ¤ÏÀ°¿ô·¿¤Î complex ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "duplicate `const'"
+#~ msgstr "½ÅÊ£¤·¤¿ `const'"
+
+#~ msgid "duplicate `restrict'"
+#~ msgstr "½ÅÊ£¤·¤¿¥é¥Ù¥ë `restrict'"
+
+#~ msgid "duplicate `volatile'"
+#~ msgstr "½ÅÊ£¤·¤¿ `volatile'"
+
+#~ msgid "multiple storage classes in declaration of `%s'"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ë¤ª¤¤¤ÆÊ£¿ô¤ÎÊݸ¥¯¥é¥¹"
+
+#~ msgid "function definition declared `auto'"
+#~ msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `auto' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "function definition declared `register'"
+#~ msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `register' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "function definition declared `typedef'"
+#~ msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `typedef' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "storage class specified for structure field `%s'"
+#~ msgstr "¹½Â¤ÂÎ¥Õ¥£¡¼¥ë¥É `%s' ¤Ë»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹"
+
+#~ msgid "storage class specified for parameter `%s'"
+#~ msgstr "²¾°ú¿ô `%s' ¤Ç»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹"
+
+#~ msgid "storage class specified for typename"
+#~ msgstr "·¿Ì¾¤ËÂФ·¤Æ»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹"
+
+#~ msgid "`%s' initialized and declared `extern'"
+#~ msgstr "`%s' ¤¬½é´ü²½¤µ¤ì¤ë¤È¤³¤í¤Ç¡¢`extern' Àë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s' has both `extern' and initializer"
+#~ msgstr "`%s' ¤Ë `extern' ¤È½é´ü²½»Ò¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "nested function `%s' declared `extern'"
+#~ msgstr "¥Í¥¹¥È¤·¤¿´Ø¿ô `%s' ¤Ï `extern' ¤ËÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "top-level declaration of `%s' specifies `auto'"
+#~ msgstr "`%s' ¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤ÎÀë¸À¤¬ `auto' ¤ò»ØÄꤷ¤Þ¤¹"
+
+#~ msgid "declaration of `%s' as array of voids"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ï void ¤ÎÇÛÎó"
+
+#~ msgid "declaration of `%s' as array of functions"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ï´Ø¿ô¤ÎÇÛÎó"
+
+#~ msgid "size of array `%s' has non-integer type"
+#~ msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿"
+
+#~ msgid "ISO C forbids zero-size array `%s'"
+#~ msgstr "ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Éé¤Ç¤¹"
+
+#~ msgid "ISO C89 forbids array `%s' whose size can't be evaluated"
+#~ msgstr "ISO C89 ¤Ï¥µ¥¤¥º¤¬É¾²Á¤Ç¤­¤Ê¤¤ÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C89 forbids variable-size array `%s'"
+#~ msgstr "ISO C89 ¤Ï²ÄÊÑĹ¥µ¥¤¥º¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Â礭¤¹¤®¤Þ¤¹"
+
+#~ msgid "ISO C89 does not support flexible array members"
+#~ msgstr "ISO C89 ¤Ï²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "array type has incomplete element type"
+#~ msgstr "ÇÛÎó¤Î·¿¤¬ÉÔ´°Á´Í×ÁÇ·¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ANSI C forbids const or volatile function types"
+#~ msgstr "ANSI C ¤Ï const ¤ä volatile ´Ø¿ô·¿¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "`%s' declared as function returning a function"
+#~ msgstr "`%s' ¤Ï´Ø¿ô¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' declared as function returning an array"
+#~ msgstr "`%s' ¤ÏÇÛÎó¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids qualified void function return type"
+#~ msgstr "ISO C ¤Ï½¤¾þÉÕ¤­ void ·¿¤ÎÌá¤êÃͤò»ý¤Ä´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "type qualifiers ignored on function return type"
+#~ msgstr "´Ø¿ôÌá¤êÃͤη¿½¤¾þ»Ò¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "ISO C forbids qualified function types"
+#~ msgstr "ISO C ¤Ï´Ø¿ô¤Î·¿½¤¾þ»Ò¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "invalid type modifier within pointer declarator"
+#~ msgstr "¥Ý¥¤¥ó¥¿Àë¸À»Ò¤ËÉÔŬÀڤʷ¿½¤¾þ»Ò"
+
+#~ msgid "ISO C forbids const or volatile function types"
+#~ msgstr "ISO C ¤Ï const ¤ä volatile ¤Î´Ø¿ô·¿¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "variable or field `%s' declared void"
+#~ msgstr "ÊÑ¿ô¤Þ¤¿¤ÏÎΰè `%s' ¤Ï void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "field `%s' declared as a function"
+#~ msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "field `%s' has incomplete type"
+#~ msgstr "Îΰè `%s' ¤ÏÉÔ´°Á´¤Ê·¿¤Ç¤¹"
+
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤ËÂФ·¤ÆÉÔŬÀÚ¤ÊÊݸ¥¯¥é¥¹"
+
+#~ msgid "`noreturn' function returns non-void value"
+#~ msgstr "`noreturn' ´Ø¿ô¤¬Èó void ÃͤòÊÖ¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "cannot inline function `main'"
+#~ msgstr "`main' ¤ò inline ´Ø¿ô¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "variable `%s' declared `inline'"
+#~ msgstr "ÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "function declaration isn't a prototype"
+#~ msgstr "´Ø¿ôÀë¸À¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "parameter names (without types) in function declaration"
+#~ msgstr "´Ø¿ôÀë¸ÀÃæ¤Ë¡Ê·¿¤Î̵¤¤¡Ë²¾°ú¿ô̾¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "parameter has incomplete type"
+#~ msgstr "²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤Ç¤¹"
+
+#~ msgid "parameter `%s' points to incomplete type"
+#~ msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "parameter points to incomplete type"
+#~ msgstr "²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "parameter `%s' has just a forward declaration"
+#~ msgstr "²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`void' in parameter list must be the entire list"
+#~ msgstr "²¾°ú¿ô¥ê¥¹¥ÈÃæ¤Î `void' ¤Ï¥ê¥¹¥ÈÁ´ÂΤòÀê¤á¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s %s' declared inside parameter list"
+#~ msgstr "`%s %s' ¤Ï²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "anonymous struct declared inside parameter list"
+#~ msgstr "̵̾¹½Â¤ÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "anonymous union declared inside parameter list"
+#~ msgstr "̵̾¶¦ÍÑÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "anonymous enum declared inside parameter list"
+#~ msgstr "̵̾Îóµó»Ò¤¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "its scope is only this definition or declaration, which is probably not what you want."
+#~ msgstr "¤½¤Î¥¹¥³¡¼¥×¤ÏÄêµÁ¤«Àë¸À¤À¤±¤Ç¤¹¡¢¶²¤é¤¯Ë¾¤ó¤À¤³¤È¤È°Û¤Ê¤ë¤Ç¤·¤ç¤¦¡£"
+
+#~ msgid "redefinition of `%s %s'"
+#~ msgstr "`%s %s' ¤ÎºÆÄêµÁ"
+
+#~ msgid "%s defined inside parms"
+#~ msgstr "%s¤¬²¾°ú¿ôÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "union"
+#~ msgstr "¶¦ÍÑÂÎ"
+
+#~ msgid "structure"
+#~ msgstr "¹½Â¤ÂÎ"
+
+#~ msgid "%s has no %s"
+#~ msgstr "%s¤¬%s¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "named members"
+#~ msgstr "̾Á°ÉÕ¤­¥á¥ó¥Ð"
+
+#~ msgid "members"
+#~ msgstr "¥á¥ó¥Ð"
+
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "`%s' ¤Î¥Í¥¹¥È¤·¤¿ºÆÄêµÁ"
+
+#~ msgid "bit-field `%s' width not an integer constant"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÏÉÔŬÀڤʷ¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "bit-field `%s' type invalid in ISO C"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ·¿¤Ï ISO C ¤Ç¤ÏÉÔŬÀڤǤ¹"
+
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬Éé¤Î¿ô¤Ç¤¹"
+
+#~ msgid "width of `%s' exceeds its type"
+#~ msgstr "`%s' ¤ÎÉý¤Ï¤½¤Î·¿¤Î¥µ¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "zero width for bit-field `%s'"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬ 0 ¤Ç¤¹"
+
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "`%s' ¤Ï¤½¤Î·¿¤ÎÃͤè¤ê¤â¶¹¤¤¤Ç¤¹"
+
+#~ msgid "flexible array member in union"
+#~ msgstr "¶¦ÍÑÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "flexible array member not at end of struct"
+#~ msgstr "¹½Â¤ÂΤκǸå¤Ç¤Ï¤Ê¤¤½ê¤Ë²ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "flexible array member in otherwise empty struct"
+#~ msgstr "¹½Â¤ÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð°Ê³°¤Î¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "duplicate member `%s'"
+#~ msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'"
+
+#~ msgid "union cannot be made transparent"
+#~ msgstr "¶¦ÍÑÂΤòÆ©²áŪ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "redeclaration of `enum %s'"
+#~ msgstr "`enum %s' ¤ÎºÆÀë¸À"
+
+#~ msgid "enum defined inside parms"
+#~ msgstr "²¾°ú¿ôÆâ¤Ç enum ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "enumeration values exceed range of largest integer"
+#~ msgstr "Îóµó»Ò¤ÎÃͤ¬À°¿ô¤ÎÈϰϤκÇÂçÃͤòĶ¤¨¤Þ¤·¤¿"
+
+#~ msgid "enumerator value for `%s' not integer constant"
+#~ msgstr "`%s' ¤ÎÎóµóÃͤ¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "overflow in enumeration values"
+#~ msgstr "ÎóµóÃͤ¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼"
+
+#~ msgid "ISO C restricts enumerator values to range of `int'"
+#~ msgstr "ISO C ¤ÏÎóµó»Ò¤ÎÃͤò `int' ¤ÎÈϰϤ˸ÂÄꤷ¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "return type is an incomplete type"
+#~ msgstr "Ìá¤êÃͤη¿¤¬ÉÔ´°Á´·¿¤Ç¤¹"
+
+#~ msgid "return type defaults to `int'"
+#~ msgstr "Ìá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹"
+
+#~ msgid "no previous prototype for `%s'"
+#~ msgstr "`%s' ¤ÎÁ°Êý¥×¥í¥È¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' was used with no prototype before its definition"
+#~ msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤Ë¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "no previous declaration for `%s'"
+#~ msgstr "`%s' ¤ÎÁ°ÊýÀë¸À¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' was used with no declaration before its definition"
+#~ msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤ÇÀë¸À¤Ê¤·¤Ç»ÈÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "return type of `%s' is not `int'"
+#~ msgstr "`%s' ¤ÎÌá¤êÃͤη¿¤¬ `int' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "first argument of `%s' should be `int'"
+#~ msgstr "`%s' ¤ÎÂè°ì°ú¿ô¤Ï `int' ¤È¤¹¤Ù¤­¤Ç¤¹"
+
+#~ msgid "second argument of `%s' should be `char **'"
+#~ msgstr "`%s' ¤ÎÂèÆó°ú¿ô¤Ï `char **' ¤È¤¹¤Ù¤­¤Ç¤¹"
+
+#~ msgid "third argument of `%s' should probably be `char **'"
+#~ msgstr "`%s' ¤ÎÂè»°°ú¿ô¤Ï¤ª¤½¤é¤¯ `char **' ¤È¤¹¤Ù¤­¤Ç¤·¤ç¤¦"
+
+#~ msgid "`%s' takes only zero or two arguments"
+#~ msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' is normally a non-static function"
+#~ msgstr "`%s' ¤ÏÄ̾Èó static ¤Ê´Ø¿ô¤Ç¤¹"
+
+#~ msgid "parm types given both in parmlist and separately"
+#~ msgstr "²¾°ú¿ô¤Î·¿¤¬¡¢²¾°ú¿ô¥ê¥¹¥È¤È¤ÏÊ̤ΤȤ³¤í¤«¤é¤âÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "parameter name omitted"
+#~ msgstr "²¾°ú¿ô¤¬¾Êά¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "parameter `%s' declared void"
+#~ msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "parameter name missing from parameter list"
+#~ msgstr "²¾°ú¿ô¥ê¥¹¥È¤«¤é¤Î²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "multiple parameters named `%s'"
+#~ msgstr "½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'"
+
+#~ msgid "type of `%s' defaults to `int'"
+#~ msgstr "`%s' ¤Î·¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹"
+
+#~ msgid "declaration for parameter `%s' but no such parameter"
+#~ msgstr "²¾°ú¿ô `%s' ¤ÎÀë¸À¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ó¤Ê²¾°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "number of arguments doesn't match prototype"
+#~ msgstr "²¾°ú¿ô¤Î¿ô¤¬¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "promoted argument `%s' doesn't match prototype"
+#~ msgstr "³Ê¾å¤²¤µ¤ì¤¿²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "argument `%s' doesn't match prototype"
+#~ msgstr "²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ë°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "type of parameter `%s' is not declared"
+#~ msgstr "²¾°ú¿ô `%s' ¤Î·¿¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "this function may return with or without a value"
+#~ msgstr "¤³¤Î´Ø¿ô¤ÏÃͤòÊÖ¤·¤¿¤êÊÖ¤µ¤Ê¤«¤Ã¤¿¤ê¤¹¤ë¤Ç¤·¤ç¤¦"
+
+#~ msgid "size of return value of `%s' is %u bytes"
+#~ msgstr "`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %u ¥Ð¥¤¥È¤Ç¤¹"
+
+#~ msgid "size of return value of `%s' is larger than %d bytes"
+#~ msgstr "`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤ê¤âÂ礭¤¯¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "`for' loop initial declaration used outside C99 mode"
+#~ msgstr "`for' ¥ë¡¼¥×¤Î½é´ü²½Àë¸À¤¬ C99 ¥â¡¼¥É°Ê³°¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "`%s %s' declared in `for' loop initial declaration"
+#~ msgstr "`%s %s' ¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "declaration of non-variable `%s' in `for' loop initial declaration"
+#~ msgstr "ÈóÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸À¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "declaration of static variable `%s' in `for' loop initial declaration"
+#~ msgstr "¥¹¥¿¥Æ¥£¥Ã¥¯ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration"
+#~ msgstr "`extern' ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "ignoring `%s' at end of `-f%s'"
+#~ msgstr "`%s'(`-f%s' ¤Î½ª¤ê¤Ë¤¢¤ë) ¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "argument format specified for non-function `%s'"
+#~ msgstr "Èó´Ø¿ô `%s' ¤Î°ú¿ô¤Ë format Â°À­¤¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "unrecognized format specifier"
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È»ØÄê»Ò"
+
+#~ msgid "`%s' is an unrecognized format function type"
+#~ msgstr "`%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È´Ø¿ô·¿¤Ç¤¹"
+
+#~ msgid "format string has invalid operand number"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ËÉÔŬÀڤʥª¥Ú¥é¥ó¥É¿ô¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "format string arg follows the args to be formatted"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "format string arg not a string type"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬Ê¸»úÎ󷿤ǤϤ¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "args to be formatted is not '...'"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤¬¡¢'...' ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "strftime formats cannot format arguments"
+#~ msgstr "strftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï°ú¿ô¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function does not return string type"
+#~ msgstr "´Ø¿ô¤¬Ê¸»úÎ󷿤òÊÖ¤·¤Þ¤»¤ó"
+
+#~ msgid "` ' flag"
+#~ msgstr "` ' ¥Õ¥é¥°"
+
+#~ msgid "the ` ' printf flag"
+#~ msgstr "printf ¤Î ` ' ¥Õ¥é¥°"
+
+#~ msgid "`+' flag"
+#~ msgstr "`+' ¥Õ¥é¥°"
+
+#~ msgid "the `+' printf flag"
+#~ msgstr "printf ¤Î `+' ¥Õ¥é¥°"
+
+#~ msgid "`#' flag"
+#~ msgstr "`#' ¥Õ¥é¥°"
+
+#~ msgid "the `#' printf flag"
+#~ msgstr "printf ¤Î `#' ¥Õ¥é¥°"
+
+#~ msgid "`0' flag"
+#~ msgstr "`0' ¥Õ¥é¥°"
+
+#~ msgid "the `0' printf flag"
+#~ msgstr "printf ¤Î `0' ¥Õ¥é¥°"
+
+#~ msgid "`-' flag"
+#~ msgstr "`-' ¥Õ¥é¥°"
+
+#~ msgid "the `-' printf flag"
+#~ msgstr "printf ¤Î `-' ¥Õ¥é¥°"
+
+#~ msgid "`'' flag"
+#~ msgstr "`'' ¥Õ¥é¥°"
+
+#~ msgid "the `'' printf flag"
+#~ msgstr "printf ¤Î `'' ¥Õ¥é¥°"
+
+#~ msgid "`I' flag"
+#~ msgstr "`I' ¥Õ¥é¥°"
+
+#~ msgid "the `I' printf flag"
+#~ msgstr "printf ¤Î `I' ¥Õ¥é¥°"
+
+#~ msgid "field width"
+#~ msgstr "¥Õ¥£¡¼¥ë¥ÉÉý"
+
+#~ msgid "field width in printf format"
+#~ msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤Î¥Õ¥£¡¼¥ë¥ÉÉý"
+
+#~ msgid "precision"
+#~ msgstr "ÀºÅÙ"
+
+#~ msgid "precision in printf format"
+#~ msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤ÎÀºÅÙ"
+
+#~ msgid "length modifier"
+#~ msgstr "Ťµ½¤¾þ»Ò"
+
+#~ msgid "length modifier in printf format"
+#~ msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò"
+
+#~ msgid "assignment suppression"
+#~ msgstr "ÂåÆþ¤ÎÍÞÀ©"
+
+#~ msgid "`a' flag"
+#~ msgstr "`a' ¥Õ¥é¥°"
+
+#~ msgid "the `a' scanf flag"
+#~ msgstr "scanf ¤Î `a' ¥Õ¥é¥°"
+
+#~ msgid "field width in scanf format"
+#~ msgstr "scanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý"
+
+#~ msgid "length modifier in scanf format"
+#~ msgstr "scanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò"
+
+#~ msgid "the `'' scanf flag"
+#~ msgstr "scanf ¤Î `'' ¥Õ¥é¥°"
+
+#~ msgid "the `I' scanf flag"
+#~ msgstr "scanf ¤Î `I' ¥Õ¥é¥°"
+
+#~ msgid "`_' flag"
+#~ msgstr "`_' ¥Õ¥é¥°"
+
+#~ msgid "the `_' strftime flag"
+#~ msgstr "strftime ¤Î `_' ¥Õ¥é¥°"
+
+#~ msgid "the `-' strftime flag"
+#~ msgstr "strftime ¤Î `-' ¥Õ¥é¥°"
+
+#~ msgid "the `0' strftime flag"
+#~ msgstr "strftime ¤Î `^' ¥Õ¥é¥°"
+
+#~ msgid "`^' flag"
+#~ msgstr "`^' ¥Õ¥é¥°"
+
+#~ msgid "the `^' strftime flag"
+#~ msgstr "strftime ¤Î `^' ¥Õ¥é¥°"
+
+#~ msgid "the `#' strftime flag"
+#~ msgstr "strftime ¤Î `#' ¥Õ¥é¥°"
+
+#~ msgid "field width in strftime format"
+#~ msgstr "strftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý"
+
+#~ msgid "`E' modifier"
+#~ msgstr "`E' ½¤¾þ»Ò"
+
+#~ msgid "the `E' strftime modifier"
+#~ msgstr "strftime ¤Î `E' ½¤¾þ»Ò"
+
+#~ msgid "`O' modifier"
+#~ msgstr "`O' ½¤¾þ»Ò"
+
+#~ msgid "the `O' strftime modifier"
+#~ msgstr "strftime ¤Î `O' ½¤¾þ»Ò"
+
+#~ msgid "the `O' modifier"
+#~ msgstr "the `O' ½¤¾þ»Ò"
+
+#~ msgid "fill character"
+#~ msgstr "µÍ¤áʸ»ú"
+
+#~ msgid "fill character in strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎµÍ¤áʸ»ú"
+
+#~ msgid "the `^' strfmon flag"
+#~ msgstr "strfmon ¤Î `^' ¥Õ¥é¥°"
+
+#~ msgid "the `+' strfmon flag"
+#~ msgstr "strfmon ¤Î `+' ¥Õ¥é¥°"
+
+#~ msgid "`(' flag"
+#~ msgstr "`(' ¥Õ¥é¥°"
+
+#~ msgid "the `(' strfmon flag"
+#~ msgstr "strfmon ¤Î `(' ¥Õ¥é¥°"
+
+#~ msgid "`!' flag"
+#~ msgstr "`!' ¥Õ¥é¥°"
+
+#~ msgid "the `!' strfmon flag"
+#~ msgstr "strfmon ¤Î `!' ¥Õ¥é¥°"
+
+#~ msgid "the `-' strfmon flag"
+#~ msgstr "strfmon ¤Î `-' ¥Õ¥é¥°"
+
+#~ msgid "field width in strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý"
+
+#~ msgid "left precision"
+#~ msgstr "º¸ÀºÅÙ"
+
+#~ msgid "left precision in strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Îº¸ÀºÅÙ"
+
+#~ msgid "right precision"
+#~ msgstr "±¦ÀºÅÙ"
+
+#~ msgid "right precision in strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î±¦ÀºÅÙ"
+
+#~ msgid "length modifier in strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò"
+
+#~ msgid "function might be possible candidate for `%s' format attribute"
+#~ msgstr "´Ø¿ô¤Ï¶²¤é¤¯ `%s' format Â°À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹"
+
+#~ msgid "missing $ operand number in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Ç $ ±é»»»ÒÈÖ¹æ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s does not support %%n$ operand number formats"
+#~ msgstr "%s ¤Ï %%n$ ±é»»»ÒÈÖ¹æ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "operand number out of range in format"
+#~ msgstr "±é»»»ÒÈֹ椬¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÈϰϳ°¤Ç¤¹"
+
+#~ msgid "format argument %d used more than once in %s format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬ %s ¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤ÇÆó²ó°Ê¾å»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "format argument %d unused before used argument %d in $-style format"
+#~ msgstr "$-¼°¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬°ú¿ô %d ¤¬»È¤ï¤ì¤ëÁ°¤Ç̤»ÈÍѤǤ¹"
+
+#~ msgid "format not a string literal, format string not checked"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤¬Ê¸»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "format not a string literal and no format arguments"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤ÏÈóʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¡¢³î¤Ä¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤ò»ý¤Á¤Þ¤»¤ó"
+
+#~ msgid "format not a string literal, argument types not checked"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ïʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢°ú¿ô¤Î·¿¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "too many arguments for format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "unused arguments in $-style format"
+#~ msgstr "$-¼°¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç̤»ÈÍѤΰú¿ô¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "zero-length format string"
+#~ msgstr "Ťµ 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó"
+
+#~ msgid "format is a wide character string"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥ï¥¤¥Éʸ»úÎó¤Ç¤¹"
+
+#~ msgid "unterminated format string"
+#~ msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó"
+
+#~ msgid "null format string"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎ󤬠null ¤Ç¤¹"
+
+#~ msgid "embedded `\\0' in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `\\0' ¤¬Ëä¤á¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "spurious trailing `%%' in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `%%' ¤Îº¯Àפ餷¤­¤â¤Î¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "repeated %s in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤Ç %s ¤ò·«¤êÊÖ¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "missing fill character at end of strfmon format"
+#~ msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤ÇµÍ¤áʸ»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "too few arguments for format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹"
+
+#~ msgid "zero width in %s format"
+#~ msgstr "%s ¤ÇÉý 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹"
+
+#~ msgid "empty left precision in %s format"
+#~ msgstr "%s ¤Ç¶õ¤Îº¸ÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹"
+
+#~ msgid "field precision"
+#~ msgstr "¥Õ¥£¡¼¥ë¥ÉÀºÅÙ"
+
+#~ msgid "empty precision in %s format"
+#~ msgstr "%s ¤Ç¶õ¤ÎÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹"
+
+#~ msgid "%s does not support the `%s' %s length modifier"
+#~ msgstr "%s ¤Ï `%s' %s Ä¹¤µ½¤¾þ»Ò¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "conversion lacks type at end of format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤Ç·¿ÊÑ´¹Ê¸»ú¤¬·ç¤±¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú `%c' ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "unknown conversion type character 0x%x in format"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú 0x%x ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s does not support the `%%%c' %s format"
+#~ msgstr "%s ¤Ï `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "%s used with `%%%c' %s format"
+#~ msgstr "%s ¤¬ `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "%s does not support %s"
+#~ msgstr "%s ¤Ï %s ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "%s does not support %s with the `%%%c' %s format"
+#~ msgstr "%s ¤Ï %s ¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦»ö¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "%s ignored with %s and `%%%c' %s format"
+#~ msgstr "%s ¤Ï %s µÚ¤Ó `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "%s ignored with %s in %s format"
+#~ msgstr "%s ¤Ï %s ¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "use of %s and %s together with `%%%c' %s format"
+#~ msgstr "%s ¤È %s ¤È¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "use of %s and %s together in %s format"
+#~ msgstr "%s ¤È %s ¤È¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÃæ¤Ç»È¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%%%c' yields only last 2 digits of year in some locales"
+#~ msgstr "`%%%c' ¤Ï¥í¥±¡¼¥ë¤Ë¤è¤Ã¤Æ¤Ï¡¢Ç¯¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹"
+
+#~ msgid "`%%%c' yields only last 2 digits of year"
+#~ msgstr "`%%%c' ¤Ïǯ¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹"
+
+#~ msgid "no closing `]' for `%%[' format"
+#~ msgstr "`%%[' ¥Õ¥©¡¼¥Þ¥Ã¥È¤òÊĤ¸¤ë `]' ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "use of `%s' length modifier with `%c' type character"
+#~ msgstr "`%s' Ä¹¤µ½¤¾þ»Ò¤ò `%c' ·¿ÊÑ´¹Ê¸»ú¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s does not support the `%%%s%c' %s format"
+#~ msgstr "%s ¤Ï `%%%s%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "operand number specified with suppressed assignment"
+#~ msgstr "±é»»»ÒÈֹ椬ÂåÆþ¤ÎÍÞÀ©¤È¶¦¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "operand number specified for format taking no argument"
+#~ msgstr "±é»»»ÒÈֹ椬°ú¿ô¤ò¼è¤é¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "writing through null pointer (arg %d)"
+#~ msgstr "null ¥Ý¥¤¥ó¥¿¤ò½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)"
+
+#~ msgid "reading through null pointer (arg %d)"
+#~ msgstr "null ¥Ý¥¤¥ó¥¿¤òÆɹþ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)"
+
+#~ msgid "writing into constant object (arg %d)"
+#~ msgstr "Äê¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Ë½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)"
+
+#~ msgid "extra type qualifiers in format argument (arg %d)"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤Ë;ʬ¤Ê·¿½¤¾þ»Ò¤¬¤¢¤ê¤Þ¤¹ (°ú¿ô %d)"
+
+#~ msgid "format argument is not a pointer (arg %d)"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)"
+
+#~ msgid "format argument is not a pointer to a pointer (arg %d)"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)"
+
+#~ msgid "%s is not type %s (arg %d)"
+#~ msgstr "%s ¤Ï·¿ %s ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)"
+
+#~ msgid "%s format, %s arg (arg %d)"
+#~ msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï %s ¤Ç¤¹¤¬¡¢°ú¿ô¤Ï %s ¤Ç¤¹ (°ú¿ô %d)"
+
+#~ msgid "badly nested C headers from preprocessor"
+#~ msgstr "¥×¥ê¥×¥í¥»¥Ã¥µ¤«¤é°Û¾ï¤Ë¥Í¥¹¥È¤µ¤ì¤¿ C ¥Ø¥Ã¥À¤Ç¤¹"
+
+#~ msgid "leaving more files than we entered"
+#~ msgstr "Æþ¤Ã¤¿¥Õ¥¡¥¤¥ë¤è¤ê¤â½Ð¤¿¥Õ¥¡¥¤¥ë¤ÎÊý¤¬Â¿¤¯¤Ê¤ê¤Þ¤·¤¿"
+
+#~ msgid "ignoring #pragma %s %s"
+#~ msgstr "#pragma %s %s ¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "ignoring #pragma %s"
+#~ msgstr "#pragma %s ¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "non hex digit '%c' in universal-character-name"
+#~ msgstr "Èó 16 ¿Ê¿ô '%c' ¤¬ universal-character-name Æâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "universal-character-name on EBCDIC target"
+#~ msgstr "EBCDIC ¤Î¥¿¡¼¥²¥Ã¥È¤Ç `%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "universal-character-name used for '%c'"
+#~ msgstr "`%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "hex escape out of range"
+#~ msgstr "16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹"
+
+#~ msgid "unknown escape sequence: '\\' followed by char 0x%x"
+#~ msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹: Ê¸»ú 0x%x ¤¬¸å¤Ë³¤¯ '\\'"
+
+#~ msgid "universal-character-name '\\u%04x' not valid in identifier"
+#~ msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\u%04x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "both 'f' and 'l' suffixes on floating constant"
+#~ msgstr "ÉâÆ°¾®¿ôÄê¿ô¤Ë 'f' ¤È 'l' ÀÜÈø¼­¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "floating point number exceeds range of '%s'"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬ '%s' ¤ÎÈϰϤòĶ¤¨¤Þ¤·¤¿"
+
+#~ msgid "stray '%c' in program"
+#~ msgstr "¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '%c'"
+
+#~ msgid "stray '\\%o' in program"
+#~ msgstr "¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '\\%o'"
+
+#~ msgid "floating constant may not be in radix 16"
+#~ msgstr "´ð¿ô 16 ¤ÎÉâÆ°¾¯¿ôÄê¿ô¤Ïµö¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "traditional C rejects the 'l' suffix"
+#~ msgstr "¸Å¤¤ C ¤Ç¤Ï 'l' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹"
+
+#~ msgid "ISO C forbids imaginary numeric constants"
+#~ msgstr "ISO C ¤Ç¤Ïµõ¿ôÄê¿ô¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "floating point number exceeds range of 'double'"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬ 'double' ¤ÎÈϰϤòĶ¤¨¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "two 'u' suffixes on integer constant"
+#~ msgstr "2 ¤Ä¤Î 'u' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "traditional C rejects the 'u' suffix"
+#~ msgstr "ÅÁÅýŪ¤Ê C ¤Ç¤Ï 'u' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹"
+
+#~ msgid "three 'l' suffixes on integer constant"
+#~ msgstr "3 ¤Ä¤Î 'l' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "'lul' is not a valid integer suffix"
+#~ msgstr "'lul' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "'Ll' and 'lL' are not valid integer suffixes"
+#~ msgstr "'Ll' ¤È 'lL' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "more than one 'i' or 'j' suffix on integer constant"
+#~ msgstr "Ê£¿ô¤Î 'i' ¤ä 'j' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits"
+#~ msgstr "À°¿ôÄê¿ô¤¬¥³¥ó¥Ñ¥¤¥é¤Î¸½ºß¤ÎÀßÄê¤è¤êÂ礭¤¹¤®¤ë¤¿¤á¡¢%d ¥Ó¥Ã¥È¤ËÀÚ¤êµÍ¤á¤Þ¤·¤¿"
+
+#~ msgid "width of integer constant changes with -traditional"
+#~ msgstr "-traditional ¤ò¤Ä¤±¤ë¤ÈÀ°¿ôÄê¿ô¤ÎÉý¤¬ÊѤï¤ê¤Þ¤¹"
+
+#~ msgid "integer constant is unsigned in ISO C, signed with -traditional"
+#~ msgstr "À°¿ôÄê¿ô¤Ï ISO C ¤Ç¤ÏÉä¹ç̵¤·¤Ç¡¢-traditional ¤ò¤Ä¤±¤ë¤ÈÉä¹çÉÕ¤­¤Ç¤¹"
+
+#~ msgid "width of integer constant may change on other systems with -traditional"
+#~ msgstr "À°¿ôÄê¿ô¤ÎÉý¤Ï¾¤Î¥·¥¹¥Æ¥à¤Ç -traditional ¤ò¤Ä¤±¤ë¤ÈÊѤï¤ë¤Ç¤·¤ç¤¦"
+
+#~ msgid "integer constant larger than the maximum value of %s"
+#~ msgstr "%s ¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹"
+
+#~ msgid "decimal constant is so large that it is unsigned"
+#~ msgstr "½½¿ÊÄê¿ô¤¬¤È¤Æ¤âÂ礭¤¤¤Î¤ÇÉä¹ç̵¤·¤È¤·¤Þ¤·¤¿"
+
+#~ msgid "integer constant is larger than the maximum value for its type"
+#~ msgstr "¤½¤Î·¿¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹"
+
+#~ msgid "missing white space after number '%.*s'"
+#~ msgstr "¿ô»ú '%.*s' ¤Î¸å¤Ë¶õÇò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Ignoring invalid multibyte character"
+#~ msgstr "̵¸ú¤Ê¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "syntax error"
+#~ msgstr "ʸˡ¥¨¥é¡¼"
+
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "ISO C ¤Ï¶õ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "argument of `asm' is not a constant string"
+#~ msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó "
+
+#~ msgid "ISO C forbids data definition with no type or storage class"
+#~ msgstr "ISO C ¤Ï·¿¤äµ­²±¥¯¥é¥¹¤Î¤Ê¤¤¥Ç¡¼¥¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "data definition has no type or storage class"
+#~ msgstr "¥Ç¡¼¥¿ÄêµÁ¤¬·¿¤äµ­²±¥¯¥é¥¹¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "ISO C does not allow extra `;' outside of a function"
+#~ msgstr "ISO C ¤Ç¤Ï´Ø¿ô³°¤Ç¤Î;ʬ¤Ê `;' ¤òµö¤·¤Þ¤»¤ó"
+
+#~ msgid "ISO C forbids `&&'"
+#~ msgstr "ISO C ¤Ï `&&' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "`sizeof' applied to a bit-field"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤¿ `sizeof'"
+
+#~ msgid "ISO C forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C89 forbids compound literals"
+#~ msgstr "ISO C89 ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids braced-groups within expressions"
+#~ msgstr "ISO C ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "traditional C rejects string concatenation"
+#~ msgstr "¸Å¤¤ C ¤Ç¤Ïʸ»úÎó·ë¹ç¤òµñÈݤ·¤Þ¤¹"
+
+#~ msgid "ISO C does not permit use of `varargs.h'"
+#~ msgstr "ISO C ¤Ç¤Ï `varargs.h' ¤ÎÍøÍѤòµö¤·¤Þ¤»¤ó"
+
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "`%s' ¤ÏÀë¸À¤Î»Ï¤Þ¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ISO C forbids empty initializer braces"
+#~ msgstr "ISO C ¤Ç¤Ï¶õ¤Î½é´ü²½Íѥ֥졼¥¹¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C89 forbids specifying subobject to initialize"
+#~ msgstr "ISO C89 ¤Ï½é´ü²½ÍѤÎÉû¥ª¥Ö¥¸¥§¥¯¥È»ØÄê¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "obsolete use of designated initializer without `='"
+#~ msgstr "`=' ¤Î¤Ê¤¤¥á¥ó¥Ð»Ø̾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿"
+
+#~ msgid "obsolete use of designated initializer with `:'"
+#~ msgstr "`:' ¤ò¤Ä¤±¤ë¥á¥ó¥Ð»Ø̾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿"
+
+#~ msgid "ISO C forbids specifying range of elements to initialize"
+#~ msgstr "ISO C ¤Ï½é´ü²½ÍѤÎÍ×ÁÇÈÏ°Ï»ØÄê¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids nested functions"
+#~ msgstr "ISO C ¤Ï ¥Í¥¹¥È¤µ¤ì¤¿´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "`[*]' in parameter declaration only allowed in ISO C 99"
+#~ msgstr "²¾°ú¿ôÀë¸ÀÃæ¤Î `[*]' ¤Ï ISO C 99 ¤Ç¤Î¤ßµö¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids forward references to `enum' types"
+#~ msgstr "ISO C ¤Ï `enum' ·¿¤ÎÁ°Êý»²¾È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "Îóµó»Ò¥ê¥¹¥È¤ÎºÇ¸å¤Ë¥«¥ó¥Þ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "no semicolon at end of struct or union"
+#~ msgstr "struct ¤ä union ¤ÎºÇ¸å¤Ë¥»¥ß¥³¥í¥ó¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "extra semicolon in struct or union specified"
+#~ msgstr "struct ¤ä union ¤ÎÃæ¤Ç;ʬ¤Ê¥»¥ß¥³¥í¥ó¤¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "ISO C doesn't support unnamed structs/unions"
+#~ msgstr "ISO C ¤Ç¤Ï̵̾¹½Â¤ÂΤ䶦ÍÑÂΤò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "ISO C forbids member declarations with no members"
+#~ msgstr "ISO C ¤Ï¥á¥ó¥Ð¤Î¤Ê¤¤¥á¥ó¥ÐÀë¸À¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "deprecated use of label at end of compound statement"
+#~ msgstr "Ê£¹çʸ¤Î½ª¤ê¤Ç¥é¥Ù¥ë¤ò»È¤¦¤³¤È¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "ISO C89 forbids mixed declarations and code"
+#~ msgstr "ISO C89 ¤ÏÀë¸À¤È¥³¡¼¥É¤È¤Îº®¹ç¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "ISO C ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "braced-group within expression allowed only inside a function"
+#~ msgstr "¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤Ï´Ø¿ô¤ÎÆ⦤ǤΤߵö¤µ¤ì¤Þ¤¹"
+
+#~ msgid "empty body in an else-statement"
+#~ msgstr "else Ê¸¤ÎÃæ¿È¤¬¶õ¤Ç¤¹"
+
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "ISO C `goto *¼°;' ¤Î½ñ¤­Êý¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids forward parameter declarations"
+#~ msgstr "ISO C ¤ÏÁ°Êý²¾°ú¿ôÀë¸À¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C requires a named argument before `...'"
+#~ msgstr "ISO C ¤Ï `...' ¤ÎÁ°¤Ë̾Á°¤ò¤Ä¤±¤é¤ì¤¿°ú¿ô¤òÍ׵ᤷ¤Þ¤¹"
+
+#~ msgid "`...' in old-style identifier list"
+#~ msgstr "¸Å¤¤¥¹¥¿¥¤¥ë¤Î¼±Ê̻ҥꥹ¥È¤Ç¤Î `...'"
+
+#~ msgid "%s at end of input"
+#~ msgstr "ÆþÎϤκǸå¤Ë %s"
+
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%s ¤¬ %s'%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%s ¤¬ %s'\\x%x' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before string constant"
+#~ msgstr "ʸ»úÎóÄê¿ô¤ÎÁ°¤Ë %s"
+
+#~ msgid "%s before numeric constant"
+#~ msgstr "¿ôÃÍÄê¿ô¤ÎÁ°¤Ë %s"
+
+#~ msgid "%s before \"%s\""
+#~ msgstr "%s ¤¬ \"%s\" ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before '%s' token"
+#~ msgstr "%s ¤¬ '%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "'%s' ¥È¡¼¥¯¥ó¤Î½ê¤Çʸˡ¥¨¥é¡¼"
+
+#~ msgid "YYDEBUG not defined."
+#~ msgstr "YYDEBUG ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+#~ msgstr "#pragma pack (pop) ¤¬¡¢Âбþ¤¹¤ë #pragma pack (push, <n>) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿"
+
+#~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
+#~ msgstr "#pragma pack(pop, %s) ¤¬¡¢Âбþ¤¹¤ë #pragma pack(push, %s) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿"
+
+#~ msgid "junk at end of '#pragma pack'"
+#~ msgstr "'#pragma pack' ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma weak"
+#~ msgstr "#pragma weak ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "break statement not within loop or switch"
+#~ msgstr "break Ê¸¤¬ loop ¤Þ¤¿¤Ï switch ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "continue statement not within a loop"
+#~ msgstr "continue Ê¸¤¬ loop ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "destructor needed for `%#D'"
+#~ msgstr "`%#D' ¤Î¤¿¤á¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬É¬ÍפǤ¹"
+
+#~ msgid "where case label appears here"
+#~ msgstr "case ¥é¥Ù¥ë¤¬¸½¤ì¤¿¤Î¤Ï¤³¤³¤Ç¤¹"
+
+#~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)"
+#~ msgstr "(Á°¤Î case Ê¸¤Î°Ï¤¤¹þ¤Þ¤ì¤¿Æ°ºî¤Ï¤½¤ì¼«¿È¤Î¥¹¥³¡¼¥×¤Ç¥Ç¥¹¥È¥é¥¯¥¿¤òÍ׵ᤷ¤Þ¤¹)"
+
+#~ msgid "%s qualifier ignored on asm"
+#~ msgstr "asm ¤Ç¤Ï %s ½¤¾þ»Ò¤¬Ìµ»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "`%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹"
+
+#~ msgid "invalid use of void expression"
+#~ msgstr "void ¼°¤ÎÉÔŬÀڤʻÈÍÑ"
+
+#~ msgid "invalid use of array with unspecified bounds"
+#~ msgstr "¶­³¦¤¬»ØÄꤵ¤ì¤Ê¤¤ÇÛÎó¤ÎÉÔŬÀÚ¤ÊÍøÍÑ"
+
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "̤ÄêµÁ¤Î·¿ `%s %s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹"
+
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "ÉÔ´°Á´¤Ê typedef `%s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹"
+
+#~ msgid "function types not truly compatible in ISO C"
+#~ msgstr "´Ø¿ô·¿¤¬ ISO C ¤È´°Á´¸ß´¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "types are not quite compatible"
+#~ msgstr "·¿¤ÏÁ´¤¯¸ß´¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "sizeof applied to a function type"
+#~ msgstr "sizeof ¤¬´Ø¿ô·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "sizeof applied to a void type"
+#~ msgstr "sizeof ¤¬ void ·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "sizeof applied to an incomplete type"
+#~ msgstr "sizeof ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "arithmetic on pointer to an incomplete type"
+#~ msgstr "ÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÂФ¹¤ë±é»»"
+
+#~ msgid "__alignof__ applied to an incomplete type"
+#~ msgstr "__alignof__ ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "`__alignof' applied to a bit-field"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ë `__alignof' ¤¬Å¬ÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "Èóº¸ÊÕÃÍÇÛÎó¤Î̵¸ú¤ÊÍøÍÑ"
+
+#~ msgid "%s has no member named `%s'"
+#~ msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "request for member `%s' in something not a structure or union"
+#~ msgstr "¹½Â¤ÂΤǤⶦÍÑÂΤǤâ¤Ê¤¤²¿¤«¤Ç¡¢¥á¥ó¥Ð `%s' ¤òÍ׵ᤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "dereferencing pointer to incomplete type"
+#~ msgstr "ÉÔ´°Á´·¿¤Î¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È"
+
+#~ msgid "dereferencing `void *' pointer"
+#~ msgstr "`void *' ¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È¤Ç¤¹"
+
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "`%s' ¤Î°ú¿ô¤È¤·¤Æ̵¸ú¤Ê·¿"
+
+#~ msgid "subscript missing in array reference"
+#~ msgstr "ÇÛÎ󻲾ȤǤÎź»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "array subscript has type `char'"
+#~ msgstr "ÇÛÎó¤Îź»ú¤¬ `char' ·¿¤Ç¤¹"
+
+#~ msgid "array subscript is not an integer"
+#~ msgstr "ÇÛÎó¤Îź»ú¤¬À°¿ô·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ISO C forbids subscripting `register' array"
+#~ msgstr "ISO C ¤Ï `register' ÇÛÎó¤Ø¤Îź»ú¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C89 forbids subscripting non-lvalue array"
+#~ msgstr "ISO C89 Èóº¸ÊÕÃÍÇÛÎó¤Ø¤Îź»ú¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "subscript has type `char'"
+#~ msgstr "ź»ú¤¬ `char' ·¿¤ò¤â¤Á¤Þ¤¹"
+
+#~ msgid "subscripted value is neither array nor pointer"
+#~ msgstr "ź»ú¤ò¤Ä¤±¤é¤ì¤¿Ãͤ¬ÇÛÎó¤Ç¤â¥Ý¥¤¥ó¥¿¤Ç¤â¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`%s' undeclared here (not in a function)"
+#~ msgstr "`%s' ¤¬¤³¤³¤Ç¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (´Ø¿ô¤ÎÃæ¤Ç¤Ï¤Ê¤¤)"
+
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)"
+
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(̤Àë¸À¤Î³ÆÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬ºÇ½é¤Ë¸½¤ï¤ì¤¿¤½¤ì¤¾¤ì¤Î´Ø¿ô"
+
+#~ msgid "for each function it appears in.)"
+#~ msgstr " ¤ËÂФ·¤Æ°ìÅÙ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)"
+
+#~ msgid "local declaration of `%s' hides instance variable"
+#~ msgstr "`%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤Ç¡¢¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤¬±£¤µ¤ì¤Þ¤¹"
+
+#~ msgid "called object is not a function"
+#~ msgstr "¸Æ¤Ó½Ð¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "too many arguments to function"
+#~ msgstr "´Ø¿ô¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "type of formal parameter %d is incomplete"
+#~ msgstr "Àµ¼°¤Ê²¾°ú¿ô %d ¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "%s as integer rather than floating due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as integer rather than complex due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as complex rather than floating due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as floating rather than integer due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as complex rather than integer due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as floating rather than complex due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as `float' rather than `double' due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤Ï `double' ¤Ç¤Ê¤¯ `float' ¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s with different width due to prototype"
+#~ msgstr "%s ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Î·¿¤ÎÉý¤È¤Ï°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as unsigned due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹ç¤Ê¤·¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s as signed due to prototype"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹çÉÕ¤­¤È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "too few arguments to function"
+#~ msgstr "´Ø¿ô¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹"
+
+#~ msgid "suggest parentheses around + or - inside shift"
+#~ msgstr "¥·¥Õ¥ÈÃæ¤Î + ¤ä - ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around && within ||"
+#~ msgstr "|| ¤È¶¦¤Ë»È¤ï¤ì¤ë && ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around arithmetic in operand of |"
+#~ msgstr "·×»»¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around comparison in operand of |"
+#~ msgstr "Èæ³Ó¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around arithmetic in operand of ^"
+#~ msgstr "·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around comparison in operand of ^"
+#~ msgstr "·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around + or - in operand of &"
+#~ msgstr "& ±é»»»Ò¤Î¼þ¤ê¤Î + ¤ä - ¤Î¼þ¤ê¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "suggest parentheses around comparison in operand of &"
+#~ msgstr "Èæ³Ó¤¬ & ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹"
+
+#~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+#~ msgstr "X<=Y<=Z ¤ÎÍͤÊÈæ³Ó¤Ï¿ô³ØŪ¤Ê°ÕÌ£¤Ç¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤»¤ó"
+
+#~ msgid "right shift count is negative"
+#~ msgstr "±¦¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹"
+
+#~ msgid "right shift count >= width of type"
+#~ msgstr "±¦¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "left shift count is negative"
+#~ msgstr "º¸¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹"
+
+#~ msgid "left shift count >= width of type"
+#~ msgstr "º¸¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "shift count is negative"
+#~ msgstr "¥·¥Õ¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹"
+
+#~ msgid "shift count >= width of type"
+#~ msgstr "¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "comparing floating point with == or != is unsafe"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¤ÎÈæ³Ó¤Ç == ¤ä != ¤ò»È¤¦¤Î¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ISO C forbids comparison of `void *' with function pointer"
+#~ msgstr "ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "comparison of distinct pointer types lacks a cast"
+#~ msgstr "·¿¤¬Á´¤¯°Û¤Ê¤ë¥Ý¥¤¥ó¥¿¤ÎÈæ³Ó¤Ç¥­¥ã¥¹¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "comparison between pointer and integer"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids ordered comparisons of pointers to functions"
+#~ msgstr "ISO C ´Ø¿ô¥Ý¥¤¥ó¥¿¤Î½ç½øÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "comparison of complete and incomplete pointers"
+#~ msgstr "´°Á´¤Ê¥Ý¥¤¥ó¥¿¤ÈÉÔ´°Á´¤Ê¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤Ç¤¹"
+
+#~ msgid "ordered comparison of pointer with integer zero"
+#~ msgstr "À°¿ô 0 ¤È¥Ý¥¤¥ó¥¿¤È¤Î½ç½øÈæ³Ó¤Ç¤¹"
+
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "ÈóÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ç¤Î½ç½øÉÕ¤±¤é¤ì¤Ê¤¤Èæ³Ó¤Ç¤¹"
+
+#~ msgid "comparison between signed and unsigned"
+#~ msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤È¤ÎÈæ³Ó¤Ç¤¹"
+
+#~ msgid "comparison of promoted ~unsigned with constant"
+#~ msgstr "~¤Çȿž¤µ¤ì¤¿³Ê¾å¤²Éä¹ç̵¤··¿¤ÈÄê¿ô¤È¤ÎÈæ³Ó¤Ç¤¹"
+
+#~ msgid "comparison of promoted ~unsigned with unsigned"
+#~ msgstr "~¤Çȿž¤µ¤ì¤¿Éä¹ç̵¤··¿¤ÈÉä¹ç̵¤··¿¤È¤ÎÈæ³Ó¤Ç¤¹"
+
+#~ msgid "pointer of type `void *' used in arithmetic"
+#~ msgstr "`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "pointer to a function used in arithmetic"
+#~ msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "pointer of type `void *' used in subtraction"
+#~ msgstr "`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "pointer to a function used in subtraction"
+#~ msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "wrong type argument to unary plus"
+#~ msgstr "ñ¹à¥×¥é¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "wrong type argument to unary minus"
+#~ msgstr "ñ¹à¥Þ¥¤¥Ê¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C does not support `~' for complex conjugation"
+#~ msgstr "ISO C ¤ÏÊ£ÁǶ¦ÌòÍѤΠ`~' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "wrong type argument to bit-complement"
+#~ msgstr "¥Ó¥Ã¥Èȿž¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "wrong type argument to abs"
+#~ msgstr "abs ¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "wrong type argument to conjugation"
+#~ msgstr "Ê£ÁǶ¦Ìò(~)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "wrong type argument to unary exclamation mark"
+#~ msgstr "ñ¹à´¶Ã²Éä(!)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "ISO C ¤Ï complex ·¿¤Ç¤Î `++' ¤È `--' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "wrong type argument to %s"
+#~ msgstr "%s ¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s of pointer to unknown structure"
+#~ msgstr "ÉÔÌÀ¤Ê¹½Â¤ÂΤËÂФ¹¤ë¥Ý¥¤¥ó¥¿¤Î%s"
+
+#~ msgid "invalid lvalue in increment"
+#~ msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥È¤ÎÃæ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "invalid lvalue in decrement"
+#~ msgstr "¥Ç¥¯¥ê¥á¥ó¥È¤ÎÃæ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "increment"
+#~ msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥È"
+
+#~ msgid "decrement"
+#~ msgstr "¥Ç¥¯¥ê¥á¥ó¥È"
+
+#~ msgid "ISO C forbids the address of a cast expression"
+#~ msgstr "ISO C ¤Ï¥­¥ã¥¹¥È¼°¤Î¥¢¥É¥ì¥¹É¾²Á¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "ñ¹à¤Î `&' ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "attempt to take address of bit-field structure member `%s'"
+#~ msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð `%s' ¤Î¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "ISO C forbids use of conditional expressions as lvalues"
+#~ msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¾ò·ï¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids use of compound expressions as lvalues"
+#~ msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤ÎÊ£¹ç¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids use of cast expressions as lvalues"
+#~ msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¥­¥ã¥¹¥È¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "%s of read-only member `%s'"
+#~ msgstr "%s¤¬Æɤ߹þ¤ßÀìÍÑ¥á¥ó¥Ð `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "%s¤¬Æɤ߹þ¤ßÀìÍÑÊÑ¿ô `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "%s of read-only location"
+#~ msgstr "%s¤¬Æɤ߹þ¤ßÀìÍÑÎΰè¤Ç¹Ô¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "cannot take address of bitfield `%s'"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "global register variable `%s' used in nested function"
+#~ msgstr "Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "register variable `%s' used in nested function"
+#~ msgstr "¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "address of global register variable `%s' requested"
+#~ msgstr "Í׵ᤵ¤ì¤¿Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹"
+
+#~ msgid "cannot put object with volatile field into register"
+#~ msgstr "volatile ¥Õ¥£¡¼¥ë¥É¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤Ã¤Æ¤¤¤ë¤è¤¦¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤òÃÖ¤±¤Þ¤»¤ó"
+
+#~ msgid "address of register variable `%s' requested"
+#~ msgstr "register ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹¤¬Í׵ᤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "signed and unsigned type in conditional expression"
+#~ msgstr "¾ò·ï¼°¤ËÉä¹çÉÕ¤­·¿¤ÈÉä¹ç̵¤··¿¤È¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "ISO C forbids conditional expr with only one void side"
+#~ msgstr "ISO C ¤ÏÊÒ¦¤À¤±¤¬ void ¤È¤Ê¤ë¾ò·ï¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids conditional expr between `void *' and function pointer"
+#~ msgstr "ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ò¾ò·ï¼°¤È¤¹¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "pointer type mismatch in conditional expression"
+#~ msgstr "¾ò·ï¼°¤Ç¤Î¥Ý¥¤¥ó¥¿¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "pointer/integer type mismatch in conditional expression"
+#~ msgstr "¾ò·ï¼°¤Ç¥Ý¥¤¥ó¥¿·¿¤ÈÀ°¿ô·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "type mismatch in conditional expression"
+#~ msgstr "¾ò·ï¼°¤Ç¤Î·¿¤ÎÁȹç¤ï¤»¤¬Å¬¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "left-hand operand of comma expression has no effect"
+#~ msgstr "¥«¥ó¥Þ±é»»»Ò¤Îº¸Â¦¤Î¼°¤Ë¸úÎϤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "cast specifies array type"
+#~ msgstr "¥­¥ã¥¹¥È¤¬ÇÛÎ󷿤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "cast specifies function type"
+#~ msgstr "¥­¥ã¥¹¥È¤Ï´Ø¿ô·¿¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids casting nonscalar to the same type"
+#~ msgstr "ISO C ¤ÏÈó¥¹¥«¥é¡¼¤«¤éƱ¤¸·¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C forbids casts to union type"
+#~ msgstr "ISO C ¤Ï¶¦ÍÑÂη¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "cast to union type from type not present in union"
+#~ msgstr "¶¦ÍÑÂΤÎÃæ¤Ë¤Ê¤¤·¿¤«¤é¶¦ÍÑÂη¿¤Ø¥­¥ã¥¹¥È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "cast discards qualifiers from pointer target type"
+#~ msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤«¤é½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹"
+
+#~ msgid "cast increases required alignment of target type"
+#~ msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤ÎÍ׵ᥢ¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤·¤Þ¤¹"
+
+#~ msgid "cast from pointer to integer of different size"
+#~ msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤«¤é°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤È¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "cast does not match function type"
+#~ msgstr "¥­¥ã¥¹¥È¤Ë¤è¤ë´Ø¿ô¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "cast to pointer from integer of different size"
+#~ msgstr "°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤Ë¥­¥ã¥¹¥È¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "ÂåÆþ¤È¤·¤Æ̵¸ú¤Êº¸ÊÕÃͤǤ¹"
+
+#~ msgid "assignment"
+#~ msgstr "ÂåÆþ"
+
+#~ msgid "%s makes qualified function pointer from unqualified"
+#~ msgstr "%s¤Ë¤è¤ê¡¢½¤¾þ¤µ¤ì¤Ê¤¤´Ø¿ô¥Ý¥¤¥ó¥¿¤«¤é¡¢½¤¾þ¤µ¤ì¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤¹"
+
+#~ msgid "%s discards qualifiers from pointer target type"
+#~ msgstr "%s¤Ë¤è¤ê¡¢¥Ý¥¤¥ó¥¿¤Î¼¨¤¹·¿¤«¤é¤Î½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹"
+
+#~ msgid "ISO C prohibits argument conversion to union type"
+#~ msgstr "ISO C ¤Ç¤Ï°ú¿ô¤«¤é¶¦ÍÑÂΤؤÎÊÑ´¹¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C forbids %s between function pointer and `void *'"
+#~ msgstr "ISO C ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È `void *' ¤È¤Î%s¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "pointer targets in %s differ in signedness"
+#~ msgstr "%s ¤Ç¥Ý¥¤¥ó¥¿¤Î¼¨¤¹ÂоݤÎÉä¹æ¤Î̵ͭ¤¬°Û¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "%s from incompatible pointer type"
+#~ msgstr "¸ß´¹À­¤Î¤Ê¤¤¥Ý¥¤¥ó¥¿·¿¤«¤é¤Î%s¤Ç¤¹"
+
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤ÇÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤·¤¿"
+
+#~ msgid "%s makes integer from pointer without a cast"
+#~ msgstr "%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤Ç¥Ý¥¤¥ó¥¿¤«¤éÀ°¿ô¤òºî¤ê¤Þ¤·¤¿"
+
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "%d ÈÖÌܤΰú¿ô¤¬ `%s' ¤Î·¿¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "incompatible type for argument %d of indirect function call"
+#~ msgstr "´ÖÀÜŪ¤Ê´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÂè %d °ú¿ô¤ËÂФ·¤Æ¸ß´¹À­¤Î¤Ê¤¤·¿¤Ç¤¹"
+
+#~ msgid "incompatible types in %s"
+#~ msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿"
+
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹"
+
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "°ú¿ô %d ¸Ä¤Î´Ø¿ô¥Ý¥¤¥ó¥¿¤òÅϤ·¤Þ¤¹"
+
+#~ msgid "initializer for static variable is not constant"
+#~ msgstr "static ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "initializer for static variable uses complicated arithmetic"
+#~ msgstr "static ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Ê£»¨¤Ê·×»»¤ò»È¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "aggregate initializer is not constant"
+#~ msgstr "½¸¹çÂΤνé´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "aggregate initializer uses complicated arithmetic"
+#~ msgstr "½¸¹çÂΤνé´ü²½»Ò¤ÇÊ£»¨¤Ê·×»»¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "traditional C rejects automatic aggregate initialization"
+#~ msgstr "¸Å¤¤ C ¤Ç¤Ï¼«Æ°Åª¤Ê½¸¹çÂΤνé´ü²½¤òµñÀ䤷¤Þ¤¹"
+
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)"
+
+#~ msgid "char-array initialized from wide string"
+#~ msgstr "¥ï¥¤¥Éʸ»úÎ󤫤é char ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "int-array initialized from non-wide string"
+#~ msgstr "Èó¥ï¥¤¥Éʸ»úÎ󤫤é int ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "initializer-string for array of chars is too long"
+#~ msgstr "char ¤ÎÇÛÎó¤Ë¤È¤Ã¤Æ½é´ü²½»Òʸ»úÎó¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#~ msgid "array initialized from non-constant array expression"
+#~ msgstr "ÈóÄê¿ôÇÛÎó¼°¤«¤éÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "initializer element is not constant"
+#~ msgstr "½é´ü²½»Ò¤ÎÍ×ÁǤ¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "initialization"
+#~ msgstr "½é´ü²½"
+
+#~ msgid "initializer element is not computable at load time"
+#~ msgstr "½é´ü²½»Ò¤ÎÍ×ÁÇ¤Ï¥í¡¼¥É»þ¤Ë·×»»¤µ¤ìÆÀ¤Þ¤»¤ó"
+
+#~ msgid "invalid initializer"
+#~ msgstr "̵¸ú¤Ê½é´ü²½»Ò"
+
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "½é´ü²½»Ò¤Î½ª¤ï¤ê¤Ë;ʬ¤Ê¥Ö¥ì¡¼¥¹¤Î¥°¥ë¡¼¥×"
+
+#~ msgid "missing braces around initializer"
+#~ msgstr "½é´ü²½»Ò¤Î¤Þ¤ï¤ê¤Î¥Ö¥ì¡¼¥¹¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "braces around scalar initializer"
+#~ msgstr "¥¹¥«¥é¡¼½é´ü²½»Ò¤¬¥Ö¥ì¡¼¥¹¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "initialization of flexible array member in a nested context"
+#~ msgstr "¥Í¥¹¥È¤·¤¿Ê¸Ì®¤Ç²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "initialization of a flexible array member"
+#~ msgstr "²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "deprecated initialization of zero-length array"
+#~ msgstr "Ťµ 0 ¤Î½é´ü²½¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "initialization of zero-length array before end of structure"
+#~ msgstr "¹½Â¤ÂΤκǸå¤è¤êÁ°¤ÇŤµ 0 ¤ÎÇÛÎó¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "initialization of zero-length array inside a nested context"
+#~ msgstr "¥Í¥¹¥È¤·¤¿Ê¸Ì®¤ÎÆ⦤ÇŤµ 0 ¤ÎÇÛÎó¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "missing initializer"
+#~ msgstr "½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "empty scalar initializer"
+#~ msgstr "¶õ¤Î¥¹¥«¥é¡¼½é´ü²½»Ò"
+
+#~ msgid "extra elements in scalar initializer"
+#~ msgstr "¥¹¥«¥é¡¼½é´ü²½»Ò¤Ë;ʬ¤ÊÍ×ÁÇ"
+
+#~ msgid "initialization designators may not nest"
+#~ msgstr "½é´ü²½»Ø̾»Ò¤Ç¤Ï¥Í¥¹¥È¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "array index in non-array initializer"
+#~ msgstr "ÈóÇÛÎó¤Î½é´ü²½»Ò¤ËÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "field name not in record or union initializer"
+#~ msgstr "¥ì¥³¡¼¥É¤ä¶¦ÍÑÂΤ˥ե£¡¼¥ë¥É̾¤¬¤Ê¤¤½é´ü²½»Ò¤Ç¤¹"
+
+#~ msgid "nonconstant array index in initializer"
+#~ msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "array index in initializer exceeds array bounds"
+#~ msgstr "½é´ü²½»ÒÆâ¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òĶ¤¨¤Þ¤·¤¿"
+
+#~ msgid "empty index range in initializer"
+#~ msgstr "½é´ü²½»ÒÆâ¤Ë¶õ¤ÎÈÏ°Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "array index range in initializer exceeds array bounds"
+#~ msgstr "½é´ü²½»Ò¤ÎÈÏ°Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òĶ¤¨¤Þ¤·¤¿"
+
+#~ msgid "unknown field `%s' specified in initializer"
+#~ msgstr "ÉÔÌÀ¤Ê¥Õ¥£¡¼¥ë¥É `%s' ¤¬½é´ü²½»Ò¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "initialized field with side-effects overwritten"
+#~ msgstr "½é´ü²½¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤¬ÉûºîÍѤǾå½ñ¤­¤µ¤ì¤Þ¤¹"
+
+#~ msgid "excess elements in char array initializer"
+#~ msgstr "char ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "excess elements in struct initializer"
+#~ msgstr "¹½Â¤Âνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "excess elements in union initializer"
+#~ msgstr "¶¦ÍÑÂνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "traditional C rejects initialization of unions"
+#~ msgstr "¸Å¤¤ C ¤Ï¶¦ÍÑÂΤνé´ü¤òµñÀ䤷¤Þ¤¹"
+
+#~ msgid "excess elements in array initializer"
+#~ msgstr "ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "excess elements in scalar initializer"
+#~ msgstr "¥¹¥«¥é¡¼½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "asm template is not a string constant"
+#~ msgstr "asm ¥Æ¥ó¥×¥ì¡¼¥È¤¬Ê¸»úÎóÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid lvalue in asm statement"
+#~ msgstr "asm Ê¸¤ÎÃæ¤Ë̵¸ú¤Êº¸ÊÕÃÍ"
+
+#~ msgid "modification by `asm'"
+#~ msgstr "`asm' ¤Ë¤è¤ë½¤Àµ"
+
+#~ msgid "function declared `noreturn' has a `return' statement"
+#~ msgstr "`noreturn' ¤ÎÀë¸À¤µ¤ì¤¿´Ø¿ô¤Ë `return' Ê¸¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "Ìá¤ê·¿¤¬´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`return' with a value, in function returning void"
+#~ msgstr "Ìá¤ê·¿¤¬ void ¤Î´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "return"
+#~ msgstr "return"
+
+#~ msgid "function returns address of local variable"
+#~ msgstr "´Ø¿ô¤¬¥í¡¼¥«¥ëÊÑ¿ô¤Î¥¢¥É¥ì¥¹¤òÊÖ¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "switch quantity not an integer"
+#~ msgstr "switch ¤ÎÆâÍƤ¬À°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`long' switch expression not converted to `int' in ISO C"
+#~ msgstr "ISO C ¤Ç¤Ï `long' ¤Î switch ¼°¤Ï `int' ¤ËÊÑ´¹¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "case label not within a switch statement"
+#~ msgstr "case ¥é¥Ù¥ë¤¬ switch Ê¸¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "`default' label not within a switch statement"
+#~ msgstr "`default' ¥é¥Ù¥ë¤¬ switch Ê¸¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "inlining failed in call to `%s'"
+#~ msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Î¥¤¥ó¥é¥¤¥ó²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#~ msgid "called from here"
+#~ msgstr "¤³¤³¤«¤é¸Æ¤Ð¤ì¤Þ¤·¤¿"
+
+#~ msgid "can't inline call to `%s'"
+#~ msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Ï¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function call has aggregate value"
+#~ msgstr "´Ø¿ô¸Æ¤Ó½Ð¤·¤¬½¸¹çÂΤÎÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "variable offset is passed paritially in stack and in reg"
+#~ msgstr "ÊÑ¿ô¥ª¥Õ¥»¥Ã¥È¤¬¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹¥¿¤ÇÅù²Á¤ËÅϤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "variable size is passed partially in stack and in reg"
+#~ msgstr "ÊÑ¿ô¥µ¥¤¥º¤¬¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹¥¿¤ÇÅù²Á¤ËÅϤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "internal error"
+#~ msgstr "ÆâÉô¥¨¥é¡¼"
+
+#~ msgid "no arguments"
+#~ msgstr "°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "fopen %s"
+#~ msgstr "fopen %s"
+
+#~ msgid "fclose %s"
+#~ msgstr "fclose %s"
+
+#~ msgid "collect2 version %s"
+#~ msgstr "collect2 version %s"
+
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%d ¸Ä¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n"
+
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%d ¸Ä¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n"
+
+#~ msgid "%d frame table(s) found\n"
+#~ msgstr "%d ¸Ä¤Î¥Õ¥ì¡¼¥à¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n"
+
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%s ¥·¥°¥Ê¥ë %d [%s]%s ¤Ç½ªÎ»¤µ¤»¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "%s returned %d exit status"
+#~ msgstr "%s ¤Ï exit ¾õÂÖ %d ¤òÊÖ¤·¤Þ¤·¤¿"
+
+#~ msgid "[cannot find %s]"
+#~ msgstr "[%s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó]"
+
+#~ msgid "cannot find `%s'"
+#~ msgstr "`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "redirecting stdout: %s"
+#~ msgstr "stdout ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È: %s"
+
+#~ msgid "[Leaving %s]\n"
+#~ msgstr "[%s ¤òÎ¥¤ì¤Þ¤¹]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "write_c_file - output name is %s, prefix is %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "write_c_file - ½ÐÎÏ̾¤Ï %s¡¢¥×¥ì¥Õ¥£¥¯¥¹¤Ï %s\n"
+
+#~ msgid "cannot find `nm'"
+#~ msgstr "`nm' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "pipe"
+#~ msgstr "pipe"
+
+#~ msgid "fdopen"
+#~ msgstr "fdopen"
+
+#~ msgid "dup2 %d 1"
+#~ msgstr "dup2 %d 1"
+
+#~ msgid "close %d"
+#~ msgstr "close %d"
+
+#~ msgid "execvp %s"
+#~ msgstr "execvp %s"
+
+#~ msgid "init function found in object %s"
+#~ msgstr "init ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿"
+
+#~ msgid "fini function found in object %s"
+#~ msgstr "fini ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿"
+
+#~ msgid "fclose"
+#~ msgstr "fclose"
+
+#~ msgid "unable to open file '%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò open ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò stat ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò mmap ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "not found\n"
+#~ msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "dynamic dependency %s not found"
+#~ msgstr "ưŪ°Í¸´Ø·¸ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ËÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥Ð"
+
+#~ msgid "dynamic dependencies.\n"
+#~ msgstr "ưŪ°Í¸´Ø·¸¡£\n"
+
+#~ msgid "cannot find `ldd'"
+#~ msgstr "`ldd' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "execv %s"
+#~ msgstr "execv %s"
+
+#~ msgid ""
+#~ "\n"
+#~ "ldd output with constructors/destructors.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ldd ½ÐÎϤ¬¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤òȼ¤¤¤Þ¤¹¡£\n"
+
+#~ msgid "unable to open dynamic dependency '%s'"
+#~ msgstr "ưŪ°Í¸´Ø·¸ '%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s: COFF ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "%s: COFF ¥Õ¥¡¥¤¥ë¤È¤·¤Æ³«¤±¤Þ¤»¤ó"
+
+#~ msgid "Library lib%s not found"
+#~ msgstr "¥é¥¤¥Ö¥é¥ê lib%s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "open %s"
+#~ msgstr "open %s"
+
+#~ msgid "incompatibilities between object file & expected values"
+#~ msgstr "ξΩ¤·¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È´üÂÔÃÍ"
+
+#~ msgid ""
+#~ "\n"
+#~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë #%d ¤ò½èÍý¤·¤Þ¤¹¡¢¥ª¥Õ¥»¥Ã¥È = 0x%.8lx, ¼ïÎà = %s\n"
+
+#~ msgid "string section missing"
+#~ msgstr "ʸ»úÎ󥻥¯¥·¥ç¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "section pointer missing"
+#~ msgstr "¥»¥¯¥·¥ç¥ó¥Ý¥¤¥ó¥¿¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "no symbol table found"
+#~ msgstr "¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "no cmd_strings found"
+#~ msgstr "cmd_strings ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid ""
+#~ "\n"
+#~ "Updating header and load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¥Ø¥Ã¥À¤È load ¥³¥Þ¥ó¥É¤ò¹¹¿·¤·¤Þ¤¹¡£\n"
+
+#~ msgid "load command map, %d cmds, new size %ld.\n"
+#~ msgstr "load ¥³¥Þ¥ó¥É¥Þ¥Ã¥×¡¢%d ¸Ä¤Î¥³¥Þ¥ó¥É¡¢¿·¤¿¤Ê¥µ¥¤¥º %ld¡£\n"
+
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "load ¥³¥Þ¥ó¥É¤ò½ñ¤­¹þ¤ß¤Þ¤¹¡£\n"
+#~ "\n"
+
+#~ msgid "close %s"
+#~ msgstr "close %s"
+
+#~ msgid "could not convert 0x%l.8x into a region"
+#~ msgstr "0x%l.8x ¤òÎΰè¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+#~ msgstr "%s ´Ø¿ô, Îΰè %d, ¥ª¥Õ¥»¥Ã¥È = %ld (0x%.8lx)\n"
+
+#~ msgid "bad magic number"
+#~ msgstr "ÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥Ð"
+
+#~ msgid "bad header version"
+#~ msgstr "ÉÔÀµ¤Ê¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥ó"
+
+#~ msgid "bad raw header version"
+#~ msgstr "ÉÔÀµ¤ÊÀ¸¤Î¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥ó"
+
+#~ msgid "raw header buffer too small"
+#~ msgstr "¾®¤µ¤¹¤®¤ëÀ¸¤Î¥Ø¥Ã¥À¥Ð¥Ã¥Õ¥¡"
+
+#~ msgid "old raw header file"
+#~ msgstr "¸Å¤¤À¸¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë"
+
+#~ msgid "unsupported version"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹"
+
+#~ msgid "unknown {de,en}code_mach_o_hdr return value %d"
+#~ msgstr "ÉÔÌÀ¤Ê {de,en}code_mach_o_hdr Ìá¤êÃÍ %d"
+
+#~ msgid "fstat %s"
+#~ msgstr "fstat %s"
+
+#~ msgid "lseek %s 0"
+#~ msgstr "lseek %s 0"
+
+#~ msgid "read %s"
+#~ msgstr "read %s"
+
+#~ msgid "read %ld bytes, expected %ld, from %s"
+#~ msgstr "%ld ¥Ð¥¤¥ÈÆɹþ¤ß¡£%ld (%s ¤«¤é)Æɹþ¤à¤Ï¤º¤Ç¤¹"
+
+#~ msgid "msync %s"
+#~ msgstr "msync %s"
+
+#~ msgid "munmap %s"
+#~ msgstr "munmap %s"
+
+#~ msgid "write %s"
+#~ msgstr "write %s"
+
+#~ msgid "wrote %ld bytes, expected %ld, to %s"
+#~ msgstr "%ld ¥Ð¥¤¥È½ñ¹þ¤ß¡£%ld (%s ¤Ø)½ñ¹þ¤à¤Ï¤º¤Ç¤¹"
+
+#~ msgid ""
+#~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ "\n"
+#~ msgstr ""
+#~ ";; ·ë¹çÅý·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá),\n"
+#~ ";; %d À®¸ù¡£\n"
+
+#~ msgid ""
+#~ "\n"
+#~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ msgstr ""
+#~ "\n"
+#~ ";; ·ë¹ç¹ç·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá),\n"
+#~ ";; %d À®¸ù¡£\n"
+
+#~ msgid "Use VAX-C alignment"
+#~ msgstr "VAX-C ¥¢¥é¥¤¥ó¥á¥ó¥È¤ò»ÈÍÑ"
+
+#~ msgid "invalid %%Q value"
+#~ msgstr "̵¸ú¤Ê %%Q ÃÍ"
+
+#~ msgid "invalid %%C value"
+#~ msgstr "̵¸ú¤Ê %%C ÃÍ"
+
+#~ msgid "invalid %%N value"
+#~ msgstr "̵¸ú¤Ê %%N ÃÍ"
+
+#~ msgid "invalid %%M value"
+#~ msgstr "̵¸ú¤Ê %%M ÃÍ"
+
+#~ msgid "invalid %%m value"
+#~ msgstr "̵¸ú¤Ê %%m ÃÍ"
+
+#~ msgid "invalid %%L value"
+#~ msgstr "̵¸ú¤Ê %%L ÃÍ"
+
+#~ msgid "invalid %%O value"
+#~ msgstr "̵¸ú¤Ê %%O ÃÍ"
+
+#~ msgid "invalid %%P value"
+#~ msgstr "̵¸ú¤Ê %%P ÃÍ"
+
+#~ msgid "invalid %%V value"
+#~ msgstr "̵¸ú¤Ê %%V ÃÍ"
+
+#~ msgid "Generate code assuming DW bit is set"
+#~ msgstr "DW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤¿¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®"
+
+#~ msgid "Generate code assuming DW bit is not set"
+#~ msgstr "DW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®"
+
+#~ msgid "Generate code using byte writes"
+#~ msgstr "¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤Ã¤Æ¥³¡¼¥ÉÀ¸À®"
+
+#~ msgid "Do not generate byte writes"
+#~ msgstr "¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤ï¤º¤Ë¥³¡¼¥ÉÀ¸À®"
+
+#~ msgid "Use small memory model"
+#~ msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ"
+
+#~ msgid "Use normal memory model"
+#~ msgstr "¥Î¡¼¥Þ¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ"
+
+#~ msgid "Use large memory model"
+#~ msgstr "¥é¡¼¥¸¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ"
+
+#~ msgid "Generate 29050 code"
+#~ msgstr "29050 ¥³¡¼¥É¤òÀ¸À®"
+
+#~ msgid "Generate 29000 code"
+#~ msgstr "29000 ¥³¡¼¥É¤òÀ¸À®"
+
+#~ msgid "Use kernel global registers"
+#~ msgstr "¥«¡¼¥Í¥ë¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍÑ"
+
+#~ msgid "Use user global registers"
+#~ msgstr "¥æ¡¼¥¶¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍÑ"
+
+#~ msgid "Emit stack checking code"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ¯"
+
+#~ msgid "Do not emit stack checking code"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ«¤Ê¤¤"
+
+#~ msgid "Work around storem hardware bug"
+#~ msgstr "storem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Do not work around storem hardware bug"
+#~ msgstr "storem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤ï¤Ê¤¤"
+
+#~ msgid "Store locals in argument registers"
+#~ msgstr "°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤¹¤ë"
+
+#~ msgid "Do not store locals in arg registers"
+#~ msgstr "°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤·¤Ê¤¤"
+
+#~ msgid "Use software floating point"
+#~ msgstr "¥½¥Õ¥ÈÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Do not generate multm instructions"
+#~ msgstr "multm Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "bad value `%s' for -mtrap-precision switch"
+#~ msgstr "-mtrap-precision ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'"
+
+#~ msgid "bad value `%s' for -mfp-rounding-mode switch"
+#~ msgstr "-mfp-rounding-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'"
+
+#~ msgid "bad value `%s' for -mfp-trap-mode switch"
+#~ msgstr "-mfp-trap-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'"
+
+#~ msgid "bad value `%s' for -mcpu switch"
+#~ msgstr "-mcpu ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'"
+
+#~ msgid "fp software completion requires -mtrap-precision=i"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÊä´°¤Ï -mtrap-precision=i ¤òɬÍפȤ·¤Þ¤¹"
+
+#~ msgid "rounding mode not supported for VAX floats"
+#~ msgstr "VAX ÉâÆ°¾®¿ô¤Ç¤Ï´Ý¤á¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "trap mode not supported for VAX floats"
+#~ msgstr "VAX ÉâÆ°¾®¿ô¤Ç¤Ï¥È¥é¥Ã¥×¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "L%d cache latency unknown for %s"
+#~ msgstr "L%d ¥­¥ã¥Ã¥·¥å¥ì¥¤¥Æ¥ó¥·¤Ï %s ¤Ë¤È¤Ã¤ÆÉÔÌÀ¤Ç¤¹"
+
+#~ msgid "bad value `%s' for -mmemory-latency"
+#~ msgstr "`%s' ¤Ï -mmemory-latency ¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃͤǤ¹"
+
+#~ msgid "invalid %%r value"
+#~ msgstr "̵¸ú¤Ê %%r ÃÍ"
+
+#~ msgid "invalid %%R value"
+#~ msgstr "̵¸ú¤Ê %%R ÃÍ"
+
+#~ msgid "invalid %%h value"
+#~ msgstr "̵¸ú¤Ê %%h ÃÍ"
+
+#~ msgid "invalid %%U value"
+#~ msgstr "̵¸ú¤Ê %%U ÃÍ"
+
+#~ msgid "invalid %%s value"
+#~ msgstr "̵¸ú¤Ê %%s ÃÍ"
+
+#~ msgid "invalid %%E value"
+#~ msgstr "̵¸ú¤Ê %%E ÃÍ"
+
+#~ msgid "invalid %%xn code"
+#~ msgstr "̵¸ú¤Ê %%xn ¥³¡¼¥É"
+
+#~ msgid "Use hardware fp"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍÑ"
+
+#~ msgid "Do not use hardware fp"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Use fp registers"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Do not use fp registers"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Do not assume GAS"
+#~ msgstr "GAS ¤ÎÍøÍѤòÁ°Äó¤È¤·¤Ê¤¤"
+
+#~ msgid "Assume GAS"
+#~ msgstr "GAS ¤ÎÍøÍѤòÁ°Äó¤È¤¹¤ë"
+
+#~ msgid "Request IEEE-conformant math library routines (OSF/1)"
+#~ msgstr "IEEE ½àµò¤Î¿ô³Ø¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó (OSF/1) ¤òÍ׵᤹¤ë"
+
+#~ msgid "Emit IEEE-conformant code, without inexact exceptions"
+#~ msgstr "ÉÔŬÀÚ¤ÊÎã³°¤ò½ü¤¤¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Emit IEEE-conformant code, with inexact exceptions"
+#~ msgstr "ÉÔŬÀÚ¤ÊÎã³°¤ò´Þ¤á¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Do not emit complex integer constants to read-only memory"
+#~ msgstr "Ê£ÁÇ¿ô¤ÎÀ°¿ôÄê¿ô¤òÆɤ߹þ¤ßÀìÍÑ¥á¥â¥ê¤ËŸ³«¤µ¤»¤Ê¤¤"
+
+#~ msgid "Use VAX fp"
+#~ msgstr "VAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Do not use VAX fp"
+#~ msgstr "VAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Emit code for the byte/word ISA extension"
+#~ msgstr "¥Ð¥¤¥È/¥ï¡¼¥É ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Emit code for the motion video ISA extension"
+#~ msgstr "¥â¡¼¥·¥ç¥ó¥Ó¥Ç¥ª ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Emit code for the fp move and sqrt ISA extension"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ move ¤È sqrt ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Emit code for the counting ISA extension"
+#~ msgstr "¥«¥¦¥ó¥È ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Use features of and schedule given CPU"
+#~ msgstr "CPU ¤ËÍ¿¤¨¤é¤ì¤¿ÆÃħ¤ä¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Schedule given CPU"
+#~ msgstr "CPU ¤ËÍ¿¤¨¤é¤ì¤¿¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Control the generated fp rounding mode"
+#~ msgstr "À¸À®¤µ¤ì¤¿ÉâÆ°¾®¿ôÅÀ´Ý¤á¥â¡¼¥É¤òÀ©¸æ¤¹¤ë"
+
+#~ msgid "Control the IEEE trap mode"
+#~ msgstr "IEEE ¥È¥é¥Ã¥×¥â¡¼¥É¤òÀ©¸æ¤¹¤ë"
+
+#~ msgid "Control the precision given to fp exceptions"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÎã³°¤ËÍ¿¤¨¤é¤ì¤¿ÀºÅÙ¤òÀ©¸æ¤¹¤ë"
+
+#~ msgid "Tune expected memory latency"
+#~ msgstr "ͽ´ü¤µ¤ì¤ë¥á¥â¥ê¥ì¥¤¥Æ¥ó¥·¤òÄ´À°¤¹¤ë"
+
+#~ msgid "%s causes a section type conflict"
+#~ msgstr "%s ¤Ï¥»¥¯¥·¥ç¥ó¥¿¥¤¥×¤Î¶¥¹ç¤ò°ú¤­µ¯¤³¤·¤Þ¤¹"
+
+#~ msgid "bad value (%s) for -mcpu switch"
+#~ msgstr "-mcpu ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "invalid operand to %R code"
+#~ msgstr "%R ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %H/%L code"
+#~ msgstr "%H/%L ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %U code"
+#~ msgstr "%U ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %V code"
+#~ msgstr "%V ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand output code"
+#~ msgstr "̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É½ÐÎÏ¥³¡¼¥É"
+
+#~ msgid "switch -mcpu=%s conflicts with -march= switch"
+#~ msgstr "-mcpu=%s ¥¹¥¤¥Ã¥Á¤Ï -march= ¥¹¥¤¥Ã¥Á¤È¶¥¹ç¤·¤Þ¤¹"
+
+#~ msgid "bad value (%s) for %s switch"
+#~ msgstr "ÃÍ (%s) ¤Ï %s switch ¤Ë¤È¤Ã¤ÆÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "target CPU does not support APCS-32"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-32 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "target CPU does not support APCS-26"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-26 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "target CPU does not support interworking"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï interworking ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "target CPU does not support THUMB instructions."
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï THUMB Ì¿Îá¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb."
+#~ msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢°ÕÌ£¤Î¤¢¤ë¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤òÍ­¸ú¤Ë¤·¤Þ¤¹"
+
+#~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb."
+#~ msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢Èï¸Æ¤Ó½Ð¤·Â¦ interworking ¤òÍ­¸ú¤Ë¤·¤Þ¤¹"
+
+#~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb."
+#~ msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢¸Æ¤Ó½Ð¤·Â¦ interworking ¤òÍ­¸ú¤Ë¤·¤Þ¤¹"
+
+#~ msgid "interworking forces APCS-32 to be used"
+#~ msgstr "interworking ¤Ï APCS-32 ¤Î»ÈÍѤò¶¯Íפ·¤Þ¤¹"
+
+#~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+#~ msgstr "-mapcs-stack-check ¤Ï -mno-apcs-frame ¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-fpic and -mapcs-reent are incompatible"
+#~ msgstr "-fpic ¤È -mapcs-reent ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "APCS reentrant code not supported.  Ignored"
+#~ msgstr "APCS ºÆÆþ²Äǽ¥³¡¼¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó¡£Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "-g with -mno-apcs-frame may not give sensible debugging"
+#~ msgstr "-g ¤Ë -mno-apcs-frame ¤ò¤Ä¤±¤ë¤È¡¢¤­¤áºÙ¤«¤Ê¥Ç¥Ð¥Ã¥°¤Ï¤Ç¤­¤Ê¤¤¤Ç¤·¤ç¤¦"
+
+#~ msgid "Passing floating point arguments in fp regs not yet supported"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤òÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤ÇÅϤ¹¤³¤È¤Ï¡¢¤Þ¤À¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "Invalid floating point emulation option: -mfpe-%s"
+#~ msgstr "̵¸ú¤ÊÉâÆ°¾®¿ôÅÀ¥¨¥ß¥å¥ì¡¼¥È¥ª¥×¥·¥ç¥ó: -mfpe-%s"
+
+#~ msgid "Structure size boundary can only be set to 8 or 32"
+#~ msgstr "¹½Â¤ÂΤΥµ¥¤¥º¶­³¦¤Ï 8 Ëô¤Ï 32 ¤Ë¤·¤«ÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mpic-register= is useless without -fpic"
+#~ msgstr "-mpic-register= ¤Ï -fpic ¤ò¤Ä¤±¤Ê¤¤¤ÈÌò¤ËΩ¤Á¤Þ¤»¤ó"
+
+#~ msgid "Unable to use '%s' for PIC register"
+#~ msgstr "'%s' ¤ò PIC ¤Î¥ì¥¸¥¹¥¿¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Unable to find a temporary location for static chain register"
+#~ msgstr "ÀÅŪ¥Á¥§¥¤¥ó¥ì¥¸¥¹¥¿ÍѤΰì»þÎΰè¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "Unable to compute real location of stacked parameter"
+#~ msgstr "¥¹¥¿¥Ã¥¯¤ËÀѤޤ줿²¾°ú¿ô¤Î¼ÂºÝ¤ÎÎΰè¤ò·×»»¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "no low registers available for popping high registers"
+#~ msgstr "¹â°Ì¥ì¥¸¥¹¥¿¤ò pop ¤¹¤ë°Ù¤Ë»ÈÍѤǤ­¤ëÄã°Ì¥ì¥¸¥¹¥¿¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Interrupt Service Routines cannot be coded in Thumb mode."
+#~ msgstr "Thumb ¥â¡¼¥É¤Ç¤Ï³ä¤ê¹þ¤ß¥µ¡¼¥Ó¥¹¥ë¡¼¥Á¥ó¤ò¥³¡¼¥É²½¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Generate APCS conformant stack frames"
+#~ msgstr "APCS Å¬¹ç¤·¤¿¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Store function names in object code"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤Ë´Ø¿ô̾¤ò³ÊǼ¤¹¤ë"
+
+#~ msgid "Use the 32-bit version of the APCS"
+#~ msgstr "APCS ¤Î 32 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use the 26-bit version of the APCS"
+#~ msgstr "APCS ¤Î 26 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ë"
+
+#~ msgid "Pass FP arguments in FP registers"
+#~ msgstr "FP ¥ì¥¸¥¹¥¿¤Ç FP °ú¿ô¤òÅϤ¹"
+
+#~ msgid "Generate re-entrant, PIC code"
+#~ msgstr "ºÆÆþ²Äǽ¤Ê PIC ¥³¡¼¥É¤òÀ¸À®¤·¤Þ¤¹"
+
+#~ msgid "The MMU will trap on unaligned accesses"
+#~ msgstr "MMU ¤Ï¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤Ç¥È¥é¥Ã¥×¤òȯ¤¹¤ë¤Ç¤·¤ç¤¦"
+
+#~ msgid "Use library calls to perform FP operations"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ±é»»¤ò¹Ô¤¦¥é¥¤¥Ö¥é¥ê¸Æ¤Ó½Ð¤·¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use hardware floating point instructions"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Assume target CPU is configured as big endian"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤¬¥Ó¥Ã¥¯¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Assume target CPU is configured as little endian"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Assume big endian bytes, little endian words"
+#~ msgstr "byte ¤¬¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç word ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤ß¤Ê¤¹"
+
+#~ msgid "Support calls between Thumb and ARM instruction sets"
+#~ msgstr "Thumb ¤È ARM Ì¿Î᥻¥Ã¥È´Ö¤Î¸Æ¤Ó½Ð¤·¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Generate a call to abort if a noreturn function returns"
+#~ msgstr "noreturn ´Ø¿ô¤¬ return ¤¹¤ë¤È¤­ abort ¤Î¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not move instructions into a function's prologue"
+#~ msgstr "´Ø¿ô¤Î³«»ÏÉôʬ¤ËÌ¿Îá¤ò°ÜÆ°¤·¤Ê¤¤"
+
+#~ msgid "Do not load the PIC register in function prologues"
+#~ msgstr "´Ø¿ô¤ÎÁ°ÃÖ¤­Éôʬ¤Ë PIC ¥ì¥¸¥¹¥¿¤ò¥í¡¼¥É¤·¤Ê¤¤"
+
+#~ msgid "Generate call insns as indirect calls, if necessary"
+#~ msgstr "ɬÍפ¬¤¢¤ì¤Ð¡¢Ì¿Îá¸Æ¤Ó½Ð¤·¤ò´ÖÀܸƤӽФ·¤È¤·¤ÆÀ¸À®¤¹¤ë"
+
+#~ msgid "Compile for the Thumb not the ARM"
+#~ msgstr "ARM ¤Ç¤Ï¤Ê¤¯ Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
+#~ msgstr "Thumb: ÉÔÍפʾì¹ç¤Ç¤â(ÈóËöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Thumb: Generate (leaf) stack frames even if not needed"
+#~ msgstr "Thumb: ÉÔÍפʾì¹ç¤Ç¤â(Ëöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Thumb: Assume non-static functions may be called from ARM code"
+#~ msgstr "Thumb: ÈóÀÅŪ´Ø¿ô¤¬ ARM ¥³¡¼¥É¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
+#~ msgstr "Thumb: ´Ø¿ô¥Ý¥¤¥ó¥¿¤¬Èó Thumb ¤Èǧ¼±¤¹¤ë¥³¡¼¥É¤ËÆÍÆþ¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Specify the name of the target CPU"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Î̾Á°¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify the name of the target architecture"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Î̾Á°¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify the version of the floating point emulator"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¥¨¥ß¥å¥ì¡¼¥¿¤Î¥Ð¡¼¥¸¥ç¥ó¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify the minimum bit alignment of structures"
+#~ msgstr "¹½Â¤ÂÎ¥¢¥é¥¤¥ó¥á¥ó¥È¤ÎºÇ¾®¥Ó¥Ã¥È¿ô¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify the register to be used for PIC addressing"
+#~ msgstr "PIC ¥¢¥É¥ì¥·¥ó¥°¤ËÍøÍѤµ¤ì¤ë¥ì¥¸¥¹¥¿¤ò»ØÄꤹ¤ë"
+
+#~ msgid "initialized variable `%s' is marked dllimport"
+#~ msgstr "½é´ü²½¤µ¤ì¤¿ÊÑ¿ô `%s' ¤Ï dllimport ¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "static variable `%s' is marked dllimport"
+#~ msgstr "ÀÅŪÊÑ¿ô `%s' ¤Ï dllimport ¤È¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Ignore dllimport attribute for functions"
+#~ msgstr "´Ø¿ô¤Î dllimport Â°À­¤ò̵»ë¤¹¤ë"
+
+#~ msgid "Do symbol renaming for BSD"
+#~ msgstr "BSD ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ë"
+
+#~ msgid "Do symbol renaming for X/OPEN"
+#~ msgstr "X/OPEN ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ë"
+
+#~ msgid "Don't do symbol renaming"
+#~ msgstr "¥·¥ó¥Ü¥ë̾¤ÎÊѹ¹¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "MCU `%s' not supported"
+#~ msgstr "MCU `%s' ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "large frame pointer change (%d) with -mtiny-stack"
+#~ msgstr "-mtiny-stack ¤Ë¤è¤ê¥é¡¼¥¸¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤¬Êѹ¹¤µ¤ì¤Þ¤¹(%d)"
+
+#~ msgid "Only initialized variables can be placed into program memory area."
+#~ msgstr "¥×¥í¥°¥é¥à¥á¥â¥êÎΰèÆâ¤ËÇÛÃ֤Ǥ­¤ëÊÑ¿ô¤À¤±¤ò½é´ü²½¤·¤Þ¤·¤¿"
+
+#~ msgid "Assume int to be 8 bit integer"
+#~ msgstr "int ¤ò 8 ¥Ó¥Ã¥ÈÀ°¿ô¤È¤ß¤Ê¤¹"
+
+#~ msgid "Change the stack pointer without disabling interrupts"
+#~ msgstr "³ä¤ê¹þ¤ß¤Î̵¸ú²½¤Ê¤·¤Ç¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤òÊѹ¹¤¹¤ë"
+
+#~ msgid "Use subroutines for function prologue/epilogue"
+#~ msgstr "´Ø¿ô¤ÎÁ°ÃÖ¤­/·ë¤Ó¤Î¤¿¤á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Change only the low 8 bits of the stack pointer"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤Î²¼°Ì 8 ¥Ó¥Ã¥È¤À¤±¤òÊѹ¹¤¹¤ë"
+
+#~ msgid "Do not generate tablejump insns"
+#~ msgstr "¥Æ¡¼¥Ö¥ë¥¸¥ã¥ó¥×Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Output instruction sizes to the asm file"
+#~ msgstr "asm ¥Õ¥¡¥¤¥ë¤ËÌ¿Î᥵¥¤¥º¤ò½ÐÎϤ¹¤ë"
+
+#~ msgid "Specify the initial stack address"
+#~ msgstr "½é´ü¥¹¥¿¥Ã¥¯¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify the MCU name"
+#~ msgstr "MCU Ì¾¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Trampolines not supported\n"
+#~ msgstr "¥È¥é¥ó¥Ý¥ê¥ó¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó\n"
+
+#~ msgid "Unknown CPU version %d, using 40.\n"
+#~ msgstr "ÉÔÌÀ¤Ê CPU ¥Ð¡¼¥¸¥ç¥ó %d¡¢40 ¤ò»ÈÍѤ·¤Þ¤¹¡£\n"
+
+#~ msgid "ISR %s requires %d words of local vars, max is 32767."
+#~ msgstr "ISR %s ¤Ï %d ¥ï¡¼¥É¤Î¥í¡¼¥«¥ëÊÑ¿ô¤òÍ׵ᤷ¡¢ºÇÂç¤Ï 32767 ¤Ç¤¹¡£"
+
+#~ msgid "junk at end of '#pragma %s'"
+#~ msgstr "'#pragma %s' ¤ÎºÇ¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "Small memory model"
+#~ msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë"
+
+#~ msgid "Big memory model"
+#~ msgstr "¥Ó¥Ã¥°¥á¥â¥ê¥â¥Ç¥ë"
+
+#~ msgid "Use MPYI instruction for C3x"
+#~ msgstr "MPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use MPYI instruction for C3x"
+#~ msgstr "MPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use fast but approximate float to integer conversion"
+#~ msgstr "¹â®¤À¤¬¶á»÷ÃͤȤʤëÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use slow but accurate float to integer conversion"
+#~ msgstr "Ä㮤À¤¬Àµ³Î¤ÊÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Enable use of RTPS instruction"
+#~ msgstr "RTPS Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable use of RTPS instruction"
+#~ msgstr "RTPS Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable use of RTPB instruction"
+#~ msgstr "RTPB Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable use of RTPB instruction"
+#~ msgstr "RTPB Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Generate code for C30 CPU"
+#~ msgstr "C30 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for C31 CPU"
+#~ msgstr "C31 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for C32 CPU"
+#~ msgstr "C32 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for C33 CPU"
+#~ msgstr "C33 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for C40 CPU"
+#~ msgstr "C40 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for C44 CPU"
+#~ msgstr "C44 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Emit code compatible with TI tools"
+#~ msgstr "TI ¥Ä¡¼¥ë¸ß´¹¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Emit code to use GAS extensions"
+#~ msgstr "GAS ³ÈÄ¥¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Save DP across ISR in small memory model"
+#~ msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤¹¤ë"
+
+#~ msgid "Don't save DP across ISR in small memory model"
+#~ msgstr "¥¹¥â¡¼¥ë¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤·¤Ê¤¤"
+
+#~ msgid "Pass arguments on the stack"
+#~ msgstr "°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë"
+
+#~ msgid "Pass arguments in registers"
+#~ msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë"
+
+#~ msgid "Enable new features under development"
+#~ msgstr "³«È¯Ãæ¤Î¿·µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable new features under development"
+#~ msgstr "³«È¯Ãæ¤Î¿·µ¡Ç½¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Use the BK register as a general purpose register"
+#~ msgstr "BK ¥ì¥¸¥¹¥¿¤òÈÆÍѥ쥸¥¹¥¿¤È¤·¤Æ»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not allocate BK register"
+#~ msgstr "BK ¥ì¥¸¥¹¥¿¤ò³ÎÊݤ·¤Ê¤¤"
+
+#~ msgid "Enable use of DB instruction"
+#~ msgstr "DB Ì¿Îá¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable use of DB instruction"
+#~ msgstr "DB Ì¿Îá¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable debugging"
+#~ msgstr "¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable debugging"
+#~ msgstr "¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Force constants into registers to improve hoisting"
+#~ msgstr "´¬¤­¾å¤²(hoist)¤ò²þÁ±¤¹¤ë¤¿¤áÄê¿ô¤ò¥ì¥¸¥¹¥¿¤Ë³ä¤êÅö¤Æ¤ë¤³¤È¤ò¶¯Íפ¹¤ë"
+
+#~ msgid "Don't force constants into registers"
+#~ msgstr "Äê¿ô¤Î¥ì¥¸¥¹¥¿³ä¤êÅö¤Æ¤ò¶¯Íפ·¤Ê¤¤"
+
+#~ msgid "Force RTL generation to emit valid 3 operand insns"
+#~ msgstr "RTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Àµ¾ï¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤ò¶¯Íפ¹¤ë"
+
+#~ msgid "Allow RTL generation to emit invalid 3 operand insns"
+#~ msgstr "RTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Ìµ¸ú¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤òµöÍƤ¹¤ë"
+
+#~ msgid "Allow unsigned interation counts for RPTB/DB"
+#~ msgstr "Éä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍƤ¹¤ë"
+
+#~ msgid "Disallow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Éä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍƤ·¤Ê¤¤"
+
+#~ msgid "Preserve all 40 bits of FP reg across call"
+#~ msgstr "¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 40 ¥Ó¥Ã¥ÈÁ´¤Æ¤òÊݸ¤¹¤ë"
+
+#~ msgid "Only preserve 32 bits of FP reg across call"
+#~ msgstr "¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 32 ¥Ó¥Ã¥È¤À¤±¤òÊݸ¤¹¤ë"
+
+#~ msgid "Enable parallel instructions"
+#~ msgstr "ÊÂÎóÌ¿Îá¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable parallel instructions"
+#~ msgstr "ÊÂÎóÌ¿Îá¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "MPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "MPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Assume that pointers may be aliased"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤¬ÊÌ̾¤È¤Ê¤ê¤¦¤ë¤³¤È¤òÁ°Äó¤È¤¹¤ë"
+
+#~ msgid "Assume that pointers not aliased"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤ÏÊÌ̾¤Ë¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹"
+
+#~ msgid "Specify maximum number of iterations for RPTS"
+#~ msgstr "RPTS ÍѤκÇÂçÈ¿Éü¿ô¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Select CPU to generate code for"
+#~ msgstr "¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë CPU ¤òÁªÂò¤¹¤ë"
+
+#~ msgid "Generate code for the C400"
+#~ msgstr "C400 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for the C300"
+#~ msgstr "C300 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for c1"
+#~ msgstr "c1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for c2"
+#~ msgstr "c2 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for c32"
+#~ msgstr "c32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for c34"
+#~ msgstr "c34 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Use standard calling sequence, with arg count word"
+#~ msgstr "ɸ½àŪ¸Æ¤Ó½Ð¤·¼ê½ç¤ò»È¤¤¡¢°ú¿ô¥«¥¦¥ó¥È word ¤ò¤Ä¤±¤ë"
+
+#~ msgid "Place arg count in a nop instruction (faster than push)"
+#~ msgstr "nop Ì¿ÎáÆâ¤Ë°ú¿ô¥«¥¦¥ó¥È¤òÃÖ¤¯ (push ¤è¤ê¹â®)"
+
+#~ msgid "Don't push arg count, depend on symbol table"
+#~ msgstr "°ú¿ô¥«¥¦¥ó¥È¤ò push ¤»¤º¡¢¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤ò¤¢¤Æ¤Ë¤¹¤ë"
+
+#~ msgid "Use data cache for volatile mem refs (default)"
+#~ msgstr "volatile ¥á¥â¥ê»²¾ÈÍѥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤òÍøÍѤ¹¤ë(¥Ç¥Õ¥©¥ë¥È)"
+
+#~ msgid "Don't use data cache for volatile mem refs"
+#~ msgstr "volatile ¥á¥â¥ê»²¾ÈÍѤˤϥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "Bypass data cache for volatile mem refs"
+#~ msgstr "volatile ¥á¥â¥ê»²¾ÈÍѤˤϠcache ¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²óÈò¤¹¤ë"
+
+#~ msgid "Use 64-bit longs"
+#~ msgstr "64 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use cc- and libc-compatible 32-bit longs"
+#~ msgstr "cc- ¤È libc ¸ß´¹¤Î 32 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Bad modes_tieable_p for register %s, mode1 %s, mode2 %s"
+#~ msgstr "¥ì¥¸¥¹¥¿ %s ¤Ë¤È¤Ã¤ÆÉÔÀµ¤Ê modes_tieable_p, mode1 %s, mode2 %s"
+
+#~ msgid "Enable use of conditional move instructions"
+#~ msgstr "¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable use of conditional move instructions"
+#~ msgstr "¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Debug argument support in compiler"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°°ú¿ô¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Debug stack support in compiler"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥¹¥¿¥Ã¥¯¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Debug memory address support in compiler"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥á¥â¥ê¥¢¥É¥ì¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Make adjacent short instructions parallel if possible."
+#~ msgstr "²Äǽ¤Ê¤é¤ÐÎÙÀܤ¹¤ëû¤¤Ì¿Îá¤òÊÂÎ󲽤¹¤ë"
+
+#~ msgid "Do not make adjacent short instructions parallel."
+#~ msgstr "ÎÙÀܤ¹¤ëû¤¤Ì¿Îá¤òÊÂÎ󲽤·¤Ê¤¤"
+
+#~ msgid "Link programs/data to be in external memory by default"
+#~ msgstr "¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç³°Éô¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë"
+
+#~ msgid "Link programs/data to be in onchip memory by default"
+#~ msgstr "¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥Á¥Ã¥×¾å¤Î¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë"
+
+#~ msgid "Change the branch costs within the compiler"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÆâÉô¤Ç¤Îʬ´ô¥³¥¹¥È¤òÊѹ¹¤¹¤ë"
+
+#~ msgid "Change the threshold for conversion to conditional execution"
+#~ msgstr "¾ò·ïŪ¤Ê¼Â¹Ô¤Ø¤ÎÊѹ¹¤Î¤¿¤á¤ÎïçÃͤòÊѹ¹¤¹¤ë"
+
+#~ msgid "Stack size > 32k"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥µ¥¤¥º > 32k"
+
+#~ msgid "inline float constants not supported on this host"
+#~ msgstr "¤³¤Î¥Û¥¹¥È¤Ç¤Ï¥¤¥ó¥é¥¤¥óÉâÆ°¾®¿ôÄê¿ô¤ò¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Profiling not implemented yet."
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï¡¢¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#~ msgid "Trampolines not yet implemented"
+#~ msgstr "Trampoline ¤Ï¡¢¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Generate code the unix assembler can handle"
+#~ msgstr "unix ¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code an embedded assembler can handle"
+#~ msgstr "Ëä¤á¹þ¤ß¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "fr30_print_operand_address: unhandled address"
+#~ msgstr "fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: unrecognised %p code"
+#~ msgstr "fr30_print_operand: Ç§¼±¤Ç¤­¤Ê¤¤ %p ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: unrecognised %b code"
+#~ msgstr "fr30_print_operand: Ç§¼±¤Ç¤­¤Ê¤¤ %b ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: unrecognised %B code"
+#~ msgstr "fr30_print_operand: Ç§¼±¤Ç¤­¤Ê¤¤ %B ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: invalid operand to %A code"
+#~ msgstr "fr30_print_operand: %A ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê±é»»»Ò¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: invalid %x code"
+#~ msgstr "fr30_print_operand: Ìµ¸ú¤Ê %x ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: invalid %F code"
+#~ msgstr "fr30_print_operand: Ìµ¸ú¤Ê %F ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: unknown code"
+#~ msgstr "fr30_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "fr30_print_operand: unhandled MEM"
+#~ msgstr "fr30_print_operand: ½èÍý¤µ¤ì¤Ê¤¤ MEM ¤Ç¤¹"
+
+#~ msgid "Assume small address space"
+#~ msgstr "¥¹¥â¡¼¥ë¥¢¥É¥ì¥¹¶õ´Ö¤È¤ß¤Ê¤¹"
+
+#~ msgid "-ms2600 is used without -ms."
+#~ msgstr "-ms2600 ¤¬ -ms ¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "Only initialized variables can be placed into the 8-bit area."
+#~ msgstr "8 ¥Ó¥Ã¥ÈÎΰèÆâ¤ËÇÛÃ֤Ǥ­¤ëÊÑ¿ô¤À¤±¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "Generate H8/S code"
+#~ msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate H8/S code"
+#~ msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Generate H8/S2600 code"
+#~ msgstr "H8/S2600 ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate H8/S2600 code"
+#~ msgstr "H8/S2600 ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Make integers 32 bits wide"
+#~ msgstr "À°¿ô¤ò 32 ¥Ó¥Ã¥ÈÉý¤È¤¹¤ë"
+
+#~ msgid "Use registers for argument passing"
+#~ msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë"
+
+#~ msgid "Do not use registers for argument passing"
+#~ msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤·¤Ê¤¤"
+
+#~ msgid "Consider access to byte sized memory slow"
+#~ msgstr "¥Ð¥¤¥È¥µ¥¤¥ºÃ±°Ì¤Î¥á¥â¥ê¥¢¥¯¥»¥¹¤¬ÃÙ¤¤¤³¤È¤ò¹Íθ¤¹¤ë"
+
+#~ msgid "Enable linker relaxing"
+#~ msgstr "¥ê¥ó¥«¤Î -relax ¥ª¥×¥·¥ç¥ó¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Generate H8/300H code"
+#~ msgstr "H8/300H ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate H8/300H code"
+#~ msgstr "H8/300H ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Use H8/300 alignment rules"
+#~ msgstr "H8/300 ¥¢¥é¥¤¥ó¥á¥ó¥Èµ¬Â§¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "real name is too long - alias ignored"
+#~ msgstr "ËÜÍè¤Î̾Á°¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "alias name is too long - alias ignored"
+#~ msgstr "ÊÌ̾¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "junk at end of #pragma map"
+#~ msgstr "#pragma map ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "malformed #pragma map, ignored"
+#~ msgstr "¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "Generate char instructions"
+#~ msgstr "ʸ»úÌ¿Îá¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate char instructions"
+#~ msgstr "ʸ»úÌ¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Use the Cygwin interface"
+#~ msgstr "Cygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use the Mingw32 interface"
+#~ msgstr "Mingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Create GUI application"
+#~ msgstr "GUI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ë"
+
+#~ msgid "Don't set Windows defines"
+#~ msgstr "Windows ¤Î define ¤òÀßÄꤷ¤Ê¤¤"
+
+#~ msgid "Set Windows defines"
+#~ msgstr "Windows ¤Î define ¤òÀßÄꤹ¤ë"
+
+#~ msgid "Create console application"
+#~ msgstr "¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ë"
+
+#~ msgid "Generate code for a DLL"
+#~ msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Ignore dllimport for functions"
+#~ msgstr "´Ø¿ô¤Ø¤Î dllimport ¤ò̵»ë¤¹¤ë"
+
+#~ msgid "Use Mingw-specific thread support"
+#~ msgstr "Mingw ¸ÇÍ­¤Î¥¹¥ì¥Ã¥É¥µ¥Ý¡¼¥È¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "-f%s ignored for target (all code is position independent)"
+#~ msgstr "-f%s ¤Ï¥¿¡¼¥²¥Ã¥È¤Ç̵»ë¤µ¤ì¤Þ¤¹ (Á´¤Æ¤Î¥³¡¼¥É¤Ï°ÌÃÖÈó°Í¸¤Ç¤¹)"
+
+#~ msgid "Internal gcc abort from %s:%d"
+#~ msgstr "gcc ÆâÉô¤ÇÃæÃÇ %s:%d"
+
+#~ msgid "The local variable `insn' has the value:"
+#~ msgstr "¤½¤Î¥í¡¼¥«¥ëÊÑ¿ô `insn' ¤¬Ãͤò»ý¤Ã¤Æ¤¤¤Þ¤¹:"
+
+#~ msgid "Retain standard MXDB information"
+#~ msgstr "ɸ½à MXDB ¾ðÊó¤òÊÝ»ý¤¹¤ë"
+
+#~ msgid "Retain legend information"
+#~ msgstr "legend ¾ðÊó¤ò°Ý»ý¤¹¤ë"
+
+#~ msgid "Generate external legend information"
+#~ msgstr "³°Éô legend ¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Emit identifying info in .s file"
+#~ msgstr ".s ¥Õ¥¡¥¤¥ëÆâ¤Ë¼±Ê̻ҾðÊó¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Warn when a function arg is a structure"
+#~ msgstr "´Ø¿ô¤Î°ú¿ô¤¬¹½Â¤ÂΤÀ¤Ã¤¿¤é·Ù¹ð¤¹¤ë"
+
+#~ msgid "argument is a structure"
+#~ msgstr "°ú¿ô¤¬¹½Â¤ÂΤǤ¹"
+
+#~ msgid "-mbnu210 is ignored (option is obsolete)."
+#~ msgstr "-mbnu210 ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿(ÇѤ줿¥ª¥×¥·¥ç¥ó¤Ç¤¹)"
+
+#~ msgid "bad value (%s) for -march= switch"
+#~ msgstr "-march= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "bad value (%s) for -mcpu= switch"
+#~ msgstr "-mcpu= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "Register '%c' is unknown"
+#~ msgstr "¥ì¥¸¥¹¥¿ '%c' ¤¬ÉÔÌÀ¤Ç¤¹"
+
+#~ msgid "Register '%c' already specified in allocation order"
+#~ msgstr "¥ì¥¸¥¹¥¿ '%c' ¤Ï´û¤Ë³ÎÊݽç¤Ç»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "-mregparm=%d is not between 0 and %d"
+#~ msgstr "-mregparm=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-malign-loops=%d is not between 0 and %d"
+#~ msgstr "-malign-loops=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-malign-jumps=%d is not between 0 and %d"
+#~ msgstr "-malign-jumps=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-malign-functions=%d is not between 0 and %d"
+#~ msgstr "-malign-functions=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-mpreferred-stack-boundary=%d is not between 2 and 31"
+#~ msgstr "-mpreferred-stack-boundary=%d ¤¬ 2 ¤«¤é 31 ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-mbranch-cost=%d is not between 0 and 5"
+#~ msgstr "-mbranch-cost=%d ¤¬ 0 ¤«¤é 5 ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "floating constant misused"
+#~ msgstr "ÉâÆ°¾®¿ôÄê¿ô¤ò»È¤¤Â»¤Í¤Þ¤·¤¿"
+
+#~ msgid "invalid UNSPEC as operand"
+#~ msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤Æ̵¸ú¤Ê UNSPEC"
+
+#~ msgid "invalid expression as operand"
+#~ msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤Æ̵¸ú¤Ê¼°"
+
+#~ msgid "selector must be an immediate"
+#~ msgstr "¥»¥ì¥¯¥¿¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "mask must be an immediate"
+#~ msgstr "¥Þ¥¹¥¯¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "half-pic init called on systems that don't support it."
+#~ msgstr "half-pic ½é´ü²½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿¡£"
+
+#~ msgid "Same as -mcpu=i386"
+#~ msgstr "-mcpu=i386 ¤ÈƱ¤¸"
+
+#~ msgid "Same as -mcpu=i486"
+#~ msgstr "-mcpu=i486 ¤ÈƱ¤¸"
+
+#~ msgid "Same as -mcpu=pentium"
+#~ msgstr "-mcpu=pentium ¤ÈƱ¤¸"
+
+#~ msgid "Same as -mcpu=pentiumpro"
+#~ msgstr "-mcpu=pentiumpro ¤ÈƱ¤¸"
+
+#~ msgid "Alternate calling convention"
+#~ msgstr "¸Æ¤Ó½Ð¤·µ¬Ìó¤òÆþ¤ìÂؤ¨¤ë"
+
+#~ msgid "Use normal calling convention"
+#~ msgstr "ÉáÄ̤θƤӽФ·µ¬Ìó¤ò»È¤¦"
+
+#~ msgid "Align some doubles on dword boundary"
+#~ msgstr "double ¤ò dword ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Align doubles on word boundary"
+#~ msgstr "double ¤ò word ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Uninitialized locals in .bss"
+#~ msgstr ".bss ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤"
+
+#~ msgid "Uninitialized locals in .data"
+#~ msgstr ".data ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤"
+
+#~ msgid "Use IEEE math for fp comparisons"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤¦"
+
+#~ msgid "Do not use IEEE math for fp comparisons"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤ï¤Ê¤¤"
+
+#~ msgid "Return values of functions in FPU registers"
+#~ msgstr "FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤¹"
+
+#~ msgid "Do not return values of functions in FPU registers"
+#~ msgstr "FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤µ¤Ê¤¤"
+
+#~ msgid "Do not generate sin, cos, sqrt for FPU"
+#~ msgstr "FPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Generate sin, cos, sqrt for FPU"
+#~ msgstr "FPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Omit the frame pointer in leaf functions"
+#~ msgstr "Ëöü¤Î´Ø¿ô¤Ç¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤ò¾Êά¤¹¤ë"
+
+#~ msgid "Enable stack probing"
+#~ msgstr "¥¹¥¿¥Ã¥¯Ãµº÷¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Emit Intel syntax assembler opcodes"
+#~ msgstr "Intel ¥·¥ó¥¿¥Ã¥¯¥¹¤Î¥¢¥»¥ó¥Ö¥éÌ¿Îá¤òÅǤ­½Ð¤¹"
+
+#~ msgid "Align destination of the string operations"
+#~ msgstr "ʸ»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Do not align destination of the string operations"
+#~ msgstr "ʸ»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤·¤Ê¤¤"
+
+#~ msgid "Inline all known string operations"
+#~ msgstr "´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤¹¤ë"
+
+#~ msgid "Do not inline all known string operations"
+#~ msgstr "´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤·¤Ê¤¤"
+
+#~ msgid "Use push instructions to save outgoing arguments"
+#~ msgstr "½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á push Ì¿Îá¤ò»È¤¦"
+
+#~ msgid "Do not use push instructions to save outgoing arguments"
+#~ msgstr "½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á¤Ë¤Ï push Ì¿Îá¤ò»È¤ï¤Ê¤¤"
+
+#~ msgid "sizeof(long double) is 16."
+#~ msgstr "sizeof(long double) ¤Ï 16 ¤È¤¹¤ë¡£"
+
+#~ msgid "sizeof(long double) is 12."
+#~ msgstr "sizeof(long double) ¤Ï 12 ¤È¤¹¤ë¡£"
+
+#~ msgid "Schedule code for given CPU"
+#~ msgstr "½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤ò¥¹¥±¥¸¥å¡¼¥ë¤¹¤ë"
+
+#~ msgid "Generate code for given CPU"
+#~ msgstr "½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Control allocation order of integer registers"
+#~ msgstr "À°¿ô¥ì¥¸¥¹¥¿¤Î³ÎÊݽç¤òÀ©¸æ¤¹¤ë"
+
+#~ msgid "Number of registers used to pass integer arguments"
+#~ msgstr "¥ì¥¸¥¹¥¿¤Î¿ô¤¬À°¿ô¤ò°ú¿ô¤òÅϤ¹¤¿¤á¤Ë»È¤ï¤ì¤ë"
+
+#~ msgid "Loop code aligned to this power of 2"
+#~ msgstr "¥ë¡¼¥×¥³¡¼¥É¤ò¤³¤ÎÃͤÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Jump targets are aligned to this power of 2"
+#~ msgstr "¥¸¥ã¥ó¥×Àè¤ò¤³¤ÎÃͤÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Function starts are aligned to this power of 2"
+#~ msgstr "´Ø¿ô¤Î³«»Ï°ÌÃÖ¤ò¤³¤ÎÃͤÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Attempt to keep stack aligned to this power of 2"
+#~ msgstr "¤Ç¤­¤ë¤À¤±¥¹¥¿¥Ã¥¯¤ò¤³¤ÎÃͤÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë"
+
+#~ msgid "Branches are this expensive (1-5, arbitrary units)"
+#~ msgstr "¥Ö¥é¥ó¥Á¤Î¥³¥¹¥È¤ò»Ø¼¨¤¹¤ë (1-5, Ç¤°Õ¤Î¸Ä¿ô)"
+
+#~ msgid "Profiling uses mcount"
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Ç mcount ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Emit half-PIC code"
+#~ msgstr "Ⱦ PIC ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Emit ELF object code"
+#~ msgstr "ELF ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Emit ROSE object code"
+#~ msgstr "ROSE ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Symbols have a leading underscore"
+#~ msgstr "¥·¥ó¥Ü¥ë¤ÎƬ¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò¤Ä¤±¤ë"
+
+#~ msgid "Align to >word boundaries"
+#~ msgstr "¥ï¡¼¥É¶­³¦¤è¤êÂ礭¤á¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Use mcount for profiling"
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ëÍѤˠmcount ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use mcount_ptr for profiling"
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Ë mcount_ptr ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Generate ELF output"
+#~ msgstr "ELF ½ÐÎϤòÀ¸À®¤¹¤ë"
+
+#~ msgid "Use Mingw32 interface"
+#~ msgstr "Mingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use Cygwin interface"
+#~ msgstr "Cygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use bare Windows interface"
+#~ msgstr "ÁǤΠWindows ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "`%s' declared as both exported to and imported from a DLL."
+#~ msgstr "`%s' ¤¬ DLL ¤«¤é import¡¢DLL ¤Ë export ¤ÎξÊý¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "Environment variable DJGPP not defined."
+#~ msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Environment variable DJGPP points to missing file '%s'."
+#~ msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬¡¢¸«¤Ä¤«¤é¤Ê¤¤¥Õ¥¡¥¤¥ë '%s' ¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "Environment variable DJGPP points to corrupt file '%s'."
+#~ msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬¡¢²õ¤ì¤¿¥Õ¥¡¥¤¥ë '%s' ¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "Generate code which uses the FPU"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Do not generate code which uses the FPU"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "sorry, not implemented: #pragma align NAME=SIZE"
+#~ msgstr "»ÄÇ°¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma align NAME=SIZE"
+
+#~ msgid "malformed #pragma align - ignored"
+#~ msgstr "¤ª¤«¤·¤Ê #pragma align - Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "sorry, not implemented: #pragma noalign NAME"
+#~ msgstr "»ÄÇ°¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma noalign NAME"
+
+#~ msgid "stack limit expression is not supported"
+#~ msgstr "¥¹¥¿¥Ã¥¯À©¸Â¼°¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#~ msgid "Generate SA code"
+#~ msgstr "SA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate SB code"
+#~ msgstr "SB ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate KA code"
+#~ msgstr "KA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate KB code"
+#~ msgstr "KB ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate JA code"
+#~ msgstr "JA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate JD code"
+#~ msgstr "JD ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate JF code"
+#~ msgstr "JF ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "generate RP code"
+#~ msgstr "RP ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate MC code"
+#~ msgstr "MC ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate CA code"
+#~ msgstr "CA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate CF code"
+#~ msgstr "CF ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Use alternate leaf function entries"
+#~ msgstr "´Ø¿ô¹àÌܤÎÂå¤ï¤ê¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Do not use alternate leaf function entries"
+#~ msgstr "´Ø¿ô¹àÌÜËöÈø¤ÎÂå¤ï¤ê¤ÏÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Perform tail call optimization"
+#~ msgstr "ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤¦"
+
+#~ msgid "Do not perform tail call optimization"
+#~ msgstr "ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "Use complex addressing modes"
+#~ msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use complex addressing modes"
+#~ msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Align code to 8 byte boundary"
+#~ msgstr "¥³¡¼¥É¤ò 8 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Do not align code to 8 byte boundary"
+#~ msgstr "¥³¡¼¥É¤ò 8 bit ¥³¡¼¥É¤Ë¥¢¥é¥¤¥ó¤·¤Ê¤¤"
+
+#~ msgid "Enable compatibility with iC960 v2.0"
+#~ msgstr "iC960 v2.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable compatibility with iC960 v3.0"
+#~ msgstr "iC960 v3.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable compatibility with ic960 assembler"
+#~ msgstr "ic960 ¥¢¥»¥ó¥Ö¥é¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Do not permit unaligned accesses"
+#~ msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Ê¤¤"
+
+#~ msgid "Permit unaligned accesses"
+#~ msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Layout types like Intel's v1.3 gcc"
+#~ msgstr "Intel ¤Î v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Do not layout types like Intel's v1.3 gcc"
+#~ msgstr "Intel v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ÎÇÛÃÖ¤ò¹Ô¤Ê¤ï¤Ê¤¤"
+
+#~ msgid "Use 64 bit long doubles"
+#~ msgstr "64 ¥Ó¥Ã¥È long double ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Enable linker relaxation"
+#~ msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Do not enable linker relaxation"
+#~ msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤·¤Ê¤¤"
+
+#~ msgid "conflicting architectures defined - using C series"
+#~ msgstr "¶¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - C ¥·¥ê¡¼¥º»ÈÍÑ"
+
+#~ msgid "conflicting architectures defined - using K series"
+#~ msgstr "¶¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - K ¥·¥ê¡¼¥º»ÈÍÑ<"
+
+#~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0"
+#~ msgstr "iC2.0 ¤È iC3.0 ¤È¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó - iC3.0 ¤ò»ÈÍѤ·¤Þ¤¹"
+
+#~ msgid "The -mlong-double-64 option does not work yet."
+#~ msgstr "-mlong-double-64 ¥ª¥×¥·¥ç¥ó¤Ï¤Þ¤ÀÆ°ºî¤·¤Þ¤»¤ó"
+
+#~ msgid "ia64_print_operand: unknown code"
+#~ msgstr "ia64_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "value of -mfixed-range must have form REG1-REG2"
+#~ msgstr "-mfixed-range ¤ÎÃͤϠREG1-REG2 ·Á¼°¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "unknown register name: %s"
+#~ msgstr "ÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹: %s"
+
+#~ msgid "%s-%s is an empty range"
+#~ msgstr "%s-%s ¤¬¶õ¤ÎÈϰϤǤ¹"
+
+#~ msgid "cannot optimize division for both latency and throughput"
+#~ msgstr "¥ì¥¤¥Æ¥ó¥·¤È¥¹¥ë¡¼¥×¥Ã¥ÈξÊý¤Îʬ³äºÇŬ²½¤Ï¹Ô¤Ê¤¨¤Þ¤»¤ó"
+
+#~ msgid "Generate big endian code"
+#~ msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®"
+
+#~ msgid "Generate little endian code"
+#~ msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®"
+
+#~ msgid "Generate code for GNU as"
+#~ msgstr "GNU as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for Intel as"
+#~ msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for GNU ld"
+#~ msgstr "GNU ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for Intel ld"
+#~ msgstr "Intel ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code without GP reg"
+#~ msgstr "GP ¥ì¥¸¥¹¥¿ÉÔ»ÈÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Emit stop bits before and after volatile extended asms"
+#~ msgstr "³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Don't emit stop bits before and after volatile extended asms"
+#~ msgstr "³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Emit code for Itanium (TM) processor B step"
+#~ msgstr "Itanium (TM) ¥×¥í¥»¥Ã¥µ B step ÍÑ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Use in/loc/out register names"
+#~ msgstr "in/loc/out ¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Disable use of sdata/scommon/sbss"
+#~ msgstr "sdata/scommon/sbss ¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable use of sdata/scommon/sbss"
+#~ msgstr "sdata/scommon/sbss ¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "gp is constant (but save/restore gp on indirect calls)"
+#~ msgstr "gp ¤òÄê¿ô¤È¤¹¤ë¡Êâ¡¢´ÖÀܸƤӽФ·¤Ç¤Ï gp ¤ò save/restore ¤¹¤ë¡Ë"
+
+#~ msgid "Generate self-relocatable code"
+#~ msgstr "¼«¸ÊºÆÇÛÃÖ²Äǽ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate inline division, optimize for latency"
+#~ msgstr "¥ì¥¤¥Æ¥ó¥·¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate inline division, optimize for throughput"
+#~ msgstr "¥¹¥ë¡¼¥×¥Ã¥È¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Enable Dwarf 2 line debug info via GNU as"
+#~ msgstr "GNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable Dwarf 2 line debug info via GNU as"
+#~ msgstr "GNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Specify range of registers to make fixed."
+#~ msgstr "¸ÇÄꤹ¤ë¤¿¤á¤Î¥ì¥¸¥¹¥¿¤ÎÈϰϤò»ØÄꤹ¤ë"
+
+#~ msgid "-msystem-v and -p are incompatible"
+#~ msgstr "-msystem-v ¤È -p ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-msystem-v and -mthreads are incompatible"
+#~ msgstr "-msystem-v ¤È -mthreads ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "bad value (%s) for -mmodel switch"
+#~ msgstr "-mmodel ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "bad value (%s) for -msdata switch"
+#~ msgstr "-msdata ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "const objects cannot go in .sdata/.sbss"
+#~ msgstr "const ¥ª¥Ö¥¸¥§¥¯¥È¤Ï .sdata/.sbss ¤ËÃÖ¤±¤Þ¤»¤ó"
+
+#~ msgid "invalid operand to %s code"
+#~ msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %p code"
+#~ msgstr "%p ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %T/%B code"
+#~ msgstr "%T/%B ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "invalid operand to %N code"
+#~ msgstr "%N ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Display compile time statistics"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥ë»þ´ÖÅý·×Ãͤòɽ¼¨¤¹¤ë"
+
+#~ msgid "Align all loops to 32 byte boundary"
+#~ msgstr "Á´¤Æ¤Î¥ë¡¼¥×¤ò 32 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Only issue one instruction per cycle"
+#~ msgstr "¥µ¥¤¥¯¥ëËè¤Ë°ì¤Ä¤ÎÌ¿Îá¤À¤±¤òȯ¹Ô¤¹¤ë"
+
+#~ msgid "Prefer branches over conditional execution"
+#~ msgstr "¾ò·ï¤Î¼Â¹Ô¤è¤ê¤Ïʬ´ô¤ÎÀ¸À®¤òÍ¥À褹¤ë"
+
+#~ msgid "Code size: small, medium or large"
+#~ msgstr "¥³¡¼¥É¥µ¥¤¥º: small, medium Ëô¤Ï large"
+
+#~ msgid "Small data area: none, sdata, use"
+#~ msgstr "¥¹¥â¡¼¥ë¥Ç¡¼¥¿Îΰè: none, sdata, use"
+
+#~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
+#~ msgstr "-f%s ¤Ï 68HC11/68HC12 ÍѤȤ·¤Æ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿ (¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó)"
+
+#~ msgid "Compile with 16-bit integer mode"
+#~ msgstr "16 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Compile with 32-bit integer mode"
+#~ msgstr "32 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Auto pre/post decrement increment allowed"
+#~ msgstr "¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍƤ¹¤ë"
+
+#~ msgid "Auto pre/post decrement increment not allowed"
+#~ msgstr "¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍƤ·¤Ê¤¤"
+
+#~ msgid "Compile for a 68HC11"
+#~ msgstr "68HC11 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Compile for a 68HC12"
+#~ msgstr "68HC12 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Specify the register allocation order"
+#~ msgstr "¥ì¥¸¥¹¥¿³ÎÊݽç¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Indicate the number of soft registers available"
+#~ msgstr "ÍøÍѲÄǽ¥½¥Õ¥È¥ì¥¸¥¹¥¿¤Î¿ô¤ò¼¨¤¹"
+
+#~ msgid "-malign-loops=%d is not between 1 and %d"
+#~ msgstr "-malign-loops=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "-malign-jumps=%d is not between 1 and %d"
+#~ msgstr "-malign-jumps=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "-malign-functions=%d is not between 1 and %d"
+#~ msgstr "-malign-functions=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "-fPIC is not currently supported on the 68000 or 68010\n"
+#~ msgstr "º£¤Î¤È¤³¤í 68000 ¤ä 68010 ¤Ç¤Ï -fPIC ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "Internal gcc monitor: short-branch(%x)"
+#~ msgstr "ÆâÉô gcc ¥â¥Ë¥¿: ¥·¥ç¡¼¥È¥Ö¥é¥ó¥Á(%x)"
+
+#~ msgid "Internal gcc error: Can't express symbolic location"
+#~ msgstr "ÆâÉô gcc ¥¨¥é¡¼: °ÌÃÖ¤ò¥·¥ó¥Ü¥ëɽ¸½¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "argument #%d is a structure"
+#~ msgstr "°ú¿ô #%d ¤Ï¹½Â¤ÂΤǤ¹"
+
+#~ msgid "%R not followed by %B/C/D/E"
+#~ msgstr "%R ¤Î¸å¤Ë %B/C/D/E ¤ÏÃÖ¤±¤Þ¤»¤ó"
+
+#~ msgid "invalid %x/X value"
+#~ msgstr "̵¸ú¤Ê %x/X ÃͤǤ¹"
+
+#~ msgid "invalid %H value"
+#~ msgstr "̵¸ú¤Ê %H ÃͤǤ¹"
+
+#~ msgid "invalid %h value"
+#~ msgstr "̵¸ú¤Ê %h ÃͤǤ¹"
+
+#~ msgid "invalid %Q value"
+#~ msgstr "̵¸ú¤Ê %Q ÃͤǤ¹"
+
+#~ msgid "invalid %q value"
+#~ msgstr "̵¸ú¤Ê %q ÃͤǤ¹"
+
+#~ msgid "invalid %o value"
+#~ msgstr "̵¸ú¤Ê %o ÃͤǤ¹"
+
+#~ msgid "invalid %p value"
+#~ msgstr "̵¸ú¤Ê %p ÃͤǤ¹"
+
+#~ msgid "invalid %s/S value"
+#~ msgstr "̵¸ú¤Ê %s/S ÃͤǤ¹"
+
+#~ msgid "invalid %P operand"
+#~ msgstr "̵¸ú¤Ê %P ¥ª¥Ú¥é¥ó¥É¤Ç¤¹"
+
+#~ msgid "invalid %B value"
+#~ msgstr "̵¸ú¤Ê %B ÃͤǤ¹"
+
+#~ msgid "invalid %C value"
+#~ msgstr "̵¸ú¤Ê %C ÃͤǤ¹"
+
+#~ msgid "invalid %D value"
+#~ msgstr "̵¸ú¤Ê %D ÃͤǤ¹"
+
+#~ msgid "invalid %E value"
+#~ msgstr "̵¸ú¤Ê %E ÃͤǤ¹"
+
+#~ msgid "`%d' operand isn't a register"
+#~ msgstr "`%d' ¥ª¥Ú¥é¥ó¥É¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid %r value"
+#~ msgstr "̵¸ú¤Ê %r ÃͤǤ¹"
+
+#~ msgid "operand is r0"
+#~ msgstr "¥ª¥Ú¥é¥ó¥É¤Ï r0 ¤Ç¤¹"
+
+#~ msgid "operand is const_double"
+#~ msgstr "¥ª¥Ú¥é¥ó¥É¤Ï const_double ¤Ç¤¹"
+
+#~ msgid "invalid code"
+#~ msgstr "̵¸ú¤Ê¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible"
+#~ msgstr "-mtrap-large-shift ¤È -mhandle-large-shift ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Invalid option `-mshort-data-%s'"
+#~ msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `-mshort-data-%s'"
+
+#~ msgid "-mshort-data-%s is too large "
+#~ msgstr "-mshort-data-%s ¤¬Â礭¤¹¤®¤Þ¤¹¡£"
+
+#~ msgid "-mshort-data-%s and PIC are incompatible"
+#~ msgstr "-mshort-data-%s ¤È PIC ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Invalid option `-mstack-increment=%s'"
+#~ msgstr "`-mstack-increment=%s' ¤Ï̵¸ú¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹"
+
+#~ msgid "Inline constants if it can be done in 2 insns or less"
+#~ msgstr "2 Ì¿Îá°Ê²¼¤Ç¹Ô¤Ê¤¨¤ëÉÔÊѽèÍý¤ò¥¤¥ó¥é¥¤¥ó¤Ë¤¹¤ë"
+
+#~ msgid "inline constants if it only takes 1 instruction"
+#~ msgstr "1 Ì¿Îá¤À¤±¤ò¤È¤ëÉÔÊѽèÍý¤ò¥¤¥ó¥é¥¤¥ó¤Ë¤¹¤ë"
+
+#~ msgid "Set maximum alignment to 4"
+#~ msgstr "ºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 4 ¤ËÀßÄꤹ¤ë"
+
+#~ msgid "Set maximum alignment to 8"
+#~ msgstr "ºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 8 ¤ËÀßÄꤹ¤ë"
+
+#~ msgid "Do not use the divide instruction"
+#~ msgstr "ʬ³äÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Do not arbitary sized immediates in bit operations"
+#~ msgstr "¥Ó¥Ã¥È±é»»¤Ç¤Î¨ÃÍ¥µ¥¤¥º¤òÄ´Ä䤷¤Ê¤¤"
+
+#~ msgid "Always treat bitfield as int-sized"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò¾ï¤Ë int ¤Î¥µ¥¤¥º¤È¤·¤Æ°·¤¦"
+
+#~ msgid "Force functions to be aligned to a 4 byte boundary"
+#~ msgstr "´Ø¿ô¤ò¶¯À©Åª¤Ë 4 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Force functions to be aligned to a 2 byte boundary"
+#~ msgstr "´Ø¿ô¤ò¶¯À©Åª¤Ë 2 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Emit call graph information"
+#~ msgstr "¸Æ¤Ó½Ð¤·¥°¥é¥Õ¾ðÊó¤òÁ÷½Ð¤¹¤ë"
+
+#~ msgid "Prefer word accesses over byte accesses"
+#~ msgstr "¥Ð¥¤¥È¥¢¥¯¥»¥¹¤è¤ê¥ï¡¼¥É¥¢¥¯¥»¥¹¤òÁª¤Ö"
+
+#~ msgid "Generate code for the M*Core M340"
+#~ msgstr "M*Core M340 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Maximum amount for a single stack increment operation"
+#~ msgstr "ñ°ì¥¹¥¿¥Ã¥¯¥¤¥ó¥¯¥ê¥á¥ó¥ÈÁàºî¤ÎºÇÂçÃÍ"
+
+#~ msgid "-mips%d not supported"
+#~ msgstr "-mips%d ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "bad value (%s) for -mips switch"
+#~ msgstr "-mips ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "bad value (%s) for -mabi= switch"
+#~ msgstr "-mabi= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "-mabi=%s does not support -mips%d"
+#~ msgstr "-mabi=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "The -mabi=32 support does not work yet."
+#~ msgstr "-mabi=32 ¥µ¥Ý¡¼¥È¤Ï¤Þ¤ÀÆ°ºî¤·¤Þ¤»¤ó"
+
+#~ msgid "This target does not support the -mabi switch."
+#~ msgstr "¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ï -mabi ¥¹¥¤¥Ã¥Á¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "-mcpu=%s does not support -mips%d"
+#~ msgstr "-mcpu=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "-mips%d does not support 64 bit fp registers"
+#~ msgstr "-mips%d ¤Ï 64 bit fp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó"
+
+#~ msgid "-mips%d does not support 64 bit gp registers"
+#~ msgstr "-mips%d ¤Ï 64 bit gp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "-G is incompatible with PIC code which is the default"
+#~ msgstr "-G ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î PIC ¥³¡¼¥É¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-membedded-pic and -mabicalls are incompatible"
+#~ msgstr "-membedded-pic ¤È -mabicalls ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-G and -membedded-pic are incompatible"
+#~ msgstr "-G ¤È -membedded-pic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Invalid option `entry%s'"
+#~ msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `entry%s'"
+
+#~ msgid "-mentry is only meaningful with -mips-16"
+#~ msgstr "-mentry ¤Ï -mips-16 ¤ò»ØÄꤷ¤¿¤È¤­¤À¤±°ÕÌ£¤ò»ý¤Á¤Þ¤¹"
+
+#~ msgid "internal error: %%) found without a %%( in assembler pattern"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%( ¤Ê¤·¤Î %%) ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "internal error: %%] found without a %%[ in assembler pattern"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%[ ¤Ê¤·¤Î %%] ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "internal error: %%> found without a %%< in assembler pattern"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%< ¤Ê¤·¤Î %%> ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "internal error: %%} found without a %%{ in assembler pattern"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%{ ¤Ê¤·¤Î %%} ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "PRINT_OPERAND: Unknown punctuation '%c'"
+#~ msgstr "PRINT_OPERAND: ÉÔÌÀ¤Ê¶çÆÉÅÀ '%c'"
+
+#~ msgid "PRINT_OPERAND null pointer"
+#~ msgstr "PRINT_OPERAND NULL ¥Ý¥¤¥ó¥¿"
+
+#~ msgid "invalid use of %%d, %%x, or %%X"
+#~ msgstr "̵¸ú¤ÊÍÑË¡¤Î of %%d, %%x, Ëô¤Ï %%X"
+
+#~ msgid "PRINT_OPERAND_ADDRESS, null pointer"
+#~ msgstr "PRINT_OPERAND_ADDRESS, null ¥Ý¥¤¥ó¥¿"
+
+#~ msgid "can't open %s"
+#~ msgstr "%s ¤ò³«¤±¤Þ¤»¤ó"
+
+#~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line"
+#~ msgstr "MIPS ECOFF ·Á¼°¤Ç¤Ï #line ¤ò»ý¤Ä´Ø¿ô¤Ç¤Î¥Õ¥¡¥¤¥ë̾Êѹ¹¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "can't rewind %s"
+#~ msgstr "%s ¤ò rewind ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "can't write to %s"
+#~ msgstr "%s ¤Ø½ñ¤­¹þ¤á¤Þ¤»¤ó"
+
+#~ msgid "can't read from %s"
+#~ msgstr "%s ¤«¤éÆɹþ¤á¤Þ¤»¤ó"
+
+#~ msgid "can't close %s"
+#~ msgstr "%s ¤ò close ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero."
+#~ msgstr "gp_offset (%ld) Ëô¤Ï end_offset (%ld) ¤¬¥¼¥í¤è¤ê¤â¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero."
+#~ msgstr "fp_offset (%ld) Ëô¤Ï end_offset (%ld) ¤¬¥¼¥í¤è¤ê¤â¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "can not handle inconsistent calls to `%s'"
+#~ msgstr "`%s' ¤Ø¤ÎÌ·½â¤·¤¿¸Æ¤Ó½Ð¤·¤òÊ᪤Ǥ­¤Þ¤»¤ó"
+
+#~ msgid "No default crt0.o"
+#~ msgstr "crt0.o ¤ò¥Ç¥Õ¥©¥ë¥È¤È¤·¤Ê¤¤"
+
+#~ msgid "Use 64-bit int type"
+#~ msgstr "64 ¥Ó¥Ã¥È int ·¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 64-bit long type"
+#~ msgstr "64 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 32-bit long type"
+#~ msgstr "32 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Optimize lui/addiu address loads"
+#~ msgstr "lui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤¹¤ë"
+
+#~ msgid "Don't optimize lui/addiu address loads"
+#~ msgstr "lui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤·¤Ê¤¤"
+
+#~ msgid "Use MIPS as"
+#~ msgstr "MIPS as ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use GNU as"
+#~ msgstr "GNU as ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use symbolic register names"
+#~ msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use symbolic register names"
+#~ msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use GP relative sdata/sbss sections"
+#~ msgstr "GP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use GP relative sdata/sbss sections"
+#~ msgstr "GP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Output compiler statistics"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ¹¤ë"
+
+#~ msgid "Don't output compiler statistics"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ·¤Ê¤¤"
+
+#~ msgid "Don't optimize block moves"
+#~ msgstr "¥Ö¥í¥Ã¥¯°ÜÆ°¤òºÇŬ²½¤·¤Ê¤¤"
+
+#~ msgid "Optimize block moves"
+#~ msgstr "¥Ö¥í¥Ã¥¯°ÜÆ°¤òºÇŬ²½¤¹¤ë"
+
+#~ msgid "Use mips-tfile asm postpass"
+#~ msgstr "asm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Don't use mips-tfile asm postpass"
+#~ msgstr "asm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Use hardware floating point"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Use 64-bit FP registers"
+#~ msgstr "64 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 32-bit FP registers"
+#~ msgstr "32 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 64-bit general registers"
+#~ msgstr "64 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 32-bit general registers"
+#~ msgstr "32 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use Irix PIC"
+#~ msgstr "Irix PIC ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Don't use Irix PIC"
+#~ msgstr "Irix PIC ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Use OSF PIC"
+#~ msgstr "OSF PIC ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Don't use OSF PIC"
+#~ msgstr "OSF PIC ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Use indirect calls"
+#~ msgstr "´ÖÀܸƤӽФ·¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use indirect calls"
+#~ msgstr "´ÖÀܸƤӽФ·¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use embedded PIC"
+#~ msgstr "Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use embedded PIC"
+#~ msgstr "Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use ROM instead of RAM"
+#~ msgstr "RAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Don't use ROM instead of RAM"
+#~ msgstr "RAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Put uninitialized constants in ROM (needs -membedded-data)"
+#~ msgstr "̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤¯(Í× -membedded-data)"
+
+#~ msgid "Don't put uninitialized constants in ROM"
+#~ msgstr "̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤«¤Ê¤¤"
+
+#~ msgid "Use big-endian byte order"
+#~ msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use little-endian byte order"
+#~ msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use single (32-bit) FP only"
+#~ msgstr "ñÀºÅÙ(32bit) FP ¤Î¤ß¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Don't use single (32-bit) FP only"
+#~ msgstr "ñÀºÅÙ(32bit) FP °Ê³°¤âÍøÍѤ¹¤ë"
+
+#~ msgid "Use multiply accumulate"
+#~ msgstr "¾è»»Ì¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use multiply accumulate"
+#~ msgstr "¾è»»¡¦²Ã»»Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Work around early 4300 hardware bug"
+#~ msgstr "½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤¦"
+
+#~ msgid "Don't work around early 4300 hardware bug"
+#~ msgstr "½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "Optimize for 4650"
+#~ msgstr "4650 ÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for 3900"
+#~ msgstr "3900 ÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Trap on integer divide by zero"
+#~ msgstr "À°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤¹¤ë"
+
+#~ msgid "Don't trap on integer divide by zero"
+#~ msgstr "À°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤"
+
+#~ msgid "Trap on integer divide overflow"
+#~ msgstr "À°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤¹¤ë"
+
+#~ msgid "Don't trap on integer divide overflow"
+#~ msgstr "À°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤"
+
+#~ msgid "Specify CPU for scheduling purposes"
+#~ msgstr "Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î¤¿¤á¤Ë CPU ¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Specify MIPS ISA"
+#~ msgstr "MIPS ISA ¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Use mips16 entry/exit psuedo ops"
+#~ msgstr "mips16 ¤Î entry/exit µ¿»÷¥ª¥Ú¥é¥ó¥É¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use MIPS16 instructions"
+#~ msgstr "MIPS16 Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "mips16 function profiling"
+#~ msgstr "mips16 ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ë"
+
+#~ msgid "Work around hardware multiply bug"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褹¤ë"
+
+#~ msgid "Do not work around hardware multiply bug"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褷¤Ê¤¤"
+
+#~ msgid "Target the AM33 processor"
+#~ msgstr "AM33 ¥×¥í¥»¥Ã¥µ¤ò¥¿¡¼¥²¥Ã¥È¤È¤¹¤ë"
+
+#~ msgid "optimization turned on"
+#~ msgstr "ºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "optimization turned off"
+#~ msgstr "ºÇŬ²½¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "optimization level restored"
+#~ msgstr "ºÇŬ²½¥ì¥Ù¥ë¤ò¸µ¤ËÌᤷ¤Þ¤·¤¿"
+
+#~ msgid "Don't use hardware fp"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Alternative calling convention"
+#~ msgstr "Ê̤θƤӽФ·µ¬Ìó¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Pass some arguments in registers"
+#~ msgstr "¤¤¤¯¤Ä¤«¤Î°ú¿ô¤Ï¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë"
+
+#~ msgid "Pass all arguments on stack"
+#~ msgstr "Á´¤Æ¤Î°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë"
+
+#~ msgid "Optimize for 32532 cpu"
+#~ msgstr "32532 cpu ÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for 32332 cpu"
+#~ msgstr "32332 cpu ÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for 32032"
+#~ msgstr "32032 ÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Register sb is zero. Use for absolute addressing"
+#~ msgstr "sb ¥ì¥¸¥¹¥¿¤ò¥¼¥í¤È¤¹¤ë¡£ÀäÂÐ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use register sb"
+#~ msgstr "sb ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Do not use bitfield instructions"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use bitfield instructions"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Generate code for high memory"
+#~ msgstr "¹â°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for low memory"
+#~ msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "32381 fpu"
+#~ msgstr "32381 ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È"
+
+#~ msgid "Use multiply-accumulate fp instructions"
+#~ msgstr "¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use multiply-accumulate fp instructions"
+#~ msgstr "¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "\"Small register classes\" kludge"
+#~ msgstr "\"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹\" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "No \"Small register classes\" kludge"
+#~ msgstr "\"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹\" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤ï¤Ê¤¤"
+
+#~ msgid ""
+#~ "Unknown -mschedule= option (%s).\n"
+#~ "Valid options are 700, 7100, 7100LC, 7200, and 8000\n"
+#~ msgstr ""
+#~ "ÉÔÌÀ¤Ê -mschedule= ¥ª¥×¥·¥ç¥ó (%s).\n"
+#~ "Àµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ï 700, 7100, 7100LC, 7200, µÚ¤Ó 8000 ¤Ç¤¹\n"
+
+#~ msgid ""
+#~ "Unknown -march= option (%s).\n"
+#~ "Valid options are 1.0, 1.1, and 2.0\n"
+#~ msgstr ""
+#~ "ÉÔÌÀ¤Ê -march= ¥ª¥×¥·¥ç¥ó (%s).\n"
+#~ "Àµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ï 1.0, 1.1, µÚ¤Ó 2.0\n"
+
+#~ msgid "PIC code generation is not supported in the portable runtime model\n"
+#~ msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï²Äȼ¹Իþ¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó\n"
+
+#~ msgid "PIC code generation is not compatible with fast indirect calls\n"
+#~ msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï¹â®´ÖÀܸƤӽФ·¤ÈÁêÍƤì¤Þ¤»¤ó\n"
+
+#~ msgid "PIC code generation is not compatible with profiling\n"
+#~ msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤È¤ÏÁêÍƤì¤Þ¤»¤ó\n"
+
+#~ msgid "-g is only supported when using GAS on this processor,"
+#~ msgstr "-g ¤Ï¤³¤Î¥×¥í¥»¥Ã¥µ¤Ç¤Ï GAS ¤ò»ÈÍѤ¹¤ë»þ¤À¤±¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹"
+
+#~ msgid "-g option disabled."
+#~ msgstr "-g ¥ª¥×¥·¥ç¥ó¤ò̵¸ú²½¤·¤Þ¤·¤¿¡£"
+
+#~ msgid "Do not use hardware floating point"
+#~ msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Return floating point results in ac0"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò ac0 ¤ÇÊÖ¤¹"
+
+#~ msgid "Return floating point results in memory"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò¥á¥â¥ê¤ÇÊÖ¤¹"
+
+#~ msgid "Generate code for an 11/40"
+#~ msgstr "11/40 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for an 11/45"
+#~ msgstr "11/45 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for an 11/10"
+#~ msgstr "11/10 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Use 32 bit int"
+#~ msgstr "32 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 16 bit int"
+#~ msgstr "16 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 32 bit float"
+#~ msgstr "32 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 64 bit float"
+#~ msgstr "64 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Target has split I&D"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤Ä"
+
+#~ msgid "Target does not have split I&D"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤¿¤Ê¤¤"
+
+#~ msgid "Use UNIX assembler syntax"
+#~ msgstr "UNIX ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use DEC assembler syntax"
+#~ msgstr "DEC ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Generate little endian data"
+#~ msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate big endian data"
+#~ msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Turn on maintainer testing code"
+#~ msgstr "¥á¥ó¥Æ¥Ê¥Æ¥¹¥È¥³¡¼¥É¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable Transmeta picoJava extensions"
+#~ msgstr "Transmeta picoJava ³ÈÄ¥¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable Transmeta picoJava extensions"
+#~ msgstr "Transmeta picoJava ³ÈÄ¥¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Disable reorganization pass"
+#~ msgstr "ºÆÊÔÀ®¹©Äø¤ò̵¸ú¤Ë¤¹¤ë"
+
+#~ msgid "invalid %%B value"
+#~ msgstr "̵¸ú¤Ê %%B ÃÍ"
+
+#~ msgid "invalid %%S value"
+#~ msgstr "̵¸ú¤Ê %%S ÃÍ"
+
+#~ msgid "invalid %%b value"
+#~ msgstr "̵¸ú¤Ê %%b ÃÍ"
+
+#~ msgid "invalid %%H value"
+#~ msgstr "̵¸ú¤Ê %%H ÃÍ"
+
+#~ msgid "invalid %%z value"
+#~ msgstr "̵¸ú¤Ê %%z ÃÍ"
+
+#~ msgid "invalid %%Z value"
+#~ msgstr "̵¸ú¤Ê %%Z ÃÍ"
+
+#~ msgid "invalid %%k value"
+#~ msgstr "̵¸ú¤Ê %%k ÃÍ"
+
+#~ msgid "invalid %%j value"
+#~ msgstr "̵¸ú¤Ê %%j ÃÍ"
+
+#~ msgid "can't have varargs with -mfp-arg-in-fp-regs"
+#~ msgstr "-mfp-arg-in-fp-regs ¤ò»È¤¦¤È²ÄÊѸİú¿ô¤ò»ý¤Æ¤Þ¤»¤ó"
+
+#~ msgid "Always pass floating-point arguments in memory"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤¹¤ë"
+
+#~ msgid "Don't always pass floating-point arguments in memory"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤·¤Ê¤¤"
+
+#~ msgid "Support message passing with the Parallel Environment"
+#~ msgstr "ÊÂÎó´Ä¶­¤Ç¤Î¥á¥Ã¥»¡¼¥¸¥Ñ¥Ã¥·¥ó¥°¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Compile for 64-bit pointers"
+#~ msgstr "64 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Compile for 32-bit pointers"
+#~ msgstr "32 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "-maix64 and POWER architecture are incompatible."
+#~ msgstr "-maix64 ¤È POWER ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤È¤Ç¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-maix64 requires PowerPC64 architecture remain enabled."
+#~ msgstr "PowerPC64 ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ê¤¤¤È -maix64 ¤òÍ­¸ú¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported."
+#~ msgstr "-maix64 Í×µá: 32 bit ¥¢¥É¥ì¥·¥ó¥°²¼¤Î 64 bit ·×»»¤Ï¤Þ¤ÀÍøÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "-mmultiple is not supported on little endian systems"
+#~ msgstr "-mmultiple ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "-mstring is not supported on little endian systems"
+#~ msgstr "-mstring ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "-f%s ignored for AIX (all code is position independent)"
+#~ msgstr "AIX ÍѤˠ-f%s ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡ÊÁ´¤Æ¤Î¥³¡¼¥É¤Ï°ÌÃÖÈó°Í¸¤Ç¤¹¡Ë"
+
+#~ msgid "-ffunction-sections disabled on AIX when debugging"
+#~ msgstr "AIX ¤Ç¤Ï¥Ç¥Ð¥Ã¥°»þ¤Î -ffunction-sections ¤Ï̵¸ú¤È¤µ¤ì¤Þ¤¹"
+
+#~ msgid "-fdata-sections not supported on AIX"
+#~ msgstr "AIX ¤Ç¤Ï -fdata-sections ¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "Unknown -mdebug-%s switch"
+#~ msgstr "ÉÔÌÀ¤Ê -mdebug-%s ¥¹¥¤¥Ã¥Á¤Ç¤¹"
+
+#~ msgid "invalid %%f value"
+#~ msgstr "̵¸ú¤Ê %%f ÃͤǤ¹"
+
+#~ msgid "invalid %%F value"
+#~ msgstr "̵¸ú¤Ê %%F ÃͤǤ¹"
+
+#~ msgid "invalid %%G value"
+#~ msgstr "̵¸ú¤Ê %%G ÃͤǤ¹"
+
+#~ msgid "invalid %%j code"
+#~ msgstr "̵¸ú¤Ê %%j ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "invalid %%J code"
+#~ msgstr "̵¸ú¤Ê %%J ¥³¡¼¥É¤Ç¤¹"
+
+#~ msgid "invalid %%K value"
+#~ msgstr "̵¸ú¤Ê %%K ÃͤǤ¹"
+
+#~ msgid "invalid %%p value"
+#~ msgstr "̵¸ú¤Ê %%p ÃͤǤ¹"
+
+#~ msgid "invalid %%q value"
+#~ msgstr "̵¸ú¤Ê %%q ÃͤǤ¹"
+
+#~ msgid "%%S computed all 1's mask"
+#~ msgstr "%%S ¤ÏÁ´¤Æ¤¬ 1 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿"
+
+#~ msgid "%%S computed all 0's mask"
+#~ msgstr "%%S ¤ÏÁ´¤Æ¤¬ 0 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿"
+
+#~ msgid "invalid %%T value"
+#~ msgstr "̵¸ú¤Ê %%T ÃͤǤ¹"
+
+#~ msgid "invalid %%u value"
+#~ msgstr "̵¸ú¤Ê %%u ÃͤǤ¹"
+
+#~ msgid "invalid %%v value"
+#~ msgstr "̵¸ú¤Ê %%v ÃͤǤ¹"
+
+#~ msgid "invalid %%W value"
+#~ msgstr "̵¸ú¤Ê %%W ÃͤǤ¹"
+
+#~ msgid "Use POWER instruction set"
+#~ msgstr "POWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use POWER2 instruction set"
+#~ msgstr "POWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use POWER2 instruction set"
+#~ msgstr "POWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Do not use POWER instruction set"
+#~ msgstr "POWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use PowerPC instruction set"
+#~ msgstr "PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use PowerPC instruction set"
+#~ msgstr "PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use PowerPC General Purpose group optional instructions"
+#~ msgstr "PowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use PowerPC General Purpose group optional instructions"
+#~ msgstr "PowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use PowerPC Graphics group optional instructions"
+#~ msgstr "PowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Don't use PowerPC Graphics group optional instructions"
+#~ msgstr "PowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use PowerPC-64 instruction set"
+#~ msgstr "PowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use PowerPC-64 instruction set"
+#~ msgstr "PowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use new mnemonics for PowerPC architecture"
+#~ msgstr "PowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤο·¤·¤¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use old mnemonics for PowerPC architecture"
+#~ msgstr "PowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤθŤ¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Put everything in the regular TOC"
+#~ msgstr "Á´¤Æ¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Place floating point constants in TOC"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Don't place floating point constants in TOC"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤"
+
+#~ msgid "Place symbol+offset constants in TOC"
+#~ msgstr "¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Don't place symbol+offset constants in TOC"
+#~ msgstr "¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤"
+
+#~ msgid "Place variable addresses in the regular TOC"
+#~ msgstr "ÊÑ¿ô¥¢¥É¥ì¥¹¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Generate load/store multiple instructions"
+#~ msgstr "Ê£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate load/store multiple instructions"
+#~ msgstr "Ê£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Generate string instructions for block moves"
+#~ msgstr "¥Ö¥í¥Ã¥¯°ÜÆ°ÍѤΠstring Ì¿Îá¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate string instructions for block moves"
+#~ msgstr "¥Ö¥í¥Ã¥¯°ÜÆ°ÍѤΠstring Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Generate load/store with update instructions"
+#~ msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not generate load/store with update instructions"
+#~ msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Generate fused multiply/add instructions"
+#~ msgstr "ÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Don't generate fused multiply/add instructions"
+#~ msgstr "ÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Don't schedule the start and end of the procedure"
+#~ msgstr "¥×¥í¥·¡¼¥¸¥ã³«»Ï¤È½ªÎ»¤Î¥¹¥±¥¸¥å¡¼¥ë¤ò¹Ô¤Ê¤ï¤Ê¤¤"
+
+#~ msgid "Use features of and schedule code for given CPU"
+#~ msgstr "Í¿¤¨¤é¤ì¤¿ CPU ÍѤε¡Ç½¤È¥¹¥±¥¸¥å¡¼¥ë¥³¡¼¥É¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Enable debug output"
+#~ msgstr "¥Ç¥Ð¥Ã¥°½ÐÎϤòÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "RETURN_ADDRESS_OFFSET not supported"
+#~ msgstr "RETURN_ADDRESS_OFFSET ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Select ABI calling convention."
+#~ msgstr "ABI ¸Æ¤Ó½Ð¤·µ¬Ìó¤òÁªÂò¤¹¤ë"
+
+#~ msgid "Select method for sdata handling."
+#~ msgstr "sdata ¼è¤ê°·¤¤¤Î¤¿¤á¤Î¥á¥½¥Ã¥É¤òÁªÂò¤¹¤ë"
+
+#~ msgid "Align to the base type of the bitfield."
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥Ù¡¼¥¹¥¿¥¤¥×¤Ë¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Don't align to the base type of the bitfield."
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥Ù¡¼¥¹¥¿¥¤¥×¤Ë¥¢¥é¥¤¥ó¤·¤Ê¤¤"
+
+#~ msgid "Don't assume that unaligned accesses are handled by the system"
+#~ msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤Ï¤ß¤Ê¤µ¤Ê¤¤"
+
+#~ msgid "Assume that unaligned accesses are handled by the system"
+#~ msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Produce code relocatable at runtime."
+#~ msgstr "¼Â¹Ô»þ¤ËºÆÇÛÃÖ²Äǽ¤Ê¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Don't produce code relocatable at runtime."
+#~ msgstr "¼Â¹Ô»þ¤ËºÆÇÛÃÖ²Äǽ¤Ê¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Produce little endian code."
+#~ msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Produce big endian code."
+#~ msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Use 128 bit long doubles"
+#~ msgstr "128 ¥Ó¥Ã¥È¤Î long double ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "no description yet"
+#~ msgstr "ÀâÌÀ¤Ï¤Þ¤À¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Use EABI."
+#~ msgstr "EABI ¤òÍøÍѤ¹¤ë¡£"
+
+#~ msgid "Don't use EABI."
+#~ msgstr "EABI ¤òÍøÍѤ·¤Ê¤¤¡£"
+
+#~ msgid "Use alternate register names."
+#~ msgstr "ÂåÂإ쥸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Don't use alternate register names."
+#~ msgstr "ÂåÂإ쥸¥¹¥¿Ì¾¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Link with libsim.a, libc.a and sim-crt0.o."
+#~ msgstr "libsim.a, libc.a µÚ¤Ó sim-crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£"
+
+#~ msgid "Link with libads.a, libc.a and crt0.o."
+#~ msgstr "libads.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£"
+
+#~ msgid "Link with libyk.a, libc.a and crt0.o."
+#~ msgstr "libyk.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£"
+
+#~ msgid "Link with libmvme.a, libc.a and crt0.o."
+#~ msgstr "libmvme.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£"
+
+#~ msgid "Set the PPC_EMB bit in the ELF flags header"
+#~ msgstr "PPC_EMB ¥Ó¥Ã¥È¤ò ELF ¥Õ¥é¥°¥Ø¥Ã¥ÀÆâ¤Ë¥»¥Ã¥È¤¹¤ë"
+
+#~ msgid "Bad value for -mcall-%s"
+#~ msgstr "-mcall-%s ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ"
+
+#~ msgid "Bad value for -msdata=%s"
+#~ msgstr "-msdata=%s ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ"
+
+#~ msgid "-mrelocatable and -msdata=%s are incompatible."
+#~ msgstr "-mrelocatable ¤È -msdata=%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-f%s and -msdata=%s are incompatible."
+#~ msgstr "-f%s ¤È -msdata=%s ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-msdata=%s and -mcall-%s are incompatible."
+#~ msgstr "-msdata=%s ¤È -mcall-%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mrelocatable and -mno-minimal-toc are incompatible."
+#~ msgstr "-mrelocatable ¤È -mno-minimal-toc ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mrelocatable and -mcall-%s are incompatible."
+#~ msgstr "-mrelocatable ¤È -mcall-%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-fPIC and -mcall-%s are incompatible."
+#~ msgstr "-fPIC ¤È -mcall-%s ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mcall-aixdesc must be big endian"
+#~ msgstr "-mcall-aixdesc ¤Ï¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Generate code for big endian"
+#~ msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for little endian"
+#~ msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Use little-endian byte order for data"
+#~ msgstr "¥Ç¡¼¥¿¤Î¥Ð¥¤¥È½ç¤Ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "%s is not supported by this configuration"
+#~ msgstr "%s ¤Ï¤³¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "-mlong-double-64 not allowed with -m64"
+#~ msgstr "-m64 »ØÄê¥â¡¼¥É¤Ç¤Ï -mlong-double-64 ¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "bad value (%s) for -mcmodel= switch"
+#~ msgstr "-mcmodel= ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃÍ (%s)"
+
+#~ msgid "-mcmodel= is not supported on 32 bit systems"
+#~ msgstr "-mcmodel= ¤Ï 32 bit ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "profiling does not support code models other than medlow"
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï medlow °Ê³°¤Î¥³¡¼¥É¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "Invalid %%Y operand"
+#~ msgstr "̵¸ú¤Ê %%Y ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%A operand"
+#~ msgstr "̵¸ú¤Ê %%A ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%B operand"
+#~ msgstr "̵¸ú¤Ê %%B ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%c operand"
+#~ msgstr "̵¸ú¤Ê %%c ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%C operand"
+#~ msgstr "̵¸ú¤Ê %%C ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%d operand"
+#~ msgstr "̵¸ú¤Ê %%d ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%D operand"
+#~ msgstr "̵¸ú¤Ê %%D ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "Invalid %%f operand"
+#~ msgstr "̵¸ú¤Ê %%f ¥ª¥Ú¥é¥ó¥É"
+
+#~ msgid "long long constant not a valid immediate operand"
+#~ msgstr "long long Äê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "floating point constant not a valid immediate operand"
+#~ msgstr "ÉâÆ°¾®¿ôÄê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "%s and profiling conflict: disabling %s"
+#~ msgstr "%s ¤È¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï¶¥¹ç¤·¤Þ¤¹: %s ¤ò̵¸ú²½¤·¤Þ¤¹"
+
+#~ msgid "Use FUNCTION_EPILOGUE"
+#~ msgstr "FUNCTION_EPILOGUE ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use FUNCTION_EPILOGUE"
+#~ msgstr "FUNCTION_EPILOGUE ¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Assume possible double misalignment"
+#~ msgstr "double ¤¬¸í¤Ã¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤È¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Assume all doubles are aligned"
+#~ msgstr "Á´¤Æ¤Î double ¤ò¥¢¥é¥¤¥ó¤µ¤ì¤¿¤â¤Î¤È¤ß¤Ê¤¹"
+
+#~ msgid "Pass -assert pure-text to linker"
+#~ msgstr "¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤ¹"
+
+#~ msgid "Do not pass -assert pure-text to linker"
+#~ msgstr "¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤµ¤Ê¤¤"
+
+#~ msgid "Use flat register window model"
+#~ msgstr "¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use flat register window model"
+#~ msgstr "¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use ABI reserved registers"
+#~ msgstr "ABI Í½Ìó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use ABI reserved registers"
+#~ msgstr "ABI Í½Ìó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use hardware quad fp instructions"
+#~ msgstr "»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use hardware quad fp instructions"
+#~ msgstr "»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Compile for v8plus ABI"
+#~ msgstr "v8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Do not compile for v8plus ABI"
+#~ msgstr "v8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤Ê¤¤"
+
+#~ msgid "Utilize Visual Instruction Set"
+#~ msgstr "Visual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Do not utilize Visual Instruction Set"
+#~ msgstr "Visual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ·¤Ê¤¤"
+
+#~ msgid "Optimize for Cypress processors"
+#~ msgstr "Cypress ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for SparcLite processors"
+#~ msgstr "SparcLite ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for F930 processors"
+#~ msgstr "F930 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Optimize for F934 processors"
+#~ msgstr "F934 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Use V8 Sparc ISA"
+#~ msgstr "V8 Sparc ISA ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Optimize for SuperSparc processors"
+#~ msgstr "SuperSparc ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë"
+
+#~ msgid "Pointers are 64-bit"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤ò 64 ¥Ó¥Ã¥È¤È¤¹¤ë"
+
+#~ msgid "Pointers are 32-bit"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤ò 32 ¥Ó¥Ã¥È¤È¤¹¤ë"
+
+#~ msgid "Use 32-bit ABI"
+#~ msgstr "32 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use 64-bit ABI"
+#~ msgstr "64 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Use stack bias"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use stack bias"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Use structs on stronger alignment for double-word copies"
+#~ msgstr "¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ¹¤ë"
+
+#~ msgid "Do not use structs on stronger alignment for double-word copies"
+#~ msgstr "¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ·¤Ê¤¤"
+
+#~ msgid "Optimize tail call instructions in assembler and linker"
+#~ msgstr "¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤¹¤ë"
+
+#~ msgid "Do not optimize tail call instructions in assembler or linker"
+#~ msgstr "¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤·¤Ê¤¤"
+
+#~ msgid "Use given Sparc code model"
+#~ msgstr "Í¿¤¨¤é¤ì¤¿ Sparc ¥³¡¼¥É¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "#pragma GHS endXXXX found without previous startXXX"
+#~ msgstr "#pragma GHS endXXXX ¤¬Á°¤Î startXXX Ìµ¤·¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "#pragma GHS endXXX does not match previous startXXX"
+#~ msgstr "#pragma GHS endXXX ¤¬Á°¤Î startXXX ¤ÈŬ¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "Cannot set interrupt attribute: no current function"
+#~ msgstr "interrupt Â°À­¤òÀßÄê¤Ç¤­¤Þ¤»¤ó: ¸½ºß¤Î´Ø¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Cannot set interrupt attribute: no such identifier"
+#~ msgstr "interrupt Â°À­¤òÀßÄê¤Ç¤­¤Þ¤»¤ó: ¤½¤ÎÍͤʼ±Ê̻Ҥ¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "junk at end of #pragma ghs section"
+#~ msgstr "#pragma ghs section ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "unrecognised section name \"%s\""
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥»¥¯¥·¥ç¥ó̾ \"%s\""
+
+#~ msgid "malformed #pragma ghs section"
+#~ msgstr "¤ª¤«¤·¤Ê #pragma ghs section"
+
+#~ msgid "junk at end of #pragma ghs interrupt"
+#~ msgstr "#pragma ghs interrupt ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs starttda"
+#~ msgstr "#pragma ghs starttda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs startsda"
+#~ msgstr "#pragma ghs startsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs startzda"
+#~ msgstr "#pragma ghs startzda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs endtda"
+#~ msgstr "#pragma ghs endtda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs endsda"
+#~ msgstr "#pragma ghs endsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma ghs endzda"
+#~ msgstr "#pragma ghs ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s=%s is not numeric."
+#~ msgstr "%s=%s ¤Ï¿ôÃͤǤϤ¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "%s=%s is too large."
+#~ msgstr "%s=%s ¤ÏÂ礭¤¹¤®¤Þ¤¹¡£"
+
+#~ msgid "a data area attribute cannot be specified for local variables"
+#~ msgstr "¥Ç¡¼¥¿Îΰè°À­¤ò¥í¡¼¥«¥ëÊÑ¿ô¤Ë¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "data area of '%s' conflicts with previous declaration"
+#~ msgstr "¥Ç¡¼¥¿Îΰè '%s' ¤ÏÁ°¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹"
+
+#~ msgid "Bogus JR construction: %d\n"
+#~ msgstr "¸íËâ²½¤µ¤ì¤¿ JR ¹½Â¤: %d\n"
+
+#~ msgid "Bad amount of stack space removal: %d"
+#~ msgstr "¥¹¥¿¥Ã¥¯¶õ´Öºï½üÎ̤¬ÉÔÀµ¤Ç¤¹: %d"
+
+#~ msgid "Bogus JARL construction: %d\n"
+#~ msgstr "¸íËâ²½¤µ¤ì¤¿ JARL ¹½Â¤: %d\n"
+
+#~ msgid "Support Green Hills ABI"
+#~ msgstr "Green Hill ¤Î ABI ¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Prohibit PC relative function calls"
+#~ msgstr "PC ´ØÏ¢¤Î´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¶Ø¤¸¤ë"
+
+#~ msgid "Reuse r30 on a per function basis"
+#~ msgstr "´Ø¿ô¤Î¼çÍ×ÉôʬËè¤Ë r30 ¤òºÆÍøÍѤ¹¤ë"
+
+#~ msgid "Use stubs for function prologues"
+#~ msgstr "´Ø¿ô³«»ÏÉôʬÍѤΥ¹¥¿¥Ö¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Same as: -mep -mprolog-function"
+#~ msgstr "-mep -mprolog-function ¤ÈƱÍÍ"
+
+#~ msgid "Enable backend debugging"
+#~ msgstr "¥Ð¥Ã¥¯¥¨¥ó¥É¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Compile for the v850 processor"
+#~ msgstr "v850 ¥×¥í¥»¥Ã¥µÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Use 4 byte entries in switch tables"
+#~ msgstr "switch ¥Æ¡¼¥Ö¥ë¤Ç 4 ¥Ð¥¤¥È¥¨¥ó¥È¥ê¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Set the max size of data eligible for the TDA area"
+#~ msgstr "TDA Îΰè¤Ë¤È¤Ã¤Æ˾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë"
+
+#~ msgid "Set the max size of data eligible for the SDA area"
+#~ msgstr "SDA Îΰè¤Ë¤È¤Ã¤Æ˾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë"
+
+#~ msgid "Set the max size of data eligible for the ZDA area"
+#~ msgstr "ZDA Îΰè¤Ë¤È¤Ã¤Æ˾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë"
+
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "pointer value used where a floating point value was expected"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "aggregate value used where a float was expected"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "conversion to incomplete type"
+#~ msgstr "ÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹"
+
+#~ msgid "can't convert between vector values of different size"
+#~ msgstr "Â礭¤µ¤Î°Û¤Ê¤ë¥Ù¥¯¥È¥ëÃÍƱ»Î¤ÎÊÑ´¹¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "aggregate value used where an integer was expected"
+#~ msgstr "À°¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "pointer value used where a complex was expected"
+#~ msgstr "Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "aggregate value used where a complex was expected"
+#~ msgstr "Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "can't convert value to a vector"
+#~ msgstr "Ãͤò¥Ù¥¯¥È¥ë¤Ë¤ÏÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unable to call pointer to member function here"
+#~ msgstr "¤³¤³¤Ç¤Ï¥á¥ó¥Ð´Ø¿ô¥Ý¥¤¥ó¥¿¸Æ¤Ó½Ð¤·¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "destructors take no parameters"
+#~ msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï²¾°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó"
+
+#~ msgid "ISO C++ forbids omitting the middle term of a ?: expression"
+#~ msgstr "ISO C++ ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "conflicting access specifications for field `%s', ignored"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò¤¬¶¥¹ç¤·¤¿¤¿¤á¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "trying to finish struct, but kicked out due to previous parse errors."
+#~ msgstr "¹½Ê¸²òÀϤ¬¹½Â¤ÂΤνª¤ê¤Ëº¹¤·³Ý¤«¤ê¤Þ¤·¤¿¤¬¡¢Á°¤Î¥¨¥é¡¼¤Î¤»¤¤¤Çʸ̮¤ò¸«¼º¤¤¤Þ¤·¤¿"
+
+#~ msgid "language string `\"%s\"' not recognized"
+#~ msgstr "¸À¸ìʸ»úÎó `\"%s\"' ¤Ïǧ¼±¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "not enough type information"
+#~ msgstr "ÉÔ½½Ê¬¤Ê·¿¾ðÊó"
+
+#~ msgid "invalid operation on uninstantiated type"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹²½¤µ¤ì¤Ê¤¤·¿¤ËÂФ¹¤ë̵¸ú¤ÊÁàºî¤Ç¤¹"
+
+#~ msgid "object size exceeds built-in limit for virtual function table implementation"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥µ¥¤¥º¤¬¡¢²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¼ÂÁõ¤ËÁȤ߹þ¤³¤Þ¤ì¤¿¥µ¥¤¥º¤òĶ²á¤·¤Þ¤·¤¿"
+
+#~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥µ¥¤¥º¤¬¡¢²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¼ÂÁõ¤ÎÄ̾ï¤ÎÀ©¸Â¤òĶ²á¤·¤¿¤¿¤á¡¢Á´¤Æ¤Î¥½¡¼¥¹¤ò -fhuge-objects ¤ò»È¤Ã¤ÆºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "declaration of `%s' shadows a member of `this'"
+#~ msgstr "`%s' ¤ÎÀë¸À¤Ë¤è¤ê `this' ¤Î¥á¥ó¥Ð¤¬Ê¤¤¤±£¤µ¤ì¤Þ¤¹"
+
+#~ msgid "label `%s' referenced outside of any function"
+#~ msgstr "¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿"
+
+#~ msgid "jump to case label"
+#~ msgstr "case ¥é¥Ù¥ë¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "  enters try block"
+#~ msgstr "  try ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹"
+
+#~ msgid "  enters catch block"
+#~ msgstr "  catch ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹"
+
+#~ msgid "  from here"
+#~ msgstr "  ¤³¤³¤«¤é"
+
+#~ msgid "the ABI requires vtable thunks"
+#~ msgstr "ABI ¤Ï²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¥µ¥ó¥¯¤òÍ׵ᤷ¤Þ¤¹"
+
+#~ msgid "multiple types in one declaration"
+#~ msgstr "°ì¤Ä¤ÎÀë¸À¤ËÊ£¿ô¤Î·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "declaration does not declare anything"
+#~ msgstr "Àë¸À¤¬²¿¤âÀë¸À¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Missing type-name in typedef-declaration."
+#~ msgstr "typdef Àë¸À¤Ç·¿Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C++ prohibits anonymous structs"
+#~ msgstr "ISO C++ ¤Ï̵̾¹½Â¤ÂΤò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "assignment (not initialization) in declaration"
+#~ msgstr "Àë¸À¤ÎÃæ¤ËÂåÆþ(½é´ü²½¤Ç¤Ï¤Ê¤¯)¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "invalid catch parameter"
+#~ msgstr "̵¸ú¤Ê catch ¤Î°ú¿ô"
+
+#~ msgid "cannot declare `::main' to be a template"
+#~ msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "cannot declare `::main' to be inline"
+#~ msgstr "`::main' ¤ò inline ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "cannot declare `::main' to be static"
+#~ msgstr "`::main' ¤ò static ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "`main' must return `int'"
+#~ msgstr "`main' ¤Ï `int' ¤òÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "overflow in array dimension"
+#~ msgstr "ÇÛÎó¤Î¼¡¸µ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "destructors must be member functions"
+#~ msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï¥á¥ó¥Ð´Ø¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "`bool' is now a keyword"
+#~ msgstr "`bool' ¤Ïº£¤ä¥­¡¼¥ï¡¼¥É¤Ç¤¹"
+
+#~ msgid "ISO C++ does not support `long long'"
+#~ msgstr "ISO C++ ¤Ï `long long' ¤ò¼õ¤±Æþ¤ì¤Þ¤»¤ó"
+
+#~ msgid "short, signed or unsigned invalid for `%s'"
+#~ msgstr "short, Éä¹ç¤Ä¤­¤Þ¤¿¤ÏÉä¹ç¤Ê¤·¤Ï `%s' ¤Ë¤È¤Ã¤Æ̵¸ú¤Ç¤¹"
+
+#~ msgid "long and short specified together for `%s'"
+#~ msgstr "long ¤È short ¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "signed and unsigned given together for `%s'"
+#~ msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "storage class specifiers invalid in parameter declarations"
+#~ msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "typedef declaration invalid in parameter declaration"
+#~ msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Î typedef Àë¸À¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "virtual outside class declaration"
+#~ msgstr "¥¯¥é¥¹Àë¸À¤Î³°Â¦¤Ç virtual »ØÄꤷ¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "storage class specified for %s `%s'"
+#~ msgstr "%s ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹»ØÄê»Ò `%s'"
+
+#~ msgid "storage class specifiers invalid in friend function declarations"
+#~ msgstr "friend ´Ø¿ôÀë¸ÀÆâ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "destructor cannot be static member function"
+#~ msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "constructor cannot be static member function"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "constructors cannot be declared virtual"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï virtual Àë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "return value type specifier for constructor ignored"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "virtual functions cannot be friends"
+#~ msgstr "²¾ÁÛ´Ø¿ô¤Ï friend ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "friend declaration not in class definition"
+#~ msgstr "friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "cannot declare %s to references"
+#~ msgstr "%s ¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "invalid type: `void &'"
+#~ msgstr "̵¸ú¤Ê·¿: `void &'"
+
+#~ msgid "discarding `const' applied to a reference"
+#~ msgstr "»²¾È¤ËÍѤ¤¤é¤ì¤¿ `const' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹"
+
+#~ msgid "discarding `volatile' applied to a reference"
+#~ msgstr "»²¾È¤ËÍѤ¤¤é¤ì¤¿ `volatile' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹"
+
+#~ msgid "only declarations of constructors can be `explicit'"
+#~ msgstr "`explicit' ¤Ë¤Ç¤­¤ë¤Î¤Ï¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤Ç¤¹"
+
+#~ msgid "non-member `%s' cannot be declared `mutable'"
+#~ msgstr "Èó¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "non-object member `%s' cannot be declared `mutable'"
+#~ msgstr "È󥪥֥¸¥§¥¯¥È¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function `%s' cannot be declared `mutable'"
+#~ msgstr "´Ø¿ô `%s' ¤ò `mutable' ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "static `%s' cannot be declared `mutable'"
+#~ msgstr "static `%s' ¤ò mutable ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "const `%s' cannot be declared `mutable'"
+#~ msgstr "const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "typedef declaration includes an initializer"
+#~ msgstr "typedef Àë¸À¤¬½é´üÀßÄê»Ò¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "unnamed variable or field declared void"
+#~ msgstr "̵̾ÊÑ¿ô¤ä¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "variable or field declared void"
+#~ msgstr "ÊÑ¿ô¤Þ¤¿¤Ï¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "cannot use `::' in parameter declaration"
+#~ msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Ç `::' ¤ò»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "`%s' is neither function nor member function; cannot be declared friend"
+#~ msgstr "`%s' ¤Ï´Ø¿ô¤Ç¤â¥á¥ó¥Ð´Ø¿ô¤Ç¤â¤¢¤ê¤Þ¤»¤ó -- friend ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "member functions are implicitly friends of their class"
+#~ msgstr "¥á¥ó¥Ð´Ø¿ô¤Ï°ÅÌÛŪ¤Ë¤½¤Î¥¯¥é¥¹¤Î friend ¤Ç¤¹"
+
+#~ msgid "storage class `auto' invalid for function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `auto' ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "storage class `register' invalid for function `%s'"
+#~ msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `register' ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "storage class `static' invalid for function `%s' declared out of global scope"
+#~ msgstr "Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `static' ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "storage class `inline' invalid for function `%s' declared out of global scope"
+#~ msgstr "Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `inline' ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "virtual non-class function `%s'"
+#~ msgstr "virtual ¤ÊÈ󥯥饹´Ø¿ô `%s'"
+
+#~ msgid "cannot declare static function inside another function"
+#~ msgstr "¾¤Î´Ø¿ôÆâ¤Ç static ´Ø¿ô¤òÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?"
+#~ msgstr "²¾°ú¿ô¥ê¥¹¥È¤Ë̵¸ú¤ÊÀ°¿ôÄê¿ô¤¬¤¢¤ê¤Þ¤¹¡£²¾°ú¿ô̾¤òÍ¿¤¨Ëº¤ì¤¿¤Î¤Ç¤Ï¡©"
+
+#~ msgid "conversion to %s%s will never use a type conversion operator"
+#~ msgstr "%s%s ¤Ø¤ÎÊÑ´¹¤Ç·¿ÊÑ´¹±é»»»Ò¤¬ÍøÍѤµ¤ì¤ë¤³¤È¤Ï·è¤·¤Æ¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "return type for `main' changed to `int'"
+#~ msgstr "`main' ¤Î return ·¿¤Ï `int' ¤ËÊѤ¨¤Þ¤·¤¿"
+
+#~ msgid "-f%s is no longer supported"
+#~ msgstr "-f%s ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)"
+#~ msgstr "-fhandle-exceptions ¤Ï -fexception ¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿(¤µ¤é¤Ë¥Ç¥Õ¥©¥ë¥È¤ÇÍ­¸ú¤Ç¤¹)"
+
+#~ msgid "-fname-mangling-version is no longer supported"
+#~ msgstr "-fname-mangling-version ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "-Wno-strict-prototypes is not supported in C++"
+#~ msgstr "-Wno-strict-prototypes ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "name missing for member function"
+#~ msgstr "¥á¥ó¥Ð´Ø¿ô¤Î̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`__alignof__' applied to a bit-field"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËÂФ·¤ÆŬÍѤµ¤ì¤¿ `__alignof__'"
+
+#~ msgid "parser may be lost: is there a '{' missing somewhere?"
+#~ msgstr "¹½Ê¸²òÀϴ郎Ì»Ҥˤʤ俤褦¤Ç¤¹: ¤É¤³¤«¤Ç '{' ¤ò˺¤ì¤Æ¤¤¤ë¤Î¤Ç¤Ï¡©"
+
+#~ msgid "ambiguous conversion for array subscript"
+#~ msgstr "ÇÛÎó¤Îź»ú¤ËÂФ¹¤ëÛ£Ëæ¤ÊÊÑ´¹"
+
+#~ msgid "anachronistic use of array size in vector delete"
+#~ msgstr "¥Ù¥¯¥È¥ë¤Î delete ¤ÇÇÛÎó¥µ¥¤¥º¤ò»È¤¦¤Î¤ÏÁ°»þÂåŪ¤Ç¤¹"
+
+#~ msgid "cannot delete a function.  Only pointer-to-objects are valid arguments to `delete'"
+#~ msgstr "´Ø¿ô¤Ï delete ¤Ç¤­¤Þ¤»¤ó¡£ ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤À¤±¤¬ `delete' °ú¿ô¤È¤·¤ÆÍ­¸ú¤Ç¤¹"
+
+#~ msgid "initializer invalid for static member with constructor"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ÎÀÅŪ¥á¥ó¥Ð½é´ü²½»Ò¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "(an out of class initialization is required)"
+#~ msgstr "(¥¯¥é¥¹³°¤Ç¤Î½é´ü²½¤òɬÍפȤ·¤Þ¤¹)"
+
+#~ msgid "field initializer is not constant"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É½é´üÀßÄê»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "anonymous struct not inside named type"
+#~ msgstr "̵̾¹½Â¤ÂΤ¬Ì¾Á°¤Ä¤­·¿¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "namespace-scope anonymous aggregates must be static"
+#~ msgstr "anonumous Ì¾Á°¶õ´Ö¤Î½¸¹çÂΤϠstatic ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "anonymous aggregate with no members"
+#~ msgstr "̵̾¶¦ÍÑÂΤ˥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "too many initialization functions required"
+#~ msgstr "ɬÍפȤµ¤ì¤ë½é´ü²½´Ø¿ô¤Î¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "use of old-style cast"
+#~ msgstr "¸Å¤¤¥¹¥¿¥¤¥ë¤Î¥­¥ã¥¹¥È¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%s' not supported by %s"
+#~ msgstr "`%s' ¤Ï %s ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "<anonymous %s>"
+#~ msgstr "<̵̾ %s>"
+
+#~ msgid "(static %s for %s)"
+#~ msgstr "(ÀÅŪ%s: %s ÍÑ)"
+
+#~ msgid "In %s `%s':"
+#~ msgstr "%s Æâ¤Î `%s':"
+
+#~ msgid "%s: In instantiation of `%s':\n"
+#~ msgstr "%s: `%s' ¤Î½é´ü²½:\n"
+
+#~ msgid "%s:%d:   instantiated from `%s'\n"
+#~ msgstr "%s:%d:   `%s' ¤«¤é¼ÂÂ⽤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "%s:%d:   instantiated from here\n"
+#~ msgstr "%s:%d:   ¤³¤³¤Ç¼ÂÂ⽤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined"
+#~ msgstr "Java `catch' ¤ä `throw' ¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jthrowable' ¤Ï̤ÄêµÁ¤Ç¤¹"
+
+#~ msgid "mixing C++ and Java catches in a single translation unit"
+#~ msgstr "C++ ¤È Java ¤Î `catch' ¤ò°ì¤Ä¤ÎËÝÌõ¥æ¥Ë¥Ã¥È¤Ë¤Þ¤È¤á¤Þ¤¹"
+
+#~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning."
+#~ msgstr "¡Ê¤â¤·¤³¤ì¤¬¤¢¤Ê¤¿¤Î°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢´Ø¿ô¥Æ¥ó¥×¥ì¡¼¥È¤Ï´û¤ËÀë¸ÀºÑ¤Ç¤¢¤ë»ö¤ò³Îǧ¤·¡¢¤³¤³¤Î´Ø¿ô̾¤Î¸å¤í¤Ë <> ¤òÉÕ¤±Â­¤·¤Æ¤¯¤À¤µ¤¤¡Ë -Wno-non-template-friend ¤Ç¤³¤Î·Ù¹ðɽ¼¨¤ò̵¸ú¤Ë¤·¤Þ¤¹"
+
+#~ msgid "argument to `%s' missing\n"
+#~ msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "initializer list treated as compound expression"
+#~ msgstr "½é´ü²½»Ò¥ê¥¹¥È¤ÏÊ£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "  will be re-ordered to match declaration order"
+#~ msgstr "  Àë¸À½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÓÂؤ¨¤é¤ì¤Þ¤¹"
+
+#~ msgid "  will be re-ordered to match inheritance order"
+#~ msgstr "  ÇÉÀ¸½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÙÂؤ¨¤é¤ì¤Þ¤¹"
+
+#~ msgid "base class initializer specified, but no base class to initialize"
+#~ msgstr "´ðÄ쥯¥é¥¹½é´üÀßÄê»Ò¤¬»ØÄꤵ¤ì¤Þ¤·¤¿¤¬¡¢½é´ü²½¤¹¤Ù¤­´ðÄ쥯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "initializer for unnamed base class ambiguous"
+#~ msgstr "̵̾´ðÄ쥯¥é¥¹¤Î½é´üÀßÄê»Ò¤¬Û£Ëæ¤Ç¤¹"
+
+#~ msgid "no base class to initialize"
+#~ msgstr "½é´ü²½¤¹¤Ù¤­´ðÄ쥯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "object missing in use of pointer-to-member construct"
+#~ msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¹½ÃۤλÈÍѤǥª¥Ö¥¸¥§¥¯¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "at this point in file"
+#~ msgstr "¥Õ¥¡¥¤¥ë¤Î¤³¤Î°ÌÃÖ"
+
+#~ msgid "new of array type fails to specify size"
+#~ msgstr "ÇÛÎ󷿤Πnew ¤Ï¥µ¥¤¥º¤Î»ØÄê¤Ë¼ºÇÔ¤·¤Þ¤¹"
+
+#~ msgid "size in array new must have integral type"
+#~ msgstr "ÇÛÎó new ¤Ç¤Î¥µ¥¤¥º¤Ï´°Á´¤Ê·¿¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "zero size array reserves no space"
+#~ msgstr "¥µ¥¤¥º¥¼¥í¤ÎÇÛÎó¤Ï¶õ´Ö¤ò³ÎÊݤ·¤Þ¤»¤ó"
+
+#~ msgid "new cannot be applied to a reference type"
+#~ msgstr "»²¾È·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "new cannot be applied to a function type"
+#~ msgstr "´Ø¿ô·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "call to Java constructor, while `jclass' undefined"
+#~ msgstr "Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jclass' ¤Ï̤ÄêµÁ¤Ç¤¹"
+
+#~ msgid "Can't find class$"
+#~ msgstr "class$ ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid type `void' for new"
+#~ msgstr "new ¤ËÂФ·¤Æ̵¸ú¤Ê·¿¤Ç¤¢¤ë `void'"
+
+#~ msgid "call to Java constructor with `%s' undefined"
+#~ msgstr "Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`%s' ¤Ï̤ÄêµÁ¤Ç¤¹"
+
+#~ msgid "initializer list being treated as compound expression"
+#~ msgstr "½é´ü²½»Ò¥ê¥¹¥È¤¬Ê£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids aggregate initializer to new"
+#~ msgstr "ISO C++ ¤Ï new ¤Ø¤Î½¸¹çÂνé´ü²½»Ò¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "initializer ends prematurely"
+#~ msgstr "½é´üÀßÄê»Ò¤ÎËöÈø¤¬ËÜÍè¤è¤êÁ᤯½Ð¸½¤·¤Þ¤·¤¿"
+
+#~ msgid "cannot initialize multi-dimensional array with initializer"
+#~ msgstr "¿¼¡¸µÇÛÎó¤Ï½é´ü²½»Ò¤Ç½é´ü²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unknown array size in delete"
+#~ msgstr "delete ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤¬ÉÔÌÀ¤Ç¤¹"
+
+#~ msgid "type to vector delete is neither pointer or array type"
+#~ msgstr "¥Ù¥¯¥È¥ë·¿¤Î delete ¤Ç¤¹¤¬¡¢¥Ý¥¤¥ó¥¿¤Ç¤âÇÛÎ󷿤Ǥ⤢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Do not obey access control semantics"
+#~ msgstr "¥¢¥¯¥»¥¹À©¸æ¤Î°ÕÌ£¤Ë½¾¤ï¤Ê¤¤"
+
+#~ msgid "Change when template instances are emitted"
+#~ msgstr "¥Æ¥ó¥×¥ì¡¼¥È¥¤¥ó¥¹¥¿¥ó¥¹¤¬Á÷½Ð¤µ¤ì¤¿»þ¤ËÊѹ¹¤¹¤ë"
+
+#~ msgid "Check the return value of new"
+#~ msgstr "new ¤ÎÌá¤êÃͤò¸¡ºº¤¹¤ë"
+
+#~ msgid "Reduce size of object files"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤ò¾®¤µ¤¯¤¹¤ë"
+
+#~ msgid "Make string literals `char[]' instead of `const char[]'"
+#~ msgstr "ʸ»úÎó¥ê¥Æ¥é¥ë¤ò `const char[]' ¤ÎÂå¤ï¤ê¤Ë `char[]' ¤È¤¹¤ë"
+
+#~ msgid "Dump the entire translation unit to a file"
+#~ msgstr "ËÝÌõñ°ÌÁ´ÂΤò¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ë"
+
+#~ msgid "Do not inline member functions by default"
+#~ msgstr "¥á¥ó¥Ð´Ø¿ô¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥¤¥ó¥é¥¤¥ó¤È¤·¤Ê¤¤"
+
+#~ msgid "Do not generate run time type descriptor information"
+#~ msgstr "¼Â¹Ô»þ·¿µ­½Ò¾ðÊó¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Do not generate code to check exception specifications"
+#~ msgstr "Îã³°»ÅÍͤθ¡ºº¤ò¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Scope of for-init-statement vars extends outside"
+#~ msgstr "for ½é´ü²½Ê¸¤ÎÊÑ¿ô¤ò¥¹¥³¡¼¥×³°¤Ë³ÈÂ礹¤ë"
+
+#~ msgid "Do not recognise GNU defined keywords"
+#~ msgstr "GNU ÄêµÁ¤ÎͽÌó¸ì¤òǧ¼±¤µ¤»¤Ê¤¤"
+
+#~ msgid "Do not treat the namespace `std' as a normal namespace"
+#~ msgstr "̾Á°¶õ´Ö `std' ¤òÄ̾ï¤Î̾Á°¶õ´Ö¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤¤"
+
+#~ msgid "Enable support for huge objects"
+#~ msgstr "Â礭¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥µ¥Ý¡¼¥È"
+
+#~ msgid "Export functions even if they can be inlined"
+#~ msgstr "¥¤¥ó¥é¥¤¥ó¤Ë¤Ç¤­¤ë´Ø¿ô¤Ç¤â export ¤¹¤ë"
+
+#~ msgid "Only emit explicit template instatiations"
+#~ msgstr "ÌÀ¼¨Åª¤Ê¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Only emit explicit instatiations of inline templates"
+#~ msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Don't pedwarn about uses of Microsoft extensions"
+#~ msgstr "Microsoft ³ÈÄ¥¤ÎÍøÍѤ˴ؤ·¤Æ pedantic ·Ù¹ð¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "Recognise and/bitand/bitor/compl/not/or/xor"
+#~ msgstr "and/bitand/bitor/compl/not/or/xor ¤òǧ¼±¤¹¤ë"
+
+#~ msgid "Disable optional diagnostics"
+#~ msgstr "¥ª¥×¥·¥ç¥ó¤Î¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤"
+
+#~ msgid "Downgrade conformance errors to warnings"
+#~ msgstr "µ¬³ÊŬ¹çÀ­¥¨¥é¡¼¤ò·Ù¹ð¤Ë³Ê²¼¤²¤¹¤ë"
+
+#~ msgid "Enable automatic template instantiation"
+#~ msgstr "¼«Æ°¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂ⽤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Display statistics accumulated during compilation"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥ëÃæ¤ËÃßÀѤµ¤ì¤¿Åý·×¾ðÊó¤òɽ¼¨¤¹¤ë"
+
+#~ msgid "Specify maximum template instantiation depth"
+#~ msgstr "¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¿¼¤µ¤ÎºÇÂçÃͤò»ØÄꤹ¤ë"
+
+#~ msgid "Use __cxa_atexit to register destructors."
+#~ msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤ÎÅÐÏ¿¤Ë __cxa_atexit ¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Discard unused virtual functions"
+#~ msgstr "»È¤ï¤ì¤Ê¤¤²¾ÁÛ´Ø¿ô¤òÀÚ¤ê¼Î¤Æ¤ë"
+
+#~ msgid "Implement vtables using thunks"
+#~ msgstr "thunk ¤ò»È¤Ã¤Æ vtable ¤ò¼ÂÁõ¤¹¤ë"
+
+#~ msgid "Emit common-like symbols as weak symbols"
+#~ msgstr "¥³¥â¥ó¥·¥ó¥Ü¥ë¤ò¥¦¥£¡¼¥¯¥·¥ó¥Ü¥ë¤ÎÍͤËÀ¸À®¤¹¤ë"
+
+#~ msgid "Emit cross referencing information"
+#~ msgstr "Áê¸ß»²¾È¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Warn about inconsistent return types"
+#~ msgstr "Ìá¤êÃͤη¿¤È°ìÃפ·¤Ê¤¤¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about overloaded virtual function names"
+#~ msgstr "¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿²¾ÁÛ´Ø¿ô̾¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Don't warn when all ctors/dtors are private"
+#~ msgstr "Á´¤Æ¤Î¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤¬ private ¤Ç¤â·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Warn about non virtual destructors"
+#~ msgstr "Èó²¾Áۥǥ¹¥È¥é¥¯¥¿¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when a function is declared extern, then inline"
+#~ msgstr "´Ø¿ô¤¬ extern Àë¸À¤µ¤ì¤¿¸å¡¢inline ¤È¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when the compiler reorders code"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥é¤¬¥³¡¼¥É¤òʤÙÂؤ¨¤ë¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when synthesis behaviour differs from Cfront"
+#~ msgstr "¹çÀ®¤Î¿¶¤ëÉñ¤¤¤¬ Cfront ¤È°Û¤Ê¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Don't warn when type converting pointers to member functions"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤Î·¿ÊÑ´¹¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Warn about violations of Effective C++ style rules"
+#~ msgstr "Effective C++ ¼°¤Î»Ø¿Ë¤«¤é¤Ï¤º¤ì¤ë¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when overload promotes from unsigned to signed"
+#~ msgstr "¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¬Éä¹ç̵¤·¤«¤éÉä¹çÉÕ¤­¤Ë³Ê¾å¤²¤È¤Ê¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn if a C style cast is used in a program"
+#~ msgstr "C ¼°¤Î¥­¥ã¥¹¥È¤¬¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿¤é·Ù¹ð¤¹¤ë"
+
+#~ msgid "Don't warn when non-templatized friend functions are declared within a template"
+#~ msgstr "template Æâ¤ÇÈó template ¤Î friend ´Ø¿ô¤¬Àë¸À¤µ¤ì¤¿¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Don't announce deprecation of compiler features"
+#~ msgstr "¿ä¾©¤µ¤ì¤Ê¤¤¥³¥ó¥Ñ¥¤¥é¤Îµ¡Ç½¤ò¹ðÃΤ·¤Ê¤¤"
+
+#~ msgid "type name expected before `*'"
+#~ msgstr "`*' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹"
+
+#~ msgid "cannot declare references to references"
+#~ msgstr "»²¾È¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "cannot declare pointers to references"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "type name expected before `&'"
+#~ msgstr "`&' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹"
+
+#~ msgid "semicolon missing after %s declaration"
+#~ msgstr "%s Àë¸À¤Î¸å¤í¤Î¥»¥ß¥³¥í¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "junk at end of #pragma %s"
+#~ msgstr "#pragma %s ¤ÎËöÈø¤Ë¥´¥ß"
+
+#~ msgid "invalid #pragma %s"
+#~ msgstr "̵¸ú¤Ê #pragma %s ¤Ç¤¹"
+
+#~ msgid "#pragma implementation for %s appears after file is included"
+#~ msgstr "%s ¤Ø¤Î #pragma implementation ¤Ï¥Õ¥¡¥¤¥ë¤¬ include ¤µ¤ì¤¿¸å¤Ç½Ð¸½¤·¤Þ¤·¤¿"
+
+#~ msgid "junk at end of #pragma GCC java_exceptions"
+#~ msgstr "#pragma GCC java_exceptions ¤ÎËöÈø¤Ë¥´¥ß"
+
+#~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)"
+#~ msgstr "(̤Àë¸ÀÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬´Ø¿ôÆâ¤ÇºÇ½é¤Ë¸½¤ï¤ì¤¿»þ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)"
+
+#~ msgid "name lookup of `%s' changed"
+#~ msgstr "`%s' ¤Î̾Á°°ú¤­¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "name lookup of `%s' changed for new ISO `for' scoping"
+#~ msgstr "`%s' ¤Î̾Á°°ú¤­¤Ï¿·¤¿¤Ê ISO `for' ¥¹¥³¡¼¥×¤ËÊѤï¤ê¤Þ¤·¤¿"
+
+#~ msgid "real-valued template parameters when cross-compiling"
+#~ msgstr "¥¯¥í¥¹¥³¥ó¥Ñ¥¤¥ë»þ¤Î¼Â¿ôÃͥƥó¥×¥ì¡¼¥È²¾°ú¿ô"
+
+#~ msgid "methods cannot be converted to function pointers"
+#~ msgstr "¥á¥½¥Ã¥É¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "ambiguous request for method pointer `%s'"
+#~ msgstr "¥á¥½¥Ã¥É¥Ý¥¤¥ó¥¿ `%s' ¤Ø¤ÎÍ׵᤬ۣËæ¤Ç¤¹"
+
+#~ msgid "invalid default template argument"
+#~ msgstr "̵¸ú¤Ê¥Ç¥Õ¥©¥ë¥È¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô"
+
+#~ msgid "no base or member initializers given following ':'"
+#~ msgstr "´ðÄì¤ä¥á¥ó¥Ð½é´ü²½»Ò¥ê¥¹¥È¤¬ ':' ¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "base initializers not allowed for non-member functions"
+#~ msgstr "½é´ü²½»Ò¥ê¥¹¥È¤ÏÈó¥á¥ó¥Ð´Ø¿ô¤Ç¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "only constructors take base initializers"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤·¤«´ðÄì½é´ü²½»Ò¥ê¥¹¥È¤ò¤È¤ê¤Þ¤»¤ó"
+
+#~ msgid "anachronistic old style base class initializer"
+#~ msgstr "Á°»þÂåŪ¤Ê¸Å¤¤¥¹¥¿¥¤¥ë¤Î´ðÄ쥯¥é¥¹½é´ü²½»Ò¤Ç¤¹"
+
+#~ msgid "`>>' should be `> >' in template class name"
+#~ msgstr "`>>' ¤Ï¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹Ì¾¤Ï `> >' ¤È¤¹¤Ù¤­¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids an empty condition for `%s'"
+#~ msgstr "ISO C++ ¤Ï `%s' ¤ËÂФ¹¤ë¶õ¤Î¾ò·ï¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids `&&'"
+#~ msgstr "ISO C++ ¤Ï `&&' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids initialization of new expression with `='"
+#~ msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids compound literals"
+#~ msgstr "ISO C++ ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids braced-groups within expressions"
+#~ msgstr "ISO C++ ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "sigof type specifier"
+#~ msgstr "·¿»ØÄê»Ò¤Î sigof ¤Ç¤¹"
+
+#~ msgid "`sigof' applied to non-aggregate expression"
+#~ msgstr "È󽸹çÂμ°¤ËÂФ·¤ÆŬÍѤµ¤ì¤¿ `sigof'"
+
+#~ msgid "`sigof' applied to non-aggregate type"
+#~ msgstr "È󽸹çÂη¿¤ËÂФ·¤ÆŬÍѤµ¤ì¤¿ `sigof'"
+
+#~ msgid "storage class specifier `%s' not allowed after struct or class"
+#~ msgstr "µ­²±¥¯¥é¥¹»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "type specifier `%s' not allowed after struct or class"
+#~ msgstr "·¿»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "type qualifier `%s' not allowed after struct or class"
+#~ msgstr "·¿½¤¾þ»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "no body nor ';' separates two class, struct or union declarations"
+#~ msgstr "ËÜÂΤ¬¤Ê¤¯¡¢class, struct °¿¤¤¤Ï union Àë¸À¤ò¶èÀÚ¤ë ';' ¤â¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "multiple access specifiers"
+#~ msgstr "½ÅÊ£¤¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò"
+
+#~ msgid "multiple `virtual' specifiers"
+#~ msgstr "½ÅÊ£¤¹¤ë `virtual' »ØÄê»Ò"
+
+#~ msgid "missing ';' before right brace"
+#~ msgstr "±¦Â¦¥Ö¥ì¡¼¥¹¤ÎÁ°¤Î ';' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids array dimensions with parenthesized type in new"
+#~ msgstr "ISO C++ ¤Ï new Ãæ¤Ç¤Ï¡¢³ç¸Ì¤Î¤Ä¤¤¤¿ÇÛÎ󼡸µ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids label declarations"
+#~ msgstr "ISO C++ ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids computed gotos"
+#~ msgstr "ISO C++ ¤Ï·×»»·¿ goto ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "label must be followed by statement"
+#~ msgstr "¥é¥Ù¥ë¤Î¸å¤í¤Ë¤Ïʸ¤¬É¬ÍפǤ¹"
+
+#~ msgid "ISO C++ forbids compound statements inside for initializations"
+#~ msgstr "ISO C++ ½é´ü²½»Ò¤ÎÆâÉô¤Ç¤Ïʣʸ¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "possibly missing ')'"
+#~ msgstr "¤ª¤½¤é¤¯ ')' ¤ò˺¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "type specifier omitted for parameter"
+#~ msgstr "·¿»ØÄê»Ò¤Ï²¾°ú¿ôÍѤ˾Êά¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "creating array with size zero"
+#~ msgstr "Â礭¤µ¥¼¥í¤ÎÇÛÎó¤òºî¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "use of `%s' in template"
+#~ msgstr "¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "incomplete type unification"
+#~ msgstr "ÉÔ´°Á´¤Ê·¿¤Îñ°ì²½"
+
+#~ msgid "use of `%s' in template type unification"
+#~ msgstr "¥Æ¥ó¥×¥ì¡¼¥È·¿Åý°ìÃæ `%s' ¤¬»ÈÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "-frepo must be used with -c"
+#~ msgstr "-frepo ¤Ï -c ÉÕ¤­¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "mysterious repository information in %s"
+#~ msgstr "%s ¤ËÉԲIJò¤Ê¥ê¥Ý¥¸¥È¥ê¾ðÊ󤬤¢¤ê¤Þ¤¹"
+
+#~ msgid "can't create repository information file `%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ë¥ê¥Ý¥¸¥È¥ê¾ðÊó¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "taking dynamic typeid of object with -fno-rtti"
+#~ msgstr "-fno-rtti ¤Î»ØÄê¤È°ì½ï¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎưŪ typeid ¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "cannot use typeid with -fno-rtti"
+#~ msgstr "-fno-rtti ¤¬»ØÄꤵ¤ì¤ë¤È typeid ¤ò»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "must #include <typeinfo> before using typeid"
+#~ msgstr "typeid ¤ò»È¤¦Á°¤Ë #include <typeinfo> ¤È¤·¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó"
+
+#~ msgid "adjusting pointers for covariant returns"
+#~ msgstr "¶¦ÊÑ(covariant)Ìá¤êÃͤؤΥݥ¤¥ó¥¿¤òÄ´À°¤·¤Þ¤¹"
+
+#~ msgid "recoverable compiler error, fixups for virtual function"
+#~ msgstr "²óÉü²Äǽ¤Ê¥³¥ó¥Ñ¥¤¥é¤Î¥¨¥é¡¼¡¢²¾ÁÛ´Ø¿ô¤Î½¤Àµ"
+
+#~ msgid "ISO C++ does not permit named return values"
+#~ msgstr "ISO C++ ¤Ï̾Á°¤Ä¤­Ìá¤êÃͤòµö²Ä¤·¤Þ¤»¤ó"
+
+#~ msgid "can't redefine default return value for constructors"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿ÍѤΥǥե©¥ë¥ÈÌá¤êÃͤòºÆÄêµÁ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "   will be re-ordered to precede member initializations"
+#~ msgstr "   Àè¤Ë¤¢¤ë¥á¥ó¥Ð½é´ü²½»Ò¤ÈʤÓÂؤ¨¤é¤ì¤Þ¤¹"
+
+#~ msgid "`this' is unavailable for static member functions"
+#~ msgstr "`this' ¤ÏÀÅŪ¥á¥ó¥Ð´Ø¿ô¤«¤é»ÈÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "invalid use of `this' in non-member function"
+#~ msgstr "Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹"
+
+#~ msgid "invalid use of `this' at top level"
+#~ msgstr "¥È¥Ã¥×¥ì¥Ù¥ë¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹"
+
+#~ msgid "template type parameters must use the keyword `class' or `typename'"
+#~ msgstr "¥Æ¥ó¥×¥ì¡¼¥È·¿²¾°ú¿ô¤Ë¤Ï `class' ¤ä `typename' Í½Ìó¸ì¤ò»È¤ï¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
+#~ msgstr "¼±ÊÌ»Ò̾ `%s' ¤Ï GNU C++ ÆâÉô¤Î¥Í¡¼¥ß¥ó¥°Àïά¤È¶¥¹ç¤·¤Þ¤¹"
+
+#~ msgid "parse error"
+#~ msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼"
+
+#~ msgid "parse error at end of saved function text"
+#~ msgstr "ÊݸºÑ¤ß´Ø¿ô¥Æ¥­¥¹¥È¤ÎËöÈø¤Ç¹½Ê¸²òÀÏ¥¨¥é¡¼"
+
+#~ msgid "parse error in method specification"
+#~ msgstr "¥á¥½¥Ã¥É»ÅÍÍÆâ¤Ç¤Î¹½Ê¸²òÀÏ¥¨¥é¡¼"
+
+#~ msgid "function body for constructor missing"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ôËÜÂΤò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "%s before `%s'"
+#~ msgstr "%s ¤¬ `%s' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before `%c'"
+#~ msgstr "%s ¤¬ `%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%s ¤¬ `\\%o' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "%s before `%s' token"
+#~ msgstr "%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "non-lvalue in %s"
+#~ msgstr "%s ¤Ëº¸ÊÕÃͤǤϤʤ¤ÃÍ"
+
+#~ msgid "`java_interface' attribute can only be applied to Java class definitions"
+#~ msgstr "`java_interface' Â°À­¤Ï Java ¥¯¥é¥¹ÄêµÁ¤ËÂФ·¤Æ¤Î¤ßÍѤ¤¤ë»ö¤¬¤Ç¤­¤Þ¤¹"
+
+#~ msgid "`com_interface' only supported with -fvtable-thunks"
+#~ msgstr "`com_interface' ¤Ï -fvtable-thunks ¤ò»ØÄꤷ¤¿¤È¤­¤À¤±¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹"
+
+#~ msgid "`com_interface' attribute can only be applied to class definitions"
+#~ msgstr "`com_interface' Â°À­¤Ï¥¯¥é¥¹ÄêµÁ¤Ë¤Î¤ßÍѤ¤¤ë»ö¤¬¤Ç¤­¤Þ¤¹"
+
+#~ msgid "requested init_priority is not an integer constant"
+#~ msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÀ°¿ô·¿¤ÎÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "can only use init_priority attribute on file-scope definitions of objects of class type"
+#~ msgstr "init_priority Â°À­¤Ï¥¯¥é¥¹·¿¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Õ¥¡¥¤¥ë¥¹¥³¡¼¥×ÄêµÁ¤Ç¤Î¤ß»È¤¨¤Þ¤¹"
+
+#~ msgid "requested init_priority is out of range"
+#~ msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤¬Èϰϳ°¤Ç¤¹"
+
+#~ msgid "requested init_priority is reserved for internal use"
+#~ msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÆâÉô¤Ç»ÈÍѤ¹¤ë¤¿¤á¤ËͽÌ󤵤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "init_priority attribute is not supported on this platform"
+#~ msgstr "init_priority Â°À­¤Ï¤³¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function"
+#~ msgstr "ISO C++ ¤Ï `void *' ·¿¥Ý¥¤¥ó¥¿¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤Î %s ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to a function type"
+#~ msgstr "ISO C++ ¤Ï´Ø¿ô·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to a member function"
+#~ msgstr "ISO C++ ¤Ï¥á¥ó¥Ð´Ø¿ô¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type"
+#~ msgstr "ISO C++ ¤ÏÉÔ´°Á´·¿¤Ç¤¢¤ë `void' ·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "sizeof applied to a bit-field"
+#~ msgstr "sizeof ¤¬¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤Þ¤·¤¿"
+
+#~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type"
+#~ msgstr "ISO C++ ¤Ï´Ø¿ô·¿¤Î¼°¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "invalid reference to NULL ptr, use ptr-to-member instead"
+#~ msgstr "NULL ¥Ý¥¤¥ó¥¿¤Ø¤Î̵¸ú¤Ê»²¾È¡¢Âå¤ï¤ê¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#~ msgid "invalid use of `%s' on pointer to member"
+#~ msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Î̵¸ú¤Ê `%s' ¤Î»ÈÍÑ"
+
+#~ msgid "invalid type argument"
+#~ msgstr "̵¸ú¤Ê·¿°ú¿ô¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids subscripting non-lvalue array"
+#~ msgstr "ISO C++ ¤Ïº¸ÊÕÃͤǤϤʤ¤ÇÛÎó¤Îź»ú¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "subscripting array declared `register'"
+#~ msgstr "`register' ¤ÈÀë¸À¤µ¤ì¤¿ÇÛÎó¤Ëź»ú¤ò¤Ä¤±¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "pointer to member function called, but not in class scope"
+#~ msgstr "¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢¥¯¥é¥¹¥¹¥³¡¼¥×Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid call to member function needing `this' in static member function scope"
+#~ msgstr "ÀÅŪ¥á¥ó¥Ð´Ø¿ô¥¹¥³¡¼¥×Æâ¤Ç¤Ï `this' ¤òÍפ¹¤ë¥á¥ó¥Ð´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids calling `::main' from within program"
+#~ msgstr "ISO C++ ¤Ï¥×¥í¥°¥é¥à¤ÎÃ椫¤é `::main' ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "parameter type of called function is incomplete"
+#~ msgstr "¸Æ¤Ð¤ì¤¿´Ø¿ô¤Î²¾°ú¿ô¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "%s rotate count is negative"
+#~ msgstr "%s ¥í¡¼¥Æ¡¼¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹"
+
+#~ msgid "%s rotate count >= width of type"
+#~ msgstr "%s ¥í¡¼¥Æ¡¼¥È²ó¿ô >= ·¿¤ÎÉý¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids comparison between pointer and integer"
+#~ msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "comparison between signed and unsigned integer expressions"
+#~ msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤ÎÀ°¿ô¼°Æ±»Î¤ÎÈæ³Ó¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic"
+#~ msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic"
+#~ msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic"
+#~ msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using pointer to a member in pointer arithmetic"
+#~ msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction"
+#~ msgstr "ISO C++ ¤Ï¸º»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using pointer to a function in subtraction"
+#~ msgstr "ISO C++ ¤Ï¸º»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using pointer to a method in subtraction"
+#~ msgstr "ISO C++ ¤Ï¸º»»¤Ë¥á¥½¥Ã¥É¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids using pointer to a member in subtraction"
+#~ msgstr "ISO C++ ¤Ï¸º»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
+#~ msgstr "¥Ý¥¤¥ó¥¿±é»»¤ÇÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "taking address of temporary"
+#~ msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids %sing an enum"
+#~ msgstr "ISO C++ ¤Ï enum ¤Î %s ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "cast to non-reference type used as lvalue"
+#~ msgstr "º¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤Ç¤¹"
+
+#~ msgid "ISO C++ forbids taking address of function `::main'"
+#~ msgstr "ISO C++ ¤Ï `::main' ´Ø¿ô¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
+#~ msgstr "ISO C++ ¤ÏÈóº¸ÊÕÃͼ°¤Ø¤Î¥­¥ã¥¹¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "unary `&'"
+#~ msgstr "ñ¹à¤Î `&'"
+
+#~ msgid "cannot take the address of `this', which is an rvalue expression"
+#~ msgstr "`this' ¤Ï±¦ÊÕÃͼ°¤Ç¤¢¤ê¡¢¤½¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
+#~ msgstr "ISO C++ ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È¥ª¥Ö¥¸¥§¥¯¥È¥Ý¥¤¥ó¥¿¤Î´Ö¤Ç¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids cast to non-reference type used as lvalue"
+#~ msgstr "ISO C++ ¤Ïº¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "ISO C++ forbids assignment of arrays"
+#~ msgstr "ISO C++ ¤ÏÇÛÎó¤ÎÂåÆþ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "return value from function receives multiple initializations"
+#~ msgstr "´Ø¿ô¤«¤é¤ÎÌá¤êÃͤ¬Ê£¿ô¤Î½é´ü²½¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿"
+
+#~ msgid "   in pointer to member function conversion"
+#~ msgstr "   ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤ÎÊÑ´¹¤Ç"
+
+#~ msgid "   in pointer to member conversion"
+#~ msgstr "   ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç"
+
+#~ msgid "returning reference to temporary"
+#~ msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤òÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "reference to non-lvalue returned"
+#~ msgstr "Èóº¸ÊÕÃͤؤλ²¾È¤¬ÊÖ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "returning a value from a destructor"
+#~ msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "cannot return from a handler of a function-try-block of a constructor"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ô try ¥Ö¥í¥Ã¥¯¤Î¥Ï¥ó¥É¥é¤«¤é¤Ï return ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "returning a value from a constructor"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "return-statement with no value, in function declared with a non-void return type"
+#~ msgstr "return Ê¸¤¬Ãͤò»ý¤Á¤Þ¤»¤ó¡£´Ø¿ôÀë¸À¤Ç¤ÏÈó void ¤ÎÌá¤êÃͤò»ý¤Á¤Þ¤¹"
+
+#~ msgid "return-statement with a value, in function declared with a void return type"
+#~ msgstr "return Ê¸¤¬Ãͤò»ý¤Á¤Þ¤¹¡£´Ø¿ôÀë¸À¤Ç¤ÏÌá¤ê·¿¤¬ void ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "  because the following virtual functions are abstract:"
+#~ msgstr "  °Ê²¼¤Î²¾ÁÛ´Ø¿ô¤¬Ãê¾Ý¤Ç¤¢¤ë¤¿¤á¤Ç¤¹:"
+
+#~ msgid "Internal error #%d."
+#~ msgstr "ÆâÉô¥¨¥é¡¼: #%d¡£"
+
+#~ msgid "due to the presence of a constructor"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¤¢¤ë¤³¤È¤Ë¤è¤ë"
+
+#~ msgid "comma expression used to initialize return value"
+#~ msgstr "¥«¥ó¥Þ±é»»»Ò¤¬Ìá¤êÃͤò½é´ü²½¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "cannot initialize arrays using this syntax"
+#~ msgstr "¤³¤Îʸˡ¤ò»È¤Ã¤ÆÇÛÎó¤ò½é´ü²½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "ANSI C++ forbids non-constant aggregate initializer expressions"
+#~ msgstr "ANSI C++ ¤ÏÄê¿ô¤Ç¤Ê¤¤½¸¹çÂΤνé´ü²½»Ò¼°¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "initializing array with parameter list"
+#~ msgstr "ÇÛÎó¤ò²¾°ú¿ô¥ê¥¹¥È¤Ë¤è¤Ã¤Æ½é´ü²½¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "initializer for scalar variable requires one element"
+#~ msgstr "¥¹¥«¥é¡¼ÊÑ¿ô¤Î½é´ü²½»Ò¤Ï°ì¤Ä¤ÎÍ×ÁǤòÍ׵ᤷ¤Þ¤¹"
+
+#~ msgid "aggregate has a partly bracketed initializer"
+#~ msgstr "½¸¹çÂΤ¬ÉôʬŪ¤Ë¥Ö¥é¥±¥Ã¥È¤Î½é´ü²½»Ò¤ò»ý¤Á¤Þ¤¹"
+
+#~ msgid "non-trivial labeled initializers"
+#~ msgstr "¼«ÌÀ¤Ç¤Ê¤¤¥é¥Ù¥ë¤Î¤Ä¤¤¤¿½é´ü²½»Ò¤Ç¤¹"
+
+#~ msgid "non-empty initializer for array of empty elements"
+#~ msgstr "Í×ÁǤΤʤ¤ÇÛÎó¤ËÂФ¹¤ë¡¢¶õ¤Ç¤Ï¤Ê¤¤½é´ü²½»Ò¤Ç¤¹"
+
+#~ msgid "initializer list for object of class with virtual base classes"
+#~ msgstr "²¾ÁÛ´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹"
+
+#~ msgid "initializer list for object of class with base classes"
+#~ msgstr "´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹"
+
+#~ msgid "initializer list for object using virtual functions"
+#~ msgstr "²¾ÁÛ´Ø¿ô¤ò»ÈÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹"
+
+#~ msgid "index value instead of field name in union initializer"
+#~ msgstr "union ½é´ü²½»Ò¤¬¥Õ¥£¡¼¥ë¥É̾¤Ç¤Ï¤Ê¤¯¥¤¥ó¥Ç¥Ã¥¯¥¹ÃͤˤʤäƤ¤¤Þ¤¹"
+
+#~ msgid "excess elements in aggregate initializer"
+#~ msgstr "½¸¹çÂνé´ü²½»ÒÆâ¤Ç¤½¤ÎÍ×ÁǤ¬°î¤ì¤Þ¤·¤¿"
+
+#~ msgid "circular pointer delegation detected"
+#~ msgstr "½Û´Ä¥Ý¥¤¥ó¥¿¤ÎÂåɽ¤ò¸¡½Ð¤·¤Þ¤·¤¿"
+
+#~ msgid "result of `operator->()' yields non-pointer result"
+#~ msgstr "`operator->()'¤Î·ë²Ì¤¬Èó¥Ý¥¤¥ó¥¿¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤¹"
+
+#~ msgid "base operand of `->' is not a pointer"
+#~ msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ISO C++ forbids defining types within %s"
+#~ msgstr "ISO C++ ¤Ï %s Ãæ¤Î·¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹"
+
+#~ msgid "Can't create cross-reference file `%s'"
+#~ msgstr "Áê¸ß»²¾È¥Õ¥¡¥¤¥ë `%s' ¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "traditional C rejects the `U' suffix"
+#~ msgstr "¸Å¤¤ C ¤Ç¤Ï `U' ÀÜÈø¼­¤¬µñÀ䤵¤ì¤Þ¤¹"
+
+#~ msgid "too many 'l' suffixes in integer constant"
+#~ msgstr "À°¿ôÄê¿ô¤Î¥µ¥Õ¥£¥Ã¥¯¥¹ 'l' ¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "integer constant contains digits beyond the radix"
+#~ msgstr "À°¿ôÄê¿ô¤¬´ð¿ô¤òĶ¤¨¤¿¿ôÃͤò´Þ¤ó¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "integer constant out of range"
+#~ msgstr "À°¿ôÄê¿ô¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "\"defined\" operator appears during macro expansion"
+#~ msgstr "\"defined\" ±é»»»Ò¤¬¥Þ¥¯¥íŸ³«Ãæ¤Ë¸½¤ì¤Þ¤·¤¿"
+
+#~ msgid "ISO C++ does not permit \"%s\" in #if"
+#~ msgstr "ISO C++ ¤Ï #if Æâ¤Î \"%s\" ¤òµö¤·¤Þ¤»¤ó"
+
+#~ msgid "absolute file name in remap_filename"
+#~ msgstr "ÀäÂХѥ¹¥Õ¥¡¥¤¥ë̾¤¬ remap_filename ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "¸ºß¤·¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê \"%s\" ¤ò̵»ë¤·¤Þ¤¹\n"
+
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "½ÅÊ£¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê \"%s\" ¤ò̵»ë¤·¤Þ¤¹\n"
+
+#~ msgid "-include and -imacros cannot be used with -fpreprocessed"
+#~ msgstr "-include ¤ä -imacros ¤Ï -fpreprocessed ¤È°ì½ï¤Ë»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "#include \"...\" search starts here:\n"
+#~ msgstr "#include \"...\" ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹:\n"
+
+#~ msgid "#include <...> search starts here:\n"
+#~ msgstr "#include <...> ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹:\n"
+
+#~ msgid "End of search list.\n"
+#~ msgstr "õº÷¥ê¥¹¥È¤Î½ª¤ï¤ê\n"
+
+#~ msgid "I/O error on output"
+#~ msgstr "½ÐÎÏÃæ¤Ë I/O ¥¨¥é¡¼¤¬È¯À¸"
+
+#~ msgid "buffers still stacked in cpp_finish"
+#~ msgstr "cpp_finish ¤Ç¥Ð¥Ã¥Õ¥¡¤¬¤Þ¤À¥¹¥¿¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Argument missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Assertion missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥¢¥µ¡¼¥·¥ç¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Directory name missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "File name missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Macro name missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥Þ¥¯¥í̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Path name missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥Ñ¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Number missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¿ô»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Target missing after %s"
+#~ msgstr "%s ¤Î¸å¤í¤Î¥¿¡¼¥²¥Ã¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Too many filenames. Type %s --help for usage info"
+#~ msgstr "¥Õ¥¡¥¤¥ë̾¤¬Â¿¤¹¤®¤Þ¤¹¡£%s --help ¤È¥¿¥¤¥×¤·¤Æ»È¤¤Êý¤ò¸«¤Þ¤·¤ç¤¦"
+
+#~ msgid "Output filename specified twice"
+#~ msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë̾¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "-I- specified twice"
+#~ msgstr "-I- ¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "GNU CPP version %s (cpplib)"
+#~ msgstr "GNU CPP version %s (cpplib)"
+
+#~ msgid "you must additionally specify either -M or -MM"
+#~ msgstr "-M ¤« -MM ¤Î¤¤¤º¤ì¤«¤òÄɲÃŪ¤Ë»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Usage: %s [switches] input output\n"
+#~ msgstr "»È¤¤Êý: %s [¥¹¥¤¥Ã¥Á] ÆþÎÏ ½ÐÎÏ\n"
+
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ msgstr ""
+#~ "¥¹¥¤¥Ã¥Á:\n"
+#~ "  -include <file>           Â¾¤Î¥Õ¥¡¥¤¥ë¤ÎÁ°¤Ë <file> ¤ÎÆâÍƤò´Þ¤á¤ë\n"
+#~ "  -imacros <file>           <file> ¤Î¥Þ¥¯¥íÄêµÁ¤ò¼õ¤±Æþ¤ì¤ë\n"
+#~ "  -iprefix <path>           ¼¡¤ÎÆó¤Ä¤Î¥ª¥×¥·¥ç¥óÍÑ¥×¥ì¥Õ¥£¥¯¥¹¤Ë <path> ¤ò»ØÄê\n"
+#~ "  -iwithprefix <dir>        <dir> ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n"
+#~ "  -iwithprefixbefore <dir>  <dir> ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n"
+#~ "  -isystem <dir>            <dir> ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤ÎºÇ½é¤ËÄɲ乤ë\n"
+
+#~ msgid ""
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ msgstr ""
+#~ "  -idirafter <dir>          <dir> ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n"
+#~ "  -I <dir>                  <dir> ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n"
+#~ "  -I-                       ¤­¤áºÙ¤«¤Ê include ¥Ñ¥¹À©¸æ -- info Ê¸½ñ¤ò»²¾È\n"
+#~ "  -nostdinc                 ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤\n"
+#~ "                             (-system ¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ïõº÷¤µ¤ì¤ë)\n"
+#~ "  -nostdinc++               C++ ÍÑ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤\n"
+#~ "  -o <file>                 <file> ¤Ø½ÐÎϤ¹¤ë\n"
+
+#~ msgid ""
+#~ "  -pedantic                 Issue all warnings demanded by strict ISO C\n"
+#~ "  -pedantic-errors          Issue -pedantic warnings as errors instead\n"
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -lang-c                   Assume that the input sources are in C\n"
+#~ "  -lang-c89                 Assume that the input sources are in C89\n"
+#~ msgstr ""
+#~ "  -pedantic                 ¸·Ì©¤Ê ISO C ¤ÇÍ׵ᤵ¤ì¤ëÁ´¤Æ¤Î·Ù¹ð¤òȯ¹Ô¤¹¤ë\n"
+#~ "  -pedantic-errors          -pedantic ·Ù¹ð¤ÎÂå¤ê¤Ë¥¨¥é¡¼¤òȯ¹Ô¤¹¤ë\n"
+#~ "  -trigraphs                ISO C ¥È¥é¥¤¥°¥é¥Õ¤ò¼õ¤±Æþ¤ì¤ë\n"
+#~ "  -lang-c                   ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹\n"
+#~ "  -lang-c89                 ÆþÎÏ¥½¡¼¥¹¤ò C89 ¤È¤ß¤Ê¤¹\n"
+
+#~ msgid ""
+#~ "  -lang-c++                 Assume that the input sources are in C++\n"
+#~ "  -lang-objc                Assume that the input sources are in ObjectiveC\n"
+#~ "  -lang-objc++              Assume that the input sources are in ObjectiveC++\n"
+#~ "  -lang-asm                 Assume that the input sources are in assembler\n"
+#~ msgstr ""
+#~ "  -lang-c++                 ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹\n"
+#~ "  -lang-objc                ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC ¤È¤ß¤Ê¤¹\n"
+#~ "  -lang-objc++              ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC++ ¤È¤ß¤Ê¤¹\n"
+#~ "  -lang-asm                 ÆþÎÏ¥½¡¼¥¹¤ò¥¢¥»¥ó¥Ö¥ê¸À¸ì¤È¤ß¤Ê¤¹\n"
+
+#~ msgid ""
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999\n"
+#~ "  -+                        Allow parsing of C++ style features\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -Wtrigraphs               Warn if trigraphs are encountered\n"
+#~ "  -Wno-trigraphs            Do not warn about trigraphs\n"
+#~ "  -Wcomment{s}              Warn if one comment starts inside another\n"
+#~ msgstr ""
+#~ "  -std=<std name>           Å¬¹ç¤µ¤»¤ëɸ½à¤ò»ØÄê -- °Ê²¼¤è¤ê°ì¤Ä\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999\n"
+#~ "  -+                        C++ ¼°¤Î¹½Ê¸²òÀϤòµö²Ä¤¹¤ë\n"
+#~ "  -w                        ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë\n"
+#~ "  -Wtrigraphs               ¥È¥é¥¤¥°¥é¥Õ¤Ë½Ð¤¯¤ï¤·¤¿¤é·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-trigraphs            ¥È¥é¥¤¥°¥é¥Õ¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+#~ "  -Wcomment{s}              ¥³¥á¥ó¥È¤¬Â¾¤Î¥³¥á¥ó¥ÈÆâ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤¿¤é·Ù¹ð¤¹¤ë\n"
+
+#~ msgid ""
+#~ "  -Wno-comment{s}           Do not warn about comments\n"
+#~ "  -Wtraditional             Warn about features not present in traditional C\n"
+#~ "  -Wno-traditional          Do not warn about traditional C\n"
+#~ "  -Wundef                   Warn if an undefined macro is used by #if\n"
+#~ "  -Wno-undef                Do not warn about testing undefined macros\n"
+#~ "  -Wimport                  Warn about the use of the #import directive\n"
+#~ msgstr ""
+#~ "  -Wno-comment{s}           ¥³¥á¥ó¥È¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+#~ "  -Wtraditional             ¸½ºß¤È¤Ï°Û¤Ê¤ë¸Å¤¤ C ¤Ç¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-traditional          ¸Å¤¤ C ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+#~ "  -Wundef                   Ì¤ÄêµÁ¤Î¥Þ¥¯¥í¤¬ #if ¤Ç»È¤ï¤ì¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-undef                Ì¤ÄêµÁ¥Þ¥¯¥í¤Îɾ²Á¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+#~ "  -Wimport                  #import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë\n"
+
+#~ msgid ""
+#~ "  -Wno-import               Do not warn about the use of #import\n"
+#~ "  -Werror                   Treat all warnings as errors\n"
+#~ "  -Wno-error                Do not treat warnings as errors\n"
+#~ "  -Wsystem-headers          Do not suppress warnings from system headers\n"
+#~ "  -Wno-system-headers       Suppress warnings from system headers\n"
+#~ "  -Wall                     Enable all preprocessor warnings\n"
+#~ msgstr ""
+#~ "  -Wno-import               #import ¤ÎÍøÍѤ˴ؤ¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+#~ "  -Werror                   Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦\n"
+#~ "  -Wno-error                ·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤¤\n"
+#~ "  -Wsystem-headers          ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤\n"
+#~ "  -Wno-system-headers       ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤¹¤ë\n"
+#~ "  -Wall                     Á´¤Æ¤Î¥×¥ê¥×¥í¥»¥Ã¥µ·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid ""
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MF <file>                Write dependency output to the given file\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ msgstr ""
+#~ "  -M                        make °Í¸´Ø·¸¤òÀ¸À®¤¹¤ë\n"
+#~ "  -MM                       -M Æ±ÍÍ¡¢Ã¢¤·¥·¥¹¥Æ¥à¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò̵»ë¤¹¤ë\n"
+#~ "  -MF <file>                °Í¸´Ø·¸¤Î½ÐÎϤòÍ¿¤¨¤é¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤à\n"
+#~ "  -MG                       ¸«¤Ä¤«¤é¤Ê¤¤¥Ø¥Ã¥À¤òÀ¸À®¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤È¤·¤Æ°·¤¦\n"
+
+#~ msgid ""
+#~ "  -MP\t\t\t    Generate phony targets for all headers\n"
+#~ "  -MQ <target>              Add a MAKE-quoted target\n"
+#~ "  -MT <target>              Add an unquoted target\n"
+#~ msgstr ""
+#~ "  -MP\t\t\t    Á´¤Æ¤Î¥Ø¥Ã¥À¤Ë¤Ä¤¤¤Æ phony ¥¿¡¼¥²¥Ã¥È¤òÀ¸À®¤¹¤ë\n"
+#~ "  -MQ <target>              MAKE ¤Ç¤Î¥¯¥ª¡¼¥È¤µ¤ì¤¿¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë\n"
+#~ "  -MT <target>              ¥¯¥ª¡¼¥È¤µ¤ì¤Ê¤¤¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë\n"
+
+#~ msgid ""
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question> (<answer>)   Assert the <answer> to <question>\n"
+#~ "  -A-<question> (<answer>)  Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ msgstr ""
+#~ "  -D<macro>                 <macro> ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤòʸ»úÎó¤Î '1' ¤È¤¹¤ë\n"
+#~ "  -D<macro>=<val>           <macro> ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤò <val> ¤È¤¹¤ë\n"
+#~ "  -A<question> (<answer>)   <question> ¤Ë <answer> ¤ÈÀ¼ÌÀ¤¹¤ë\n"
+#~ "  -A-<question> (<answer>)  <question> ¤ò <answer> ¤È¤·¤Ê¤¤\n"
+#~ "  -U<macro>                 <macro> ÄêµÁ¤ò²ò½ü¤¹¤ë\n"
+#~ "  -v                        ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid ""
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ msgstr ""
+#~ "  -H                        »È¤ï¤ì¤¿¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤òɽ¼¨¤¹¤ë\n"
+#~ "  -C                        ¥³¥á¥ó¥È¤òÇË´þ¤·¤Ê¤¤\n"
+#~ "  -dM                       ºÇ¸å¤ËÍ­¸ú¤Ê¥Þ¥¯¥íÄêµÁ¥ê¥¹¥È¤òɽ¼¨¤¹¤ë\n"
+#~ "  -dD                       ½ÐÎϤ˥ޥ¯¥íÄêµÁ¤òÊݸ¤¹¤ë\n"
+#~ "  -dN                       -dD ¤ÈƱÍͤÀ¤¬¡¢Ì¾Á°¤À¤±¤òÊݸ¤¹¤ë\n"
+#~ "  -dI                       #include ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ÐÎϤ˴ޤá¤ë\n"
+
+#~ msgid ""
+#~ "  -fpreprocessed            Treat the input file as already preprocessed\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -$                        Do not allow '$' in identifiers\n"
+#~ "  -remap                    Remap file names when including files.\n"
+#~ "  --version                 Display version information\n"
+#~ "  -h or --help              Display this information\n"
+#~ msgstr ""
+#~ "  -fpreprocessed            ÆþÎÏ¥Õ¥¡¥¤¥ë¤ò´û¤Ë¥×¥ê¥×¥í¥»¥¹ºÑ¤È¤·¤Æ°·¤¦\n"
+#~ "  -ftabstop=<number>        ¥«¥é¥à¤Î¥¿¥Ö´Ö³Ö¤òÊó¹ð¤¹¤ë\n"
+#~ "  -P                        #line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀ¸À®¤·¤Ê¤¤\n"
+#~ "  -$                        ¼±Ê̻ҤǤΠ'$' ¤òµö²Ä¤·¤Ê¤¤\n"
+#~ "  -remap                    ¥Õ¥¡¥¤¥ë¥¤¥ó¥¯¥ë¡¼¥É»þ¤Ë¥Õ¥¡¥¤¥ë̾¤òºÆ¥Þ¥Ã¥×¤¹¤ë\n"
+#~ "  --version                 ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+#~ "  -h or --help              ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid "'$' character(s) in identifier"
+#~ msgstr "'$' Ê¸»ú¤¬¼±Ê̻ҤËÆþ¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "possible start of unterminated string literal"
+#~ msgstr "½ªÃ¼¤Î¤Ê¤¤Ê¸»úÎó¥ê¥Æ¥é¥ë¤Î¿äÄ곫»Ï°ÌÃÖ"
+
+#~ msgid "multi-line string literals are deprecated"
+#~ msgstr "Ê£¿ô¹Ôʸ»úÎó¥ê¥Æ¥é¥ë¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "¥Õ¥¡¥¤¥ëËöÈø¤Ë²þ¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "directives may not be used inside a macro argument"
+#~ msgstr "¥Þ¥¯¥í°ú¿ôÆâ¤Ç¥Ç¥£¥ì¥¯¥È¥ê¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "# followed by integer"
+#~ msgstr "À°¿ô¤¬ # ¤Ë³¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "\"%s\" cannot be used as a macro name"
+#~ msgstr "\"%s\" ¤Ï¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "attempt to push file buffer with contexts stacked"
+#~ msgstr "¥¹¥¿¥Ã¥¯¤µ¤ì¤¿¥³¥ó¥Æ¥¯¥¹¥È¤È°ì½ï¤Ë¥Õ¥¡¥¤¥ë¥Ð¥Ã¥Õ¥¡¤ò push ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+#~ msgstr "#import ¤Ï¸Å¤¤É½¸½¤Ç¤¹. ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëÃæ¤Ç #ifndef ¤Î¥é¥Ã¥Ñ¡¼¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "file \"%s\" left but not entered"
+#~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤«¤é½Ð¤Þ¤·¤¿¤¬Æþ¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "expected to return to file \"%s\""
+#~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤ËÌá¤ë¤Ï¤º¤Ç¤·¤¿"
+
+#~ msgid "expected to return to line number %u"
+#~ msgstr "¹ÔÈÖ¹æ %u ¤ËÌá¤ë¤Ï¤º¤Ç¤·¤¿"
+
+#~ msgid "header flags for \"%s\" have changed"
+#~ msgstr "\"%s\" ¤Î¥Ø¥Ã¥À¥Õ¥é¥°¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "invalid #ident"
+#~ msgstr "̵¸ú¤Ê #ident"
+
+#~ msgid "unknown #pragma namespace %s"
+#~ msgstr "ÉÔÌÀ¤Ê #pragma namespace %s ¤Ç¤¹"
+
+#~ msgid "#pragma once is obsolete"
+#~ msgstr "#pragma once ¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "<builtin>"
+#~ msgstr "<ÁȤ߹þ¤ß>"
+
+#~ msgid "<command line>"
+#~ msgstr "<¥³¥Þ¥ó¥É¥é¥¤¥ó>"
+
+#~ msgid "<stdin>"
+#~ msgstr "<ɸ½àÆþÎÏ>"
+
+#~ msgid "file \"%s\" entered but not left"
+#~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤ËÆþ¤ê¤Þ¤·¤¿¤¬½Ð¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "Invalid option %s"
+#~ msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó %s"
+
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "\"%s\" ¤Ï¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÂФ¹¤ëÀµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "too many input files"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid ";; Processing block from %d to %d, %d sets.\n"
+#~ msgstr ";; %d ¤«¤é %d ¤Þ¤Ç¤Î½èÍý¥Ö¥í¥Ã¥¯¡¢%d ¥»¥Ã¥È¡£\n"
+
+#~ msgid "%s:%d: warning: "
+#~ msgstr "%s:%d: ·Ù¹ð: "
+
+#~ msgid "%s: warning: "
+#~ msgstr "%s: ·Ù¹ð: "
+
+#~ msgid "((anonymous))"
+#~ msgstr "((̵̾))"
+
+#~ msgid "%s: warnings being treated as errors\n"
+#~ msgstr "%s: ·Ù¹ð¤Ï¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤¹\n"
+
+#~ msgid "%s: %s: "
+#~ msgstr "%s: %s: "
+
+#~ msgid "sorry, not implemented: "
+#~ msgstr "»ÄÇ°¤Ê¤¬¤é¸«¼ÂÁõ¤Ç¤¹: "
+
+#~ msgid "%s "
+#~ msgstr "%s "
+
+#~ msgid " %s"
+#~ msgstr " %s"
+
+#~ msgid "At top level:"
+#~ msgstr "¥È¥Ã¥×¥ì¥Ù¥ë:"
+
+#~ msgid "In method `%s':"
+#~ msgstr "¥á¥½¥Ã¥É `%s' Æâ:"
+
+#~ msgid "In function `%s':"
+#~ msgstr "´Ø¿ô `%s' Æâ:"
+
+#~ msgid "compilation terminated.\n"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥ë¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£\n"
+
+#~ msgid "%s:%d: confused by earlier errors, bailing out\n"
+#~ msgstr "%s:%d: Á°¤Î¥¨¥é¡¼¤Ë¤è¤êº®Í𤷤Ƥ¤¤Þ¤¹¤Î¤Ç¡¢Ã¦½Ð¤·¤Þ¤¹\n"
+
+#~ msgid ""
+#~ "Please submit a full bug report,\n"
+#~ "with preprocessed source if appropriate.\n"
+#~ "See %s for instructions.\n"
+#~ msgstr ""
+#~ "´°Á´¤Ê¥Ð¥°Êó¹ð¤òÁ÷¤Ã¤Æ²¼¤µ¤¤¡£\n"
+#~ "ŬÀڤʤé¤Ð¥×¥ê¥×¥í¥»¥¹¸å¤Î¥½¡¼¥¹¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£\n"
+#~ "%s ¤ò¸«¤ì¤ÐÊýË¡¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£\n"
+
+#~ msgid "Unrecognizable insn:"
+#~ msgstr "ǧ¼±ÉÔǽ¤ÊÌ¿Îá:"
+
+#~ msgid "Insn does not satisfy its constraints:"
+#~ msgstr "Ì¿Î᤬¤½¤ÎÀ©Ìó¤òËþ¤¿¤·¤Þ¤»¤ó"
+
+#~ msgid "Internal compiler error: Error reporting routines re-entered.\n"
+#~ msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼: ¥¨¥é¡¼Êó¹ð¥ë¡¼¥Á¥ó¤ËºÆÆþ¤·¤Þ¤·¤¿¡£\n"
+
+#~ msgid "Internal compiler error in %s, at %s:%d"
+#~ msgstr "%s ¤ÇÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼ (%s:%d)"
+
+#~ msgid "In file included from %s:%d"
+#~ msgstr "%s:%d ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÆâ"
+
+#~ msgid ""
+#~ ",\n"
+#~ "                 from %s:%d"
+#~ msgstr ""
+#~ ",\n"
+#~ "                 %s:%d ¤«¤é"
+
+#~ msgid ":\n"
+#~ msgstr ":\n"
+
+#~ msgid "DW_LOC_OP %s not implememnted\n"
+#~ msgstr "DW_LOC_OP %s ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "internal regno botch: regno = %d\n"
+#~ msgstr "ÆâÉôŪ¤Ë regno ¤Î½èÍý¤¬ÊÑ: regno = %d\n"
+
+#~ msgid "can't get current directory"
+#~ msgstr "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Can't access real part of complex value in hard register"
+#~ msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿Æâ¤ÇÊ£ÁÇ¿ô¤Î¼Â¿ôÉôʬ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "can't access imaginary part of complex value in hard register"
+#~ msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿Æâ¤ÇÊ£ÁÇ¿ô¤Îµõ¿ôÉôʬ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
+#~ msgstr "ICE: emit_insn ¤¬ emit_jump_insn ¤òÍפ¹¤ë½ê¤Ç»È¤ï¤ì¤Þ¤·¤¿:\n"
+
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "%s ¤ÇÃæÃÇ, °ÌÃÖ %s:%d"
+
+#~ msgid "exception handling disabled, use -fexceptions to enable"
+#~ msgstr "Îã³°½èÍý¤ò̵¸ú¤Ë¤·¤Þ¤·¤¿. Í­¸ú¤Ë¤¹¤ë¤Ë¤Ï -fexceptions ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "argument of `__builtin_eh_return_regno' must be constant"
+#~ msgstr "`__builtin_eh_return_regno' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "__builtin_eh_return ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "¥¹¥¿¥Ã¥¯À©¸Â¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "function using short complex types cannot be inline"
+#~ msgstr "short complex ·¿¤ò»È¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unsupported wide integer operation"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥ï¥¤¥ÉÀ°¿ô±é»»"
+
+#~ msgid "prior parameter's size depends on `%s'"
+#~ msgstr "Í¥À褹¤ë²¾°ú¿ô¤Î¥µ¥¤¥º¤Ï `%s' ¼¡Âè¤Ç¤¹"
+
+#~ msgid "returned value in block_exit_expr"
+#~ msgstr "block_exit_expr ¤ÇÃͤò return ¤·¤Þ¤·¤¿"
+
+#~ msgid "no INTEGER type can hold a pointer on this configuration"
+#~ msgstr "¸½ºß¤ÎÀßÄê¤Ç¤ÏÈó INTEGER ·¿¤¬¥Ý¥¤¥ó¥¿¤òÊÝ»ý¤Ç¤­¤Þ¤¹"
+
+#~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide,"
+#~ msgstr "ÀßÄê: REAL, INTEGER µÚ¤Ó LOGICAL ¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¡¢"
+
+#~ msgid "and pointers are %d bits wide, but g77 doesn't yet work"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¤¹¤¬¡¢¤½¤ì¤éÁ´¤Æ¤¬ 32 ¥Ó¥Ã¥ÈÉý"
+
+#~ msgid "properly unless they all are 32 bits wide."
+#~ msgstr "¤Ç¤Ê¤¤¤È g77 ¤ÏÀµ¾ï¤ËÆ°ºî¤·¤Þ¤»¤ó¡£"
+
+#~ msgid "Please keep this in mind before you report bugs.  g77 should"
+#~ msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤ëÁ°¤Ë¤³¤Î»ö¤ò¿´¤Ëα¤á¤ÆÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£"
+
+#~ msgid "support non-32-bit machines better as of version 0.6."
+#~ msgstr "g77 ¤Ï¤¤¤º¤ì version 0.6 Æ±ÍͤËÈó 32 ¥Ó¥Ã¥Èµ¡¤Ç¤â¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹"
+
+#~ msgid "configuration: char * holds %d bits, but ftnlen only %d"
+#~ msgstr "ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢ftnlen ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹"
+
+#~ msgid ""
+#~ "configuration: char * holds %d bits, but INTEGER only %d --\n"
+#~ " ASSIGN statement might fail"
+#~ msgstr ""
+#~ "ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢INTEGER ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹ --\n"
+#~ " ¶²¤é¤¯ ASSIGN Ê¸¤¬¼ºÇÔ¤·¤Þ¤¹"
+
+#~ msgid "Directory name must immediately follow -I"
+#~ msgstr "¥Ç¥¤¥ì¥¯¥È¥ê̾¤Ï -I ¤Î¤¹¤°¸å¤í¤Ë¤Ä¤±¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "overflowed output arg list for `%s'"
+#~ msgstr "`%s' ÍѤνÐÎÏ°ú¿ô¥ê¥¹¥È¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "--driver no longer supported"
+#~ msgstr "--driver ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "argument to `%s' missing"
+#~ msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "No input files; unwilling to write output files"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó -- ÉÔËܰդʽÐÎÏ¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß"
+
+#~ msgid "Print g77-specific compiler version info, run internal tests"
+#~ msgstr "g77 ¸ÇÍ­¤Î¥³¥ó¥Ñ¥¤¥é¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¡¢ÆâÉô¥Æ¥¹¥È¤Î¼Â¹Ô"
+
+#~ msgid "Program is written in typical FORTRAN 66 dialect"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê FORTRAN 66 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Program is written in typical Unix f77 dialect"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê Unix f77 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Program does not use Unix-f77 dialectal features"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬ Unix-f77 Êý¸À¤Îµ¡Ç½¤ò»È¤Ã¤Æ¤¤¤Ê¤¤"
+
+#~ msgid "Program is written in Fortran-90-ish dialect"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬ Fortran-90 ÅªÊý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements"
+#~ msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤È COMMON ¥Ö¥í¥Ã¥¯¤ò SAVE Ê¸¤Ç̾Á°ÉÕ¤±¤é¤ì¤¿¤è¤¦¤Ë¼è¤ê°·¤¦"
+
+#~ msgid "Allow $ in symbol names"
+#~ msgstr "$ ¤ò¥·¥ó¥Ü¥ë̾¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë"
+
+#~ msgid "f2c-compatible code need not be generated"
+#~ msgstr "f2c ¸ß´¹¥³¡¼¥É¤òÀ¸À®¤¹¤ëɬÍפ¬¤Ê¤¤"
+
+#~ msgid "Unsupported; do not generate libf2c-calling code"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- libf2c-calling ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Unsupported; affects code-generation of arrays"
+#~ msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- ÇÛÎó¤Î¥³¡¼¥ÉÀ¸À®¤Ë±Æ¶Á¤¹¤ë"
+
+#~ msgid "Program is written in Fortran-90-ish free form"
+#~ msgstr "¥×¥í¥°¥é¥à¤Ï Fortran-90 Åª¥Õ¥ê¡¼¥Õ¥©¡¼¥à¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Warn about use of (only a few for now) Fortran extensions"
+#~ msgstr "Fortran ³ÈÄ¥(º£¤Ï¾¯¤Ê¤¤¤¬)¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Program is written in VXT (Digital-like) FORTRAN"
+#~ msgstr "¥×¥í¥°¥é¥à¤Ï VXT (Digital) FORTRAN ¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Disallow all ugly features"
+#~ msgstr "Á´¤Æ¤Î½¹¤¤µ¡Ç½¤òµö²Ä¤·¤Ê¤¤"
+
+#~ msgid "Hollerith and typeless constants not passed as arguments"
+#~ msgstr "Hollerith ¤ä·¿¤Ê¤·Äê¿ô¤ò°ú¿ô¤È¤·¤ÆÅϤµ¤Ê¤¤"
+
+#~ msgid "Allow ordinary copying of ASSIGN'ed vars"
+#~ msgstr "ASSIGN ¤µ¤ì¤¿ÊÑ¿ô¤ÎÄ̾ï¤Î¥³¥Ô¡¼¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Dummy array dimensioned to (1) is assumed-size"
+#~ msgstr "¥À¥ß¡¼ÇÛÎó¤Î¼¡¸µ¤ò (1) ¤È¤ß¤Ê¤¹"
+
+#~ msgid "Trailing comma in procedure call denotes null argument"
+#~ msgstr "¥×¥í¥·¡¼¥¸¥ã¸Æ¤Ó½Ð¤·Ãæ¤ÎϢ³¥«¥ó¥Þ¤Ç null °ú¿ô¤òɽ¸½¤¹¤ë"
+
+#~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z"
+#~ msgstr "DOUBLE COMPLEX Z ¤Ç¤Î REAL(Z) ¤È AIMAG(Z) ¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Initialization via DATA and PARAMETER is type-compatible"
+#~ msgstr "DATA ¤ä PARAMETER ·Ðͳ¤Î½é´ü²½¤Ï·¿¸ß´¹¤Ç¤¢¤ë"
+
+#~ msgid "Allow INTEGER and LOGICAL interchangeability"
+#~ msgstr "INTEGER ¤È LOGICAL ¤ÏÁê¸ß¤ËÊѹ¹²Äǽ¤Ç¤¢¤ë¤È¤¹¤ë"
+
+#~ msgid "Print internal debugging-related info"
+#~ msgstr "ÆâÉô¥Ç¥Ð¥Ã¥°´ØÏ¢¾ðÊó¤òɽ¼¨¤¹¤ë"
+
+#~ msgid "Initialize local vars and arrays to zero"
+#~ msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤äÇÛÎó¤ò¥¼¥í¤Ë½é´ü²½¤¹¤ë"
+
+#~ msgid "Backslashes in character/hollerith constants not special (C-style)"
+#~ msgstr "ʸ»ú/hollerith Äê¿ô¤Ç¤Î¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤òÆüì¤Ê¤â¤Î¤È¤·¤Ê¤¤ (C ¼°)"
+
+#~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs"
+#~ msgstr "COMPLEX ·×»»¤Î¥Ð¥°¤ò²óÈò¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë¥Õ¥í¥ó¥È¥¨¥ó¥É¤ò»ý¤Ä"
+
+#~ msgid "Disable the appending of underscores to externals"
+#~ msgstr "³°ÉôÊÑ¿ô¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤"
+
+#~ msgid "Never append a second underscore to externals"
+#~ msgstr "³°ÉôÊÑ¿ô¤ËÆó¤ÄÌܤΥ¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤"
+
+#~ msgid "Intrinsics spelled as e.g. SqRt"
+#~ msgstr "intrinsic ¤¬Î㤨¤Ð SqRt ¤ÎÍѤËÄÖ¤é¤ì¤ë"
+
+#~ msgid "Intrinsics in uppercase"
+#~ msgstr "intrinsic ¤ò±ÑÂçʸ»ú¤È¤¹¤ë"
+
+#~ msgid "Intrinsics letters in arbitrary cases"
+#~ msgstr "intrinsic Ê¸»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ë"
+
+#~ msgid "Language keywords spelled as e.g. IOStat"
+#~ msgstr "¸À¸ìͽÌó¸ì¤¬Î㤨¤Ð IOStat ¤ÎÍѤËÄÖ¤é¤ì¤ë"
+
+#~ msgid "Language keywords in uppercase"
+#~ msgstr "¸À¸ìͽÌó¸ì¤Ï±ÑÂçʸ»ú¤È¤¹¤ë"
+
+#~ msgid "Language keyword letters in arbitrary cases"
+#~ msgstr "¸À¸ìͽÌó¸ìʸ»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ë"
+
+#~ msgid "Internally convert most source to uppercase"
+#~ msgstr "ÆâÉôŪ¤ÊÊÑ´¹¤Ç¤Ï¥½¡¼¥¹¤ÎËؤó¤É¤ò±ÑÂçʸ»ú¤È¤¹¤ë"
+
+#~ msgid "Internally preserve source case"
+#~ msgstr "ÆâÉôŪ¤Ë¥½¡¼¥¹¤Î¥±¡¼¥¹¤òÊÝ»ý¤¹¤ë"
+
+#~ msgid "Symbol names spelled in mixed case"
+#~ msgstr "¥·¥ó¥Ü¥ë̾¤Ï¥±¡¼¥¹º®ºß¤ÇÄÖ¤é¤ì¤ë"
+
+#~ msgid "Symbol names in uppercase"
+#~ msgstr "¥·¥ó¥Ü¥ë̾¤òÂçʸ»ú¤È¤¹¤ë"
+
+#~ msgid "Symbol names in lowercase"
+#~ msgstr "¥·¥ó¥Ü¥ë̾¤ò¾®Ê¸»ú¤È¤¹¤ë"
+
+#~ msgid "Program written in uppercase"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Program written in lowercase"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Program written in strict mixed-case"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬¸·Ì©¤Ë¥±¡¼¥¹º®ºß¤Ç½ñ¤«¤ì¤Æ¤¤¤ë"
+
+#~ msgid "Compile as if program written in uppercase"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Compile as if program written in lowercase"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Preserve all spelling (case) used in program"
+#~ msgstr "¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿ÄÖ¤ê(¤Î¥±¡¼¥¹)¤òÁ´¤ÆÊÝ»ý¤¹¤ë"
+
+#~ msgid "Delete libU77 intrinsics with bad interfaces"
+#~ msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ëºï½ü¤¹¤ë"
+
+#~ msgid "Disable libU77 intrinsics with bad interfaces"
+#~ msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide libU77 intrinsics with bad interfaces"
+#~ msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë±£¤¹"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports"
+#~ msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports"
+#~ msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports"
+#~ msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports"
+#~ msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹"
+
+#~ msgid "Delete MIL-STD 1753 intrinsics"
+#~ msgstr "MIL-STD 1753 intrinsic ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable MIL-STD 1753 intrinsics"
+#~ msgstr "MIL-STD 1753 intrinsic ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide MIL-STD 1753 intrinsics"
+#~ msgstr "MIL-STD 1753 intrinsic ¤ò±£¤¹"
+
+#~ msgid "Delete libU77 intrinsics"
+#~ msgstr "libU77 intrinsic ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable libU77 intrinsics"
+#~ msgstr "libU77 intrinsic ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide libU77 intrinsics"
+#~ msgstr "libU77 intrinsic ¤ò±£¤¹"
+
+#~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë"
+
+#~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë"
+
+#~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports"
+#~ msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹"
+
+#~ msgid "Treat initial values of 0 like non-zero values"
+#~ msgstr "0 ¤Î½é´ü²½ÃͤòÈó¥¼¥íÃͤȤ·¤Æ¼è¤ê°·¤¦"
+
+#~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)"
+#~ msgstr "COMMON ¤ä EQUIVALENCE ÍѤÎÆÃÊ̤ʥǥХå°¾ðÊó¤òȯ¹Ô¤¹¤ë¡Ê̵¸ú²½¤µ¤ì¤Æ¤¤¤ë¡Ë"
+
+#~ msgid "Take at least one trip through each iterative DO loop"
+#~ msgstr "ºÇÄã¤Ç¤â°ì²ó¤Ï³ÆÈ¿Éü DO ¥ë¡¼¥×¤¬½èÍý¤µ¤ì¤ë¤È¤¹¤ë"
+
+#~ msgid "Print names of program units as they are compiled"
+#~ msgstr "¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥×¥í¥°¥é¥àñ°Ì¤Î̾Á°¤òɽ¼¨¤¹¤ë"
+
+#~ msgid "Disable fatal diagnostics about inter-procedural problems"
+#~ msgstr "inter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤ÎÃ×̿Ū¤Ê¿ÇÃÇɽ¼¨¤òɽ¼¨¤·¤Ê¤¤"
+
+#~ msgid "Make prefix-radix non-decimal constants be typeless"
+#~ msgstr "ÈóÀ°¿ôÄê¿ô¤ÎÀÜÈø´ð¿ô¤¬·¿¤Ê¤·¤Ç¤¢¤ë¤È¤¹¤ë"
+
+#~ msgid "Generate code to check subscript and substring bounds"
+#~ msgstr "ÇÛÎó¤Îź»ú¤Èź»ú¶­³¦¤ò¸¡ºº¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Fortran-specific form of -fbounds-check"
+#~ msgstr "Fortran ¸ÇÍ­¤Î -fbounds-check ¤Î·Á¼°"
+
+#~ msgid "Disable warnings about inter-procedural problems"
+#~ msgstr "inter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ðɽ¼¨¤òɽ¼¨¤·¤Ê¤¤"
+
+#~ msgid "Warn about constructs with surprising meanings"
+#~ msgstr "²ò¼á¤Ë¸í²ò¤ò¾·¤¯¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Add a directory for INCLUDE searching"
+#~ msgstr "INCLUDE Ãµº÷ÍѤΥǥ£¥ì¥¯¥È¥ê¤òÄɲ乤ë"
+
+#~ msgid "Set the maximum line length"
+#~ msgstr "¹Ô¤ÎŤµ¤ÎºÇÂçÃͤòÀßÄꤹ¤ë"
+
+#~ msgid "the meaning of `\\a' varies with -traditional"
+#~ msgstr "-traditional ¤Ç¤Ï `\\a' ¤Î°ÕÌ£¤¬°Û¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "non-ANSI-standard escape sequence, `\\%c'"
+#~ msgstr "Èó ANSI É¸½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¡¢`\\%c'"
+
+#~ msgid "non-ANSI escape sequence `\\%c'"
+#~ msgstr "Èó ANSI ¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¡¢`\\%c'"
+
+#~ msgid "unknown escape sequence `\\%c'"
+#~ msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ `\\%c'"
+
+#~ msgid "unknown escape sequence: `\\' followed by char code 0x%x"
+#~ msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹: `\\' ¤Î¸å¤Ëʸ»ú¥³¡¼¥É 0x%x"
+
+#~ msgid "Badly formed directive -- no closing quote"
+#~ msgstr "ÉÔÀµ¤Ê·Á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö -- ÊĤ¸¥¯¥©¡¼¥È¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "#-lines for entering and leaving files don't match"
+#~ msgstr "¥Õ¥¡¥¤¥ë¤Ø¤Î½ÐÆþ¤ê¸ý¤È¤Ê¤ë #-¹Ô ¤¬À°¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "Bad directive -- missing close-quote"
+#~ msgstr "ÉÔÀµ¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö -- ÊĤ¸¥¯¥©¡¼¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "ignoring pragma: %s"
+#~ msgstr "pragma ¤ò̵»ë¤·¤Þ¤¹: %s"
+
+#~ msgid "invalid #line"
+#~ msgstr "̵¸ú¤Ê #line"
+
+#~ msgid "Use `#line ...' instead of `# ...' in first line"
+#~ msgstr "ºÇ½é¤Î¹Ô¤Ç¤Ï `# ...' ¤ÎÂå¤ê¤Ë `#line ...' ¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#~ msgid "invalid #-line"
+#~ msgstr "̵¸ú¤Ê #-¹Ô"
+
+#~ msgid "ASSIGNed FORMAT specifier is too small"
+#~ msgstr "ASSIGN ¤µ¤ì¤¿ FORMAT »ØÄê»Ò¤¬¾®¤µ¤¹¤®¤Þ¤¹"
+
+#~ msgid "ASSIGN to variable that is too small"
+#~ msgstr "ASSIGN Àè¤ÎÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹"
+
+#~ msgid "ASSIGNed GOTO target variable is too small"
+#~ msgstr "ASSIGN ¤µ¤ì¤¿ GOTO ÀèÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹"
+
+#~ msgid "%s no longer supported -- try -fvxt"
+#~ msgstr "%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fvxt ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "%s no longer supported -- try -fno-vxt -ff90"
+#~ msgstr "%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fno-vxt -ff90 ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "%s disabled, use normal debugging flags"
+#~ msgstr "%s ¤¬Ìµ¸ú¤Ç¤¹¡£Ä̾ï¥Ç¥Ð¥Ã¥°¥Õ¥é¥°¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#~ msgid "invalid `asm': %s"
+#~ msgstr "̵¸ú¤Ê `asm': %s"
+
+#~ msgid "output_operand: %s"
+#~ msgstr "output_operand: %s"
+
+#~ msgid "operand number missing after %-letter"
+#~ msgstr "±é»»¿ô¤¬ %-letter ¤Î¸å¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "operand number out of range"
+#~ msgstr "±é»»¿ô¤¬Èϰϳ°¤Ç¤¹"
+
+#~ msgid "invalid %%-code"
+#~ msgstr "̵¸ú¤Ê %%-code"
+
+#~ msgid "`%l' operand isn't a label"
+#~ msgstr "`%l' ±é»»¤Ï¥é¥Ù¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "function might be possible candidate for attribute `noreturn'"
+#~ msgstr "´Ø¿ô¤Ï¶²¤é¤¯ `noreturn' Â°À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹"
+
+#~ msgid "`noreturn' function does return"
+#~ msgstr "`noreturn' ´Ø¿ô¤¬ return ¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "À©¸æ¤¬Èó void ´Ø¿ô¤Î½ª¤ê¤ËÅþ㤷¤Þ¤·¤¿"
+
+#~ msgid "End insn %d for block %d not found in the insn stream."
+#~ msgstr "½ªÎ»Ì¿Îá %d(¥Ö¥í¥Ã¥¯ %d) ¤¬°ìÏ¢¤ÎÌ¿ÎáÎó¤ÎÃæ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#~ msgid "Insn %d is in multiple basic blocks (%d and %d)"
+#~ msgstr "Ì¿Îá %d ¤¬Ê£¿ô¤Î´ðËÜ¥Ö¥í¥Ã¥¯(%d ¤È %d)¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "Head insn %d for block %d not found in the insn stream."
+#~ msgstr "³«»ÏÌ¿Îá %d(¥Ö¥í¥Ã¥¯ %d) ¤¬°ìÏ¢¤ÎÌ¿ÎáÎó¤ÎÃæ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#~ msgid "Basic block %i edge lists are corrupted"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %i edge ¥ê¥¹¥È¤¬µ¡Ç½¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Basic block %d pred edge is corrupted"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d pred edge ¥ê¥¹¥È¤¬µ¡Ç½¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK ¤¬¥Ö¥í¥Ã¥¯ %d ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK ¤¬¥Ö¥í¥Ã¥¯ %d ¤Ë¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d"
+#~ msgstr "NOTE_INSN_BASIC_BLOCK %d ¤¬´ðËÜ¥Ö¥í¥Ã¥¯ %d ¤ÎÃæ¤Û¤É¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "In basic block %d:"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d Æâ:"
+
+#~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+#~ msgstr "Ì¿ÎáÏ¢º¿Ãæ¤Î bb ¤Î¿ô (%d) ¤¬ n_basic_blocks (%d) ¤È°ã¤¤¤Þ¤¹"
+
+#~ msgid "comparison is always %d due to width of bitfield"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ÎÉý¤Î¤»¤¤¤ÇÈæ³Ó¤¬¾ï¤Ë %d ¤È¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "comparison is always %d"
+#~ msgstr "Èæ³Ó¤¬¾ï¤Ë %d ¤È¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "`or' of unmatched not-equal tests is always 1"
+#~ msgstr "°ìÃפ·¤Ê¤¤ÃÍƱ»Î¤Ç¤ÎÈóÅù²Á¤Î `or' ¥Æ¥¹¥È¤Ï¾ï¤Ë 1 ¤Ç¤¹"
+
+#~ msgid "`and' of mutually exclusive equal-tests is always 0"
+#~ msgstr "Áê¸ßÇÓ¾Ū¤ÊÃͤÎÅù²Á¤Î `and' ¥Æ¥¹¥È¤Ï¾ï¤Ë 0 ¤Ç¤¹"
+
+#~ msgid "`%s' might be used uninitialized in this function"
+#~ msgstr "`%s' ¤Ï¤³¤Î´Ø¿ôÆâ¤Ç½é´ü²½¤µ¤ì¤º¤Ë»ÈÍѤµ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "variable `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "ÊÑ¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "argument `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "°ú¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "function returns an aggregate"
+#~ msgstr "´Ø¿ô¤¬½¸¹çÂΤòÊÖ¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "unused parameter `%s'"
+#~ msgstr "°ú¿ô `%s' ¤¬Ì¤»ÈÍѤǤ¹"
+
+#~ msgid "Ambiguous abbreviation %s"
+#~ msgstr "¤¢¤¤¤Þ¤¤¤Ê¾Êά %s ¤Ç¤¹"
+
+#~ msgid "Incomplete `%s' option"
+#~ msgstr "ÉÔ´°Á´¤Ê `%s' ¥ª¥×¥·¥ç¥ó¤Ç¤¹"
+
+#~ msgid "Missing argument to `%s' option"
+#~ msgstr "`%s' ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Extraneous argument to `%s' option"
+#~ msgstr "`%s' ¥ª¥×¥·¥ç¥ó¤ËÂФ·¤Æ̵´Ø·¸¤Ê°ú¿ô"
+
+#~ msgid "Using builtin specs.\n"
+#~ msgstr "ÁȤ߹þ¤ß spec ¤ò»ÈÍÑ.\n"
+
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "spec %s ¤ò '%s' ¤ËÀßÄêÃæ\n"
+#~ "\n"
+
+#~ msgid "Reading specs from %s\n"
+#~ msgstr "%s ¤«¤é spec ¤òÆɤ߹þ¤ßÃæ\n"
+
+#~ msgid "specs %%include syntax malformed after %ld characters"
+#~ msgstr "specs ¤Î %ld Ê¸»úÌܰʹߤΠ%%include ¤Î½ñ¼°¤¬ÊѤǤ¹"
+
+#~ msgid "Could not find specs file %s\n"
+#~ msgstr "spec ¥Õ¥¡¥¤¥ë %s ¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#~ msgid "specs %%rename syntax malformed after %ld characters"
+#~ msgstr "specs ¤Î %ld Ê¸»úÌܰʹߤΠ%%rename ¤Î½ñ¼°¤¬ÊѤǤ¹"
+
+#~ msgid "specs %s spec was not found to be renamed"
+#~ msgstr "spec ¥Õ¥¡¥¤¥ë %s ¤Ë̾Á°¤òÊѹ¹¤¹¤ë spec ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "spec %s ¤ò %s ¤Ë̾Á°¤òÊѹ¹\n"
+
+#~ msgid ""
+#~ "spec is '%s'\n"
+#~ "\n"
+#~ msgstr ""
+#~ "spec ¤Ï '%s' ¤Ç¤¹\n"
+#~ "\n"
+
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "spec ¥Õ¥¡¥¤¥ëÃæ¤Î %ld Ê¸»ú¤Î¸å¤ËÉÔÌÀ¤Ê %% ¥³¥Þ¥ó¥É"
+
+#~ msgid "specs file malformed after %ld characters"
+#~ msgstr "%ld Ê¸»ú¤Î¸å¤Ë¤ª¤«¤·¤Ê spec ¥Õ¥¡¥¤¥ë"
+
+#~ msgid "spec file has no spec for linking"
+#~ msgstr "spec ¥Õ¥¡¥¤¥ë¤Ë¥ê¥ó¥¯¤Ë´Ø¤¹¤ë spec ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-pipe not supported"
+#~ msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr ""
+#~ "\n"
+#~ "³¤±¤Þ¤¹¤«? (y ¤Þ¤¿¤Ï n) "
+
+#~ msgid ""
+#~ "Internal error: %s (program %s)\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "ÆâÉô¥¨¥é¡¼: %s (¥×¥í¥°¥é¥à %s)\n"
+#~ "´°Á´¤Ê¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n"
+#~ "%s ¤Ë¼ê½ç¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£"
+
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr "# %s %.2f %.2f\n"
+
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó] ¥Õ¥¡¥¤¥ë...\n"
+
+#~ msgid "Options:\n"
+#~ msgstr "¥ª¥×¥·¥ç¥ó:\n"
+
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr ""
+#~ "  -pass-exit-codes         ¥Õ¥§¡¼¥º¤«¤é¤Î¥¨¥é¡¼¥³¡¼¥É¤ÎºÇÂçÃͤò exit\n"
+#~ "                               ¥³¡¼¥É¤È¤·¤ÆÊÖ¤¹\n"
+
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "  --help                   ¤³¤Î¥Ø¥ë¥×¾ðÊó¤òɽ¼¨\n"
+
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "  --target-help            ¥¿¡¼¥²¥Ã¥È¸ÇÍ­¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨\n"
+
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "(`-v --help' ¤ò»È¤¦¤È¡¢»Ò¥×¥í¥»¥¹¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨)\n"
+
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "  -dumpspecs               ÁȤ߹þ¤Þ¤ì¤¿ spec Ê¸»úÎó¤òÁ´¤Æɽ¼¨\n"
+
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "  -dumpversion             ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨\n"
+
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "  -dumpmachine             ¥³¥ó¥Ñ¥¤¥é¤Î¥¿¡¼¥²¥Ã¥È¥×¥í¥»¥Ã¥µ¤òɽ¼¨\n"
+
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "  -print-search-dirs       ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¡¼¥Á¥Ñ¥¹¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òɽ¼¨\n"
+
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "  -print-libgcc-file-name  ¥³¥ó¥Ñ¥¤¥é¤Î¥³¥ó¥Ñ¥Ë¥ª¥ó¥é¥¤¥Ö¥é¥ê̾¤òɽ¼¨\n"
+
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "  -print-file-name=<lib>   ¥é¥¤¥Ö¥é¥ê <lib> ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨\n"
+
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "  -print-prog-name=<prog>  ¥³¥ó¥Ñ¥¤¥é¤ÎÉôÉÊ <prog> ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨\n"
+
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "  -print-multi-directory   libgcc ¤Î¥Ð¡¼¥¸¥ç¥ó¥Ç¥£¥ì¥¯¥È¥ê¥ë¡¼¥È¤òɽ¼¨\n"
+
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr ""
+#~ "  -print-multi-lib         ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ÈÊ£¿ô¤Î¥é¥¤¥Ö¥é¥êõº÷\n"
+#~ "                               ¥Ç¥£¥ì¥¯¥È¥ê¤È¤ÎÂбþ¤òɽ¼¨\n"
+
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "  -Wa,<options>            ¥«¥ó¥Þ¶èÀÚ¤ê¤Î <options> ¤ò¥¢¥»¥ó¥Ö¥é¤ËÅϤ¹\n"
+
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "  -Wp,<options>            ¥«¥ó¥Þ¶èÀÚ¤ê¤Î <options> ¤ò¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÅϤ¹\n"
+
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "  -Wl,<options>            ¥«¥ó¥Þ¶èÀÚ¤ê¤Î <options> ¤ò¥ê¥ó¥«¤ËÅϤ¹\n"
+
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "  -Xlinker <arg>           <arg> ¤ò¥ê¥ó¥«¤ËÅϤ¹\n"
+
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "  -save-temps              Ãæ´Ö¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Ê¤¤\n"
+
+#~ msgid "  -pipe                    Use pipes rather than intermediate files\n"
+#~ msgstr "  -pipe                    Ãæ´Ö¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯¥Ñ¥¤¥×¤ò»È¤¦\n"
+
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "  -time                    »Ò¥×¥í¥»¥¹¤´¤È¤Î¼Â¹Ô»þ´Ö¤ò·×¬¤¹¤ë\n"
+
+#~ msgid "  -specs=<file>            Override builtin specs with the contents of <file>\n"
+#~ msgstr "  -specs=<file>            ÁȤ߹þ¤ß specs ¤ò <file> ¤ÎÆâÍƤÇÃÖ¤­´¹¤¨¤ë\n"
+
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr "  -std=<standard>          ÆþÎÏ¥½¡¼¥¹¤ò <standard> ¤È¸«¤Ê¤¹\n"
+
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "  -B <directory>           <directory> ¤ò¥³¥ó¥Ñ¥¤¥é¤Îõº÷¥Ñ¥¹¤ËÄɲ乤ë\n"
+
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr ""
+#~ "  -b <machine>             ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð¥¿¡¼¥²¥Ã¥È <machine> ¤È¤·¤Æ\n"
+#~ "                               gcc ¤ò¼Â¹Ô¤¹¤ë\n"
+
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr ""
+#~ "  -V <version>             ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð <version> ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î\n"
+#~ "                               gcc ¤È¤·¤Æ¼Â¹Ô¤¹¤ë\n"
+
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "  -v                       ¥³¥ó¥Ñ¥¤¥é¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤ë¥×¥í¥°¥é¥à¤òɽ¼¨\n"
+
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr ""
+#~ "  -E                       ¥×¥ê¥×¥í¥»¥¹¤Î¤ß -- ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯\n"
+#~ "                               ¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "  -S                       ¥³¥ó¥Ñ¥¤¥ë¤Î¤ß -- ¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "  -c                       ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¤¹¤ë¤¬¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤\n"
+
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "  -o <file>                <file> ¤Ë½ÐÎϤò¹Ô¤Ê¤¦\n"
+
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissable languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behaviour of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr ""
+#~ "  -x <language>            °Ê²¼¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¸À¸ì¤ò»ØÄꤹ¤ë\n"
+#~ "                           »ØÄê¤Ç¤­¤ë¸À¸ì: c c++ assembler none\n"
+#~ "                           'none' ¤ò»ØÄꤹ¤ë¤È¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë¤è¤Ã¤Æ¸À¸ì¤ò\n"
+#~ "                           ¿äÄꤹ¤ë¡¢¥Ç¥Õ¥©¥ë¥È¤Î¿¶¤ëÉñ¤¤¤ËÌá¤ë\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "-g, -f, -m, -O, -W ¤Ç»Ï¤Þ¤ë¥ª¥×¥·¥ç¥ó¤ä¡¢--param ¤Ï %s ¤¬µ¯Æ°¤¹¤ë¤¢¤é¤æ¤ë\n"
+#~ "»Ò¥×¥í¥»¥¹¤Ë¼«Æ°Åª¤ËÅϤµ¤ì¤Þ¤¹¡£¤³¤¦¤¤¤Ã¤¿¥×¥í¥»¥¹¤Ë¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤òÅϤ¹\n"
+#~ "¤Ë¤Ï -W<letter> ¥ª¥×¥·¥ç¥ó¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n"
+
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "`-Xlinker' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "`-specs' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "`-specs=' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-b' is missing"
+#~ msgstr "`-b' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "`-B' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-V' is missing"
+#~ msgstr "`-V' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid version number format"
+#~ msgstr "̵¸ú¤Ê¥Ð¡¼¥¸¥ç¥óÈÖ¹æ·Á¼°"
+
+#~ msgid "cannot specify -o with -c or -S and multiple compilations"
+#~ msgstr "-c ¤ä -S ¤È°ì½ï¤Ë -o ¤ò»ØÄꤹ¤ë¤È¡¢Ê£¿ô¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Warning: -pipe ignored because -save-temps specified"
+#~ msgstr "·Ù¹ð: -save-temps ¤¬»ØÄꤵ¤ì¤¿¤Î¤Ç -pipe ¤Ï̵»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "Warning: -pipe ignored because -time specified"
+#~ msgstr "·Ù¹ð: -time ¤¬»ØÄꤵ¤ì¤¿¤Î¤Ç -pipe ¤Ï̵»ë¤µ¤ì¤Þ¤¹"
+
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "`-x' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "`-%s' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Warning: `-x %s' after last input file has no effect"
+#~ msgstr "·Ù¹ð: ºÇ¸å¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¸å¤Î `-x %s' ¤Ï²¿¤â¤·¤Þ¤»¤ó"
+
+#~ msgid "Invalid specification!  Bug in cc."
+#~ msgstr "̵¸ú¤Ê»ØÄê! cc ¤Î¥Ð¥°."
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "Spec failure: '%%*' has not been initialised by pattern match"
+#~ msgstr "spec ¥¨¥é¡¼: '%%*' ¤Ï¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤Ç½é´ü²½¤µ¤ì¤Ê¤¤¤Þ¤Þ¤Ç¤¹"
+
+#~ msgid "Warning: use of obsolete %%[ operator in specs"
+#~ msgstr "·Ù¹ð: µì¼°¤Î %%[ ±é»»»Ò¤¬ spec ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "Processing spec %c%s%c, which is '%s'\n"
+#~ msgstr "spec %c%s%c ¤ò½èÍýÃæ, ¤³¤ì¤Ï '%s' ¤Ç¤¹\n"
+
+#~ msgid "Spec failure: Unrecognised spec option '%c'"
+#~ msgstr "spec ¥¨¥é¡¼: Ç§¼±ÉÔǽ¤Ê spec ¥ª¥×¥·¥ç¥ó '%c'"
+
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `-%s'"
+
+#~ msgid "install: %s%s\n"
+#~ msgstr "¥¤¥ó¥¹¥È¡¼¥ë: %s%s\n"
+
+#~ msgid "programs: %s\n"
+#~ msgstr "¥×¥í¥°¥é¥à: %s\n"
+
+#~ msgid "libraries: %s\n"
+#~ msgstr "¥é¥¤¥Ö¥é¥ê: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¥Ð¥°¥ì¥Ý¡¼¥È¤Î¼ê½ç¤Ï¡¢°Ê²¼¤ò»²¾È\n"
+
+#~ msgid "Configured with: %s\n"
+#~ msgstr "¥³¥ó¥Õ¥£¥°¥ª¥×¥·¥ç¥ó: %s\n"
+
+#~ msgid "Thread model: %s\n"
+#~ msgstr "¥¹¥ì¥Ã¥É¥â¥Ç¥ë: %s\n"
+
+#~ msgid "gcc version %s\n"
+#~ msgstr "gcc ¥Ð¡¼¥¸¥ç¥ó %s\n"
+
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "gcc ¥É¥é¥¤¥Ð¥Ð¡¼¥¸¥ç¥ó %s ¼Â¹Ô gcc ¥Ð¡¼¥¸¥ç¥ó %s\n"
+
+#~ msgid "No input files"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s: %s ¥³¥ó¥Ñ¥¤¥é¤Ï¤³¤Î¥·¥¹¥Æ¥à¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "%s: linker input file unused because linking not done"
+#~ msgstr "%s: ¥ê¥ó¥¯¤¬´°Î»¤·¤Ê¤«¤Ã¤¿¤Î¤Ç¥ê¥ó¥«¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "language %s not recognized"
+#~ msgstr "¸À¸ì %s ¤Ïǧ¼±¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Internal gcc abort."
+#~ msgstr "ÆâÉô gcc ÃæÃÇ"
+
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "ÆâÉô gcc abort.\n"
+
+#~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n"
+#~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] ¥Õ¥¡¥¤¥ë\n"
+
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£\n"
+
+#~ msgid "Could not open data file %s.\n"
+#~ msgstr "¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë %s ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£\n"
+
+#~ msgid "Assuming that all execution counts are zero.\n"
+#~ msgstr "Á´¼Â¹Ô¿ô¤¬¥¼¥í¤Ç¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£\n"
+
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "¥×¥í¥°¥é¥à¥Õ¥í¡¼¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£\n"
+
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë·ë¤ÓÉÕ¤¯¼Â¹Ô¥³¡¼¥É¤¬¤¢¤ê¤Þ¤»¤ó¡£\n"
+
+#~ msgid ".da file contents exhausted too early\n"
+#~ msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò¤¢¤Þ¤ê¤ËÁ᤯»È¤¤ÀڤäƤ·¤Þ¤¤¤Þ¤·¤¿\n"
+
+#~ msgid ".da file contents not exhausted\n"
+#~ msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍƤò»È¤¤ÀڤäƤ¤¤Þ¤»¤ó\n"
+
+#~ msgid "%6.2f%% of %d source lines executed in function %s\n"
+#~ msgstr "%6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No executable source lines in function %s\n"
+#~ msgstr "´Ø¿ô %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%6.2f%% of %d branches executed in function %s\n"
+#~ msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬´Ø¿ô %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "%6.2f%% of %d branches taken at least once in function %s\n"
+#~ msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ìÅ٤ϴؿô %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No branches in function %s\n"
+#~ msgstr "´Ø¿ô %s ¤Ë¤Ïʬ´ô¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%6.2f%% of %d calls executed in function %s\n"
+#~ msgstr "%6.2f%%(%d ²ó) ¤Î¸Æ¤Ó½Ð¤·¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No calls in function %s\n"
+#~ msgstr "´Ø¿ô %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "¥°¥é¥Õ¤Î bb ¥¨¥ó¥È¥ê¤Î°ìÉô¤·¤«»È¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡¢´Ø¿ô %s\n"
+
+#~ msgid "block_num = %ld, num_blocks = %d\n"
+#~ msgstr "¥Ö¥í¥Ã¥¯¿ô = %ld¡¢ÈÖ¹æ¥Ö¥í¥Ã¥¯ = %d\n"
+
+#~ msgid "ERROR: too many basic blocks in .bb file %s\n"
+#~ msgstr "¥¨¥é¡¼: .bb ¥Õ¥¡¥¤¥ë %s ¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤¬Â¿¤¹¤®¤Þ¤¹\n"
+
+#~ msgid "%6.2f%% of %d source lines executed in file %s\n"
+#~ msgstr "%6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No executable source lines in file %s\n"
+#~ msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%6.2f%% of %d branches executed in file %s\n"
+#~ msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "%6.2f%% of %d branches taken at least once in file %s\n"
+#~ msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ì²ó¤Ï¥Õ¥¡¥¤¥ë %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No branches in file %s\n"
+#~ msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¤Ï¥Ö¥é¥ó¥Á¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%6.2f%% of %d calls executed in file %s\n"
+#~ msgstr "%6.2f%%(%d ²óÃæ) ¤Î¸Æ¤Ó½Ð¤·¤¬¥Õ¥¡¥¤¥ë %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n"
+
+#~ msgid "No calls in file %s\n"
+#~ msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿.\n"
+
+#~ msgid "Could not open output file %s.\n"
+#~ msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿.\n"
+
+#~ msgid "Creating %s.\n"
+#~ msgstr "%s ¤òºîÀ®Ãæ.\n"
+
+#~ msgid "call %d never executed\n"
+#~ msgstr "¸Æ¤Ó½Ð¤· %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤»¤º\n"
+
+#~ msgid "call %d returns = %d\n"
+#~ msgstr "¸Æ¤Ó½Ð¤· %d ¤ÎÌá¤ê = %d\n"
+
+#~ msgid "call %d returns = %d%%\n"
+#~ msgstr "¸Æ¤Ó½Ð¤· %d ¤ÎÌá¤ê = %d%%\n"
+
+#~ msgid "branch %d never executed\n"
+#~ msgstr "¥Ö¥é¥ó¥Á %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤µ¤ì¤º\n"
+
+#~ msgid "branch %d taken = %d\n"
+#~ msgstr "¥Ö¥é¥ó¥Á %d ¼õÍý = %d\n"
+
+#~ msgid "branch %d taken = %d%%\n"
+#~ msgstr "¥Ö¥é¥ó¥Á %d ¼õÍý = %d%%\n"
+
+#~ msgid "Unexpected EOF while reading source file %s.\n"
+#~ msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤òÆɤ߹þ¤ßÃæ¤Ëͽ´ü¤»¤Ì EOF.\n"
+
+#~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+#~ msgstr "GCSE ¤ò̵¸ú²½: %d > 1000 ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d >= 20 edge/´ðËÜ¥Ö¥í¥Ã¥¯"
+
+#~ msgid "GCSE disabled: %d basic blocks and %d registers"
+#~ msgstr "GCSE ¤ò̵¸ú²½: %d ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d ¸Ä¤Î¥ì¥¸¥¹¥¿"
+
+#~ msgid "fix_sched_param: unknown param: %s"
+#~ msgstr "fix_sched_param: ÉÔÌÀ¤Ê¥Ñ¥é¥á¥¿: %s"
+
+#~ msgid "function cannot be inline"
+#~ msgstr "´Ø¿ô¤ò inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "varargs function cannot be inline"
+#~ msgstr "²ÄÊÑ°ú¿ô´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function using alloca cannot be inline"
+#~ msgstr "alloca ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function using setjmp cannot be inline"
+#~ msgstr "setjmp ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function uses __builtin_eh_return"
+#~ msgstr "´Ø¿ô¤¬ __builtin_eh_return ¤ò»È¤¤¤Þ¤¹"
+
+#~ msgid "function with nested functions cannot be inline"
+#~ msgstr "Æþ¤ì»Ò´Ø¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with label addresses used in initializers cannot inline"
+#~ msgstr "¥é¥Ù¥ë¥¢¥É¥ì¥¹¤ò»ý¤Á¡¢½é´ü²½»Ò¤Ç»È¤ï¤ì¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function too large to be inline"
+#~ msgstr "´Ø¿ô¤¬Â礭¤¹¤®¤Æ inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "no prototype, and parameter address used; cannot be inline"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤¬¤Ê¤¯¡¢²¾°ú¿ô¤Î¥¢¥É¥ì¥¹¤¬»È¤ï¤ì¤Æ¤¤¤ë -- inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "inline functions not supported for this return value type"
+#~ msgstr "¤³¤ÎÌá¤êÃÍ·¿¤Î inline ´Ø¿ô¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "function with varying-size return value cannot be inline"
+#~ msgstr "²ÄÊÑŤÎÌá¤êÃͤòÊÖ¤¹´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with varying-size parameter cannot be inline"
+#~ msgstr "²ÄÊÑĹ°ú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with transparent unit parameter cannot be inline"
+#~ msgstr "Æ©²á¶¦ÍÑÂΤΰú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with computed jump cannot inline"
+#~ msgstr "»»½Ð¤µ¤ì¤¿¥¸¥ã¥ó¥×¤ò¹Ô¤Ê¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with nonlocal goto cannot be inline"
+#~ msgstr "Èó¥í¡¼¥«¥ë goto ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "function with target specific attribute(s) cannot be inlined"
+#~ msgstr "¥¿¡¼¥²¥Ã¥È¸Çͭ°À­Éդδؿô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "internal error in check-init: tree code not implemented: %s"
+#~ msgstr "check-init ¤ÇÆâÉô¥¨¥é¡¼: ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s"
+
+#~ msgid "internal error - too many interface type"
+#~ msgstr "ÆâÉô¥¨¥é¡¼ - interface ·¿¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid "bad method signature"
+#~ msgstr "ÉÔÀµ¤Ê¥á¥½¥Ã¥É¥·¥°¥Í¥¤¥Á¥ã¤Ç¤¹"
+
+#~ msgid "misplaced ConstantValue attribute (not in any field)"
+#~ msgstr "ConstantValue Â°À­¤Î¾ì½ê¤ò´Ö°ã¤¨¤Æ¤¤¤Þ¤¹¡Ê¤É¤Î¥Õ¥£¡¼¥ë¥É¤Ç¤â¤¢¤ê¤Þ¤»¤ó¡Ë"
+
+#~ msgid "duplicate ConstanValue atribute for field '%s'"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É '%s' ¤Î ConstantValue Â°À­¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "field '%s' not found in class"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É '%s' ¤¬¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "abstract method in non-abstract class"
+#~ msgstr "abstract ¥á¥½¥Ã¥É¤¬ÈóÃê¾Ý¥¯¥é¥¹¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "non-static method '%s' overrides static method"
+#~ msgstr "ÈóÀÅŪ¥á¥½¥Ã¥É '%s' ¤¬ÀÅŪ¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "In %s: overlapped variable and exception ranges at %d"
+#~ msgstr "%s Æâ: ÊÑ¿ô¤ÈÎã³°ÈϰϤ¬ %d ¤Ç½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "bad type in parameter debug info"
+#~ msgstr "²¾°ú¿ô¥Ç¥Ð¥Ã¥°¾ðÊó¤ËÉÔÀµ¤Ê·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "bad PC range for debug info for local `%s'"
+#~ msgstr "¥í¡¼¥«¥ë¤Î `%s' ÍѥǥХå°¾ðÊó¤Î¤¿¤á¤Î PC ÈϰϤ¬ÉÔÀµ¤Ç¤¹"
+
+#~ msgid "stack underflow - dup* operation"
+#~ msgstr "¥¹¥¿¥Ã¥¯¥¢¥ó¥À¡¼¥Õ¥í¡¼ - dup* Áàºî"
+
+#~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'"
+#~ msgstr "»²¾È `%s' ¤ÏÛ£Ëæ¤Ç¤¹: interface `%s' ¤È interface `%s' ¤Ë¸½¤ì¤Þ¤·¤¿"
+
+#~ msgid "field `%s' not found"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "ret instruction not implemented"
+#~ msgstr "ret Ì¿Îá¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "method '%s' not found in class"
+#~ msgstr "¥á¥½¥Ã¥É '%s' ¤Ï¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "failed to find class '%s'"
+#~ msgstr "'%s' ¥¯¥é¥¹¤ò¸«¤Ä¤±¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#~ msgid "Class '%s' has no method named '%s' matching signature '%s'"
+#~ msgstr "¥¯¥é¥¹ '%s' ¤Ï̾Á°¤¬ '%s' ¤Ç¥·¥°¥Í¥¤¥Á¥ã '%s' ¤È°ìÃפ¹¤ë¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "invokestatic on non static method"
+#~ msgstr "ÈóÀÅŪ¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿"
+
+#~ msgid "invokestatic on abstract method"
+#~ msgstr "Ãê¾Ý¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿"
+
+#~ msgid "invoke[non-static] on static method"
+#~ msgstr "ÀÅŪ¥á¥½¥Ã¥É¤Ë invoke[Èó static] ¤·¤Þ¤·¤¿"
+
+#~ msgid "Missing field '%s' in '%s'"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É '%s'('%s' Æâ) ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Mismatching signature for field '%s' in '%s'"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É '%s'('%s' Æâ) ¤Î¥·¥°¥Í¥¤¥Á¥ã¤¬°ìÃפ·¤Þ¤»¤ó"
+
+#~ msgid "assignment to final field `%s' not in field's class"
+#~ msgstr "final ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "assignment to final static field `%s' not in class initializer"
+#~ msgstr "final static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "assignment to final field `%s' not in constructor"
+#~ msgstr "final ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "Can't expand %s"
+#~ msgstr "%s ¤òŸ³«¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "invalid PC in line number table"
+#~ msgstr "̵¸ú¤Ê PC ¤¬¹ÔÈÖ¹æ¥Æ¡¼¥Ö¥ë¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "Unreachable bytecode from %d to before %d."
+#~ msgstr "%d ¤«¤é %d ¤ÎÁ°¤Þ¤Ç¤Î¥Ð¥¤¥È¥³¡¼¥É¤Ë¤ÏÅþã¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Unreachable bytecode from %d to the end of the method."
+#~ msgstr "%d ¤«¤é¥á¥½¥Ã¥É¤Î½ª¤ê¤Þ¤Ç¤Î¥Ð¥¤¥È¥³¡¼¥É¤Ë¤ÏÅþã¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "unrecogized wide sub-instruction"
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ wide sub Ì¿Îá¤Ç¤¹"
+
+#~ msgid "Source file for class `%s' is newer than its matching class file. Source file used instead"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¡¢°ìÃפ¹¤ë¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤è¤ê¿·¤·¤¤¤Ç¤¹¡£¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤òÂå¤ê¤Ë»È¤¤¤Þ¤¹"
+
+#~ msgid "bad string constant"
+#~ msgstr "ÉÔÀµ¤Êʸ»úÎóÄê¿ô¤Ç¤¹"
+
+#~ msgid "bad value constant type %d, index %d"
+#~ msgstr "ÉÔÀµ¤ÊÄê¿ôÃÍ·¿ %d, ¥¤¥ó¥Ç¥Ã¥¯¥¹ %d"
+
+#~ msgid "can't reopen %s"
+#~ msgstr "%s ¤òºÆ open ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Cannot find file for class %s."
+#~ msgstr "¥¯¥é¥¹ %s ÍѤΥե¡¥¤¥ë¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£"
+
+#~ msgid "not a valid Java .class file"
+#~ msgstr "Àµ¾ï¤Ê Java .class ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "error while parsing constant pool"
+#~ msgstr "constant ¥×¡¼¥ë¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#~ msgid "error in constant pool entry #%d\n"
+#~ msgstr "constant ¥×¡¼¥ë¹àÌÜ #%d Æâ¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n"
+
+#~ msgid "reading class %s for the second time from %s"
+#~ msgstr "class %s ¤òÆɹþ¤à¤Î¤Ï %s ¤«¤éÆó²óÌܤˤʤê¤Þ¤¹"
+
+#~ msgid "error while parsing fields"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#~ msgid "error while parsing methods"
+#~ msgstr "¥á¥½¥Ã¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#~ msgid "error while parsing final attributes"
+#~ msgstr "final Â°À­¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#~ msgid "The `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath."
+#~ msgstr "`%s' Æâ¤Ç¸«¤Ä¤«¤Ã¤¿ `java.lang.Object' ¤Ï¡¢Ä¹¤µ¥¼¥í¤ÎÆÃÊ̤ʠ`gnu.gcj.gcj-compiled' Â°À­¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£¤³¤ì¤ÏÉáÄ̤¢¤Ê¤¿¤Î¥¯¥é¥¹¥Ñ¥¹¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»ö¤ò°ÕÌ£¤·¤Þ¤¹¡£`info gcj \"Input Options\"' ¤ò»È¤Ã¤Æ¡¢¥¯¥é¥¹¥Ñ¥¹¤ÎÀßÄêÊýË¡¤òÀâÌÀ¤·¤Æ¤¢¤ë info ¥Ú¡¼¥¸¤ò¸«¤Æ²¼¤µ¤¤"
+
+#~ msgid "missing Code attribute"
+#~ msgstr "Code Â°À­¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "error closing %s"
+#~ msgstr "¥¨¥é¡¼¤Ë¤è¤ê %s ¤òÊĤ¸¤Þ¤¹"
+
+#~ msgid "source file seen twice on command line and will be compiled only once."
+#~ msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¥³¥Þ¥ó¥É¥é¥¤¥ó¤ËºÆ¤Ó¸½¤ì¤Þ¤·¤¿¤¬¡¢¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¤Î¤Ï°ìÅÙ¤À¤±¤Ç¤¹"
+
+#~ msgid "no input file specified"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "can't close input file %s"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤ò close ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Premature end of input file %s"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤Î½ª¤ê¤Ë㤹¤ë¤Î¤¬Á᤹¤®¤Þ¤¹"
+
+#~ msgid "bad zip/jar file %s"
+#~ msgstr "zip/jar ¥Õ¥¡¥¤¥ë %s ¤ÏÉÔÀµ¤Ç¤¹"
+
+#~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s"
+#~ msgstr "generate_bytecode_insn ¤ÇÆâÉô¥¨¥é¡¼ - ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s"
+
+#~ msgid "can't create directory %s"
+#~ msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "can't to open %s"
+#~ msgstr "%s ¤ò open ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Only one of `--print-main', `--list-class', and `--complexity' allowed"
+#~ msgstr "`--print-main', `--list-class', `--complexity' ¤«¤é¤Ï°ì¤Ä¤·¤«Áª¤Ù¤Þ¤»¤ó"
+
+#~ msgid "Can't open output file `%s'"
+#~ msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤ò open ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "File not found `%s'"
+#~ msgstr "¥Õ¥¡¥¤¥ë `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "can't specify `-D' without `--main'\n"
+#~ msgstr "`--main' Ìµ¤·¤Ç¤Ï `-D' ¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó\n"
+
+#~ msgid "Warning: already-compiled .class files ignored with -C"
+#~ msgstr "·Ù¹ð: ¥³¥ó¥Ñ¥¤¥ëºÑ .class ¥Õ¥¡¥¤¥ë¤Ï -C ¤Ë¤è¤ê̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "-C ¤È -o ¤ÏξÊý¤ò°ì½ï¤Ë»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "cannot create temporary file"
+#~ msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "using both @FILE with multiple files not implemented"
+#~ msgstr "@FILE ¤Ç¤ÎÊ£¿ô¥Õ¥¡¥¤¥ë¤Î»ÈÍѤϼÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "cannot specify `main' class when not linking"
+#~ msgstr "¥ê¥ó¥¯»þ°Ê³°¤Ë¤Ï `main' ¥¯¥é¥¹¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Disable automatic array bounds checking"
+#~ msgstr "¼«Æ°Åª¤ÊÇÛÎó¶­³¦¸¡ºº¤ò¹Ô¤ï¤Ê¤¤"
+
+#~ msgid "Make is_compiled_class return 1"
+#~ msgstr "is_compiled_class ¤¬ 1 ¤òÊÖ¤¹¤è¤¦¤Ë¤¹¤ë"
+
+#~ msgid "Dump class files to <name>.class"
+#~ msgstr "¥¯¥é¥¹¤ò <name>.class ¥Õ¥¡¥¤¥ë¤Ø¥À¥ó¥×¤¹¤ë"
+
+#~ msgid "input file is list of file names to compile"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¥Õ¥¡¥¤¥ë̾¤Î¥ê¥¹¥È¤È¤¹¤ë"
+
+#~ msgid "Generate code for Boehm GC"
+#~ msgstr "Boehm GC ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Don't put synchronization structure in each object"
+#~ msgstr "Ʊ´ü¹½Â¤ÂΤò³Æ¥ª¥Ö¥¸¥§¥¯¥È¤ËÁȤßÆþ¤ì¤Ê¤¤"
+
+#~ msgid "Assume native functions are implemented using JNI"
+#~ msgstr "native ´Ø¿ô¤¬ JNI ¤òÍøÍѤ·¤Æ¼ÂÁõ¤·¤Æ¤¤¤ë¤â¤Î¤È¤ß¤Ê¤¹"
+
+#~ msgid "Set class path and suppress system path"
+#~ msgstr "¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤷ¤Æ¥·¥¹¥Æ¥à¥Ñ¥¹¤ò±£¤¹"
+
+#~ msgid "Set class path"
+#~ msgstr "¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤹ¤ë"
+
+#~ msgid "Choose class whose main method should be used"
+#~ msgstr "main ¥á¥½¥Ã¥É¤¬»È¤ï¤ì¤ë¤Ù¤­¥¯¥é¥¹¤òÁªÂò¤¹¤ë"
+
+#~ msgid "Choose input encoding (default is UTF-8)"
+#~ msgstr "ÆþÎÏ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÁªÂò¤¹¤ë(¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï UTF-8)"
+
+#~ msgid "Add directory to class path"
+#~ msgstr "¥¯¥é¥¹¥Ñ¥¹¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÄɲ乤ë"
+
+#~ msgid "Directory where class files should be written"
+#~ msgstr "¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤¬½ñ¤­¹þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê"
+
+#~ msgid "Use built-in instructions for division"
+#~ msgstr "ÁȤ߹þ¤ß¤Î½ü»»Ì¿Îá¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Warn if modifiers are specified when not necessary"
+#~ msgstr "»ØÄꤵ¤ì¤¿½¤¾þ»Ò¤¬ÉÔÍפʤâ¤Î¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn if deprecated empty statements are found"
+#~ msgstr "¿ä¾©¤µ¤ì¤Ê¤¤¶õʸ¤¬¸«¤Ä¤«¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn if .class files are out of date"
+#~ msgstr ".class ¥Õ¥¡¥¤¥ë¤¬¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤è¤ê¸Å¤±¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Always check for non gcj generated classes archives"
+#~ msgstr "gcj ¤¬À¸À®¤·¤Æ¤¤¤Ê¤¤¥¯¥é¥¹¥¢¡¼¥«¥¤¥Ö¤ò¾ï¤Ë¸¡ºº¤¹¤ë"
+
+#~ msgid "can't do dependency tracking with input from stdin"
+#~ msgstr "ɸ½àÆþÎϤ«¤é¤ÎÆþÎϤǤϰ͸´Ø·¸¤ÎÄÉÀפ¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid ""
+#~ "unknown encoding: `%s'\n"
+#~ "This might mean that your locale's encoding is not supported\n"
+#~ "by your system's iconv(3) implementation.  If you aren't trying\n"
+#~ "to use a particular encoding for your input file, try the\n"
+#~ "`--encoding=UTF-8' option."
+#~ msgstr ""
+#~ "ÉÔÌÀ¤Ê¥¨¥ó¥³¡¼¥É: `%s'\n"
+#~ "¤³¤ì¤Ï¤¢¤Ê¤¿¤Î¥í¥±¡¼¥ë¤Î¥¨¥ó¥³¡¼¥É¤¬¥·¥¹¥Æ¥à¤Î iconv(3) ¼ÂÁõ¤¬\n"
+#~ "¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤È±¾¤¦»ö¤ò°ÕÌ£¤·¤Þ¤¹¡£¤â¤·¤¢¤Ê¤¿¤¬ÆþÎÏ¥Õ¥¡¥¤¥ë\n"
+#~ "¤ÎÆÃÄꥨ¥ó¥³¡¼¥É¤ò»È¤¦¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢`--encoding=UTF-8' ¥ª¥×¥·¥ç¥ó\n"
+#~ "¤ò»È¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£"
+
+#~ msgid "Can't mangle %s"
+#~ msgstr "%s ¤Î̾Á°ÊÑ´¹(mangle) ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "internal error - invalid Utf8 name"
+#~ msgstr "ÆâÉô¥¨¥é¡¼ - Ìµ¸ú¤Ê Utf8 Ì¾¤Ç¤¹"
+
+#~ msgid "Missing name"
+#~ msgstr "̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "';' expected"
+#~ msgstr "';' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "'*' expected"
+#~ msgstr "'*' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Class or interface declaration expected"
+#~ msgstr "¥¯¥é¥¹¤ä¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬É¬ÍפǤ¹"
+
+#~ msgid "Missing class name"
+#~ msgstr "¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "'{' expected"
+#~ msgstr "'{' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Missing super class name"
+#~ msgstr "¥¹¡¼¥Ñ¡¼¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing interface name"
+#~ msgstr "¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing term"
+#~ msgstr "¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing variable initializer"
+#~ msgstr "ÊÑ¿ô½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Invalid declaration"
+#~ msgstr "̵¸ú¤ÊÀë¸À¤Ç¤¹"
+
+#~ msgid "Can't specify array dimension in a declaration"
+#~ msgstr "ÇÛÎó¤Î¼¡¸µ¤òÀë¸À¤Ç»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "']' expected"
+#~ msgstr "']' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Unbalanced ']'"
+#~ msgstr "Âбþ¤Î¤Ê¤¤ ']' ¤Ç¤¹"
+
+#~ msgid "Invalid method declaration, method name required"
+#~ msgstr "̵¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹"
+
+#~ msgid "Identifier expected"
+#~ msgstr "¼±Ê̻Ҥ¬É¬ÍפǤ¹"
+
+#~ msgid "Invalid method declaration, return type required"
+#~ msgstr "̵¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹"
+
+#~ msgid "')' expected"
+#~ msgstr "')' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Missing formal parameter term"
+#~ msgstr "Àµ¼°¤Ê²¾°ú¿ô¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing identifier"
+#~ msgstr "¼±Ê̻Ҥò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing class type term"
+#~ msgstr "¥¯¥é¥¹¥¿¥¤¥×¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Invalid interface type"
+#~ msgstr "¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹·¿¤¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "':' expected"
+#~ msgstr "':' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Invalid expression statement"
+#~ msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "'(' expected"
+#~ msgstr "'(' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Missing term or ')'"
+#~ msgstr "¹à¤Þ¤¿¤Ï ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Missing term and ')' expected"
+#~ msgstr "¹à¤Èɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Invalid control expression"
+#~ msgstr "̵¸ú¤ÊÀ©¸æ¼°¤Ç¤¹"
+
+#~ msgid "Invalid update expression"
+#~ msgstr "̵¸ú¤Ê¹¹¿·¼°¤Ç¤¹"
+
+#~ msgid "Invalid init statement"
+#~ msgstr "̵¸ú¤Ê½é´ü²½¼°¤Ç¤¹"
+
+#~ msgid "Missing term or ')' expected"
+#~ msgstr "¹à¤Þ¤¿¤Ïɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "'class' or 'this' expected"
+#~ msgstr "'class' ¤Þ¤¿¤Ï 'this' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "'class' expected"
+#~ msgstr "'class' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "')' or term expected"
+#~ msgstr "')' ¤Þ¤¿¤Ï¹à¤¬É¬ÍפǤ¹"
+
+#~ msgid "'[' expected"
+#~ msgstr "'[' ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Field expected"
+#~ msgstr "¥Õ¥£¡¼¥ë¥É¤¬É¬ÍפǤ¹"
+
+#~ msgid "Missing term and ']' expected"
+#~ msgstr "¹à¤Èɬ¿Ü¤Î ']' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "']' expected, invalid type expression"
+#~ msgstr "']' ¤¬É¬Íפǡ¢Ìµ¸ú¤Ê·¿É½¸½¤Ç¤¹"
+
+#~ msgid "Invalid type expression"
+#~ msgstr "̵¸ú¤Ê·¿É½¸½¤Ç¤¹"
+
+#~ msgid "Invalid reference type"
+#~ msgstr "̵¸ú¤Ê»²¾È·¿¤Ç¤¹"
+
+#~ msgid "Constructor invocation must be first thing in a constructor"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Îµ¯Æ°¤Ï¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤ÇºÇ½é¤Ë¹Ô¤Ê¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Only constructors can invoke constructors"
+#~ msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤¬¥³¥ó¥¹¥È¥é¥¯¥¿¤òµ¯Æ°¤Ç¤­¤Þ¤¹"
+
+#~ msgid ": `%s' JDK1.1(TM) feature"
+#~ msgstr ": `%s' ¤Ï JDK1.1(TM) ¤Îµ¡Ç½¤Ç¤¹"
+
+#~ msgid ""
+#~ "%s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s.\n"
+#~ "%s"
+
+#~ msgid "Can't use '$' as a separator for inner classes"
+#~ msgstr "'$' ¤ÏÆâÉô¥¯¥é¥¹¤Î¶èÀÚ¤ê»Ò¤È¤·¤Æ»ÈÍѤǤ­¤Þ¤»¤ó"
+
+#~ msgid "malformed .zip archive in CLASSPATH: %s"
+#~ msgstr "CLASSPATH Æâ¤ËÊѤʠ.zip ¥¢¡¼¥«¥¤¥Ö¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives."
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È¥Ñ¥Ã¥±¡¼¥¸ `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£CLASSPATH ´Ä¶­ÊÑ¿ô¤È¥¢¡¼¥«¥¤¥Ö¤Ø¤Î¥¢¥¯¥»¥¹¤ò³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£"
+
+#~ msgid "missing static field `%s'"
+#~ msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "not a static field `%s'"
+#~ msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "No case for %s"
+#~ msgstr "%s ¤Î¤¿¤á¤Î case ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "unregistered operator %s"
+#~ msgstr "ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤±é»»»Ò %s ¤Ç¤¹"
+
+#~ msgid "internal error - use of undefined type"
+#~ msgstr "ÆâÉô¥¨¥é¡¼ - Ì¤ÄêµÁ·¿¤Î»ÈÍѤǤ¹"
+
+#~ msgid "junk at end of signature string"
+#~ msgstr "¥·¥°¥Í¥¤¥Á¥ãʸ»úÎó¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "bad pc in exception_table"
+#~ msgstr "exception_table ¤ËÉÔÀµ¤Ê pc ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "unknown opcode %d@pc=%d during verification"
+#~ msgstr "ÉÔÌÀ¤Ê opcode %d@pc=%d ¤ò¸¡¾ÚÃæ¤Ëȯ¸«¤·¤Þ¤·¤¿"
+
+#~ msgid "verification error at PC=%d"
+#~ msgstr "¸¡¾Ú¥¨¥é¡¼ (PC=%d)"
+
+#~ msgid "Dump decls to a .decl file"
+#~ msgstr "Àë¸À¤ò .decl ¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ë"
+
+#~ msgid "Generate code for GNU runtime environment"
+#~ msgstr "GNU ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate code for NeXT runtime environment"
+#~ msgstr "NeXT ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Warn if a selector has multiple methods"
+#~ msgstr "¥»¥ì¥¯¥¿¤¬Ê£¿ô¤Î¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Do not warn if inherited methods are unimplemented"
+#~ msgstr "ÇÉÀ¸¥á¥½¥Ã¥É¤¬Ì¤¼ÂÁõ¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Generate C header of platform specific features"
+#~ msgstr "¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Îµ¡Ç½¤Î C ¥Ø¥Ã¥À¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Specify the name of the class for constant strings"
+#~ msgstr "Äê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë"
+
+#~ msgid "no class name specified as argument to -fconstant-string-class"
+#~ msgstr "-fconstant-string-class ¤Ë°ú¿ô¤È¤·¤Æ»ØÄꤵ¤ì¤¿¥¯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "object does not conform to the `%s' protocol"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¤¬ `%s' ¥×¥í¥È¥³¥ë¤ËŬ¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "class `%s' does not implement the `%s' protocol"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "`%s' cannot be statically allocated"
+#~ msgstr "`%s' ¤òÀÅŪ¤Ë³ÎÊݤǤ­¤Þ¤»¤ó"
+
+#~ msgid "Unexpected type for `id' (%s)"
+#~ msgstr "ͽ´ü¤·¤Ê¤¤·¿¤¬ `id' (%s) ¤Ë»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "Undefined type `id', please import <objc/objc.h>"
+#~ msgstr "`id' ·¿¤¬Ì¤ÄêµÁ¤Ç¤¹¡£<objc/objc.h> ¤ò import ¤·¤Æ²¼¤µ¤¤"
+
+#~ msgid "Cannot find protocol declaration for `%s'"
+#~ msgstr "`%s' ¤ËÂФ¹¤ë¥×¥í¥È¥³¥ëÀë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "Cannot find interface declaration for `%s'"
+#~ msgstr "`%s' ¤ËÂФ¹¤ë¥¤¥ó¥¿¥Õ¥§¡¼¥¹Àë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "Cannot find class `%s'"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "Cannot find interface declaration for `%s', superclass of `%s'"
+#~ msgstr "`%s' ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡Ê`%s' ¤Î´ðÄ쥯¥é¥¹¤Ç¤¹¡Ë"
+
+#~ msgid "Circular inheritance in interface declaration for `%s'"
+#~ msgstr "`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½Û´ÄŪ¤Ê·Ñ¾µ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "inconsistent instance variable specification"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤Î»ÅÍͤ¬°ì´Ó¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "multiple declarations for method `%s'"
+#~ msgstr "¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "invalid receiver type `%s'"
+#~ msgstr "¥ì¥·¡¼¥Ð·¿ `%s' ¤¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "`%s' does not respond to `%s'"
+#~ msgstr "`%s' ¤Ï `%s' ¤Ë±þÅú¤·¤Þ¤»¤ó"
+
+#~ msgid "no super class declared in interface for `%s'"
+#~ msgstr "`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë´ðÄ쥯¥é¥¹¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "cannot find class (factory) method."
+#~ msgstr "¥¯¥é¥¹ (factory) ¥á¥½¥Ã¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "return type for `%s' defaults to id"
+#~ msgstr "`%s' ¤ÎÌá¤êÃͤη¿¤Ï¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹"
+
+#~ msgid "method `%s' not implemented by protocol."
+#~ msgstr "¥á¥½¥Ã¥É `%s' ¤Ï¥×¥í¥È¥³¥ë¤Ë¤è¤Ã¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "return type defaults to id"
+#~ msgstr "Ìá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹"
+
+#~ msgid "cannot find method."
+#~ msgstr "¥á¥½¥Ã¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#~ msgid "instance variable `%s' accessed in class method"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤¬¥¯¥é¥¹¥á¥½¥Ã¥É¤«¤é¥¢¥¯¥»¥¹¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "duplicate definition of class method `%s'."
+#~ msgstr "¥¯¥é¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "duplicate declaration of class method `%s'."
+#~ msgstr "¥¯¥é¥¹¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "duplicate definition of instance method `%s'."
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "duplicate declaration of instance method `%s'."
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#~ msgid "duplicate interface declaration for category `%s(%s)'"
+#~ msgstr "¥«¥Æ¥´¥ê `%s(%s)' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "instance variable `%s' is declared private"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï private ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "instance variable `%s' is declared %s"
+#~ msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï %s ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "static access to object of type `id'"
+#~ msgstr "`id' ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂΤ¹¤ëÀÅŪ¥¢¥¯¥»¥¹¤Ç¤¹"
+
+#~ msgid "incomplete implementation of class `%s'"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "incomplete implementation of category `%s'"
+#~ msgstr "¥«¥Æ¥´¥ê `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹"
+
+#~ msgid "method definition for `%c%s' not found"
+#~ msgstr "`%c%s' ¤Î¥á¥½¥Ã¥ÉÄêµÁ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "%s `%s' does not fully implement the `%s' protocol"
+#~ msgstr "%s `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò´°Á´¤Ë¤Ï¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "reimplementation of class `%s'"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤ÎºÆ¼ÂÁõ¤Ç¤¹"
+
+#~ msgid "conflicting super class name `%s'"
+#~ msgstr "´ðÄ쥯¥é¥¹Ì¾ `%s' ¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "duplicate interface declaration for class `%s'"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "duplicate declaration for protocol `%s'"
+#~ msgstr "¥×¥í¥È¥³¥ë '%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "[super ...] must appear in a method context"
+#~ msgstr "[super ...] ¤Ï¥á¥½¥Ã¥É¥³¥ó¥Æ¥­¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "potential selector conflict for method `%s'"
+#~ msgstr "²ÄǽÀ­¤Î¤¢¤ë¥»¥ì¥¯¥¿¤¬¥á¥½¥Ã¥É `%s' ¤È¶¥¹ç¤·¤Þ¤¹"
+
+#~ msgid "`@end' must appear in an implementation context"
+#~ msgstr "`@end' ¤Ï¼ÂÁõ¥³¥ó¥Æ¥¯¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "method definition not in class context"
+#~ msgstr "¥á¥½¥Ã¥ÉÄêµÁ¤¬¥¯¥é¥¹¥³¥ó¥Æ¥­¥¹¥ÈÆâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "syntax error at '@' token"
+#~ msgstr "'@' ¥È¡¼¥¯¥ó¤Çʸˡ¥¨¥é¡¼"
+
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹"
+
+#~ msgid "Arc profiling: some edge counts were bad."
+#~ msgstr "¸Ì(arc)¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°: ´ö¤Ä¤«¤Î edge ¥«¥¦¥ó¥È¤ÏÉÔÀµ¤Ç¤¹¡£"
+
+#~ msgid "file %s not found, execution counts assumed to be zero."
+#~ msgstr "¥Õ¥¡¥¤¥ë %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¼Â¹Ô¥«¥¦¥ó¥È¤Ï¥¼¥í¤È¸«¤Ê¤·¤Þ¤¹"
+
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s: ÆâÉôÃæÃÇ\n"
+
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Ë½ñ¤­¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s: »ÈÍÑË¡ '%s [ -VqfnkN ] [ -i <istring> ] [ ¥Õ¥¡¥¤¥ë̾ ... ]'\n"
+
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s: »ÈÍÑË¡ '%s [ -VqfnkNlgC ] [ -B <¥Ç¥£¥ì¥¯¥È¥ê̾> ] [ ¥Õ¥¡¥¤¥ë̾ ... ]'\n"
+
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤ÆÆɤ߽Ф·µö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: warning: no write access for dir containing `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: `%s' ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s: Ìµ¸ú¤Ê¥Õ¥¡¥¤¥ë̾: %s\n"
+
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s: %s: ¾õÂÖ¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: fatal error: aux info file corrupted at line %d\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: Ã×̿Ū¥¨¥é¡¼: Éû info ¥Õ¥¡¥¤¥ë¤¬ %d ¹ÔÌܤDzõ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s:%d: declaration of function `%s' takes different forms\n"
+#~ msgstr "%s:%d: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬Ê̤ηÁ¤ò¼è¤Ã¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: compiling `%s'\n"
+#~ msgstr "%s: `%s' ¤ò¥³¥ó¥Ñ¥¤¥ëÃæ\n"
+
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s: ÂÔ¤Á: %s\n"
+
+#~ msgid "%s: subprocess got fatal signal %d\n"
+#~ msgstr "%s: ¥µ¥Ö¥×¥í¥»¥¹¤¬Ã×̿Ū¥·¥°¥Ê¥ë %d ¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿\n"
+
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s: %s ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿\n"
+
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: SYSCALLS ¥Õ¥¡¥¤¥ë `%s' ¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆɤळ¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆɤ߹þ¤ßÍѤ˳«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆɤ߹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n"
+
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÊĤ¸¤Æ¤¤¤ëºÇÃæ¤Ë¥¨¥é¡¼: %s\n"
+
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' Ì¾Á°Êѹ¹¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: conflicting extern definitions of '%s'\n"
+#~ msgstr "%s: '%s' ¤Î³°ÉôÄêµÁ¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: declarations of '%s' will not be converted\n"
+#~ msgstr "%s: '%s' ¤ÎÀë¸À¤ÏÊÑ´¹¤µ¤ì¤Þ¤»¤ó\n"
+
+#~ msgid "%s: conflict list for '%s' follows:\n"
+#~ msgstr "%s: `%s' ¤ËÂФ¹¤ëÌ·½â°ìÍ÷¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹:\n"
+
+#~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: %s(%d) ¤«¤é¤Î·Á¼°¥ê¥¹¥È¤ò¡¢´Ø¿ô `%s' ¤Î°Ù¤Ë»È¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+#~ msgstr "%s: %d: `%s' ¤Ï»È¤ï¤ì¤Æ¤¤¤Þ¤¹¤¬ SYSCALLS ¤Ë¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s: %d: ·Ù¹ð: `%s' ¤ËÂФ¹¤ë³°ÉôÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: multiple static defs of `%s' in file `%s'\n"
+#~ msgstr "%s: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ç½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: %d: warning: source too confusing\n"
+#~ msgstr "%s: %d: ·Ù¹ð: ¥½¡¼¥¹¤¬º®Í𤷤¹¤®¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: %d: warning: varargs function declaration not converted\n"
+#~ msgstr "%s: %d: ·Ù¹ð: varargs ´Ø¿ôÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: declaration of function `%s' not converted\n"
+#~ msgstr "%s: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬Â¿¤¹¤®¤Þ¤¹\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬¾¯¤Ê¤¹¤®¤Þ¤¹\n"
+
+#~ msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+#~ msgstr "%s: %d: ·Ù¹ð: `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¤¬ `%s' ¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: local declaration for function `%s' not inserted\n"
+#~ msgstr "%s: ´Ø¿ô `%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: %d: warning: can't add declaration of `%s' into macro call\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: %d: ·Ù¹ð: `%s' ¤ÎÀë¸À¤ò¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤ËÄɲäǤ­¤Þ¤»¤ó\n"
+
+#~ msgid "%s: global declarations for file `%s' not inserted\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤ÎÂç°èÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: definition of function `%s' not converted\n"
+#~ msgstr "%s: ´Ø¿ô `%s' ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: %d: warning: definition of %s not converted\n"
+#~ msgstr "%s: %d: ·Ù¹ð: %s ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: found definition of `%s' at %s(%d)\n"
+#~ msgstr "%s: `%s' ¤ÎÄêµÁ¤¬ %s(%d) ¤Ë¸«¤Ä¤«¤ê¤Þ¤·¤¿\n"
+
+#~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+#~ msgstr "%s: %d: ·Ù¹ð: `%s' ¤Ï¥×¥ê¥×¥í¥»¥¹¤«¤é½ü³°¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: function definition not converted\n"
+#~ msgstr "%s: ´Ø¿ô¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s: `%s' ¤ÏÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s: `%s' ¤òÊÑ´¹¤·¤Þ¤¹\n"
+
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤òÊÑ´¹Ãæ\n"
+
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s: Æɤ߹þ¤ßÍѤ˥ե¡¥¤¥ë `%s' ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%s: ÆþÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òÆɤ߹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n"
+
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s: ¤­¤ì¤¤¤Ê¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®/¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤Ï´û¤Ë `%s' ¤ËÊݸ¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' ¤Ë¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "%s: ½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤·¤¿¤ê³«¤¤¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s: ºî¶È¥Ç¥£¥ì¥¯¥È¥ê¤¬Ê¬¤«¤ê¤Þ¤»¤ó: %s\n"
+
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s: ÆþÎÏ¥Õ¥¡¥¤¥ë̾¤Ë¤Ï³ÈÄ¥»Ò .c ¤¬¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó: %s\n"
+
+#~ msgid "conversion from NaN to int"
+#~ msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹"
+
+#~ msgid "floating point overflow"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#~ msgid "overflow on truncation to integer"
+#~ msgstr "À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿"
+
+#~ msgid "overflow on truncation to unsigned integer"
+#~ msgstr "Éä¹ç̵¤·À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿"
+
+#~ msgid "%s: argument domain error"
+#~ msgstr "%s: °ú¿ôÎΰ襨¥é¡¼¤Ç¤¹"
+
+#~ msgid "%s: function singularity"
+#~ msgstr "%s: ´Ø¿ô¤Îñ°ìÀ­"
+
+#~ msgid "%s: overflow range error"
+#~ msgstr "%s: ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼ÈÏ°Ï¥¨¥é¡¼"
+
+#~ msgid "%s: underflow range error"
+#~ msgstr "%s: ¥¢¥ó¥À¡¼¥Õ¥í¡¼ÈÏ°Ï¥¨¥é¡¼"
+
+#~ msgid "%s: total loss of precision"
+#~ msgstr "%s: Á´ÂÎŪ¤ÊÀºÅÙ¤ÎÄã²¼"
+
+#~ msgid "%s: partial loss of precision"
+#~ msgstr "%s: ÉôʬŪ¤ÊÀºÅÙ¤ÎÄã²¼"
+
+#~ msgid "%s: NaN - producing operation"
+#~ msgstr "%s: NaN - Áàºî¤òÀ¸¤¸¤Þ¤¹"
+
+#~ msgid "Output constraint %d must specify a single register"
+#~ msgstr "½ÐÎÏÀ©Ìó %d ¤Ï°ì¤Ä¤Î¥ì¥¸¥¹¥¿¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Output regs must be grouped at top of stack"
+#~ msgstr "½ÐÎϥ쥸¥¹¥¿¤Ï¥¹¥¿¥Ã¥¯¤Î¥È¥Ã¥×¤Ë¥°¥ë¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Implicitly popped regs must be grouped at top of stack"
+#~ msgstr "°ÅÌۤˠpop ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤Ï¥¹¥¿¥Ã¥¯¤Î¥È¥Ã¥×¤Ë¥°¥ë¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Output operand %d must use `&' constraint"
+#~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É %d ¤Ï `&' À©Ìó¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "can't use '%s' as a %s register"
+#~ msgstr "'%s' ¤ò %s ¤Î¥ì¥¸¥¹¥¿¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "global register variable follows a function definition"
+#~ msgstr "Âç°è register ÊÑ¿ô¤¬´Ø¿ôÄêµÁ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "register used for two global register variables"
+#~ msgstr "¥ì¥¸¥¹¥¿¤¬Æó¤Ä¤Î¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "call-clobbered register used for global register variable"
+#~ msgstr "¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤¬¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "cannot reload integer constant operand in `asm'"
+#~ msgstr "À°¿ôÄê¿ô¥ª¥Ú¥é¥ó¥É¤ò `asm' Æâ¤ÇºÆ¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "impossible register constraint in `asm'"
+#~ msgstr "`asm' Æâ¤Ç¤Ï¥ì¥¸¥¹¥¿À©Ìó¤ò¹Ô¤Ê¤¨¤Þ¤»¤ó"
+
+#~ msgid "`&' constraint used with no register class"
+#~ msgstr "`&' À©Ì󤬥쥸¥¹¥¿¥¯¥é¥¹Ìµ¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "inconsistent operand constraints in an `asm'"
+#~ msgstr "`asm' Æâ¤Ç¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "frame size too large for reliable stack checking"
+#~ msgstr "¥Õ¥ì¡¼¥à¥µ¥¤¥º¤¬Â礭¤¹¤®¤Æ¡¢¥¹¥¿¥Ã¥¯¸¡ºº¤¬¿®Íê¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "try reducing the number of local variables"
+#~ msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤Î¿ô¤òºï¸º¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "Can't find a register in class `%s' while reloading `asm'."
+#~ msgstr "¥¯¥é¥¹ `%s' Æâ¤Î¥ì¥¸¥¹¥¿¤ò `asm' ºÆ¥í¡¼¥ÉÃæ¤Ë¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "Unable to find a register to spill in class `%s'."
+#~ msgstr "¥¯¥é¥¹ `%s' Æâ¤Ç¤Õ¤ë¤¤Íî¤È¤¹¥ì¥¸¥¹¥¿¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "`asm' operand requires impossible reload"
+#~ msgstr "`asm' ¥ª¥Ú¥é¥ó¥É¤ÏºÆ¥í¡¼¥É¤Ç¤­¤Ê¤¤»ö¤¬Í׵ᤵ¤ì¤Þ¤¹"
+
+#~ msgid "`asm' operand constraint incompatible with operand size"
+#~ msgstr "`asm' ¥ª¥Ú¥é¥ó¥ÉÀ©Ì󤬥ª¥Ú¥é¥ó¥É¥µ¥¤¥º¤ÈÀ°¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "output operand is constant in `asm'"
+#~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹"
+
+#~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL ¸¡ºº: elt %d(%s) ¤¬ºÇ¸å¤Î elt %d(%s Ãæ) ¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)"
+
+#~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ)¤Ç¤¹ (%s:%d)"
+
+#~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤« '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ) ¤Ç¤¹ (%s:%d)"
+
+#~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)"
+
+#~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤« `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)"
+
+#~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+#~ msgstr "RTL check: ¥Ù¥¯¥È¥ë¤Î elt %d ¤òºÇ¸å¤Î elt %d (%s Ãæ)¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)"
+
+#~ msgid "jump to `%s' invalidly jumps into binding contour"
+#~ msgstr "`%s' ¤Ø¤Î¥¸¥ã¥ó¥×¤ÏÅ»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯Æâ¤Ø¡¢Ìµ¸ú¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "label `%s' used before containing binding contour"
+#~ msgstr "¥é¥Ù¥ë `%s' ¤¬Å»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯¤ò¹½À®¤¹¤ëÁ°¤Ë»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "`asm' cannot be used in function where memory usage is checked"
+#~ msgstr "`asm' ¤Ï´Ø¿ô¤Ç¥á¥â¥êÍøÍѤòÄ´¤Ù¤ë½ê¤Ç¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "`asm' cannot be used with `-fcheck-memory-usage'"
+#~ msgstr "`asm' ¤Ï `-fcheck-memory-usage' ¤È°ì½ï¤Ë»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "`asm' Ãæ¤ËÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾ `%s' ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "operand constraints for `asm' differ in number of alternatives"
+#~ msgstr "`asm' ¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬ÂåÂØÈÖ¹æ¤È¤Ï°Û¤Ê¤ê¤Þ¤¹"
+
+#~ msgid "output operand constraint lacks `='"
+#~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤Ë `=' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "output constraint `%c' for operand %d is not at the beginning"
+#~ msgstr "½ÐÎÏÀ©Ìó `%c' (operand %d ÍÑ) ¤¬³«»ÏÉôʬ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "output operand constraint %d contains `+'"
+#~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó %d ¤Ï `+' ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "operand constraint contains '+' or '=' at illegal position."
+#~ msgstr "¥ª¥Ú¥é¥ó¥ÉÀ©ÌóÃæ¡¢ÉÔÀµ¤Ê°ÌÃ֤ˠ'+' ¤ä '=' ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`%%' constraint used with last operand"
+#~ msgstr "`%%' À©Ì󤬺Ǹå¤Î¥ª¥Ú¥é¥ó¥É¤È¤È¤â¤Ë»È¤ï¤ì¤Þ¤·¤¿"
+
+#~ msgid "matching constraint not valid in output operand"
+#~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÆâ¤ÎÀ©Ìó¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "output number %d not directly addressable"
+#~ msgstr "½ÐÎÏÈÖ¹æ %d ¤ÏľÀÜ¥¢¥É¥ì¥¹»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "more than %d operands in `asm'"
+#~ msgstr "`asm' ¤ÎÃæ¤Ë %d ¤ò±Û¤¨¤ë¥ª¥Ú¥é¥ó¥É¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "hard register `%s' listed as input operand to `asm'"
+#~ msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿ `%s' ¤¬ `asm' ¤ËÂФ·¡¢ÆþÎÏ¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÅÐÏ¿¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "input operand constraint contains `%c'"
+#~ msgstr "ÆþÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ì󤬠`%c' ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "matching constraint references invalid operand number"
+#~ msgstr "À©Ìó¤ËŬ¹ç¤µ¤»¤ë»þ¤Ë¡¢Ìµ¸ú¤Ê¥ª¥Ú¥é¥ó¥ÉÈÖ¹æ¤ò»²¾È¤·¤Þ¤·¤¿"
+
+#~ msgid "asm operand %d probably doesn't match constraints"
+#~ msgstr "asm ¥ª¥Ú¥é¥ó¥É %d ¤Ï¶²¤é¤¯À©Ìó¤ËŬ¹ç¤·¤Þ¤»¤ó"
+
+#~ msgid "unused variable `%s'"
+#~ msgstr "ÊÑ¿ô `%s' ¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "enumeration value `%s' not handled in switch"
+#~ msgstr "ÎóµóÃÍ `%s' ¤Ï switch Æâ¤Ç°·¤ï¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "case value `%ld' not in enumerated type"
+#~ msgstr "case ÃÍ `%ld' ¤ÏÎóµó·¿¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "case value `%ld' not in enumerated type `%s'"
+#~ msgstr "case ÃÍ `%ld' ¤ÏÎóµó·¿ `%s' ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "type size can't be explicitly evaluated"
+#~ msgstr "·¿¤ÎÂ礭¤µ¤ÏÌÀ¼¨Åª¤Ëɾ²Á¤µ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤¨¤Þ¤»¤ó"
+
+#~ msgid "variable-size type declared outside of any function"
+#~ msgstr "ÊÑ¿ô¥µ¥¤¥º·¿¤¬´Ø¿ô¤Î³°Â¦¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "size of `%s' is %d bytes"
+#~ msgstr "`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤Ç¤¹"
+
+#~ msgid "size of `%s' is larger than %d bytes"
+#~ msgstr "`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "packed attribute causes inefficient alignment for `%s'"
+#~ msgstr "packed Â°À­¤Ï `%s' ¤ËÂФ·¤ÆÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹"
+
+#~ msgid "packed attribute is unnecessary for `%s'"
+#~ msgstr "packed Â°À­¤Ï `%s' ¤Ë¤ÏɬÍפ¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "padding struct to align `%s'"
+#~ msgstr "`%s' ¤ò¥¢¥é¥¤¥ó¤¹¤ë¤¿¤á¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹"
+
+#~ msgid "padding struct size to alignment boundary"
+#~ msgstr "¥¢¥é¥¤¥ó¥á¥ó¥È¶­³¦¤Î¥µ¥¤¥º¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹"
+
+#~ msgid "packed attribute causes inefficient alignment"
+#~ msgstr "packed Â°À­¤ÏÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹"
+
+#~ msgid "packed attribute is unnecessary"
+#~ msgstr "packed Â°À­¤ÏɬÍפ¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "\"%s\" and \"%s\" identical in first %d characters"
+#~ msgstr "\"%s\" ¤È \"%s\" ¤ÏºÇ½é¤Î %d Ê¸»ú¤¬Á´¤¯Æ±¤¸¤Ç¤¹"
+
+#~ msgid ""
+#~ "\n"
+#~ "Execution times (seconds)\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¼Â¹Ô²ó¿ô  (ÉÃ)\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " ¹ç·×                  :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "%s ¤Ç¤Î»þ´Ö: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "collect: reading %s\n"
+#~ msgstr "collect: %s ¤òÆɤ߹þ¤ß¤Þ¤¹\n"
+
+#~ msgid "collect: recompiling %s\n"
+#~ msgstr "collect: %s ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹\n"
+
+#~ msgid "collect: tweaking %s in %s\n"
+#~ msgstr "collect: %s ¤ò°ú¤ÃÄ¥¤ê¤Þ¤¹(%s Æâ)\n"
+
+#~ msgid "collect: relinking\n"
+#~ msgstr "collect: ºÆ¥ê¥ó¥¯¤·¤Þ¤¹\n"
+
+#~ msgid "ld returned %d exit status"
+#~ msgstr "ld ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿"
+
+#~ msgid "Generate debugging info in default format"
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate debugging info in default extended format"
+#~ msgstr "¥Ç¥Õ¥©¥ë¥È³ÈÄ¥·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate STABS format debug info"
+#~ msgstr "STABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate extended STABS format debug info"
+#~ msgstr "³ÈÄ¥ STABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate DWARF-1 format debug info"
+#~ msgstr "DWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate extended DWARF-1 format debug info"
+#~ msgstr "³ÈÄ¥ DWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate DWARF-2 debug info"
+#~ msgstr "DWARF-2 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate XCOFF format debug info"
+#~ msgstr "XCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate extended XCOFF format debug info"
+#~ msgstr "³ÈÄ¥ XCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Generate COFF format debug info"
+#~ msgstr "COFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Do not store floats in registers"
+#~ msgstr "¥ì¥¸¥¹¥¿¤ËÉâÆ°¾®¿ô¤ò³ÊǼ¤·¤Ê¤¤"
+
+#~ msgid "Consider all mem refs through pointers as volatile"
+#~ msgstr "¥Ý¥¤¥ó¥¿·Ðͳ¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹"
+
+#~ msgid "Consider all mem refs to global data to be volatile"
+#~ msgstr "Âç°è¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹"
+
+#~ msgid "Consider all mem refs to static data to be volatile"
+#~ msgstr "ÀÅŪ¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹"
+
+#~ msgid "Defer popping functions args from stack until later"
+#~ msgstr "´Ø¿ô°ú¿ô¤ò¥¹¥¿¥Ã¥¯¤«¤é pop ¤¹¤ë¤Î¤ò¸Æ¤Ó½Ð¤·¸å¤Þ¤ÇÃ٤餻¤ë"
+
+#~ msgid "When possible do not generate stack frames"
+#~ msgstr "²Äǽ¤Ê¾ì¹ç¡¢¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "Optimize sibling and tail recursive calls"
+#~ msgstr "sibling ¸Æ¤Ó½Ð¤·¤äËöÈøºÆµ¢¸Æ¤Ó½Ð¤·¤òºÇŬ²½¤¹¤ë"
+
+#~ msgid "When running CSE, follow jumps to their targets"
+#~ msgstr "CSE ¤ÇÆ°ºî¤¹¤ë¤È¤­¡¢¤½¤ì¤é¤Î¥¿¡¼¥²¥Ã¥È¤Ø¤Î¥¸¥ã¥ó¥×¤ËÄɿ魯¤ë"
+
+#~ msgid "When running CSE, follow conditional jumps"
+#~ msgstr "CSE ¤ÇÆ°ºî¤¹¤ë¤È¤­¡¢¾ò·ï¥¸¥ã¥ó¥×¤ËÄɿ魯¤ë"
+
+#~ msgid "Perform a number of minor, expensive optimisations"
+#~ msgstr "ÌÜΩ¤¿¤Ê¤¤¡¢¥³¥¹¥È¤Î¤«¤«¤ëºÇŬ²½¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Perform jump threading optimisations"
+#~ msgstr "¥¸¥ã¥ó¥×ʬ´ôºÇŬ²½¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Perform strength reduction optimisations"
+#~ msgstr "¶¯Åٺ︺ºÇŬ²½¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Perform loop unrolling when iteration count is known"
+#~ msgstr "È¿Éü²ó¿ô¤¬´ûÃΤΤȤ­¡¢¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Perform loop unrolling for all loops"
+#~ msgstr "Á´¤Æ¤Î¥ë¡¼¥×¤Ç¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Force all loop invariant computations out of loops"
+#~ msgstr "¥ë¡¼¥×Ãæ¤ËÉÔÊѤʷ׻»¤ò¥ë¡¼¥×¤Î³°¤Ë°ÜÆ°¤¹¤ë"
+
+#~ msgid "Strength reduce all loop general induction variables"
+#~ msgstr "¥ë¡¼¥×¤ÎÃæ¤ÎÁ´¤Æ¤Î°ìÈÌͶƳÊÑ¿ô¤ò¶¯Åٺ︺¤¹¤ë"
+
+#~ msgid "Store strings in writable data section"
+#~ msgstr "ʸ»úÎó¤ò½ñ¤­¹þ¤ß²Äǽ¥Ç¡¼¥¿¥»¥¯¥·¥ç¥ó¤Ë³ÊǼ¤¹¤ë"
+
+#~ msgid "Enable machine specific peephole optimisations"
+#~ msgstr "µ¡¼ï¸ÇÍ­¤ÎÇÁ¤­·êºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Copy memory operands into registers before using"
+#~ msgstr "¥á¥â¥ê¥ª¥Ú¥é¥ó¥É¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë"
+
+#~ msgid "Copy memory address constants into regs before using"
+#~ msgstr "¥á¥â¥ê¥¢¥É¥ì¥¹Äê¿ô¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë"
+
+#~ msgid "Allow function addresses to be held in registers"
+#~ msgstr "´Ø¿ô¥¢¥É¥ì¥¹¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤¿¤»¤ë»ö¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Integrate simple functions into their callers"
+#~ msgstr "ñ½ã¤Ê´Ø¿ô¤ò¸Æ¤Ó½Ð¤·Â¦¤ËÅý¹ç¤¹¤ë"
+
+#~ msgid "Generate code for funcs even if they are fully inlined"
+#~ msgstr "Á´¤Æ¥¤¥ó¥é¥¤¥ó¤È¤µ¤ì¤¿¤È¤·¤Æ¤â´Ø¿ô¤Î¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Pay attention to the 'inline' keyword"
+#~ msgstr "'inline' ¥­¡¼¥ï¡¼¥É¤ËÃí°Õ¤òʧ¤¦"
+
+#~ msgid "Emit static const variables even if they are not used"
+#~ msgstr "»ÈÍѤµ¤ì¤Ê¤¤ÀÅŪÄê¿ôÊÑ¿ô¤Ç¤¢¤Ã¤Æ¤â½ÐÎϤ¹¤ë"
+
+#~ msgid "Check for syntax errors, then stop"
+#~ msgstr "ʸˡ¥¨¥é¡¼¤ò¸¡½Ð¤·¤Æ¡¢¤½¤³¤ÇÄä»ß¤¹¤ë"
+
+#~ msgid "Mark data as shared rather than private"
+#~ msgstr "¥Ç¡¼¥¿¤ò¥×¥é¥¤¥Ù¡¼¥È¤Ç¤Ï¤Ê¤¯¶¦Í­¤µ¤ì¤ë¤è¤¦¥Þ¡¼¥¯¤¹¤ë"
+
+#~ msgid "Enable saving registers around function calls"
+#~ msgstr "´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÁ°¸å¤Ç¥ì¥¸¥¹¥¿¤ÎÊݸ¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Return 'short' aggregates in memory, not registers"
+#~ msgstr "'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ç¤Ï¤Ê¤¯¥á¥â¥ê¤Ë³ÊǼ¤·¤ÆÊÖ¤¹"
+
+#~ msgid "Return 'short' aggregates in registers"
+#~ msgstr "'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ë³ÊǼ¤·¤ÆÊÖ¤¹"
+
+#~ msgid "Attempt to fill delay slots of branch instructions"
+#~ msgstr "ʬ´ôÌ¿Îá¤ÎÃٱ䥹¥í¥Ã¥È¤ò»È¤¦¤³¤È¤ò»î¤ß¤ë"
+
+#~ msgid "Perform the global common subexpression elimination"
+#~ msgstr "¥°¥í¡¼¥Ð¥ë¶¦ÄÌÉôʬ¼°¤ò½üµî¤¹¤ë"
+
+#~ msgid "Run CSE pass after loop optimisations"
+#~ msgstr "¥ë¡¼¥×ºÇŬ²½¸å¤Ë¶¦ÄÌÉôʬ¼°½üµî²áÄø¤ò¼Â¹Ô"
+
+#~ msgid "Run the loop optimiser twice"
+#~ msgstr "¥ë¡¼¥×ºÇŬ²½¤òÆó²ó¼Â¹Ô¤¹¤ë"
+
+#~ msgid "Delete useless null pointer checks"
+#~ msgstr "̵°ÕÌ£¤Ê null ¥Ý¥¤¥ó¥¿¸¡ºº¤òºï½ü¤¹¤ë"
+
+#~ msgid "Pretend that host and target use the same FP format"
+#~ msgstr "¥Û¥¹¥È¤È¥¿¡¼¥²¥Ã¥È¤¬Æ±¤¸ÉâÆ°¾®¿ô·Á¼°¤ò»È¤¦¿¶¤ëÉñ¤¤¤ò¤µ¤»¤ë"
+
+#~ msgid "Reschedule instructions before register allocation"
+#~ msgstr "¥ì¥¸¥¹¥¿³ÎÊݤÎÁ°¤ËÌ¿Îá¤òÊ¤Ùľ¤¹"
+
+#~ msgid "Reschedule instructions after register allocation"
+#~ msgstr "¥ì¥¸¥¹¥¿³ÎÊݤθå¤ÇÌ¿Îá¤òÊ¤Ùľ¤¹"
+
+#~ msgid "Enable scheduling across basic blocks"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¤ò¸Ù¤°Ì¿ÎáÇÛÃÖ¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Allow speculative motion of non-loads"
+#~ msgstr "Èó¥í¡¼¥É¤Ç¤ÎÉԳμ¤ÊÆ°ºî¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Allow speculative motion of some loads"
+#~ msgstr "¤¤¤¯¤Ä¤«¤Î¥í¡¼¥É¤Ç¤ÎÉԳμ¤ÊÆ°ºî¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Allow speculative motion of more loads"
+#~ msgstr "¤è¤ê¿¤¯¤Î¥í¡¼¥É¤Ç¤ÎÉԳμ¤ÊÆ°ºî¤òµö²Ä¤¹¤ë"
+
+#~ msgid "Replace add,compare,branch with branch on count reg"
+#~ msgstr "²Ã»»¡¢Èæ³Ó¥Ö¥é¥ó¥Á¤ÎÂå¤ï¤ê¤Ë¥«¥¦¥ó¥È¥ì¥¸¥¹¥¿¤Î¥Ö¥é¥ó¥Á¤ò»È¤¦"
+
+#~ msgid "Generate position independent code, if possible"
+#~ msgstr "²Äǽ¤Ç¤¢¤ì¤Ð°ÌÃÖÆÈΩ¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Enable exception handling"
+#~ msgstr "Îã³°Ê᪤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Just generate unwind tables for exception handling"
+#~ msgstr "´¬¤­Ìᤷ¤ò¹Ô¤Ê¤¦Îã³°Êä­Íѥơ¼¥Ö¥ë¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Support synchronous non-call exceptions"
+#~ msgstr "Ʊ´üÈó¸Æ¤Ó½Ð¤·Îã³°¤ò¥µ¥Ý¡¼¥È¤¹¤ë"
+
+#~ msgid "Insert arc based program profiling code"
+#~ msgstr "¥×¥í¥°¥é¥à¤¬¥³¡¼¥É¥×¥í¥Õ¥¡¥¤¥ë¤¹¤ë¸µ¤Ë¤Ê¤ë¸Ì¤òÁÞÆþ¤¹¤ë"
+
+#~ msgid "Create data files needed by gcov"
+#~ msgstr "gcov ¤¬É¬ÍפȤ¹¤ë¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë"
+
+#~ msgid "Use profiling information for branch probabilities"
+#~ msgstr "ʬ´ô·ÐÏ©¿ä¬ÍѤΥץí¥Õ¥¡¥¤¥ë¾ðÊó¤òÍøÍѤ¹¤ë"
+
+#~ msgid "Reorder basic blocks to improve code placement"
+#~ msgstr "¥³¡¼¥ÉÇÛÃÖ¤ò²þÁ±¤¹¤ë¤¿¤á¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤òºÆÀ°Íý¤¹¤ë"
+
+#~ msgid "Do the register renaming optimization pass"
+#~ msgstr "ºÇŬ²½²áÄø¤Î¥ì¥¸¥¹¥¿¤Ä¤±ÊѤ¨¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Improve FP speed by violating ANSI & IEEE rules"
+#~ msgstr "ANSI & IEEE µ¬Â§¤òÇˤäÆÉâÆ°¾®¿ô¤Î®ÅÙ¤ò²þÁ±¤¹¤ë"
+
+#~ msgid "Do not put unitialised globals in the common section"
+#~ msgstr "Âç°èÊÑ¿ôÅù¤ò½é´ü²½¤µ¤ì¤Ê¤¤¥³¥â¥ó¥»¥¯¥·¥ç¥ó¤ËÃÖ¤«¤Ê¤¤"
+
+#~ msgid "Do not generate .size directives"
+#~ msgstr ".size µ¿»÷Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤"
+
+#~ msgid "place each function into its own section"
+#~ msgstr "³Æ¡¹¤Î´Ø¿ô¤ò¤½¤ì¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "place data items into their own section"
+#~ msgstr "¥Ç¡¼¥¿¹àÌܤò¤½¤ì¤é¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë"
+
+#~ msgid "Add extra commentry to assembler output"
+#~ msgstr ";ʬ¤Ê¥³¥á¥ó¥È¤ò¥¢¥»¥ó¥Ö¥é½ÐÎϤËÄɲ乤ë"
+
+#~ msgid "Output GNU ld formatted global initialisers"
+#~ msgstr "GNU ld ·Á¼°¤ÎÂç°è½é´ü²½»Ò¤ò½ÐÎϤ¹¤ë"
+
+#~ msgid "Enables a register move optimisation"
+#~ msgstr "°ÜÆ°Ì¿ÎáºÇŬ²½¥ì¥¸¥¹¥¿¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Do the full regmove optimization pass"
+#~ msgstr "ºÇŬ²½²áÄø¤ÇºÇÂç¸Â¤Î regmove ¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "Pack structure members together without holes"
+#~ msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð¤ò·ê¤¬³«¤«¤Ê¤¤¤è¤¦¤Ë¥Ñ¥Ã¥¯¤¹¤ë"
+
+#~ msgid "Insert stack checking code into the program"
+#~ msgstr "¥×¥í¥°¥é¥à¤Ë¥¹¥¿¥Ã¥¯¶­³¦¸¡½Ð¥³¡¼¥É¤òÁÞÆþ¤¹¤ë"
+
+#~ msgid "Specify that arguments may alias each other & globals"
+#~ msgstr "°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ê¤ê¤¦¤ë»ö¤ò»ØÄꤹ¤ë"
+
+#~ msgid "Assume arguments may alias globals but not each other"
+#~ msgstr "°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ÏÊÌ̾¤Ë¤Ê¤ê¤¦¤ë¤¬Â¾¤Î°ú¿ô¤È¤ÏÊÌ̾¤Ç¤Ï¤Ê¤¤¤È¤ß¤Ê¤¹"
+
+#~ msgid "Assume arguments do not alias each other or globals"
+#~ msgstr "°ú¿ô¤¬Âç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ï¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹"
+
+#~ msgid "Assume strict aliasing rules apply"
+#~ msgstr "¸·Ì©¤ÊÊÌ̾µ¬Â§¤ËŬ¹ç¤¹¤ë¤È¤ß¤Ê¤¹"
+
+#~ msgid "Align the start of loops"
+#~ msgstr "¥ë¡¼¥×¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Align labels which are only reached by jumping"
+#~ msgstr "¥é¥Ù¥ë¤Î¤¦¤Á¥¸¥ã¥ó¥×ÅþãÀè¤È¤Ê¤ë¤â¤Î¤À¤±¤ò¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Align all labels"
+#~ msgstr "Á´¤Æ¤Î¥é¥Ù¥ë¤ò¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Align the start of functions"
+#~ msgstr "´Ø¿ô¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë"
+
+#~ msgid "Generate code to check every memory access"
+#~ msgstr "³Æ¥á¥â¥ê¥¢¥¯¥»¥¹¤ò¸¡½Ð¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Add a prefix to all function names"
+#~ msgstr "Á´¤Æ¤Î´Ø¿ô̾¤ËÀÜƬ¼­¤òÄɲ乤ë"
+
+#~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps"
+#~ msgstr "¥Ç¥Ð¥Ã¥°¥À¥ó¥×¤ÇÌ¿ÎáÈÖ¹æ¤È¹ÔÈÖ¹æ¥Î¡¼¥È¤Î½ÐÎϤòÍÞÀ©¤¹¤ë"
+
+#~ msgid "Instrument function entry/exit with profiling calls"
+#~ msgstr "´Ø¿ô¤ÎÆþ¤ê¸ý/½Ð¸ý¤Ç¥×¥í¥Õ¥¡¥¤¥ë¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ë"
+
+#~ msgid "Enable SSA optimizations"
+#~ msgstr "SSA ºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enable dead code elimination"
+#~ msgstr "¥Ç¥Ã¥É¥³¡¼¥É¤Î½üµî¤ò¹Ô¤Ê¤¦"
+
+#~ msgid "External symbols have a leading underscore"
+#~ msgstr "³°Éô¥·¥ó¥Ü¥ë¤ËƬʸ»ú¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò»ý¤¿¤»¤ë"
+
+#~ msgid "Process #ident directives"
+#~ msgstr "#ident ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½èÍý¤¹¤ë"
+
+#~ msgid "Enables an rtl peephole pass run before sched2"
+#~ msgstr "ÂèÆóÌ¿ÎáÇÛÃÖ¤ÎÁ°¤Ç rtl ÇÁ¤­·ê²áÄø¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Enables guessing of branch probabilities"
+#~ msgstr "ʬ´ô·ÐÏ©¿ä¬¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Set errno after built-in math functions"
+#~ msgstr "ÁȤ߹þ¤ß¿ô³Ø´Ø¿ô¤Î¸å¤Ë errno ¤ò¥»¥Ã¥È¤¹¤ë"
+
+#~ msgid "Convert floating point constant to single precision constant"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤òñÀºÅÙÄê¿ô¤ËÊÑ´¹¤¹¤ë"
+
+#~ msgid "Report time taken by each compiler pass at end of run"
+#~ msgstr "¼Â¹Ô½ªÎ»»þ¤Ë¥³¥ó¥Ñ¥¤¥é¤Î³Æ²áÄø¤ËÍפ·¤¿»þ´Ö¤òÊó¹ð¤¹¤ë"
+
+#~ msgid "Report on permanent memory allocation at end of run"
+#~ msgstr "¼Â¹Ô½ªÎ»»þ¤Ë±Ê³Ū¤Ë³ÎÊݤµ¤ì¤¿¥á¥â¥ê¤òÊó¹ð¤¹¤ë"
+
+#~ msgid "Trap for signed overflow in addition / subtraction / multiplication."
+#~ msgstr "Éä¹çÉÕ¤­¤Î²Ã»»/¸º»»/¾è»»¤Ç¤Î·å¤¢¤Õ¤ì¤ò¥È¥é¥Ã¥×¤¹¤ë"
+
+#~ msgid "Compile just for ISO C89"
+#~ msgstr "ISO C89 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë"
+
+#~ msgid "Do not promote floats to double if using -traditional"
+#~ msgstr "-traditional »ÈÍÑ»þ¤Ë¤Ï¡¢ÉâÆ°¾®¿ô¤Ë´Ø¤· float ¤«¤é double ¤Ë³Ê¾å¤²¤·¤Ê¤¤"
+
+#~ msgid "Determine language standard"
+#~ msgstr "¸À¸ì¤Îɸ½à¤ò·èÄꤹ¤ë"
+
+#~ msgid "Make bitfields by unsigned by default"
+#~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹ç̵¤·¤È¤¹¤ë"
+
+#~ msgid "Make 'char' be signed by default"
+#~ msgstr "'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹çÉÕ¤­¤È¤¹¤ë"
+
+#~ msgid "Make 'char' be unsigned by default"
+#~ msgstr "'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹ç̵¤·¤È¤¹¤ë"
+
+#~ msgid "Attempt to support traditional K&R style C"
+#~ msgstr "¸Å¤¤ K&R ¼°¤Î C ¤Î¥µ¥Ý¡¼¥È¤ò»î¤ß¤ë"
+
+#~ msgid "Do not recognise the 'asm' keyword"
+#~ msgstr "'asm' Í½Ìó¸ì¤òǧ¼±¤µ¤»¤Ê¤¤"
+
+#~ msgid "Do not recognise any built in functions"
+#~ msgstr "¤¤¤¯¤Ä¤«¤ÎÁȤ߹þ¤ß´Ø¿ô¤òǧ¼±¤µ¤»¤Ê¤¤"
+
+#~ msgid "Assume normal C execution environment"
+#~ msgstr "Ä̾ï¤Î C ¼Â¹Ô´Ä¶­¤òÁ°Äó¤È¤¹¤ë"
+
+#~ msgid "Assume that standard libraries & main might not exist"
+#~ msgstr "ɸ½à¥é¥¤¥Ö¥é¥ê¤ä main ¤¬Â¸ºß¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ë¤â¤Î¤È¤¹¤ë"
+
+#~ msgid "Allow different types as args of ? operator"
+#~ msgstr "? ±é»»»Ò¤Î°ú¿ô¤È¤·¤Æ°Û¤Ê¤Ã¤¿·¿¤òµöÍƤ¹¤ë"
+
+#~ msgid "Allow the use of $ inside identifiers"
+#~ msgstr "¼±ÊÌ»ÒÃæ¤Ç¤Î $ ¤Î»ÈÍѤòµöÍƤ¹¤ë"
+
+#~ msgid "Use the same size for double as for float"
+#~ msgstr "double ¤Î¥µ¥¤¥º¤ò float ¤ÈƱ¤¸¤È¤·¤Æ»ÈÍѤ¹¤ë"
+
+#~ msgid "Use the smallest fitting integer to hold enums"
+#~ msgstr "Îóµó·¿¤¬ÊÝ»ý¤Ç¤­¤ëºÇ¾®¤ÎÀ°¿ô·¿¤ò»ÈÍѤ¹¤ë"
+
+#~ msgid "Override the underlying type for wchar_t to `unsigned short'"
+#~ msgstr "wchar_t ¤Îº¬ËÜŪ¤Ê·¿¤ò `unsigned short' ¤Èʤ¤¹"
+
+#~ msgid "Enable most warning messages"
+#~ msgstr "Ëؤó¤É¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#~ msgid "Warn about casting functions to incompatible types"
+#~ msgstr "·¿¤Ë¸ß´¹À­¤Î¤Ê¤¤´Ø¿ô¤Î¥­¥ã¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about functions which might be candidates for format attributes"
+#~ msgstr "format Â°À­¤ò¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about casts which discard qualifiers"
+#~ msgstr "½¤¾þ»Ò¤ò¼è¤êµî¤ë¥­¥ã¥¹¥È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about subscripts whose type is 'char'"
+#~ msgstr "ź»ú¤Î·¿¤¬ 'char' ¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn if nested comments are detected"
+#~ msgstr "Æþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥³¥á¥ó¥È¤ò¸¡½Ð¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about possibly confusing type conversions"
+#~ msgstr "·¿ÊÑ´¹¤¬º®Í𤹤ë²ÄǽÀ­¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies"
+#~ msgstr "printf/scanf/strftime/strfmon ·Á¼°¤ÎÊѧŪ¤Ê¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Don't warn about strftime formats yielding 2 digit years"
+#~ msgstr "strftime ·Á¼°¤¬Æó·å¤Çǯ¤òɽ¤·¤Æ¤¤¤ë»þ¤Î·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Don't warn about too many arguments to format functions"
+#~ msgstr "format ´Ø¿ô¤Ø¤Î¿¤¹¤®¤ë°ú¿ô¤Ë´Ø¤¹¤ë·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Warn about non-string-literal format strings"
+#~ msgstr "Èóʸ»úÎó¥ê¥Æ¥é¥ë¤Î format Ê¸»úÎó¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about possible security problems with format functions"
+#~ msgstr "¥»¥­¥å¥ê¥Æ¥£Åª¤ÊÌäÂê¤È¤Ê¤ê¤¦¤ë format ´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about implicit function declarations"
+#~ msgstr "°ÅÌۤδؿôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when a declaration does not specify a type"
+#~ msgstr "Àë¸À¤¬·¿¤ò»ØÄꤷ¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about the use of the #import directive"
+#~ msgstr "#import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Do not warn about using 'long long' when -pedantic"
+#~ msgstr "-pedantic »ØÄê»þ¤Ç¤â 'long long' ¤Î»ÈÍѤˤĤ¤¤Æ¤Ï·Ù¹ð¤·¤Ê¤¤"
+
+#~ msgid "Warn about suspicious declarations of main"
+#~ msgstr "µ¿¤ï¤·¤¤ main ¤ÎÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about possibly missing braces around initialisers"
+#~ msgstr "½é´ü²½»Ò¤Î¼þ¤ê¤Ë¥Ö¥ì¡¼¥¹¤ò·ç¤¤¤Æ¤¤¤ëÍͤǤ¢¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about global funcs without previous declarations"
+#~ msgstr "»öÁ°¤ÎÀë¸À¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about global funcs without prototypes"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about use of multicharacter literals"
+#~ msgstr "Ê£¿ôʸ»ú¥ê¥Æ¥é¥ë¤Î»ÈÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about externs not at file scope level"
+#~ msgstr "¥Õ¥¡¥¤¥ë¥¹¥³¡¼¥×¥ì¥Ù¥ë¤Ç¤Ê¤¤ extern ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about possible missing parentheses"
+#~ msgstr "³ç¸Ì¤ò·ç¤¤¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about possible violations of sequence point rules"
+#~ msgstr "ÉûºîÍÑ´°Î»ÅÀµ¬Â§¤òÇˤë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about function pointer arithmetic"
+#~ msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤Î·×»»¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about multiple declarations of the same object"
+#~ msgstr "Ʊ°ì¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀë¸À¤¬Ê£¿ô¤¢¤ì¤Ð·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about signed/unsigned comparisons"
+#~ msgstr "Éä¹çÉÕ¤­/Éä¹ç̵¤·¤ÎÈæ³Ó¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about testing equality of floating point numbers"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤ÎÅù²Á¥Æ¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about unrecognized pragmas"
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ pragma ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about non-prototyped function decls"
+#~ msgstr "¥×¥í¥È¥¿¥¤¥×¤µ¤ì¤Æ¤¤¤Ê¤¤´Ø¿ôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about constructs whose meaning change in ISO C"
+#~ msgstr "ISO C ¤Ç¤½¤Î°ÕÌ£¤¬Êѹ¹¤µ¤ì¤¿ÆâÍƤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when trigraphs are encountered"
+#~ msgstr "¥È¥é¥¤¥°¥é¥Õ¤òȯ¸«¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Mark strings as 'const char *'"
+#~ msgstr "ʸ»úÎó¤ò 'const char *' ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë"
+
+#~ msgid "Warn when a function is unused"
+#~ msgstr "´Ø¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when a label is unused"
+#~ msgstr "¥é¥Ù¥ë¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when a function parameter is unused"
+#~ msgstr "´Ø¿ô¤Î²¾°ú¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when a variable is unused"
+#~ msgstr "ÊÑ¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when an expression value is unused"
+#~ msgstr "¼°¤ÎÃͤ¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Do not suppress warnings from system headers"
+#~ msgstr "¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤"
+
+#~ msgid "Treat all warnings as errors"
+#~ msgstr "Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦"
+
+#~ msgid "Warn when one local variable shadows another"
+#~ msgstr "¤¢¤ë¥í¡¼¥«¥ëÊÑ¿ô¤¬Â¾¤Î¤â¤Î¤òʤ¤¤±£¤¹¤È¤­¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about enumerated switches missing a specific case"
+#~ msgstr "ÎóµóÄê¿ô¤Î switch ¤Ç case »ØÄ꤬·ç¤±¤Æ¤¤¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about returning structures, unions or arrays"
+#~ msgstr "¹½Â¤ÂΡ¢¶¦ÍÑÂÎËô¤ÏÇÛÎó¤òÊÖ¤¹¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about pointer casts which increase alignment"
+#~ msgstr "¥Ý¥¤¥ó¥¿¤Î¥­¥ã¥¹¥È¤Ç¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤¹¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about code that will never be executed"
+#~ msgstr "¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¤¥³¡¼¥É¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about unitialized automatic variables"
+#~ msgstr "½é´ü²½¤µ¤ì¤Ê¤¤¼«Æ°ÊÑ¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when an inlined function cannot be inlined"
+#~ msgstr "¥¤¥ó¥é¥¤¥ó´Ø¿ô¤ò¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when the packed attribute has no effect on struct layout"
+#~ msgstr "packed Â°À­¤¬¹½Â¤ÂÎÇÛÃ֤˱ƶÁ¤·¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when padding is required to align struct members"
+#~ msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð¤Î¥¢¥é¥¤¥ó¤Ç¡¢¥Ñ¥Ç¥£¥ó¥°¤òÍפ¹¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn when an optimization pass is disabled"
+#~ msgstr "ºÇŬ²½²áÄø¤¬Ìµ¸ú²½¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë"
+
+#~ msgid "Warn about functions which might be candidates for attribute noreturn"
+#~ msgstr "noreturn Â°À­¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë"
+
+#~ msgid "Invalid option `%s'"
+#~ msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `%s'"
+
+#~ msgid "Internal error: %s"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: %s"
+
+#~ msgid "`%s' declared `static' but never defined"
+#~ msgstr "`%s' ¤¬ `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹"
+
+#~ msgid "`%s' defined but not used"
+#~ msgstr "`%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "can't open %s for writing"
+#~ msgstr "%s ¤ò½ñ¤­¹þ¤ßÍѤ˳«¤±¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#~ msgid "-ffunction-sections not supported for this target."
+#~ msgstr "-ffunction-sections ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "-fdata-sections not supported for this target."
+#~ msgstr "-fdata-sections ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "-ffunction-sections disabled; it makes profiling impossible."
+#~ msgstr "-ffunction-sections ¤¬Ìµ¸ú¤Ç¤¹ -- ¥×¥í¥Õ¥¡¥¤¥ë¤ÏÉÔ²Äǽ¤Ç¤¹"
+
+#~ msgid "-ffunction-sections may affect debugging on some targets."
+#~ msgstr "-ffunction-sections ¤Ï¥¿¡¼¥²¥Ã¥È¤Ë¤è¤Ã¤Æ¤Ï¥Ç¥Ð¥Ã¥°¤Ë±Æ¶Á¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó"
+
+#~ msgid "Errors detected in input file (your bison.simple is out of date)\n"
+#~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ëÃæ¤Ë¥¨¥é¡¼ (¤¢¤Ê¤¿¤Î bison.simple ¤Ï¸Å¤¹¤®¤Þ¤¹)\n"
+
+#~ msgid "error writing to %s"
+#~ msgstr "%s ¤Ø¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼¤Ç¤¹"
+
+#~ msgid "invalid register name `%s' for register variable"
+#~ msgstr "`%s' ¤Ï¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ¤Ï̵¸ú¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹"
+
+#~ msgid "  -ffixed-<register>      Mark <register> as being unavailable to the compiler\n"
+#~ msgstr "  -ffixed-<register>      ¥³¥ó¥Ñ¥¤¥é¤ËÂФ· <register> ¤ò»ÈÍÑÉԲĤȥޡ¼¥¯¤¹¤ë\n"
+
+#~ msgid "  -fcall-used-<register>  Mark <register> as being corrupted by function calls\n"
+#~ msgstr "  -fcall-used-<register>  ´Ø¿ô¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë <register> ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë\n"
+
+#~ msgid "  -fcall-saved-<register> Mark <register> as being preserved across functions\n"
+#~ msgstr "  -fcall-saved-<register> <register> ¤¬´Ø¿ô¤òÄ̤¸¤ÆÊÝ»ý¤µ¤ì¤ë¤È¥Þ¡¼¥¯¤¹¤ë\n"
+
+#~ msgid "  -finline-limit=<number> Limits the size of inlined functions to <number>\n"
+#~ msgstr "  -finline-limit=<number> ¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Î¥µ¥¤¥º¤ò <number> ¤ËÀ©¸Â¤¹¤ë\n"
+
+#~ msgid "  -fmessage-length=<number> Limits diagnostics messages lengths to <number> characters per line.  0 suppresses line-wrapping\n"
+#~ msgstr "  -fmessage-length=<number> ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤ÎŤµ¤ò°ì¹ÔÊÕ¤ê <number> Ê¸»ú¤ËÀ©¸Â¤¹¤ë¡£ 0 ¤À¤È²þ¹Ô¤òÍÞÀ©¤¹¤ë\n"
+
+#~ msgid "  -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n"
+#~ msgstr ""
+#~ "  -fdiagnostics-show-location=[once | every-line]  ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤Î²þ¹Ô¤ÎºÝ¤Ë,\n"
+#~ " ¥½¡¼¥¹°ÌÃÖ¾ðÊ󤬹Ԥκǽé¤Ëɽ¼¨¤µ¤ì¤ëÉÑÅÙ¤ò»ØÄꤹ¤ë\n"
+
+#~ msgid "  -O[number]              Set optimisation level to [number]\n"
+#~ msgstr "  -O[number]              ºÇŬ²½¥ì¥Ù¥ë¤ò [number] ¤ËÀßÄꤹ¤ë\n"
+
+#~ msgid "  -Os                     Optimise for space rather than speed\n"
+#~ msgstr "  -Os                     Â®ÅÙ¤è¤ê¤â¥µ¥¤¥º¤ÎºÇŬ²½¤ò¹Ô¤Ê¤¦\n"
+
+#~ msgid "  -pedantic               Issue warnings needed by strict compliance to ISO C\n"
+#~ msgstr "  -pedantic               ¸·Ì©¤Ê ISO C ¤Ø¤ÎŬ¹ç¤ËÍפ¹¤ë·Ù¹ð¤òȯ¤¹¤ë\n"
+
+#~ msgid "  -pedantic-errors        Like -pedantic except that errors are produced\n"
+#~ msgstr "  -pedantic-errors        -pedantic ¤ÈƱÍͤÀ¤¬¡¢¥¨¥é¡¼¤òȯÀ¸¤µ¤»¤ë\n"
+
+#~ msgid "  -w                      Suppress warnings\n"
+#~ msgstr "  -w                      ·Ù¹ð¤òÍÞÀ©¤¹¤ë\n"
+
+#~ msgid "  -W                      Enable extra warnings\n"
+#~ msgstr "  -W                      ÆÃÊ̤ʷٹð¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -Wunused                Enable unused warnings\n"
+#~ msgstr "  -Wunused                Ì¤»ÈÍѤˤĤ¤¤Æ¤Î·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -Wid-clash-<num>        Warn if 2 identifiers have the same first <num> chars\n"
+#~ msgstr "  -Wid-clash-<num>        Æó¤Ä¤Î¼±Ê̻Ҥ¬ <num> Ê¸»úʬ°ìÃפ·¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë\n"
+
+#~ msgid "  -Wlarger-than-<number>  Warn if an object is larger than <number> bytes\n"
+#~ msgstr "  -Wlarger-than-<number>  ¥ª¥Ö¥¸¥§¥¯¥È¤¬ <number> ¥Ð¥¤¥È¤è¤êÂ礭¤±¤ì¤Ð·Ù¹ð¤¹¤ë\n"
+
+#~ msgid "  -p                      Enable function profiling\n"
+#~ msgstr "  -p                      ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -a                      Enable block profiling \n"
+#~ msgstr "  -a                      ¥Ö¥í¥Ã¥¯¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -ax                     Enable jump profiling \n"
+#~ msgstr "  -ax                     ¥¸¥ã¥ó¥×¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -o <file>               Place output into <file> \n"
+#~ msgstr "  -o <file>               ½ÐÎϤò <file> ¤Ë½ñ¤­¹þ¤à\n"
+
+#~ msgid ""
+#~ "  -G <number>             Put global and static data smaller than <number>\n"
+#~ "                          bytes into a special section (on some targets)\n"
+#~ msgstr ""
+#~ "  -G <number>             <number> ¥Ð¥¤¥È¤è¤ê¾®¤µ¤ÊÂç°è¤ª¤è¤ÓÀÅŪ¥Ç¡¼¥¿¤ò\n"
+#~ "                          ÆÃÊ̤ʥ»¥¯¥·¥ç¥ó¤ËÃÖ¤¯ (¥¿¡¼¥²¥Ã¥È¼¡Âè)\n"
+
+#~ msgid "  -aux-info <file>        Emit declaration info into <file>\n"
+#~ msgstr "  -aux-info <file>        Àë¸À¾ðÊó¤ò <file> ¤Øȯ¹Ô¤¹¤ë\n"
+
+#~ msgid "  -quiet                  Do not display functions compiled or elapsed time\n"
+#~ msgstr "  -quiet                  ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿´Ø¿ô¤ä·Ð²á»þ´Ö¤òɽ¼¨¤·¤Ê¤¤\n"
+
+#~ msgid "  -version                Display the compiler's version\n"
+#~ msgstr "  -version                ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid "  -d[letters]             Enable dumps from specific passes of the compiler\n"
+#~ msgstr "  -d[letters]             ¥³¥ó¥Ñ¥¤¥é¤Î²áÄø¤«¤é¤Î¥À¥ó¥×¤òÍ­¸ú¤Ë¤¹¤ë\n"
+
+#~ msgid "  -dumpbase <file>        Base name to be used for dumps from specific passes\n"
+#~ msgstr "  -dumpbase <file>        ²áÄø¤«¤é¤Î¥À¥ó¥×¤Ë»È¤ï¤ì¤ë̾Á°¤Î¥Ù¡¼¥¹¤È¤¹¤ë\n"
+
+#~ msgid "  -fsched-verbose=<number> Set the verbosity level of the scheduler\n"
+#~ msgstr "  -fsched-verbose=<number> ¥¹¥±¥¸¥å¡¼¥é¤ÎñÁÀå¥ì¥Ù¥ë¤òÀßÄꤹ¤ë\n"
+
+#~ msgid "  --help                  Display this information\n"
+#~ msgstr "  --help                  ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Language specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¸À¸ì»ÅÍÍ¥ª¥×¥·¥ç¥ó:\n"
+
+#~ msgid "  %-23.23s [undocumented]\n"
+#~ msgstr "  %-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented %s specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤ %s »ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " Options for %s:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " %s ÍÑ¥ª¥×¥·¥ç¥ó:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó:\n"
+
+#~ msgid "  -m%-23.23s [undocumented]\n"
+#~ msgstr "  -m%-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤]\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented target specific options as well.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£\n"
+
+#~ msgid "  They exist, but they are not documented.\n"
+#~ msgstr "  ¤³¤ì¤é¤Ï¸ºß¤·¤Þ¤¹¤¬¡¢Ê¸½ñ²½¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ gcc ¥Ç¥Ð¥Ã¥°¥ª¥×¥·¥ç¥ó: %c"
+
+#~ msgid "unrecognized register name `%s'"
+#~ msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥ì¥¸¥¹¥¿Ì¾ `%s'"
+
+#~ msgid "Unrecognized option `%s'"
+#~ msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `%s'"
+
+#~ msgid "use -gdwarf -g%d for DWARF v1, level %d"
+#~ msgstr "-gdwarf -g%d ¤ò»ÈÍÑ (DWARF v1, ¥ì¥Ù¥ë %d)"
+
+#~ msgid "use -gdwarf-2   for DWARF v2"
+#~ msgstr "-gdwarf-2 ¤ò»ÈÍÑ (DWARF v2)"
+
+#~ msgid "ignoring option `%s' due to invalid debug level specification"
+#~ msgstr "̵¸ú¤Ê¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë»ØÄê¤Ë¤è¤ê¡¢¥ª¥×¥·¥ç¥ó `%s' ¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "`%s': ÉÔÌÀ¤Þ¤¿¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -g ¥ª¥×¥·¥ç¥ó¤Ç¤¹"
+
+#~ msgid "`%s' ignored, conflicts with `-g%s'"
+#~ msgstr "`%s' ¤Ï `-g%s' ¤È¶¥¹ç¤¹¤ë¤¿¤á̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "-param option missing argument"
+#~ msgstr "-param ¥ª¥×¥·¥ç¥ó¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid --param option: %s"
+#~ msgstr "̵¸ú¤Ê --param ¥ª¥×¥·¥ç¥ó: %s"
+
+#~ msgid "invalid parameter value `%s'"
+#~ msgstr "̵¸ú¤Ê¥Ñ¥é¥á¥¿ÃÍ `%s'"
+
+#~ msgid "`-a' option (basic block profile) not supported"
+#~ msgstr "`-a' ¥ª¥×¥·¥ç¥ó(´ðËÜ¥Ö¥í¥Ã¥¯¥×¥í¥Õ¥¡¥¤¥ë)¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "`-ax' option (jump profiling) not supported"
+#~ msgstr "`-ax' ¥ª¥×¥·¥ç¥ó(¥¸¥ã¥ó¥×¥×¥í¥Õ¥¡¥¤¥ë)¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "Ignoring command line option '%s'"
+#~ msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó '%s' ¤ò̵»ë¤·¤Þ¤¹"
+
+#~ msgid "(It is valid for %s but not the selected language)"
+#~ msgstr "(%s ÍѤȤ·¤Æ¤ÏÀµ¾ï¤Ç¤¹¤¬¡¢ÁªÂò¤µ¤ì¤¿¸À¸ì¤È¤·¤Æ¤Ï̵¸ú¤Ç¤¹)"
+
+#~ msgid "-Wuninitialized is not supported without -O"
+#~ msgstr "-Wuninitialized ¤Ï -O Ìµ¤·¤Ë¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored."
+#~ msgstr "`-ax' ¤È `-a' ¤ÏÌ·½â¤¹¤ë¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£`-a' ¤ò̵»ë¤·¤Þ¤·¤¿¡£"
+
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "this target machine does not have delayed branches"
+#~ msgstr "¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤ÏÃÙ±äʬ´ô¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "profiling does not work without a frame pointer"
+#~ msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤Ê¤·¤Ç¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "-f%sleading-underscore ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "Data size %ld.\n"
+#~ msgstr "¥Ç¡¼¥¿¥µ¥¤¥º %ld.\n"
+
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+
+#~ msgid "options passed: "
+#~ msgstr "ÅϤµ¤ì¤¿¥ª¥×¥·¥ç¥ó: "
+
+#~ msgid "options enabled: "
+#~ msgstr "Í­¸ú¥ª¥×¥·¥ç¥ó: "
+
+#~ msgid "floating point numbers not allowed in #if expressions"
+#~ msgstr "#if ¼°¤ÎÃæ¤Ç¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "Invalid number in #if expression"
+#~ msgstr "#if ¼°¤ÎÃæ¤Ë̵¸ú¤Ê¿ôÃÍ"
+
+#~ msgid "Invalid character constant in #if"
+#~ msgstr "̵¸ú¤Êʸ»úÄê¿ô¤¬ #if ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "double quoted strings not allowed in #if expressions"
+#~ msgstr "Æó½Å¤Ë¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¤Ï #if ¼°Æâ¤Ç¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "Invalid token in expression"
+#~ msgstr "̵¸ú¤Ê¥È¡¼¥¯¥ó¤¬¼°¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "octal character constant does not fit in a byte"
+#~ msgstr "8 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó"
+
+#~ msgid "hex character constant does not fit in a byte"
+#~ msgstr "16 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó"
+
+#~ msgid "empty #if expression"
+#~ msgstr "¶õ¤Î #if ¼°¤Ç¤¹"
+
+#~ msgid "Junk after end of expression."
+#~ msgstr "¼°¤Î½ª¤ê°Ê¹ß¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "macro or #include recursion too deep"
+#~ msgstr "¥Þ¥¯¥í¤Þ¤¿¤Ï #include ¤ÎºÆµ¢¤¬¿¼¤¹¤®¤Þ¤¹"
+
+#~ msgid "Usage: %s [switches] input output"
+#~ msgstr "»È¤¤Êý: %s [¥¹¥¤¥Ã¥Á] ÆþÎÏ ½ÐÎÏ"
+
+#~ msgid "-traditional is not supported in C++"
+#~ msgstr "-traditional ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó"
+
+#~ msgid "-traditional and -ansi are mutually exclusive"
+#~ msgstr "-traditional ¤È -ansi ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹"
+
+#~ msgid "Filename missing after -i option"
+#~ msgstr "-i ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Filename missing after -o option"
+#~ msgstr "-o ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Target missing after %s option"
+#~ msgstr "%s ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥¿¡¼¥²¥Ã¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Filename missing after %s option"
+#~ msgstr "%s ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "Macro name missing after -%c option"
+#~ msgstr "-%c ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Þ¥¯¥í̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "-pedantic and -traditional are mutually exclusive"
+#~ msgstr "-pedantic ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹"
+
+#~ msgid "-trigraphs and -traditional are mutually exclusive"
+#~ msgstr "-trigraphs ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹"
+
+#~ msgid "Directory name missing after -I option"
+#~ msgstr "-I ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "`/*' within comment"
+#~ msgstr "`/*' ¤¬¥³¥á¥ó¥ÈÆâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "unterminated #%s conditional"
+#~ msgstr "½ªÃ¼¤Î¤Ê¤¤ #%s ¾ò·ï"
+
+#~ msgid "not in any file?!"
+#~ msgstr "Á´¤¯¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤?!"
+
+#~ msgid "`defined' must be followed by ident or (ident)"
+#~ msgstr "`defined' ¤Î¸å¤í¤Ë ident ¤ä (ident) ¤¬¤³¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "cccp error: invalid special hash type"
+#~ msgstr "cccp ¥¨¥é¡¼: Æüì¥Ï¥Ã¥·¥å·¿¤¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "#include expects \"fname\" or <fname>"
+#~ msgstr "#include ¤Î¸å¤Ë¤Ï \"fname\" ¤ä <fname> ¤¬É¬ÍפǤ¹"
+
+#~ msgid "No include path in which to find %.*s"
+#~ msgstr "%.*s ¤¬¸«¤Ä¤«¤ë¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid macro name"
+#~ msgstr "̵¸ú¤Ê¥Þ¥¯¥í̾"
+
+#~ msgid "invalid macro name `%s'"
+#~ msgstr "̵¸ú¤Ê¥Þ¥¯¥í̾ `%s'"
+
+#~ msgid "parameter name starts with a digit in #define"
+#~ msgstr "#define Ãæ¤Î²¾°ú¿ô̾¤¬¿ô»ú¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "badly punctuated parameter list in #define"
+#~ msgstr "#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬ÊѤ˶èÀÚ¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "unterminated parameter list in #define"
+#~ msgstr "#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬½ªÃ¼¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "\"%.*s\" redefined"
+#~ msgstr "\"%.*s\" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "# operator should be followed by a macro argument name"
+#~ msgstr "# ±é»»»Ò¤Î¸å¤í¤Ë¤Ï¥Þ¥¯¥í°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid format #line command"
+#~ msgstr "#line ¥³¥Þ¥ó¥É¤Î½ñ¼°¤¬Ìµ¸ú¤Ç¤¹"
+
+#~ msgid "undefining `defined'"
+#~ msgstr "`defined' ¤ò undef ¤·¤Þ¤¹"
+
+#~ msgid "undefining `%s'"
+#~ msgstr "`%s' ¤ò undef ¤·¤Þ¤¹"
+
+#~ msgid "extra text at end of directive"
+#~ msgstr "¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë;ʬ¤Ê¥Æ¥¯¥¹¥È¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "#error%.*s"
+#~ msgstr "#error%.*s"
+
+#~ msgid "#warning%.*s"
+#~ msgstr "#warning%.*s"
+
+#~ msgid "#elif not within a conditional"
+#~ msgstr "#elif ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "#%s not within a conditional"
+#~ msgstr "#%s ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "#else or #elif after #else"
+#~ msgstr "#else ¤Î¸å¤í¤Ë #else ¤ä #elif ¤¬¤¢¤ê¤Þ¤¹"
+
+#~ msgid "#else not within a conditional"
+#~ msgstr "#else ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "unterminated string or character constant"
+#~ msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎóÄê¿ôËô¤Ïʸ»úÄê¿ô"
+
+#~ msgid "arguments given to macro `%s'"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "no args to macro `%s'"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "only 1 arg to macro `%s'"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬°ì¸Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "only %d args to macro `%s'"
+#~ msgstr "%d ¸Ä¤Î°ú¿ô¤·¤«¥Þ¥¯¥í `%s' ¤ËÅϤ·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "too many (%d) args to macro `%s'"
+#~ msgstr "°ú¿ô¤Î¿ô (%d) ¤¬¥Þ¥¯¥í `%s' ¤ËÂФ·¤Æ¿¤¹¤®¤Þ¤¹"
+
+#~ msgid ""
+#~ "Internal error in %s, at tradcpp.c:%d\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr ""
+#~ "%s ¤ÇÆâÉô¥¨¥é¡¼¡¢(tradcpp.c:%d)\n"
+#~ "´°Á´¤Ê¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n"
+#~ "%s ¤Ç¤½¤Î¼ê½ç¤ò¸«¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "arrays of functions are not meaningful"
+#~ msgstr "´Ø¿ô¤ÎÇÛÎó¤Ï°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "function return type cannot be function"
+#~ msgstr "´Ø¿ô¤ÎÊÖ¤¹·¿¤¬´Ø¿ô¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹"
+
+#~ msgid "Tree check: expected %s, have %s in %s, at %s:%d"
+#~ msgstr "Tree ¸¡ºº: %s ¤¬¤¢¤ë¤Ù¤­½ê¤Ë %s ¤¬¤¢¤ê¤Þ¤¹(%s Æâ, %s:%d)"
+
+#~ msgid "Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
+#~ msgstr "Tree ¸¡ºº: ¥¯¥é¥¹ '%c' ¤Î¤Ï¤º¤¬ '%c' (%s) ¤Ç¤¹(%s Æâ, %s:%d)"
+
+#~ msgid "register name not specified for `%s'"
+#~ msgstr "¥ì¥¸¥¹¥¿Ì¾¤¬ `%s' ÍѤ˻ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "invalid register name for `%s'"
+#~ msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤Æ̵¸ú¤Ç¤¹"
+
+#~ msgid "data type of `%s' isn't suitable for a register"
+#~ msgstr "`%s' ¤Î¥Ç¡¼¥¿·¿¤Ï register ¤Ë¤Ï¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "register specified for `%s' isn't suitable for data type"
+#~ msgstr "`%s' ¤Ë»ØÄꤵ¤ì¤¿ register ¤Ï¥Ç¡¼¥¿·¿¤Ë¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "global register variable has initial value"
+#~ msgstr "Âç°è register ÊÑ¿ô¤¬½é´üÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "volatile register variables don't work as you might wish"
+#~ msgstr "volatile register ÊÑ¿ô¤Ï°Õ¿Þ¤·¤¿¤è¤¦¤Ë¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#~ msgid "register name given for non-register variable `%s'"
+#~ msgstr "¥ì¥¸¥¹¥¿Ì¾¤¬Èó register ÊÑ¿ô `%s' ¤ËÍ¿¤¨¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "size of variable `%s' is too large"
+#~ msgstr "ÊÑ¿ô `%s' ¤Î¥µ¥¤¥º¤¬Â礭¤¹¤®¤Þ¤¹"
+
+#~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d."
+#~ msgstr "`%s' ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤¤¤Ç¤¹¡£ %d ¤ò»È¤¤¤Þ¤¹¡£"
+
+#~ msgid "requested alignment for %s is greater than implemented alignment of %d."
+#~ msgstr "%s ¤ËÍ׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï¼ÂÁõ¤µ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È %d ¤è¤êÂ礭¤¤¤Ç¤¹"
+
+#~ msgid "floating point trap outputting a constant"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¤Î¨Ãͤò½ÐÎϤ¹¤ëºÝ¤Ë¥È¥é¥Ã¥×¤¬¤«¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "initializer for integer value is too complicated"
+#~ msgstr "À°¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬Ê£»¨¤¹¤®¤Þ¤¹"
+
+#~ msgid "initializer for floating value is not a floating constant"
+#~ msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬¡¢ÉâÆ°¾®¿ôÅÀÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "unknown set constructor type"
+#~ msgstr "ÉÔÌÀ¤ÊÀßÄêºÑ¥³¥ó¥¹¥È¥é¥¯¥¿·¿¤Ç¤¹"
+
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ"
+
+#~ msgid "weak declaration of `%s' must be public"
+#~ msgstr "`%s' ¤Î weak Àë¸À¤Ï public ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "weak declaration of `%s' must precede definition"
+#~ msgstr "`%s' ¤Î weak Àë¸À¤ÏÄêµÁ¤è¤ê¤âÀè¤Ë¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "only weak aliases are supported in this configuration"
+#~ msgstr "¸½ºß¤ÎÀßÄê¤Ç¤Ï weak alias ¤·¤«¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "alias definitions not supported in this configuration; ignored"
+#~ msgstr "¸½ºß¤ÎÀßÄê¤Ç¤Ï alias ÄêµÁ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- Ìµ»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "Virtual array %s[%lu]: element %lu out of bounds"
+#~ msgstr "²¾Áۥơ¼¥Ö¥ë %s[%lu]: Í×ÁÇ %lu ¤¬Èϰϳ°¤Ç¤¹"
+
+#~ msgid "No sclass for %s stab (0x%x)\n"
+#~ msgstr "%s ¥¹¥¿¥ÖÍѤΠsclass ¤¬¤¢¤ê¤Þ¤»¤ó (0x%x)\n"
+
+#~ msgid "`-p' not supported; use `-pg' and gprof(1)"
+#~ msgstr "`-p' ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. `-pg' ¤È gprof(1) ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "may not use both -EB and -EL"
+#~ msgstr "-EB ¤È -EL ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#~ msgstr "-mapcs-26 ¤È -mapcs-32 ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "-msoft-float and -mhard_float may not be used together"
+#~ msgstr "-msoft-float ¤È -mhard_float ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "-mbig-endian and -mlittle-endian may not be used together"
+#~ msgstr "-mbig-endian ¤È -mlittle-endian ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "Incompatible interworking options"
+#~ msgstr "¸ß´¹À­¤Î¤Ê¤¤ interworking ¥ª¥×¥·¥ç¥ó"
+
+#~ msgid "-mbsd and -pedantic incompatible"
+#~ msgstr "-mbsd ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mbsd and -mxopen incompatible"
+#~ msgstr "-mbsd ¤È -mxopen ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mxopen and -pedantic incompatible"
+#~ msgstr "-mxopen ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "A -ifile option requires a -map option"
+#~ msgstr "-ifile ¥ª¥×¥·¥ç¥ó¤Ë¤Ï -map ¥ª¥×¥·¥ç¥ó¤¬É¬ÍפǤ¹"
+
+#~ msgid "mno-cygwin and mno-win32 are not compatible"
+#~ msgstr "mno-cygwin ¤È mno-win32 ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "shared and mdll are not compatible"
+#~ msgstr "shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-static not valid with -mcoff"
+#~ msgstr "-static ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-shared not valid with -mcoff"
+#~ msgstr "-shared ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-symbolic not valid with -mcoff"
+#~ msgstr "-symbolic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-fpic is not valid with -mcoff"
+#~ msgstr "-fpic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-fPIC is not valid with -mcoff"
+#~ msgstr "-fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-fpic not valid with -mcoff"
+#~ msgstr "-fpic  -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-fPIC not valid with -mcoff"
+#~ msgstr "-fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "bx]"
+#~ msgstr "bx]"
+
+#~ msgid "bx"
+#~ msgstr "bx"
+
+#~ msgid "cx"
+#~ msgstr "cx"
+
+#~ msgid "-p option not supported: use -pg instead"
+#~ msgstr "-p ¥ª¥×¥·¥ç¥ó¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. Âå¤ï¤ê¤Ë -pg ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#~ msgid "choose either big or little endian, not both"
+#~ msgstr "¥Ó¥Ã¥°¤Þ¤¿¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤"
+
+#~ msgid "choose either m340 or m210 not both"
+#~ msgstr "m340 ¤Þ¤¿¤Ï m210 ¤ÎξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤"
+
+#~ msgid "the m210 does not have little endian support"
+#~ msgstr "m210 ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥µ¥Ý¡¼¥È¤ò¹Ô¤Ê¤¨¤Þ¤»¤ó"
+
+#~ msgid "-pipe is not supported."
+#~ msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "may not use both -mfp64 and -msingle-float"
+#~ msgstr "-mfp64 ¤È -msingle-float ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "may not use both -mfp64 and -m4650"
+#~ msgstr "-mfp64 ¤È -m4650 ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-mhard-float not supported."
+#~ msgstr "-mhard-float ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó."
+
+#~ msgid "-msingle-float and -msoft-float can not both be specified."
+#~ msgstr "-msingle-float ¤È -msoft-float ¤ò°ìÅ٤˻ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#~ msgid "-p profiling is no longer supported.  Use -pg instead."
+#~ msgstr "-p ¤Ç¤Î¥×¥í¥Õ¥¡¥¤¥ë¤Ï¤â¤¦Ä󶡤µ¤ì¤Þ¤»¤ó¡£Âå¤ï¤ê¤Ë -pg ¤ò»È¤¤¤Þ¤·¤ç¤¦¡£"
+
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "-mg ¤Ç¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ÏÄ󶡤µ¤ì¤Þ¤»¤ó\n"
+
+#~ msgid "GNU C does not support -C without using -E"
+#~ msgstr "GNU C ¤Ï -E ¤òȼ¤ï¤Ê¤¤ -C ¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "-pg and -fomit-frame-pointer are incompatible"
+#~ msgstr "-pg ¤È -fomit-frame-pointer ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-E required when input is from standard input"
+#~ msgstr "ÆþÎϤ¬É¸½àÆþÎϤξì¹ç¤Ï -E ¤¬É¬ÍפǤ¹"
+
+#~ msgid "Compilation of header file requested"
+#~ msgstr "¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¤¬Í׵ᤵ¤ì¤Þ¤·¤¿"
+
+#~ msgid "-fjni and -femit-class-files are incompatible"
+#~ msgstr "-fjni ¤È -femit-class-files ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "-fjni and -femit-class-file are incompatible"
+#~ msgstr "-fjini ¤È -femit-class-file ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "iterator `%s' has derived type"
+#~ msgstr "È¿Éü»Ò `%s' ¤ÏÇÉÀ¸·¿¤Ç¤¹"
+
+#~ msgid "%s before character constant"
+#~ msgstr "ʸ»úÄê¿ô¤ÎÁ°¤Ë %s"
+
+#~ msgid "%s before character 0%o"
+#~ msgstr "ʸ»ú 0%2$o ¤ÎÁ°¤Ë %1$s"
+
+#~ msgid "more than one `f' in numeric constant"
+#~ msgstr "¿ôÄê¿ô¤Ë 1¤Ä°Ê¾å¤Î `f'"
+
+#~ msgid "more than one `l' in numeric constant"
+#~ msgstr "¿ôÄê¿ô¤Ë 1¤Ä°Ê¾å¤Î `l'"
+
+#~ msgid "invalid identifier `%s'"
+#~ msgstr "̵¸ú¤Ê¼±Ê̻Ҡ`%s'"
+
+#~ msgid "parse error at `..'"
+#~ msgstr "`..' ¤Ç¹½Ê¸²òÀÏ¥¨¥é¡¼"
+
+#~ msgid "nondigits in number and not hexadecimal"
+#~ msgstr "¿ôÃͤ˥¢¥é¥Ó¥¢¿ô»ú¤Ç¤Ê¤¯¡¢16 ¿Ê¤Ç¤â¤Ê¤¤Ê¸»ú"
+
+#~ msgid "numeric constant contains digits beyond the radix"
+#~ msgstr "¿ôÃÍÄê¿ô¤¬´ð¿ô¤òĶ¤¨¤¿¥¢¥é¥Ó¥¢¿ô»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "two `u's in integer constant"
+#~ msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'"
+
+#~ msgid "Unterminated string constant"
+#~ msgstr "ʸ»úÎóÄê¿ô¤¬½ªÎ»¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "ʸˡ¥¨¥é¡¼: ÄÉ¿ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "parser stack overflow"
+#~ msgstr "¹½Ê¸²òÀÏ´ï¤Î¥¹¥¿¥Ã¥¯¤¬°î¤ì¤Þ¤·¤¿"
+
+#~ msgid "invalid `for (ITERATOR)' syntax"
+#~ msgstr "̵¸ú¤Ê `for (È¿Éü»Ò)' ¹½Ê¸¤Ç¤¹"
+
+#~ msgid "`for (%s)' inside expansion of same iterator"
+#~ msgstr "Ʊ¤¸È¿Éü»Ò¤ÎÆ⦤ˤ¢¤ë `for (%s)'"
+
+#~ msgid "case label within scope of cleanup or variable array"
+#~ msgstr "case ¥é¥Ù¥ë¤¬¡¢²òÂΤޤ¿¤Ï²ÄÊÑÇÛÎó¤Î¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "parse error; also virtual memory exceeded"
+#~ msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼ -- ¤µ¤é¤Ë²¾ÁÛ¥á¥â¥ê¤òĶ²á¤·¤Þ¤·¤¿"
+
+#~ msgid "duplicate array index in initializer"
+#~ msgstr "½é´ü²½»ÒÆâ¤Ë½ÅÊ£¤·¤¿ÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹"
+
+#~ msgid "duplicate initializer"
+#~ msgstr "½ÅÊ£¤·¤¿½é´ü²½»Ò"
+
+#~ msgid "thumb_load_double_from_address: destination is not a register"
+#~ msgstr "thumb_load_double_from_address: Âоݤ¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "thumb_load_double_from_address: source is not a computed memory address"
+#~ msgstr "thumb_load_double_from_address: ¸µ¤¬·×»»ºÑ¤ß¥á¥â¥ê¥¢¥É¥ì¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "thumb_load_double_from_address: base is not a register"
+#~ msgstr "thumb_load_double_from_address: ¥Ù¡¼¥¹¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "thumb_load_double_from_address: Unhandled address calculation"
+#~ msgstr "thumb_load_double_from_address: °·¤ï¤ì¤Ê¤¤¥¢¥É¥ì¥¹·×»»"
+
+#~ msgid "ACCUM_HIGH_REGS class in limit_reload_class"
+#~ msgstr "limit_reload_class ¤Ë ACCUM_HIGH_REGS ¥¯¥é¥¹"
+
+#~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class"
+#~ msgstr "limit_reload_class ¤Ç YH_OR_ACCUM_HIGH_REGS ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "YL found in limit_reload_class"
+#~ msgstr "limit_reload_class ¤Ç YL ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#~ msgid "Bad register extension code"
+#~ msgstr "ÉÔÀµ¤Ê¥ì¥¸¥¹¥¿³ÈÄ¥¥³¡¼¥É"
+
+#~ msgid "Invalid offset in ybase addressing"
+#~ msgstr "ybase ¥¢¥É¥ì¥·¥ó¥°¤Ë̵¸ú¤Ê¥ª¥Õ¥»¥Ã¥È"
+
+#~ msgid "Invalid shift operator in emit_1600_core_shift"
+#~ msgstr "emit_1600_core_shift ¤Ç¤Î̵¸ú¤Ê¥·¥Õ¥È±é»»»Ò"
+
+#~ msgid "Invalid mode for gen_tst_reg"
+#~ msgstr "gen_tst_reg ¤Ë¤È¤Ã¤Æ¤Î̵¸ú¤Ê¥â¡¼¥É"
+
+#~ msgid "Invalid mode for integer comparison in gen_compare_reg"
+#~ msgstr "gen_compare_reg ¤Ç¤ÎÀ°¿ôÈæ³Ó¤Ë¤È¤Ã¤Æ¤Î̵¸ú¤Ê¥â¡¼¥É"
+
+#~ msgid "Invalid register for compare"
+#~ msgstr "̵¸ú¤ÊÈæ³ÓÍѥ쥸¥¹¥¿"
+
+#~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT"
+#~ msgstr "PRINT_OPERAND: Ê¸»ú %c ¤¬¸«¤Ä¤«¤ê¡¢Ì¿Îá¤Ï CONST_INT ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "-mptr%d not allowed on -m%d"
+#~ msgstr "-mptr%d ¤Ï -m%d ¤Î¾å¤Ç¤Ï»È¤¨¤Þ¤»¤ó"
+
+#~ msgid "parse errors have confused me too much"
+#~ msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼¤Ç¡¢¤«¤Ê¤êº®Í𤷤Ƥ·¤Þ¤¤¤Þ¤·¤¿"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿"
+
+#~ msgid "destructor for alien class `%s' cannot be a member"
+#~ msgstr "¾¤Î¥¯¥é¥¹ `%s' ¤Î¥Ç¥¹¥È¥é¥¯¥¿¤ò¡¢¥á¥ó¥Ð¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "constructor for alien class `%s' cannot be a member"
+#~ msgstr "¾¤Î¥¯¥é¥¹ `%s' ¤Î¥Ç¥¹¥È¥é¥¯¥¿¤ò¡¢¥á¥ó¥Ð¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "trying to make class `%s' a friend of global scope"
+#~ msgstr "¥¯¥é¥¹ `%s' ¤òÂç°è¥¹¥³¡¼¥×¤Î friend ¤Ë¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "parameter invalidly declared method type"
+#~ msgstr "¥Ñ¥é¥á¥¿¤Ï¥á¥½¥Ã¥É¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿"
+
+#~ msgid "parameter invalidly declared offset type"
+#~ msgstr "¥Ñ¥é¥á¥¿¤¬¥ª¥Õ¥»¥Ã¥È¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿"
+
+#~ msgid "`void' in parameter list must be entire list"
+#~ msgstr "¥Ñ¥é¥á¥¿¥ê¥¹¥ÈÆâ¤Î `void' ¤Ï¥ê¥¹¥ÈÁ´ÂΤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "no file specified with -fdump-translation-unit"
+#~ msgstr "-fdump-translation-unit ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "(you really want to initialize it separately)"
+#~ msgstr "(ËÜÅö¤Ë¤½¤¦¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢Ê¬³ä¤·¤Æ½é´ü²½¤·¤Æ¤¯¤À¤µ¤¤)"
+
+#~ msgid "`operator new' takes type `size_t' parameter"
+#~ msgstr "`operator new' ¤Ï `size_t' ¥Ñ¥é¥á¥¿¤ò¤È¤ê¤Þ¤¹"
+
+#~ msgid "`operator new' takes type `size_t' as first parameter"
+#~ msgstr "`operator new' ¤ÏÂè°ì°ú¿ô¤È¤·¤Æ `size_t' ¤ò¤È¤ê¤Þ¤¹"
+
+#~ msgid "`operator delete' must return type `void'"
+#~ msgstr "`operator delete' ¤ÎÌá¤ê·¿¤Ï `void' ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "`operator delete' takes type `void *' as first parameter"
+#~ msgstr "`operator delete' ¤ÏÂè°ì°ú¿ô¤È¤·¤Æ `void *' ·¿¤ò¤È¤ê¤Þ¤¹"
+
+#~ msgid "too many arguments in declaration of `operator delete'"
+#~ msgstr "`operator delete' ¤ÎÀë¸ÀÆâ¤Ë¿¤¹¤®¤ë°ú¿ô"
+
+#~ msgid "`...' invalid in specification of `operator delete'"
+#~ msgstr "`...' `operator delete' ¤Î»ÅÍÍÆâ¤Ç̵¸ú¤Ç¤¹"
+
+#~ msgid "`default' label within scope of cleanup or variable array"
+#~ msgstr "`default' ¥é¥Ù¥ë¤¬¡¢²òÂΤޤ¿¤Ï²ÄÊÑÇÛÎó¤Î¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "bad array initializer"
+#~ msgstr "ÇÛÎó¤ÎÉÔÀµ¤Ê½é´ü²½"
+
+#~ msgid "end of file encountered inside string constant"
+#~ msgstr "ʸ»úÎóÄê¿ô¤ÎÃæ¤Ç¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤ò¸¡½Ð¤·¤Þ¤·¤¿"
+
+#~ msgid "end of file encountered inside character constant"
+#~ msgstr "ʸ»úÄê¿ô¤ÎÃæ¤Ç¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤ò¸¡½Ð¤·¤Þ¤·¤¿"
+
+#~ msgid "invalid #pragma vtable"
+#~ msgstr "̵¸ú¤Ê #pragma vtable"
+
+#~ msgid "invalid `#pragma implementation'"
+#~ msgstr "̵¸ú¤Ê `#pragma implementation'"
+
+#~ msgid "%s at end of saved text"
+#~ msgstr "ÊݸºÑ¤ß¥Æ¥­¥¹¥È¤ÎËöÈø¤Ç%s"
+
+#~ msgid "complex integer constant is too wide for `__complex int'"
+#~ msgstr "Ê£ÁÇ¿ô·¿À°¿ôÄê¿ô¤Ï `__complex int' ¤Ë¤È¤Ã¤Æ¹­¤¹¤®¤Þ¤¹"
+
+#~ msgid "request for member `%s' is ambiguous in multiple inheritance lattice"
+#~ msgstr "Í׵ᤵ¤ì¤¿¥á¥ó¥Ð `%s' ¤Ï¿½Å·Ñ¾µ¥°¥é¥Õ¤ÎÃæ¤ÇÛ£Ëæ¤Ç¤¹"
+
+#~ msgid "Internal compiler error."
+#~ msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼."
+
+#~ msgid "Please submit a full bug report."
+#~ msgstr "¾Ü¤·¤¤¾õ¶·¤ò¥Ð¥°¥ì¥Ý¡¼¥È¤È¤·¤ÆÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£"
+
+#~ msgid "duplicate label `%s' in switch statement"
+#~ msgstr "switch Ê¸¤ÎÃæ¤Ç¥é¥Ù¥ë `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "duplicate label (%d) in switch statement"
+#~ msgstr "switch Ê¸¤ÎÃæ¤Ç¥é¥Ù¥ë (%d) ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "range values `%s' and `%s' reversed"
+#~ msgstr "ÈϰϤÎÃÍ `%s' ¤È `%s' ¤¬µÕ¤Ç¤¹"
+
+#~ msgid "range values reversed"
+#~ msgstr "ÈϰϤÎÃͤ¬µÕ¤Ç¤¹"
+
+#~ msgid "bad is_error(%d) in v_message"
+#~ msgstr "v_message Ãæ ÉÔÀµ¤Ê is_error(%d)"
+
+#~ msgid "'defined' without an identifier"
+#~ msgstr "¼±Ê̻ҤΤʤ¤ 'defined'"
+
+#~ msgid "included file `%s' exists but is not readable"
+#~ msgstr "include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë `%s' ¤Ï¡¢Â¸ºß¤·¤Þ¤¹¤¬Æɤá¤Þ¤»¤ó"
+
+#~ msgid "%s is a directory"
+#~ msgstr "%s ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+
+#~ msgid "macro argument \"%s\" is stringified"
+#~ msgstr "¥Þ¥¯¥í°ú¿ô \"%s\" ¤Ïʸ»úÎ󲽤µ¤ì¤Þ¤¹"
+
+#~ msgid "`##' at start of macro definition"
+#~ msgstr "`##' ¤¬¥Þ¥¯¥íÄêµÁ¤Î»Ï¤á¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "`##' at end of macro definition"
+#~ msgstr "`##' ¤¬¥Þ¥¯¥íÄêµÁ¤Î½ª¤ê¤Ë¤¢¤ê¤Þ¤¹"
+
+#~ msgid "empty object-like macro went through full #define"
+#~ msgstr "¶õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¤è¤¦¤Ê¥Þ¥¯¥í¤Ï #define Á´¤Æ¤òÄ̤êÈ´¤±¤Þ¤·¤¿"
+
+#~ msgid "first token = %d not %d in collect_formal_parameters"
+#~ msgstr "collect_formal_parameters ÃæºÇ½é¤Î¥È¡¼¥¯¥ó = %d (%d ¤Ç¤Ï¤Ê¤¤)"
+
+#~ msgid "impossible token in macro argument list"
+#~ msgstr "¥Þ¥¯¥í°ú¿ô¥ê¥¹¥È¤Ë¤¢¤êÆÀ¤Ê¤¤¥È¡¼¥¯¥ó"
+
+#~ msgid "illegal token in macro argument list"
+#~ msgstr "¥Þ¥¯¥í°ú¿ô¥ê¥¹¥È¤ËÉÔÀµ¤Ê¥È¡¼¥¯¥ó"
+
+#~ msgid "another parameter follows \"...\""
+#~ msgstr "\"...\" ¤Î¸å¡¢¤µ¤é¤Ë¥Ñ¥é¥á¥¿¤¬Â³¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ msgid "collect_params: argc=%d argslen=0"
+#~ msgstr "collect_params: argc=%d argslen=0"
+
+#~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name"
+#~ msgstr "C99 ¤Ï¥Þ¥¯¥í°ú¿ô̾¤È¤·¤Æ __VA_ARGS__ ¤Î»ÈÍѤÏǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "C89 does not permit varargs macros"
+#~ msgstr "C89 ¤Ç¤Ï varargs ¥Þ¥¯¥í¤Ïǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "collect_params: impossible token type %d"
+#~ msgstr "collect_params: ¤¢¤êÆÀ¤Ê¤¤¥È¡¼¥¯¥ó·¿ %d"
+
+#~ msgid "attempt to use poisoned `%s'."
+#~ msgstr "±øÀ÷¤µ¤ì¤¿ `%s' ¤ÎÍøÍѤò»î¤·¤Þ¤¹¡£"
+
+#~ msgid "macroexpand: unexpected token %d (wanted LPAREN)"
+#~ msgstr "macroexpand: Í½´ü¤·¤Ê¤¤¥È¡¼¥¯¥ó %d (LPAREN ¤Î¤Ï¤º)"
+
+#~ msgid "unterminated macro call"
+#~ msgstr "½ªÃ¼¤·¤Æ¤¤¤Ê¤¤¥Þ¥¯¥í¸Æ¤Ó½Ð¤·"
+
+#~ msgid "macro `%s' used with just one arg"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô¤¬°ì¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "macro `%s' used with only %d args"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô(%d ¸Ä)¤¬¾¯¤Ê¤¹¤®¤Þ¤¹"
+
+#~ msgid "macro `%s' used with too many (%d) args"
+#~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô(%d ¸Ä)¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ "  -pedantic                 Issue all warnings demanded by strict ANSI C\n"
+#~ "  -pedantic-errors          Issue -pedantic warnings as errors instead\n"
+#~ "  -traditional              Follow K&R pre-processor behaviour\n"
+#~ "  -trigraphs                Support ANSI C trigraphs\n"
+#~ "  -lang-c                   Assume that the input sources are in C\n"
+#~ "  -lang-c89                 Assume that the input sources are in C89\n"
+#~ "  -lang-c++                 Assume that the input sources are in C++\n"
+#~ "  -lang-objc                Assume that the input sources are in ObjectiveC\n"
+#~ "  -lang-objc++              Assume that the input sources are in ObjectiveC++\n"
+#~ "  -lang-asm                 Assume that the input sources are in assembler\n"
+#~ "  -lang-fortran\t\t    Assume that the input sources are in Fortran\n"
+#~ "  -lang-chill               Assume that the input sources are in Chill\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999\n"
+#~ "  -+                        Allow parsing of C++ style features\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -Wtrigraphs               Warn if trigraphs are encountered\n"
+#~ "  -Wno-trigraphs            Do not warn about trigraphs\n"
+#~ "  -Wcomment{s}              Warn if one comment starts inside another\n"
+#~ "  -Wno-comment{s}           Do not warn about comments\n"
+#~ "  -Wtraditional             Warn if a macro argument is/would be turned into\n"
+#~ "                             a string if -traditional is specified\n"
+#~ "  -Wno-traditional          Do not warn about stringification\n"
+#~ "  -Wundef                   Warn if an undefined macro is used by #if\n"
+#~ "  -Wno-undef                Do not warn about testing undefined macros\n"
+#~ "  -Wimport                  Warn about the use of the #import directive\n"
+#~ "  -Wno-import               Do not warn about the use of #import\n"
+#~ "  -Werror                   Treat all warnings as errors\n"
+#~ "  -Wno-error                Do not treat warnings as errors\n"
+#~ "  -Wall                     Enable all preprocessor warnings\n"
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       As -M, but put output in a .d file\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ "  -g3                       Include #define and #undef directives in the output\n"
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question> (<answer>)   Assert the <answer> to <question>\n"
+#~ "  -A-<question> (<answer>)  Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -$                        Do not allow '$' in identifiers\n"
+#~ "  -remap                    Remap file names when including files.\n"
+#~ "  --version                 Display version information\n"
+#~ "  -h or --help              Display this information\n"
+#~ msgstr ""
+#~ "¥¹¥¤¥Ã¥Á:\n"
+#~ "  -include <file>           Â¾¤Î¥Õ¥¡¥¤¥ë°ÊÁ°¤Ë <file> ¤ÎÆâÍƤò include\n"
+#~ "  -imacros <file>           <file> Ãæ¥Þ¥¯¥í¤ÎÄêµÁ¤ò¼õÍý¤¹¤ë\n"
+#~ "  -iprefix <path>           °Ê¹ß¤ÎÆó¤Ä¤Î¥ª¥×¥·¥ç¥ó¤Ë <path> ÀÜƬ¼­¤ò¤Ä¤±¤ë\n"
+#~ "  -iwithprefix <dir>        ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë <dir> ¤òÄɲÃ\n"
+#~ "  -iwithprefixbefore <dir>  ¼ç¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë <dir> ¤òÄɲÃ\n"
+#~ "  -isystem <dir>            ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎºÇ½é¤Ë <dir> ¤òÄɲÃ\n"
+#~ "  -idirafter <dir>          ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë <dir> ¤òÄɲÃ\n"
+#~ "  -I <dir>                  ¼ç¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë <dir> ¤òÄɲÃ\n"
+#~ "  -I-                       ¤­¤áºÙ¤«¤Ê¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹À©¸æ; info ¤ò¸«¤è\n"
+#~ "  -nostdinc                 ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ç¥£¥ì¥¯¥È¥ê¤òõ¤µ¤Ê¤¤\n"
+#~ "                             (-isystem ¤Ç»ØÄꤵ¤ì¤¿¤é»ÈÍѤµ¤ì¤Þ¤¹)\n"
+#~ "  -nostdinc++               C++ ÍÑ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ç¥£¥ì¥¯¥È¥ê¤òõ¤µ¤Ê¤¤\n"
+#~ "  -o <file>                 <file> ¤ËÂФ·¤Æ½ÐÎϤ¹¤ë\n"
+#~ "  -pedantic                 ¸·Ì©¤Ê ANSI C ¤ÎÍ׵᤹¤ë·Ù¹ð¤òȯ¹Ô\n"
+#~ "  -pedantic-errors          -pedantic ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æȯ¹Ô\n"
+#~ "  -traditional              K&R ¥×¥ê¥×¥í¥»¥Ã¥µ¤Î¿¶¤ëÉñ¤¤¤ËÄÉ¿ï\n"
+#~ "  -trigraphs                ANSI C ¥È¥é¥¤¥°¥é¥Õ¤ò¥µ¥Ý¡¼¥È\n"
+#~ "  -lang-c                   ÆþÎϤò C ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-c89                 ÆþÎϤò C89 ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-c++                 ÆþÎϤò C++ ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-objc                ÆþÎϤò ObjectiveC ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-objc++              ÆþÎϤò ObjectiveC++ ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-asm                 ÆþÎϤò assembler ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-fortran             ÆþÎϤò Fortran ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -lang-chill               ÆþÎϤò Chill ¤À¤È²¾Äꤹ¤ë\n"
+#~ "  -std=<std name>           Å¬¹ç¤¹¤ëɸ½à¤ò°Ê²¼¤«¤é°ì¤Ä»ØÄê;\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999\n"
+#~ "  -+                        C++ ¥¹¥¿¥¤¥ë¤Î¥Ñ¡¼¥¸¥ó¥°¤òµö²Ä\n"
+#~ "  -w                        ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë\n"
+#~ "  -Wtrigraphs               ¥È¥é¥¤¥°¥é¥Õ¤ò¸«¤Ä¤±¤¿¤é·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-trigraphs            ¥È¥é¥¤¥°¥é¥Õ¤ò¸«¤Ä¤±¤Æ¤â·Ù¹ð¤·¤Ê¤¤\n"
+#~ "  -Wcomment{s}              ¥³¥á¥ó¥È¤ÎÃæ¤Ë¥³¥á¥ó¥È¤¬¤¢¤ì¤Ð·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-comment{s}           ¥³¥á¥ó¥È¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¤·¤Ê¤¤\n"
+#~ "  -Wtraditional             -traditional ¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢¥Þ¥¯¥í°ú¿ô¤¬\n"
+#~ "                             Ê¸»úÎó¤ËÊѹ¹¤µ¤ì¤ë¤è¤¦¤Ê¤é·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-traditional          Ê¸»úÎó»ØÄê¤Ë´Ø¤·¤Æ·Ù¹ð¤·¤Ê¤¤\n"
+#~ "  -Wundef                   #if ¤Ç̤ÄêµÁ¤Î¥Þ¥¯¥í¤¬»È¤ï¤ì¤Æ¤¤¤¿¤é·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-undef                Ì¤ÄêµÁ¥Þ¥¯¥í¤Î¥Æ¥¹¥È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤·¤Ê¤¤\n"
+#~ "  -Wimport                  #import ¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤¹¤ë\n"
+#~ "  -Wno-import               #import ¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤·¤Ê¤¤\n"
+#~ "  -Werror                   Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ°·¤¦\n"
+#~ "  -Wno-error                ·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ°·¤ï¤Ê¤¤\n"
+#~ "  -Wall                     Á´¤Æ¤Î¥×¥ê¥×¥í¥»¥Ã¥µ¤Î·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n"
+#~ "  -M                        make ¤Î°Í¸´Ø·¸¤òÀ¸À®¤¹¤ë\n"
+#~ "  -MM                       -M ¤ÈƱ¤¸¤À¤¬¡¢¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤Ï̵»ë¤¹¤ë\n"
+#~ "  -MD                       -M ¤ÈƱ¤¸¤À¤¬¡¢.d ¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ¹¤ë\n"
+#~ "  -MMD                      -MD ¤ÈƱ¤¸¤À¤¬¡¢¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤Ï̵»ë¤¹¤ë\n"
+#~ "  -MG                       ¸«¤Ä¤«¤é¤Ê¤¤¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÏÀ¸À®¤µ¤ì¤ë¤â¤Î¤È¤¹¤ë\n"
+#~ "  -g3                       #define ¤È #undef µ¿»÷Ì¿Îá¤ò½ÐÎϤ˴ޤá¤ë\n"
+#~ "  -D<macro>                 <macro> ¤òÄêµÁ¤·¡¢Ê¸»úÎó '1' ¤ò¤½¤ÎÃͤȤ¹¤ë\n"
+#~ "  -D<macro>=<val>           <macro> ¤òÄêµÁ¤·¡¢<val> ¤ò¤½¤ÎÃͤȤ¹¤ë\n"
+#~ "  -A<question> (<answer>)   <question> ¤Ï <answer> ¤À¤ÈÃǸÀ¤¹¤ë\n"
+#~ "  -A-<question> (<answer>)  <question> ¤Ï <answer> ¤À¤È¤·¤Ê¤¤\n"
+#~ "  -U<macro>                 <macro> ÄêµÁ¤ò¤ä¤á¤ë\n"
+#~ "  -v                        ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤¹¤ë\n"
+#~ "  -H                        ÍøÍѤµ¤ì¤ë¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î̾Á°¤òɽ¼¨¤¹¤ë\n"
+#~ "  -C                        ¥³¥á¥ó¥È¤òÇË´þ¤·¤Ê¤¤\n"
+#~ "  -dM                       ËöÈø¤ÇÍ­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥Þ¥¯¥íÄêµÁ¥ê¥¹¥È¤òɽ¼¨¤¹¤ë\n"
+#~ "  -dD                       ½ÐÎϤ˥ޥ¯¥íÄêµÁ¤ò»Ä¤·¤Æ¤ª¤¯\n"
+#~ "  -dN                       -dD ¤ÈƱ¤¸¤À¤¬¡¢Ì¾Á°¤À¤±¤ò»Ä¤·¤Æ¤ª¤¯\n"
+#~ "  -dI                       #include µ¿»÷Ì¿Îá¤ò½ÐÎϤ˴ޤá¤ë\n"
+#~ "  -ftabstop=<number>        Êó¹ð¥«¥é¥à¤Î¥¿¥Ö´Ö³Ö¤ò»ØÄꤹ¤ë\n"
+#~ "  -P                        #line µ¿»÷Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤\n"
+#~ "  -$                        ¼±Ê̻Ҥˠ'$' ¤òµö¤µ¤Ê¤¤\n"
+#~ "  -remap                    ¥Õ¥¡¥¤¥ë¤ò include ¤¹¤ë¤È¤­¥Õ¥¡¥¤¥ë̾¤òºÆ¥Þ¥Ã¥×\n"
+#~ "  --version                 ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+#~ "  -h or --help              ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid "mark active in cpp_pop_buffer"
+#~ msgstr "cpp_pop_buffer ¤Ç¥Þ¡¼¥¯¤¬¥¢¥¯¥Æ¥£¥Ö"
+
+#~ msgid "length < 0 in cpp_expand_to_buffer"
+#~ msgstr "cpp_expand_to_buffer Ãæ¤Ç length < 0"
+
+#~ msgid "backslash-newline within line comment"
+#~ msgstr "¹Ô¥³¥á¥ó¥ÈÆâ¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å²þ¹Ô"
+
+#~ msgid "C++ style comments are not allowed in traditional C"
+#~ msgstr "C++ ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤ÏÅÁÅýŪ C ¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "embedded null character ignored"
+#~ msgstr "Ëä¤á¹þ¤Þ¤ì¤¿ null Ê¸»ú¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿"
+
+#~ msgid "string constant runs past end of line"
+#~ msgstr "ʸ»úÎóÄê¿ô¤¬¹Ô¤Î½ª¤ï¤ê¤Ç½ªÃ¼¤·¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "\\r escape inside string constant"
+#~ msgstr "ʸ»úÎóÄê¿ôÃæ¤Î \\r ¥¨¥¹¥±¡¼¥×"
+
+#~ msgid "null characters in string or character constant"
+#~ msgstr "ʸ»úÎóËô¤Ïʸ»úÄê¿ôÃæ¤Ë null Ê¸»ú"
+
+#~ msgid "missing '>' in `#include <FILENAME>'"
+#~ msgstr "`#include <¥Õ¥¡¥¤¥ë̾>' ¤Ë '>' ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "unrecognized escape \\r%c"
+#~ msgstr "ǧ¼±ÉÔǽ¤Î¥¨¥¹¥±¡¼¥× \\r%c"
+
+#~ msgid "vertical tab in preprocessing directive"
+#~ msgstr "¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤Ë¿âľ¥¿¥Öʸ»ú"
+
+#~ msgid "form feed in preprocessing directive"
+#~ msgstr "¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤Ë¥Õ¥©¡¼¥à¥Õ¥£¡¼¥É"
+
+#~ msgid "null character preserved"
+#~ msgstr "¥Ì¥ëʸ»ú¤¬Êݤ¿¤ì¤Þ¤·¤¿"
+
+#~ msgid "comment start split across lines"
+#~ msgstr "¥³¥á¥ó¥È³«»Ï¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "comment start '/*' split across lines"
+#~ msgstr "¥³¥á¥ó¥È³«»Ï '/*' ¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "comment end '*/' split across lines"
+#~ msgstr "¥³¥á¥ó¥È½ªÃ¼ '*/' ¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹"
+
+#~ msgid "handle_directive called on macro buffer"
+#~ msgstr "¥Þ¥¯¥í¥Ð¥Ã¥Õ¥¡¤Ç handle_directive ¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿"
+
+#~ msgid "ignoring #%s because of its indented #"
+#~ msgstr "¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤Ê¤Î¤Ç¡¢#%s ¤Ï̵»ë¤·¤Þ¤¹"
+
+#~ msgid "ISO C does not allow #%s"
+#~ msgstr "ISO C ¤Ï #%s ¤òµö²Ä¤·¤Þ¤»¤ó"
+
+#~ msgid "redefining poisoned `%.*s'"
+#~ msgstr "±øÀ÷¤µ¤ì¤¿ `%.*s' ¤òºÆÄêµÁ"
+
+#~ msgid "garbage at end of #line"
+#~ msgstr "#line ¥³¥Þ¥ó¥É¤ÎºÇ¸å¤Ë¥´¥ß"
+
+#~ msgid "second token after #line is not a string"
+#~ msgstr "#line ¤Î¸å¤ÎÆó¤ÄÌܤΥȡ¼¥¯¥ó¤¬Ê¸»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "junk on line after #undef"
+#~ msgstr "#undef ¤Î¸å¤Î¹Ô¤Ë¥´¥ß"
+
+#~ msgid "cannot undefine poisoned \"%s\""
+#~ msgstr "±øÀ÷¤µ¤ì¤¿ \"%s\" ¤ò undefine ¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "malformed #pragma implementation"
+#~ msgstr "¤ª¤«¤·¤Ê #pragma implementation"
+
+#~ msgid "#%s with no argument"
+#~ msgstr "#%s ¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#~ msgid "#%s with invalid argument"
+#~ msgstr "̵¸ú¤Ê°ú¿ô¤ò»ý¤Ã¤¿ #%s"
+
+#~ msgid "Cannot duplicate non-existant exception region."
+#~ msgstr "¸ºß¤·¤Ê¤¤Îã³°Îΰè¤òÊ£À½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#~ msgid "Never issued previous false_label"
+#~ msgstr "Á°¤Î false_label ¤Ï·è¤·¤Æȯ¹Ô¤µ¤ì¤Þ¤»¤ó"
+
+#~ msgid "Basic blocks not numbered consecutively"
+#~ msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¤¬Ï¢Â³Åª¤ËÈÖ¹æÉÕ¤±¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "file path prefix `%s%s' never used"
+#~ msgstr "¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Î¥×¥ì¥Õ¥£¥Ã¥¯¥¹ `%s%s' ¤ÏÁ´¤¯»È¤ï¤ì¤Þ¤»¤ó"
+
+#~ msgid "file path prefix `%s' never used"
+#~ msgstr "¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Î¥×¥ì¥Õ¥£¥Ã¥¯¥¹ `%s' ¤ÏÁ´¤¯»È¤ï¤ì¤Þ¤»¤ó"
+
+#~ msgid "%s: option `%s' is ambiguous\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "%s: option `%s' requires an argument\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: Ç§¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `--%s'\n"
+
+#~ msgid "%s: unrecognized option `%c%s'\n"
+#~ msgstr "%s: Ç§¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `%c%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#~ msgid "%s: invalid option -- %c\n"
+#~ msgstr "%s: Ìµ¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#~ msgid "%s: option requires an argument -- %c\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "function with complex parameters cannot be inline"
+#~ msgstr "Ê£»¨¤Ê¥Ñ¥é¥á¥¿¤ò¤â¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó"
+
+#~ msgid "Objective-C text in C source file"
+#~ msgstr "C ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ëÃæ¤Ë Objective-C ¤Îʸ»úÎó"
+
+#~ msgid "statically allocated objects not supported"
+#~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀÅŪ¤Ê³äÅö¤Æ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#~ msgid "output pipe has been closed"
+#~ msgstr "½ÐÎϤΥѥ¤¥×¤¬ÊĤ¸¤é¤ì¤Þ¤·¤¿"
+
+#~ msgid "Unknown stab %s: : 0x%x\n"
+#~ msgstr "ÉÔÌÀ¤Ê¥¹¥¿¥Ö %s: : 0x%x\n"
diff --git a/libcpp/po/nl.po b/libcpp/po/nl.po
new file mode 100644 (file)
index 0000000..f873b3d
--- /dev/null
@@ -0,0 +1,926 @@
+# Dutch messages for cpplib.
+# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+# Tim Van Holder <tim.van.holder@telenet.be>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.3-b20071109\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-11-10 17:28+0100\n"
+"Last-Translator: Tim Van Holder <tim.van.holder@telenet.be>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "iconv ondersteunt geen omzetting van %s naar %s"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "geen implementatie van iconv beschikbaar; kan niet omzetten van %s naar %s"
+
+# of "tekenset" aangezien character door "teken" vertaald wordt?
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "teken 0x%lx maakt geen deel uit van de basis bronkarakterset\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "omzetting naar uitvoeringskarakterset"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "teken 0x%lx is niet unibyte in de uitvoeringskarakterset"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Teken %x is misschien niet NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "universele tekennamen zijn enkel geldig in C++ en C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "de betekenis van '\\%c' is anders in traditionele C"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "In _cpp_valid_ucn maar het is geen UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "onvolledige universele tekennaam %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s is geen geldige universele tekennaam"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "'$' in naam of getal"
+
+# "identifier" is een verdomd rottig woord om te vertalen...
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "universeel teken %.*s is niet geldig in een naam"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "universeel teken %.*s is niet geldig aan het begin van een naam"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "omzetting van UCN naar bronkarakterset"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "omzetting van UCN naar uitvoeringskarakterset"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "de betekenis van '\\x' is anders in traditionele C"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x gebruikt zonder daaropvolgende hexadecimale cijfers"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "hexadecimale escape sequence buiten bereik"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "octale escape sequence buiten bereik"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "de betekenis van '\\a' is anders in traditionele C"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "escape sequence '\\%c' is niet ISO-standaard"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "onbekende escape sequence '\\%c'"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "onbekende escape sequence '\\%s'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "omzetting van escape sequence naar uitvoeringskarakterset"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "karakterconstante te lang voor zijn type"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "karakterconstante bevat meerdere karakters"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "lege karakterconstante"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "fout bij omzetten van %s naar %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "overbodige tokens aan einde van #%s commando"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s is een uitbreiding van GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "gebruik liefst geen #elif in traditionele C"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "traditionele C negeert #%s wanneer de # geïndenteerd is"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "verberg #%s liefst van traditionele C via een geïndenteerde #"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "het plaatsen van een commando binnen macro-argumenten is niet portabel"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "dit soort line commando is een uitbreiding van GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "ongeldig preprocessing-commando #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" kan niet als macronaam gebruikt worden"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" kan niet als macronaam gebruikt worden omdat het een operator is in C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "geen macronaam opgegeven in #%s commando"
+
+# lap! hier heb ik het zitten... wat is verdorie een betere vertaling voor identifier?
+# Dit is wel langer maar zegt denk ik wel waar het om gaat.
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "macronamen moeten voldoen aan de regels voor namen in C/C++"
+
+# niet perfect, maar beter dan "wordt ongedefinieerd", "wordt geondefinieerd" of iets dergelijks...
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "definitie van \"%s\" wordt ongedaan gemaakt"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "sluitend > teken ontbreekt"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s verwacht \"BESTAND\" of <BESTAND>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "lege bestandsnaam in #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include te diep genest"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next in primair bronbestand"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "ongeldige vlag \"%s\" in #line commando"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" (na #line) is geen positieve integer"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "regelnummer buiten bereik"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" is geen geldige bestandsnaam"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" (na #) is geen positieve integer"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "ongeldig #%s commando"
+
+# goede vertaling voor 'mismatched'?
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "registratie van pragmas in namespace \"%s\" met niet-overeenkomstige naamexpansie"
+
+# moet namespace hier ook vertaald worden?
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "registratie van pragma \"%s\" met naamexpansie maar geen namespace"
+
+# moet namespace hier ook vertaald worden?
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "registratie van \"%s\" zowel als pragma en als pragma-namespace"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s is reeds geregistreerd"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s is reeds geregistreerd"
+
+# betere vertaling voor 'handler'?
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "registratie van pragma met NULL als afhandelingsroutine"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once in hoofdbestand"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "ongeldig #pragma GCC poison commando"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "bestaande macro \"%s\" wordt 'vergiftigd'"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header wordt genegeerd buiten een invoegbestand"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "kan bronbestand %s niet vinden"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "huidig bestand is ouder dan %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma verwacht een stringconstante tussen haakjes als argument"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else zonder #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else na #else"
+
+# of gewoon "de conditie"?
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "het conditionele blok begon hier"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif zonder #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif na #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif zonder #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "'(' ontbreekt na predicaat"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "')' ontbreekt als afronding van het antwoord"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "antwoord van het predicaat is leeg"
+
+# dit moet beter kunnen...
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "assertie zonder predicaat"
+
+# ... dit klinkt echt niet - maar wat is hier een beter vertaling voor identifier?
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "predicaat moet een naam zijn"
+
+# is "asserteren" wel een echt woord?
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" opnieuw geasserteerd"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "niet-beëindigde #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "niet-beëindigde commentaar"
+
+# Dit zou misschien beter 'warning' blijven
+#: errors.c:118
+msgid "warning: "
+msgstr "let op: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "interne fout: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "fout: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+# hoort niet echt een vertaalbare string te zijn :-)
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+# betere vertaling voor decimal point?
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "teveel komma's in getal"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr "fixed-point constantes zijn een uitbreiding van GCC"
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "ongeldig cijfer \"%c\" in binaire constante"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "ongeldig cijfer \"%c\" in octale constante"
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "ongeldige prefix \"0b\" voor floating-point constante"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "gebruik van C99 hexadecimale floating-point constante"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "exponent heeft geen cijfers"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "hexadecimale floating-point constante vereist een exponent"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "ongeldige suffix \"%.*s\" aan floating-point constante"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "traditionele C aanvaardt de \"%.*s\" suffix niet"
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "ongeldige suffix \"%.*s\" bij hexadecimale floating-point constante"
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr "decimale float-constantes zijn een uitbreiding van GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "ongeldige suffix \"%.*s\" aan integerconstante"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "gebruik van C99 long long integerconstantes"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "imaginaire constantes zijn een uitbreiding van GCC"
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr "binaire constantes zijn een uitbreiding van GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "integerconstante is te groot voor zijn type"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "integerconstante is zo groot dat hij tekenloos is"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "')' ontbreekt na \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "de \"defined\" operator verwacht een naam als argument"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" is een alternatieve schrijfwijze voor \"%s\" in C++)"
+
+# betere vertaling voor "portable"?
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "dit gebruik van \"define\" is mogelijk niet portabel"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "floating-point constante in preprocessor-expressie"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "imaginair getal in preprocessor-expressie"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" is niet gedefinieerd"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "binaire operator ontbreekt voor het \"%s\" token"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "token \"%s\" is niet geldig in preprocessor-expressies"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "expressie ontbreekt tussen '(' en ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if zonder expressie"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "operator '%s' heeft geen rechtse operand"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "operator '%s' heeft geen linkse operand"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " ':' zonder voorafgaande '?'"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "niet-gebalanceerde stack in #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "operator '%u' is onmogelijk"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "')' ontbreekt in expressie"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' zonder daaropvolgende ':'"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "integer-overflow in preprocessor-expressie"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "'(' ontbreekt in expressie"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "de linker operand van \"%s\" verandert van teken indien hij gepromoveerd wordt"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "de rechter operand van \"%s\" verandert van teken indien hij gepromoveerd wordt"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "traditionele C verwerpt de unaire plus-operator"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "comma operator in operand van #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "deling door nul in `#if'"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "directory is NULL in find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "een of meer PCH bestanden werden gevonden, maar ze waren ongeldig"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "gebruik -Winvalid-pch voor meer informatie"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s is een blokapparaat"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s is te groot"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s is korter dan verwacht"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "geen invoegpad waarin naar %s gezocht kan worden"
+
+# goede vertaling voor "include guard"?
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Meerdere invoegbeschermingen zouden nuttig kunnen zijn voor:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t moet een tekenloos type zijn"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "preprocessor-rekensommen hebben een maximale precisie van %lu bits; doelomgeving vereist %lu bits"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP rekensommen moet minstens even precies zijn als een int in de doelomgeving"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "char is minder dan 8 bits breed in de doelomgeving"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "wchar_t is smaller dan char in de doelomgeving"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "int is smaller dan char in de doelomgeving"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP half-integer is smaller dan een CPP character"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP kan op deze host geen brede karakterconstantes aan van meer dan %lu bits, maar de doelomgeving vereist %lu bits"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "backslash en newline gescheiden door spatie(s)"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "backslash-newline aan einde van bestand"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigraph ??%c omgezet naar %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "trigraph ??%c genegeerd, gebruik -trigraphs om ondersteuning in te schakelen"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" binnen commentaar"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s binnen preprocessor-commando"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "nulkarakter(s) worden genegeerd"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "`%.*s' zit niet in NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "`%.*s' zit niet in NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "poging tot gebruik van 'vergiftigde' \"%s\""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ mag enkel voorkomen in de expansie van een C99 variadische macro"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "nulkarakter(s) in een constante worden behouden"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "sluitend %c teken ontbreekt"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "commentaar in C++ stijl is niet toegestaan in ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(dit wordt maar een keer gemeld per invoerbestand)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "commentaar gespreid over meerdere lijnen"
+
+# lijkt een vreemde boodschap...
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "kan token %s niet spellen"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "In bestand ingevoegd vanuit %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                     vanuit %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "macro \"%s\" wordt nergens gebruikt"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ongeldige ingebouwde macro \"%s\""
+
+# betere vertaling voor 'timestamp'?
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "kan tijdsinformatie van bestand niet bepalen"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "kan datum en tijd niet bepalen"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "expansie van __COUNTER__ binnenin commando terwijl -fdirectives-only opgegeven is"
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ongeldige stringconstante, laatste '\\' wordt genegeerd"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "\"%s\" en \"%s\" aan elkaar plakken levert geen geldig preprocessing token op"
+
+# "rest arguments"?
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 verplicht het gebruik van restargumenten"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "macro \"%s\" vereist %u argumenten, maar er werden er slechts %u opgegeven"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "macro \"%s\" kreeg %u argumenten, maar heeft er slechts %u nodig"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "niet-beëindigde argumentenlijst bij oproep van macro \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "functie-achtige macro \"%s\" moet in traditionele C altijd met argumenten gebruikt worden"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "herhaalde macro-parameter \"%s\""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" mag niet voorkomen in lijst van macro-parameters"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "macro-parameters moet door komma's gescheiden worden"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "parameternaam weggelaten"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "anonieme variadische macros werden door C99 ingevoerd"
+
+# variadic? " met variabele argumentenlijst" is nogal lang...
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C staat het gebruik benoemde variadische macro's niet toe"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "')' ontbreekt in lijst van macro-parameters"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' mag niet voorkomen aan het begin of einde van een macro-expansie"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 vereist witruimte na de macronaam"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "witruimte ontbreekt na de macronaam"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' wordt niet gevolgd door de naam van een macro-parameter"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" opnieuw gedefinieerd"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "dit is de locatie van de eerdere definitie"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "macro-argument \"%s\" zou string gemaakt worden in traditionele C"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "ongeldig hashtype %d in cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "bij het schrijven van een voorgecompileerde header"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: niet gebruikt omdat \"%.*s\" niet gedefinieerd werd"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: niet gebruikt omdat \"%.*s\" als \"%s\" (en niet als \"%.*s\") gedefinieerd werd"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: niet gebruikt omdat \"%s\" gedefinieerd is"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: niet gebruikt omdat \"__COUNTER__\" ongeldig is"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "bij het lezen van een voorgecompileerde header"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "recursie gedetecteerd bij uitbreiden van macro \"%s\""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "syntaxfout in lijst van macro-parameters"
diff --git a/libcpp/po/rw.po b/libcpp/po/rw.po
new file mode 100644 (file)
index 0000000..5bda060
--- /dev/null
@@ -0,0 +1,18054 @@
+# Kinyarwanda translations for cpplib package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the cpplib package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 3.3\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-05-13 19:48-0700\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, fuzzy, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "Ihindurangero Bivuye Kuri ni"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr ""
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr ""
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr ""
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr ""
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr ""
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr ""
+
+#: charset.c:949
+#, fuzzy
+msgid "universal character names are only valid in C++ and C99"
+msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga"
+
+#: charset.c:952
+#, fuzzy, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "i Igisobanuro Bya ni in C"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr ""
+
+#: charset.c:986
+#, fuzzy, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "Ky'isi yose Inyuguti Izina:"
+
+#: charset.c:998
+#, fuzzy, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "`%T::%D'ni OYA a Byemewe"
+
+#: charset.c:1008 lex.c:472
+#, fuzzy
+msgid "'$' in identifier or number"
+msgstr "'$'Inyuguti S in Ikiranga Cyangwa Umubare"
+
+#: charset.c:1018
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga"
+
+#: charset.c:1022
+#, fuzzy, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga"
+
+#: charset.c:1056 charset.c:1571
+#, fuzzy
+msgid "converting UCN to source character set"
+msgstr "Guhindura.... Kuri Mweretsi Ubwoko"
+
+#: charset.c:1060
+#, fuzzy
+msgid "converting UCN to execution character set"
+msgstr "Guhindura.... Kuri Mweretsi Ubwoko"
+
+#: charset.c:1132
+#, fuzzy
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "i Igisobanuro Bya ni in C"
+
+#: charset.c:1149
+#, fuzzy
+msgid "\\x used with no following hex digits"
+msgstr "\\xNa: Oya"
+
+#: charset.c:1156
+#, fuzzy
+msgid "hex escape sequence out of range"
+msgstr "Inyuma Bya Urutonde"
+
+#: charset.c:1195
+#, fuzzy
+msgid "octal escape sequence out of range"
+msgstr "Inyuma Bya Urutonde"
+
+#: charset.c:1263
+#, fuzzy
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "i Igisobanuro Bya ni in C"
+
+#: charset.c:1270
+#, fuzzy, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "Bisanzwe"
+
+#: charset.c:1278
+#, fuzzy, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "Kitazwi"
+
+#: charset.c:1286
+#, fuzzy, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "Kitazwi"
+
+#: charset.c:1293
+#, fuzzy
+msgid "converting escape sequence to execution character set"
+msgstr "Inyuma Bya Urutonde"
+
+#: charset.c:1415 charset.c:1478
+#, fuzzy
+msgid "character constant too long for its type"
+msgstr "Inyuguti kugirango Ubwoko"
+
+#: charset.c:1418
+#, fuzzy
+msgid "multi-character character constant"
+msgstr "Inyuguti Inyuguti"
+
+#: charset.c:1510
+#, fuzzy
+msgid "empty character constant"
+msgstr "ubusa Inyuguti"
+
+#: charset.c:1612
+#, fuzzy, c-format
+msgid "failure to convert %s to %s"
+msgstr "OYA GUHINDURA Kuri"
+
+#: directives.c:214 directives.c:240
+#, fuzzy, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "Birenga ku Impera Bya"
+
+#: directives.c:343
+#, fuzzy, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%sni a Umugereka"
+
+#: directives.c:355
+#, fuzzy
+msgid "suggest not using #elif in traditional C"
+msgstr "OYA ikoresha in C"
+
+#: directives.c:358
+#, fuzzy, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "C Na: i hariho marije"
+
+#: directives.c:362
+#, fuzzy, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "Bivuye C Na: hariho marije"
+
+#: directives.c:388
+#, fuzzy
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "a muri Makoro ingingo ni OYA"
+
+#: directives.c:408
+#, fuzzy
+msgid "style of line directive is a GCC extension"
+msgstr "IMISUSIRE Bya Umurongo ni a Umugereka"
+
+#: directives.c:458
+#, fuzzy, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "Sibyo"
+
+#: directives.c:524
+#, fuzzy
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"Nka a Makoro Izina:"
+
+#: directives.c:530
+#, fuzzy, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\"Nka a Makoro Izina: Nka ni Mukoresha in C"
+
+#: directives.c:533
+#, fuzzy, c-format
+msgid "no macro name given in #%s directive"
+msgstr "Oya Makoro Izina: in"
+
+#: directives.c:536
+#, fuzzy
+msgid "macro names must be identifiers"
+msgstr "Makoro Amazina"
+
+#: directives.c:577
+#, c-format
+msgid "undefining \"%s\""
+msgstr ""
+
+#: directives.c:632
+#, fuzzy
+msgid "missing terminating > character"
+msgstr "Ibuze Inyuguti"
+
+#: directives.c:687
+#, fuzzy, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%sCyangwa"
+
+#: directives.c:727
+#, fuzzy, c-format
+msgid "empty filename in #%s"
+msgstr "ubusa IDOSIYE Izina: in"
+
+#: directives.c:737
+#, fuzzy
+msgid "#include nested too deeply"
+msgstr "#Gushyiramo"
+
+#: directives.c:778
+#, fuzzy
+msgid "#include_next in primary source file"
+msgstr "#in Inkomoko IDOSIYE"
+
+#: directives.c:804
+#, fuzzy, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "Sibyo Ibendera in Umurongo"
+
+#: directives.c:856
+#, fuzzy, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\"Nyuma Umurongo ni OYA a Umubare wuzuye"
+
+#: directives.c:862
+#, fuzzy
+msgid "line number out of range"
+msgstr "Umurongo Umubare Inyuma Bya Urutonde"
+
+#: directives.c:875 directives.c:952
+#, fuzzy, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\"ni OYA a Byemewe Izina ry'idosiye:"
+
+#: directives.c:912
+#, fuzzy, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\"Nyuma ni OYA a Umubare wuzuye"
+
+#: directives.c:1014
+#, fuzzy, c-format
+msgid "invalid #%s directive"
+msgstr "Sibyo"
+
+#: directives.c:1077
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1086
+#, fuzzy, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "Nka Byombi a Na a"
+
+#: directives.c:1104
+#, fuzzy, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "Nka Byombi a Na a"
+
+#: directives.c:1107
+#, fuzzy, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#ni"
+
+#: directives.c:1110
+#, fuzzy, c-format
+msgid "#pragma %s is already registered"
+msgstr "#ni"
+
+#: directives.c:1140
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1350
+#, fuzzy
+msgid "#pragma once in main file"
+msgstr "#Rimwe in IDOSIYE"
+
+#: directives.c:1373
+#, fuzzy
+msgid "invalid #pragma GCC poison directive"
+msgstr "Sibyo"
+
+#: directives.c:1382
+#, fuzzy, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "Makoro"
+
+#: directives.c:1403
+#, fuzzy
+msgid "#pragma system_header ignored outside include file"
+msgstr "#Hanze Gushyiramo IDOSIYE"
+
+#: directives.c:1427
+#, fuzzy, c-format
+msgid "cannot find source file %s"
+msgstr "Gushaka Inkomoko"
+
+#: directives.c:1431
+#, fuzzy, c-format
+msgid "current file is older than %s"
+msgstr "KIGEZWEHO IDOSIYE ni"
+
+#: directives.c:1599
+#, fuzzy
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "a Ikurikiranyanyuguti"
+
+#: directives.c:1671
+#, fuzzy
+msgid "#else without #if"
+msgstr "#Ikindi NIBA"
+
+#: directives.c:1676
+#, fuzzy
+msgid "#else after #else"
+msgstr "#Ikindi Nyuma Ikindi"
+
+#: directives.c:1678 directives.c:1711
+#, fuzzy
+msgid "the conditional began here"
+msgstr "i"
+
+#: directives.c:1704
+#, fuzzy
+msgid "#elif without #if"
+msgstr "#NIBA"
+
+#: directives.c:1709
+#, fuzzy
+msgid "#elif after #else"
+msgstr "#Nyuma Ikindi"
+
+#: directives.c:1739
+#, fuzzy
+msgid "#endif without #if"
+msgstr "#NIBA"
+
+#: directives.c:1816
+#, fuzzy
+msgid "missing '(' after predicate"
+msgstr "Ibuze Nyuma"
+
+#: directives.c:1831
+#, fuzzy
+msgid "missing ')' to complete answer"
+msgstr "Ibuze Kuri Byuzuye"
+
+#: directives.c:1851
+#, fuzzy
+msgid "predicate's answer is empty"
+msgstr "ni ubusa"
+
+#: directives.c:1878
+msgid "assertion without predicate"
+msgstr ""
+
+#: directives.c:1880
+#, fuzzy
+msgid "predicate must be an identifier"
+msgstr "Ikiranga"
+
+#: directives.c:1966
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr ""
+
+#: directives.c:2190
+#, c-format
+msgid "unterminated #%s"
+msgstr ""
+
+#: errors.c:118
+#, fuzzy
+msgid "warning: "
+msgstr "Iburira!"
+
+#: errors.c:120
+#, fuzzy
+msgid "internal error: "
+msgstr "Ikosa ry'imbere"
+
+#: errors.c:122
+#, fuzzy
+msgid "error: "
+msgstr "Ikosa ry'imbere"
+
+#: errors.c:186
+msgid "stdout"
+msgstr ""
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#: errors.c:188
+#, fuzzy, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#: expr.c:203
+#, fuzzy
+msgid "too many decimal points in number"
+msgstr "NYACUMI Utudomo in Umubare"
+
+#: expr.c:223
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "Sibyo in"
+
+#: expr.c:229
+#, fuzzy
+msgid "use of C99 hexadecimal floating constant"
+msgstr "Gukoresha Bya Bihindagurika"
+
+#: expr.c:238
+#, fuzzy
+msgid "exponent has no digits"
+msgstr "Oya"
+
+#: expr.c:245
+#, fuzzy
+msgid "hexadecimal floating constants require an exponent"
+msgstr "Bihindagurika"
+
+#: expr.c:251
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "Sibyo Ingereka S ku Bihindagurika"
+
+#: expr.c:261 expr.c:295
+#, fuzzy, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "C i S Ingereka"
+
+#: expr.c:268
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "Sibyo Ingereka S ku Bihindagurika"
+
+#: expr.c:281
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "Sibyo Ingereka S ku Umubare wuzuye"
+
+#: expr.c:303
+#, fuzzy
+msgid "use of C99 long long integer constant"
+msgstr "Gukoresha Bya Umubare wuzuye"
+
+#: expr.c:310
+#, fuzzy
+msgid "imaginary constants are a GCC extension"
+msgstr "NYURABWENGE a Umugereka"
+
+#: expr.c:396
+#, fuzzy
+msgid "integer constant is too large for its type"
+msgstr "Umubare wuzuye ni Binini kugirango Ubwoko"
+
+#: expr.c:408
+#, fuzzy
+msgid "integer constant is so large that it is unsigned"
+msgstr "Umubare wuzuye ni Binini ni Bitashizweho umukono"
+
+#: expr.c:490
+#, fuzzy
+msgid "missing ')' after \"defined\""
+msgstr "Ibuze Nyuma"
+
+#: expr.c:497
+#, fuzzy
+msgid "operator \"defined\" requires an identifier"
+msgstr "Mukoresha Ikiranga"
+
+#: expr.c:505
+#, fuzzy, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\"ni kugirango in C"
+
+#: expr.c:515
+#, fuzzy
+msgid "this use of \"defined\" may not be portable"
+msgstr "iyi Gukoresha Bya Gicurasi OYA"
+
+#: expr.c:554
+#, fuzzy
+msgid "floating constant in preprocessor expression"
+msgstr "Bihindagurika in imvugo"
+
+#: expr.c:560
+#, fuzzy
+msgid "imaginary number in preprocessor expression"
+msgstr "NYURABWENGE Umubare in imvugo"
+
+#: expr.c:605
+#, fuzzy, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\"ni OYA"
+
+#: expr.c:733 expr.c:762
+#, fuzzy, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "Ibuze Nyabibiri Mukoresha Mbere"
+
+#: expr.c:753
+#, fuzzy, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "ni OYA Byemewe in"
+
+#: expr.c:770
+#, fuzzy
+msgid "missing expression between '(' and ')'"
+msgstr "imvugo hagati Na"
+
+#: expr.c:773
+#, fuzzy
+msgid "#if with no expression"
+msgstr "#NIBA Na: Oya imvugo"
+
+#: expr.c:776
+#, fuzzy, c-format
+msgid "operator '%s' has no right operand"
+msgstr "Mukoresha Oya Iburyo:"
+
+#: expr.c:781
+#, fuzzy, c-format
+msgid "operator '%s' has no left operand"
+msgstr "Mukoresha Oya Iburyo:"
+
+#: expr.c:807
+msgid " ':' without preceding '?'"
+msgstr ""
+
+#: expr.c:834
+#, fuzzy
+msgid "unbalanced stack in #if"
+msgstr "in NIBA"
+
+#: expr.c:853
+#, fuzzy, c-format
+msgid "impossible operator '%u'"
+msgstr "Mukoresha"
+
+#: expr.c:943
+#, fuzzy
+msgid "missing ')' in expression"
+msgstr "Ibuze in imvugo"
+
+#: expr.c:964
+#, fuzzy
+msgid "'?' without following ':'"
+msgstr ""
+"''Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+"."
+
+#: expr.c:974
+#, fuzzy
+msgid "integer overflow in preprocessor expression"
+msgstr "Umubare wuzuye Byarenze urugero in imvugo"
+
+#: expr.c:979
+#, fuzzy
+msgid "missing '(' in expression"
+msgstr "Ibuze in imvugo"
+
+#: expr.c:1011
+#, fuzzy, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "i Ibumoso: Bya Amahinduka IKIMENYETSO Ryari:"
+
+#: expr.c:1016
+#, fuzzy, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "i Iburyo: Bya Amahinduka IKIMENYETSO Ryari:"
+
+#: expr.c:1275
+#, fuzzy
+msgid "traditional C rejects the unary plus operator"
+msgstr "C i Guteranya Mukoresha"
+
+#: expr.c:1358
+#, fuzzy
+msgid "comma operator in operand of #if"
+msgstr "Akitso Mukoresha in Bya NIBA"
+
+#: expr.c:1490
+#, fuzzy
+msgid "division by zero in #if"
+msgstr "ku Zeru in NIBA"
+
+#: files.c:402
+msgid "NULL directory in find_file"
+msgstr ""
+
+#: files.c:440
+msgid "one or more PCH files were found, but they were invalid"
+msgstr ""
+
+#: files.c:443
+msgid "use -Winvalid-pch for more information"
+msgstr ""
+
+#: files.c:501
+#, fuzzy, c-format
+msgid "%s is a block device"
+msgstr "%sni a Funga APAREYE"
+
+#: files.c:518
+#, fuzzy, c-format
+msgid "%s is too large"
+msgstr "%sni Binini"
+
+#: files.c:553
+#, fuzzy, c-format
+msgid "%s is shorter than expected"
+msgstr "%sni Ikitezwe:"
+
+#: files.c:782
+#, fuzzy, c-format
+msgid "no include path in which to search for %s"
+msgstr "Oya Gushyiramo Inzira in Kuri Gushaka"
+
+#: files.c:1071
+#, fuzzy
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Gushyiramo Gicurasi kugirango"
+
+#: init.c:407
+#, fuzzy
+msgid "cppchar_t must be an unsigned type"
+msgstr "Bitashizweho umukono Ubwoko"
+
+#: init.c:411
+#, fuzzy, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "Kinini Bya Intego"
+
+#: init.c:418
+#, fuzzy
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "ku Nka Nka a Intego INT"
+
+#: init.c:421
+#, fuzzy
+msgid "target char is less than 8 bits wide"
+msgstr "Intego INYUGUTI ni Birutwa 8"
+
+#: init.c:425
+#, fuzzy
+msgid "target wchar_t is narrower than target char"
+msgstr "Intego ni Intego INYUGUTI"
+
+#: init.c:429
+#, fuzzy
+msgid "target int is narrower than target char"
+msgstr "Intego INT ni Intego INYUGUTI"
+
+#: init.c:434
+#, fuzzy
+msgid "CPP half-integer narrower than CPP character"
+msgstr "Umubare wuzuye Inyuguti"
+
+#: init.c:438
+#, fuzzy, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "ku iyi Ubuturo Inyuguti KURI i Intego"
+
+#: lex.c:271
+#, fuzzy
+msgid "backslash and newline separated by space"
+msgstr "Na ku Umwanya"
+
+#: lex.c:276
+#, fuzzy
+msgid "backslash-newline at end of file"
+msgstr "ku Impera Bya IDOSIYE"
+
+#: lex.c:291
+#, fuzzy, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr ""
+"Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+"."
+
+#: lex.c:298
+#, fuzzy, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr ""
+"Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+"."
+
+#: lex.c:344
+#, fuzzy
+msgid "\"/*\" within comment"
+msgstr "\"/*\"muri Icyo wongeraho"
+
+#: lex.c:402
+#, fuzzy, c-format
+msgid "%s in preprocessing directive"
+msgstr "%sin"
+
+#: lex.c:411
+#, fuzzy
+msgid "null character(s) ignored"
+msgstr "NTAGIHARI Inyuguti S"
+
+#: lex.c:448
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%s\"ni OYA"
+
+#: lex.c:451
+#, fuzzy, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%s\"ni OYA"
+
+#: lex.c:539
+#, fuzzy, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "Kuri Gukoresha"
+
+#: lex.c:547
+#, fuzzy
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "_Kugaragara in i Bya a Makoro"
+
+#: lex.c:647
+#, fuzzy
+msgid "null character(s) preserved in literal"
+msgstr "NTAGIHARI Inyuguti S in"
+
+#: lex.c:650
+#, fuzzy, c-format
+msgid "missing terminating %c character"
+msgstr "Ibuze Inyuguti"
+
+#: lex.c:842
+#, fuzzy
+msgid "no newline at end of file"
+msgstr "Oya ku Impera Bya IDOSIYE"
+
+#: lex.c:1002 traditional.c:162
+#, fuzzy
+msgid "unterminated comment"
+msgstr "Icyo wongeraho"
+
+#: lex.c:1013
+#, fuzzy
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C IMISUSIRE Ibisobanuro OYA in"
+
+#: lex.c:1015
+#, fuzzy
+msgid "(this will be reported only once per input file)"
+msgstr "(iyi Rimwe Iyinjiza IDOSIYE"
+
+#: lex.c:1020
+#, fuzzy
+msgid "multi-line comment"
+msgstr "Umurongo Icyo wongeraho"
+
+#: lex.c:1333
+#, c-format
+msgid "unspellable token %s"
+msgstr ""
+
+#: line-map.c:313
+#, fuzzy, c-format
+msgid "In file included from %s:%u"
+msgstr "IDOSIYE Bivuye"
+
+#: line-map.c:331
+#, fuzzy, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ",Bivuye"
+
+#: macro.c:83
+#, fuzzy, c-format
+msgid "macro \"%s\" is not used"
+msgstr "Makoro ni OYA"
+
+#: macro.c:122 macro.c:312
+#, fuzzy, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "Sibyo in Makoro"
+
+#: macro.c:156
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "OYA Itariki Na Igihe"
+
+#: macro.c:253
+#, fuzzy
+msgid "could not determine date and time"
+msgstr "OYA Itariki Na Igihe"
+
+#: macro.c:416
+#, fuzzy
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "Sibyo Ikurikiranyanyuguti"
+
+#: macro.c:466
+#, fuzzy, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "Na OYA a Byemewe"
+
+#: macro.c:538
+#, fuzzy
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ingingo Kuri"
+
+#: macro.c:543
+#, fuzzy, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "Makoro ingingo"
+
+#: macro.c:548
+#, fuzzy, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "Makoro ingingo"
+
+#: macro.c:659 traditional.c:675
+#, fuzzy, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "Urutonde Makoro"
+
+#: macro.c:762
+#, fuzzy, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "Umumaro nka Makoro Na: ingingo in C"
+
+#: macro.c:1278
+#, fuzzy, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "Gusubiramo Makoro"
+
+#: macro.c:1324
+#, fuzzy, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\"Gicurasi OYA Kugaragara in Makoro Urutonde"
+
+#: macro.c:1332
+#, fuzzy
+msgid "macro parameters must be comma-separated"
+msgstr "Makoro Ibigenga Akitso"
+
+#: macro.c:1349
+#, fuzzy
+msgid "parameter name missing"
+msgstr "Izina: Ibuze"
+
+#: macro.c:1366
+#, fuzzy
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "Makoro in"
+
+#: macro.c:1371
+#, fuzzy
+msgid "ISO C does not permit named variadic macros"
+msgstr "C OYA Makoro"
+
+#: macro.c:1380
+#, fuzzy
+msgid "missing ')' in macro parameter list"
+msgstr "Ibuze in Makoro Urutonde"
+
+#: macro.c:1458
+#, fuzzy
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "C Nyuma i Makoro Izina:"
+
+#: macro.c:1482
+#, fuzzy
+msgid "missing whitespace after the macro name"
+msgstr "C Nyuma i Makoro Izina:"
+
+#: macro.c:1512
+#, fuzzy
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#'ni OYA ku a Makoro"
+
+#: macro.c:1531
+#, fuzzy
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##'Kugaragara ku Impera Bya a Makoro"
+
+#: macro.c:1629
+#, c-format
+msgid "\"%s\" redefined"
+msgstr ""
+
+#: macro.c:1634
+#, fuzzy
+msgid "this is the location of the previous definition"
+msgstr "iyi ni i Ahantu Bya i Ibanjirije Insobanuro"
+
+#: macro.c:1684
+#, fuzzy, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "Makoro in C"
+
+#: macro.c:1707
+#, fuzzy, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "Sibyo Ubwoko in"
+
+#: pch.c:84 pch.c:332 pch.c:354 pch.c:360
+msgid "while writing precompiled header"
+msgstr ""
+
+#: pch.c:467
+#, fuzzy, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "Akarango OYA"
+
+#: pch.c:479
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: pch.c:520
+#, fuzzy, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "`%s'Nta narimwe"
+
+#: pch.c:533 pch.c:696
+msgid "while reading precompiled header"
+msgstr ""
+
+#: traditional.c:745
+#, fuzzy, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "Makoro"
+
+#: traditional.c:912
+#, fuzzy
+msgid "syntax error in macro parameter list"
+msgstr "\"%s\"Gicurasi OYA Kugaragara in Makoro Urutonde"
+
+#, fuzzy
+#~ msgid "`%s' attribute directive ignored"
+#~ msgstr "`%s'Ikiranga"
+
+#, fuzzy
+#~ msgid "wrong number of arguments specified for `%s' attribute"
+#~ msgstr "Umubare Bya ingingo kugirango Ikiranga"
+
+#, fuzzy
+#~ msgid "`%s' attribute does not apply to types"
+#~ msgstr "`%s'Ikiranga OYA Gukurikiza Kuri"
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to function types"
+#~ msgstr "`%s'Ikiranga Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' attribute ignored"
+#~ msgstr "`%s'Ikiranga"
+
+#, fuzzy
+#~ msgid "offset outside bounds of constant string"
+#~ msgstr "Nta- boneza Hanze Bya Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "second arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "ISEGONDA Kuri a"
+
+#, fuzzy
+#~ msgid "invalid second arg to __builtin_prefetch; using zero"
+#~ msgstr "Sibyo ISEGONDA Kuri ikoresha Zeru"
+
+#, fuzzy
+#~ msgid "third arg to `__builtin_prefetch' must be a constant"
+#~ msgstr "Kuri a"
+
+#, fuzzy
+#~ msgid "invalid third arg to __builtin_prefetch; using zero"
+#~ msgstr "Sibyo Kuri ikoresha Zeru"
+
+#, fuzzy
+#~ msgid "__builtin_saveregs not supported by this target"
+#~ msgstr "_OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "argument of `__builtin_args_info' must be constant"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "argument of `__builtin_args_info' out of range"
+#~ msgstr "Bya Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "missing argument in `__builtin_args_info'"
+#~ msgstr "Ibuze in"
+
+#, fuzzy
+#~ msgid "`va_start' used in function with fixed args"
+#~ msgstr "`in Umumaro Na: BIHAMYE"
+
+#, fuzzy
+#~ msgid "second parameter of `va_start' not last named argument"
+#~ msgstr "ISEGONDA Bya OYA Iheruka"
+
+#, fuzzy
+#~ msgid "too many arguments to function `va_start'"
+#~ msgstr "ingingo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "first argument to `va_arg' not of type `va_list'"
+#~ msgstr "Itangira Kuri OYA Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "`%s' is promoted to `%s' when passed through `...'"
+#~ msgstr "`%s'ni Kuri Ryari: Gihinguranya"
+
+#, fuzzy
+#~ msgid "(so you should pass `%s' not `%s' to `va_arg')"
+#~ msgstr "(OYA Kuri"
+
+#, fuzzy
+#~ msgid "invalid arg to `__builtin_frame_address'"
+#~ msgstr "Sibyo Kuri"
+
+#, fuzzy
+#~ msgid "invalid arg to `__builtin_return_address'"
+#~ msgstr "Sibyo Kuri"
+
+#, fuzzy
+#~ msgid "unsupported arg to `__builtin_frame_address'"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "unsupported arg to `__builtin_return_address'"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "second arg to `__builtin_expect' must be a constant"
+#~ msgstr "ISEGONDA Kuri a"
+
+#, fuzzy
+#~ msgid "__builtin_longjmp second argument must be 1"
+#~ msgstr "_ISEGONDA 1."
+
+#, fuzzy
+#~ msgid "built-in function `%s' not currently supported"
+#~ msgstr "in Umumaro OYA"
+
+#, fuzzy
+#~ msgid "target format does not support infinity"
+#~ msgstr "Intego Imiterere OYA Gushigikira Bidashira"
+
+#, fuzzy
+#~ msgid "`%s' is not defined outside of function scope"
+#~ msgstr "`%s'ni OYA Hanze Bya Umumaro Ingano:"
+
+#, fuzzy
+#~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support"
+#~ msgstr "Ikurikiranyanyuguti Uburebure ni Biruta i Uburebure C Bya ngombwa Kuri Gushigikira"
+
+#, fuzzy
+#~ msgid "concatenation of string literals with __FUNCTION__ is deprecated"
+#~ msgstr "Bya Ikurikiranyanyuguti Na: ni Bitemewe."
+
+#, fuzzy
+#~ msgid "overflow in constant expression"
+#~ msgstr "Byarenze urugero in imvugo"
+
+#, fuzzy
+#~ msgid "integer overflow in expression"
+#~ msgstr "Umubare wuzuye Byarenze urugero in imvugo"
+
+#, fuzzy
+#~ msgid "floating point overflow in expression"
+#~ msgstr "Bihindagurika Akadomo Byarenze urugero in imvugo"
+
+#, fuzzy
+#~ msgid "vector overflow in expression"
+#~ msgstr "Byarenze urugero in imvugo"
+
+#, fuzzy
+#~ msgid "large integer implicitly truncated to unsigned type"
+#~ msgstr "Binini Umubare wuzuye Kuri Bitashizweho umukono Ubwoko"
+
+#, fuzzy
+#~ msgid "negative integer implicitly converted to unsigned type"
+#~ msgstr "Umubare wuzuye Kuri Bitashizweho umukono Ubwoko"
+
+#, fuzzy
+#~ msgid "overflow in implicit constant conversion"
+#~ msgstr "Byarenze urugero in Ihindurangero"
+
+#, fuzzy
+#~ msgid "operation on `%s' may be undefined"
+#~ msgstr "ku Gicurasi kidasobanuye"
+
+#, fuzzy
+#~ msgid "expression statement has incomplete type"
+#~ msgstr "imvugo Inyandiko Ubwoko"
+
+#, fuzzy
+#~ msgid "case label does not reduce to an integer constant"
+#~ msgstr "Akarango OYA Kuri Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "invalid truth-value expression"
+#~ msgstr "Sibyo Agaciro imvugo"
+
+#, fuzzy
+#~ msgid "invalid operands to binary %s"
+#~ msgstr "Sibyo Kuri Nyabibiri"
+
+#, fuzzy
+#~ msgid "comparison is always false due to limited range of data type"
+#~ msgstr "ni Buri gihe SIBYO Kuri Urutonde Bya Ibyatanzwe Ubwoko"
+
+#, fuzzy
+#~ msgid "comparison is always true due to limited range of data type"
+#~ msgstr "ni Buri gihe NIBYO Kuri Urutonde Bya Ibyatanzwe Ubwoko"
+
+#, fuzzy
+#~ msgid "comparison of unsigned expression >= 0 is always true"
+#~ msgstr "Bya Bitashizweho umukono imvugo 0 ni Buri gihe NIBYO"
+
+#, fuzzy
+#~ msgid "comparison of unsigned expression < 0 is always false"
+#~ msgstr "Bya Bitashizweho umukono imvugo 0 ni Buri gihe SIBYO"
+
+#, fuzzy
+#~ msgid "pointer of type `void *' used in arithmetic"
+#~ msgstr "Mweretsi Bya Ubwoko in"
+
+#, fuzzy
+#~ msgid "pointer to a function used in arithmetic"
+#~ msgstr "Mweretsi Kuri a Umumaro in"
+
+#, fuzzy
+#~ msgid "pointer to member function used in arithmetic"
+#~ msgstr "Mweretsi Kuri Umumaro in"
+
+#, fuzzy
+#~ msgid "pointer to a member used in arithmetic"
+#~ msgstr "Mweretsi Kuri a in"
+
+#, fuzzy
+#~ msgid "struct type value used where scalar is required"
+#~ msgstr "Ubwoko Agaciro ni Bya ngombwa"
+
+#, fuzzy
+#~ msgid "union type value used where scalar is required"
+#~ msgstr "Ihuza Ubwoko Agaciro ni Bya ngombwa"
+
+#, fuzzy
+#~ msgid "array type value used where scalar is required"
+#~ msgstr "Imbonerahamwe Ubwoko Agaciro ni Bya ngombwa"
+
+#, fuzzy
+#~ msgid "suggest parentheses around assignment used as truth value"
+#~ msgstr "Igenera Nka Agaciro"
+
+#, fuzzy
+#~ msgid "invalid use of `restrict'"
+#~ msgstr "Sibyo Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "invalid application of `sizeof' to a function type"
+#~ msgstr "Sibyo Porogaramu Bya Kuri a Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid application of `%s' to a void type"
+#~ msgstr "Sibyo Porogaramu Bya Kuri a Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid application of `%s' to an incomplete type"
+#~ msgstr "Sibyo Porogaramu Bya Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "`__alignof' applied to a bit-field"
+#~ msgstr "`_Byashyizweho Kuri a Umwanya"
+
+#, fuzzy
+#~ msgid "cannot disable built-in function `%s'"
+#~ msgstr "in Umumaro"
+
+#, fuzzy
+#~ msgid "too few arguments to function `%s'"
+#~ msgstr "ingingo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "too many arguments to function `%s'"
+#~ msgstr "ingingo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "non-floating-point argument to function `%s'"
+#~ msgstr "Bihindagurika Akadomo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "pointers are not permitted as case values"
+#~ msgstr "OYA Nka Uduciro"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids range expressions in switch statements"
+#~ msgstr "C Urutonde in Hindura"
+
+#, fuzzy
+#~ msgid "ISO C forbids range expressions in switch statements"
+#~ msgstr "C Urutonde in Hindura"
+
+#, fuzzy
+#~ msgid "empty range specified"
+#~ msgstr "ubusa Urutonde"
+
+#, fuzzy
+#~ msgid "duplicate (or overlapping) case value"
+#~ msgstr "Gusubiramo Cyangwa iyorosa Agaciro"
+
+#, fuzzy
+#~ msgid "this is the first entry overlapping that value"
+#~ msgstr "iyi ni i Itangira Icyinjijwe iyorosa Agaciro"
+
+#, fuzzy
+#~ msgid "duplicate case value"
+#~ msgstr "Gusubiramo Agaciro"
+
+#, fuzzy
+#~ msgid "multiple default labels in one switch"
+#~ msgstr "Igikubo Mburabuzi Uturango... in Hindura"
+
+#, fuzzy
+#~ msgid "this is the first default label"
+#~ msgstr "iyi ni i Itangira Mburabuzi Akarango"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking the address of a label"
+#~ msgstr "C i Aderesi Bya a Akarango"
+
+#, fuzzy
+#~ msgid "ISO C forbids taking the address of a label"
+#~ msgstr "C i Aderesi Bya a Akarango"
+
+#, fuzzy
+#~ msgid "declaration of `%s' shadows %s"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "unknown machine mode `%s'"
+#~ msgstr "Kitazwi Ubwoko"
+
+#, fuzzy
+#~ msgid "no data type for mode `%s'"
+#~ msgstr "Oya Ibyatanzwe Ubwoko kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "unable to emulate '%s'"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "section attribute cannot be specified for local variables"
+#~ msgstr "Icyiciro Ikiranga kugirango Ibihinduka"
+
+#, fuzzy
+#~ msgid "section of `%s' conflicts with previous declaration"
+#~ msgstr "Icyiciro Bya Na: Ibanjirije"
+
+#, fuzzy
+#~ msgid "section attribute not allowed for `%s'"
+#~ msgstr "Icyiciro Ikiranga OYA kugirango"
+
+#, fuzzy
+#~ msgid "section attributes are not supported for this target"
+#~ msgstr "Icyiciro Ibiranga OYA kugirango iyi Intego"
+
+#, fuzzy
+#~ msgid "requested alignment is not a constant"
+#~ msgstr "Itunganya ni OYA a"
+
+#, fuzzy
+#~ msgid "requested alignment is not a power of 2"
+#~ msgstr "Itunganya ni OYA a UMWIKUBE Bya 2."
+
+#, fuzzy
+#~ msgid "requested alignment is too large"
+#~ msgstr "Itunganya ni Binini"
+
+#, fuzzy
+#~ msgid "alignment may not be specified for `%s'"
+#~ msgstr "Itunganya Gicurasi OYA kugirango"
+
+#, fuzzy
+#~ msgid "`%s' defined both normally and as an alias"
+#~ msgstr "`%s'Byombi Na Nka Irihimbano"
+
+#, fuzzy
+#~ msgid "alias arg not a string"
+#~ msgstr "Irihimbano OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "visibility arg not a string"
+#~ msgstr "Ukugaragara OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\""
+#~ msgstr "Ukugaragara Bya Mburabuzi gihishwe Birinzwe Cyangwa By'imbere"
+
+#, fuzzy
+#~ msgid "tls_model arg not a string"
+#~ msgstr "OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\""
+#~ msgstr "Bya Cyangwa"
+
+#, fuzzy
+#~ msgid "`%s' attribute applies only to functions"
+#~ msgstr "`%s'Ikiranga Kuri Imimaro"
+
+#, fuzzy
+#~ msgid "can't set `%s' attribute after definition"
+#~ msgstr "Gushyiraho Ikiranga Nyuma Insobanuro"
+
+#, fuzzy
+#~ msgid "`%s' attribute ignored for `%s'"
+#~ msgstr "`%s'Ikiranga kugirango"
+
+#, fuzzy
+#~ msgid "invalid vector type for attribute `%s'"
+#~ msgstr "Sibyo Ubwoko kugirango Ikiranga"
+
+#, fuzzy
+#~ msgid "no vector mode with the size and type specified could be found"
+#~ msgstr "Oya Ubwoko Na: i Ingano Na Ubwoko Byabonetse"
+
+#, fuzzy
+#~ msgid "nonnull attribute without arguments on a non-prototype"
+#~ msgstr "Ikiranga ingingo ku a"
+
+#, fuzzy
+#~ msgid "nonnull argument has invalid operand number (arg %lu)"
+#~ msgstr "Sibyo Umubare"
+
+#, fuzzy
+#~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)"
+#~ msgstr "Na: Inyuma Bya Urutonde Umubare"
+
+#, fuzzy
+#~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)"
+#~ msgstr "Indango Mweretsi"
+
+#, fuzzy
+#~ msgid "null argument where non-null required (arg %lu)"
+#~ msgstr "NTAGIHARI NTAGIHARI Bya ngombwa"
+
+#, fuzzy
+#~ msgid "void value not ignored as it ought to be"
+#~ msgstr "Agaciro OYA Nka Kuri"
+
+#, fuzzy
+#~ msgid "conversion to non-scalar type requested"
+#~ msgstr "Ihindurangero Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "array `%s' assumed to have one element"
+#~ msgstr "Imbonerahamwe Kuri Ikigize:"
+
+#, fuzzy
+#~ msgid "`struct %s' incomplete in scope ending here"
+#~ msgstr "`in Ingano:"
+
+#, fuzzy
+#~ msgid "`union %s' incomplete in scope ending here"
+#~ msgstr "`Ihuza in Ingano:"
+
+#, fuzzy
+#~ msgid "`enum %s' incomplete in scope ending here"
+#~ msgstr "`in Ingano:"
+
+#, fuzzy
+#~ msgid "label `%s' defined but not used"
+#~ msgstr "Akarango OYA"
+
+#, fuzzy
+#~ msgid "function `%s' redeclared as inline"
+#~ msgstr "Umumaro Nka Mumurongo"
+
+#, fuzzy
+#~ msgid "previous declaration of function `%s' with attribute noinline"
+#~ msgstr "Ibanjirije Bya Umumaro Na: Ikiranga"
+
+#, fuzzy
+#~ msgid "function `%s' redeclared with attribute noinline"
+#~ msgstr "Umumaro Na: Ikiranga"
+
+#, fuzzy
+#~ msgid "previous declaration of function `%s' was inline"
+#~ msgstr "Ibanjirije Bya Umumaro Mumurongo"
+
+#, fuzzy
+#~ msgid "shadowing built-in function `%s'"
+#~ msgstr "Ishyiraho ry'igicucu in Umumaro"
+
+#, fuzzy
+#~ msgid "shadowing library function `%s'"
+#~ msgstr "Ishyiraho ry'igicucu Isomero Umumaro"
+
+#, fuzzy
+#~ msgid "library function `%s' declared as non-function"
+#~ msgstr "Isomero Umumaro Nka Umumaro"
+
+#, fuzzy
+#~ msgid "built-in function `%s' declared as non-function"
+#~ msgstr "in Umumaro Nka Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' redeclared as different kind of symbol"
+#~ msgstr "`%s'Nka Bya IKIMENYETSO"
+
+#, fuzzy
+#~ msgid "previous declaration of `%s'"
+#~ msgstr "Ibanjirije Bya"
+
+#, fuzzy
+#~ msgid "conflicting types for built-in function `%s'"
+#~ msgstr "kugirango in Umumaro"
+
+#, fuzzy
+#~ msgid "conflicting types for `%s'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration"
+#~ msgstr "a Urutonde Na: BIHUYE ubusa Izina: Urutonde"
+
+#, fuzzy
+#~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration"
+#~ msgstr "Ubwoko a Mburabuzi BIHUYE ubusa Izina: Urutonde"
+
+#, fuzzy
+#~ msgid "thread-local declaration of `%s' follows non thread-local declaration"
+#~ msgstr "Urudodo Bya Urudodo"
+
+#, fuzzy
+#~ msgid "non thread-local declaration of `%s' follows thread-local declaration"
+#~ msgstr "Urudodo Bya Urudodo"
+
+#, fuzzy
+#~ msgid "redefinition of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "redeclaration of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "conflicting declarations of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "prototype for `%s' follows"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "non-prototype definition here"
+#~ msgstr "Insobanuro"
+
+#, fuzzy
+#~ msgid "prototype for `%s' follows and number of arguments doesn't match"
+#~ msgstr "kugirango Na Umubare Bya ingingo BIHUYE"
+
+#, fuzzy
+#~ msgid "prototype for `%s' follows and argument %d doesn't match"
+#~ msgstr "kugirango Na BIHUYE"
+
+#, fuzzy
+#~ msgid "`%s' declared inline after being called"
+#~ msgstr "`%s'Mumurongo Nyuma"
+
+#, fuzzy
+#~ msgid "`%s' declared inline after its definition"
+#~ msgstr "`%s'Mumurongo Nyuma Insobanuro"
+
+#, fuzzy
+#~ msgid "static declaration for `%s' follows non-static"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "non-static declaration for `%s' follows static"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "const declaration for `%s' follows non-const"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "type qualifiers for `%s' conflict with previous decl"
+#~ msgstr "Ubwoko kugirango Na: Ibanjirije"
+
+#, fuzzy
+#~ msgid "redundant redeclaration of `%s' in same scope"
+#~ msgstr "Bya in Ingano:"
+
+#, fuzzy
+#~ msgid "declaration of `%s' shadows a parameter"
+#~ msgstr "Bya a"
+
+#, fuzzy
+#~ msgid "declaration of `%s' shadows a symbol from the parameter list"
+#~ msgstr "Bya a IKIMENYETSO Bivuye i Urutonde"
+
+#, fuzzy
+#~ msgid "a parameter"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "a previous local"
+#~ msgstr "a Ibanjirije"
+
+#, fuzzy
+#~ msgid "a global declaration"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "nested extern declaration of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "`%s' used prior to declaration"
+#~ msgstr "`%s'Kuri"
+
+#, fuzzy
+#~ msgid "`%s' was declared implicitly `extern' and later `static'"
+#~ msgstr "`%s'Na"
+
+#, fuzzy
+#~ msgid "type mismatch with previous external decl"
+#~ msgstr "Ubwoko Na: Ibanjirije external"
+
+#, fuzzy
+#~ msgid "previous external decl of `%s'"
+#~ msgstr "Ibanjirije external Bya"
+
+#, fuzzy
+#~ msgid "type mismatch with previous implicit declaration"
+#~ msgstr "Ubwoko Na: Ibanjirije"
+
+#, fuzzy
+#~ msgid "previous implicit declaration of `%s'"
+#~ msgstr "Ibanjirije Bya"
+
+#, fuzzy
+#~ msgid "`%s' was previously implicitly declared to return `int'"
+#~ msgstr "`%s'Kuri Garuka"
+
+#, fuzzy
+#~ msgid "`%s' was declared `extern' and later `static'"
+#~ msgstr "`%s'Na"
+
+#, fuzzy
+#~ msgid "extern declaration of `%s' doesn't match global one"
+#~ msgstr "Bya BIHUYE"
+
+#, fuzzy
+#~ msgid "`%s' locally external but globally static"
+#~ msgstr "`%s'external"
+
+#, fuzzy
+#~ msgid "function `%s' was previously declared within a block"
+#~ msgstr "Umumaro muri a Funga"
+
+#, fuzzy
+#~ msgid "implicit declaration of function `%s'"
+#~ msgstr "Bya Umumaro"
+
+#, fuzzy
+#~ msgid "label %s referenced outside of any function"
+#~ msgstr "Akarango Hanze Bya Umumaro"
+
+#, fuzzy
+#~ msgid "duplicate label declaration `%s'"
+#~ msgstr "Gusubiramo Akarango"
+
+#, fuzzy
+#~ msgid "this is a previous declaration"
+#~ msgstr "iyi ni a Ibanjirije"
+
+#, fuzzy
+#~ msgid "unnamed struct/union that defines no instances"
+#~ msgstr "Kitiswe Ihuza Oya Ingero"
+
+#, fuzzy
+#~ msgid "useless keyword or type name in empty declaration"
+#~ msgstr "Ijambo- banze Cyangwa Ubwoko Izina: in ubusa"
+
+#, fuzzy
+#~ msgid "two types specified in one empty declaration"
+#~ msgstr "in ubusa"
+
+#, fuzzy
+#~ msgid "empty declaration"
+#~ msgstr "ubusa"
+
+#, fuzzy
+#~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators"
+#~ msgstr "OYA Gushigikira Cyangwa Ubwoko in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "ISO C90 does not support `[*]' array declarators"
+#~ msgstr "OYA Gushigikira Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "GCC does not yet properly implement `[*]' array declarators"
+#~ msgstr "OYA Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "static or type qualifiers in abstract declarator"
+#~ msgstr "Cyangwa Ubwoko in Incamake"
+
+#, fuzzy
+#~ msgid "`%s' is usually a function"
+#~ msgstr "`%s'ni a Umumaro"
+
+#, fuzzy
+#~ msgid "typedef `%s' is initialized (use __typeof__ instead)"
+#~ msgstr "ni Gukoresha"
+
+#, fuzzy
+#~ msgid "function `%s' is initialized like a variable"
+#~ msgstr "Umumaro ni nka a IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "parameter `%s' is initialized"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "variable-sized object may not be initialized"
+#~ msgstr "IMPINDURAGACIRO Igikoresho Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "variable `%s' has initializer but incomplete type"
+#~ msgstr "IMPINDURAGACIRO Ubwoko"
+
+#, fuzzy
+#~ msgid "elements of array `%s' have incomplete type"
+#~ msgstr "Ibintu Bya Imbonerahamwe Ubwoko"
+
+#, fuzzy
+#~ msgid "declaration of `%s' has `extern' and is initialized"
+#~ msgstr "Bya Na ni"
+
+#, fuzzy
+#~ msgid "inline function `%s' given attribute noinline"
+#~ msgstr "Mumurongo Umumaro Ikiranga"
+
+#, fuzzy
+#~ msgid "initializer fails to determine size of `%s'"
+#~ msgstr "Kuri Ingano Bya"
+
+#, fuzzy
+#~ msgid "array size missing in `%s'"
+#~ msgstr "Imbonerahamwe Ingano Ibuze in"
+
+#, fuzzy
+#~ msgid "zero or negative size array `%s'"
+#~ msgstr "Zeru Cyangwa Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "storage size of `%s' isn't known"
+#~ msgstr "Ingano Bya si"
+
+#, fuzzy
+#~ msgid "storage size of `%s' isn't constant"
+#~ msgstr "Ingano Bya si"
+
+#, fuzzy
+#~ msgid "ignoring asm-specifier for non-static local variable `%s'"
+#~ msgstr "kugirango IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "ISO C forbids parameter `%s' shadowing typedef"
+#~ msgstr "C Ishyiraho ry'igicucu"
+
+#, fuzzy
+#~ msgid "`long long long' is too long for GCC"
+#~ msgstr "`ni kugirango"
+
+#, fuzzy
+#~ msgid "ISO C90 does not support `long long'"
+#~ msgstr "OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "duplicate `%s'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "`__thread' before `extern'"
+#~ msgstr "`_Mbere"
+
+#, fuzzy
+#~ msgid "`__thread' before `static'"
+#~ msgstr "`_Mbere"
+
+#, fuzzy
+#~ msgid "two or more data types in declaration of `%s'"
+#~ msgstr "Cyangwa Birenzeho Ibyatanzwe in Bya"
+
+#, fuzzy
+#~ msgid "`%s' fails to be a typedef or built in type"
+#~ msgstr "`%s'Kuri a Cyangwa in Ubwoko"
+
+#, fuzzy
+#~ msgid "type defaults to `int' in declaration of `%s'"
+#~ msgstr "Ubwoko Kuri in Bya"
+
+#, fuzzy
+#~ msgid "both long and short specified for `%s'"
+#~ msgstr "Byombi Na kugirango"
+
+#, fuzzy
+#~ msgid "long or short specified with char for `%s'"
+#~ msgstr "Cyangwa Na: INYUGUTI kugirango"
+
+#, fuzzy
+#~ msgid "long or short specified with floating type for `%s'"
+#~ msgstr "Cyangwa Na: Bihindagurika Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "the only valid combination is `long double'"
+#~ msgstr "i Byemewe Ivanga ni"
+
+#, fuzzy
+#~ msgid "both signed and unsigned specified for `%s'"
+#~ msgstr "Byombi Na Bitashizweho umukono kugirango"
+
+#, fuzzy
+#~ msgid "long, short, signed or unsigned invalid for `%s'"
+#~ msgstr "Cyangwa Bitashizweho umukono Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "long, short, signed or unsigned used invalidly for `%s'"
+#~ msgstr "Cyangwa Bitashizweho umukono kugirango"
+
+#, fuzzy
+#~ msgid "complex invalid for `%s'"
+#~ msgstr "ITSINDA RY'IMIBARE C Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "ISO C90 does not support complex types"
+#~ msgstr "OYA Gushigikira ITSINDA RY'IMIBARE C"
+
+#, fuzzy
+#~ msgid "ISO C does not support plain `complex' meaning `double complex'"
+#~ msgstr "C OYA Gushigikira Byuzuye Igisobanuro MAHARAKUBIRI"
+
+#, fuzzy
+#~ msgid "ISO C does not support complex integer types"
+#~ msgstr "C OYA Gushigikira ITSINDA RY'IMIBARE C Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "duplicate `const'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "duplicate `restrict'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "duplicate `volatile'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "multiple storage classes in declaration of `%s'"
+#~ msgstr "Igikubo Inzego in Bya"
+
+#, fuzzy
+#~ msgid "function definition declared `auto'"
+#~ msgstr "Umumaro Insobanuro"
+
+#, fuzzy
+#~ msgid "function definition declared `register'"
+#~ msgstr "Umumaro Insobanuro"
+
+#, fuzzy
+#~ msgid "function definition declared `typedef'"
+#~ msgstr "Umumaro Insobanuro"
+
+#, fuzzy
+#~ msgid "function definition declared `__thread'"
+#~ msgstr "Umumaro Insobanuro"
+
+#, fuzzy
+#~ msgid "storage class specified for structure field `%s'"
+#~ msgstr "ishuri kugirango Imiterere Umwanya"
+
+#, fuzzy
+#~ msgid "storage class specified for parameter `%s'"
+#~ msgstr "ishuri kugirango"
+
+#, fuzzy
+#~ msgid "storage class specified for typename"
+#~ msgstr "ishuri kugirango"
+
+#, fuzzy
+#~ msgid "`%s' initialized and declared `extern'"
+#~ msgstr "`%s'Na"
+
+#, fuzzy
+#~ msgid "`%s' has both `extern' and initializer"
+#~ msgstr "`%s'Byombi Na"
+
+#, fuzzy
+#~ msgid "top-level declaration of `%s' specifies `auto'"
+#~ msgstr "Hejuru: urwego Bya"
+
+#, fuzzy
+#~ msgid "nested function `%s' declared `extern'"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "function-scope `%s' implicitly auto and declared `__thread'"
+#~ msgstr "Umumaro Ingano: Ikiyega Na"
+
+#, fuzzy
+#~ msgid "static or type qualifiers in non-parameter array declarator"
+#~ msgstr "Cyangwa Ubwoko in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "declaration of `%s' as array of voids"
+#~ msgstr "Bya Nka Imbonerahamwe Bya"
+
+#, fuzzy
+#~ msgid "declaration of `%s' as array of functions"
+#~ msgstr "Bya Nka Imbonerahamwe Bya Imimaro"
+
+#, fuzzy
+#~ msgid "invalid use of structure with flexible array member"
+#~ msgstr "Sibyo Gukoresha Bya Imiterere Na: Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "size of array `%s' has non-integer type"
+#~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids zero-size array `%s'"
+#~ msgstr "C Zeru Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "size of array `%s' is negative"
+#~ msgstr "Ingano Bya Imbonerahamwe ni"
+
+#, fuzzy
+#~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated"
+#~ msgstr "Imbonerahamwe bya Ingano"
+
+#, fuzzy
+#~ msgid "ISO C90 forbids variable-size array `%s'"
+#~ msgstr "IMPINDURAGACIRO Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "size of array `%s' is too large"
+#~ msgstr "Ingano Bya Imbonerahamwe ni Binini"
+
+#, fuzzy
+#~ msgid "ISO C90 does not support flexible array members"
+#~ msgstr "OYA Gushigikira Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "array type has incomplete element type"
+#~ msgstr "Imbonerahamwe Ubwoko Ikigize: Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids const or volatile function types"
+#~ msgstr "C Cyangwa Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' declared as function returning a function"
+#~ msgstr "`%s'Nka Umumaro a Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' declared as function returning an array"
+#~ msgstr "`%s'Nka Umumaro Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "ISO C forbids qualified void function return type"
+#~ msgstr "C Umumaro Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "type qualifiers ignored on function return type"
+#~ msgstr "Ubwoko ku Umumaro Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids qualified function types"
+#~ msgstr "C Umumaro"
+
+#, fuzzy
+#~ msgid "invalid type modifier within pointer declarator"
+#~ msgstr "Sibyo Ubwoko muri Mweretsi"
+
+#, fuzzy
+#~ msgid "variable or field `%s' declared void"
+#~ msgstr "IMPINDURAGACIRO Cyangwa Umwanya"
+
+#, fuzzy
+#~ msgid "attributes in parameter array declarator ignored"
+#~ msgstr "Ibiranga in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "invalid type modifier within array declarator"
+#~ msgstr "Sibyo Ubwoko muri Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "field `%s' declared as a function"
+#~ msgstr "Umwanya Nka a Umumaro"
+
+#, fuzzy
+#~ msgid "field `%s' has incomplete type"
+#~ msgstr "Umwanya Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid storage class for function `%s'"
+#~ msgstr "Sibyo ishuri kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "`noreturn' function returns non-void value"
+#~ msgstr "`Umumaro Agaciro"
+
+#, fuzzy
+#~ msgid "cannot inline function `main'"
+#~ msgstr "Mumurongo Umumaro"
+
+#, fuzzy
+#~ msgid "variable `%s' declared `inline'"
+#~ msgstr "IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "thread-local storage not supported for this target"
+#~ msgstr "Urudodo OYA kugirango iyi Intego"
+
+#, fuzzy
+#~ msgid "function declaration isn't a prototype"
+#~ msgstr "Umumaro si a"
+
+#, fuzzy
+#~ msgid "parameter names (without types) in function declaration"
+#~ msgstr "Amazina in Umumaro"
+
+#, fuzzy
+#~ msgid "parameter `%s' has incomplete type"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter has incomplete type"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter `%s' points to incomplete type"
+#~ msgstr "Utudomo Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter points to incomplete type"
+#~ msgstr "Utudomo Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter `%s' has just a forward declaration"
+#~ msgstr "a Imbere"
+
+#, fuzzy
+#~ msgid "`void' in parameter list must be the entire list"
+#~ msgstr "`in Urutonde i Urutonde"
+
+#, fuzzy
+#~ msgid "`struct %s' declared inside parameter list"
+#~ msgstr "`Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "`union %s' declared inside parameter list"
+#~ msgstr "`Ihuza Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "`enum %s' declared inside parameter list"
+#~ msgstr "`Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "anonymous struct declared inside parameter list"
+#~ msgstr "Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "anonymous union declared inside parameter list"
+#~ msgstr "Ihuza Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "anonymous enum declared inside parameter list"
+#~ msgstr "Mo Imbere Urutonde"
+
+#, fuzzy
+#~ msgid "its scope is only this definition or declaration, which is probably not what you want"
+#~ msgstr "Ingano: ni iyi Insobanuro Cyangwa ni OYA"
+
+#, fuzzy
+#~ msgid "redefinition of `union %s'"
+#~ msgstr "Bya Ihuza"
+
+#, fuzzy
+#~ msgid "redefinition of `struct %s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "declaration does not declare anything"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "%s defined inside parms"
+#~ msgstr "%sMo Imbere"
+
+# starmath/source\smres.src:RID_TOOLBOXWINDOW.3.RID_XUNIONY.text
+#, fuzzy
+#~ msgid "union"
+#~ msgstr "Ihuza"
+
+# sc/source\ui\formdlg\formdlgs.src:RID_SCTAB_STRUCT.FT_STRUCT.text
+#, fuzzy
+#~ msgid "structure"
+#~ msgstr "Imiterere"
+
+#, fuzzy
+#~ msgid "%s has no %s"
+#~ msgstr "%sOya"
+
+#, fuzzy
+#~ msgid "nested redefinition of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "bit-field `%s' width not an integer constant"
+#~ msgstr "Umwanya Ubugari OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "bit-field `%s' has invalid type"
+#~ msgstr "Umwanya Sibyo Ubwoko"
+
+#, fuzzy
+#~ msgid "bit-field `%s' type invalid in ISO C"
+#~ msgstr "Umwanya Ubwoko Sibyo in C"
+
+#, fuzzy
+#~ msgid "negative width in bit-field `%s'"
+#~ msgstr "Ubugari in Umwanya"
+
+#, fuzzy
+#~ msgid "width of `%s' exceeds its type"
+#~ msgstr "Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "zero width for bit-field `%s'"
+#~ msgstr "Zeru Ubugari kugirango Umwanya"
+
+#, fuzzy
+#~ msgid "`%s' is narrower than values of its type"
+#~ msgstr "`%s'ni Uduciro Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "flexible array member in union"
+#~ msgstr "Imbonerahamwe in Ihuza"
+
+#, fuzzy
+#~ msgid "flexible array member not at end of struct"
+#~ msgstr "Imbonerahamwe OYA ku Impera Bya"
+
+#, fuzzy
+#~ msgid "flexible array member in otherwise empty struct"
+#~ msgstr "Imbonerahamwe in ubusa"
+
+#, fuzzy
+#~ msgid "duplicate member `%s'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "union cannot be made transparent"
+#~ msgstr "Ihuza Bibonerana"
+
+#, fuzzy
+#~ msgid "redeclaration of `enum %s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "enum defined inside parms"
+#~ msgstr "Mo Imbere"
+
+#, fuzzy
+#~ msgid "enumeration values exceed range of largest integer"
+#~ msgstr "Uduciro Urutonde Bya Kinini Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "enumerator value for `%s' not integer constant"
+#~ msgstr "Agaciro kugirango OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "overflow in enumeration values"
+#~ msgstr "Byarenze urugero in Uduciro"
+
+#, fuzzy
+#~ msgid "ISO C restricts enumerator values to range of `int'"
+#~ msgstr "C Uduciro Kuri Urutonde Bya"
+
+#, fuzzy
+#~ msgid "return type is an incomplete type"
+#~ msgstr "Garuka Ubwoko ni Ubwoko"
+
+#, fuzzy
+#~ msgid "return type defaults to `int'"
+#~ msgstr "Garuka Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "no previous prototype for `%s'"
+#~ msgstr "Oya Ibanjirije kugirango"
+
+#, fuzzy
+#~ msgid "`%s' was used with no prototype before its definition"
+#~ msgstr "`%s'Na: Oya Mbere Insobanuro"
+
+#, fuzzy
+#~ msgid "no previous declaration for `%s'"
+#~ msgstr "Oya Ibanjirije kugirango"
+
+#, fuzzy
+#~ msgid "`%s' was used with no declaration before its definition"
+#~ msgstr "`%s'Na: Oya Mbere Insobanuro"
+
+#, fuzzy
+#~ msgid "return type of `%s' is not `int'"
+#~ msgstr "Garuka Ubwoko Bya ni OYA"
+
+#, fuzzy
+#~ msgid "first argument of `%s' should be `int'"
+#~ msgstr "Itangira Bya"
+
+#, fuzzy
+#~ msgid "second argument of `%s' should be `char **'"
+#~ msgstr "ISEGONDA Bya INYUGUTI"
+
+#, fuzzy
+#~ msgid "third argument of `%s' should probably be `char **'"
+#~ msgstr "Bya INYUGUTI"
+
+#, fuzzy
+#~ msgid "`%s' takes only zero or two arguments"
+#~ msgstr "`%s'Zeru Cyangwa ingingo"
+
+#, fuzzy
+#~ msgid "`%s' is normally a non-static function"
+#~ msgstr "`%s'ni a Umumaro"
+
+#, fuzzy
+#~ msgid "parm types given both in parmlist and separately"
+#~ msgstr "Byombi in Na"
+
+#, fuzzy
+#~ msgid "parameter name omitted"
+#~ msgstr "Izina:"
+
+#, fuzzy
+#~ msgid "parameter name missing from parameter list"
+#~ msgstr "Izina: Ibuze Bivuye Urutonde"
+
+#, fuzzy
+#~ msgid "multiple parameters named `%s'"
+#~ msgstr "Igikubo Ibigenga"
+
+#, fuzzy
+#~ msgid "type of `%s' defaults to `int'"
+#~ msgstr "Ubwoko Bya Kuri"
+
+#, fuzzy
+#~ msgid "declaration for parameter `%s' but no such parameter"
+#~ msgstr "kugirango Oya"
+
+#, fuzzy
+#~ msgid "number of arguments doesn't match prototype"
+#~ msgstr "Umubare Bya ingingo BIHUYE"
+
+#, fuzzy
+#~ msgid "promoted argument `%s' doesn't match prototype"
+#~ msgstr "BIHUYE"
+
+#, fuzzy
+#~ msgid "argument `%s' doesn't match prototype"
+#~ msgstr "BIHUYE"
+
+#, fuzzy
+#~ msgid "no return statement in function returning non-void"
+#~ msgstr "Oya Garuka Inyandiko in Umumaro"
+
+#, fuzzy
+#~ msgid "this function may return with or without a value"
+#~ msgstr "iyi Umumaro Gicurasi Garuka Na: Cyangwa a Agaciro"
+
+#, fuzzy
+#~ msgid "size of return value of `%s' is %u bytes"
+#~ msgstr "Ingano Bya Garuka Agaciro Bya ni Bayite"
+
+#, fuzzy
+#~ msgid "size of return value of `%s' is larger than %d bytes"
+#~ msgstr "Ingano Bya Garuka Agaciro Bya ni Kinini Bayite"
+
+#, fuzzy
+#~ msgid "`for' loop initial declaration used outside C99 mode"
+#~ msgstr "`Hanze Ubwoko"
+
+#, fuzzy
+#~ msgid "`struct %s' declared in `for' loop initial declaration"
+#~ msgstr "`in"
+
+#, fuzzy
+#~ msgid "`union %s' declared in `for' loop initial declaration"
+#~ msgstr "`Ihuza in"
+
+#, fuzzy
+#~ msgid "`enum %s' declared in `for' loop initial declaration"
+#~ msgstr "`in"
+
+#, fuzzy
+#~ msgid "declaration of non-variable `%s' in `for' loop initial declaration"
+#~ msgstr "Bya IMPINDURAGACIRO in"
+
+#, fuzzy
+#~ msgid "declaration of static variable `%s' in `for' loop initial declaration"
+#~ msgstr "Bya IMPINDURAGACIRO in"
+
+#, fuzzy
+#~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration"
+#~ msgstr "Bya IMPINDURAGACIRO in"
+
+#, fuzzy
+#~ msgid "format string arg not a string type"
+#~ msgstr "Imiterere Ikurikiranyanyuguti OYA a Ikurikiranyanyuguti Ubwoko"
+
+#, fuzzy
+#~ msgid "args to be formatted is not '...'"
+#~ msgstr "Kuri Byahanaguwe ni OYA"
+
+#, fuzzy
+#~ msgid "strftime formats cannot format arguments"
+#~ msgstr "Imiterere Imiterere ingingo"
+
+#, fuzzy
+#~ msgid "format string has invalid operand number"
+#~ msgstr "Imiterere Ikurikiranyanyuguti Sibyo Umubare"
+
+#, fuzzy
+#~ msgid "function does not return string type"
+#~ msgstr "Umumaro OYA Garuka Ikurikiranyanyuguti Ubwoko"
+
+#, fuzzy
+#~ msgid "unrecognized format specifier"
+#~ msgstr "Imiterere"
+
+#, fuzzy
+#~ msgid "`%s' is an unrecognized format function type"
+#~ msgstr "`%s'ni Imiterere Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "format string arg follows the args to be formatted"
+#~ msgstr "Imiterere Ikurikiranyanyuguti i Kuri Byahanaguwe"
+
+#, fuzzy
+#~ msgid "` ' flag"
+#~ msgstr "`'Ibendera"
+
+#, fuzzy
+#~ msgid "the ` ' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`+' flag"
+#~ msgstr "`+'Ibendera"
+
+#, fuzzy
+#~ msgid "the `+' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`#' flag"
+#~ msgstr "`#'Ibendera"
+
+#, fuzzy
+#~ msgid "the `#' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`0' flag"
+#~ msgstr "`Ibendera"
+
+#, fuzzy
+#~ msgid "the `0' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`-' flag"
+#~ msgstr "`-'Ibendera"
+
+#, fuzzy
+#~ msgid "the `-' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`'' flag"
+#~ msgstr "`''Ibendera"
+
+#, fuzzy
+#~ msgid "the `'' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`I' flag"
+#~ msgstr "`Ibendera"
+
+#, fuzzy
+#~ msgid "the `I' printf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "field width"
+#~ msgstr "Umwanya Ubugari"
+
+#, fuzzy
+#~ msgid "field width in printf format"
+#~ msgstr "Umwanya Ubugari in Imiterere"
+
+#, fuzzy
+#~ msgid "precision in printf format"
+#~ msgstr "in Imiterere"
+
+#, fuzzy
+#~ msgid "length modifier"
+#~ msgstr "Uburebure"
+
+#, fuzzy
+#~ msgid "length modifier in printf format"
+#~ msgstr "Uburebure in Imiterere"
+
+#, fuzzy
+#~ msgid "assignment suppression"
+#~ msgstr "Igenera"
+
+#, fuzzy
+#~ msgid "the assignment suppression scanf feature"
+#~ msgstr "i Igenera"
+
+#, fuzzy
+#~ msgid "`a' flag"
+#~ msgstr "`Ibendera"
+
+#, fuzzy
+#~ msgid "the `a' scanf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "field width in scanf format"
+#~ msgstr "Umwanya Ubugari in Imiterere"
+
+#, fuzzy
+#~ msgid "length modifier in scanf format"
+#~ msgstr "Uburebure in Imiterere"
+
+#, fuzzy
+#~ msgid "the `'' scanf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `I' scanf flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`_' flag"
+#~ msgstr "`_'Ibendera"
+
+#, fuzzy
+#~ msgid "the `_' strftime flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `-' strftime flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `0' strftime flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`^' flag"
+#~ msgstr "`^'Ibendera"
+
+#, fuzzy
+#~ msgid "the `^' strftime flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `#' strftime flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "field width in strftime format"
+#~ msgstr "Umwanya Ubugari in Imiterere"
+
+#, fuzzy
+#~ msgid "the `E' strftime modifier"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "the `O' strftime modifier"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "the `O' modifier"
+#~ msgstr "i"
+
+# svx/source\dialog\tabstpge.src:RID_SVXPAGE_TABULATOR.FL_FILLCHAR.text
+#, fuzzy
+#~ msgid "fill character"
+#~ msgstr "Kuzuza inyuguti"
+
+#, fuzzy
+#~ msgid "fill character in strfmon format"
+#~ msgstr "Kuzuza Inyuguti in Imiterere"
+
+#, fuzzy
+#~ msgid "the `^' strfmon flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `+' strfmon flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`(' flag"
+#~ msgstr "`('Ibendera"
+
+#, fuzzy
+#~ msgid "the `(' strfmon flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "`!' flag"
+#~ msgstr "`!'Ibendera"
+
+#, fuzzy
+#~ msgid "the `!' strfmon flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "the `-' strfmon flag"
+#~ msgstr "i Ibendera"
+
+#, fuzzy
+#~ msgid "field width in strfmon format"
+#~ msgstr "Umwanya Ubugari in Imiterere"
+
+#, fuzzy
+#~ msgid "left precision"
+#~ msgstr "Ibumoso:"
+
+#, fuzzy
+#~ msgid "left precision in strfmon format"
+#~ msgstr "Ibumoso: in Imiterere"
+
+#, fuzzy
+#~ msgid "right precision"
+#~ msgstr "Iburyo:"
+
+#, fuzzy
+#~ msgid "right precision in strfmon format"
+#~ msgstr "Iburyo: in Imiterere"
+
+#, fuzzy
+#~ msgid "length modifier in strfmon format"
+#~ msgstr "Uburebure in Imiterere"
+
+#, fuzzy
+#~ msgid "function might be possible candidate for `%s' format attribute"
+#~ msgstr "Umumaro kugirango Imiterere Ikiranga"
+
+#, fuzzy
+#~ msgid "missing $ operand number in format"
+#~ msgstr "Ibuze Umubare in Imiterere"
+
+#, fuzzy
+#~ msgid "%s does not support %%n$ operand number formats"
+#~ msgstr "%sOYA Gushigikira Umubare Imiterere"
+
+#, fuzzy
+#~ msgid "operand number out of range in format"
+#~ msgstr "Umubare Inyuma Bya Urutonde in Imiterere"
+
+#, fuzzy
+#~ msgid "format argument %d used more than once in %s format"
+#~ msgstr "Imiterere Birenzeho Rimwe in Imiterere"
+
+#, fuzzy
+#~ msgid "format argument %d unused before used argument %d in $-style format"
+#~ msgstr "Imiterere Kidakoreshwa Mbere in IMISUSIRE Imiterere"
+
+#, fuzzy
+#~ msgid "format not a string literal, format string not checked"
+#~ msgstr "Imiterere OYA a Ikurikiranyanyuguti Imiterere Ikurikiranyanyuguti OYA Ivivuwe"
+
+#, fuzzy
+#~ msgid "format not a string literal and no format arguments"
+#~ msgstr "Imiterere OYA a Ikurikiranyanyuguti Na Oya Imiterere ingingo"
+
+#, fuzzy
+#~ msgid "format not a string literal, argument types not checked"
+#~ msgstr "Imiterere OYA a Ikurikiranyanyuguti OYA Ivivuwe"
+
+#, fuzzy
+#~ msgid "too many arguments for format"
+#~ msgstr "ingingo kugirango Imiterere"
+
+#, fuzzy
+#~ msgid "unused arguments in $-style format"
+#~ msgstr "Kidakoreshwa ingingo in IMISUSIRE Imiterere"
+
+#, fuzzy
+#~ msgid "zero-length %s format string"
+#~ msgstr "Zeru Uburebure Imiterere Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "format is a wide character string"
+#~ msgstr "Imiterere ni a Inyuguti Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "unterminated format string"
+#~ msgstr "Imiterere Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "embedded `\\0' in format"
+#~ msgstr "Gitsindiye in Imiterere"
+
+#, fuzzy
+#~ msgid "spurious trailing `%%' in format"
+#~ msgstr "in Imiterere"
+
+#, fuzzy
+#~ msgid "repeated %s in format"
+#~ msgstr "byasubiyemo in Imiterere"
+
+#, fuzzy
+#~ msgid "missing fill character at end of strfmon format"
+#~ msgstr "Ibuze Kuzuza Inyuguti ku Impera Bya Imiterere"
+
+#, fuzzy
+#~ msgid "too few arguments for format"
+#~ msgstr "ingingo kugirango Imiterere"
+
+#, fuzzy
+#~ msgid "zero width in %s format"
+#~ msgstr "Zeru Ubugari in Imiterere"
+
+#, fuzzy
+#~ msgid "empty left precision in %s format"
+#~ msgstr "ubusa Ibumoso: in Imiterere"
+
+#, fuzzy
+#~ msgid "field precision"
+#~ msgstr "Umwanya"
+
+#, fuzzy
+#~ msgid "empty precision in %s format"
+#~ msgstr "ubusa in Imiterere"
+
+#, fuzzy
+#~ msgid "%s does not support the `%s' %s length modifier"
+#~ msgstr "%sOYA Gushigikira i Uburebure"
+
+#, fuzzy
+#~ msgid "conversion lacks type at end of format"
+#~ msgstr "Ihindurangero Ubwoko ku Impera Bya Imiterere"
+
+#, fuzzy
+#~ msgid "unknown conversion type character `%c' in format"
+#~ msgstr "Kitazwi Ihindurangero Ubwoko Inyuguti in Imiterere"
+
+#, fuzzy
+#~ msgid "unknown conversion type character 0x%x in format"
+#~ msgstr "Kitazwi Ihindurangero Ubwoko Inyuguti in Imiterere"
+
+#, fuzzy
+#~ msgid "%s does not support the `%%%c' %s format"
+#~ msgstr "%sOYA Gushigikira i Imiterere"
+
+#, fuzzy
+#~ msgid "%s used with `%%%c' %s format"
+#~ msgstr "%sNa: Imiterere"
+
+#, fuzzy
+#~ msgid "%s does not support %s"
+#~ msgstr "%sOYA Gushigikira"
+
+#, fuzzy
+#~ msgid "%s does not support %s with the `%%%c' %s format"
+#~ msgstr "%sOYA Gushigikira Na: i Imiterere"
+
+#, fuzzy
+#~ msgid "%s ignored with %s and `%%%c' %s format"
+#~ msgstr "%sNa: Na Imiterere"
+
+#, fuzzy
+#~ msgid "%s ignored with %s in %s format"
+#~ msgstr "%sNa: in Imiterere"
+
+#, fuzzy
+#~ msgid "use of %s and %s together with `%%%c' %s format"
+#~ msgstr "Gukoresha Bya Na Na: Imiterere"
+
+#, fuzzy
+#~ msgid "use of %s and %s together in %s format"
+#~ msgstr "Gukoresha Bya Na in Imiterere"
+
+#, fuzzy
+#~ msgid "`%%%c' yields only last 2 digits of year in some locales"
+#~ msgstr "`%%%c'Iheruka 2. Bya Umwaka in"
+
+#, fuzzy
+#~ msgid "`%%%c' yields only last 2 digits of year"
+#~ msgstr "`%%%c'Iheruka 2. Bya Umwaka"
+
+#, fuzzy
+#~ msgid "no closing `]' for `%%[' format"
+#~ msgstr "Oya kugirango Imiterere"
+
+#, fuzzy
+#~ msgid "use of `%s' length modifier with `%c' type character"
+#~ msgstr "Gukoresha Bya Uburebure Na: Ubwoko Inyuguti"
+
+#, fuzzy
+#~ msgid "%s does not support the `%%%s%c' %s format"
+#~ msgstr "%sOYA Gushigikira i Imiterere"
+
+#, fuzzy
+#~ msgid "operand number specified with suppressed assignment"
+#~ msgstr "Umubare Na: Igenera"
+
+#, fuzzy
+#~ msgid "operand number specified for format taking no argument"
+#~ msgstr "Umubare kugirango Imiterere Oya"
+
+#, fuzzy
+#~ msgid "writing through null pointer (arg %d)"
+#~ msgstr "Gihinguranya NTAGIHARI Mweretsi"
+
+#, fuzzy
+#~ msgid "reading through null pointer (arg %d)"
+#~ msgstr "Gihinguranya NTAGIHARI Mweretsi"
+
+#, fuzzy
+#~ msgid "writing into constant object (arg %d)"
+#~ msgstr "Igikoresho"
+
+#, fuzzy
+#~ msgid "extra type qualifiers in format argument (arg %d)"
+#~ msgstr "Birenga Ubwoko in Imiterere"
+
+#, fuzzy
+#~ msgid "format argument is not a pointer (arg %d)"
+#~ msgstr "Imiterere ni OYA a Mweretsi"
+
+#, fuzzy
+#~ msgid "format argument is not a pointer to a pointer (arg %d)"
+#~ msgstr "Imiterere ni OYA a Mweretsi Kuri a Mweretsi"
+
+#, fuzzy
+#~ msgid "pointer"
+#~ msgstr "Mweretsi"
+
+#, fuzzy
+#~ msgid "different type"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "%s is not type %s (arg %d)"
+#~ msgstr "%sni OYA Ubwoko"
+
+#, fuzzy
+#~ msgid "%s format, %s arg (arg %d)"
+#~ msgstr "%sImiterere"
+
+#, fuzzy
+#~ msgid "YYDEBUG not defined"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "badly nested C headers from preprocessor"
+#~ msgstr "C Imitwe Bivuye"
+
+#, fuzzy
+#~ msgid "universal-character-name '\\u%04x' not valid in identifier"
+#~ msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga"
+
+#, fuzzy
+#~ msgid "stray '%c' in program"
+#~ msgstr "in Porogaramu"
+
+#, fuzzy
+#~ msgid "stray '\\%o' in program"
+#~ msgstr "in Porogaramu"
+
+#, fuzzy
+#~ msgid "this decimal constant is unsigned only in ISO C90"
+#~ msgstr "iyi NYACUMI ni Bitashizweho umukono in"
+
+#, fuzzy
+#~ msgid "this decimal constant would be unsigned in ISO C90"
+#~ msgstr "iyi NYACUMI Bitashizweho umukono in"
+
+#, fuzzy
+#~ msgid "integer constant is too large for \"%s\" type"
+#~ msgstr "Umubare wuzuye ni Binini kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "floating constant exceeds range of \"%s\""
+#~ msgstr "Bihindagurika Urutonde Bya"
+
+#, fuzzy
+#~ msgid "ignoring invalid multibyte character"
+#~ msgstr "Sibyo Inyuguti"
+
+#, fuzzy
+#~ msgid "missing argument to \"-%s\""
+#~ msgstr "Ibuze Kuri"
+
+#, fuzzy
+#~ msgid "no class name specified with \"-%s\""
+#~ msgstr "Oya ishuri Izina: Na:"
+
+#, fuzzy
+#~ msgid "missing filename after \"-%s\""
+#~ msgstr "Ibuze Izina ry'idosiye: Nyuma"
+
+#, fuzzy
+#~ msgid "missing target after \"-%s\""
+#~ msgstr "Ibuze Intego Nyuma"
+
+#, fuzzy
+#~ msgid "options array incorrectly sorted: %s is before %s"
+#~ msgstr "Amahitamo Imbonerahamwe bishunguwe ni Mbere"
+
+#, fuzzy
+#~ msgid "too many filenames given.  Type %s --help for usage"
+#~ msgstr "Ifashayobora kugirango Ikoresha:"
+
+#, fuzzy
+#~ msgid "-Wno-strict-prototypes is not supported in C++"
+#~ msgstr "-ni OYA in C"
+
+#, fuzzy
+#~ msgid "switch \"%s\" is no longer supported"
+#~ msgstr "Hindura ni Oya"
+
+#, fuzzy
+#~ msgid "switch \"%s\" is deprecated, please see documentation for details"
+#~ msgstr "Hindura ni Bitemewe. kugirango Birambuye"
+
+#, fuzzy
+#~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)"
+#~ msgstr "-Amarengayobora Kuri Na ni NONEAHA ku ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "output filename specified twice"
+#~ msgstr "Ibisohoka Izina ry'idosiye:"
+
+#, fuzzy
+#~ msgid "-Wformat-extra-args ignored without -Wformat"
+#~ msgstr "-Birenga"
+
+#, fuzzy
+#~ msgid "-Wformat-zero-length ignored without -Wformat"
+#~ msgstr "-Zeru Uburebure"
+
+#, fuzzy
+#~ msgid "-Wformat-security ignored without -Wformat"
+#~ msgstr "-Umutekano"
+
+#, fuzzy
+#~ msgid "-Wmissing-format-attribute ignored without -Wformat"
+#~ msgstr "-Imiterere Ikiranga"
+
+#, fuzzy
+#~ msgid "opening output file %s"
+#~ msgstr "Gufungura %s%S Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "opening dependency file %s"
+#~ msgstr "Gufungura %s%S IDOSIYE"
+
+#, fuzzy
+#~ msgid "closing dependency file %s"
+#~ msgstr "IDOSIYE"
+
+#, fuzzy
+#~ msgid "when writing output to %s"
+#~ msgstr "Ryari: Ibisohoka Kuri"
+
+#, fuzzy
+#~ msgid "to generate dependencies you must specify either -M or -MM"
+#~ msgstr "Kuri Cyangwa"
+
+#, fuzzy
+#~ msgid "\"-%s\" is valid for %s but not for %s"
+#~ msgstr "\"-%s\"ni Byemewe kugirango OYA kugirango"
+
+#, fuzzy
+#~ msgid ""
+#~ "Switches:\n"
+#~ "  -include <file>           Include the contents of <file> before other files\n"
+#~ "  -imacros <file>           Accept definition of macros in <file>\n"
+#~ "  -iprefix <path>           Specify <path> as a prefix for next two options\n"
+#~ "  -iwithprefix <dir>        Add <dir> to the end of the system include path\n"
+#~ "  -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n"
+#~ "  -isystem <dir>            Add <dir> to the start of the system include path\n"
+#~ msgstr "Gushyiramo IDOSIYE i Ibigize Bya IDOSIYE Mbere Ikindi IDOSIYE Insobanuro Bya Makoro in IDOSIYE Inzira Inzira Nka a Imbanziriza kugirango Komeza>> Kuri i Impera Bya i Sisitemu Gushyiramo Kuri i Impera Bya i Gushyiramo Kuri i Gutangira Bya i Sisitemu Gushyiramo"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -idirafter <dir>          Add <dir> to the end of the system include path\n"
+#~ "  -I <dir>                  Add <dir> to the end of the main include path\n"
+#~ "  -I-                       Fine-grained include path control; see info docs\n"
+#~ "  -nostdinc                 Do not search system include directories\n"
+#~ "                             (dirs specified with -isystem will still be used)\n"
+#~ "  -nostdinc++               Do not search system include directories for C++\n"
+#~ "  -o <file>                 Put output into <file>\n"
+#~ msgstr "-Kuri i Impera Bya i Sisitemu Gushyiramo Kuri i Impera Bya i Gushyiramo Gushyiramo Inzira Igenzura Ibisobanuro OYA Gushaka Sisitemu Gushyiramo Na: OYA Gushaka Sisitemu Gushyiramo ububiko bw'amaderese kugirango C o IDOSIYE Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -trigraphs                Support ISO C trigraphs\n"
+#~ "  -std=<std name>           Specify the conformance standard; one of:\n"
+#~ "                            gnu89, gnu99, c89, c99, iso9899:1990,\n"
+#~ "                            iso9899:199409, iso9899:1999, c++98\n"
+#~ "  -w                        Inhibit warning messages\n"
+#~ "  -W[no-]trigraphs          Warn if trigraphs are encountered\n"
+#~ "  -W[no-]comment{s}         Warn if one comment starts inside another\n"
+#~ msgstr "-C STD STD Izina: i Bisanzwe Bya C W Iburira Oya NIBA Oya Icyo wongeraho S NIBA Icyo wongeraho Mo Imbere"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -W[no-]traditional        Warn about features not present in traditional C\n"
+#~ "  -W[no-]undef              Warn if an undefined macro is used by #if\n"
+#~ "  -W[no-]import             Warn about the use of the #import directive\n"
+#~ msgstr "-Oya Ibyerekeye Ibiranga OYA in Oya NIBA kidasobanuye Makoro ni ku Oya Kuzana Ibyerekeye i Gukoresha Bya i Kuzana"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -W[no-]error              Treat all warnings as errors\n"
+#~ "  -W[no-]system-headers     Do not suppress warnings from system headers\n"
+#~ "  -W[no-]all                Enable most preprocessor warnings\n"
+#~ msgstr "-Oya Ikosa Byose Iburira Nka Oya Sisitemu Imitwe OYA Iburira Bivuye Sisitemu Oya Byose"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -M                        Generate make dependencies\n"
+#~ "  -MM                       As -M, but ignore system header files\n"
+#~ "  -MD                       Generate make dependencies and compile\n"
+#~ "  -MMD                      As -MD, but ignore system header files\n"
+#~ "  -MF <file>                Write dependency output to the given file\n"
+#~ "  -MG                       Treat missing header file as generated files\n"
+#~ msgstr "-Ubwoko Kwirengagiza Sisitemu Umutwempangano Ubwoko Na Kwirengagiza Sisitemu Umutwempangano IDOSIYE Ibisohoka Kuri i Ibuze Umutwempangano IDOSIYE Nka"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -MP\t\t\t    Generate phony targets for all headers\n"
+#~ "  -MQ <target>              Add a MAKE-quoted target\n"
+#~ "  -MT <target>              Add an unquoted target\n"
+#~ msgstr "-kugirango Byose Intego a Intego"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -D<macro>                 Define a <macro> with string '1' as its value\n"
+#~ "  -D<macro>=<val>           Define a <macro> with <val> as its value\n"
+#~ "  -A<question>=<answer>     Assert the <answer> to <question>\n"
+#~ "  -A-<question>=<answer>    Disable the <answer> to <question>\n"
+#~ "  -U<macro>                 Undefine <macro> \n"
+#~ "  -v                        Display the version number\n"
+#~ msgstr "-Makoro a Makoro Na: Ikurikiranyanyuguti Nka Makoro a Makoro Na: Nka A i Kuri A i Kuri U Makoro Makoro v i Verisiyo"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -H                        Print the name of header files as they are used\n"
+#~ "  -C                        Do not discard comments\n"
+#~ "  -dM                       Display a list of macro definitions active at end\n"
+#~ "  -dD                       Preserve macro definitions in output\n"
+#~ "  -dN                       As -dD except that only the names are preserved\n"
+#~ "  -dI                       Include #include directives in the output\n"
+#~ msgstr "-H i Izina: Bya Umutwempangano Idosiye Nka C OYA Kwanga a Urutonde Bya Makoro Gikora ku Makoro in i Amazina Gushyiramo in i"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -f[no-]preprocessed       Treat the input file as already preprocessed\n"
+#~ "  -ftabstop=<number>        Distance between tab stops for column reporting\n"
+#~ "  -P                        Do not generate #line directives\n"
+#~ "  -remap                    Remap file names when including files\n"
+#~ "  --help                    Display this information\n"
+#~ msgstr "-F Oya i Iyinjiza IDOSIYE Nka Umubare hagati Isunika kugirango Inkingi OYA Umurongo IDOSIYE Amazina Ryari: Ifashayobora iyi"
+
+#~ msgid "syntax error"
+#~ msgstr "Ikosa mu myandikire"
+
+#, fuzzy
+#~ msgid "syntax error: cannot back up"
+#~ msgstr "Ikosa Inyuma Hejuru"
+
+#, fuzzy
+#~ msgid "ISO C forbids an empty source file"
+#~ msgstr "C ubusa Inkomoko IDOSIYE"
+
+#, fuzzy
+#~ msgid "argument of `asm' is not a constant string"
+#~ msgstr "Bya ni OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "ISO C forbids data definition with no type or storage class"
+#~ msgstr "C Ibyatanzwe Insobanuro Na: Oya Ubwoko Cyangwa ishuri"
+
+#, fuzzy
+#~ msgid "data definition has no type or storage class"
+#~ msgstr "Ibyatanzwe Insobanuro Oya Ubwoko Cyangwa ishuri"
+
+#, fuzzy
+#~ msgid "ISO C does not allow extra `;' outside of a function"
+#~ msgstr "C OYA Kwemerera Birenga Hanze Bya a Umumaro"
+
+#, fuzzy
+#~ msgid "`sizeof' applied to a bit-field"
+#~ msgstr "`Byashyizweho Kuri a Umwanya"
+
+#, fuzzy
+#~ msgid "ISO C forbids omitting the middle term of a ?: expression"
+#~ msgstr "C i Hagati Ijambo Bya a imvugo"
+
+#, fuzzy
+#~ msgid "ISO C forbids braced-groups within expressions"
+#~ msgstr "C Amatsinda muri"
+
+#, fuzzy
+#~ msgid "first argument to __builtin_choose_expr not a constant"
+#~ msgstr "Itangira Kuri OYA a"
+
+#, fuzzy
+#~ msgid "traditional C rejects ISO C style function definitions"
+#~ msgstr "C C IMISUSIRE Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' is not at beginning of declaration"
+#~ msgstr "`%s'ni OYA ku Itangiriro Bya"
+
+#, fuzzy
+#~ msgid "ISO C forbids empty initializer braces"
+#~ msgstr "C ubusa Ingirwadusodeko"
+
+#, fuzzy
+#~ msgid "ISO C89 forbids specifying subobject to initialize"
+#~ msgstr "Kuri gutangiza"
+
+#, fuzzy
+#~ msgid "obsolete use of designated initializer without `='"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "obsolete use of designated initializer with `:'"
+#~ msgstr "Gukoresha Bya Na:"
+
+#, fuzzy
+#~ msgid "ISO C forbids specifying range of elements to initialize"
+#~ msgstr "C Urutonde Bya Ibintu Kuri gutangiza"
+
+#, fuzzy
+#~ msgid "ISO C forbids nested functions"
+#~ msgstr "C Imimaro"
+
+#, fuzzy
+#~ msgid "ISO C forbids forward references to `enum' types"
+#~ msgstr "C Imbere Indango Kuri"
+
+#, fuzzy
+#~ msgid "comma at end of enumerator list"
+#~ msgstr "Akitso ku Impera Bya Urutonde"
+
+#, fuzzy
+#~ msgid "no semicolon at end of struct or union"
+#~ msgstr "Oya Akabago n'Akitso ku Impera Bya Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "extra semicolon in struct or union specified"
+#~ msgstr "Birenga Akabago n'Akitso in Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "ISO C doesn't support unnamed structs/unions"
+#~ msgstr "C Gushigikira Kitiswe"
+
+#, fuzzy
+#~ msgid "ISO C forbids member declarations with no members"
+#~ msgstr "C Na: Oya"
+
+#, fuzzy
+#~ msgid "deprecated use of label at end of compound statement"
+#~ msgstr "Bitemewe. Gukoresha Bya Akarango ku Impera Bya Inyandiko"
+
+#, fuzzy
+#~ msgid "ISO C89 forbids mixed declarations and code"
+#~ msgstr "Bivanze Na ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "ISO C forbids label declarations"
+#~ msgstr "C Akarango"
+
+#, fuzzy
+#~ msgid "braced-group within expression allowed only inside a function"
+#~ msgstr "Itsinda muri imvugo Mo Imbere a Umumaro"
+
+#, fuzzy
+#~ msgid "empty body in an else-statement"
+#~ msgstr "ubusa Umubiri in Ikindi Inyandiko"
+
+#, fuzzy
+#~ msgid "ISO C forbids `goto *expr;'"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "ISO C forbids forward parameter declarations"
+#~ msgstr "C Imbere"
+
+#, fuzzy
+#~ msgid "ISO C requires a named argument before `...'"
+#~ msgstr "C a Mbere"
+
+#, fuzzy
+#~ msgid "`...' in old-style identifier list"
+#~ msgstr "`...'in ki/ bishaje IMISUSIRE Ikiranga Urutonde"
+
+#, fuzzy
+#~ msgid "parse error; also virtual memory exhausted"
+#~ msgstr "Ikosa Kitaboneka Ububiko"
+
+#, fuzzy
+#~ msgid "parse error"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "parser stack overflow"
+#~ msgstr "Byarenze urugero"
+
+#, fuzzy
+#~ msgid "%s at end of input"
+#~ msgstr "%sku Impera Bya Iyinjiza"
+
+#, fuzzy
+#~ msgid "%s before %s'%c'"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before %s'\\x%x'"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before string constant"
+#~ msgstr "%sMbere Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "%s before numeric constant"
+#~ msgstr "%sMbere Bikurikije umubare"
+
+#, fuzzy
+#~ msgid "%s before \"%s\""
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before '%s' token"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "traditional C rejects string concatenation"
+#~ msgstr "C Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "syntax error at '%s' token"
+#~ msgstr "Ikosa ku"
+
+#, fuzzy
+#~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
+#~ msgstr "#Ipaki Ipaki N"
+
+#, fuzzy
+#~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
+#~ msgstr "#Ipaki Ipaki N"
+
+#, fuzzy
+#~ msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+#~ msgstr "#Ipaki ID N ni OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+#~ msgstr "#Ipaki ID N ni OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "missing '(' after '#pragma pack' - ignored"
+#~ msgstr "Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "malformed '#pragma pack(push[, id], <n>)' - ignored"
+#~ msgstr "Ipaki ID N"
+
+#, fuzzy
+#~ msgid "malformed '#pragma pack(pop[, id])' - ignored"
+#~ msgstr "Ipaki ID"
+
+#, fuzzy
+#~ msgid "unknown action '%s' for '#pragma pack' - ignored"
+#~ msgstr "Kitazwi Igikorwa kugirango"
+
+#, fuzzy
+#~ msgid "junk at end of '#pragma pack'"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "alignment must be a small power of two, not %d"
+#~ msgstr "Itunganya a Gitoya UMWIKUBE Bya OYA"
+
+#, fuzzy
+#~ msgid "applying #pragma weak `%s' after first use results in unspecified behavior"
+#~ msgstr "Nyuma Itangira Gukoresha Ibisubizo ku in imyitwarire"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma weak"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma redefine_extname"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "#pragma redefine_extname conflicts with declaration"
+#~ msgstr "#Na:"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma extern_prefix"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "asm declaration conflicts with previous rename"
+#~ msgstr "Na: Ibanjirije Guhindura izina"
+
+#, fuzzy
+#~ msgid "break statement not within loop or switch"
+#~ msgstr "itandukanya Inyandiko OYA muri Cyangwa Hindura"
+
+#, fuzzy
+#~ msgid "continue statement not within a loop"
+#~ msgstr "urifuzagukomeza Inyandiko OYA muri a"
+
+#, fuzzy
+#~ msgid "destructor needed for `%#D'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "where case label appears here"
+#~ msgstr "Akarango"
+
+#, fuzzy
+#~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)"
+#~ msgstr "(Bya Ibanjirije in Ingano:"
+
+#, fuzzy
+#~ msgid "%s qualifier ignored on asm"
+#~ msgstr "%sku"
+
+#, fuzzy
+#~ msgid "`%s' has an incomplete type"
+#~ msgstr "`%s'Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of void expression"
+#~ msgstr "Sibyo Gukoresha Bya imvugo"
+
+#, fuzzy
+#~ msgid "invalid use of flexible array member"
+#~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "invalid use of array with unspecified bounds"
+#~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe Na:"
+
+#, fuzzy
+#~ msgid "invalid use of undefined type `%s %s'"
+#~ msgstr "Sibyo Gukoresha Bya kidasobanuye Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of incomplete typedef `%s'"
+#~ msgstr "Sibyo Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "function types not truly compatible in ISO C"
+#~ msgstr "Umumaro OYA in C"
+
+#, fuzzy
+#~ msgid "types are not quite compatible"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "arithmetic on pointer to an incomplete type"
+#~ msgstr "ku Mweretsi Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "%s has no member named `%s'"
+#~ msgstr "%sOya"
+
+#, fuzzy
+#~ msgid "request for member `%s' in something not a structure or union"
+#~ msgstr "Kubaza... kugirango in OYA a Imiterere Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "dereferencing pointer to incomplete type"
+#~ msgstr "Mweretsi Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "dereferencing `void *' pointer"
+#~ msgstr "Mweretsi"
+
+#, fuzzy
+#~ msgid "invalid type argument of `%s'"
+#~ msgstr "Sibyo Ubwoko Bya"
+
+#, fuzzy
+#~ msgid "subscript missing in array reference"
+#~ msgstr "Inyandiko nyesi Ibuze in Imbonerahamwe Indango"
+
+#, fuzzy
+#~ msgid "array subscript has type `char'"
+#~ msgstr "Imbonerahamwe Inyandiko nyesi Ubwoko"
+
+#, fuzzy
+#~ msgid "array subscript is not an integer"
+#~ msgstr "Imbonerahamwe Inyandiko nyesi ni OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "ISO C forbids subscripting `register' array"
+#~ msgstr "C Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "ISO C90 forbids subscripting non-lvalue array"
+#~ msgstr "Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "subscript has type `char'"
+#~ msgstr "Inyandiko nyesi Ubwoko"
+
+#, fuzzy
+#~ msgid "subscripted value is neither array nor pointer"
+#~ msgstr "Agaciro ni Imbonerahamwe Mweretsi"
+
+#, fuzzy
+#~ msgid "`%s' undeclared here (not in a function)"
+#~ msgstr "`%s'OYA in a Umumaro"
+
+#, fuzzy
+#~ msgid "`%s' undeclared (first use in this function)"
+#~ msgstr "`%s'Itangira Gukoresha in iyi Umumaro"
+
+#, fuzzy
+#~ msgid "(Each undeclared identifier is reported only once"
+#~ msgstr "(Ikiranga ni Rimwe"
+
+#, fuzzy
+#~ msgid "for each function it appears in.)"
+#~ msgstr "kugirango Umumaro in"
+
+#, fuzzy
+#~ msgid "local declaration of `%s' hides instance variable"
+#~ msgstr "Bya Urugero IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "called object is not a function"
+#~ msgstr "Igikoresho ni OYA a Umumaro"
+
+#, fuzzy
+#~ msgid "too many arguments to function"
+#~ msgstr "ingingo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "type of formal parameter %d is incomplete"
+#~ msgstr "Ubwoko Bya ni"
+
+#, fuzzy
+#~ msgid "%s as integer rather than floating due to prototype"
+#~ msgstr "%sNka Umubare wuzuye Bihindagurika Kuri"
+
+#, fuzzy
+#~ msgid "%s as integer rather than complex due to prototype"
+#~ msgstr "%sNka Umubare wuzuye ITSINDA RY'IMIBARE C Kuri"
+
+#, fuzzy
+#~ msgid "%s as complex rather than floating due to prototype"
+#~ msgstr "%sNka ITSINDA RY'IMIBARE C Bihindagurika Kuri"
+
+#, fuzzy
+#~ msgid "%s as floating rather than integer due to prototype"
+#~ msgstr "%sNka Bihindagurika Umubare wuzuye Kuri"
+
+#, fuzzy
+#~ msgid "%s as complex rather than integer due to prototype"
+#~ msgstr "%sNka ITSINDA RY'IMIBARE C Umubare wuzuye Kuri"
+
+#, fuzzy
+#~ msgid "%s as floating rather than complex due to prototype"
+#~ msgstr "%sNka Bihindagurika ITSINDA RY'IMIBARE C Kuri"
+
+#, fuzzy
+#~ msgid "%s as `float' rather than `double' due to prototype"
+#~ msgstr "%sNka Kuri"
+
+#, fuzzy
+#~ msgid "%s with different width due to prototype"
+#~ msgstr "%sNa: Ubugari Kuri"
+
+#, fuzzy
+#~ msgid "%s as unsigned due to prototype"
+#~ msgstr "%sNka Bitashizweho umukono Kuri"
+
+#, fuzzy
+#~ msgid "%s as signed due to prototype"
+#~ msgstr "%sNka Kuri"
+
+#, fuzzy
+#~ msgid "too few arguments to function"
+#~ msgstr "ingingo Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "suggest parentheses around + or - inside shift"
+#~ msgstr "Cyangwa Mo Imbere Gusunika"
+
+#, fuzzy
+#~ msgid "suggest parentheses around && within ||"
+#~ msgstr "muri"
+
+#, fuzzy
+#~ msgid "suggest parentheses around arithmetic in operand of |"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "suggest parentheses around comparison in operand of |"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "suggest parentheses around arithmetic in operand of ^"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "suggest parentheses around comparison in operand of ^"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "suggest parentheses around + or - in operand of &"
+#~ msgstr "Cyangwa in Bya"
+
+#, fuzzy
+#~ msgid "suggest parentheses around comparison in operand of &"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+#~ msgstr "nka OYA Bijyanye n'imibare Igisobanuro"
+
+#, fuzzy
+#~ msgid "division by zero"
+#~ msgstr "Kugabanya na zeru"
+
+#, fuzzy
+#~ msgid "right shift count is negative"
+#~ msgstr "Iburyo: Gusunika IBARA ni"
+
+#, fuzzy
+#~ msgid "right shift count >= width of type"
+#~ msgstr "Iburyo: Gusunika IBARA Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "left shift count is negative"
+#~ msgstr "Ibumoso: Gusunika IBARA ni"
+
+#, fuzzy
+#~ msgid "left shift count >= width of type"
+#~ msgstr "Ibumoso: Gusunika IBARA Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "shift count is negative"
+#~ msgstr "Gusunika IBARA ni"
+
+#, fuzzy
+#~ msgid "shift count >= width of type"
+#~ msgstr "Gusunika IBARA Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "comparing floating point with == or != is unsafe"
+#~ msgstr "Bihindagurika Akadomo Na: Cyangwa ni"
+
+#, fuzzy
+#~ msgid "ISO C forbids comparison of `void *' with function pointer"
+#~ msgstr "C Bya Na: Umumaro Mweretsi"
+
+#, fuzzy
+#~ msgid "comparison of distinct pointer types lacks a cast"
+#~ msgstr "Bya Mweretsi a"
+
+#, fuzzy
+#~ msgid "comparison between pointer and integer"
+#~ msgstr "hagati Mweretsi Na Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "ISO C forbids ordered comparisons of pointers to functions"
+#~ msgstr "C Bya Kuri Imimaro"
+
+#, fuzzy
+#~ msgid "comparison of complete and incomplete pointers"
+#~ msgstr "Bya Byuzuye Na"
+
+#, fuzzy
+#~ msgid "ordered comparison of pointer with integer zero"
+#~ msgstr "Bya Mweretsi Na: Umubare wuzuye Zeru"
+
+#, fuzzy
+#~ msgid "unordered comparison on non-floating point argument"
+#~ msgstr "ku Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "comparison between signed and unsigned"
+#~ msgstr "hagati Na Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "comparison of promoted ~unsigned with constant"
+#~ msgstr "Bya Bitashizweho umukono Na:"
+
+#, fuzzy
+#~ msgid "comparison of promoted ~unsigned with unsigned"
+#~ msgstr "Bya Bitashizweho umukono Na: Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "pointer of type `void *' used in subtraction"
+#~ msgstr "Mweretsi Bya Ubwoko in Gukuramo"
+
+#, fuzzy
+#~ msgid "pointer to a function used in subtraction"
+#~ msgstr "Mweretsi Kuri a Umumaro in Gukuramo"
+
+#, fuzzy
+#~ msgid "wrong type argument to unary plus"
+#~ msgstr "Ubwoko Kuri Guteranya"
+
+#, fuzzy
+#~ msgid "wrong type argument to unary minus"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "ISO C does not support `~' for complex conjugation"
+#~ msgstr "C OYA Gushigikira kugirango ITSINDA RY'IMIBARE C"
+
+#, fuzzy
+#~ msgid "wrong type argument to bit-complement"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "wrong type argument to abs"
+#~ msgstr "Ubwoko Kuri ABS"
+
+#, fuzzy
+#~ msgid "wrong type argument to conjugation"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "wrong type argument to unary exclamation mark"
+#~ msgstr "Ubwoko Kuri Ikimenyetso"
+
+#, fuzzy
+#~ msgid "ISO C does not support `++' and `--' on complex types"
+#~ msgstr "C OYA Gushigikira Na ku ITSINDA RY'IMIBARE C"
+
+#, fuzzy
+#~ msgid "wrong type argument to increment"
+#~ msgstr "Ubwoko Kuri Iyongeragaciro"
+
+#, fuzzy
+#~ msgid "wrong type argument to decrement"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "increment of pointer to unknown structure"
+#~ msgstr "Iyongeragaciro Bya Mweretsi Kuri Kitazwi Imiterere"
+
+#, fuzzy
+#~ msgid "decrement of pointer to unknown structure"
+#~ msgstr "Bya Mweretsi Kuri Kitazwi Imiterere"
+
+#, fuzzy
+#~ msgid "ISO C forbids the address of a cast expression"
+#~ msgstr "C i Aderesi Bya a imvugo"
+
+#, fuzzy
+#~ msgid "invalid lvalue in unary `&'"
+#~ msgstr "Sibyo in"
+
+#, fuzzy
+#~ msgid "attempt to take address of bit-field structure member `%s'"
+#~ msgstr "Kuri Aderesi Bya Umwanya Imiterere"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#, fuzzy
+#~ msgid "ISO C forbids use of conditional expressions as lvalues"
+#~ msgstr "C Gukoresha Bya Nka"
+
+#, fuzzy
+#~ msgid "ISO C forbids use of compound expressions as lvalues"
+#~ msgstr "C Gukoresha Bya Nka"
+
+#, fuzzy
+#~ msgid "ISO C forbids use of cast expressions as lvalues"
+#~ msgstr "C Gukoresha Bya Nka"
+
+#, fuzzy
+#~ msgid "%s of read-only member `%s'"
+#~ msgstr "%sBya Gusoma"
+
+#, fuzzy
+#~ msgid "%s of read-only variable `%s'"
+#~ msgstr "%sBya Gusoma IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "%s of read-only location"
+#~ msgstr "%sBya Gusoma Ahantu"
+
+#, fuzzy
+#~ msgid "cannot take address of bit-field `%s'"
+#~ msgstr "Aderesi Bya Umwanya"
+
+#, fuzzy
+#~ msgid "global register variable `%s' used in nested function"
+#~ msgstr "Kwiyandikisha IMPINDURAGACIRO in Umumaro"
+
+#, fuzzy
+#~ msgid "register variable `%s' used in nested function"
+#~ msgstr "Kwiyandikisha IMPINDURAGACIRO in Umumaro"
+
+#, fuzzy
+#~ msgid "address of global register variable `%s' requested"
+#~ msgstr "Aderesi Bya Kwiyandikisha IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "cannot put object with volatile field into register"
+#~ msgstr "Gushyira Igikoresho Na: Umwanya Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "address of register variable `%s' requested"
+#~ msgstr "Aderesi Bya Kwiyandikisha IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "signed and unsigned type in conditional expression"
+#~ msgstr "Na Bitashizweho umukono Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "ISO C forbids conditional expr with only one void side"
+#~ msgstr "C Na:"
+
+#, fuzzy
+#~ msgid "ISO C forbids conditional expr between `void *' and function pointer"
+#~ msgstr "C hagati Na Umumaro Mweretsi"
+
+#, fuzzy
+#~ msgid "pointer type mismatch in conditional expression"
+#~ msgstr "Mweretsi Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "pointer/integer type mismatch in conditional expression"
+#~ msgstr "Mweretsi Umubare wuzuye Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "type mismatch in conditional expression"
+#~ msgstr "Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "left-hand operand of comma expression has no effect"
+#~ msgstr "Ibumoso: Bya Akitso imvugo Oya INGARUKA"
+
+#, fuzzy
+#~ msgid "cast specifies array type"
+#~ msgstr "Imbonerahamwe Ubwoko"
+
+#, fuzzy
+#~ msgid "cast specifies function type"
+#~ msgstr "Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids casting nonscalar to the same type"
+#~ msgstr "C Kuri i Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids casts to union type"
+#~ msgstr "C Kuri Ihuza Ubwoko"
+
+#, fuzzy
+#~ msgid "cast to union type from type not present in union"
+#~ msgstr "Kuri Ihuza Ubwoko Bivuye Ubwoko OYA in Ihuza"
+
+#, fuzzy
+#~ msgid "cast adds new qualifiers to function type"
+#~ msgstr "Gishya Kuri Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "cast discards qualifiers from pointer target type"
+#~ msgstr "Bivuye Mweretsi Intego Ubwoko"
+
+#, fuzzy
+#~ msgid "cast increases required alignment of target type"
+#~ msgstr "Bya ngombwa Itunganya Bya Intego Ubwoko"
+
+#, fuzzy
+#~ msgid "cast from pointer to integer of different size"
+#~ msgstr "Bivuye Mweretsi Kuri Umubare wuzuye Bya Ingano"
+
+#, fuzzy
+#~ msgid "cast does not match function type"
+#~ msgstr "OYA BIHUYE Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "cast to pointer from integer of different size"
+#~ msgstr "Kuri Mweretsi Bivuye Umubare wuzuye Bya Ingano"
+
+#, fuzzy
+#~ msgid "type-punning to incomplete type might break strict-aliasing rules"
+#~ msgstr "Ubwoko Kuri Ubwoko itandukanya"
+
+#, fuzzy
+#~ msgid "dereferencing type-punned pointer will break strict-aliasing rules"
+#~ msgstr "Ubwoko Mweretsi itandukanya"
+
+#, fuzzy
+#~ msgid "invalid lvalue in assignment"
+#~ msgstr "Sibyo in Igenera"
+
+#, fuzzy
+#~ msgid "assignment"
+#~ msgstr "Igenera"
+
+#, fuzzy
+#~ msgid "cannot pass rvalue to reference parameter"
+#~ msgstr "Kuri Indango"
+
+#, fuzzy
+#~ msgid "%s makes qualified function pointer from unqualified"
+#~ msgstr "%sUmumaro Mweretsi Bivuye"
+
+#, fuzzy
+#~ msgid "%s discards qualifiers from pointer target type"
+#~ msgstr "%sBivuye Mweretsi Intego Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C prohibits argument conversion to union type"
+#~ msgstr "C Ihindurangero Kuri Ihuza Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C forbids %s between function pointer and `void *'"
+#~ msgstr "C hagati Umumaro Mweretsi Na"
+
+#, fuzzy
+#~ msgid "pointer targets in %s differ in signedness"
+#~ msgstr "Mweretsi in in"
+
+#, fuzzy
+#~ msgid "%s from incompatible pointer type"
+#~ msgstr "%sBivuye Mweretsi Ubwoko"
+
+#, fuzzy
+#~ msgid "%s makes pointer from integer without a cast"
+#~ msgstr "%sMweretsi Bivuye Umubare wuzuye a"
+
+#, fuzzy
+#~ msgid "%s makes integer from pointer without a cast"
+#~ msgstr "%sUmubare wuzuye Bivuye Mweretsi a"
+
+#, fuzzy
+#~ msgid "incompatible type for argument %d of `%s'"
+#~ msgstr "Ubwoko kugirango Bya"
+
+#, fuzzy
+#~ msgid "incompatible type for argument %d of indirect function call"
+#~ msgstr "Ubwoko kugirango Bya BUZIGUYE Umumaro"
+
+#, fuzzy
+#~ msgid "incompatible types in %s"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "passing arg of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "passing arg of pointer to function"
+#~ msgstr "Bya Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "passing arg %d of `%s'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "passing arg %d of pointer to function"
+#~ msgstr "Bya Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "initializer for static variable is not constant"
+#~ msgstr "kugirango IMPINDURAGACIRO ni OYA"
+
+#, fuzzy
+#~ msgid "initializer for static variable uses complicated arithmetic"
+#~ msgstr "kugirango IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "aggregate initializer is not constant"
+#~ msgstr "ni OYA"
+
+#, fuzzy
+#~ msgid "traditional C rejects automatic aggregate initialization"
+#~ msgstr "C Byikoresha"
+
+#, fuzzy
+#~ msgid "(near initialization for `%s')"
+#~ msgstr "(kugirango"
+
+#, fuzzy
+#~ msgid "char-array initialized from wide string"
+#~ msgstr "INYUGUTI Imbonerahamwe Bivuye Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "int-array initialized from non-wide string"
+#~ msgstr "INT Imbonerahamwe Bivuye Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "initializer-string for array of chars is too long"
+#~ msgstr "Ikurikiranyanyuguti kugirango Imbonerahamwe Bya ni"
+
+#, fuzzy
+#~ msgid "array initialized from non-constant array expression"
+#~ msgstr "Imbonerahamwe Bivuye Imbonerahamwe imvugo"
+
+#, fuzzy
+#~ msgid "initializer element is not constant"
+#~ msgstr "Ikigize: ni OYA"
+
+#, fuzzy
+#~ msgid "initializer element is not computable at load time"
+#~ msgstr "Ikigize: ni OYA ku Ibirimo Igihe"
+
+#, fuzzy
+#~ msgid "invalid initializer"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "extra brace group at end of initializer"
+#~ msgstr "Birenga Itsinda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "missing braces around initializer"
+#~ msgstr "Ibuze Ingirwadusodeko"
+
+#, fuzzy
+#~ msgid "braces around scalar initializer"
+#~ msgstr "Ingirwadusodeko"
+
+#, fuzzy
+#~ msgid "initialization of flexible array member in a nested context"
+#~ msgstr "Bya Imbonerahamwe in a Imvugiro"
+
+#, fuzzy
+#~ msgid "initialization of a flexible array member"
+#~ msgstr "Bya a Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "missing initializer"
+#~ msgstr "Ibuze"
+
+#, fuzzy
+#~ msgid "empty scalar initializer"
+#~ msgstr "ubusa"
+
+#, fuzzy
+#~ msgid "extra elements in scalar initializer"
+#~ msgstr "Birenga Ibintu in"
+
+#, fuzzy
+#~ msgid "initialization designators may not nest"
+#~ msgstr "Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "array index in non-array initializer"
+#~ msgstr "Imbonerahamwe Umubarendanga in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "field name not in record or union initializer"
+#~ msgstr "Umwanya Izina: OYA in Icyabitswe Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "nonconstant array index in initializer"
+#~ msgstr "Imbonerahamwe Umubarendanga in"
+
+#, fuzzy
+#~ msgid "array index in initializer exceeds array bounds"
+#~ msgstr "Imbonerahamwe Umubarendanga in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "empty index range in initializer"
+#~ msgstr "ubusa Umubarendanga Urutonde in"
+
+#, fuzzy
+#~ msgid "array index range in initializer exceeds array bounds"
+#~ msgstr "Imbonerahamwe Umubarendanga Urutonde in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "unknown field `%s' specified in initializer"
+#~ msgstr "Kitazwi Umwanya in"
+
+#, fuzzy
+#~ msgid "initialized field with side-effects overwritten"
+#~ msgstr "Umwanya Na: Ingaruka"
+
+#, fuzzy
+#~ msgid "excess elements in char array initializer"
+#~ msgstr "Ibintu in INYUGUTI Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "excess elements in struct initializer"
+#~ msgstr "Ibintu in"
+
+#, fuzzy
+#~ msgid "non-static initialization of a flexible array member"
+#~ msgstr "Bya a Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "excess elements in union initializer"
+#~ msgstr "Ibintu in Ihuza"
+
+#, fuzzy
+#~ msgid "traditional C rejects initialization of unions"
+#~ msgstr "C Bya"
+
+#, fuzzy
+#~ msgid "excess elements in array initializer"
+#~ msgstr "Ibintu in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "excess elements in vector initializer"
+#~ msgstr "Ibintu in"
+
+#, fuzzy
+#~ msgid "excess elements in scalar initializer"
+#~ msgstr "Ibintu in"
+
+#, fuzzy
+#~ msgid "asm template is not a string constant"
+#~ msgstr "Inyandikorugero ni OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "invalid lvalue in asm statement"
+#~ msgstr "Sibyo in Inyandiko"
+
+#, fuzzy
+#~ msgid "modification by `asm'"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "function declared `noreturn' has a `return' statement"
+#~ msgstr "Umumaro a Inyandiko"
+
+#, fuzzy
+#~ msgid "`return' with no value, in function returning non-void"
+#~ msgstr "`Na: Oya Agaciro in Umumaro"
+
+#, fuzzy
+#~ msgid "`return' with a value, in function returning void"
+#~ msgstr "`Na: a Agaciro in Umumaro"
+
+#, fuzzy
+#~ msgid "return"
+#~ msgstr "Garuka"
+
+#, fuzzy
+#~ msgid "function returns address of local variable"
+#~ msgstr "Umumaro Aderesi Bya IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "switch quantity not an integer"
+#~ msgstr "Hindura Ingano OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "`long' switch expression not converted to `int' in ISO C"
+#~ msgstr "`Hindura imvugo OYA Kuri in C"
+
+#, fuzzy
+#~ msgid "case label not within a switch statement"
+#~ msgstr "Akarango OYA muri a Hindura Inyandiko"
+
+#, fuzzy
+#~ msgid "`default' label not within a switch statement"
+#~ msgstr "`Akarango OYA muri a Hindura Inyandiko"
+
+#, fuzzy
+#~ msgid "inlining failed in call to `%s'"
+#~ msgstr "Byanze in Kuri"
+
+#, fuzzy
+#~ msgid "called from here"
+#~ msgstr "Bivuye"
+
+#, fuzzy
+#~ msgid "can't inline call to `%s'"
+#~ msgstr "Mumurongo Kuri"
+
+#, fuzzy
+#~ msgid "function call has aggregate value"
+#~ msgstr "Umumaro Agaciro"
+
+#, fuzzy
+#~ msgid "Size of loop %d should be %d, not %d."
+#~ msgstr "Bya OYA"
+
+#, fuzzy
+#~ msgid "Bb %d do not belong to loop %d."
+#~ msgstr "OYA Kuri"
+
+#, fuzzy
+#~ msgid "Loop %d's header does not have exactly 2 entries."
+#~ msgstr "S Umutwempangano OYA 2. Ibyinjijwe"
+
+#, fuzzy
+#~ msgid "Loop %d's latch does not have exactly 1 successor."
+#~ msgstr "S OYA 1."
+
+#, fuzzy
+#~ msgid "Loop %d's latch does not have header as successor."
+#~ msgstr "S OYA Umutwempangano Nka"
+
+#, fuzzy
+#~ msgid "Loop %d's latch does not belong directly to it."
+#~ msgstr "S OYA Kuri"
+
+#, fuzzy
+#~ msgid "Loop %d's header does not belong directly to it."
+#~ msgstr "S Umutwempangano OYA Kuri"
+
+#, fuzzy
+#~ msgid "bb %d on wrong place"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "prev_bb of %d should be %d, not %d"
+#~ msgstr "Bya OYA"
+
+#, fuzzy
+#~ msgid "end insn %d for block %d not found in the insn stream"
+#~ msgstr "Impera kugirango Funga OYA Byabonetse in i"
+
+#, fuzzy
+#~ msgid "insn %d is in multiple basic blocks (%d and %d)"
+#~ msgstr "ni in Igikubo BASIC Na"
+
+#, fuzzy
+#~ msgid "head insn %d for block %d not found in the insn stream"
+#~ msgstr "kugirango Funga OYA Byabonetse in i"
+
+#, fuzzy
+#~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
+#~ msgstr "OYA BIHUYE"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Wrong count of block %i %i"
+#~ msgstr "IBARA Bya Funga"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Wrong frequency of block %i %i"
+#~ msgstr "Ubwisubire Bya Funga"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+#~ msgstr "Imishobokere Bya"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+#~ msgstr "IBARA Bya"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "wrong insn in the fallthru edge"
+#~ msgstr "in i"
+
+#, fuzzy
+#~ msgid "verify_flow_info: Basic block %d succ edge is corrupted"
+#~ msgstr "Funga ni"
+
+#, fuzzy
+#~ msgid "Missing REG_EH_REGION note in the end of bb %i"
+#~ msgstr "Impugukirwa in i Impera Bya"
+
+#, fuzzy
+#~ msgid "Too many outgoing branch edges from bb %i"
+#~ msgstr "Bivuye"
+
+#, fuzzy
+#~ msgid "Fallthru edge after unconditional jump %i"
+#~ msgstr "Nyuma Simbuka"
+
+#, fuzzy
+#~ msgid "Wrong amount of branch edges after unconditional jump %i"
+#~ msgstr "Igiteranyo Bya Nyuma Simbuka"
+
+#, fuzzy
+#~ msgid "Wrong amount of branch edges after conditional jump %i"
+#~ msgstr "Igiteranyo Bya Nyuma Simbuka"
+
+#, fuzzy
+#~ msgid "Call edges for non-call insn in bb %i"
+#~ msgstr "kugirango in"
+
+#, fuzzy
+#~ msgid "Abnormal edges for no purpose in bb %i"
+#~ msgstr "kugirango Oya Intego in"
+
+#, fuzzy
+#~ msgid "missing barrier after block %i"
+#~ msgstr "Ibuze Nyuma Funga"
+
+#, fuzzy
+#~ msgid "basic block %d pred edge is corrupted"
+#~ msgstr "BASIC Funga ni"
+
+#, fuzzy
+#~ msgid "insn %d inside basic block %d but block_for_insn is NULL"
+#~ msgstr "Mo Imbere BASIC Funga ni"
+
+#, fuzzy
+#~ msgid "insn %d inside basic block %d but block_for_insn is %i"
+#~ msgstr "Mo Imbere BASIC Funga ni"
+
+#, fuzzy
+#~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+#~ msgstr "ni Ibuze kugirango Funga"
+
+#, fuzzy
+#~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
+#~ msgstr "in Hagati Bya BASIC Funga"
+
+#, fuzzy
+#~ msgid "in basic block %d:"
+#~ msgstr "in BASIC Funga"
+
+#, fuzzy
+#~ msgid "flow control insn inside a basic block"
+#~ msgstr "Igenzura Mo Imbere a BASIC Funga"
+
+#, fuzzy
+#~ msgid "basic block %i edge lists are corrupted"
+#~ msgstr "BASIC Funga Intonde"
+
+#, fuzzy
+#~ msgid "basic blocks not numbered consecutively"
+#~ msgstr "BASIC OYA Iriho Imibare"
+
+#, fuzzy
+#~ msgid "insn outside basic block"
+#~ msgstr "Hanze BASIC Funga"
+
+#, fuzzy
+#~ msgid "return not followed by barrier"
+#~ msgstr "Garuka OYA ku"
+
+#, fuzzy
+#~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+#~ msgstr "Umubare Bya Ibisobanuro in"
+
+#, fuzzy
+#~ msgid "verify_flow_info failed"
+#~ msgstr "Byanze"
+
+#, fuzzy
+#~ msgid "internal error"
+#~ msgstr "Ikosa ry'imbere"
+
+#, fuzzy
+#~ msgid "no arguments"
+#~ msgstr "Oya ingingo"
+
+#, fuzzy
+#~ msgid "collect2 version %s"
+#~ msgstr "Verisiyo"
+
+#, fuzzy
+#~ msgid "%d constructor(s) found\n"
+#~ msgstr "%dS"
+
+#, fuzzy
+#~ msgid "%d destructor(s)  found\n"
+#~ msgstr "%dS"
+
+#, fuzzy
+#~ msgid "%d frame table(s) found\n"
+#~ msgstr "%dIkadiri imbonerahamwe# S"
+
+#, fuzzy
+#~ msgid "%s terminated with signal %d [%s]%s"
+#~ msgstr "%sNa:"
+
+#, fuzzy
+#~ msgid "%s returned %d exit status"
+#~ msgstr "%sGusohoka Imimerere"
+
+#, fuzzy
+#~ msgid "[cannot find %s]"
+#~ msgstr "[Gushaka"
+
+#, fuzzy
+#~ msgid "cannot find `%s'"
+#~ msgstr "Gushaka"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "write_c_file - output name is %s, prefix is %s\n"
+#~ msgstr "Ibisohoka Izina: ni Imbanziriza ni"
+
+#, fuzzy
+#~ msgid "cannot find `nm'"
+#~ msgstr "Gushaka"
+
+#, fuzzy
+#~ msgid "dup2 %d 1"
+#~ msgstr "1."
+
+# svx/source\svdraw\svdstr.src:STR_EditShut.text
+#, fuzzy
+#~ msgid "close %d"
+#~ msgstr "Gufunga"
+
+#, fuzzy
+#~ msgid "init function found in object %s"
+#~ msgstr "Umumaro Byabonetse in Igikoresho"
+
+#, fuzzy
+#~ msgid "fini function found in object %s"
+#~ msgstr "Umumaro Byabonetse in Igikoresho"
+
+#, fuzzy
+#~ msgid "unable to open file '%s'"
+#~ msgstr "Kuri Gufungura IDOSIYE"
+
+#, fuzzy
+#~ msgid "unable to stat file '%s'"
+#~ msgstr "Kuri IDOSIYE"
+
+#, fuzzy
+#~ msgid "unable to mmap file '%s'"
+#~ msgstr "Kuri IDOSIYE"
+
+#, fuzzy
+#~ msgid "not found\n"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "dynamic dependency %s not found"
+#~ msgstr "OYA Byabonetse"
+
+#, fuzzy
+#~ msgid "bad magic number in file '%s'"
+#~ msgstr "Umubare in IDOSIYE"
+
+#, fuzzy
+#~ msgid "cannot find `ldd'"
+#~ msgstr "Gushaka"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "ldd output with constructors/destructors.\n"
+#~ msgstr "Ibisohoka Na:"
+
+#, fuzzy
+#~ msgid "unable to open dynamic dependency '%s'"
+#~ msgstr "Kuri Gufungura"
+
+#, fuzzy
+#~ msgid "%s: not a COFF file"
+#~ msgstr "%s:OYA a IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: cannot open as COFF file"
+#~ msgstr "%s:Gufungura Nka IDOSIYE"
+
+#, fuzzy
+#~ msgid "library lib%s not found"
+#~ msgstr "Isomero OYA Byabonetse"
+
+# sfx2/source\appl\minbox.src:RID_MAIL_INBOX.BTN_MAILINBOX_OPEN.text
+#, fuzzy
+#~ msgid "open %s"
+#~ msgstr "Gufungura..."
+
+#, fuzzy
+#~ msgid "incompatibilities between object file & expected values"
+#~ msgstr "hagati Igikoresho IDOSIYE Ikitezwe: Uduciro"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
+#~ msgstr "IKIMENYETSO imbonerahamwe# Nta- boneza"
+
+#, fuzzy
+#~ msgid "string section missing"
+#~ msgstr "Ikurikiranyanyuguti Icyiciro Ibuze"
+
+#, fuzzy
+#~ msgid "section pointer missing"
+#~ msgstr "Icyiciro Mweretsi Ibuze"
+
+#, fuzzy
+#~ msgid "no symbol table found"
+#~ msgstr "Oya IKIMENYETSO imbonerahamwe# Byabonetse"
+
+#, fuzzy
+#~ msgid "no cmd_strings found"
+#~ msgstr "Oya Byabonetse"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Updating header and load commands.\n"
+#~ "\n"
+#~ msgstr "Umutwempangano Na Ibirimo Amabwiriza"
+
+#, fuzzy
+#~ msgid "load command map, %d cmds, new size %ld.\n"
+#~ msgstr "Ibirimo Komandi: Gishya Ingano"
+
+#, fuzzy
+#~ msgid ""
+#~ "writing load commands.\n"
+#~ "\n"
+#~ msgstr "Ibirimo Amabwiriza"
+
+# svx/source\svdraw\svdstr.src:STR_EditShut.text
+#, fuzzy
+#~ msgid "close %s"
+#~ msgstr "Gufunga"
+
+#, fuzzy
+#~ msgid "could not convert 0x%l.8x into a region"
+#~ msgstr "OYA GUHINDURA a"
+
+#, fuzzy
+#~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
+#~ msgstr "%sUmumaro Nta- boneza"
+
+#, fuzzy
+#~ msgid "bad magic number"
+#~ msgstr "Umubare"
+
+#, fuzzy
+#~ msgid "bad header version"
+#~ msgstr "Umutwempangano Verisiyo"
+
+#, fuzzy
+#~ msgid "bad raw header version"
+#~ msgstr "Umutwempangano Verisiyo"
+
+#, fuzzy
+#~ msgid "raw header buffer too small"
+#~ msgstr "Umutwempangano Gitoya"
+
+#, fuzzy
+#~ msgid "old raw header file"
+#~ msgstr "ki/ bishaje Umutwempangano IDOSIYE"
+
+#, fuzzy
+#~ msgid "unsupported version"
+#~ msgstr "Verisiyo"
+
+#, fuzzy
+#~ msgid "unknown {de,en}code_mach_o_hdr return value %d"
+#~ msgstr "Kitazwi Garuka Agaciro"
+
+#, fuzzy
+#~ msgid "lseek %s 0"
+#~ msgstr "0"
+
+# svx/inc\globlmn.hrc:ITEM_FILE_MAIL_INBOX.text
+#, fuzzy
+#~ msgid "read %s"
+#~ msgstr "Gusoma"
+
+#, fuzzy
+#~ msgid "read %ld bytes, expected %ld, from %s"
+#~ msgstr "Gusoma Bayite Ikitezwe: Bivuye"
+
+# #-#-#-#-#  officecfg.pot (PACKAGE VERSION)  #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.HTML.Export.Browser..3.text
+# #-#-#-#-#  officecfg.pot (PACKAGE VERSION)  #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....FormLetter.MailingOutput.Format..8.text
+#, fuzzy
+#~ msgid "write %s"
+#~ msgstr "Kwandika"
+
+#, fuzzy
+#~ msgid "wrote %ld bytes, expected %ld, to %s"
+#~ msgstr "Bayite Ikitezwe: Kuri"
+
+#, fuzzy
+#~ msgid ""
+#~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ "\n"
+#~ msgstr ";;Sitatisitiki Gishya Umwanya Ibyatunganye"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n"
+#~ ";; %d successes.\n"
+#~ msgstr ";;Gishya Umwanya Ibyatunganye"
+
+#, fuzzy
+#~ msgid "cannot convert to a pointer type"
+#~ msgstr "GUHINDURA Kuri a Mweretsi Ubwoko"
+
+#, fuzzy
+#~ msgid "pointer value used where a floating point value was expected"
+#~ msgstr "Mweretsi Agaciro a Bihindagurika Akadomo Agaciro Ikitezwe:"
+
+#, fuzzy
+#~ msgid "aggregate value used where a float was expected"
+#~ msgstr "Agaciro a Kureremba Ikitezwe:"
+
+#, fuzzy
+#~ msgid "conversion to incomplete type"
+#~ msgstr "Ihindurangero Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "can't convert between vector values of different size"
+#~ msgstr "GUHINDURA hagati Uduciro Bya Ingano"
+
+#, fuzzy
+#~ msgid "aggregate value used where an integer was expected"
+#~ msgstr "Agaciro Umubare wuzuye Ikitezwe:"
+
+#, fuzzy
+#~ msgid "pointer value used where a complex was expected"
+#~ msgstr "Mweretsi Agaciro a ITSINDA RY'IMIBARE C Ikitezwe:"
+
+#, fuzzy
+#~ msgid "aggregate value used where a complex was expected"
+#~ msgstr "Agaciro a ITSINDA RY'IMIBARE C Ikitezwe:"
+
+#, fuzzy
+#~ msgid "can't convert value to a vector"
+#~ msgstr "GUHINDURA Agaciro Kuri a"
+
+#, fuzzy
+#~ msgid "ISO C++ does not permit \"%s\" in #if"
+#~ msgstr "C OYA in NIBA"
+
+#, fuzzy
+#~ msgid "invalid character '%c' in #if"
+#~ msgstr "Sibyo Inyuguti in NIBA"
+
+#, fuzzy
+#~ msgid "invalid character '\\%03o' in #if"
+#~ msgstr "Sibyo Inyuguti in NIBA"
+
+#, fuzzy
+#~ msgid "absolute file name in remap_filename"
+#~ msgstr "IDOSIYE Izina: in"
+
+#, fuzzy
+#~ msgid "ignoring nonexistent directory \"%s\"\n"
+#~ msgstr "bushyinguro"
+
+#, fuzzy
+#~ msgid "%s: Not a directory"
+#~ msgstr "%s:a bushyinguro"
+
+#, fuzzy
+#~ msgid "ignoring duplicate directory \"%s\"\n"
+#~ msgstr "Gusubiramo bushyinguro"
+
+#, fuzzy
+#~ msgid "  as it is a non-system directory that duplicates a system directory\n"
+#~ msgstr "Nka ni a Sisitemu bushyinguro a Sisitemu"
+
+#, fuzzy
+#~ msgid "#include \"...\" search starts here:\n"
+#~ msgstr "#Gushyiramo Gushaka"
+
+#, fuzzy
+#~ msgid "#include <...> search starts here:\n"
+#~ msgstr "#Gushyiramo Gushaka"
+
+#, fuzzy
+#~ msgid "End of search list.\n"
+#~ msgstr "Impera Bya Gushaka Urutonde"
+
+#, fuzzy
+#~ msgid "<built-in>"
+#~ msgstr "<in"
+
+#, fuzzy
+#~ msgid "<command line>"
+#~ msgstr "<Komandi: Umurongo"
+
+#, fuzzy
+#~ msgid "assertion missing after %s"
+#~ msgstr "Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "directory name missing after %s"
+#~ msgstr "bushyinguro Izina: Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "file name missing after %s"
+#~ msgstr "IDOSIYE Izina: Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "macro name missing after %s"
+#~ msgstr "Makoro Izina: Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "path name missing after %s"
+#~ msgstr "Inzira Izina: Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "unknown string token %s\n"
+#~ msgstr "Kitazwi Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "non-hex digit '%c' in universal-character-name"
+#~ msgstr "in Ky'isi yose Inyuguti Izina:"
+
+#, fuzzy
+#~ msgid "universal-character-name on EBCDIC target"
+#~ msgstr "Ky'isi yose Inyuguti Izina: ku Intego"
+
+#, fuzzy
+#~ msgid "universal-character-name out of range"
+#~ msgstr "Ky'isi yose Inyuguti Izina: Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "unknown escape sequence: '\\%03o'"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "escape sequence out of range for its type"
+#~ msgstr "Inyuma Bya Urutonde kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "#import is obsolete, use an #ifndef wrapper in the header file"
+#~ msgstr "#Kuzana ni Gukoresha in i Umutwempangano IDOSIYE"
+
+#, fuzzy
+#~ msgid "#pragma once is obsolete"
+#~ msgstr "#Rimwe ni"
+
+#, fuzzy
+#~ msgid "\"%s\" is not a valid option to the preprocessor"
+#~ msgstr "\"%s\"ni OYA a Byemewe Ihitamo Kuri i"
+
+#, fuzzy
+#~ msgid "too many input files"
+#~ msgstr "Iyinjiza Idosiye"
+
+#, fuzzy
+#~ msgid ";; Processing block from %d to %d, %d sets.\n"
+#~ msgstr ";;Funga Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "%s: warnings being treated as errors\n"
+#~ msgstr "%s:Iburira Nka"
+
+#, fuzzy
+#~ msgid "%s: %s: "
+#~ msgstr "%s:%s:"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid "%s "
+#~ msgstr "%s"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid " %s"
+#~ msgstr "%s"
+
+#, fuzzy
+#~ msgid "At top level:"
+#~ msgstr "Hejuru: urwego"
+
+#, fuzzy
+#~ msgid "In member function `%s':"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "In function `%s':"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "%s:%d: confused by earlier errors, bailing out\n"
+#~ msgstr "%s:%d:ku Amakosa"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please submit a full bug report,\n"
+#~ "with preprocessed source if appropriate.\n"
+#~ "See %s for instructions.\n"
+#~ msgstr "Tanga a Icyegeranyo Na: Inkomoko NIBA kugirango Amabwiriza"
+
+#, fuzzy
+#~ msgid "Internal compiler error: Error reporting routines re-entered.\n"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "in %s, at %s:%d"
+#~ msgstr "in ku"
+
+#, fuzzy
+#~ msgid "In file included from %s:%d"
+#~ msgstr "IDOSIYE Bivuye"
+
+#, fuzzy
+#~ msgid ""
+#~ ",\n"
+#~ "                 from %s:%d"
+#~ msgstr ",Bivuye"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid ":\n"
+#~ msgstr ":"
+
+#, fuzzy
+#~ msgid "`%s' is deprecated (declared at %s:%d)"
+#~ msgstr "`%s'ni Bitemewe. ku"
+
+#, fuzzy
+#~ msgid "`%s' is deprecated"
+#~ msgstr "`%s'ni Bitemewe."
+
+#, fuzzy
+#~ msgid "type is deprecated (declared at %s:%d)"
+#~ msgstr "Ubwoko ni Bitemewe. ku"
+
+#, fuzzy
+#~ msgid "type is deprecated"
+#~ msgstr "Ubwoko ni Bitemewe."
+
+#, fuzzy
+#~ msgid "dominator of %d should be %d, not %d"
+#~ msgstr "Bya OYA"
+
+#, fuzzy
+#~ msgid "DW_LOC_OP %s not implemented\n"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "internal regno botch: `%s' has regno = %d\n"
+#~ msgstr "By'imbere"
+
+#, fuzzy
+#~ msgid "support for the DWARF1 debugging format is deprecated"
+#~ msgstr "Gushigikira kugirango i Imiterere ni Bitemewe."
+
+#, fuzzy
+#~ msgid "can't get current directory"
+#~ msgstr "Kubona KIGEZWEHO bushyinguro"
+
+#, fuzzy
+#~ msgid "can't access real part of complex value in hard register"
+#~ msgstr "Bya ITSINDA RY'IMIBARE C Agaciro in Ikomeye Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "can't access imaginary part of complex value in hard register"
+#~ msgstr "NYURABWENGE Bya ITSINDA RY'IMIBARE C Agaciro in Ikomeye Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "abort in %s, at %s:%d"
+#~ msgstr "Kureka in ku"
+
+#, fuzzy
+#~ msgid "exception handling disabled, use -fexceptions to enable"
+#~ msgstr "Irengayobora(-) Yahagaritswe Gukoresha Kuri Gushoboza"
+
+#, fuzzy
+#~ msgid "argument of `__builtin_eh_return_regno' must be constant"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "__builtin_eh_return not supported on this target"
+#~ msgstr "_OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "stack limits not supported on this target"
+#~ msgstr "Imbibi OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "function using short complex types cannot be inline"
+#~ msgstr "Umumaro ikoresha ITSINDA RY'IMIBARE C Mumurongo"
+
+#, fuzzy
+#~ msgid "unsupported wide integer operation"
+#~ msgstr "Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "prior parameter's size depends on `%s'"
+#~ msgstr "Ingano ku"
+
+#, fuzzy
+#~ msgid "returned value in block_exit_expr"
+#~ msgstr "Agaciro in"
+
+#, fuzzy
+#~ msgid "cannot take the address of an unaligned member"
+#~ msgstr "i Aderesi Bya"
+
+#, fuzzy
+#~ msgid "negative insn length"
+#~ msgstr "Uburebure"
+
+#, fuzzy
+#~ msgid "could not split insn"
+#~ msgstr "OYA Gutandukanya"
+
+#, fuzzy
+#~ msgid "invalid `asm': "
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "operand number missing after %%-letter"
+#~ msgstr "Umubare Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "operand number out of range"
+#~ msgstr "Umubare Inyuma Bya Urutonde"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_INVALID.text
+#, fuzzy
+#~ msgid "invalid %%-code"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "`%%l' operand isn't a label"
+#~ msgstr "`%%l'si a Akarango"
+
+#, fuzzy
+#~ msgid "floating constant misused"
+#~ msgstr "Bihindagurika"
+
+#, fuzzy
+#~ msgid "invalid expression as operand"
+#~ msgstr "Sibyo imvugo Nka"
+
+#, fuzzy
+#~ msgid "function might be possible candidate for attribute `noreturn'"
+#~ msgstr "Umumaro kugirango Ikiranga"
+
+#, fuzzy
+#~ msgid "`noreturn' function does return"
+#~ msgstr "`Umumaro Garuka"
+
+#, fuzzy
+#~ msgid "control reaches end of non-void function"
+#~ msgstr "Igenzura Impera Bya Umumaro"
+
+#, fuzzy
+#~ msgid "Attempt to delete prologue/epilogue insn:"
+#~ msgstr "Kuri Gusiba"
+
+#, fuzzy
+#~ msgid "comparison is always %d due to width of bit-field"
+#~ msgstr "ni Buri gihe Kuri Ubugari Bya Umwanya"
+
+#, fuzzy
+#~ msgid "comparison is always %d"
+#~ msgstr "ni Buri gihe"
+
+#, fuzzy
+#~ msgid "`or' of unmatched not-equal tests is always 1"
+#~ msgstr "`Bya OYA bingana ni Buri gihe 1."
+
+#, fuzzy
+#~ msgid "`and' of mutually exclusive equal-tests is always 0"
+#~ msgstr "`Bya bingana ni Buri gihe 0"
+
+#, fuzzy
+#~ msgid "size of variable `%s' is too large"
+#~ msgstr "Ingano Bya IMPINDURAGACIRO ni Binini"
+
+#, fuzzy
+#~ msgid "impossible constraint in `asm'"
+#~ msgstr "Imbogamizi in"
+
+#, fuzzy
+#~ msgid "`%s' might be used uninitialized in this function"
+#~ msgstr "`%s'Itatangijwe in iyi Umumaro"
+
+#, fuzzy
+#~ msgid "variable `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "IMPINDURAGACIRO ku Cyangwa"
+
+#, fuzzy
+#~ msgid "argument `%s' might be clobbered by `longjmp' or `vfork'"
+#~ msgstr "ku Cyangwa"
+
+#, fuzzy
+#~ msgid "function returns an aggregate"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "unused parameter `%s'"
+#~ msgstr "Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "ambiguous abbreviation %s"
+#~ msgstr "Impine"
+
+#, fuzzy
+#~ msgid "incomplete `%s' option"
+#~ msgstr "Ihitamo"
+
+#, fuzzy
+#~ msgid "missing argument to `%s' option"
+#~ msgstr "Ibuze Kuri Ihitamo"
+
+#, fuzzy
+#~ msgid "extraneous argument to `%s' option"
+#~ msgstr "Kuri Ihitamo"
+
+#, fuzzy
+#~ msgid "Using built-in specs.\n"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid ""
+#~ "Setting spec %s to '%s'\n"
+#~ "\n"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Reading specs from %s\n"
+#~ msgstr "Bivuye"
+
+#, fuzzy
+#~ msgid "specs %%include syntax malformed after %ld characters"
+#~ msgstr "Nyuma Inyuguti"
+
+#, fuzzy
+#~ msgid "could not find specs file %s\n"
+#~ msgstr "OYA Gushaka IDOSIYE"
+
+#, fuzzy
+#~ msgid "specs %%rename syntax malformed after %ld characters"
+#~ msgstr "Nyuma Inyuguti"
+
+#, fuzzy
+#~ msgid "specs %s spec was not found to be renamed"
+#~ msgstr "OYA Byabonetse Kuri"
+
+#, fuzzy
+#~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
+#~ msgstr "%s:Kuri Guhindura izina Kuri"
+
+#, fuzzy
+#~ msgid "rename spec %s to %s\n"
+#~ msgstr "Guhindura izina Kuri"
+
+#, fuzzy
+#~ msgid ""
+#~ "spec is '%s'\n"
+#~ "\n"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "specs unknown %% command after %ld characters"
+#~ msgstr "Kitazwi Komandi: Nyuma Inyuguti"
+
+#, fuzzy
+#~ msgid "specs file malformed after %ld characters"
+#~ msgstr "IDOSIYE Nyuma Inyuguti"
+
+#, fuzzy
+#~ msgid "spec file has no spec for linking"
+#~ msgstr "IDOSIYE Oya kugirango Impuza"
+
+#, fuzzy
+#~ msgid "-pipe not supported"
+#~ msgstr "-OYA"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Go ahead? (y or n) "
+#~ msgstr "Y Cyangwa N"
+
+#, fuzzy
+#~ msgid ""
+#~ "Internal error: %s (program %s)\n"
+#~ "Please submit a full bug report.\n"
+#~ "See %s for instructions."
+#~ msgstr "Ikosa Porogaramu Tanga a Icyegeranyo kugirango Amabwiriza"
+
+#, fuzzy
+#~ msgid "# %s %.2f %.2f\n"
+#~ msgstr ""
+#~ "#%s%.Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid "Usage: %s [options] file...\n"
+#~ msgstr "Amahitamo IDOSIYE"
+
+# crashrep/source\all\crashrep.lng:%OPTIONS_BUTTON%.text
+#, fuzzy
+#~ msgid "Options:\n"
+#~ msgstr "Amahitamo..."
+
+#, fuzzy
+#~ msgid "  -pass-exit-codes         Exit with highest error code from a phase\n"
+#~ msgstr "-Gusohoka Na: kirekire kurusha ibindi Ikosa ITEGEKONGENGA Bivuye a"
+
+#, fuzzy
+#~ msgid "  --help                   Display this information\n"
+#~ msgstr "--Ifashayobora iyi"
+
+#, fuzzy
+#~ msgid "  --target-help            Display target specific command line options\n"
+#~ msgstr "--Intego Ifashayobora Intego Komandi: Umurongo"
+
+#, fuzzy
+#~ msgid "  (Use '-v --help' to display command line options of sub-processes)\n"
+#~ msgstr "(v Kuri Kugaragaza Komandi: Umurongo Amahitamo Bya"
+
+#, fuzzy
+#~ msgid "  -dumpspecs               Display all of the built in spec strings\n"
+#~ msgstr "-Byose Bya i in"
+
+#, fuzzy
+#~ msgid "  -dumpversion             Display the version of the compiler\n"
+#~ msgstr "-i Verisiyo Bya i"
+
+#, fuzzy
+#~ msgid "  -dumpmachine             Display the compiler's target processor\n"
+#~ msgstr "-i Intego"
+
+#, fuzzy
+#~ msgid "  -print-search-dirs       Display the directories in the compiler's search path\n"
+#~ msgstr "-Gucapa Gushaka i ububiko bw'amaderese in i Gushaka"
+
+#, fuzzy
+#~ msgid "  -print-libgcc-file-name  Display the name of the compiler's companion library\n"
+#~ msgstr "-Gucapa IDOSIYE Izina: i Izina: Bya i"
+
+#, fuzzy
+#~ msgid "  -print-file-name=<lib>   Display the full path to library <lib>\n"
+#~ msgstr "-Gucapa IDOSIYE Izina: i Inzira Kuri Isomero"
+
+#, fuzzy
+#~ msgid "  -print-prog-name=<prog>  Display the full path to compiler component <prog>\n"
+#~ msgstr "-Gucapa Izina: i Inzira Kuri"
+
+#, fuzzy
+#~ msgid "  -print-multi-directory   Display the root directory for versions of libgcc\n"
+#~ msgstr "-Gucapa bushyinguro i Imizi bushyinguro kugirango Uburyo Bya"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -print-multi-lib         Display the mapping between command line options and\n"
+#~ "                           multiple library search directories\n"
+#~ msgstr "-Gucapa i Igereranya hagati Komandi: Umurongo Amahitamo Igikubo Isomero Gushaka"
+
+#, fuzzy
+#~ msgid "  -print-multi-os-directory Display the relative path to OS libraries\n"
+#~ msgstr "-Gucapa bushyinguro i Bifitanye isano Inzira Kuri"
+
+#, fuzzy
+#~ msgid "  -Wa,<options>            Pass comma-separated <options> on to the assembler\n"
+#~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i"
+
+#, fuzzy
+#~ msgid "  -Wp,<options>            Pass comma-separated <options> on to the preprocessor\n"
+#~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i"
+
+#, fuzzy
+#~ msgid "  -Wl,<options>            Pass comma-separated <options> on to the linker\n"
+#~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i"
+
+#, fuzzy
+#~ msgid "  -Xlinker <arg>           Pass <arg> on to the linker\n"
+#~ msgstr "-ku Kuri i"
+
+#, fuzzy
+#~ msgid "  -save-temps              Do not delete intermediate files\n"
+#~ msgstr "-Kubika OYA Gusiba"
+
+#, fuzzy
+#~ msgid "  -time                    Time the execution of each subprocess\n"
+#~ msgstr "-Igihe i Bya"
+
+#, fuzzy
+#~ msgid "  -specs=<file>            Override built-in specs with the contents of <file>\n"
+#~ msgstr "-IDOSIYE in Na: i Ibigize Bya IDOSIYE"
+
+#, fuzzy
+#~ msgid "  -std=<standard>          Assume that the input sources are for <standard>\n"
+#~ msgstr "-STD Bisanzwe i Iyinjiza kugirango Bisanzwe"
+
+#, fuzzy
+#~ msgid "  -B <directory>           Add <directory> to the compiler's search paths\n"
+#~ msgstr "-bushyinguro bushyinguro Kuri i Gushaka"
+
+#, fuzzy
+#~ msgid "  -b <machine>             Run gcc for target <machine>, if installed\n"
+#~ msgstr "-B kugirango Intego NIBA"
+
+#, fuzzy
+#~ msgid "  -V <version>             Run gcc version number <version>, if installed\n"
+#~ msgstr "-V Verisiyo Verisiyo Umubare Verisiyo NIBA"
+
+#, fuzzy
+#~ msgid "  -v                       Display the programs invoked by the compiler\n"
+#~ msgstr "-v i Porogaramu ku i"
+
+#, fuzzy
+#~ msgid "  -###                     Like -v but options quoted and commands not executed\n"
+#~ msgstr "-###v Amahitamo Na Amabwiriza OYA"
+
+#, fuzzy
+#~ msgid "  -E                       Preprocess only; do not compile, assemble or link\n"
+#~ msgstr "-E OYA Gukusanya Cyangwa"
+
+#, fuzzy
+#~ msgid "  -S                       Compile only; do not assemble or link\n"
+#~ msgstr "-OYA Cyangwa"
+
+#, fuzzy
+#~ msgid "  -c                       Compile and assemble, but do not link\n"
+#~ msgstr "-C Na OYA"
+
+#, fuzzy
+#~ msgid "  -o <file>                Place the output into <file>\n"
+#~ msgstr "-o IDOSIYE i Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -x <language>            Specify the language of the following input files\n"
+#~ "                           Permissible languages include: c c++ assembler none\n"
+#~ "                           'none' means revert to the default behavior of\n"
+#~ "                           guessing the language based on the file's extension\n"
+#~ msgstr "-X Ururimi i Ururimi Bya i Iyinjiza Indimi Gushyiramo C C Kugaruza Kuri i Mburabuzi imyitwarire i Ururimi ku i"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+#~ " passed on to the various sub-processes invoked by %s.  In order to pass\n"
+#~ " other options on to these processes the -W<letter> options must be used.\n"
+#~ msgstr "Na: g F M Cyangwa ku Kuri i ku Itondekanya Kuri Ikindi Amahitamo ku Kuri i Ibaruwa... Amahitamo"
+
+#, fuzzy
+#~ msgid "`-%c' option must have argument"
+#~ msgstr "`-%c'Ihitamo"
+
+#, fuzzy
+#~ msgid "couldn't run `%s': %s"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid ""
+#~ "This is free software; see the source for copying conditions.  There is NO\n"
+#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+#~ "\n"
+#~ msgstr "ni Kigenga i Inkomoko kugirango ni OYA ATARIIGIHARWE kugirango Cyangwa A"
+
+#, fuzzy
+#~ msgid "argument to `-Xlinker' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "argument to `-l' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "argument to `-specs' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "argument to `-specs=' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "`-%c' must come at the start of the command line"
+#~ msgstr "`-%c'ku i Gutangira Bya i Komandi: Umurongo"
+
+#, fuzzy
+#~ msgid "argument to `-B' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "cannot specify -o with -c or -S and multiple compilations"
+#~ msgstr "o Na: C Cyangwa Na Igikubo"
+
+#, fuzzy
+#~ msgid "warning: -pipe ignored because -save-temps specified"
+#~ msgstr "Iburira Kubika"
+
+#, fuzzy
+#~ msgid "warning: -pipe ignored because -time specified"
+#~ msgstr "Iburira Igihe"
+
+#, fuzzy
+#~ msgid "argument to `-x' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "argument to `-%s' is missing"
+#~ msgstr "Kuri ni Ibuze"
+
+#, fuzzy
+#~ msgid "warning: `-x %s' after last input file has no effect"
+#~ msgstr "Iburira X Nyuma Iheruka Iyinjiza IDOSIYE Oya INGARUKA"
+
+#, fuzzy
+#~ msgid "invalid specification!  Bug in cc"
+#~ msgstr "Sibyo in KopiKubandi"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid "%s\n"
+#~ msgstr "%s"
+
+#, fuzzy
+#~ msgid "spec failure: '%%*' has not been initialized by pattern match"
+#~ msgstr "OYA ku Ishusho BIHUYE"
+
+#, fuzzy
+#~ msgid "warning: use of obsolete %%[ operator in specs"
+#~ msgstr "Iburira Gukoresha Bya Mukoresha in"
+
+#, fuzzy
+#~ msgid "Processing spec %c%s%c, which is '%s'\n"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "spec failure: unrecognized spec option '%c'"
+#~ msgstr "Ihitamo"
+
+#, fuzzy
+#~ msgid "unknown spec function `%s'"
+#~ msgstr "Kitazwi Umumaro"
+
+#, fuzzy
+#~ msgid "error in args to spec function `%s'"
+#~ msgstr "Ikosa in Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "malformed spec function name"
+#~ msgstr "Umumaro Izina:"
+
+#, fuzzy
+#~ msgid "no arguments for spec function"
+#~ msgstr "Oya ingingo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "malformed spec function arguments"
+#~ msgstr "Umumaro ingingo"
+
+#, fuzzy
+#~ msgid "mismatched braces in specs"
+#~ msgstr "Ingirwadusodeko in"
+
+#, fuzzy
+#~ msgid "unrecognized option `-%s'"
+#~ msgstr "Ihitamo"
+
+# #-#-#-#-#  setup2.pot (PACKAGE VERSION)  #-#-#-#-#
+# setup2/source\ui\pages\plang.src:RESID_PAGE_PAGELANGUAGE.STR_PROG.text
+# #-#-#-#-#  setup2.pot (PACKAGE VERSION)  #-#-#-#-#
+# setup2/source\uibase\agentdlg.src:RC_AGENTDLG.RESID_DLG_AGENT_STR_INSTALL.text
+#, fuzzy
+#~ msgid "install: %s%s\n"
+#~ msgstr "Kwinjiza porogaramu"
+
+#, fuzzy
+#~ msgid "programs: %s\n"
+#~ msgstr "Porogaramu"
+
+# basctl/source\basicide\moduldlg.src:RID_TD_ORGANIZE.RID_TC_ORGANIZE.RID_TP_LIB.text
+#, fuzzy
+#~ msgid "libraries: %s\n"
+#~ msgstr "Amasomero"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ msgstr "Amabwiriza"
+
+#, fuzzy
+#~ msgid "Configured with: %s\n"
+#~ msgstr "Na:"
+
+#, fuzzy
+#~ msgid "Thread model: %s\n"
+#~ msgstr "Urugero"
+
+#, fuzzy
+#~ msgid "gcc version %s\n"
+#~ msgstr "Verisiyo"
+
+#, fuzzy
+#~ msgid "gcc driver version %s executing gcc version %s\n"
+#~ msgstr "Musomyi: Verisiyo Gukora: %s%s Verisiyo"
+
+#, fuzzy
+#~ msgid "no input files"
+#~ msgstr "Oya Iyinjiza Idosiye"
+
+#, fuzzy
+#~ msgid "%s: %s compiler not installed on this system"
+#~ msgstr "%s:%sOYA ku iyi Sisitemu"
+
+#, fuzzy
+#~ msgid "%s: linker input file unused because linking not done"
+#~ msgstr "%s:Iyinjiza IDOSIYE Kidakoreshwa Impuza OYA Byakozwe"
+
+#, fuzzy
+#~ msgid "language %s not recognized"
+#~ msgstr "Ururimi OYA"
+
+#, fuzzy
+#~ msgid "internal gcc abort"
+#~ msgstr "By'imbere Kureka"
+
+#, fuzzy
+#~ msgid "Internal gcov abort.\n"
+#~ msgstr "Kureka"
+
+#, fuzzy
+#~ msgid ""
+#~ "Print code coverage information.\n"
+#~ "\n"
+#~ msgstr "ITEGEKONGENGA Ibisobanuro"
+
+#, fuzzy
+#~ msgid "  -h, --help                      Print this help, then exit\n"
+#~ msgstr "-h Ifashayobora iyi Ifashayobora Hanyuma"
+
+#, fuzzy
+#~ msgid "  -v, --version                   Print version number, then exit\n"
+#~ msgstr "-v Verisiyo Verisiyo Umubare Hanyuma"
+
+#, fuzzy
+#~ msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
+#~ msgstr "-B in"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -c, --branch-counts             Given counts of branches taken\n"
+#~ "                                    rather than percentages\n"
+#~ msgstr "-C Bya"
+
+#, fuzzy
+#~ msgid "  -n, --no-output                 Do not create an output file\n"
+#~ msgstr "-N Oya Ibisohoka OYA Kurema Ibisohoka"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -l, --long-file-names           Use long output file names for included\n"
+#~ "                                    source files\n"
+#~ msgstr "-L IDOSIYE Amazina Ibisohoka IDOSIYE Amazina kugirango Inkomoko"
+
+#, fuzzy
+#~ msgid "  -f, --function-summaries        Output summaries for each function\n"
+#~ msgstr "-F Umumaro kugirango"
+
+#, fuzzy
+#~ msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+#~ msgstr "-o Igikoresho bushyinguro kugirango Igikoresho Idosiye in Cyangwa"
+
+#, fuzzy
+#~ msgid "  -p, --preserve-paths            Preserve all pathname components\n"
+#~ msgstr "-P Inzira Byose"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "For bug reporting instructions, please see:\n"
+#~ "%s.\n"
+#~ msgstr "Amabwiriza"
+
+#, fuzzy
+#~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "Could not open basic block file %s.\n"
+#~ msgstr "OYA Gufungura BASIC Funga IDOSIYE"
+
+#, fuzzy
+#~ msgid "Could not open program flow graph file %s.\n"
+#~ msgstr "OYA Gufungura Porogaramu IDOSIYE"
+
+#, fuzzy
+#~ msgid "Could not open data file %s.\n"
+#~ msgstr "OYA Gufungura Ibyatanzwe IDOSIYE"
+
+#, fuzzy
+#~ msgid "Assuming that all execution counts are zero.\n"
+#~ msgstr "Byose Zeru"
+
+#, fuzzy
+#~ msgid "No executable code associated with file %s.\n"
+#~ msgstr "ITEGEKONGENGA Na: IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s of %d lines executed in %s %s\n"
+#~ msgstr "%sBya Imirongo in"
+
+#, fuzzy
+#~ msgid "No executable lines in %s %s\n"
+#~ msgstr "Imirongo in"
+
+#, fuzzy
+#~ msgid "%s of %d branches executed in %s %s\n"
+#~ msgstr "%sBya in"
+
+#, fuzzy
+#~ msgid "%s of %d branches taken at least once in %s %s\n"
+#~ msgstr "%sBya ku Rimwe in"
+
+#, fuzzy
+#~ msgid "No branches in %s %s\n"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "%s of %d calls executed in %s %s\n"
+#~ msgstr "%sBya Amahamagara: in"
+
+#, fuzzy
+#~ msgid "No calls in %s %s\n"
+#~ msgstr "Amahamagara: in"
+
+#, fuzzy
+#~ msgid "didn't use all bb entries of graph, function %s\n"
+#~ msgstr "Gukoresha Byose Ibyinjijwe Bya Umumaro"
+
+#, fuzzy
+#~ msgid "ERROR: unexpected line number %ld\n"
+#~ msgstr "Umurongo Umubare"
+
+#, fuzzy
+#~ msgid "ERROR: too many basic blocks in function %s\n"
+#~ msgstr "BASIC in Umumaro"
+
+#, fuzzy
+#~ msgid "ERROR: out of range line number in function %s\n"
+#~ msgstr "Inyuma Bya Urutonde Umurongo Umubare in Umumaro"
+
+#, fuzzy
+#~ msgid "Could not open source file %s.\n"
+#~ msgstr "OYA Gufungura Inkomoko IDOSIYE"
+
+#, fuzzy
+#~ msgid "Warning: source file %s is newer than %s\n"
+#~ msgstr "Inkomoko IDOSIYE ni"
+
+#, fuzzy
+#~ msgid "Unexpected EOF while reading source file %s.\n"
+#~ msgstr "Inkomoko IDOSIYE"
+
+#, fuzzy
+#~ msgid "call   %2d never executed\n"
+#~ msgstr "Nta narimwe"
+
+#, fuzzy
+#~ msgid "branch %2d never executed\n"
+#~ msgstr "Nta narimwe"
+
+#, fuzzy
+#~ msgid "Error writing output file %s.\n"
+#~ msgstr "Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "Could not open output file %s.\n"
+#~ msgstr "OYA Gufungura Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+#~ msgstr "Yahagaritswe 1000 BASIC Na 20 BASIC Funga"
+
+#, fuzzy
+#~ msgid "GCSE disabled: %d basic blocks and %d registers"
+#~ msgstr "Yahagaritswe BASIC Na"
+
+#, fuzzy
+#~ msgid "Name `%s' contains quotes"
+#~ msgstr "Kirimo"
+
+#, fuzzy
+#~ msgid "invalid string `%s' in define_cpu_unit"
+#~ msgstr "Sibyo Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid string `%s' in define_query_cpu_unit"
+#~ msgstr "Sibyo Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid string `%s' in define_bypass"
+#~ msgstr "Sibyo Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid first string `%s' in exclusion_set"
+#~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid second string `%s' in exclusion_set"
+#~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid first string `%s' in presence_set"
+#~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid second string `%s' in presence_set"
+#~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid first string `%s' in absence_set"
+#~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid second string `%s' in absence_set"
+#~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid string `%s' in define_automaton"
+#~ msgstr "Sibyo Ikurikiranyanyuguti in"
+
+#, fuzzy
+#~ msgid "invalid option `%s' in automata_option"
+#~ msgstr "Sibyo Ihitamo in"
+
+#, fuzzy
+#~ msgid "garbage after ) in reservation `%s'"
+#~ msgstr "Nyuma in"
+
+#, fuzzy
+#~ msgid "invalid `%s' in reservation `%s'"
+#~ msgstr "Sibyo in"
+
+#, fuzzy
+#~ msgid "repetition `%s' <= 1 in reservation `%s'"
+#~ msgstr "1. in"
+
+#, fuzzy
+#~ msgid "unit `%s' in exclusion is not declared"
+#~ msgstr "Igice: in ni OYA"
+
+#, fuzzy
+#~ msgid "`%s' in exclusion is not unit"
+#~ msgstr "`%s'in ni OYA Igice:"
+
+#, fuzzy
+#~ msgid "unit `%s' excludes itself"
+#~ msgstr "Igice:"
+
+#, fuzzy
+#~ msgid "units `%s' and `%s' in exclusion set belong to different automata"
+#~ msgstr "Na in Gushyiraho Kuri"
+
+#, fuzzy
+#~ msgid "unit `%s' excludes and requires presence of `%s'"
+#~ msgstr "Igice: Na Bya"
+
+#, fuzzy
+#~ msgid "unit `%s' requires absence and presence of `%s'"
+#~ msgstr "Igice: Na Bya"
+
+#, fuzzy
+#~ msgid "repeated declaration of automaton `%s'"
+#~ msgstr "byasubiyemo Bya"
+
+#, fuzzy
+#~ msgid "define_insn_reservation `%s' has negative latency time"
+#~ msgstr "Igihe"
+
+#, fuzzy
+#~ msgid "`%s' is already used as insn reservation name"
+#~ msgstr "`%s'ni Nka Izina:"
+
+#, fuzzy
+#~ msgid "define_bypass `%s - %s' has negative latency time"
+#~ msgstr "Igihe"
+
+#, fuzzy
+#~ msgid "automaton `%s' is not declared"
+#~ msgstr "ni OYA"
+
+#, fuzzy
+#~ msgid "define_unit `%s' without automaton when one defined"
+#~ msgstr "Ryari:"
+
+#, fuzzy
+#~ msgid "`%s' is declared as cpu unit"
+#~ msgstr "`%s'ni Nka CPU Igice:"
+
+#, fuzzy
+#~ msgid "`%s' is declared as cpu reservation"
+#~ msgstr "`%s'ni Nka CPU"
+
+#, fuzzy
+#~ msgid "repeated declaration of unit `%s'"
+#~ msgstr "byasubiyemo Bya Igice:"
+
+#, fuzzy
+#~ msgid "repeated declaration of reservation `%s'"
+#~ msgstr "byasubiyemo Bya"
+
+#, fuzzy
+#~ msgid "there is no insn reservation `%s'"
+#~ msgstr "ni Oya"
+
+#, fuzzy
+#~ msgid "the same bypass `%s - %s' is already defined"
+#~ msgstr "i ni"
+
+#, fuzzy
+#~ msgid "bypass `%s - %s' is already defined"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "automaton `%s' is not used"
+#~ msgstr "ni OYA"
+
+#, fuzzy
+#~ msgid "undeclared unit or reservation `%s'"
+#~ msgstr "Igice: Cyangwa"
+
+#, fuzzy
+#~ msgid "unit `%s' is not used"
+#~ msgstr "Igice: ni OYA"
+
+#, fuzzy
+#~ msgid "reservation `%s' is not used"
+#~ msgstr "ni OYA"
+
+#, fuzzy
+#~ msgid "cycle in definition of reservation `%s'"
+#~ msgstr "Uruziga in Insobanuro Bya"
+
+#, fuzzy
+#~ msgid "Units `%s' and `%s' should be in the same automaton"
+#~ msgstr "Na in i"
+
+#, fuzzy
+#~ msgid "-split has no argument."
+#~ msgstr "-Gutandukanya Oya"
+
+#, fuzzy
+#~ msgid "option `-split' has not been implemented yet\n"
+#~ msgstr "Ihitamo OYA"
+
+#, fuzzy
+#~ msgid "Automaton `%s': Insn `%s' will never be issued"
+#~ msgstr "Nta narimwe Byasohowe"
+
+#, fuzzy
+#~ msgid "Insn `%s' will never be issued"
+#~ msgstr "Nta narimwe Byasohowe"
+
+#, fuzzy
+#~ msgid "Errors in DFA description"
+#~ msgstr "in Isobanuramiterere"
+
+#, fuzzy
+#~ msgid "Error in writing DFA description file %s"
+#~ msgstr "in Isobanuramiterere IDOSIYE"
+
+#, fuzzy
+#~ msgid "No input file name."
+#~ msgstr "Iyinjiza IDOSIYE Izina:"
+
+#, fuzzy
+#~ msgid "can't open %s"
+#~ msgstr "Gufungura"
+
+#, fuzzy
+#~ msgid "fix_sched_param: unknown param: %s"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "function cannot be inline"
+#~ msgstr "Umumaro Mumurongo"
+
+#, fuzzy
+#~ msgid "varargs function cannot be inline"
+#~ msgstr "Umumaro Mumurongo"
+
+#, fuzzy
+#~ msgid "function using alloca cannot be inline"
+#~ msgstr "Umumaro ikoresha Mumurongo"
+
+#, fuzzy
+#~ msgid "function using setjmp cannot be inline"
+#~ msgstr "Umumaro ikoresha Mumurongo"
+
+#, fuzzy
+#~ msgid "function uses __builtin_eh_return"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "function with nested functions cannot be inline"
+#~ msgstr "Umumaro Na: Imimaro Mumurongo"
+
+#, fuzzy
+#~ msgid "function with label addresses used in initializers cannot inline"
+#~ msgstr "Umumaro Na: Akarango Amaderesi in Mumurongo"
+
+#, fuzzy
+#~ msgid "function too large to be inline"
+#~ msgstr "Umumaro Binini Kuri Mumurongo"
+
+#, fuzzy
+#~ msgid "no prototype, and parameter address used; cannot be inline"
+#~ msgstr "Oya Na Aderesi Mumurongo"
+
+#, fuzzy
+#~ msgid "inline functions not supported for this return value type"
+#~ msgstr "Mumurongo Imimaro OYA kugirango iyi Garuka Agaciro Ubwoko"
+
+#, fuzzy
+#~ msgid "function with varying-size return value cannot be inline"
+#~ msgstr "Umumaro Na: Ingano Garuka Agaciro Mumurongo"
+
+#, fuzzy
+#~ msgid "function with varying-size parameter cannot be inline"
+#~ msgstr "Umumaro Na: Ingano Mumurongo"
+
+#, fuzzy
+#~ msgid "function with transparent unit parameter cannot be inline"
+#~ msgstr "Umumaro Na: Bibonerana Igice: Mumurongo"
+
+#, fuzzy
+#~ msgid "function with computed jump cannot inline"
+#~ msgstr "Umumaro Na: Simbuka Mumurongo"
+
+#, fuzzy
+#~ msgid "function with nonlocal goto cannot be inline"
+#~ msgstr "Umumaro Na: Mumurongo"
+
+#, fuzzy
+#~ msgid "function with target specific attribute(s) cannot be inlined"
+#~ msgstr "Umumaro Na: Intego Ikiranga S"
+
+#, fuzzy
+#~ msgid "invalid parameter `%s'"
+#~ msgstr "Ikigenderwaho sicyo"
+
+#, fuzzy
+#~ msgid "Profile does not match flowgraph of function %s (out of date?)"
+#~ msgstr "OYA BIHUYE Bya Umumaro Inyuma Bya Itariki"
+
+#, fuzzy
+#~ msgid ".da file corrupted"
+#~ msgstr ""
+#~ ".Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid "corrupted profile info: prob for %d-%d thought to be %d"
+#~ msgstr "Ibijyana Ibisobanuro PROB kugirango Kuri"
+
+#, fuzzy
+#~ msgid "file %s not found, execution counts assumed to be zero"
+#~ msgstr "IDOSIYE OYA Byabonetse Kuri Zeru"
+
+#, fuzzy
+#~ msgid "%s: internal abort\n"
+#~ msgstr "%s:By'imbere"
+
+#, fuzzy
+#~ msgid "%s: error writing file `%s': %s\n"
+#~ msgstr "%s:Ikosa IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+#~ msgstr "%s:Ikoresha: i Izina ry'idosiye:"
+
+#, fuzzy
+#~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+#~ msgstr "%s:Ikoresha: Izina ry'idosiye:"
+
+#, fuzzy
+#~ msgid "%s: warning: no read access for file `%s'\n"
+#~ msgstr "%s:Iburira Oya Gusoma kugirango IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: warning: no write access for file `%s'\n"
+#~ msgstr "%s:Iburira Oya Kwandika kugirango IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: warning: no write access for dir containing `%s'\n"
+#~ msgstr "%s:Iburira Oya Kwandika kugirango"
+
+#, fuzzy
+#~ msgid "%s: invalid file name: %s\n"
+#~ msgstr "%s:Sibyo IDOSIYE Izina:"
+
+#, fuzzy
+#~ msgid "%s: %s: can't get status: %s\n"
+#~ msgstr "%s:%s:Kubona Imimerere"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: fatal error: aux info file corrupted at line %d\n"
+#~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE ku Umurongo"
+
+#, fuzzy
+#~ msgid "%s:%d: declaration of function `%s' takes different forms\n"
+#~ msgstr "%s:%d:Bya Umumaro"
+
+#, fuzzy
+#~ msgid "%s: wait: %s\n"
+#~ msgstr "%s:Tegereza"
+
+#, fuzzy
+#~ msgid "%s: %s exited with status %d\n"
+#~ msgstr "%s:%sNa: Imimerere"
+
+#, fuzzy
+#~ msgid "%s: warning: missing SYSCALLS file `%s'\n"
+#~ msgstr "%s:Iburira Ibuze IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't read aux info file `%s': %s\n"
+#~ msgstr "%s:Gusoma Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't get status of aux info file `%s': %s\n"
+#~ msgstr "%s:Kubona Imimerere Bya Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't open aux info file `%s' for reading: %s\n"
+#~ msgstr "%s:Gufungura Ibisobanuro IDOSIYE kugirango"
+
+#, fuzzy
+#~ msgid "%s: error reading aux info file `%s': %s\n"
+#~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: error closing aux info file `%s': %s\n"
+#~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't delete aux info file `%s': %s\n"
+#~ msgstr "%s:Gusiba Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't delete file `%s': %s\n"
+#~ msgstr "%s:Gusiba IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n"
+#~ msgstr "%s:Iburira Guhindura izina IDOSIYE Kuri"
+
+#, fuzzy
+#~ msgid "%s: conflicting extern definitions of '%s'\n"
+#~ msgstr "%s:Bya"
+
+#, fuzzy
+#~ msgid "%s: declarations of '%s' will not be converted\n"
+#~ msgstr "%s:Bya OYA"
+
+#, fuzzy
+#~ msgid "%s: conflict list for '%s' follows:\n"
+#~ msgstr "%s:Urutonde kugirango"
+
+#, fuzzy
+#~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n"
+#~ msgstr "%s:Iburira ikoresha Urutonde Bivuye kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n"
+#~ msgstr "%s:%d:`%s'Ibuze Bivuye"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: no extern definition for `%s'\n"
+#~ msgstr "%s:%d:Iburira Oya Insobanuro kugirango"
+
+#, fuzzy
+#~ msgid "%s: warning: no static definition for `%s' in file `%s'\n"
+#~ msgstr "%s:Iburira Oya Insobanuro kugirango in IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: multiple static defs of `%s' in file `%s'\n"
+#~ msgstr "%s:Igikubo Bya in IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: source too confusing\n"
+#~ msgstr "%s:%d:Iburira Inkomoko"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: varargs function declaration not converted\n"
+#~ msgstr "%s:%d:Iburira Umumaro OYA"
+
+#, fuzzy
+#~ msgid "%s: declaration of function `%s' not converted\n"
+#~ msgstr "%s:Bya Umumaro OYA"
+
+#, fuzzy
+#~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n"
+#~ msgstr "%s:Iburira Intonde in Bya"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: warning: too few parameter lists in declaration of `%s'\n"
+#~ msgstr "%s:Iburira Intonde in Bya"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: found `%s' but expected `%s'\n"
+#~ msgstr "%s:%d:Iburira Byabonetse Ikitezwe:"
+
+#, fuzzy
+#~ msgid "%s: local declaration for function `%s' not inserted\n"
+#~ msgstr "%s:kugirango Umumaro OYA"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: %d: warning: can't add declaration of `%s' into macro call\n"
+#~ msgstr "%s:%d:Iburira Kongeramo Bya Makoro"
+
+#, fuzzy
+#~ msgid "%s: global declarations for file `%s' not inserted\n"
+#~ msgstr "%s:kugirango IDOSIYE OYA"
+
+#, fuzzy
+#~ msgid "%s: definition of function `%s' not converted\n"
+#~ msgstr "%s:Insobanuro Bya Umumaro OYA"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: definition of %s not converted\n"
+#~ msgstr "%s:%d:Iburira Insobanuro Bya OYA"
+
+#, fuzzy
+#~ msgid "%s: found definition of `%s' at %s(%d)\n"
+#~ msgstr "%s:Byabonetse Insobanuro Bya ku"
+
+#, fuzzy
+#~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n"
+#~ msgstr "%s:%d:Iburira ku"
+
+#, fuzzy
+#~ msgid "%s: function definition not converted\n"
+#~ msgstr "%s:Umumaro Insobanuro OYA"
+
+#, fuzzy
+#~ msgid "%s: `%s' not converted\n"
+#~ msgstr "%s:`%s'OYA"
+
+#, fuzzy
+#~ msgid "%s: would convert file `%s'\n"
+#~ msgstr "%s:GUHINDURA IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: converting file `%s'\n"
+#~ msgstr "%s:Guhindura.... IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't get status for file `%s': %s\n"
+#~ msgstr "%s:Kubona Imimerere kugirango IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't open file `%s' for reading: %s\n"
+#~ msgstr "%s:Gufungura IDOSIYE kugirango"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%s: error reading input file `%s': %s\n"
+#~ msgstr "%s:Ikosa Iyinjiza IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't create/open clean file `%s': %s\n"
+#~ msgstr "%s:Kurema Gufungura GUSUKURA IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: warning: file `%s' already saved in `%s'\n"
+#~ msgstr "%s:Iburira IDOSIYE in"
+
+#, fuzzy
+#~ msgid "%s: can't link file `%s' to `%s': %s\n"
+#~ msgstr "%s:Ihuza IDOSIYE Kuri"
+
+#, fuzzy
+#~ msgid "%s: can't create/open output file `%s': %s\n"
+#~ msgstr "%s:Kurema Gufungura Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: can't change mode of file `%s': %s\n"
+#~ msgstr "%s:Guhindura>> Ubwoko Bya IDOSIYE"
+
+#, fuzzy
+#~ msgid "%s: cannot get working directory: %s\n"
+#~ msgstr "%s:Kubona bushyinguro"
+
+#, fuzzy
+#~ msgid "%s: input file names must have .c suffixes: %s\n"
+#~ msgstr "%s:Iyinjiza IDOSIYE Amazina C Imigereka"
+
+#, fuzzy
+#~ msgid "Didn't find a coloring.\n"
+#~ msgstr "Gushaka a"
+
+#, fuzzy
+#~ msgid "output constraint %d must specify a single register"
+#~ msgstr "Ibisohoka Imbogamizi a UMWE Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "output constraint %d cannot be specified together with \"%s\" clobber"
+#~ msgstr "Ibisohoka Imbogamizi Na:"
+
+#, fuzzy
+#~ msgid "output regs must be grouped at top of stack"
+#~ msgstr "Ibisohoka ku Hejuru: Bya"
+
+#, fuzzy
+#~ msgid "implicitly popped regs must be grouped at top of stack"
+#~ msgstr "ku Hejuru: Bya"
+
+#, fuzzy
+#~ msgid "output operand %d must use `&' constraint"
+#~ msgstr "Ibisohoka Gukoresha Imbogamizi"
+
+#, fuzzy
+#~ msgid "can't use '%s' as a %s register"
+#~ msgstr "Gukoresha Nka a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "unknown register name: %s"
+#~ msgstr "Kitazwi Kwiyandikisha Izina:"
+
+#, fuzzy
+#~ msgid "global register variable follows a function definition"
+#~ msgstr "Kwiyandikisha IMPINDURAGACIRO a Umumaro Insobanuro"
+
+#, fuzzy
+#~ msgid "register used for two global register variables"
+#~ msgstr "Kwiyandikisha kugirango Kwiyandikisha Ibihinduka"
+
+#, fuzzy
+#~ msgid "call-clobbered register used for global register variable"
+#~ msgstr "Kwiyandikisha kugirango Kwiyandikisha IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
+#~ msgstr "kugirango ubusa"
+
+#, fuzzy
+#~ msgid "validate_value_data: Loop in regno chain (%u)"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
+#~ msgstr "ubusa in"
+
+#, fuzzy
+#~ msgid "cannot reload integer constant operand in `asm'"
+#~ msgstr "Kongera Gutangiza Umubare wuzuye in"
+
+#, fuzzy
+#~ msgid "impossible register constraint in `asm'"
+#~ msgstr "Kwiyandikisha Imbogamizi in"
+
+#, fuzzy
+#~ msgid "`&' constraint used with no register class"
+#~ msgstr "`&'Imbogamizi Na: Oya Kwiyandikisha ishuri"
+
+#, fuzzy
+#~ msgid "unable to generate reloads for:"
+#~ msgstr "Kuri kugirango"
+
+#, fuzzy
+#~ msgid "inconsistent operand constraints in an `asm'"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "frame size too large for reliable stack checking"
+#~ msgstr "Ikadiri Ingano Binini kugirango"
+
+#, fuzzy
+#~ msgid "try reducing the number of local variables"
+#~ msgstr "i Umubare Bya Ibihinduka"
+
+#, fuzzy
+#~ msgid "can't find a register in class `%s' while reloading `asm'"
+#~ msgstr "Gushaka a Kwiyandikisha in ishuri"
+
+#, fuzzy
+#~ msgid "unable to find a register to spill in class `%s'"
+#~ msgstr "Kuri Gushaka a Kwiyandikisha Kuri in ishuri"
+
+#, fuzzy
+#~ msgid "this is the insn:"
+#~ msgstr "iyi ni i"
+
+#, fuzzy
+#~ msgid "`asm' operand requires impossible reload"
+#~ msgstr "`Kongera Gutangiza"
+
+#, fuzzy
+#~ msgid "could not find a spill register"
+#~ msgstr "OYA Gushaka a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "`asm' operand constraint incompatible with operand size"
+#~ msgstr "`Imbogamizi Na: Ingano"
+
+#, fuzzy
+#~ msgid "VOIDmode on an output"
+#~ msgstr "ku Ibisohoka"
+
+#, fuzzy
+#~ msgid "output operand is constant in `asm'"
+#~ msgstr "Ibisohoka ni in"
+
+#, fuzzy
+#~ msgid "insn does not satisfy its constraints:"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
+#~ msgstr "Kugenzura... Bya Bya Na: Iheruka in ku"
+
+#, fuzzy
+#~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: Ubwoko in ku"
+
+#, fuzzy
+#~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: Ubwoko Cyangwa in ku"
+
+#, fuzzy
+#~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: ITEGEKONGENGA in ku"
+
+#, fuzzy
+#~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: ITEGEKONGENGA Cyangwa in ku"
+
+#, fuzzy
+#~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+#~ msgstr "Kugenzura... Bya Bya Na: Iheruka in ku"
+
+#, fuzzy
+#~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d"
+#~ msgstr "Ibendera Kugenzura... Na: ITEGEKONGENGA in ku"
+
+#, fuzzy
+#~ msgid "jump to `%s' invalidly jumps into binding contour"
+#~ msgstr "Simbuka Kuri Bifatanya Umuzenguruko"
+
+#, fuzzy
+#~ msgid "label `%s' used before containing binding contour"
+#~ msgstr "Akarango Mbere Bifatanya Umuzenguruko"
+
+#, fuzzy
+#~ msgid "output operand constraint lacks `='"
+#~ msgstr "Ibisohoka Imbogamizi"
+
+#, fuzzy
+#~ msgid "output constraint `%c' for operand %d is not at the beginning"
+#~ msgstr "Ibisohoka Imbogamizi kugirango ni OYA ku i Itangiriro"
+
+#, fuzzy
+#~ msgid "operand constraint contains incorrectly positioned '+' or '='"
+#~ msgstr "Imbogamizi Kirimo Cyangwa"
+
+#, fuzzy
+#~ msgid "`%%' constraint used with last operand"
+#~ msgstr "`%%'Imbogamizi Na: Iheruka"
+
+#, fuzzy
+#~ msgid "matching constraint not valid in output operand"
+#~ msgstr "Imbogamizi OYA Byemewe in Ibisohoka"
+
+#, fuzzy
+#~ msgid "input operand constraint contains `%c'"
+#~ msgstr "Iyinjiza Imbogamizi Kirimo"
+
+#, fuzzy
+#~ msgid "matching constraint references invalid operand number"
+#~ msgstr "Imbogamizi Indango Sibyo Umubare"
+
+#, fuzzy
+#~ msgid "invalid punctuation `%c' in constraint"
+#~ msgstr "Sibyo in Imbogamizi"
+
+#, fuzzy
+#~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list"
+#~ msgstr "kugirango IMPINDURAGACIRO Na: Urutonde"
+
+#, fuzzy
+#~ msgid "unknown register name `%s' in `asm'"
+#~ msgstr "Kitazwi Kwiyandikisha Izina: in"
+
+#, fuzzy
+#~ msgid "more than %d operands in `asm'"
+#~ msgstr "Birenzeho in"
+
+#, fuzzy
+#~ msgid "output number %d not directly addressable"
+#~ msgstr "Ibisohoka Umubare OYA"
+
+#, fuzzy
+#~ msgid "asm operand %d probably doesn't match constraints"
+#~ msgstr "BIHUYE"
+
+#, fuzzy
+#~ msgid "asm clobber conflict with output operand"
+#~ msgstr "Na: Ibisohoka"
+
+#, fuzzy
+#~ msgid "asm clobber conflict with input operand"
+#~ msgstr "Na: Iyinjiza"
+
+#, fuzzy
+#~ msgid "too many alternatives in `asm'"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "operand constraints for `asm' differ in number of alternatives"
+#~ msgstr "kugirango in Umubare Bya"
+
+#, fuzzy
+#~ msgid "duplicate asm operand name '%s'"
+#~ msgstr "Gusubiramo Izina:"
+
+#, fuzzy
+#~ msgid "missing close brace for named operand"
+#~ msgstr "Ibuze Gufunga kugirango"
+
+#, fuzzy
+#~ msgid "undefined named operand '%s'"
+#~ msgstr "kidasobanuye"
+
+#, fuzzy
+#~ msgid "unused variable `%s'"
+#~ msgstr "Kidakoreshwa IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "enumeration value `%s' not handled in switch"
+#~ msgstr "Agaciro OYA in Hindura"
+
+#, fuzzy
+#~ msgid "case value `%ld' not in enumerated type"
+#~ msgstr "Agaciro OYA in Ubwoko"
+
+#, fuzzy
+#~ msgid "case value `%ld' not in enumerated type `%s'"
+#~ msgstr "Agaciro OYA in Ubwoko"
+
+#, fuzzy
+#~ msgid "switch missing default case"
+#~ msgstr "Hindura Ibuze Mburabuzi"
+
+#, fuzzy
+#~ msgid "type size can't be explicitly evaluated"
+#~ msgstr "Ubwoko Ingano"
+
+#, fuzzy
+#~ msgid "variable-size type declared outside of any function"
+#~ msgstr "IMPINDURAGACIRO Ingano Ubwoko Hanze Bya Umumaro"
+
+#, fuzzy
+#~ msgid "size of `%s' is %d bytes"
+#~ msgstr "Ingano Bya ni Bayite"
+
+#, fuzzy
+#~ msgid "size of `%s' is larger than %d bytes"
+#~ msgstr "Ingano Bya ni Kinini Bayite"
+
+#, fuzzy
+#~ msgid "packed attribute causes inefficient alignment for `%s'"
+#~ msgstr "Ikiranga Itunganya kugirango"
+
+#, fuzzy
+#~ msgid "packed attribute is unnecessary for `%s'"
+#~ msgstr "Ikiranga ni kugirango"
+
+#, fuzzy
+#~ msgid "padding struct to align `%s'"
+#~ msgstr "Wuzuza: Kuri Gutondeka"
+
+#, fuzzy
+#~ msgid "padding struct size to alignment boundary"
+#~ msgstr "Wuzuza: Ingano Kuri Itunganya"
+
+#, fuzzy
+#~ msgid "packed attribute causes inefficient alignment"
+#~ msgstr "Ikiranga Itunganya"
+
+#, fuzzy
+#~ msgid "packed attribute is unnecessary"
+#~ msgstr "Ikiranga ni"
+
+#, fuzzy
+#~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'"
+#~ msgstr "Ryari: Hejuru: Bya ni"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Execution times (seconds)\n"
+#~ msgstr "Times amasogonda"
+
+# #-#-#-#-#  sc.pot (PACKAGE VERSION)  #-#-#-#-#
+# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.STR_SUM.text
+# #-#-#-#-#  sc.pot (PACKAGE VERSION)  #-#-#-#-#
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_PIVOT_TOTAL.text
+#, fuzzy
+#~ msgid " TOTAL                 :"
+#~ msgstr "Igiteranyo"
+
+#, fuzzy
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "Igihe in"
+
+#, fuzzy
+#~ msgid "collect: tweaking %s in %s\n"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "ld returned %d exit status"
+#~ msgstr "Gusohoka Imimerere"
+
+#, fuzzy
+#~ msgid "Generate debugging info in default format"
+#~ msgstr "Ibisobanuro in Mburabuzi Imiterere"
+
+#, fuzzy
+#~ msgid "Generate debugging info in default extended format"
+#~ msgstr "Ibisobanuro in Mburabuzi Byongerewe... Imiterere"
+
+#, fuzzy
+#~ msgid "Generate STABS format debug info"
+#~ msgstr "Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate extended STABS format debug info"
+#~ msgstr "Byongerewe... Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate DWARF-1 format debug info"
+#~ msgstr "1. Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate extended DWARF-1 format debug info"
+#~ msgstr "Byongerewe... 1. Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate DWARF-2 debug info"
+#~ msgstr "2. Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate XCOFF format debug info"
+#~ msgstr "Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate extended XCOFF format debug info"
+#~ msgstr "Byongerewe... Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate COFF format debug info"
+#~ msgstr "Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Generate VMS format debug info"
+#~ msgstr "Imiterere Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Perform DWARF2 duplicate elimination"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "Do not store floats in registers"
+#~ msgstr "OYA in"
+
+#, fuzzy
+#~ msgid "Consider all mem refs through pointers as volatile"
+#~ msgstr "Byose mem Gihinguranya Nka"
+
+#, fuzzy
+#~ msgid "Consider all mem refs to global data to be volatile"
+#~ msgstr "Byose mem Kuri Ibyatanzwe Kuri"
+
+#, fuzzy
+#~ msgid "Consider all mem refs to static data to be volatile"
+#~ msgstr "Byose mem Kuri Ibyatanzwe Kuri"
+
+#, fuzzy
+#~ msgid "Defer popping functions args from stack until later"
+#~ msgstr "Imimaro Bivuye"
+
+#, fuzzy
+#~ msgid "When possible do not generate stack frames"
+#~ msgstr "OYA Amakadiri"
+
+#, fuzzy
+#~ msgid "Optimize sibling and tail recursive calls"
+#~ msgstr "Na Amahamagara:"
+
+#, fuzzy
+#~ msgid "Perform superblock formation via tail duplication"
+#~ msgstr "Biturutse"
+
+#, fuzzy
+#~ msgid "When running CSE, follow jumps to their targets"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Perform a number of minor, expensive optimizations"
+#~ msgstr "a Umubare Bya"
+
+#, fuzzy
+#~ msgid "Perform jump threading optimizations"
+#~ msgstr "Simbuka"
+
+#, fuzzy
+#~ msgid "Perform loop unrolling when iteration count is known"
+#~ msgstr "Ryari: IBARA ni"
+
+#, fuzzy
+#~ msgid "Perform loop unrolling for all loops"
+#~ msgstr "kugirango Byose"
+
+#, fuzzy
+#~ msgid "Generate prefetch instructions, if available, for arrays in loops"
+#~ msgstr "Amabwiriza NIBA Bihari kugirango in"
+
+#, fuzzy
+#~ msgid "Force all loop invariant computations out of loops"
+#~ msgstr "Byose Inyuma Bya"
+
+#, fuzzy
+#~ msgid "Strength reduce all loop general induction variables"
+#~ msgstr "Byose Rusange Ibihinduka"
+
+#, fuzzy
+#~ msgid "Store strings in writable data section"
+#~ msgstr "Ikurikiranyanyuguti in Ibyatanzwe Icyiciro"
+
+#, fuzzy
+#~ msgid "Copy memory operands into registers before using"
+#~ msgstr "Ububiko Mbere ikoresha"
+
+#, fuzzy
+#~ msgid "Copy memory address constants into regs before using"
+#~ msgstr "Ububiko Aderesi Mbere ikoresha"
+
+#, fuzzy
+#~ msgid "Allow function addresses to be held in registers"
+#~ msgstr "Umumaro Amaderesi Kuri in"
+
+#, fuzzy
+#~ msgid "Integrate simple functions into their callers"
+#~ msgstr "Byoroheje Imimaro"
+
+#, fuzzy
+#~ msgid "Generate code for funcs even if they are fully inlined"
+#~ msgstr "ITEGEKONGENGA kugirango ATARIIGIHARWE NIBA"
+
+#, fuzzy
+#~ msgid "Pay attention to the 'inline' keyword"
+#~ msgstr "Kuri i Ijambo- banze"
+
+#, fuzzy
+#~ msgid "Emit static const variables even if they are not used"
+#~ msgstr "Ibihinduka ATARIIGIHARWE NIBA OYA"
+
+#, fuzzy
+#~ msgid "Check for syntax errors, then stop"
+#~ msgstr "kugirango Amakosa Hanyuma Guhagarara"
+
+#, fuzzy
+#~ msgid "Mark data as shared rather than private"
+#~ msgstr "Ibyatanzwe Nka By'umwihariko"
+
+#, fuzzy
+#~ msgid "Enable saving registers around function calls"
+#~ msgstr "Mu kubika Umumaro Amahamagara:"
+
+#, fuzzy
+#~ msgid "Return 'short' aggregates in memory, not registers"
+#~ msgstr "in Ububiko OYA"
+
+#, fuzzy
+#~ msgid "Return 'short' aggregates in registers"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Attempt to fill delay slots of branch instructions"
+#~ msgstr "Kuri Kuzuza Gutinda Siloti Bya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Perform the global common subexpression elimination"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Perform enhanced load motion during global subexpression elimination"
+#~ msgstr "Ibirimo"
+
+#, fuzzy
+#~ msgid "Perform store motion after global subexpression elimination"
+#~ msgstr "Nyuma"
+
+#, fuzzy
+#~ msgid "Perform the loop optimizations"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Perform cross-jumping optimization"
+#~ msgstr "Kwambukiranya"
+
+#, fuzzy
+#~ msgid "Perform conversion of conditional jumps to branchless equivalents"
+#~ msgstr "Ihindurangero Bya Kuri"
+
+#, fuzzy
+#~ msgid "Perform conversion of conditional jumps to conditional execution"
+#~ msgstr "Ihindurangero Bya Kuri"
+
+#, fuzzy
+#~ msgid "Run CSE pass after loop optimizations"
+#~ msgstr "Nyuma"
+
+#, fuzzy
+#~ msgid "Run the loop optimizer twice"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Delete useless null pointer checks"
+#~ msgstr "NTAGIHARI Mweretsi"
+
+#, fuzzy
+#~ msgid "Reschedule instructions before register allocation"
+#~ msgstr "Amabwiriza Mbere Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Reschedule instructions after register allocation"
+#~ msgstr "Amabwiriza Nyuma Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Enable scheduling across basic blocks"
+#~ msgstr "Kwambukiranya BASIC"
+
+#, fuzzy
+#~ msgid "Allow speculative motion of non-loads"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "Allow speculative motion of some loads"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "Allow speculative motion of more loads"
+#~ msgstr "Bya Birenzeho"
+
+#, fuzzy
+#~ msgid "Replace add,compare,branch with branch on count reg"
+#~ msgstr "Kongeramo Kugereranya# Na: ku IBARA"
+
+#, fuzzy
+#~ msgid "Generate position independent code, if possible"
+#~ msgstr "Ibirindiro ITEGEKONGENGA NIBA"
+
+#, fuzzy
+#~ msgid "Enable exception handling"
+#~ msgstr "Irengayobora(-)"
+
+#, fuzzy
+#~ msgid "Just generate unwind tables for exception handling"
+#~ msgstr "Imbonerahamwe kugirango Irengayobora(-)"
+
+#, fuzzy
+#~ msgid "Generate unwind tables exact at each instruction boundary"
+#~ msgstr "Imbonerahamwe NYACYO ku"
+
+#, fuzzy
+#~ msgid "Support synchronous non-call exceptions"
+#~ msgstr "Amarengayobora"
+
+#, fuzzy
+#~ msgid "Insert arc based program profiling code"
+#~ msgstr "Agaheto Porogaramu ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Create data files needed by gcov"
+#~ msgstr "Ibyatanzwe Idosiye ku"
+
+#, fuzzy
+#~ msgid "Use profiling information for branch probabilities"
+#~ msgstr "Ibisobanuro kugirango"
+
+#, fuzzy
+#~ msgid "Enable basic program profiling code"
+#~ msgstr "BASIC Porogaramu ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Reorder basic blocks to improve code placement"
+#~ msgstr "BASIC Kuri ITEGEKONGENGA Ishyira mu mwanya"
+
+#, fuzzy
+#~ msgid "Reorder functions to improve code placement"
+#~ msgstr "Imimaro Kuri ITEGEKONGENGA Ishyira mu mwanya"
+
+#, fuzzy
+#~ msgid "Do the register renaming optimization pass"
+#~ msgstr "i Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Do the register copy-propagation optimization pass"
+#~ msgstr "i Kwiyandikisha Gukoporora"
+
+#, fuzzy
+#~ msgid "Do not put uninitialized globals in the common section"
+#~ msgstr "OYA Gushyira Itatangijwe in i Icyiciro"
+
+#, fuzzy
+#~ msgid "Do not generate .size directives"
+#~ msgstr "OYA Ingano"
+
+#, fuzzy
+#~ msgid "place each function into its own section"
+#~ msgstr "Umumaro Icyiciro"
+
+#, fuzzy
+#~ msgid "place data items into their own section"
+#~ msgstr "Ibyatanzwe Icyiciro"
+
+#, fuzzy
+#~ msgid "Add extra commentary to assembler output"
+#~ msgstr "Birenga Kuri Ibisohoka"
+
+#, fuzzy
+#~ msgid "Output GNU ld formatted global initializers"
+#~ msgstr "Byahanaguwe"
+
+#, fuzzy
+#~ msgid "Enables a register move optimization"
+#~ msgstr "a Kwiyandikisha Kwimura"
+
+#, fuzzy
+#~ msgid "Do the full regmove optimization pass"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Pack structure members together without holes"
+#~ msgstr "Imiterere"
+
+#, fuzzy
+#~ msgid "Insert stack checking code into the program"
+#~ msgstr "ITEGEKONGENGA i Porogaramu"
+
+#, fuzzy
+#~ msgid "Specify that arguments may alias each other & globals"
+#~ msgstr "ingingo Gicurasi Irihimbano Ikindi"
+
+#, fuzzy
+#~ msgid "Assume arguments may alias globals but not each other"
+#~ msgstr "ingingo Gicurasi Irihimbano OYA Ikindi"
+
+#, fuzzy
+#~ msgid "Assume arguments do not alias each other or globals"
+#~ msgstr "ingingo OYA Irihimbano Ikindi Cyangwa"
+
+#, fuzzy
+#~ msgid "Assume strict aliasing rules apply"
+#~ msgstr "Gukurikiza"
+
+#, fuzzy
+#~ msgid "Align the start of loops"
+#~ msgstr "i Gutangira Bya"
+
+#, fuzzy
+#~ msgid "Align labels which are only reached by jumping"
+#~ msgstr "Uturango... ku"
+
+#, fuzzy
+#~ msgid "Align all labels"
+#~ msgstr "Byose Uturango..."
+
+#, fuzzy
+#~ msgid "Align the start of functions"
+#~ msgstr "i Gutangira Bya Imimaro"
+
+#, fuzzy
+#~ msgid "Attempt to merge identical constants across compilation units"
+#~ msgstr "Kuri Gukomatanya birasa Kwambukiranya"
+
+#, fuzzy
+#~ msgid "Attempt to merge identical constants and constant variables"
+#~ msgstr "Kuri Gukomatanya birasa Na Ibihinduka"
+
+#, fuzzy
+#~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps"
+#~ msgstr "Ibisohoka Bya Imibare Na Umurongo Umubare Ibisobanuro in"
+
+#, fuzzy
+#~ msgid "Instrument function entry/exit with profiling calls"
+#~ msgstr "Umumaro Icyinjijwe Gusohoka Na: Amahamagara:"
+
+#, fuzzy
+#~ msgid "Put zero initialized data in the bss section"
+#~ msgstr "Zeru Ibyatanzwe in i Icyiciro"
+
+#, fuzzy
+#~ msgid "Enable aggressive SSA dead code elimination"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "External symbols have a leading underscore"
+#~ msgstr "Ibimenyetso a Nyobora"
+
+#, fuzzy
+#~ msgid "Enables an rtl peephole pass run before sched2"
+#~ msgstr "Gukoresha Mbere"
+
+#, fuzzy
+#~ msgid "Assume no NaNs or +-Infs are generated"
+#~ msgstr "Oya Cyangwa"
+
+#, fuzzy
+#~ msgid "Enables guessing of branch probabilities"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "Set errno after built-in math functions"
+#~ msgstr "Nyuma in Imibare Imimaro"
+
+#, fuzzy
+#~ msgid "Floating-point operations can trap"
+#~ msgstr "Akadomo Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Allow math optimizations that may violate IEEE or ANSI standards"
+#~ msgstr "Imibare Gicurasi Cyangwa"
+
+#, fuzzy
+#~ msgid "Disable optimizations observable by IEEE signaling NaNs"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Generate code to check bounds before indexing arrays"
+#~ msgstr "ITEGEKONGENGA Kuri Kugenzura... Mbere gushyiraho umugereka"
+
+#, fuzzy
+#~ msgid "Convert floating point constant to single precision constant"
+#~ msgstr "Bihindagurika Akadomo Kuri UMWE"
+
+#, fuzzy
+#~ msgid "Report time taken by each compiler pass at end of run"
+#~ msgstr "Igihe ku ku Impera Bya Gukoresha"
+
+#, fuzzy
+#~ msgid "Report on permanent memory allocation at end of run"
+#~ msgstr "ku Ububiko ku Impera Bya Gukoresha"
+
+#, fuzzy
+#~ msgid "Trap for signed overflow in addition / subtraction / multiplication"
+#~ msgstr "kugirango Byarenze urugero in Guteranya+ Gukuramo Gukuba(*)"
+
+#, fuzzy
+#~ msgid "Use graph coloring register allocation."
+#~ msgstr "Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Compile just for ISO C90"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Determine language standard"
+#~ msgstr "Ururimi Bisanzwe"
+
+#, fuzzy
+#~ msgid "Make bit-fields by unsigned by default"
+#~ msgstr "Imyanya ku Bitashizweho umukono ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Make 'char' be signed by default"
+#~ msgstr "ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Make 'char' be unsigned by default"
+#~ msgstr "Bitashizweho umukono ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Do not recognize the 'asm' keyword"
+#~ msgstr "OYA i Ijambo- banze"
+
+#, fuzzy
+#~ msgid "Do not recognize any built in functions"
+#~ msgstr "OYA in Imimaro"
+
+#, fuzzy
+#~ msgid "Assume normal C execution environment"
+#~ msgstr "Bisanzwe C"
+
+#, fuzzy
+#~ msgid "Assume that standard libraries & main might not exist"
+#~ msgstr "Bisanzwe Amasomero OYA"
+
+#, fuzzy
+#~ msgid "Allow different types as args of ? operator"
+#~ msgstr "Nka Bya Mukoresha"
+
+#, fuzzy
+#~ msgid "Allow the use of $ inside identifiers"
+#~ msgstr "i Gukoresha Bya Mo Imbere"
+
+#, fuzzy
+#~ msgid "Use the same size for double as for float"
+#~ msgstr "i Ingano kugirango MAHARAKUBIRI Nka kugirango Kureremba"
+
+#, fuzzy
+#~ msgid "Use the smallest fitting integer to hold enums"
+#~ msgstr "i Gitoya Umubare wuzuye Kuri"
+
+#, fuzzy
+#~ msgid "Override the underlying type for wchar_t to `unsigned short'"
+#~ msgstr "i Ubwoko kugirango Kuri Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "Enable most warning messages"
+#~ msgstr "Iburira Ubutumwa"
+
+#, fuzzy
+#~ msgid "Warn about casting functions to incompatible types"
+#~ msgstr "Ibyerekeye Imimaro Kuri"
+
+#, fuzzy
+#~ msgid "Warn about functions which might be candidates for format attributes"
+#~ msgstr "Ibyerekeye Imimaro kugirango Imiterere Ibiranga"
+
+#, fuzzy
+#~ msgid "Warn about casts which discard qualifiers"
+#~ msgstr "Ibyerekeye Kwanga"
+
+#, fuzzy
+#~ msgid "Warn about subscripts whose type is 'char'"
+#~ msgstr "Ibyerekeye bya Ubwoko ni"
+
+#, fuzzy
+#~ msgid "Warn if nested comments are detected"
+#~ msgstr "NIBA Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Warn about possibly confusing type conversions"
+#~ msgstr "Ibyerekeye Ubwoko"
+
+#, fuzzy
+#~ msgid "Do not warn about compile-time integer division by zero"
+#~ msgstr "OYA Ibyerekeye Gukusanya Igihe Umubare wuzuye ku Zeru"
+
+#, fuzzy
+#~ msgid "Warn about testing equality of floating point numbers"
+#~ msgstr "Ibyerekeye Bya Bihindagurika Akadomo Imibare"
+
+#, fuzzy
+#~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies"
+#~ msgstr "Ibyerekeye Imiterere"
+
+#, fuzzy
+#~ msgid "Don't warn about too many arguments to format functions"
+#~ msgstr "Ibyerekeye ingingo Kuri Imiterere Imimaro"
+
+#, fuzzy
+#~ msgid "Warn about non-string-literal format strings"
+#~ msgstr "Ibyerekeye Ikurikiranyanyuguti Imiterere Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "Warn about possible security problems with format functions"
+#~ msgstr "Ibyerekeye Umutekano Na: Imiterere Imimaro"
+
+#, fuzzy
+#~ msgid "Don't warn about strftime formats yielding 2 digit years"
+#~ msgstr "Ibyerekeye Imiterere 2. IMYAKA"
+
+#, fuzzy
+#~ msgid "Warn about implicit function declarations"
+#~ msgstr "Ibyerekeye Umumaro"
+
+#, fuzzy
+#~ msgid "Warn when a declaration does not specify a type"
+#~ msgstr "Ryari: a OYA a Ubwoko"
+
+#, fuzzy
+#~ msgid "Warn about the use of the #import directive"
+#~ msgstr "Ibyerekeye i Gukoresha Bya i Kuzana"
+
+#, fuzzy
+#~ msgid "Do not warn about using 'long long' when -pedantic"
+#~ msgstr "OYA Ibyerekeye ikoresha Ryari:"
+
+#, fuzzy
+#~ msgid "Warn about suspicious declarations of main"
+#~ msgstr "Ibyerekeye Bya"
+
+#, fuzzy
+#~ msgid "Warn about possibly missing braces around initializers"
+#~ msgstr "Ibyerekeye Ibuze Ingirwadusodeko"
+
+#, fuzzy
+#~ msgid "Warn about global funcs without previous declarations"
+#~ msgstr "Ibyerekeye Ibanjirije"
+
+#, fuzzy
+#~ msgid "Warn about global funcs without prototypes"
+#~ msgstr "Ibyerekeye"
+
+#, fuzzy
+#~ msgid "Warn about use of multicharacter literals"
+#~ msgstr "Ibyerekeye Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Warn about externs not at file scope level"
+#~ msgstr "Ibyerekeye OYA ku IDOSIYE Ingano: urwego"
+
+#, fuzzy
+#~ msgid "Warn about possible missing parentheses"
+#~ msgstr "Ibyerekeye Ibuze"
+
+#, fuzzy
+#~ msgid "Warn about function pointer arithmetic"
+#~ msgstr "Ibyerekeye Umumaro Mweretsi"
+
+#, fuzzy
+#~ msgid "Warn about multiple declarations of the same object"
+#~ msgstr "Ibyerekeye Igikubo Bya i Igikoresho"
+
+#, fuzzy
+#~ msgid "Warn whenever a function's return-type defaults to int"
+#~ msgstr "a Garuka Ubwoko Kuri INT"
+
+#, fuzzy
+#~ msgid "Warn about possible violations of sequence point rules"
+#~ msgstr "Ibyerekeye Bya Akadomo"
+
+#, fuzzy
+#~ msgid "Warn about signed/unsigned comparisons"
+#~ msgstr "Ibyerekeye Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "Warn about non-prototyped function decls"
+#~ msgstr "Ibyerekeye Umumaro"
+
+#, fuzzy
+#~ msgid "Warn about constructs whose meanings change in ISO C"
+#~ msgstr "Ibyerekeye bya Guhindura>> in C"
+
+#, fuzzy
+#~ msgid "Warn when trigraphs are encountered"
+#~ msgstr "Ryari:"
+
+#, fuzzy
+#~ msgid "Warn about unrecognized pragmas"
+#~ msgstr "Ibyerekeye"
+
+#, fuzzy
+#~ msgid "Mark strings as 'const char *'"
+#~ msgstr "Ikurikiranyanyuguti Nka INYUGUTI"
+
+#, fuzzy
+#~ msgid "Warn when a function is unused"
+#~ msgstr "Ryari: a Umumaro ni Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "Warn when a label is unused"
+#~ msgstr "Ryari: a Akarango ni Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "Warn when a function parameter is unused"
+#~ msgstr "Ryari: a Umumaro ni Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "Warn when a variable is unused"
+#~ msgstr "Ryari: a IMPINDURAGACIRO ni Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "Warn when an expression value is unused"
+#~ msgstr "Ryari: imvugo Agaciro ni Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "Do not suppress warnings from system headers"
+#~ msgstr "OYA Iburira Bivuye Sisitemu Imitwe"
+
+#, fuzzy
+#~ msgid "Treat all warnings as errors"
+#~ msgstr "Byose Iburira Nka Amakosa"
+
+#, fuzzy
+#~ msgid "Warn when one local variable shadows another"
+#~ msgstr "Ryari: IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "Warn about enumerated switches, with no default, missing a case"
+#~ msgstr "Ibyerekeye Na: Oya Mburabuzi Ibuze a"
+
+#, fuzzy
+#~ msgid "Warn about enumerated switches missing a default case"
+#~ msgstr "Ibyerekeye Ibuze a Mburabuzi"
+
+#, fuzzy
+#~ msgid "Warn about all enumerated switches missing a specific case"
+#~ msgstr "Ibyerekeye Byose Ibuze a"
+
+#, fuzzy
+#~ msgid "Warn about returning structures, unions or arrays"
+#~ msgstr "Ibyerekeye Cyangwa"
+
+#, fuzzy
+#~ msgid "Warn about pointer casts which increase alignment"
+#~ msgstr "Ibyerekeye Mweretsi Itunganya"
+
+#, fuzzy
+#~ msgid "Warn about code that will never be executed"
+#~ msgstr "Ibyerekeye ITEGEKONGENGA Nta narimwe"
+
+#, fuzzy
+#~ msgid "Warn about uninitialized automatic variables"
+#~ msgstr "Ibyerekeye Itatangijwe Byikoresha Ibihinduka"
+
+#, fuzzy
+#~ msgid "Warn when an inlined function cannot be inlined"
+#~ msgstr "Ryari: Umumaro"
+
+#, fuzzy
+#~ msgid "Warn when the packed attribute has no effect on struct layout"
+#~ msgstr "Ryari: i Ikiranga Oya INGARUKA ku Imigaragarire"
+
+#, fuzzy
+#~ msgid "Warn when padding is required to align struct members"
+#~ msgstr "Ryari: Wuzuza: ni Bya ngombwa Kuri Gutondeka"
+
+#, fuzzy
+#~ msgid "Warn when an optimization pass is disabled"
+#~ msgstr "Ryari: ni Yahagaritswe"
+
+#, fuzzy
+#~ msgid "Warn about uses of __attribute__((deprecated)) declarations"
+#~ msgstr "Ibyerekeye Bya Ikiranga Bitemewe."
+
+#, fuzzy
+#~ msgid "Warn about functions which might be candidates for attribute noreturn"
+#~ msgstr "Ibyerekeye Imimaro kugirango Ikiranga"
+
+#, fuzzy
+#~ msgid "Warn about code which might break the strict aliasing rules"
+#~ msgstr "Ibyerekeye ITEGEKONGENGA itandukanya i"
+
+#, fuzzy
+#~ msgid "invalid option `%s'"
+#~ msgstr "Sibyo Ihitamo"
+
+#, fuzzy
+#~ msgid "`%s' declared `static' but never defined"
+#~ msgstr "`%s'Nta narimwe"
+
+#, fuzzy
+#~ msgid "`%s' defined but not used"
+#~ msgstr "`%s'OYA"
+
+#, fuzzy
+#~ msgid "invalid register name `%s' for register variable"
+#~ msgstr "Sibyo Kwiyandikisha Izina: kugirango Kwiyandikisha IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "  -ffixed-<register>      Mark <register> as being unavailable to the compiler\n"
+#~ msgstr "-Kwiyandikisha Kwiyandikisha Nka Kuri i"
+
+#, fuzzy
+#~ msgid "  -fcall-used-<register>  Mark <register> as being corrupted by function calls\n"
+#~ msgstr "-Kwiyandikisha Kwiyandikisha Nka ku Umumaro"
+
+#, fuzzy
+#~ msgid "  -fcall-saved-<register> Mark <register> as being preserved across functions\n"
+#~ msgstr "-Kwiyandikisha Kwiyandikisha Nka Kwambukiranya"
+
+#, fuzzy
+#~ msgid "  -finline-limit=<number> Limits the size of inlined functions to <number>\n"
+#~ msgstr "-Umubare i Ingano Bya Imimaro Kuri Umubare"
+
+#, fuzzy
+#~ msgid "  -fmessage-length=<number> Limits diagnostics messages lengths to <number> characters per line.  0 suppresses line-wrapping\n"
+#~ msgstr "-Uburebure Umubare Ubutumwa Kuri Umubare Inyuguti Umurongo 0 Umurongo"
+
+#, fuzzy
+#~ msgid "  -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n"
+#~ msgstr "-Garagaza Ahantu Rimwe buri Umurongo Inkomoko Ahantu Ibisobanuro Nka Imbanziriza ku i Itangiriro Bya Ryari: Umurongo"
+
+#, fuzzy
+#~ msgid "  -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indicates the default thread-local storage code generation model\n"
+#~ msgstr "-Urugero i Mburabuzi Urudodo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "  -O[number]              Set optimization level to [number]\n"
+#~ msgstr "-Umubare urwego Kuri Umubare"
+
+#, fuzzy
+#~ msgid "  -Os                     Optimize for space rather than speed\n"
+#~ msgstr "-kugirango Umwanya"
+
+#, fuzzy
+#~ msgid "  -pedantic               Issue warnings needed by strict compliance to ISO C\n"
+#~ msgstr "-Iburira ku Kuri"
+
+#, fuzzy
+#~ msgid "  -pedantic-errors        Like -pedantic except that errors are produced\n"
+#~ msgstr "-Amakosa Amakosa"
+
+#, fuzzy
+#~ msgid "  -w                      Suppress warnings\n"
+#~ msgstr "-W"
+
+#, fuzzy
+#~ msgid "  -W                      Enable extra warnings\n"
+#~ msgstr "-Birenga"
+
+#, fuzzy
+#~ msgid "  -Wunused                Enable unused warnings\n"
+#~ msgstr "-Kidakoreshwa"
+
+#, fuzzy
+#~ msgid "  -Wlarger-than-<number>  Warn if an object is larger than <number> bytes\n"
+#~ msgstr "-Umubare NIBA Igikoresho ni Kinini Umubare"
+
+#, fuzzy
+#~ msgid "  -p                      Enable function profiling\n"
+#~ msgstr "-P Umumaro"
+
+#, fuzzy
+#~ msgid "  -o <file>               Place output into <file> \n"
+#~ msgstr "-o IDOSIYE Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid ""
+#~ "  -G <number>             Put global and static data smaller than <number>\n"
+#~ "                          bytes into a special section (on some targets)\n"
+#~ msgstr "-Umubare Na Ibyatanzwe Gitoya Umubare Bayite a Bidasanzwe Icyiciro ku"
+
+#, fuzzy
+#~ msgid "  -aux-info <file>        Emit declaration info into <file>\n"
+#~ msgstr "-Ibisobanuro IDOSIYE Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "  -quiet                  Do not display functions compiled or elapsed time\n"
+#~ msgstr "-OYA Kugaragaza Imimaro Cyangwa"
+
+#, fuzzy
+#~ msgid "  -version                Display the compiler's version\n"
+#~ msgstr "-Verisiyo i"
+
+#, fuzzy
+#~ msgid "  -d[letters]             Enable dumps from specific passes of the compiler\n"
+#~ msgstr "-D Bivuye Bya i"
+
+#, fuzzy
+#~ msgid "  -dumpbase <file>        Base name to be used for dumps from specific passes\n"
+#~ msgstr "-IDOSIYE Base Izina: Kuri kugirango Bivuye"
+
+#, fuzzy
+#~ msgid "  -fsched-verbose=<number> Set the verbosity level of the scheduler\n"
+#~ msgstr "-Umubare i urwego Bya i"
+
+#, fuzzy
+#~ msgid "  --help                  Display this information\n"
+#~ msgstr "--Ifashayobora iyi"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Language specific options:\n"
+#~ msgstr "Amahitamo"
+
+#, fuzzy
+#~ msgid "  %-23.23s [undocumented]\n"
+#~ msgstr ""
+#~ "%-23.Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented %s specific options as well.\n"
+#~ msgstr "Amahitamo Nka"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ " Options for %s:\n"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Target specific options:\n"
+#~ msgstr "Amahitamo"
+
+#, fuzzy
+#~ msgid "  -m%-23.23s [undocumented]\n"
+#~ msgstr "-M."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "There are undocumented target specific options as well.\n"
+#~ msgstr "Intego Amahitamo Nka"
+
+#, fuzzy
+#~ msgid "  They exist, but they are not documented.\n"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "unrecognized gcc debugging option: %c"
+#~ msgstr "Ihitamo"
+
+#, fuzzy
+#~ msgid "`%s': unknown tls-model option"
+#~ msgstr "`%s':Kitazwi TLS Urugero Ihitamo"
+
+#, fuzzy
+#~ msgid "unrecognized register name `%s'"
+#~ msgstr "Kwiyandikisha Izina:"
+
+#, fuzzy
+#~ msgid "unrecognized option `%s'"
+#~ msgstr "Ihitamo"
+
+#, fuzzy
+#~ msgid "-Wid-clash-LEN is no longer supported"
+#~ msgstr "-ni Oya"
+
+#, fuzzy
+#~ msgid "use -gdwarf -g%d for DWARF v1, level %d"
+#~ msgstr "Gukoresha g kugirango urwego"
+
+#, fuzzy
+#~ msgid "use -gdwarf-2   for DWARF v2"
+#~ msgstr "Gukoresha 2. kugirango"
+
+#, fuzzy
+#~ msgid "ignoring option `%s' due to invalid debug level specification"
+#~ msgstr "Ihitamo Kuri Sibyo Kosora amakosa urwego"
+
+#, fuzzy
+#~ msgid "`%s': unknown or unsupported -g option"
+#~ msgstr "`%s':Kitazwi Cyangwa g Ihitamo"
+
+#, fuzzy
+#~ msgid "`%s' ignored, conflicts with `-g%s'"
+#~ msgstr "`%s'Na: g"
+
+#, fuzzy
+#~ msgid "-param option missing argument"
+#~ msgstr "-Ihitamo Ibuze"
+
+#, fuzzy
+#~ msgid "invalid --param option: %s"
+#~ msgstr "Sibyo Ihitamo"
+
+#, fuzzy
+#~ msgid "invalid parameter value `%s'"
+#~ msgstr "Sibyo Agaciro"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s%s%s version %s (%s)\n"
+#~ "%s\tcompiled by GNU C version %s.\n"
+#~ "%s%s%s version %s (%s) compiled by CC.\n"
+#~ msgstr "%s%s%sVerisiyo ku C Verisiyo Verisiyo ku"
+
+#, fuzzy
+#~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+#~ msgstr "%s%sGGCGITO Kwagura GITO"
+
+#, fuzzy
+#~ msgid "options passed: "
+#~ msgstr "Amahitamo"
+
+#, fuzzy
+#~ msgid "options enabled: "
+#~ msgstr "Amahitamo Bikora"
+
+#, fuzzy
+#~ msgid "can't open %s for writing"
+#~ msgstr "Gufungura kugirango"
+
+#, fuzzy
+#~ msgid "ignoring command line option '%s'"
+#~ msgstr "Komandi: Umurongo Ihitamo"
+
+#, fuzzy
+#~ msgid "(it is valid for %s but not the selected language)"
+#~ msgstr "(ni Byemewe kugirango OYA i Byahiswemo Ururimi"
+
+#, fuzzy
+#~ msgid "-Wuninitialized is not supported without -O"
+#~ msgstr "-ni OYA"
+
+#, fuzzy
+#~ msgid "instruction scheduling not supported on this target machine"
+#~ msgstr "OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "this target machine does not have delayed branches"
+#~ msgstr "iyi Intego OYA"
+
+#, fuzzy
+#~ msgid "-f%sleading-underscore not supported on this target machine"
+#~ msgstr "-F OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "-ffunction-sections not supported for this target"
+#~ msgstr "-Ibyatoranyijwe OYA kugirango iyi Intego"
+
+#, fuzzy
+#~ msgid "-fdata-sections not supported for this target"
+#~ msgstr "-Ibyatoranyijwe OYA kugirango iyi Intego"
+
+#, fuzzy
+#~ msgid "-ffunction-sections disabled; it makes profiling impossible"
+#~ msgstr "-Ibyatoranyijwe Yahagaritswe"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays not supported for this target"
+#~ msgstr "-OYA kugirango iyi Intego"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)"
+#~ msgstr "-OYA kugirango iyi Intego Werurwe"
+
+#, fuzzy
+#~ msgid "-fprefetch-loop-arrays is not supported with -Os"
+#~ msgstr "-ni OYA Na:"
+
+#, fuzzy
+#~ msgid "-ffunction-sections may affect debugging on some targets"
+#~ msgstr "-Ibyatoranyijwe Gicurasi ku"
+
+#, fuzzy
+#~ msgid "error writing to %s"
+#~ msgstr "Ikosa Kuri"
+
+#, fuzzy
+#~ msgid "error closing %s"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "could not open dump file `%s'"
+#~ msgstr "OYA Gufungura IDOSIYE"
+
+#, fuzzy
+#~ msgid "ignoring unknown option `%.*s' in `-f%s'"
+#~ msgstr "Kitazwi Ihitamo in F"
+
+#, fuzzy
+#~ msgid "arrays of functions are not meaningful"
+#~ msgstr "Bya Imimaro OYA"
+
+#, fuzzy
+#~ msgid "function return type cannot be function"
+#~ msgstr "Umumaro Garuka Ubwoko Umumaro"
+
+#, fuzzy
+#~ msgid "invalid initializer for bit string"
+#~ msgstr "Sibyo kugirango Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "tree check: expected %s, have %s in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: in ku"
+
+#, fuzzy
+#~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
+#~ msgstr "Kugenzura... Ikitezwe: ishuri in ku"
+
+#, fuzzy
+#~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
+#~ msgstr "Kugenzura... birabonetse Bya Na: in ku"
+
+#, fuzzy
+#~ msgid "%s causes a section type conflict"
+#~ msgstr "%sa Icyiciro Ubwoko"
+
+#, fuzzy
+#~ msgid "register name not specified for `%s'"
+#~ msgstr "Kwiyandikisha Izina: OYA kugirango"
+
+#, fuzzy
+#~ msgid "invalid register name for `%s'"
+#~ msgstr "Sibyo Kwiyandikisha Izina: kugirango"
+
+#, fuzzy
+#~ msgid "data type of `%s' isn't suitable for a register"
+#~ msgstr "Ibyatanzwe Ubwoko Bya si kugirango a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "register specified for `%s' isn't suitable for data type"
+#~ msgstr "Kwiyandikisha kugirango si kugirango Ibyatanzwe Ubwoko"
+
+#, fuzzy
+#~ msgid "global register variable has initial value"
+#~ msgstr "Kwiyandikisha IMPINDURAGACIRO Agaciro"
+
+#, fuzzy
+#~ msgid "volatile register variables don't work as you might wish"
+#~ msgstr "Kwiyandikisha Ibihinduka Akazi Nka"
+
+#, fuzzy
+#~ msgid "register name given for non-register variable `%s'"
+#~ msgstr "Kwiyandikisha Izina: kugirango Kwiyandikisha IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d"
+#~ msgstr "Itunganya Bya ni Biruta Kinini Igikoresho IDOSIYE Itunganya"
+
+#, fuzzy
+#~ msgid "thread-local COMMON data not implemented"
+#~ msgstr "Urudodo Ibyatanzwe OYA"
+
+#, fuzzy
+#~ msgid "requested alignment for %s is greater than implemented alignment of %d"
+#~ msgstr "Itunganya kugirango ni Biruta Itunganya Bya"
+
+#, fuzzy
+#~ msgid "initializer for integer value is too complicated"
+#~ msgstr "kugirango Umubare wuzuye Agaciro ni"
+
+#, fuzzy
+#~ msgid "initializer for floating value is not a floating constant"
+#~ msgstr "kugirango Bihindagurika Agaciro ni OYA a Bihindagurika"
+
+#, fuzzy
+#~ msgid "unknown set constructor type"
+#~ msgstr "Kitazwi Gushyiraho Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid initial value for member `%s'"
+#~ msgstr "Sibyo Agaciro kugirango"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' must precede definition"
+#~ msgstr "Bya Insobanuro"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' after first use results in unspecified behavior"
+#~ msgstr "Bya Nyuma Itangira Gukoresha Ibisubizo ku in imyitwarire"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' must be public"
+#~ msgstr "Bya Rusange"
+
+#, fuzzy
+#~ msgid "weak declaration of `%s' not supported"
+#~ msgstr "Bya OYA"
+
+#, fuzzy
+#~ msgid "only weak aliases are supported in this configuration"
+#~ msgstr "Irihimbano in iyi Iboneza"
+
+#, fuzzy
+#~ msgid "alias definitions not supported in this configuration; ignored"
+#~ msgstr "Irihimbano OYA in iyi Iboneza"
+
+#, fuzzy
+#~ msgid "visibility attribute not supported in this configuration; ignored"
+#~ msgstr "Ukugaragara Ikiranga OYA in iyi Iboneza"
+
+#, fuzzy
+#~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
+#~ msgstr "Kitaboneka Imbonerahamwe Ikigize: Inyuma Bya in ku"
+
+#, fuzzy
+#~ msgid "no sclass for %s stab (0x%x)\n"
+#~ msgstr "Oya kugirango"
+
+#, fuzzy
+#~ msgid "#`%s' not supported by %s#"
+#~ msgstr "#`%s'OYA ku"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions in a single function eligible for inlining"
+#~ msgstr "Kinini Umubare Bya Amabwiriza in a UMWE Umumaro kugirango"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions when automatically inlining"
+#~ msgstr "Kinini Umubare Bya Amabwiriza Ryari: ku buryo bwikora"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions by repeated inlining before gcc starts to throttle inlining"
+#~ msgstr "Kinini Umubare Bya Amabwiriza ku byasubiyemo Mbere Kuri"
+
+#, fuzzy
+#~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter"
+#~ msgstr "IMANURA Bya i By'umurongo Umumaro Nyuma i ni ku i Agaciro Bya iyi"
+
+#, fuzzy
+#~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining"
+#~ msgstr "Umubare Bya Amabwiriza in a UMWE Imimaro Kuri Nyuma a"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions for the RTL inliner"
+#~ msgstr "Kinini Umubare Bya Amabwiriza kugirango i"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions to consider to fill a delay slot"
+#~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri Kuzuza a Gutinda"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions to consider to find accurate live register information"
+#~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri Gushaka Kwiyandikisha Ibisobanuro"
+
+#, fuzzy
+#~ msgid "The maximum length of scheduling's pending operations list"
+#~ msgstr "Kinini Uburebure Bya Ibikorwa: Urutonde"
+
+#, fuzzy
+#~ msgid "The maximum amount of memory to be allocated by GCSE"
+#~ msgstr "Kinini Igiteranyo Bya Ububiko Kuri ku"
+
+#, fuzzy
+#~ msgid "The maximum number of passes to make when doing GCSE"
+#~ msgstr "Kinini Umubare Bya Kuri Ubwoko Ryari:"
+
+#, fuzzy
+#~ msgid "The maximum number of instructions to consider to unroll in a loop"
+#~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri in a"
+
+#, fuzzy
+#~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot"
+#~ msgstr "Imigabane Bya i IBARA Bya Bya BASIC Funga in Porogaramu BASIC Funga Kuri Kuri"
+
+#, fuzzy
+#~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#~ msgstr "Imigabane Bya i Ubwisubire Bya Bya BASIC Funga in Umumaro BASIC Funga Kuri Kuri"
+
+#, fuzzy
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#~ msgstr "Ijanisha Bya Umumaro ku Ubwisubire ku Ryari: Ibijyana ni Bihari"
+
+#, fuzzy
+#~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#~ msgstr "Ijanisha Bya Umumaro ku Ubwisubire ku Ryari: Ibijyana ni OYA Bihari"
+
+#, fuzzy
+#~ msgid "Maximal code growth caused by tail duplication (in percents)"
+#~ msgstr "ITEGEKONGENGA IKURA ku in"
+
+#, fuzzy
+#~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percents)"
+#~ msgstr "Ihindurakerekezo IKURA NIBA i Ihindurakerekezo Imishobokere Bya ni Birutwa iyi in"
+
+#, fuzzy
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is available"
+#~ msgstr "Imbere IKURA NIBA i Imishobokere Bya ni Birutwa iyi in Ryari: Ibijyana ni Bihari"
+
+#, fuzzy
+#~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is not available"
+#~ msgstr "Imbere IKURA NIBA i Imishobokere Bya ni Birutwa iyi in Ryari: Ibijyana ni OYA Bihari"
+
+#, fuzzy
+#~ msgid "The maximum number of incoming edges to consider for crossjumping"
+#~ msgstr "Kinini Umubare Bya Kuri kugirango"
+
+#, fuzzy
+#~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
+#~ msgstr "Kuri Imbarutso Nka a Ijanisha Bya i Igiteranyo Ingano Bya i"
+
+#, fuzzy
+#~ msgid "Minimum heap size before we start collecting garbage, in kilobytes."
+#~ msgstr "Ingano Mbere Twebwe Gutangira in"
+
+#, fuzzy
+#~ msgid "too many #pragma options align=reset"
+#~ msgstr "Amahitamo Gutondeka Kugarura"
+
+#, fuzzy
+#~ msgid "junk at end of '#pragma options'"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring"
+#~ msgstr "Amahitamo Gutondeka UMWIKUBE Kugarura"
+
+#, fuzzy
+#~ msgid "missing '(' after '#pragma unused', ignoring"
+#~ msgstr "Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "missing ')' after '#pragma unused', ignoring"
+#~ msgstr "Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "junk at end of '#pragma unused'"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "-msystem-v and -p are incompatible"
+#~ msgstr "-v Na P"
+
+#, fuzzy
+#~ msgid "-msystem-v and -mthreads are incompatible"
+#~ msgstr "-v Na"
+
+#, fuzzy
+#~ msgid "-f%s ignored for Unicos/Mk (not supported)"
+#~ msgstr "-F kugirango OYA"
+
+#, fuzzy
+#~ msgid "-mieee not supported on Unicos/Mk"
+#~ msgstr "-OYA ku"
+
+#, fuzzy
+#~ msgid "-mieee-with-inexact not supported on Unicos/Mk"
+#~ msgstr "-Na: OYA ku"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mtrap-precision switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mfp-rounding-mode switch"
+#~ msgstr "Agaciro kugirango Ubwoko Hindura"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mfp-trap-mode switch"
+#~ msgstr "Agaciro kugirango Ubwoko Hindura"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mtls-size switch"
+#~ msgstr "Agaciro kugirango Ingano Hindura"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mcpu switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "trap mode not supported on Unicos/Mk"
+#~ msgstr "Ubwoko OYA ku"
+
+#, fuzzy
+#~ msgid "fp software completion requires -mtrap-precision=i"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "rounding mode not supported for VAX floats"
+#~ msgstr "Ubwoko OYA kugirango"
+
+#, fuzzy
+#~ msgid "trap mode not supported for VAX floats"
+#~ msgstr "Ubwoko OYA kugirango"
+
+#, fuzzy
+#~ msgid "L%d cache latency unknown for %s"
+#~ msgstr "Ubwihisho Kitazwi kugirango"
+
+#, fuzzy
+#~ msgid "bad value `%s' for -mmemory-latency"
+#~ msgstr "Agaciro kugirango"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%H value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%J value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%r value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%R value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%N value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%P value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%h value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%L value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%m value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%M value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%U value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%s value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%C value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%E value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "unknown relocation unspec"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "invalid %%xn code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not use hardware fp"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Do not use fp registers"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Do not assume GAS"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Request IEEE-conformant math library routines (OSF/1)"
+#~ msgstr "Imibare Isomero 1."
+
+#, fuzzy
+#~ msgid "Emit IEEE-conformant code, without inexact exceptions"
+#~ msgstr "ITEGEKONGENGA Amarengayobora"
+
+#, fuzzy
+#~ msgid "Emit IEEE-conformant code, with inexact exceptions"
+#~ msgstr "ITEGEKONGENGA Na: Amarengayobora"
+
+#, fuzzy
+#~ msgid "Do not emit complex integer constants to read-only memory"
+#~ msgstr "OYA ITSINDA RY'IMIBARE C Umubare wuzuye Kuri Gusoma Ububiko"
+
+#, fuzzy
+#~ msgid "Do not use VAX fp"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Emit code for the byte/word ISA extension"
+#~ msgstr "ITEGEKONGENGA kugirango i Bayite ijambo Umugereka"
+
+#, fuzzy
+#~ msgid "Emit code for the motion video ISA extension"
+#~ msgstr "ITEGEKONGENGA kugirango i Videwo... Umugereka"
+
+#, fuzzy
+#~ msgid "Emit code for the fp move and sqrt ISA extension"
+#~ msgstr "ITEGEKONGENGA kugirango i Kwimura Na SQRT Umugereka"
+
+#, fuzzy
+#~ msgid "Emit code for the counting ISA extension"
+#~ msgstr "ITEGEKONGENGA kugirango i Kubara Umugereka"
+
+#, fuzzy
+#~ msgid "Emit code using explicit relocation directives"
+#~ msgstr "ITEGEKONGENGA ikoresha"
+
+#, fuzzy
+#~ msgid "Emit 16-bit relocations to the small data areas"
+#~ msgstr "Kuri i Gitoya Ibyatanzwe Ubuso"
+
+#, fuzzy
+#~ msgid "Emit 32-bit relocations to the small data areas"
+#~ msgstr "Kuri i Gitoya Ibyatanzwe Ubuso"
+
+#, fuzzy
+#~ msgid "Emit rdval instead of rduniq for thread pointer"
+#~ msgstr "Bya kugirango Urudodo Mweretsi"
+
+#, fuzzy
+#~ msgid "Use features of and schedule given CPU"
+#~ msgstr "Ibiranga Bya Na Igenabihe"
+
+#, fuzzy
+#~ msgid "Control the generated fp rounding mode"
+#~ msgstr "i Ubwoko"
+
+#, fuzzy
+#~ msgid "Control the IEEE trap mode"
+#~ msgstr "i Ubwoko"
+
+#, fuzzy
+#~ msgid "Control the precision given to fp exceptions"
+#~ msgstr "i Kuri Amarengayobora"
+
+#, fuzzy
+#~ msgid "Tune expected memory latency"
+#~ msgstr "Ikitezwe: Ububiko"
+
+#, fuzzy
+#~ msgid "Specify bit size of immediate TLS offsets"
+#~ msgstr "Ingano Bya"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mcpu switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "argument of `%s' attribute is not a string constant"
+#~ msgstr "Bya Ikiranga ni OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\""
+#~ msgstr "Bya Ikiranga ni OYA Cyangwa"
+
+#, fuzzy
+#~ msgid "invalid operand to %%R code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand to %%H/%%L code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand to %%U code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand to %%V code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand output code"
+#~ msgstr "Sibyo Ibisohoka ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "switch -mcpu=%s conflicts with -march= switch"
+#~ msgstr "Hindura Na: Werurwe Hindura"
+
+#, fuzzy
+#~ msgid "bad value (%s) for %s switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "target CPU does not support APCS-32"
+#~ msgstr "Intego OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "target CPU does not support APCS-26"
+#~ msgstr "Intego OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "target CPU does not support interworking"
+#~ msgstr "Intego OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "target CPU does not support THUMB instructions"
+#~ msgstr "Intego OYA Gushigikira Amabwiriza"
+
+#, fuzzy
+#~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
+#~ msgstr "Gushigikira ni Ryari: kugirango i"
+
+#, fuzzy
+#~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "Gushigikira ni Ryari: kugirango i"
+
+#, fuzzy
+#~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb"
+#~ msgstr "Gushigikira ni Ryari: kugirango i"
+
+#, fuzzy
+#~ msgid "interworking forces APCS-32 to be used"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+#~ msgstr "-Kugenzura... Na: Ikadiri"
+
+#, fuzzy
+#~ msgid "-fpic and -mapcs-reent are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "APCS reentrant code not supported.  Ignored"
+#~ msgstr "ITEGEKONGENGA OYA"
+
+#, fuzzy
+#~ msgid "-g with -mno-apcs-frame may not give sensible debugging"
+#~ msgstr "-g Na: Ikadiri Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "passing floating point arguments in fp regs not yet supported"
+#~ msgstr "Bihindagurika Akadomo ingingo in OYA"
+
+#, fuzzy
+#~ msgid "invalid floating point emulation option: -mfpe-%s"
+#~ msgstr "Sibyo Bihindagurika Akadomo Ihitamo"
+
+#, fuzzy
+#~ msgid "structure size boundary can only be set to 8 or 32"
+#~ msgstr "Imiterere Ingano Gushyiraho Kuri 8 Cyangwa"
+
+#, fuzzy
+#~ msgid "-mpic-register= is useless without -fpic"
+#~ msgstr "-Kwiyandikisha ni"
+
+#, fuzzy
+#~ msgid "unable to use '%s' for PIC register"
+#~ msgstr "Kuri Gukoresha kugirango Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to functions"
+#~ msgstr "`%s'Ikiranga Kuri Imimaro"
+
+#, fuzzy
+#~ msgid "unable to compute real location of stacked parameter"
+#~ msgstr "Kuri Ahantu Bya Birunze"
+
+#, fuzzy
+#~ msgid "no low registers available for popping high registers"
+#~ msgstr "Oya Byo hasi Bihari kugirango kirekire"
+
+#, fuzzy
+#~ msgid "interrupt Service Routines cannot be coded in Thumb mode"
+#~ msgstr "Hagarikira aho in Ubwoko"
+
+#, fuzzy
+#~ msgid "initialized variable `%s' is marked dllimport"
+#~ msgstr "IMPINDURAGACIRO ni cy/ byagarajwe"
+
+#, fuzzy
+#~ msgid "static variable `%s' is marked dllimport"
+#~ msgstr "IMPINDURAGACIRO ni cy/ byagarajwe"
+
+#, fuzzy
+#~ msgid "Generate APCS conformant stack frames"
+#~ msgstr "Amakadiri"
+
+#, fuzzy
+#~ msgid "Store function names in object code"
+#~ msgstr "Umumaro Amazina in Igikoresho ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use the 32-bit version of the APCS"
+#~ msgstr "i Verisiyo Bya i"
+
+#, fuzzy
+#~ msgid "Use the 26-bit version of the APCS"
+#~ msgstr "i Verisiyo Bya i"
+
+#, fuzzy
+#~ msgid "Pass FP arguments in FP registers"
+#~ msgstr "ingingo in"
+
+#, fuzzy
+#~ msgid "Generate re-entrant, PIC code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "The MMU will trap on unaligned accesses"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Use library calls to perform FP operations"
+#~ msgstr "Isomero Amahamagara: Kuri Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Use hardware floating point instructions"
+#~ msgstr "Bihindagurika Akadomo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Assume target CPU is configured as big endian"
+#~ msgstr "Intego ni Nka"
+
+#, fuzzy
+#~ msgid "Assume target CPU is configured as little endian"
+#~ msgstr "Intego ni Nka"
+
+#, fuzzy
+#~ msgid "Assume big endian bytes, little endian words"
+#~ msgstr "Bayite Amagambo"
+
+#, fuzzy
+#~ msgid "Support calls between Thumb and ARM instruction sets"
+#~ msgstr "Amahamagara: hagati Na"
+
+#, fuzzy
+#~ msgid "Generate a call to abort if a noreturn function returns"
+#~ msgstr "a Kuri Kureka NIBA a Umumaro"
+
+#, fuzzy
+#~ msgid "Do not move instructions into a function's prologue"
+#~ msgstr "OYA Kwimura Amabwiriza a"
+
+#, fuzzy
+#~ msgid "Do not load the PIC register in function prologues"
+#~ msgstr "OYA Ibirimo i Kwiyandikisha in Umumaro"
+
+#, fuzzy
+#~ msgid "Generate call insns as indirect calls, if necessary"
+#~ msgstr "Nka BUZIGUYE Amahamagara: NIBA"
+
+#, fuzzy
+#~ msgid "Compile for the Thumb not the ARM"
+#~ msgstr "kugirango i OYA i"
+
+#, fuzzy
+#~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
+#~ msgstr "Amakadiri ATARIIGIHARWE NIBA OYA"
+
+#, fuzzy
+#~ msgid "Thumb: Generate (leaf) stack frames even if not needed"
+#~ msgstr "Amakadiri ATARIIGIHARWE NIBA OYA"
+
+#, fuzzy
+#~ msgid "Thumb: Assume non-static functions may be called from ARM code"
+#~ msgstr "Imimaro Gicurasi Bivuye ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
+#~ msgstr "Umumaro Gicurasi Gyayo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Specify the name of the target CPU"
+#~ msgstr "i Izina: Bya i Intego"
+
+#, fuzzy
+#~ msgid "Specify the name of the target architecture"
+#~ msgstr "i Izina: Bya i Intego"
+
+#, fuzzy
+#~ msgid "Specify the version of the floating point emulator"
+#~ msgstr "i Verisiyo Bya i Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Specify the minimum bit alignment of structures"
+#~ msgstr "i Gito Itunganya Bya"
+
+#, fuzzy
+#~ msgid "Specify the register to be used for PIC addressing"
+#~ msgstr "i Kwiyandikisha Kuri kugirango Kwohereza"
+
+#, fuzzy
+#~ msgid "Ignore dllimport attribute for functions"
+#~ msgstr "Ikiranga kugirango Imimaro"
+
+#, fuzzy
+#~ msgid "large frame pointer change (%d) with -mtiny-stack"
+#~ msgstr "Binini Ikadiri Mweretsi Guhindura>> Na:"
+
+#, fuzzy
+#~ msgid "bad address, not (reg+disp):"
+#~ msgstr "Aderesi OYA"
+
+#, fuzzy
+#~ msgid "internal compiler error.  Bad address:"
+#~ msgstr "By'imbere Ikosa Aderesi"
+
+#, fuzzy
+#~ msgid "internal compiler error.  Unknown mode:"
+#~ msgstr "By'imbere Ikosa Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid insn:"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "unknown move insn:"
+#~ msgstr "Kitazwi Kwimura"
+
+#, fuzzy
+#~ msgid "bad shift insn:"
+#~ msgstr "Gusunika"
+
+#, fuzzy
+#~ msgid "internal compiler error.  Incorrect shift:"
+#~ msgstr "By'imbere Ikosa Gusunika"
+
+#, fuzzy
+#~ msgid "only initialized variables can be placed into program memory area"
+#~ msgstr "Ibihinduka Porogaramu Ububiko Ubuso"
+
+#, fuzzy
+#~ msgid "only uninitialized variables can be placed in the .noinit section"
+#~ msgstr "Itatangijwe Ibihinduka in i Icyiciro"
+
+#, fuzzy
+#~ msgid "MCU `%s' supported for assembler only"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Assume int to be 8 bit integer"
+#~ msgstr "INT Kuri 8 Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "Change the stack pointer without disabling interrupts"
+#~ msgstr "i Mweretsi"
+
+#, fuzzy
+#~ msgid "Use subroutines for function prologue/epilogue"
+#~ msgstr "kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "Change only the low 8 bits of the stack pointer"
+#~ msgstr "i Byo hasi 8 Bya i Mweretsi"
+
+#, fuzzy
+#~ msgid "Do not generate tablejump insns"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Use rjmp/rcall (limited range) on >8K devices"
+#~ msgstr "Urutonde ku"
+
+#, fuzzy
+#~ msgid "Output instruction sizes to the asm file"
+#~ msgstr "Kuri i IDOSIYE"
+
+#, fuzzy
+#~ msgid "Specify the initial stack address"
+#~ msgstr "i Aderesi"
+
+#, fuzzy
+#~ msgid "Specify the MCU name"
+#~ msgstr "i Izina:"
+
+#, fuzzy
+#~ msgid "trampolines not supported"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "missing '(' after '#pragma %s' - ignored"
+#~ msgstr "Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "missing function name in '#pragma %s' - ignored"
+#~ msgstr "Ibuze Umumaro Izina: in"
+
+#, fuzzy
+#~ msgid "missing section name in '#pragma %s' - ignored"
+#~ msgstr "Ibuze Icyiciro Izina: in"
+
+#, fuzzy
+#~ msgid "missing ')' for '#pragma %s' - ignored"
+#~ msgstr "Ibuze kugirango"
+
+#, fuzzy
+#~ msgid "junk at end of '#pragma %s'"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "unknown CPU version %d, using 40.\n"
+#~ msgstr "Kitazwi Verisiyo ikoresha"
+
+#, fuzzy
+#~ msgid "ISR %s requires %d words of local vars, max is 32767"
+#~ msgstr "Amagambo Bya KININI ni"
+
+#, fuzzy
+#~ msgid "using CONST_DOUBLE for address"
+#~ msgstr "ikoresha kugirango Aderesi"
+
+#, fuzzy
+#~ msgid "c4x_address_cost: Invalid addressing mode"
+#~ msgstr "Kwohereza Ubwoko"
+
+#, fuzzy
+#~ msgid "c4x_rptb_insert: Cannot find start label"
+#~ msgstr "Gushaka Gutangira Akarango"
+
+#, fuzzy
+#~ msgid "mode not QImode"
+#~ msgstr "Ubwoko OYA"
+
+#, fuzzy
+#~ msgid "invalid indirect memory address"
+#~ msgstr "Sibyo BUZIGUYE Ububiko Aderesi"
+
+#, fuzzy
+#~ msgid "invalid indirect (S) memory address"
+#~ msgstr "Sibyo BUZIGUYE Ububiko Aderesi"
+
+#, fuzzy
+#~ msgid "c4x_valid_operands: Internal error"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "c4x_operand_subword: invalid mode"
+#~ msgstr "Sibyo Ubwoko"
+
+#, fuzzy
+#~ msgid "c4x_operand_subword: invalid operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "c4x_operand_subword: invalid autoincrement"
+#~ msgstr "Sibyo nyamwiyongera"
+
+#, fuzzy
+#~ msgid "c4x_operand_subword: invalid address"
+#~ msgstr "Sibyo Aderesi"
+
+#, fuzzy
+#~ msgid "c4x_operand_subword: address not offsettable"
+#~ msgstr "Aderesi OYA"
+
+#, fuzzy
+#~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n"
+#~ msgstr "Funga Hejuru: Akarango"
+
+#, fuzzy
+#~ msgid "Small memory model"
+#~ msgstr "Ububiko Urugero"
+
+#, fuzzy
+#~ msgid "Big memory model"
+#~ msgstr "Ububiko Urugero"
+
+#, fuzzy
+#~ msgid "Use MPYI instruction for C3x"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Do not use MPYI instruction for C3x"
+#~ msgstr "OYA Gukoresha kugirango"
+
+#, fuzzy
+#~ msgid "Use fast but approximate float to integer conversion"
+#~ msgstr "Byihuta Kureremba Kuri Umubare wuzuye Ihindurangero"
+
+#, fuzzy
+#~ msgid "Use slow but accurate float to integer conversion"
+#~ msgstr "Buhoro Kureremba Kuri Umubare wuzuye Ihindurangero"
+
+#, fuzzy
+#~ msgid "Enable use of RTPS instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Disable use of RTPS instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Enable use of RTPB instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Disable use of RTPB instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Generate code for C30 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for C31 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for C32 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for C33 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for C40 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for C44 CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Emit code compatible with TI tools"
+#~ msgstr "ITEGEKONGENGA Na: Ibikoresho"
+
+#, fuzzy
+#~ msgid "Emit code to use GAS extensions"
+#~ msgstr "ITEGEKONGENGA Kuri Gukoresha Umigereka"
+
+#, fuzzy
+#~ msgid "Save DP across ISR in small memory model"
+#~ msgstr "Kubika Kwambukiranya in Gitoya Ububiko Urugero"
+
+#, fuzzy
+#~ msgid "Don't save DP across ISR in small memory model"
+#~ msgstr "Kubika Kwambukiranya in Gitoya Ububiko Urugero"
+
+#, fuzzy
+#~ msgid "Pass arguments on the stack"
+#~ msgstr "ingingo ku i"
+
+#, fuzzy
+#~ msgid "Pass arguments in registers"
+#~ msgstr "ingingo in"
+
+#, fuzzy
+#~ msgid "Enable new features under development"
+#~ msgstr "Gishya Ibiranga"
+
+#, fuzzy
+#~ msgid "Disable new features under development"
+#~ msgstr "Gishya Ibiranga"
+
+#, fuzzy
+#~ msgid "Use the BK register as a general purpose register"
+#~ msgstr "i Kwiyandikisha Nka a Rusange Intego Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Do not allocate BK register"
+#~ msgstr "OYA Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Enable use of DB instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Disable use of DB instruction"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Force constants into registers to improve hoisting"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Force RTL generation to emit valid 3 operand insns"
+#~ msgstr "Kuri Byemewe 3."
+
+#, fuzzy
+#~ msgid "Allow RTL generation to emit invalid 3 operand insns"
+#~ msgstr "Kuri Sibyo 3."
+
+#, fuzzy
+#~ msgid "Allow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Bitashizweho umukono kugirango"
+
+#, fuzzy
+#~ msgid "Disallow unsigned iteration counts for RPTB/DB"
+#~ msgstr "Bitashizweho umukono kugirango"
+
+#, fuzzy
+#~ msgid "Preserve all 40 bits of FP reg across call"
+#~ msgstr "Byose Bya Kwambukiranya"
+
+#, fuzzy
+#~ msgid "Only preserve 32 bits of FP reg across call"
+#~ msgstr "Bya Kwambukiranya"
+
+#, fuzzy
+#~ msgid "Enable parallel instructions"
+#~ msgstr "Biteganye Amabwiriza"
+
+#, fuzzy
+#~ msgid "Disable parallel instructions"
+#~ msgstr "Biteganye Amabwiriza"
+
+#, fuzzy
+#~ msgid "Enable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Na Amabwiriza"
+
+#, fuzzy
+#~ msgid "Disable MPY||ADD and MPY||SUB instructions"
+#~ msgstr "Na Amabwiriza"
+
+#, fuzzy
+#~ msgid "Assume that pointers may be aliased"
+#~ msgstr "Gicurasi"
+
+#, fuzzy
+#~ msgid "Assume that pointers not aliased"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Specify maximum number of iterations for RPTS"
+#~ msgstr "Kinini Umubare Bya Amasubiramo kugirango"
+
+#, fuzzy
+#~ msgid "Select CPU to generate code for"
+#~ msgstr "Kuri ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "unexpected index-type in cris_print_index"
+#~ msgstr "Umubarendanga Ubwoko in"
+
+#, fuzzy
+#~ msgid "unexpected base-type in cris_print_base"
+#~ msgstr "SHINGIRO Ubwoko in"
+
+#, fuzzy
+#~ msgid "stackframe too big: %d bytes"
+#~ msgstr "Bayite"
+
+#, fuzzy
+#~ msgid "allocated but unused delay list in epilogue"
+#~ msgstr "Kidakoreshwa Gutinda Urutonde in"
+
+#, fuzzy
+#~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return"
+#~ msgstr "Umumaro Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'b' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'v' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'P' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'p' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'z' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'H' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "bad register"
+#~ msgstr "Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "invalid operand for 'e' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'm' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'A' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'D' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand for 'T' modifier"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand modifier letter"
+#~ msgstr "Sibyo Ibaruwa..."
+
+#, fuzzy
+#~ msgid "internal error: bad register: %d"
+#~ msgstr "By'imbere Ikosa Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "unrecognized address"
+#~ msgstr "Aderesi"
+
+#, fuzzy
+#~ msgid "internal error: sideeffect-insn affecting main effect"
+#~ msgstr "By'imbere Ikosa INGARUKA"
+
+#, fuzzy
+#~ msgid "internal error: cris_side_effect_mode_ok with bad operands"
+#~ msgstr "By'imbere Ikosa Na:"
+
+#, fuzzy
+#~ msgid "unrecognized supposed constant in cris_global_pic_symbol"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "-max-stackframe=%d is not usable, not between 0 and %d"
+#~ msgstr "-KININI ni OYA OYA hagati 0 Na"
+
+#, fuzzy
+#~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
+#~ msgstr "Kitazwi Verisiyo in Werurwe Cyangwa"
+
+#, fuzzy
+#~ msgid "unknown CRIS cpu version specification in -mtune= : %s"
+#~ msgstr "Kitazwi CPU Verisiyo in"
+
+#, fuzzy
+#~ msgid "-fPIC and -fpic are not supported in this configuration"
+#~ msgstr "-Na OYA in iyi Iboneza"
+
+#, fuzzy
+#~ msgid "that particular -g option is invalid with -maout and -melinux"
+#~ msgstr "g Ihitamo ni Sibyo Na: Na"
+
+#, fuzzy
+#~ msgid "unexpected side-effects in address"
+#~ msgstr "Ingaruka in Aderesi"
+
+#, fuzzy
+#~ msgid "unexpected PIC symbol"
+#~ msgstr "IKIMENYETSO"
+
+#, fuzzy
+#~ msgid "PIC register isn't set up"
+#~ msgstr "Kwiyandikisha si Gushyiraho Hejuru"
+
+#, fuzzy
+#~ msgid "unexpected address expression"
+#~ msgstr "Aderesi imvugo"
+
+#, fuzzy
+#~ msgid "emitting PIC operand, but PIC register isn't set up"
+#~ msgstr "Kwiyandikisha si Gushyiraho Hejuru"
+
+#, fuzzy
+#~ msgid "unexpected NOTE as addr_const:"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "Compile for the MMU-less Etrax 100-based elinux system"
+#~ msgstr "kugirango i Birutwa 100 Sisitemu"
+
+#, fuzzy
+#~ msgid "For elinux, request a specified stack-size for this program"
+#~ msgstr "Kubaza... a Ingano kugirango iyi Porogaramu"
+
+#, fuzzy
+#~ msgid "Compile for ETRAX 4 (CRIS v3)"
+#~ msgstr "kugirango 4."
+
+#, fuzzy
+#~ msgid "Compile for ETRAX 100 (CRIS v8)"
+#~ msgstr "kugirango 100"
+
+#, fuzzy
+#~ msgid "Emit verbose debug information in assembly code"
+#~ msgstr "Kosora amakosa Ibisobanuro in ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not use condition codes from normal instructions"
+#~ msgstr "OYA Gukoresha Ibisabwa Bivuye Bisanzwe Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not emit addressing modes with side-effect assignment"
+#~ msgstr "OYA Kwohereza Na: INGARUKA Igenera"
+
+#, fuzzy
+#~ msgid "Do not tune stack alignment"
+#~ msgstr "OYA Itunganya"
+
+#, fuzzy
+#~ msgid "Do not tune writable data alignment"
+#~ msgstr "OYA Ibyatanzwe Itunganya"
+
+#, fuzzy
+#~ msgid "Do not tune code and read-only data alignment"
+#~ msgstr "OYA ITEGEKONGENGA Na Gusoma Ibyatanzwe Itunganya"
+
+#, fuzzy
+#~ msgid "Align code and data to 32 bits"
+#~ msgstr "ITEGEKONGENGA Na Ibyatanzwe Kuri"
+
+#, fuzzy
+#~ msgid "Don't align items in code or data"
+#~ msgstr "Gutondeka in ITEGEKONGENGA Cyangwa Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "Do not emit function prologue or epilogue"
+#~ msgstr "OYA Umumaro Cyangwa"
+
+#, fuzzy
+#~ msgid "Use the most feature-enabling options allowed by other options"
+#~ msgstr "i Amahitamo ku Ikindi Amahitamo"
+
+#, fuzzy
+#~ msgid "Override -mbest-lib-options"
+#~ msgstr "Amahitamo"
+
+#, fuzzy
+#~ msgid "Generate code for the specified chip or CPU version"
+#~ msgstr "ITEGEKONGENGA kugirango i Cyangwa Verisiyo"
+
+#, fuzzy
+#~ msgid "Tune alignment for the specified chip or CPU version"
+#~ msgstr "Itunganya kugirango i Cyangwa Verisiyo"
+
+#, fuzzy
+#~ msgid "Warn when a stackframe is larger than the specified size"
+#~ msgstr "Ryari: a ni Kinini i Ingano"
+
+#, fuzzy
+#~ msgid "no FUNCTION_PROFILER for CRIS"
+#~ msgstr "Oya kugirango"
+
+#, fuzzy
+#~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
+#~ msgstr "Na: Na OYA Gukoresha Indango"
+
+#, fuzzy
+#~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s"
+#~ msgstr "kugirango Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "bad insn to d30v_print_operand_address:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to d30v_print_operand_memory_reference:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to d30v_print_operand, 'f' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to d30v_print_operand, 'A' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to d30v_print_operand, 'M' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to print_operand, 'F' or 'T' modifier:"
+#~ msgstr "Kuri Cyangwa"
+
+#, fuzzy
+#~ msgid "bad insn to print_operand, 'B' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to print_operand, 'E' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to print_operand, 'R' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn to print_operand, 's' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "bad insn in d30v_print_operand, 0 case"
+#~ msgstr "in 0"
+
+#, fuzzy
+#~ msgid "bad call to d30v_move_2words"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Enable use of conditional move instructions"
+#~ msgstr "Gukoresha Bya Kwimura Amabwiriza"
+
+#, fuzzy
+#~ msgid "Disable use of conditional move instructions"
+#~ msgstr "Gukoresha Bya Kwimura Amabwiriza"
+
+#, fuzzy
+#~ msgid "Debug argument support in compiler"
+#~ msgstr "Gushigikira in"
+
+#, fuzzy
+#~ msgid "Debug stack support in compiler"
+#~ msgstr "Gushigikira in"
+
+#, fuzzy
+#~ msgid "Debug memory address support in compiler"
+#~ msgstr "Ububiko Aderesi Gushigikira in"
+
+#, fuzzy
+#~ msgid "Make adjacent short instructions parallel if possible"
+#~ msgstr "Amabwiriza Biteganye NIBA"
+
+#, fuzzy
+#~ msgid "Do not make adjacent short instructions parallel"
+#~ msgstr "OYA Ubwoko Amabwiriza Biteganye"
+
+#, fuzzy
+#~ msgid "Link programs/data to be in external memory by default"
+#~ msgstr "Porogaramu Ibyatanzwe Kuri in external Ububiko ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Link programs/data to be in onchip memory by default"
+#~ msgstr "Porogaramu Ibyatanzwe Kuri in Ububiko ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Change the branch costs within the compiler"
+#~ msgstr "i muri i"
+
+#, fuzzy
+#~ msgid "Change the threshold for conversion to conditional execution"
+#~ msgstr "i kugirango Ihindurangero Kuri"
+
+#, fuzzy
+#~ msgid "stack size > 32k"
+#~ msgstr "Ingano"
+
+#, fuzzy
+#~ msgid "invalid addressing mode"
+#~ msgstr "Sibyo Kwohereza Ubwoko"
+
+#, fuzzy
+#~ msgid "bad register extension code"
+#~ msgstr "Kwiyandikisha Umugereka ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid offset in ybase addressing"
+#~ msgstr "Sibyo Nta- boneza in Kwohereza"
+
+#, fuzzy
+#~ msgid "invalid register in ybase addressing"
+#~ msgstr "Sibyo Kwiyandikisha in Kwohereza"
+
+#, fuzzy
+#~ msgid "invalid shift operator in emit_1600_core_shift"
+#~ msgstr "Sibyo Gusunika Mukoresha in"
+
+#, fuzzy
+#~ msgid "invalid mode for gen_tst_reg"
+#~ msgstr "Sibyo Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "invalid mode for integer comparison in gen_compare_reg"
+#~ msgstr "Sibyo Ubwoko kugirango Umubare wuzuye in"
+
+#, fuzzy
+#~ msgid "Pass parameters in registers (default)"
+#~ msgstr "Ibigenga in Mburabuzi"
+
+#, fuzzy
+#~ msgid "Don't pass parameters in registers"
+#~ msgstr "Ibigenga in"
+
+#, fuzzy
+#~ msgid "Generate code for near calls"
+#~ msgstr "ITEGEKONGENGA kugirango Amahamagara:"
+
+#, fuzzy
+#~ msgid "Don't generate code for near calls"
+#~ msgstr "ITEGEKONGENGA kugirango Amahamagara:"
+
+#, fuzzy
+#~ msgid "Generate code for near jumps"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Don't generate code for near jumps"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for a bit-manipulation unit"
+#~ msgstr "ITEGEKONGENGA kugirango a Igice:"
+
+#, fuzzy
+#~ msgid "Don't generate code for a bit-manipulation unit"
+#~ msgstr "ITEGEKONGENGA kugirango a Igice:"
+
+#, fuzzy
+#~ msgid "Generate code for memory map1"
+#~ msgstr "ITEGEKONGENGA kugirango Ububiko"
+
+#, fuzzy
+#~ msgid "Generate code for memory map2"
+#~ msgstr "ITEGEKONGENGA kugirango Ububiko"
+
+#, fuzzy
+#~ msgid "Generate code for memory map3"
+#~ msgstr "ITEGEKONGENGA kugirango Ububiko"
+
+#, fuzzy
+#~ msgid "Generate code for memory map4"
+#~ msgstr "ITEGEKONGENGA kugirango Ububiko"
+
+#, fuzzy
+#~ msgid "Ouput extra code for initialized data"
+#~ msgstr "Birenga ITEGEKONGENGA kugirango Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "Don't let reg. allocator use ybase registers"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Output extra debug info in Luxworks environment"
+#~ msgstr "Birenga Kosora amakosa Ibisobanuro in"
+
+#, fuzzy
+#~ msgid "Save temp. files in Luxworks environment"
+#~ msgstr "Kubika Idosiye in"
+
+#, fuzzy
+#~ msgid "Specify alternate name for text section"
+#~ msgstr "Izina: kugirango Umwandiko Icyiciro"
+
+#, fuzzy
+#~ msgid "Specify alternate name for data section"
+#~ msgstr "Izina: kugirango Ibyatanzwe Icyiciro"
+
+#, fuzzy
+#~ msgid "Specify alternate name for bss section"
+#~ msgstr "Izina: kugirango Icyiciro"
+
+#, fuzzy
+#~ msgid "Specify alternate name for constant section"
+#~ msgstr "Izina: kugirango Icyiciro"
+
+#, fuzzy
+#~ msgid "Specify alternate name for dsp16xx chip"
+#~ msgstr "Izina: kugirango"
+
+#, fuzzy
+#~ msgid "profiling not implemented yet"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "trampolines not yet implemented"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand_address: unhandled address"
+#~ msgstr "Aderesi"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: unrecognized %%p code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: unrecognized %%b code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: unrecognized %%B code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: invalid operand to %%A code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: invalid %%x code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: invalid %%F code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "fr30_print_operand: unknown code"
+#~ msgstr "Kitazwi ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Assume small address space"
+#~ msgstr "Gitoya Aderesi Umwanya"
+
+#, fuzzy
+#~ msgid "Unknown cpu: -mcpu=%s"
+#~ msgstr "CPU"
+
+#, fuzzy
+#~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)"
+#~ msgstr "-Na Na g 2."
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand_address:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad register to frv_print_operand_memory_reference_reg:"
+#~ msgstr "Kwiyandikisha Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand_memory_reference:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn in frv_print_operand, bad const_double"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'C' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'c' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'e' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'F' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'f' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'L' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, 'O' modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn to frv_print_operand, P modifier:"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Bad insn in frv_print_operand, z case"
+#~ msgstr "in Z"
+
+#, fuzzy
+#~ msgid "Bad insn in frv_print_operand, 0 case"
+#~ msgstr "in 0"
+
+#, fuzzy
+#~ msgid "frv_print_operand: unknown code"
+#~ msgstr "Kitazwi ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "accumulator is not a constant integer"
+#~ msgstr "ni OYA a Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "accumulator number is out of bounds"
+#~ msgstr "Umubare ni Inyuma Bya"
+
+#, fuzzy
+#~ msgid "inappropriate accumulator for `%s'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "`%s' expects a constant argument"
+#~ msgstr "`%s'a"
+
+#, fuzzy
+#~ msgid "constant argument out of range for `%s'"
+#~ msgstr "Inyuma Bya Urutonde kugirango"
+
+#, fuzzy
+#~ msgid "media functions are not available unless -mmedia is used"
+#~ msgstr "Ibitangazamakuru Imimaro OYA Bihari ni"
+
+#, fuzzy
+#~ msgid "this media function is only available on the fr500"
+#~ msgstr "iyi Ibitangazamakuru Umumaro ni Bihari ku i"
+
+#, fuzzy
+#~ msgid "this media function is only available on the fr400"
+#~ msgstr "iyi Ibitangazamakuru Umumaro ni Bihari ku i"
+
+#, fuzzy
+#~ msgid "-ms2600 is used without -ms"
+#~ msgstr "-ni"
+
+#, fuzzy
+#~ msgid "-mn is used without -mh or -ms"
+#~ msgstr "-ni Cyangwa"
+
+#, fuzzy
+#~ msgid "Generate H8S code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not generate H8S code"
+#~ msgstr "OYA ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate H8S/2600 code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not generate H8S/2600 code"
+#~ msgstr "OYA ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use registers for argument passing"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Do not use registers for argument passing"
+#~ msgstr "OYA Gukoresha kugirango"
+
+#, fuzzy
+#~ msgid "Consider access to byte sized memory slow"
+#~ msgstr "Kuri Bayite Ububiko Buhoro"
+
+#, fuzzy
+#~ msgid "Generate H8/300H code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Enable the normal mode"
+#~ msgstr "i Bisanzwe Ubwoko"
+
+#, fuzzy
+#~ msgid "Do not generate H8/300H code"
+#~ msgstr "OYA ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use H8/300 alignment rules"
+#~ msgstr "300 Itunganya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma map"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "real name is too long - alias ignored"
+#~ msgstr "Izina: ni Irihimbano"
+
+#, fuzzy
+#~ msgid "alias name is too long - alias ignored"
+#~ msgstr "Irihimbano Izina: ni Irihimbano"
+
+#, fuzzy
+#~ msgid "internal error--no jump follows compare:"
+#~ msgstr "By'imbere Ikosa Oya Simbuka Kugereranya#"
+
+#, fuzzy
+#~ msgid "Generate char instructions"
+#~ msgstr "INYUGUTI Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not generate char instructions"
+#~ msgstr "OYA INYUGUTI Amabwiriza"
+
+#, fuzzy
+#~ msgid "code model %s not supported in PIC mode"
+#~ msgstr "ITEGEKONGENGA Urugero OYA in Ubwoko"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mcmodel= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -masm= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "code model `%s' not supported in the %s bit mode"
+#~ msgstr "ITEGEKONGENGA Urugero OYA in i Ubwoko"
+
+#, fuzzy
+#~ msgid "code model `large' not supported yet"
+#~ msgstr "ITEGEKONGENGA Urugero OYA"
+
+#, fuzzy
+#~ msgid "%i-bit mode not compiled in"
+#~ msgstr "%i-bitUbwoko OYA in"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -march= switch"
+#~ msgstr "Agaciro kugirango Werurwe Hindura"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mcpu= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "-mregparm=%d is not between 0 and %d"
+#~ msgstr "-ni OYA hagati 0 Na"
+
+#, fuzzy
+#~ msgid "-malign-loops is obsolete, use -falign-loops"
+#~ msgstr "-ni Gukoresha"
+
+#, fuzzy
+#~ msgid "-malign-loops=%d is not between 0 and %d"
+#~ msgstr "-ni OYA hagati 0 Na"
+
+#, fuzzy
+#~ msgid "-malign-jumps is obsolete, use -falign-jumps"
+#~ msgstr "-ni Gukoresha"
+
+#, fuzzy
+#~ msgid "-malign-functions is obsolete, use -falign-functions"
+#~ msgstr "-Imimaro ni Gukoresha Imimaro"
+
+#, fuzzy
+#~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
+#~ msgstr "-ni OYA hagati Na 12"
+
+#, fuzzy
+#~ msgid "-mbranch-cost=%d is not between 0 and 5"
+#~ msgstr "-Ikiguzi ni OYA hagati 0 Na 5"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mtls-dialect= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "-malign-double makes no sense in the 64bit mode"
+#~ msgstr "-MAHARAKUBIRI Oya in i Ubwoko"
+
+#, fuzzy
+#~ msgid "-mrtd calling convention not supported in the 64bit mode"
+#~ msgstr "-OYA in i Ubwoko"
+
+#, fuzzy
+#~ msgid "SSE instruction set disabled, using 387 arithmetics"
+#~ msgstr "Gushyiraho Yahagaritswe ikoresha"
+
+#, fuzzy
+#~ msgid "387 instruction set disabled, using SSE arithmetics"
+#~ msgstr "Gushyiraho Yahagaritswe ikoresha"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mfpmath= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "`%s' attribute requires an integer constant argument"
+#~ msgstr "`%s'Ikiranga Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "argument to `%s' attribute larger than %d"
+#~ msgstr "Kuri Ikiranga Kinini"
+
+#, fuzzy
+#~ msgid "invalid UNSPEC as operand"
+#~ msgstr "Sibyo Nka"
+
+#, fuzzy
+#~ msgid "extended registers have no high halves"
+#~ msgstr "Byongerewe... Oya kirekire"
+
+#, fuzzy
+#~ msgid "unsupported operand size for extended register"
+#~ msgstr "Ingano kugirango Byongerewe... Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+#~ msgstr "ni a a Ibisabwa ITEGEKONGENGA Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand code `%c'"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid constraints for operand"
+#~ msgstr "Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "unknown insn mode"
+#~ msgstr "Kitazwi Ubwoko"
+
+#, fuzzy
+#~ msgid "shift must be an immediate"
+#~ msgstr "Gusunika"
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to variables"
+#~ msgstr "`%s'Ikiranga Kuri Ibihinduka"
+
+#, fuzzy
+#~ msgid "`%s' declared as both exported to and imported from a DLL"
+#~ msgstr "`%s'Nka Byombi Kuri Na cyavuye ahandi/ cyatumijwe Bivuye a"
+
+#, fuzzy
+#~ msgid "Use the Cygwin interface"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Use the Mingw32 interface"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Create GUI application"
+#~ msgstr "Porogaramu"
+
+#, fuzzy
+#~ msgid "Don't set Windows defines"
+#~ msgstr "Gushyiraho"
+
+#, fuzzy
+#~ msgid "Create console application"
+#~ msgstr "Porogaramu"
+
+#, fuzzy
+#~ msgid "Generate code for a DLL"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Ignore dllimport for functions"
+#~ msgstr "kugirango Imimaro"
+
+#, fuzzy
+#~ msgid "Use Mingw-specific thread support"
+#~ msgstr "Urudodo Gushigikira"
+
+#, fuzzy
+#~ msgid "-f%s ignored for target (all code is position independent)"
+#~ msgstr "-F kugirango Intego Byose ITEGEKONGENGA ni Ibirindiro"
+
+#, fuzzy
+#~ msgid "-mbnu210 is ignored (option is obsolete)"
+#~ msgstr "-ni Ihitamo ni"
+
+#, fuzzy
+#~ msgid "Use normal calling convention"
+#~ msgstr "Bisanzwe"
+
+#, fuzzy
+#~ msgid "Align some doubles on dword boundary"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Align doubles on word boundary"
+#~ msgstr "ku ijambo"
+
+#, fuzzy
+#~ msgid "Uninitialized locals in .bss"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Uninitialized locals in .data"
+#~ msgstr "in Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "Use IEEE math for fp comparisons"
+#~ msgstr "Imibare kugirango"
+
+#, fuzzy
+#~ msgid "Do not use IEEE math for fp comparisons"
+#~ msgstr "OYA Gukoresha Imibare kugirango"
+
+#, fuzzy
+#~ msgid "Return values of functions in FPU registers"
+#~ msgstr "Uduciro Bya Imimaro in"
+
+#, fuzzy
+#~ msgid "Do not return values of functions in FPU registers"
+#~ msgstr "OYA Garuka Uduciro Bya Imimaro in"
+
+#, fuzzy
+#~ msgid "Do not generate sin, cos, sqrt for FPU"
+#~ msgstr "OYA SIN COS SQRT kugirango"
+
+#, fuzzy
+#~ msgid "Generate sin, cos, sqrt for FPU"
+#~ msgstr "SIN COS SQRT kugirango"
+
+#, fuzzy
+#~ msgid "Omit the frame pointer in leaf functions"
+#~ msgstr "i Ikadiri Mweretsi in Imimaro"
+
+#, fuzzy
+#~ msgid "Align destination of the string operations"
+#~ msgstr "Ishyika Bya i Ikurikiranyanyuguti Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Do not align destination of the string operations"
+#~ msgstr "OYA Gutondeka Ishyika Bya i Ikurikiranyanyuguti Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Inline all known string operations"
+#~ msgstr "Byose Ikurikiranyanyuguti Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Do not inline all known string operations"
+#~ msgstr "OYA Mumurongo Byose Ikurikiranyanyuguti Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Use push instructions to save outgoing arguments"
+#~ msgstr "Amabwiriza Kuri Kubika ingingo"
+
+#, fuzzy
+#~ msgid "Do not use push instructions to save outgoing arguments"
+#~ msgstr "OYA Gukoresha Amabwiriza Kuri Kubika ingingo"
+
+#, fuzzy
+#~ msgid "Support MMX built-in functions"
+#~ msgstr "in Imimaro"
+
+#, fuzzy
+#~ msgid "Do not support MMX built-in functions"
+#~ msgstr "OYA Gushigikira in Imimaro"
+
+#, fuzzy
+#~ msgid "Support 3DNow! built-in functions"
+#~ msgstr "in Imimaro"
+
+#, fuzzy
+#~ msgid "Do not support 3DNow! built-in functions"
+#~ msgstr "OYA Gushigikira in Imimaro"
+
+#, fuzzy
+#~ msgid "Support MMX and SSE built-in functions and code generation"
+#~ msgstr "Na in Imimaro Na ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not support MMX and SSE built-in functions and code generation"
+#~ msgstr "OYA Gushigikira Na in Imimaro Na ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "Na in Imimaro Na ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation"
+#~ msgstr "OYA Gushigikira Na in Imimaro Na ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "sizeof(long double) is 16"
+#~ msgstr "MAHARAKUBIRI ni"
+
+#, fuzzy
+#~ msgid "sizeof(long double) is 12"
+#~ msgstr "MAHARAKUBIRI ni 12"
+
+#, fuzzy
+#~ msgid "Generate 64bit x86-64 code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate 32bit i386 code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use red-zone in the x86-64 code"
+#~ msgstr "Umutuku in i ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not use red-zone in the x86-64 code"
+#~ msgstr "OYA Gukoresha Umutuku in i ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Schedule code for given CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate floating point mathematics using given instruction set"
+#~ msgstr "Bihindagurika Akadomo ikoresha Gushyiraho"
+
+#, fuzzy
+#~ msgid "Generate code for given CPU"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Number of registers used to pass integer arguments"
+#~ msgstr "Bya Kuri Umubare wuzuye ingingo"
+
+#, fuzzy
+#~ msgid "Loop code aligned to this power of 2"
+#~ msgstr "ITEGEKONGENGA Kuri iyi UMWIKUBE Bya 2."
+
+#, fuzzy
+#~ msgid "Jump targets are aligned to this power of 2"
+#~ msgstr "Kuri iyi UMWIKUBE Bya 2."
+
+#, fuzzy
+#~ msgid "Function starts are aligned to this power of 2"
+#~ msgstr "Kuri iyi UMWIKUBE Bya 2."
+
+#, fuzzy
+#~ msgid "Attempt to keep stack aligned to this power of 2"
+#~ msgstr "Kuri Gumana: Kuri iyi UMWIKUBE Bya 2."
+
+#, fuzzy
+#~ msgid "Branches are this expensive (1-5, arbitrary units)"
+#~ msgstr "iyi 1. 5"
+
+#, fuzzy
+#~ msgid "Use given x86-64 code model"
+#~ msgstr "ITEGEKONGENGA Urugero"
+
+#, fuzzy
+#~ msgid "Use given thread-local storage dialect"
+#~ msgstr "Urudodo"
+
+#, fuzzy
+#~ msgid "Generate ELF output"
+#~ msgstr "Ibisohoka"
+
+#, fuzzy
+#~ msgid "environment variable DJGPP not defined"
+#~ msgstr "IMPINDURAGACIRO OYA"
+
+#, fuzzy
+#~ msgid "environment variable DJGPP points to missing file '%s'"
+#~ msgstr "IMPINDURAGACIRO Utudomo Kuri Ibuze IDOSIYE"
+
+#, fuzzy
+#~ msgid "environment variable DJGPP points to corrupt file '%s'"
+#~ msgstr "IMPINDURAGACIRO Utudomo Kuri IDOSIYE"
+
+#, fuzzy
+#~ msgid "sorry, not implemented: #pragma align NAME=SIZE"
+#~ msgstr "OYA Gutondeka"
+
+#, fuzzy
+#~ msgid "malformed #pragma align - ignored"
+#~ msgstr "Gutondeka"
+
+#, fuzzy
+#~ msgid "sorry, not implemented: #pragma noalign NAME"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "conflicting architectures defined - using C series"
+#~ msgstr "ikoresha C Ibyiciro"
+
+#, fuzzy
+#~ msgid "conflicting architectures defined - using K series"
+#~ msgstr "ikoresha Ibyiciro"
+
+#, fuzzy
+#~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0"
+#~ msgstr "0 Na 0 ikoresha 0"
+
+#, fuzzy
+#~ msgid "stack limit expression is not supported"
+#~ msgstr "imvugo ni OYA"
+
+#, fuzzy
+#~ msgid "Generate SA code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate SB code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate KA code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate KB code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate JA code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate JD code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate JF code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "generate RP code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate MC code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate CA code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate CF code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use software floating point"
+#~ msgstr "Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Use alternate leaf function entries"
+#~ msgstr "Umumaro Ibyinjijwe"
+
+#, fuzzy
+#~ msgid "Do not use alternate leaf function entries"
+#~ msgstr "OYA Gukoresha Umumaro Ibyinjijwe"
+
+#, fuzzy
+#~ msgid "Do not perform tail call optimization"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Use complex addressing modes"
+#~ msgstr "ITSINDA RY'IMIBARE C Kwohereza"
+
+#, fuzzy
+#~ msgid "Do not use complex addressing modes"
+#~ msgstr "OYA Gukoresha ITSINDA RY'IMIBARE C Kwohereza"
+
+#, fuzzy
+#~ msgid "Align code to 8 byte boundary"
+#~ msgstr "ITEGEKONGENGA Kuri 8 Bayite"
+
+#, fuzzy
+#~ msgid "Do not align code to 8 byte boundary"
+#~ msgstr "OYA Gutondeka ITEGEKONGENGA Kuri 8 Bayite"
+
+#, fuzzy
+#~ msgid "Enable compatibility with iC960 v2.0"
+#~ msgstr "Bihuye neza Na: 0"
+
+#, fuzzy
+#~ msgid "Enable compatibility with iC960 v3.0"
+#~ msgstr "Bihuye neza Na: 0"
+
+#, fuzzy
+#~ msgid "Enable compatibility with ic960 assembler"
+#~ msgstr "Bihuye neza Na:"
+
+#, fuzzy
+#~ msgid "Do not permit unaligned accesses"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Layout types like Intel's v1.3 gcc"
+#~ msgstr "nka 3."
+
+#, fuzzy
+#~ msgid "Do not layout types like Intel's v1.3 gcc"
+#~ msgstr "OYA Imigaragarire nka 3."
+
+#, fuzzy
+#~ msgid "Do not enable linker relaxation"
+#~ msgstr "OYA Gushoboza"
+
+#, fuzzy
+#~ msgid "ia64_print_operand: unknown code"
+#~ msgstr "Kitazwi ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "value of -mfixed-range must have form REG1-REG2"
+#~ msgstr "Agaciro Bya Urutonde Ifishi"
+
+#, fuzzy
+#~ msgid "%s-%s is an empty range"
+#~ msgstr "%s-%sni ubusa Urutonde"
+
+#, fuzzy
+#~ msgid "cannot optimize floating point division for both latency and throughput"
+#~ msgstr "Kugeza ku ndunduro Bihindagurika Akadomo kugirango Byombi Na"
+
+#, fuzzy
+#~ msgid "cannot optimize integer division for both latency and throughput"
+#~ msgstr "Kugeza ku ndunduro Umubare wuzuye kugirango Byombi Na"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mtls-size= switch"
+#~ msgstr "Agaciro kugirango Ingano Hindura"
+
+#, fuzzy
+#~ msgid "Generate big endian code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate little endian code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate code for GNU as"
+#~ msgstr "ITEGEKONGENGA kugirango Nka"
+
+#, fuzzy
+#~ msgid "Generate code for Intel as"
+#~ msgstr "ITEGEKONGENGA kugirango Nka"
+
+#, fuzzy
+#~ msgid "Generate code for GNU ld"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for Intel ld"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code without GP reg"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Emit stop bits before and after volatile extended asms"
+#~ msgstr "Guhagarara Mbere Na Nyuma Byongerewe..."
+
+#, fuzzy
+#~ msgid "Don't emit stop bits before and after volatile extended asms"
+#~ msgstr "Guhagarara Mbere Na Nyuma Byongerewe..."
+
+#, fuzzy
+#~ msgid "Emit code for Itanium (TM) processor B step"
+#~ msgstr "ITEGEKONGENGA kugirango Intera"
+
+#, fuzzy
+#~ msgid "Use in/loc/out register names"
+#~ msgstr "in Inyuma Kwiyandikisha Amazina"
+
+#, fuzzy
+#~ msgid "Disable use of sdata/scommon/sbss"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Enable use of sdata/scommon/sbss"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "gp is constant (but save/restore gp on indirect calls)"
+#~ msgstr "ni Kubika Kugarura ku BUZIGUYE Amahamagara:"
+
+#, fuzzy
+#~ msgid "Generate self-relocatable code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate inline floating point division, optimize for latency"
+#~ msgstr "Mumurongo Bihindagurika Akadomo Kugeza ku ndunduro kugirango"
+
+#, fuzzy
+#~ msgid "Generate inline floating point division, optimize for throughput"
+#~ msgstr "Mumurongo Bihindagurika Akadomo Kugeza ku ndunduro kugirango"
+
+#, fuzzy
+#~ msgid "Generate inline integer division, optimize for latency"
+#~ msgstr "Mumurongo Umubare wuzuye Kugeza ku ndunduro kugirango"
+
+#, fuzzy
+#~ msgid "Generate inline integer division, optimize for throughput"
+#~ msgstr "Mumurongo Umubare wuzuye Kugeza ku ndunduro kugirango"
+
+#, fuzzy
+#~ msgid "Enable Dwarf 2 line debug info via GNU as"
+#~ msgstr "2. Umurongo Kosora amakosa Ibisobanuro Biturutse Nka"
+
+#, fuzzy
+#~ msgid "Disable Dwarf 2 line debug info via GNU as"
+#~ msgstr "2. Umurongo Kosora amakosa Ibisobanuro Biturutse Nka"
+
+#, fuzzy
+#~ msgid "Specify range of registers to make fixed"
+#~ msgstr "Urutonde Bya Kuri Ubwoko BIHAMYE"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mmodel switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -msdata switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "invalid argument of `%s' attribute"
+#~ msgstr "Sibyo Bya Ikiranga"
+
+#, fuzzy
+#~ msgid "const objects cannot go in .sdata/.sbss"
+#~ msgstr "Ibintu Gyayo in"
+
+#, fuzzy
+#~ msgid "invalid operand to %%s code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand to %%p code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "bad insn for 'A'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "invalid operand to %%T/%%B code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid operand to %%N code"
+#~ msgstr "Sibyo Kuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "pre-increment address is not a register"
+#~ msgstr "Byahawe imiterere mbere Iyongeragaciro Aderesi ni OYA a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "pre-decrement address is not a register"
+#~ msgstr "Byahawe imiterere mbere Aderesi ni OYA a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "post-increment address is not a register"
+#~ msgstr "Iposita Iyongeragaciro Aderesi ni OYA a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "bad address"
+#~ msgstr "Aderesi"
+
+#, fuzzy
+#~ msgid "lo_sum not of register"
+#~ msgstr "OYA Bya Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Display compile time statistics"
+#~ msgstr "Gukusanya Igihe Sitatisitiki"
+
+#, fuzzy
+#~ msgid "Align all loops to 32 byte boundary"
+#~ msgstr "Byose Kuri Bayite"
+
+#, fuzzy
+#~ msgid "Only issue one instruction per cycle"
+#~ msgstr "Itangwa Uruziga"
+
+#, fuzzy
+#~ msgid "Prefer branches over conditional execution"
+#~ msgstr "KURI"
+
+#, fuzzy
+#~ msgid "Code size: small, medium or large"
+#~ msgstr "Ingano Gitoya biringaniye Cyangwa Binini"
+
+#, fuzzy
+#~ msgid "Small data area: none, sdata, use"
+#~ msgstr "Ibyatanzwe Ubuso Ntacyo Gukoresha"
+
+#, fuzzy
+#~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
+#~ msgstr "-F kugirango OYA"
+
+#, fuzzy
+#~ msgid "`trap' and `far' attributes are not compatible, ignoring `far'"
+#~ msgstr "`Na Ibiranga OYA"
+
+#, fuzzy
+#~ msgid "`trap' attribute is already used"
+#~ msgstr "`Ikiranga ni"
+
+#, fuzzy
+#~ msgid "move insn not handled"
+#~ msgstr "Kwimura OYA"
+
+#, fuzzy
+#~ msgid "invalid register in the move instruction"
+#~ msgstr "Sibyo Kwiyandikisha in i Kwimura"
+
+#, fuzzy
+#~ msgid "invalid operand in the instruction"
+#~ msgstr "Sibyo in i"
+
+#, fuzzy
+#~ msgid "invalid register in the instruction"
+#~ msgstr "Sibyo Kwiyandikisha in i"
+
+#, fuzzy
+#~ msgid "operand 1 must be a hard register"
+#~ msgstr "1. a Ikomeye Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "invalid rotate insn"
+#~ msgstr "Sibyo Kuzerutsa"
+
+#, fuzzy
+#~ msgid "registers IX, IY and Z used in the same INSN"
+#~ msgstr "Na in i"
+
+#, fuzzy
+#~ msgid "cannot do z-register replacement"
+#~ msgstr "Z Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "invalid Z register replacement for insn"
+#~ msgstr "Sibyo Kwiyandikisha kugirango"
+
+#, fuzzy
+#~ msgid "Compile with 16-bit integer mode"
+#~ msgstr "Na: Umubare wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "Compile with 32-bit integer mode"
+#~ msgstr "Na: Umubare wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "Auto pre/post decrement increment allowed"
+#~ msgstr "Byahawe imiterere mbere Iposita Iyongeragaciro"
+
+#, fuzzy
+#~ msgid "Auto pre/post decrement increment not allowed"
+#~ msgstr "Byahawe imiterere mbere Iposita Iyongeragaciro OYA"
+
+#, fuzzy
+#~ msgid "Min/max instructions allowed"
+#~ msgstr "KININI Amabwiriza"
+
+#, fuzzy
+#~ msgid "Min/max instructions not allowed"
+#~ msgstr "KININI Amabwiriza OYA"
+
+#, fuzzy
+#~ msgid "Use call and rtc for function calls and returns"
+#~ msgstr "Na kugirango Umumaro Amahamagara: Na"
+
+#, fuzzy
+#~ msgid "Use jsr and rts for function calls and returns"
+#~ msgstr "Na kugirango Umumaro Amahamagara: Na"
+
+#, fuzzy
+#~ msgid "Do not use direct addressing mode for soft registers"
+#~ msgstr "OYA Gukoresha Kwohereza Ubwoko kugirango Yoroshe"
+
+#, fuzzy
+#~ msgid "Use direct addressing mode for soft registers"
+#~ msgstr "Kwohereza Ubwoko kugirango Yoroshe"
+
+#, fuzzy
+#~ msgid "Compile for a 68HC11"
+#~ msgstr "kugirango a"
+
+#, fuzzy
+#~ msgid "Compile for a 68HC12"
+#~ msgstr "kugirango a"
+
+#, fuzzy
+#~ msgid "Compile for a 68HCS12"
+#~ msgstr "kugirango a"
+
+#, fuzzy
+#~ msgid "Specify the register allocation order"
+#~ msgstr "i Kwiyandikisha Itondekanya"
+
+#, fuzzy
+#~ msgid "Indicate the number of soft registers available"
+#~ msgstr "i Umubare Bya Yoroshe Bihari"
+
+#, fuzzy
+#~ msgid "-malign-loops=%d is not between 1 and %d"
+#~ msgstr "-ni OYA hagati 1. Na"
+
+#, fuzzy
+#~ msgid "-malign-jumps=%d is not between 1 and %d"
+#~ msgstr "-ni OYA hagati 1. Na"
+
+#, fuzzy
+#~ msgid "-malign-functions=%d is not between 1 and %d"
+#~ msgstr "-Imimaro ni OYA hagati 1. Na"
+
+#, fuzzy
+#~ msgid "-fPIC is not currently supported on the 68000 or 68010\n"
+#~ msgstr "-ni OYA ku i Cyangwa"
+
+#, fuzzy
+#~ msgid "Generate code for a 68020"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68000"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Use the bit-field instructions"
+#~ msgstr "i Umwanya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not use the bit-field instructions"
+#~ msgstr "OYA Gukoresha i Umwanya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Use different calling convention using 'rtd'"
+#~ msgstr "ikoresha"
+
+#, fuzzy
+#~ msgid "Consider type `int' to be 16 bits wide"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "Consider type `int' to be 32 bits wide"
+#~ msgstr "Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "Generate code for a Sun FPA"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Do not generate code for a Sun FPA"
+#~ msgstr "OYA ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a Sun Sky board"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Do not use Sky linkage convention"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Generate code for a 68881"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code with library calls for floating point"
+#~ msgstr "ITEGEKONGENGA Na: Isomero Amahamagara: kugirango Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Generate code for a 68040, without any new instructions"
+#~ msgstr "ITEGEKONGENGA kugirango a Gishya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Generate code for a 68060, without any new instructions"
+#~ msgstr "ITEGEKONGENGA kugirango a Gishya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Generate code for a 68030"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68040"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68060"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 520X"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68851"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Do no generate code for a 68851"
+#~ msgstr "Oya ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68302"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a 68332"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Generate code for a cpu32"
+#~ msgstr "ITEGEKONGENGA kugirango a"
+
+#, fuzzy
+#~ msgid "Align variables on a 32-bit boundary"
+#~ msgstr "Ibihinduka ku a"
+
+#, fuzzy
+#~ msgid "Align variables on a 16-bit boundary"
+#~ msgstr "Ibihinduka ku a"
+
+#, fuzzy
+#~ msgid "Generate pc-relative code"
+#~ msgstr "Bifitanye isano ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Do not use unaligned memory references"
+#~ msgstr "OYA Gukoresha Ububiko Indango"
+
+#, fuzzy
+#~ msgid "Use unaligned memory references"
+#~ msgstr "Ububiko Indango"
+
+#, fuzzy
+#~ msgid "internal gcc monitor: short-branch(%x)"
+#~ msgstr "By'imbere"
+
+#, fuzzy
+#~ msgid "internal gcc error: Can't express symbolic location"
+#~ msgstr "By'imbere Ikosa Ahantu"
+
+#, fuzzy
+#~ msgid "argument #%d is a structure"
+#~ msgstr "ni a Imiterere"
+
+#, fuzzy
+#~ msgid "%%R not followed by %%B/C/D/E"
+#~ msgstr "%%ROYA ku C E"
+
+#, fuzzy
+#~ msgid "invalid %%x/X value"
+#~ msgstr "Sibyo Agaciro"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%Q value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%q value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%o value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%p value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "invalid %%s/S value"
+#~ msgstr "Sibyo Agaciro"
+
+#, fuzzy
+#~ msgid "invalid %%P operand"
+#~ msgstr "Sibyo"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%B value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%D value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "`%%d' operand isn't a register"
+#~ msgstr "`%%d'si a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "operand is r0"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "operand is const_double"
+#~ msgstr "ni"
+
+#, fuzzy
+#~ msgid "invalid code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible"
+#~ msgstr "-Binini Gusunika Na Binini Gusunika"
+
+#, fuzzy
+#~ msgid "invalid option `-mshort-data-%s'"
+#~ msgstr "Sibyo Ihitamo Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "-mshort-data-%s is too large "
+#~ msgstr "-Ibyatanzwe ni Binini"
+
+#, fuzzy
+#~ msgid "-mshort-data-%s and PIC are incompatible"
+#~ msgstr "-Ibyatanzwe Na"
+
+#, fuzzy
+#~ msgid "invalid option `-mstack-increment=%s'"
+#~ msgstr "Sibyo Ihitamo Iyongeragaciro"
+
+#, fuzzy
+#~ msgid "Inline constants if it can be done in 2 insns or less"
+#~ msgstr "NIBA Byakozwe in 2. Cyangwa Birutwa"
+
+#, fuzzy
+#~ msgid "Inline constants if it only takes 1 instruction"
+#~ msgstr "NIBA 1."
+
+#, fuzzy
+#~ msgid "Set maximum alignment to 4"
+#~ msgstr "Kinini Itunganya Kuri 4."
+
+#, fuzzy
+#~ msgid "Set maximum alignment to 8"
+#~ msgstr "Kinini Itunganya Kuri 8"
+
+#, fuzzy
+#~ msgid "Do not use the divide instruction"
+#~ msgstr "OYA Gukoresha i Kugabanya"
+
+#, fuzzy
+#~ msgid "Do not arbitrary sized immediates in bit operations"
+#~ msgstr "OYA in Ibikorwa:"
+
+#, fuzzy
+#~ msgid "Always treat bit-field as int-sized"
+#~ msgstr "Umwanya Nka INT"
+
+#, fuzzy
+#~ msgid "Force functions to be aligned to a 4 byte boundary"
+#~ msgstr "Imimaro Kuri Kuri a 4. Bayite"
+
+#, fuzzy
+#~ msgid "Force functions to be aligned to a 2 byte boundary"
+#~ msgstr "Imimaro Kuri Kuri a 2. Bayite"
+
+#, fuzzy
+#~ msgid "Emit call graph information"
+#~ msgstr "Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Prefer word accesses over byte accesses"
+#~ msgstr "ijambo KURI Bayite"
+
+#, fuzzy
+#~ msgid "Generate code for the M*Core M340"
+#~ msgstr "ITEGEKONGENGA kugirango i"
+
+#, fuzzy
+#~ msgid "Maximum amount for a single stack increment operation"
+#~ msgstr "Igiteranyo kugirango a UMWE Iyongeragaciro"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mabi= switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "-mips%d conflicts with the other architecture options, which specify a MIPS%d processor"
+#~ msgstr "-Na: i Ikindi Amahitamo a"
+
+#, fuzzy
+#~ msgid "bad value (%s) for -mips switch"
+#~ msgstr "Agaciro kugirango Hindura"
+
+#, fuzzy
+#~ msgid "-march=%s is not compatible with the selected ABI"
+#~ msgstr "-Werurwe ni OYA Na: i Byahiswemo"
+
+#, fuzzy
+#~ msgid "-mgp64 used with a 32-bit processor"
+#~ msgstr "-Na: a"
+
+#, fuzzy
+#~ msgid "-mgp32 used with a 64-bit ABI"
+#~ msgstr "-Na: a"
+
+#, fuzzy
+#~ msgid "-mgp64 used with a 32-bit ABI"
+#~ msgstr "-Na: a"
+
+#, fuzzy
+#~ msgid "unsupported combination: %s"
+#~ msgstr "Ivanga"
+
+#, fuzzy
+#~ msgid "generation of Branch Likely instructions enabled, but not supported by architecture"
+#~ msgstr "Bya Amabwiriza Bikora OYA ku"
+
+#, fuzzy
+#~ msgid "-G is incompatible with PIC code which is the default"
+#~ msgstr "-ni Na: ITEGEKONGENGA ni i Mburabuzi"
+
+#, fuzzy
+#~ msgid "-membedded-pic and -mabicalls are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-G and -membedded-pic are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "invalid option `entry%s'"
+#~ msgstr "Sibyo Ihitamo Icyinjijwe"
+
+#, fuzzy
+#~ msgid "-mentry is only meaningful with -mips-16"
+#~ msgstr "-ni Na:"
+
+#, fuzzy
+#~ msgid "internal error: %%) found without a %%( in assembler pattern"
+#~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho"
+
+#, fuzzy
+#~ msgid "internal error: %%] found without a %%[ in assembler pattern"
+#~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho"
+
+#, fuzzy
+#~ msgid "internal error: %%> found without a %%< in assembler pattern"
+#~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho"
+
+#, fuzzy
+#~ msgid "internal error: %%} found without a %%{ in assembler pattern"
+#~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho"
+
+#, fuzzy
+#~ msgid "PRINT_OPERAND: unknown punctuation '%c'"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "PRINT_OPERAND null pointer"
+#~ msgstr "NTAGIHARI Mweretsi"
+
+#, fuzzy
+#~ msgid "invalid use of %%d, %%x, or %%X"
+#~ msgstr "Sibyo Gukoresha Bya Cyangwa"
+
+#, fuzzy
+#~ msgid "PRINT_OPERAND_ADDRESS, null pointer"
+#~ msgstr "NTAGIHARI Mweretsi"
+
+#, fuzzy
+#~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line"
+#~ msgstr "Imiterere OYA Kwemerera muri Imimaro Na: Umurongo"
+
+#, fuzzy
+#~ msgid "can't rewind temp file"
+#~ msgstr "IDOSIYE"
+
+#, fuzzy
+#~ msgid "can't write to output file"
+#~ msgstr "Kwandika Kuri Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "can't read from temp file"
+#~ msgstr "Gusoma Bivuye IDOSIYE"
+
+#, fuzzy
+#~ msgid "can't close temp file"
+#~ msgstr "Gufunga IDOSIYE"
+
+#, fuzzy
+#~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero"
+#~ msgstr "Cyangwa ni Birutwa Zeru"
+
+#, fuzzy
+#~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero"
+#~ msgstr "Cyangwa ni Birutwa Zeru"
+
+#, fuzzy
+#~ msgid "can not handle inconsistent calls to `%s'"
+#~ msgstr "OYA Amahamagara: Kuri"
+
+#, fuzzy
+#~ msgid "the cpu name must be lower case"
+#~ msgstr "i CPU Izina: Ntoya"
+
+#, fuzzy
+#~ msgid "bad value (%s) for %s"
+#~ msgstr "Agaciro kugirango"
+
+#, fuzzy
+#~ msgid "No default crt0.o"
+#~ msgstr "Mburabuzi o"
+
+#, fuzzy
+#~ msgid "Use 64-bit int type"
+#~ msgstr "INT Ubwoko"
+
+#, fuzzy
+#~ msgid "Use 64-bit long type"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "Use 32-bit long type"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "Optimize lui/addiu address loads"
+#~ msgstr "Aderesi"
+
+#, fuzzy
+#~ msgid "Don't optimize lui/addiu address loads"
+#~ msgstr "Kugeza ku ndunduro Aderesi"
+
+#, fuzzy
+#~ msgid "Use MIPS as"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "Use GNU as"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "Use symbolic register names"
+#~ msgstr "Kwiyandikisha Amazina"
+
+#, fuzzy
+#~ msgid "Don't use symbolic register names"
+#~ msgstr "Gukoresha Kwiyandikisha Amazina"
+
+#, fuzzy
+#~ msgid "Use GP relative sdata/sbss sections"
+#~ msgstr "Bifitanye isano Ibyatoranyijwe"
+
+#, fuzzy
+#~ msgid "Don't use GP relative sdata/sbss sections"
+#~ msgstr "Gukoresha Bifitanye isano Ibyatoranyijwe"
+
+#, fuzzy
+#~ msgid "Output compiler statistics"
+#~ msgstr "Sitatisitiki"
+
+#, fuzzy
+#~ msgid "Don't output compiler statistics"
+#~ msgstr "Ibisohoka Sitatisitiki"
+
+#, fuzzy
+#~ msgid "Don't optimize block moves"
+#~ msgstr "Kugeza ku ndunduro Funga"
+
+#, fuzzy
+#~ msgid "Optimize block moves"
+#~ msgstr "Funga"
+
+#, fuzzy
+#~ msgid "Don't use mips-tfile asm postpass"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Use hardware floating point"
+#~ msgstr "Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Use 64-bit general registers"
+#~ msgstr "Rusange"
+
+#, fuzzy
+#~ msgid "Use 32-bit general registers"
+#~ msgstr "Rusange"
+
+#, fuzzy
+#~ msgid "Don't use Irix PIC"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Use indirect calls"
+#~ msgstr "BUZIGUYE Amahamagara:"
+
+#, fuzzy
+#~ msgid "Don't use indirect calls"
+#~ msgstr "Gukoresha BUZIGUYE Amahamagara:"
+
+#, fuzzy
+#~ msgid "Use embedded PIC"
+#~ msgstr "Gitsindiye"
+
+#, fuzzy
+#~ msgid "Don't use embedded PIC"
+#~ msgstr "Gukoresha Gitsindiye"
+
+#, fuzzy
+#~ msgid "Use ROM instead of RAM"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "Don't use ROM instead of RAM"
+#~ msgstr "Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "Put uninitialized constants in ROM (needs -membedded-data)"
+#~ msgstr "Itatangijwe in Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "Don't put uninitialized constants in ROM"
+#~ msgstr "Gushyira Itatangijwe in"
+
+#, fuzzy
+#~ msgid "Use big-endian byte order"
+#~ msgstr "Bayite Itondekanya"
+
+#, fuzzy
+#~ msgid "Use little-endian byte order"
+#~ msgstr "Bayite Itondekanya"
+
+#, fuzzy
+#~ msgid "Use single (32-bit) FP only"
+#~ msgstr "UMWE"
+
+#, fuzzy
+#~ msgid "Don't use single (32-bit) FP only"
+#~ msgstr "Gukoresha UMWE"
+
+#, fuzzy
+#~ msgid "Use multiply accumulate"
+#~ msgstr "Gukuba"
+
+#, fuzzy
+#~ msgid "Don't use multiply accumulate"
+#~ msgstr "Gukoresha Gukuba"
+
+#, fuzzy
+#~ msgid "Don't generate fused multiply/add instructions"
+#~ msgstr "Gukuba Kongeramo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Generate fused multiply/add instructions"
+#~ msgstr "Gukuba Kongeramo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't work around early 4300 hardware bug"
+#~ msgstr "Akazi"
+
+#, fuzzy
+#~ msgid "Trap on integer divide by zero"
+#~ msgstr "ku Umubare wuzuye Kugabanya ku Zeru"
+
+#, fuzzy
+#~ msgid "Don't trap on integer divide by zero"
+#~ msgstr "ku Umubare wuzuye Kugabanya ku Zeru"
+
+#, fuzzy
+#~ msgid "Trap on integer divide overflow"
+#~ msgstr "ku Umubare wuzuye Kugabanya Byarenze urugero"
+
+#, fuzzy
+#~ msgid "Don't trap on integer divide overflow"
+#~ msgstr "ku Umubare wuzuye Kugabanya Byarenze urugero"
+
+#, fuzzy
+#~ msgid "Use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Amabwiriza Mburabuzi kugirango"
+
+#, fuzzy
+#~ msgid "Don't use Branch Likely instructions, overriding default for arch"
+#~ msgstr "Gukoresha Amabwiriza Mburabuzi kugirango"
+
+#, fuzzy
+#~ msgid "Specify CPU for scheduling purposes"
+#~ msgstr "kugirango Impamvu"
+
+#, fuzzy
+#~ msgid "Specify CPU for code generation purposes"
+#~ msgstr "kugirango ITEGEKONGENGA Impamvu"
+
+#, fuzzy
+#~ msgid "Specify a Standard MIPS ISA"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "Use mips16 entry/exit psuedo ops"
+#~ msgstr "Icyinjijwe Gusohoka"
+
+#, fuzzy
+#~ msgid "Don't use MIPS16 instructions"
+#~ msgstr "Gukoresha Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't call any cache flush functions"
+#~ msgstr "Ubwihisho Imimaro"
+
+#, fuzzy
+#~ msgid "Specify cache flush function"
+#~ msgstr "Ubwihisho Umumaro"
+
+#, fuzzy
+#~ msgid "mips16 function profiling"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "-f%s not supported: ignored"
+#~ msgstr "-F OYA"
+
+#, fuzzy
+#~ msgid "too large function value type, needs %d registers, have only %d registers for this"
+#~ msgstr "Binini Umumaro Agaciro Ubwoko kugirango iyi"
+
+#, fuzzy
+#~ msgid "function_profiler support for MMIX"
+#~ msgstr "Gushigikira kugirango"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Last named vararg would not fit in a register"
+#~ msgstr "OYA in a Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Expected a CONST_INT, not this"
+#~ msgstr "Itegerejwe a OYA iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Bad register: %d"
+#~ msgstr "Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+#~ msgstr "Agaciro kugirango OYA a"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Expected a register, not this"
+#~ msgstr "Itegerejwe a Kwiyandikisha OYA iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Expected a constant, not this"
+#~ msgstr "Itegerejwe a OYA iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Cannot decode this operand"
+#~ msgstr "iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: This is not a recognized address"
+#~ msgstr "ni OYA a Aderesi"
+
+#, fuzzy
+#~ msgid "stack frame not a multiple of 8 bytes: %d"
+#~ msgstr "Ikadiri OYA a Igikubo Bya 8 Bayite"
+
+#, fuzzy
+#~ msgid "stack frame not a multiple of octabyte: %d"
+#~ msgstr "Ikadiri OYA a Igikubo Bya"
+
+#, fuzzy
+#~ msgid "MMIX Internal: %s is not a shiftable int"
+#~ msgstr "ni OYA a INT"
+
+#, fuzzy
+#~ msgid "MMIX Internal: Trying to output invalidly reversed condition:"
+#~ msgstr "Kuri Ibisohoka Bicuritswe Ibisabwa"
+
+#, fuzzy
+#~ msgid "MMIX Internal: What's the CC of this?"
+#~ msgstr "i Bya iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: What is the CC of this?"
+#~ msgstr "ni i Bya iyi"
+
+#, fuzzy
+#~ msgid "MMIX Internal: This is not a constant:"
+#~ msgstr "ni OYA a"
+
+#, fuzzy
+#~ msgid "Set start-address of the program"
+#~ msgstr "Gutangira Aderesi Bya i Porogaramu"
+
+#, fuzzy
+#~ msgid "Set start-address of data"
+#~ msgstr "Gutangira Aderesi Bya Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "For intrinsics library: pass all parameters in registers"
+#~ msgstr "Isomero Byose Ibigenga in"
+
+#, fuzzy
+#~ msgid "Use register stack for parameters and return value"
+#~ msgstr "Kwiyandikisha kugirango Ibigenga Na Garuka Agaciro"
+
+#, fuzzy
+#~ msgid "Use call-clobbered registers for parameters and return value"
+#~ msgstr "kugirango Ibigenga Na Garuka Agaciro"
+
+#, fuzzy
+#~ msgid "Use epsilon-respecting floating point compare instructions"
+#~ msgstr "ebusiloni Bihindagurika Akadomo Kugereranya# Amabwiriza"
+
+#, fuzzy
+#~ msgid "Use zero-extending memory loads, not sign-extending ones"
+#~ msgstr "Zeru Ububiko OYA IKIMENYETSO"
+
+#, fuzzy
+#~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
+#~ msgstr "Kugabanya Ibisubizo ku Na: Mwibutsa i IKIMENYETSO Nka i Ikigabanya OYA i Ikigabanywa"
+
+#, fuzzy
+#~ msgid "Prepend global symbols with \":\" (for use with PREFIX)"
+#~ msgstr "Ibimenyetso Na: kugirango Gukoresha Na:"
+
+#, fuzzy
+#~ msgid "Do not provide a default start-address 0x100 of the program"
+#~ msgstr "OYA a Mburabuzi Gutangira Aderesi Bya i Porogaramu"
+
+#, fuzzy
+#~ msgid "Link to emit program in ELF format (rather than mmo)"
+#~ msgstr "Kuri Porogaramu in Imiterere"
+
+#, fuzzy
+#~ msgid "Use P-mnemonics for branches statically predicted as taken"
+#~ msgstr "kugirango Nka"
+
+#, fuzzy
+#~ msgid "Don't use P-mnemonics for branches"
+#~ msgstr "Gukoresha kugirango"
+
+#, fuzzy
+#~ msgid "Use addresses that allocate global registers"
+#~ msgstr "Amaderesi"
+
+#, fuzzy
+#~ msgid "Do not use addresses that allocate global registers"
+#~ msgstr "OYA Gukoresha Amaderesi"
+
+#, fuzzy
+#~ msgid "Generate a single exit point for each function"
+#~ msgstr "a UMWE Gusohoka Akadomo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "Do not generate a single exit point for each function"
+#~ msgstr "OYA a UMWE Gusohoka Akadomo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "Work around hardware multiply bug"
+#~ msgstr "Gukuba"
+
+#, fuzzy
+#~ msgid "Do not work around hardware multiply bug"
+#~ msgstr "OYA Akazi Gukuba"
+
+#, fuzzy
+#~ msgid "Target the AM33 processor"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "Don't use hardware fp"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Pass some arguments in registers"
+#~ msgstr "ingingo in"
+
+#, fuzzy
+#~ msgid "Pass all arguments on stack"
+#~ msgstr "Byose ingingo ku"
+
+#, fuzzy
+#~ msgid "Optimize for 32532 cpu"
+#~ msgstr "kugirango CPU"
+
+#, fuzzy
+#~ msgid "Optimize for 32332 cpu"
+#~ msgstr "kugirango CPU"
+
+#, fuzzy
+#~ msgid "Optimize for 32032"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Register sb is zero. Use for absolute addressing"
+#~ msgstr "ni Zeru kugirango Kwohereza"
+
+#, fuzzy
+#~ msgid "Do not use register sb"
+#~ msgstr "OYA Gukoresha Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Use bit-field instructions"
+#~ msgstr "Umwanya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not use bit-field instructions"
+#~ msgstr "OYA Gukoresha Umwanya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Generate code for high memory"
+#~ msgstr "ITEGEKONGENGA kugirango kirekire Ububiko"
+
+#, fuzzy
+#~ msgid "Generate code for low memory"
+#~ msgstr "ITEGEKONGENGA kugirango Byo hasi Ububiko"
+
+#, fuzzy
+#~ msgid "Use multiply-accumulate fp instructions"
+#~ msgstr "Gukuba Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not use multiply-accumulate fp instructions"
+#~ msgstr "OYA Gukoresha Gukuba Amabwiriza"
+
+#, fuzzy
+#~ msgid "\"Small register classes\" kludge"
+#~ msgstr "\"Kwiyandikisha Inzego"
+
+#, fuzzy
+#~ msgid "No \"Small register classes\" kludge"
+#~ msgstr "Kwiyandikisha Inzego"
+
+#, fuzzy
+#~ msgid ""
+#~ "unknown -mschedule= option (%s).\n"
+#~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n"
+#~ msgstr "Kitazwi Ihitamo Amahitamo Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "unknown -march= option (%s).\n"
+#~ "Valid options are 1.0, 1.1, and 2.0\n"
+#~ msgstr "01. 1na2."
+
+#, fuzzy
+#~ msgid "PIC code generation is not supported in the portable runtime model\n"
+#~ msgstr "ITEGEKONGENGA ni OYA in i"
+
+#, fuzzy
+#~ msgid "PIC code generation is not compatible with fast indirect calls\n"
+#~ msgstr "ITEGEKONGENGA ni OYA Na: Byihuta BUZIGUYE"
+
+#, fuzzy
+#~ msgid "-g is only supported when using GAS on this processor,"
+#~ msgstr "-g ni Ryari: ikoresha ku iyi"
+
+#, fuzzy
+#~ msgid "-g option disabled"
+#~ msgstr "-g Ihitamo Yahagaritswe"
+
+#, fuzzy
+#~ msgid "Generate cpp defines for server IO"
+#~ msgstr "kugirango Seriveri"
+
+#, fuzzy
+#~ msgid "Generate cpp defines for workstation IO"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Generate PA1.1 code"
+#~ msgstr "1. ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate PA1.0 code"
+#~ msgstr "0 ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
+#~ msgstr "0 ITEGEKONGENGA 2. 10 Cyangwa"
+
+#, fuzzy
+#~ msgid "Do not disable FP regs"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Disable space regs"
+#~ msgstr "Umwanya"
+
+#, fuzzy
+#~ msgid "Do not disable space regs"
+#~ msgstr "OYA Umwanya"
+
+#, fuzzy
+#~ msgid "Put jumps in call delay slots"
+#~ msgstr "in Gutinda Siloti"
+
+#, fuzzy
+#~ msgid "Do not put jumps in call delay slots"
+#~ msgstr "OYA Gushyira in Gutinda Siloti"
+
+#, fuzzy
+#~ msgid "Disable indexed addressing"
+#~ msgstr "Kwohereza"
+
+#, fuzzy
+#~ msgid "Do not disable indexed addressing"
+#~ msgstr "OYA Kwohereza"
+
+#, fuzzy
+#~ msgid "Do not use portable calling conventions"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Assume code will be assembled by GAS"
+#~ msgstr "ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Do not assume code will be assembled by GAS"
+#~ msgstr "OYA ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Do not use software floating point"
+#~ msgstr "OYA Gukoresha Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Emit long load/store sequences"
+#~ msgstr "Ibirimo"
+
+#, fuzzy
+#~ msgid "Do not emit long load/store sequences"
+#~ msgstr "OYA Ibirimo"
+
+#, fuzzy
+#~ msgid "Generate fast indirect calls"
+#~ msgstr "Byihuta BUZIGUYE Amahamagara:"
+
+#, fuzzy
+#~ msgid "Do not generate fast indirect calls"
+#~ msgstr "OYA Byihuta BUZIGUYE Amahamagara:"
+
+#, fuzzy
+#~ msgid "Generate code for huge switch statements"
+#~ msgstr "ITEGEKONGENGA kugirango Hindura"
+
+#, fuzzy
+#~ msgid "Do not generate code for huge switch statements"
+#~ msgstr "OYA ITEGEKONGENGA kugirango Hindura"
+
+#, fuzzy
+#~ msgid "Always generate long calls"
+#~ msgstr "Amahamagara:"
+
+#, fuzzy
+#~ msgid "Generate long calls only when needed"
+#~ msgstr "Amahamagara: Ryari:"
+
+#, fuzzy
+#~ msgid "Specify architecture for code generation.  Values are 1.0, 1.1, and 2.0.  2.0 requires gas snapshot 19990413 or later."
+#~ msgstr "01. 1na2. 0. 2.."
+
+#, fuzzy
+#~ msgid "Assume code will be linked by GNU ld"
+#~ msgstr "ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Assume code will be linked by HP ld"
+#~ msgstr "ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Do not use hardware floating point"
+#~ msgstr "OYA Gukoresha Bihindagurika Akadomo"
+
+#, fuzzy
+#~ msgid "Return floating point results in ac0"
+#~ msgstr "Bihindagurika Akadomo Ibisubizo ku in"
+
+#, fuzzy
+#~ msgid "Return floating point results in memory"
+#~ msgstr "Bihindagurika Akadomo Ibisubizo ku in Ububiko"
+
+#, fuzzy
+#~ msgid "Generate code for an 11/40"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for an 11/45"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for an 11/10"
+#~ msgstr "ITEGEKONGENGA kugirango 10"
+
+#, fuzzy
+#~ msgid "Use 32 bit int"
+#~ msgstr "INT"
+
+#, fuzzy
+#~ msgid "Use 16 bit int"
+#~ msgstr "INT"
+
+#, fuzzy
+#~ msgid "Use 32 bit float"
+#~ msgstr "Kureremba"
+
+#, fuzzy
+#~ msgid "Use 64 bit float"
+#~ msgstr "Kureremba"
+
+#, fuzzy
+#~ msgid "Target has split I&D"
+#~ msgstr "Gutandukanya"
+
+#, fuzzy
+#~ msgid "Target does not have split I&D"
+#~ msgstr "OYA Gutandukanya"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%S value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%b value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%z value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%Z value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%k value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%j value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "can't have varargs with -mfp-arg-in-fp-regs"
+#~ msgstr "Na: in"
+
+#, fuzzy
+#~ msgid "missing open paren"
+#~ msgstr "Ibuze Gufungura"
+
+#, fuzzy
+#~ msgid "missing number"
+#~ msgstr "Ibuze Umubare"
+
+#, fuzzy
+#~ msgid "missing close paren"
+#~ msgstr "Ibuze Gufunga"
+
+#, fuzzy
+#~ msgid "number must be 0 or 1"
+#~ msgstr "Umubare 0 Cyangwa 1."
+
+#, fuzzy
+#~ msgid "junk at end of #pragma longcall"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "-mmultiple is not supported on little endian systems"
+#~ msgstr "-ni OYA ku"
+
+#, fuzzy
+#~ msgid "-mstring is not supported on little endian systems"
+#~ msgstr "-ni OYA ku"
+
+#, fuzzy
+#~ msgid "unknown -mdebug-%s switch"
+#~ msgstr "Kitazwi Hindura"
+
+#, fuzzy
+#~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'"
+#~ msgstr "Kitazwi Cyangwa"
+
+#, fuzzy
+#~ msgid "Unknown switch -mlong-double-%s"
+#~ msgstr "Hindura MAHARAKUBIRI"
+
+#, fuzzy
+#~ msgid "unknown -misel= option specified: '%s'"
+#~ msgstr "Kitazwi Ihitamo"
+
+#, fuzzy
+#~ msgid "unknown -mvrsave= option specified: '%s'"
+#~ msgstr "Kitazwi Ihitamo"
+
+#, fuzzy
+#~ msgid "unknown ABI specified: '%s'"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "argument 1 must be a 5-bit signed literal"
+#~ msgstr "1. a 5"
+
+#, fuzzy
+#~ msgid "argument 2 must be a 5-bit unsigned literal"
+#~ msgstr "2. a 5 Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_altivec_predicate must be a constant"
+#~ msgstr "1. Bya a"
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_altivec_predicate is out of range"
+#~ msgstr "1. Bya ni Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "argument 3 must be a 4-bit unsigned literal"
+#~ msgstr "3. a 4. Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "argument to `%s' must be a 2-bit unsigned literal"
+#~ msgstr "Kuri a 2. Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "argument to dss must be a 2-bit unsigned literal"
+#~ msgstr "Kuri a 2. Bitashizweho umukono"
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_spe_predicate must be a constant"
+#~ msgstr "1. Bya a"
+
+#, fuzzy
+#~ msgid "argument 1 of __builtin_spe_predicate is out of range"
+#~ msgstr "1. Bya ni Inyuma Bya Urutonde"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%f value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%F value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%G value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "invalid %%j code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "invalid %%J code"
+#~ msgstr "Sibyo ITEGEKONGENGA"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%K value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%O value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%T value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%u value"
+#~ msgstr "Agaciro siko"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text
+#, fuzzy
+#~ msgid "invalid %%v value"
+#~ msgstr "Agaciro siko"
+
+#, fuzzy
+#~ msgid "no profiling of 64-bit code for this ABI"
+#~ msgstr "Oya Bya ITEGEKONGENGA kugirango iyi"
+
+#, fuzzy
+#~ msgid "Always pass floating-point arguments in memory"
+#~ msgstr "Bihindagurika Akadomo ingingo in Ububiko"
+
+#, fuzzy
+#~ msgid "Don't always pass floating-point arguments in memory"
+#~ msgstr "Buri gihe Bihindagurika Akadomo ingingo in Ububiko"
+
+#, fuzzy
+#~ msgid "Support message passing with the Parallel Environment"
+#~ msgstr "Ubutumwa Na: i"
+
+#, fuzzy
+#~ msgid "Compile for 64-bit pointers"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Compile for 32-bit pointers"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "-maix64 and POWER architecture are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-maix64 requires PowerPC64 architecture remain enabled"
+#~ msgstr "-Bikora"
+
+#, fuzzy
+#~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
+#~ msgstr "-Bya ngombwa Na: Kwohereza OYA"
+
+#, fuzzy
+#~ msgid "Use POWER instruction set"
+#~ msgstr "Gushyiraho"
+
+#, fuzzy
+#~ msgid "Use POWER2 instruction set"
+#~ msgstr "Gushyiraho"
+
+#, fuzzy
+#~ msgid "Do not use POWER2 instruction set"
+#~ msgstr "OYA Gukoresha Gushyiraho"
+
+#, fuzzy
+#~ msgid "Do not use POWER instruction set"
+#~ msgstr "OYA Gukoresha Gushyiraho"
+
+#, fuzzy
+#~ msgid "Use PowerPC instruction set"
+#~ msgstr "Gushyiraho"
+
+#, fuzzy
+#~ msgid "Do not use PowerPC instruction set"
+#~ msgstr "OYA Gukoresha Gushyiraho"
+
+#, fuzzy
+#~ msgid "Use PowerPC General Purpose group optional instructions"
+#~ msgstr "Itsinda Bitari ngombwa Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't use PowerPC General Purpose group optional instructions"
+#~ msgstr "Gukoresha Itsinda Bitari ngombwa Amabwiriza"
+
+#, fuzzy
+#~ msgid "Use PowerPC Graphics group optional instructions"
+#~ msgstr "Itsinda Bitari ngombwa Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't use PowerPC Graphics group optional instructions"
+#~ msgstr "Gukoresha Itsinda Bitari ngombwa Amabwiriza"
+
+#, fuzzy
+#~ msgid "Use PowerPC-64 instruction set"
+#~ msgstr "Gushyiraho"
+
+#, fuzzy
+#~ msgid "Don't use PowerPC-64 instruction set"
+#~ msgstr "Gukoresha Gushyiraho"
+
+#, fuzzy
+#~ msgid "Use AltiVec instructions"
+#~ msgstr "Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't use AltiVec instructions"
+#~ msgstr "Gukoresha Amabwiriza"
+
+#, fuzzy
+#~ msgid "Use new mnemonics for PowerPC architecture"
+#~ msgstr "Gishya kugirango"
+
+#, fuzzy
+#~ msgid "Use old mnemonics for PowerPC architecture"
+#~ msgstr "ki/ bishaje kugirango"
+
+#, fuzzy
+#~ msgid "Put everything in the regular TOC"
+#~ msgstr "in i Ibisanzwe"
+
+#, fuzzy
+#~ msgid "Place floating point constants in TOC"
+#~ msgstr "Bihindagurika Akadomo in"
+
+#, fuzzy
+#~ msgid "Don't place floating point constants in TOC"
+#~ msgstr "Bihindagurika Akadomo in"
+
+#, fuzzy
+#~ msgid "Place symbol+offset constants in TOC"
+#~ msgstr "IKIMENYETSO Nta- boneza in"
+
+#, fuzzy
+#~ msgid "Don't place symbol+offset constants in TOC"
+#~ msgstr "IKIMENYETSO Nta- boneza in"
+
+#, fuzzy
+#~ msgid "Place variable addresses in the regular TOC"
+#~ msgstr "IMPINDURAGACIRO Amaderesi in i Ibisanzwe"
+
+#, fuzzy
+#~ msgid "Generate load/store multiple instructions"
+#~ msgstr "Ibirimo Igikubo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not generate load/store multiple instructions"
+#~ msgstr "OYA Ibirimo Igikubo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Generate string instructions for block moves"
+#~ msgstr "Ikurikiranyanyuguti Amabwiriza kugirango Funga"
+
+#, fuzzy
+#~ msgid "Do not generate string instructions for block moves"
+#~ msgstr "OYA Ikurikiranyanyuguti Amabwiriza kugirango Funga"
+
+#, fuzzy
+#~ msgid "Generate load/store with update instructions"
+#~ msgstr "Ibirimo Na: Kuvugurura Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not generate load/store with update instructions"
+#~ msgstr "OYA Ibirimo Na: Kuvugurura Amabwiriza"
+
+#, fuzzy
+#~ msgid "Don't schedule the start and end of the procedure"
+#~ msgstr "Igenabihe i Gutangira Na Impera Bya i"
+
+#, fuzzy
+#~ msgid "Return all structures in memory (AIX default)"
+#~ msgstr "Byose in Ububiko Mburabuzi"
+
+#, fuzzy
+#~ msgid "Return small structures in registers (SVR4 default)"
+#~ msgstr "Gitoya in Mburabuzi"
+
+#, fuzzy
+#~ msgid "Use features of and schedule code for given CPU"
+#~ msgstr "Ibiranga Bya Na Igenabihe ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Enable debug output"
+#~ msgstr "Kosora amakosa Ibisohoka"
+
+#, fuzzy
+#~ msgid "Select full, part, or no traceback table"
+#~ msgstr "Cyangwa Oya imbonerahamwe#"
+
+#, fuzzy
+#~ msgid "Specify ABI to use"
+#~ msgstr "Kuri Gukoresha"
+
+#, fuzzy
+#~ msgid "Specify size of long double (64 or 128 bits)"
+#~ msgstr "Ingano Bya MAHARAKUBIRI Cyangwa"
+
+#, fuzzy
+#~ msgid "Specify yes/no if isel instructions should be generated"
+#~ msgstr "Yego Oya NIBA Amabwiriza"
+
+#, fuzzy
+#~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec"
+#~ msgstr "Yego Oya NIBA Amabwiriza kugirango"
+
+#, fuzzy
+#~ msgid "Avoid all range limits on call instructions"
+#~ msgstr "Byose Urutonde Imbibi ku Amabwiriza"
+
+#, fuzzy
+#~ msgid "RETURN_ADDRESS_OFFSET not supported"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Select method for sdata handling"
+#~ msgstr "Uburyo kugirango"
+
+#, fuzzy
+#~ msgid "Align to the base type of the bit-field"
+#~ msgstr "Kuri i SHINGIRO Ubwoko Bya i Umwanya"
+
+#, fuzzy
+#~ msgid "Don't align to the base type of the bit-field"
+#~ msgstr "Gutondeka Kuri i SHINGIRO Ubwoko Bya i Umwanya"
+
+#, fuzzy
+#~ msgid "Don't assume that unaligned accesses are handled by the system"
+#~ msgstr "ku i Sisitemu"
+
+#, fuzzy
+#~ msgid "Assume that unaligned accesses are handled by the system"
+#~ msgstr "ku i Sisitemu"
+
+#, fuzzy
+#~ msgid "Produce code relocatable at runtime"
+#~ msgstr "ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Don't produce code relocatable at runtime"
+#~ msgstr "ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "Produce little endian code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Produce big endian code"
+#~ msgstr "ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "no description yet"
+#~ msgstr "Oya Isobanuramiterere"
+
+#, fuzzy
+#~ msgid "Don't use EABI"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Do not allow bit-fields to cross word boundaries"
+#~ msgstr "OYA Kwemerera Imyanya Kuri Kwambukiranya ijambo"
+
+#, fuzzy
+#~ msgid "Use alternate register names"
+#~ msgstr "Kwiyandikisha Amazina"
+
+#, fuzzy
+#~ msgid "Don't use alternate register names"
+#~ msgstr "Gukoresha Kwiyandikisha Amazina"
+
+#, fuzzy
+#~ msgid "Link with libsim.a, libc.a and sim-crt0.o"
+#~ msgstr "Na: a a Na o"
+
+#, fuzzy
+#~ msgid "Link with libads.a, libc.a and crt0.o"
+#~ msgstr "Na: a a Na o"
+
+#, fuzzy
+#~ msgid "Link with libyk.a, libc.a and crt0.o"
+#~ msgstr "Na: a a Na o"
+
+#, fuzzy
+#~ msgid "Link with libmvme.a, libc.a and crt0.o"
+#~ msgstr "Na: a a Na o"
+
+#, fuzzy
+#~ msgid "Set the PPC_EMB bit in the ELF flags header"
+#~ msgstr "i in i Amabendera Umutwempangano"
+
+#, fuzzy
+#~ msgid "Use the WindISS simulator"
+#~ msgstr "i"
+
+#, fuzzy
+#~ msgid "bad value for -mcall-%s"
+#~ msgstr "Agaciro kugirango"
+
+#, fuzzy
+#~ msgid "bad value for -msdata=%s"
+#~ msgstr "Agaciro kugirango"
+
+#, fuzzy
+#~ msgid "-mrelocatable and -msdata=%s are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-f%s and -msdata=%s are incompatible"
+#~ msgstr "-F Na"
+
+#, fuzzy
+#~ msgid "-msdata=%s and -mcall-%s are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-mrelocatable and -mno-minimal-toc are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-mrelocatable and -mcall-%s are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "-fPIC and -mcall-%s are incompatible"
+#~ msgstr "-Na"
+
+#, fuzzy
+#~ msgid "invalid UNSPEC as operand (1)"
+#~ msgstr "Sibyo Nka 1."
+
+#, fuzzy
+#~ msgid "invalid UNSPEC as operand (2)"
+#~ msgstr "Sibyo Nka 2."
+
+#, fuzzy
+#~ msgid "UNKNOWN in s390_output_symbolic_const !?"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Cannot decompose address."
+#~ msgstr "Aderesi"
+
+#, fuzzy
+#~ msgid "UNKNOWN in print_operand !?"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Total size of local variables exceeds architecture limit."
+#~ msgstr "Ingano Bya Ibihinduka"
+
+#, fuzzy
+#~ msgid "Don't set backchain (faster, but debug harder"
+#~ msgstr "Gushyiraho Kosora amakosa"
+
+#, fuzzy
+#~ msgid "Use bras for executable < 64k"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Don't use bras"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "Additional debug prints"
+#~ msgstr "Kosora amakosa"
+
+#, fuzzy
+#~ msgid "Don't print additional debug prints"
+#~ msgstr "Gucapa Kosora amakosa"
+
+#, fuzzy
+#~ msgid "64 bit mode"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "31 bit mode"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "mvcle use"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "__builtin_saveregs not supported by this subtarget"
+#~ msgstr "_OYA ku iyi"
+
+#, fuzzy
+#~ msgid "attribute interrupt_handler is not compatible with -m5-compact"
+#~ msgstr "Ikiranga ni OYA Na:"
+
+#, fuzzy
+#~ msgid "`%s' attribute only applies to interrupt functions"
+#~ msgstr "`%s'Ikiranga Kuri Hagarikira aho Imimaro"
+
+#, fuzzy
+#~ msgid "`%s' attribute argument not a string constant"
+#~ msgstr "`%s'Ikiranga OYA a Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "`%s' attribute argument not an integer constant"
+#~ msgstr "`%s'Ikiranga OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "Profiling is not supported on this target."
+#~ msgstr "ni OYA ku iyi Intego"
+
+#, fuzzy
+#~ msgid "%s is not supported by this configuration"
+#~ msgstr "%sni OYA ku iyi Iboneza"
+
+#, fuzzy
+#~ msgid "-mlong-double-64 not allowed with -m64"
+#~ msgstr "-MAHARAKUBIRI OYA Na:"
+
+#, fuzzy
+#~ msgid "-mcmodel= is not supported on 32 bit systems"
+#~ msgstr "-ni OYA ku"
+
+#, fuzzy
+#~ msgid "invalid %%Y operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%A operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%B operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%c operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%C operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%d operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%D operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%f operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid %%s operand"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "long long constant not a valid immediate operand"
+#~ msgstr "OYA a Byemewe"
+
+#, fuzzy
+#~ msgid "floating point constant not a valid immediate operand"
+#~ msgstr "Bihindagurika Akadomo OYA a Byemewe"
+
+#, fuzzy
+#~ msgid "Generate code for big endian"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for little endian"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Use little-endian byte order for data"
+#~ msgstr "Bayite Itondekanya kugirango Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "Assume possible double misalignment"
+#~ msgstr "MAHARAKUBIRI"
+
+#, fuzzy
+#~ msgid "Assume all doubles are aligned"
+#~ msgstr "Byose"
+
+#, fuzzy
+#~ msgid "Pass -assert pure-text to linker"
+#~ msgstr "Umwandiko Kuri"
+
+#, fuzzy
+#~ msgid "Do not pass -assert pure-text to linker"
+#~ msgstr "OYA Umwandiko Kuri"
+
+#, fuzzy
+#~ msgid "Use flat register window model"
+#~ msgstr "Kirambuye Kwiyandikisha Idirishya Urugero"
+
+#, fuzzy
+#~ msgid "Do not use flat register window model"
+#~ msgstr "OYA Gukoresha Kirambuye Kwiyandikisha Idirishya Urugero"
+
+#, fuzzy
+#~ msgid "Do not use ABI reserved registers"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Use hardware quad fp instructions"
+#~ msgstr "Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not use hardware quad fp instructions"
+#~ msgstr "OYA Gukoresha Amabwiriza"
+
+#, fuzzy
+#~ msgid "Compile for v8plus ABI"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Do not compile for v8plus ABI"
+#~ msgstr "OYA Gukusanya kugirango"
+
+#, fuzzy
+#~ msgid "Do not utilize Visual Instruction Set"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Optimize for Cypress processors"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Optimize for SPARCLite processors"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Optimize for F930 processors"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Optimize for F934 processors"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Optimize for SuperSPARC processors"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Do not use stack bias"
+#~ msgstr "OYA Gukoresha"
+
+#, fuzzy
+#~ msgid "Use structs on stronger alignment for double-word copies"
+#~ msgstr "ku Itunganya kugirango MAHARAKUBIRI ijambo Amakopi"
+
+#, fuzzy
+#~ msgid "Do not use structs on stronger alignment for double-word copies"
+#~ msgstr "OYA Gukoresha ku Itunganya kugirango MAHARAKUBIRI ijambo Amakopi"
+
+#, fuzzy
+#~ msgid "Optimize tail call instructions in assembler and linker"
+#~ msgstr "Amabwiriza in Na"
+
+#, fuzzy
+#~ msgid "Do not optimize tail call instructions in assembler or linker"
+#~ msgstr "OYA Kugeza ku ndunduro Amabwiriza in Cyangwa"
+
+#, fuzzy
+#~ msgid "Use given SPARC code model"
+#~ msgstr "ITEGEKONGENGA Urugero"
+
+#, fuzzy
+#~ msgid "cannot use va_start in interrupt function"
+#~ msgstr "Gukoresha in Hagarikira aho Umumaro"
+
+#, fuzzy
+#~ msgid "`B' operand is not constant"
+#~ msgstr "`ni OYA"
+
+#, fuzzy
+#~ msgid "`B' operand has multiple bits set"
+#~ msgstr "`Igikubo Gushyiraho"
+
+#, fuzzy
+#~ msgid "`o' operand is not constant"
+#~ msgstr "`ni OYA"
+
+#, fuzzy
+#~ msgid "xstormy16_print_operand: unknown code"
+#~ msgstr "Kitazwi ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "switch statement of size %lu entries too large"
+#~ msgstr "Hindura Inyandiko Bya Ingano Ibyinjijwe Binini"
+
+#, fuzzy
+#~ msgid "#pragma GHS endXXXX found without previous startXXX"
+#~ msgstr "#Byabonetse Ibanjirije"
+
+#, fuzzy
+#~ msgid "#pragma GHS endXXX does not match previous startXXX"
+#~ msgstr "#OYA BIHUYE Ibanjirije"
+
+#, fuzzy
+#~ msgid "cannot set interrupt attribute: no current function"
+#~ msgstr "Gushyiraho Hagarikira aho Ikiranga Oya KIGEZWEHO Umumaro"
+
+#, fuzzy
+#~ msgid "cannot set interrupt attribute: no such identifier"
+#~ msgstr "Gushyiraho Hagarikira aho Ikiranga Oya Ikiranga"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs section"
+#~ msgstr "Umwanda ku Impera Bya Icyiciro"
+
+#, fuzzy
+#~ msgid "unrecognized section name \"%s\""
+#~ msgstr "Icyiciro Izina:"
+
+#, fuzzy
+#~ msgid "malformed #pragma ghs section"
+#~ msgstr "Icyiciro"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs interrupt"
+#~ msgstr "Umwanda ku Impera Bya Hagarikira aho"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs starttda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs startsda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs startzda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs endtda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs endsda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma ghs endzda"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "%s=%s is not numeric"
+#~ msgstr "%s=%sni OYA Bikurikije umubare"
+
+#, fuzzy
+#~ msgid "%s=%s is too large"
+#~ msgstr "%s=%sni Binini"
+
+#, fuzzy
+#~ msgid "const_double_split got a bad insn:"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "a data area attribute cannot be specified for local variables"
+#~ msgstr "a Ibyatanzwe Ubuso Ikiranga kugirango Ibihinduka"
+
+#, fuzzy
+#~ msgid "data area of '%s' conflicts with previous declaration"
+#~ msgstr "Ibyatanzwe Ubuso Bya Na: Ibanjirije"
+
+#, fuzzy
+#~ msgid "bad amount of stack space removal: %d"
+#~ msgstr "Igiteranyo Bya Umwanya"
+
+#, fuzzy
+#~ msgid "Too much stack space to dispose of: %d"
+#~ msgstr "Umwanya Kuri Bya"
+
+#, fuzzy
+#~ msgid "Too much stack space to prepare: %d"
+#~ msgstr "Umwanya Kuri"
+
+#, fuzzy
+#~ msgid "Prohibit PC relative function calls"
+#~ msgstr "Bifitanye isano Umumaro Amahamagara:"
+
+#, fuzzy
+#~ msgid "Reuse r30 on a per function basis"
+#~ msgstr "ku a Umumaro Ishingiro"
+
+#, fuzzy
+#~ msgid "Use stubs for function prologues"
+#~ msgstr "kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "Same as: -mep -mprolog-function"
+#~ msgstr "Nka Umumaro"
+
+#, fuzzy
+#~ msgid "Compile for the v850 processor"
+#~ msgstr "kugirango i"
+
+#, fuzzy
+#~ msgid "Compile for v850e processor"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "Enable the use of the short load instructions"
+#~ msgstr "i Gukoresha Bya i Ibirimo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not use the callt instruction"
+#~ msgstr "OYA Gukoresha i"
+
+#, fuzzy
+#~ msgid "Do not use registers r2 and r5"
+#~ msgstr "OYA Gukoresha Na"
+
+#, fuzzy
+#~ msgid "Enforce strict alignment"
+#~ msgstr "Itunganya"
+
+#, fuzzy
+#~ msgid "Use 4 byte entries in switch tables"
+#~ msgstr "4. Bayite Ibyinjijwe in Hindura Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "Set the max size of data eligible for the TDA area"
+#~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso"
+
+#, fuzzy
+#~ msgid "Set the max size of data eligible for the SDA area"
+#~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso"
+
+#, fuzzy
+#~ msgid "Set the max size of data eligible for the ZDA area"
+#~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso"
+
+#, fuzzy
+#~ msgid "bad test"
+#~ msgstr "Igerageza"
+
+#, fuzzy
+#~ msgid "boolean registers required for the floating-point option"
+#~ msgstr "Icyungo Bya ngombwa kugirango i Bihindagurika Akadomo Ihitamo"
+
+#, fuzzy
+#~ msgid "invalid mask"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "invalid address"
+#~ msgstr "Sibyo Aderesi"
+
+#, fuzzy
+#~ msgid "no register in address"
+#~ msgstr "Oya Kwiyandikisha in Aderesi"
+
+#, fuzzy
+#~ msgid "address offset not a constant"
+#~ msgstr "Aderesi Nta- boneza OYA a"
+
+#, fuzzy
+#~ msgid "only uninitialized variables can be placed in a .bss section"
+#~ msgstr "Itatangijwe Ibihinduka in a Icyiciro"
+
+#, fuzzy
+#~ msgid "Use the Xtensa code density option"
+#~ msgstr "i ITEGEKONGENGA Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa code density option"
+#~ msgstr "OYA Gukoresha i ITEGEKONGENGA Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa MAC16 option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa MAC16 option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa MUL16 option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa MUL16 option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa MUL32 option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa MUL32 option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa NSA option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa NSA option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa MIN/MAX option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa MIN/MAX option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa SEXT option"
+#~ msgstr "i Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa SEXT option"
+#~ msgstr "OYA Gukoresha i Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa boolean register option"
+#~ msgstr "i Icyungo Kwiyandikisha Ihitamo"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa boolean register option"
+#~ msgstr "OYA Gukoresha i Icyungo Kwiyandikisha Ihitamo"
+
+#, fuzzy
+#~ msgid "Use the Xtensa floating-point unit"
+#~ msgstr "i Bihindagurika Akadomo Igice:"
+
+#, fuzzy
+#~ msgid "Do not use the Xtensa floating-point unit"
+#~ msgstr "OYA Gukoresha i Bihindagurika Akadomo Igice:"
+
+#, fuzzy
+#~ msgid "Disable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Gukuba Kongeramo Na Gukuba Gukuramo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Enable fused multiply/add and multiply/subtract FP instructions"
+#~ msgstr "Gukuba Kongeramo Na Gukuba Gukuramo Amabwiriza"
+
+#, fuzzy
+#~ msgid "Serialize volatile memory references with MEMW instructions"
+#~ msgstr "Ububiko Indango Na: Amabwiriza"
+
+#, fuzzy
+#~ msgid "Do not serialize volatile memory references with MEMW instructions"
+#~ msgstr "OYA Ububiko Indango Na: Amabwiriza"
+
+#, fuzzy
+#~ msgid "Intersperse literal pools with code in the text section"
+#~ msgstr "Na: ITEGEKONGENGA in i Umwandiko Icyiciro"
+
+#, fuzzy
+#~ msgid "Put literal pools in a separate literal section"
+#~ msgstr "in a Icyiciro"
+
+#, fuzzy
+#~ msgid "Automatically align branch targets to reduce branch penalties"
+#~ msgstr "Gutondeka Kuri"
+
+#, fuzzy
+#~ msgid "Do not automatically align branch targets"
+#~ msgstr "OYA ku buryo bwikora Gutondeka"
+
+#, fuzzy
+#~ msgid "Use indirect CALLXn instructions for large programs"
+#~ msgstr "BUZIGUYE Amabwiriza kugirango Binini Porogaramu"
+
+#, fuzzy
+#~ msgid "Use direct CALLn instructions for fast calls"
+#~ msgstr "Amabwiriza kugirango Byihuta Amahamagara:"
+
+#, fuzzy
+#~ msgid "`-gnat' misspelled as `-gant'"
+#~ msgstr "`-Nka"
+
+#, fuzzy
+#~ msgid "qualified type `%T' does not match destructor name `~%T'"
+#~ msgstr "Ubwoko OYA BIHUYE Izina:"
+
+#, fuzzy
+#~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')"
+#~ msgstr "Ubwoko Bya OYA BIHUYE Ubwoko Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' is a namespace"
+#~ msgstr "`%D'ni a"
+
+#, fuzzy
+#~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'"
+#~ msgstr "SHINGIRO Igikoresho Bya Uburyo ni Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "unable to call pointer to member function here"
+#~ msgstr "Kuri Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "destructors take no parameters"
+#~ msgstr "Oya Ibigenga"
+
+#, fuzzy
+#~ msgid "destructor name `~%T' does not match type `%T' of expression"
+#~ msgstr "Izina: OYA BIHUYE Ubwoko Bya imvugo"
+
+#, fuzzy
+#~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'"
+#~ msgstr "Kubaza... kugirango in ni Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "request for member `%D' is ambiguous"
+#~ msgstr "Kubaza... kugirango ni"
+
+#, fuzzy
+#~ msgid "%s %D(%T, %T, %T) <built-in>"
+#~ msgstr "%s%D(%T,%T,%T)<in"
+
+#, fuzzy
+#~ msgid "%s %D(%T, %T) <built-in>"
+#~ msgstr "%s%D(%T,%T)<in"
+
+#, fuzzy
+#~ msgid "%s %D(%T) <built-in>"
+#~ msgstr "%s%D(%T)<in"
+
+#, fuzzy
+#~ msgid "%s %T <conversion>"
+#~ msgstr "%s%T<Ihindurangero"
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#, fuzzy
+#~ msgid "%s %+#D%s"
+#~ msgstr "%s%+#D%s"
+
+#, fuzzy
+#~ msgid "incomplete type '%T' cannot be used to name a scope"
+#~ msgstr "Ubwoko Kuri Izina: a Ingano:"
+
+#, fuzzy
+#~ msgid "'%D' has no member named '%E'"
+#~ msgstr "'%D'Oya"
+
+#, fuzzy
+#~ msgid "no matching function for call to `%D(%A)'"
+#~ msgstr "Oya Umumaro kugirango Kuri"
+
+#, fuzzy
+#~ msgid "call of overloaded `%D(%A)' is ambiguous"
+#~ msgstr "Bya ni"
+
+#, fuzzy
+#~ msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*"
+#~ msgstr "Mweretsi Kuri Umumaro Igikoresho ikoresha Cyangwa"
+
+#, fuzzy
+#~ msgid "no match for call to `(%T) (%A)'"
+#~ msgstr "Oya BIHUYE kugirango Kuri"
+
+#, fuzzy
+#~ msgid "call of `(%T) (%A)' is ambiguous"
+#~ msgstr "Bya ni"
+
+#, fuzzy
+#~ msgid "%s for `%T ? %T : %T' operator"
+#~ msgstr "%skugirango."
+
+#, fuzzy
+#~ msgid "%s for `%T %s' operator"
+#~ msgstr "%skugirango Mukoresha"
+
+#, fuzzy
+#~ msgid "%s for `%T [%T]' operator"
+#~ msgstr "%skugirango Mukoresha"
+
+#, fuzzy
+#~ msgid "%s for `%T %s %T' operator"
+#~ msgstr "%skugirango Mukoresha"
+
+#, fuzzy
+#~ msgid "%s for `%s %T' operator"
+#~ msgstr "%skugirango Mukoresha"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids omitting the middle term of a ?: expression"
+#~ msgstr "C i Hagati Ijambo Bya a imvugo"
+
+#, fuzzy
+#~ msgid "`%E' has type `void' and is not a throw-expression"
+#~ msgstr "`%E'Ubwoko Na ni OYA a imvugo"
+
+#, fuzzy
+#~ msgid "operands to ?: have different types"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'"
+#~ msgstr "in imvugo"
+
+#, fuzzy
+#~ msgid "enumeral and non-enumeral type in conditional expression"
+#~ msgstr "Na Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "`%D' must be declared before use"
+#~ msgstr "`%D'Mbere Gukoresha"
+
+#, fuzzy
+#~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead"
+#~ msgstr "Oya INT kugirango Imbanziriza Mukoresha"
+
+#, fuzzy
+#~ msgid "using synthesized `%#D' for copy assignment"
+#~ msgstr "ikoresha kugirango Gukoporora Igenera"
+
+#, fuzzy
+#~ msgid "  where cfront would use `%#D'"
+#~ msgstr "Gukoresha"
+
+#, fuzzy
+#~ msgid "comparison between `%#T' and `%#T'"
+#~ msgstr "hagati Na"
+
+#, fuzzy
+#~ msgid "no suitable `operator delete' for `%T'"
+#~ msgstr "Oya Mukoresha kugirango"
+
+#, fuzzy
+#~ msgid "`%+#D' is private"
+#~ msgstr "`%+#D'ni By'umwihariko"
+
+#, fuzzy
+#~ msgid "`%+#D' is protected"
+#~ msgstr "`%+#D'ni Birinzwe"
+
+#, fuzzy
+#~ msgid "`%+#D' is inaccessible"
+#~ msgstr "`%+#D'ni"
+
+#, fuzzy
+#~ msgid "within this context"
+#~ msgstr "muri iyi Imvugiro"
+
+#, fuzzy
+#~ msgid "invalid conversion from `%T' to `%T'"
+#~ msgstr "Sibyo Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "  initializing argument %P of `%D'"
+#~ msgstr "Gutangiza Bya"
+
+#, fuzzy
+#~ msgid "  initializing argument %P of `%D' from result of `%D'"
+#~ msgstr "Gutangiza Bya Bivuye Igisubizo Bya"
+
+#, fuzzy
+#~ msgid "  initializing temporary from result of `%D'"
+#~ msgstr "Gutangiza By'igihe gito Bivuye Igisubizo Bya"
+
+#, fuzzy
+#~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime"
+#~ msgstr "Ibintu Bya Ubwoko Gihinguranya Kureka ku"
+
+#, fuzzy
+#~ msgid "cannot receive objects of non-POD type `%#T' through `...'"
+#~ msgstr "Akira Ibintu Bya Ubwoko Gihinguranya"
+
+#, fuzzy
+#~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers"
+#~ msgstr "Nka Bya"
+
+#, fuzzy
+#~ msgid "could not find class$ field in java interface type `%T'"
+#~ msgstr "OYA Gushaka ishuri Umwanya in java Ubwoko"
+
+#, fuzzy
+#~ msgid "call to non-function `%D'"
+#~ msgstr "Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "no matching function for call to `%T::%D(%A)%#V'"
+#~ msgstr "Oya Umumaro kugirango Kuri"
+
+#, fuzzy
+#~ msgid "cannot call member function `%D' without object"
+#~ msgstr "Umumaro Igikoresho"
+
+#, fuzzy
+#~ msgid "passing `%T' chooses `%T' over `%T'"
+#~ msgstr "KURI"
+
+#, fuzzy
+#~ msgid "  in call to `%D'"
+#~ msgstr "in Kuri"
+
+#, fuzzy
+#~ msgid "choosing `%D' over `%D'"
+#~ msgstr "KURI"
+
+#, fuzzy
+#~ msgid "  for conversion from `%T' to `%T'"
+#~ msgstr "kugirango Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "  because conversion sequence for the argument is better"
+#~ msgstr "Ihindurangero kugirango i ni"
+
+#, fuzzy
+#~ msgid "ISO C++ says that `%D' and `%D' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter"
+#~ msgstr "C Na ATARIIGIHARWE i Ihindurangero kugirango i ni i Ihindurangero kugirango i"
+
+#, fuzzy
+#~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'"
+#~ msgstr "GUHINDURA Bivuye SHINGIRO Kuri Ubwoko Biturutse Kitaboneka SHINGIRO"
+
+#, fuzzy
+#~ msgid "`%#D' and `%#D' cannot be overloaded"
+#~ msgstr "`%#D'Na"
+
+#, fuzzy
+#~ msgid "duplicate enum value `%D'"
+#~ msgstr "Gusubiramo Agaciro"
+
+#, fuzzy
+#~ msgid "duplicate field `%D' (as enum and non-enum)"
+#~ msgstr "Gusubiramo Umwanya Nka Na"
+
+#, fuzzy
+#~ msgid "duplicate nested type `%D'"
+#~ msgstr "Gusubiramo Ubwoko"
+
+#, fuzzy
+#~ msgid "duplicate field `%D' (as type and non-type)"
+#~ msgstr "Gusubiramo Umwanya Nka Ubwoko Na Ubwoko"
+
+#, fuzzy
+#~ msgid "duplicate member `%D'"
+#~ msgstr "Gusubiramo"
+
+#, fuzzy
+#~ msgid "conflicting access specifications for method `%D', ignored"
+#~ msgstr "kugirango Uburyo"
+
+#, fuzzy
+#~ msgid "conflicting access specifications for field `%s', ignored"
+#~ msgstr "kugirango Umwanya"
+
+#, fuzzy
+#~ msgid "`%D' names constructor"
+#~ msgstr "`%D'Amazina"
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%T'"
+#~ msgstr "`%D'Sibyo in"
+
+#, fuzzy
+#~ msgid "no members matching `%D' in `%#T'"
+#~ msgstr "Oya in"
+
+#, fuzzy
+#~ msgid "`%D' invalid in `%#T'"
+#~ msgstr "`%D'Sibyo in"
+
+#, fuzzy
+#~ msgid "  because of local method `%#D' with same name"
+#~ msgstr "Bya Uburyo Na: Izina:"
+
+#, fuzzy
+#~ msgid "  because of local member `%#D' with same name"
+#~ msgstr "Bya Na: Izina:"
+
+#, fuzzy
+#~ msgid "base class `%#T' has a non-virtual destructor"
+#~ msgstr "SHINGIRO ishuri a Kitaboneka"
+
+#, fuzzy
+#~ msgid "base `%T' with only non-default constructor in class without a constructor"
+#~ msgstr "SHINGIRO Na: Mburabuzi in ishuri a"
+
+#, fuzzy
+#~ msgid "all member functions in class `%T' are private"
+#~ msgstr "Byose Imimaro in ishuri By'umwihariko"
+
+#, fuzzy
+#~ msgid "`%#T' only defines a private destructor and has no friends"
+#~ msgstr "`%#T'a By'umwihariko Na Oya"
+
+#, fuzzy
+#~ msgid "`%#T' only defines private constructors and has no friends"
+#~ msgstr "`%#T'By'umwihariko Na Oya"
+
+#, fuzzy
+#~ msgid "redefinition of `%#T'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "previous definition of `%#T'"
+#~ msgstr "Ibanjirije Insobanuro Bya"
+
+#, fuzzy
+#~ msgid "no unique final overrider for `%D' in `%T'"
+#~ msgstr "Oya Cyo nyine kugirango in"
+
+#, fuzzy
+#~ msgid "`%D' was hidden"
+#~ msgstr "`%D'gihishwe"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_BY.text
+#, fuzzy
+#~ msgid "  by `%D'"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids member `%D' with same name as enclosing class"
+#~ msgstr "C Na: Izina: Nka ishuri"
+
+#, fuzzy
+#~ msgid "`%#D' invalid; an anonymous union can only have non-static data members"
+#~ msgstr "`%#D'Sibyo Ihuza Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "private member `%#D' in anonymous union"
+#~ msgstr "By'umwihariko in Ihuza"
+
+#, fuzzy
+#~ msgid "protected member `%#D' in anonymous union"
+#~ msgstr "Birinzwe in Ihuza"
+
+#, fuzzy
+#~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor"
+#~ msgstr "Imigaragarire kugirango ishuri Gicurasi OYA Na Gicurasi Guhindura>> in a Verisiyo Bya Kuri Kitaboneka"
+
+#, fuzzy
+#~ msgid "bit-field `%#D' with non-integral type"
+#~ msgstr "Umwanya Na: Umubare Wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "bit-field `%D' width not an integer constant"
+#~ msgstr "Umwanya Ubugari OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "negative width in bit-field `%D'"
+#~ msgstr "Ubugari in Umwanya"
+
+#, fuzzy
+#~ msgid "zero width for bit-field `%D'"
+#~ msgstr "Zeru Ubugari kugirango Umwanya"
+
+#, fuzzy
+#~ msgid "width of `%D' exceeds its type"
+#~ msgstr "Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' is too small to hold all values of `%#T'"
+#~ msgstr "`%D'ni Gitoya Kuri Byose Uduciro Bya"
+
+#, fuzzy
+#~ msgid "member `%#D' with constructor not allowed in union"
+#~ msgstr "Na: OYA in Ihuza"
+
+#, fuzzy
+#~ msgid "member `%#D' with destructor not allowed in union"
+#~ msgstr "Na: OYA in Ihuza"
+
+#, fuzzy
+#~ msgid "member `%#D' with copy assignment operator not allowed in union"
+#~ msgstr "Na: Gukoporora Igenera Mukoresha OYA in Ihuza"
+
+#, fuzzy
+#~ msgid "multiple fields in union `%T' initialized"
+#~ msgstr "Igikubo Imyanya in Ihuza"
+
+#, fuzzy
+#~ msgid "field `%D' in local class cannot be static"
+#~ msgstr "Umwanya in ishuri"
+
+#, fuzzy
+#~ msgid "field `%D' invalidly declared function type"
+#~ msgstr "Umwanya Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "field `%D' invalidly declared method type"
+#~ msgstr "Umwanya Uburyo Ubwoko"
+
+#, fuzzy
+#~ msgid "field `%D' invalidly declared offset type"
+#~ msgstr "Umwanya Nta- boneza Ubwoko"
+
+#, fuzzy
+#~ msgid "field `%D' declared static in union"
+#~ msgstr "Umwanya in Ihuza"
+
+#, fuzzy
+#~ msgid "non-static reference `%#D' in class without a constructor"
+#~ msgstr "Indango in ishuri a"
+
+#, fuzzy
+#~ msgid "non-static const member `%#D' in class without a constructor"
+#~ msgstr "in ishuri a"
+
+#, fuzzy
+#~ msgid "field `%#D' with same name as class"
+#~ msgstr "Umwanya Na: Izina: Nka ishuri"
+
+#, fuzzy
+#~ msgid "`%#T' has pointer data members"
+#~ msgstr "`%#T'Mweretsi Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "  but does not override `%T(const %T&)'"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "  or `operator=(const %T&)'"
+#~ msgstr "Cyangwa Mukoresha"
+
+#, fuzzy
+#~ msgid "  but does not override `operator=(const %T&)'"
+#~ msgstr "OYA Mukoresha"
+
+#, fuzzy
+#~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC"
+#~ msgstr "Nta- boneza Bya ubusa SHINGIRO Gicurasi OYA Na in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "class `%T' will be considered nearly empty in a future version of GCC"
+#~ msgstr "ishuri ubusa in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "initializer specified for non-virtual method `%D'"
+#~ msgstr "kugirango Kitaboneka Uburyo"
+
+#, fuzzy
+#~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "Nta- boneza Bya Kitaboneka SHINGIRO ni OYA Na Gicurasi Guhindura>> in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "SHINGIRO in Kuri"
+
+#, fuzzy
+#~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity"
+#~ msgstr "Kitaboneka SHINGIRO in Kuri"
+
+#, fuzzy
+#~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC"
+#~ msgstr "Ingano Kuri Gicurasi OYA Na Gicurasi Guhindura>> in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC"
+#~ msgstr "Nta- boneza Bya ni OYA Na Gicurasi Guhindura>> in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC"
+#~ msgstr "`%D'Kirimo ubusa Inzego Gicurasi SHINGIRO Inzego Kuri ku in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC"
+#~ msgstr "Imigaragarire Bya Inzego Bivuye ubusa ishuri Gicurasi Guhindura>> in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "`%#T' has virtual functions but non-virtual destructor"
+#~ msgstr "`%#T'Kitaboneka Imimaro Kitaboneka"
+
+#, fuzzy
+#~ msgid "trying to finish struct, but kicked out due to previous parse errors"
+#~ msgstr "Kuri Kurangiza Inyuma Kuri Ibanjirije Amakosa"
+
+#, fuzzy
+#~ msgid "language string `\"%s\"' not recognized"
+#~ msgstr "Ururimi Ikurikiranyanyuguti OYA"
+
+#, fuzzy
+#~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'"
+#~ msgstr "Umumaro ku Ihindurangero Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "no matches converting function `%D' to type `%#T'"
+#~ msgstr "Oya Guhindura.... Umumaro Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous"
+#~ msgstr "Guhindura.... Umumaro Kuri Ubwoko ni"
+
+#, fuzzy
+#~ msgid "assuming pointer to member `%D'"
+#~ msgstr "Mweretsi Kuri"
+
+#, fuzzy
+#~ msgid "(a pointer to member can only be formed with `&%E')"
+#~ msgstr "(a Mweretsi Kuri Na:"
+
+#, fuzzy
+#~ msgid "not enough type information"
+#~ msgstr "OYA Ubwoko Ibisobanuro"
+
+#, fuzzy
+#~ msgid "argument of type `%T' does not match `%T'"
+#~ msgstr "Bya Ubwoko OYA BIHUYE"
+
+#, fuzzy
+#~ msgid "invalid operation on uninstantiated type"
+#~ msgstr "Sibyo ku Ubwoko"
+
+#, fuzzy
+#~ msgid "declaration of `%#D'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "changes meaning of `%D' from `%+#D'"
+#~ msgstr "Amahinduka Igisobanuro Bya Bivuye"
+
+#, fuzzy
+#~ msgid "can't convert from incomplete type `%T' to `%T'"
+#~ msgstr "GUHINDURA Bivuye Ubwoko Kuri"
+
+#, fuzzy
+#~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous"
+#~ msgstr "Ihindurangero Bya Bivuye Kuri ni"
+
+#, fuzzy
+#~ msgid "converting from `%T' to `%T'"
+#~ msgstr "Guhindura.... Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "pointer to member cast from `%T' to `%T' is via virtual base"
+#~ msgstr "Mweretsi Kuri Bivuye Kuri ni Biturutse Kitaboneka SHINGIRO"
+
+#, fuzzy
+#~ msgid "cannot convert `%E' from type `%T' to type `%T'"
+#~ msgstr "GUHINDURA Bivuye Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid conversion from '%T' to '%T'"
+#~ msgstr "Sibyo Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "conversion from `%T' to `%T' discards qualifiers"
+#~ msgstr "Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "casting `%T' to `%T' does not dereference pointer"
+#~ msgstr "Kuri OYA Mweretsi"
+
+#, fuzzy
+#~ msgid "cannot convert type `%T' to type `%T'"
+#~ msgstr "GUHINDURA Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "conversion from `%#T' to `%#T'"
+#~ msgstr "Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "`%#T' used where a `%T' was expected"
+#~ msgstr "`%#T'a Ikitezwe:"
+
+#, fuzzy
+#~ msgid "the address of `%D', will always be `true'"
+#~ msgstr "i Aderesi Bya Buri gihe"
+
+#, fuzzy
+#~ msgid "`%#T' used where a floating point value was expected"
+#~ msgstr "`%#T'a Bihindagurika Akadomo Agaciro Ikitezwe:"
+
+#, fuzzy
+#~ msgid "conversion from `%T' to non-scalar type `%T' requested"
+#~ msgstr "Ihindurangero Bivuye Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "object of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in"
+
+#, fuzzy
+#~ msgid "object of type `%T' will not be accessed in %s"
+#~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in"
+
+#, fuzzy
+#~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s"
+#~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in"
+
+#, fuzzy
+#~ msgid "%s cannot resolve address of overloaded function"
+#~ msgstr "%sAderesi Bya Umumaro"
+
+#, fuzzy
+#~ msgid "%s is a reference, not call, to function `%E'"
+#~ msgstr "%sni a Indango OYA Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "ambiguous default type conversion from `%T'"
+#~ msgstr "Mburabuzi Ubwoko Ihindurangero Bivuye"
+
+#, fuzzy
+#~ msgid "  candidate conversions include `%D' and `%D'"
+#~ msgstr "Gushyiramo Na"
+
+#, fuzzy
+#~ msgid "conflicts with previous declaration `%#D'"
+#~ msgstr "Na: Ibanjirije"
+
+#, fuzzy
+#~ msgid "label `%D' used but not defined"
+#~ msgstr "Akarango OYA"
+
+#, fuzzy
+#~ msgid "label `%D' defined but not used"
+#~ msgstr "Akarango OYA"
+
+#, fuzzy
+#~ msgid "namespace alias `%D' not allowed here, assuming `%D'"
+#~ msgstr "Irihimbano OYA"
+
+#, fuzzy
+#~ msgid "previous declaration of `%D'"
+#~ msgstr "Ibanjirije Bya"
+
+#, fuzzy
+#~ msgid "shadowing %s function `%#D'"
+#~ msgstr "Ishyiraho ry'igicucu Umumaro"
+
+#, fuzzy
+#~ msgid "library function `%#D' redeclared as non-function `%#D'"
+#~ msgstr "Isomero Umumaro Nka Umumaro"
+
+#, fuzzy
+#~ msgid "conflicts with built-in declaration `%#D'"
+#~ msgstr "Na: in"
+
+#, fuzzy
+#~ msgid "new declaration `%#D'"
+#~ msgstr "Gishya"
+
+#, fuzzy
+#~ msgid "ambiguates built-in declaration `%#D'"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "`%#D' redeclared as different kind of symbol"
+#~ msgstr "`%#D'Nka Bya IKIMENYETSO"
+
+#, fuzzy
+#~ msgid "previous declaration of `%#D'"
+#~ msgstr "Ibanjirije Bya"
+
+#, fuzzy
+#~ msgid "declaration of template `%#D'"
+#~ msgstr "Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "ambiguates old declaration `%#D'"
+#~ msgstr "ki/ bishaje"
+
+#, fuzzy
+#~ msgid "declaration of C function `%#D' conflicts with"
+#~ msgstr "Bya C Umumaro Na:"
+
+#, fuzzy
+#~ msgid "previous declaration `%#D' here"
+#~ msgstr "Ibanjirije"
+
+#, fuzzy
+#~ msgid "conflicting types for `%#D'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "previous declaration as `%#D'"
+#~ msgstr "Ibanjirije Nka"
+
+#, fuzzy
+#~ msgid "prototype for `%#D'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "follows non-prototype definition here"
+#~ msgstr "Insobanuro"
+
+#, fuzzy
+#~ msgid "previous declaration of `%#D' with %L linkage"
+#~ msgstr "Ibanjirije Bya Na:"
+
+#, fuzzy
+#~ msgid "conflicts with new declaration with %L linkage"
+#~ msgstr "Na: Gishya Na:"
+
+#, fuzzy
+#~ msgid "default argument given for parameter %d of `%#D'"
+#~ msgstr "Mburabuzi kugirango Bya"
+
+#, fuzzy
+#~ msgid "after previous specification in `%#D'"
+#~ msgstr "Nyuma Ibanjirije in"
+
+#, fuzzy
+#~ msgid "`%#D' was used before it was declared inline"
+#~ msgstr "`%#D'Mbere Mumurongo"
+
+#, fuzzy
+#~ msgid "previous non-inline declaration here"
+#~ msgstr "Ibanjirije Mumurongo"
+
+#, fuzzy
+#~ msgid "redundant redeclaration of `%D' in same scope"
+#~ msgstr "Bya in Ingano:"
+
+#, fuzzy
+#~ msgid "declaration of `%F' throws different exceptions"
+#~ msgstr "Bya Amarengayobora"
+
+#, fuzzy
+#~ msgid "than previous declaration `%F'"
+#~ msgstr "Ibanjirije"
+
+#, fuzzy
+#~ msgid "explicit specialization of %D after first use"
+#~ msgstr "Bya Nyuma Itangira Gukoresha"
+
+#, fuzzy
+#~ msgid "`%#D' used prior to declaration"
+#~ msgstr "`%#D'Kuri"
+
+#, fuzzy
+#~ msgid "redeclaration of `wchar_t' as `%T'"
+#~ msgstr "Bya Nka"
+
+#, fuzzy
+#~ msgid "invalid redeclaration of `%D'"
+#~ msgstr "Sibyo Bya"
+
+# svx/source\dialog\backgrnd.src:RID_SVXPAGE_BACKGROUND.FT_SELECTOR.text
+#, fuzzy
+#~ msgid "as `%D'"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "previous external decl of `%#D'"
+#~ msgstr "Ibanjirije external Bya"
+
+#, fuzzy
+#~ msgid "`%D' was previously implicitly declared to return `int'"
+#~ msgstr "`%D'Kuri Garuka"
+
+#, fuzzy
+#~ msgid "extern declaration of `%#D' doesn't match"
+#~ msgstr "Bya BIHUYE"
+
+#, fuzzy
+#~ msgid "declaration of `%#D' shadows a parameter"
+#~ msgstr "Bya a"
+
+#, fuzzy
+#~ msgid "declaration of `%s' shadows a member of `this'"
+#~ msgstr "Bya a Bya"
+
+#, fuzzy
+#~ msgid "`%#D' hides constructor for `%#T'"
+#~ msgstr "`%#D'kugirango"
+
+#, fuzzy
+#~ msgid "`%#D' conflicts with previous using declaration `%#D'"
+#~ msgstr "`%#D'Na: Ibanjirije ikoresha"
+
+#, fuzzy
+#~ msgid "previous non-function declaration `%#D'"
+#~ msgstr "Ibanjirije Umumaro"
+
+#, fuzzy
+#~ msgid "conflicts with function declaration `%#D'"
+#~ msgstr "Na: Umumaro"
+
+#, fuzzy
+#~ msgid "implicit declaration of function `%#D'"
+#~ msgstr "Bya Umumaro"
+
+#, fuzzy
+#~ msgid "label `%s' referenced outside of any function"
+#~ msgstr "Akarango Hanze Bya Umumaro"
+
+#, fuzzy
+#~ msgid "jump to label `%D'"
+#~ msgstr "Simbuka Kuri Akarango"
+
+#, fuzzy
+#~ msgid "jump to case label"
+#~ msgstr "Simbuka Kuri Akarango"
+
+#, fuzzy
+#~ msgid "  crosses initialization of `%#D'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "  enters scope of non-POD `%#D'"
+#~ msgstr "Ingano: Bya"
+
+#, fuzzy
+#~ msgid "  enters try block"
+#~ msgstr "Funga"
+
+#, fuzzy
+#~ msgid "  enters catch block"
+#~ msgstr "Funga"
+
+#, fuzzy
+#~ msgid "  from here"
+#~ msgstr "Bivuye"
+
+#, fuzzy
+#~ msgid "  skips initialization of `%#D'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "label named wchar_t"
+#~ msgstr "Akarango"
+
+#, fuzzy
+#~ msgid "duplicate label `%D'"
+#~ msgstr "Gusubiramo Akarango"
+
+#, fuzzy
+#~ msgid "case label `%E' not within a switch statement"
+#~ msgstr "Akarango OYA muri a Hindura Inyandiko"
+
+#, fuzzy
+#~ msgid "`%#D' redeclared as %C"
+#~ msgstr "`%#D'Nka"
+
+#, fuzzy
+#~ msgid "invalid use of `%D'"
+#~ msgstr "Sibyo Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "`%D::%D' is not a template"
+#~ msgstr "`%D::%D'ni OYA a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "`%D' undeclared in namespace `%D'"
+#~ msgstr "`%D'in"
+
+#, fuzzy
+#~ msgid "`%D' used without template parameters"
+#~ msgstr "`%D'Inyandikorugero Ibigenga"
+
+#, fuzzy
+#~ msgid "no class template named `%#T' in `%#T'"
+#~ msgstr "Oya ishuri Inyandikorugero in"
+
+#, fuzzy
+#~ msgid "no type named `%#T' in `%#T'"
+#~ msgstr "Oya Ubwoko in"
+
+#, fuzzy
+#~ msgid "lookup of `%D' finds `%#D'"
+#~ msgstr "GUSHAKISHA Bya"
+
+#, fuzzy
+#~ msgid "  instead of `%D' from dependent base class"
+#~ msgstr "Bya Bivuye SHINGIRO ishuri"
+
+#, fuzzy
+#~ msgid "  (use `typename %T::%D' if that's what you meant)"
+#~ msgstr "(Gukoresha NIBA"
+
+#, fuzzy
+#~ msgid "name lookup of `%D' changed"
+#~ msgstr "Izina: GUSHAKISHA Bya Byahinduwe"
+
+#, fuzzy
+#~ msgid "  matches this `%D' under ISO standard rules"
+#~ msgstr "iyi Bisanzwe"
+
+#, fuzzy
+#~ msgid "  matches this `%D' under old rules"
+#~ msgstr "iyi ki/ bishaje"
+
+#, fuzzy
+#~ msgid "name lookup of `%D' changed for new ISO `for' scoping"
+#~ msgstr "Izina: GUSHAKISHA Bya Byahinduwe kugirango Gishya"
+
+#, fuzzy
+#~ msgid "  cannot use obsolete binding at `%D' because it has a destructor"
+#~ msgstr "Gukoresha Bifatanya ku a"
+
+#, fuzzy
+#~ msgid "  using obsolete binding at `%D'"
+#~ msgstr "ikoresha Bifatanya ku"
+
+#, fuzzy
+#~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')"
+#~ msgstr "GUSHAKISHA Bya in i Ingano: Bya OYA BIHUYE GUSHAKISHA in i KIGEZWEHO Ingano:"
+
+#, fuzzy
+#~ msgid "an anonymous union cannot have function members"
+#~ msgstr "Ihuza Umumaro"
+
+#, fuzzy
+#~ msgid "member %#D' with constructor not allowed in anonymous aggregate"
+#~ msgstr "Na: OYA in"
+
+#, fuzzy
+#~ msgid "member %#D' with destructor not allowed in anonymous aggregate"
+#~ msgstr "Na: OYA in"
+
+#, fuzzy
+#~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate"
+#~ msgstr "Na: Gukoporora Igenera Mukoresha OYA in"
+
+#, fuzzy
+#~ msgid "redeclaration of C++ built-in type `%T'"
+#~ msgstr "Bya C in Ubwoko"
+
+#, fuzzy
+#~ msgid "multiple types in one declaration"
+#~ msgstr "Igikubo in"
+
+#, fuzzy
+#~ msgid "missing type-name in typedef-declaration"
+#~ msgstr "Ibuze Ubwoko Izina: in"
+
+#, fuzzy
+#~ msgid "ISO C++ prohibits anonymous structs"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "`%D' can only be specified for functions"
+#~ msgstr "`%D'kugirango Imimaro"
+
+#, fuzzy
+#~ msgid "`%D' can only be specified inside a class"
+#~ msgstr "`%D'Mo Imbere a ishuri"
+
+#, fuzzy
+#~ msgid "`%D' can only be specified for constructors"
+#~ msgstr "`%D'kugirango"
+
+#, fuzzy
+#~ msgid "`%D' can only be specified for objects and functions"
+#~ msgstr "`%D'kugirango Ibintu Na Imimaro"
+
+#, fuzzy
+#~ msgid "typedef `%D' is initialized (use __typeof__ instead)"
+#~ msgstr "ni Gukoresha"
+
+#, fuzzy
+#~ msgid "function `%#D' is initialized like a variable"
+#~ msgstr "Umumaro ni nka a IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "declaration of `%#D' has `extern' and is initialized"
+#~ msgstr "Bya Na ni"
+
+#, fuzzy
+#~ msgid "`%#D' is not a static member of `%#T'"
+#~ msgstr "`%#D'ni OYA a Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'"
+#~ msgstr "C OYA Kuri Nka"
+
+#, fuzzy
+#~ msgid "duplicate initialization of %D"
+#~ msgstr "Gusubiramo Bya"
+
+#, fuzzy
+#~ msgid "declaration of `%#D' outside of class is not definition"
+#~ msgstr "Bya Hanze Bya ishuri ni OYA Insobanuro"
+
+#, fuzzy
+#~ msgid "variable `%#D' has initializer but incomplete type"
+#~ msgstr "IMPINDURAGACIRO Ubwoko"
+
+#, fuzzy
+#~ msgid "elements of array `%#D' have incomplete type"
+#~ msgstr "Ibintu Bya Imbonerahamwe Ubwoko"
+
+#, fuzzy
+#~ msgid "aggregate `%#D' has incomplete type and cannot be defined"
+#~ msgstr "Ubwoko Na"
+
+#, fuzzy
+#~ msgid "`%D' declared as reference but not initialized"
+#~ msgstr "`%D'Nka Indango OYA"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'"
+#~ msgstr "C Gukoresha Bya Urutonde Kuri gutangiza Indango"
+
+#, fuzzy
+#~ msgid "cannot initialize `%T' from `%T'"
+#~ msgstr "gutangiza Bivuye"
+
+#, fuzzy
+#~ msgid "initializer fails to determine size of `%D'"
+#~ msgstr "Kuri Ingano Bya"
+
+#, fuzzy
+#~ msgid "array size missing in `%D'"
+#~ msgstr "Imbonerahamwe Ingano Ibuze in"
+
+#, fuzzy
+#~ msgid "zero-size array `%D'"
+#~ msgstr "Zeru Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "storage size of `%D' isn't known"
+#~ msgstr "Ingano Bya si"
+
+#, fuzzy
+#~ msgid "storage size of `%D' isn't constant"
+#~ msgstr "Ingano Bya si"
+
+#, fuzzy
+#~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)"
+#~ msgstr "Bya Mumurongo Umumaro Ibyatanzwe Hejuru Na: Igikubo Amakopi"
+
+#, fuzzy
+#~ msgid "  you can work around this by removing the initializer"
+#~ msgstr "Akazi iyi ku i"
+
+#, fuzzy
+#~ msgid "uninitialized const `%D'"
+#~ msgstr "Itatangijwe"
+
+#, fuzzy
+#~ msgid "brace-enclosed initializer used to initialize `%T'"
+#~ msgstr "Kuri gutangiza"
+
+#, fuzzy
+#~ msgid "initializer for `%T' must be brace-enclosed"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "ISO C++ does not allow designated initializers"
+#~ msgstr "C OYA Kwemerera"
+
+#, fuzzy
+#~ msgid "`%T' has no non-static data member named `%D'"
+#~ msgstr "`%T'Oya Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "too many initializers for `%T'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "variable-sized object `%D' may not be initialized"
+#~ msgstr "IMPINDURAGACIRO Igikoresho Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "`%D' has incomplete type"
+#~ msgstr "`%D'Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' must be initialized by constructor, not by `{...}'"
+#~ msgstr "`%D'ku OYA ku"
+
+#, fuzzy
+#~ msgid "structure `%D' with uninitialized const members"
+#~ msgstr "Imiterere Na: Itatangijwe"
+
+#, fuzzy
+#~ msgid "structure `%D' with uninitialized reference members"
+#~ msgstr "Imiterere Na: Itatangijwe Indango"
+
+#, fuzzy
+#~ msgid "assignment (not initialization) in declaration"
+#~ msgstr "Igenera OYA in"
+
+#, fuzzy
+#~ msgid "cannot initialize `%D' to namespace `%D'"
+#~ msgstr "gutangiza Kuri"
+
+#, fuzzy
+#~ msgid "shadowing previous type declaration of `%#D'"
+#~ msgstr "Ishyiraho ry'igicucu Ibanjirije Ubwoko Bya"
+
+#, fuzzy
+#~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'"
+#~ msgstr "`%D'Urudodo Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' is thread-local and so cannot be dynamically initialized"
+#~ msgstr "`%D'ni Urudodo Na"
+
+#, fuzzy
+#~ msgid "multiple initializations given for `%D'"
+#~ msgstr "Igikubo kugirango"
+
+#, fuzzy
+#~ msgid "invalid catch parameter"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "destructor for alien class `%T' cannot be a member"
+#~ msgstr "kugirango ishuri a"
+
+#, fuzzy
+#~ msgid "constructor for alien class `%T' cannot be a member"
+#~ msgstr "kugirango ishuri a"
+
+#, fuzzy
+#~ msgid "`%D' declared as a `virtual' %s"
+#~ msgstr "`%D'Nka a"
+
+#, fuzzy
+#~ msgid "`%D' declared as an `inline' %s"
+#~ msgstr "`%D'Nka"
+
+#, fuzzy
+#~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration"
+#~ msgstr "`Na Umumaro ku Sibyo in"
+
+#, fuzzy
+#~ msgid "`%D' declared as a friend"
+#~ msgstr "`%D'Nka a"
+
+#, fuzzy
+#~ msgid "`%D' declared with an exception specification"
+#~ msgstr "`%D'Na: Irengayobora(-)"
+
+#, fuzzy
+#~ msgid "cannot declare `::main' to be a template"
+#~ msgstr "Kuri a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "cannot declare `::main' to be inline"
+#~ msgstr "Kuri Mumurongo"
+
+#, fuzzy
+#~ msgid "cannot declare `::main' to be static"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "`main' must return `int'"
+#~ msgstr "`Garuka"
+
+#, fuzzy
+#~ msgid "non-local function `%#D' uses anonymous type"
+#~ msgstr "Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage"
+#~ msgstr "`%#D'OYA Kuri i Ubwoko ni OYA kugirango"
+
+#, fuzzy
+#~ msgid "non-local function `%#D' uses local type `%T'"
+#~ msgstr "Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "%smember function `%D' cannot have `%T' method qualifier"
+#~ msgstr "%smemberUmumaro Uburyo"
+
+#, fuzzy
+#~ msgid "defining explicit specialization `%D' in friend declaration"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "invalid use of template-id `%D' in declaration of primary template"
+#~ msgstr "Sibyo Gukoresha Bya Inyandikorugero ID in Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "Mburabuzi ingingo OYA in Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'"
+#~ msgstr "`ni OYA in Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "definition of implicitly-declared `%D'"
+#~ msgstr "Insobanuro Bya"
+
+#, fuzzy
+#~ msgid "no `%#D' member function declared in class `%T'"
+#~ msgstr "Oya Umumaro in ishuri"
+
+#, fuzzy
+#~ msgid "non-local variable `%#D' uses local type `%T'"
+#~ msgstr "IMPINDURAGACIRO Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid in-class initialization of static data member of non-integral type `%T'"
+#~ msgstr "Sibyo in ishuri Bya Ibyatanzwe Bya Umubare Wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'"
+#~ msgstr "C in ishuri Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'"
+#~ msgstr "C Bya Bya Umubare Wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "size of array `%D' has non-integer type"
+#~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "size of array has non-integer type"
+#~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "size of array `%D' is negative"
+#~ msgstr "Ingano Bya Imbonerahamwe ni"
+
+#, fuzzy
+#~ msgid "size of array is negative"
+#~ msgstr "Ingano Bya Imbonerahamwe ni"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids zero-size array `%D'"
+#~ msgstr "C Zeru Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids zero-size array"
+#~ msgstr "C Zeru Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "size of array `%D' is not an integral constant-expression"
+#~ msgstr "Ingano Bya Imbonerahamwe ni OYA Umubare Wuzuye imvugo"
+
+#, fuzzy
+#~ msgid "size of array is not an integral constant-expression"
+#~ msgstr "Ingano Bya Imbonerahamwe ni OYA Umubare Wuzuye imvugo"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids variable-size array `%D'"
+#~ msgstr "C IMPINDURAGACIRO Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids variable-size array"
+#~ msgstr "C IMPINDURAGACIRO Ingano Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "overflow in array dimension"
+#~ msgstr "Byarenze urugero in Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "declaration of `%D' as %s"
+#~ msgstr "Bya Nka"
+
+#, fuzzy
+#~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "Bya Nka Imbonerahamwe kugirango Byose Ingero i Itangira"
+
+#, fuzzy
+#~ msgid "multidimensional array must have bounds for all dimensions except the first"
+#~ msgstr "Imbonerahamwe kugirango Byose Ingero i Itangira"
+
+#, fuzzy
+#~ msgid "return type specification for constructor invalid"
+#~ msgstr "Garuka Ubwoko kugirango Sibyo"
+
+#, fuzzy
+#~ msgid "return type specification for destructor invalid"
+#~ msgstr "Garuka Ubwoko kugirango Sibyo"
+
+#, fuzzy
+#~ msgid "operator `%T' declared to return `%T'"
+#~ msgstr "Mukoresha Kuri Garuka"
+
+#, fuzzy
+#~ msgid "return type specified for `operator %T'"
+#~ msgstr "Garuka Ubwoko kugirango Mukoresha"
+
+#, fuzzy
+#~ msgid "destructors must be member functions"
+#~ msgstr "Imimaro"
+
+#, fuzzy
+#~ msgid "destructor `%T' must match class name `%T'"
+#~ msgstr "BIHUYE ishuri Izina:"
+
+#, fuzzy
+#~ msgid "variable declaration is not allowed here"
+#~ msgstr "IMPINDURAGACIRO ni OYA"
+
+#, fuzzy
+#~ msgid "invalid declarator"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "declarator-id missing; using reserved word `%D'"
+#~ msgstr "ID Ibuze ikoresha ijambo"
+
+#, fuzzy
+#~ msgid "type `%T' is not derived from type `%T'"
+#~ msgstr "Ubwoko ni OYA Bivuye Ubwoko"
+
+#, fuzzy
+#~ msgid "`%T' specified as declarator-id"
+#~ msgstr "`%T'Nka ID"
+
+#, fuzzy
+#~ msgid "  perhaps you want `%T' for a constructor"
+#~ msgstr "kugirango a"
+
+#, fuzzy
+#~ msgid "invalid use of template-name '%E' in a declarator"
+#~ msgstr "Sibyo Gukoresha Bya Inyandikorugero Izina: in a"
+
+#, fuzzy
+#~ msgid "declaration of `%D' as non-function"
+#~ msgstr "Bya Nka Umumaro"
+
+#, fuzzy
+#~ msgid "`bool' is now a keyword"
+#~ msgstr "`ni NONEAHA a Ijambo- banze"
+
+#, fuzzy
+#~ msgid "multiple declarations `%T' and `%T'"
+#~ msgstr "Igikubo Na"
+
+#, fuzzy
+#~ msgid "ISO C++ does not support `long long'"
+#~ msgstr "C OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids declaration of `%s' with no type"
+#~ msgstr "C Bya Na: Oya Ubwoko"
+
+#, fuzzy
+#~ msgid "`%T' is implicitly a typename"
+#~ msgstr "`%T'ni a"
+
+#, fuzzy
+#~ msgid "short, signed or unsigned invalid for `%s'"
+#~ msgstr "Cyangwa Bitashizweho umukono Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "long and short specified together for `%s'"
+#~ msgstr "Na kugirango"
+
+#, fuzzy
+#~ msgid "signed and unsigned given together for `%s'"
+#~ msgstr "Na Bitashizweho umukono kugirango"
+
+#, fuzzy
+#~ msgid "qualifiers are not allowed on declaration of `operator %T'"
+#~ msgstr "OYA ku Bya Mukoresha"
+
+#, fuzzy
+#~ msgid "member `%D' cannot be declared both virtual and static"
+#~ msgstr "Byombi Kitaboneka Na"
+
+#, fuzzy
+#~ msgid "storage class specifiers invalid in parameter declarations"
+#~ msgstr "ishuri Sibyo in"
+
+#, fuzzy
+#~ msgid "typedef declaration invalid in parameter declaration"
+#~ msgstr "Sibyo in"
+
+#, fuzzy
+#~ msgid "virtual outside class declaration"
+#~ msgstr "Kitaboneka Hanze ishuri"
+
+#, fuzzy
+#~ msgid "storage class specified for %s `%s'"
+#~ msgstr "ishuri kugirango"
+
+#, fuzzy
+#~ msgid "storage class specifiers invalid in friend function declarations"
+#~ msgstr "ishuri Sibyo in Umumaro"
+
+#, fuzzy
+#~ msgid "destructor cannot be static member function"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "destructors may not be `%s'"
+#~ msgstr "Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "constructor cannot be static member function"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "constructors cannot be declared virtual"
+#~ msgstr "Kitaboneka"
+
+#, fuzzy
+#~ msgid "constructors may not be `%s'"
+#~ msgstr "Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "return value type specifier for constructor ignored"
+#~ msgstr "Garuka Agaciro Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "can't initialize friend function `%s'"
+#~ msgstr "gutangiza Umumaro"
+
+#, fuzzy
+#~ msgid "virtual functions cannot be friends"
+#~ msgstr "Kitaboneka Imimaro"
+
+#, fuzzy
+#~ msgid "friend declaration not in class definition"
+#~ msgstr "OYA in ishuri Insobanuro"
+
+#, fuzzy
+#~ msgid "can't define friend function `%s' in a local class definition"
+#~ msgstr "Kugaragaza... Umumaro in a ishuri Insobanuro"
+
+#, fuzzy
+#~ msgid "destructors may not have parameters"
+#~ msgstr "Gicurasi OYA Ibigenga"
+
+#, fuzzy
+#~ msgid "cannot declare reference to `%#T'"
+#~ msgstr "Indango Kuri"
+
+#, fuzzy
+#~ msgid "cannot declare pointer to `%#T'"
+#~ msgstr "Mweretsi Kuri"
+
+#, fuzzy
+#~ msgid "cannot declare pointer to `%#T' member"
+#~ msgstr "Mweretsi Kuri"
+
+#, fuzzy
+#~ msgid "extra qualification `%T::' on member `%s' ignored"
+#~ msgstr "Birenga ku"
+
+#, fuzzy
+#~ msgid "cannot declare member function `%T::%s' within `%T'"
+#~ msgstr "Umumaro muri"
+
+#, fuzzy
+#~ msgid "cannot declare member `%T::%s' within `%T'"
+#~ msgstr "muri"
+
+#, fuzzy
+#~ msgid "data member may not have variably modified type `%T'"
+#~ msgstr "Ibyatanzwe Gicurasi OYA Byahinduwe Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter may not have variably modified type `%T'"
+#~ msgstr "Gicurasi OYA Byahinduwe Ubwoko"
+
+#, fuzzy
+#~ msgid "only declarations of constructors can be `explicit'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "non-object member `%s' cannot be declared `mutable'"
+#~ msgstr "Igikoresho"
+
+#, fuzzy
+#~ msgid "function `%s' cannot be declared `mutable'"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "template-id `%D' used as a declarator"
+#~ msgstr "Inyandikorugero ID Nka a"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class"
+#~ msgstr "C Ubwoko Na: Izina: Nka ishuri"
+
+#, fuzzy
+#~ msgid "typedef name may not be class-qualified"
+#~ msgstr "Izina: Gicurasi OYA ishuri"
+
+#, fuzzy
+#~ msgid "invalid type qualifier for non-member function type"
+#~ msgstr "Sibyo Ubwoko kugirango Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "type qualifiers specified for friend class declaration"
+#~ msgstr "Ubwoko kugirango ishuri"
+
+#, fuzzy
+#~ msgid "`inline' specified for friend class declaration"
+#~ msgstr "`kugirango ishuri"
+
+#, fuzzy
+#~ msgid "template parameters cannot be friends"
+#~ msgstr "Inyandikorugero Ibigenga"
+
+#, fuzzy
+#~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'"
+#~ msgstr "E."
+
+#, fuzzy
+#~ msgid "friend declaration requires class-key, i.e. `friend %#T'"
+#~ msgstr "E."
+
+#, fuzzy
+#~ msgid "trying to make class `%T' a friend of global scope"
+#~ msgstr "Kuri Ubwoko ishuri a Bya Ingano:"
+
+#, fuzzy
+#~ msgid "invalid qualifiers on non-member function type"
+#~ msgstr "Sibyo ku Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "abstract declarator `%T' used as declaration"
+#~ msgstr "Incamake Nka"
+
+#, fuzzy
+#~ msgid "unnamed variable or field declared void"
+#~ msgstr "Kitiswe IMPINDURAGACIRO Cyangwa Umwanya"
+
+#, fuzzy
+#~ msgid "variable or field declared void"
+#~ msgstr "IMPINDURAGACIRO Cyangwa Umwanya"
+
+#, fuzzy
+#~ msgid "cannot use `::' in parameter declaration"
+#~ msgstr "Gukoresha in"
+
+#, fuzzy
+#~ msgid "invalid use of `::'"
+#~ msgstr "Sibyo Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "function `%D' cannot be declared friend"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "can't make `%D' into a method -- not in a class"
+#~ msgstr "Ubwoko a Uburyo OYA in a ishuri"
+
+#, fuzzy
+#~ msgid "function `%D' declared virtual inside a union"
+#~ msgstr "Umumaro Kitaboneka Mo Imbere a Ihuza"
+
+#, fuzzy
+#~ msgid "`%D' cannot be declared virtual, since it is always static"
+#~ msgstr "`%D'Kitaboneka guhera ni Buri gihe"
+
+#, fuzzy
+#~ msgid "field `%D' has incomplete type"
+#~ msgstr "Umwanya Ubwoko"
+
+#, fuzzy
+#~ msgid "name `%T' has incomplete type"
+#~ msgstr "Izina: Ubwoko"
+
+#, fuzzy
+#~ msgid "  in instantiation of template `%T'"
+#~ msgstr "in Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "`%s' is neither function nor member function; cannot be declared friend"
+#~ msgstr "`%s'ni Umumaro Umumaro"
+
+#, fuzzy
+#~ msgid "member functions are implicitly friends of their class"
+#~ msgstr "Imimaro Bya ishuri"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids initialization of member `%D'"
+#~ msgstr "C Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class"
+#~ msgstr "C Ibyatanzwe Na: Izina: Nka ishuri"
+
+#, fuzzy
+#~ msgid "storage class `auto' invalid for function `%s'"
+#~ msgstr "ishuri Sibyo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "storage class `register' invalid for function `%s'"
+#~ msgstr "ishuri Sibyo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "storage class `__thread' invalid for function `%s'"
+#~ msgstr "ishuri Sibyo kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "storage class `static' invalid for function `%s' declared out of global scope"
+#~ msgstr "ishuri Sibyo kugirango Umumaro Inyuma Bya Ingano:"
+
+#, fuzzy
+#~ msgid "storage class `inline' invalid for function `%s' declared out of global scope"
+#~ msgstr "ishuri Sibyo kugirango Umumaro Inyuma Bya Ingano:"
+
+#, fuzzy
+#~ msgid "virtual non-class function `%s'"
+#~ msgstr "Kitaboneka ishuri Umumaro"
+
+#, fuzzy
+#~ msgid "cannot declare member function `%D' to have static linkage"
+#~ msgstr "Umumaro Kuri"
+
+#, fuzzy
+#~ msgid "cannot declare static function inside another function"
+#~ msgstr "Umumaro Mo Imbere Umumaro"
+
+#, fuzzy
+#~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member"
+#~ msgstr "`Gicurasi OYA Ryari: Nka Kuri a Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "cannot explicitly declare member `%#D' to have extern linkage"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "default argument for `%#D' has type `%T'"
+#~ msgstr "Mburabuzi kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "default argument for parameter of type `%T' has type `%T'"
+#~ msgstr "Mburabuzi kugirango Bya Ubwoko Ubwoko"
+
+#, fuzzy
+#~ msgid "default argument `%E' uses local variable `%D'"
+#~ msgstr "Mburabuzi IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "invalid string constant `%E'"
+#~ msgstr "Sibyo Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?"
+#~ msgstr "Sibyo Umubare wuzuye in Urutonde Kuri Izina:"
+
+#, fuzzy
+#~ msgid "parameter `%D' invalidly declared method type"
+#~ msgstr "Uburyo Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter `%D' invalidly declared offset type"
+#~ msgstr "Nta- boneza Ubwoko"
+
+#, fuzzy
+#~ msgid "parameter `%D' includes %s to array of unknown bound `%T'"
+#~ msgstr "Kuri Imbonerahamwe Bya Kitazwi"
+
+#, fuzzy
+#~ msgid "invalid constructor; you probably meant `%T (const %T&)'"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "`%D' must be a nonstatic member function"
+#~ msgstr "`%D'a Umumaro"
+
+#, fuzzy
+#~ msgid "`%D' must be either a non-static member function or a non-member function"
+#~ msgstr "`%D'a Umumaro Cyangwa a Umumaro"
+
+#, fuzzy
+#~ msgid "`%D' must have an argument of class or enumerated type"
+#~ msgstr "`%D'Bya ishuri Cyangwa Ubwoko"
+
+#, fuzzy
+#~ msgid "conversion to %s%s will never use a type conversion operator"
+#~ msgstr "Ihindurangero Kuri Nta narimwe Gukoresha a Ubwoko Ihindurangero Mukoresha"
+
+#, fuzzy
+#~ msgid "ISO C++ prohibits overloading operator ?:"
+#~ msgstr "C Mukoresha"
+
+#, fuzzy
+#~ msgid "postfix `%D' must take `int' as its argument"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "postfix `%D' must take `int' as its second argument"
+#~ msgstr "Nka ISEGONDA"
+
+#, fuzzy
+#~ msgid "`%D' must take either zero or one argument"
+#~ msgstr "`%D'Zeru Cyangwa"
+
+#, fuzzy
+#~ msgid "`%D' must take either one or two arguments"
+#~ msgstr "`%D'Cyangwa ingingo"
+
+#, fuzzy
+#~ msgid "prefix `%D' should return `%T'"
+#~ msgstr "Imbanziriza Garuka"
+
+#, fuzzy
+#~ msgid "postfix `%D' should return `%T'"
+#~ msgstr "Garuka"
+
+#, fuzzy
+#~ msgid "`%D' must take exactly two arguments"
+#~ msgstr "`%D'ingingo"
+
+#, fuzzy
+#~ msgid "user-defined `%D' always evaluates both arguments"
+#~ msgstr "Ukoresha: Buri gihe Byombi ingingo"
+
+#, fuzzy
+#~ msgid "`%D' should return by value"
+#~ msgstr "`%D'Garuka ku Agaciro"
+
+#, fuzzy
+#~ msgid "`%D' cannot have default arguments"
+#~ msgstr "`%D'Mburabuzi ingingo"
+
+#, fuzzy
+#~ msgid "using typedef-name `%D' after `%s'"
+#~ msgstr "ikoresha Izina: Nyuma"
+
+#, fuzzy
+#~ msgid "using template type parameter `%T' after `%s'"
+#~ msgstr "ikoresha Inyandikorugero Ubwoko Nyuma"
+
+#, fuzzy
+#~ msgid "`%s %T' declares a new type at namespace scope"
+#~ msgstr "`%s%T'a Gishya Ubwoko ku Ingano:"
+
+#, fuzzy
+#~ msgid "  names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'"
+#~ msgstr "Amazina Bivuye SHINGIRO Inzego OYA Kigaragara Kuri Izina: GUSHAKISHA Kuri Kuri i Ubwoko"
+
+#, fuzzy
+#~ msgid "use of enum `%#D' without previous declaration"
+#~ msgstr "Gukoresha Bya Ibanjirije"
+
+#, fuzzy
+#~ msgid "derived union `%T' invalid"
+#~ msgstr "Ihuza Sibyo"
+
+#, fuzzy
+#~ msgid "base type `%T' fails to be a struct or class type"
+#~ msgstr "SHINGIRO Ubwoko Kuri a Cyangwa ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "base class `%T' has incomplete type"
+#~ msgstr "SHINGIRO ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "recursive type `%T' undefined"
+#~ msgstr "Ubwoko kidasobanuye"
+
+#, fuzzy
+#~ msgid "duplicate base type `%T' invalid"
+#~ msgstr "Gusubiramo SHINGIRO Ubwoko Sibyo"
+
+#, fuzzy
+#~ msgid "multiple definition of `%#T'"
+#~ msgstr "Igikubo Insobanuro Bya"
+
+#, fuzzy
+#~ msgid "previous definition here"
+#~ msgstr "Ibanjirije Insobanuro"
+
+#, fuzzy
+#~ msgid "enumerator value for `%D' not integer constant"
+#~ msgstr "Agaciro kugirango OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "overflow in enumeration values at `%D'"
+#~ msgstr "Byarenze urugero in Uduciro ku"
+
+#, fuzzy
+#~ msgid "return type `%#T' is incomplete"
+#~ msgstr "Garuka Ubwoko ni"
+
+#, fuzzy
+#~ msgid "semicolon missing after declaration of `%#T'"
+#~ msgstr "Akabago n'Akitso Ibuze Nyuma Bya"
+
+#, fuzzy
+#~ msgid "return type for `main' changed to `int'"
+#~ msgstr "Garuka Ubwoko kugirango Byahinduwe Kuri"
+
+#, fuzzy
+#~ msgid "`%D' implicitly declared before its definition"
+#~ msgstr "`%D'Mbere Insobanuro"
+
+#, fuzzy
+#~ msgid "`operator=' should return a reference to `*this'"
+#~ msgstr "`Mukoresha Garuka a Indango Kuri"
+
+#, fuzzy
+#~ msgid "`%D' is already defined in class `%T'"
+#~ msgstr "`%D'ni in ishuri"
+
+#, fuzzy
+#~ msgid "static member function `%#D' declared with type qualifiers"
+#~ msgstr "Umumaro Na: Ubwoko"
+
+#, fuzzy
+#~ msgid "duplicate type qualifiers in %s declaration"
+#~ msgstr "Gusubiramo Ubwoko in"
+
+#, fuzzy
+#~ msgid "template `%#D' instantiated in file without #pragma interface"
+#~ msgstr "Inyandikorugero in IDOSIYE"
+
+#, fuzzy
+#~ msgid "template `%#D' defined in file without #pragma interface"
+#~ msgstr "Inyandikorugero in IDOSIYE"
+
+#, fuzzy
+#~ msgid "name missing for member function"
+#~ msgstr "Izina: Ibuze kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "parser may be lost: is there a '{' missing somewhere?"
+#~ msgstr "Gicurasi ni a Ibuze"
+
+#, fuzzy
+#~ msgid "ambiguous conversion for array subscript"
+#~ msgstr "Ihindurangero kugirango Imbonerahamwe Inyandiko nyesi"
+
+#, fuzzy
+#~ msgid "invalid types `%T[%T]' for array subscript"
+#~ msgstr "Sibyo kugirango Imbonerahamwe Inyandiko nyesi"
+
+#, fuzzy
+#~ msgid "type `%#T' argument given to `delete', expected pointer"
+#~ msgstr "Ubwoko Kuri Ikitezwe: Mweretsi"
+
+#, fuzzy
+#~ msgid "anachronistic use of array size in vector delete"
+#~ msgstr "Gukoresha Bya Imbonerahamwe Ingano in Gusiba"
+
+#, fuzzy
+#~ msgid "cannot delete a function.  Only pointer-to-objects are valid arguments to `delete'"
+#~ msgstr "Gusiba a Umumaro Mweretsi Kuri Ibintu Byemewe ingingo Kuri"
+
+#, fuzzy
+#~ msgid "deleting `%T' is undefined"
+#~ msgstr "ni kidasobanuye"
+
+#, fuzzy
+#~ msgid "deleting array `%#D'"
+#~ msgstr "Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "invalid declaration of member template `%#D' in local class"
+#~ msgstr "Sibyo Bya Inyandikorugero in ishuri"
+
+#, fuzzy
+#~ msgid "invalid use of `virtual' in template declaration of `%#D'"
+#~ msgstr "Sibyo Gukoresha Bya in Inyandikorugero Bya"
+
+#, fuzzy
+#~ msgid "template declaration of `%#D'"
+#~ msgstr "Inyandikorugero Bya"
+
+#, fuzzy
+#~ msgid "Java method '%D' has non-Java return type `%T'"
+#~ msgstr "Uburyo Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "Java method '%D' has non-Java parameter type `%T'"
+#~ msgstr "Uburyo Ubwoko"
+
+#, fuzzy
+#~ msgid "prototype for `%#D' does not match any in class `%T'"
+#~ msgstr "kugirango OYA BIHUYE in ishuri"
+
+#, fuzzy
+#~ msgid "local class `%#T' shall not have static data member `%#D'"
+#~ msgstr "ishuri OYA Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "initializer invalid for static member with constructor"
+#~ msgstr "Sibyo kugirango Na:"
+
+#, fuzzy
+#~ msgid "(an out of class initialization is required)"
+#~ msgstr "(Inyuma Bya ishuri ni Bya ngombwa"
+
+#, fuzzy
+#~ msgid "invalid data member initialization"
+#~ msgstr "Sibyo Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "(use `=' to initialize static data members)"
+#~ msgstr "(Gukoresha Kuri gutangiza Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "member `%D' conflicts with virtual function table field name"
+#~ msgstr "Na: Kitaboneka Umumaro imbonerahamwe# Umwanya Izina:"
+
+#, fuzzy
+#~ msgid "`%D' is already defined in `%T'"
+#~ msgstr "`%D'ni in"
+
+#, fuzzy
+#~ msgid "field initializer is not constant"
+#~ msgstr "Umwanya ni OYA"
+
+#, fuzzy
+#~ msgid "`asm' specifiers are not permitted on non-static data members"
+#~ msgstr "`OYA ku Ibyatanzwe"
+
+#, fuzzy
+#~ msgid "cannot declare `%D' to be a bit-field type"
+#~ msgstr "Kuri a Umwanya Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot declare bit-field `%D' with function type"
+#~ msgstr "Umwanya Na: Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' is already defined in the class %T"
+#~ msgstr "`%D'ni in i ishuri"
+
+#, fuzzy
+#~ msgid "static member `%D' cannot be a bit-field"
+#~ msgstr "a Umwanya"
+
+#, fuzzy
+#~ msgid "initializer specified for non-member function `%D'"
+#~ msgstr "kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "invalid initializer for virtual method `%D'"
+#~ msgstr "Sibyo kugirango Kitaboneka Uburyo"
+
+#, fuzzy
+#~ msgid "anonymous struct not inside named type"
+#~ msgstr "OYA Mo Imbere Ubwoko"
+
+#, fuzzy
+#~ msgid "namespace-scope anonymous aggregates must be static"
+#~ msgstr "Ingano:"
+
+#, fuzzy
+#~ msgid "anonymous aggregate with no members"
+#~ msgstr "Na: Oya"
+
+#, fuzzy
+#~ msgid "`operator new' must return type `%T'"
+#~ msgstr "`Mukoresha Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "`operator new' takes type `size_t' (`%T') as first parameter"
+#~ msgstr "`Mukoresha Ubwoko Nka Itangira"
+
+#, fuzzy
+#~ msgid "`operator delete' must return type `%T'"
+#~ msgstr "`Mukoresha Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "`operator delete' takes type `%T' as first parameter"
+#~ msgstr "`Mukoresha Ubwoko Nka Itangira"
+
+#, fuzzy
+#~ msgid "too many initialization functions required"
+#~ msgstr "Imimaro Bya ngombwa"
+
+#, fuzzy
+#~ msgid "inline function `%D' used but never defined"
+#~ msgstr "Mumurongo Umumaro Nta narimwe"
+
+#, fuzzy
+#~ msgid "use of old-style cast"
+#~ msgstr "Gukoresha Bya ki/ bishaje IMISUSIRE"
+
+#, fuzzy
+#~ msgid "use of `%D' is ambiguous"
+#~ msgstr "Gukoresha Bya ni"
+
+#, fuzzy
+#~ msgid "  first declared as `%#D' here"
+#~ msgstr "Itangira Nka"
+
+#, fuzzy
+#~ msgid "  also declared as `%#D' here"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "`%D' denotes an ambiguous type"
+#~ msgstr "`%D'Ubwoko"
+
+#, fuzzy
+#~ msgid "  first type here"
+#~ msgstr "Itangira Ubwoko"
+
+#, fuzzy
+#~ msgid "  other type here"
+#~ msgstr "Ikindi Ubwoko"
+
+#, fuzzy
+#~ msgid "declaration of `%D' not in a namespace surrounding `%D'"
+#~ msgstr "Bya OYA in a"
+
+#, fuzzy
+#~ msgid "`%D' should have been declared inside `%D'"
+#~ msgstr "`%D'Mo Imbere"
+
+#, fuzzy
+#~ msgid "`%D' is not a function,"
+#~ msgstr "`%D'ni OYA a Umumaro"
+
+#, fuzzy
+#~ msgid "  conflict with `%D'"
+#~ msgstr "Na:"
+
+#, fuzzy
+#~ msgid "unknown namespace `%D'"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "`%T' is not a namespace"
+#~ msgstr "`%T'ni OYA a"
+
+#, fuzzy
+#~ msgid "`%D' is not a namespace"
+#~ msgstr "`%D'ni OYA a"
+
+#, fuzzy
+#~ msgid "a using-declaration cannot specify a template-id.  Try `using %D'"
+#~ msgstr "a ikoresha a Inyandikorugero ID ikoresha"
+
+#, fuzzy
+#~ msgid "namespace `%D' not allowed in using-declaration"
+#~ msgstr "OYA in ikoresha"
+
+#, fuzzy
+#~ msgid "`%D' not declared"
+#~ msgstr "`%D'OYA"
+
+#, fuzzy
+#~ msgid "`%D' is already declared in this scope"
+#~ msgstr "`%D'ni in iyi Ingano:"
+
+#, fuzzy
+#~ msgid "using declaration `%D' introduced ambiguous type `%T'"
+#~ msgstr "ikoresha Ubwoko"
+
+#, fuzzy
+#~ msgid "using-declaration for non-member at class scope"
+#~ msgstr "ikoresha kugirango ku ishuri Ingano:"
+
+#, fuzzy
+#~ msgid "using-declaration for destructor"
+#~ msgstr "ikoresha kugirango"
+
+#, fuzzy
+#~ msgid "a using-declaration cannot specify a template-id.  Try  `using %T::%D'"
+#~ msgstr "a ikoresha a Inyandikorugero ID ikoresha"
+
+#, fuzzy
+#~ msgid "default argument missing for parameter %P of `%+#D'"
+#~ msgstr "Mburabuzi Ibuze kugirango Bya"
+
+#, fuzzy
+#~ msgid "extra qualification `%T::' on member `%D' ignored"
+#~ msgstr "Birenga ku"
+
+#, fuzzy
+#~ msgid "`%T' does not have a class or union named `%D'"
+#~ msgstr "`%T'OYA a ishuri Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "`%T' is not a class or union type"
+#~ msgstr "`%T'ni OYA a ishuri Cyangwa Ihuza Ubwoko"
+
+#, fuzzy
+#~ msgid "template argument is required for `%T'"
+#~ msgstr "Inyandikorugero ni Bya ngombwa kugirango"
+
+#, fuzzy
+#~ msgid "declaration of `%D' in `%D' which does not enclose `%D'"
+#~ msgstr "Bya in OYA"
+
+#, fuzzy
+#~ msgid "`%s' not supported by %s"
+#~ msgstr "`%s'OYA ku"
+
+#, fuzzy
+#~ msgid "(static %s for %s)"
+#~ msgstr "(kugirango"
+
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+#, fuzzy
+#~ msgid "\\x%x"
+#~ msgstr "\\x%x"
+
+# vcl/source\src\units.src:SV_FUNIT_STRINGS.10.text
+#, fuzzy
+#~ msgid "In %s `%s':"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "%s: In instantiation of `%s':\n"
+#~ msgstr "%s:Bya"
+
+#, fuzzy
+#~ msgid "%s:%d:   instantiated from `%s'\n"
+#~ msgstr "%s:%d:Bivuye"
+
+#, fuzzy
+#~ msgid "%s:%d:   instantiated from here\n"
+#~ msgstr "%s:%d:Bivuye"
+
+#, fuzzy
+#~ msgid "unexpected letter `%c' in locate_error\n"
+#~ msgstr "Ibaruwa... in"
+
+#, fuzzy
+#~ msgid "type `%T' is disallowed in Java `throw' or `catch'"
+#~ msgstr "Ubwoko ni in Cyangwa"
+
+#, fuzzy
+#~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined"
+#~ msgstr "Kuri Cyangwa Na: kidasobanuye"
+
+#, fuzzy
+#~ msgid "type `%T' is not derived from `java::lang::Throwable'"
+#~ msgstr "Ubwoko ni OYA Bivuye java"
+
+#, fuzzy
+#~ msgid "mixing C++ and Java catches in a single translation unit"
+#~ msgstr "C Na in a UMWE Umwandiko wahinduwe ururimi Igice:"
+
+#, fuzzy
+#~ msgid "throwing NULL, which has integral, not pointer type"
+#~ msgstr "Umubare Wuzuye OYA Mweretsi Ubwoko"
+
+#, fuzzy
+#~ msgid "  in thrown expression"
+#~ msgstr "in imvugo"
+
+#, fuzzy
+#~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression"
+#~ msgstr "imvugo Bya Incamake ishuri Ubwoko in imvugo"
+
+#, fuzzy
+#~ msgid "exception of type `%T' will be caught"
+#~ msgstr "Irengayobora(-) Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "   by earlier handler for `%T'"
+#~ msgstr "ku kugirango"
+
+#, fuzzy
+#~ msgid "`...' handler must be the last handler for its try block"
+#~ msgstr "`...'i Iheruka kugirango Funga"
+
+#, fuzzy
+#~ msgid "`%D' is already a friend of class `%T'"
+#~ msgstr "`%D'ni a Bya ishuri"
+
+#, fuzzy
+#~ msgid "previous friend declaration of `%D'"
+#~ msgstr "Ibanjirije Bya"
+
+#, fuzzy
+#~ msgid "invalid type `%T' declared `friend'"
+#~ msgstr "Sibyo Ubwoko"
+
+#, fuzzy
+#~ msgid "partial specialization `%T' declared `friend'"
+#~ msgstr "Bituzuye"
+
+#, fuzzy
+#~ msgid "class `%T' is implicitly friends with itself"
+#~ msgstr "ishuri ni Na:"
+
+#, fuzzy
+#~ msgid "typename type `%#T' declared `friend'"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "template parameter type `%T' declared `friend'"
+#~ msgstr "Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "`%#T' is not a template"
+#~ msgstr "`%#T'ni OYA a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "`%T' is already a friend of `%T'"
+#~ msgstr "`%T'ni a Bya"
+
+#, fuzzy
+#~ msgid "member `%D' declared as friend before type `%T' defined"
+#~ msgstr "Nka Mbere Ubwoko"
+
+#, fuzzy
+#~ msgid "friend declaration `%#D' declares a non-template function"
+#~ msgstr "a Inyandikorugero Umumaro"
+
+#, fuzzy
+#~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning"
+#~ msgstr "(NIBA iyi ni OYA Ubwoko i Umumaro Inyandikorugero Na Kongeramo Nyuma i Umumaro Izina: Inyandikorugero iyi Iburira"
+
+#, fuzzy
+#~ msgid "argument to `%s' missing\n"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "`%D' should be initialized in the member initialization list"
+#~ msgstr "`%D'in i Urutonde"
+
+#, fuzzy
+#~ msgid "default-initialization of `%#D', which has reference type"
+#~ msgstr "Mburabuzi Bya Indango Ubwoko"
+
+#, fuzzy
+#~ msgid "uninitialized reference member `%D'"
+#~ msgstr "Itatangijwe Indango"
+
+#, fuzzy
+#~ msgid "initializer list treated as compound expression"
+#~ msgstr "Urutonde Nka imvugo"
+
+#, fuzzy
+#~ msgid "`%D' will be initialized after"
+#~ msgstr "`%D'Nyuma"
+
+#, fuzzy
+#~ msgid "base `%T' will be initialized after"
+#~ msgstr "SHINGIRO Nyuma"
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#, fuzzy
+#~ msgid "  `%#D'"
+#~ msgstr "`%#D'"
+
+# sc/source\core\src\compiler.src:RID_SC_FUNCTION_NAMES.SC_OPCODE_BASE.text
+#, fuzzy
+#~ msgid "  base `%T'"
+#~ msgstr "SHINGIRO"
+
+#, fuzzy
+#~ msgid "multiple initializations given for base `%T'"
+#~ msgstr "Igikubo kugirango SHINGIRO"
+
+#, fuzzy
+#~ msgid "initializations for multiple members of `%T'"
+#~ msgstr "kugirango Igikubo Bya"
+
+#, fuzzy
+#~ msgid "base class `%#T' should be explicitly initialized in the copy constructor"
+#~ msgstr "SHINGIRO ishuri in i Gukoporora"
+
+#, fuzzy
+#~ msgid "class `%T' does not have any field named `%D'"
+#~ msgstr "ishuri OYA Umwanya"
+
+#, fuzzy
+#~ msgid "field `%#D' is static; the only point of initialization is its definition"
+#~ msgstr "Umwanya ni i Akadomo Bya ni Insobanuro"
+
+#, fuzzy
+#~ msgid "unnamed initializer for `%T', which has no base classes"
+#~ msgstr "Kitiswe kugirango Oya SHINGIRO Inzego"
+
+#, fuzzy
+#~ msgid "unnamed initializer for `%T', which uses multiple inheritance"
+#~ msgstr "Kitiswe kugirango Igikubo"
+
+#, fuzzy
+#~ msgid "type `%D' is not a direct or virtual base of `%T'"
+#~ msgstr "Ubwoko ni OYA a Cyangwa Kitaboneka SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "type `%D' is not a direct base of `%T'"
+#~ msgstr "Ubwoko ni OYA a SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "bad array initializer"
+#~ msgstr "Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "`%T' is not an aggregate type"
+#~ msgstr "`%T'ni OYA Ubwoko"
+
+#, fuzzy
+#~ msgid "`%T' fails to be an aggregate typedef"
+#~ msgstr "`%T'Kuri"
+
+#, fuzzy
+#~ msgid "type `%T' is of non-aggregate type"
+#~ msgstr "Ubwoko ni Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot call destructor `%T::~%T' without object"
+#~ msgstr "Igikoresho"
+
+#, fuzzy
+#~ msgid "invalid use of non-static field `%D'"
+#~ msgstr "Sibyo Gukoresha Bya Umwanya"
+
+#, fuzzy
+#~ msgid "invalid use of member `%D'"
+#~ msgstr "Sibyo Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "no method `%T::%D'"
+#~ msgstr "Oya Uburyo"
+
+#, fuzzy
+#~ msgid "incomplete type `%T' does not have member `%D'"
+#~ msgstr "Ubwoko OYA"
+
+#, fuzzy
+#~ msgid "`%D' is not a member of type `%T'"
+#~ msgstr "`%D'ni OYA a Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid pointer to bit-field `%D'"
+#~ msgstr "Sibyo Mweretsi Kuri Umwanya"
+
+#, fuzzy
+#~ msgid "object missing in use of pointer-to-member construct"
+#~ msgstr "Igikoresho Ibuze in Gukoresha Bya Mweretsi Kuri"
+
+#, fuzzy
+#~ msgid "member `%D' is non-static but referenced as a static member"
+#~ msgstr "ni Nka a"
+
+#, fuzzy
+#~ msgid "at this point in file"
+#~ msgstr "ku iyi Akadomo in IDOSIYE"
+
+#, fuzzy
+#~ msgid "object missing in `%E'"
+#~ msgstr "Igikoresho Ibuze in"
+
+#, fuzzy
+#~ msgid "new of array type fails to specify size"
+#~ msgstr "Gishya Bya Imbonerahamwe Ubwoko Kuri Ingano"
+
+#, fuzzy
+#~ msgid "size in array new must have integral type"
+#~ msgstr "Ingano in Imbonerahamwe Gishya Umubare Wuzuye Ubwoko"
+
+#, fuzzy
+#~ msgid "zero size array reserves no space"
+#~ msgstr "Zeru Ingano Imbonerahamwe Oya Umwanya"
+
+#, fuzzy
+#~ msgid "new cannot be applied to a reference type"
+#~ msgstr "Gishya Byashyizweho Kuri a Indango Ubwoko"
+
+#, fuzzy
+#~ msgid "new cannot be applied to a function type"
+#~ msgstr "Gishya Byashyizweho Kuri a Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "call to Java constructor, while `jclass' undefined"
+#~ msgstr "Kuri kidasobanuye"
+
+#, fuzzy
+#~ msgid "can't find class$"
+#~ msgstr "Gushaka ishuri"
+
+#, fuzzy
+#~ msgid "invalid type `void' for new"
+#~ msgstr "Sibyo Ubwoko kugirango Gishya"
+
+#, fuzzy
+#~ msgid "call to Java constructor with `%s' undefined"
+#~ msgstr "Kuri Na: kidasobanuye"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids initialization in array new"
+#~ msgstr "C in Imbonerahamwe Gishya"
+
+#, fuzzy
+#~ msgid "initializer list being treated as compound expression"
+#~ msgstr "Urutonde Nka imvugo"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids aggregate initializer to new"
+#~ msgstr "C Kuri Gishya"
+
+#, fuzzy
+#~ msgid "uninitialized const in `new' of `%#T'"
+#~ msgstr "Itatangijwe in Bya"
+
+#, fuzzy
+#~ msgid "cannot initialize multi-dimensional array with initializer"
+#~ msgstr "gutangiza Imbonerahamwe Na:"
+
+#, fuzzy
+#~ msgid "unknown array size in delete"
+#~ msgstr "Kitazwi Imbonerahamwe Ingano in Gusiba"
+
+#, fuzzy
+#~ msgid "type to vector delete is neither pointer or array type"
+#~ msgstr "Ubwoko Kuri Gusiba ni Mweretsi Cyangwa Imbonerahamwe Ubwoko"
+
+#, fuzzy
+#~ msgid "type name expected before `*'"
+#~ msgstr "Ubwoko Izina: Ikitezwe: Mbere"
+
+#, fuzzy
+#~ msgid "cannot declare references to references"
+#~ msgstr "Indango Kuri Indango"
+
+#, fuzzy
+#~ msgid "cannot declare pointers to references"
+#~ msgstr "Kuri Indango"
+
+#, fuzzy
+#~ msgid "type name expected before `&'"
+#~ msgstr "Ubwoko Izina: Ikitezwe: Mbere"
+
+#, fuzzy
+#~ msgid "semicolon missing after %s declaration"
+#~ msgstr "Akabago n'Akitso Ibuze Nyuma"
+
+#, fuzzy
+#~ msgid "semicolon missing after declaration of `%T'"
+#~ msgstr "Akabago n'Akitso Ibuze Nyuma Bya"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma %s"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "invalid #pragma %s"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "#pragma vtable no longer supported"
+#~ msgstr "#Oya"
+
+#, fuzzy
+#~ msgid "#pragma implementation for %s appears after file is included"
+#~ msgstr "#kugirango Nyuma IDOSIYE ni"
+
+#, fuzzy
+#~ msgid "junk at end of #pragma GCC java_exceptions"
+#~ msgstr "Umwanda ku Impera Bya"
+
+#, fuzzy
+#~ msgid "`%D' not defined"
+#~ msgstr "`%D'Bitasobanutse>"
+
+#, fuzzy
+#~ msgid "`%D' was not declared in this scope"
+#~ msgstr "`%D'OYA in iyi Ingano:"
+
+#, fuzzy
+#~ msgid "`%D' undeclared (first use this function)"
+#~ msgstr "`%D'Itangira Gukoresha iyi Umumaro"
+
+#, fuzzy
+#~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)"
+#~ msgstr "(Ikiranga ni Rimwe kugirango Umumaro in"
+
+#, fuzzy
+#~ msgid "`::%D' undeclared (first use here)"
+#~ msgstr "`::%D'Itangira Gukoresha"
+
+#, fuzzy
+#~ msgid "real-valued template parameters when cross-compiling"
+#~ msgstr "Inyandikorugero Ibigenga Ryari: Kwambukiranya"
+
+#, fuzzy
+#~ msgid "the mangled name of `%D' will change in a future version of GCC"
+#~ msgstr "i Izina: Bya Guhindura>> in a Verisiyo Bya"
+
+#, fuzzy
+#~ msgid "due to a defect in the G++ 3.2 ABI, G++ has assigned the same mangled name to two different types"
+#~ msgstr "Kuri a in i 3. 2. i Izina: Kuri"
+
+#, fuzzy
+#~ msgid "invalid use of member `%D' in static member function"
+#~ msgstr "Sibyo Gukoresha Bya in Umumaro"
+
+#, fuzzy
+#~ msgid "use of namespace `%D' as expression"
+#~ msgstr "Gukoresha Bya Nka imvugo"
+
+#, fuzzy
+#~ msgid "use of class template `%T' as expression"
+#~ msgstr "Gukoresha Bya ishuri Inyandikorugero Nka imvugo"
+
+#, fuzzy
+#~ msgid "use of %s from containing function"
+#~ msgstr "Gukoresha Bya Bivuye Umumaro"
+
+#, fuzzy
+#~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice"
+#~ msgstr "Kubaza... kugirango ni in Igikubo"
+
+#, fuzzy
+#~ msgid "generic thunk code fails for method `%#D' which uses `...'"
+#~ msgstr "Gifitanye isano ITEGEKONGENGA kugirango Uburyo"
+
+#, fuzzy
+#~ msgid "non-static const member `%#D', can't use default assignment operator"
+#~ msgstr "Gukoresha Mburabuzi Igenera Mukoresha"
+
+#, fuzzy
+#~ msgid "non-static reference member `%#D', can't use default assignment operator"
+#~ msgstr "Indango Gukoresha Mburabuzi Igenera Mukoresha"
+
+#, fuzzy
+#~ msgid "`%s' tag used in naming `%#T'"
+#~ msgstr "`%s'Itagi: in"
+
+#, fuzzy
+#~ msgid "keyword `export' not implemented, and will be ignored"
+#~ msgstr "Ijambo- banze OYA Na"
+
+#, fuzzy
+#~ msgid "use of linkage spec `%D' is different from previous spec `%D'"
+#~ msgstr "Gukoresha Bya ni Bivuye Ibanjirije"
+
+#, fuzzy
+#~ msgid "no base or member initializers given following ':'"
+#~ msgstr "Oya SHINGIRO Cyangwa"
+
+#, fuzzy
+#~ msgid "anachronistic old style base class initializer"
+#~ msgstr "ki/ bishaje IMISUSIRE SHINGIRO ishuri"
+
+#, fuzzy
+#~ msgid "`>>' should be `> >' in template class name"
+#~ msgstr "`>>'in Inyandikorugero ishuri Izina:"
+
+#, fuzzy
+#~ msgid "use of template qualifier outside template"
+#~ msgstr "Gukoresha Bya Inyandikorugero Hanze Inyandikorugero"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids an empty condition for `%s'"
+#~ msgstr "C ubusa Ibisabwa kugirango"
+
+#, fuzzy
+#~ msgid "definition of class `%T' in condition"
+#~ msgstr "Insobanuro Bya ishuri in Ibisabwa"
+
+#, fuzzy
+#~ msgid "definition of enum `%T' in condition"
+#~ msgstr "Insobanuro Bya in Ibisabwa"
+
+#, fuzzy
+#~ msgid "definition of array `%#D' in condition"
+#~ msgstr "Insobanuro Bya Imbonerahamwe in Ibisabwa"
+
+#, fuzzy
+#~ msgid "old style placement syntax, use () instead"
+#~ msgstr "ki/ bishaje IMISUSIRE Ishyira mu mwanya Gukoresha"
+
+#, fuzzy
+#~ msgid "`%T' is not a valid expression"
+#~ msgstr "`%T'ni OYA a Byemewe imvugo"
+
+#, fuzzy
+#~ msgid "initialization of new expression with `='"
+#~ msgstr "Bya Gishya imvugo Na:"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids compound literals"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids braced-groups within expressions"
+#~ msgstr "C Amatsinda muri"
+
+#, fuzzy
+#~ msgid "sigof type specifier"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "`sigof' applied to non-aggregate expression"
+#~ msgstr "`Byashyizweho Kuri imvugo"
+
+#, fuzzy
+#~ msgid "`sigof' applied to non-aggregate type"
+#~ msgstr "`Byashyizweho Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "using `typename' outside of template"
+#~ msgstr "ikoresha Hanze Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "storage class specifier `%s' not allowed after struct or class"
+#~ msgstr "ishuri OYA Nyuma Cyangwa ishuri"
+
+#, fuzzy
+#~ msgid "type specifier `%s' not allowed after struct or class"
+#~ msgstr "Ubwoko OYA Nyuma Cyangwa ishuri"
+
+#, fuzzy
+#~ msgid "type qualifier `%s' not allowed after struct or class"
+#~ msgstr "Ubwoko OYA Nyuma Cyangwa ishuri"
+
+#, fuzzy
+#~ msgid "no body nor ';' separates two class, struct or union declarations"
+#~ msgstr "Oya Umubiri ishuri Cyangwa Ihuza"
+
+#, fuzzy
+#~ msgid "no bases given following `:'"
+#~ msgstr "Oya"
+
+#, fuzzy
+#~ msgid "multiple access specifiers"
+#~ msgstr "Igikubo"
+
+#, fuzzy
+#~ msgid "multiple `virtual' specifiers"
+#~ msgstr "Igikubo"
+
+#, fuzzy
+#~ msgid "missing ';' before right brace"
+#~ msgstr "Ibuze Mbere Iburyo:"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids array dimensions with parenthesized type in new"
+#~ msgstr "C Imbonerahamwe Ingero Na: Ubwoko in Gishya"
+
+#, fuzzy
+#~ msgid "`%T' is not a class or namespace"
+#~ msgstr "`%T'ni OYA a ishuri Cyangwa"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids label declarations"
+#~ msgstr "C Akarango"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids computed gotos"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "label must be followed by statement"
+#~ msgstr "Akarango ku Inyandiko"
+
+#, fuzzy
+#~ msgid "must have at least one catch per try block"
+#~ msgstr "ku Funga"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids compound statements inside for initializations"
+#~ msgstr "C Mo Imbere kugirango"
+
+#, fuzzy
+#~ msgid "possibly missing ')'"
+#~ msgstr "Ibuze"
+
+#, fuzzy
+#~ msgid "type specifier omitted for parameter"
+#~ msgstr "Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "`%E' is not a type, use `typename %E' to make it one"
+#~ msgstr "`%E'ni OYA a Ubwoko Gukoresha Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "no type `%D' in `%T'"
+#~ msgstr "Oya Ubwoko in"
+
+#, fuzzy
+#~ msgid "type specifier omitted for parameter `%E'"
+#~ msgstr "Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "'%D' is used as a type, but is not defined as a type."
+#~ msgstr "'%D'ni Nka a Ubwoko ni OYA Nka a Ubwoko"
+
+#, fuzzy
+#~ msgid "data member `%D' cannot be a member template"
+#~ msgstr "Ibyatanzwe a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "invalid member template declaration `%D'"
+#~ msgstr "Sibyo Inyandikorugero"
+
+#, fuzzy
+#~ msgid "explicit specialization in non-namespace scope `%D'"
+#~ msgstr "in Ingano:"
+
+#, fuzzy
+#~ msgid "enclosing class templates are not explicitly specialized"
+#~ msgstr "ishuri Inyandikorugero OYA cy'umwihariko/ mwihariko"
+
+#, fuzzy
+#~ msgid "specializing `%#T' in different namespace"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "  from definition of `%#D'"
+#~ msgstr "Bivuye Insobanuro Bya"
+
+#, fuzzy
+#~ msgid "specialization of `%T' after instantiation"
+#~ msgstr "Bya Nyuma"
+
+#, fuzzy
+#~ msgid "specialization `%T' after instantiation `%T'"
+#~ msgstr "Nyuma"
+
+#, fuzzy
+#~ msgid "explicit specialization of non-template `%T'"
+#~ msgstr "Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "specialization of %D after instantiation"
+#~ msgstr "Bya Nyuma"
+
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+#, fuzzy
+#~ msgid "%s %+#D"
+#~ msgstr "%s%+#D"
+
+#, fuzzy
+#~ msgid "`%D' is not a function template"
+#~ msgstr "`%D'ni OYA a Umumaro Inyandikorugero"
+
+#, fuzzy
+#~ msgid "template-id `%D' for `%+D' does not match any template declaration"
+#~ msgstr "Inyandikorugero ID kugirango OYA BIHUYE Inyandikorugero"
+
+#, fuzzy
+#~ msgid "ambiguous template specialization `%D' for `%+D'"
+#~ msgstr "Inyandikorugero kugirango"
+
+#, fuzzy
+#~ msgid "template-id `%D' in declaration of primary template"
+#~ msgstr "Inyandikorugero ID in Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "template parameter list used in explicit instantiation"
+#~ msgstr "Inyandikorugero Urutonde in"
+
+#, fuzzy
+#~ msgid "definition provided for explicit instantiation"
+#~ msgstr "Insobanuro kugirango"
+
+#, fuzzy
+#~ msgid "too many template parameter lists in declaration of `%D'"
+#~ msgstr "Inyandikorugero Intonde in Bya"
+
+#, fuzzy
+#~ msgid "too few template parameter lists in declaration of `%D'"
+#~ msgstr "Inyandikorugero Intonde in Bya"
+
+#, fuzzy
+#~ msgid "explicit specialization not preceded by `template <>'"
+#~ msgstr "OYA ku Inyandikorugero"
+
+#, fuzzy
+#~ msgid "partial specialization `%D' of function template"
+#~ msgstr "Bituzuye Bya Umumaro Inyandikorugero"
+
+#, fuzzy
+#~ msgid "default argument specified in explicit specialization"
+#~ msgstr "Mburabuzi in"
+
+#, fuzzy
+#~ msgid "template specialization with C linkage"
+#~ msgstr "Inyandikorugero Na: C"
+
+#, fuzzy
+#~ msgid "specialization of implicitly-declared special member function"
+#~ msgstr "Bya Bidasanzwe Umumaro"
+
+#, fuzzy
+#~ msgid "no member function `%D' declared in `%T'"
+#~ msgstr "Oya Umumaro in"
+
+#, fuzzy
+#~ msgid "too many template parameter lists in declaration of `%T'"
+#~ msgstr "Inyandikorugero Intonde in Bya"
+
+#, fuzzy
+#~ msgid " shadows template parm `%#D'"
+#~ msgstr "Inyandikorugero"
+
+#, fuzzy
+#~ msgid "template parameters not used in partial specialization:"
+#~ msgstr "Inyandikorugero Ibigenga OYA in Bituzuye"
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#, fuzzy
+#~ msgid "        `%D'"
+#~ msgstr "`%D'"
+
+#, fuzzy
+#~ msgid "partial specialization `%T' does not specialize any template arguments"
+#~ msgstr "Bituzuye OYA Inyandikorugero ingingo"
+
+#, fuzzy
+#~ msgid "template argument `%E' involves template parameter(s)"
+#~ msgstr "Inyandikorugero Inyandikorugero S"
+
+#, fuzzy
+#~ msgid "type `%T' of template argument `%E' depends on template parameter(s)"
+#~ msgstr "Ubwoko Bya Inyandikorugero ku Inyandikorugero S"
+
+#, fuzzy
+#~ msgid "no default argument for `%D'"
+#~ msgstr "Oya Mburabuzi kugirango"
+
+#, fuzzy
+#~ msgid "template with C linkage"
+#~ msgstr "Inyandikorugero Na: C"
+
+#, fuzzy
+#~ msgid "template class without a name"
+#~ msgstr "Inyandikorugero ishuri a Izina:"
+
+#, fuzzy
+#~ msgid "`%D' does not declare a template type"
+#~ msgstr "`%D'OYA a Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "template definition of non-template `%#D'"
+#~ msgstr "Inyandikorugero Insobanuro Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "expected %d levels of template parms for `%#D', got %d"
+#~ msgstr "Ikitezwe: Intera Bya Inyandikorugero kugirango"
+
+#, fuzzy
+#~ msgid "got %d template parameters for `%#D'"
+#~ msgstr "Inyandikorugero Ibigenga kugirango"
+
+#, fuzzy
+#~ msgid "got %d template parameters for `%#T'"
+#~ msgstr "Inyandikorugero Ibigenga kugirango"
+
+#, fuzzy
+#~ msgid "  but %d required"
+#~ msgstr "Bya ngombwa"
+
+#, fuzzy
+#~ msgid "`%T' is not a template type"
+#~ msgstr "`%T'ni OYA a Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "previous declaration `%D'"
+#~ msgstr "Ibanjirije"
+
+#, fuzzy
+#~ msgid "used %d template parameter%s instead of %d"
+#~ msgstr "Inyandikorugero Bya"
+
+#, fuzzy
+#~ msgid "template parameter `%#D'"
+#~ msgstr "Inyandikorugero"
+
+#, fuzzy
+#~ msgid "redeclared here as `%#D'"
+#~ msgstr "Nka"
+
+#, fuzzy
+#~ msgid "redefinition of default argument for `%#D'"
+#~ msgstr "Bya Mburabuzi kugirango"
+
+#, fuzzy
+#~ msgid "  original definition appeared here"
+#~ msgstr "Umwimerere Insobanuro"
+
+#, fuzzy
+#~ msgid "`%E' is not a valid template argument"
+#~ msgstr "`%E'ni OYA a Byemewe Inyandikorugero"
+
+#, fuzzy
+#~ msgid "it must be the address of a function with external linkage"
+#~ msgstr "i Aderesi Bya a Umumaro Na: external"
+
+#, fuzzy
+#~ msgid "it must be the address of an object with external linkage"
+#~ msgstr "i Aderesi Bya Igikoresho Na: external"
+
+#, fuzzy
+#~ msgid "it must be a pointer-to-member of the form `&X::Y'"
+#~ msgstr "a Mweretsi Kuri Bya i Ifishi"
+
+#, fuzzy
+#~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage"
+#~ msgstr "Ikurikiranyanyuguti ni OYA a Byemewe Inyandikorugero ni i Aderesi Bya Igikoresho Na:"
+
+#, fuzzy
+#~ msgid "address of non-extern `%E' cannot be used as template argument"
+#~ msgstr "Aderesi Bya Nka Inyandikorugero"
+
+#, fuzzy
+#~ msgid "non-constant `%E' cannot be used as template argument"
+#~ msgstr "Nka Inyandikorugero"
+
+#, fuzzy
+#~ msgid "object `%E' cannot be used as template argument"
+#~ msgstr "Igikoresho Nka Inyandikorugero"
+
+#, fuzzy
+#~ msgid "to refer to a type member of a template parameter, use `typename %E'"
+#~ msgstr "Kuri Kuri a Ubwoko Bya a Inyandikorugero Gukoresha"
+
+#, fuzzy
+#~ msgid "type/value mismatch at argument %d in template parameter list for `%D'"
+#~ msgstr "Ubwoko Agaciro ku in Inyandikorugero Urutonde kugirango"
+
+#, fuzzy
+#~ msgid "  expected a constant of type `%T', got `%T'"
+#~ msgstr "Ikitezwe: a Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "  expected a type, got `%E'"
+#~ msgstr "Ikitezwe: a Ubwoko"
+
+#, fuzzy
+#~ msgid "  expected a type, got `%T'"
+#~ msgstr "Ikitezwe: a Ubwoko"
+
+#, fuzzy
+#~ msgid "  expected a class template, got `%T'"
+#~ msgstr "Ikitezwe: a ishuri Inyandikorugero"
+
+#, fuzzy
+#~ msgid "  expected a template of type `%D', got `%D'"
+#~ msgstr "Ikitezwe: a Inyandikorugero Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "template-argument `%T' uses anonymous type"
+#~ msgstr "Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "template-argument `%T' uses local type `%T'"
+#~ msgstr "Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "template-argument `%T' is a variably modified type"
+#~ msgstr "Inyandikorugero ni a Byahinduwe Ubwoko"
+
+#, fuzzy
+#~ msgid "could not convert template argument `%E' to `%T'"
+#~ msgstr "OYA GUHINDURA Inyandikorugero Kuri"
+
+#, fuzzy
+#~ msgid "wrong number of template arguments (%d, should be %d)"
+#~ msgstr "Umubare Bya Inyandikorugero ingingo"
+
+#, fuzzy
+#~ msgid "provided for `%D'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "template argument %d is invalid"
+#~ msgstr "Inyandikorugero ni Sibyo"
+
+#, fuzzy
+#~ msgid "non-template used as template"
+#~ msgstr "Inyandikorugero Nka Inyandikorugero"
+
+#, fuzzy
+#~ msgid "`%T' is not a template"
+#~ msgstr "`%T'ni OYA a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "non-template type `%T' used as a template"
+#~ msgstr "Inyandikorugero Ubwoko Nka a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "for template declaration `%D'"
+#~ msgstr "kugirango Inyandikorugero"
+
+#, fuzzy
+#~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'"
+#~ msgstr "Inyandikorugero Ubujyakuzimu Kinini Bya Gukoresha Ubujyakuzimu Kuri i Kinini"
+
+#, fuzzy
+#~ msgid "ambiguous class template instantiation for `%#T'"
+#~ msgstr "ishuri Inyandikorugero kugirango"
+
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+# #-#-#-#-#  dbaccess.pot (PACKAGE VERSION)  #-#-#-#-#
+#, fuzzy
+#~ msgid "%s %+#T"
+#~ msgstr "%s%+#T"
+
+#, fuzzy
+#~ msgid "instantiation of `%D' as type `%T'"
+#~ msgstr "Bya Nka Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid parameter type `%T'"
+#~ msgstr "Sibyo Ubwoko"
+
+#, fuzzy
+#~ msgid "in declaration `%D'"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "creating pointer to member function of non-class type `%T'"
+#~ msgstr "Mweretsi Kuri Umumaro Bya ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "creating array with size zero"
+#~ msgstr "Imbonerahamwe Na: Ingano Zeru"
+
+#, fuzzy
+#~ msgid "creating array with size zero (`%E')"
+#~ msgstr "Imbonerahamwe Na: Ingano Zeru"
+
+#, fuzzy
+#~ msgid "forming reference to void"
+#~ msgstr "Indango Kuri"
+
+#, fuzzy
+#~ msgid "forming %s to reference type `%T'"
+#~ msgstr "Kuri Indango Ubwoko"
+
+#, fuzzy
+#~ msgid "creating pointer to member of non-class type `%T'"
+#~ msgstr "Mweretsi Kuri Bya ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "creating pointer to member reference type `%T'"
+#~ msgstr "Mweretsi Kuri Indango Ubwoko"
+
+#, fuzzy
+#~ msgid "creating array of `%T'"
+#~ msgstr "Imbonerahamwe Bya"
+
+#, fuzzy
+#~ msgid "`%T' is not a class, struct, or union type"
+#~ msgstr "`%T'ni OYA a ishuri Cyangwa Ihuza Ubwoko"
+
+#, fuzzy
+#~ msgid "use of `%s' in template"
+#~ msgstr "Gukoresha Bya in Inyandikorugero"
+
+#, fuzzy
+#~ msgid "type `%T' composed from a local class is not a valid template-argument"
+#~ msgstr "Ubwoko Bivuye a ishuri ni OYA a Byemewe Inyandikorugero"
+
+#, fuzzy
+#~ msgid "  trying to instantiate `%D'"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "incomplete type unification"
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "use of `%s' in template type unification"
+#~ msgstr "Gukoresha Bya in Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "explicit instantiation of non-template `%#D'"
+#~ msgstr "Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "no matching template for `%D' found"
+#~ msgstr "Oya Inyandikorugero kugirango Byabonetse"
+
+#, fuzzy
+#~ msgid "explicit instantiation of `%#D'"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#D'"
+#~ msgstr "Gusubiramo Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations"
+#~ msgstr "C i Gukoresha Bya ku"
+
+#, fuzzy
+#~ msgid "storage class `%D' applied to template instantiation"
+#~ msgstr "ishuri Byashyizweho Kuri Inyandikorugero"
+
+#, fuzzy
+#~ msgid "explicit instantiation of non-template type `%T'"
+#~ msgstr "Bya Inyandikorugero Ubwoko"
+
+#, fuzzy
+#~ msgid "explicit instantiation of `%#T' before definition of template"
+#~ msgstr "Bya Mbere Insobanuro Bya Inyandikorugero"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations"
+#~ msgstr "C i Gukoresha Bya ku"
+
+#, fuzzy
+#~ msgid "duplicate explicit instantiation of `%#T'"
+#~ msgstr "Gusubiramo Bya"
+
+#, fuzzy
+#~ msgid "explicit instantiation of `%D' but no definition available"
+#~ msgstr "Bya Oya Insobanuro Bihari"
+
+#, fuzzy
+#~ msgid "`%#T' is not a valid type for a template constant parameter"
+#~ msgstr "`%#T'ni OYA a Byemewe Ubwoko kugirango a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "-frepo must be used with -c"
+#~ msgstr "-Na: C"
+
+#, fuzzy
+#~ msgid "mysterious repository information in %s"
+#~ msgstr "Ibisobanuro in"
+
+#, fuzzy
+#~ msgid "can't create repository information file `%s'"
+#~ msgstr "Kurema Ibisobanuro IDOSIYE"
+
+#, fuzzy
+#~ msgid "cannot use typeid with -fno-rtti"
+#~ msgstr "Gukoresha Na:"
+
+#, fuzzy
+#~ msgid "must #include <typeinfo> before using typeid"
+#~ msgstr "Gushyiramo Mbere ikoresha"
+
+#, fuzzy
+#~ msgid "cannot create type information for type `%T' because its size is variable"
+#~ msgstr "Kurema Ubwoko Ibisobanuro kugirango Ubwoko Ingano ni IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed"
+#~ msgstr "Bya Kuri Nta narimwe"
+
+#, fuzzy
+#~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)"
+#~ msgstr "Bya Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "`%T' is an inaccessible base of `%T'"
+#~ msgstr "`%T'ni SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "`%T' is an ambiguous base of `%T'"
+#~ msgstr "`%T'ni SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "assignment to non-static member `%D' of enclosing class `%T'"
+#~ msgstr "Igenera Kuri Bya ishuri"
+
+#, fuzzy
+#~ msgid "adjusting pointers for covariant returns"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "invalid covariant return type for `%#D'"
+#~ msgstr "Sibyo Garuka Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "  overriding `%#D' (must be pointer or reference to class)"
+#~ msgstr "Mweretsi Cyangwa Indango Kuri ishuri"
+
+#, fuzzy
+#~ msgid "  overriding `%#D' (must use pointer or reference)"
+#~ msgstr "Gukoresha Mweretsi Cyangwa Indango"
+
+#, fuzzy
+#~ msgid "conflicting return type specified for `%#D'"
+#~ msgstr "Garuka Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "looser throw specifier for `%#F'"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "  since `%#D' declared in base class"
+#~ msgstr "guhera in SHINGIRO ishuri"
+
+#, fuzzy
+#~ msgid "`%#D' needs a final overrider"
+#~ msgstr "`%#D'a"
+
+#, fuzzy
+#~ msgid "type of asm operand `%E' could not be determined"
+#~ msgstr "Ubwoko Bya OYA"
+
+#, fuzzy
+#~ msgid "ISO C++ does not permit named return values"
+#~ msgstr "C OYA Garuka Uduciro"
+
+#, fuzzy
+#~ msgid "return identifier `%D' already in place"
+#~ msgstr "Garuka Ikiranga in"
+
+#, fuzzy
+#~ msgid "can't redefine default return value for constructors"
+#~ msgstr "Mburabuzi Garuka Agaciro kugirango"
+
+#, fuzzy
+#~ msgid "only constructors take base initializers"
+#~ msgstr "SHINGIRO"
+
+#, fuzzy
+#~ msgid "`this' is unavailable for static member functions"
+#~ msgstr "`ni kugirango Imimaro"
+
+#, fuzzy
+#~ msgid "invalid use of `this' in non-member function"
+#~ msgstr "Sibyo Gukoresha Bya in Umumaro"
+
+#, fuzzy
+#~ msgid "invalid use of `this' at top level"
+#~ msgstr "Sibyo Gukoresha Bya ku Hejuru: urwego"
+
+#, fuzzy
+#~ msgid "calling type `%T' like a method"
+#~ msgstr "Ubwoko nka a Uburyo"
+
+#, fuzzy
+#~ msgid "destructor specifier `%T::~%T()' must have matching names"
+#~ msgstr "Amazina"
+
+#, fuzzy
+#~ msgid "`%E' is not of type `%T'"
+#~ msgstr "`%E'ni OYA Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "template type parameters must use the keyword `class' or `typename'"
+#~ msgstr "Inyandikorugero Ubwoko Ibigenga Gukoresha i Ijambo- banze Cyangwa"
+
+#, fuzzy
+#~ msgid "invalid default template argument"
+#~ msgstr "Sibyo Mburabuzi Inyandikorugero"
+
+#, fuzzy
+#~ msgid "definition of `%#T' inside template parameter list"
+#~ msgstr "Insobanuro Bya Mo Imbere Inyandikorugero Urutonde"
+
+#, fuzzy
+#~ msgid "invalid definition of qualified type `%T'"
+#~ msgstr "Sibyo Insobanuro Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid base-class specification"
+#~ msgstr "Sibyo SHINGIRO ishuri"
+
+#, fuzzy
+#~ msgid "base class `%T' has cv qualifiers"
+#~ msgstr "SHINGIRO ishuri"
+
+#, fuzzy
+#~ msgid "multiple declarators in template declaration"
+#~ msgstr "Igikubo in Inyandikorugero"
+
+#, fuzzy
+#~ msgid "type of `%E' is unknown"
+#~ msgstr "Ubwoko Bya ni Kitazwi"
+
+#, fuzzy
+#~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
+#~ msgstr "Ikiranga Izina: Na: C By'imbere"
+
+#, fuzzy
+#~ msgid "parse error at end of saved function text"
+#~ msgstr "Ikosa ku Impera Bya Umumaro Umwandiko"
+
+#, fuzzy
+#~ msgid "%Hend of file read inside definition"
+#~ msgstr "%HendBya IDOSIYE Gusoma Mo Imbere Insobanuro"
+
+#, fuzzy
+#~ msgid "parse error in method specification"
+#~ msgstr "Ikosa in Uburyo"
+
+#, fuzzy
+#~ msgid "function body for constructor missing"
+#~ msgstr "Umumaro Umubiri kugirango Ibuze"
+
+#, fuzzy
+#~ msgid "%Hend of file read inside default argument"
+#~ msgstr "%HendBya IDOSIYE Gusoma Mo Imbere Mburabuzi"
+
+#, fuzzy
+#~ msgid "circular dependency in default args of `%#D'"
+#~ msgstr "Cy'uruziga in Mburabuzi Bya"
+
+#, fuzzy
+#~ msgid "invalid type `%T' for default argument to `%T'"
+#~ msgstr "Sibyo Ubwoko kugirango Mburabuzi Kuri"
+
+#, fuzzy
+#~ msgid "%s before `%s'"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before `%c'"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before `\\%o'"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "%s before `%s' token"
+#~ msgstr "%sMbere"
+
+#, fuzzy
+#~ msgid "non-lvalue in %s"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "`%V' qualifiers cannot be applied to `%T'"
+#~ msgstr "`%V'Byashyizweho Kuri"
+
+#, fuzzy
+#~ msgid "`%s' attribute can only be applied to Java class definitions"
+#~ msgstr "`%s'Ikiranga Byashyizweho Kuri ishuri"
+
+#, fuzzy
+#~ msgid "`%s' attribute can only be applied to class definitions"
+#~ msgstr "`%s'Ikiranga Byashyizweho Kuri ishuri"
+
+#, fuzzy
+#~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default"
+#~ msgstr "`%s'ni g NONEAHA ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "requested init_priority is not an integer constant"
+#~ msgstr "ni OYA Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type"
+#~ msgstr "Gukoresha Ikiranga ku IDOSIYE Ingano: Bya Ibintu Bya ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "requested init_priority is out of range"
+#~ msgstr "ni Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "requested init_priority is reserved for internal use"
+#~ msgstr "ni kugirango By'imbere Gukoresha"
+
+#, fuzzy
+#~ msgid "`%s' attribute is not supported on this platform"
+#~ msgstr "`%s'Ikiranga ni OYA ku iyi"
+
+#, fuzzy
+#~ msgid "lang_* check: failed in %s, at %s:%d"
+#~ msgstr "Kugenzura... Byanze in ku"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function"
+#~ msgstr "C hagati Mweretsi Bya Ubwoko Na Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast"
+#~ msgstr "%shagati Mweretsi Na a"
+
+#, fuzzy
+#~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'"
+#~ msgstr "C Ihindurangero Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "invalid application of `%s' to a member function"
+#~ msgstr "Sibyo Porogaramu Bya Kuri a Umumaro"
+
+#, fuzzy
+#~ msgid "invalid application of `%s' to non-static member"
+#~ msgstr "Sibyo Porogaramu Bya Kuri"
+
+#, fuzzy
+#~ msgid "sizeof applied to a bit-field"
+#~ msgstr "Byashyizweho Kuri a Umwanya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type"
+#~ msgstr "C Kuri imvugo Bya Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of non-lvalue array"
+#~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "deprecated conversion from string constant to `%T'"
+#~ msgstr "Bitemewe. Ihindurangero Bivuye Ikurikiranyanyuguti Kuri"
+
+#, fuzzy
+#~ msgid "request for member `%D' in `%E', which is of non-class type `%T'"
+#~ msgstr "Kubaza... kugirango in ni Bya ishuri Ubwoko"
+
+#, fuzzy
+#~ msgid "`%D' is not a member of `%T'"
+#~ msgstr "`%D'ni OYA a Bya"
+
+#, fuzzy
+#~ msgid "invalid access to non-static data member `%D' of NULL object"
+#~ msgstr "Sibyo Kuri Ibyatanzwe Bya Igikoresho"
+
+#, fuzzy
+#~ msgid "(perhaps the `offsetof' macro was used incorrectly)"
+#~ msgstr "(i Makoro"
+
+#, fuzzy
+#~ msgid "`%D::%D' is not a member of `%T'"
+#~ msgstr "`%D::%D'ni OYA a Bya"
+
+#, fuzzy
+#~ msgid "destructor specifier `%T::~%T' must have matching names"
+#~ msgstr "Amazina"
+
+#, fuzzy
+#~ msgid "type `%T' has no destructor"
+#~ msgstr "Ubwoko Oya"
+
+#, fuzzy
+#~ msgid "`%D' is not a member template function"
+#~ msgstr "`%D'ni OYA a Inyandikorugero Umumaro"
+
+#, fuzzy
+#~ msgid "`%T' is not a pointer-to-object type"
+#~ msgstr "`%T'ni OYA a Mweretsi Kuri Igikoresho Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of `%s' on pointer to member"
+#~ msgstr "Sibyo Gukoresha Bya ku Mweretsi Kuri"
+
+#, fuzzy
+#~ msgid "invalid type argument"
+#~ msgstr "Sibyo Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids subscripting non-lvalue array"
+#~ msgstr "C Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "subscripting array declared `register'"
+#~ msgstr "Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "object missing in use of `%E'"
+#~ msgstr "Igikoresho Ibuze in Gukoresha Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids calling `::main' from within program"
+#~ msgstr "C Bivuye muri Porogaramu"
+
+#, fuzzy
+#~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'"
+#~ msgstr "Gukoresha Cyangwa Kuri Mweretsi Kuri Umumaro in"
+
+#, fuzzy
+#~ msgid "`%E' cannot be used as a function"
+#~ msgstr "`%E'Nka a Umumaro"
+
+#, fuzzy
+#~ msgid "too many arguments to %s `%+#D'"
+#~ msgstr "ingingo Kuri"
+
+#, fuzzy
+#~ msgid "parameter type of called function is incomplete"
+#~ msgstr "Ubwoko Bya Umumaro ni"
+
+#, fuzzy
+#~ msgid "too few arguments to %s `%+#D'"
+#~ msgstr "ingingo Kuri"
+
+#, fuzzy
+#~ msgid "assuming cast to type `%T' from overloaded function"
+#~ msgstr "Kuri Ubwoko Bivuye Umumaro"
+
+#, fuzzy
+#~ msgid "division by zero in `%E / 0'"
+#~ msgstr "ku Zeru in"
+
+#, fuzzy
+#~ msgid "division by zero in `%E / 0.'"
+#~ msgstr "ku Zeru in 0"
+
+#, fuzzy
+#~ msgid "division by zero in `%E %% 0'"
+#~ msgstr "ku Zeru in"
+
+#, fuzzy
+#~ msgid "division by zero in `%E %% 0.'"
+#~ msgstr "ku Zeru in 0"
+
+#, fuzzy
+#~ msgid "%s rotate count is negative"
+#~ msgstr "%sKuzerutsa IBARA ni"
+
+#, fuzzy
+#~ msgid "%s rotate count >= width of type"
+#~ msgstr "%sKuzerutsa IBARA Ubugari Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids comparison between pointer and integer"
+#~ msgstr "C hagati Mweretsi Na Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "comparison between types `%#T' and `%#T'"
+#~ msgstr "hagati Na"
+
+#, fuzzy
+#~ msgid "comparison between signed and unsigned integer expressions"
+#~ msgstr "hagati Na Bitashizweho umukono Umubare wuzuye"
+
+#, fuzzy
+#~ msgid "invalid operands of types `%T' and `%T' to binary `%O'"
+#~ msgstr "Sibyo Bya Na Kuri Nyabibiri"
+
+#, fuzzy
+#~ msgid "NULL used in arithmetic"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction"
+#~ msgstr "C ikoresha Mweretsi Bya Ubwoko in Gukuramo"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids using pointer to a function in subtraction"
+#~ msgstr "C ikoresha Mweretsi Kuri a Umumaro in Gukuramo"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids using pointer to a method in subtraction"
+#~ msgstr "C ikoresha Mweretsi Kuri a Uburyo in Gukuramo"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids using pointer to a member in subtraction"
+#~ msgstr "C ikoresha Mweretsi Kuri a in Gukuramo"
+
+#, fuzzy
+#~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
+#~ msgstr "Sibyo Gukoresha Bya a Mweretsi Kuri Ubwoko in Mweretsi"
+
+#, fuzzy
+#~ msgid "invalid use of '%E' to form a pointer-to-member-function.  Use a qualified-id."
+#~ msgstr "Sibyo Gukoresha Bya Kuri Ifishi a Mweretsi Kuri Umumaro a ID"
+
+#, fuzzy
+#~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function"
+#~ msgstr "Kuri Ifishi a Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "taking address of temporary"
+#~ msgstr "Aderesi Bya By'igihe gito"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids %sing an enum"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "cannot %s a pointer to incomplete type `%T'"
+#~ msgstr "a Mweretsi Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids %sing a pointer of type `%T'"
+#~ msgstr "C a Mweretsi Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "cast to non-reference type used as lvalue"
+#~ msgstr "Kuri Indango Ubwoko Nka"
+
+#, fuzzy
+#~ msgid "invalid use of `--' on bool variable `%D'"
+#~ msgstr "Sibyo Gukoresha Bya ku IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking address of function `::main'"
+#~ msgstr "C Aderesi Bya Umumaro"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "C i Aderesi Bya Umumaro Kuri Ifishi a Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function.  Say `&%T::%D'"
+#~ msgstr "C i Aderesi Bya a Umumaro Kuri Ifishi a Mweretsi Kuri Umumaro"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
+#~ msgstr "C i Aderesi Bya a Kuri a imvugo"
+
+#, fuzzy
+#~ msgid "attempt to take address of bit-field structure member `%D'"
+#~ msgstr "Kuri Aderesi Bya Umwanya Imiterere"
+
+#, fuzzy
+#~ msgid "taking address of destructor"
+#~ msgstr "Aderesi Bya"
+
+#, fuzzy
+#~ msgid "taking address of bound pointer-to-member expression"
+#~ msgstr "Aderesi Bya Mweretsi Kuri imvugo"
+
+#, fuzzy
+#~ msgid "cannot create pointer to reference member `%D'"
+#~ msgstr "Kurema Mweretsi Kuri Indango"
+
+#, fuzzy
+#~ msgid "cannot take the address of `this', which is an rvalue expression"
+#~ msgstr "i Aderesi Bya ni imvugo"
+
+#, fuzzy
+#~ msgid "address requested for `%D', which is declared `register'"
+#~ msgstr "Aderesi kugirango ni"
+
+#, fuzzy
+#~ msgid "static_cast from type `%T' to type `%T' casts away constness"
+#~ msgstr "Bivuye Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid static_cast from type `%T' to type `%T'"
+#~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'"
+#~ msgstr "Sibyo Bya imvugo Bya Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "reinterpret_cast from `%T' to `%T' loses precision"
+#~ msgstr "Bivuye Kuri"
+
+#, fuzzy
+#~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)"
+#~ msgstr "Bivuye Kuri Cyangwa"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
+#~ msgstr "C hagati Mweretsi Kuri Umumaro Na Mweretsi Kuri Igikoresho"
+
+#, fuzzy
+#~ msgid "invalid reinterpret_cast from type `%T' to type `%T'"
+#~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type"
+#~ msgstr "Sibyo Gukoresha Bya Na: Ubwoko ni OYA a Mweretsi Indango a Mweretsi Kuri Ibyatanzwe Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type"
+#~ msgstr "Sibyo Gukoresha Bya Na: Ubwoko ni a Mweretsi Cyangwa Indango Kuri a Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'"
+#~ msgstr "Sibyo Bya Bya Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid const_cast from type `%T' to type `%T'"
+#~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids casting to an array type `%T'"
+#~ msgstr "C Kuri Imbonerahamwe Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid cast to function type `%T'"
+#~ msgstr "Sibyo Kuri Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type"
+#~ msgstr "Bivuye Kuri Bivuye Mweretsi Intego Ubwoko"
+
+#, fuzzy
+#~ msgid "cast from `%T' to `%T' increases required alignment of target type"
+#~ msgstr "Bivuye Kuri Bya ngombwa Itunganya Bya Intego Ubwoko"
+
+#, fuzzy
+#~ msgid "  in evaluation of `%Q(%#T, %#T)'"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids cast to non-reference type used as lvalue"
+#~ msgstr "C Kuri Indango Ubwoko Nka"
+
+#, fuzzy
+#~ msgid "incompatible types in assignment of `%T' to `%T'"
+#~ msgstr "in Igenera Bya Kuri"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids assignment of arrays"
+#~ msgstr "C Igenera Bya"
+
+#, fuzzy
+#~ msgid "   in pointer to member function conversion"
+#~ msgstr "in Mweretsi Kuri Umumaro Ihindurangero"
+
+#, fuzzy
+#~ msgid "   in pointer to member conversion"
+#~ msgstr "in Mweretsi Kuri Ihindurangero"
+
+#, fuzzy
+#~ msgid "pointer to member cast via virtual base `%T' of `%T'"
+#~ msgstr "Mweretsi Kuri Biturutse Kitaboneka SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "pointer to member conversion via virtual base `%T' of `%T'"
+#~ msgstr "Mweretsi Kuri Ihindurangero Biturutse Kitaboneka SHINGIRO Bya"
+
+#, fuzzy
+#~ msgid "invalid conversion to type `%T' from type `%T'"
+#~ msgstr "Sibyo Ihindurangero Kuri Ubwoko Bivuye Ubwoko"
+
+#, fuzzy
+#~ msgid "passing NULL used for non-pointer %s %P of `%D'"
+#~ msgstr "kugirango Mweretsi Bya"
+
+#, fuzzy
+#~ msgid "%s to non-pointer type `%T' from NULL"
+#~ msgstr "%sKuri Mweretsi Ubwoko Bivuye"
+
+#, fuzzy
+#~ msgid "passing `%T' for %s %P of `%D'"
+#~ msgstr "kugirango Bya"
+
+#, fuzzy
+#~ msgid "%s to `%T' from `%T'"
+#~ msgstr "%sKuri Bivuye"
+
+#, fuzzy
+#~ msgid "passing negative value `%E' for %s %P of `%D'"
+#~ msgstr "Agaciro kugirango Bya"
+
+#, fuzzy
+#~ msgid "%s of negative value `%E' to `%T'"
+#~ msgstr "%sBya Agaciro Kuri"
+
+#, fuzzy
+#~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'"
+#~ msgstr "GUHINDURA Kuri kugirango Kuri"
+
+#, fuzzy
+#~ msgid "cannot convert `%T' to `%T' in %s"
+#~ msgstr "GUHINDURA Kuri in"
+
+#, fuzzy
+#~ msgid "in passing argument %P of `%+D'"
+#~ msgstr "in Bya"
+
+#, fuzzy
+#~ msgid "returning reference to temporary"
+#~ msgstr "Indango Kuri By'igihe gito"
+
+#, fuzzy
+#~ msgid "reference to non-lvalue returned"
+#~ msgstr "Indango Kuri"
+
+#, fuzzy
+#~ msgid "reference to local variable `%D' returned"
+#~ msgstr "Indango Kuri IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "address of local variable `%D' returned"
+#~ msgstr "Aderesi Bya IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "returning a value from a destructor"
+#~ msgstr "a Agaciro Bivuye a"
+
+#, fuzzy
+#~ msgid "cannot return from a handler of a function-try-block of a constructor"
+#~ msgstr "Garuka Bivuye a Bya a Umumaro Funga Bya a"
+
+#, fuzzy
+#~ msgid "returning a value from a constructor"
+#~ msgstr "a Agaciro Bivuye a"
+
+#, fuzzy
+#~ msgid "return-statement with no value, in function declared with a non-void return type"
+#~ msgstr "Garuka Inyandiko Na: Oya Agaciro in Umumaro Na: a Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "return-statement with a value, in function declared with a void return type"
+#~ msgstr "Garuka Inyandiko Na: a Agaciro in Umumaro Na: a Garuka Ubwoko"
+
+#, fuzzy
+#~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)"
+#~ msgstr "`Mukoresha OYA Garuka ni Cyangwa Gishya ni in INGARUKA"
+
+#, fuzzy
+#~ msgid "type `%T' is not a base type for type `%T'"
+#~ msgstr "Ubwoko ni OYA a SHINGIRO Ubwoko kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot declare variable `%D' to be of type `%T'"
+#~ msgstr "IMPINDURAGACIRO Kuri Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot declare parameter `%D' to be of type `%T'"
+#~ msgstr "Kuri Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot declare field `%D' to be of type `%T'"
+#~ msgstr "Umwanya Kuri Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "invalid return type for member function `%#D'"
+#~ msgstr "Sibyo Garuka Ubwoko kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "invalid return type for function `%#D'"
+#~ msgstr "Sibyo Garuka Ubwoko kugirango Umumaro"
+
+#, fuzzy
+#~ msgid "cannot allocate an object of type `%T'"
+#~ msgstr "Igikoresho Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "  because the following virtual functions are abstract:"
+#~ msgstr "i Kitaboneka Imimaro Incamake"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#, fuzzy
+#~ msgid "\t%#D"
+#~ msgstr "%#D"
+
+#, fuzzy
+#~ msgid "  since type `%T' has abstract virtual functions"
+#~ msgstr "guhera Ubwoko Incamake Kitaboneka Imimaro"
+
+#, fuzzy
+#~ msgid "constructor syntax used, but no constructor declared for type `%T'"
+#~ msgstr "Oya kugirango Ubwoko"
+
+#, fuzzy
+#~ msgid "comma expression used to initialize return value"
+#~ msgstr "Akitso imvugo Kuri gutangiza Garuka Agaciro"
+
+#, fuzzy
+#~ msgid "cannot initialize arrays using this syntax"
+#~ msgstr "gutangiza ikoresha iyi"
+
+#, fuzzy
+#~ msgid "initializing array with parameter list"
+#~ msgstr "Gutangiza Imbonerahamwe Na: Urutonde"
+
+#, fuzzy
+#~ msgid "initializer for scalar variable requires one element"
+#~ msgstr "kugirango IMPINDURAGACIRO Ikigize:"
+
+#, fuzzy
+#~ msgid "braces around scalar initializer for `%T'"
+#~ msgstr "Ingirwadusodeko kugirango"
+
+#, fuzzy
+#~ msgid "ignoring extra initializers for `%T'"
+#~ msgstr "Birenga kugirango"
+
+#, fuzzy
+#~ msgid "variable-sized object of type `%T' may not be initialized"
+#~ msgstr "IMPINDURAGACIRO Igikoresho Bya Ubwoko Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'"
+#~ msgstr "Bya Ubwoko ku OYA ku"
+
+#, fuzzy
+#~ msgid "aggregate has a partly bracketed initializer"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "non-empty initializer for array of empty elements"
+#~ msgstr "ubusa kugirango Imbonerahamwe Bya ubusa Ibintu"
+
+#, fuzzy
+#~ msgid "initializer list for object of class with virtual base classes"
+#~ msgstr "Urutonde kugirango Igikoresho Bya ishuri Na: Kitaboneka SHINGIRO Inzego"
+
+#, fuzzy
+#~ msgid "initializer list for object of class with base classes"
+#~ msgstr "Urutonde kugirango Igikoresho Bya ishuri Na: SHINGIRO Inzego"
+
+#, fuzzy
+#~ msgid "initializer list for object using virtual functions"
+#~ msgstr "Urutonde kugirango Igikoresho ikoresha Kitaboneka Imimaro"
+
+#, fuzzy
+#~ msgid "missing initializer for member `%D'"
+#~ msgstr "Ibuze kugirango"
+
+#, fuzzy
+#~ msgid "uninitialized const member `%D'"
+#~ msgstr "Itatangijwe"
+
+#, fuzzy
+#~ msgid "member `%D' with uninitialized const fields"
+#~ msgstr "Na: Itatangijwe Imyanya"
+
+#, fuzzy
+#~ msgid "member `%D' is uninitialized reference"
+#~ msgstr "ni Itatangijwe Indango"
+
+#, fuzzy
+#~ msgid "index value instead of field name in union initializer"
+#~ msgstr "Umubarendanga Agaciro Bya Umwanya Izina: in Ihuza"
+
+#, fuzzy
+#~ msgid "no field `%D' in union being initialized"
+#~ msgstr "Oya Umwanya in Ihuza"
+
+#, fuzzy
+#~ msgid "union `%T' with no named members cannot be initialized"
+#~ msgstr "Ihuza Na: Oya"
+
+#, fuzzy
+#~ msgid "excess elements in aggregate initializer"
+#~ msgstr "Ibintu in"
+
+#, fuzzy
+#~ msgid "circular pointer delegation detected"
+#~ msgstr "Cy'uruziga Mweretsi"
+
+#, fuzzy
+#~ msgid "base operand of `->' has non-pointer type `%T'"
+#~ msgstr "SHINGIRO Bya Mweretsi Ubwoko"
+
+#, fuzzy
+#~ msgid "result of `operator->()' yields non-pointer result"
+#~ msgstr "Igisubizo Bya Mukoresha Mweretsi Igisubizo"
+
+#, fuzzy
+#~ msgid "base operand of `->' is not a pointer"
+#~ msgstr "SHINGIRO Bya ni OYA a Mweretsi"
+
+#, fuzzy
+#~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'"
+#~ msgstr "`%E'Nka a Mweretsi guhera ni Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'"
+#~ msgstr "Gukurikiza Mweretsi Kuri ni Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "member type `%T::' incompatible with object type `%T'"
+#~ msgstr "Ubwoko Na: Igikoresho Ubwoko"
+
+#, fuzzy
+#~ msgid "`%T' fails to be a typedef or built-in type"
+#~ msgstr "`%T'Kuri a Cyangwa in Ubwoko"
+
+#, fuzzy
+#~ msgid "ISO C++ forbids defining types within %s"
+#~ msgstr "C muri"
+
+#, fuzzy
+#~ msgid "call to function `%D' which throws incomplete type `%#T'"
+#~ msgstr "Kuri Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "call to function which throws incomplete type `%#T'"
+#~ msgstr "Kuri Umumaro Ubwoko"
+
+#, fuzzy
+#~ msgid "%s is deprecated, please see the documentation for details"
+#~ msgstr "%sni Bitemewe. i kugirango Birambuye"
+
+#, fuzzy
+#~ msgid "Do not obey access control semantics"
+#~ msgstr "OYA Igenzura"
+
+#, fuzzy
+#~ msgid "Change when template instances are emitted"
+#~ msgstr "Ryari: Inyandikorugero Ingero"
+
+#, fuzzy
+#~ msgid "Check the return value of new"
+#~ msgstr "i Garuka Agaciro Bya Gishya"
+
+#, fuzzy
+#~ msgid "Reduce size of object files"
+#~ msgstr "Ingano Bya Igikoresho Idosiye"
+
+#, fuzzy
+#~ msgid "Make string literals `char[]' instead of `const char[]'"
+#~ msgstr "Ikurikiranyanyuguti INYUGUTI Bya INYUGUTI"
+
+#, fuzzy
+#~ msgid "Dump the entire translation unit to a file"
+#~ msgstr "i Umwandiko wahinduwe ururimi Igice: Kuri a IDOSIYE"
+
+#, fuzzy
+#~ msgid "Do not inline member functions by default"
+#~ msgstr "OYA Mumurongo Imimaro ku Mburabuzi"
+
+#, fuzzy
+#~ msgid "Do not generate run time type descriptor information"
+#~ msgstr "OYA Gukoresha Igihe Ubwoko Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Do not generate code to check exception specifications"
+#~ msgstr "OYA ITEGEKONGENGA Kuri Kugenzura... Irengayobora(-)"
+
+#, fuzzy
+#~ msgid "Scope of for-init-statement vars extends outside"
+#~ msgstr "Bya kugirango Inyandiko Hanze"
+
+#, fuzzy
+#~ msgid "Do not recognize GNU defined keywords"
+#~ msgstr "OYA Amagambo fatizo"
+
+#, fuzzy
+#~ msgid "Enable support for huge objects"
+#~ msgstr "Gushigikira kugirango Ibintu"
+
+#, fuzzy
+#~ msgid "Export functions even if they can be inlined"
+#~ msgstr "Imimaro ATARIIGIHARWE NIBA"
+
+#, fuzzy
+#~ msgid "Only emit explicit template instantiations"
+#~ msgstr "Inyandikorugero"
+
+#, fuzzy
+#~ msgid "Only emit explicit instantiations of inline templates"
+#~ msgstr "Bya Mumurongo Inyandikorugero"
+
+#, fuzzy
+#~ msgid "Don't pedwarn about uses of Microsoft extensions"
+#~ msgstr "Ibyerekeye Bya Umigereka"
+
+#, fuzzy
+#~ msgid "Recognize and/bitand/bitor/compl/not/or/xor"
+#~ msgstr "Na OYA Cyangwa"
+
+#, fuzzy
+#~ msgid "Disable optional diagnostics"
+#~ msgstr "Bitari ngombwa"
+
+#, fuzzy
+#~ msgid "Downgrade conformance errors to warnings"
+#~ msgstr "Amakosa Kuri Iburira"
+
+#, fuzzy
+#~ msgid "Enable automatic template instantiation"
+#~ msgstr "Byikoresha Inyandikorugero"
+
+#, fuzzy
+#~ msgid "Display statistics accumulated during compilation"
+#~ msgstr "Sitatisitiki"
+
+#, fuzzy
+#~ msgid "Specify maximum template instantiation depth"
+#~ msgstr "Kinini Inyandikorugero Ubujyakuzimu"
+
+#, fuzzy
+#~ msgid "Use __cxa_atexit to register destructors"
+#~ msgstr "Kuri Kwiyandikisha"
+
+#, fuzzy
+#~ msgid "Discard unused virtual functions"
+#~ msgstr "Kidakoreshwa Kitaboneka Imimaro"
+
+#, fuzzy
+#~ msgid "Implement vtables using thunks"
+#~ msgstr "ikoresha"
+
+#, fuzzy
+#~ msgid "Emit common-like symbols as weak symbols"
+#~ msgstr "nka Ibimenyetso Nka Ibimenyetso"
+
+#, fuzzy
+#~ msgid "Emit cross referencing information"
+#~ msgstr "Kwambukiranya Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Warn about inconsistent return types"
+#~ msgstr "Ibyerekeye Garuka"
+
+#, fuzzy
+#~ msgid "Warn about overloaded virtual function names"
+#~ msgstr "Ibyerekeye Kitaboneka Umumaro Amazina"
+
+#, fuzzy
+#~ msgid "Don't warn when all ctors/dtors are private"
+#~ msgstr "Ryari: Byose By'umwihariko"
+
+#, fuzzy
+#~ msgid "Warn about non virtual destructors"
+#~ msgstr "Ibyerekeye Kitaboneka"
+
+#, fuzzy
+#~ msgid "Warn when a function is declared extern, then inline"
+#~ msgstr "Ryari: a Umumaro ni Hanyuma Mumurongo"
+
+#, fuzzy
+#~ msgid "Warn when the compiler reorders code"
+#~ msgstr "Ryari: i ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Warn when synthesis behavior differs from Cfront"
+#~ msgstr "Ryari: imyitwarire Bivuye"
+
+#, fuzzy
+#~ msgid "Don't warn when type converting pointers to member functions"
+#~ msgstr "Ryari: Ubwoko Guhindura.... Kuri Imimaro"
+
+#, fuzzy
+#~ msgid "Warn about violations of Effective C++ style rules"
+#~ msgstr "Ibyerekeye Bya C IMISUSIRE"
+
+#, fuzzy
+#~ msgid "Warn when overload promotes from unsigned to signed"
+#~ msgstr "Ryari: Bivuye Bitashizweho umukono Kuri"
+
+#, fuzzy
+#~ msgid "Warn if a C style cast is used in a program"
+#~ msgstr "NIBA a C IMISUSIRE ni in a Porogaramu"
+
+#, fuzzy
+#~ msgid "Don't warn when non-templatized friend functions are declared within a template"
+#~ msgstr "Ryari: Imimaro muri a Inyandikorugero"
+
+#, fuzzy
+#~ msgid "Don't announce deprecation of compiler features"
+#~ msgstr "Bya Ibiranga"
+
+# scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text
+#, fuzzy
+#~ msgid "note:"
+#~ msgstr "Ibisobanuro:"
+
+#, fuzzy
+#~ msgid "warning:"
+#~ msgstr "Iburira!"
+
+#, fuzzy
+#~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling"
+#~ msgstr "Akarango ku ikoresha"
+
+#, fuzzy
+#~ msgid "no INTEGER type can hold a pointer on this configuration"
+#~ msgstr "Oya Ubwoko a Mweretsi ku iyi Iboneza"
+
+#, fuzzy
+#~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide,"
+#~ msgstr "Iboneza Na"
+
+#, fuzzy
+#~ msgid "and pointers are %d bits wide, but g77 doesn't yet work"
+#~ msgstr "Na Akazi"
+
+#, fuzzy
+#~ msgid "properly unless they all are 32 bits wide"
+#~ msgstr "Byose"
+
+#, fuzzy
+#~ msgid "Please keep this in mind before you report bugs."
+#~ msgstr "Gumana: iyi in Mbere Icyegeranyo"
+
+#, fuzzy
+#~ msgid "configuration: char * holds %d bits, but ftnlen only %d"
+#~ msgstr "Iboneza INYUGUTI"
+
+#, fuzzy
+#~ msgid ""
+#~ "configuration: char * holds %d bits, but INTEGER only %d --\n"
+#~ " ASSIGN statement might fail"
+#~ msgstr "Iboneza INYUGUTI Inyandiko"
+
+#, fuzzy
+#~ msgid "In statement function"
+#~ msgstr "Inyandiko Umumaro"
+
+#, fuzzy
+#~ msgid "Outside of any program unit:\n"
+#~ msgstr "Bya Porogaramu Igice:"
+
+#, fuzzy
+#~ msgid "%A from %B at %0%C"
+#~ msgstr "%ABivuye ku"
+
+#, fuzzy
+#~ msgid "directory name must immediately follow -I"
+#~ msgstr "bushyinguro Izina: Ako kanya"
+
+#, fuzzy
+#~ msgid "At %0, INCLUDE file %A exists, but is not readable"
+#~ msgstr "IDOSIYE ni OYA"
+
+#, fuzzy
+#~ msgid "At %0, INCLUDE nesting too deep"
+#~ msgstr "Njyakuzimu"
+
+#, fuzzy
+#~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses"
+#~ msgstr "Mukoresha in a Urubariro ku Na Gukoresha %1"
+
+#, fuzzy
+#~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses"
+#~ msgstr "ku Ntoya ku Gukoresha %1"
+
+#, fuzzy
+#~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2"
+#~ msgstr ""
+#~ "Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ ". Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER"
+#~ msgstr "kugirango ku Guhindura.... Kuri Mburabuzi"
+
+#, fuzzy
+#~ msgid "overflowed output arg list for `%s'"
+#~ msgstr "Ibisohoka Urutonde kugirango"
+
+#, fuzzy
+#~ msgid "--driver no longer supported"
+#~ msgstr "--Musomyi: Oya"
+
+#, fuzzy
+#~ msgid "argument to `%s' missing"
+#~ msgstr "Kuri Ibuze"
+
+#, fuzzy
+#~ msgid "no input files; unwilling to write output files"
+#~ msgstr "Oya Iyinjiza Idosiye Kuri Kwandika Ibisohoka Idosiye"
+
+#, fuzzy
+#~ msgid "Implicit declaration of `%A' at %0"
+#~ msgstr "Bya ku"
+
+#, fuzzy
+#~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0"
+#~ msgstr "C Bisanzwe ku"
+
+#, fuzzy
+#~ msgid "Unknown escape sequence `\\%A' at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Unterminated escape sequence `\\' at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0"
+#~ msgstr "ku INYUGUTI ITEGEKONGENGA ku"
+
+#, fuzzy
+#~ msgid "\\x used at %0 with no following hex digits"
+#~ msgstr "\\xku Na: Oya"
+
+#, fuzzy
+#~ msgid "Hex escape at %0 out of range"
+#~ msgstr "ku Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "Escape sequence at %0 out of range for character"
+#~ msgstr "ku Inyuma Bya Urutonde kugirango Inyuguti"
+
+#, fuzzy
+#~ msgid "hex escape out of range"
+#~ msgstr "Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "non-ANSI-standard escape sequence, `\\%c'"
+#~ msgstr "Bisanzwe"
+
+#, fuzzy
+#~ msgid "unknown escape sequence `\\%c'"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "unknown escape sequence: `\\' followed by char code 0x%x"
+#~ msgstr "Kitazwi ku INYUGUTI ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "badly formed directive -- no closing quote"
+#~ msgstr "Oya Gushyiraho akugarizo"
+
+#, fuzzy
+#~ msgid "#-lines for entering and leaving files don't match"
+#~ msgstr "#-Imirongo kugirango Na Idosiye BIHUYE"
+
+#, fuzzy
+#~ msgid "bad directive -- missing close-quote"
+#~ msgstr "Ibuze Gufunga Gushyiraho akugarizo"
+
+#, fuzzy
+#~ msgid "invalid #ident"
+#~ msgstr "Sibyo"
+
+#, fuzzy
+#~ msgid "undefined or invalid # directive"
+#~ msgstr "kidasobanuye Cyangwa Sibyo"
+
+#, fuzzy
+#~ msgid "invalid #line"
+#~ msgstr "Sibyo Umurongo"
+
+#, fuzzy
+#~ msgid "use `#line ...' instead of `# ...' in first line"
+#~ msgstr "Gukoresha Umurongo Bya in Itangira Umurongo"
+
+#, fuzzy
+#~ msgid "invalid #-line"
+#~ msgstr "Sibyo Umurongo"
+
+#, fuzzy
+#~ msgid "Null character at %0 -- line ignored"
+#~ msgstr "Inyuguti ku Umurongo"
+
+#, fuzzy
+#~ msgid "INCLUDE at %0 not the only statement on the source line"
+#~ msgstr "ku OYA i Inyandiko ku i Inkomoko Umurongo"
+
+#, fuzzy
+#~ msgid "ASSIGNed FORMAT specifier is too small"
+#~ msgstr "ni Gitoya"
+
+#, fuzzy
+#~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry"
+#~ msgstr "ku Ubwoko ku OYA"
+
+#, fuzzy
+#~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)"
+#~ msgstr "ku Gusubiramo Kugenzura... Umubare wuzuye Byarenze urugero Bya S"
+
+#, fuzzy
+#~ msgid "ASSIGN to variable that is too small"
+#~ msgstr "Kuri IMPINDURAGACIRO ni Gitoya"
+
+#, fuzzy
+#~ msgid "ASSIGNed GOTO target variable is too small"
+#~ msgstr "Intego IMPINDURAGACIRO ni Gitoya"
+
+#, fuzzy
+#~ msgid "Local adjustable symbol `%A' at %0"
+#~ msgstr "IKIMENYETSO ku"
+
+#, fuzzy
+#~ msgid "data initializer on host with different endianness"
+#~ msgstr "Ibyatanzwe ku Ubuturo Na:"
+
+#, fuzzy
+#~ msgid "%s no longer supported -- try -fvxt"
+#~ msgstr "%sOya"
+
+#, fuzzy
+#~ msgid "%s no longer supported -- try -fno-vxt -ff90"
+#~ msgstr "%sOya"
+
+#, fuzzy
+#~ msgid "%s disabled, use normal debugging flags"
+#~ msgstr "%sYahagaritswe Gukoresha Bisanzwe Amabendera"
+
+#, fuzzy
+#~ msgid "Print g77-specific compiler version info, run internal tests"
+#~ msgstr "Verisiyo Ibisobanuro Gukoresha By'imbere"
+
+#, fuzzy
+#~ msgid "Program is written in typical FORTRAN 66 dialect"
+#~ msgstr "ni in"
+
+#, fuzzy
+#~ msgid "Program is written in typical Unix f77 dialect"
+#~ msgstr "ni in"
+
+#, fuzzy
+#~ msgid "Program does not use Unix-f77 dialectal features"
+#~ msgstr "OYA Gukoresha Ibiranga"
+
+#, fuzzy
+#~ msgid "Program is written in Fortran-90-ish dialect"
+#~ msgstr "ni in"
+
+#, fuzzy
+#~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements"
+#~ msgstr "Na Nka NIBA in"
+
+#, fuzzy
+#~ msgid "Allow $ in symbol names"
+#~ msgstr "in IKIMENYETSO Amazina"
+
+#, fuzzy
+#~ msgid "f2c-compatible code need not be generated"
+#~ msgstr "ITEGEKONGENGA OYA"
+
+#, fuzzy
+#~ msgid "Unsupported; do not generate libf2c-calling code"
+#~ msgstr "OYA ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Unsupported; affects code-generation of arrays"
+#~ msgstr "ITEGEKONGENGA Bya"
+
+#, fuzzy
+#~ msgid "Program is written in Fortran-90-ish free form"
+#~ msgstr "ni in Kigenga Ifishi"
+
+#, fuzzy
+#~ msgid "Warn about use of (only a few for now) Fortran extensions"
+#~ msgstr "Ibyerekeye Gukoresha Bya a kugirango NONEAHA Umigereka"
+
+#, fuzzy
+#~ msgid "Program is written in VXT (Digital-like) FORTRAN"
+#~ msgstr "ni in nka"
+
+#, fuzzy
+#~ msgid "Disallow all ugly features"
+#~ msgstr "Byose Ibiranga"
+
+#, fuzzy
+#~ msgid "Hollerith and typeless constants not passed as arguments"
+#~ msgstr "Na OYA Nka ingingo"
+
+#, fuzzy
+#~ msgid "Allow ordinary copying of ASSIGN'ed vars"
+#~ msgstr "Bya"
+
+#, fuzzy
+#~ msgid "Dummy array dimensioned to (1) is assumed-size"
+#~ msgstr "Imbonerahamwe Kuri 1. ni Ingano"
+
+#, fuzzy
+#~ msgid "Trailing comma in procedure call denotes null argument"
+#~ msgstr "Akitso in NTAGIHARI"
+
+#, fuzzy
+#~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z"
+#~ msgstr "Na"
+
+#, fuzzy
+#~ msgid "Initialization via DATA and PARAMETER is type-compatible"
+#~ msgstr "Biturutse Na ni Ubwoko"
+
+#, fuzzy
+#~ msgid "Allow INTEGER and LOGICAL interchangeability"
+#~ msgstr "Na"
+
+#, fuzzy
+#~ msgid "Print internal debugging-related info"
+#~ msgstr "By'imbere Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Initialize local vars and arrays to zero"
+#~ msgstr "Na Kuri Zeru"
+
+#, fuzzy
+#~ msgid "Backslashes in character/hollerith constants not special (C-style)"
+#~ msgstr "in Inyuguti OYA Bidasanzwe C IMISUSIRE"
+
+#, fuzzy
+#~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs"
+#~ msgstr "Imbere Impera Kuri"
+
+#, fuzzy
+#~ msgid "Disable the appending of underscores to externals"
+#~ msgstr "i Bya Kuri"
+
+#, fuzzy
+#~ msgid "Never append a second underscore to externals"
+#~ msgstr "Kongeraho... a ISEGONDA Kuri"
+
+#, fuzzy
+#~ msgid "Intrinsics spelled as e.g. SqRt"
+#~ msgstr "g."
+
+#, fuzzy
+#~ msgid "Intrinsics in uppercase"
+#~ msgstr "in Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Intrinsics letters in arbitrary cases"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "Language keywords spelled as e.g. IOStat"
+#~ msgstr "g."
+
+#, fuzzy
+#~ msgid "Language keywords in uppercase"
+#~ msgstr "Amagambo fatizo in Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Language keyword letters in arbitrary cases"
+#~ msgstr "Ijambo- banze in"
+
+#, fuzzy
+#~ msgid "Internally convert most source to uppercase"
+#~ msgstr "GUHINDURA Inkomoko Kuri Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Internally preserve source case"
+#~ msgstr "Inkomoko"
+
+#, fuzzy
+#~ msgid "Symbol names spelled in mixed case"
+#~ msgstr "Amazina in Bivanze"
+
+#, fuzzy
+#~ msgid "Symbol names in uppercase"
+#~ msgstr "Amazina in Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Symbol names in lowercase"
+#~ msgstr "Amazina in Inyuguti nto"
+
+#, fuzzy
+#~ msgid "Program written in uppercase"
+#~ msgstr "in Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Program written in lowercase"
+#~ msgstr "in Inyuguti nto"
+
+#, fuzzy
+#~ msgid "Program written in strict mixed-case"
+#~ msgstr "in Bivanze"
+
+#, fuzzy
+#~ msgid "Compile as if program written in uppercase"
+#~ msgstr "Nka NIBA Porogaramu in Inyuguti nkuru"
+
+#, fuzzy
+#~ msgid "Compile as if program written in lowercase"
+#~ msgstr "Nka NIBA Porogaramu in Inyuguti nto"
+
+#, fuzzy
+#~ msgid "Preserve all spelling (case) used in program"
+#~ msgstr "Byose Ivuganyuguti in Porogaramu"
+
+#, fuzzy
+#~ msgid "Delete libU77 intrinsics with bad interfaces"
+#~ msgstr "Na:"
+
+#, fuzzy
+#~ msgid "Disable libU77 intrinsics with bad interfaces"
+#~ msgstr "Na:"
+
+#, fuzzy
+#~ msgid "Hide libU77 intrinsics with bad interfaces"
+#~ msgstr "Na:"
+
+#, fuzzy
+#~ msgid "Treat initial values of 0 like non-zero values"
+#~ msgstr "Uduciro Bya 0 nka Zeru Uduciro"
+
+#, fuzzy
+#~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)"
+#~ msgstr "Bidasanzwe Ibisobanuro kugirango Na Yahagaritswe"
+
+#, fuzzy
+#~ msgid "Take at least one trip through each iterative DO loop"
+#~ msgstr "ku Gihinguranya"
+
+#, fuzzy
+#~ msgid "Print names of program units as they are compiled"
+#~ msgstr "Amazina Bya Porogaramu Nka"
+
+#, fuzzy
+#~ msgid "Disable fatal diagnostics about inter-procedural problems"
+#~ msgstr "Ibyerekeye"
+
+#, fuzzy
+#~ msgid "Make prefix-radix non-decimal constants be typeless"
+#~ msgstr "Imbanziriza radix NYACUMI"
+
+#, fuzzy
+#~ msgid "Generate code to check subscript and substring bounds"
+#~ msgstr "ITEGEKONGENGA Kuri Kugenzura... Inyandiko nyesi Na"
+
+#, fuzzy
+#~ msgid "Fortran-specific form of -fbounds-check"
+#~ msgstr "Ifishi Bya Kugenzura..."
+
+#, fuzzy
+#~ msgid "Disable warnings about inter-procedural problems"
+#~ msgstr "Iburira Ibyerekeye"
+
+#, fuzzy
+#~ msgid "Warn about constructs with surprising meanings"
+#~ msgstr "Ibyerekeye Na:"
+
+#, fuzzy
+#~ msgid "Add a directory for INCLUDE searching"
+#~ msgstr "a bushyinguro kugirango Ishakisha"
+
+#, fuzzy
+#~ msgid "Set the maximum line length"
+#~ msgstr "i Kinini Umurongo Uburebure"
+
+#, fuzzy
+#~ msgid "Missing first operand for binary operator at %0"
+#~ msgstr "Itangira kugirango Nyabibiri Mukoresha ku"
+
+#, fuzzy
+#~ msgid "Zero-length character constant at %0"
+#~ msgstr "Uburebure Inyuguti ku"
+
+#, fuzzy
+#~ msgid "Invalid token at %0 in expression or subexpression at %1"
+#~ msgstr "ku in imvugo Cyangwa ku"
+
+#, fuzzy
+#~ msgid "Missing operand for operator at %1 at end of expression at %0"
+#~ msgstr "kugirango Mukoresha ku ku Impera Bya imvugo ku"
+
+#, fuzzy
+#~ msgid "Label %A already defined at %1 when redefined at %0"
+#~ msgstr "ku Ryari: ku"
+
+#, fuzzy
+#~ msgid "Unrecognized character at %0 [info -f g77 M LEX]"
+#~ msgstr "Inyuguti ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Label definition %A at %0 on empty statement (as of %1)"
+#~ msgstr "Insobanuro ku ku ubusa Inyandiko Nka Bya"
+
+#, fuzzy
+#~ msgid "Invalid first character at %0 [info -f g77 M LEX]"
+#~ msgstr "Itangira Inyuguti ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Line too long as of %0 [info -f g77 M LEX]"
+#~ msgstr "Nka Bya Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]"
+#~ msgstr "Bikurikije umubare Inyuguti ku in Akarango Umwanya Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Label number at %0 not in range 1-99999"
+#~ msgstr "Umubare ku OYA in Urutonde 1."
+
+#, fuzzy
+#~ msgid "At %0, '!' and '/*' are not valid comment delimiters"
+#~ msgstr "Na OYA Byemewe Icyo wongeraho"
+
+#, fuzzy
+#~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]"
+#~ msgstr "ku Kugaragara in Inkingi 6 Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]"
+#~ msgstr "ku Sibyo Na: Umurongo ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Character constant at %0 has no closing apostrophe at %1"
+#~ msgstr "ku Oya ku"
+
+#, fuzzy
+#~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1"
+#~ msgstr "ku Birenzeho Inyuguti Nka Bya"
+
+#, fuzzy
+#~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1"
+#~ msgstr "Gufunga ku Kuri BIHUYE Gufungura ku"
+
+#, fuzzy
+#~ msgid "Integer at %0 too large"
+#~ msgstr "ku Binini"
+
+#, fuzzy
+#~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'"
+#~ msgstr "Igihe ku OYA ku kugirango Bihindagurika Akadomo Umubare Cyangwa ku Cyangwa"
+
+#, fuzzy
+#~ msgid "Missing close-period between `.%A' at %0 and %1"
+#~ msgstr "Gufunga Igihe hagati ku Na"
+
+#, fuzzy
+#~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field"
+#~ msgstr "ku kugirango ku in Umwanya"
+
+#, fuzzy
+#~ msgid "Missing value at %1 for real-number exponent at %0"
+#~ msgstr "Agaciro ku kugirango Umubare ku"
+
+#, fuzzy
+#~ msgid "Expected binary operator between expressions at %0 and at %1"
+#~ msgstr "Itegerejwe Nyabibiri Mukoresha hagati ku Na ku"
+
+#, fuzzy
+#~ msgid "Semicolon at %0 is an invalid token"
+#~ msgstr "ku ni Sibyo"
+
+#, fuzzy
+#~ msgid "Extraneous comma in FORMAT statement at %0"
+#~ msgstr "Akitso in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Missing comma in FORMAT statement at %0"
+#~ msgstr "Akitso in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Spurious sign in FORMAT statement at %0"
+#~ msgstr "IKIMENYETSO in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Spurious number in FORMAT statement at %0"
+#~ msgstr "Umubare in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Spurious text trailing number in FORMAT statement at %0"
+#~ msgstr "Umwandiko Umubare in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Unrecognized FORMAT specifier at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Missing close-parenthese(s) in FORMAT statement at %0"
+#~ msgstr "Gufunga S in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Missing number following period in FORMAT statement at %0"
+#~ msgstr "Umubare Igihe in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Missing number following `E' in FORMAT statement at %0"
+#~ msgstr "Umubare in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Spurious trailing comma preceding terminator at %0"
+#~ msgstr "Akitso ku"
+
+#, fuzzy
+#~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)"
+#~ msgstr "Bya kugirango Inyandiko OYA i Igenera Mukoresha"
+
+#, fuzzy
+#~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)"
+#~ msgstr "Bya kugirango Inyandiko i Igenera Mukoresha"
+
+#, fuzzy
+#~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects"
+#~ msgstr "ku Mbere Urutonde Bya Ibintu"
+
+#, fuzzy
+#~ msgid "Reference to label at %1 inconsistent with its definition at %0"
+#~ msgstr "Kuri Akarango ku Na: Insobanuro ku"
+
+#, fuzzy
+#~ msgid "Reference to label at %1 inconsistent with earlier reference at %0"
+#~ msgstr "Kuri Akarango ku Na: Indango ku"
+
+#, fuzzy
+#~ msgid "DO-statement reference to label at %1 follows its definition at %0"
+#~ msgstr "Inyandiko Indango Kuri Akarango ku Insobanuro ku"
+
+#, fuzzy
+#~ msgid "Reference to label at %1 is outside block containing definition at %0"
+#~ msgstr "Kuri Akarango ku ni Hanze Funga Insobanuro ku"
+
+#, fuzzy
+#~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1"
+#~ msgstr "Inyandiko Indango Kuri Akarango ku Na ku Funga ku"
+
+#, fuzzy
+#~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1"
+#~ msgstr "Inyandiko Indango Kuri Akarango ku Na Akarango Insobanuro ku ku Funga ku"
+
+#, fuzzy
+#~ msgid "Label definition at %0 invalid on this kind of statement"
+#~ msgstr "Insobanuro ku Sibyo ku iyi Bya Inyandiko"
+
+#, fuzzy
+#~ msgid "Statement at %0 invalid in this context"
+#~ msgstr "ku Sibyo in iyi Imvugiro"
+
+#, fuzzy
+#~ msgid "Statement at %0 invalid in context established by statement at %1"
+#~ msgstr "ku Sibyo in Imvugiro ku Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Statement at %0 must specify construct name specified at %1"
+#~ msgstr "ku Izina: ku"
+
+#, fuzzy
+#~ msgid "Construct name at %0 superfluous, no construct name specified at %1"
+#~ msgstr "Izina: ku Oya Izina: ku"
+
+#, fuzzy
+#~ msgid "Construct name at %0 not the same as construct name at %1"
+#~ msgstr "Izina: ku OYA i Nka Izina: ku"
+
+#, fuzzy
+#~ msgid "Construct name at %0 does not match construct name for any containing DO constructs"
+#~ msgstr "Izina: ku OYA BIHUYE Izina: kugirango"
+
+#, fuzzy
+#~ msgid "Label definition missing at %0 for DO construct specifying label at %1"
+#~ msgstr "Insobanuro Ibuze ku kugirango Akarango ku"
+
+#, fuzzy
+#~ msgid "Statement at %0 follows ELSE block for IF construct at %1"
+#~ msgstr "ku Funga kugirango ku"
+
+#, fuzzy
+#~ msgid "No label definition for FORMAT statement at %0"
+#~ msgstr "Akarango Insobanuro kugirango Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1"
+#~ msgstr "ukugaragara Bya ku muri ku"
+
+#, fuzzy
+#~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1"
+#~ msgstr "Inyandiko ku Ibuze Ijambo- banze Bya ngombwa kugirango By'imbere Cyangwa Modire S ku"
+
+#, fuzzy
+#~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment"
+#~ msgstr "Inyandiko ku ku Oya Gifitanye isano Izina: Mukoresha Cyangwa Igenera"
+
+#, fuzzy
+#~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1"
+#~ msgstr "Izina: ku Oya Izina: ku"
+
+#, fuzzy
+#~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1"
+#~ msgstr "Izina: ku Oya Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Program unit name at %0 not the same as name at %1"
+#~ msgstr "Igice: Izina: ku OYA i Nka Izina: ku"
+
+#, fuzzy
+#~ msgid "Type name at %0 not the same as name at %1"
+#~ msgstr "Izina: ku OYA i Nka Izina: ku"
+
+#, fuzzy
+#~ msgid "End of source file before end of block started at %0"
+#~ msgstr "Impera Bya Inkomoko IDOSIYE Mbere Impera Bya Funga ku"
+
+#, fuzzy
+#~ msgid "Undefined label, first referenced at %0"
+#~ msgstr "Akarango Itangira ku"
+
+#, fuzzy
+#~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0"
+#~ msgstr "Inyandiko Cyangwa Ikiranga ku Na: Inyandiko Cyangwa Ikiranga ku"
+
+#, fuzzy
+#~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0"
+#~ msgstr "Cyangwa Inyandiko ku Na: Cyangwa Inyandiko ku"
+
+#, fuzzy
+#~ msgid "RETURN statement at %0 invalid within a main program unit"
+#~ msgstr "Inyandiko ku Sibyo muri a Porogaramu Igice:"
+
+#, fuzzy
+#~ msgid "Alternate return specifier at %0 invalid within a main program unit"
+#~ msgstr "Garuka ku Sibyo muri a Porogaramu Igice:"
+
+#, fuzzy
+#~ msgid "Alternate return specifier at %0 invalid within a function"
+#~ msgstr "Garuka ku Sibyo muri a Umumaro"
+
+#, fuzzy
+#~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module"
+#~ msgstr "Cyangwa Inyandiko ku Sibyo kugirango Ubwoko Insobanuro muri Ikindi i Bya a Modire"
+
+#, fuzzy
+#~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements"
+#~ msgstr "ku Ako kanya Ubwoko Inyandiko ku Na: Oya"
+
+#, fuzzy
+#~ msgid "No components specified as of %0 for derived-type definition beginning at %1"
+#~ msgstr "Nka Bya kugirango Ubwoko Insobanuro Itangiriro ku"
+
+#, fuzzy
+#~ msgid "No components specified as of %0 for structure definition beginning at %1"
+#~ msgstr "Nka Bya kugirango Imiterere Insobanuro Itangiriro ku"
+
+#, fuzzy
+#~ msgid "Missing structure name for outer structure definition at %0"
+#~ msgstr "Imiterere Izina: kugirango hanze Imiterere Insobanuro ku"
+
+#, fuzzy
+#~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead"
+#~ msgstr "Amazina ku kugirango hanze Imiterere Insobanuro in a Inyandiko"
+
+#, fuzzy
+#~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1"
+#~ msgstr "Umwanya Izina: S kugirango Imiterere Insobanuro ku muri Imiterere Insobanuro ku"
+
+#, fuzzy
+#~ msgid "No components specified as of %0 for map beginning at %1"
+#~ msgstr "Nka Bya kugirango Itangiriro ku"
+
+#, fuzzy
+#~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required"
+#~ msgstr "Cyangwa Amakarita Nka Bya kugirango Ihuza Itangiriro ku ku Bya ngombwa"
+
+#, fuzzy
+#~ msgid "Missing %A specifier in statement at %0"
+#~ msgstr "in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O"
+#~ msgstr "in Urutonde ku Sibyo kugirango"
+
+#, fuzzy
+#~ msgid "Conflicting I/O control specifications at %0 and %1"
+#~ msgstr "Igenzura ku Na"
+
+#, fuzzy
+#~ msgid "No UNIT= specifier in I/O control list at %0"
+#~ msgstr "URUGERO in Igenzura Urutonde ku"
+
+#, fuzzy
+#~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list"
+#~ msgstr "ku in Igenzura Urutonde"
+
+#, fuzzy
+#~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list"
+#~ msgstr "ku in Igenzura Urutonde"
+
+#, fuzzy
+#~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1"
+#~ msgstr "ukugaragara Bya ku muri ku"
+
+#, fuzzy
+#~ msgid "Duplicate or overlapping case values/ranges at %0 and %1"
+#~ msgstr "Cyangwa iyorosa Uduciro Ibice ku Na"
+
+#, fuzzy
+#~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1"
+#~ msgstr "Na Cyangwa Ubwoko hagati Agaciro Cyangwa Agaciro muri Urutonde ku Na ku"
+
+#, fuzzy
+#~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement"
+#~ msgstr "ku Sibyo kugirango Inyandiko muri Bijyanye n'inyurabwenge Ubwoko Inyandiko"
+
+#, fuzzy
+#~ msgid "Fortran 90 feature at %0 unsupported"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]"
+#~ msgstr "Bya Cyangwa Indango Kuri IKIMENYETSO ku ku"
+
+#, fuzzy
+#~ msgid "Null element at %0 for array reference at %1"
+#~ msgstr "Ikigize: ku kugirango Imbonerahamwe Indango ku"
+
+#, fuzzy
+#~ msgid "Too few elements (%A missing) as of %0 for array reference at %1"
+#~ msgstr "Ibintu Ibuze Nka Bya kugirango Imbonerahamwe Indango ku"
+
+#, fuzzy
+#~ msgid "Too many elements as of %0 for array reference at %1"
+#~ msgstr "Ibintu Nka Bya kugirango Imbonerahamwe Indango ku"
+
+#, fuzzy
+#~ msgid "Missing colon as of %0 in substring reference for %1"
+#~ msgstr "Nka Bya in Indango kugirango"
+
+#, fuzzy
+#~ msgid "Invalid use at %0 of substring operator on %1"
+#~ msgstr "Gukoresha %1 ku Bya Mukoresha ku"
+
+#, fuzzy
+#~ msgid "Substring begin/end point at %0 out of defined range"
+#~ msgstr "Impera Akadomo ku Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "Array element value at %0 out of defined range"
+#~ msgstr "Ikigize: Agaciro ku Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "Expression at %0 has incorrect data type or rank for its context"
+#~ msgstr "ku Ibyatanzwe Ubwoko Cyangwa IGICE kugirango Imvugiro"
+
+#, fuzzy
+#~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)"
+#~ msgstr "ku 0 Zeru ku OYA"
+
+#, fuzzy
+#~ msgid "%A step count known to be 0 (zero) at %0"
+#~ msgstr "%AIntera IBARA Kuri 0 Zeru ku"
+
+#, fuzzy
+#~ msgid "%A end value plus step count known to overflow at %0"
+#~ msgstr "%AImpera Agaciro Guteranya Intera IBARA Kuri Byarenze urugero ku"
+
+#, fuzzy
+#~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0"
+#~ msgstr "%AImpera Na Intera IBARA Uduciro Kuri Igisubizo in imyitwarire Kuri Byarenze urugero S in ku"
+
+#, fuzzy
+#~ msgid "%A begin, end, and step-count values known to result in no iterations at %0"
+#~ msgstr "%AImpera Na Intera IBARA Uduciro Kuri Igisubizo in Oya Amasubiramo ku"
+
+#, fuzzy
+#~ msgid "Type disagreement between expressions at %0 and %1"
+#~ msgstr "hagati ku Na"
+
+#, fuzzy
+#~ msgid "No specification for implied-DO iterator `%A' at %0"
+#~ msgstr "kugirango ku"
+
+#, fuzzy
+#~ msgid "Gratuitous parentheses surround implied-DO construct at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Zero-size specification invalid at %0"
+#~ msgstr "Ingano Sibyo ku"
+
+#, fuzzy
+#~ msgid "Zero-size array at %0"
+#~ msgstr "Ingano Imbonerahamwe ku"
+
+#, fuzzy
+#~ msgid "Target machine does not support complex entity of kind specified at %0"
+#~ msgstr "OYA Gushigikira ITSINDA RY'IMIBARE C Bya ku"
+
+#, fuzzy
+#~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0"
+#~ msgstr "OYA Gushigikira ku"
+
+#, fuzzy
+#~ msgid "Attempt to raise constant zero to a power at %0"
+#~ msgstr "Kuri Zeru Kuri a UMWIKUBE ku"
+
+#, fuzzy
+#~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C"
+#~ msgstr "Kuri Gifitanye isano ku Kuri Ifishi Cyangwa"
+
+#, fuzzy
+#~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]"
+#~ msgstr "Gukoresha Bya ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]"
+#~ msgstr "ku ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]"
+#~ msgstr "Izina: kugirango ku Na ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0"
+#~ msgstr "Ubwoko kugirango Na: ku"
+
+#, fuzzy
+#~ msgid "Unable to open INCLUDE file `%A' at %0"
+#~ msgstr "Kuri Gufungura IDOSIYE ku"
+
+#, fuzzy
+#~ msgid "Null argument at %0 for statement function reference at %1"
+#~ msgstr "ku kugirango Inyandiko Umumaro Indango ku"
+
+#, fuzzy
+#~ msgid "Null argument at %0 for procedure invocation at %1"
+#~ msgstr "ku kugirango ku"
+
+#, fuzzy
+#~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1"
+#~ msgstr "%Aingingo Na: Ishusho Nka Bya kugirango Inyandiko Umumaro Indango ku"
+
+#, fuzzy
+#~ msgid "%A too many arguments as of %0 for statement function reference at %1"
+#~ msgstr "%Aingingo Nka Bya kugirango Inyandiko Umumaro Indango ku"
+
+#, fuzzy
+#~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0"
+#~ msgstr "ku kugirango Ishusho in Inyandiko Umumaro Indango ku"
+
+#, fuzzy
+#~ msgid "Unsupported FORMAT specifier at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported"
+#~ msgstr "imvugo ku"
+
+#, fuzzy
+#~ msgid "Unsupported VXT statement at %0"
+#~ msgstr "Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Attempt to specify second initial value for `%A' at %0"
+#~ msgstr "Kuri ISEGONDA Agaciro kugirango ku"
+
+#, fuzzy
+#~ msgid "Too few initial values in list of initializers for `%A' at %0"
+#~ msgstr "Uduciro in Urutonde Bya kugirango ku"
+
+#, fuzzy
+#~ msgid "Too many initial values in list of initializers starting at %0"
+#~ msgstr "Uduciro in Urutonde Bya ku"
+
+#, fuzzy
+#~ msgid "Array or substring specification for `%A' out of range in statement at %0"
+#~ msgstr "Cyangwa kugirango Inyuma Bya Urutonde in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0"
+#~ msgstr "Inyandiko nyesi Inyuma Bya Urutonde kugirango Bya in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "Intera IBARA Bya 0 Zeru kugirango IMPINDURAGACIRO in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0"
+#~ msgstr "IBARA Bya 0 Zeru kugirango IMPINDURAGACIRO in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Not an integer constant expression in implied do-loop in statement at %0"
+#~ msgstr "Umubare wuzuye imvugo in in Inyandiko ku"
+
+#, fuzzy
+#~ msgid "Attempt to specify second initial value for element of `%A' at %0"
+#~ msgstr "Kuri ISEGONDA Agaciro kugirango Ikigize: Bya ku"
+
+#, fuzzy
+#~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0"
+#~ msgstr "Kuri Ubuso Na ku"
+
+#, fuzzy
+#~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions"
+#~ msgstr "Nka ku Kuri Itunganya Amabwiriza"
+
+#, fuzzy
+#~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'"
+#~ msgstr "kugirango Ishyira mu mwanya Bya ku Byombi Na Bayite Nta- boneza Bivuye"
+
+#, fuzzy
+#~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement"
+#~ msgstr "Cyangwa kugirango Inyuma Bya Urutonde in Inyandiko"
+
+#, fuzzy
+#~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement"
+#~ msgstr "Bya in Inyandiko"
+
+#, fuzzy
+#~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement"
+#~ msgstr "Indango Kuri IMPINDURAGACIRO in Inyandiko"
+
+#, fuzzy
+#~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'"
+#~ msgstr "Inyandiko nyesi Inyuma Bya Urutonde kugirango Bya"
+
+#, fuzzy
+#~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'"
+#~ msgstr "Kuri Ubuso Akadomo Biturutse Bya"
+
+#, fuzzy
+#~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "Ibintu in Indango Kuri Imbonerahamwe in Inyandiko"
+
+#, fuzzy
+#~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement"
+#~ msgstr "Ibintu in Indango Kuri Imbonerahamwe in Inyandiko"
+
+#, fuzzy
+#~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'"
+#~ msgstr "Na Biturutse kugirango Urugero Na"
+
+#, fuzzy
+#~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram"
+#~ msgstr "Agaciro kugirango ku OYA in"
+
+#, fuzzy
+#~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1"
+#~ msgstr "Funga ni Cyangwa ku OYA ku"
+
+#, fuzzy
+#~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1"
+#~ msgstr "Funga ni in Uburebure ku ku"
+
+#, fuzzy
+#~ msgid "Blank common initialized at %0"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC"
+#~ msgstr "ni Nka ku OYA"
+
+#, fuzzy
+#~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL"
+#~ msgstr "ni Nka ku OYA"
+
+#, fuzzy
+#~ msgid "Character `%A' (for example) is upper-case in symbol name at %0"
+#~ msgstr "kugirango Urugero ni Nkuru in IKIMENYETSO Izina: ku"
+
+#, fuzzy
+#~ msgid "Character `%A' (for example) is lower-case in symbol name at %0"
+#~ msgstr "kugirango Urugero ni Ntoya in IKIMENYETSO Izina: ku"
+
+#, fuzzy
+#~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0"
+#~ msgstr "OYA ku Akadomo ku Ntoya Inyuguti in IKIMENYETSO Izina: ku"
+
+#, fuzzy
+#~ msgid "Initial character `%A' is lower-case in symbol name at %0"
+#~ msgstr "Inyuguti ni Ntoya in IKIMENYETSO Izina: ku"
+
+#, fuzzy
+#~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved"
+#~ msgstr "OYA ku Gukoresha Igihe Isomero kugirango Inkomoko Idosiye Na:"
+
+#, fuzzy
+#~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0"
+#~ msgstr "Cyangwa ku"
+
+#, fuzzy
+#~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1"
+#~ msgstr "ku Sibyo in Porogaramu Igice: ku"
+
+#, fuzzy
+#~ msgid "Truncating characters on right side of character constant at %0"
+#~ msgstr "Inyuguti ku Iburyo: Bya Inyuguti ku"
+
+#, fuzzy
+#~ msgid "Truncating characters on right side of hollerith constant at %0"
+#~ msgstr "Inyuguti ku Iburyo: Bya ku"
+
+#, fuzzy
+#~ msgid "Truncating non-zero data on left side of numeric constant at %0"
+#~ msgstr "Zeru Ibyatanzwe ku Ibumoso: Bya Bikurikije umubare ku"
+
+#, fuzzy
+#~ msgid "Truncating non-zero data on left side of typeless constant at %0"
+#~ msgstr "Zeru Ibyatanzwe ku Ibumoso: Bya ku"
+
+#, fuzzy
+#~ msgid "Typeless constant at %0 too large"
+#~ msgstr "ku Binini"
+
+#, fuzzy
+#~ msgid "First-column ampersand continuation at %0"
+#~ msgstr "Inkingi ku"
+
+#, fuzzy
+#~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Izina: ku ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Izina: ni ku ni ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Izina: ku Ubwoko ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "ingingo Kuri ku Insobanuro ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "ingingo kugirango ku ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]"
+#~ msgstr "Bya ni ku ni ku Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Array `%A' at %0 is too large to handle"
+#~ msgstr "ku ni Binini Kuri"
+
+#, fuzzy
+#~ msgid "Statement function `%A' defined at %0 is not used"
+#~ msgstr "Umumaro ku ni OYA"
+
+#, fuzzy
+#~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]"
+#~ msgstr "ku Kuri Ibisobanuro F"
+
+#, fuzzy
+#~ msgid "Internal compiler error -- cannot perform operation"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "In unknown kind"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "In function"
+#~ msgstr "Umumaro"
+
+#, fuzzy
+#~ msgid "In program"
+#~ msgstr "Porogaramu"
+
+#, fuzzy
+#~ msgid "In block-data unit"
+#~ msgstr "Funga Ibyatanzwe Igice:"
+
+#, fuzzy
+#~ msgid "In common block"
+#~ msgstr "Funga"
+
+#, fuzzy
+#~ msgid "internal error in check-init: tree code not implemented: %s"
+#~ msgstr "By'imbere Ikosa in Kugenzura... ITEGEKONGENGA OYA"
+
+#, fuzzy
+#~ msgid "final field '%s' may not have been initialized"
+#~ msgstr "Umwanya Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "internal error - too many interface type"
+#~ msgstr "By'imbere Ikosa Ubwoko"
+
+#, fuzzy
+#~ msgid "bad method signature"
+#~ msgstr "Uburyo Isinya"
+
+#, fuzzy
+#~ msgid "misplaced ConstantValue attribute (not in any field)"
+#~ msgstr "Ikiranga OYA in Umwanya"
+
+#, fuzzy
+#~ msgid "duplicate ConstantValue attribute for field '%s'"
+#~ msgstr "Gusubiramo Ikiranga kugirango Umwanya"
+
+#, fuzzy
+#~ msgid "ConstantValue attribute of field '%s' has wrong type"
+#~ msgstr "Ikiranga Bya Umwanya Ubwoko"
+
+#, fuzzy
+#~ msgid "field '%s' not found in class"
+#~ msgstr "Umwanya OYA Byabonetse in ishuri"
+
+#, fuzzy
+#~ msgid "abstract method in non-abstract class"
+#~ msgstr "Incamake Uburyo in Incamake ishuri"
+
+#, fuzzy
+#~ msgid "non-static method '%s' overrides static method"
+#~ msgstr "Uburyo Uburyo"
+
+#, fuzzy
+#~ msgid "In %s: overlapped variable and exception ranges at %d"
+#~ msgstr "IMPINDURAGACIRO Na Irengayobora(-) Ibice ku"
+
+#, fuzzy
+#~ msgid "bad type in parameter debug info"
+#~ msgstr "Ubwoko in Kosora amakosa Ibisobanuro"
+
+#, fuzzy
+#~ msgid "bad PC range for debug info for local `%s'"
+#~ msgstr "Urutonde kugirango Kosora amakosa Ibisobanuro kugirango"
+
+#, fuzzy
+#~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'"
+#~ msgstr "Indango ni in Na"
+
+#, fuzzy
+#~ msgid "field `%s' not found"
+#~ msgstr "Umwanya OYA Byabonetse"
+
+#, fuzzy
+#~ msgid "ret instruction not implemented"
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "method '%s' not found in class"
+#~ msgstr "Uburyo OYA Byabonetse in ishuri"
+
+#, fuzzy
+#~ msgid "failed to find class '%s'"
+#~ msgstr "Byanze Kuri Gushaka ishuri"
+
+#, fuzzy
+#~ msgid "class '%s' has no method named '%s' matching signature '%s'"
+#~ msgstr "ishuri Oya Uburyo Isinya"
+
+#, fuzzy
+#~ msgid "invokestatic on non static method"
+#~ msgstr "ku Uburyo"
+
+#, fuzzy
+#~ msgid "invokestatic on abstract method"
+#~ msgstr "ku Incamake Uburyo"
+
+#, fuzzy
+#~ msgid "invoke[non-static] on static method"
+#~ msgstr "ku Uburyo"
+
+#, fuzzy
+#~ msgid "missing field '%s' in '%s'"
+#~ msgstr "Ibuze Umwanya in"
+
+#, fuzzy
+#~ msgid "mismatching signature for field '%s' in '%s'"
+#~ msgstr "Isinya kugirango Umwanya in"
+
+#, fuzzy
+#~ msgid "assignment to final field `%s' not in field's class"
+#~ msgstr "Igenera Kuri Umwanya OYA in ishuri"
+
+#, fuzzy
+#~ msgid "assignment to final static field `%s' not in class initializer"
+#~ msgstr "Igenera Kuri Umwanya OYA in ishuri"
+
+#, fuzzy
+#~ msgid "assignment to final field `%s' not in constructor"
+#~ msgstr "Igenera Kuri Umwanya OYA in"
+
+#, fuzzy
+#~ msgid "can't expand %s"
+#~ msgstr "Kwagura"
+
+#, fuzzy
+#~ msgid "invalid PC in line number table"
+#~ msgstr "Sibyo in Umurongo Umubare imbonerahamwe#"
+
+#, fuzzy
+#~ msgid "unreachable bytecode from %d to before %d"
+#~ msgstr "Bivuye Kuri Mbere"
+
+#, fuzzy
+#~ msgid "unreachable bytecode from %d to the end of the method"
+#~ msgstr "Bivuye Kuri i Impera Bya i Uburyo"
+
+#, fuzzy
+#~ msgid "source file for class `%s' is newer than its matching class file.  Source file `%s' used instead"
+#~ msgstr "Inkomoko IDOSIYE kugirango ishuri ni ishuri IDOSIYE IDOSIYE"
+
+#, fuzzy
+#~ msgid "bad string constant"
+#~ msgstr "Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "bad value constant type %d, index %d"
+#~ msgstr "Agaciro Ubwoko Umubarendanga"
+
+#, fuzzy
+#~ msgid "can't close %s"
+#~ msgstr "Gufunga"
+
+#, fuzzy
+#~ msgid "cannot find file for class %s"
+#~ msgstr "Gushaka IDOSIYE kugirango ishuri"
+
+#, fuzzy
+#~ msgid "not a valid Java .class file"
+#~ msgstr "OYA a Byemewe ishuri IDOSIYE"
+
+#, fuzzy
+#~ msgid "error while parsing constant pool"
+#~ msgstr "Ikosa Itsinda"
+
+#, fuzzy
+#~ msgid "error in constant pool entry #%d\n"
+#~ msgstr "Ikosa in Itsinda Icyinjijwe"
+
+#, fuzzy
+#~ msgid "reading class %s for the second time from %s"
+#~ msgstr "ishuri kugirango i ISEGONDA Igihe Bivuye"
+
+#, fuzzy
+#~ msgid "error while parsing fields"
+#~ msgstr "Ikosa Imyanya"
+
+#, fuzzy
+#~ msgid "error while parsing methods"
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "error while parsing final attributes"
+#~ msgstr "Ikosa Ibiranga"
+
+#, fuzzy
+#~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute.  This generally means that your classpath is incorrectly set.  Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath"
+#~ msgstr "i java Byabonetse in i Bidasanzwe Zeru Uburebure Ikiranga Inzirashuri ni Gushyiraho Ibisobanuro Kuri i Ibisobanuro Ipaji Kuri Gushyiraho i Inzirashuri"
+
+#, fuzzy
+#~ msgid "missing Code attribute"
+#~ msgstr "Ibuze Ikiranga"
+
+#, fuzzy
+#~ msgid "source file seen twice on command line and will be compiled only once"
+#~ msgstr "Inkomoko IDOSIYE ku Komandi: Umurongo Na Rimwe"
+
+#, fuzzy
+#~ msgid "no input file specified"
+#~ msgstr "Oya Iyinjiza IDOSIYE"
+
+#, fuzzy
+#~ msgid "can't close input file %s"
+#~ msgstr "Gufunga Iyinjiza IDOSIYE"
+
+#, fuzzy
+#~ msgid "bad zip/jar file %s"
+#~ msgstr "Zipu IDOSIYE"
+
+#, fuzzy
+#~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s"
+#~ msgstr "By'imbere Ikosa in ITEGEKONGENGA OYA"
+
+#, fuzzy
+#~ msgid "field initializer type mismatch"
+#~ msgstr "Umwanya Ubwoko"
+
+#, fuzzy
+#~ msgid "can't create directory %s"
+#~ msgstr "Kurema bushyinguro"
+
+#, fuzzy
+#~ msgid "can't create %s"
+#~ msgstr "Kurema"
+
+#, fuzzy
+#~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed"
+#~ msgstr "Bya Gucapa Urutonde Na"
+
+#, fuzzy
+#~ msgid "can't open output file `%s'"
+#~ msgstr "Gufungura Ibisohoka IDOSIYE"
+
+#, fuzzy
+#~ msgid "file not found `%s'"
+#~ msgstr "Dosiye ntibonetse"
+
+#, fuzzy
+#~ msgid "`%s' is not a valid class name"
+#~ msgstr "`%s'ni OYA a Byemewe ishuri Izina:"
+
+#, fuzzy
+#~ msgid "--resource requires -o"
+#~ msgstr "--o"
+
+#, fuzzy
+#~ msgid "warning: already-compiled .class files ignored with -C"
+#~ msgstr "Iburira ishuri Idosiye Na: C"
+
+#, fuzzy
+#~ msgid "cannot specify both -C and -o"
+#~ msgstr "Byombi C Na o"
+
+#, fuzzy
+#~ msgid "cannot create temporary file"
+#~ msgstr "Kurema By'igihe gito IDOSIYE"
+
+#, fuzzy
+#~ msgid "using both @FILE with multiple files not implemented"
+#~ msgstr "ikoresha Byombi Na: Igikubo Idosiye OYA"
+
+#, fuzzy
+#~ msgid "cannot specify `main' class when not linking"
+#~ msgstr "ishuri Ryari: OYA Impuza"
+
+#, fuzzy
+#~ msgid "can't do dependency tracking with input from stdin"
+#~ msgstr "Na: Iyinjiza Bivuye"
+
+#, fuzzy
+#~ msgid "couldn't determine target name for dependency tracking"
+#~ msgstr "Intego Izina: kugirango"
+
+#, fuzzy
+#~ msgid ""
+#~ "unknown encoding: `%s'\n"
+#~ "This might mean that your locale's encoding is not supported\n"
+#~ "by your system's iconv(3) implementation.  If you aren't trying\n"
+#~ "to use a particular encoding for your input file, try the\n"
+#~ "`--encoding=UTF-8' option"
+#~ msgstr "Kitazwi Imisobekere: Impuzandengo- Imisobekere: ni OYA 3. Gukoresha a Imisobekere: kugirango Iyinjiza IDOSIYE Imisobekere: Ihitamo"
+
+#, fuzzy
+#~ msgid "internal error - invalid Utf8 name"
+#~ msgstr "By'imbere Ikosa Sibyo Izina:"
+
+#, fuzzy
+#~ msgid "Missing term"
+#~ msgstr "Ijambo"
+
+# starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text
+#, fuzzy
+#~ msgid "';' expected"
+#~ msgstr "';'ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Missing name"
+#~ msgstr "Izina:"
+
+# starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text
+#, fuzzy
+#~ msgid "'*' expected"
+#~ msgstr "'*'ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Class or interface declaration expected"
+#~ msgstr "Cyangwa Ikitezwe:"
+
+#, fuzzy
+#~ msgid "Missing class name"
+#~ msgstr "ishuri Izina:"
+
+#~ msgid "'{' expected"
+#~ msgstr "'{' ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Missing super class name"
+#~ msgstr "hejuru ishuri Izina:"
+
+#, fuzzy
+#~ msgid "Missing interface name"
+#~ msgstr "Izina:"
+
+#, fuzzy
+#~ msgid "Missing variable initializer"
+#~ msgstr "IMPINDURAGACIRO"
+
+# starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text
+#, fuzzy
+#~ msgid "']' expected"
+#~ msgstr "']'ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Invalid method declaration, method name required"
+#~ msgstr "Uburyo Uburyo Izina: Bya ngombwa"
+
+#~ msgid "Identifier expected"
+#~ msgstr "Ikiranga ntigitunguranye"
+
+#, fuzzy
+#~ msgid "Invalid method declaration, return type required"
+#~ msgstr "Uburyo Garuka Ubwoko Bya ngombwa"
+
+#~ msgid "')' expected"
+#~ msgstr "')' ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Missing formal parameter term"
+#~ msgstr "Ijambo"
+
+#, fuzzy
+#~ msgid "Missing identifier"
+#~ msgstr "Ikiranga"
+
+#, fuzzy
+#~ msgid "Missing class type term"
+#~ msgstr "ishuri Ubwoko Ijambo"
+
+#, fuzzy
+#~ msgid "Invalid interface type"
+#~ msgstr "Ubwoko"
+
+# starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text
+#, fuzzy
+#~ msgid "':' expected"
+#~ msgstr "':'ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Invalid expression statement"
+#~ msgstr "imvugo Inyandiko"
+
+#~ msgid "'(' expected"
+#~ msgstr "'(' ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Missing term or ')'"
+#~ msgstr "Ijambo Cyangwa"
+
+#, fuzzy
+#~ msgid "Missing or invalid constant expression"
+#~ msgstr "Cyangwa Sibyo imvugo"
+
+#, fuzzy
+#~ msgid "Missing term and ')' expected"
+#~ msgstr "Ijambo Na Ikitezwe:"
+
+#, fuzzy
+#~ msgid "Invalid control expression"
+#~ msgstr "Igenzura imvugo"
+
+#, fuzzy
+#~ msgid "Invalid update expression"
+#~ msgstr "Kuvugurura imvugo"
+
+#, fuzzy
+#~ msgid "Invalid init statement"
+#~ msgstr "Inyandiko"
+
+#, fuzzy
+#~ msgid "Missing term or ')' expected"
+#~ msgstr "Ijambo Cyangwa Ikitezwe:"
+
+#, fuzzy
+#~ msgid "'class' or 'this' expected"
+#~ msgstr "'Cyangwa Ikitezwe:"
+
+#, fuzzy
+#~ msgid "'class' expected"
+#~ msgstr "'Ikitezwe:"
+
+#, fuzzy
+#~ msgid "')' or term expected"
+#~ msgstr "')'Cyangwa Ijambo Ikitezwe:"
+
+# starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text
+#, fuzzy
+#~ msgid "'[' expected"
+#~ msgstr "'['ntigatunguranye"
+
+#, fuzzy
+#~ msgid "Field expected"
+#~ msgstr "Ikitezwe:"
+
+#, fuzzy
+#~ msgid "Missing term and ']' expected"
+#~ msgstr "Ijambo Na Ikitezwe:"
+
+#, fuzzy
+#~ msgid "']' expected, invalid type expression"
+#~ msgstr "']'Ikitezwe: Sibyo Ubwoko imvugo"
+
+#, fuzzy
+#~ msgid "Invalid type expression"
+#~ msgstr "Ubwoko imvugo"
+
+#, fuzzy
+#~ msgid "Invalid reference type"
+#~ msgstr "Indango Ubwoko"
+
+#, fuzzy
+#~ msgid "Constructor invocation must be first thing in a constructor"
+#~ msgstr "Itangira in a"
+
+#, fuzzy
+#~ msgid ": `%s' JDK1.1(TM) feature"
+#~ msgstr ":`%s'1."
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#, fuzzy
+#~ msgid ""
+#~ "%s.\n"
+#~ "%s"
+#~ msgstr "%s.%s"
+
+#, fuzzy
+#~ msgid "malformed .zip archive in CLASSPATH: %s"
+#~ msgstr "Zipu in"
+
+#, fuzzy
+#~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives"
+#~ msgstr "Gushaka Mburabuzi i IMPINDURAGACIRO Na i Kuri i Ubushyinguro"
+
+#, fuzzy
+#~ msgid "missing static field `%s'"
+#~ msgstr "Ibuze Umwanya"
+
+#, fuzzy
+#~ msgid "not a static field `%s'"
+#~ msgstr "OYA a Umwanya"
+
+#, fuzzy
+#~ msgid "No case for %s"
+#~ msgstr "kugirango"
+
+#, fuzzy
+#~ msgid "unregistered operator %s"
+#~ msgstr "Mukoresha"
+
+#, fuzzy
+#~ msgid "junk at end of signature string"
+#~ msgstr "Umwanda ku Impera Bya Isinya Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "bad pc in exception_table"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid "exception handler inside code that is being protected"
+#~ msgstr "Irengayobora(-) Mo Imbere ITEGEKONGENGA ni Birinzwe"
+
+#, fuzzy
+#~ msgid "unknown opcode %d@pc=%d during verification"
+#~ msgstr "Kitazwi"
+
+#, fuzzy
+#~ msgid "verification error at PC=%d"
+#~ msgstr "Ikosa ku"
+
+#, fuzzy
+#~ msgid "Disable automatic array bounds checking"
+#~ msgstr "Byikoresha Imbonerahamwe"
+
+#, fuzzy
+#~ msgid "Disable assignability checks for stores into object arrays"
+#~ msgstr "kugirango Igikoresho"
+
+#, fuzzy
+#~ msgid "Assume native functions are implemented using JNI"
+#~ msgstr "Imimaro ikoresha"
+
+#, fuzzy
+#~ msgid "Replace system path"
+#~ msgstr "Sisitemu Inzira"
+
+#, fuzzy
+#~ msgid "Set class path"
+#~ msgstr "ishuri Inzira"
+
+#, fuzzy
+#~ msgid "Set class path (deprecated: use --classpath instead)"
+#~ msgstr "ishuri Inzira Bitemewe. Gukoresha Inzirashuri"
+
+#, fuzzy
+#~ msgid "Choose class whose main method should be used"
+#~ msgstr "ishuri bya Uburyo"
+
+#, fuzzy
+#~ msgid "Choose input encoding (default comes from locale)"
+#~ msgstr "Iyinjiza Imisobekere: Mburabuzi Bivuye Umwanya"
+
+#, fuzzy
+#~ msgid "Add directory to class path"
+#~ msgstr "bushyinguro Kuri ishuri Inzira"
+
+#, fuzzy
+#~ msgid "Directory where class files should be written"
+#~ msgstr "ishuri Idosiye"
+
+#, fuzzy
+#~ msgid "Warn if modifiers are specified when not necessary"
+#~ msgstr "NIBA Ryari: OYA"
+
+#, fuzzy
+#~ msgid "Warn if deprecated empty statements are found"
+#~ msgstr "NIBA Bitemewe. ubusa Byabonetse"
+
+#, fuzzy
+#~ msgid "Warn if .class files are out of date"
+#~ msgstr "NIBA ishuri Idosiye Inyuma Bya Itariki"
+
+#, fuzzy
+#~ msgid "Always check for non gcj generated classes archives"
+#~ msgstr "Kugenzura... kugirango Inzego Ubushyinguro"
+
+#, fuzzy
+#~ msgid "Never optimize static class initialization code"
+#~ msgstr "Kugeza ku ndunduro ishuri ITEGEKONGENGA"
+
+#, fuzzy
+#~ msgid "Use offset tables for virtual method calls"
+#~ msgstr "Nta- boneza Imbonerahamwe kugirango Kitaboneka Uburyo Amahamagara:"
+
+#, fuzzy
+#~ msgid "object does not conform to the `%s' protocol"
+#~ msgstr "Igikoresho OYA Kuri i Porotokole"
+
+#, fuzzy
+#~ msgid "class `%s' does not implement the `%s' protocol"
+#~ msgstr "ishuri OYA i Porotokole"
+
+#, fuzzy
+#~ msgid "unexpected type for `id' (%s)"
+#~ msgstr "Ubwoko kugirango"
+
+#, fuzzy
+#~ msgid "undefined type `id', please import <objc/objc.h>"
+#~ msgstr "kidasobanuye Ubwoko Kuzana h"
+
+#, fuzzy
+#~ msgid "protocol `%s' has circular dependency"
+#~ msgstr "Porotokole Cy'uruziga"
+
+#, fuzzy
+#~ msgid "cannot find protocol declaration for `%s'"
+#~ msgstr "Gushaka Porotokole kugirango"
+
+#, fuzzy
+#~ msgid "cannot find interface declaration for `%s'"
+#~ msgstr "Gushaka kugirango"
+
+#, fuzzy
+#~ msgid "cannot find reference tag for class `%s'"
+#~ msgstr "Gushaka Indango Itagi: kugirango ishuri"
+
+#, fuzzy
+#~ msgid "creating selector for non existant method %s"
+#~ msgstr "kugirango Uburyo"
+
+#, fuzzy
+#~ msgid "cannot find class `%s'"
+#~ msgstr "Gushaka ishuri"
+
+#, fuzzy
+#~ msgid "class `%s' already exists"
+#~ msgstr "ishuri"
+
+#, fuzzy
+#~ msgid "cannot find interface declaration for `%s', superclass of `%s'"
+#~ msgstr "Gushaka kugirango Bya"
+
+#, fuzzy
+#~ msgid "circular inheritance in interface declaration for `%s'"
+#~ msgstr "Cy'uruziga in kugirango"
+
+#, fuzzy
+#~ msgid "inconsistent instance variable specification"
+#~ msgstr "Urugero IMPINDURAGACIRO"
+
+#, fuzzy
+#~ msgid "can not use an object as parameter to a method\n"
+#~ msgstr "OYA Gukoresha Igikoresho Nka Kuri a"
+
+#, fuzzy
+#~ msgid "multiple declarations for method `%s'"
+#~ msgstr "Igikubo kugirango Uburyo"
+
+#, fuzzy
+#~ msgid "invalid receiver type `%s'"
+#~ msgstr "Sibyo Mwakirizi Ubwoko"
+
+#, fuzzy
+#~ msgid "`%s' does not respond to `%s'"
+#~ msgstr "`%s'OYA Kuri"
+
+#, fuzzy
+#~ msgid "no super class declared in interface for `%s'"
+#~ msgstr "Oya hejuru ishuri in kugirango"
+
+#, fuzzy
+#~ msgid "cannot find class (factory) method"
+#~ msgstr "Gushaka ishuri Uburyo"
+
+#, fuzzy
+#~ msgid "return type for `%s' defaults to id"
+#~ msgstr "Garuka Ubwoko kugirango Kuri ID"
+
+#, fuzzy
+#~ msgid "method `%s' not implemented by protocol"
+#~ msgstr "Uburyo OYA ku Porotokole"
+
+#, fuzzy
+#~ msgid "return type defaults to id"
+#~ msgstr "Garuka Ubwoko Kuri ID"
+
+#, fuzzy
+#~ msgid "cannot find method"
+#~ msgstr "Gushaka Uburyo"
+
+#, fuzzy
+#~ msgid "instance variable `%s' accessed in class method"
+#~ msgstr "Urugero IMPINDURAGACIRO birabonetse in ishuri Uburyo"
+
+#, fuzzy
+#~ msgid "duplicate definition of class method `%s'"
+#~ msgstr "Gusubiramo Insobanuro Bya ishuri Uburyo"
+
+#, fuzzy
+#~ msgid "duplicate declaration of class method `%s'"
+#~ msgstr "Gusubiramo Bya ishuri Uburyo"
+
+#, fuzzy
+#~ msgid "duplicate definition of instance method `%s'"
+#~ msgstr "Gusubiramo Insobanuro Bya Urugero Uburyo"
+
+#, fuzzy
+#~ msgid "duplicate declaration of instance method `%s'"
+#~ msgstr "Gusubiramo Bya Urugero Uburyo"
+
+#, fuzzy
+#~ msgid "duplicate interface declaration for category `%s(%s)'"
+#~ msgstr "Gusubiramo kugirango Icyiciro"
+
+#, fuzzy
+#~ msgid "instance variable `%s' is declared private"
+#~ msgstr "Urugero IMPINDURAGACIRO ni By'umwihariko"
+
+#, fuzzy
+#~ msgid "instance variable `%s' is declared %s"
+#~ msgstr "Urugero IMPINDURAGACIRO ni"
+
+#, fuzzy
+#~ msgid "static access to object of type `id'"
+#~ msgstr "Kuri Igikoresho Bya Ubwoko"
+
+#, fuzzy
+#~ msgid "incomplete implementation of class `%s'"
+#~ msgstr "Bya ishuri"
+
+#, fuzzy
+#~ msgid "incomplete implementation of category `%s'"
+#~ msgstr "Bya Icyiciro"
+
+#, fuzzy
+#~ msgid "method definition for `%c%s' not found"
+#~ msgstr "Uburyo Insobanuro kugirango OYA Byabonetse"
+
+#, fuzzy
+#~ msgid "%s `%s' does not fully implement the `%s' protocol"
+#~ msgstr "%s`%s'OYA i Porotokole"
+
+#, fuzzy
+#~ msgid "`@end' missing in implementation context"
+#~ msgstr "`@Ibuze in Imvugiro"
+
+#, fuzzy
+#~ msgid "reimplementation of class `%s'"
+#~ msgstr "Bya ishuri"
+
+#, fuzzy
+#~ msgid "conflicting super class name `%s'"
+#~ msgstr "hejuru ishuri Izina:"
+
+#, fuzzy
+#~ msgid "duplicate interface declaration for class `%s'"
+#~ msgstr "Gusubiramo kugirango ishuri"
+
+#, fuzzy
+#~ msgid "duplicate declaration for protocol `%s'"
+#~ msgstr "Gusubiramo kugirango Porotokole"
+
+#, fuzzy
+#~ msgid "[super ...] must appear in a method context"
+#~ msgstr "[hejuru Kugaragara in a Uburyo Imvugiro"
+
+#, fuzzy
+#~ msgid "potential selector conflict for method `%s'"
+#~ msgstr "kugirango Uburyo"
+
+#, fuzzy
+#~ msgid "`@end' must appear in an implementation context"
+#~ msgstr "`@Kugaragara in Imvugiro"
+
+#, fuzzy
+#~ msgid "method definition not in class context"
+#~ msgstr "Uburyo Insobanuro OYA in ishuri Imvugiro"
+
+#, fuzzy
+#~ msgid "Dump decls to a .decl file"
+#~ msgstr "Kuri a IDOSIYE"
+
+#, fuzzy
+#~ msgid "Generate code for GNU runtime environment"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Generate code for NeXT runtime environment"
+#~ msgstr "ITEGEKONGENGA kugirango"
+
+#, fuzzy
+#~ msgid "Warn if a selector has multiple methods"
+#~ msgstr "NIBA a Igikubo"
+
+#, fuzzy
+#~ msgid "Do not warn if inherited methods are unimplemented"
+#~ msgstr "OYA NIBA"
+
+#, fuzzy
+#~ msgid "Generate C header of platform specific features"
+#~ msgstr "C Umutwempangano Bya Ibiranga"
+
+#, fuzzy
+#~ msgid "Specify the name of the class for constant strings"
+#~ msgstr "i Izina: Bya i ishuri kugirango Ikurikiranyanyuguti"
+
+#, fuzzy
+#~ msgid "(debug) trace parsing process"
+#~ msgstr "(Kosora amakosa"
+
+#, fuzzy
+#~ msgid "(debug) trace lexical analysis"
+#~ msgstr "(Kosora amakosa"
+
+#, fuzzy
+#~ msgid "-current_version only allowed with -dynamiclib"
+#~ msgstr "-Na:"
+
+#, fuzzy
+#~ msgid "-install_name only allowed with -dynamiclib"
+#~ msgstr "-Na:"
+
+#, fuzzy
+#~ msgid "-bundle not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-bundle_loader not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-client_name not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-force_flat_namespace not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-keep_private_externs not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "-private_bundle not allowed with -dynamiclib"
+#~ msgstr "-OYA Na:"
+
+#, fuzzy
+#~ msgid "GNU C does not support -C without using -E"
+#~ msgstr "C OYA Gushigikira C ikoresha E"
+
+#, fuzzy
+#~ msgid "GNU C does not support -CC without using -E"
+#~ msgstr "C OYA Gushigikira ikoresha E"
+
+#, fuzzy
+#~ msgid "`-p' not supported; use `-pg' and gprof(1)"
+#~ msgstr "`-OYA Gukoresha Na 1."
+
+#, fuzzy
+#~ msgid "may not use both -m32 and -m64"
+#~ msgstr "Gicurasi OYA Gukoresha Byombi Na"
+
+#, fuzzy
+#~ msgid "The -shared option is not currently supported for VAX ELF."
+#~ msgstr "Ihitamo ni OYA kugirango"
+
+#, fuzzy
+#~ msgid "profiling not supported with -mg\n"
+#~ msgstr "OYA Na:"
+
+#, fuzzy
+#~ msgid "-pipe is not supported"
+#~ msgstr "-ni OYA"
+
+#, fuzzy
+#~ msgid "may not use both -EB and -EL"
+#~ msgstr "Gicurasi OYA Gukoresha Byombi Na"
+
+#, fuzzy
+#~ msgid "-pg and -fomit-frame-pointer are incompatible"
+#~ msgstr "-Na Ikadiri Mweretsi"
+
+#, fuzzy
+#~ msgid "mno-cygwin and mno-win32 are not compatible"
+#~ msgstr "Na OYA"
+
+#, fuzzy
+#~ msgid "shared and mdll are not compatible"
+#~ msgstr "Na OYA"
+
+#, fuzzy
+#~ msgid "-E required when input is from standard input"
+#~ msgstr "-E Bya ngombwa Ryari: Iyinjiza ni Bivuye Bisanzwe Iyinjiza"
+
+#, fuzzy
+#~ msgid "compilation of header file requested"
+#~ msgstr "Bya Umutwempangano IDOSIYE"
+
+#, fuzzy
+#~ msgid " conflicting code gen style switches are used"
+#~ msgstr "ITEGEKONGENGA IMISUSIRE"
+
+#, fuzzy
+#~ msgid "-pg or -p and -fomit-frame-pointer are incompatible"
+#~ msgstr "-Cyangwa P Na Ikadiri Mweretsi"
+
+#, fuzzy
+#~ msgid "choose either big or little endian, not both"
+#~ msgstr "Guhitamo Cyangwa OYA Byombi"
+
+#, fuzzy
+#~ msgid "choose either m340 or m210 not both"
+#~ msgstr "Guhitamo Cyangwa OYA Byombi"
+
+#, fuzzy
+#~ msgid "the m210 does not have little endian support"
+#~ msgstr "i OYA Gushigikira"
+
+#, fuzzy
+#~ msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#~ msgstr "-Na Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "-msoft-float and -mhard_float may not be used together"
+#~ msgstr "-Kureremba Na Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "-mbig-endian and -mlittle-endian may not be used together"
+#~ msgstr "-Na Gicurasi OYA"
+
+#, fuzzy
+#~ msgid "-mhard-float not supported"
+#~ msgstr "-Kureremba OYA"
+
+#, fuzzy
+#~ msgid "-msingle-float and -msoft-float can not both be specified"
+#~ msgstr "-Kureremba Na Kureremba OYA Byombi"
+
+#, fuzzy
+#~ msgid "-c or -S required for Ada"
+#~ msgstr "-C Cyangwa Bya ngombwa kugirango"
+
+#, fuzzy
+#~ msgid "-fjni and -femit-class-files are incompatible"
+#~ msgstr "-Na ishuri Idosiye"
+
+#, fuzzy
+#~ msgid "-fjni and -femit-class-file are incompatible"
+#~ msgstr "-Na ishuri IDOSIYE"
+
+#, fuzzy
+#~ msgid "-femit-class-file should used along with -fsyntax-only"
+#~ msgstr "-ishuri IDOSIYE Na:"
+
+#, fuzzy
+#~ msgid "-static not valid with -mcoff"
+#~ msgstr "-OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-shared not valid with -mcoff"
+#~ msgstr "-OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-symbolic not valid with -mcoff"
+#~ msgstr "-OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-fpic is not valid with -mcoff"
+#~ msgstr "-ni OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-fPIC is not valid with -mcoff"
+#~ msgstr "-ni OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-fpic not valid with -mcoff"
+#~ msgstr "-OYA Byemewe Na:"
+
+#, fuzzy
+#~ msgid "-fPIC not valid with -mcoff"
+#~ msgstr "-OYA Byemewe Na:"
diff --git a/libcpp/po/sv.po b/libcpp/po/sv.po
new file mode 100644 (file)
index 0000000..79f43f6
--- /dev/null
@@ -0,0 +1,913 @@
+# Swedish messages for cpplib.
+# Copyright © 2000, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Dennis Björklund <db@zigo.dhs.org>, 2000, 2001, 2002.
+# Göran Uddeborg <goeran@uddeborg.se>, 2005, 2006, 2007.
+#
+# Remember: GCC team does not want RCS keywords in the header!
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.2.1\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-09-01 12:51+0200\n"
+"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "konveretering från %s till %s stöds inte av iconv"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "ingen iconv-implementation, kan inte konvertera från %s till %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "tecken 0x%lx finns inte i källkodens grundteckenuppsättning\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "konverterar till teckenuppsättning för körning"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "tecken 0x%lx är inte en byte i teckenupsättning för körning"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Tecknet %x är kanske inte NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "universella teckennamn är endast giltiga i C++ och C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "betydelsen av \"\\%c\" är annorlunda i traditionell C"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "I _cpp_valid_ucn men inte en UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "ofullständigt unversellt teckennamn %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s är inte ett giltigt universellt tecken"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "\"$\" i identifierare eller tal"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "universellt tecken %.*s är inte giltigt i en identifierare"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "universellt tecken %.*s är inte giltigt vid början av en identifierare"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "vid konvertering av UCN källteckenuppsättning"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "vid konverting av UCN till teckenuppsättning för körning"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "betydelsen av \"\\x\" är annorlunda i traditionell C"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x använt utan några följande hexadecimala siffror"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "hexadecimal specialsekvens utanför intervallet"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "oktal specialsekvens utanför intervallet"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "betydelsen av \"\\a\" är annorlunda i traditionell C"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "icke-ISO-standardspecialsekvens, \"\\%c\""
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "okänd escape-sekvens \"\\%c\""
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "okänd escape-sekvens: \"\\%s\""
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "vid konvertering av specialsekvens till teckenuppsättning för körning"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "teckenkonstant för lång för sin typ"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "flerteckens teckenkonstant"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "tom teckenkonstant"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "misslyckades att konvertera %s till %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "extra symboler vid slutet av direktivet #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s är en GCC-utvidgning"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "föreslår att inte använda #elif i traditionell C"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "traditionell C ignorerar #%s dör tecknet # är indenterat"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "föreslår att dölja #%s från traditionell C med en indenterad #"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "att bädda in ett direktiv i makroargument är inte portabelt"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "stil på raddirektiv är en GCC-utvidgning"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "ogiltigt preprocessordirektiv #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" kan inte användas som ett makronamn"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" kan inte användas som ett makronamn eftersom det är en operator i C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "inget makronamn angivet i direktivet #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "makronamn måste vara identifierare"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "avdefinierar \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "saknar avslutande tecken >"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s förväntar \"FILNAMN\" eller <FILNAMN>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "tomt filnamn i #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include nästlad för djupt"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next i primär källkodsfil"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "ogiltigt flagga \"%s\" i line-direktiv"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" efter #line är inte ett positivt heltal"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "radnummer utanför möjligt intervall"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" är inte ett giltigt filnamn"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" efter # är inte ett positivt heltal"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "ogiltigt #%s-direktiv"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "registrerar pragman i namnrymden \"%s\" med namnexpansion som inte passar ihop"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "registrerar pragma \"%s\" med namnexpansion och utan namnrymd"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "registrerar \"%s\" både som ett pragma och ett pragma namespace"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s är redan registrerat"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s är redan registrerat"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "registrerar pragma med NULL-hanterare"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once i huvudfil"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "ogiltigt GCC-direktiv #pragma poison"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "förgiftar existerande makro \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header ignorerat utanför huvudfil"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "kan inte hitta källfil %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "aktuell fil är äldre än %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma tar en strängkonstant inom parenteser"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else utan #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else efter #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "villkorssatsen började här"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif utan #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif efter #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif utan #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "saknas '(' efter predikat"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "saknas ')' för att avsluta svaret"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "predikatets svar är tomt"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "försäkran utan predikat"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "predikat måste vara en identifierare"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" omförsäkrat"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "oavslutad #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "ej avslutad kommentar"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "varning: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "internt fel: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "fel: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "standard ut"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "för många decimalpunker i tal"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "imaginära konstanter är en GCC-utvidgning"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "ogiltigt siffra \"%c\" i oktal konstant"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "ogiltigt siffra \"%c\" i oktal konstant"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "ogiltigt suffix \"%.*s\" på flyttalskonstant"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "användning av hexadecimal flyttalskonstant enligt C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "exponenten har inga siffror"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "hexadecimala flyttalskonstanter måste ha en exponent"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "ogiltigt suffix \"%.*s\" på flyttalskonstant"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "traditionell C tillåter inte suffixet \"%.*s\""
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "ogiltigt suffix \"%.*s\" på hexadecimal flyttalskonstant"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "imaginära konstanter är en GCC-utvidgning"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "ogiltig ändelse \"%.*s\" på heltalskonstant"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "användning av long long heltalskonstant enligt C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "imaginära konstanter är en GCC-utvidgning"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "imaginära konstanter är en GCC-utvidgning"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "heltalskonstant är för stor för sin typ"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "heltalskonstant är så stor att den är teckenlös"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "saknar ')' efter \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "operatorn \"defined\" måste ha en identiferare"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" är en alternativ symbol för \"%s\" i C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "denna användning av \"defined\" är kanske inte portabel"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "flyttalskonstant i preprocessoruttryck"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "imaginärt tal i preprocessoruttryck"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" är inte definierad"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "saknad binär operator före symbolen \"%s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "symbolen \"%s\" är inte ett giltigt preprocessoruttryck"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "saknat uttryck mellan \"(\" och \")\""
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if utan uttryck"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "operatorn \"%s\" har ingen högra operand"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "operatorn \"%s\" har ingen vänstra operand"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr "\":\" utan föregående \"?\""
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "obalanserad stack i #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "omöjlig operator \"%u\""
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "saknad \")\" i uttryck"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "\"?\" utan följande \":\""
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "heltalsspill i preprocessoruttryck"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "saknad \"(\" i uttryck"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "vänsteroperanden till \"%s\" byter tecken vid befodran"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "högeroperanden till \"%s\" byter tecken vid befodran"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "traditionell C hanterar inte operatorn unärt plus"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "kommaoperator i operand till #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "division med noll i #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "NOLL-katalog i find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "en eller flera PCH-filer hittades, men de var inte korrekta"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "använd -Winvalid-pch för mer information"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s är en blockenhet"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s är för stor"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s är kortare än förväntat"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "ingen huvudfilssökväg att leta efter %s i"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Multipla inkluderingsvakter kan vara användbart för:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t måste vare en teckenlös typ"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "preprocessoraretmetik har en högsta precision på %lu bitar; målet kräver %lu bitar"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP-aritmetik måste vara åtminstone så precis som målets int"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "målets char är mindre än 8 bitar bred"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "målets wchar_t är smalare än målets char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "målets int är smalare än målets char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP:s halva heltal är smalare än CPP:s tecken"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP på denna värd kan inte hantera breda teckenkonstanter över %lu bitar, men målet kräver %lu bitar"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "bakåtstreck och nyrad skiljda av mellanrum"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "bakåtstreck-nyrad vid filslut"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "trigraph ??%c konverterad till %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "trigraph ??%c ingorerad, använd -trigraphs för att aktivera"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" i kommentar"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s i preprocessordirektiv"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "nolltecken ignorerat"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "\"%.*s\" är inte i NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "\"%.*s\" är inte i NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "försök att använda förgiftad \"%s\""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ kan endast dyka upp i expansionen av ett C99-makro med variabelt argumentantal"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "nolltecken bevarade i konstant"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "avslutande %c-tecken saknas"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++ kommentarer tillåts inte i ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(detta rapporteras bara en gång per infil)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "flerradskommentar"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "ostavbar symbol %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "I fil inkluderad från %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 från %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "makrot \"%s\" är inte använt"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "ogiltigt inbyggt makro \"%s\""
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "det gick inte att avgöra fils tidsstämpel"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "det gick inte att avgöra datum och tid"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "ogiltig strängkonstant, inorerar avslutande \"\\\""
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "att sätta ihop \"%s\" och \"%s\" ger inte en giltigt preprocessorsymbol"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 kräver att restargument används"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "makrot \"%s\" kräver %u argument, men endast %u anges"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "makro \"%s\" skickade %u argument, men det tar bara %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "oavslutad argumentlista vid anrop av makrot \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "funktionsliknande makrot \"%s\" måste användas med ett argument i traditionell C"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "dubblerad makroparameter \"%s\""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" får inte förekomma i en makroparameterlista"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "makroparametrar måste avdelas av komman"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "parameternamn saknas"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "anonyma variabla makron introducerades i C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C tillåter inte namngivna variabla makron"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "saknad \")\" i makroparameterlista"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "\"##\" kan inte förekomma vid någon av ändarna av makroexpansionen"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 kräver mellanrum efter makronamnet"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "mellanrum saknas efter makronamn"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "\"#\" följs inte av en makroparameter"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" omdefinierad"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "detta är platsen för den tidigare definitionen"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "makroargumentet \"%s\" skulle bli gjort till sträng i traditionell C"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "ogiltig hash-typ %d i cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "vid skrivning av förkompilerat huvud"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: inte använd för att \"%.*s\" inte är definierad"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: används inte för att \"%.*s\" definieras som \"%s\" inte \"%.*s\""
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: inte använd för att \"%s\" är definierad"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: inte använd för att \"%s\" är definierad"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "vid läsning av förkompilerat huvud"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "upptäckte rekursion vid under expansion av makrot \"%s\""
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "syntaxfel i makroparameterlista"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "inget nyradstecken vid slutet av filen"
diff --git a/libcpp/po/tr.po b/libcpp/po/tr.po
new file mode 100644 (file)
index 0000000..ab84b9f
--- /dev/null
@@ -0,0 +1,914 @@
+# Turkish translations for cpplib messages.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+#
+# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.2.0\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-05-23 01:17+0300\n"
+"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "%s ile %s arasında dönüşüm iconv tarafından desteklenmiyor"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "iconv bulunamadığından %s ile %s karakter kümeleri arasında dönüşüm yapılamıyor"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "0x%lx karakteri temel kaynak karakter kümesinde değil\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "çalışma karakter kümesine dönüştürülüyor"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "0x%lx karakteri icra karakter kümesindeki tek baytlık karakterlerden değil"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "%x karakteri NFKC olmayabilir"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "evrensel karakter isimleri sadece C++ ve C99 için geçerlidir"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "`\\%c'nin anlamı geleneksel C'de farklıdır"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "Bir UCN içinde değil, _cpp_valid_ucn içinde"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "evrensel karakter ismi %.*s tamamlanmamış"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s geçerli bir evrensel karakter değil"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "belirteç ya da sayı içinde '$'"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "evrensel karakter %.*s bir belirtecin başında geçerli değil"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "UCN'den kaynak karakter kümesine dönüşüm"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "UCN'den icra karakter kümesine dönüşüm"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "'\\x'in anlamı geleneksel C'de farklıdır"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x izleyen onaltılık rakamlar olmaksızın kullanılmış"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "onaltılık önceleme dizgesi kapsamdışı"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "sekizlik önceleme dizgesi kapsamdışı"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "`\\a'nın anlamı geleneksel C'de farklıdır"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "bilinmeyen önceleme dizgesi '\\%c'"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "bilinmeyen önceleme dizgesi '\\%s'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "önceleme diziliminden icra karakter kümesine dönüşüm"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "karakter sabiti, türü için çok uzun"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "çoklu-karakter karakter sabiti"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "karakter sabit boş"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "`%s' ile `%s' arasında dönüşüm başarısız"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "#%s yönergesinin sonunda fazladan dizgecikler"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s bir GCC uzantısıdır"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "geleneksel C'de #elif kullanılmıyor varsayılır"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "geleneksel C'de girintili # ile #%s yoksayılır"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "geleneksel C'den #%s in saklanması için bir girintili # kullanılmış farzedilir"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "bir yönergenin makro argümanlarla gömülmesi uyarlanabilir değil"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "satır yönergesinin tarzı bir GCC özelliğidir"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "önişlem yönergesi #%s geçersiz"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" makro ismi olarak kullanılamaz"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" C++'da bir işleç olduğundan makro ismi olarak kullanılamaz"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "#%s yönergesinde makro ismi verilmemiş"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "makro isimleri tanımlayıcılar olmalı"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "tanımsız yapılan \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "sonlandıran > karakteri eksik"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s \"DOSYA\" ya da <DOSYA> gerektirir"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "#%s ile belirtilen dosya boş"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include iç içeliği çok derin"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "birncil kaynak dosyasında #include_next"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "satır yönergesinde geçersiz \"%s\" seçeneği"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "#line'dan sonraki \"%s\" bir pozitif tamsayı değil"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "satır numarası kapsam dışı"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" geçerli bir dosya ismi değil"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "#'dan sonraki \"%s\" bir pozitif tamsayı değil"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "#%s yönergesi geçersiz"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "\"%s\" isim-alanındaki pragmalar uyumsuz isim yorumlaması ile kaydediliyor"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "pragma \"%s\" isim alansız olarak isim yorumlamasıyla kaydediliyor"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "\"%s\" hem pragma hem de pragma isim alanı olarak kaydediliyor"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s  zaten kayıtlı"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s  zaten kayıtlı"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "pragma NULL eylemci ile kaydediliyor"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "main dosyasında '#pragma once'"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "geçersiz #pragma GCC poison yönergesi"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "zehirlenen mevcut makro \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "başlık dosyasının dışındaki  '#pragma system_header'  yoksayıldı"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "%s kaynak dosyası bulunamıyor"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "mevcut dosya %s den daha eski"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma bir parantezli dizge sabiti alır"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#if siz #else"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else den sonra #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "koşul başlangıcı burası"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#if siz #elif "
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#else den sonra #elif"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#if siz #endif"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "dayanaktan sonra '(' eksik"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "yanıtı tamamlayacak ')' eksik"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "dayanakların cevabı boş"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "dayanaksız olumlama"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "dayanak bir tanımlayıcı olmalı"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" tekrar olumlanmış"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "sonlandırılmamış #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "sonlandırılmamış açıklama"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "uyarı: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "iç hata: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "hata: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdÇ"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "sayı içindeki ondalık nokta sayısı çok fazla"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "sanal sabitler bir GCC genişletmesidir"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "sekizlik sabit içindeki \"%c\" geçersiz"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "sekizlik sabit içindeki \"%c\" geçersiz"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "C99 onaltılık gerçel sayı sabit kullanımı"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "üs rakam içermiyor"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "onaltılık gerçel sabitler bir üs gerektirir"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "sanal sabitler bir GCC genişletmesidir"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "sanal sabitler bir GCC genişletmesidir"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "sanal sabitler bir GCC genişletmesidir"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "tamsayı sabit, türü için oldukça büyük"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "tamsayı sabit unsigned olarak oldukça büyük"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "\"defined\" dan sonra ')' eksik"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "\"defined\" işleci bir tanımlayıcı gerektirir"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(C++'da \"%s\" \"%s\" için bir alternatif dizgeciktir)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "önişlemci ifadesinde gerçel sayı taşması"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "önişlemci ifadesinde sanal sayı"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" tanımlı değil"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "\"%s\" dizgeciğinden önceki iki terimli işleç eksik"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "\"%s\" dizgeciği önişlemci ifadelerinde geçersizdir"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "'(' ve ')' arasında ifade eksik"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if ifadesiz"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "`%s' işlecinin sağ tarafı yok"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "`%s' işlecinin sol terimi yok"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr "':' den önce '?' yok"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "#if ifadesinde karşılıksız yığın"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "işleç '%u' imkansız"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "ifadede ')' eksik"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' dan sonra ':' yok"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "önişlemci ifadesinde tamsayı taşması"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "ifadede '(' eksik"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "\"%s\"in soldaki terimi yükseltgenirken işaret değiştiriyor"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "\"%s\"in sağdaki terimi yükseltgenirken işaret değiştiriyor"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "geleneksel C tekil artı işlecini dışlar"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "#if'in teriminde virgül"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "#if içinde sıfırla bölme"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "find_file içinde boş dizin"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s bir blok aygıtıdır"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s çok büyük"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s beklenenden daha kısa"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t bir usigned tür olmalı"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "önişlemci aritmetiği %lu bitlik maksimum genişliğe sahip; hedef için %lu bit gerekiyor"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP aritmetiği en azından bir hedef int kadar genişlikte olmalı "
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "hedef char 8bitlik genişlikten küçük"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "hedef wchar_t hedef char'dan daha dar"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "hedef int hedef char'dan daha dar"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP half-integer'ı CPP character'dan daha dar"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "Bu konaktaki CPP %lu bitten büyük karakter sabitleriyle çalışamaz, hedef ise %lu bit gerektiriyor"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "ters bölü ve satırsonu arasında boşluk var"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "dosyanın sonunda tersbölülü satırsonu"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "??%c üçlü harfi %c olarak dönüştürüldü"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "??%c üçlü harfi yoksayıldı, yoksayılmaması için -trigraphs kullanın"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "açıklama içinde \"/*\" bulundu"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "önişlem yönergesi içinde %s"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "null karakter(ler) yoksayıldı"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "`%.*s' NFKC'de yok"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "`%.*s' NFC'de yok"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "zehirli \"%s\" kullanılmaya çalışılıyor"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__  sadece argümanlarının sayısı değişebilen bir C99 makrosunun genişleme alanında görünebilir"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "null karakter(ler) sabit içinde saklanmış"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "sonlandıran %c karakteri eksik"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++ tarzı açıklamalara ISO C90'da izin verilmez"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(her girdi dosyasında sadece bir kere raporlanacaktır)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "çok satırlı açıklama"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "dizgecik %s okunabilir değil"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr ""
+"Sırayla bir altındaki dosyada içerilerek:\n"
+"\t\t%s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"\t\t%s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "\"%s\" makrosu kullanılmadı"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "geçersiz yerleşik makro \"%s\""
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "dosya tarih damgası saptanamadı"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "tarih ve saat saptanamadı"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "geçersiz dizge sabit, son '\\' yoksayılıyor"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "\"%s\" ve \"%s\" geçişi geçerli bir önişlem dizgeciği vermez"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C kalan argümanların kullanılmış olmasını gerektirir"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "makro \"%s\" %u argüman gerektiriyor ama sadece %u argüman verilmiş"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "makro \"%s\" için %u argüman verilmiş ama tam %u argüman alıyor"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "sonlandırılmamış argüman listesi çağıran makro \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "işlev benzeri makro \"%s\" geleneksel C'de argümanlarla kullanılmalıdır"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "yinelenmiş makro parametresi \"%s\""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" makro parametre listesinde görünmeyebilir"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "makro parametreleri virgüllerle ayrılmış olmalı"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "parametre ismi eksik"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "argümanlarının sayısı değişebilen anonim makrolar C99 da tanıtıldı"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C argümanlarının sayısı değişebilen isimli makrolara izin vermez"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "makro parametre listesinde ')' eksik"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' bir makronun her iki ucunda da görünemez"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 makro isminden sonra boşluk gerektirir"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "makro isminden sonra boşluk gerekir"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' işaretinden sonra bir makro parametresi yok"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "\"%s\" yeniden tanımlanmış"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "burası evvelki tanımın yapıldığı yer"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "makro argümanı \"%s\" geleneksel C'de dizgelenmiş olmalıydı"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "önderlemeli başlık yazılırken"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "önderlemeli başlık okunurken"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "makro \"%s\" genişletilirken iç içelik saptandı"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "makro parametre listesinde sözdizimi hatası"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "dosya sonunda satırsonu karakteri yok"
diff --git a/libcpp/po/uk.po b/libcpp/po/uk.po
new file mode 100644 (file)
index 0000000..1509ca2
--- /dev/null
@@ -0,0 +1,911 @@
+# Ukrainian translation of cpplib.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.2.1\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-08-17 11:23+0300\n"
+"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "перетворення з %s у %s не підтримується iconv"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "відсутня реалізація iconv, не вдається перетворити з %s на %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "символ 0x%lx відсутній у базовому первинному наборі символів\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "перетворення на виконуваний набір символів"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "символ 0x%lx не однобайтовий у виконуваному наборі символів"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Символ %x може не бути NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "універсальні назви символів допустимі лише у C++ та C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "сенс '\\%c' відрізняється від традиційної мови C"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "У _cpp_valid_ucn але не UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "неповна універсальна назва символу %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s не є допустимим універсальним символом"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "'$' у ідентифікаторі чи числі"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "універсальний символ %.*s не є допустимим у ідентифікаторі"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "універсальний символ %.*s не є допустимим на початку ідентифікатора"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "перетворення UCN на первинний набір символів"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "перетворення UCN на виконуваний набір символів"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "сенс '\\x' відрізняється від традиційної мови C"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x використовується з наступними шістнадцятковими цифрами"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "шістнадцяткова escape-послідовність поза межами діапазону"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "вісімкова escape-послідовність поза межами діапазону"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "сенс '\\a' відрізняється від традиційної мови C"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "escape-послідовність не за стандартом ISO, '\\%c'"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "Невідома escape-послідовність '\\%c'"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "Невідома escape-послідовність: '\\%s'"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "escape-послідовність перетворюється на виконуваний набір символів"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "символьна константа надто довга для вказаного типу"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "багатосимвольна символьна константа"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "порожня символьна константа"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "помилка при перетворені %s на %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "зайві лексеми наприкінці директиви #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s є розширенням GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "рекомендується не використовувати #elif у традиційній мові C"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "у традиційній мові C ігноруються #%s, якщо # з відступом"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "рекомендується приховувати #%s у традиційній мові C використовуючи відступ перед #"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "вбудована директива з макро-аргументами не є переносимою"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "стиль директиви line є розширенням GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "неправильна директива препроцесора #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "\"defined\" не може використовуватись як назва макросу"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "\"%s\" не може використовуватись як назва макросу, оскільки це - оператор у C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "не вказаний макрос у директиві #%s"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "назви макросів повинні бути ідентифікаторами"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "скасовується визначення \"%s\""
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "відсутній завершальний символ >"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s очікує \"FILENAME\" або <FILENAME>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "порожня назва файлу у #%s"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "надто глибоке вкладання #include"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next у первинному файлі тексту програми"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "некоректна ознака \"%s\" у директиві line"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "\"%s\" після #line не є додатнім цілим числом"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "номер рядка за межами діапазону"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "\"%s\" не є коректною назвою файлу"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "\"%s\" після # не є додатнім цілим числом"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "некоректна директива #%s"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "прагми реєструються у просторі назв \"%s\" за відсутності розширення назв"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "прагма \"%s\" реєструється з розширенням назви але без простору назви"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "\"%s\" реєструється як прагма та як прострі назв прагм"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s вже зареєстровано"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s вже зареєстровано"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "реєструється pragma з NULL-обробником"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma один раз у головному файлі"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "некоректна #pragma GCC poison директива"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "poisoning існуючих макросів \"%s\""
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header проігноровано за межами включеного файлу"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "не вдається знайти первинний файл %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "поточний файл старіший ніж %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma охоплює дужками символьний літерал"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else без #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else після #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "умова починається тут"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif без #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif після #else"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif беp #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "відсутня '(' після предикату"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "відсутня ')' для завершення відповіді"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "відповідь предиката порожня"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "твердження без предикату"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "предикат має бути ідентифікатором"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "\"%s\" повторне ствердження"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "незавершене #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "незавершений коментар"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "попередження: "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "внутрішня помилка: "
+
+#: errors.c:122
+msgid "error: "
+msgstr "error: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "надто багато десяткових точок у числі"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "уявні константи є розширенням GCC"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "некоректна цифра \"%c\" у вісімковій константі"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "некоректна цифра \"%c\" у вісімковій константі"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "некоректний суфікс \"%.*s\" у константі з плаваючою комою"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "використовуйте десятково-шістнадцяткову константу з плаваючою комою мови C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "експонента не має цифр"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "для десятково-шістнадцяткової константи з плаваючою комою потрібна експонента"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "некоректний суфікс \"%.*s\" у константі з плаваючою комою"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "традиційною мовою C не сприймається суфікс \"%.*s\""
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "некоректний суфікс \"%.*s\" з десятково-шістнадцятковою константою з плаваючою комою"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "уявні константи є розширенням GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "некоректний суфікс \"%.*s\" у цілій константі"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "використовуйте цілу константу long long з C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "уявні константи є розширенням GCC"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "уявні константи є розширенням GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "ціла константа надто велика для вказаного типу"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "ціла константа така велика, що вона не матиме знаку"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "відсутня ')' після \"defined\""
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "для оператора \"defined\" потрібен ідентифікатор"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(\"%s\" - альтернативна лексема для \"%s\" у C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "використання \"defined\" може бути непереносимим"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "константа з плаваючою комою у виразі препроцесора"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "уявне число у виразі препроцесора"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "\"%s\" не визначено"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "відсутній двійковий оператор перед лексемою \"%s\""
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "лексема \"%s\" не є допустимим у виразі препроцесора"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "відсутній вираз між '(' та ')'"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "відсутній вираз після #if"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "оператор '%s' не містить коректного операнду"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "оператор '%s' не містить лівого операнду"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " ':' без подовження '?'"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "незбалансований стек у #if"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "неможливий оператор '%u'"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "відсутня ')' у виразі"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "'?' без наступного ':'"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "переповнення цілого числа у виразі препроцесора"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "відсутня '(' у виразі"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "лівий операнд \"%s\" змінює знак при підвищенні"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "правий оператор \"%s\" змінює знак при підвищенні"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "у традиційній мові C не допускається унарний оператор плюс"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "оператор кома у операнді #if"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "ділення на нуль у #if"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "значення каталогу NULL у find_file"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "знайдено один або більше файлів PCH, але вони некоректні"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "докладніша інформація виводиться, якщо вказати -Winvalid-pch"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s є блочним пристроєм"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s надто великий"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s коротший ніж очікувалося"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "відсутні шлях включення у якому ведеться пошук для %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Декілька include guards можуть бути корисні для:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t має бути беззнакового типу"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "арифметика препроцесора має максимальну точність %lu біт; ціль вимагає %lu біт"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "арифметика CPP повинна мати принаймні таку ж точність я у цільового цілого числа"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "ширина цільового типу char менша за 8 біт"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "цільовий wchar_t є вужчим за цільовий char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "цільовий тип int є вужчим ніж цільовий char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP half-integer є вужчим за CPP character"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "CPP на цьому вузлі не може обробляти константи з символів шириною понад %lu біт, але для цілі вимагається %lu біт"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "зворотна коса риска та символ нового рядка відділяються пробілом"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "зворотна коса риска та символ нового рядка наприкінці файлу"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "тристоронній ??%c перетворено на %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "тристоронній ??%c проігноровано, використовуйте -trigraphs, щоб увімкнути"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "\"/*\" всередині коментаря"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "%s в директиві препроцесора"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "null-символи проігноровані"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "`%.*s' не у NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "`%.*s' не у NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "спроба використати poisoned \"%s\""
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ може з'являтися лише у розширенні макросу variadic з мови C99"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "null-символи збережені буквально"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "відсутній завершальний символ %c"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "Коментарі у стилі C++ неприпустимі згідно ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(повідомлення про це з'явиться лише один для вхідного файлу)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "багаторядковий коментар"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "неможливо розібрати лексему %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "У файлі включеному з %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 з %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "макрос \"%s\" не використовується"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "некоректний вбудований макрос \"%s\""
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "не вдається визначити часову мітку файлу"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "не вдається визначити дату та час"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "некоректний символьний літерал, ігнорується завершальний символ '\\'"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "вставка \"%s\" та \"%s\" не призводить до коректної лексеми препроцесора"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 вимагає, щоб використовувались решта аргументів"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "для макросу \"%s\" потрібно вказати %u аргументів, але вказано лише %u"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "макросу \"%s\" передано %u аргументів, але з них використано лише %u"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "незавершений список аргументів у виклику макросу \"%s\""
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "подібний до функції макрос \"%s\" має використовуватися з аргументами у традиційній мові C"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "дублікат параметра макросу \"%s\""
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "\"%s\" не може з'являтися у списку параметрів макросу"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "параметри макросу мають бути розділені комами"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "відсутня назва параметра"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "анонімні макроси variadic започатковані у C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C не припускає іменовані макроси variadic"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "відсутня ')' у списку параметрів макросу"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "'##' не може з'являтися з обох кінців макро-розширення"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "у ISO C99 має бути пробіл після назви маросу"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "відсутні пробіл після назви макросу"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "'#' не супроводжується параметром макросу"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "повторне визначення \"%s\""
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "...це місце першого визначення"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "аргумент макросу \"%s\" був би перетворений на рядок у традиційній мові C"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "некоректний типу хешу %d у cpp_macro_definition"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "при записі попередньо скомпільованих заголовків"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: не використовується оскільки `%.*s' не визначено"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: не використовується, оскільки `%.*s' визначено як `%s' не `%.*s'"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: не використовується, оскільки визначено `%s'"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: не використовується, оскільки визначено `%s'"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "при читанні попередньо скомпільованого заголовка"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "при розширенні макросу \"%s\" виявлено рекурсію"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "синтаксична помилка у списку параметрів макросу"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "відсутній символ нового рядка наприкінці файлу"
diff --git a/libcpp/po/vi.po b/libcpp/po/vi.po
new file mode 100644 (file)
index 0000000..80b1aff
--- /dev/null
@@ -0,0 +1,904 @@
+# Vietnamese translation for CPPlib.
+# Copyright © 2007 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.3-b20071109\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-11-30 23:15+1030\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: LocFactoryEditor 1.7b1\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "iconv không hỗ trợ khả năng chuyển đổi từ %s sang %s"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open (mở)"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "chưa thi hành iconv nên không thể chuyển đổi từ %s sang %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "ký tự 0x%lx không phải nằm trong bộ ký tự nguồn cơ bản\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "đang chuyển đổi sang bộ ký tự thi hành"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "ký tự 0x%lx không có dạng byte đơn trong bộ ký tự thi hành"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "Ký tự %x có lẽ không phải có kiểu NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "tên ký tự chung là hợp lệ chỉ trong ngôn ngữ C++ và C99"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "« \\%c » có nghĩa khác trong ngôn ngữ C truyền thống"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "Trong « _cpp_valid_ucn » nhưng mà không phải lả một UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "tên ký tự chung %.*s chưa hoàn thành"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s không phải là ký tự chung hợp lệ"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "gặp « $ » trong bộ nhận hiện hay con số"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "ký tự chung %.*s không phải là hợp lệ trong bộ nhận diện"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "ký tự chung %.*s không phải hợp lệ tại đầu của bộ nhận diện"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "đang chuyển đổi UCN sang bộ ký tự nguồn"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "đang chuyển đổi UCN sang bộ ký tự thi hành"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "« \\x » có nghĩa khác trong ngôn ngữ C truyền thống"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x được dùng còn không có chữ số thâp lục theo sau"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "dãy thoát thập lục ở ngoài phạm vi"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "dãy thoát bát phân ở ngoài phạm vi"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "« \\a » có nghĩa khác trong ngôn ngữ C truyền thống"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "dãy thoát khác ISO chuẩn: « \\%c »"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "không biết dãy thoát: « \\%c »"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "không biết dãy thoát « \\%s »"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "đang chuyển đổi dãy thoát sang bộ ký tự thi hành"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "hằng ký tự quá dài cho kiểu nó"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "hằng ký tự đa ký tự"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "hằng ký tự trống"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "lỗi chuyển đổi %s sang %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "gặp hiệu bài thêm tại kết thúc của chỉ thị #%s"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s là phần mở rộng kiểu GCC"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "khuyên bạn không dùng #elif trong ngôn ngữ C truyền thống"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "ngôn ngữ C truyền thống bỏ qua #%s với # được thụt lề"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "khuyên bạn ẩn #%s ra ngôn ngữ C truyền thống bằng # được thụt lề"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "khả năng nhúng chỉ thị vào đối số vĩ lệnh không thể mạng theo"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "kiểu chỉ thị dòng là phần mở rộng GCC"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "chỉ thị tiền xử lý không hợp lệ #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "không thể dùng « defined » (đã xác định) như là tên vĩ lệnh"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "không thể dùng « %s » như là tên vĩ lệnh vì nó là toán tử trong ngôn ngữ C++"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "chỉ thị #%s không chứa tên vĩ lệnh"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "mọi tên vĩ lệnh phải là bộ nhận diện"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "đang hủy xác định « %s »"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "thiếu ký tự « > » chấm dứt"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s ngờ \"TÊN_TẬP_TIN\" hoặc <TÊN_TẬP_TIN>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "#%s chứa tên tập tin trống"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "« #include » (bao gồm) lồng nhau quá sâu"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "gặp « #include_next » (bao gồm kế tiếp) nằm trong tập tin nguồn chính"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "gặp cờ không hợp lệ « %s »  nằm trong chỉ thị dòng"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "« %s » nằm sau « #line » (dòng) không phải là số nguyên dương"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "số hiệu dòng ở ngoài phạm vi"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "« %s » không phải là tên tập tin hợp lệ"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "« %s » nằm sau « # » không phải là số nguyên dương"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "chỉ thị #%s không hợp lệ"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "việc đăng ký các lệnh mã nguồn điều khiển trình biên dịch (pragma) trong miền tên « %s » sai mở rộng tên "
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "việc đăng ký lệnh mã nguồn điều khiển trình biên dịch (pragma) « %s » có mở rộng tên nhưng không có miền tên"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "đang đăng ký « %s » là cả lệnh nguồn điều khiển trình biện dịch (pragma), lẫn miền tên của lệnh nguồn điều khiển trình biên dịch."
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "« #pragma %s %s » đã được đăng ký"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "« #pragma %s » đã được đăng ký"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "việc đăng ký lệnh mã nguồn điều khiển trình biên dịch (pragma) có bộ quản lý vô giá trị (NULL)"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "Có « #pragma » một lần trong tập tin chính"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "gặp chỉ thị vộ hiệu hóa (poison) GCC « #pragma » không hợp lệ"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "đang vô hiệu hóa vĩ lệnh tồn tại « %s »"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "« #pragma system_header » (đầu trang hệ thống) bị bỏ qua ở ngoài tập tin bao gồm"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "không tìm thấy tập tin nguồn %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "tập tin hiện thời là cũ hơn %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "« _Pragma » nhận một hằng chuỗi được đặt trong ngoặc đơn"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else (nếu không) không có #if (nếu)"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else (nếu không) nằm sau #else"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "bộ điều kiện đã bắt đầu ở đây"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif (nếu không thì nếu) không có #if (nếu)"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif (nếu không thì nếu) nằm sau #else (nếu không)"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif (thôi nếu) không có #if (nếu)"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "thiếu « ( » nằm sau vị ngữ"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "thiếu « ) » để xong trả lời"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "vị ngữ chứa trả lời trống"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "sự khẳng định không có vị ngữ"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "vị ngữ phải là bộ nhận diện"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "« %s » được khẳng định lại"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "#%s chưa chấm dứt"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "gặp chú thích chưa được chấm dứt"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "cảnh báo : "
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "lỗi nôi bộ : "
+
+#: errors.c:122
+msgid "error: "
+msgstr "lỗi: "
+
+#: errors.c:186
+msgid "stdout"
+msgstr "thiết bị xuất chuẩn"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "con số chứa quá nhiều dấu thập phân"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr "hằng định điểm là phần mở rộng GCC"
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "gặp chữ số không hợp lệ « %c » trong hằng nhị phân"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "gặp chữ số không hợp lệ « %c » trong hằng bát phân"
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "gặp tiền tố không hợp lệ « 0b » cho hằng trôi nổi"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "dùng hằng trôi nổi thập lục C99"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "số mũ không co chữ số nào"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "mỗi hằng trôi nổi thập lục cần đến một số mũ"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "gặp hậu tố không hợp lệ « %.*s »  nằm trên hằng trôi nổi"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "ngôn ngữ C truyền thống từ chối hậu tố « %.*s »"
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "gặp hậu tố không hợp lệ « %.*s »  có hằng trôi nổi thập lục"
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr "hằng trôi nổi thập lục là phần mở rộng GCC"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "gặp hậu tố không hợp lệ « %.*s » nằm trên hằng số nguyên"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "dùng hằng số nguyên dài dài C99"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "hằng ảo là phần mở rộng GCC"
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr "hằng nhị phân là phần mở rộng GCC"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "hằng số nguyên quá lớn cho kiểu nó"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "hằng số nguyên quá lớn thì không có dấu"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "thiếu « ) » nằm sau « defined » (đã xác định)"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "toán tử « defined » (đã xác định) cần đến bộ nhận diện"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(« %s » là một hiệu bài thay thế cho « %s » trong ngôn ngữ C++)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "khả năng dùng « defined » (đã xác định) có lẽ không thể mạng theo"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "gặp hằng trôi nổi nằm trong biểu thức tiền xử lý"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "gặp số ảo nằm trong biểu thức tiền xử lý"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "chưa xác định « %s »"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "thiếu toán từ nhị phân nằm trước hiệu bài « %s »"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "hiệu bài « %s » không hợp lệ trong biểu thức tiền xử lý"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "thiếu biểu thức nằm giữa « ( » và « ) »"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if (nếu) không có biểu thức"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "toán tử « %s » không có tác tử bên phải"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "toán tử « %s » không có tác từ bên trái"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr " Dấu hai chấm « : » không có dấu hỏi « ? » đi trước"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "có đống không cân bằng trong #if (nếu)"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "toán từ không thể « %u »"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "thiếu « ) » nằm trong biểu thức"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "Dấu hỏi « ? » không có dấu hai chấm « : » đi sau"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "tràn số nguyên trong biểu thức tiền xử lý"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "thiếu « ( » nằm trong biểu thức"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "tác tử bên trái của « %s » thay đổi dấu (dương/âm) khi được tăng cấp"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "tác tử bên phai của « %s » thay đổi dấu (dương/âm) khi đươc tăng cấp"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "ngôn ngữ C truyền thống từ chối toán tử cộng chỉ có một tác tử"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "toán tử dấu phẩy nằm trong tác tử của #if (nếu)"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "chia số không trong #if (nếu)"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "thư mục RỖNG trong « find_file »  (tìm tập tin)"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "tìm thấy một hay nhiều tập tin PCH, nhưng chúng không hợp lệ"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "hãy thử lệnh « -Winvalid-pch » để tìm thấy thông tin thêm"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s là một thiết bị khối"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s quá lớn"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "ngờ %s dài hơn"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "không có đường dẫn bao gồm trong đó có thể tìm kíếm %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "Nhiều điều bảo vệ bao gồm có lẽ hiệu ích cho :\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "« cppchar_t » phải là kiểu không có dấu dương/âm"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "toán thuật của trình tiền xử lý có độ chính xác tối đa là %lu bit còn đích cần đến %lu bit"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "toán thuật CPP phải là ít nhất cùng chính xác với « int » đích"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "« char » đích có độ rộng ít hơn 8 bit"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "« wchar_t » đích có độ rộng ít hơn « char » đích"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "« int » đích có độ rộng ít hơn « char » đích"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "nữa số nguyên CPP có độ rộng ít hơn ký tự CPP"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "Trên máy này, CPP không thể xử lý hằng ký tự rộng hơn %lu bit, còn đích cần thiết %lu bit"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "xuyệc ngược và ký tự dòng mới phân cách nhau bởi dấu cách"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "gặp xuyệc ngược-ký tự dòng mới tại kết thúc của tập tin"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "chữ ba « ??%c » đã được chuyển đổi thành « %c »"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "chữ ba « ??%c » bị bỏ qua nên hãy sư dụng tùy chon « -trigraphs » (chữ ba) để hiệu lực nó"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "gặp « /* » nằm trong chú thích"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "gặp %s nằm trong chỉ thị tiền xử lý"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "(mọi) ký tự rỗng bị bỏ qua"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "« %.*s »  không phải nằm trong NFKC"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "« %.*s » không phải nằm trong NFC"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "đã cố gắng dùng « %s » bị vô hiệu hóa"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "« __VA_ARGS__ » chỉ có thể xuất hiện trong sự mở rộng của vĩ lệnh biến thiên C99"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "(các) ký tự rỗng được giữ lại trong điều nghĩa chữ"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "thiếu ký tự « %c » chấm dứt"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "không cho phép chú thích kiểu C++ nằm trong ISO C90"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(điều này sẽ được thông báo chỉ một lần cho mỗi tập tin nhập)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "gặp chú thích đa dòng"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "gặp hiệu bài không thể chính tả %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "Trong tập tin được bao gồm từ %s:%u"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 từ %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "bộ đối số « %s » không được dùng"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "vĩ lệnh có sẳn không hợp lệ « %s »"
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "không thể quyết định nhãn giờ của tập tin"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "không thể quyết định ngày và giờ"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "__COUNTER__ đã mở rộng bên trong chỉ thị với « -fdirectives-only »"
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "điều nghĩa chữ chuỗi không hợp lệ nên bỏ qua « \\ » cuối cùng"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "việc dán « %s » và « %s » không đưa ra hiệu bài tiền xử lý hợp lệ"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 cần đến đối số còn lại trong khối được dùng"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "vĩ lệnh « %s » cần đến %u đối số, nhưng chỉ đưa ra %u thôi"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "vĩ lệnh « %s » đã gởi %u đối số, nhưng nhận chỉ %u thôi"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "danh sách đối số không được chấm dứt có gọi vĩ lệnh « %s »"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "vĩ lệnh giống hàm số « %s » phải được dùng với đối số trong ngôn ngữ C truyền thống"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "tham số vĩ lệnh trùng « %s »"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "không cho phép « %s » xuất hiện trong danh sách tham số vĩ lệnh"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "các tham số bộ đối số phải được ngăn cách bởi dấu phẩy"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "thiếu tên tham số"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "vĩ lệnh biến thiên vô danh đã được giới thiệu trong C99"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C không cho phép vĩ lệnh biến thiên có tên"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "thiếu « ) » trong danh sách tham số bộ đối số"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "không cho phép « ## » nằm hoặc trước hoặc sau sự mở rộng vĩ lệnh"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 cần đến khoảng trắng nằm sau tên vĩ lệnh"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "thiếu khoảng trắng nằm sau tên vĩ lệnh"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "« # » không có tham số vĩ lệnh đi theo"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "« %s » đã được xác định lại"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "đây là vị trí của lời xác định trước"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "đối số vĩ lệnh « %s » nên được chuyển đổi thành chuỗi trong ngôn ngữ C truyền thống"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "gặp kiểu băm không hợp lệ %d trong « cpp_macro_definition » (lời xác định vĩ lệnh)"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "trong khi ghi đầu trang biên dịch sẵn"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s: không được dùng vì chưa xác định « %.*s »"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s: không được dùng vì « %.*s » đã được xác định là « %s » không phải « %.*s »"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s: không được dùng vì « %s » đã được xác định"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s: không được dùng vì « __COUNTER__ » không hợp lệ"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "trong khi đọc đầu trang biên dịch sẵn"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "đã phát hiện sự đệ qui trong khi mở rộng vĩ lệnh « %s »"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "gặp lỗi cú pháp trong danh sách tham số vĩ lệnh"
diff --git a/libcpp/po/zh_CN.po b/libcpp/po/zh_CN.po
new file mode 100644 (file)
index 0000000..6b57691
--- /dev/null
@@ -0,0 +1,907 @@
+# Simplified Chinese translation for cpplib.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the cpplib package.
+# Meng Jie <zuxyhere@eastday.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.3-b20071109\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2007-11-11 17:29+0800\n"
+"Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
+"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "iconv 不支持从 %s 到 %s 的转换"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "没有 iconv 的实现,无法从 %s 转换到 %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "字符 0x%lx 不在基本源字符集中\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "转换到可执行文件的字符集"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "字符 0x%lx 在执行字符集中不是单字节的"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "字符 %x 可能不是 NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "Unicode 字符名只在 C++ 和 C99 中有效"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "‘\\%c’的意义与在传统 C 中不同"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "在 _cpp_valid_ucn 中但不是一个 UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "不完全的 Unicode 字符名 %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s 不是一个有效的 Unicode 字符"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "‘$’出现在标识符或数字中"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "Unicode 字符 %.*s 在标识符中无效"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "Unicode 字符 %.*s 在标识符开头无效"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "将 UCN 转换到源字符集"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "将 UCN 转换到执行字符集"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "‘\\x’的意义与在传统 C 中不同"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x 后没有 16 进制数字"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "16 进制转义序列越界"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "8 进制转义序列越界"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "‘\\a’的意义与在传统 C 中不同"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "非 ISO 标准的转义序列,‘\\%c’"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "未知的转义序列:‘\\%c’"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "未知的转义序列:‘\\%s’"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "将转义序列转换到执行字符集"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "字符常量大小超出其类型"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "多字节字符常量"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "空的字符常量"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "无法从 %s 转换到 %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "#%s 指示的末尾有多余的标识符"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s 是一个 GCC 扩展"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "建议在传统 C 中不使用 #elif"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "当 # 有缩进时传统 C 忽略 #%s"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "建议使用缩进的 # 以让 #%s 对传统 C 不可见"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "将一个指示嵌入宏参数中是不可移植的"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "line 指示的风格是一个 GCC 扩展"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "无效的预处理指示 #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "“defined”不能被用作宏名"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "“%s”不能被用作宏名,因为它是 C++ 中的一个操作符"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "#%s 指示中未给出宏名"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "宏名必须是标识符"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "取消对“%s”的定义"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "缺少结尾的 > 字符"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s 需要 \"FILENAME\" 或 <FILENAME>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "#%s 中文件名为空"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include 嵌套过深"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next 出现在主源文件中"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "line 指示中有无效的标记“%s”"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "#line 后的“%s”不是一个正整数"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "行号超出范围"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "“%s”不是一个有效的文件名"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "# 后的“%s”不是一个正整数"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "无效的 #%s 指示"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr "在命名空间“%s”中注册 pragma 时名称扩展不匹配"
+
+#: directives.c:1098
+#, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "pragma “%s”被注册为一个命名扩展,而没有命名空间"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "“%s”既被注册为一个pragma 又被注册为一个 pragma 命名空间"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s 已经被注册"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s 已经被注册"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr "pragma 注册为被 NULL 处理"
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once 出现在主文件中"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "无效的 #pragma GCC poison 指示"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "对已存在的宏“%s”投毒"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_heade 在包含文件外被忽略"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "找不到源文件 %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "当前文件早于 %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma 需要一个括起的字符串字面常量"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else 没有匹配的 #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else 出现在 #else 后"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "条件自此开始"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif 没有匹配的 #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif 出现在 #else 后"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif 没有匹配的 #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "谓词后缺少‘(’"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "完整的答案缺少‘)’"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "谓词的答案为空"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "断言后没有谓词"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "谓词必须是一个标识符"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "重断言“%s”"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "未终止的 #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "未结束的注释"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "警告:"
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "内部错误:"
+
+#: errors.c:122
+msgid "error: "
+msgstr "错误:"
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "数字中有太多小数点"
+
+#: expr.c:290 expr.c:365
+msgid "fixed-point constants are a GCC extension"
+msgstr "定点常量是一个 GCC 扩展"
+
+#: expr.c:303
+#, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "二进制常量中有无效数字“%c”"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "8 进制常量中有非法字符“%c”"
+
+#: expr.c:313
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "浮点常量的“0b”前缀无效"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "使用 C99 式的 16 进制浮点常量"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "指数部分没有数字"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "16 进制浮点常量需要指数部分"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "浮点常量的“%.*s”后缀无效"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "传统 C 不接受“%.*s”后缀"
+
+#: expr.c:358
+#, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "十六进制浮点常量的“%.*s”后缀无效"
+
+#: expr.c:369
+msgid "decimal float constants are a GCC extension"
+msgstr "十进制浮点常量是一个 GCC 扩展"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "整数常量的“%.*s”后缀无效"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "使用 C99 long long 整数常量"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "虚数常量是一个 GCC 扩展"
+
+#: expr.c:412
+msgid "binary constants are a GCC extension"
+msgstr "二进制常量是一个 GCC 扩展"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "整数常量值超出其类型"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "整数常量太大,认定为 unsigned"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "“defined” 后出现‘)’"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "操作符“defined”需要一个标识符"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(在 C++ 中“%s”会是“%s”的替代标识符)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "使用“defined”可能不利于移植"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "浮点常量出现在预处理表达式中"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "预处理表达式中出现虚数"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "“%s”未定义"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "标识符“%s”前缺少二元运算符"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "标识符“%s”在预处理表达式中无效"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "‘(’与‘)’之间缺少表达式"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if 后没有表达式"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "操作符‘%s’没有右操作数"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "操作符‘%s’没有左操作数"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr "‘:’前没有‘?’"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "#if 中不平衡的堆栈"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "不可能的操作‘%u’"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "表达式中缺少‘)’"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "‘?’后没有‘:’"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "预处理表达式中整数溢出"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "表达式中缺少‘(’"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "“%s”的左操作数在提升时变换了符号"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "“%s”的右操作数在提升时变换了符号"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "传统 C 不接受单目 + 运算符"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "#if 操作数中出现逗号"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "#if 中用零做除数"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "find_file 中有 NULL 目录"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "找到一个或多个 PCH 文件,但它们是无效的"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "使用 -Winvalid-pch 以获得更多信息"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s 是一个块设备"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s 过大"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s 短于预期"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "没有包含路径可供搜索 %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "多个防止重包含可能对其有用:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t 必须是无符号型"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "预处理算术的最高精度为 %lu 位;目标需要 %lu 位"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP 算术必须至少具有目标 int 的精度"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "目标 char 短于 8 位"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "目录 wchar_t 短于目标 char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "目标 int 短于目标 char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP 半整数短于 CPP 字符"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "在此宿主机上,CPP 不能处理长于 %lu 位的宽字符常量,但目标需要 %lu 位"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "反斜杠和换行为空格所分隔"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "反斜杠续行出现在文件末尾"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "三元符 ??%c 转换为 %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "三元符 ??%c 被忽略,请使用 -trigraphs 来启用"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "“/*”出现在注释中"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "预处理指示中出现 %s"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "忽略空字符"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "‘%.*s’不在 NFKC 中"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "‘%.*s’不在 NFC 中"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "试图使用有毒的“%s”"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ 只能出现在 C99 可变参数宏的展开中"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "空字符将保留在字面字符串中"
+
+#: lex.c:662
+#, c-format
+msgid "missing terminating %c character"
+msgstr "缺少结尾的 %c 字符"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++ 风格的注释在 ISO C90 中不被允许"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(此警告为每个输入文件只报告一次)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "多行注释"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "无法拼出的标识符 %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "在包含自 %s:%u 的文件中"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 从 %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "宏“%s”未被使用"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "无效的内建宏“%s”"
+
+#: macro.c:157
+msgid "could not determine file timestamp"
+msgstr "无法决定文件的时间戳"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "无法决定日期与时间"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr "带 -fdirectives-only 时 __COUNTER__ 在指示中扩展"
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "无效的字面字符串,忽略最后的‘\\’"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "毗连“%s”和“%s”不能给出一个有效的预处理标识符"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 需要使用剩余的参数"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "宏“%s”需要 %u 个参数,但只给出了 %u 个"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "宏“%s”传递了 %u 个参数,但只需要 %u 个"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "调用宏“%s”时参数列表未终止"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "类似函数的宏“%s”在传统 C 中必须与参数一起使用"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "重复的宏参数“%s”"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "“%s”不能出现在宏参数列表中"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "宏参数必须由逗号隔开"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "缺少形参名"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "匿名可变参数宏在 C99 中被引入"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C 不允许有名的可变参数宏"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "在宏参数表中缺少‘)’"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "‘##’不能出现在宏展开的两端"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 要求宏名后必须有空白"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "宏名后缺少空白"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "‘#’后没有宏参数"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "“%s”重定义"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "这是先前定义的位置"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "宏参数“%s”将在传统 C 中被字符串化"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "cpp_macro_definition 中有无效的散列类型 %d"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "在写入预编译头时"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s:未使用因为‘%.*s’未定义"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s:未使用因为‘%s’已定义"
+
+#: pch.c:558
+#, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s:未使用因为‘__COUNTER__’无效"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "在读取预编译头时"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "展开宏“%s”时检测到递归"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "宏参数列表语法错误"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "文件未以空白行结束"
diff --git a/libcpp/po/zh_TW.po b/libcpp/po/zh_TW.po
new file mode 100644 (file)
index 0000000..0747f55
--- /dev/null
@@ -0,0 +1,914 @@
+# Traditional Chinese translation for cpplib.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the cpplib package.
+# Meng Jie <zuxyhere@eastday.com>, 2005.
+# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cpplib 4.1.0\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2007-11-08 21:08+0000\n"
+"PO-Revision-Date: 2006-03-09 12:37+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: charset.c:654
+#, c-format
+msgid "conversion from %s to %s not supported by iconv"
+msgstr "iconv 不支援從 %s 到 %s 的轉換"
+
+#: charset.c:657
+msgid "iconv_open"
+msgstr "iconv_open"
+
+#: charset.c:665
+#, c-format
+msgid "no iconv implementation, cannot convert from %s to %s"
+msgstr "沒有實作 iconv,無法從 %s 轉換到 %s"
+
+#: charset.c:742
+#, c-format
+msgid "character 0x%lx is not in the basic source character set\n"
+msgstr "字元 0x%lx 不在基本來源字元集中\n"
+
+#: charset.c:759 charset.c:1352
+msgid "converting to execution character set"
+msgstr "轉換到可執行檔案的字元集"
+
+#: charset.c:765
+#, c-format
+msgid "character 0x%lx is not unibyte in execution character set"
+msgstr "字元 0x%lx 在執行字元集中不是單位元組的"
+
+#: charset.c:889
+#, c-format
+msgid "Character %x might not be NFKC"
+msgstr "字元 %x 可能不是 NFKC"
+
+#: charset.c:949
+msgid "universal character names are only valid in C++ and C99"
+msgstr "萬國碼字元名稱只在 C++ 和 C99 中有效"
+
+#: charset.c:952
+#, c-format
+msgid "the meaning of '\\%c' is different in traditional C"
+msgstr "「\\%c」的意義與在傳統 C 中不同"
+
+#: charset.c:961
+msgid "In _cpp_valid_ucn but not a UCN"
+msgstr "在 _cpp_valid_ucn 中並不是一個 UCN"
+
+#: charset.c:986
+#, c-format
+msgid "incomplete universal character name %.*s"
+msgstr "不完整的萬國碼字元名稱 %.*s"
+
+#: charset.c:998
+#, c-format
+msgid "%.*s is not a valid universal character"
+msgstr "%.*s 不是一個有效的萬國碼字元"
+
+#: charset.c:1008 lex.c:484
+msgid "'$' in identifier or number"
+msgstr "「$」出現在識別字或數字中"
+
+#: charset.c:1018
+#, c-format
+msgid "universal character %.*s is not valid in an identifier"
+msgstr "萬國碼字元 %.*s 在識別字中無效"
+
+#: charset.c:1022
+#, c-format
+msgid "universal character %.*s is not valid at the start of an identifier"
+msgstr "萬國碼字元 %.*s 在識別字開頭無效"
+
+#: charset.c:1056 charset.c:1571
+msgid "converting UCN to source character set"
+msgstr "將 UCN 轉換到來源字元集"
+
+#: charset.c:1060
+msgid "converting UCN to execution character set"
+msgstr "將 UCN 轉換到執行字元集"
+
+#: charset.c:1132
+msgid "the meaning of '\\x' is different in traditional C"
+msgstr "「\\x」的意義與在傳統 C 中不同"
+
+#: charset.c:1149
+msgid "\\x used with no following hex digits"
+msgstr "\\x 後沒有十六進位數字"
+
+#: charset.c:1156
+msgid "hex escape sequence out of range"
+msgstr "十六進位逸出序列越界"
+
+#: charset.c:1195
+msgid "octal escape sequence out of range"
+msgstr "八進位逸出序列越界"
+
+#: charset.c:1263
+msgid "the meaning of '\\a' is different in traditional C"
+msgstr "「\\a」的意義與在傳統 C 中不同"
+
+#: charset.c:1270
+#, c-format
+msgid "non-ISO-standard escape sequence, '\\%c'"
+msgstr "非 ISO 標準的逸出序列,「\\%c」"
+
+#: charset.c:1278
+#, c-format
+msgid "unknown escape sequence '\\%c'"
+msgstr "不明的逸出序列:「\\%c」"
+
+#: charset.c:1286
+#, c-format
+msgid "unknown escape sequence: '\\%s'"
+msgstr "不明的逸出序列:「\\%s」"
+
+#: charset.c:1293
+msgid "converting escape sequence to execution character set"
+msgstr "將逸出序列轉換到執行字元集"
+
+#: charset.c:1415 charset.c:1478
+msgid "character constant too long for its type"
+msgstr "字元常數大小超出其類型"
+
+#: charset.c:1418
+msgid "multi-character character constant"
+msgstr "多位元組字元常數"
+
+#: charset.c:1510
+msgid "empty character constant"
+msgstr "空的字元常數"
+
+#: charset.c:1612
+#, c-format
+msgid "failure to convert %s to %s"
+msgstr "無法從 %s 轉換到 %s"
+
+#: directives.c:215 directives.c:241
+#, c-format
+msgid "extra tokens at end of #%s directive"
+msgstr "#%s 指令的末尾有多餘的符記"
+
+#: directives.c:344
+#, c-format
+msgid "#%s is a GCC extension"
+msgstr "#%s 是 GCC 擴充功能"
+
+#: directives.c:356
+msgid "suggest not using #elif in traditional C"
+msgstr "建議在傳統 C 中不要使用 #elif"
+
+#: directives.c:359
+#, c-format
+msgid "traditional C ignores #%s with the # indented"
+msgstr "當 # 有縮排時傳統 C 忽略 #%s"
+
+#: directives.c:363
+#, c-format
+msgid "suggest hiding #%s from traditional C with an indented #"
+msgstr "建議使用縮排的 # 以讓 #%s 對傳統 C 不可見"
+
+#: directives.c:389
+msgid "embedding a directive within macro arguments is not portable"
+msgstr "將一個指令內嵌於巨集參數中是不可移植的"
+
+#: directives.c:409
+msgid "style of line directive is a GCC extension"
+msgstr "line 指令的風格是 GCC 擴充功能"
+
+#: directives.c:464
+#, c-format
+msgid "invalid preprocessing directive #%s"
+msgstr "無效的預先處理指令 #%s"
+
+#: directives.c:532
+msgid "\"defined\" cannot be used as a macro name"
+msgstr "「defined」不能做為巨集名"
+
+#: directives.c:538
+#, c-format
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
+msgstr "「%s」不能做為巨集名,因為它是 C++ 中的一個運算子"
+
+#: directives.c:541
+#, c-format
+msgid "no macro name given in #%s directive"
+msgstr "#%s 指令中未給出巨集名"
+
+#: directives.c:544
+msgid "macro names must be identifiers"
+msgstr "巨集名必須是識別字"
+
+#: directives.c:585
+#, c-format
+msgid "undefining \"%s\""
+msgstr "取消對「%s」的定義"
+
+#: directives.c:640
+msgid "missing terminating > character"
+msgstr "缺少結尾的 > 字元"
+
+#: directives.c:695
+#, c-format
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
+msgstr "#%s 需要 \"FILENAME\" 或 <FILENAME>"
+
+#: directives.c:739
+#, c-format
+msgid "empty filename in #%s"
+msgstr "#%s 中檔案名稱為空"
+
+#: directives.c:749
+msgid "#include nested too deeply"
+msgstr "#include 巢狀過深"
+
+#: directives.c:790
+msgid "#include_next in primary source file"
+msgstr "#include_next 出現在主來源檔案中"
+
+#: directives.c:816
+#, c-format
+msgid "invalid flag \"%s\" in line directive"
+msgstr "line 指令中有無效的標記「%s」"
+
+#: directives.c:868
+#, c-format
+msgid "\"%s\" after #line is not a positive integer"
+msgstr "#line 後的「%s」不是一個正整數"
+
+#: directives.c:874
+msgid "line number out of range"
+msgstr "列號超出範圍"
+
+#: directives.c:887 directives.c:964
+#, c-format
+msgid "\"%s\" is not a valid filename"
+msgstr "「%s」不是一個有效的檔案名稱"
+
+#: directives.c:924
+#, c-format
+msgid "\"%s\" after # is not a positive integer"
+msgstr "# 後的「%s」不是一個正整數"
+
+#: directives.c:1026
+#, c-format
+msgid "invalid #%s directive"
+msgstr "無效的 #%s 指令"
+
+#: directives.c:1089
+#, c-format
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
+msgstr ""
+
+#: directives.c:1098
+#, fuzzy, c-format
+msgid "registering pragma \"%s\" with name expansion and no namespace"
+msgstr "「%s」既被註冊為一個 pragma 又被註冊為一個 pragma 命名空間"
+
+#: directives.c:1116
+#, c-format
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
+msgstr "「%s」既被註冊為一個 pragma 又被註冊為一個 pragma 命名空間"
+
+#: directives.c:1119
+#, c-format
+msgid "#pragma %s %s is already registered"
+msgstr "#pragma %s %s 已經被註冊"
+
+#: directives.c:1122
+#, c-format
+msgid "#pragma %s is already registered"
+msgstr "#pragma %s 已經被註冊"
+
+#: directives.c:1152
+msgid "registering pragma with NULL handler"
+msgstr ""
+
+#: directives.c:1362
+msgid "#pragma once in main file"
+msgstr "#pragma once 出現在主檔案中"
+
+#: directives.c:1385
+msgid "invalid #pragma GCC poison directive"
+msgstr "無效的 #pragma GCC poison 指令"
+
+#: directives.c:1394
+#, c-format
+msgid "poisoning existing macro \"%s\""
+msgstr "對已存在的巨集「%s」加料"
+
+#: directives.c:1413
+msgid "#pragma system_header ignored outside include file"
+msgstr "#pragma system_header 在包含檔案外被忽略"
+
+#: directives.c:1437
+#, c-format
+msgid "cannot find source file %s"
+msgstr "找不到來源檔案 %s"
+
+#: directives.c:1441
+#, c-format
+msgid "current file is older than %s"
+msgstr "目前檔案早於 %s"
+
+#: directives.c:1620
+msgid "_Pragma takes a parenthesized string literal"
+msgstr "_Pragma 需要一個括起的字串原文"
+
+#: directives.c:1693
+msgid "#else without #if"
+msgstr "#else 沒有匹配的 #if"
+
+#: directives.c:1698
+msgid "#else after #else"
+msgstr "#else 出現在 #else 後"
+
+#: directives.c:1700 directives.c:1733
+msgid "the conditional began here"
+msgstr "條件自此開始"
+
+#: directives.c:1726
+msgid "#elif without #if"
+msgstr "#elif 沒有匹配的 #if"
+
+#: directives.c:1731
+msgid "#elif after #else"
+msgstr "#elif 出現在 #else 後"
+
+#: directives.c:1761
+msgid "#endif without #if"
+msgstr "#endif 沒有匹配的 #if"
+
+#: directives.c:1838
+msgid "missing '(' after predicate"
+msgstr "述語後缺少「(」"
+
+#: directives.c:1853
+msgid "missing ')' to complete answer"
+msgstr "完整的答案缺少「)」"
+
+#: directives.c:1873
+msgid "predicate's answer is empty"
+msgstr "述語的答案為空"
+
+#: directives.c:1900
+msgid "assertion without predicate"
+msgstr "判定語後沒有述語"
+
+#: directives.c:1902
+msgid "predicate must be an identifier"
+msgstr "述語必須是一個識別字"
+
+#: directives.c:1988
+#, c-format
+msgid "\"%s\" re-asserted"
+msgstr "已再判定「%s」"
+
+#: directives.c:2271
+#, c-format
+msgid "unterminated #%s"
+msgstr "未終止的 #%s"
+
+#: directives-only.c:221 lex.c:1016 traditional.c:162
+msgid "unterminated comment"
+msgstr "未終結的註釋"
+
+#: errors.c:118
+msgid "warning: "
+msgstr "警告:"
+
+#: errors.c:120
+msgid "internal error: "
+msgstr "內部錯誤:"
+
+#: errors.c:122
+msgid "error: "
+msgstr "錯誤:"
+
+#: errors.c:186
+msgid "stdout"
+msgstr "stdout"
+
+#: errors.c:188
+#, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#: expr.c:261
+msgid "too many decimal points in number"
+msgstr "數字中有太多小數點"
+
+#: expr.c:290 expr.c:365
+#, fuzzy
+msgid "fixed-point constants are a GCC extension"
+msgstr "虛數常數是一個 GCC 擴充功能"
+
+#: expr.c:303
+#, fuzzy, c-format
+msgid "invalid digit \"%c\" in binary constant"
+msgstr "八進位常數中有無效字元「%c」"
+
+#: expr.c:305
+#, c-format
+msgid "invalid digit \"%c\" in octal constant"
+msgstr "八進位常數中有無效字元「%c」"
+
+#: expr.c:313
+#, fuzzy
+msgid "invalid prefix \"0b\" for floating constant"
+msgstr "浮點常數的「%.*s」字尾無效"
+
+#: expr.c:319
+msgid "use of C99 hexadecimal floating constant"
+msgstr "使用 C99 式的十六進位浮點常數"
+
+#: expr.c:328
+msgid "exponent has no digits"
+msgstr "指數部分沒有數字"
+
+#: expr.c:335
+msgid "hexadecimal floating constants require an exponent"
+msgstr "十六進位浮點常數需要指數部分"
+
+#: expr.c:341
+#, c-format
+msgid "invalid suffix \"%.*s\" on floating constant"
+msgstr "浮點常數的「%.*s」字尾無效"
+
+#: expr.c:351 expr.c:393
+#, c-format
+msgid "traditional C rejects the \"%.*s\" suffix"
+msgstr "傳統 C 不接受「%.*s」字尾"
+
+#: expr.c:358
+#, fuzzy, c-format
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
+msgstr "浮點常數的「%.*s」字尾無效"
+
+#: expr.c:369
+#, fuzzy
+msgid "decimal float constants are a GCC extension"
+msgstr "虛數常數是一個 GCC 擴充功能"
+
+#: expr.c:379
+#, c-format
+msgid "invalid suffix \"%.*s\" on integer constant"
+msgstr "整數常數的「%.*s」字尾無效"
+
+#: expr.c:401
+msgid "use of C99 long long integer constant"
+msgstr "使用 C99 long long 整數常數"
+
+#: expr.c:409
+msgid "imaginary constants are a GCC extension"
+msgstr "虛數常數是一個 GCC 擴充功能"
+
+#: expr.c:412
+#, fuzzy
+msgid "binary constants are a GCC extension"
+msgstr "虛數常數是一個 GCC 擴充功能"
+
+#: expr.c:505
+msgid "integer constant is too large for its type"
+msgstr "整數常數值超出其類型"
+
+#: expr.c:517
+msgid "integer constant is so large that it is unsigned"
+msgstr "整數常數太大,認定為 unsigned"
+
+#: expr.c:612
+msgid "missing ')' after \"defined\""
+msgstr "「defined」 後缺少「)」"
+
+#: expr.c:619
+msgid "operator \"defined\" requires an identifier"
+msgstr "運算子「defined」需要一個識別字"
+
+#: expr.c:627
+#, c-format
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
+msgstr "(在 C++ 中「%s」會是「%s」的替代識別字)"
+
+#: expr.c:637
+msgid "this use of \"defined\" may not be portable"
+msgstr "使用「defined」可能不利於移植"
+
+#: expr.c:676
+msgid "floating constant in preprocessor expression"
+msgstr "浮點常數出現在預先處理運算式中"
+
+#: expr.c:682
+msgid "imaginary number in preprocessor expression"
+msgstr "預先處理運算式中出現虛數"
+
+#: expr.c:727
+#, c-format
+msgid "\"%s\" is not defined"
+msgstr "「%s」未定義"
+
+#: expr.c:855 expr.c:884
+#, c-format
+msgid "missing binary operator before token \"%s\""
+msgstr "識別字「%s」前缺少二元運算子"
+
+#: expr.c:875
+#, c-format
+msgid "token \"%s\" is not valid in preprocessor expressions"
+msgstr "識別字「%s」在預先處理運算式中無效"
+
+#: expr.c:892
+msgid "missing expression between '(' and ')'"
+msgstr "「(」與「)」之間缺少運算式"
+
+#: expr.c:895
+msgid "#if with no expression"
+msgstr "#if 後沒有運算式"
+
+#: expr.c:898
+#, c-format
+msgid "operator '%s' has no right operand"
+msgstr "運算子「%s」沒有右運算元"
+
+#: expr.c:903
+#, c-format
+msgid "operator '%s' has no left operand"
+msgstr "運算子「%s」沒有左運算元"
+
+#: expr.c:929
+msgid " ':' without preceding '?'"
+msgstr "「:」前沒有「?」"
+
+#: expr.c:956
+msgid "unbalanced stack in #if"
+msgstr "#if 中不平衡的堆疊"
+
+#: expr.c:975
+#, c-format
+msgid "impossible operator '%u'"
+msgstr "不可能的運算子「%u」"
+
+#: expr.c:1065
+msgid "missing ')' in expression"
+msgstr "運算式中缺少「)」"
+
+#: expr.c:1086
+msgid "'?' without following ':'"
+msgstr "「?」後沒有「:」"
+
+#: expr.c:1096
+msgid "integer overflow in preprocessor expression"
+msgstr "預先處理運算式中整數溢出"
+
+#: expr.c:1101
+msgid "missing '(' in expression"
+msgstr "運算式中缺少「(」"
+
+#: expr.c:1133
+#, c-format
+msgid "the left operand of \"%s\" changes sign when promoted"
+msgstr "「%s」的左運算元在提升時變換了符號"
+
+#: expr.c:1138
+#, c-format
+msgid "the right operand of \"%s\" changes sign when promoted"
+msgstr "「%s」的右運算元在提升時變換了符號"
+
+#: expr.c:1397
+msgid "traditional C rejects the unary plus operator"
+msgstr "傳統 C 不接受單元 + 運算子"
+
+#: expr.c:1480
+msgid "comma operator in operand of #if"
+msgstr "#if 運算元中出現逗號"
+
+#: expr.c:1612
+msgid "division by zero in #if"
+msgstr "#if 中用零做除數"
+
+#: files.c:442
+msgid "NULL directory in find_file"
+msgstr "find_file 中有 NULL 目錄"
+
+#: files.c:480
+msgid "one or more PCH files were found, but they were invalid"
+msgstr "找到一個或多個 PCH 檔案,但它們是無效的"
+
+#: files.c:483
+msgid "use -Winvalid-pch for more information"
+msgstr "使用 -Winvalid-pch 以獲得更多資訊"
+
+#: files.c:570
+#, c-format
+msgid "%s is a block device"
+msgstr "%s 是一個區塊裝置"
+
+#: files.c:587
+#, c-format
+msgid "%s is too large"
+msgstr "%s 過大"
+
+#: files.c:622
+#, c-format
+msgid "%s is shorter than expected"
+msgstr "%s 短於預期"
+
+#: files.c:852
+#, c-format
+msgid "no include path in which to search for %s"
+msgstr "沒有包含路徑可供搜尋 %s"
+
+#: files.c:1157
+msgid "Multiple include guards may be useful for:\n"
+msgstr "多個防止重包含可能對其有用:\n"
+
+#: init.c:426
+msgid "cppchar_t must be an unsigned type"
+msgstr "cppchar_t 必須是無號類型"
+
+#: init.c:430
+#, c-format
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
+msgstr "預先處理算術的最高精度為 %lu 位;目標需要 %lu 位"
+
+#: init.c:437
+msgid "CPP arithmetic must be at least as precise as a target int"
+msgstr "CPP 算術必須至少具有目標 int 的精度"
+
+#: init.c:440
+msgid "target char is less than 8 bits wide"
+msgstr "目標 char 短於 8 位"
+
+#: init.c:444
+msgid "target wchar_t is narrower than target char"
+msgstr "目標 wchar_t 短於目標 char"
+
+#: init.c:448
+msgid "target int is narrower than target char"
+msgstr "目標 int 短於目標 char"
+
+#: init.c:453
+msgid "CPP half-integer narrower than CPP character"
+msgstr "CPP 半整數短於 CPP 字元"
+
+#: init.c:457
+#, c-format
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
+msgstr "在此宿主機上,CPP 不能處理長於 %lu 位的寬字元常數,但目標需要 %lu 位"
+
+#: lex.c:283
+msgid "backslash and newline separated by space"
+msgstr "反斜線和換列為空格所分隔"
+
+#: lex.c:288
+msgid "backslash-newline at end of file"
+msgstr "反斜線-換列出現在檔案末尾"
+
+#: lex.c:303
+#, c-format
+msgid "trigraph ??%c converted to %c"
+msgstr "三元符 ??%c 轉換為 %c"
+
+#: lex.c:310
+#, c-format
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
+msgstr "三元符 ??%c 被忽略,請使用 -trigraphs 來啟用"
+
+#: lex.c:356
+msgid "\"/*\" within comment"
+msgstr "「/*」出現在註釋中"
+
+#: lex.c:414
+#, c-format
+msgid "%s in preprocessing directive"
+msgstr "預先處理指令中出現 %s"
+
+#: lex.c:423
+msgid "null character(s) ignored"
+msgstr "忽略空字元"
+
+#: lex.c:460
+#, c-format
+msgid "`%.*s' is not in NFKC"
+msgstr "「%.*s」不在 NFKC 中"
+
+#: lex.c:463
+#, c-format
+msgid "`%.*s' is not in NFC"
+msgstr "「%.*s」不在 NFC 中"
+
+#: lex.c:551
+#, c-format
+msgid "attempt to use poisoned \"%s\""
+msgstr "試圖使用已加料的「%s」"
+
+#: lex.c:559
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
+msgstr "__VA_ARGS__ 只能出現在 C99 可變參數巨集的展開中"
+
+#: lex.c:659
+msgid "null character(s) preserved in literal"
+msgstr "空字元將保留在原文中"
+
+#: lex.c:662
+#, fuzzy, c-format
+msgid "missing terminating %c character"
+msgstr "缺少結尾的 > 字元"
+
+#: lex.c:1027
+msgid "C++ style comments are not allowed in ISO C90"
+msgstr "C++ 風格的註釋在 ISO C90 中不被允許"
+
+#: lex.c:1029
+msgid "(this will be reported only once per input file)"
+msgstr "(此警告為每個輸入檔案只報告一次)"
+
+#: lex.c:1034
+msgid "multi-line comment"
+msgstr "多列註釋"
+
+#: lex.c:1347
+#, c-format
+msgid "unspellable token %s"
+msgstr "無法拼出的識別字 %s"
+
+#: line-map.c:320
+#, c-format
+msgid "In file included from %s:%u"
+msgstr "在包含自 %s:%u 的檔案中"
+
+#: line-map.c:338
+#, c-format
+msgid ""
+",\n"
+"                 from %s:%u"
+msgstr ""
+",\n"
+"                 從 %s:%u"
+
+#: macro.c:84
+#, c-format
+msgid "macro \"%s\" is not used"
+msgstr "巨集「%s」未被使用"
+
+#: macro.c:123 macro.c:319
+#, c-format
+msgid "invalid built-in macro \"%s\""
+msgstr "無效的內建巨集「%s」"
+
+#: macro.c:157
+#, fuzzy
+msgid "could not determine file timestamp"
+msgstr "無法決定日期與時間"
+
+#: macro.c:254
+msgid "could not determine date and time"
+msgstr "無法決定日期與時間"
+
+#: macro.c:270
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
+msgstr ""
+
+#: macro.c:423
+msgid "invalid string literal, ignoring final '\\'"
+msgstr "無效的原文字串,忽略最後的「\\」"
+
+#: macro.c:483
+#, c-format
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
+msgstr "粘貼「%s」和「%s」不能給出一個有效的預先處理識別字"
+
+#: macro.c:558
+msgid "ISO C99 requires rest arguments to be used"
+msgstr "ISO C99 需要使用剩餘的引數"
+
+#: macro.c:563
+#, c-format
+msgid "macro \"%s\" requires %u arguments, but only %u given"
+msgstr "巨集「%s」需要 %u 個引數,但只給出了 %u 個"
+
+#: macro.c:568
+#, c-format
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
+msgstr "巨集「%s」傳遞了 %u 個引數,但只需要 %u 個"
+
+#: macro.c:679 traditional.c:680
+#, c-format
+msgid "unterminated argument list invoking macro \"%s\""
+msgstr "呼叫巨集「%s」時引數清單未終止"
+
+#: macro.c:782
+#, c-format
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
+msgstr "類似函式的巨集「%s」在傳統 C 中必須與引數一起使用"
+
+#: macro.c:1325
+#, c-format
+msgid "duplicate macro parameter \"%s\""
+msgstr "重複的巨集參數「%s」"
+
+#: macro.c:1371
+#, c-format
+msgid "\"%s\" may not appear in macro parameter list"
+msgstr "「%s」不能出現在巨集參數清單中"
+
+#: macro.c:1379
+msgid "macro parameters must be comma-separated"
+msgstr "巨集參數必須由逗號隔開"
+
+#: macro.c:1396
+msgid "parameter name missing"
+msgstr "缺少參數名"
+
+#: macro.c:1413
+msgid "anonymous variadic macros were introduced in C99"
+msgstr "匿名可變參數巨集在 C99 中被引入"
+
+#: macro.c:1418
+msgid "ISO C does not permit named variadic macros"
+msgstr "ISO C 不允許具名的可變參數巨集"
+
+#: macro.c:1427
+msgid "missing ')' in macro parameter list"
+msgstr "在巨集參數表中缺少「)」"
+
+#: macro.c:1476
+msgid "'##' cannot appear at either end of a macro expansion"
+msgstr "「##」不能出現在巨集展開的兩端"
+
+#: macro.c:1510
+msgid "ISO C99 requires whitespace after the macro name"
+msgstr "ISO C99 要求巨集名後必須有空白"
+
+#: macro.c:1534
+msgid "missing whitespace after the macro name"
+msgstr "巨集名後缺少空白"
+
+#: macro.c:1564
+msgid "'#' is not followed by a macro parameter"
+msgstr "「#」後沒有巨集參數"
+
+#: macro.c:1683
+#, c-format
+msgid "\"%s\" redefined"
+msgstr "「%s」重定義"
+
+#: macro.c:1688
+msgid "this is the location of the previous definition"
+msgstr "這是先前定義的位置"
+
+#: macro.c:1738
+#, c-format
+msgid "macro argument \"%s\" would be stringified in traditional C"
+msgstr "巨集引數「%s」將在傳統 C 中被字串化"
+
+#: macro.c:1761
+#, c-format
+msgid "invalid hash type %d in cpp_macro_definition"
+msgstr "cpp_macro_definition 中有無效的雜湊類型 %d"
+
+#: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377
+msgid "while writing precompiled header"
+msgstr "在寫入預先編譯標頭時"
+
+#: pch.c:485
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr "%s:未使用,因為「%.*s」未定義"
+
+#: pch.c:497
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr "%s:未使用,因為「%.*s」被定義為「%s」而非「%*.s」"
+
+#: pch.c:538
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr "%s:未使用,因為「%s」已定義"
+
+#: pch.c:558
+#, fuzzy, c-format
+msgid "%s: not used because `__COUNTER__' is invalid"
+msgstr "%s:未使用,因為「%s」已定義"
+
+#: pch.c:567 pch.c:737
+msgid "while reading precompiled header"
+msgstr "在讀取預先編譯標頭時"
+
+#: traditional.c:750
+#, c-format
+msgid "detected recursion whilst expanding macro \"%s\""
+msgstr "展開巨集「%s」時偵測到遞迴"
+
+#: traditional.c:917
+msgid "syntax error in macro parameter list"
+msgstr "巨集參數清單語法錯誤"
+
+#~ msgid "no newline at end of file"
+#~ msgstr "檔案未以空白列結束"
diff --git a/libcpp/symtab.c b/libcpp/symtab.c
new file mode 100644 (file)
index 0000000..ffa28f5
--- /dev/null
@@ -0,0 +1,335 @@
+/* Hash tables.
+   Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#include "config.h"
+#include "system.h"
+#include "symtab.h"
+
+/* The code below is a specialization of Vladimir Makarov's expandable
+   hash tables (see libiberty/hashtab.c).  The abstraction penalty was
+   too high to continue using the generic form.  This code knows
+   intrinsically how to calculate a hash value, and how to compare an
+   existing entry with a potential new one.  Also, the ability to
+   delete members from the table has been removed.  */
+
+static unsigned int calc_hash (const unsigned char *, size_t);
+static void ht_expand (hash_table *);
+static double approx_sqrt (double);
+
+/* Calculate the hash of the string STR of length LEN.  */
+
+static unsigned int
+calc_hash (const unsigned char *str, size_t len)
+{
+  size_t n = len;
+  unsigned int r = 0;
+
+  while (n--)
+    r = HT_HASHSTEP (r, *str++);
+
+  return HT_HASHFINISH (r, len);
+}
+
+/* Initialize an identifier hashtable.  */
+
+hash_table *
+ht_create (unsigned int order)
+{
+  unsigned int nslots = 1 << order;
+  hash_table *table;
+
+  table = XCNEW (hash_table);
+
+  /* Strings need no alignment.  */
+  _obstack_begin (&table->stack, 0, 0,
+                 (void *(*) (long)) xmalloc,
+                 (void (*) (void *)) free);
+
+  obstack_alignment_mask (&table->stack) = 0;
+
+  table->entries = XCNEWVEC (hashnode, nslots);
+  table->entries_owned = true;
+  table->nslots = nslots;
+  return table;
+}
+
+/* Frees all memory associated with a hash table.  */
+
+void
+ht_destroy (hash_table *table)
+{
+  obstack_free (&table->stack, NULL);
+  if (table->entries_owned)
+    free (table->entries);
+  free (table);
+}
+
+/* Returns the hash entry for the a STR of length LEN.  If that string
+   already exists in the table, returns the existing entry, and, if
+   INSERT is CPP_ALLOCED, frees the last obstack object.  If the
+   identifier hasn't been seen before, and INSERT is CPP_NO_INSERT,
+   returns NULL.  Otherwise insert and returns a new entry.  A new
+   string is alloced if INSERT is CPP_ALLOC, otherwise INSERT is
+   CPP_ALLOCED and the item is assumed to be at the top of the
+   obstack.  */
+hashnode
+ht_lookup (hash_table *table, const unsigned char *str, size_t len,
+          enum ht_lookup_option insert)
+{
+  return ht_lookup_with_hash (table, str, len, calc_hash (str, len),
+                             insert);
+}
+
+hashnode
+ht_lookup_with_hash (hash_table *table, const unsigned char *str,
+                    size_t len, unsigned int hash,
+                    enum ht_lookup_option insert)
+{
+  unsigned int hash2;
+  unsigned int index;
+  size_t sizemask;
+  hashnode node;
+
+  sizemask = table->nslots - 1;
+  index = hash & sizemask;
+  table->searches++;
+
+  node = table->entries[index];
+  if (node != NULL)
+    {
+      if (node->hash_value == hash
+         && HT_LEN (node) == (unsigned int) len
+         && !memcmp (HT_STR (node), str, len))
+       {
+         if (insert == HT_ALLOCED)
+           /* The string we search for was placed at the end of the
+              obstack.  Release it.  */
+           obstack_free (&table->stack, (void *) str);
+         return node;
+       }
+
+      /* hash2 must be odd, so we're guaranteed to visit every possible
+        location in the table during rehashing.  */
+      hash2 = ((hash * 17) & sizemask) | 1;
+
+      for (;;)
+       {
+         table->collisions++;
+         index = (index + hash2) & sizemask;
+         node = table->entries[index];
+         if (node == NULL)
+           break;
+
+         if (node->hash_value == hash
+             && HT_LEN (node) == (unsigned int) len
+             && !memcmp (HT_STR (node), str, len))
+           {
+             if (insert == HT_ALLOCED)
+             /* The string we search for was placed at the end of the
+                obstack.  Release it.  */
+               obstack_free (&table->stack, (void *) str);
+             return node;
+           }
+       }
+    }
+
+  if (insert == HT_NO_INSERT)
+    return NULL;
+
+  node = (*table->alloc_node) (table);
+  table->entries[index] = node;
+
+  HT_LEN (node) = (unsigned int) len;
+  node->hash_value = hash;
+  if (insert == HT_ALLOC)
+    HT_STR (node) = (const unsigned char *) obstack_copy0 (&table->stack,
+                                                           str, len);
+  else
+    HT_STR (node) = str;
+
+  if (++table->nelements * 4 >= table->nslots * 3)
+    /* Must expand the string table.  */
+    ht_expand (table);
+
+  return node;
+}
+
+/* Double the size of a hash table, re-hashing existing entries.  */
+
+static void
+ht_expand (hash_table *table)
+{
+  hashnode *nentries, *p, *limit;
+  unsigned int size, sizemask;
+
+  size = table->nslots * 2;
+  nentries = XCNEWVEC (hashnode, size);
+  sizemask = size - 1;
+
+  p = table->entries;
+  limit = p + table->nslots;
+  do
+    if (*p)
+      {
+       unsigned int index, hash, hash2;
+
+       hash = (*p)->hash_value;
+       index = hash & sizemask;
+
+       if (nentries[index])
+         {
+           hash2 = ((hash * 17) & sizemask) | 1;
+           do
+             {
+               index = (index + hash2) & sizemask;
+             }
+           while (nentries[index]);
+         }
+       nentries[index] = *p;
+      }
+  while (++p < limit);
+
+  if (table->entries_owned)
+    free (table->entries);
+  table->entries_owned = true;
+  table->entries = nentries;
+  table->nslots = size;
+}
+
+/* For all nodes in TABLE, callback CB with parameters TABLE->PFILE,
+   the node, and V.  */
+void
+ht_forall (hash_table *table, ht_cb cb, const void *v)
+{
+  hashnode *p, *limit;
+
+  p = table->entries;
+  limit = p + table->nslots;
+  do
+    if (*p)
+      {
+       if ((*cb) (table->pfile, *p, v) == 0)
+         break;
+      }
+  while (++p < limit);
+}
+
+/* Restore the hash table.  */
+void
+ht_load (hash_table *ht, hashnode *entries,
+        unsigned int nslots, unsigned int nelements,
+        bool own)
+{
+  if (ht->entries_owned)
+    free (ht->entries);
+  ht->entries = entries;
+  ht->nslots = nslots;
+  ht->nelements = nelements;
+  ht->entries_owned = own;
+}
+
+/* Dump allocation statistics to stderr.  */
+
+void
+ht_dump_statistics (hash_table *table)
+{
+  size_t nelts, nids, overhead, headers;
+  size_t total_bytes, longest;
+  double sum_of_squares, exp_len, exp_len2, exp2_len;
+  hashnode *p, *limit;
+
+#define SCALE(x) ((unsigned long) ((x) < 1024*10 \
+                 ? (x) \
+                 : ((x) < 1024*1024*10 \
+                    ? (x) / 1024 \
+                    : (x) / (1024*1024))))
+#define LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M'))
+
+  total_bytes = longest = sum_of_squares = nids = 0;
+  p = table->entries;
+  limit = p + table->nslots;
+  do
+    if (*p)
+      {
+       size_t n = HT_LEN (*p);
+
+       total_bytes += n;
+       sum_of_squares += (double) n * n;
+       if (n > longest)
+         longest = n;
+       nids++;
+      }
+  while (++p < limit);
+
+  nelts = table->nelements;
+  overhead = obstack_memory_used (&table->stack) - total_bytes;
+  headers = table->nslots * sizeof (hashnode);
+
+  fprintf (stderr, "\nString pool\nentries\t\t%lu\n",
+          (unsigned long) nelts);
+  fprintf (stderr, "identifiers\t%lu (%.2f%%)\n",
+          (unsigned long) nids, nids * 100.0 / nelts);
+  fprintf (stderr, "slots\t\t%lu\n",
+          (unsigned long) table->nslots);
+  fprintf (stderr, "bytes\t\t%lu%c (%lu%c overhead)\n",
+          SCALE (total_bytes), LABEL (total_bytes),
+          SCALE (overhead), LABEL (overhead));
+  fprintf (stderr, "table size\t%lu%c\n",
+          SCALE (headers), LABEL (headers));
+
+  exp_len = (double)total_bytes / (double)nelts;
+  exp2_len = exp_len * exp_len;
+  exp_len2 = (double) sum_of_squares / (double) nelts;
+
+  fprintf (stderr, "coll/search\t%.4f\n",
+          (double) table->collisions / (double) table->searches);
+  fprintf (stderr, "ins/search\t%.4f\n",
+          (double) nelts / (double) table->searches);
+  fprintf (stderr, "avg. entry\t%.2f bytes (+/- %.2f)\n",
+          exp_len, approx_sqrt (exp_len2 - exp2_len));
+  fprintf (stderr, "longest entry\t%lu\n",
+          (unsigned long) longest);
+#undef SCALE
+#undef LABEL
+}
+
+/* Return the approximate positive square root of a number N.  This is for
+   statistical reports, not code generation.  */
+static double
+approx_sqrt (double x)
+{
+  double s, d;
+
+  if (x < 0)
+    abort ();
+  if (x == 0)
+    return 0;
+
+  s = x;
+  do
+    {
+      d = (s * s - x) / (2 * s);
+      s -= d;
+    }
+  while (d > .0001);
+  return s;
+}
diff --git a/libcpp/system.h b/libcpp/system.h
new file mode 100644 (file)
index 0000000..e08bdf1
--- /dev/null
@@ -0,0 +1,425 @@
+/* Get common system includes and various definitions and declarations based
+   on autoconf macros.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
+
+This file is part of libcpp (aka cpplib).
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+
+#ifndef LIBCPP_SYSTEM_H
+#define LIBCPP_SYSTEM_H
+
+/* We must include stdarg.h before stdio.h.  */
+#include <stdarg.h>
+
+#ifdef HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+
+/* Define a generic NULL if one hasn't already been defined.  */
+#ifndef NULL
+#define NULL 0
+#endif
+
+/* Use the unlocked open routines from libiberty.  */
+#define fopen(PATH,MODE) fopen_unlocked(PATH,MODE)
+#define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE)
+#define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM)
+
+/* The compiler is not a multi-threaded application and therefore we
+   do not have to use the locking functions.  In fact, using the locking
+   functions can cause the compiler to be significantly slower under
+   I/O bound conditions (such as -g -O0 on very large source files).
+
+   HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
+   code is multi-thread safe by default.  If it is set to 0, then do
+   not worry about using the _unlocked functions.
+
+   fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
+   extensions and need to be prototyped by hand (since we do not
+   define _GNU_SOURCE).  */
+
+#if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
+
+# ifdef HAVE_PUTC_UNLOCKED
+#  undef putc
+#  define putc(C, Stream) putc_unlocked (C, Stream)
+# endif
+# ifdef HAVE_PUTCHAR_UNLOCKED
+#  undef putchar
+#  define putchar(C) putchar_unlocked (C)
+# endif
+# ifdef HAVE_GETC_UNLOCKED
+#  undef getc
+#  define getc(Stream) getc_unlocked (Stream)
+# endif
+# ifdef HAVE_GETCHAR_UNLOCKED
+#  undef getchar
+#  define getchar() getchar_unlocked ()
+# endif
+# ifdef HAVE_FPUTC_UNLOCKED
+#  undef fputc
+#  define fputc(C, Stream) fputc_unlocked (C, Stream)
+# endif
+
+# ifdef HAVE_CLEARERR_UNLOCKED
+#  undef clearerr
+#  define clearerr(Stream) clearerr_unlocked (Stream)
+#  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
+extern void clearerr_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FEOF_UNLOCKED
+#  undef feof
+#  define feof(Stream) feof_unlocked (Stream)
+#  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
+extern int feof_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FILENO_UNLOCKED
+#  undef fileno
+#  define fileno(Stream) fileno_unlocked (Stream)
+#  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
+extern int fileno_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FFLUSH_UNLOCKED
+#  undef fflush
+#  define fflush(Stream) fflush_unlocked (Stream)
+#  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
+extern int fflush_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FGETC_UNLOCKED
+#  undef fgetc
+#  define fgetc(Stream) fgetc_unlocked (Stream)
+#  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
+extern int fgetc_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FGETS_UNLOCKED
+#  undef fgets
+#  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
+#  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
+extern char *fgets_unlocked (char *, int, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FPUTS_UNLOCKED
+#  undef fputs
+#  define fputs(String, Stream) fputs_unlocked (String, Stream)
+#  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
+extern int fputs_unlocked (const char *, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FERROR_UNLOCKED
+#  undef ferror
+#  define ferror(Stream) ferror_unlocked (Stream)
+#  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
+extern int ferror_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FREAD_UNLOCKED
+#  undef fread
+#  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
+#  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
+extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FWRITE_UNLOCKED
+#  undef fwrite
+#  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
+#  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
+extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FPRINTF_UNLOCKED
+#  undef fprintf
+/* We can't use a function-like macro here because we don't know if
+   we have varargs macros.  */
+#  define fprintf fprintf_unlocked
+#  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
+extern int fprintf_unlocked (FILE *, const char *, ...);
+#  endif
+# endif
+
+#endif
+
+/* ??? Glibc's fwrite/fread_unlocked macros cause
+   "warning: signed and unsigned type in conditional expression".  */
+#undef fread_unlocked
+#undef fwrite_unlocked
+
+#include <sys/types.h>
+#include <errno.h>
+
+#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
+extern int errno;
+#endif
+
+/* Some of glibc's string inlines cause warnings.  Plus we'd rather
+   rely on (and therefore test) GCC's string builtins.  */
+#define __NO_STRING_INLINES
+
+#ifdef STRING_WITH_STRINGS
+# include <string.h>
+# include <strings.h>
+#else
+# ifdef HAVE_STRING_H
+#  include <string.h>
+# else
+#  ifdef HAVE_STRINGS_H
+#   include <strings.h>
+#  endif
+# endif
+#endif
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+/* Infrastructure for defining missing _MAX and _MIN macros.  Note that
+   macros defined with these cannot be used in #if.  */
+
+/* The extra casts work around common compiler bugs.  */
+#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
+   It is necessary at least when t == time_t.  */
+#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
+                             ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))
+#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
+
+/* Use that infrastructure to provide a few constants.  */
+#ifndef UCHAR_MAX
+# define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
+#endif
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  ifdef HAVE_TIME_H
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#else
+# ifdef HAVE_SYS_FILE_H
+#  include <sys/file.h>
+# endif
+#endif
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#ifdef HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+
+#ifndef HAVE_SETLOCALE
+# define setlocale(category, locale) (locale)
+#endif
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#else
+/* Stubs.  */
+# undef dgettext
+# define dgettext(package, msgid) (msgid)
+#endif
+
+#ifndef _
+# define _(msgid) dgettext (PACKAGE, msgid)
+#endif
+
+#ifndef N_
+# define N_(msgid) msgid
+#endif
+
+/* Some systems define these in, e.g., param.h.  We undefine these names
+   here to avoid the warnings.  We prefer to use our definitions since we
+   know they are correct.  */
+
+#undef MIN
+#undef MAX
+#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
+#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
+
+/* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
+   are defined to 0 then we must provide the relevant declaration
+   here.  These checks will be in the undefined state while configure
+   is running so be careful to test "defined (HAVE_DECL_*)".  */
+
+#if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
+extern void abort (void);
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+/* Test if something is a normal file.  */
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+
+/* Test if something is a directory.  */
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+/* Test if something is a character special file.  */
+#ifndef S_ISCHR
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#endif
+
+/* Test if something is a block special file.  */
+#ifndef S_ISBLK
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#endif
+
+/* Test if something is a socket.  */
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#   define S_ISSOCK(m) 0
+# endif
+#endif
+
+/* Test if something is a FIFO.  */
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+/* Approximate O_NOCTTY and O_BINARY.  */
+#ifndef O_NOCTTY
+#define O_NOCTTY 0
+#endif
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+/* Filename handling macros.  */
+#include "filenames.h"
+
+/* Get libiberty declarations.  */
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+/* 1 if we have C99 designated initializers.
+
+   ??? C99 designated initializers are not supported by most C++
+   compilers, including G++.  -- gdr, 2005-05-18  */
+#if !defined(HAVE_DESIGNATED_INITIALIZERS)
+#define HAVE_DESIGNATED_INITIALIZERS \
+  ((!defined(__cplusplus) && (GCC_VERSION >= 2007)) \
+   || (__STDC_VERSION__ >= 199901L))
+#endif
+
+/* Be conservative and only use enum bitfields with GCC.
+   FIXME: provide a complete autoconf test for buggy enum bitfields.  */
+
+#if (GCC_VERSION > 2000)
+#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
+#else
+#define ENUM_BITFIELD(TYPE) unsigned int
+#endif
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
+#endif
+
+/* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
+   the most likely value of A is B.  This feature was added at some point
+   between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
+#if (GCC_VERSION < 3000)
+#define __builtin_expect(a, b) (a)
+#endif
+
+/* Provide a fake boolean type.  We make no attempt to use the
+   C99 _Bool, as it may not be available in the bootstrap compiler,
+   and even if it is, it is liable to be buggy.  
+   This must be after all inclusion of system headers, as some of
+   them will mess us up.  */
+#undef bool
+#undef true
+#undef false
+#undef TRUE
+#undef FALSE
+
+#ifndef __cplusplus
+#define bool unsigned char
+#endif
+#define true 1
+#define false 0
+
+/* Some compilers do not allow the use of unsigned char in bitfields.  */
+#define BOOL_BITFIELD unsigned int
+
+/* Poison identifiers we do not want to use.  */
+#if (GCC_VERSION >= 3000)
+#undef calloc
+#undef strdup
+#undef malloc
+#undef realloc
+ #pragma GCC poison calloc strdup
+ #pragma GCC poison malloc realloc
+
+/* Libiberty macros that are no longer used in GCC.  */
+#undef ANSI_PROTOTYPES
+#undef PTR_CONST
+#undef LONG_DOUBLE
+#undef VPARAMS
+#undef VA_OPEN
+#undef VA_FIXEDARG
+#undef VA_CLOSE
+#undef VA_START
+ #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
+  VA_FIXEDARG VA_CLOSE VA_START
+
+/* Note: not all uses of the `index' token (e.g. variable names and
+   structure members) have been eliminated.  */
+#undef bcopy
+#undef bzero
+#undef bcmp
+#undef rindex
+ #pragma GCC poison bcopy bzero bcmp rindex
+
+#endif /* GCC >= 3.0 */
+#endif /* ! LIBCPP_SYSTEM_H */
diff --git a/libcpp/traditional.c b/libcpp/traditional.c
new file mode 100644 (file)
index 0000000..6c4dda1
--- /dev/null
@@ -0,0 +1,1169 @@
+/* CPP Library - traditional lexical analysis and macro expansion.
+   Copyright (C) 2002, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+   Contributed by Neil Booth, May 2002
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "cpplib.h"
+#include "internal.h"
+
+/* The replacement text of a function-like macro is stored as a
+   contiguous sequence of aligned blocks, each representing the text
+   between subsequent parameters.
+
+   Each block comprises the text between its surrounding parameters,
+   the length of that text, and the one-based index of the following
+   parameter.  The final block in the replacement text is easily
+   recognizable as it has an argument index of zero.  */
+
+struct block
+{
+  unsigned int text_len;
+  unsigned short arg_index;
+  uchar text[1];
+};
+
+#define BLOCK_HEADER_LEN offsetof (struct block, text)
+#define BLOCK_LEN(TEXT_LEN) CPP_ALIGN (BLOCK_HEADER_LEN + (TEXT_LEN))
+
+/* Structure holding information about a function-like macro
+   invocation.  */
+struct fun_macro
+{
+  /* Memory buffer holding the trad_arg array.  */
+  _cpp_buff *buff;
+
+  /* An array of size the number of macro parameters + 1, containing
+     the offsets of the start of each macro argument in the output
+     buffer.  The argument continues until the character before the
+     start of the next one.  */
+  size_t *args;
+
+  /* The hashnode of the macro.  */
+  cpp_hashnode *node;
+
+  /* The offset of the macro name in the output buffer.  */
+  size_t offset;
+
+  /* The line the macro name appeared on.  */
+  unsigned int line;
+
+  /* Zero-based index of argument being currently lexed.  */
+  unsigned int argc;
+};
+
+/* Lexing state.  It is mostly used to prevent macro expansion.  */
+enum ls {ls_none = 0,          /* Normal state.  */
+        ls_fun_open,           /* When looking for '('.  */
+        ls_fun_close,          /* When looking for ')'.  */
+        ls_defined,            /* After defined.  */
+        ls_defined_close,      /* Looking for ')' of defined().  */
+        ls_hash,               /* After # in preprocessor conditional.  */
+        ls_predicate,          /* After the predicate, maybe paren?  */
+        ls_answer};            /* In answer to predicate.  */
+
+/* Lexing TODO: Maybe handle space in escaped newlines.  Stop lex.c
+   from recognizing comments and directives during its lexing pass.  */
+
+static const uchar *skip_whitespace (cpp_reader *, const uchar *, int);
+static cpp_hashnode *lex_identifier (cpp_reader *, const uchar *);
+static const uchar *copy_comment (cpp_reader *, const uchar *, int);
+static void check_output_buffer (cpp_reader *, size_t);
+static void push_replacement_text (cpp_reader *, cpp_hashnode *);
+static bool scan_parameters (cpp_reader *, cpp_macro *);
+static bool recursive_macro (cpp_reader *, cpp_hashnode *);
+static void save_replacement_text (cpp_reader *, cpp_macro *, unsigned int);
+static void maybe_start_funlike (cpp_reader *, cpp_hashnode *, const uchar *,
+                                struct fun_macro *);
+static void save_argument (struct fun_macro *, size_t);
+static void replace_args_and_push (cpp_reader *, struct fun_macro *);
+static size_t canonicalize_text (uchar *, const uchar *, size_t, uchar *);
+
+/* Ensures we have N bytes' space in the output buffer, and
+   reallocates it if not.  */
+static void
+check_output_buffer (cpp_reader *pfile, size_t n)
+{
+  /* We might need two bytes to terminate an unterminated comment, and
+     one more to terminate the line with a NUL.  */
+  n += 2 + 1;
+
+  if (n > (size_t) (pfile->out.limit - pfile->out.cur))
+    {
+      size_t size = pfile->out.cur - pfile->out.base;
+      size_t new_size = (size + n) * 3 / 2;
+
+      pfile->out.base = XRESIZEVEC (unsigned char, pfile->out.base, new_size);
+      pfile->out.limit = pfile->out.base + new_size;
+      pfile->out.cur = pfile->out.base + size;
+    }
+}
+
+/* Skip a C-style block comment in a macro as a result of -CC.
+   Buffer->cur points to the initial asterisk of the comment.  */
+static void
+skip_macro_block_comment (cpp_reader *pfile)
+{
+  const uchar *cur = pfile->buffer->cur;
+
+  cur++;
+  if (*cur == '/')
+    cur++;
+
+  /* People like decorating comments with '*', so check for '/'
+     instead for efficiency.  */
+  while(! (*cur++ == '/' && cur[-2] == '*') )
+    ;
+
+  pfile->buffer->cur = cur;
+}
+
+/* CUR points to the asterisk introducing a comment in the current
+   context.  IN_DEFINE is true if we are in the replacement text of a
+   macro.
+
+   The asterisk and following comment is copied to the buffer pointed
+   to by pfile->out.cur, which must be of sufficient size.
+   Unterminated comments are diagnosed, and correctly terminated in
+   the output.  pfile->out.cur is updated depending upon IN_DEFINE,
+   -C, -CC and pfile->state.in_directive.
+
+   Returns a pointer to the first character after the comment in the
+   input buffer.  */
+static const uchar *
+copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
+{
+  bool unterminated, copy = false;
+  source_location src_loc = pfile->line_table->highest_line;
+  cpp_buffer *buffer = pfile->buffer;
+
+  buffer->cur = cur;
+  if (pfile->context->prev)
+    unterminated = false, skip_macro_block_comment (pfile);
+  else
+    unterminated = _cpp_skip_block_comment (pfile);
+    
+  if (unterminated)
+    cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
+                        "unterminated comment");
+
+  /* Comments in directives become spaces so that tokens are properly
+     separated when the ISO preprocessor re-lexes the line.  The
+     exception is #define.  */
+  if (pfile->state.in_directive)
+    {
+      if (in_define)
+       {
+         if (CPP_OPTION (pfile, discard_comments_in_macro_exp))
+           pfile->out.cur--;
+         else
+           copy = true;
+       }
+      else
+       pfile->out.cur[-1] = ' ';
+    }
+  else if (CPP_OPTION (pfile, discard_comments))
+    pfile->out.cur--;
+  else
+    copy = true;
+
+  if (copy)
+    {
+      size_t len = (size_t) (buffer->cur - cur);
+      memcpy (pfile->out.cur, cur, len);
+      pfile->out.cur += len;
+      if (unterminated)
+       {
+         *pfile->out.cur++ = '*';
+         *pfile->out.cur++ = '/';
+       }
+    }
+
+  return buffer->cur;
+}
+
+/* CUR points to any character in the input buffer.  Skips over all
+   contiguous horizontal white space and NULs, including comments if
+   SKIP_COMMENTS, until reaching the first non-horizontal-whitespace
+   character or the end of the current context.  Escaped newlines are
+   removed.
+
+   The whitespace is copied verbatim to the output buffer, except that
+   comments are handled as described in copy_comment().
+   pfile->out.cur is updated.
+
+   Returns a pointer to the first character after the whitespace in
+   the input buffer.  */
+static const uchar *
+skip_whitespace (cpp_reader *pfile, const uchar *cur, int skip_comments)
+{
+  uchar *out = pfile->out.cur;
+
+  for (;;)
+    {
+      unsigned int c = *cur++;
+      *out++ = c;
+
+      if (is_nvspace (c))
+       continue;
+
+      if (c == '/' && *cur == '*' && skip_comments)
+       {
+         pfile->out.cur = out;
+         cur = copy_comment (pfile, cur, false /* in_define */);
+         out = pfile->out.cur;
+         continue;
+       }
+
+      out--;
+      break;
+    }
+
+  pfile->out.cur = out;
+  return cur - 1;
+}
+
+/* Lexes and outputs an identifier starting at CUR, which is assumed
+   to point to a valid first character of an identifier.  Returns
+   the hashnode, and updates out.cur.  */
+static cpp_hashnode *
+lex_identifier (cpp_reader *pfile, const uchar *cur)
+{
+  size_t len;
+  uchar *out = pfile->out.cur;
+  cpp_hashnode *result;
+
+  do
+    *out++ = *cur++;
+  while (is_numchar (*cur));
+
+  CUR (pfile->context) = cur;
+  len = out - pfile->out.cur;
+  result = (cpp_hashnode *) ht_lookup (pfile->hash_table, pfile->out.cur,
+                                      len, HT_ALLOC);
+  pfile->out.cur = out;
+  return result;
+}
+
+/* Overlays the true file buffer temporarily with text of length LEN
+   starting at START.  The true buffer is restored upon calling
+   restore_buff().  */
+void
+_cpp_overlay_buffer (cpp_reader *pfile, const uchar *start, size_t len)
+{
+  cpp_buffer *buffer = pfile->buffer;
+
+  pfile->overlaid_buffer = buffer;
+  pfile->saved_cur = buffer->cur;
+  pfile->saved_rlimit = buffer->rlimit;
+  pfile->saved_line_base = buffer->next_line;
+  buffer->need_line = false;
+
+  buffer->cur = start;
+  buffer->line_base = start;
+  buffer->rlimit = start + len;
+}
+
+/* Restores a buffer overlaid by _cpp_overlay_buffer().  */
+void
+_cpp_remove_overlay (cpp_reader *pfile)
+{
+  cpp_buffer *buffer = pfile->overlaid_buffer;
+
+  buffer->cur = pfile->saved_cur;
+  buffer->rlimit = pfile->saved_rlimit;
+  buffer->line_base = pfile->saved_line_base;
+  buffer->need_line = true;
+
+  pfile->overlaid_buffer = NULL;
+}
+
+/* Reads a logical line into the output buffer.  Returns TRUE if there
+   is more text left in the buffer.  */
+bool
+_cpp_read_logical_line_trad (cpp_reader *pfile)
+{
+  do
+    {
+      if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
+       return false;
+    }
+  while (!_cpp_scan_out_logical_line (pfile, NULL) || pfile->state.skipping);
+
+  return pfile->buffer != NULL;
+}
+
+/* Set up state for finding the opening '(' of a function-like
+   macro.  */
+static void
+maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start, struct fun_macro *macro)
+{
+  unsigned int n = node->value.macro->paramc + 1;
+
+  if (macro->buff)
+    _cpp_release_buff (pfile, macro->buff);
+  macro->buff = _cpp_get_buff (pfile, n * sizeof (size_t));
+  macro->args = (size_t *) BUFF_FRONT (macro->buff);
+  macro->node = node;
+  macro->offset = start - pfile->out.base;
+  macro->argc = 0;
+}
+
+/* Save the OFFSET of the start of the next argument to MACRO.  */
+static void
+save_argument (struct fun_macro *macro, size_t offset)
+{
+  macro->argc++;
+  if (macro->argc <= macro->node->value.macro->paramc)
+    macro->args[macro->argc] = offset;
+}
+
+/* Copies the next logical line in the current buffer (starting at
+   buffer->cur) to the output buffer.  The output is guaranteed to
+   terminate with a NUL character.  buffer->cur is updated.
+
+   If MACRO is non-NULL, then we are scanning the replacement list of
+   MACRO, and we call save_replacement_text() every time we meet an
+   argument.  */
+bool
+_cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro)
+{
+  bool result = true;
+  cpp_context *context;
+  const uchar *cur;
+  uchar *out;
+  struct fun_macro fmacro;
+  unsigned int c, paren_depth = 0, quote;
+  enum ls lex_state = ls_none;
+  bool header_ok;
+  const uchar *start_of_input_line;
+
+  fmacro.buff = NULL;
+  fmacro.args = NULL;
+  fmacro.node = NULL;
+  fmacro.offset = 0;
+  fmacro.line = 0;
+  fmacro.argc = 0;
+
+  quote = 0;
+  header_ok = pfile->state.angled_headers;
+  CUR (pfile->context) = pfile->buffer->cur;
+  RLIMIT (pfile->context) = pfile->buffer->rlimit;
+  pfile->out.cur = pfile->out.base;
+  pfile->out.first_line = pfile->line_table->highest_line;
+  /* start_of_input_line is needed to make sure that directives really,
+     really start at the first character of the line.  */
+  start_of_input_line = pfile->buffer->cur;
+ new_context:
+  context = pfile->context;
+  cur = CUR (context);
+  check_output_buffer (pfile, RLIMIT (context) - cur);
+  out = pfile->out.cur;
+
+  for (;;)
+    {
+      if (!context->prev
+         && cur >= pfile->buffer->notes[pfile->buffer->cur_note].pos)
+       {
+         pfile->buffer->cur = cur;
+         _cpp_process_line_notes (pfile, false);
+       }
+      c = *cur++;
+      *out++ = c;
+
+      /* Whitespace should "continue" out of the switch,
+        non-whitespace should "break" out of it.  */
+      switch (c)
+       {
+       case ' ':
+       case '\t':
+       case '\f':
+       case '\v':
+       case '\0':
+         continue;
+
+       case '\n':
+         /* If this is a macro's expansion, pop it.  */
+         if (context->prev)
+           {
+             pfile->out.cur = out - 1;
+             _cpp_pop_context (pfile);
+             goto new_context;
+           }
+
+         /* Omit the newline from the output buffer.  */
+         pfile->out.cur = out - 1;
+         pfile->buffer->cur = cur;
+         pfile->buffer->need_line = true;
+         CPP_INCREMENT_LINE (pfile, 0);
+
+         if ((lex_state == ls_fun_open || lex_state == ls_fun_close)
+             && !pfile->state.in_directive
+             && _cpp_get_fresh_line (pfile))
+           {
+             /* Newlines in arguments become a space, but we don't
+                clear any in-progress quote.  */
+             if (lex_state == ls_fun_close)
+               out[-1] = ' ';
+             cur = pfile->buffer->cur;
+             continue;
+           }
+         goto done;
+
+       case '<':
+         if (header_ok)
+           quote = '>';
+         break;
+       case '>':
+         if (c == quote)
+           quote = 0;
+         break;
+
+       case '"':
+       case '\'':
+         if (c == quote)
+           quote = 0;
+         else if (!quote)
+           quote = c;
+         break;
+
+       case '\\':
+         /* Skip escaped quotes here, it's easier than above.  */
+         if (*cur == '\\' || *cur == '"' || *cur == '\'')
+           *out++ = *cur++;
+         break;
+
+       case '/':
+         /* Traditional CPP does not recognize comments within
+            literals.  */
+         if (!quote && *cur == '*')
+           {
+             pfile->out.cur = out;
+             cur = copy_comment (pfile, cur, macro != 0);
+             out = pfile->out.cur;
+             continue;
+           }
+         break;
+
+       case '_':
+       case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+       case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+       case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+       case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+       case 'y': case 'z':
+       case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+       case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+       case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+       case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+       case 'Y': case 'Z':
+         if (!pfile->state.skipping && (quote == 0 || macro))
+           {
+             cpp_hashnode *node;
+             uchar *out_start = out - 1;
+
+             pfile->out.cur = out_start;
+             node = lex_identifier (pfile, cur - 1);
+             out = pfile->out.cur;
+             cur = CUR (context);
+
+             if (node->type == NT_MACRO
+                 /* Should we expand for ls_answer?  */
+                 && (lex_state == ls_none || lex_state == ls_fun_open)
+                 && !pfile->state.prevent_expansion)
+               {
+                 /* Macros invalidate MI optimization.  */
+                 pfile->mi_valid = false;
+                 if (! (node->flags & NODE_BUILTIN)
+                     && node->value.macro->fun_like)
+                   {
+                     maybe_start_funlike (pfile, node, out_start, &fmacro);
+                     lex_state = ls_fun_open;
+                     fmacro.line = pfile->line_table->highest_line;
+                     continue;
+                   }
+                 else if (!recursive_macro (pfile, node))
+                   {
+                     /* Remove the object-like macro's name from the
+                        output, and push its replacement text.  */
+                     pfile->out.cur = out_start;
+                     push_replacement_text (pfile, node);
+                     lex_state = ls_none;
+                     goto new_context;
+                   }
+               }
+             else if (macro && (node->flags & NODE_MACRO_ARG) != 0)
+               {
+                 /* Found a parameter in the replacement text of a
+                    #define.  Remove its name from the output.  */
+                 pfile->out.cur = out_start;
+                 save_replacement_text (pfile, macro, node->value.arg_index);
+                 out = pfile->out.base;
+               }
+             else if (lex_state == ls_hash)
+               {
+                 lex_state = ls_predicate;
+                 continue;
+               }
+             else if (pfile->state.in_expression
+                      && node == pfile->spec_nodes.n_defined)
+               {
+                 lex_state = ls_defined;
+                 continue;
+               }
+           }
+         break;
+
+       case '(':
+         if (quote == 0)
+           {
+             paren_depth++;
+             if (lex_state == ls_fun_open)
+               {
+                 if (recursive_macro (pfile, fmacro.node))
+                   lex_state = ls_none;
+                 else
+                   {
+                     lex_state = ls_fun_close;
+                     paren_depth = 1;
+                     out = pfile->out.base + fmacro.offset;
+                     fmacro.args[0] = fmacro.offset;
+                   }
+               }
+             else if (lex_state == ls_predicate)
+               lex_state = ls_answer;
+             else if (lex_state == ls_defined)
+               lex_state = ls_defined_close;
+           }
+         break;
+
+       case ',':
+         if (quote == 0 && lex_state == ls_fun_close && paren_depth == 1)
+           save_argument (&fmacro, out - pfile->out.base);
+         break;
+
+       case ')':
+         if (quote == 0)
+           {
+             paren_depth--;
+             if (lex_state == ls_fun_close && paren_depth == 0)
+               {
+                 cpp_macro *m = fmacro.node->value.macro;
+
+                 m->used = 1;
+                 lex_state = ls_none;
+                 save_argument (&fmacro, out - pfile->out.base);
+
+                 /* A single zero-length argument is no argument.  */
+                 if (fmacro.argc == 1
+                     && m->paramc == 0
+                     && out == pfile->out.base + fmacro.offset + 1)
+                   fmacro.argc = 0;
+
+                 if (_cpp_arguments_ok (pfile, m, fmacro.node, fmacro.argc))
+                   {
+                     /* Remove the macro's invocation from the
+                        output, and push its replacement text.  */
+                     pfile->out.cur = (pfile->out.base
+                                            + fmacro.offset);
+                     CUR (context) = cur;
+                     replace_args_and_push (pfile, &fmacro);
+                     goto new_context;
+                   }
+               }
+             else if (lex_state == ls_answer || lex_state == ls_defined_close)
+               lex_state = ls_none;
+           }
+         break;
+
+       case '#':
+         if (cur - 1 == start_of_input_line
+             /* A '#' from a macro doesn't start a directive.  */
+             && !pfile->context->prev
+             && !pfile->state.in_directive)
+           {
+             /* A directive.  With the way _cpp_handle_directive
+                currently works, we only want to call it if either we
+                know the directive is OK, or we want it to fail and
+                be removed from the output.  If we want it to be
+                passed through (the assembler case) then we must not
+                call _cpp_handle_directive.  */
+             pfile->out.cur = out;
+             cur = skip_whitespace (pfile, cur, true /* skip_comments */);
+             out = pfile->out.cur;
+
+             if (*cur == '\n')
+               {
+                 /* Null directive.  Ignore it and don't invalidate
+                    the MI optimization.  */
+                 pfile->buffer->need_line = true;
+                 CPP_INCREMENT_LINE (pfile, 0);
+                 result = false;
+                 goto done;
+               }
+             else
+               {
+                 bool do_it = false;
+
+                 if (is_numstart (*cur)
+                     && CPP_OPTION (pfile, lang) != CLK_ASM)
+                   do_it = true;
+                 else if (is_idstart (*cur))
+                   /* Check whether we know this directive, but don't
+                      advance.  */
+                   do_it = lex_identifier (pfile, cur)->is_directive;
+
+                 if (do_it || CPP_OPTION (pfile, lang) != CLK_ASM)
+                   {
+                     /* This is a kludge.  We want to have the ISO
+                        preprocessor lex the next token.  */
+                     pfile->buffer->cur = cur;
+                     _cpp_handle_directive (pfile, false /* indented */);
+                     result = false;
+                     goto done;
+                   }
+               }
+           }
+
+         if (pfile->state.in_expression)
+           {
+             lex_state = ls_hash;
+             continue;
+           }
+         break;
+
+       default:
+         break;
+       }
+
+      /* Non-whitespace disables MI optimization and stops treating
+        '<' as a quote in #include.  */
+      header_ok = false;
+      if (!pfile->state.in_directive)
+       pfile->mi_valid = false;
+
+      if (lex_state == ls_none)
+       continue;
+
+      /* Some of these transitions of state are syntax errors.  The
+        ISO preprocessor will issue errors later.  */
+      if (lex_state == ls_fun_open)
+       /* Missing '('.  */
+       lex_state = ls_none;
+      else if (lex_state == ls_hash
+              || lex_state == ls_predicate
+              || lex_state == ls_defined)
+       lex_state = ls_none;
+
+      /* ls_answer and ls_defined_close keep going until ')'.  */
+    }
+
+ done:
+  if (fmacro.buff)
+    _cpp_release_buff (pfile, fmacro.buff);
+
+  if (lex_state == ls_fun_close)
+    cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0,
+                        "unterminated argument list invoking macro \"%s\"",
+                        NODE_NAME (fmacro.node));
+  return result;
+}
+
+/* Push a context holding the replacement text of the macro NODE on
+   the context stack.  NODE is either object-like, or a function-like
+   macro with no arguments.  */
+static void
+push_replacement_text (cpp_reader *pfile, cpp_hashnode *node)
+{
+  size_t len;
+  const uchar *text;
+  uchar *buf;
+
+  if (node->flags & NODE_BUILTIN)
+    {
+      text = _cpp_builtin_macro_text (pfile, node);
+      len = ustrlen (text);
+      buf = _cpp_unaligned_alloc (pfile, len + 1);
+      memcpy (buf, text, len);
+      buf[len]='\n';
+      text = buf;
+    }
+  else
+    {
+      cpp_macro *macro = node->value.macro;
+      macro->used = 1;
+      text = macro->exp.text;
+      macro->traditional = 1;
+      len = macro->count;
+    }
+
+  _cpp_push_text_context (pfile, node, text, len);
+}
+
+/* Returns TRUE if traditional macro recursion is detected.  */
+static bool
+recursive_macro (cpp_reader *pfile, cpp_hashnode *node)
+{
+  bool recursing = !!(node->flags & NODE_DISABLED);
+
+  /* Object-like macros that are already expanding are necessarily
+     recursive.
+
+     However, it is possible to have traditional function-like macros
+     that are not infinitely recursive but recurse to any given depth.
+     Further, it is easy to construct examples that get ever longer
+     until the point they stop recursing.  So there is no easy way to
+     detect true recursion; instead we assume any expansion more than
+     20 deep since the first invocation of this macro must be
+     recursing.  */
+  if (recursing && node->value.macro->fun_like)
+    {
+      size_t depth = 0;
+      cpp_context *context = pfile->context;
+
+      do
+       {
+         depth++;
+         if (context->macro == node && depth > 20)
+           break;
+         context = context->prev;
+       }
+      while (context);
+      recursing = context != NULL;
+    }
+
+  if (recursing)
+    cpp_error (pfile, CPP_DL_ERROR,
+              "detected recursion whilst expanding macro \"%s\"",
+              NODE_NAME (node));
+
+  return recursing;
+}
+
+/* Return the length of the replacement text of a function-like or
+   object-like non-builtin macro.  */
+size_t
+_cpp_replacement_text_len (const cpp_macro *macro)
+{
+  size_t len;
+
+  if (macro->fun_like && (macro->paramc != 0))
+    {
+      const uchar *exp;
+
+      len = 0;
+      for (exp = macro->exp.text;;)
+       {
+         struct block *b = (struct block *) exp;
+
+         len += b->text_len;
+         if (b->arg_index == 0)
+           break;
+         len += NODE_LEN (macro->params[b->arg_index - 1]);
+         exp += BLOCK_LEN (b->text_len);
+       }
+    }
+  else
+    len = macro->count;
+  
+  return len;
+}
+
+/* Copy the replacement text of MACRO to DEST, which must be of
+   sufficient size.  It is not NUL-terminated.  The next character is
+   returned.  */
+uchar *
+_cpp_copy_replacement_text (const cpp_macro *macro, uchar *dest)
+{
+  if (macro->fun_like && (macro->paramc != 0))
+    {
+      const uchar *exp;
+
+      for (exp = macro->exp.text;;)
+       {
+         struct block *b = (struct block *) exp;
+         cpp_hashnode *param;
+
+         memcpy (dest, b->text, b->text_len);
+         dest += b->text_len;
+         if (b->arg_index == 0)
+           break;
+         param = macro->params[b->arg_index - 1];
+         memcpy (dest, NODE_NAME (param), NODE_LEN (param));
+         dest += NODE_LEN (param);
+         exp += BLOCK_LEN (b->text_len);
+       }
+    }
+  else
+    {
+      memcpy (dest, macro->exp.text, macro->count);
+      dest += macro->count;
+    }
+
+  return dest;
+}
+
+/* Push a context holding the replacement text of the macro NODE on
+   the context stack.  NODE is either object-like, or a function-like
+   macro with no arguments.  */
+static void
+replace_args_and_push (cpp_reader *pfile, struct fun_macro *fmacro)
+{
+  cpp_macro *macro = fmacro->node->value.macro;
+
+  if (macro->paramc == 0)
+    push_replacement_text (pfile, fmacro->node);
+  else
+    {
+      const uchar *exp;
+      uchar *p;
+      _cpp_buff *buff;
+      size_t len = 0;
+      int cxtquote = 0;
+
+      /* Get an estimate of the length of the argument-replaced text.
+        This is a worst case estimate, assuming that every replacement
+        text character needs quoting.  */
+      for (exp = macro->exp.text;;)
+       {
+         struct block *b = (struct block *) exp;
+
+         len += b->text_len;
+         if (b->arg_index == 0)
+           break;
+         len += 2 * (fmacro->args[b->arg_index]
+                     - fmacro->args[b->arg_index - 1] - 1);
+         exp += BLOCK_LEN (b->text_len);
+       }
+
+      /* Allocate room for the expansion plus \n.  */
+      buff = _cpp_get_buff (pfile, len + 1);
+
+      /* Copy the expansion and replace arguments.  */
+      /* Accumulate actual length, including quoting as necessary */
+      p = BUFF_FRONT (buff);
+      len = 0;
+      for (exp = macro->exp.text;;)
+       {
+         struct block *b = (struct block *) exp;
+         size_t arglen;
+         int argquote;
+         uchar *base;
+         uchar *in;
+
+         len += b->text_len;
+         /* Copy the non-argument text literally, keeping
+            track of whether matching quotes have been seen. */
+         for (arglen = b->text_len, in = b->text; arglen > 0; arglen--)
+           {
+             if (*in == '"')
+               cxtquote = ! cxtquote;
+             *p++ = *in++;
+           }
+         /* Done if no more arguments */
+         if (b->arg_index == 0)
+           break;
+         arglen = (fmacro->args[b->arg_index]
+                   - fmacro->args[b->arg_index - 1] - 1);
+         base = pfile->out.base + fmacro->args[b->arg_index - 1];
+         in = base;
+#if 0
+         /* Skip leading whitespace in the text for the argument to
+            be substituted. To be compatible with gcc 2.95, we would
+            also need to trim trailing whitespace. Gcc 2.95 trims
+            leading and trailing whitespace, which may be a bug.  The
+            current gcc testsuite explicitly checks that this leading
+            and trailing whitespace in actual arguments is
+            preserved. */
+         while (arglen > 0 && is_space (*in))
+           {
+             in++;
+             arglen--;
+           }
+#endif
+         for (argquote = 0; arglen > 0; arglen--)
+           {
+             if (cxtquote && *in == '"')
+               {
+                 if (in > base && *(in-1) != '\\')
+                   argquote = ! argquote;
+                 /* Always add backslash before double quote if argument
+                    is expanded in a quoted context */
+                 *p++ = '\\';
+                 len++;
+               }
+             else if (cxtquote && argquote && *in == '\\')
+               {
+                 /* Always add backslash before a backslash in an argument
+                    that is expanded in a quoted context and also in the
+                    range of a quoted context in the argument itself. */
+                 *p++ = '\\';
+                 len++;
+               }
+             *p++ = *in++;
+             len++;
+           }
+         exp += BLOCK_LEN (b->text_len);
+       }
+
+      /* \n-terminate.  */
+      *p = '\n';
+      _cpp_push_text_context (pfile, fmacro->node, BUFF_FRONT (buff), len);
+
+      /* So we free buffer allocation when macro is left.  */
+      pfile->context->buff = buff;
+    }
+}
+
+/* Read and record the parameters, if any, of a function-like macro
+   definition.  Destroys pfile->out.cur.
+
+   Returns true on success, false on failure (syntax error or a
+   duplicate parameter).  On success, CUR (pfile->context) is just
+   past the closing parenthesis.  */
+static bool
+scan_parameters (cpp_reader *pfile, cpp_macro *macro)
+{
+  const uchar *cur = CUR (pfile->context) + 1;
+  bool ok;
+
+  for (;;)
+    {
+      cur = skip_whitespace (pfile, cur, true /* skip_comments */);
+
+      if (is_idstart (*cur))
+       {
+         ok = false;
+         if (_cpp_save_parameter (pfile, macro, lex_identifier (pfile, cur)))
+           break;
+         cur = skip_whitespace (pfile, CUR (pfile->context),
+                                true /* skip_comments */);
+         if (*cur == ',')
+           {
+             cur++;
+             continue;
+           }
+         ok = (*cur == ')');
+         break;
+       }
+
+      ok = (*cur == ')' && macro->paramc == 0);
+      break;
+    }
+
+  if (!ok)
+    cpp_error (pfile, CPP_DL_ERROR, "syntax error in macro parameter list");
+
+  CUR (pfile->context) = cur + (*cur == ')');
+
+  return ok;
+}
+
+/* Save the text from pfile->out.base to pfile->out.cur as
+   the replacement text for the current macro, followed by argument
+   ARG_INDEX, with zero indicating the end of the replacement
+   text.  */
+static void
+save_replacement_text (cpp_reader *pfile, cpp_macro *macro,
+                      unsigned int arg_index)
+{
+  size_t len = pfile->out.cur - pfile->out.base;
+  uchar *exp;
+
+  if (macro->paramc == 0)
+    {
+      /* Object-like and function-like macros without parameters
+        simply store their \n-terminated replacement text.  */
+      exp = _cpp_unaligned_alloc (pfile, len + 1);
+      memcpy (exp, pfile->out.base, len);
+      exp[len] = '\n';
+      macro->exp.text = exp;
+      macro->traditional = 1;
+      macro->count = len;
+    }
+  else
+    {
+      /* Store the text's length (unsigned int), the argument index
+        (unsigned short, base 1) and then the text.  */
+      size_t blen = BLOCK_LEN (len);
+      struct block *block;
+
+      if (macro->count + blen > BUFF_ROOM (pfile->a_buff))
+       _cpp_extend_buff (pfile, &pfile->a_buff, macro->count + blen);
+
+      exp = BUFF_FRONT (pfile->a_buff);
+      block = (struct block *) (exp + macro->count);
+      macro->exp.text = exp;
+      macro->traditional = 1;
+
+      /* Write out the block information.  */
+      block->text_len = len;
+      block->arg_index = arg_index;
+      memcpy (block->text, pfile->out.base, len);
+
+      /* Lex the rest into the start of the output buffer.  */
+      pfile->out.cur = pfile->out.base;
+
+      macro->count += blen;
+
+      /* If we've finished, commit the memory.  */
+      if (arg_index == 0)
+       BUFF_FRONT (pfile->a_buff) += macro->count;
+    }
+}
+
+/* Analyze and save the replacement text of a macro.  Returns true on
+   success.  */
+bool
+_cpp_create_trad_definition (cpp_reader *pfile, cpp_macro *macro)
+{
+  const uchar *cur;
+  uchar *limit;
+  cpp_context *context = pfile->context;
+
+  /* The context has not been set up for command line defines, and CUR
+     has not been updated for the macro name for in-file defines.  */
+  pfile->out.cur = pfile->out.base;
+  CUR (context) = pfile->buffer->cur;
+  RLIMIT (context) = pfile->buffer->rlimit;
+  check_output_buffer (pfile, RLIMIT (context) - CUR (context));
+
+  /* Is this a function-like macro?  */
+  if (* CUR (context) == '(')
+    {
+      bool ok = scan_parameters (pfile, macro);
+
+      /* Remember the params so we can clear NODE_MACRO_ARG flags.  */
+      macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
+
+      /* Setting macro to NULL indicates an error occurred, and
+        prevents unnecessary work in _cpp_scan_out_logical_line.  */
+      if (!ok)
+       macro = NULL;
+      else
+       {
+         BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
+         macro->fun_like = 1;
+       }
+    }
+
+  /* Skip leading whitespace in the replacement text.  */
+  pfile->buffer->cur
+    = skip_whitespace (pfile, CUR (context),
+                      CPP_OPTION (pfile, discard_comments_in_macro_exp));
+
+  pfile->state.prevent_expansion++;
+  _cpp_scan_out_logical_line (pfile, macro);
+  pfile->state.prevent_expansion--;
+
+  if (!macro)
+    return false;
+
+  /* Skip trailing white space.  */
+  cur = pfile->out.base;
+  limit = pfile->out.cur;
+  while (limit > cur && is_space (limit[-1]))
+    limit--;
+  pfile->out.cur = limit;
+  save_replacement_text (pfile, macro, 0);
+
+  return true;
+}
+
+/* Copy SRC of length LEN to DEST, but convert all contiguous
+   whitespace to a single space, provided it is not in quotes.  The
+   quote currently in effect is pointed to by PQUOTE, and is updated
+   by the function.  Returns the number of bytes copied.  */
+static size_t
+canonicalize_text (uchar *dest, const uchar *src, size_t len, uchar *pquote)
+{
+  uchar *orig_dest = dest;
+  uchar quote = *pquote;
+
+  while (len)
+    {
+      if (is_space (*src) && !quote)
+       {
+         do
+           src++, len--;
+         while (len && is_space (*src));
+         *dest++ = ' ';
+       }
+      else
+       {
+         if (*src == '\'' || *src == '"')
+           {
+             if (!quote)
+               quote = *src;
+             else if (quote == *src)
+               quote = 0;
+           }
+         *dest++ = *src++, len--;
+       }
+    }
+
+  *pquote = quote;
+  return dest - orig_dest;
+}
+
+/* Returns true if MACRO1 and MACRO2 have expansions different other
+   than in the form of their whitespace.  */
+bool
+_cpp_expansions_different_trad (const cpp_macro *macro1,
+                               const cpp_macro *macro2)
+{
+  uchar *p1 = XNEWVEC (uchar, macro1->count + macro2->count);
+  uchar *p2 = p1 + macro1->count;
+  uchar quote1 = 0, quote2 = 0;
+  bool mismatch;
+  size_t len1, len2;
+
+  if (macro1->paramc > 0)
+    {
+      const uchar *exp1 = macro1->exp.text, *exp2 = macro2->exp.text;
+
+      mismatch = true;
+      for (;;)
+       {
+         struct block *b1 = (struct block *) exp1;
+         struct block *b2 = (struct block *) exp2;
+
+         if (b1->arg_index != b2->arg_index)
+           break;
+
+         len1 = canonicalize_text (p1, b1->text, b1->text_len, &quote1);
+         len2 = canonicalize_text (p2, b2->text, b2->text_len, &quote2);
+         if (len1 != len2 || memcmp (p1, p2, len1))
+           break;
+         if (b1->arg_index == 0)
+           {
+             mismatch = false;
+             break;
+           }
+         exp1 += BLOCK_LEN (b1->text_len);
+         exp2 += BLOCK_LEN (b2->text_len);
+       }
+    }
+  else
+    {
+      len1 = canonicalize_text (p1, macro1->exp.text, macro1->count, &quote1);
+      len2 = canonicalize_text (p2, macro2->exp.text, macro2->count, &quote2);
+      mismatch = (len1 != len2 || memcmp (p1, p2, len1));
+    }
+
+  free (p1);
+  return mismatch;
+}
diff --git a/libcpp/ucnid.h b/libcpp/ucnid.h
new file mode 100644 (file)
index 0000000..7323dcc
--- /dev/null
@@ -0,0 +1,801 @@
+/* Unicode characters and various properties.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+   Copyright (C) 1991-2005 Unicode, Inc.  All rights reserved.
+   Distributed under the Terms of Use in
+   http://www.unicode.org/copyright.html.
+
+   Permission is hereby granted, free of charge, to any person
+   obtaining a copy of the Unicode data files and any associated
+   documentation (the "Data Files") or Unicode software and any
+   associated documentation (the "Software") to deal in the Data Files
+   or Software without restriction, including without limitation the
+   rights to use, copy, modify, merge, publish, distribute, and/or
+   sell copies of the Data Files or Software, and to permit persons to
+   whom the Data Files or Software are furnished to do so, provided
+   that (a) the above copyright notice(s) and this permission notice
+   appear with all copies of the Data Files or Software, (b) both the
+   above copyright notice(s) and this permission notice appear in
+   associated documentation, and (c) there is clear notice in each
+   modified Data File or in the Software as well as in the
+   documentation associated with the Data File(s) or Software that the
+   data or software has been modified.
+
+   THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY
+   OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+   COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+   ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+   WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+   ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+   OF THE DATA FILES OR SOFTWARE.
+
+   Except as contained in this notice, the name of a copyright holder
+   shall not be used in advertising or otherwise to promote the sale,
+   use or other dealings in these Data Files or Software without prior
+   written authorization of the copyright holder.  */
+
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00a9 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x00aa },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00b4 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x00b5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00b6 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x00b7 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x00b9 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x00ba },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00bf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x00d6 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00d7 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x00f6 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x00f7 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0131 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0133 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x013e },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0140 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0148 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0149 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x017e },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x017f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x01c3 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x01cc },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x01f0 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x01f3 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x01f5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x01f9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0217 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x024f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x02a8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x02af },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x02b8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x02ba },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x02bb },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x02bc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x02c1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x02cf },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x02d1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x02df },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x02e4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0379 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x037a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0383 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0x0384 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x0385 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0386 },
+{   0|  0|  0|CID|  0|  0|  0,   0, 0x0387 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x038a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x038b },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x038c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x038d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03a1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03a2 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03ce },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03cf },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x03d6 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03d9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03da },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03db },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03dc },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03dd },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03de },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03df },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03e0 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x03e1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03ef },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x03f2 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x03f3 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x0400 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x040c },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x040d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x040e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x044f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0450 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x045c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x045d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0481 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x048f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04c4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x04c6 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04c8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x04ca },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04cc },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x04cf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04eb },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x04ed },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04f5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x04f7 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x04f9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0530 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0556 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0558 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0559 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0560 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0586 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0587 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05af },
+{ C99|  0|  0|CID|NFC|NKC|  0,  10, 0x05b0 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  11, 0x05b1 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  12, 0x05b2 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  13, 0x05b3 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  14, 0x05b4 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  15, 0x05b5 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  16, 0x05b6 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  17, 0x05b7 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  18, 0x05b8 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  19, 0x05b9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05ba },
+{ C99|  0|  0|CID|NFC|NKC|  0,  20, 0x05bb },
+{ C99|  0|  0|CID|NFC|NKC|  0,  21, 0x05bc },
+{ C99|  0|  0|CID|NFC|NKC|  0,  22, 0x05bd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05be },
+{ C99|  0|  0|CID|NFC|NKC|  0,  23, 0x05bf },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05c0 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  24, 0x05c1 },
+{ C99|  0|  0|CID|NFC|NKC|  0,  25, 0x05c2 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05cf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x05ea },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x05ef },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x05f2 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x05f4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0620 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x063a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x063f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x064a },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  27, 0x064b },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  28, 0x064c },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  29, 0x064d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  30, 0x064e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  31, 0x064f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  32, 0x0650 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  33, 0x0651 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,  34, 0x0652 },
+{   0|  0|  0|CID|NFC|NKC|CTX,   0, 0x065f },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0669 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x066f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0674 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0678 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x06b7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06b9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x06be },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06bf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x06ce },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06cf },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x06d5 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06d6 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06d7 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06d8 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06d9 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06da },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06db },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06dc },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06e4 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x06e6 },
+{ C99|  0|CXX|CID|NFC|NKC|  0, 230, 0x06e7 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06e8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06e9 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x06ea },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06eb },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x06ec },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x06ed },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x06ef },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x06f9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0900 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0903 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0904 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0939 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x093c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x094c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x094d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x094f },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0950 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x0951 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x0952 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0957 },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x095f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0962 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0963 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0965 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x096f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0980 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0983 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0984 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x098c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x098e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0990 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0992 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09a8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09a9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09b0 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09b1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09b2 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09b5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09b9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09bd },
+{ C99|  0|  0|CID|NFC|NKC|CTX,   0, 0x09be },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x09c4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09c6 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x09c8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09ca },
+{ C99|  0|  0|  0|NFC|NKC|  0,   0, 0x09cb },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x09cc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x09cd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09db },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x09dd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09de },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x09df },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09e1 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x09e3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x09e5 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x09ef },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x09f1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a01 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a02 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a04 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a0a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a0e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a10 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a12 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a28 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a29 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a30 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a31 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a32 },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x0a33 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a34 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a35 },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x0a36 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a37 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a39 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a3d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a42 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a46 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a48 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a4a },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a4c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0a4d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a58 },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x0a5b },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a5c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a5d },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x0a5e },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a65 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0a6f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a73 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a74 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a80 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0a83 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a84 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a8b },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a8c },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a8d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a8e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0a91 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0a92 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0aa8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0aa9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ab0 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ab1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ab3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ab4 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ab9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0abc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ac5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ac6 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ac9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0aca },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0acc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0acd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0acf },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ad0 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0adf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ae0 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ae5 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0aef },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b00 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b03 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b04 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b0c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b0e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b10 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b12 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b28 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b29 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b30 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b31 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b33 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b35 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b39 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b3c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b3d },
+{ C99|  0|  0|CID|NFC|NKC|CTX,   0, 0x0b3e },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b43 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b46 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b48 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b4a },
+{ C99|  0|  0|  0|NFC|NKC|  0,   0, 0x0b4b },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b4c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0b4d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b5b },
+{ C99|  0|CXX|CID|  0|  0|  0,   0, 0x0b5d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b5e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b61 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b65 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0b6f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b81 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0b83 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b84 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b8a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b8d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b90 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b91 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b95 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b98 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b9a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b9b },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b9c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0b9d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0b9f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ba2 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ba4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ba7 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0baa },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0bad },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0bb5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0bb6 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0bb9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0bbd },
+{ C99|  0|  0|CID|NFC|NKC|CTX,   0, 0x0bbe },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0bc2 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0bc5 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0bc8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0bc9 },
+{ C99|  0|  0|  0|NFC|NKC|  0,   0, 0x0bcb },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0bcc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0bcd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0be6 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0bef },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c00 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0c03 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c04 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c0c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c0d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c10 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c11 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c28 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c29 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c33 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c34 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c39 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c3d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0c44 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c45 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0c48 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c49 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0c4c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0c4d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c5f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c61 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c65 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0c6f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c81 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0c83 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c84 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c8c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c8d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0c90 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0c91 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ca8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ca9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0cb3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cb4 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0cb9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cbd },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0cc1 },
+{ C99|  0|  0|CID|NFC|NKC|CTX,   0, 0x0cc2 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0cc4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cc5 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0cc8 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cc9 },
+{ C99|  0|  0|  0|NFC|NKC|  0,   0, 0x0cca },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ccc },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0ccd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cdd },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0cde },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0cdf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ce1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ce5 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0cef },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d01 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0d03 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d04 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0d0c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d0d },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0d10 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d11 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0d28 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d29 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0d39 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d3d },
+{ C99|  0|  0|CID|NFC|NKC|CTX,   0, 0x0d3e },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0d43 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d45 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0d48 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d49 },
+{ C99|  0|  0|  0|NFC|NKC|  0,   0, 0x0d4b },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0d4c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0d4d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d5f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0d61 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0d65 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0d6f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e00 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e30 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0e31 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e32 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0e33 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0e37 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 103, 0x0e38 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 103, 0x0e39 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0e3a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e3f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e46 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0e47 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 107, 0x0e48 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 107, 0x0e49 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e4e },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e4f },
+{ C99|DIG|CXX|CID|NFC|NKC|  0,   0, 0x0e59 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e5b },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e80 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e82 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e83 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e84 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e86 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e88 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e89 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e8a },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e8c },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e8d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e93 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e97 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0e98 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0e9f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ea0 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ea3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ea4 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ea5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ea6 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ea7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ea9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0eab },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0eac },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0eae },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x0eaf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0eb0 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0eb1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0eb2 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x0eb3 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0eb7 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 118, 0x0eb8 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 118, 0x0eb9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0eba },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ebc },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ebd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ebf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ec4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ec5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x0ec6 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ec7 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 122, 0x0ec8 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 122, 0x0ec9 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 122, 0x0eca },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0ecd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0ecf },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0ed9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0edb },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x0edd },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0eff },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f00 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f17 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x0f18 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x0f19 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f1f },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x0f33 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f34 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x0f35 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f36 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 220, 0x0f37 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f38 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 216, 0x0f39 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f3d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f42 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f43 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f47 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f48 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f4c },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f4d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f51 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f52 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f56 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f57 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f5b },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f5c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f68 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f69 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f70 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 129, 0x0f71 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 130, 0x0f72 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f73 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 132, 0x0f74 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f76 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x0f77 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f78 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x0f79 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 130, 0x0f7a },
+{ C99|  0|  0|CID|NFC|NKC|  0, 130, 0x0f7b },
+{ C99|  0|  0|CID|NFC|NKC|  0, 130, 0x0f7c },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f7f },
+{ C99|  0|  0|CID|NFC|NKC|  0, 130, 0x0f80 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f81 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x0f82 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x0f83 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   9, 0x0f84 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f85 },
+{ C99|  0|  0|CID|NFC|NKC|  0, 230, 0x0f86 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f8b },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f8f },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f92 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f93 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f95 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f96 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f97 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0f98 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0f9c },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0f9d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0fa1 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0fa2 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0fa6 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0fa7 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0fab },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0fac },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0fad },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0fb0 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x0fb7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x0fb8 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x0fb9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x109f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x10c5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x10cf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x10f6 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x10ff },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x1159 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1160 },
+{   0|  0|CXX|CID|NFC|NKC|CTX,   0, 0x1175 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x11a2 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x11a7 },
+{   0|  0|CXX|CID|NFC|NKC|CTX,   0, 0x11c2 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x11f9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1dff },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1e99 },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x1e9a },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x1e9b },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1e9f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1ef9 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1eff },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f15 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f17 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f1d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f1f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f45 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f47 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f4d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f4f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f57 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f58 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f59 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f5a },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f5b },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f5c },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f5d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f5e },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f70 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f71 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f72 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f73 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f74 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f75 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f76 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f77 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f78 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f79 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f7a },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f7b },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1f7c },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1f7d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1f7f },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fb4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1fb5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fba },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fbb },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fbc },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x1fbd },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x1fbe },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x1fc1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fc4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1fc5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fc8 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fc9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fca },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fcb },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fcc },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x1fcf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fd2 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fd3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1fd5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fda },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fdb },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1fdf },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fe2 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1fe3 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fea },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1feb },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1fec },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x1ff1 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1ff4 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x1ff5 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1ff8 },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1ff9 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1ffa },
+{ C99|  0|CXX|  0|  0|  0|  0,   0, 0x1ffb },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x1ffc },
+{   0|  0|  0|CID|  0|  0|  0,   0, 0x203e },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x2040 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x207e },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x207f },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x2101 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2102 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x2106 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2107 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2109 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2113 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2114 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2115 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x2117 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x2118 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x211d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2123 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2124 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2125 },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x2126 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2127 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2128 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2129 },
+{ C99|  0|  0|CID|  0|  0|  0,   0, 0x212a },
+{ C99|  0|  0|  0|  0|  0|  0,   0, 0x212b },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x212d },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x212e },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2131 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x2132 },
+{ C99|  0|  0|CID|NFC|  0|  0,   0, 0x2138 },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x215f },
+{ C99|DIG|  0|CID|NFC|  0|  0,   0, 0x217f },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x2182 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x3004 },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0x3006 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x3007 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x3020 },
+{ C99|DIG|  0|CID|NFC|NKC|  0,   0, 0x3029 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x3040 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x3093 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x3094 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x309a },
+{ C99|  0|CXX|CID|NFC|  0|  0,   0, 0x309c },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x309e },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x30a0 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x30f6 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x30fa },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x30fc },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0x30fe },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0x3104 },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x312c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0x4dff },
+{ C99|  0|CXX|CID|NFC|NKC|  0,   0, 0x9fa5 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xabff },
+{ C99|  0|  0|CID|NFC|NKC|  0,   0, 0xd7a3 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xf8ff },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa0d },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa0f },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa10 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa11 },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa12 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa14 },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa1e },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa1f },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa20 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa21 },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa22 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa24 },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa26 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfa29 },
+{   0|  0|CXX|  0|  0|  0|  0,   0, 0xfa2d },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfb1e },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb1f },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfb29 },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb36 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfb37 },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb3c },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfb3d },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb3e },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfb3f },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb41 },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfb42 },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb44 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfb45 },
+{   0|  0|CXX|CID|  0|  0|  0,   0, 0xfb4e },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfbb1 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfbd2 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfd3d },
+{   0|  0|CXX|CID|NFC|NKC|  0,   0, 0xfd3f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfd4f },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfd8f },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfd91 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfdc7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfdef },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfdfb },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0xfe6f },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfe72 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfe73 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfe74 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xfe75 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xfefc },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xff20 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xff3a },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0xff40 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xff5a },
+{   0|  0|  0|CID|NFC|  0|  0,   0, 0xff65 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xffbe },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xffc1 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xffc7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xffc9 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xffcf },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xffd1 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xffd7 },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xffd9 },
+{   0|  0|CXX|CID|NFC|  0|  0,   0, 0xffdc },
+{   0|  0|  0|CID|NFC|NKC|  0,   0, 0xffff },
diff --git a/libcpp/ucnid.tab b/libcpp/ucnid.tab
new file mode 100644 (file)
index 0000000..11fc471
--- /dev/null
@@ -0,0 +1,211 @@
+; Table of UCNs which are valid in identifiers.
+; Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+; 
+; This program is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 2, or (at your option) any
+; later version.
+; 
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, write to the Free Software
+; Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+; 
+; This file reproduces the table in ISO/IEC 9899:1999 (C99) Annex
+; D, which is itself a reproduction from ISO/IEC TR 10176:1998, and
+; the similar table from ISO/IEC 14882:1988 (C++98) Annex E, which is
+; a reproduction of ISO/IEC PDTR 10176.  Unfortunately these tables
+; are not identical.
+
+[C99]
+
+; Latin
+00aa 00ba 00c0-00d6 00d8-00f6 00f8-01f5 01fa-0217 0250-02a8 1e00-1e9b
+1ea0-1ef9 207f
+
+; Greek
+0386 0388-038a 038c 038e-03a1 03a3-03ce 03d0-03d6 03da 03dc 03de 03e0
+03e2-03f3 1f00-1f15 1f18-1f1d 1f20-1f45 1f48-1f4d 1f50-1f57 1f59 1f5b
+1f5d 1f5f-1f7d 1f80-1fb4 1fb6-1fbc 1fc2-1fc4 1fc6-1fcc 1fd0-1fd3
+1fd6-1fdb 1fe0-1fec 1ff2-1ff4 1ff6-1ffc
+
+; Cyrillic
+0401-040c 040e-044f 0451-045c 045e-0481 0490-04c4 04c7-04c8 04cb-04cc
+04d0-04eb 04ee-04f5 04f8-04f9
+
+; Armenian
+0531-0556 0561-0587
+
+; Hebrew
+05b0-05b9 05bb-05bd 05bf 05c1-05c2 05d0-05ea 05f0-05f2
+
+; Arabic
+0621-063a 0640-0652 0670-06b7 06ba-06be 06c0-06ce 06d0-06dc 06e5-06e8
+06ea-06ed
+
+; Devanagari
+0901-0903 0905-0939 093e-094d 0950-0952 0958-0963
+
+; Bengali
+0981-0983 0985-098c 098f-0990 0993-09a8 09aa-09b0 09b2 09b6-09b9
+09be-09c4 09c7-09c8 09cb-09cd 09dc-09dd 09df-09e3 09f0-09f1
+
+; Gurmukhi
+0a02 0a05-0a0a 0a0f-0a10 0a13-0a28 0a2a-0a30 0a32-0a33 0a35-0a36
+0a38-0a39 0a3e-0a42 0a47-0a48 0a4b-0a4d 0a59-0a5c 0a5e 0a74
+
+; Gujarati
+0a81-0a83 0a85-0a8b 0a8d 0a8f-0a91 0a93-0aa8 0aaa-0ab0 0ab2-0ab3
+0ab5-0ab9 0abd-0ac5 0ac7-0ac9 0acb-0acd 0ad0 0ae0
+
+; Oriya
+0b01-0b03 0b05-0b0c 0b0f-0b10 0b13-0b28 0b2a-0b30 0b32-0b33 0b36-0b39
+0b3e-0b43 0b47-0b48 0b4b-0b4d 0b5c-0b5d 0b5f-0b61
+
+; Tamil
+0b82-0b83 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f
+0ba3-0ba4 0ba8-0baa 0bae-0bb5 0bb7-0bb9 0bbe-0bc2 0bc6-0bc8 0bca-0bcd
+
+; Telugu
+0c01-0c03 0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c33 0c35-0c39 0c3e-0c44
+0c46-0c48 0c4a-0c4d 0c60-0c61
+
+; Kannada
+0c82-0c83 0c85-0c8c 0c8e-0c90 0c92-0ca8 0caa-0cb3 0cb5-0cb9 0cbe-0cc4
+0cc6-0cc8 0cca-0ccd 0cde 0ce0-0ce1
+
+; Malayalam
+0d02-0d03 0d05-0d0c 0d0e-0d10 0d12-0d28 0d2a-0d39 0d3e-0d43 0d46-0d48
+0d4a-0d4d 0d60-0d61
+
+# CORRECTION: exclude 0e50-0e59 from the Thai range as it also appears
+# in the Digits range below.
+; Thai
+0e01-0e3a 0e40-0e49 0e5a-0e5b
+
+; Lao
+0e81-0e82 0e84 0e87-0e88 0e8a 0e8d 0e94-0e97 0e99-0e9f 0ea1-0ea3 0ea5
+0ea7 0eaa-0eab 0ead-0eae 0eb0-0eb9 0ebb-0ebd 0ec0-0ec4 0ec6 0ec8-0ecd
+0edc-0edd
+
+; Tibetan
+0f00 0f18-0f19 0f35 0f37 0f39 0f3e-0f47 0f49-0f69 0f71-0f84 0f86-0f8b
+0f90-0f95 0f97 0f99-0fad 0fb1-0fb7 0fb9
+
+; Georgian
+10a0-10c5 10d0-10f6
+
+; Hiragana
+3041-3093 309b-309c
+
+; Katakana
+30a1-30f6 30fb-30fc
+
+; Bopomofo
+3105-312c
+
+; CJK Unified Ideographs
+4e00-9fa5
+
+; Hangul
+ac00-d7a3
+
+; Special characters
+00b5 00b7 02b0-02b8 02bb 02bd-02c1 02d0-02d1 02e0-02e4 037a 0559 093d
+0b3d 1fbe 203f-2040 2102 2107 210a-2113 2115 2118-211d 2124 2126 2128
+212a-2131 2133-2138 2160-2182 3005-3007 3021-3029
+
+; Digits
+0660-0669 06f0-06f9 0966-096f 09e6-09ef 0a66-0a6f 0ae6-0aef 0b66-0b6f
+0be7-0bef 0c66-0c6f 0ce6-0cef 0d66-0d6f 0e50-0e59 0ed0-0ed9 0f20-0f33
+
+[CXX]
+
+; Latin
+00c0-00d6 00d8-00f6 00f8-01f5 01fa-0217 0250-02a8 1e00-1e9a 1ea0-1ef9
+
+; Greek
+0384 0388-038a 038c 038e-03a1 03a3-03ce 03d0-03d6 03da 03dc 03de 03e0 
+03e2-03f3 1f00-1f15 1f18-1f1d 1f20-1f45 1f48-1f4d 1f50-1f57 1f59 1f5b
+1f5d 1f5f-1f7d 1f80-1fb4 1fb6-1fbc 1fc2-1fc4 1fc6-1fcc 1fd0-1fd3 
+1fd6-1fdb 1fe0-1fec 1ff2-1ff4 1ff6-1ffc
+
+; Cyrillic
+0401-040d 040f-044f 0451-045c 045e-0481 0490-04c4 04c7-04c8 04cb-04cc
+04d0-04eb 04ee-04f5 04f8-04f9
+
+; Armenian
+0531-0556 0561-0587
+
+; Hebrew
+05d0-05ea 05f0-05f4
+
+; Arabic
+0621-063a 0640-0652 0670-06b7 06ba-06be 06c0-06ce 06e5-06e7
+
+; Devanagari
+0905-0939 0958-0962
+
+; Bengali
+0985-098c 098f-0990 0993-09a8 09aa-09b0 09b2 09b6-09b9 09dc-09dd 
+09df-09e1 09f0-09f1
+
+; Gurmukhi
+0a05-0a0a 0a0f-0a10 0a13-0a28 0a2a-0a30 0a32-0a33 0a35-0a36 0a38-0a39
+0a59-0a5c 0a5e
+
+; Gujarati
+0a85-0a8b 0a8d 0a8f-0a91 0a93-0aa8 0aaa-0ab0 0ab2-0ab3 0ab5-0ab9 0ae0
+
+; Oriya
+0b05-0b0c 0b0f-0b10 0b13-0b28 0b2a-0b30 0b32-0b33 0b36-0b39 0b5c-0b5d
+0b5f-0b61
+
+; Tamil
+0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 
+0ba8-0baa 0bae-0bb5 0bb7-0bb9
+
+; Telugu
+0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c33 0c35-0c39 0c60-0c61
+
+; Kannada
+0c85-0c8c 0c8e-0c90 0c92-0ca8 0caa-0cb3 0cb5-0cb9 0ce0-0ce1
+
+; Malayalam
+0d05-0d0c 0d0e-0d10 0d12-0d28 0d2a-0d39 0d60-0d61
+
+; Thai
+0e01-0e30 0e32-0e33 0e40-0e46 0e4f-0e5b
+
+; Digits
+0e50-0e59
+
+; Lao
+0e81-0e82 0e84 0e87-0e88 0e8a 0e8d 0e94-0e97 0e99-0e9f 0ea1-0ea3 0ea5
+0ea7 0eaa-0eab 0ead-0eb0 0eb2 0eb3 0ebd 0ec0-0ec4 0ec6
+
+; Georgian
+10a0-10c5 10d0-10f6
+
+; Hiragana
+3041-3094 309b-309e
+
+; Katakana
+30a1-30fe
+
+; Bopomofo
+3105-312c
+
+; Hangul
+1100-1159 1161-11a2 11a8-11f9
+
+; CJK Unified Ideographs
+f900-fa2d fb1f-fb36 fb38-fb3c fb3e fb40-fb41 fb42-fb44 fb46-fbb1
+fbd3-fd3f fd50-fd8f fd92-fdc7 fdf0-fdfb fe70-fe72 fe74 fe76-fefc
+ff21-ff3a ff41-ff5a ff66-ffbe ffc2-ffc7 ffca-ffcf ffd2-ffd7
+ffda-ffdc 4e00-9fa5
+
diff --git a/libiberty/COPYING.LIB b/libiberty/COPYING.LIB
new file mode 100644 (file)
index 0000000..ae23fcf
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
new file mode 100644 (file)
index 0000000..1260eeb
--- /dev/null
@@ -0,0 +1,7578 @@
+2007-11-12  Joseph Myers  <joseph@codesourcery.com>
+
+       * floatformat.c (floatformat_ibm_long_double_is_valid): Fix
+       compiler warnings.
+       (floatformat_ibm_long_double): Use
+       floatformat_ibm_long_double_is_valid.
+
+2007-11-07  Joseph Myers  <joseph@codesourcery.com>
+           Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * floatformat.c (mant_bits_set): New.
+       (floatformat_to_double): Use it.  Note no special handling of
+       split formats.
+       (floatformat_from_double): Note no special handing of split
+       formats.
+       (floatformat_ibm_long_double_is_valid,
+       floatformat_ibm_long_double): New.
+       (floatformat_ieee_single_big, floatformat_ieee_single_little,
+       floatformat_ieee_double_big, floatformat_ieee_double_little,
+       floatformat_ieee_double_littlebyte_bigword, floatformat_vax_f,
+       floatformat_vax_d, floatformat_vax_g, floatformat_i387_ext,
+       floatformat_m68881_ext, floatformat_i960_ext,
+       floatformat_m88110_ext, floatformat_m88110_harris_ext,
+       floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword,
+       floatformat_ia64_spill_big, floatformat_ia64_spill_little,
+       floatformat_ia64_quad_big, floatformat_ia64_quad_little): Update
+       for addition of split_half field.
+
+2007-09-06  Tom Tromey  <tromey@redhat.com>
+
+       * pexecute.txh (pex_free): Document process killing.
+
+2007-08-31  Douglas Gregor  <doug.gregor@gmail.com>
+       
+       * cp-demangle.c (d_dump): Handle
+       DEMANGLE_COMPONENT_RVALUE_REFERENCE. 
+       (d_make_comp): Ditto.
+       (cplus_demangle_type): Ditto.
+       (d_print_comp): Ditto.
+       (d_print_mod): Ditto.
+       (d_print_function_type): Ditto.
+
+2007-08-24  Kai Tietz  <kai.tietz@onevision.com>
+
+       * pex-common.h: (pex_funcs): Retyped wait and exec_child to pid_t.
+       * pex-djgpp.c: Likewise.
+       * pex-msdos.c: Likewise.
+       * pex-unix.c: Likewise.
+       * pex-win32.c: Likewise.
+
+2007-08-17  Michael Snyder  <msnyder@access-company.com>
+
+       * make-relative-prefix.c (make_relative_prefix_1): Resource leaks.
+
+2007-08-03  Michael Snyder  <msnyder@access-company.com>
+
+       * make-relative-prefix.c (make_relative_prefix_1): Fix resource
+       leak.
+
+2007-07-31  Michael Snyder  <msnyder@access-company.com>
+
+       * cp-demangle.c (d_print_comp): Guard against null.
+
+2007-07-25  Ben Elliston  <bje@au.ibm.com>
+
+       * Makefile.in (CFILES): Remove ternary.c.
+       (REQUIRED_OFILES): Remove ./ternary.o.
+       (INSTALLED_HEADERS): Remove ternary.h.
+       (ternary.o): Remove.
+       * ternary.c: Remove.
+
+2007-07-23  DJ Delorie  <dj@redhat.com>
+
+       * argv.c (writeargv): Fix typo in inline documentation.
+       * functions.texi: Regenerate.
+
+2007-07-17  DJ Delorie  <dj@redhat.com>
+
+       * configure.ac (target_header_dir, msdosdjgpp): Remove duplicate
+       gettimeofday entry.
+       * configure: Likewise.
+
+2007-07-11  Alexandre Oliva  <aoliva@redhat.com>
+
+       * maint-tool (deps): Output stamp-h instead of config.h.
+       * Makefile.in: Rebuild deps.
+       (maintainer-clean-subdir): Depend on stamp-h rather than config.h.
+
+2007-07-02  Simon Baldwin <simonb@google.com>
+
+       * argv.c (writeargv): Removed declaration of unused variable.
+
+2007-06-14  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure.ac: Use ACX_PROG_CC_ALMOST_PEDANTIC too.
+       * configure: Regenerate.
+
+2007-06-14  Paolo Bonzini  <bonzini@gnu.org>
+
+       * aclocal.m4: Include config/warnings.m4.
+       * configure.ac: Use ACX_PROG_CC_WARNING_OPTS.
+       * configure: Regenerate.
+
+2007-06-07  Geoffrey Keating  <geoffk@apple.com>
+
+       * configure.ac: Non-default multilibs can be cross compilations.
+       * configure: Regenerate
+
+2007-05-07  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * argv.c (writeargv): New function.
+
+2007-05-05  Geoffrey Keating  <geoffk@apple.com>
+
+       * cp-demangle.c (d_name): Detect local-source-name.
+       (d_prefix): Likewise.
+       (d_unqualified_name): Implement local-source-name.
+
+2007-05-03  Joel Brobecker  <brobecker@adacore.com>
+
+       * filename_cmp.c: Replace include of ctype.h by include of
+       safe-ctype.h.
+       (filename_cmp): Use TOLOWER instead of tolower for conversions
+       that are locale-independent.
+       * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h.
+
+2007-04-11  Thomas Neumann  tneumann@users.sourceforge.net
+
+       * argv.c: Use ANSI C declarations.
+       * make-relative-prefix.c: Likewise.
+
+2007-04-06  Joel Brobecker  <brobecker@adacore.com>
+
+       * filename_cmp.c (filename_cmp): Improve documentation.
+
+2007-04-02  Andreas Schwab  <schwab@suse.de>
+
+       * filename_cmp.c: Include "config.h".
+
+2007-03-29  Joel Brobecker  <brobecker@adacore.com>
+
+       * filename_cmp.c: New file.
+       * Makefile.in (CFILES): Add filename_cmp.c.
+       (REQUIRED_OFILES): Add filename_cmp.o
+       (filename_cmp.o): New rule.
+       * functions.texi: Regenerate.
+
+2007-03-15  Geoffrey Keating  <geoffk@apple.com>
+
+       * cp-demangle.c (d_encoding): Exit early on error.
+       (d_pointer_to_member_type): Exit early if cplus_demangle_type
+       returns NULL.
+       (cplus_demangle_type): Likewise.
+       * testsuite/demangle-expected: New testcase.
+
+2007-03-01  Brooks Moses  <brooks.moses@codesourcery.com>
+
+       * Makefile.in: Add install-pdf target as copied from
+       automake v1.10 rules.
+       * testsuite/Makefile.in: Add dummy install-pdf target.
+
+2007-03-01  Peter Breitenlohner  <peb@mppmu.mpg.de>
+            Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR other/16513
+       * Makefile.in: Install library under $(MULTIOSDIR), not $(MULTISUBDIR).
+       Install headers in multilib independent location.
+
+2007-02-26  DJ Delorie  <dj@redhat.com>
+
+       * configure.ac: add djgpp-specific results, so we don't have to
+       link during a cross compilation.
+       * configure: Regenerated.
+       
+2007-01-31  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+       * hex.c: Fix typo.
+       * choose-temp.c: Likewise.
+       * functions.texi: Regenerate.
+
+2007-01-31  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * pex-common.h (struct pex_obj): New fields
+       stderr_pipe and read_err.       
+       * pex-common.c (pex_init_common): Initialize
+       stderr_pipe.
+       (pex_run_in_environment): Add error checking
+       for PEX_STDERR_TO_PIPE.  Create a pipe
+       for stderr if necessary.
+       (pex_read_err): New.
+       (pex_free): Close read_err.
+       * pexecute.txh: Document changes.
+       * functions.texi: Regenerated.
+
+2007-01-31  Ben Elliston  <bje@au.ibm.com>
+
+       * strsignal.c (psignal): Change type of signo to int.
+       * functions.texi: Regenerate.
+
+2007-01-29  Simon Baldwin <simonb@google.com>
+
+       * cp-demangle.h (cplus_demangle_operators): External definition
+       suppressed if not building for libstdc++.
+       * cp-demangle.c (__gcclibcxx_demangle_callback): Augmented interface
+       to demangling, provides a malloc-less version of __cxa_demangle.
+       (cplus_demangle_print_callback): Public callback version of
+       cplus_demangle_print.
+       (struct d_growable_string): New growable string structure.
+       (d_growable_string_init): New function, provides support for
+       growable strings separate from print info.
+       (d_growable_string_resize): Likewise.
+       (d_growable_string_append_buffer): Likewise.
+       (d_growable_string_callback_adapter):): Likewise.
+       (d_print_init): New print info initialization function.
+       (d_print_error): Macro replace by inline function.
+       (d_print_saw_error): Likewise.
+       (d_append_char): Likewise.
+       (d_append_buffer): Likewise.
+       (d_append_string): New inline function, replaces the
+       d_append_string_constant macro.
+       (d_flush_buffer): New function, flushes buffer to callback.
+       (d_demangle_callback, is_ctor_or_dtor): Malloc-based fallback
+       for unsupported dynamic arrays replaced by alloca().
+       (d_demangle): Return string length estimating removed.
+       (d_dump): Moved error case handling from call site into function.
+       (d_print_resize): Function removed.
+       (d_print_append_char): Likewise.
+       (d_print_append_buffer): Likewise.
+       (d_print_error): Likewise.
+       (d_print_comp): Added special case handling for Java arrays.
+       (java_demangle_v3): Removed string post-processing for Java arrays,
+       now replaced by special case handling in d_print_comp.
+       (cplus_demangle_v3_callback): Augmented interface to demangling,
+       provides a malloc-less version of cplus_demangle_v3.
+       (java_demangle_v3_callback): Augmented interface to demangling,
+       provides a malloc-less version of java_demangle_v3.
+
+2007-01-12  Ben Elliston  <bje@au.ibm.com>
+
+       * pex-unix.c (writeerr): Cast write result to void.
+
+       * choose-temp.c (choose_temp_base): Check the result of the call
+       to mktemp rather than testing the length of the modified string.
+
+2006-12-20  Geoffrey Keating  <geoffk@apple.com>
+
+       * cp-demangle.h: Add comment explaining what to do to avoid
+       overrunning string.
+       (d_check_char): New.
+       (d_next_char): Don't advance past trailing '\0'.
+       * cp-demangle.c (cplus_demangle_mangled_name): Use d_check_char.
+       (d_nested_name): Likewise.
+       (d_special_name): Likewise.
+       (d_call_offset): Likewise.
+       (d_function_type): Likewise.
+       (d_array_type): Likewise.
+       (d_pointer_to_member_type): Likewise.
+       (d_template_param): Likewise.
+       (d_template_args): Likewise.
+       (d_template_arg): Likewise.
+       (d_expr_primary): Likewise.
+       (d_local_name): Likewise.
+       (d_substitution): Likewise.
+       (d_ctor_dtor_name): Use d_advance rather than d_next_char.
+       * testsuite/test-demangle.c: Include sys/mman.h.
+       (MAP_ANONYMOUS): Define.
+       (protect_end): New.
+       (main): Use protect_end.
+       * testsuite/demangle-expected: Add testcases for overrunning
+       the end of the string.
+
+2006-11-30  Andrew Stubbs  <andrew.stubbs@st.com>
+            J"orn Rennecke <joern.rennecke@st.com>
+
+       PR driver/29931
+       * make-relative-prefix.c (make_relative_prefix_1): New function,
+       broken out of make_relative_prefix.  Make link resolution dependent
+       on new parameter.
+       (make_relative_prefix): Use make_relative_prefix_1.
+       (make_relative_prefix_ignore_links): New function.
+
+2006-11-08  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * pex-win32.c (no_suffixes): Remove.
+       (std_suffixes): Add "" as first element.
+       (find_executable): Remove detection of already-present
+       extension. Try all suffixes in std_suffixes.
+                               
+2006-11-07  Julian Brown  <julian@codesourcery.com>
+
+       * floatformat.c (get_field): Fix segfault with little-endian word
+       order on 64-bit hosts.
+       (put_field): Likewise.
+       (min): Move definition.
+
+2006-10-26  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       pex-win32.c (argv_to_cmdline): Replace xmalloc with XNEWVEC.
+       (find_executable): Likewise.
+       (win32_spawn): Cast alloca return to (char**).
+       Replace malloc with XNEWVEC.
+       bcopy.c (bcopy): Add explict casts in assignments.
+
+2006-10-25  Ben Elliston  <bje@au.ibm.com>
+
+       * pexecute.txh: Wrap pexecute's "flag" argument with @var {..}.
+       
+2006-10-10  Brooks Moses  <bmoses@stanford.edu>
+
+       * Makefile.in: Added "pdf", "libiberty.pdf" target support.
+       * testsuite/Makefile.in: Added empty "pdf" target.
+
+2006-09-22  Ian Lance Taylor  <ian@airs.com>
+
+       PR other/29176
+       * cp-demangle.c (d_substitution): Check for overflow when
+       computing substitution index.
+
+2006-08-30  Corinna Vinschen  <corinna@vinschen.de>
+
+       * configure.ac: Add case for Mingw as host.
+       * configure: Regenerate.
+
+2006-08-27  Ian Lance Taylor  <ian@airs.com>
+
+       PR driver/27622
+       * pex-common.h (struct pex_funcs): Add toclose parameter to
+       exec_child field.
+       * pex-common.c (pex_run_in_environment): Pass toclose to
+       exec_child.
+       * pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter.
+       * pex-unix.c (pex_unix_exec_child): Likewise.
+       * pex-msdos.c (pex_msdos_exec_child): Likewise.
+       * pex-win32.c (pex_win32_exec_child): Likewise.
+
+       PR other/28797
+       * cp-demangle.c (d_pointer_to_member_type): Do add a substitution
+       for a qualified member which is not a function.
+       * testsuite/demangle-expected: Add test case.
+
+2006-07-27  Jan Hubicka  <jh@suse.cz>
+
+       PR rtl-optimization/28071
+       * hashtab.c (htab_empty): Clear out n_deleted/n_elements;
+       downsize the hashtable.
+
+2006-07-04  Peter O'Gorman  <peter@pogma.com>
+
+       * Makefile.in: chmod 644 before ranlib during install.
+
+2006-06-02  Mark Shinwell  <shinwell@codesourcery.com>
+
+       * pex-unix.c (pex_unix_exec_child): Insert cast when assigning
+       to environ.
+
+2006-06-01  Mark Shinwell  <shinwell@codesourcery.com>
+
+       * pex-common.c: New function pex_run_in_environment.
+       * pex-common.h: Add environment parameter to exec_child.
+       * pex-msdos.c: Add environment parameter to pex_msdos_exec_child.
+       * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child.
+       (pex_djgpp_exec_child): Pass environment to child process.
+       * pex-unix.c: Add environment parameter to pex_unix_exec_child.
+       (pex_unix_exec_child): Pass environment to child process.
+       * pex-win32.c: Add environment parameter to pex_win32_exec_child.
+       New function env_compare for comparing VAR=VALUE pairs.
+       (win32_spawn): Assemble environment block and pass to CreateProcess.
+       (spawn_script): Pass environment through to win32_spawn.
+       (pex_win32_exec_child): Pass environment through to spawn_script and
+       win32_spawn.
+       * functions.texi: Regenerate.
+       * pexecute.txh: Document pex_run_in_environment.
+
+2006-05-28  Mark Shinwell  <shinwell@codesourcery.com>
+
+       * mkstemps.c: Open temporary files in binary mode.
+
+2006-05-12  Anton Blanchard  <anton@samba.org>
+
+       * cplus-dem.c (demangle_fund_type): Ensure buf is large enough to
+       hold "int%u_t".
+
+2006-04-24  Julian Brown  <julian@codesourcery.com>
+
+       * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case.
+
+2006-03-29  Jim Blandy  <jimb@codesourcery.com>
+
+       * pex-common.c (pex_input_file, pex_input_pipe): New functions.
+       (pex_init_common): Initialize obj->input_file.
+       (pex_run): Close any file opened by pex_input_file.
+       * pexecute.txh (pex_input_file, pex_input_pipe): New docs.
+       * pex-common.h (struct pex_obj): New field input_file.
+       (struct pex_funcs): New function ptr fdopenw.
+       * pex-unix.c (pex_unix_fdopenw): New function.
+       (funcs): List it as our fdopenw function.
+       * pex-win32.c (pex_win32_fdopenw): New function.
+       (funcs): List it as our fdopenw function.
+       * pex-djgpp.c (funcs): Leave fdopenw null.
+       * pex-msdos (funcs): Same.
+       * functions.texi: Regenerated.
+
+2006-04-10  Jim Blandy  <jimb@codesourcery.com>
+
+       * pex-common.c (temp_file): New function, containing guts of
+       pex-style temporary file name generation.
+       (pex_run): Use it.
+
+2006-04-06  Carlos O'Donell  <carlos@codesourcery.com>
+
+       * Makefile.in: Add install-html, install-html-am, and
+       install-html-recursive targets. Define mkdir_p and 
+       NORMAL_INSTALL. 
+       * configure.ac: AC_SUBST datarootdir, docdir, htmldir.
+       * configure: Regenerate.
+       * testsuite/Makefile.in: Add install-html and html targets.
+
+2006-03-31  Mark Mitchell  <mark@codesourcery.com>
+
+       * pex-win32.c (<errno.h>): Include.
+       (fix_argv): Remove.
+       (argv_to_cmdline): New function.
+       (std_suffixes): New variable.
+       (no_suffixes): Likewise.
+       (find_executable): New function.
+       (win32_spawn): Likewise.
+       (spawn_script): Use win32_spawn instead of _spawnv[p].
+       (pex_win32_exec_child): Replace MSVCRT calls with Win32 API calls.
+       (pex_win32_wait): Likewise.
+
+2006-03-24  Jim Blandy  <jimb@codesourcery.com>
+
+       * pex-common.c (pex_run): Simplify output name handling.
+
+2006-03-12  Jim Blandy  <jimb@red-bean.com>
+
+       * pex-common.h (struct pex_obj): Doc fixes.
+
+2006-03-11  Jim Blandy  <jimb@red-bean.com>
+
+       * functions.texi: Regenerate.
+
+2006-02-21  Ben Elliston  <bje@au.ibm.com>
+
+       * pexecute.c (pwait): Syntax fix for previous change.
+
+2006-02-17  Uttam Pawar  <uttamp@us.ibm.com>
+
+       * pexecute.c (pwait): Free vector pointer.
+       * partition.c (partition_print): Free class_elements pointer.
+
+2006-02-11  Roger Sayle  <roger@eyesopen.com>
+           R. Scott Bailey  <scott.bailey@eds.com>
+           Bill Northcott  <w.northcott@unsw.edu.au>
+
+       PR bootstrap/16787
+       * floatformat.c: Include <float.h> where available.
+       (NAN): Use value of DBL_QNAN if defined, and NAN isn't.
+
+2006-01-29  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * configure.ac: Add -Wc++-compat to ac_libibety_warn_cflags where
+       supported. 
+       * configure: Regenerated.
+
+2006-01-20  Carlos O'Donell  <carlos@codesourcery.com>
+
+       * testsuite/Makefile.in: Add test-expandargv test.
+       * testsuite/test-expandargv.c: New test.
+       * argv.c (expandargv): Check for errors with ferror,
+       rather than just by looking at return value from fread.
+
+2005-12-17  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * floatformat.c (floatformat_i387_ext_is_valid): Use explicit cast
+       to convert from "from".
+       (floatformat_to_double): Likewise.
+       (floatformat_from_double): Use explicit cast to convert from "to".
+
+2005-12-10  Terry Laurenzo  <tlaurenzo@gmail.com>
+
+       PR java/9861
+       * cp-demangle.c (d_bare_function_type): Recognize new 'J' qualifer
+       and include return type when found.
+       (d_print_comp)[DEMANGLE_COMPONENT_FUNCTION_TYPE]: Add
+       conditional logic to change printing order of return type.when
+       the DMGL_RET_POSTFIX option is present.
+       (java_demangle_v3): Add DMGL_RET_POSTFIX option to d_demangle
+       call.
+       * testsuite/test-demangle.c (main): Recognize option --ret-postfix
+       * testsuite/demangle-expected: Test cases to verify extended encoding.
+       Updated comment to document --ret-postfix option.
+       
+2005-11-06  Richard Guenther  <rguenther@suse.de>
+
+       * splay-tree.c (rotate_left): New function.
+       (rotate_right): Likewise.
+       (splay_tree_splay_helper): Remove.
+       (splay_tree_splay): Re-implement.
+
+2005-10-31  Mark Kettenis  <kettenis@gnu.org>
+
+       * floatformat.c (floatformat_vax_aingle, floatformat_vax_double):
+       New variables.
+
+2005-10-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * at-file.texi: Fix typo.
+
+2005-10-03  Mark Mitchell  <mark@codesourcery.com>
+
+       * at-file.texi: New file.
+
+2005-09-27  Mark Mitchell  <mark@codesourcery.com>
+
+       * argv.c (expandargv): Do not use xmalloc_failed.
+
+2005-09-26  Mark Mitchell  <mark@codesourcery.com>
+
+       * argv.c (safe-ctype.h): Include it.
+       (ISBLANK): Remove.
+       (stdio.h): Include.
+       (buildargv): Use ISSPACE instead of ISBLANK.
+       (expandargv): New function.
+       * Makefile.in: Regenerated.
+
+2005-09-14  Christopher Faylor  <cgf@timesys.com>
+
+       * pex-win32.c: Include "windows.h".
+       (backslashify): New function.
+       (fix_argv): Use backslashify to convert path to windows format.
+       Allocate one more place in new argv for potential executable from '#!'
+       parsing.
+       (tack_on_executable): New function.  Conditional on USE_MINGW_MSYS
+       (openkey): Ditto.
+       (mingw_rootify): Ditto.
+       (msys_rootify): Ditto.
+       (spawn_script): New function.
+       (pex_win32_exec_child): Save translated argv in newargv.  Pass to
+       spawn_script if spawnv* fails.
+       (main): New function.  Conditional on MAIN.  Useful for testing.
+
+2005-08-17  Mark Kettenis  <kettenis@gnu.org>
+
+       * floatformat.c (floatformat_always_valid): Change type of last
+       argument to `void *'.
+       (floatformat_i387_ext_is_valid): Likewise.
+       (floatformat_to_double): Change type of second argument to `const
+       void *'.
+       (floatformat_from_double): Change type of last argument to `void
+       *'.
+       (floatformat_is_valid): Change type of last argument to `const
+       void *'.
+       (ieee_test): Remove redundant casts.
+
+2005-08-17  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * strverscmp.c: Update FSF address.
+       * testsuite/Makefile.in: Likewise.
+       * testsuite/test-demangle.c: Likewise.
+       * testsuite/test-pexecute.c: Likewise.
+
+2005-07-23  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * getopt.c: Include ansidecl.h before system headers.
+
+2005-07-22  Ben Elliston  <bje@gnu.org>
+
+       * getopt.c: Include "ansidecl.h".
+       (_getopt_initialize): Mark argc and argv parameters as unused.
+
+2005-07-22  Ben Elliston  <bje@gnu.org>
+
+       * regex.c (regcomp): Change type of `i' from unsigned to int.
+
+2005-07-22  Ben Elliston  <bje@gnu.org>
+
+       Recover patch lost in the sourceware repository:
+       2005-07-09  Ben Elliston  <bje@au.ibm.com>
+       * memcpy.c: Remove ANSI_PROTOTYPES conditional code.
+       * memmove.c: Likewise.
+       * objalloc.c: Likewise.
+
+2005-07-22  Ben Elliston  <bje@gnu.org>
+
+       * configure.ac: Check for a getopt(3) declaration.
+       * configure, config.in: Regenerate.
+
+2005-07-15  Ben Elliston  <bje@au.ibm.com>
+
+       * regex.c (TRANSLATE): Cast rhs of ternary expression to char.
+
+2005-07-12  Ben Elliston  <bje@au.ibm.com>
+
+       * floatformat.c (floatformat_to_double): Add a comment about a
+       potential source of warnings when compiling this file.
+
+2005-07-12  Ben Elliston  <bje@au.ibm.com>
+
+       * pexecute.c (pexecute): Cast string litrals to char *.
+       * regex.c (re_comp): Cast a call to gettext() to char *.
+
+2005-07-07  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * config.table: Delete file.  Move former contents into ...
+       * configure.ac: ... here and escape any brackets for m4.
+       * Makefile.in (config.status): Remove dependency on config.table.
+       * configure: Regenerate.
+
+2005-07-07  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * config.in: Regenerate for 6/20 change.
+
+2005-07-03  Steve Ellcey  <sje@cup.hp.com>
+
+       PR other/13906
+       * md5.c (md5_process_bytes): Check alignment.
+
+2005-07-01  Ian Lance Taylor  <ian@airs.com>
+
+       PR other/22268
+       * cp-demangle.c (d_expr_primary): Don't run off the end of the
+       string while looking for the end of a literal value.
+       * testsuite/demangle-expected: Add test case.
+
+2005-06-30  Daniel Berlin  <dberlin@dberlin.org>
+
+       * hashtab.c (EMPTY_ENTRY): Moved and renamed.
+       (DELETED_ENTRY): Ditto. 
+
+2005-06-20  Geoffrey Keating  <geoffk@apple.com>
+
+       * strverscmp.c: New.
+       * Makefile.in (CFILES): Add strverscmp.c.
+       (CONFIGURED_OFILES): Add strverscmp.o.
+       (strverscmp.o): New rule.
+       (stamp-functions): Add $(srcdir) to files in source directory.
+       * configure.ac (funcs): Add strverscmp.
+       (AC_CHECK_FUNCS): Add strverscmp.
+       * configure: Regenerate.
+       * functions.texi: Regenerate.
+
+2005-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * configure.ac: Add snprintf and vsnprintf to AC_CHEK_DECLS.
+       * config.in, configure: Regenerate.
+
+2005-05-25  Richard Henderson  <rth@redhat.com>
+
+       * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_HIDDEN_ALIAS.
+       (d_make_comp, d_print_comp): Likewise.
+       (d_special_name): Generate one.
+       * testsuite/demangle-expected: Add a hidden alias test.
+
+2005-05-24  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * configure.ac: Check declarations for calloc(), getenv(),
+       malloc(), realloc() and sbrk().
+       * config.in: Regenerate.
+       * configure: Likewise.
+
+       * alloca.c (C_alloca): Change "new" to "new_storage".  Use XNEWVEC
+       instead of xmalloc.
+       * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc.
+       * concat.c (liiberty_concat_ptr): Surround definition with an
+       extern "C" block, if __cplusplus.
+       (concat): Use XNEWVEC instead of xmalloc.
+       (reconcat): Likewise.
+       * cp-demangle.c (struct d_print_template): Rename member
+       "template" to "template_decl".  Adjust use throughout the file.
+       (d_print_resize): Properly cast return value of realloc().
+       (cplus_demangle_print): Same for malloc().
+       (d_demangle): Likewise.
+       * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter
+       "typename" to "type_name".
+       * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc().
+       (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc().
+       (demangle_template_value_parm): Likewise.
+       (demangle_template): Likewise.
+       (recursively_demangle): Likewise.
+       (do_hpacc_template_literal): Likewise.
+       (do_arg): Likewise.
+       (remember_type): Likewise.
+       (remember_Ktype): Likewise.
+       (register_Btype): Likewise.
+       (string_need): Use XRESIZEVEC instead of xrealloc().
+       * dyn-string.c (dyn_string_init): Use XNEWVEC.
+       (dyn_string_new): Use XNEW.
+       (dyn_string_resize): Use XRESIZEVEC.
+       * fnmatch.c (fnmatch): Rename local variable "not" to "negate".
+       * getopt.c (getenv): Declare only if !__cplusplus and !getenv.
+       Otherwise include <stdlib.h>.
+       (exchange): Cast return value of malloc().
+       * hashtab.c (htab_size): Define as both macro and non-inline
+       function.
+       (htab_elements): Likewise.
+       * getpwd.c (getpwd): Use XNEWVEC.
+       (htab_create_alloc_ex): Use C90 prototype-style.
+       * lrealpath.c (lrealpath): Appropriately cast return value of
+       malloc().
+       * make-relative-prefix.c (save_string): Likewise.
+       * make-temp-file.c (try_dir): Rename from "try".  Adjust use in
+       the file.
+       (choose_tmpdir): Use XNEWVEC.
+       * mkstemps.c (mkstemps): Rename parameter "template" to "pattern".
+       * pex-common.c (pex_init_common): Use XNEW.
+       (pex_add_remove): Use XRESIZEVEC.
+       (pex_run): Likewise.
+       (pex_get_status_and_time): Likewise.
+       * pex-djgpp.c (pex_djgpp_exec_child): Likewise.
+       * pex-msdos.c (pex_init): Use XNEW.
+       (pex_msdos_exec_child): Likewise.
+       (pex_msdos_exec_child): Use XRESIZEVEC.
+       * pex-unix.c (pex_wait): Use XNEW.
+       * pex-win32.c (fix_argv): Use XNEWVEC.
+       * pexecute.c (pwait): Likewise.
+       * setenv.c (setenv): Properly cast return value of malloc().
+       * sigsetmask.c (sigsetmask): Rename local variables "old" and
+       "new" to "old_sig" and "new_sig".
+       * sort.c (main): Use XNEWVEC.
+       * spaces.c (spaces): Cast return value of malloc().
+       * strndup.c (strndup): Likewise.
+       * ternary.c (ternary_insert): Use XNEW.
+       * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration
+       with an extern "C" block if __cplusplus.
+       * xstrdup.c (xstrdup): Cast return value of memcpy().
+       * xstrerror.c (strerror): Enclose declaration in an extern "C"
+       block if __cplusplus.
+       * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy().
+
+2005-05-16  Andreas Jaeger  <aj@suse.de>
+
+       * getpwd.c: Remove unneeded prototype getcwd and move getwd so
+       that it's only declared if needed.
+
+       * getopt1.c: Change order of includes so that __GNU_LIBRARY__ is
+       defined.
+
+2005-05-15  Andreas Jaeger  <aj@suse.de>
+
+       * functions.texi: Regenerated.
+
+2005-05-15  Eli Zaretskii  <eliz@gnu.org>
+
+       * pexecute.txh: Enclose multi-word data types in @deftypefn in
+       braces.  Minor wording fixes.  Use --- for em-dash.  Use
+       @enumerate in enumerated lists.
+
+       * fopen_unlocked.c: Enclose multi-word data types in @deftypefn in
+       braces.
+
+2005-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       * pex-djgpp.c: Include string.h, fcntl.h, unistd.h, and
+       sys/stat.h.
+       (pex_init): Fix last argument to pex_init_common.
+       (pex_djgpp_exec_child): Remove leading underscore from _open,
+       _dup, _dup2, _close, and _spawnv/_spawnvp.  Replace `program',
+       which is undeclared, with `executable', which was unused.  Remove
+       unused variable `e'.  Fix casting of last arg to spawnv/spawnvp.
+       (pex_djgpp_wait): Declare arguments with ATTRIBUTE_UNUSED.
+
+2005-05-11  Paul Brook  <paul@codesourcery.com>
+
+       * Makefile.in: Regenerate dependencies.
+
+2005-05-10  Nick Clifton  <nickc@redhat.com>
+
+       * Update the address and phone number of the FSF organization in
+       the GPL notices in the following files:
+       COPYING.LIB, Makefile.in, _doprnt.c, argv.c, asprintf.c,
+       choose-temp.c, clock.c, concat.c, copying-lib.texi, cp-demangle.c,
+       cp-demangle.h, cp-demint.c, cplus-dem.c, dyn-string.c, fdmatch.c,
+       fibheap.c, floatformat.c, fnmatch.c, fopen_unlocked.c,
+       gather-docs, getopt.c, getopt1.c, getruntime.c, hashtab.c, hex.c,
+       lbasename.c, lrealpath.c, maint-tool, make-relative-prefix.c,
+       make-temp-file.c, md5.c, mempcpy.c, mkstemps.c, objalloc.c,
+       obstack.c, partition.c, pex-common.c, pex-common.h, pex-djgpp.c,
+       pex-msdos.c, pex-one.c, pex-unix.c, pex-win32.c, pexecute.c,
+       physmem.c, putenv.c, regex.c, safe-ctype.c, setenv.c, snprintf.c,
+       sort.c, spaces.c, splay-tree.c, stpcpy.c, stpncpy.c, strndup.c,
+       strtod.c, ternary.c, unlink-if-ordinary.c, vasprintf.c,
+       vsnprintf.c, vsprintf.c, xexit.c, xmalloc.c, xstrndup.c
+
+2005-05-06  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * aclocal.m4 (AC_DEFINE_NOAUTOHEADER): Remove.
+       * configure.ac: Replace any AC_DEFINE_NOAUTOHEADER with AC_DEFINE.
+       * configure: Regenerate.
+
+2005-05-06  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
+       Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
+       * aclocal.m4: Don't include accross.m4.
+       * configure, config.in: Regenerate.
+
+2005-04-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * fopen_unlocked.c (unlock_std_streams): New.
+
+       * functions.texi: Regenerate.
+
+2005-04-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * fopen_unlocked.c (unlock_stream): New.
+       Consolidate unlocking code into a helper function.
+
+       * functions.texi: Regenerate.
+
+2005-04-13  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * asprintf.c: Include config.h.
+       * basename.c: Likewise.
+       * fdmatch.c: Likewise.
+       * hex.c: Likewise.
+       * lbasename.c: Likewise.
+       * spaces.c: Likewise.
+       * xatexit.c:Likewise.
+       * configure.ac:  Do check declarations for basename, ffs, asprintf
+       and vasprintf for real.
+       * configure: Regenerate.
+
+2005-04-13  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * argv.c (dupargv): Allocate space of argv[argc], not
+       sizeof(char *) of that amount.  Cast result to char *.
+
+2005-04-12  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * regex.c (wcs_re_match_2_internal, byte_re_match_2_internal):
+       Replace not with negate.
+
+2005-04-12  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * configure.ac: Check declarations for basename, ffs, asprintf,
+       vasprintf.
+       * configure: Regenerate.
+       * config.in: Likewise.
+
+2005-04-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (CFILES): Add fopen_unlocked.c.
+       (REQUIRED_OFILES): Add ./fopen_unlocked.o.
+       Regenerate dependencies.
+
+       * configure.ac: Check for stdio_ext.h and __fsetlocking.
+
+       * fopen_unlocked.c: New file.
+
+       * functions.texi, configure, config.in: Regenerate.
+
+2005-04-04  Ian Lance Taylor  <ian@airs.com>
+
+       * testsuite/test-pexecute.c (TEST_PEX_RUN): Move variable
+       declaration before statement.
+
+2005-04-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * bcmp.c: Fix warnings and implement using memcmp.
+       * bcopy.c: Fix warnings.
+       * bzero.c: Fix warnings and implement using memset.
+
+       * configure.ac (ac_libiberty_warn_cflags): Add -Wwrite-strings
+       -Wstrict-prototypes.
+       * configure, config.in: Regenerate.
+
+       * bsearch.c, index.c, rindex.c, strstr.c, strtol.c, waitpid.c: Fix
+       warnings and reconcile interfaces with relevant standards.
+
+2005-04-02  Ian Lance Taylor  <ian@airs.com>
+
+       * cp-demangle.c: Update copyright.
+
+2005-03-31  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * gettimeofday.c: Add "Supplemental" to @deftypefn.
+       * functions.texi: Regenerate.
+
+2005-03-28  Ian Lance Taylor  <ian@airs.com>
+
+       * pex-common.c: New file.
+       * pex-one.c: New file.
+       * pexecute.c: New file.
+       * pex-common.h: Include <stdio.h>.
+       (struct pex_obj): Define.
+       (struct pex_funcs): Define.
+       (pex_init_common): Declare.
+       * pex-unix.c: Rewrite.
+       * pex-win32.c: Rewrite.
+       * pex-djgpp.c: Rewrite.
+       * pex-msdos.c: Rewrite.
+       * testsuite/text-pexecute.c: New file.
+       * pexecute.txh: Rewrite.
+       * configure.ac: Check for wait3 and wait4.  Set CHECK to
+       really-check rather than check-cplus-dem.
+       * functions.texi: Rebuild.
+       * Makefile.in: Rebuild dependencies.
+       (CFILES): Add pexecute.c, pex-common.c, pex-one.c.
+       (REQUIRED_OFILES): Add pexecute.o, pex-common.o, pex-one.o.
+       * testsuite/Makefile.in (really-check): New target.
+       (check-pexecute, test-pexecute): New targets.
+       * configure: Rebuild.
+
+2005-03-28  Mark Kettenis  <kettenis@gnu.org>
+
+       * unlink-if-ordinary.c: Include <sys/types.h>.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 7/n.
+       * regex.c (PARAMS): Remove definition.
+       (PREFIX): Unconditionaly define using ISO C ## operator.
+       (init_syntax_once, extract_number, extract_number_and_incr,
+       print_fastmap, print_partial_compiled_pattern,
+       print_compiled_pattern, print_double_string, printchar,
+       convert_mbs_to_wcs, re_set_syntax, regex_grow_registers,
+       regex_compile, store_op1, store_op2, insert_op1, insert_op2,
+       at_begline_loc_p, at_endline_p, group_in_compile_stack,
+       insert_space, wcs_compile_range, byte_compile_range,
+       truncate_wchar, re_compile_fastmap, re_compile_fastmap,
+       re_set_registers, re_search, re_search_2, re_search_3, re_match,
+       re_match_2, count_mbs_length, wcs_re_match_2_internal,
+       byte_re_match_2_internal, group_match_null_string_p,
+       alt_match_null_string_p, common_op_match_null_string_p,
+       bcmp_translate, re_compile_pattern, re_comp, re_exec, regcomp,
+       regexec, regerror, regfree): Use ISO C prototype style.
+       * partition.c: (elem_compare): Likewise.
+       * cp-demangle.c (print_usage): Likewise.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 5/n.
+       * random.c (srandom, initstate, setstate, random): Use ISO C
+       prototypes.
+       * putenv.c (putenv): Likewise.
+       * physmem.c (physmem_available, physmem_total, main): Likewise.
+       * pex-win32.c (fix_argv, pexecute, pwait): Likewise.
+       * pex-unix.c (pexecute, pwait): Likewise.
+       * pex-msdos.c (pexecute, pwait): Likewise.
+       * pex-djgpp.c (pexecute, pwait): Likewise.
+       * partition.c (partition_new, partition_delete, partition_union)
+       (elem_compare, partition_print): Likewise.
+       * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk,
+       _obstack_allocated_p, _obstack_free, obstack_free,
+       _obstack_memory_used, print_and_abort, obstack_next_free,
+       obstack_object_size, obstack_base): Likewise.  Remove codes
+       predicated on !defined(__STDC__).
+       * objalloc.c (objalloc_create, _objalloc_alloc, objalloc_free,
+       objalloc_free_block): Use ISO C prototypes.
+       * mkstemps.c (mkstemps): Likewise.
+       * memset.c (memset): Likewise.
+       * mempcpy.c (mempcpy): Likewise.
+       * rename.c (rename): Likewise.
+       * rindex.c (rindex): Likewise.
+       * setenv.c (setenv, unsetenv): Likewise.
+       * sigsetmask.c (sigsetmask): Likewise.
+       * snprintf.c (snprintf): Likewise.
+       * sort.c (sort_pointers, xmalloc): Likewise.
+       * spaces.c (spaces): Likewise.
+       * splay-tree.c (splay_tree_delete_helper,
+       splay_tree_splay_helper, splay_tree_splay,
+       splay_tree_foreach_helper, splay_tree_xmalloc_allocate,
+       splay_tree_new, splay_tree_xmalloc_allocate,
+       splay_tree_new_with_allocator, splay_tree_delete,
+       splay_tree_insert, splay_tree_remove, splay_tree_lookup,
+       splay_tree_max, splay_tree_min, splay_tree_predecessor,
+       splay_tree_successor, splay_tree_foreach,
+       splay_tree_compare_ints, splay_tree_compare_pointers): Likewise.
+       * stpcpy.c (stpcpy): Likewise.
+       * stpncpy.c (stpncpy): Likewise.
+       * strcasecmp.c (strcasecmp): Likewise.
+       * strchr.c (strchr): Likewise.
+       * strdup.c (strdup): Likewise.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 6/n.
+       * strerror.c (init_error_tables, errno_max, strerror, strerrno,
+       strtoerrno, main): Use ISO C prototype style.
+       * strncasecmp.c (strncasecmp): Likewise.
+       * strncmp.c (strncmp): Likewise.
+       * strndup.c (strndup): Likewise.
+       * strrchr.c (strrchr): Likewise.
+       * strsignal.c (init_signal_tables, signo_max, strsignal,
+       strsigno, strtosigno, psignal, main): Likewise.
+       * strstr.c (strstr): Likewise.
+       * strtod.c (strtod, atof): Likewise.
+       * strtol.c (strtol): Likewise.
+       * strtoul.c (strtoul): Likewise.
+       * ternary.c (ternary_insert, ternary_cleanup, ternary_search,
+       ternary_recursivesearch): Likewise.
+       * tmpnam.c (tmpnam): Likewise.
+       * unlink-if-ordinary.c (unlink_if_ordinary): Likewise.
+       * vasprintf.c (int_vasprintf, vasprintf, checkit, main): Likewise.
+       * vfork.c (vfork): Likewise.
+       * vfprintf.c (vfprintf): Likewise.
+       * vprintf.c (vprintf): Likewise.
+       * vsnprintf.c (vsnprintf, checkit, main): Likewise.
+       * vsprintf.c (vsprintf): Likewise.
+       * waitpid.c (waitpid): Likewise.
+       * xatexit.c (xatexit, xatexit_cleanup): Likewise.
+       * xexit.c (xexit): Likewise.
+       * xmalloc.c (xmalloc_set_program_name, xmalloc_failed, xmalloc,
+       xcalloc, xrealloc): Likewise.
+       * xmemdup.c (xmemdup): Likewise.
+       * xstrdup.c (xstrdup): Likewise.
+       * xstrerror.c (xstrerror): Likewise.
+       * xstrndup.c (xstrndup): Likewise.
+
+2005-03-27  Andreas Jaeger  <aj@suse.de>
+
+       * configure.ac (ac_c_preproc_warn_flag): Remove -Wtraditional
+       flags.
+       * configure: Regenerated.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * getopt1.c (getopt_long_only): Fix thinko.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 4/n.
+       * hashtab.c (higher_prime_index, hash_pointer, eq_pointer,
+       htab_size, htab_elements, htab_mod_1, htab_mod, htab_mod_m2,
+       htab_create_alloc, htab_set_functions_ex, htab_create,
+       htab_try_create, htab_delete, htab_empty,
+       find_empty_slot_for_expand, htab_expand, htab_find_with_hash,
+       htab_find, htab_find_slot_with_hash, htab_find_slot,
+       htab_remove_elt, htab_remove_elt_with_hash, htab_clear_slot,
+       htab_traverse_noresize, htab_traverse, htab_collisions,
+       htab_hash_string, iterative_hash): Use ISO C prototype.
+       * hex.c (hex_init): Likewise.
+       * index.c (index): Likewise.
+       * insque.c (insque, remque): Likewise.
+       * lbasename.c (lbasename): Likewise.
+       * lrealpath.c (lrealpath): Likewise.
+       * make-relative-prefix.c (save_string, split_directories,
+       free_split_directories, make_relative_prefix): Likewise.
+       * make-temp-file.c (try, choose_tmpdir, make_temp_file): Likewise.
+       * md5.c (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream,
+       md5_buffer, md5_process_bytes, md5_process_block): Likewise.
+       * memchr.c (memchr): Likewise.
+       * memcpy.c (memcpy): Likewise.
+       * memmove.c (memmove): Likewise.
+       * gettimeofday.c (gettimeofday): Likewise.
+       * getruntime.c (get_run_time): Likewise.
+       * getpwd.c (getpwd, getpwd): Likewise.
+       * getpagesize.c (getpagesize): Likewise.
+       * getopt1.c (getopt_long, getopt_long_only, main): Likewise.
+       * getopt.c (my_index, exchange, _getopt_initialize,
+       _getopt_internal, getopt, main): Likewise.
+       * getcwd.c (getcwd): Likewise.
+       * fnmatch.c (fnmatch): Likewise.
+       * floatformat.c (floatformat_always_valid,
+       floatformat_i387_ext_is_valid, get_field, floatformat_to_double,
+       put_field, floatformat_from_double, floatformat_is_valid,
+       ieee_test, main): Likewise.
+       * fibheap.c (fibheap_new, fibnode_new, fibheap_compare,
+       fibheap_comp_data, fibheap_insert, fibheap_min, fibheap_min_key,
+       fibheap_union, fibheap_extract_min, fibheap_replace_key_data,
+       fibheap_replace_key, fibheap_replace_data, fibheap_delete_node,
+       fibheap_delete, fibheap_empty, fibheap_extr_min_node,
+       fibheap_ins_root, fibheap_rem_root, fibheap_consolidate,
+       fibheap_link, fibheap_cut, fibheap_cascading_cut,
+       fibnode_insert_after, fibnode_remove): Likewise.
+       * ffs.c (ffs): Likewise.
+       * fdmatch.c (fdmatch): Likewise.
+       * dyn-string.c (dyn_string_init, dyn_string_new,
+       dyn_string_delete, dyn_string_release, dyn_string_resize,
+       dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr,
+       dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
+       dyn_string_insert_cstr, dyn_string_insert_char,
+       dyn_string_append, dyn_string_append_cstr,
+       dyn_string_append_char, dyn_string_substring, dyn_string_eq):
+       Likewise.
+
+2005-03-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 3/n.
+       * cplus-dem.c (set_cplus_marker_for_demangling, consume_count,
+       consume_count_with_underscores, code_for_qualifier,
+       qualifier_string, demangle_qualifier, cplus_demangle_opname,
+       cplus_mangle_opname, cplus_demangle_set_style,
+       cplus_demangle_name_to_style, cplus_demangle, grow_vect,
+       ada_demangle, internal_cplus_demangle, squangle_mop_up,
+       work_stuff_copy_to_from, delete_non_B_K_work_stuff,
+       delete_work_stuff, mop_up, demangle_signature,
+       demangle_method_args, demangle_template_template_parm,
+       demangle_expression, demangle_integral_value,
+       demangle_real_value, demangle_template_value_parm,
+       demangle_template, arm_pt, demangle_arm_hp_template,
+       demangle_class_name, demangle_class, iterate_demangle_function,
+       demangle_prefix, gnu_special, recursively_demangle, arm_special,
+       demangle_qualified, get_count, do_type, demangle_fund_type,
+       do_hpacc_template_const_value, do_hpacc_template_literal,
+       snarf_numeric_literal, do_arg, remember_type, remember_Ktype,
+       register_Btype, remember_Btype, forget_B_and_K_types,
+       forget_types, demangle_args, demangle_nested_args,
+       demangle_function_name, string_need, string_delete, string_init,
+       string_clear, string_empty, string_append, string_appends,
+       string_appendn, string_prepend, string_prepends, string_prependn,
+       string_append_template_idx): Use ISO C prootype style.
+       * cp-demint.c (cplus_demangle_fill_component,
+       cplus_demangle_fill_builtin_type, cplus_demangle_fill_operator,
+       cplus_demangle_v3_components): Likewise.
+
+2005-03-26  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to use ISO C prototype style 2/n.
+       * cp-demangle.h: Remove uses of PARAMS.
+       * cp-demangle.c: Likewise.
+       (d_dump, cplus_demangle_fill_name,
+       cplus_demangle_fill_extended_operator, cplus_demangle_fill_ctor,
+       cplus_demangle_fill_dtor, d_make_empty, d_make_comp, d_make_name,
+       d_make_builtin_type, d_make_operator, d_make_extended_operator,
+       d_make_ctor, d_make_dtor, d_make_template_param, d_make_sub,
+       cplus_demangle_mangled_name, has_return_type,
+       is_ctor_dtor_or_conversion, d_encoding, d_name, d_nested_name,
+       d_prefix, d_unqualified_name, d_source_name, d_number,
+       d_identifier, d_operator_name, d_special_name, d_call_offset,
+       d_ctor_dtor_name, cplus_demangle_type, d_cv_qualifiers,
+       d_function_type, d_bare_function_type, d_class_enum_type,
+       d_array_type, d_pointer_to_member_type, d_template_param,
+       d_template_args, d_template_arg, d_expression, d_expr_primary,
+       d_local_name, d_discriminator, d_add_substitution,
+       d_substitution, d_print_resize, d_print_append_char,
+       d_print_append_buffer, d_print_error, cplus_demangle_print,
+       d_print_comp, d_print_java_identifier, d_print_mod_list,
+       d_print_mod, d_print_function_type, d_print_array_type,
+       d_print_expr_op, d_print_cast, cplus_demangle_init_info,
+       d_demangle, __cxa_demangle, cplus_demangle_v3, java_demangle_v3,
+       is_ctor_or_dtor, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor,
+       print_usage, main):
+
+2005-03-26  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       Convert libiberty to ISO C prototype style 1/n.
+       * _doprnt.c: Remove conditional #include <varargs.h> on
+       ANSI_PROTOTYPES as the latter is always assumed.
+       (_doprnt, checkit, main): Use ISO C prototype.
+       * alloca.c (find_stack_direction, C_alloca): Use ISO C prototype.
+       * argv.c: Remove conditional #includes on ANSI_PROTOTYPES.
+       (dupargv, freeargv, buildargv, main): Use ISO C prototype.
+       * atexit.c (atexit): Likewise
+       * asprintf.c: Remove conditional include on ANSI_PROTOTYPES.
+       (asprintf): Use ISO C prototype.
+       * basename.c (basename): Likewise
+       * bcmp.c (bcmp): Likewise.
+       * bcopy.c (bcopy): Likewise.
+       * bzero.c (bzero): Likewise.
+       * bsearch.c (bsearch): Likewise.  Improve const-correctness.
+       * choose-temp.c (choose_temp_base): Likewise.
+       * calloc.c: Remove conditional #include on ANSI_PROTOTYPES.
+       (calloc): Use ISO C prototype.
+       * clock.c (clock): Likewise.
+       * concat.c: Remove conditional #include on ANSI_PROTOTYPES.
+       (vconcat_length, vconcat_copy, concat_length, concat_copy,
+       concat_copy2, concat, reconcat, main): Use ISO C prototype.
+       * copysign.c (copysign): Likewise.
+
+2005-03-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (CFILES): Add strndup.c and xstrndup.c.
+       (REQUIRED_OFILES): Add xstrndup.o.
+       (CONFIGURED_OFILES): Add strndup.o.
+       Regenerate dependencies.
+
+       * configure.ac (funcs, AC_CHECK_FUNCS): Add strndup.
+
+       * strndup.c, xstrndup.c: New.
+
+       * config.in, configure, functions.texi: Regenerate.
+
+2005-03-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * xmemdup.c, xstrdup.c: Expose the tail call.
+
+2005-03-09  Mark Mitchell  <mark@codesourcery.com>
+
+       * configure.ac (funcs): Add gettimeofday.
+       * configure: Regenerated.
+       * gettimeofday.c: New file.
+       * Makefile.in (CFILES): Add gettimeofday.
+       (CONFIGURED_OFILES): Add gettimeofday.o.
+       (./gettimeofday.o): New rule.
+
+2005-03-09  Ian Lance Taylor  <ian@airs.com>
+
+       * pex-os2.c: Remove.
+       * configure.ac: Remove *-*-os2-emx* case when setting pexecute.
+       * Makefile.in (CFILES): Remove pex-os2.c.
+       (CONFIGURED_OFILES): Remove pex-os2.o.
+       (pex-os2.o): Remove target.
+       * configure: Rebuild.
+
+2005-03-07  Ian Lance Taylor  <ian@airs.com>
+
+       * mpw-config.in: Remove.
+       * mpw-make.sed: Remove.
+       * mpw.c: Remove.
+       * Makefile.in (CFILES): Remove pex-mpw.c.
+       (CONFIGURED_OFILES): Remove pex-mpw.o.
+       (mpw.o, pex-mpw.o): Remove targets.
+       * maint-tool (undoc): Remove reference to mpw.c.
+
+2005-03-06  DJ Delorie  <dj@redhat.com>
+
+       * configure.ac (target_header_dir): vfork is a stub under djgpp.
+       * configure: Regenerated.
+
+2005-03-01  Jan Beulich  <jbeulich@novell.com>
+
+       * Makefile.in (CFILES): Add unlink-if-ordinary.c
+       (REQUIRED_OFILES): Add unlink-if-ordinary.o.
+       Add dependencies and rule for unlink-if-ordinary.o.
+       * unlink-if-ordinary.c: New.
+
+2005-03-01  Ben Elliston  <bje@au.ibm.com>
+
+       * hashtab.c (htab_find_slot_with_hash): Make function
+       documentation clearer.
+
+2005-02-13  Jason Merrill  <jason@redhat.com>
+
+       * cp-demangle.c (__cxa_demangle): Change resolution of ambiguous
+       arguments.
+
+2005-01-11  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
+
+       * hex.c (hex_value): Group 'unsigned int' together to get correct
+       markup.
+       * functions.texi: Regenerated.
+
+2004-12-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * Makefile.in: Undo to 2004-12-17.
+       * aclocal.m4: Likewise.
+       * config.table: Likewise.
+       * configure.ac: Likewise.
+       * maint-tool: Likewise.
+       * configure: Likewise.
+
+2004-12-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR bootstrap/19072
+       * Makefile.in (enable_shared): New substitute.
+       (LTTARGETLIB): New.
+       (PREFIXTARGETLIB): New.
+       (LTTESTLIB): New.
+       (PREFIXTESTLIB): New.
+       (CCLD): New.
+       (LINK): New.
+       ($(TARGETLIB)): Use $(LINK) to create libraries and create
+       targets by hand.
+       ($(TESTLIB)): Likewise.
+       (mostlyclean): Don't remove .libs. Remove the libtool object
+       directory.
+
+       * config.table (enable_shared): Removed.
+
+       * configure.ac (enable_static): Set to yes.
+       (AC_PROG_LIBTOOL): Removed.
+       (AM_DISABLE_SHARED): Uncommented.
+       (AM_PROG_LIBTOOL): Likewise.
+       (LIBOBJS): Add `./' to avoid VPATH.
+       (LTLIBOBJS): Likewise.
+       (enable_shared): Substitute.
+       * configure: Regenerated.
+
+2004-12-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * Makefile.in (top_builddir): Set to `.'.
+       (OUTPUT_OPTION): Removed.
+       (LIBTOOL): New.
+       (LTLIBOBJS): New.
+       (EXTRA_LTOFILES): New.
+       (FLAGS_TO_PASS): Add EXTRA_LTOFILES.
+       (all): Remove stamp-picdir.
+       (LTCOMPILE): New.
+       (.c.lo): New rule.
+       (REQUIRED_LTOFILES): New.
+       (CONFIGURED_LTOFILES): New.
+       ($(TARGETLIB)): Check .libs for PIC object files. Depend on
+       $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS).
+       (stamp-picdir): Completely removed.
+       (maint-missing): Pass $(REQUIRED_LTOFILES)
+       $(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES)
+       $(CONFIGURED_OFILES)
+       (maint-buildall): Depend on $(REQUIRED_LTOFILES)
+       $(CONFIGURED_LTOFILES).
+       (mostlyclean): Also remove *.lo .libs.
+       Run "make maint-deps".
+
+       * aclocal.m4: Include ../libtool.m4.
+
+       * config.table: Don't check --enable-shared.
+
+       * configure.ac (AC_PROG_LIBTOOL): Add.
+       (AC_PROG_CC_C_O): Removed.
+       (OUTPUT_OPTION): Removed.
+       (NO_MINUS_C_MINUS_O): Removed.
+       (ltpexecute): New substitute.
+       (LIBOBJS): Cleanup.
+       * configure: Regenerated.
+
+       * maint-tool: Updated for .lo/libtool.
+
+2004-12-11  Ben Elliston  <bje@au.ibm.com>
+
+       * configure.ac: Invoke AC_CHECK_SIZEOF for sizeof (int).
+       * configure: Regenerate.
+       * config.in: Likewise.
+
+2004-12-07  DJ Delorie  <dj@redhat.com>
+
+       * splay-tree.c (splay_tree_delete_helper): Redesign the logic so
+       that recursion (and thus large stack space) is not needed.
+
+2004-11-29  Matt Kraai  <kraai@alumni.cmu.edu>
+
+       * pex-unix.c: Fix the spelling of longjmp.
+
+2004-11-23  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       PR other/18623
+       * cp-demangle.c (d_call_offset): Remove useless local variables
+       offset and virtual_offset.
+       * cplus-dem.c (ada_demangle): Remove useless local variable
+       at_start_name.
+       (demangle_template): Remove useless local variable start.
+
+2004-11-19  Roger Sayle  <roger@eyesopen.com>
+
+       * objalloc.c, strsignal.c, xstrerror.c: Include "config.h" before
+       "ansidecl.h" to avoid redeclaration errors with native compilers.
+       * regex.c: Protect config.h from multiple inclusion.
+
+2004-11-12  Mike Stump  <mrs@apple.com>
+
+       * Makefile.in (libiberty.html): Fix html generation.
+
+2004-09-08  Adam Nemet  <anemet@lnxw.com>
+
+       * vasprintf.c: Accept __va_copy in addition to va_copy.
+
+2004-09-03  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure: Regenerate.
+
+2004-09-02  Paolo Bonzini  <bonzini@gnu.org>
+
+       * configure.ac: Do not enable multilibs for build-side libiberty.
+
+2004-06-29  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * lrealpath.c (lrealpath): Add _WIN32 support.
+
+2004-06-28  Zack Weinberg  <zack@codesourcery.com>
+
+       * cp-demangle.h: Declare cplus_demangle_operators,
+       cplus_demangle_builtin_types, cplus_demangle_mangled_name, and
+       cplus_demangle_type as static if IN_GLIBCPP_V3.
+
+2004-06-28  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       PR other/16240
+       * cp-demangle.c (d_expr_primary): Check for a failure return from
+       cplus_demangle_type.
+       * testsuite/demangle-expected: Add test case.
+
+2004-05-31  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * pex-win32.c (fix_argv): Expand comment.
+
+2004-05-25  Daniel Jacobowitz  <drow@false.org>
+
+       * Makefile.in: Add .NOEXPORT.
+
+2004-04-29  Douglas B Rupp  <rupp@gnat.com>
+
+       * mkstemps.c (mkstemps) [VMS]: Remove special open option. Update
+       copyright.
+
+2004-04-26  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
+       * configure.ac (UNSIGNED_64BIT_TYPE): Unquote the definition.
+       * configure: Regenerate.
+
+2004-04-22  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.c: Include limits.h, stdint.h, ansidecl.h.
+       (CHAR_BIT): Provide default.
+       (struct prime_ent, prime_tab): New.
+       (higher_prime_index): Rename from higher_prime_number, return index.
+       (htab_mod_1): New.
+       (htab_mod, htab_mod_m2): Use it.
+       (htab_create_alloc, htab_create_alloc_ex): Store prime index.
+       (htab_expand): Likewise.
+       * configure.ac: Check for stdint.h.
+       (UNSIGNED_64BIT_TYPE): New define and checks to fill it in.
+       * config.in, configure: Rebuild.
+
+2004-04-13  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * strerror.c: Include config.h, and redefine sys_nerr and
+       sys_errlist, before including ansidecl.h and libiberty.h.
+
+2004-04-13  Jeff Law  <law@redhat.com>
+
+       * hashtab.c (htab_remove_elt_with_hash): New function.
+       (htab_remove_elt): Implement in terms of htab_remove_elt_with_hash.
+
+2004-03-31  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.c (htab_size): Move to top of file; mark inline.
+       (htab_elements): Likewise.
+       (htab_mod, htab_mod_m2): New.
+       (htab_delete): Refactor htab->size and htab->entries.
+       (htab_empty): Likewise.
+       (find_empty_slot_for_expand): Use htab_size, htab_mod, htab_mod_m2.
+       (htab_find_with_hash, htab_find_slot_with_hash): Likewise.
+       (htab_clear_slot): Use htab_size, htab_elements.
+       (htab_traverse_noresize, htab_traverse): Likewise.
+
+2004-03-17  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * pex-unix.c (pexecute): Use vfork instead of fork, with
+       appropriate changes to make this safe.
+       * pex-common.h (STDERR_FILE_NO): Define.
+
+       * Makefile.in: Clean up REQUIRED_OFILES and CONFIGURED_OFILES for
+       an 80 column screen.  Run maint-deps.
+
+2004-03-09  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * configure.ac: Bump version to 2.59.  Apply suggested autoupdates.
+       * acconfig.h: Delete redundant file.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+
+2004-03-09  Hans-Peter Nilsson  <hp@axis.com>
+
+       * configure: Regenerate for config/accross.m4 correction.
+
+2004-03-07  Andreas Jaeger  <aj@suse.de>
+
+       * testsuite/test-demangle.c: Include <string.h> and <stdlib.h> for
+       prototypes.
+       (main): Initialize style.
+
+2004-02-24  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED,
+       D_PRINT_UNSIGNED_LONG, D_PRINT_LONG_LONG,
+       D_PRINT_UNSIGNED_LONG_LONG, D_PRINT_FLOAT.
+       * cp-demangle.c (cplus_demangle_builtin_types): Change char and
+       short types to D_PRINT_DEFAULT.  Change other integer types to use
+       new D_PRINT_* values where appropriate.  Change float types to
+       D_PRINT_FLOAT.
+       (d_print_comp) [LITERAL, LITERAL_NEG]: Handle new D_PRINT_*
+       values.
+       * testsuite/demangle-expected: Adjust two test cases.
+
+       * cp-demangle.c (d_print_function_type): Print a space before the
+       parenthesis around the function type in more cases.
+       * testsuite/demangle-expected: Adjust one test case.
+
+       * cp-demangle.c (d_print_comp) [UNARY]: Don't emit extra
+       parentheses around a cast.
+       * testsuite/demangle-expected: Adjust two test cases to match new
+       output.
+
+       * cp-demangle.c (__cxa_demangle): Pass DMGL_PARAMS to d_demangle.
+
+       * cp-demangle.c (d_print_comp) [RESTRICT, VOLATILE, CONST]: Don't
+       push more than one of the same CV-qualifier on the top of the
+       stack.
+       (d_print_comp) [ARRAY_TYPE]: If the array itself is CV-qualified,
+       move the CV-qualifiers to apply to the element type instead.
+       (d_print_array_type): When checking the modifiers, keep looking
+       past ones which have been printed already.
+       * testsuite/demangle-expected: Add three test cases.
+
+2004-02-23  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (__cxa_demangle): Adjust last patch to handle
+       empty string correctly.
+
+       * cp-demangle.c (__cxa_demangle): It is not an error if status is
+       not NULL.  It is an error if the mangled name is the same as a
+       built-in type name.
+       (main): If IN_GLIBCPP_V3 is defined, test __cxa_demangle rather
+       than cplus_demangle_v3.
+
+       * dyn-string.c: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and
+       the associated #define of RETURN_ON_ALLOCATION_FAILURE.
+
+2004-02-16  Matt Kraai  <kraai@alumni.cmu.edu>
+
+       * regex.c: Include <ansidecl.h>.
+       (regcomp): Cast i to int.
+       (regerror): Add ATTRIBUTE_UNUSED to parameter preg.
+
+2004-01-25  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * configure.ac: Add m4_pattern_allow(LIBOBJS).
+       * configure: Regenerate.
+
+2004-01-22  DJ Delorie  <dj@redhat.com>
+
+       * Makefile.in: Convert to ./ throughout.  Rebuild dependencies
+       with explicit build rules.
+       (VPATH): Remove.
+       (.c.o): Poison.
+       * configure.ac (pexecute, LIBOBJS): Add ./ .
+       * maint-tool: Build dependencies with explicit rules.
+
+2004-01-15  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * strdup.c (strdup): Constify the argument.
+
+2004-01-14  Loren J. Rittle  <ljrittle@acm.org>
+
+       * Makefile.in (distclean): Remove config.cache.
+
+2004-01-13  Daniel Jacobowitz  <drow@mvista.com>
+
+       * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE
+       takes two parameters.
+       * cp-demint.c (cplus_demangle_fill_component): Likewise.
+
+2004-01-12  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c: Include "cp-demangle.h".  If IN_GLIBCPP_V3 is
+       defined, rename some functions which are to become static via
+       #define.
+       (CP_STATIC_IF_GLIBCPP_V3): Define.
+       (struct d_operator_info): Move definition to cp-demangle.h, and
+       rename to demangle_operator_info.  Change all uses.
+       (enum d_builtin_type_print): Move definition to cp-demangle.h.
+       (struct d_builtin_type_info): Move definition to cp-demangle.h,
+       and rename to demangle_builtin_type_info.  Change all uses.
+       (enum d_comp_type): Move definition to include/demangle.h, and
+       rename to demangle_component_type, and change all enums to start
+       with DEMANGLE_COMPONENT_ instead of D_.  Change all uses.
+       (struct d_comp): Move definition to include/demangle.h, and rename
+       to demangle_component.  Change all uses.
+       (struct d_info): Move definition to cp-demangle.h.
+       (cplus_demangle_fill_name): New function.
+       (cplus_demangle_fill_extended_operator): New function.
+       (cplus_demangle_fill_ctor): New function.
+       (cplus_demangle_fill_dtor): New function.
+       (d_make_empty): Remove type parameter.  Change all callers.
+       (d_make_name): Use cplus_demangle_fill_name.
+       (d_make_extended_operator): Use
+       cplus_demangle_fill_extended_operator.
+       (d_make_ctor): Use cplus_demangle_fill_ctor.
+       (d_make_dtor): Use cplus_demangle_fill_dtor.
+       (cplus_demangle_mangled_name): Rename from d_mangled_name.  Make
+       non-static by default.  Change all callers.
+       (cplus_demangle_operators): Rename from d_operators.  Change all
+       uses.  Make non-static by default.  Add sentinel at end of array.
+       (d_operator_name): Adjust initialization of high for new sentinel
+       in cplus_demangle_operators.
+       (cplus_demangle_builtin_types): Rename from d_builtin_types.
+       Change all uses.  Make non-static by default.  Change initializer
+       to use D_BUILTIN_TYPE_COUNT instead of magic number 26.
+       (cplus_demangle_type): Rename from d_type.  Make non-static by
+       default.  Change all callers.
+       (cplus_demangle_init_info): Rename from d_init_info.  Make
+       non-static by default.  Change all callers.
+       * cp-demangle.h: New file.
+       * cp-demint.c: New file.
+       * Makefile.in: Rebuild dependencies.
+       (CFILES): Add cp-demint.c.
+       (REQUIRED_OFILES): Add cp-demint.o.
+
+2004-01-09  Kelley Cook  <kcook@gcc.gnu.org>
+
+       * configure.in:  Rename file to ...
+       * configure.ac:  ... this.
+       * Makefile.in: Update a comment for above change.
+       * README: Likewise.
+       * config.in: Regenerate.
+
+2004-01-02  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip
+       CV-qualifiers from D_COMP_LOCAL_NAME right subtree.
+       * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when
+       demangling template parameters.
+       * testsuite/test-demangle.c (fail): New static function.
+       (main): Support new options in input file: --no-params,
+       --is-v3-ctor, and --is-v3-dtor.
+       * testsuite/demangle-expected: Add --no-params to most tests, and
+       add the correct result when parameters are not demangled.  Add
+       some simple tests for V3 constructor/destructor recognition.
+
+2003-12-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cp-demangle.c (is_ctor_or_dtor): Fix error in last change.
+
+2003-12-22  Daniel Jacobowitz  <drow@mvista.com>
+
+       PR debug/13272
+       * Makefile.in (lbasename.o): Depend on filenames.h.
+       * lbasename.c: Include "filenames.h" instead of defining
+       its macros locally.
+
+2003-12-22  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports
+       dynamic arrays.
+       (struct d_operator_info): Add len field.
+       (struct d_builtin_type_info): Add len and java_len fields.
+       (struct d_standard_sub_info): Add simple_len, full_len, and
+       set_last_name_len fields.
+       (struct d_comp): Add len field to s_string.
+       (struct d_info): Add send, did_subs, and expansion fields.
+       (d_append_string_constant): Define.
+       (d_append_string): Remove.  Change all users to use
+       d_append_string_constant or d_append_buffer instead.
+       (d_make_sub): Add len parameter.  Change all callers.
+       (d_name): Increase expansion when substituting std::.
+       (d_unqualified_name): Increase expansion for an operator.
+       (d_number): Don't use multiplication for negative numbers.
+       (d_identifier): Make sure there are enough characters in the
+       string for the specified length.  Adjust expansion for an
+       anonymous namespace.
+       (d_operators): Initialize len field.
+       (d_special_name, d_ctor_dtor_name): Increase expansion.
+       (d_builtin_types): Initialize len and java_len fields.
+       (d_type): Increase expansion for a builtin type.
+       (d_cv_qualifiers): Increase expansion for each qualifier.
+       (d_bare_function_type): Decrease expansion when removing single
+       void parameter.
+       (d_template_param): Increment did_subs.
+       (d_expression): Increase expansion for an operator.
+       (d_expr_primary): Decrease expansion for a type we will print
+       specially.
+       (standard_subs): Initialize new fields.
+       (d_substitution): Increment did_subs when doing a normal
+       substitution.  Increase expansion for a special substitution.
+       (d_print): Add estimate parameter.  Change all callers.
+       (d_print_comp) [D_COMP_NAME]: Handle C++ case inline.
+       (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call.
+       (d_print_java_identifier): Rename from d_print_identifier.  Handle
+       only Java case.  Change caller.
+       (d_init_info): Change return type to void.  Change all callers.
+       Initialize send, did_subs, and expansion fields.  Do not
+       initialize comps and subs fields.
+       (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs
+       arrays on stack.  Make an estimate of the length of the demangled
+       name.  Ifdef CP_DEMANGLE_DEBUG, print estimation failures.
+       (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and
+       subs arrays on stack.
+
+2003-12-20  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_identifier): In Java mode, skip an optional '$'
+       after the identifier.
+       * testsuite/demangle-expected: Add test case.
+
+2003-12-19  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       Fix for PR c++/13447:
+       * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME.
+       (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME.
+       (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like
+       D_COMP_QUAL_NAME.
+       (is_ctor_or_dtor): Likewise.
+       (d_local_name): Use D_COMP_LOCAL_NAME rather than
+       D_COMP_QUAL_NAME.
+       (d_print_comp) [D_COMP_LOCAL_NAME]: New.
+       (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is
+       D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree.
+       (d_print_mod_list): Handle D_COMP_LOCAL_NAME.
+       * testsuite/demangle-expected: Add two test cases.
+
+       * cp-demangle.c (d_print_function_type): Clear the global modifier
+       list when printing the modifiers, not just when printing the
+       function parameters.
+       * testsuite/demangle-expected: Add two test cases.
+
+2003-12-15  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_print_function_type): Print the function
+       parameters with no modifiers.
+       * testsuite/demangle-expected: Add test case.
+
+       * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't
+       expect that we've read the entire string.
+       (is_ctor_or_dtor): Don't expect that we've read the entire
+       string--reverse patch of 2003-11-29.
+
+2003-12-15  Brendan Kehoe  <brendan@zen.org>
+
+       * libiberty/Makefile.in (floatformat.o): Add dependency on
+       config.h to accompany change of 2003-12-03.
+
+2003-12-15  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       Fix handling of constructor/destructor of standard substitution:
+       * cp-demangle.c (struct d_standard_sub_info): Define.
+       (d_substitution): Add prefix argument.  Change all callers.
+       Rework handling of standard substitutions to print full name when
+       qualifying a constructor/destructor, or when DMGL_VERBOSE is set.
+       * testsuite/demangle-expected: Add test case.
+
+       Fix handling of negative literal constants:
+       * cp-demangle.c (enum d_comp_type): Add D_COMP_LITERAL_NEG.
+       (d_dump, d_make_comp): Handle D_COMP_LITERAL_NEG.
+       (d_expr_primary): Use D_COMP_LITERAL_NEG for a negative number.
+       (d_print_comp): Handle D_COMP_LITERAL_NEG.
+       * testsuite/demangle-expected: Add test case.
+
+2003-12-04  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (IS_UPPER, IS_LOWER): Define.
+       (d_last_char): Define new macro.
+       (d_make_name): Reject an empty name.
+       (d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
+       (d_substitution, d_print_identifier): Likewise.
+       (d_print_comp) [D_COMP_OPERATOR]: Likewise.
+       (d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
+       (d_print_mod) Use new d_last_char macro.
+       (d_print_cast): Use new d_last_char macro.
+       (is_ctor_or_dtor): Don't leak memory.
+
+       Fix handling of member function modifiers:
+       * cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
+       D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
+       (d_dump): Dump new d_comp_type values.
+       (d_make_comp): Accept new d_comp_type values.
+       (has_return_type): Only accept _THIS variants of qualifiers.
+       (d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
+       qualifiers.
+       (d_cv_qualifiers): Add member_fn parameter.  Change all callers.
+       (d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
+       qualifiers and printing them at the end, add _THIS qualifiers to
+       the modifier list.
+       (d_print_comp) [D_COMP_*_THIS]: New cases.
+       (d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
+       qualifiers.
+       (d_print_mod_list): Add suffix parameter.  Change all callers.
+       Keep walking the list even if the current modifier has been
+       printed.
+       (d_print_mod): Handle new _THIS qualifiers.
+       (d_print_function_type): Handle new _THIS qualifiers when deciding
+       whether to print a parenthesis.  Put a space before the
+       parenthesis in some cases.  Call d_print_mod_list again at the
+       end, passing suffix as 1.
+       (is_ctor_or_dtor): Look for new _THIS qualifiers.
+       * testsuite/demangle-expected: Add test case.
+
+       Fix for PR gcc/13304:
+       * cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
+       before the '<' is itself a '<', insert a space.
+       (d_print_cast): Likewise.
+       * testsuite/demangle-expected: Add test case.
+
+       Fix for PR gcc/13244:
+       * cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
+       which uses the '>' operator in an extra layer of parens.
+       * testsuite/demangle-expected: Add test case.
+
+2003-12-03  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * floatformat.c: Include "config.h" and <string.h> if available.
+       (INFINITY, NAN): Define if not defined by <math.h>.
+       (floatformat_to_double): Handle NaN, infinity, and denormalized
+       numbers.
+       (floatformat_from_double): Likewise.
+       (ieee_test): In debugging code, use little endian rather than big
+       endian.  Correct tests to handle NaN and to check correct sign of
+       zero.  Omit m68k extended test.
+       (main): Add more debugging cases.
+
+2003-11-29  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_demangle): Only return success if we consumed
+       the entire demangled string.
+       (is_ctor_or_dtor): Likewise.
+
+       * testsuite/demangle-expected: Revert one part of 2003-06-26 patch
+       to restore expected result of EDG test case to original expected
+       result.
+
+2003-11-26  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (struct d_print_mod): Add templates field.
+       (d_make_builtin_type): Check for NULL type.
+       (d_make_extended_operator): Check for NULL name.
+       (d_make_ctor, d_make_dtor): Likewise.
+       (d_mangled_name): Add top_level parameter.  Change all callers.
+       (d_encoding): If DMGL_PARAMS is not set, strip off initial
+       CV-qualifiers.
+       (d_type): Check some return values we rely on.
+       (d_bare_function_type, d_array_type): Likewise.
+       (d_pointer_to_member_type, d_template_args): Likewise.
+       (d_add_substitution): Fail if argument is NULL.
+       (d_print_resize): Check whether buf is NULL.
+       (d_print_comp): Save current templates list with each modifier.
+       Don't pass the modifier list down when printing a template.
+       (d_print_cast): Don't pass the modifier list down when printing a
+       template.
+       (d_print_mod_list): Temporarily set templates list while printing
+       a modifier.
+       (d_print_mod): Check that buf is not NULL before using it.
+       (d_print_function_type): Print parens if there is no modifier.
+       (d_init_info): Permit as many substitutions as there are
+       characters in the mangled name.
+       * testsuite/demangle-expected: Add two new test cases.
+
+2003-11-25  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (java_demangle_v3): Pass DMGL_PARAMS to
+       d_demangle.
+
+2003-11-22  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (d_encoding): Add top_level parameter.  Change all
+       callers.
+       (print_usage): Display new -p option.
+       (long_options): Add --no-params.
+       (main): Accept and handle -p.
+
+2003-11-21  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (has_return_type): Skip qualifiers when checking
+       whether we have a template.
+       * testsuite/demangle-expected: Add four new tests.
+
+2003-11-20  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * testsuite/demangle-expected: Minor changes to match output of
+       new demangler: adjust whitespace in four tests, and change order
+       of qualifiers in one test.
+
+       * cp-demangle.c: Complete rewrite.
+
+2003-11-19  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-demangle.c (demangle_type): Correct thinko in substitution
+       processing.
+
+2003-11-18  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * cp-demangle.c (demangle_operator_name): Remove space before
+       "sizeof".
+       (demangle_type_ptr): Put qualifiers in the right place.  Handle
+       qualifiers in pointer to member specially.
+       (demangle_type): Handle qualifiers for pointer or reference
+       specially.  Handle function type.
+       (demangle_local_name): Save and restore caret around demangling of
+       initial encoding.
+
+       * testsuite/test-demangle.c (main): Don't pass DMGL_VERBOSE to
+       cplus_demangle.
+
+       * testsuite/Makefile.in (test-demangle): Depend upon libiberty.a.
+
+2003-10-31  Andreas Jaeger  <aj@suse.de>
+
+       * floatformat.c (floatformat_always_valid): Add unused attribute.
+
+2003-10-30  Josef Zlomek  <zlomekj@suse.cz>
+
+       Jan Hubicka <jh@suse.cz>
+       * vasprintf.c (int_vasprintf): Pass va_list by value.
+       Use va_copy for copying va_list.
+       (vasprintf): Pass va_list by value.
+
+2003-10-30  Josef Zlomek  <zlomekj@suse.cz>
+
+       * hashtab.c (htab_find_slot_with_hash): Decrease n_deleted
+       instead of increasing n_elements when inserting to deleted slot.
+
+2003-10-20  J. Brobecker  <brobecker@gnat.com>
+
+       * cplus-dem.c (demangle_template): Register a new Btype only
+       when needed.
+       * testsuite/demangle-expected: Add a new test.
+
+2003-10-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/demangle-expected: Update the expected output of
+       _GLOBAL__I__Z2fnv.
+
+2003-10-02  Daniel Jacobowitz  <drow@mvista.com>
+
+       * strerror.c: Revert last change.  Declare static sys_nerr
+       and sys_errlist using different names.
+
+2003-10-01  Daniel Jacobowitz  <drow@mvista.com>
+
+       * strerror.c: Don't provide or reference sys_errlist if
+       strerror is available.
+
+2003-10-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * configure.in: Check if $MAKEINFO is missing.
+       * configure: Regenerated.
+
+2003-09-24  Daniel Jacobowitz  <drow@mvista.com>
+
+       * configure.in: Use AC_PROG_CPP_WERROR.
+       * configure: Regenerated.
+
+2003-09-22  Andrew Cagney  <cagney@redhat.com>
+
+       * floatformat.c (floatformat_i387_ext_is_valid): New function.
+       (floatformat_always_valid): New function.
+       (floatformat_i387_ext): Initialize new "is_valid" field to
+       "floatformat_i387_ext_is_valid".
+       (floatformat_ieee_single_little): Initialize "is_valid" field to
+       floatformat_always_valid.
+       (floatformat_ieee_double_big): Ditto.
+       (floatformat_ieee_double_little): Ditto.
+       (floatformat_ieee_double_little): Ditto.
+       (floatformat_ieee_double_littlebyte_bigword): Ditto.
+       (floatformat_i960_ext): Ditto.
+       (floatformat_m88110_ext): Ditto.
+       (floatformat_m88110_harris_ext): Ditto.
+       (floatformat_arm_ext_big): Ditto.
+       (floatformat_arm_ext_littlebyte_bigword): Ditto.
+       (floatformat_ia64_spill_big): Ditto.
+       (floatformat_ia64_spill_little): Ditto.
+       (floatformat_ia64_quad_big): Ditto.
+       (floatformat_ia64_quad_little): Ditto.
+       (floatformat_ia64_quad_little): Ditto.
+       (floatformat_is_valid): Call "is_valid".
+
+2003-09-15  Andrew Cagney  <cagney@redhat.com>
+
+       * floatformat.c (get_field): Make "data" constant.
+       (floatformat_is_valid, floatformat_to_double): Make "from"
+       constant, fix casts.
+       (floatformat_from_double): Make "from" constant.
+
+2003-09-15  Daniel Jacobowitz  <drow@mvista.com>
+
+       * floatformat.c (floatformat_is_valid): New function.
+       (get_field, put_field): Correct comments.
+
+2003-09-06  Josef Zlomek  <zlomekj@suse.cz>
+
+       * fibheap.c (fibheap_replace_key_data): Change type of OKEY to
+       FIBHEAPKEY_T.
+
+2003-09-02  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR bootstrap/12100
+       * aclocal.m4 (AC_LANG_FUNC_LINK_TRY): Define.
+       * configure: Rebuilt.
+
+2003-08-27  Daniel Jacobowitz  <drow@mvista.com>
+
+       * aclocal.m4: Include acx.m4 and no-executables.m4.
+       (libiberty_AC_FUNC_STRNCMP): Use AC_LIBOBJ.
+       (LIB_AC_PROG_CC): Remove.
+       * configure.in: Update AC_PREREQ to 2.57.  Use GCC_NO_EXECUTABLES.
+       Use AC_PROG_CC and set ac_libiberty_warn_cflags instead of using
+       LIB_AC_PROG_CC.  Use AC_LIBOBJ.  Call AC_ISC_POSIX later, only if
+       performing link tests.
+       * configure: Regenerated.
+
+2003-08-12  Nathanael Nerode  <neroden@gcc.gnu.org>
+
+       * cp-demangle.c: Clarify what package(s) this is part of.
+
+2003-07-05  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * pex-win32.c (pexecute): Mark parameters this_pname and
+       temp_base as unused. Remove unused variables retries,
+       sleep_interval. Initialize org_stdin, org_stdout.
+       (pwait): Mark parameter flags as unused.
+
+2003-07-02  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * pex-win32.c (fix_argv): Ensure that the executable pathname
+       uses Win32 backslashes.
+       (pexecute): Cast away constness when assigning *errmsg_arg.
+
+2003-06-26  H.J. Lu <hongjiu.lu@intel.com>
+
+       * testsuite/demangle-expected: Add more GNU V3 testcases.
+
+2003-06-22  Zack Weinberg  <zack@codesourcery.com>
+
+       * safe-ctype.c: Use HOST_CHARSET_ASCII and HOST_CHARSET_EBCDIC,
+       not HC_ASCII and HC_EBCDIC.
+       Add documentation in form expected by gather-docs.
+       * hex.c: Use HOST_CHARSET, not hand-coded check of character set.
+       * Makefile.in, functions.texi: Regenerate.
+
+2003-06-21  Zack Weinberg  <zack@codesourcery.com>
+
+       * safe-ctype.c: Separate out EOF==-1 check.  Use HOST_CHARSET
+       for charset determination.
+
+2003-06-19  Dara Hazeghi  <dhazeghi@yahoo.com>
+
+       * configure.in: Add check for malloc.h needed by
+       m68k for function free().
+       * configure: Regenerated.
+       * config.in: Add HAVE_MALLOC_H.
+       * hashtab.c: include malloc.h were available for
+       free().
+
+2003-06-09  Albert Chin-A-Young  <china@thewrittenword.com>
+
+       PR bootstrap/10974
+       * physmem.c: Update comment.
+       * configure.in: Modify test for _system_configuration for older
+       AIX systems.
+
+       * config.in, configure: Regenerated.
+
+2003-06-05  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR other/10810
+       * test-demangle.c (getline): Fix fence-post error.
+
+2003-06-03  Nick Clifton  <nickc@redhat.com>
+
+       * asprintf.c: Change comment to note that -1 is returned upon
+       error.
+       * vasprintf.c: Likewise.
+       (vasprintf): Return -1 upon error.
+       * functions.texi: Document changes to asprintf and vasprintf.
+
+2003-05-19  Kelley Cook  <kelleycook@wideopenwest.com>
+
+       * config.table: Accept i[345867]86 variant.
+
+2003-05-15  Jim Blandy  <jimb@redhat.com>
+
+       * hex.c (_hex_value): Make this unsigned.
+       (hex_value): Update documentation for new return type.  hex_value
+       now expands to an unsigned int expression, to avoid unexpected
+       sign extension when we store it in a bfd_vma, which is larger than
+       int on some platforms.
+       * functions.texi: Regenerated.
+
+2003-05-07  Josef Zlomek  <zlomekj@suse.cz>
+
+       * splay-tree.c (splay_tree_predecessor): Fix comment.
+       (splay_tree_successor): Fix comment.
+
+2003-05-07  Jason Merrill  <jason@redhat.com>
+
+       * hashtab.c (iterative_hash): New fn.
+       * configure.in: Add AC_C_BIGENDIAN_CROSS.
+       * aclocal.m4: Include accross.m4.
+       * configure, config.in: Regenerate.
+
+2003-05-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in (AC_CHECK_FUNCS): Don't make multiple calls.
+       * configure: Regenerate.
+
+2003-05-03  Carlo Wood  <carlo@alinoe.com>
+
+       * cp-demangle.c: Fix typo in "char_traints" string-literal.
+
+2003-04-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * vsnprintf.c (vsnprintf): Don't pad string with extra nulls.
+       (main): Test that we don't write too much data.
+
+2003-04-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in (funcs, AC_CHECK_FUNCS): Add snprintf and
+       vsnprintf.
+       * snprintf.c, vsnprintf.c: New files.
+       * Makefile.in (CFILES): Add snprintf.c and vsnprintf.c.
+       (CONFIGURED_OFILES): Add snprintf.o and vsnprintf.o.
+       Regenerate dependencies.
+
+       * functions.texi, configure, config.in: Regenerated.
+
+2003-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * mempcpy.c, stpcpy.c, stpncpy.c: New files.
+       * configure.in (funcs, AC_CHECK_FUNCS): Add mempcpy, stpcpy
+       and stpncpy.
+       * Makefile.in (CFILES): Add mempcpy.c, stpcpy.c and stpncpy.c.
+       (CONFIGURED_OFILES): Add mempcpy.o, stpcpy.o and stpncpy.o.
+       Regenerate dependencies.
+
+       * functions.texi, configure, config.in: Regenerated.
+
+2003-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * argv.c: Fix comments.
+       * calloc.c: Don't unnecessarily include "libiberty.h".
+       (bzero): Add prototype.
+       * floatformat.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES.
+       * getcwd.c (getcwd): Use standard definition to avoid conflicts
+       with system headers.
+       * hashtab.c (htab_traverse): Delete unused variables.
+       * rename.c: Include "ansidecl.h".
+       (rename): Use standard definition to avoid conflicts with system
+       headers.
+       * strsignal.c: Rely on ANSI_PROTOTYPES.
+       * strstr.c: Check GNUC >= 2, not GNUC == 2.
+       * vfprintf.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES.
+       * vprintf.c: Include "ansidecl.h" earlier, rely on
+       ANSI_PROTOTYPES.
+       * vsprintf.c: Include "ansidecl.h" earlier, rely on
+       ANSI_PROTOTYPES and possibly include <stdarg.h>.
+
+       * Makefile.in: Regenerate dependencies.
+
+2003-04-15  DJ Delorie  <dj@redhat.com>
+
+       * maint-tool (deps): Scan for headers in $srcdir also.
+
+2003-04-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       PR target/10338
+       PR bootstrap/10198
+       PR bootstrap/10140
+       * getopt.c (exchange, _getopt_initialize): Use mempcpy not
+       __mempcpy.
+       * regex.c (regerror): Likewise.
+
+2003-04-14  Roger Sayle  <roger@eyesopen.com>
+
+       * argv.c: Use ANSI_PROTOTYPES instead of __STDC__.
+       * memchr.c: Likewise.
+       * strcasecmp.c: Likewise.
+       * strncasecmp.c: Likewise.
+       * strncmp.c: Likewise.
+       * xatexit.c: Likewise.
+       * xmalloc.c: Likewise.
+
+       * copysign.c: Use traditional function declaration instead of DEFUN.
+       * sigsetmask.c: Likewise.
+
+       * memcmp.c: Both of the above, ANSI_PROTOTYPES and DEFUN.
+       * memset.c: Likewise.
+
+       * memcpy.c: ANSI_PROTOTYPES, DEFUN and prototype bcopy.
+       * memmove.c: Likewise.
+
+2003-04-14  Roger Sayle  <roger@eyesopen.com>
+
+       * strdup.c (strdup): Tweak implementation to use memcpy.
+
+2003-04-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in (HAVE_UINTPTR_T): Always define.
+       * configure: Regenerated.
+
+2003-03-23  Alexandre Oliva  <aoliva@redhat.com>
+
+       * Makefile.in (MULTIOSDIR): New macro.  Use $(CC) $(LIBCFLAGS)
+       instead of $$CC alone.
+       (install_to_tooldir): Use it.
+
+2003-17-03  Jan Hubicka  <jh@suse.cz>
+
+       * hashtab.c (htab_traverse_noresize): Break out from ...
+       * hashtab.c (htab_traverse): ... here.
+
+2003-12-03  Jan Hubicka  <jh@suse.cz>
+
+       * hashtab.c (htab_expand): Fix warning.
+
+       * hashtab.c (htab_expand): Compute the size of hashtable based
+       on the number of elements actually used.
+       (htab_traverse):  Call htab_expand when table is too empty.
+
+2003-03-11  Carlo Wood  <carlo@gnu.org>
+
+       * cplus-dem.c (demangle_integral_value): Correction to reflect
+       patch of 2002-01-10 in order to also make negative multi-digits
+       without leading underscore work.
+
+2003-03-03  Mark Mitchell  <mark@codesourcery.com>
+
+       * cplus-dem.c: Add license exception to copyright notice.
+
+2003-02-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * physmem.c: Formatting changes from upstream.
+
+2003-02-24  Danny Smith  <dannysmith@users.source.forge.net>
+
+       * physmem.c (physmem_total): Add _WIN32 support.
+       (physmem_available): Likewise.
+
+2003-02-24  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Test for
+       GSI_PHYSMEM.
+       (physmem_available) [HAVE_TABLE]: Test for TBL_VMSTATS.
+
+2003-02-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in: Check for sys/systemcfg.h and
+       _system_configuration.
+       * physmem.c: Add support for AIX.  Tweek formatting as per
+       upstream coreutils beta.
+
+2003-02-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+           Richard Earnshaw  <rearnsha@arm.com>
+           Geoffrey Keating  <geoffk@apple.com>
+
+       * configure.in: Check for sys/sysctl.h and sysctl.
+       * physmem.c: Add support for *bsd and darwin.
+       * Makefile.in: Generate depedency for physmem.o.
+
+2003-02-21  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Use getsysinfo on
+       Tru64 UNIX.
+       (physmem_available) [HAVE_TABLE && HAVE_SYS_TABLE_H]: Use table on
+       Tru64 UNIX.
+
+       * configure.in (AC_CHECK_HEADERS): Check for sys/sysinfo.h,
+       machine/hal_sysinfo.h, sys/table.h.
+       (checkfuncs, AC_CHECKFUNCS): Check for getsysinfo, table.
+       * configure, config.in: Regenerate.
+
+2003-02-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in: Check for sys/sysmp.h and sysmp.
+       * physmem.c: Pull upstream copy, add support for irix6.
+
+       * config.in, configure: Regenerated.
+
+2003-02-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * physmem.c (physmem_total, physmem_available): De-ANSI-fy.
+       * configure.in (AC_CHECK_FUNCS): Add pstat_getstatic and
+       pstat_getdynamic.
+
+2003-02-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (CFILES): Add physmem.c.
+       (REQUIRED_OFILES): Add physmem.o.
+       * configure.in: Check for sys/pstat.h.
+       (checkfuncs): Add pstat_getstatic and pstat_getdynamic.
+       * physmem.c: New file, copied from textutils.
+
+       * config.in, configure: Regenerated.
+
+2003-02-20  Daniel Jacobowitz  <drow@mvista.com>
+
+       * Makefile.in (CFILES): Add lrealpath.c.
+       (REQUIRED_OFILES): Add lrealpath.o.
+       (lrealpath.o): Add rule.
+       * aclocal.m4 (libiberty_NEED_DECLARATION): Add.
+       * configure.in: Add realpath and canonicalize_file_name to
+       checkfuncs and AC_CHECK_FUNCS.  Use libiberty_NEED_DECLARATION
+       for canonicalize_file_name.
+       * lrealpath.c: New file.
+       * make-relative-prefix.c: Update documentation.
+       (make_relative_prefix): Simplify.  Use lbasename and lrealpath.
+       * config.in: Regenerated.
+       * configure: Regenerated.
+       * functions.texi: Regenerated.
+
+2003-02-20  jmc  <jmc@prioris.mini.pw.edu.pl>
+
+       * cplus_dem.c: Fix typo: intializes -> initializes.
+
+2003-02-20  Alexandre Oliva  <aoliva@redhat.com>
+
+       * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
+       config.status.
+       * configure: Rebuilt.
+
+2003-02-13  Daniel Jacobowitz  <drow@mvista.com>
+
+       Fix PR c++/7612.
+       * cplus-dem.c (demangle_signature): Call string_delete.
+       Remove extra string_init.
+       (demangle_arm_hp_template): Call string_delete instead of
+       string_clear.  Add missing string_delete call.
+       (demangle_qualified): Add missing string_delete call.
+       (do_type): Remove unused variable btype.  Add missing string_delete
+       call.  Call string_delete instead of string_clear.
+       (demangle_fund_type): Move variable btype inside of the switch
+       statement.  Add missing string_delete call.
+       (do_arg): Call string_delete instead of string_clear.  Remove extra
+       string_init.
+       (demangle_nested_args): Free work->previous_argument.
+
+2003-02-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * acconfig.h: New file.  Add uintptr_t.
+       * config.in: Regenerated.
+
+2003-02-04  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * libiberty.texi: Update to GFDL 1.2.
+
+2003-01-30  Christian Cornelssen  <ccorn@cs.tu-berlin.de>
+
+       * Makefile.in (libiberty_topdir): New subst.
+       (mkinstalldirs): Redefine in terms of the above.
+       * configure.in: AC_SUBST it.
+       * configure: Regenerate.
+
+2003-01-28  Christian Cornelssen  <ccorn@cs.tu-berlin.de>
+
+       * Makefile.in (all-subdir, check-subdir, installcheck-subdir)
+       (info-subdir, install-info-subdir, clean-info-subdir)
+       (dvi-subdir, install-subdir, etags-subdir, mostlyclean-subdir)
+       (clean-subdir, distclean-subdir, maintainer-clean-subdir):
+       Pass $(FLAGS_TO_PASS).
+
+2003-01-27  Alexandre Oliva  <aoliva@redhat.com>
+
+       * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use
+       /`$$CC -print-multi-os-directory`.
+
+2003-01-26  Daniel Jacobowitz  <drow@mvista.com>
+
+       * hashtab.c (htab_create_alloc_ex): New function.
+       (hatab_set_functions_ex): New function.
+       (htab_delete, htab_expand): Support alternate allocation functions.
+
+2003-01-24  Christopher Faylor  <cgf@redhat.com>
+
+       * configure.in: Remove special pex-cygwin consideration.
+       * configure: Regenerate.
+       * pex-cygwin.c: Remove.
+       * Makefile.in: Remove pex-cygwin.[co] lines.
+
+2003-01-24  Zack Weinberg  <zack@codesourcery.com>
+
+       * Makefile.in (CFILES): Add pex-*.c.
+       (REQUIRED_OFILES): Change pexecute.o to @pexecute@
+       (CONFIGURED_OFILES): Add pex-*.o.
+       (TEXIFILES): Add pexecute.txh.
+       (pexecute.o): Delete rule.
+       (pex-cygwin.o, pex-djgpp.o, pex-mpw.o, pex-msdos.o, pex-os2.o,
+       pex-unix.o, pex-win32.o): New rules.
+       * configure.in: Change AC_INIT argument to xmalloc.c.
+       Compute appropriate pexecute implementation and substitute it
+       as @pexecute@.
+
+       * pexecute.c: Split up into...
+       * pex-cygwin.c, pex-djgpp.c, pex-mpw.c, pex-msdos.c, pex-os2.c,
+       pex-unix.c, pex-win32.c, pex-common.h, pexecute.txh: ... these
+       new files.
+
+       * functions.texi: Regenerate.
+       * configure: Regenerate.
+
+2003-01-20  Josef Zlomek  <zlomekj@suse.cz>
+
+       * hashtab.c (htab_expand): Fix allocation of new entries.
+
+2003-01-09  Christian Cornelssen  <ccorn@cs.tu-berlin.de>
+
+       * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR.
+
+       * Makefile.in (install_to_libdir, install_to_tooldir): Add a
+       mkinstalldirs command.
+
+2002-12-04  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * make-relative-prefix.c (HAVE_HOST_EXECUTABLE_SUFFIX):
+       Define for hosts with HOST_EXECUTABLE_SUFFIX.
+
+2002-11-24  Nick Clifton  <nickc@redhat.com>
+
+       * make-relative-prefix.c (make_relative_prefix): Ensure return
+       string is empty before using strcat to construct it.
+
+2002-11-22  Daniel Jacobowitz  <drow@mvista.com>
+
+       * Makefile.in: Add make-relative-prefix.c.
+       * make-relative-prefix.c: New file.
+       * functions.texi: Rebuilt.
+
+2002-11-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * md5.c (md5_process_block): Avoid `function-like macro "F{G,H,I}" must be
+       used with arguments in traditional C' warnings.
+
+2002-10-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * config.table: Use mh-s390pic for s390x too.
+
+2002-10-06  Andreas Jaeger  <aj@suse.de>
+
+       * libiberty/cplus-dem.c (ada_demangle): Get rid of unneeded
+       variable and of strict-aliasing warning.
+       (grow_vect): Use char as first parameter.
+
+2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (all): Fix multilib parallel build.
+
+2002-09-19  John David Anglin  <dave@hiuly1.hia.nrc.ca>
+
+       * cp-demangle.c (demangling_new): Cast 0 to enum.
+       (demangle_char): Cast return of strdup to char *.
+       (is_gnu_v3_mangled_ctor): Cast 0 to enum.
+       (is_gnu_v3_mangled_dtor): Likewise.
+       * cplus-dem.c (grow_vect): Cast return of xrealloc to void *.
+       (work_stuff_copy_to_from): Cast return of xmalloc to char **.
+       * fibheap.c (fibnode_new): Cast return of xcalloc to fibnode_t.
+       * md5.c (md5_process_bytes): Cast results back to const void *.
+       (md5_process_block): Add cast to const md5_uint32 *.
+       * regex.c (re_compile_fastmap): Cast enum to UCHAR_T.
+       * safe-ctype.c (L, XL, U, XU, D, P, _, C, Z, M, V, T, S): Add cast to
+       unsigned short.
+       * splay-tree.c (splay_tree_xmalloc_allocate): Cast return of xmalloc
+       to void *.
+       * vasprintf.c (int_vasprintf): Cast return of malloc to char *.
+
+2002-09-19  Nick Clifton  <nickc@redhat.com>
+
+       * README: Update email addresses for bugs and patches.
+
+2002-09-10  Mike Stump  <mrs@apple.com>
+
+       * splay-tree.c (splay_tree_successor): Fix comments.
+
+2002-09-11  Zack Weinberg  <zack@codesourcery.com>
+
+       * cplus-dem.c: Code under #ifdef MAIN moved to gcc/cp/cxxfilt.c.
+       * testsuite/Makefile.in: Adjust for test-demangle.
+       * testsuite/regress-demangle: Deleted.
+       * testsuite/test-demangle.c: New file.
+       * testsuite/demangle-expected: Change \$ to $ throughout, now that
+       this file is not being read by a shell script.
+
+2002-09-05  Roger Sayle  <roger@eyesopen.com>
+
+       * regex.c: Only use "#pragma alloca" on AIX when not using gcc.
+
+2002-08-07  DJ Delorie  <dj@redhat.com>
+
+       * regex.c (re_error_msgid): Just use a simple array of strings.
+       (re_compile_pattern): Compensate.
+       (re_comp): Likewise.
+       (re_comp): Likewise.
+       (regerror): Likewise.
+
+2002-07-29  Neil Booth  <neil@daikokuya.co.uk>
+
+       * cplus-dem.c (PREPEND_BLANK): Remove.
+
+2002-07-10  Jason Merrill  <jason@redhat.com>
+
+       * cp-demangle.c (demangle_identifier): Support extended Unicode
+       characters.
+
+2002-07-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cp-demangle.c (demangle_v3_with_details): Wrap in
+       !defined IN_GLIBCPP_V3.
+
+2002-07-01  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-demangle.c (demangle_operator_name): Add type_arg parameter.
+       Set it for the "st" operator.
+       (demangle_expression): Handle expressions with types as arguments.
+
+2002-06-30  Douglas Rupp  <rupp@gnat.com>
+
+       * configure.in (OUTPUT_OPTION,NO_MINUS_C_MINUS_O): Configure.
+       * Makefile.in (OUTPUT_OPTION): Use.
+
+2002-06-22  Peter Breitenlohner <peb@mppmu.mpg.de>
+
+       * Makefile.in (install_to_libdir): Add $(DESTDIR).
+       (install_to_tooldir): Likewise.
+
+2002-06-17  Douglas Rupp  <rupp@gnat.com>
+
+       * lbasename.c: Add 2002 to copyright.
+       (IS_DIR_SEPARATOR): Remove VMS junk.
+
+2002-06-05  Geoffrey Keating  <geoffk@redhat.com>
+
+       * hashtab.c (htab_create): New stub function for backward
+       compatibility.
+       (htab_try_create): Likewise.
+
+2002-06-03  Geoffrey Keating  <geoffk@redhat.com>
+
+       * hashtab.c (htab_create): Delete.
+       (htab_try_create): Delete.
+       (htab_create_alloc): New.
+       (htab_delete): Support user-specified memory allocation.
+       (htab_expand): Likewise.
+
+2002-05-22  Roman Lechtchinsky  <rl@cs.tu-berlin.de>
+
+       * configure.in: Fix typo in the code checking for sys_errlist.
+       * configure: Regenerated.
+
+2002-05-13  Andreas Schwab  <schwab@suse.de>
+
+       * config.table: Use mh-x86pic also for x86-64.
+
+2002-05-08  Alexandre Oliva  <aoliva@redhat.com>
+
+       * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
+       script entry, and set LD to it when configuring multilibs.
+       * configure: Rebuilt.
+
+2002-05-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * configure.in (AC_TYPE_PID_T): Use it.
+       * configure: Regenerated.
+       * getruntime.c: Include <sys/types.h>.
+       * waitpid.c: Likewise.  Use pid_t, not int, as the type of "pid".
+
+2002-04-09  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.c (higher_prime_number): Use 7 as minimum.
+       (find_empty_slot_for_expand): Don't compute hash2 unless needed.
+       (htab_find_slot_with_hash): Likewise.
+
+2002-04-01  Phil Edwards  <pme@gcc.gnu.org>
+
+       * cp-demangle.c (__cxa_demangle):  Also protect with IN_GLIBCPP_V3.
+       (is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_ctor):  Conditionally
+       not compile if IN_GLIBCPP_V3 defined.
+       * dyn-string.c:  Also allow IN_GLIBCPP_V3 to change allocation scheme.
+
+2002-03-30  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+       * cp-demangle.c (java_demangle_v3): Don't try to release "demangled"
+       if it is NULL.
+
+2002-03-27  DJ Delorie  <dj@redhat.com>
+
+       * hex.c: Add documentation.
+       (_hex_value): Provide non-ASCII empty table.
+       (hex_init): Initialize the non-ASCII table.
+       * functions.texi: Regenerate.
+
+2002-03-27  Mark Mitchell  <mark@codesourcery.com>
+
+       * dyn-string.c: Add libgcc exception to copyright notice.
+
+2002-03-26  H.J. Lu  (hjl@gnu.org)
+
+       * config.table: Support --with-build-subdir.
+       * configure.in: Likewise.
+       * configure: Rebuild.
+
+2002-03-18  Stuart Griffith  <Stuart_Griffith@credence.com>
+
+       * strtod.c (strtod): Increment 8 chars, not 7, when `infinity'
+       seen.
+
+2002-03-12  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-demangle.c: Add libgcc exception to cp-demangle.c copyright
+       notice.
+
+2002-03-11  Douglas B Rupp  <rupp@gnat.com>
+
+       * xatexit.c [VMS]: Include stdlib.h and unixlib.h.
+
+2002-03-06  Jim Blandy  <jimb@redhat.com>
+
+       * splay-tree.c (splay_tree_xmalloc_allocate,
+       splay_tree_xmalloc_deallocate): Use K&R-style definitions, not
+       prototyped definitions.  Mark `data' arguments as unused.
+
+2002-03-06  Andrew Cagney  <ac131313@redhat.com>
+
+       * floatformat.c (floatformat_arm_ext_big): Delete definition.
+
+2002-03-04  Phil Edwards  <pme@gcc.gnu.org>
+
+       * configure.in:  Add --enable-install-libiberty option.
+       * Makefile.in (INSTALLED_HEADERS):  New variable.
+       (install_to_libdir):  Possibly also copy headers.
+       * configure:  Regenerated.
+
+2002-03-04  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * xmalloc.c (xmalloc_fail): Clarify error message further.
+
+2002-03-03  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * xmalloc.c (xmalloc_fail): Clarify error message.
+
+2002-02-22  Jim Blandy  <jimb@redhat.com>
+
+       * splay-tree.c (splay_tree_xmalloc_allocate,
+       splay_tree_xmalloc_deallocate): New functions.
+       (splay_tree_new): Call splay_tree_new_with_allocator, passing the
+       above functions and a dummy data pointer.
+       (splay_tree_new_with_allocator): New function.
+       (splay_tree_delete_helper, splay_tree_delete, splay_tree_insert,
+       splay_tree_remove): Use the splay tree's allocation and
+       deallocation functions.
+
+2002-02-19  Scott Snyder  <snyder@fnal.gov>
+
+       * testsuite/demangle-expected: Add test case for infinite loop in
+       demangler.
+       * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle
+       if do_type() doesn't make any progress --- prevents an infinite
+       loop.
+
+2002-02-18  Carlo Wood  <carlo@gnu.org>
+
+       PR c++/5390
+       * cplus-dem.c (demangle_integral_value): Accept multi-digit
+       numbers that do not start with an underscore; This is needed
+       for integer template parameters. This doesn't break anything
+       because multi-digit numbers are never followed by a digit.
+       * testsuite/demangle-expected: Corrected all mangled test
+       cases with multi-digit template parameters: g++ 2.95.x does
+       not generate underscores around these parameters.
+
+2002-02-05  Jason Merrill  <jason@redhat.com>
+
+       * cplus-dem.c (flags): Add DMGL_VERBOSE
+       (cplus_demangle_v3_p): Remove.
+       (demangle_it): Add DMGL_TYPES to passed flags.
+       * cp-demangle.c (cplus_demangle_v3_all): Remove.
+       (cplus_demangle_v3_type): Remove.
+       (cplus_demangle_v3): Add options parm.
+
+2002-02-02  H.J. Lu  (hjl@gnu.org)
+
+       * cp-demangle.c (cp_demangle_type): Do not protect with
+       IN_LIBGCC2.
+       (cplus_demangle_v3_all): New.
+       (cplus_demangle_v3): Call cplus_demangle_v3_all.
+       (cplus_demangle_v3_type): Call cplus_demangle_v3_all.
+
+       * cplus-dem.c (cplus_demangle_v3_p): New function pointer.
+       Initialized to cplus_demangle_v3.
+       (cplus_demangle_with_style): Call cplus_demangle_v3_p instead
+       of cplus_demangle_v3.
+       (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for
+       command line symbol.
+
+       * testsuite/regress-demangle: Pass the mangled name at the
+       command line.
+
+2002-02-01  H.J. Lu  <hjl@gnu.org>
+
+       * cp-demangle.c (cp_demangle_type): Call demangling_new with
+       DMGL_GNU_V3.
+
+2002-01-31  Phil Edwards  <pme@gcc.gnu.org>
+
+       * cp-demangle.c:  Revert yesterday's change.
+
+2002-01-31  Adam Megacz  <adam@xwt.org>
+
+       * gcc/libiberty/configure.in: Treat mingw the same as cywin
+       wrt HAVE_SYS_ERRLIST.
+
+2002-01-30  Phil Edwards  <pme@gcc.gnu.org>
+
+       * cp-demangle.c (cp_demangle_type):  Do not protect with IN_LIBGCC2.
+       (cplus_demangle_v3):  Mimic __cxa_demangle and fall back on
+       cp_demangle_type.
+       * testsuite/demangle-expected:  New gnu-v3 test.
+
+2002-01-22  Momchil Velikov  <velco@fadata.bg>
+
+       * configure.in (variable detection): Use arrays of unspecified
+       size instead of plain integers.
+
+2002-01-18  DJ Delorie  <dj@redhat.com>
+
+       * Makefile.in (TESTLIB): New.  This library is for future
+       testsuites.
+       (CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize,
+       break down by letter.
+       (REQUIRED_OFILES): List long-to-compile files first.
+       (maint-deps): New, target for updating dependencies.
+       (dependencies): Update.
+       * maint-tool: Add dependency-generating option.
+       * configure.in: Check for _doprnt even if we're not providing it.
+       * configure: Regenerate.
+
+       * _doprnt.c: Modifications to allow compiling on any platform.
+       * copysign.c: Likewise.
+       * putenv.c: Likewise.
+       * setenv.c: Likewise.
+       * vsprintf.c: Likewise.
+
+2002-01-15  Douglas B Rupp  <rupp@gnat.com>
+
+       * mkstemps.c (mkstemps): On VMS, open temp file with option
+       that causes it to be deleted when closed.
+
+2002-01-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cp-demangle.c (long_options): Const-ify.
+       * cplus-dem.c (long_options): Likewise.
+
+       * cplus-dem.c (mystrstr): Delete.  All callers changed to use
+       strstr instead.
+
+2001-12-31  Ira Ruben  <ira@apple.com>
+
+       * aclocal.m4 (libiberty_AC_FUNC_STRNCMP): Use anon mmap as 2nd try.
+       * configure: Regenerated.
+
+2001-12-24  Douglas B. Rupp  <rupp@gnat.com>
+
+       * configure.in (uintptr_t): Use AC_CHECK_TYPE.
+       * configure: Regenerated.
+
+2001-12-12  Craig Rodrigues  <rodrigc@gcc.gnu.org>
+
+       PR other/2719
+       * cplus-dem.c (consume_count): Treat negative count as an error.
+       * testsuite/demangle-expected: Added testcase.
+
+Tue Dec 11 07:08:57 2001  Douglas B. Rupp  <rupp@gnat.com>
+
+       * configure.in: Hardcode that vfork works on VMS host.
+       * configure: Regenerated.
+
+2001-12-06  Richard Henderson  <rth@redhat.com>
+
+       * cplus-dem.c (libiberty_demanglers): Add no_demangling case.
+       (cplus_demangle): Support no_demangling.
+
+2001-11-27  Zack Weinberg  <zack@codesourcery.com>
+
+       * _doprnt.c: Moved here from gcc/doprint.c.  Adjust to build
+       in libiberty context.  Fix typo in leading comment.
+       * configure.in: Fix various AC_DEFINEs so autoheader works.
+       If any of vprintf, vsprintf, vfprintf is missing from libc,
+       then AC_REPLACE_FUNCS(_doprnt).
+
+2001-11-26  DJ Delorie  <dj@redhat.com>
+           Daniel Jacobowitz  <drow@mvista.com>
+
+       * Makefile.in (stamp-h): Depend on Makefile for proper
+       serialization.
+       (*-subdir): Depend on config.h for proper serialization.
+
+2001-11-26  DJ Delorie  <dj@redhat.com>
+
+       * configure.in: Check for alloca.h (for regex.c and putenv.c).
+       * configure: Regenerate.
+       * config.h: Add HAVE_ALLOCA_H.
+
+2001-11-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * regex.c: Check defined(__STDC__) || defined(ALMOST_STDC) ||
+       defined(HAVE_STRINGIZE) to determine whether ISO CPP token pasting
+       is available.
+
+Thu Nov 15 11:06:25 2001  Jeffrey A Law  (law@cygnus.com)
+
+       * config.in (HAVE_UINTPTR_T): Provide autoconf stub.
+       * configure.in (HAVE_UINTPTR_T): Test for system defining
+       uintptr_t and define HAVE_UINTPTR_T appropriately.
+       * regex.c (uintptr_t): Do not provide a definition if the
+       system provided one.
+
+       * regex.c (PREFIX): Provide an alternate definition for
+       non-ANSI/ISO compilers.
+       (ARG_PREFIX): Likewise.
+
+2001-11-12  Jim Meyering  <meyering@lucent.com>
+
+       * obstack.c (_): Honor the setting of ENABLE_NLS.  Otherwise,
+       this code would end up calling gettext even in packages built
+       with --disable-nls.
+       * getopt.c (_): Likewise.
+       * regex.c (_): Likewise.
+
+2001-11-03  Alan Modra  <amodra@bigpond.net.au>
+
+       * configure.in: Cope with missing makeinfo.
+       * configure: Regenerate.
+
+2001-10-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * hex.c (hex_init): Provide empty stub.
+
+       * hex.c (hex_init): Delete.
+       (_hex_value): Const-ify and initialize at compile-time.
+
+2001-10-19  H.J. Lu <hjl@gnu.org>
+
+       * Makefile.in ($(TARGETLIB)): Also generate pic/$(TARGETLIB) if
+       necessary.
+
+2001-10-17  DJ Delorie  <dj@redhat.com>
+
+       * argv.c, asprintf.c, choose-temp.c, concat.c, cplus-dem.c,
+       ffs.c, fnmatch.txh, getruntime.c, make-temp-file.c,
+       mkstemps.c, pexecute.c, random.c, strsignal.c, vasprintf.c:
+       Improve manual formatting.
+       * functions.texi: Regenerate.
+
+2001-10-15  DJ Delorie  <dj@redhat.com>
+
+       * Makefile.in (TEXIFILES): Add fnmatch.txh.
+       (maint-undoc): New.
+       maint-tool: Add "undoc" tool.
+       * alloca.c, argv.c, asprintf.c, choose-temp.c, concat.c,
+       fdmatch.c, ffs.c, getruntime.c, insque.c, lbasename.c,
+       make-temp-file.c, mkstemps.c, pexecute.c, random.c, spaces.c,
+       strerror.s, strsignal.c, strtol.c, vasprintf.c: Add or update
+       documentation.
+       * fnmatch.txh: New.
+       * functions.texi: Regenerate.
+
+2001-10-10  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * bcmp.c, setenv.c: Use "nonzero" instead of "non-zero".
+       * strtod.c: Use "ISO C" instead of "ANSI C".
+       * functions.texi: Regenerate.
+
+2001-10-07  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * alloca.c, clock.c, getcwd.c, getpagesize.c, getpwd.c, index.c,
+       libiberty.texi, memchr.c, putenv.c, rindex.c, strchr.c, strdup.c,
+       strerror.c, strrchr.c, strstr.c, strtod.c, tmpnam.c, vfork.c,
+       xatexit.c, xmalloc.c, xstrerror.c: Improve manual formatting.  Fix
+       spelling.  Give names to function arguments in documentation.  Use
+       (void) prototypes in documentation.
+       * functions.texi: Regenerate.
+
+2001-10-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * argv.c (buildargv, tests, main): Const-ify.
+       * cp-demangle.c (operator_code): Likewise.
+       * cplus-dem.c (optable, libiberty_demanglers,
+       cplus_demangle_set_style, cplus_demangle_name_to_style,
+       print_demangler_list): Likewise.
+       * hashtab.c (higher_prime_number): Likewise.
+       * strcasecmp.c (charmap): Likewise.
+       * strerror.c (error_info, strerror, main): Likewise.
+       * strncasecmp.c (charmap): Likewise.
+       * strsignal.c (signal_info): Likewise.
+
+2001-09-29  DJ Delorie  <dj@redhat.com>
+
+       * configure: Regenerate.
+
+2001-09-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * concat.c: Include stdlib.h.
+
+2001-09-27  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * libiberty.texi: (Top level): Add syncodeindex pg.  Add
+       @dircategory and @direntry directives.  Add @finalout.
+       (many nodes): Lose the next,prev,up pointers on the @nide line.
+       (Using, Supplemental Functions, Replacement Functions): Fix
+       markup.
+       (Functions): Move around, to allow makeinfo to build the manual
+       without next,prev,up pointers in thye node lines.
+       (Licenses): Fix typos.
+
+       * index.c, rindex.c, strchr.c, strerror.c, strrchr.c, strstr.c,
+       strtol.c, xatexit.c, xexit.c, xmalloc.c: Fix spelling and markup.
+       * functions.texi: Regenerate.
+
+       * copying-lib.texi: Lose the next,prev,up pointers on the @node
+       line.
+
+2001-09-27  DJ Delorie  <dj@redhat.com>
+
+       * configure.in: Don't use in-tree texinfo, because libiberty must
+       be built before it.  Check for makeinfo version 4 or higher.
+       * functions.texi: Regenerate.
+
+2001-09-20  DJ Delorie  <dj@redhat.com>
+           Phil Edwards  <pedwards@disaster.jaj.com>
+
+       * configure.in (MAKEINFO, PERL): Detect these.
+       (--enable-maintainer-mode): Add.
+       * configure: Regenerate.
+       * Makefile.in (MAKEINFO, PERL): Define.
+       (libiberty.info, libiberty.dvi, libiberty.html): New.
+       (CFILES): Add bsearch.c.
+       (CONFIGURED_OFILES): New, list of objects configure might add.
+       (maint-missing, maint-buildall): New, for maintainers only.
+       (clean, mostlyclean): Add info/dvi/html files.
+       * libiberty.texi, copying-lib.texi, obstacks.texi, functions.texi: New.
+       * gather-docs: New, for maintainers.
+       * maint-tool: New, for maintainers.
+       * alloca.c, atexit.c, basename.c, bcmp.c, bcopy.c, bsearch.c,
+       bzero.c, calloc.c, clock.c, configure.in, configure, getcwd.c,
+       getpagesize.c, getpwd.c, index.c, memchr.c, memcmp.c, memcpy.c,
+       memmove.c, memset.c, putenv.c, rename.c, rindex.c, setenv.c,
+       sigsetmask.c, strcasecmp.c, strchr.c, strdup.c, strerror.c,
+       strncasecmp.c, strncmp.c, strrchr.c, strstr.c, strtod.c, strtol.c,
+       tmpnam.c, vfork.c, vprintf.c, waitpid.c, xatexit.c, xexit.c,
+       xmalloc.c, xmemdup.c, xstrdup.c, xstrerror.c: Add or update
+       documentation.
+
+2001-09-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * concat.c (reconcat): Fix for traditional C.
+
+2001-09-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * concat.c (reconcat): New function.
+
+2001-09-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * concat.c (vconcat_length, vconcat_copy, concat_length,
+       concat_copy, concat_copy2): New functions.
+       (concat): Use vconcat_length/vconcat_copy.
+
+       * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len):
+       Define.
+
+2001-09-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * asprintf.c: Don't define USE_STDARG.  Use VPARAMS, VA_OPEN,
+       VA_FIXEDARG & VA_CLOSE.
+
+       * vasprintf.c: Check HAVE_STRING_H when including string.h.
+       (checkit): Delete redundant prototype.  Add ATTRIBUTE_PRINTF_1.
+       Use VA_OPEN, VA_FIXEDARG & VA_CLOSE.  Free allocated string.
+
+2001-08-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * concat.c (concat): Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE.
+
+2001-08-23  Ulrich Drepper  <drepper@redhat.com>
+
+       * regex.c (truncate_wchar): Use wcrtomb not wctomb.
+
+2001-08-23  Ulrich Drepper  <drepper@redhat.com>
+
+       * posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc
+       instead of mbrtowc.
+       [_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of
+       wcslen, and __wcscoll instead of wcscoll.
+
+2001-08-22  Matt Kraai  <kraai@alumni.carnegiemellon.edu>
+
+       * fibheap.c (fibheap_init, fibnode_init): Remove.
+       (fibheap_new, fibnode_new): Use xcalloc to allocate and
+       initialize memory.
+       (fibheap_insert): Remove check for node allocation failure.
+
+2001-08-21  Richard Henderson  <rth@redhat.com>
+
+       * Makefile.in (fibheap.o): Depend on config.h.
+       * fibheap.c: Tidy formatting.  Use config.h.` Rearrange some
+       functions for inlining.
+
+Tue Aug 21 12:35:04 2001  Christopher Faylor <cgf@cygnus.com>
+
+       * configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever
+       hosting on cygwin.
+       * configure: Regenerate.
+
+2001-08-20  Andrew Cagney  <ac131313@redhat.com>
+
+       * floatformat.c (floatformat_m88110_ext): Remove #ifdef
+       HARRIS_FLOAT_FORMAT.
+       (floatformat_ia64_spill_little, floatformat_ia64_quad_little)
+       (floatformat_ia64_spill_big, floatformat_ia64_quad_big)
+       (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword)
+       (floatformat_m88110_harris_ext): New float formats.
+
+2001-08-20  Daniel Berlin  <dan@cgsoftware.com>
+
+       * fibheap.c: New file. Fibonacci heap.
+
+       * Makefile.in (CFILES): Add fibheap.c.
+       (REQUIRED_OFILES): Add fibheap.o.
+       (fibheap.o): Add dependencies for fibheap.o.
+
+2001-08-17  Christopher Faylor <cgf@cygnus.com>
+
+       * configure.in: Always set HAVE_SYS_ERRLIST when targetting cygwin.
+       * configure: Regenerate.
+
+2001-08-16  Richard Henderson  <rth@redhat.com>
+
+       * hashtab.c (htab_hash_string): New.
+
+2001-08-13  Andrew Cagney  <ac131313@redhat.com>
+
+       * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Fix
+       name.
+
+2001-08-12  Isamu Hasegawa  <isamu@yamato.ibm.com>
+
+       * regex.c (wcs_regex_compile): Use appropriate string
+       to compare with collating element.
+       Fix the padding for the alignment.
+
+2001-08-10  Andrew Cagney  <ac131313@redhat.com>
+
+       * lbasename.c (lbasename): Change function definition to return a
+       const char pointer.
+
+2001-08-07  Jason Merrill  <jason_merrill@redhat.com>
+
+       * cp-demangle.c (demangle_special_name): "GR" -> "reference temporary
+       for".
+
+2001-08-03  Richard Henderson  <rth@redhat.com>
+
+       * Makefile.in (concat.o): Depend on config.h.
+
+2001-07-30  Andreas Jaeger  <aj@suse.de>
+
+       * concat.c: Include "config.h".
+
+2001-07-30  Andreas Jaeger  <aj@suse.de>
+
+       * regex.c: Declare wcs functions only if compiling with
+       MBS_SUPPORT.
+       Don't use #elif for traditional C.
+
+2001-07-23  Ulrich Drepper  <drepper@redhat.com>
+
+       * regex.c: Revamp memory allocation for WCHAR functions to
+       not use too much stack.
+
+2001-07-30  Andreas Jaeger  <aj@suse.de>
+
+       * regex.c: Declare wcs functions only if compiling with
+       MBS_SUPPORT.
+       Don't use #elif for traditional C.
+
+2001-07-25  Daniel Jacobowitz  <drow@mvista.com>
+
+       * Makefile.in (regex.o): Add dependency on config.h.
+
+2001-07-18  Andreas Schwab  <schwab@suse.de>
+
+       * regex.c (WORDCHAR_P) [WCHAR]: Also return true for the
+       underscore character.
+
+2001-07-18  Ulrich Drepper  <drepper@redhat.com>
+
+       * regex.c: Limit string length printed in debug messages to 100
+       chars.
+
+2001-07-18  Andreas Jaeger  <aj@suse.de>
+
+       * regex.c: Place under LGPL version 2.1.
+
+2001-07-10  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * Makefile.in: Add support for regex code.
+       * regex.c: New file.
+
+2001-07-05  Mark Klein  <mklein@dis.com>
+
+       * Makefile.in: Add ffs.c dependency.
+       * configure.in: Add ffs.c.
+       * ffs.c: New file.
+
+2001-06-18  Richard Henderson  <rth@redhat.com>
+
+       * concat.c: Include <sys/types.h>.
+
+2001-06-11  Loren J. Rittle  <ljrittle@acm.org>
+
+       bootstrap/3106
+       * strerror.c (sys_nerr): Hide the OS header version.
+       * strsignal.c (sys_nsig): Likewise.
+
+2001-06-10  Richard Henderson  <rth@redhat.com>
+
+       * concat.c: Include string.h.  Fix int vs size_t usage.
+       Simplify the iteration loops.  Use memcpy.
+
+2001-05-16  Matt Kraai  <kraai@alumni.carnegiemellon.edu>
+
+       * partition.c: Fix misspelling of `implementation'.
+
+2001-05-09  Thiemo Seufer  <seufer@csv.ica.uni-stuttgart.de>
+
+       * md5.c (md5_init_ctx): Declare constants as unsigned.
+       (md5_process_block): Likewise.
+
+2001-05-07  Zack Weinberg  <zackw@stanford.edu>
+
+       * cp-demangle.c (demangle_v3_with_details,
+       is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style
+       function definition.
+       * ternary.c: Use K+R style function definitions.  Use PTR, not
+       void *.  Make arguments constant where possible.
+
+2001-05-07  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_max): New function.
+       (splay_tree_min): Likewise.
+
+2001-04-15  Daniel Berlin  <dan@cgsoftware.com>
+
+       * ternary.c: New file - Ternary search tree implementation.
+
+       * Makefile.in: Add ternary.o, and ternary.c dependencies.
+
+2001-04-03  Zack Weinberg  <zackw@stanford.edu>
+
+       * make-temp-file.c (try): Inline.
+
+2001-02-28  Richard Henderson  <rth@redhat.com>
+
+       * Makefile.in (make-temp-file.o): Depend on config.h.
+
+2001-03-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * memchr.c (memchr): Adjust condition to avoid infinite loop.
+
+2001-03-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1,
+       `_' not followed by a digit is invalid.
+
+2001-03-22  Jim Blandy  <jimb@redhat.com>
+
+       * cp-demangle.c (string_list_delete): Use dyn_string_delete
+       instead of free, to free the contents as well as the string
+       structure.
+
+2001-03-21  Zack Weinberg  <zackw@stanford.edu>
+
+       * make-temp-file.c: Always default DIR_SEPARATOR to '/'.
+       Don't default P_tmpdir to anything.  Try /var/tmp before
+       /usr/tmp.
+
+2001-03-20  Zack Weinberg  <zackw@stanford.edu>
+
+       * choose-temp.c: Split off make_temp_file, and the code
+       duplicated between it and choose_temp_base, into...
+       * make-temp-file.c: ... here; new file.
+
+       * Makefile.in (CFILES): Add make-temp-file.c.
+       (REQUIRED_OFILES): Add make-temp-file.o.
+
+2001-03-20  Jim Blandy  <jimb@redhat.com>
+
+       * cp-demangle.c (struct demangling_def): New fields:
+       is_constructor and is_destructor.
+       (demangling_new): Initialize them.
+       (demangle_ctor_dtor_name): Set them, if we detect a constructor
+       or destructor.
+       (demangle_v3_with_details, is_gnu_v3_mangled_ctor,
+       is_gnu_v3_mangled_dtor): New functions.
+
+2001-03-20  Jason Merrill  <jason@redhat.com>
+
+       * cplus-dem.c (main): Skip initial $.
+
+2001-03-15  Michael Meissner  <meissner@redhat.com>
+
+       * hashtab.c (higher_prime_number): Silence warning that 4294967291
+       might be a signed integer under pre-ISO C systems.
+
+2001-03-10  Neil Booth  <neil@daikokuya.demon.co.uk>
+           John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * libiberty/lbasename.c: New file.
+       * libiberty/Makefile.in: Update for lbasename.
+
+2001-03-06  Zack Weinberg  <zackw@stanford.edu>
+
+       * aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New.
+       * configure.in: Replace all alloca logic with a simple use of
+       the above new macro.
+       * config.table: Kill *-*-beos* entry.
+       * config/mh-beos: Delete.
+       * configure, config.in: Regenerate.
+
+       * Makefile.in (ALLOCA, HFILES): Kill.
+       (REQUIRED_OFILES): Add alloca.o.
+       (alloca.o): Depend on libiberty.h.
+       (argv.o): Don't depend on alloca-conf.h.
+       * alloca-conf.h: Delete.
+       * alloca.c: Include libiberty.h.  Kill all #ifdef emacs
+       blocks.  Provide the C alloca unconditionally.  Use PTR where
+       appropriate.  Make i00afunc static.
+       * argv.c: Don't include alloca-conf.h.
+
+2001-03-04  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * cplus-dem.c (main): Cast enum style to int.
+
+2001-02-16  Loren J. Rittle  <ljrittle@acm.org>
+
+       * cplus-dem.c (main): Initialize style.
+
+2001-02-02  Phil Edwards  <pme@sources.redhat.com>
+
+       * COPYING.LIB:  Update to LGPL 2.1 from the FSF.
+
+2001-01-31  Bryce McKinlay  <bryce@albatross.co.nz>
+
+       Add support for Java demangling under the v3 ABI:
+       * cp-demangle.c (NAMESPACE_SEPARATOR): New define.
+       (struct demangling_def): Add `style' field.
+       (demangling_new): New parameter `style'. Set it in demangling_t.
+       (demangle_prefix): Use NAMESPACE_SEPARATOR.
+       (demangle_type_ptr): Don't emit pointer symbol if doing Java output.
+       (cp_demangle): New parameter `style'. Pass it to demangling_new().
+       (main): Call cp_demangle with extra parameter.
+       (java_demangle_v3): New function.
+       (java_builtin_type_names): New. Table of primitive type names used
+       for Java demangling.
+       (demangle_builtin_type): Look up in java_builtin_type_names if doing
+       Java output.
+       * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java
+       demangling.
+       (long_options): Remove obsolete `java' option.
+       (main): Remove explicit handling of `java' option. Instead, pass style
+       parameter in cplus_demangle flags as gdb does.
+       * testsuite/demangle.expected: Add some Java test cases.
+
+2000-12-29  DJ Delorie  <dj@redhat.com>
+
+       * fnmatch.c: Make the note about the origins of this file more
+       accurate, at least until we can sync with glibc.
+       * getopt.c: Ditto.
+       * getopt1.c: Ditto.
+       * md5.c: Ditto.
+       * obstack.c: Ditto.
+
+2000-12-26  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * bsearch.c: New file.
+       * configure.in (funcs): Add bsearch.
+       (AC_CHECK_FUNCS): Likewise.
+       * configure, config.in: Regenerate.
+
+2000-12-13  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * safe-ctype.c: #include "ansidecl.h".
+       * strtod.c: Likewise.
+
+2000-12-13  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * strtoul.c: Include safe-ctype.h, not ctype.h.
+
+2000-12-07  Zack Weinberg  <zack@wolery.stanford.edu>
+
+       * safe-ctype.c: New file.
+       * Makefile.in (CFILES): Add safe-ctype.c.
+       (REQUIRED_OFILES): Add safe-ctype.o.
+
+       * argv.c: Define ISBLANK and use it, not isspace.
+       * basename.c, cplus-dem.c, fnmatch.c, pexecute.c, strtod.c,
+       strtol.c, strtoul.c: Include safe-ctype.h, not ctype.h.  Use
+       uppercase ctype macros.  Don't test ISUPPER(c)/ISLOWER(c)
+       before calling TOLOWER(c)/TOUPPER(c).
+
+2000-12-07  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in (distclean): When cleaning, remove testsuite.
+
+2000-12-05  Jason Merrill  <jason@redhat.com>
+
+       * cp-demangle.c (cplus_demangle_v3): Check that it's a v3 mangled
+       name before allocating the dyn_string.
+
+2000-12-04  Jason Merrill  <jason@redhat.com>
+
+       * cp-demangle.c: s/new_abi/v3/.
+       * cplus-dem.c: Likewise.
+       (current_demangling_style): Now auto_demangling.
+       (cplus_demangle): Try v3 demangling if AUTO_DEMANGLING.
+       (main): Use standard symbol chars for auto_demangling.
+
+2000-11-26  Mark Mitchell  <mark@codesourcery.com>
+
+       * hashtab.c (higher_prime_number): Use a table, rather than a
+       seive, to find the next prime.
+
+2000-11-22  H.J. Lu  <hjl@gnu.org>
+
+       * cplus-dem.c (main): Handle gnat_demangling.
+
+2000-11-22  Zack Weinberg  <zack@wolery.stanford.edu>
+
+       * aclocal.m4 (LIB_AC_PROG_CC): Moved here from configure.in.
+       (AC_DEFINE_NOAUTOHEADER): New - work around bug in autoheader.
+       * configure.in: Call AC_C_INLINE and AC_C_CONST.  Use three
+       argument form of AC_DEFINE in dummy definitions block.  Use
+       AC_DEFINE_NOAUTOHEADER for real definitions of things defined
+       in dummy block.  Preload cache variables instead of bypassing
+       tests, where possible.
+       * acconfig.h: Removed.
+
+       * xmalloc.c (xmalloc_failed): New function, does error
+       reporting on failed allocation.
+       (xmalloc, xcalloc, xrealloc): Use it.
+
+2000-11-21  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * cplus-dem.c (cplus_demangle): Fix formatting.
+       (grow_vect): Ditto.
+       (ada_demangle): Ditto.
+       (internal_cplus_demangle): Ditto.
+       (mop_up): Ditto.
+
+2000-11-21  H.J. Lu  <hjl@gnu.org>
+
+       * cplus-dem.c (main): Handle java_demangling.
+
+2000-11-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (grow_vect): Prototype.
+       (ada_demangle): Cast the arg of ctype macros to unsigned char.
+
+2000-11-15  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * cplus-dem.c (ada_demangle): Add back ATTRIBUTE_UNUSED for
+       parameter `option'.
+
+2000-11-15  Kenneth Block  <kenneth.block@compaq.com>
+
+       * cplus-dem.c: Eliminate use of DEFUN, it is obsolete and cannot
+       be used in GCC.
+
+2000-11-15  Kenneth Block  <kenneth.block@compaq.com>
+
+       * cplus-dem.c: Add gnat demangler.  Add java to demangle style
+       list.
+
+2000-11-04  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * hashtab.c (htab_expand): Change to return int.  Use calloc or
+       xcalloc depending on htab->return_allocation_failure.  Return zero
+       if calloc fails.
+       (htab_create): Update comment to cover memory allocation.
+       (htab_try_create): New.
+       (htab_find_slot_with_hash): Return NULL if htab_expand fails.
+       Update comment to cover this.
+
+2000-11-03  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * hashtab.c: Change void * to PTR where necessary.
+       (htab_create, htab_expand): Correct formatting of comment before
+       function.
+
+2000-10-22  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (string_list_def): Add caret_position and comments.
+       (result_caret_pos): New macro.
+       (result_append_string): Rename to...
+       (result_add_string): ... this, and insert at caret position.
+       Rename throughout.
+       (result_append): Rename to...
+       (result_add): ... this, and insert at caret position.  Rename
+       throughout.
+       (result_append_char): Rename to...
+       (result_add_char): ... this, and insert at caret position.  Rename
+       throughout.
+       (result_append_space): Remove.
+       (string_list_new): Initialize caret position.
+       (result_add_separated_char): Use caret position.
+       (result_get_caret): New funtion.
+       (result_set_caret): Likewise.
+       (result_shift_caret): Likewise.
+       (result_previous_char_is_space): Likewise.
+       (substitution_start): Use caret position.
+       (substitution_add): Likewise.
+       (demangling_new): Initialize caret position.
+       (demangle_encoding): Use caret position.
+       (demanglin_nested_name): Put CV qualifiers after name.
+       (demangle_type_ptr): Use switch statement.  Handle pointers to
+       arrays.  Don't use result_append_space.  Use caret position.
+       (demangle_type): Emit CV qualifiers after underlying type.  Adjust
+       call to demangle_array_type.
+       (demangle_array_type): Add parameter to handle pointers to arrays.
+
+2000-10-01  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_insert): Fix formatting.
+
+2000-09-16  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_predecessor): Fix typo in comment.
+
+2000-09-14  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * splay-tree.c: #include <stdio.h>.
+
+2000-09-14  Hans-Peter Nilsson  <hp@axis.com>
+
+       * testsuite/demangle-expected: Add two tests for anonymous
+       namespaces.
+       * cplus-dem.c (gnu_special): Handle anonymous namespaces.
+
+2000-09-10  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_predecessor): New function.
+       (splay_tree_successor): Likewise.
+
+2000-09-10  Hans-Peter Nilsson  <hp@axis.com>
+
+       * testsuite/demangle-expected: Add four tests for type_info
+       mangling.
+       * cplus-dem.c (gnu_special): Use do_type, not demangle_fund_type,
+       for a non-template non-qualified type_info function or node.
+
+2000-09-08  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c: Fix copyright banner.
+
+2000-09-07  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * md5.c: #include "ansidecl.h".
+
+2000-09-06  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (status_allocation_failed): Rearrange whitespace.
+       (demangle_type): Handle substitution candidates correctly in the
+       face of special substitutions.
+
+2000-09-05  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_encoding): Rename variable.
+       (demangle_name): Rename parameter.  Handle return type
+       suppression.
+       (demangle_nested_name): Rename parameter.
+       (demangle_prefix): Likewise.  Change return type suppression.
+       (demangle_unqualified_name): Add parameter.  Flag constructors and
+       conversion operators.
+       (demangle_special_name): Fix comment.
+       (demangle_type): Rename variable.
+       (demangle_bare_function_type): Check for missing return type and
+       parameter.
+       (demangle_class_enum_type): Rename parameter.
+       (demangle_discriminator): Fix misspelling in comment.
+
+2000-08-31  DJ Delorie  <dj@redhat.com>
+
+       * configure.in (Cygwin): special case cygwin only when we're
+       building cygwin, not when we're hosting cygwin.
+
+2000-09-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_template_arg): Eat an `E' after an
+       <expression>.
+
+2000-09-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_type_ptr): Increment position past
+       pointer and reference characters.
+
+2000-09-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_nv_offset): New function.
+       (demangle_v_offset): Likewise.
+       (demangle_call_offset): Likewise.
+       (demangle_special_name): Update thunk demangling to comply with
+       ABI changes.
+
+2000-09-03  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (ANONYMOUS_NAMESPACE_PREFIX): New macro.
+       (substitution_def): Remove template_parm_number.
+       (NOT_TEMPLATE_PARM): Remove.
+       (result_insert_string): New macro.
+       (result_insert): Likewise.
+       (result_insert_char): Likewise.
+       (substitution_add): Remove last parameter.  Don't store template
+       parm number.
+       (BFT_NO_RETURN_TYPE): Define as NULL.
+       (demangle_encoding): Adjust call to demangle_bare_function_type.
+       (demangle_name): Adjust substitution.  Adjust call to
+       substitution_add.
+       (demangle_prefix): Adjust call to substitution_add.
+       (demangle_identifier): Handle anonymous namespaces.
+       (demangle_operator_name): Change demangling of vendor-extended
+       operator to match ABI changes.
+       (demangle_type_ptr): Change parameters.  Make recursive.  Handle
+       substitutions here.
+       (demangle_type): Adjust calls to demangle_template_param,
+       substitution_add, and demangle_type_ptr.  Fix substitution of
+       templated types.
+       (demangle_function_type): Change parameter to a pointer.
+       (demangle_bare_function_type): Likewise.  Adjust insertion point.
+       (demangle_template_param): Remove last parameter.
+       (demangle_expr_primary): Remove unused variable.  Adjust call to
+       demangle_template_param.
+       (is_mangled_char): Accept `$' and `.'.
+       * cplus-dem.c (gnu_new_abi_symbol_characters): Add '$' and '.'.
+       * dyn-string.c (dyn_string_insert_char): New function.
+
+2000-08-31  Hans-Peter Nilsson  <hp@axis.com>
+
+       * testsuite/demangle-expected: Add nine tests for
+       underscore-after-number followed by five tests for name-signature
+       delimiter.
+
+2000-08-28  Richard Henderson  <rth@cygnus.com>
+
+       * Makefile.in (md5.o): Depend on config.h.
+
+2000-08-28  Jason Merrill  <jason@redhat.com>
+
+       * Makefile.in (REQUIRED_OFILES): Add md5.o.
+       (CFILES): Add md5.c.
+       * md5.c: New file.
+
+2000-08-27  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_name): Initialize template_p in local
+       name case.  Don't re-add substitutions as candidates.
+       (demangle_nested_name): Use <unqualified-name>.
+       (demangle_prefix): Likewise.  Don't add template names as
+       substitution candidates twice, or re-add a substitution or the
+       last prefix component.
+       (demangle_local_name): Adjust output format.
+
+2000-08-25  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (result_add_separated_char): Change parameter to
+       int.
+       (substitution_add): Don't check for duplicates.  Check if
+       previously allocated size is zero.
+       (demangle_name): Remove duplicate check for std substitution.
+       Clear template flag appropriately.
+       (demangle_prefix): Remove argument to demangle_substitution.
+       Don't check that template flag is already set.
+       (demangle_operator_name): Add pt operator.
+       (demangle_type): Don't treat r as built-in type.  Remove argument
+       to demangle_substitution.  Fix substitution candidate mechanics.
+       Handle <template-template-parm>s.  Improve comments.
+       (demangle_template_param): Don't handle template arg lists here.
+       (demangle_substitution): Remove parameter.
+       (print_usage): Remove extra fprintf option.
+
+2000-08-24  Greg McGary  <greg@mcgary.org>
+
+       * libiberty/random.c (end_ptr): Revert previous change.
+
+2000-08-24  Greg McGary  <greg@mcgary.org>
+
+       * libiberty/cplus-dem.c (cplus_demangle_opname, cplus_mangle_opname,
+       demangle_expression, demangle_function_name): Use ARRAY_SIZE.
+       * libiberty/random.c (end_ptr): Likewise.
+
+2000-08-23  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (result_close_template_list): Remove function.
+       (result_add_separated_char): New function.
+       (result_open_template_list): New macro.
+       (result_close_template_list): Likewise.
+       (demangle_prefix): Don't set template_p if the
+       prefix ends with a ctor name.
+       (demangle_type_ptr): Remove duplicate RETURN_IF_ERROR.
+       (demangle_type): Check for template args after substitution.
+       (demangle_template_args): Use result_open_template_list.
+
+2000-08-02  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * pexecute.c:  Don't use vfork.  Initialize 'pid' before retry loop.
+
+2000-07-26  Dave Pitts  <dpitts@cozx.com>
+
+       * config/mh-openedition.h: Added -DLE370 definition.
+
+2000-07-26 Mark Elbrecht <snowball3@bigfoot.com>
+
+       * pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to
+       __DJGPP__. Use P_WAIT instead of constant in the spawnv* call.
+       Cast program to 'char *' in errmsg_arg assignment.
+       (PWAIT_ERROR): Define.
+       (pwait): Use PWAIT_ERROR.  Adjust DJGPP's status code to conform
+       to DJGPP's WIF* macros.
+
+2000-07-27  RodneyBrown  <RodneyBrown@pmsc.com>
+           Jeff Law <law@cygnus.com>
+
+       * getcwd.c: Include string.h, stdlib.h for prototypes
+
+       * Makefile.in (rename.o, waitpid.o): Depend on config.h
+       * rename.c: Include config.h, unistd.h
+       * waitpid.c: Include config.h, sys/wait.h
+
+2000-07-24  Hans-Peter Nilsson  <hp@axis.com>
+
+       * cplus-dem.c (work_stuff_copy_to_from): New.
+       (delete_non_B_K_work_stuff): New.
+       (delete_work_stuff): New.
+       (mop_up): Break out work_stuff partly destruction to
+       delete_non_B_K_work_stuff.
+       (iterate_demangle_function): New.
+       (demangle_prefix): Call iterate_demangle_function instead of
+       demangle_function_name.  Leave handling of name-signature
+       __-delimiters to iterate_demangle_function.
+       (demangle_integral_value): Strip an optional
+       following underscore cautiously.  Handle negative numbers.
+
+2000-07-24  Daniel Berlin <dberlin@redhat.com>
+
+       * cplus-dem.c (demangle_signature): Change if (GNU_DEMANGLING) to
+       if (AUTO_DEMANGLING || GNU_DEMANGLING)
+
+2000-07-21  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_ctor_dtor_name): Remove not-in-charge
+       allocating ctor mangling.
+       (demangle_array_type): Handle empty and non-constant array length.
+
+2000-07-23  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+           Jeff Law <law@cygnus.com>
+
+       * configure.in (AC_CHECK_HEADERS): Add time.h.
+       (AC_HEADER_TIME): Add check.
+       * configure, config.in: Regenerate.
+       * getruntime.c: Portably #include <sys/time.h> and/or <time.h>.
+
+       * configure.in (AC_CHECK_HEADERS): Add limits.h.
+       * configure, config.in: Regenerate.
+       * sort.c: Portably #include <limits.h> and/or <sys/param.h>.
+       * strtol.c, strtoul.c: #include "config.h". Portably #include
+       <limits.h> and/or <sys/param.h>.
+       * Makefile.in (strtol.o, strtoul.o): Update dependencies.
+
+       * aclocal.m4 (libiberty_AC_DECLARE_ERRNO): New macro.
+       * configure.in (libiberty_AC_DECLARE_ERRNO): Add check.
+       * configure, config.in: Regenerate.
+       * pexecute.c, strtol.c, strtoul.c: Declare errno if necessary.
+
+       * cp-demangle.c, mkstemps.c: #include <sys/types.h>.
+
+2000-07-21  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in (xexit.o): Add dependency for config.h in xexit.c.
+       * (vasprintf.o): Add dependency for config.h in vasprintf.c.
+
+2000-07-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cp-demangle.c (cp_demangle_type): Wrap in IN_LIBGCC2.
+
+       * setenv.c (setenv): Initialize variable `ep'.
+
+       * sigsetmask.c (abort): Prototype.
+
+       * vasprintf.c: Include config.h.  Check ANSI_PROTOTYPES, not
+       __STDC__ for stdarg.h include.
+       (int_vasprintf): Prototype.
+       (checkit): Prototype.  Use VPARAMS/ANSI_PROTOTYPES/VA_START in
+       definition.  Cast `global_total_width' in comparison.
+       (main): Prototype.  Return a value.
+
+       * vfork.c (fork): Prototype.
+
+       * xexit.c: Include config.h.
+
+2000-07-20  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * cplus-dem.c (demangle_fund_type): Make 'dec' an unsigned int,
+       and print it with %u.
+
+2000-07-17  Hans-Peter Nilsson  <hp@axis.com>
+
+       * testsuite/regress-demangle (failed test): Show result and
+       expected output.
+
+2000-07-07  Andrew Haley  <aph@cygnus.com>
+
+       * cplus-dem.c (main): fflush() after emitting last char before
+       waiting for input.
+
+2000-06-28  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_encoding): Accept no substitutions.
+       (demangle_name): Handle <substitution> followed by
+       <unqualified-template-name>.
+       (demangle_type): Follow special substitutions with
+       <class-enum-type>
+       (demangle_subtitution): Set template_p for special substitutions.
+       (main): Fix typos.
+
+2000-06-27  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_special_name): Swap base and derived
+       class when demangling construction vtables.
+
+2000-06-21  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c: Don't include ctype.h.
+       (IS_DIGIT): New macro.
+       (IS_ALPHA): Likewise.  Use IS_DIGIT and IS_ALPHA throughout
+       instead of isdigit and isalpanum.
+       (demangling_def): Make name and next const pointers.
+       (STATUS_ALLOCATION_FAILED): New status code.
+       (dyn_string_append_space): Handle failure in
+       dyn_string_append_char.
+       (int_to_dyn_string): Likewise.  Change return value to status_t.
+       (string_list_new): Handle failure of dyn_string_init.
+       (result_close_template_list): Change return type to status_t.
+       Handle failure in dyn_string_append.
+       (result_push): Change return value to status_t.  Handle failure in
+       string_list_new.  Handle failure of result_push throughout.
+       (substitution_add): Change return value to status_t.  Handle
+       dyn_string failures.  Handle failure of substitution_add
+       throughout.
+       (template_arg_list_new): Return NULL on allocation failure.
+       (result_append_string): Return STATUS_ALLOCATION_FAILED on error.
+       Handle error result throughout.
+       (result_append): Likewise.
+       (result_append_char): Likewise.
+       (result_append_space): Likewise.
+       (demangling_new): Make argument a const pointer.  Handle
+       allocation failures.
+       (demangle_template_args): Handle failure in template_arg_list_new
+       and result_close_template_list.
+       (demangle_discriminator): Return if int_to_dyn_string fails.
+       (cp_demangle): Likewise.
+       (cp_demangle_type): New function.
+       (cplus_demangle_new_abi): Don't call dyn_string_delete.  Abort on
+       memory allocation failure.
+       (main): Likewise.
+       * dyn-string.c (RETURN_ON_ALLOCATION_FAILURE): Define if
+       IN_LIBGCC2.
+       (dyn_string_init): Change return value to int.  Handle
+       RETURN_ON_ALLOCATION_FAILURE case.
+       (dyn_string_new): Handle RETURN_ON_ALLOCATION_FAILURE case.
+       (dyn_string_release): Delete the dyn_string.
+       (dyn_string_resize): Handle RETURN_ON_ALLOCATION_FAILURE case.
+       (dyn_string_copy): Change return type to int.
+       (dyn_string_copy_cstr): Likewise.
+       (dyn_string_prepend): Likewise.
+       (dyn_string_prepend_cstr): Likewise.
+       (dyn_string_insert): Likewise.
+       (dyn_string_insert_cstr): Likewise.
+       (dyn_string_append): Likewise.
+       (dyn_string_append_cstr): Likewise.
+       (dyn_string_append_char): Likewise.
+       (dyn_string_substring): Likewise.
+
+2000-06-09  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * cp-demangle.c (demangle_operator_name): Add spaces before
+       names beginning with a letter: delete, delete[], new, new[],
+       sizeof.
+       (demangle_special_name): Handle TF <type> and TJ <type>.
+
+Thu Jun  8 18:52:24 2000  Philippe De Muyter  <phdm@macqel.be>
+
+       * cp-demangle.c (template_arg_list_new): Revert previous PARAMS patch.
+
+Thu Jun  8 09:25:54 2000  Philippe De Muyter  <phdm@macqel.be>
+
+       * cp-demangle.c (stdio.h): File included unconditionaly.
+       (template_arg_list_new): Parameter list is PARAMS ((void)), not ().
+       * dyn-string.c (stdio.h): File included.
+       * partition.c (partition_print): No `&' needed to take the address of
+       a function.
+
+2000-06-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in (ac_libiberty_warn_cflags): Add -pedantic.
+
+       * choose-temp.c (try, choose_temp_base, make_temp_file): Constify.
+
+       * cp-demangle.c (demangle_char): Change parameter from char to int.
+       (demangle_expression, demangle_expr_primary): Remove extra
+       semi-colon in prototype.
+
+       * dyn-string.c (dyn_string_append_char): Change parameter from
+       char to int.
+
+       * memcmp.c (memcmp): Constify.
+
+       * mkstemps.c (gcc_uint64_t): Mark GNUC `long long' case with
+       __extension__.
+
+       * partition.c (elem_compare): Prototype.  Don't cast away
+       const-ness.
+
+       * setenv.c (setenv): Use braces to avoid ambiguous `else'.
+
+2000-06-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (cp-demangle.o): Depend on $(INCDIR)/demangle.h.
+
+       * cp-demangle.c: Include demangle.h.
+       (template_arg_list_new): DeANSIfy.
+       (cp_demangle): Make static and add prototype.
+       (operator_code, operators): Constify.
+       (demangle_operator_name): Likewise for variables `p1', `p2' and `p'.
+
+2000-06-05  Alex Samuel  <samuel@codesourcery.com>
+
+       * cp-demangle.c (demangle_prefix): Cast argument to isdigit to
+       unsigned char.
+       (demangle_unqualified_name): Likewise.
+       (demangle_number_literally): Likewise.
+       (demangle_type): Likewise.
+       (demangle_substitution): Likewise.
+       (is_mangled_char): Likewise, for isalnum.
+
+2000-06-04  Alex Samuel  <samuel@codesourcery.com>
+
+       * Makefile.in (CFILES): Add cp-demangle.c and dyn-string.c.
+       (REQUIRED_OFILES): Add cp-demangle.o and dyn-string.o.
+       (cp-demangle.o): New dependency.
+       (dyn-string.o): Likewise.
+
+       * dyn-string.c: Move here from gcc/dyn-string.c.  Add new functions.
+
+       * cplus-dem.c (libiberty_demanglers): Add initializer for new-ABI
+       demangler.
+       (cplus_demangle): Call cplus_demangle_new_abi if in new-ABI
+       demangling mode.
+       (gnu_new_abi_symbol_characters): New function.
+       (main): Use gnu_new_abi_symbol_characters.  * cp-demangle.c: New
+       file.
+       * cp-demangle.c: New file.
+
+Tue May 30 16:45:25 2000  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * floatformat.c: Add name to each floatformat field.
+
+Tue May 30 15:07:52 2000  Jeffrey A Law  (law@cygnus.com)
+
+       * Makefile.in (objalloc.o): Depend on config.h
+
+2000-05-29  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.c, partition.c, sort.c, xmemdup.c: Include string.h
+       if HAVE_STRING_H.
+       * pexecute.c, xexit.c: Include stdlib.h if HAVE_STDLIB_H.
+       * objalloc.c: Include config.h.  Include stdlib.h and don't
+       declare malloc or free if HAVE_STDLIB_H.
+       * strerror.c, strsignal.c: Include stdlib.h if HAVE_STDLIB_H,
+       else declare malloc without prototype.  Include string.h if
+       HAVE_STRING_H, else declare memset without prototype.  Don't
+       include stddef.h.
+
+2000-05-23  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make
+       -j3.
+
+2000-05-18  J. David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * xmalloc.c: Include config.h for HAVE_SBRK definition.
+
+2000-05-16  Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
+
+       * hashtab.c (hash_pointer): Delete low-order bits which are
+       probably zero, also eliminate a warning on alpha.
+
+2000-05-15  David Edelsohn  <edelsohn@gnu.org>
+
+       * Makefile.in: Change "pic" to depend on $(PICFLAG), not
+       on $(enable_shared).
+
+2000-05-10  Jakub Jelinek  <jakub@redhat.com>
+
+       * config.table: Use mh-sparcpic for sparc*-*-*.
+
+2000-05-08  Nick Clifton  <nickc@cygnus.com>
+
+       * Makefile.in (CFILES): Add strncmp.c.
+       (NEEDED): Add strncmp.
+
+2000-05-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (cplus_demangle_opname, demangle_function_name):
+       Cast the arguments to `islower' to `unsigned char'.
+       (print_demangler_list): Prototype.
+
+Thu May  4 17:14:41 2000  Philippe De Muyter  <phdm@macqel.be>
+
+       * sort.c (UCHAR_MAX): Provide fallback definition.
+
+2000-04-29  Alexandre Oliva  <aoliva@cygnus.com>
+
+       * Makefile.in (maintainer-clean-subdir): Fix handling of empty
+       SUBDIRS.
+
+2000-04-28  Kenneth Block  <block@zk3.dec.com>
+           Jason Merrill  <jason@casey.cygnus.com>
+
+       * cplus-dem.c (libiberty_demanglers): New table for demangle styles.
+       (cplus_demangle_set_style): New function for setting style.
+       (cplus_demangle_name_to_style): New function to translate name.
+
+2000-04-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * aclocal.m4: New file with new test libiberty_AC_FUNC_STRNCMP.
+
+       * configure.in (AC_CHECK_HEADERS): Add sys/mman.h fcntl.h.
+       (libiberty_AC_FUNC_STRNCMP): Invoke.
+
+       * strncmp.c: New file.
+
+Thu Apr 27 16:58:43 MET DST 2000  Jan Hubicka  <jh@suse.cz>
+
+       * hashtab.c (htab_expand): Add prototype.
+       (find_empty_slot_for_expand): Likewise.
+
+2000-04-24  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * hashtab.c (hash_pointer, eq_pointer): Make definition static to
+       match prototype.
+       (htab_expand): Cast the return value of xcalloc.
+
+2000-04-24  Mark Mitchell  <mark@codesourcery.com>
+
+       * hashtab.c (hash_pointer): New function.
+       (eq_pointer): Likewise.
+       (htab_hash_pointer): New variable.
+       (htab_eq_pointer): Likewise.
+
+2000-04-23  Mark Mitchell  <mark@codesourcery.com>
+
+       * sort.c (sort_pointers): Fix endianness bugs.
+
+       * sort.c: New file.
+       * Makefile.in (CFILES): Add sort.c
+       (REQUIRED_OFILES): Add sort.o.
+       (sort.o): New target.
+
+2000-04-21  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+       * Makefile.in (*-subdir): Revamp slightly to avoid losing on
+       4.3BSD systems.
+
+Tue Apr 18 16:23:31 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * hashtab.c: Various minor cleanups.
+       (htab_find_slot_with_hash): INSERT is now enum insert_option.
+       (htab_find_slot): Likewise.
+
+2000-04-16  Dave Pitts  <dpitts@cozx.com>
+
+       * cplus-dem.c (cplus_demangle_opname): Changed to use islower.
+
+2000-04-05  Richard Henderson  <rth@cygnus.com>
+
+       * splay-tree.c (splay_tree_remove): New.
+
+2000-03-30  Mark Mitchell  <mark@codesourcery.com>
+
+       * hashtab.c (find_empty_slot_for_expand): Use hashval_t for hash
+       codes.
+       (htab_find_with_hash): Likewise.
+       (htab_find_slot_with_hash): Likewise.
+
+2000-03-29  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.c (htab_find_with_hash): Avoid calculating hash2
+       unless it will be used.  Rearrange loop for better
+       optimization.
+       (higher_prime_number): Add static prototype.
+
+Thu Mar 16 01:33:58 2000  Jeffrey A Law  (law@cygnus.com)
+
+       * Makefile.in (partition.o): Depend on config.h
+
+2000-03-14  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * hashtab.c (find_empty_slot_for_expand): New function.
+       (htab_expand): Use it instead of htab_find_slot.
+       (htab_find_with_hash): Renamed from htab_find; now accepts extra
+       argument HASH.
+       (htab_find_slot_with_hash): Likewise for htab_find_slot.
+       (htab_find): New wrapper function.
+       (htab_find_slot): Likewise.
+       (htab_traverse): Pass slot, not entry, to called function.
+
+2000-03-09  Alex Samuel  <samuel@codesourcery.com>
+
+       * Makefile.in (CFILES): Add partition.c.
+       (REQUIRED_OFILES): Add partition.o.
+       (partition.o): New rule.
+       * partition.c: New file.
+
+2000-03-09  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.c (htab_create): Set del_f.
+       (htab_delete, htab_empty, htab_remove_elt, htab_clear_slot):
+       Use it.
+
+2000-03-08  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * hashtab.c: Remove debugging variables (all_searches,
+       all_collisions, all_expansions). Delete
+       all_hash_table_collisions.
+       (create_hash_table, delete_hash_table, empty_hash_table,
+       find_hash_table_entry, remove_element_from_hash_table_entry,
+       clear_hash_table_slot, traverse_hash_table, hash_table_size,
+       hash_table_elements_number, hash_table_collisions): Rename to:
+       htab_create, htab_delete, htab_empty, htab_find_slot,
+       htab_remove_elt, htab_clear_slot, htab_traverse, htab_size,
+       htab_elements, htab_collisions.
+       (htab_find): New function, handles common case where you don't
+       plan to add or delete an entry.
+       (htab_expand): Don't create a whole new table, just a new
+       entry vector.
+       (htab_find_slot): Simplify logic.
+
+1999-08-03  Ian Lance Taylor  <ian@zembu.com>
+
+       * floatformat.c: Add casts to avoid signed/unsigned warnings.
+       * pexecute.c: Add ATTRIBUTE_UNUSED as needed on Unix.
+
+       * Makefile.in (install_to_libdir): Change $(TARGETLIB).n to
+       $(TARGETLIB)n so it works on MSDOS.
+       (install_to_tooldir): Likewise.
+
+1999-07-21  Ian Lance Taylor  <ian@zembu.com>
+
+       From Mark Elbrecht:
+       * makefile.dos: Remove; obsolete.
+       * configure.bat: Remove; obsolete.
+
+1999-07-11  Ian Lance Taylor  <ian@zembu.com>
+
+       * splay-tree.c (splay_tree_insert): Add initialization to avoid
+       warning.
+
+2000-01-04  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * pexecute.c: Conditionally include string.h.
+       (fix_argv): Handle embedded whitespace in args for Mingw32.
+
+2000-01-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in (ac_libiberty_warn_cflags): Turn on warnings if
+       we're using gcc.
+
+       * Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@
+
+1999-12-27  Geoff Keating  <geoffk@cygnus.com>
+
+       * vasprintf.c (int_vasprintf): Don't re-read the format character
+       as this mishandles strings like '%%s'.
+
+1999-12-05  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_new): Use struct splay_tree_node_s
+       rather than struct splay_tree_node.
+       (splay_tree_insert): Use struct splay_tree_s rather than struct
+       splay_tree.
+
+Sun Nov 28 00:59:39 1999  Philippe De Muyter  <phdm@macqel.be>
+
+       * hashtab.c (sys/types.h): File included.
+
+1999-11-22  Jason Merrill  <jason@casey.cygnus.com>
+
+       * strtoul.c, strtol.c, random.c: Remove advertising clause from
+       BSD license, pursuant with
+
+         ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
+
+Wed Nov 10 09:42:39 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * hashtab.c: Include stdio.h.
+
+Mon Nov  8 09:23:41 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * hashtab.c (traverse_hash_table): Protect prototype with PARAMS.
+
+Tue Nov  2 03:23:13 1999  Philippe De Muyter  <phdm@macqel.be>
+
+       * xstrdup (sys/types.h): Include this file.
+
+1999-10-28  Nathan Sidwell  <nathan@acm.org>
+
+       * Makefile.in (SUBDIRS): New macro.
+       (mostlyclean, clean, distclean, maintainer-clean): Adjust to
+       avoid multiple subdirectory cleaning.
+       (*-subdir): Use SUBDIRS.
+
+1999-10-25  Jim Kingdon  <http://developer.redhat.com/>
+
+       * cplus-dem.c: Move declarations of standard_symbol_characters and
+       hp_symbol_characters inside #ifdef MAIN to avoid compiler
+       warnings.
+
+1999-10-23 08:51 -0700  Zack Weinberg  <zack@bitmover.com>
+
+       * hashtab.c (find_hash_table_entry): When returning a
+       DELETED_ENTRY slot, change it to EMPTY_ENTRY first.
+       (clear_hash_table_slot): New function which deletes an entry
+       by its position in the table, not its value.
+       (traverse_hash_table): New function which calls a hook
+       function for every live entry in the table.
+
+1999-10-19  Mark Mitchell  <mark@codesourcery.com>
+
+       * cplus-dem.c (INTBUF_SIZE): New macro.
+       (string_append_template_idx): New function.
+       (demangle_expression): Likewise.
+       (demangle_integral_value): Use it.
+       (demangle_real_value): New function, split out from ...
+       (demangle_template_value_parm): ... here.  Use
+       string_append_template_idx.  Use demangle_real_value.
+       (demangle_template): Use string_append_template_idx.
+       (demangle_qualified): Use consume_count_with_underscores.
+       (get_count): Tweak formatting.
+       (do_type): Use string_append_template_idx.
+
+1999-10-18  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * calloc.c: Add a public domain notice.
+
+Mon Oct 18 02:30:47 1999  Philippe De Muyter  <phdm@macqel.be>
+
+       * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly.
+
+Fri Oct 15 01:47:51 1999  Vladimir Makarov  <vmakarov@loony.cygnus.com>
+
+       * Makefile.in (CFILES): Add hashtab.c
+       (REQUIRED_OFILES): Add hashtab.o
+       (hashtab.o): Add dependencies.
+       * hashtab.c: New file
+
+Wed Oct 13 01:16:47 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * basename.c (DIR_SEPARATOR): New macro.
+       (DIR_SEPARATOR_2): Likewise.
+       (HAVE_DOS_BASED_FILESYSTEM): Likewise.
+       (IS_DIR_SEPARATOR): Likewise.
+       (main): Handle MSDOS style pathname.
+
+1999-10-11  Mark Mitchell  <mark@codesourcery.com>
+
+       * cplus-dem.c (do_type): Handle pointer to member types whose
+       enclosing classes have namespace scope.
+
+Sun Oct 10 01:23:50 1999  Marc Espie <espie@cvs.openbsd.org>
+
+       * config.table:  Provide a backup shell for executing move-if-change.
+
+1999-10-02  Mark Mitchell  <mark@codesourcery.com>
+
+       * xmalloc.c (xmalloc): Fix spelling error.
+       (xcalloc, xrealloc): Likewise.
+
+1999-10-02  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (fancy_abort, demangle_integral_value,
+       demangle_arm_hp_template, recursively_demangle,
+       standard_symbol_characters, hp_symbol_characters, main): Add prototype.
+       (program_name, program_version, fatal): Constify a char*.
+       (usage, fatal): Mark with ATTRIBUTE_NORETURN.
+       (main): Call return, not exit.
+
+1999-09-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * choose-temp.c: Remove obsolete comment about gcc.
+       (make_temp_file): Constify a char*.
+
+Wed Sep  8 20:03:28 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * xmemdup.c: Include sys/types.h.
+
+1999-09-07  Jeff Garzik  <jgarzik@pobox.com>
+
+       * xmemdup.c: New xmemdup function.
+       * Makefile.in, makefile.vms, vmsbuild.com:  Use xmemdup.[co].
+
+Tue Sep  7 23:32:18 1999  Linas Vepstas  <linas@linas.org>
+
+       * config.table: Add openedition target.
+       * config/mh-openedition: New file.
+
+Thu Sep  2 01:36:12 1999  Marc Espie <espie@cvs.openbsd.org>
+
+       * pexecute.c (pexecute):  Fill in temp_base when needed.
+
+1999-08-31  Richard Henderson  <rth@cygnus.com>
+
+       * getpwd.c: Check HAVE_GETCWD before defining it away.
+
+1999-08-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (CFILES): Add calloc.c and getpwd.c.
+       (REQUIRED_OFILES): Add getpwd.o.
+       (getpwd.o): Add target.
+
+       * configure.in (AC_PREREQ): Bump to 2.13.
+       (AC_CHECK_HEADERS): Add check for <sys/stat.h>.
+
+       * getpwd.c: New file, moved here from gcc.
+
+1999-08-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (gnu_special): Cast a `size_t' to `long' when
+       comparing against a signed quantity.
+       (arm_special): Likewise.
+       (demangle_fund_type): Likewise.
+       (do_hpacc_template_const_value): Mark parameter `work' with
+       ATTRIBUTE_UNUSED.
+       (main): Constify variable `valid_symbols'.
+
+Tue Aug 24 02:50:45 1999  Philippe De Muyter  <phdm@macqel.be>
+
+       * strtoul.c (strtoul): Add parentheses around && within ||.
+
+Fri Aug  6 23:32:29 1999  Daniel Jacobowitz <drow@drow.them.org>
+
+       * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix,
+       libdir, libsubdir and tooldir.
+
+1999-08-01  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_insert): Return the new node.
+
+1999-07-14  Richard Henderson  <rth@cygnus.com>
+
+       * argv.c: Include stdlib.h and string.h instead of
+       prototyping directly.
+       * choose-temp.c: Conditionally include string.h.
+
+1999-07-12  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (NEEDED): Add bcmp, bcopy, bzero.
+
+1999-07-11  Ian Lance Taylor  <ian@zembu.com>
+
+       * splay-tree.c (splay_tree_insert): Add initialization to avoid
+       warning.
+
+1999-07-07  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (needed-list): Only include stuff we actually need
+       for libstdc++.
+
+1999-06-21  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>
+
+       * configure.in (checkfuncs): Add gettimeofday.
+       * config.in, configure: Regenerated.
+
+Mon Jun 21 05:56:01 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if
+       the test fails.
+       * configure: Regenerate.
+
+1999-06-10  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix
+       parallel builds.
+
+1999-05-28  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * putenv.c: Include ansidecl.h to define `const'.
+       * setenv.c: Likewise.
+
+Wed May 26 03:58:20 1999  "Melissa O'Neill" <oneill@cs.sfu.ca>
+
+       * Makefile.in (CFILES): Add putenv.c and setenv.c.
+       * configure.in (funcs): Add putenv and setenv.
+       (AC_CHECK_FUNCS): Check for putenv and setenv.
+       * configure: Rebuilt.
+       * putenv.c setenv.c: New files.
+
+       * getcwd.c (getcwd): If pathname is NULL, then obtain SIZE
+       bytes of space using malloc.
+
+Mon May 17 01:42:34 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>
+
+       * cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance
+       the *mangled pointer beyond the end of the string.  Clean up code to
+       match prevailing coding style.
+
+1999-05-13  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * tmpnam.c (L_tmpnam): Fix typo.
+
+Thu May 13 01:14:46 1999 Marc Espie <espie@cvs.openbsd.org>
+
+       * cplus-dem.c (standard_symbol_characters): Renamed from
+       standard_symbol_alphabet.  No longer modify TABLE.
+       (hp_symbol_characters): Renamed from hp_symbol_alphabet.  No longer
+       modify TABLE.
+       (main): Corresponding changes.  Use strchr to determine if a
+       character is valid.
+
+1999-05-11  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       * cplus-dem.c (main): Use table lookup to distinguish identifier
+       characters from non-identifier characters.
+       (standard_symbol_alphabet, hp_symbol_alphabet): New functions.
+
+Thu May  6 20:34:42 1999  Fred Fish  <fnf@be.com>
+
+       * configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list.
+       * getruntime.c: Only attempt to include sys/resource.h and
+       use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H
+       are defined.
+
+Mon Apr 26 01:36:06 1999  Donn Terry (donn@interix.com)
+
+       * configure.in (alloca detection): Handle alloca directly for interix.
+       * configure: Rebuilt.
+
+Sun Apr 25 01:18:21 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32.
+
+1999-04-20  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       Fix from Dale Hawkins:
+       * cplus-dem.c (mop_up): Set typevec_size to zero, so it'll be
+       reallocated properly if we use it again.
+
+       * cplus-dem.c (demangle_fund_type): Check for buffer overrun.  Be
+       stricter about syntax.  Always null-terminate string.
+
+Thu Apr 15 23:00:55 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * configure.in (checkfuncs): Check for sbrk.
+       * config.in: Rebuilt.
+       * configure: Likewise.
+       * xmalloc.c: Use HAVE_SBRK instead of the host specific definitions.
+
+1999-04-12  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       Fix from Marcus Daniels:
+       * cplus-dem.c (demangle_fund_type): Don't run off the end of the
+       identifier looking for another underscore.
+
+Sun Apr 11 23:20:59 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * pexecute.c: Change all references to __UWIN__ to _UWIN.
+       * xmalloc.c: Likewise.
+       (xcalloc): UWIN has sbrk.
+       (xrealloc): Fix guard macro.
+
+1999-04-11  Richard Henderson  <rth@cygnus.com>
+
+       * alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin
+       or <alloca.h>.
+       * clock.c (GNU_HZ): New definition.
+       (clock): Use it.
+       * getruntime.c: Likewise.
+
+       * config.table: Use mh-beos.
+       * config/mh-beos: New file.
+
+1999-04-11  Mark Mitchell  <mark@codesourcery.com>
+
+       * cplus-dem.c (demangle_template_value_parm): Handle
+       pointers-to-members.
+       (do_type): Handle template parameters as qualifiers.
+
+1999-04-01  Jim Blandy  <jimb@zwingli.cygnus.com>
+
+       * cplus-dem.c: Attempt to handle overflows in counts with some
+       semblance of grace.
+       (consume_count): Detect overflows.  Return -1 to indicate errors,
+       instead of zero.
+       (demangle_template_value_parm, demangle_template): Handle change
+       to consume_count's return convention.
+
+1999-04-05  Tom Tromey  <tromey@cygnus.com>
+
+       * testsuite/regress-demangle: New file.
+       * testsuite/demangle-expected: New file.
+
+       * Makefile.in (all, check, installcheck, info, install-info,
+       clean-info, dvi, install, etags, tags, mostlyclean, clean,
+       distclean, maintainer-clean, realclean): Depend on corresponding
+       `-subdir' target.
+       (all-subdir check-subdir installcheck-subdir info-subdir
+       install-info-subdir clean-info-subdir dvi-subdir
+       install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
+       distclean-subdir maintainer-clean-subdir): New target.
+       * testsuite/Makefile.in: New file.
+       * configure: Rebuilt.
+       * configure.in: Create testsuite/Makefile.
+
+1999-04-02  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.h (splay_tree_compare_pointers): Define.
+
+1999-03-30  Mark Mitchell  <mark@codesourcery.com>
+
+       * splay-tree.c (splay_tree_compare_ints): Define.
+
+1999-03-30  Tom Tromey  <tromey@cygnus.com>
+
+       * cplus-dem.c (consume_count): If `count' wraps, return 0 and
+       don't advance input pointer.
+       (demangle_class_name): If consume_count didn't find a count, do
+       nothing.  Don't bother with `strlen' sanity check; consume_count
+       does it for us.
+
+1999-03-16  Stan Shebs  <shebs@andros.cygnus.com>
+
+       From Art Haas  <ahaas@neosoft.com>:
+       * cplus-dem.c (demangle_prefix): Don't grab all the '__' strings
+       when doing arm or hp style.
+       (demangle_nested_args): Decr forgetting_types field when done.
+
+Thu Mar 11 01:22:58 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * pexecute.c (__CYGWIN32__): Rename to
+       (__CYGWIN__): this.
+       * xmalloc.c: Likewise.
+
+       Changes to support i386-pc-uwin.
+       * configure.in (*-*-uwin*): Workaround for vfork bug.
+       * configure: Regenerate.
+       * pexecute.c (pexecute): Be like standard Unix.
+       (pwait): Likewise.
+       * xmalloc.c (first_break): Define.
+       (xmalloc_set_program_name): Use.
+       (xmalloc): Use.
+
+Thu Mar 11 01:07:55 1999  Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+       * config.table: Cleanup and add mh-*pic handling for alpha, arm, powerpc
+
+Sun Feb 28 22:30:44 1999  Geoffrey Noer  <noer@cygnus.com>
+
+       * config.table: Check cygwin*, not cygwin32*.
+
+Tue Feb  9 16:39:01 1999  Dave Brolley  <brolley@cygnus.com>
+
+       * Makefile.in: Change mkstemp -> mkstemps.
+
+Tue Feb  9 01:12:27 1999  Marc Espie <Marc.Espie@liafa.jussieu.fr>
+
+       * Makefile.in (REQUIRED_OFILES): remove mkstemp.o
+       * configure.in (funcs): Check for and conditionally add mkstemps to
+       the list of functions libiberty will provide.
+       * configure: Rebuilt.
+
+Wed Feb  3 00:01:15 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * clock.c (HZ): Define in terms of (ISO C) CLOCKS_PER_SEC on
+       platforms that don't have HZ.
+       * getruntime.c (HZ): Likewise.
+
+Sat Jan 30 13:28:04 1999  Richard Henderson  <rth@cygnus.com>
+
+       * Makefile.in (xstrdup.o): Depend on config.h.
+
+Wed Jan 13 07:26:44 1999  H.J. Lu  (hjl@gnu.org)
+
+       * cplus-dem.c (mop_up): Set work->previous_argument to NULL after
+       freeing it.
+
+Wed Jan 13 14:16:36 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * xstrdup.c (xstrdup): Switch from strcpy to memcpy for speed.
+
+Tue Jan  5 15:58:29 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+       * Makefile.in (CFILES): fix typo, splay-tree.c instead of
+       splay-tree.o.
+
+1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+       * configure.in: Require autoconf 2.12.1 or higher.
+
+1998-12-30  Michael Meissner  <meissner@cygnus.com>
+
+       * random.c (NULL): Don't redefine NULL if it is already defined.
+
+Tue Dec 22 09:43:35 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * argv.c (buildargv): Cast the result of alloca in assignment.
+
+       * choose-temp.c: Include stdlib.h.
+
+       * cplus-dem.c (demangle_arm_pt): Remove unused prototype.
+       (snarf_numeric_literal): Constify first parameter.
+       (code_for_qualifier): Avoid a gcc extension, make the parameter an
+       int, not a char.
+       (demangle_qualifier): Likewise.
+       (demangle_signature): Cast the argument of a ctype function to
+       unsigned char.
+       (arm_pt): Add parens around assignment used as truth value.
+       (demangle_arm_hp_template): Constify variable `args'.
+       (do_hpacc_template_const_value): Cast the argument of a ctype
+       function to unsigned char.
+       (do_hpacc_template_literal): Remove unused variable `i'.
+       (snarf_numeric_literal): Constify parameter `args'.
+       Cast the argument of a ctype function to unsigned char.
+
+       * floatformat.c (floatformat_to_double): Add explicit braces to
+       avoid ambiguous `else'.
+
+       * fnmatch.c (fnmatch): Change type of variables `c', `c1',
+       `cstart' and `cend' to unsigned char.  Cast the argument of macro
+       `FOLD', which uses ctype functions, to unsigned char.
+
+       * objalloc.c (free): Add prototype.
+
+Sun Dec 20 16:03:46 1998  Hans-Peter Nilsson  <hp@axis.se>
+
+       * Makefile.in (CFILES): Fix typo: splay-tree.c, not splay-tree.o
+
+Fri Dec 18 17:50:18 1998  David Taylor  <taylor@texas.cygnus.com>
+
+       * cplus-dem.c (demangle_arm_pt): remove declaration -- function
+       doesn't exist.
+       (do_hpacc_template_literal): remove unused variable `i'.
+
+Fri Dec 18 16:11:43 EST 1998  Andrew MacLeod  <amacleod@cygnus.com>
+
+       * cplus-dem.c (demangle_fund_type): Process CV and u codes before
+       bumping the pointer we read from. Also prepend these codes,
+       as we do in other places.
+
+1998-12-18  Nick Clifton  <nickc@cygnus.com>
+
+       * cplus-dem.c (demangle_arm_hp_template): Make variable 'args' be
+       'const char *' in order to match its usage when calling siblings.
+       (snarf_numeric_literal): Make first arg 'const char **' in order
+       to match usage.
+
+Mon Dec 14 09:55:50 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * choose-temp.c: Don't check IN_GCC anymore.
+
+       * floatformat.c (floatformat_from_double): Use `const', not `CONST'.
+       * memchr.c (memchr): Likewise.
+       * memcpy.c (memcpy): Likewise.
+       * memmove.c (memmove): Likewise.
+
+       * mkstemp.c: Don't check IN_GCC anymore.
+       * pexecute.c: Likewise.
+       * splay-tree.c: Likewise.
+
+       * strchr.c (strchr): Use `const', not `CONST'.
+       * strrchr.c (strrchr): Likewise.
+       * strtol.c (strtol): Likewise.
+       * strtoul.c (strtoul): Likewise.
+
+Fri Dec  4 13:51:04 1998  David Taylor   <taylor@texas.cygnus.com>
+                         Elena Zannoni  <ezannoni@cygnus.com>
+                         Stan Shebs     <shebs@cygnus.com>
+                         Edith Epstein  <eepstein@cygnus.com>
+                         Andres MacLeod <amacleod@cygnus.com>
+                         Satish Pai     <pai@apollo.hp.com>
+
+       * HP aCC demangling support.
+       * cplus-dem.c
+       (main): Remove default to HP style demangling, set to EDG
+       demangling correctly when -edg specified; set the demangling style
+       when user specifies 'edg'. Set strip_underscore to
+       prepends_underscore, if not HPUXHPPA.  Set
+       current_demangling_style to hp_demangling if HPUXHPPA.  Set
+       current demangling style correctly if the switch is hp.  Read
+       label correctly also in the HP style case.
+       (work_stuff): add temp_start field; add field for volatile member
+       function.
+       (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP
+       style for this case is the same as ARM.
+       (demangle_args): handle EDG_DEMANGLING style; support HP style.
+       (demangle_arm_hp_template): new function. (It was
+       demangle_arm_pt.); check and set value of temp_start field in
+       multiple places. Also, when ceching for end of template args,
+       check to see if at end of static member of template class.
+       (demangle_class): new local variable : save_class_name_end Don't
+       include template args in string defining class.
+       (demangle_class_name): use demangel_arm_hp_template.
+       (demangle_function_name): handle case where demangling style is
+       HP_DEMANGLING and currently point at an 'X' in the mangled name.
+       Handle EDG_DEMANGLING style.  Handle constructor and destructor
+       ops for HP style.
+       (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING
+       styles.  global destructor and constructor for HP style are same
+       as for ARM style. Same for local variables.
+       (demangle_qualified): handle EDG_DEMANGLING style.
+       (demangle_signature): add case for volatile member function.  For
+       cases '1' - '9' : initialize the temp_start field to -1 and handle
+       the EDG_DEMANGLING style.  for case 'F' : handle EDG_DEMANGLING
+       and AUTO_DEMANGLING styles.  If expecting a function and managed
+       to demangle the funct args, then handle the LUCID_DEMANGLING,
+       ARM_DEMANGLING, and EDG_DEMANGLING styles.  Add case for local
+       class name after "Lnnn_ in HP style case. HP style too needs to
+       forget types.  _nnn is OK for HP style, so don't report failure.
+       (do_hpacc_template_const_value): new function. Handle template's
+       value param for HP/aCC.
+       (do_hpacc_template_literal): new function.  Handle a template's
+       literal parameter for HP aCC.
+       (recursively_demangle): new function
+       (snarf_numeric_literal): new function.
+       (usage): add 'edg' to the list of demangling styles; add hp switch
+       to message.
+
+Sat Nov 28 17:25:22 1998  Christopher Faylor <cgf@cygnus.com>
+
+       * pexecute.c: Remove obsolete ifdefed cygwin code.
+
+Fri Nov 27 13:26:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * choose-temp.c: Always include libiberty.h.  Avoid redundancies.
+       * cplus-dem.c: Likewise.  Conform to libiberty.h.
+       * pexecute.c: Likewise.
+       * splay-tree.c: Likewise.
+
+1998-11-25  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in (splay-tree.o): Add config.h dependency.
+
+Mon Nov 23 16:59:49 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       *  configure.in: Use AC_PREREQ(2.12.1).
+
+1998-11-16  Benjamin Kosnik  <bkoz@haight.constant.com>
+
+       * cplus-dem.c (demangle_fund_type): Add demangling for C9x types.
+
+Thu Nov 19 22:15:50 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * mpw.c (mpw_access): Add missing parens.
+
+Thu Nov 19 12:59:21 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in: Call AC_HEADER_SYS_WAIT.
+
+       * pexecute.c: Include sys/wait.h when !IN_GCC.
+
+Thu Nov 19 14:38:20 1998  Geoffrey Noer  <noer@cygnus.com>
+
+       * pexecute.c: revert back to checking old Cygwin
+       preprocessor symbol until some time has passed.
+
+Wed Nov 18 08:52:26 1998  Christopher Faylor <cgf@cygnus.com>
+
+       * pexecute.c: Reorganize WIN32 case to accomodate Cygwin
+       since it will now support similar constructs.
+
+Fri Nov 13 19:18:05 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * configure.in: Check for calloc.
+
+       * calloc.c: New file.
+
+       * xmalloc.c (xcalloc): New function.
+
+Fri Nov 13 08:51:46 EST 1998  Andrew MacLeod  <amacleod@cygnus.com>
+
+       *cplus-dem.c (demangle_prefix): Use the last "__"
+       in the mangled name when looking for the signature. This allows
+       template names to begin with "__".
+
+1998-11-08  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (type_kind_t): Add tk_reference.
+       (demangle_template_value_parm): Handle it.
+       (do_type): Use it for references, instead of tk_pointer.
+
+       * cplus-dem.c (demangle_template_value_parm): Use cplus_demangle,
+       not internal_cplus_demangle.
+
+Sat Nov  7 16:02:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * choose-temp.c: Don't include gansidecl.h.
+       * mkstemp.c: Likewise.
+       * pexecute.c: Likewise.
+
+Mon Nov  2 15:05:33 1998  Geoffrey Noer  <noer@cygnus.com>
+
+       * configure.in: detect cygwin* instead of cygwin32*
+       * configure: regenerate
+
+Mon Nov  2 10:22:01 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining
+       whether to include config.h.  Possibly include unistd.h in the
+       !IN_GCC case.  Define VFORK_STRING as a printable function call
+       for error messages (either "vfork" or "fork".)  If HAVE_VFORK_H is
+       defined, include vfork.h.  If VMS is defined, define vfork()
+       appropriately.  Remove vfork check on USG, we're using autoconf.
+       (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking
+       locally what string to use.
+
+1998-10-26  Mark Mitchell  <mark@markmitchell.com>
+
+       * splay-tree.c: Tweak include directives to make sure declarations of
+       xmalloc and free are available.
+
+1998-10-25  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (gnu_special): Fix handling of virtual tables in
+       anonymous namespaces.
+
+1998-10-23  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (work_stuff): Replace const_type and volatile_type
+       with type_quals.
+       (TYPE_UNQUALIFIED): New macro.
+       (TYPE_QUAL_CONST): Likewise.
+       (TYPE_QUAL_VOLATILE): Likewise.
+       (TYPE_QUAL_RESTRICT): Likewise.
+       (code_for_qualifier): New function.
+       (qualifier_string): Likewise.
+       (demangle_qualifier): Likewise.
+       (internal_cplus_demangle): Use them.
+       (demangle_signature): Likewise.
+       (demangle_template_value_parm): Likewise.
+       (do_type): Likewise.
+       (demangle_fund_type)): Likewise.
+
+Thu Oct 22 19:58:43 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * splay-tree.c (splay_tree_foreach_helper): Make definition static
+       to match prototype.
+
+1998-10-21  Mark Mitchell  <mark@markmitchell.com>
+
+       * splay-tree.c: New file.
+       * Makefile.in (CFILES): Add it.
+       (REQUIRED_OFILES): Likewise.
+       (splay-tree.o): Add dependencies.
+
+Tue Oct 20 12:29:02 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>
+
+       * cplus-dem.c (demangle_qualified): Fix off-by-one when checking
+       range of 'K' index.
+
+Thu Oct 15 18:51:12 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * choose-temp.c: Prototype mkstemps() when IN_GCC.
+
+       * cplus-dem.c (consume_count): Cast argument of ctype macro to
+       `unsigned char'.
+       (cplus_demangle_opname): Cast the result of `strlen' to (int) when
+       comparing against one.
+       (cplus_mangle_opname): Likewise.
+       (demangle_integral_value): Cast argument of ctype macro to
+       `unsigned char'.
+       (demangle_template_value_parm): Likewise.
+       (demangle_template): Initialize variable `bindex'.  Cast the
+       result of `strlen' to (int) when comparing against one.  Remove
+       unused variable `start_of_value_parm'.
+       (demangle_class_name): Cast the result of `strlen' to (int) when
+       comparing against one.
+       (demangle_prefix): Cast argument of ctype macro to `unsigned char'.
+       (gnu_special): Likewise.  Cast the result of `strlen' to (int)
+       when comparing against one.
+       (demangle_qualified): Cast argument of ctype macro to `unsigned char'.
+       (get_count): Likewise.
+       (do_type): Likewise.  Cast the result of `strlen' to (int) when
+       comparing against one.
+       (demangle_fund_type): Cast argument of ctype macro to `unsigned char'.
+       (demangle_function_name): Cast the result of `strlen' to (int)
+       when comparing against one.
+
+       * mkstemp.c (mkstemps): Cast variable `len' to (int) when
+       comparing against one.
+
+Tue Oct 13 23:51:51 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * mkstemp.c: Check HAVE_SYS_TIME_H before including sys/time.h
+       * configure.in (AC_CHECK_HEADERS): Check for sys/time.h too.
+       * config.in, configure: Rebuilt.
+
+       * getopt.c: Check HAVE_STRINGS_H before including strings.h.
+       * configure.in (AC_CHECK_HEADERS): Check for strings.h too.
+       * config.in, configure: Rebuilt.
+
+Mon Oct 12 19:15:59 1998  Geoffrey Noer  <noer@cygnus.com>
+
+       * configure.in: in comment, call AC_EXEEXT instead of AM_EXEEXT
+
+Sun Oct 11 17:36:06 1998  Michael Tiemann  <tiemann@holodeck.cygnus.com>
+
+       * Makefile.in (cplus-dem.o, obstack.o): Depend upon config.h.
+
+Thu Oct  8 23:42:08 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * Merge egcs & devo libiberty.
+
+1998-09-08  Martin von Löwis  <loewis@informatik.hu-berlin.de>
+
+       * cplus-dem.c (demangle_arm_pt): Demangle anonymous namespaces.
+
+Mon Sep  7 23:29:01 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * mkstemp.c: Include config.h even when not IN_GCC.  Wrap header
+       inclusions inside HAVE_*_H macros.  Include ansidecl.h when not
+       IN_GCC.
+
+       * vasprintf.c: Include stdarg.h/varargs.h first.
+
+       * vprintf.c: Likewise.
+
+Sat Sep  5 03:24:49 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * pexecute.c: Updates from gcc.  Copy in gcc has been removed.  This
+       is the canonical copy.  Define ISSPACE if !IN_GCC.
+       * alloca.c, vfprintf.c, choose-temp.c, mkstemp.c, getopt.c: Similarly.
+       * getopt1.c, obstack.c: Similarly.
+       * Makefile.in: Build mkstemp.o
+
+Tue Sep  1 23:12:47 1998  Christopher Faylor <cgf@cygnus.com>
+
+       * configure.in: Include asprintf in list of functions known not
+       to be in newlib.
+       * configure: Rebuild.
+
+Wed Aug 19 14:05:01 1998  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * cplus-dem.c (work_stuff): Add dllimported.
+       (demangled_prefix): Mark symbols imported from PE DLL.
+       (internal_cplus_demangled): Handle.
+
+1998-08-17  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (do_type): Fix simple array handling.  If we fail,
+       stay failed.
+
+Mon Aug 17 10:40:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c: Include config.h if it exists.  Also, only
+       prototype malloc/realloc if we can't get stdlib.h.
+
+Sat Aug 15 16:15:01 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Switch back to checking --with-target-subdir when
+       deciding whether to check for newlib, undoing part of July 15
+       change.
+       * configure: Rebuild.
+
+Thu Aug 13 16:47:38 1998  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (type_kind_t): New type.
+       (demangle_template_value_parm): Add type_kind_t parameter.  Rely
+       on this paramter, rather than demangling the type again.
+       (demangle_integral_value): Pass tk_integral.
+       (demangle_template_: Pass the value returned from do_type.
+       (do_type): Return a type_kind_t.  Pass tk_integral to
+       demangle_template_value_parm for array bounds.
+       (demangle_fund_type): Likewise.
+
+       Also incorporate from GCC version:
+
+       Tue Jul 21 13:28:19 1998  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays.
+
+Thu Aug 13 16:47:38 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (demangle_nested_args): Make function definition
+       static to match the prototype.
+
+Tue Jul 28 11:33:09 1998  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (type_kind_t): New type.
+       (demangle_template_value_parm): Add type_kind_t parameter.  Rely
+       on this paramter, rather than demangling the type again.
+       (demangle_integral_value): Pass tk_integral.
+       (demangle_template_: Pass the value returned from do_type.
+       (do_type): Return a type_kind_t.  Pass tk_integral to
+       demangle_template_value_parm for array bounds.
+       (demangle_fund_type): Likewise.
+
+       Also incorporate from GCC version:
+
+       Tue Jul 21 13:28:19 1998  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays.
+
+Mon Jul 27 12:16:08 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (ALLOCA): New variable.
+       ($(TARGETLIB)): Add $(ALLOCA) to library.
+       (needed-list): Add $(ALLOCA).
+       ($(ALLOCA)): Depend upon stamp-picdir.
+
+Sun Jul 19 08:23:17 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (demangle_nested_args): Make function definition
+       static to match the prototype.
+
+Wed Jul 15 00:12:58 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Check --with-cross-host rather than
+       --with-target-subdir when deciding whether build uses a cross
+       compiler, and when deciding where to install the library.
+       * configure: Rebuild.
+
+Sun Jul 12 01:27:05 1998  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_nested_args): Return a value.
+
+Sat Jul 11 16:19:48 1998  Mark Mitchell  <mark@markmitchell.com>
+
+       * cplus-dem.c (string): Move definition before work_stuff.
+       (work_stuff): Add volatile_type, forgetting_types,
+       previous_argument, and nrepeats fields.
+       (SCOPE_STRING): New macro.
+       (demangle_template): Add `remember' parameter.  Add comment.
+       Register the `B' code type here, if remembering.  Tidy.  Fix crash
+       on NULL tmpl_argvec.  Be consistent with use of tname/trawname.
+       (demangle_nested_args): New function.
+       (internal_cplus_demangle): Handle volatile-qualified member
+       functions.
+       (mop_up): Delete the previous_argument string if present.
+       (demangle_signature): Tidy.  Handle volatile-qualified member
+       functions.  Handle back-references using the `B' code.  Use extra
+       parameter to demangle_template and SCOPE_STRING where appropriate.
+       (demangle_template_value_parm): Fix thinko; 'B' is not an integral
+       code.
+       (demangle_class): Use SCOPE_STRING.
+       (gnu_special): Pass additional argument to demangle_template.
+       Use SCOPE_STRING.
+       (demangle_qualified): Save qualified types for later
+       back-references.  Handle constructors and destructors for template
+       types correctly.
+       (do_type): Tidy.  Use SCOPE_STRING.  Pass extra argument to
+       demangle_template.  Use demangled_nested_args.  Don't remember
+       qualified types here; that's now done in demangle_qualified.
+       Similarly for templates.
+       (do_arg): Improve commment.  Handle 'n' repeat code.
+       (remember_type): Check forgetting_types.
+       (demangle_args): Deal with 'n' repeat codes.  Tidy.
+
+Thu Jul  2 16:26:24 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Only use mh-fbsd21 on *-*-freebsd2.2.[012], not on
+       *-*-freebsd2.2.*.  From Dmitrij Tejblum <tejblum@arc.hq.cti.ru>.
+
+Mon Jun 15 16:29:01 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in (setobjs): Correct quoting error in cygwin32 case.
+       From Chris Faylor <cgf@cygnus.com>.
+
+Mon Jun  1 13:47:55 1998  Jason Molenda  (crash@bugshack.cygnus.com)
+
+       * obstack.c: Update to latest FSF version.
+
+Mon Jun  1 14:17:36 1998  Mike Stump  <mrs@wrs.com>
+
+       * Makefile.in: Add a dependency on stamp-picdir for the
+       objects, so that we can do a parallel build.
+
+Sat May 30 22:17:13 1998  Mumit Khan  <khan@xraylith.wisc.edu>
+
+       * configure.in (checkfuncs): Add missing "'".
+
+Fri May 29 12:40:41 1998  Jason Molenda  (crash@bugshack.cygnus.com)
+
+       * obstack.c (_obstack_memory_used):  Elide this function if we're
+       on a system with GNU libc.
+
+Tue May 26 18:28:43 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (distclean): Remove config.log.
+
+Tue May 26 15:01:52 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (distclean): Don't remove alloca-conf.h.
+
+Fri May 22 01:38:07 1998  Hans-Peter Nilsson  <hp@axis.se>
+
+       * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767.
+
+1998-05-21  Mark Mitchell  <mmitchell@usa.net>
+
+       * cplus-dem.c (do_type): Handle volatile qualification.
+
+1998-05-21  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * configure.in: Check for unistd.h as well.
+       * configure: Rebuild.
+       * config.in: Rebuild.
+       * getpagesize.c (GNU_OUR_PAGESIZE): Use sysconf only if _SC_PAGESIZE
+       is defined in unistd.h. Reformat conditional block for easier reading.
+
+       * config.table (shared): Default to no if ${enable_shared}
+       is unset or empty; this logic is used by the toplevel
+       configure scripts, too.
+
+Sat May 16 14:01:26 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * config.table: Add line to set enable_shared in the Makefile
+       as needed.
+
+Wed May 13 14:24:38 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * cplus-dem.c (squangle_mop_up): Change return type to void.
+       (internal_cplus_demangle): Remove unused parameter `options'.
+       All callers changed.
+       (cplus_demangle_opname): Remove function wide variable `int i' and
+       replace with `size_t i' at each location where it is used.
+       (cplus_mangle_opname): change type of `i' from int to size_t.
+
+Wed May 13 13:39:38 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * alloca-conf.h: Include config.h.  Check HAVE_ALLOCA_H rather
+       than sparc or sun.
+       * Makefile.in (argv.o): Depend upon config.h and alloca-conf.h.
+
+Fri May  8 00:23:51 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Set libiberty_topdir correctly when srcdir is
+       "." and with_target_subdir is not set.
+       * configure: Rebuild.
+
+Thu May  7 13:01:44 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Add *-*-mingw32* case.
+       * configure: Rebuild.
+
+Wed May  6 11:33:51 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Never use a PIC file for *-*-cygwin32*.
+
+       * Makefile.in (config.status): Depend upon config.table.
+
+       * configure.in: On a cygwin32 host, always compile random, and
+       don't test for sys_siglist, strsignal, or psignal.
+       * configure: Rebuild.
+
+       * clock.c: Check HAVE_SYS_PARAM_H rather than NO_SYS_PARAM_H.
+       * getcwd.c: Likewise.
+       * getpagesize.c: Likewise.
+       * getruntime.c: Likewise.
+
+Tue May  5 18:08:32 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       Use autoconf tests rather than the old dummy.c test:
+       * configure.in: Add AC_ARG_WITH calls for --with-target-subdir and
+       --with-newlib.  Add AC_CONFIG_HEADER.  Use AC_REPLACE_FUNCS for
+       most functions.  Add special cases to handle newlib and VxWorks.
+       Remove target_makefile_frag.  Create stamp-h in AC_OUTPUT if
+       CONFIG_HEADERS is set.  Only call config-ml.in in AC_OUTPUT if
+       CONFIG_FILES is set; set ac_file before calling it.
+       * config.table (arm-*-riscix*, *-*-cygwin32): Remove.
+       (*-*-hpux*, *-*-hiux*, *-*-irix4*, *-*-solaris2*): Remove.
+       (*-*-sysv4*, *-*-go32, *-*-vxworks5*, *-*-vxworks): Remove
+       (i[3456]-*-mingw32*): Remove.
+       * Makefile.in (ERRORS_CC, CONFIG_H, NEEDED_LIST): Remove.
+       (LIBOBJS): New variable.
+       (HOST_OFILES, DO_ALSO, STAGESTUFF): Remove.
+       (all): Depend upon needed-list.  Don't check RULE1.
+       (@target_makefile_frag@): Remove.
+       (COMPILE.c): Include @DEFS@.
+       (HFILES): Add alloca-conf.h.
+       (REQUIRED_OFILES): Remove basename.o.
+       ($(TARGETLIB)): New target.
+       (stamp-needed, lneeded-list, needed.awk, stamp-config): Remove.
+       (lconfig.h, needed2.awk, dummy.o, errors): Remove.
+       (needed-list, config.h): Rewrite.
+       (RULE1, $(RULE1), RULE2, $(RULE2)): Remove.
+       (.always.): Remove.
+       (Makefile): Set CONFIG_FILES and CONFIG_HEADERS.
+       (stamp-h): New target.
+       (atexit.o, clock.o, getcwd.o, getpagesize.o): New targets.
+       (basename.o): Don't depend upon config.h.
+       (getruntime.o): Depend upon config.h.
+       * atexit.c: Include config.h.  Check HAVE_ON_EXIT rather than
+       NEED_on_exit.
+       * basename.c: Don't include config.h.  Don't check NEED_basename.
+       * clock.c: Include config.h.
+       * getcwd.c: Likewise.
+       * getpagesize.c: Likewise.
+       * getruntime.c: Likewise.  Fix checks which set HAVE_GETRUSAGE and
+       HAVE_TIMES.
+       * strerror.c: Change uses of NEED_sys_errlist to
+       HAVE_SYS_ERRLIST.  Likewise for NEED_strerror and HAVE_STRERROR.
+       * strsignal.c: Likewise for NEED_sys_siglist and HAVE_SYS_SIGLIST,
+       and for NEED_strsignal and HAVE_STRSIGNAL and for NEED_psignal and
+       HAVE_PSIGNAL.
+       * acconfig.h: New file.
+       * dummy.c: Remove.
+       * functions.def: Remove.
+       * config/mh-cxux7 (HDEFINES): Remove -DHAVE_SYSCONF.
+       * config/mh-windows (HDEFINES): Remove.
+       * config/mh-cygwin32: Remove.
+       * config/mh-go32: Remove.
+       * config/mh-irix4: Remove.
+       * config/mh-riscix: Remove.
+       * config/mh-sysv4: Remove.
+       * config/mt-mingw32: Remove.
+       * config/mt-vxworks5: Remove.
+       * config.in: New file, generated using autoheader.
+       * configure: Rebuild.
+
+Mon May  4 13:00:28 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Rewrite to use autoconf.
+       * configure: Generate using autoconf.
+       * config/mh-a68bsd: Remove.
+       * config/mh-apollo68: Remove.
+       * config/mh-hpbsd: Remove.
+       * config/mh-ncr3000: Remove.
+       * config/mh-sysv: Remove.
+       * config/mh-aix (RANLIB, INSTALL): Don't define.
+       * config/mh-cxux7 (RANLIB, INSTALL): Don't define.
+       * config/mh-irix4 (CC, RANLIB, INSTALL): Don't define.
+       * config/mh-sysv4 (RANLIB, INSTALL): Don't define.
+       * config.table: Change config_shell to CONFIG_SHELL, and use
+       libiberty_topdir to find move-if-change.
+       (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove.
+       (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove.
+       (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove.
+       * Makefile.in (srcdir): Set to @srcdir@.
+       (VPATH): Likewise.
+       (prefix, exec_prefix, bindir, libdir): Set to autoconf variables.
+       (SHELL, INSTALL, INSTALL_PROGRAM, INSTALL_DATA): Likewise.
+       (CC, CFLAGS, RANLIB)): Likewise.
+       (datadir, man*dir, infodir, includedir, MAKEINFO): Remove.
+       (target_makefile_frag, host_makefile_frag): Add substitutions.
+       (INSTALL_DEST): Set to @INSTALL_DEST@.
+       (Makefile): Depend upon config.status.  Don't depend upon
+       $(host_makefile_frag) or $(target_makefile_frag).
+       (config.status): New target.
+
+Sun May  3 17:58:49 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/mt-sunos4: Remove.  Should be handled by --with-headers
+       and --with-libraries options at top level.
+       * config.table: Never use mt-sunos4.
+
+       * alloca-conf.h: New file, combining alloca-norm.h and
+       alloca-botch.h.
+       * alloca-norm.h: Remove.
+       * alloca-botch.h: Remove.
+       * configure.in: Set shell variables files and links to empty.
+       * config.table: Don't set shell variable files.
+       * configure.bat: Don't create alloca-conf.h.
+       * makefile.vms: Likewise.
+       * mpw-config.in: Likewise.
+       * vmsbuild.com: Likewise.
+
+Fri May  1 11:41:42 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in ($(HOST_OFILES) $(REQUIRED_OFILES)): Remove old
+       target depending upon config.h.
+       (alloca.o): Add target depending upon config.h
+       (basename.o, choose-temp.o, fnmatch.o): Likewise.
+       (getopt.o, getopt1.o, pexecute.o, strerror.o): Likewise.
+       (strsignal.o, xstrerror.o): Likewise.
+
+Fri May  1 04:26:25 1998  Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
+
+       * cplus-dem.c (cplus_demangle_opname):  Initialize work.
+
+Mon Apr 27 15:53:30 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
+
+       * cplus-dem.c (demangle_qualified): Replace missing else.
+
+Sun Apr 26 15:38:50 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * cplus-dem.c (gnu_special): Fix off-by-one bug when checking the
+       length in the name of a virtual table.
+
+Wed Apr 22 10:53:49 EDT 1998 Andrew MacLeod  <amacleod@cygnus.com>
+
+       * cplus-dem.c (struct work stuff): Add field for B and K mangle codes.
+       (cplus_demangle_opname): Call mop_up_squangle.
+       (cplus_demangle): Initialize squangle info, then call
+       internal_cplus_demangle. (Most code moved there as well)
+       (internal_cplus_demangle): New function, performs most of what use
+       to be done in cplus_demangle, but is only called with this file.
+       (squangle_mop_up): New function to clean up B and K code data.
+       (mop_up): set pointers to NULL after freeing.
+       (demangle_signature, demangle_template, demangle_class): Add
+       switch elements to handle K and B codes.
+       (demangle_prefix, gnu_special, demangle_qualified): Add
+       code to handle K and B codes.
+       (do_type, demangle_fund_type): Handle B and K codes.
+       (remember_Ktype): New function to store K info.
+       (register_Btype, remember_Btype): New functions for B codes.
+       (forget_B_and_K_types): New function to destroy B and K info.
+
+Fri Apr 10 01:49:10 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * COPYING.LIB, choose-temp.c, cplus-dem.c: Sync with egcs & gcc.
+
+Thu Mar  5 09:23:28 1998  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * config.table: Make locating frag files failsafe even for the
+       special case if configuring and building in srcdir.
+
+Mon Feb 23 14:33:15 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * choose-temp.c: Fix handling of sys/file.h to work in libiberty.
+
+Sun Feb 22 18:03:23 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * choose-temp.c: Sync with copy in gcc.
+
+Thu Feb 12 16:29:49 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * getopt.c: Update to latest FSF version.
+       * getopt1.c: Likewise.
+
+Tue Feb 10 16:58:33 1998  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * cplus-dem.c (gnu_special): Don't get confused by .<digits>
+       strings that are not actually lengths.
+
+Fri Feb  6 01:35:17 1998  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * Makefile.in (FLAGS_TO_PASS): Don't pass PICFLAG.
+       (.c.o): Check value of enable_shared, not PICFLAG.
+       (stamp-picdir): Dito.
+
+Thu Feb  5 18:48:56 1998  Geoffrey Noer  <noer@cygnus.com>
+
+       * config/mh-cygwin32: remove vasprintf.o from EXTRA_OFILES
+       since it gets built automatically
+
+Sun Feb  1 02:52:32 1998  Mike Stump  <mrs@wrs.com>
+
+       * config.table (vxworks configs): Default to VxWorks 5.x, as that is
+       the currently shipping OS.
+
+Tue Jan 27 16:08:20 1998  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vmsbuild.com [REQUIRE_OFILES]: Synchronized with Makefile.in:
+       Add fnmatch.o and objalloc.o; remove vasprintf.o.
+       [config.h]: Define NEED_strsignal.
+
+Mon Jan 19 12:20:01 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * functions.def: Correct argument types for strerror and
+       strsignal.  Reported by Alex Gutman <agutman@emc.com>.
+
+Sun Jan 18 15:57:28 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>
+
+       * vasprintf.c (int_vasprintf): Increase buffer size for float/double
+       values.
+
+Sat Jan 17 22:28:38 1998  Mumit Khan  <khan@xraylith.wisc.edu>
+                         J.J. VanderHeijden <J.J.vanderHeijden@student.utwente.nl>
+
+       Add mingw32 support.
+       * pexecute.c (pexecute): New function for mingw32. Supports pipes.
+       (pwait): New function for mingw32.
+
+       * config.table (i[3456]86-*-mingw32*): Support for i386-mingw32.
+       * config/mt-mingw32: New file.
+       * xmalloc.c (first_break): Not used for mingw32.
+       (xmalloc_set_program_name): Don't use sbrk on mingw32.
+       (xmalloc): Likewise.
+       (xrealloc): Likewise.
+
+Sat Jan 17 22:28:05 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * choose-temp.c: Sync with gcc version.
+
+Tue Jan 13 18:34:39 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (install_to_libdir, install_to_tooldir): Add MULTISUBDIR
+       to all filenames in libdir and tooldir.
+       (distclean): Do MULTICLEAN before deleting Makefile.
+       (stamp-needed, stamp-config): Add MULTISRCTOP to
+       pathname for move-if-change.
+
+Thu Dec  4 17:25:19 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * strsignal.c (sys_nsig): Try NSIG and _NSIG.
+
+Wed Nov 19 13:37:06 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * alloca-norm.h (alloca, GCC case): Don't redefine alloca if it
+       was already defined previously.
+
+Mon Nov 10 12:48:03 1997  Philippe De Muyter  <phdm@macqel.be>
+
+       * Makefile.in (INSTALL): Use ../install-sh, not install.
+
+Tue Oct 28 23:41:15 1997  Judy Goldberg  <jodyg@idt.net>
+
+       * Makefile.in (CFILES): Add pexecute.c.
+
+Wed Oct 15 19:13:48 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * asprintf.c: Consistently use either stdarg or varargs.
+
+Tue Oct 14 12:01:00 1997  Mark Mitchell  <mmitchell@usa.net>
+
+       * cplus-dem.c (demangle_signature): Don't look for return types on
+       constructors.  Handle member template constructors.
+
+Fri Oct  3 17:53:30 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * README: Fix configuration instructions.
+
+Mon Sep 29 12:28:41 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * pexecute.c: Update to current version from /gd/gnu/lib:
+
+       Mon Sep 29 12:27:59 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * pexecute.c: Use spawn if __CYGWIN32__.
+
+       1997-08-08  Paul Eggert  <eggert@twinsun.com>
+
+       * pexecute.c: Include "config.h" first, as per autoconf manual.
+
+       Fri Jun 27 15:20:29 1997  Scott Christley <scottc@net-community.com>
+
+       * pexecute.c (fix_argv): New function.
+       (pexecute): Win32 but not Cygwin32 needs its arguments fixed.
+       Add underscore to cwait function call.
+
+Sun Sep 28 12:00:52 1997  Mark Mitchell  <mmitchell@usa.net>
+
+       * cplus-dem.c (demangle_template): Add new parameter.  Handle new
+       template-function mangling.
+       (consume_count_with_underscores): New function.
+       (demangle_signature): Handle new name-mangling scheme.
+
+Wed Sep 24 00:31:59 1997  Felix Lee  <flee@yin.cygnus.com>
+
+       * asprintf.c: stdarg.h when ALMOST_STDC
+       * config/mh-windows (EXTRA_OFILES): add asprintf.o and
+       strncasecmp.o.
+
+Thu Aug 28 14:27:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * vasprintf.c (vasprintf): Allow for _BSD_VA_LIST_.
+
+       * config.table: Add case for FreeBSD 2.1 and 2.2, needs mh-fbsd21.
+
+       * config/mh-fbsd21 (EXTRA_OFILES): Force vasprintf.o
+
+Wed Sep 10 12:43:10 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".
+
+Fri Sep  5 16:34:42 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * asprintf.c (asprintf): New file.
+       * Makefile.in (CFILES): Add asprintf.c
+       * functions.def: Ditto.
+
+Thu Aug 28 18:53:34 1997  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * argv.c (dupargv): New function, duplicate an argument vector.
+
+Tue Aug 19 20:28:45 1997  Geoffrey Noer  <noer@cygnus.com>
+
+       * config/mh-cygwin32: also build random.o
+
+Tue Aug 19 17:10:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c: Add 'extern' to prepends_underscore.
+
+Wed Jul 30 11:42:19 1997  Per Bothner  <bothner@cygnus.com>
+
+       * cplus-dem.c: Various changes to produce Java output when passed
+       DMGL_JAVA.  Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
+       (main): Support --java and -j flags to set DMGL_JAVA.
+
+Tue Jul 22 19:05:23 1997  Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>
+
+       * config/mh-go32 (CC, AR, RANLIB): Don't define.
+
+Tue Jul 22 17:49:54 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (REQUIRED_OFILES): Add pexecute.o.
+       (pexecute.o): New target.
+
+       * Makefile.in (stamp-needed): New target, replacing needed-list.
+       (needed-list): Just depend upon stamp-needed.
+       (stamp-config): New target, replacing config.h.
+       (config.h): Just depend upon stamp-config.
+       (mostlyclean): Remove stamp-*.
+
+Thu Jun 12 11:00:18 1997  Angela Marie Thomas (angela@cygnus.com)
+
+       * Makefile.in (FLAGS_TO_PASS): pass INSTALL, INSTALL_PROGRAM and
+       INSTALL_DATA for multilibbed installs
+
+Tue Jun  3 13:21:05 1997  Doug Evans  <dje@canuck.cygnus.com>
+
+       Tue Dec 10 09:44:57 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * choose-temp.c (choose_temp_base): Don't dump core if TMPDIR is empty.
+
+       * choose-temp.c (try): Insist that temp dir be searchable.
+
+       Wed Oct 23 17:36:39 1996  Doug Rupp  (rupp@gnat.com)
+
+       * choose-temp.c (choose_temp_base): On VMS, use proper syntax
+       for current directory.
+
+       Sat Feb 15 19:03:48 1997  Geoffrey Noer  (noer@cygnus.com)
+
+       * pexecute.c: Remove special cases for cygwin32.
+       (pwait): Remove local definition of `pid'.
+
+       Tue Nov 12 18:26:15 1996  Doug Rupp  (rupp@gnat.com)
+
+       * pexecute.c (vfork): Supply new definition for VMS.
+       (pwait): Use waitpid instead of wait for VMS.
+
+Tue May 20 14:02:20 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cplus-dem.c (do_type): Handle `J'.
+       (demangle_fund_type): Print "complex" for it.
+
+Wed Apr 30 12:15:45 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * configure.in: Don't turn on multilib here.
+
+Mon Apr 28 19:04:31 1997  Michael Snyder  <msnyder@cleaver.cygnus.com>
+
+       * obstack.c: move _obstack_memory_used outside of ifdef.  Cannot be
+       elided; needed by gdb and not present in libc.
+
+Thu Apr 24 19:33:47 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (clean): Remove tmpmulti.out.
+
+Tue Apr 22 10:25:15 1997  Fred Fish  <fnf@cygnus.com>
+
+       * floatformat.c (floatformat_ieee_double_littlebyte_bigword):
+       Add new floatformat, mainly for ARM doubles.
+
+Mon Apr 14 12:11:16 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Use ${config_shell} with ${moveifchange}.  From
+       Thomas Graichen <graichen@rzpd.de>.
+
+Fri Apr  4 03:09:24 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * configure.in: Enable multilibing by default.
+       Update multilib template to read config-ml.in.
+
+Tue Apr  1 16:26:39 1997  Klaus Kaempf  <kkaempf@progis.de>
+
+       * makefile.vms: Add objalloc.
+
+Mon Mar 31 23:57:51 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+       * cplus-dem.c (demangle_it): Add prototype declaration.
+       (usage, fatal): Likewise.
+
+       * xexit.c (_xexit_cleanup): Add prototype.
+
+       * strerror.c (init_error_tables): Declare.
+
+Fri Mar 28 11:43:20 1997  H.J. Lu  <hjl@lucon.org>
+
+       * functions.def: Add DEF of vasprintf, and DEFFUNC of strsignal.
+       * strsignal.c: Only define strsignal if NEED_strsignal.
+       * Makefile.in (REQUIRED_OFILES): Remove vasprintf.o.
+       * configure.in: Add NEED_strsignal to xconfig.h.  Add vasprintf.o
+       to xneeded-list.
+       * config/mh-cygwin32 (HDEFINES): Add -DNEED_strsignal.
+       (EXTRA_OFILES): Define to vasprintf.o.
+       * config/mh-windows (HDEFINES): Add -DNEED_strsignal.
+       (EXTRA_OFILES): Add vasprintf.o.
+       * config/mt-vxworks5 (vxconfig.h): Define NEED_strsignal.
+       (vxneeded-list): Add vasprintf.o.
+
+Thu Mar 20 17:02:09 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * objalloc.c: Include <stdio.h>.
+
+Mon Mar 17 19:23:11 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * objalloc.c: New file.
+       * Makefile.in (CFILES): Add objalloc.c
+       (REQUIRED_OFILES): Add objalloc.o.
+       (objalloc.o): New target.
+
+Sat Mar 15 18:49:41 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * obstack.c: Update to current FSF version.
+
+Fri Mar 14 14:18:47 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cplus-dem.c: Add prototypes for all static functions.
+       (mystrstr): Make static.  Make arguments and result const.
+       (cplus_match): Remove; not used.
+
+Tue Mar 11 14:20:31 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cplus-dem.c (gnu_special): Call demangled_fund_type for other
+       __t* symbols.
+
+Tue Mar 11 15:41:21 1997  H.J. Lu  <hjl@lucon.org>
+
+       * spaces.c: Declare malloc and free properly.
+       * strsignal.c (init_signal_tables): Add prototype.
+       * xatexit.c (_xexit_cleanup): Add parameter declarations.
+
+Wed Feb 19 15:43:24 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * Makefile.in (lneeded-list): If alloca.o is needed, xexit.o is
+       also required because of xmalloc.o.
+
+Fri Feb 14 13:43:38 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * strsignal.c: Unconditionally redefine sys_siglist around the
+       inclusion of the system header files.
+
+Thu Feb 13 22:01:04 1997  Klaus Kaempf  <kkaempf@progis.de>
+
+       * makefile.vms: Remove 8 bit characters.  Update to latest
+       gcc release.
+
+Tue Feb  4 11:52:19 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * strsignal.c: Use NEED_sys_siglist instead of
+       LOSING_SYS_SIGLIST.
+       * config.table: Don't use mh-lynxos.
+       * config/mh-lynxos: Remove.
+
+Thu Jan 16 14:51:03 1997  Bob Manson  <manson@charmed.cygnus.com>
+
+       * cplus-dem.c: Fix indenting; make identical to the copy
+       in GCC.
+       (do_type, case 'M'): Check for a template as well as a class.
+
+Thu Dec 19 13:51:33 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * config/mt-vxworks5 (vxneeded-list): Remove sigsetmask.o, since
+       vxworks 5.[0-3] all have sigsetmask in them; the one provided by
+       libiberty is incorrect, as well.
+
+Mon Dec  2 15:03:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * alloca.c (alloca): When compiled with an ANSI/ISO compiler,
+       alloca takes a size_t argument, not just unsigned.
+
+Mon Nov 18 15:42:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c: Note that this file also lives in GCC.
+
+Mon Nov 18 15:19:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * alloca.c: Remove include of libiberty.h for hpux.
+       * argv.c:  Replace defs from libiberty.h.
+       * spaces.c: Put back externs from removed from libiberty.h.
+       * vasprintf.c: Remove include of libiberty.h for hpux.
+
+Mon Nov 18 14:08:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * cplus-dem.c: Checking in again; last checkin filed due to sticky tag.
+
+Wed Nov 13 08:22:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * cplus-dem.c: Revert last two commits due to conflicts with
+       hpux system headers.
+
+Wed Nov 13 08:22:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * alloca.c, argv.c, spaces.c, strcasecmp.c, vasprintf.c, vprintf.c:
+       Revert last commit due to conflicts with hpux system headers.
+
+Wed Nov 13 10:36:50 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * cplus-dem.c (x{m,re}alloc): Make declarations compatibile with
+       libiberty.h when compiled with a standard compiler.
+
+Tue Nov 12 16:31:00 1996  Dawn Perchik  <dawn@critters.cygnus.com>
+
+       * alloca.c: Include libiberty.h for definition of xmalloc.
+       Don't redefine NULL.
+       * argv.c: Move prototypes to libiberty.h.
+       * cplus-dem.c: Include libiberty.h for definition of xmalloc.
+       Don't redefine NULL.
+       Use casts to eliminate compiler warnings.
+       * spaces.c: Remove prototypes for malloc and free which are
+       already in libibrty.h.
+       * strcasecmp.c: Use casts to eliminate compiler warnings.
+       * vasprintf.c: Include libiberty.h for definition of malloc.
+       Don't redefine NULL.
+       * vprintf.c: Include stdarg.h if __STDC__.
+
+Fri Oct 11 15:42:12 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * config/mh-windows:  Add strcasecmp.o to EXTRA_OFILES.
+
+Fri Oct 11 11:16:31 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw.c (mpwify_filename): Rewrite to simplify, and to handle
+       upward components correctly.
+
+Tue Oct  8 08:55:34 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * config.table, config/mh-windows:  Add support for building under
+       MSVC (the Microsoft build environment).
+
+Mon Oct  7 10:50:27 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fnmatch.c: Undef const if not __STDC__.
+
+Thu Oct  3 13:46:39 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fnmatch.c: New file.
+       * Makefile.in (CFILES): Add fnmatch.c.
+       (REQUIRED_OFILES): Add fnmatch.o.
+       (fnmatch.o): New target.
+
+Wed Sep 18 14:49:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_template): Fix handling of address args.
+       (gnu_special): Handle type_info stuff.
+
+Fri Sep 13 17:52:55 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw.c (DebugPI): Make settable from the env var DEBUG_PATHNAMES.
+       (mpwify_filename): Handle "::/" case.
+
+Thu Sep 12 13:30:40 1996  Geoffrey Noer  <noer@cygnus.com>
+
+       * config/mh-cygwin32: new file (need -DNEED_basename and
+               -DNEED_sys_siglist for native NT rebuilding)
+       * config.table (*-*-cygwin32): new entry
+       * choose-temp.c: bring in sync with gcc (revert Aug 17 change)
+
+Thu Aug 29 16:48:45 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * config.table (i[345]86-*-*): Recognize i686 for pentium pro.
+
+Tue Aug 27 13:47:58 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * pexecute.c (pexecute) [MPW]: Remove old bogus code that
+       messed with arguments that included a '/', add escape chars
+       to double quotes, remove const decl from arg that Mac
+       compilers don't seem to like.
+
+Sat Aug 17 04:44:27 1996  Geoffrey Noer  <noer@cygnus.com>
+
+       * pexecute.c: Update test for win32 (&& ! cygwin32).
+       * choose-temp.c: fix WIN32 preprocessor defines
+
+Thu Aug 15 12:26:48 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-make.sed: Add @DASH_C_FLAG@ and @SEGMENT_FLAG({Default})@
+       to editing of default makefile rule.
+
+Sun Aug 11 21:03:27 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * alloca-norm.h:  Include <malloc.h> if _WIN32.
+       * argv.c:  Include non-prototyped decls for malloc and string
+       functions if ! _WIN32 or if __GNUC__.
+
+Thu Aug  8 12:42:40 1996  Klaus Kaempf  <kkaempf@progis.de>
+
+       * config.h-vms: New file.
+       * makefile.vms: Use it.
+
+Wed Aug  7 17:16:12 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * getopt.c (_getopt_internal):  If argc is 0, just return (before
+       we reference *argv and segfault).
+
+Mon Aug  5 01:29:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (distclean): Add multilib.out.
+
+Thu Jul 18 17:40:55 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * alloca-norm.h: Change #ifdef sparc to #if defined (sparc) &&
+       defined (sun).  From Andrew Gierth <ANDREWG@microlise.co.uk>.
+
+Mon Jul  1 13:40:44 1996  Ken Raeburn  <raeburn@cygnus.com>
+
+       Tue May 28 15:29:03 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vmsbuild.com (REQUIRD_OFILES): Add choose-temp.o and xstrdup.o.
+
+       Thu Jan 25 18:20:04 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vmsbuild.com: Changes to handle DEFFUNC(on_exit).
+       (do_ofiles): Allow nonexistent source file in pass 3.
+       (chk_deffunc): New routine.
+
+Tue Jun 25 19:24:43 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * pexecute.c (PEXECUTE_VERBOSE): Define.
+       (MPW pexecute): Check flags & PEXECUTE_VERBOSE instead of verbose_flag.
+
+Tue Jun 25 23:11:48 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
+
+       * Makefile.in (docdir): Removed.
+
+Tue Jun 25 23:01:07 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
+
+       * Makefile.in (oldincludedir): Removed.
+
+Tue Jun 25 22:50:07 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
+
+       * Makefile.in (datadir): Set to $(prefix)/share.
+
+Thu Jun 20 21:17:52 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cplus-dem.c (demangle_arm_pt): Reindent.  Avoid endless loop by
+       checking for errors from do_type.
+
+Tue Jun 18 14:36:19 1996  Klaus Kaempf  <kkaempf@progis.de>
+
+       * makefile.vms: New file.
+       * xmalloc.c: If VMS, include <stdlib.h> and <unixlib.h> rather
+       than declaring malloc, realloc, and sbrk.
+
+Mon Jun 10 13:17:17 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * pexecute.c: New file.
+
+Wed Jun  5 16:57:45 1996  Richard Henderson  <rth@tamu.edu>
+
+       * xmalloc.c: Declare sbrk.
+
+Sat May  4 05:08:45 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * alloca-norm.h:  Add SPARCworks cc compatible __builtin_alloca
+       declaration.
+
+Mon Apr 22 18:41:49 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * xstrerror.c: Include <stdio.h>.
+
+Sun Apr 21 11:55:12 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Makefile.in (CFILES): Add atexit.c.
+
+Sun Apr 21 09:50:09 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
+
+Wed Apr 17 11:17:55 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * choose-temp.c: Don't #include sys/file.h ifdef NO_SYS_FILE_H.
+       #include <stdio.h>
+       * config/mt-vxworks5 (HDEFINES): Define NO_SYS_FILE_H.
+
+Tue Apr 16 11:27:16 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
+       Reverts Feb 8, 1995 change.
+
+Mon Apr 15 12:53:26 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * choose-temp.c: New file.
+       * Makefile.in (CFILES): Add choose-temp.c.
+       (REQUIRED_OFILES): Add choose-temp.o.
+
+Sat Apr 13 14:19:30 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * floatformat.c (floatformat_to_double):  Don't bias exponent when
+       handling zero's, denorms or NaNs.
+
+Thu Apr 11 13:36:56 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * floatformat.c (floatformat_to_double):  Fix bugs with handling
+       numbers with fractions < 32 bits.
+
+Mon Apr  8 14:48:34 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Permit --enable-shared to specify a list of
+       directories.
+
+Tue Mar 19 22:02:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_template): Fix for non-mangled pointer
+       arguments.
+
+Fri Mar  8 17:24:18 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: If srcdir is `.' and with_target_subdir is not
+       `.', then set MULTISRCTOP before calling config-ml.in.
+
+Thu Mar  7 13:37:10 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw.c (mpw_open): Add debugging output option.
+
+Wed Mar  6 17:36:03 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_template): Fix for address-of-extern arguments.
+
+Tue Feb 27 12:00:50 1996  Raymond Jou  <rjou@mexican.cygnus.com>
+
+       * mpw.c (mpwify_filename): Change 6 to 5 in
+       strncmp (unixname, "/tmp/", 5).
+
+Tue Feb 20 10:55:53 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cplus-dem.c (demangle_template): Initialize is_bool.  Correctly
+       handle 0 as a pointer value parameter.
+
+Mon Feb  5 16:41:44 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (all): Depend upon required-list.
+       (required-list): New target.
+       (clean): Remove required-list.
+
+Wed Jan 31 10:19:41 1996  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * win32.c: Deleted.
+       * config.table (i386-*-win32): Deleted.
+       * config/mh-i386win32: Deleted.
+
+Thu Jan 18 11:34:17 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cplus-dem.c (cplus_demangle_opname): Change opname parameter to
+       const char *.
+       (cplus_mangle_opname): Change return type and opname parameter to
+       const char *.  Don't cast return value.
+
+Tue Jan 16 12:13:11 1996  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw.c: Include Timer.h, in order to get m68k Microseconds trap
+       definition.
+
+Wed Jan  3 13:15:04 1996  Fred Fish  <fnf@cygnus.com>
+
+       * obstack.c: Update copyright to 1996.
+       (_obstack_memory_used): Define new function.  Called via
+       obstack_memory_used macro.
+
+Thu Dec 28 11:39:40 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * xstrdup.c: New file.
+       * Makefile.in (CFILES): Add xstrdup.c.
+       (REQUIRED_OFILES): Add xstrdup.o.
+       (xstrdup.o): New target.
+
+Mon Dec 11 18:18:52 1995  Mike Stump  <mrs@cygnus.com>
+
+       * atexit.c: New stub to provide atexit on systems that have
+       on_exit, like SunOS 4.1.x systems.
+       * functions.def (on_exit, atexit): Ditto.
+
+Mon Dec 11 15:42:14 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw.c (mpw_abort): Remove decl.
+       (mpw_access): Move debugging printf.
+
+Sat Dec  2 01:25:23 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Consistently use ${host} rather than ${xhost} or
+       ${target}.
+       * configure.in: Don't bother to set ${xhost} before calling
+       config.table.
+
+Tue Nov 28 14:16:57 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * Makefile.in (.c.o): Use test instead of the left bracket, to
+       avoid problems with some versions of make.
+
+Tue Nov 28 11:45:17 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-make.sed: Fix INCDIR edit to work with Nov 14 change.
+
+Tue Nov 21 11:26:34 1995  Fred Fish  <fnf@rtl.cygnus.com>
+
+       * config/mh-hpux: Remove.  It was only used to define EXTRA_OFILES,
+       which was set to just alloca.o, which is now automatically marked
+       as needed by the autoconfiguration process.
+
+Tue Nov 21 14:15:06 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config.table: Check ${with_cross_host} rather than comparing
+       ${host} and ${target}.
+
+Thu Nov 16 14:34:42 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: If with_target_subdir is empty, set xhost to
+       ${host} rather than ${target} before calling config.table.
+
+Tue Nov 14 01:38:30 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Makefile.in (MULTITOP): Deleted.
+       (MULTISRCTOP, MULTIBUILDTOP): New.
+       (FLAGS_TO_PASS): Delete INCDIR.
+       (INCDIR): Add $(MULTISRCTOP).
+       (install_to_libdir): Add $(MULTISUBDIR).  Call $(MULTIDO).
+       * configure.in: Delete call to cfg-ml-com.in.  Call config-ml.in
+       instead of cfg-ml-pos.in.
+       (cross-compile check): Change to test for with_target_subdir.
+       (EXTRA_LINKS): Delete.
+
+Sun Nov 12 12:13:04 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-make.sed: Add getpagesize.c.o to needed-list.
+       * mpw.c [USE_MW_HEADERS]: Conditionalize compiling of
+       functions that are supplied by Metrowerks libraries.
+       (fstat): Clean up descriptor->pointer conversion code.
+       (InstallConsole, etc): Empty definitions, for when linking
+       with SIOUX.
+
+Sun Nov  5 19:25:27 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * Makefile.in (FLAGS_TO_PASS):  Also pass PICFLAGS.
+       (.c.o):  Stylistic change.
+
+Thu Nov  2 12:06:29 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * strtol.c, strtoul.c: Don't include <stdlib.h>.  From
+       phdm@info.ucl.ac.be (Philippe De Muyter).
+
+Wed Nov  1 11:59:36 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure.in: Correct sed call.
+
+Mon Oct 30 13:03:45 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * configure.in:  Clean up / simplify for native.
+
+       * configure.in:  Merge in stuff from ../xiberty/configure.in.
+       * Makefile.in (CC):  Add definition (so it can be overrridden
+       by ../configure).
+
+Tue Oct 24 17:57:27 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-make.sed: Leave strerror.c.o in standard list of functions.
+       * mpw.c (R_OK, ENOENT, EACCESS, ENOSYS): Remove.
+       (link): Remove useless definition with error return.
+       (last_microseconds, warn_if_spin_delay, record_for_spin_delay):
+       Use UnsignedWide type for microsecond counts.
+
+Thu Oct 19 10:52:07 1995  Michael Meissner  <meissner@wogglebug.tiac.net>
+
+       * memcmp.c (memcmp): Argument types are const void *, not void
+       *const.
+
+       * strncasecmp.c (strncasecmp): Include ansidecl.h/stdarg.h, not
+       sys/types.h.
+       * strcasecmp.c (strcasecmp): Ditto.
+
+Tue Oct 10 11:03:24 1995  Fred Fish  <fnf@cygnus.com>
+
+       * Makefile.in (BISON):  Remove macro.
+
+Tue Sep 26 15:06:46 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * Makefile.in (HFILES): Add default empty definition.
+       * mpw-config.in (config.h): Only update if changed.
+       * mpw-make.in: Remove.
+       * mpw-make.sed: New file, edits Makefile.in into MPW makefile.
+       * mpw.c: Remove semi-clone of strerror code.
+       (sys_nerr, sys_errlist): Define here.
+       (Microseconds): Only define as A-line trap if m68k Mac.
+
+Wed Sep 20 12:53:32 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (maintainer-clean): New synonym for distclean.
+
+Mon Aug 28 19:47:52 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * config.table:  For host, generalize rs6000-ibm-aix*
+       to *-ibm-aix* so we also include powerpc.
+
+Tue Aug 22 03:18:05 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
+
+       Fri Jun 16 18:35:40 1995  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * xstrerror.c: New file.
+       * Makefile.in, vmsbuild.com: Compile it.
+
+Mon Jul 31 12:16:32 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+       * config.table (i386-*-win32): New.
+
+Fri Jul 21 11:35:52 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Makefile.in (MULTITOP): New variable.
+       (MULTIDIRS, MULTISUBDIR, MULTIDO, MULTICLEAN): Likewise.
+       (all): Add multilib support.
+       (install_to_tooldir, *clean): Likewise.
+
+Mon Jul 10 11:47:27 1995  Ken Raeburn  <raeburn@cygnus.com>
+
+       * makefile.dos (OBJS): Add hex.o.  From DJ Delorie.
+
+Fri Jun 30 17:28:59 1995  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * vmsbuild.com:  create "new-lib.olb", build libiberty under that
+       name, and then make it become "liberty.olb" when done, so that an
+       incomplete build attempt never leaves behind something which looks
+       like a complete library.
+
+Thu Jun 29 00:22:02 1995  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * config/mh-i386pe: New file for PE hosts.
+       * config.table: Understand PE hosts.
+
+Wed Jun 28 19:13:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cplus-dem.c: Update from gcc.
+
+       * argv.c, dummy.c: If __STDC__, #include "alloca-conf.h" after
+       <stddef.h>.
+       * alloca-norm.h: If __STDC__, declare alloca with its parameter.
+
+Thu Jun 22 18:57:47 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-make.in (ALL_CFLAGS): Define NEED_basename.
+       * mpw.c: Only test DebugPI once whenever printing debug info.
+       (mpwify_filename): If filename is /tmp/foo, change it into :_foo,
+       also fix to not write on input filename buffer.
+       (mpw_access): Use stat() instead of open(), works for directories
+       as well as files.
+
+Mon Jun 19 00:33:22 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Makefile.in: Massage broken shells that require 'else true'.
+
+Sat Jun 17 23:21:58 1995  Fred Fish  <fnf@cygnus.com>
+
+       * alloca-norm.h: Declare alloca as type "PTR" to match functions.def.
+       Declare __builtin_alloca in the sparc case, as argv.c did.
+       * argv.c: Replace inline version of alloca-norm.h at start of file with
+       a #include of alloca-conf.h.  Precede it with an include of ansidecl.h
+       because alloca-norm.h needs to declare alloca as "PTR".
+
+Mon Jun 12 14:24:26 1995  Steve Chamberlain  <sac@slash.cygnus.com>
+
+       * win32.c: New file.
+
+Fri Jun  9 15:16:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * dummy.c: #include "alloca-conf.h".
+
+Wed Jun  7 11:46:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Makefile.in (mostlyclean): Remove stamp-picdir.
+       (clean): Don't.
+
+Mon Jun  5 18:46:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * config.table (frags): Use toplevel pic frags.
+
+       * Makefile.in (PICFLAG): New macro.
+       (all): Depend on stamp-picdir.
+       (needed-list): Ditto.
+       (.c.o): Also build pic object.
+       (stamp-picdir): New rule.
+       (mostlyclean): Remove pic.
+       (clean): Remove stamp-picdir.
+
+Fri Mar 24 16:55:48 1995  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * vmsbuild.com (config.h): Add `#define NEED_basename'.
+
+Tue May 23 10:12:46 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * clock.c, getopt.c, strtod.c, vsprintf.c:  Change from using LGPL
+       to libio-style copyright.
+       * getpagesize.c:  Remove FSF copyright.
+
+Sat May 20 12:30:23 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
+
+       Added improved VMS support from Pat Rankin:
+
+       Fri Mar 17 18:40:36 1995  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * vmsbuild.com:  new file.
+
+       * getpagesize.c (getpagesize):  implement for VMS;
+       * strerror.c (strerror, strerrno, strtoerrno):  add rudimentary
+       support for EVMSERR.
+
+Thu May 18 17:01:42 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>
+
+       Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * floatformat.c (floatformat_arm_ext): Define.
+
+Tue May 16 13:30:59 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * basename.c, bcmp.c, getcwd.c, insque.c, rename.c, sigsetmask.c,
+       strerror.c, strsignal.c:  Remove FSF copyright.
+       * sigsetmask.c: #include <sys/types.h> - seems to be needed by ISC.
+
+Mon May 15 19:53:17 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * bcopy.c, bzero.c, memcmp.c, memcpy.c, memset.c, strchr.c,
+       strrchr.c, strstr.c, vfork.c:  Remove FSF Copyright, because this
+       might contaminate libstdc++ with the LGPL.  (OK'd by RMS 11 Oct 94.)
+       * strchr.c, strrchr.c:  Add cast to suppress const warning.
+
+Thu May  4 14:36:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cplus-dem.c: Use const instead of CONST.  Don't include
+       ansidecl.h directly.
+
+Wed Apr 19 01:30:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cplus-dem.c: Don't include libiberty.h.  Do declare xmalloc and
+       xrealloc.
+       (-DMAIN): Don't rely on an externally-defined version number;
+       instead, require the version number to be defined as a
+       preprocessor macro.  Handle the RS/6000 leading dot.  Define
+       xmalloc, xrealloc and fatal.  Don't strip a leading underscore
+       if we couldn't demangle the word.
+
+Tue Apr  4 13:03:51 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       (Old mpw.c change descriptions retained for informational value.)
+       * mpw.c (warning_threshold): Default to .4 sec.
+       (overflow_count, current_progress): New globals.
+       (warn_if_spin_delay): Include current progress type,
+       such as program name, in message.
+       (mpw_start_progress): Set current_progress variable from arg.
+       (mpw_end_progress): Report spin delays by power-of-two-size
+       buckets instead of constant-size buckets.
+
+       * mpw.c: Clean up formatting, types, returns, etc.
+       (ENOSYS): Define.
+       (mpw_fread, mpw_fwrite): Define.
+       (sleep): Define correctly.
+
+       * mpw.c: New code to implement cursor spinning support.
+       (umask): New function.
+       (mpw_fopen, mpw_fseek, stat, fstat): Call PROGRESS.
+
+       * mpw.c (mpw_basename, mpw_mixed_basename): New functions, find
+       basenames for MPW and MPW/Unix filenames.
+       (mpw_special_init): New function, calls Macsbug if desired.
+
+       * mpw.c: Add GPL notice.
+       (mpwify_filename): Add more transformations.
+       (mpw_fopen): Call mpwify_filename on file names.
+       (rename): Remove.
+       (chdir, getcwd): Add simple definitions.
+
+       * mpw.c: Random cleanups, remove unused code bits.
+       Added copy of strerror.c for gcc's use.
+       (stat, fstat, _stat): New versions based on Guido van Rossum code.
+
+       * mpw.c (mpw_fseek): Make it work correctly when doing SEEK_CUR.
+
+       * mpw.c (stat): Remove hack definition, get from sys/stat.h.
+       (fork, vfork, etc): Print error messages if called.
+       (getrusage, sbrk, environ, isatty, link, utime, mkdir, rmdir,
+       rename, chown): Define.
+
+       * mpw-config.in: New file, MPW version of configure.in.
+       * mpw-make.in: New file, MPW version of Makefile.in.
+       * mpw.c: New file, MPW compatibility routines.
+
+Fri Mar 24 14:10:30 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * basename.c: Include config.h before checking for NEED_basename.
+
+Thu Mar 23 19:09:54 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * functions.def: Add DEFFUNC for basename.
+
+       * basename.c: Only define basename if NEED_basename.
+
+Thu Mar 16 13:36:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * config.table: Fix --enable-shared logic for native builds.
+
+Mon Mar 13 11:05:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cplus-dem.c (demangle_template): Demangle bool literals properly.
+
+Mon Mar  6 23:57:28 1995  Stu Grossman  (grossman@cygnus.com)
+
+       * strtol.c strtoul.c:  Replace these with less buggy versions from
+       NetBSD.  (strtoul in particular couldn't handle base 16.)
+
+Wed Mar  1 15:59:01 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/mt-vxworks5 (HDEFINES): Define NO_SYS_PARAM_H.
+
+       * clock.c: If NO_SYS_PARAM_H is defined, don't include
+       <sys/param.h>.
+       * getcwd.c, getpagesize.c, getruntime.c: Likewise.
+
+Fri Feb 17 15:40:55 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * getruntime.c (get_run_time): Don't assume that CLOCKS_PER_SEC is
+       a number; ANSI appears to permit any expression, including a
+       function call.
+
+       * config.table (*-*-vxworks5*): Use mt-vxworks5 when configuring
+       xiberty.
+       * config/mt-vxworks5: New file.
+
+Thu Feb  9 14:19:45 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * basename.c (basename): Change argument to be const.
+
+Wed Feb  8 18:06:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Makefile.in (lneeded-list): Don't worry about xmalloc.
+
+Sun Jan 15 00:40:36 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+       * Makefile.in (distclean): Delete xhost-mkfrag.
+
+Thu Jan 12 16:54:18 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
+
+Wed Jan 11 22:39:56 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>
+
+       * hex.c: New file.
+       * Makefile.in (REQUIRED_OFILES, CFILES): List it.
+       (hex.o): Add dependencies.
+
+       * cplus-dem.c (demangle_prefix): For GNU style constructor and
+       destructor names, try demangling the remainder of the string.
+
+Wed Dec 28 00:49:15 1994  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>
+
+       * vasprintf.c (int_vasprintf): New static function.
+       (vasprintf): Use int_vasprintf.  Removes assumption that va_list
+       is assignment compatible.
+
+Sat Nov  5 19:29:12 1994  Jason Merrill  (jason@phydeaux.cygnus.com)
+
+       * Makefile.in (LIBCFLAGS): New variable.
+       (FLAGS_TO_PASS): Pass it.
+       (.c.o): Use it.
+
+Thu Nov  3 19:09:47 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>
+
+       * getopt.c, getopt1.c: Do compile these functions under Linux,
+       since many native versions are based on glibc but are buggy.
+
+Mon Oct 24 15:16:46 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * vasprintf.c:  Make 'format' arg be const, to avoid a mismatch
+       with prototype in GNU libc.  Support stdarg.h as well as varargs.h.
+
+Tue Oct 11 17:48:27 1994  Jason Merrill  (jason@phydeaux.cygnus.com)
+
+       * Makefile.in (REQUIRED_OFILES): Add vasprintf.o.
+       * functions.def: Remove vasprintf.
+
+Wed Sep 14 17:04:55 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * xmalloc.c (first_break): New static variable.
+       (xmalloc_set_program_name): Record sbrk (0) in first_break.
+       (xmalloc): If memory allocation fails, try to report how much
+       memory was allocated by the program up to this point.
+       (xrealloc): Likewise.
+
+Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+       * Makefile.in (ERRORS_CC): New variable, defaulted to $(CC).  Use it
+       when linking dummy.
+       * config.table: Add host RISCiX Makefile frag.
+       * config/mh-riscix: New file.
+
+Thu Aug 25 17:29:44 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * Makefile.in (FLAGS_TO_PASS): Define.
+       ($(RULE1)): Use $(FLAGS_TO_PASS).
+
+Wed Aug 24 17:08:47 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * vasprintf.c: Include <string.h>.
+       (vasprintf): Add casts to void for va_arg to avoid gcc warnings.
+       * xatexit.c: Declare malloc.
+
+Fri Aug 19 15:29:12 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_args): Fix a bug in previous patch (the
+       one below).
+
+Thu Aug 18 14:37:14 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle args): Handle ARM repeat encoding where
+       the type index is greater than 9.
+
+Wed Aug 17 16:13:49 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_qualified): accept optional '_' between
+       qualified name. This is baecause the template name may end with
+       numeric and can mixed up with the length of next qualified name.
+
+Wed Aug  3 05:52:14 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)
+
+       * config/mt-sunos4: Use our standard location for cross-includes
+       and cross-libs when the target is also a "host" environment (ie no
+       newlib; includes and such don't belong to us).  This is specific
+       to the Cygnus Support environment.
+
+Tue Aug  2 15:25:12 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_template): demangle as xxx<'Q'> not
+       xxx<ch=81>.
+
+Mon Aug  1 17:02:48 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (main): flush stdout to make pipe work.
+
+Sat Jul 16 12:56:32 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+       * config.table (*-*-cxux7*):  Recognize.
+       * floatformat.c (floatformat_m88110_ext) [HARRIS_FLOAT_FORMAT]:
+       Harris-specific float format.
+       * config/mh-cxux7: New file.
+
+Wed Jun 29 00:26:17 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * cplus-dem.c (demangle_template):  Make sure that the result of
+       consume_count doesn't index beyond the end of the string.
+
+Mon Jun 20 23:54:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * cplus-dem.c (gnu_special):  Handle vtable mangling of gcc-2.4.5 and
+       earlier. Improve test for new vtable mangling. Change output back
+       to `virtual table'.
+
+Mon Jun 20 11:37:30 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+       * obstack.c: Always compile this code, even if using the GNU
+       library.  Avoids problems with relatively recent binary
+       incompatibility.
+
+Thu Jun 16 17:54:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * cplus-dem.c: Include libiberty.h.
+       (xmalloc, xrealloc, free): Don't declare.
+       (strstr): Don't declare parameters.
+       (xmalloc, xrealloc): Don't define.
+       (long_options): Add no-strip-underscores.
+       (main): Call xmalloc_set_program_name.  Pass n in short options to
+       getopt_long.  Handle option 'n' to not strip underscores.
+       (usage): Mention -n and --no-strip-underscores.
+
+Sun Jun 12 01:37:09 1994  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c (demangle_template): Separate consecutive >'s with a
+       space.
+       (gnu_special): Demangle template and qualified names in a vtable name.
+
+Fri May 27 12:27:52 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       From gas-2.3 and binutils-2.4 net releases:
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * makefile.dos: [new] Makefile for dos/go32
+       * configure.bat: update for latest files
+       * msdos.c: remove some functions now in libc.a
+
+Fri May 20 18:53:32 1994  Per Bothner  (bothner@kalessin.cygnus.com)
+
+       * cplus-dem.c (gnu_special):  Recognize thunks, as well as
+       the new naming style for vtables (when -fvtable-thunks).
+
+Wed May 18 13:34:06 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * Makefile.in (XTRAFLAGS): Don't define.
+       (.c.o, dummy.o): Don't use XTRAFLAGS.
+       ($(RULE1)): Don't pass XTRAFLAGS down in recursive call.
+
+Fri May 13 16:02:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * vasprintf.c: New file.
+       * Makefile.in, functions.def: Add it.
+
+Fri May 13 16:20:28 1994  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c (demangle_fund_type): Grok bool.
+
+Fri May  6 14:44:21 1994  Steve Chamberlain  (sac@cygnus.com)
+
+       * config.table: Add go32
+       * config/mh-go32: New template.
+
+Fri May  6 11:01:59 1994  D. V. Henkel-Wallace  (gumby@rtl.cygnus.com)
+
+       * config.table, config/mt-sunos4: config for when sun4 is cross target.
+
+Mon Apr 11 00:54:33 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]:
+       Declare strlen to return int.  Don't include stddef.h.
+
+Fri Apr  1 00:38:17 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)
+
+       * getopt.c: Delete use of IN_GCC to control whether
+       stddef.h or gstddef.h is included.
+
+Thu Apr 14 14:00:56 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_signature): Fix a bug in template function
+       type numbering.
+
+Wed Apr 13 17:23:03 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_signature): Fix template function with arm
+       style argument type number, Tn.
+
+Wed Apr 13 17:11:15 1994  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c (optable): Add new[] and delete[].
+
+Fri Apr  8 11:21:42 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+       * argv.c (buildargv): Don't produce empty argument just because
+       there is trailing whitespace.
+
+Wed Apr  6 11:42:14 1994  Kung Hsu  (kung@mexican.cygnus.com)
+
+       * cplus-dem.c (demangle_template): fix 'Q' qualified name bug.
+       Handle 'p' same as 'P'.
+       * cplus-dem.c (do_type): Handle 'p' same as 'P'.
+
+Sat Mar 26 12:00:13 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * floatformat.c (get_field, put_field):  Fix off by one error in
+       little endian case.
+
+Thu Mar 24 10:40:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * floatformat.c (floatformat_from_double): Pass unsigned char *,
+       not char *, to put_field.
+
+Fri Mar 18 12:34:33 1994  Per Bothner  (bothner@kalessin.cygnus.com)
+
+       * memmove.c:  Re-wrote;  placed in public domain.
+
+Wed Mar 16 10:33:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * cplus-dem.c (demangle_prefix): If ARM demangling, don't treat
+       __Q* as a constructor.
+
+Mon Mar 14 12:26:02 1994  Ian Lance Taylor  (ian@cygnus.com)
+
+       * ieee-float.c: Removed; no longer used.
+       * Makefile.in: Changed accordingly.
+
+Mon Mar  7 12:28:17 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * floatformat.c (get_field): Removed unused local variable i.
+       (put_field): Removed unused local variable i.
+
+Sun Feb 27 21:50:11 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+       * floatformat.c: New file, intended to replace ieee-float.c.
+       * Makefile.in: Change accordingly.
+
+Thu Feb 24 11:51:12 1994  David J. Mackenzie  (djm@rtl.cygnus.com)
+
+       * getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code.
+        (_getopt_initialize): New function, broken out of _getopt_internal.
+        (_getopt_internal):
+        If long_only and the ARGV-element has the form "-f", where f is
+        a valid short option, don't consider it an abbreviated form of
+        a long option that starts with f.  Otherwise there would be no
+        way to give the -f short option.
+
+Thu Feb 10 14:44:16 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]:
+       Test just __STDC__, not emacs.
+
+Wed Feb  9 00:14:00 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]
+       [emacs] [not __STDC__]: Don't include stddef.h.  Don't declare strlen.
+
+Fri Dec 24 19:43:00 1993  Noah Friedman  (friedman@nutrimat.gnu.ai.mit.edu)
+
+       * getopt.c (_NO_PROTO): Define before config.h is included.
+
+Mon Sep 20 15:59:03 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * getopt.c, getopt1.c [emacs || CONFIG_BROKETS]: Include
+       <config.h> only under these, else "config.h".
+
+Thu Aug 12 18:16:49 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * getopt.c, getopt1.c [HAVE_CONFIG_H]: Include
+       <config.h> instead of "config.h".
+
+Sun Feb 20 17:17:01 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)
+
+       * concat.c: Check ANSI_PROTOTYPES rather than __STDC__ to decide
+       whether to use prototypes or not.
+       * strerror.c (const): Never undefine; let ansidecl.h handle it.
+       * strsignal.c (const): Likewise.
+
+Thu Feb 17 13:27:35 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * xatexit.c (_xexit_cleanup): Declare as extern; don't initialize.
+       Merging common and initialized variables need not be supported by
+       ANSI C compilers.
+       (xatexit): Initialize _xexit_cleanup if not already set.
+       * xexit.c: Comment fix.
+
+Wed Feb 16 01:15:36 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * xmalloc.c: Don't declare xexit; it's declared in libiberty.h.
+       (xrealloc): If oldmem is NULL, allocate with malloc, rather than
+       assuming that realloc works correctly.
+
+Tue Feb 15 09:26:16 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * concat.c, ieee-float.c:  Replace inclusion of <string.h>
+       with explicit function declarations, as recommended by Ian Taylor.
+
+Sat Feb 12 10:31:11 1994  David J. Mackenzie  (djm@rtl.cygnus.com)
+
+       * xmalloc.c (xmalloc, xrealloc): Use PTR and size_t throughout.
+       (malloc, realloc): Declare.
+
+Thu Feb 10 17:08:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * argv.c, basename.c: Include ansidecl.h and libiberty.h.
+       * concat.c, fdmatch.c, getruntime.c, spaces.c: Likewise.
+       * strerror.c, strsignal.c, xatexit.c, xexit.c: Likewise.
+       * xmalloc.c: Likewise.
+       * concat.c: Don't declare xmalloc.  If __STDC__, use <stdarg.h>
+       macros, not <varargs.h> macros.
+       * spaces.c (spaces): Make return type const.  Don't crash if
+       malloc returns NULL.
+       * strerror.c (struct error_info): Make name and msg fields const.
+       (error_names): Make const.
+       (strerrno): Make const.
+       (strtoerrno): Make argument const.
+       * strsignal.c (struct signal_info): Make name and msg fields
+       const.
+       (signal_names, sys_siglist): Make const.
+       (strsignal, strsigno): Make const.
+       (strtosigno): Make argument const.
+       * xatexit.c: Declare parameter types.
+       * xmalloc.c (name): Make const.
+       (xmalloc_set_program_name): Make argument const.
+       * Makefile.in (INCDIR): Define.
+       (.c.o): Use $(INCDIR).
+       (dummy.o): Likewise.
+       (argv.o, basename.o): New targets; depend on libiberty.h.
+       (concat.o, fdmatch.o, getruntime.o, spaces.o): Likewise.
+       (strerror.o, strsignal.o, xatexit.o, xexit.o): Likewise.
+       (xmalloc.o): Likewise.
+       (cplus-dem.o): New target; depend on demangle.h.
+       (getopt.o, getopt1.o): New targets; depend on getopt.h.
+       (ieee-float.o): New target; depend on ieee-float.h.
+       (obstack.o): New target; depend on obstack.h.
+
+Tue Feb  8 05:29:08 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       Handle obstack_chunk_alloc returning NULL.  This allows
+       obstacks to be used by libraries, without forcing them
+       to call exit or longjmp.
+       * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk):
+       If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it.
+       (_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not.
+
+Tue Feb  8 00:32:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * concat.c, ieee-float.c:  Include <string.h>.
+
+Sun Feb  6 21:28:46 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * xmalloc.c (xmalloc_set_program_name): New function.
+       (xmalloc, xrealloc): Include the name in the error message, if set.
+
+       * Replace atexit.c with xatexit.c.
+       * Makefile.in (CFILES), functions.def: Change references.
+
+Sat Feb  5 14:02:32 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+       * getruntime.c (get_run_time): Use getrusage or times if
+       HAVE_GETRUSAGE or HAVE_TIMES are defined.
+
+Fri Feb  4 15:49:38 1994  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * atexit.c: New file.
+       * Makefile.in (CFILES), functions.def: Add it.
+       * xexit.c: New file.
+       * Makefile.in (CFILES, REQUIRED_OFILES): Add it.
+       * xmalloc.c (xmalloc, xrealloc): Call xexit instead of exit.
+       Change request for 0 bytes into request for 1 byte.
+
+Wed Feb  2 11:36:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * xmalloc.c (xmalloc, xrealloc): Print size using %lu, and cast to
+       unsigned long, to avoid warnings.
+
+Fri Jan 28 17:49:06 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * dummy.c: Don't include time.h ever; always define clock_t as
+       "unsigned long".  Until gcc/fixincludes ensures that clock_t
+       exists, __STDC__ isn't a sufficient test.  And if clock() doesn't
+       exist, clock_t probably doesn't either.
+
+Mon Jan 24 11:52:31 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+       * clock.c, getruntime.c: New files.
+       * Makefile.in: Add to file lists.
+       * functions.def (clock): Add to list.
+       * dummy.c (time.h): Add if __STDC__.
+       (clock_t): #define as "unsigned long" if not __STDC__.
+
+Tue Jan 11 11:27:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * strtod.c: Declare atof.  From edler@jan.ultra.nyu.edu (Jan
+       Edler).
+
+Tue Dec 28 14:17:30 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * Makefile.in (errors): Use CFLAGS as well as LDFLAGS when
+       linking.
+
+Fri Dec 17 12:26:07 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c (demangle_arm_pt): New function.  Common code
+       for ARM template demangling.
+       * cplus-dem.c (demangle_class_name): Use demangle_arm_pt.
+       * cplus-dem.c (demangle_prefix): Likewise.
+
+Tue Nov 30 15:47:48 1993  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c (cplus_demangle_opname): Add CONST to please gcc.
+
+Sat Nov 27 11:05:50 1993  Fred Fish  (fnf@cygnus.com)
+
+       Merge changes from tom@basil.icce.rug.nl (Tom R.Hageman)
+       * strerror.c, strsignal.c:  As a small space optimization, don't
+       include messages when they aren't actually used.
+
+       Merge changes from takefive.co.at!joe (Josef Leherbauer)
+       * cplus-dem.c (demangle_prefix, demangle_function_name,
+       cplus_demangle_opname):  Fixes for systems where cplus_marker
+       is something other than '$'.
+
+Fri Nov 26 13:51:11 1993  Per Bothner  (bothner@kalessin.cygnus.com)
+
+       * waitpid.c:  Simple-minded approcimation to waitpid
+       using vanilla wait.
+       * functions.def, Makefile.in:  Update accordingly,
+
+Thu Nov 18 18:01:15 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c(demangle_template): fix bug template instantiation
+       with value of user defined type.
+
+Wed Nov 17 18:30:21 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c(cplus_demangle_opname): add the subject new function
+       to support unified search of operator in class.
+
+Wed Nov 10 09:47:22 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       gcc -Wall lint:
+       * strtoul.c (strtoul): use "(digit = *s) != '\0'" not just
+       "digit = *s" as condition in while loop.
+
+Tue Nov  9 15:52:22 1993  Mark Eichin  (eichin@cygnus.com)
+
+       * Makefile.in: pass SHELL to recursive make
+
+Thu Nov  4 12:09:26 1993  Per Bothner  (bothner@kalessin.cygnus.com)
+
+       * vfprintf.c, vprintf.c, vsprintf.c:  Make format arg
+       be (const char*), for ANSI (and gcc w/fixproto) consistency.
+
+Thu Nov  4 08:29:04 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * config.table: Make *-*-hiux* use mh-hpux.
+
+Fri Oct 22 07:53:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * config.table: Add * to end of all OS names.
+
+Tue Oct 19 17:12:01 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)
+
+       * Makefile.in (lneeded-list): ensure that object file names are
+         not duplicated, as multiple instances of the same object file in
+         a library causes problems on some machines
+
+Mon Oct 18 21:59:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * strcasecmp.c, strncasecmp.c: Change u_char to unsigned char.
+
+Fri Oct 15 22:17:11 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)
+
+       * strncasecmp.c: new file, implements strncasecmp
+       * strcasecmp.c: new file, implement strcasecmp
+
+       * Makefile.in (CFILES): list these two new source files
+
+       * functions.def: add strcasecmp and strncasecmp entries
+
+Fri Oct 15 14:53:05 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * strtoul.c (strtoul), strtol.c (strtol): Handle overflow
+       according to ANSI C.
+
+Thu Oct 14 16:34:19 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c: add support of ARM global constructor/destructor,
+       and 'G' for passing record or union in parameter.
+
+Wed Oct 13 13:36:19 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * Makefile.in: Fix comment to clarify that stuff in REQUIRED_OFILES
+       should not be in functions.def.
+
+Wed Oct 13 13:13:38 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * functions.def: Removed xmalloc.  Stuff in REQUIRED_OFILES should
+       not be in functions.def.
+
+Mon Oct  4 18:26:39 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c: change globl constructor/destructor to proper name
+
+Tue Sep 28 18:11:07 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c: fix bug in constructor/destructor
+
+Tue Sep 28 16:20:49 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c: support both old and new _vt$... vtbl mangled names
+
+Fri Sep 24 19:07:16 1993  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c: Fix demangle_template prototype
+
+Fri Sep 24 17:32:55 1993  Kung Hsu  (kung@cirdan.cygnus.com)
+
+       * cplus-dem.c: fix template demangling
+       * cplus-dem.c: fix const type demangling
+       * cplus-dem.c: fix constructor/destructor, virtual table,
+       qualifier, global constructor/destructor demangling
+
+Wed Sep  1 23:13:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * strsignal.c, strerror.c: Use fully-bracketed initializer to
+       keep gcc -Wall happy.
+
+Fri Aug 27 10:30:09 1993  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * cplus-dem.c (do_type): Add CONSTS to make gcc happy with last
+       patch.
+
+Fri Aug 27 11:24:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       Patch from Paul Flinders:
+       * cplus-dem.c (do_type): Deal with arrays.
+
+Tue Aug 24 14:23:50 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * cplus-dem.c (demangle_qualified: Deal with GNU format for more
+       than 9 classes.
+
+Wed Aug 18 19:50:29 1993  Jason Merrill  (jason@deneb.cygnus.com)
+
+       * Makefile.in (dummy.o): Redirect to /dev/null to avoid "variable
+       not initialized" warnings under HP/UX
+
+Sun Aug 15 20:42:40 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * strerror.c: Move include of stdio.h after sys_errlist #define.
+       Also remove NULL definition (stdio.h always defines NULL, so it
+       never did anything but clutter up the code).
+
+Sat Aug 14 14:21:49 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)
+
+       * Makefile.in, functions.def: handle xmalloc.c
+
+       * xmalloc.c: provide xmalloc and xrealloc functions
+
+Thu Aug 12 17:38:57 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * cplus-dem.c: Fix a comment.
+
+Sat Aug  7 13:56:35 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * getopt1.c: Declare const the way getopt.c does.
+
+Fri Aug  6 17:03:13 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * obstack.c, alloca.c: Update from FSF.
+       * getopt.c, getopt1.c: Update to current FSF version, which
+       doesn't use alloca.
+
+Tue Jul 27 14:03:57 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
+
+       * Makefile.in (demangle): Add the target with a message saying
+       where demangle went.
+
+Mon Jul 26 15:49:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * Makefile.in: Remove obsolete `demangle' target.
+
+Thu Jul 22 08:31:01 1993  Fred Fish  (fnf@deneb.cygnus.com)
+
+       * cplus-dem.c (arm_special):  Apply patch from arg@lucid.com to
+       avoid infinite loop on vtbl symbols with disambiguating "junk"
+       tacked on the end.
+
+Mon Jul 19 14:10:37 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)
+
+       * strsignal.c: work around some systems losing definitions of
+       sys_siglist
+
+       * config/mh-lynxos: this system has a losing definition of
+       sys_siglist
+
+       * config.table: use mh-lynxos for *-*-lynxos
+
+Mon Jul 19 17:08:52 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)
+
+       * config.table: Add support for HPPA BSD hosts.
+
+       * config/mh-hpbsd: New file.
+
+Mon Jul 12 18:00:40 1993  K. Richard Pixley  (rich@cygnus.com)
+
+       * Makefile.in (TAGS): make work when srcdir != objdir.
+
+Sun Jun 27 15:35:31 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
+
+       * cplus-dem.c (main): Add long options, including --help and
+       --version.
+       (usage): New function from code in main.
+
+Tue Jun 22 11:37:38 1993  Per Bothner  (bothner@deneb.cygnus.com)
+
+       * config.table:  New shell scipt, sourced by both ./configure,in
+       and ../xiberty/configure.in, to avoid maintainance lossages.
+       * configure.in and ../xiberty/configure.in:  Use config.table.
+
+       * configure.in: Don't use mh-aix for AIX 3.2, only for 3.1.
+       * configure.in: Map *-*-irix* (except irix4) to mh-sysv.
+       * ../xiberty/configure.in:  Update from ./configure.in.
+
+Tue Jun 15 17:05:31 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+       * Makefile.in: remove parentdir support
+
+Wed May 26 12:59:09 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * cplus-dem.c (xrealloc):  Match definition with prototype.
+
+Tue May 25 14:27:51 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * cplus-dem.c (demangle_prefix):  Demangle cfront
+       local variables as an extension to ARM demangling.
+
+Fri May 21 09:53:57 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * ieee-float.c: Don't require pointers to double to be aligned.
+
+Tue May 18 17:12:10 1993  Fred Fish  (fnf@cygnus.com)
+
+       (merge changes from dlong@cse.ucsc.edu)
+       * cplus-dem.c (consume_count):  Simplify.
+       * cplus-dem.c (arm_pt, demangle_class_name):  New functions.
+       * cplus-dem.c (various):  Calls to arm_pt, demangle_class_name.
+
+       * cplus-dem.c (xmalloc, xrealloc, strstr):  Make extern decls into
+       full prototypes.
+       * cplus-dem.c (free):  Add prototype.
+       * cplus-dem.c (optable):  Fully bracketize initializer.
+
+Fri May 14 17:13:05 1993  Per Bothner  (bothner@cygnus.com)
+
+       * cplus-dem.c:  Whether initial underscores are stripped
+       depends on the external variable prepends_underscore
+       (which is generated by the binutils Makefile).
+
+Fri May 14 07:32:20 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)
+
+       * cplus-dem.c (mop_up, arm_special): Remove some unused variables.
+
+Tue May  4 20:31:59 1993  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c (consume_count):  Return zero if arg does not
+       start with digit, and don't consume any input.
+
+Tue May  4 08:10:28 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * Makefile.in (demangle): Use ${srcdir} not $^.
+
+       * strtod.c: New file, needed at least for BSD 4.3.
+
+Sun May  2 11:30:42 1993  Fred Fish  (fnf@cygnus.com)
+
+       * strsignal.c (sys_siglist):  For ANSI compilations, type is
+       "const char *const".  Also remove conditionalization on __STDC__
+       since const is defined away for non-ANSI.
+
+Wed Apr 28 19:29:55 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)
+
+       * configure.in: Recognize *-*-hpux.
+       * config/mh-hpux: New file.
+
+Tue Apr 27 15:22:19 1993  Per Bothner  (bothner@cygnus.com)
+
+       * tmpnam.c:  Added ANSI tmpnam() function.
+       * functions.def, Makefile.in:  Update accordingly.
+
+Tue Apr 27 13:38:38 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * cplus-dem.c (demangle_function_name): Get the demangling of
+       stop__1A right.
+
+Fri Apr 16 23:48:24 1993  Jim Kingdon  (kingdon at calvin)
+
+       * cplus-dem.c: Declare strstr return type.
+
+Fri Mar 26 12:01:26 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+       * strsignal.c: Add some AIX signals.
+
+Thu Mar 25 15:17:23 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+       * Makefile.in (MAKEOVERRIDES): Define to be empty.
+
+Wed Mar 24 01:59:25 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)
+
+       * Makefile.in: add installcheck & dvi targets
+
+Thu Mar 18 14:05:44 1993  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * ieee-float.c:  New file, moved from ../gdb (since it is
+       needed by ../opcode/m68k-dis.c).
+
+Tue Mar  2 17:47:31 1993  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c:  Replace all references to cfront with ARM.
+
+Fri Feb 26 00:17:07 1993  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * cplus-dem.c:  Fix main program (when compiled with -DMAIN)
+       to be more useful as a filter.
+
+Sat Feb 20 21:41:39 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
+
+       * Makefile.in (install_to_libdir, install_to_tooldir): Go into the
+       destination directory before running $(RANLIB), in case that
+       program tries to create a file in the current directory as part of
+       its work.
+
+Thu Feb 18 23:00:19 1993  John Gilmore  (gnu@cygnus.com)
+
+       * strsignal.c (sys_siglist):  Remove yet another *%^&%&$# "const"
+       because BSD 4.4 lacks one.  Isn't this fun?
+
+Thu Feb 18 11:24:25 1993  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c (demangle_signature):  Set func_done after
+       demangling a template.
+       * cplus-dem.c (demangle_template):  Fix several small bugs
+       in demangling GNU style templates.
+       * cplus-dem.c (demangle_prefix):  Fix for templates in GNU
+       style constructors.
+       * cplus-dem.c (gnu_special):  Fix for templates in GNU style
+       static data members.
+
+Tue Feb 16 17:28:35 1993  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c (demangle_signature):  Modify to include type
+       modifiers like static and const in remembered types.
+
+Thu Feb 11 22:20:47 1993  Fred Fish  (fnf@cygnus.com)
+
+       * cplus-dem.c (demangled_qualified):  Add new parameter that tells
+       whether to prepend or append the qualifiers.
+       * cplus-dem.c (string_prepends):  Used now, remove #if 0.
+       * cplus-dem.c (demangle_signature):  Call demangle_qualified
+       with prepending.
+       * cplus-dem.c (gnu_special):  Recognize static data members that
+       use qualified names.
+       * cplus-dem.c (demangle_qualified):  Accumulate qualifiers in a
+       temporary buffer and the prepend or append them to the result,
+       as specified by the new "append" flag.
+       * cplus-dem.c (do_type):  Call demangled_qualified with
+       appending.
+
+Mon Dec 28 10:47:19 1992  Ken Raeburn  (raeburn@cygnus.com)
+
+       * strsignal.c (signal_table): Now const.
+       (init_signal_tables): Variable eip now points to const.
+
+       * strerror.c (error_table): Now const.
+       (init_error_tables): Variable eip now points to const.
+
+Tue Dec 15 15:36:50 1992  Per Bothner  (bothner@cygnus.com)
+
+       * memchr.c (memchr):  New (ANSI standard) function.
+       * Makefile.in, functions.def:  Added memchr.
+       * Makefile.in (AR_FLAGS): Use rc instad of non-standard cq.
+
+Wed Dec  2 22:49:10 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+       * getopt.c: remove use of USG around <alloca.h>, which never meant
+       anything anyway
+
+       * config/mh-{aix,apollo68,ncr3000,sysv,sysv4}: removed definitions
+       of USG and USGr4
+
+Thu Nov 19 03:09:33 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)
+
+       * cplus-dem.c (demangle_fund_type): Recognize `w', a wide character;
+       it's now a type according to the ANSI X3J16 working paper; output
+       "wchar_t" for it.
+       (demangle_template): Accept `w' as an integral type.
+       (xmalloc, xrealloc): Use `char *', not `PTR'.  Cast calls to their
+       counterparts malloc and realloc to `char *'.
+       (main): Exit with a 0 status.
+       * Makefile.in (demangle): Don't expect the user to define
+       DEMANGLE, instead force to be cplus-dem.c.  Look in $(srcdir)/../include
+       for demangle.h.  Pass it any HDEFINES or XTRAFLAGS.
+
+Wed Nov 18 18:56:20 1992  John Gilmore  (gnu@cygnus.com)
+
+       * Makefile.in (AR_FLAGS):  Avoid verbosity.
+       * config/mh-sysv4:  Remove AR_FLAGS override, use INSTALL=cp,
+       replace USGr4 with HAVE_SYSCONF.
+       * config/mh-solaris:  Remove; mh-sysv4 works now.
+       * getpagesize.c:  Replace USGr4 with HAVE_SYSCONF.
+       * configure.in:  Simplify host matching table, remove separate
+       solaris config file.
+
+Sun Nov 15 09:35:16 1992  Fred Fish  (fnf@cygnus.com)
+
+       * configure.in (i[34]86-*-solaris2*):  Add, use mh-sysv4.
+
+Tue Nov  3 21:27:03 1992  Brendan Kehoe  (brendan@cygnus.com)
+
+       * cplus-dem.c (xmalloc, xrealloc): Add decls.
+       (remember_type): Don't cast xmalloc.
+       (string_need): Likewise; don't cast xrealloc either.
+
+Fri Oct 23 08:52:01 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * Makefile.in, functions.defs, rename.c: added simple
+       implementation of rename, since some binutils programs use it.
+
+Thu Oct 15 15:18:22 1992  Per Bothner  (bothner@cygnus.com)
+
+       * strsignal.c:  Add appropriate 'const' to sys_siglist
+       extern declaration (if __STDC__).  (Needed for Linux.)
+       * strsignal.c (strsignal): Add cast to remove const-ness.
+
+Fri Oct  9 03:22:55 1992  John Gilmore  (gnu@cygnus.com)
+
+       * Makefile.in (needed.awk, needed2.awk):  Remove erroneous \'s
+       before "'s, diagnosed by BSD 4.4 awk.
+
+Thu Oct  8 15:25:12 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * Makefile.in: create config.h and needed-list through $(CONFIG_H)
+       and $(NEEDED_LIST), to give some hooks for xiberty.
+
+Thu Oct  1 23:31:42 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+       * configure.in: use cpu-vendor-triple instead of nested cases
+
+Wed Sep 30 11:26:59 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * Makefile.in, argv.c, basename.c, bcmp.c, bcopy.c, bzero.c,
+       concat.c, cplus-dem.c, fdmatch.c, getcwd.c, getopt.c, getopt1.c,
+       getpagesize.c, insque.c, memcmp.c, memcpy.c, memmove.c, memset.c,
+       obstack.c, sigsetmask.c, spaces.c, strchr.c, strerror.c,
+       strrchr.c, strsignal.c, strstr.c, vfork.c, vsprintf.c:
+       Convert from using GPL to LGPL.
+
+Sat Sep 26 04:01:30 1992  John Gilmore  (gnu@cygnus.com)
+
+       * Makefile.in (errors):  Leave dummy.o and dummy around so that
+       we can see how the needed list was generated (it's sometimes wrong).
+       (mostlyclean):  Remove them.
+
+Mon Sep 21 14:50:42 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * getcwd.c: supply a default if MAXPATHLEN is not defined.
+
+       * config/mh-irix4: set EXTRA_OFILES to alloca.o, from WRS.
+
+Wed Sep  9 12:41:48 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * Makefile.in: Use XTRAFLAGS when compiling, so that xiberty works
+       when cross-compiling.
+
+Thu Sep  3 13:29:39 1992  K. Richard Pixley  (rich@sendai.cygnus.com)
+
+       * cplus-dem.c: (demangle_prefix): reduction in strength of strstr
+         as a time optimization.
+
+       * cplus-dem.c (cplus_demangle): remove strpbrk test.  Appears to
+         be more expensive than simply demangling.
+
+       * cplus-dem.c (cplus_match): new function.
+
+Tue Sep  1 15:24:04 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * cplus-dem.c:  #include <stdio.h>, to define NULL.
+       Define current_demangling_style.
+
+Sun Aug 30 17:58:19 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * cplus-dem.c:  New file, moved from ../gdb.
+       * cplus-dem.c (set_cplus_marker_for_demangling):  New exported
+       function, to avoid compiling in target-dependency for CPLUS_MARKER.
+       * cplus-dem.c (cplus_demangle):  Allow demangling style option
+       to be passed as a parameter, but using the global variable
+       current_demangling_style as a default.
+       * Makefile.in:  Update for cplus-dem.c
+
+Sat Aug 29 10:44:09 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.c:  Merge in comment changes from FSF version.  Now
+       matches the FSF version exactly.
+
+Fri Aug 28 18:39:08 1992  John Gilmore  (gnu@cygnus.com)
+
+       * obstack.c (CALL_FREEFUN):  Can't use ?: with void values (at
+       least on losing DECstations!); use if-then-else instead.
+
+Wed Aug 19 14:40:34 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+       * Makefile.in: always create installation directories.
+
+Mon Aug 10 17:33:40 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+       * Makefile.in: clean up definition of CFILES, more comments
+
+Sat Aug  8 23:10:59 1992  Fred Fish  (fnf@cygnus.com)
+
+       * getopt.c (my_index):  Make first arg const to match strchr,
+       which it sometimes is remapped to.
+
+Sat Aug  1 13:48:50 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.c (DEFAULT_ALIGNMENT):  Update to match FSF version.
+       * obstack.c (_obstack_begin):  Initialize use_extra_arg.
+       * obstack.c (_obstack_begin_1):  New, from FSF version.
+
+Mon Jul 20 21:07:58 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.c (CALL_CHECKFUN, CALL_FREEFUN):  Use use_extra_arg and
+       extra_arg.
+       * obstack.c (_obstack_begin):  Remove area_id and flags arguments
+       (previously added for mmalloc support, interface has changed).
+       Also convert flags usage to use use_extra_arg and maybe_empty_object.
+
+Fri Jul 10 00:41:53 1992  Fred Fish  (fnf@cygnus.com)
+
+       * argv.c:  Move expandargv inline and eliminate static variables.
+       Rewrite to always allocate in powers of two.  Fix to return an
+       argv with a single null string arg if passed a null string.
+
+Fri Jul  3 20:27:29 1992  Fred Fish  (fnf@cygnus.com)
+
+       * random.c, sigsetmask.c, strerror.c, strsignal.c:  Remove
+       "(void)" casts from function calls where the return value is
+       ignored, in accordance with GNU coding standards.
+
+Mon Jun 29 10:54:19 1992  Fred Fish  (fnf at cygnus.com)
+
+       * bcopy.c, strerror.c, strsignal.c:  Lint.
+
+Thu Jun 25 09:18:41 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
+
+       * getopt.c: merge changes from make.
+
+Thu Jun 25 04:43:22 1992  John Gilmore  (gnu at cygnus.com)
+
+       * alloca.c:  Incorporate fixes from gdb/alloca.c.
+       FIXME:  Eventually move gdb's alloca configuration files here,
+       and remove gdb/alloca.c and its Makefile.in support.
+
+Tue Jun 23 21:56:30 1992  Fred Fish  (fnf@cygnus.com)
+
+       * dummy.c:  Define NOTHING to /*nothing*/, change return type
+       of main to int and return zero.
+       * functions.def:  Supply NOTHING as the fourth arg to macros
+       that don't have an explicit arg, to satisfy picky preprocessors.
+
+Wed Jun 17 18:13:58 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * Makefile.in:  Clean up *clean rules, as per standards.texi.
+
+Tue Jun 16 16:11:59 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
+
+       * getopt.c, getopt1.c: merged largely gratuitous, mostly
+         whitespace diffs from other prep distributions.
+
+Mon Jun 15 12:25:46 1992  Fred Fish  (fnf@cygnus.com)
+
+       * config/mh-ncr3000 (INSTALL):  Don't use /usr/ucb/install,
+       it is broken on ncr 3000's.
+
+Mon Jun 15 01:03:26 1992  John Gilmore  (gnu at cygnus.com)
+
+       * sigsetmask.c:  Rewrite.  Old one was very confused about its
+       arguments and result.  New one can't do much, but at least knows
+       what it can't do, and it's good enough for GDB's use.
+
+Sun Jun 14 15:17:40 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * functions.def:  Use proper prototype for strtoul.
+
+Fri Jun 12 19:22:40 1992  John Gilmore  (gnu at cygnus.com)
+
+       * Makefile.in:  Add random.c.
+       * config/mh-*:  Use "true" rather than "echo >/dev/null" for ranlib.
+       * configure.in:  update solaris2 config.
+
+Wed Jun 10 16:31:29 1992  Fred Fish  (fnf@cygnus.com)
+
+       * random.c:  Add for random() and srandom().
+       * functions.def:  Add random
+
+Tue Jun  9 17:27:18 1992  Fred Fish  (fnf@cygnus.com)
+
+       * config/{mh-ncr3000, mh-sysv4}:  Add definition for INSTALL
+       using /usr/ucb/install.
+
+Mon Jun  1 13:20:17 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * strerror.c:  Kludge to guard against a conflict with
+       possible declaration of sys_errlist in errno.h.
+
+Sun May 31 15:07:47 1992  Mark Eichin  (eichin at cygnus.com)
+
+       * configure.in, config/mh-solaris: add solaris2 config support.
+
+Fri May 29 17:23:23 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * sigsetmask.c:  #ifdef out sigsetmask if SIG_SETMASK
+       is not defined (should be defined in signal.h, says Posix.).
+
+Mon May 18 17:35:04 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * getopt.c: merged changes from make-3.62.11.
+
+Fri May  8 14:53:07 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * getopt.c: merged changes from bison-1.18.
+
+Tue May  5 11:51:40 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * Makefile.in:  Don't have $(EXTRA_OFILES) depend on config.h,
+       since that introduces a circular dependency.
+       ($(EXTRA_OFILES) are used to build config.h.)
+
+       * strtoul.c:  Fixes to handle non-decimal bases better.
+
+Wed Apr 22 09:27:51 1992  Fred Fish  (fnf@cygnus.com)
+
+       * config/mh-ncr3000:  Replace MINUS_G with CFLAGS.
+       * Makefile.dos:  Finish MINUS_G eradication.
+       * Makefile.in (CFILES):  Add strsignal.c.
+       * Makefile.in (REQUIRED_OFILES):  Add strerror.o strsignal.o
+       * Makefile.in (needed-list):  Split creation of errors file to
+       separate make target.
+       * Makefile.in (config.h, needed2.awk, errors):  New targets.
+       * Makefile.in (clean):  Split to multiple lines, add needed2.awk
+       and config.h.
+       * dummy.c (DEFFUNC, DEFVAR):  Add defines and undefs.
+       * functions.def (strerror):  Remove from optional list.
+       * functions.def (sys_nerr, sys_errlist, sys_siglist):  DEFVAR's
+       * functions.def (strerror, psignal):  DEFFUNC's
+       * strerror.c:  Rewrite from scratch to use sys_errlist only if
+       available, add errno_max(), add strerrno(), add strtoerrno(),
+       add test driver.
+       * strsignal.c:  New file, signal equivalent to strerror.c.
+       Uses sys_siglist if available, defines signo_max(), strsignal(),
+       strsigno(), strtosigno(), psignal(), and test driver.
+
+Mon Apr 20 20:49:32 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * Makefile.in: do not print recursion line.
+
+       * Makefile.in: allow CFLAGS to be passed in from command line.
+         Removed MINUS_G.  Default CFLAGS to -g.
+
+Mon Apr 20 12:57:46 1992  Per Bothner  (bothner@rtl.cygnus.com)
+
+       * config/mh-aix:  New.  EXTRA_OFILES lists copysign.o,
+       so libg++ users don't have to be inconvenienced by a
+       libc.a bug (libc.a needs copysign, but doesn't define it!).
+       * configure.in:  Use config/mh-aix.
+       * strtoul.c:  Handle '-' as required by ANSI.
+       Clean up radix handling.
+       * strstr.c:  Fix buggy algorithm.
+       * Makefile.in:  Change so that ${EXTRA_OFILES} is
+       appended to needed-list (which is used by libg++).
+
+Fri Apr 10 22:51:41 1992  Fred Fish  (fnf@cygnus.com)
+
+       * configure.in:  Recognize new ncr3000 config.
+       * config/mh-ncr3000:  New config file.
+
+Wed Apr  1 23:31:43 1992  John Gilmore  (gnu at cygnus.com)
+
+       * argv.c, dummy.c:  Lint.
+
+Tue Mar 31 18:46:44 1992  Fred Fish  (fnf@cygnus.com)
+
+       * config/mh-sysv4:  New config file.
+       * configure.in (host_makefile_frag):  Set to config/mh-sysv4 for
+       host_os == sysv4.
+       * getpagesize.c:  For SVR4, use sysconf(_SC_PAGESIZE) to get
+       pagesize.
+
+Sun Mar 29 12:26:42 1992  John Gilmore  (gnu at cygnus.com)
+
+       * getopt.c:  Lint.
+
+Fri Mar 27 08:32:55 1992  Fred Fish  (fnf@cygnus.com)
+
+       * functions.def (alloca):  Fix return type and args to avoid
+       type clash with gcc's builtin alloca.
+
+Tue Mar 24 23:33:42 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * configure.in, config/mh-irix4: irix4 support.
+
+       * Makefile.in, functions.def, alloca.c: added alloca.
+
+Tue Mar 24 17:34:46 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * obstack.c (CALL_FREEFUN):  Make it compile on DECstations.
+
+Thu Mar 19 13:57:42 1992  Fred Fish  (fnf@cygnus.com)
+
+       * argv.c:  Fix various external function definitions to be
+       correct in an ANSI compilation environment.
+
+Sat Mar 14 17:28:17 1992  Fred Fish  (fnf@cygnus.com)
+
+       * obstack.c:  Changes to support calling mmalloc functions,
+       which take an additional argument over malloc functions.
+
+Fri Mar  6 22:01:10 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * added check target.
+
+Thu Feb 27 22:19:39 1992  Per Bothner  (bothner@cygnus.com)
+
+       * argv.c:  #include alloca-conf.h (needed by AIX).
+
+Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)
+
+       * Makefile.in, configure.in: removed traces of namesubdir,
+         -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
+         copyrights to '92, changed some from Cygnus to FSF.
+
+Sat Feb 22 01:09:21 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * argv.c:  Check in Fred's version which fixes problems with
+       alloca().
+
+Fri Feb  7 21:46:08 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * makefile.dos:  Remove NUL to keep patch from failing.
+
+Thu Jan 30 22:48:41 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * getopt.c (_getopt_internal):  Fix usage of enum has_arg.
+
+Mon Jan 20 18:53:23 1992  Stu Grossman  (grossman at cygnus.com)
+
+       * getopt.c, getopt1.c, ../include/getopt.h:  Get latest versions.
+
+Sat Jan 18 16:53:01 1992  Fred Fish  (fnf at cygnus.com)
+
+       * argv.c:  New file to build and destroy standard argument
+       vectors from a command string.
+
+       * Makefile.in:  Add argv.c and argv.o to appropriate macros.
+
+Fri Dec 20 12:12:57 1991  Fred Fish  (fnf at cygnus.com)
+
+       * configure.in:  Change svr4 references to sysv4.
+
+       * rindex.c:  Declare return type of externally used function
+       strrchr().
+
+Thu Dec 19 18:35:03 1991  John Gilmore  (gnu at cygnus.com)
+
+       * Makefile.in:  Remove "***" in normal output, since Make produces
+       this on errors, and it's convenient to search for.
+
+Tue Dec 17 23:21:30 1991  Per Bothner  (bothner at cygnus.com)
+
+       * memcmp.c, memcpy.c, memmove.c, memset.c, strchr.c, strrchr.c:
+       New ANSI functions.  The old non-ANSI functions (such as bcopy)
+       should be avoided.
+       * bcopy.c:  Fix to correctly handle overlapping regions.
+       * index.c, rindex.c:  Re-write in terms of strchr() and strrchr().
+       * functions.def:  Add the new functions.
+       * functions.def:  Add 4th parameter to DEF macro,
+       an ansidecl.h-style prototype.
+       * dummy.c:  Use expanded DEF macro to create a dummy function
+       call, with correct parameter types.  (This avoids some
+       complaints from gcc about predefined builtins.)
+
+       Move the functionality of config/mh-default into Makefile.in.
+       This avoid duplication, and simplifies things slightly.
+       * Makefile.in:  Tweak so we don't need config/mh-default.
+       * README:  Update.
+       * configure.in:  No longer need config/mh-default.
+       * config/mh-default:  Deleted.
+       * config/mh-sysv:  Remove lines copied from old mh-default.
+
+Tue Dec 17 05:46:46 1991  John Gilmore  (gnu at cygnus.com)
+
+       * fdmatch.c (fdmatch):  Don't compare st_rdev, which is for
+       'mknod' device numbers.
+
+Mon Dec 16 12:25:34 1991  Fred Fish  (fnf at cygnus.com)
+
+       * fdmatch.c, Makefile.in:  Add new function that takes two
+       open file descriptors and returns nonzero if they refer to
+       the same file, zero otherwise.  (used in gdb)
+
+Wed Dec 11 17:40:39 1991  Steve Chamberlain  (sac at rtl.cygnus.com)
+       From DJ:
+       * msdos.c: stub functions for dos.
+       * makefile.dos, configdj.bat: new.
+       * getopt.c: Don't include alloca-conf.h in a GO32 world.
+
+
+Tue Dec 10 04:14:49 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+       * Makefile.in: infodir belongs in datadir.
+
+Fri Dec  6 23:26:45 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+       * Makefile.in: remove spaces following hyphens because bsd make
+         can't cope.  added standards.text support.  install using
+         INSTALL_DATA.
+
+       * configure.in: remove commontargets as it is no longer a
+         recognized hook.
+
+Thu Dec  5 22:46:46 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+       * Makefile.in: idestdir and ddestdir go away.  Added copyrights
+         and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
+         and mandir now keyed off datadir by default.
+
+Fri Nov 22 19:15:29 1991  John Gilmore  (gnu at cygnus.com)
+
+       * Makefile.in:  find-needed.awk does not fit in 14 chars.
+
+       * Makefile.in:  Suppress error checking when compiling the test
+       program, because Ultrix make/sh aborts there due to a bug.
+
+Fri Nov 22 12:23:17 1991  Per Bothner  (bothner at cygnus.com)
+
+       * Makefile.in:  Re-did how EXTRA_OFILES is used to be more useful.
+       * README:  Explained how the auto-configuration works,
+       and how to add new files and/or configurations.
+
+Fri Nov 22 09:45:23 1991  John Gilmore  (gnu at cygnus.com)
+
+       * strtoul.c:  Avoid defining ULONG_MAX if already defined;
+       cast a const char * to char * for pedants.
+
+       * getopt.c:  Only define "const" after local include files get to,
+       and only if they haven't defined it.
+
+Thu Nov 21 16:58:53 1991  John Gilmore  (gnu at cygnus.com)
+
+       * getcwd.c (remove getwd.c): GNU code should call getcwd().  We
+       emulate it with getwd() if available.  This avoids callers having
+       to find a MAXPATHLEN or PATH_MAX value from somewhere.
+       * Makefile.in, functions.def:  getwd->getcwd.
+       * configure.in:  Use generic case for every system.
+       * config/mh-{delta88,mach,rs6000,svr4}:  Remove.
+       * config/mh-sysv:  Use default handling, just add -DUSG.
+
+Thu Nov 14 10:58:05 1991  Per Bothner  (bothner at cygnus.com)
+
+       * Makefile.in, config/mh-default: Re-do make magic
+       so that for the default ("automatic") mode we only
+       compile the files we actually need.  Do this using
+       a recursive make:  The top-level generates the list
+       of needed files (loosely, the ones missing in libc),
+       and then passes that list to the recursive make.
+       * config/mh-mach:  Remove obsolete STRERROR-{C,O} macros.
+
+Tue Nov 12 19:10:57 1991  John Gilmore  (gnu at cygnus.com)
+
+       RS/6000 host support (grumble).
+
+       * configure.in:  Build alloca-conf.h file from alloca-norm.h
+       (everything else) or alloca-botch.h (rs/6000).
+       * Makefile.in:  Include . on the include path.
+       * getopt.c:  Use alloca-conf.h.
+       * alloca-norm.h:  How to declare alloca on reasonable machines.
+       * alloca-botch.h: How to declare alloca on braindead machines.
+
+Tue Nov 12 09:21:48 1991  Fred Fish  (fnf at cygnus.com)
+
+       * concat.c :  New file, like concat() in gdb but can take a
+       variable number of arguments rather than fixed at 3 args.  For
+       now, client applications must supply an xmalloc(), which is a
+       front end function to malloc() that deals with out-of-memory
+       conditions.
+
+       * Makefile.in:  Add concat.c and concat.o to appropriate macros.
+
+Sat Nov  9 13:29:59 1991  Fred Fish  (fnf at cygnus.com)
+
+       * config/mh-svr4:  Add sigsetmask to list of required functions.
+
+Sun Nov  3 11:57:56 1991  Per Bothner  (bothner at cygnus.com)
+
+       * vsprintf.c:  New file.
+       * functions.def, Makefile.in:  Add vsprintf.
+
+Sun Oct 27 16:31:22 1991  John Gilmore  (gnu at cygnus.com)
+
+       * configure.in, config/mh-rs6000:  Add rs/6000 host support.
+       * Makefile.in:  Compile with debug info.
+
+Fri Oct 25 17:01:12 1991  Per Bothner  (bothner at cygnus.com)
+
+       * Makefile.in, configure.in, and new files: dummy.c, functions.def,
+       config/mf-default:  Added a default configuration mode,
+       which includes into libiberty.a functions that are "missing" in libc.
+       * strdup.c, vprintf.c, vfprintf.c: New files.
+
+Thu Oct 24 02:29:26 1991  Fred Fish  (fnf at cygnus.com)
+
+       * config/hmake-svr4: New file.
+
+       * config/hmake-sysv: Add HOST_CFILES and HOST_OFILES.
+
+       * basename.c, bcmp.c, bcopy.c, bzero.c, getpagesize.c getwd.c,
+       index.c, insque.c, rindex.c, spaces.c, strstr.c, vfork.c: New
+       files containing either portable C versions or emulations using
+       native library calls.
+
+       * strerror.c:  Add copyright, internal documentation, etc.
+
+       * strtol.c:  Replace hardwired hex constants with some more
+       portable macros.  Remove illegal (according to gcc) cast.
+
+       * strtoul.c: Replace hardwired hex constant with more portable
+       macro.
+
+       * Makefile.in: Move TARGETLIB and CFLAGS where makefile fragments
+       can override them.  Add new source and object file names to CFILES
+       and OFILES respectively.
+
+       * configure.in: Add support for SVR4 makefile fragments.
+
+Tue Oct 22 19:00:23 1991  Steve Chamberlain  (steve at cygnus.com)
+
+       * Makefile.in: Move RANLIB, AR and AR_FLAGS to where they can be
+       over-ridden by config/hmake-*
+       * configure.in: added m88kcvs to sysv list
+
+Fri Oct  4 01:29:08 1991  John Gilmore  (gnu at cygnus.com)
+
+       * Makefile.in:  Most hosts need strerror, but one or two don't,
+       and they override these definitions in the host-dependent makefile
+       fragment.
+       * config/hmake-mach:  The odd man out on strerror -- it's supplied.
+       * strerror.c:  New file.
+
+       * strtol.c, strtoul.c:  Add strtol to libiberty, since Mach lacks
+       it and bfd uses it.
+       * configure.in, Makefile.in, config/hmake-mach:  Only configure
+       strtol & strotoul in on Mach.
+
+Tue Sep  3 06:36:23 1991  John Gilmore  (gnu at cygint.cygnus.com)
+
+       * obstack.c:  Merge with latest FSF version.
+
+\f
+Local Variables:
+version-control: never
+End:
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
new file mode 100644 (file)
index 0000000..b98dcea
--- /dev/null
@@ -0,0 +1,1183 @@
+# Makefile for the libiberty library.
+# Originally written by K. Richard Pixley <rich@cygnus.com>.
+#
+# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
+# Foundation
+#
+# This file is part of the libiberty library.
+# Libiberty is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# Libiberty is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with libiberty; see the file COPYING.LIB.  If not,
+# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+libiberty_topdir = @libiberty_topdir@
+srcdir = @srcdir@
+
+prefix = @prefix@
+
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+libdir = @libdir@
+includedir = @includedir@
+target_header_dir = @target_header_dir@
+
+SHELL = @SHELL@
+
+# Multilib support variables.
+MULTISRCTOP =
+MULTIBUILDTOP =
+MULTIDIRS =
+MULTISUBDIR =
+MULTIDO = true
+MULTICLEAN = true
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
+
+# Some compilers can't handle cc -c blah.c -o foo/blah.o.
+OUTPUT_OPTION = @OUTPUT_OPTION@
+
+AR = @AR@
+AR_FLAGS = rc
+
+CC = @CC@
+CFLAGS = @CFLAGS@
+LIBCFLAGS = $(CFLAGS)
+RANLIB = @RANLIB@
+MAKEINFO = @MAKEINFO@
+PERL = @PERL@
+
+PICFLAG =
+
+MAKEOVERRIDES =
+
+TARGETLIB = ./libiberty.a
+TESTLIB = ./testlib.a
+
+LIBOBJS = @LIBOBJS@
+
+# A configuration can specify extra .o files that should be included,
+# even if they are in libc. (Perhaps the libc version is buggy.)
+EXTRA_OFILES = 
+
+# Flags to pass to a recursive make.
+FLAGS_TO_PASS = \
+       "AR=$(AR)" \
+       "AR_FLAGS=$(AR_FLAGS)" \
+       "CC=$(CC)" \
+       "CFLAGS=$(CFLAGS)" \
+       "DESTDIR=$(DESTDIR)" \
+       "LIBCFLAGS=$(LIBCFLAGS)" \
+       "EXTRA_OFILES=$(EXTRA_OFILES)" \
+       "HDEFINES=$(HDEFINES)" \
+       "INSTALL=$(INSTALL)" \
+       "INSTALL_DATA=$(INSTALL_DATA)" \
+       "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+       "LDFLAGS=$(LDFLAGS)" \
+       "LOADLIBES=$(LOADLIBES)" \
+       "RANLIB=$(RANLIB)" \
+       "SHELL=$(SHELL)" \
+       "prefix=$(prefix)" \
+       "exec_prefix=$(exec_prefix)" \
+       "libdir=$(libdir)" \
+       "libsubdir=$(libsubdir)" \
+       "tooldir=$(tooldir)"
+
+# Subdirectories to recurse into. We need to override this during cleaning
+SUBDIRS = 
+
+# FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
+all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
+       @: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
+
+.PHONY: check installcheck
+check: check-subdir
+installcheck: installcheck-subdir
+
+@host_makefile_frag@
+
+INCDIR=$(srcdir)/$(MULTISRCTOP)../include
+
+COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
+
+# Just to make sure we don't use a built-in rule with VPATH
+.c.o:
+       false
+
+# NOTE: If you add new files to the library, add them to this list
+# (alphabetical), and add them to REQUIRED_OFILES, or
+# CONFIGURED_OFILES and funcs in configure.ac.  Also run "make maint-deps"
+# to build the new rules.
+CFILES = alloca.c argv.c asprintf.c atexit.c                           \
+       basename.c bcmp.c bcopy.c bsearch.c bzero.c                     \
+       calloc.c choose-temp.c clock.c concat.c cp-demangle.c           \
+        cp-demint.c cplus-dem.c                                        \
+       dyn-string.c                                                    \
+       fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c          \
+       fnmatch.c fopen_unlocked.c                                      \
+       getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \
+         gettimeofday.c                                                 \
+       hashtab.c hex.c                                                 \
+       index.c insque.c                                                \
+       lbasename.c                                                     \
+       lrealpath.c                                                     \
+       make-relative-prefix.c                                          \
+       make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmove.c     \
+        mempcpy.c memset.c mkstemps.c                                  \
+       objalloc.c obstack.c                                            \
+       partition.c pexecute.c                                          \
+        pex-common.c pex-djgpp.c pex-msdos.c pex-one.c                 \
+        pex-unix.c pex-win32.c                                         \
+         physmem.c putenv.c                                            \
+       random.c regex.c rename.c rindex.c                              \
+       safe-ctype.c setenv.c sigsetmask.c snprintf.c sort.c spaces.c   \
+        splay-tree.c stpcpy.c stpncpy.c strcasecmp.c strchr.c strdup.c \
+        strerror.c strncasecmp.c strncmp.c strrchr.c strsignal.c       \
+        strstr.c strtod.c strtol.c strtoul.c strndup.c strverscmp.c    \
+       tmpnam.c                                                        \
+       unlink-if-ordinary.c                                            \
+       vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \
+       waitpid.c                                                       \
+       xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c     \
+        xstrndup.c
+
+# These are always included in the library.  The first four are listed
+# first and by compile time to optimize parallel builds.
+REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o      \
+       ./alloca.o ./argv.o                                             \
+       ./choose-temp.o ./concat.o ./cp-demint.o                        \
+       ./dyn-string.o                                                  \
+       ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o        \
+       ./fnmatch.o ./fopen_unlocked.o                                  \
+       ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o                \
+       ./hashtab.o ./hex.o                                             \
+       ./lbasename.o ./lrealpath.o                                     \
+       ./make-relative-prefix.o ./make-temp-file.o                     \
+       ./objalloc.o ./obstack.o                                        \
+       ./partition.o ./pexecute.o ./physmem.o                          \
+       ./pex-common.o ./pex-one.o @pexecute@                           \
+       ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o  \
+        ./strsignal.o                                                  \
+       ./unlink-if-ordinary.o                                          \
+       ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o       \
+        ./xstrerror.o ./xstrndup.o
+
+# These are all the objects that configure may add to the library via
+# $funcs or EXTRA_OFILES.  This list exists here only for "make
+# maint-missing" and "make check".
+CONFIGURED_OFILES = ./asprintf.o ./atexit.o                            \
+       ./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o           \
+       ./calloc.o ./clock.o ./copysign.o                               \
+       ./_doprnt.o                                                     \
+       ./ffs.o                                                         \
+       ./getcwd.o ./getpagesize.o ./gettimeofday.o                     \
+       ./index.o ./insque.o                                            \
+       ./memchr.o ./memcmp.o ./memcpy.o ./memmove.o ./mempcpy.o        \
+        ./memset.o ./mkstemps.o                                        \
+       ./pex-djgpp.o ./pex-msdos.o                                     \
+        ./pex-unix.o ./pex-win32.o                                     \
+        ./putenv.o                                                     \
+       ./random.o ./rename.o ./rindex.o                                \
+       ./setenv.o ./sigsetmask.o ./snprintf.o ./stpcpy.o ./stpncpy.o   \
+        ./strcasecmp.o ./strchr.o ./strdup.o ./strncasecmp.o           \
+        ./strncmp.o ./strndup.o ./strrchr.o ./strstr.o                 \
+        ./strtod.o ./strtol.o ./strtoul.o ./strverscmp.o               \
+       ./tmpnam.o                                                      \
+       ./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o  \
+        ./vsprintf.o                                                   \
+       ./waitpid.o
+
+# These files are installed if the library has been configured to do so.
+INSTALLED_HEADERS =                                                     \
+       $(INCDIR)/ansidecl.h                                            \
+       $(INCDIR)/demangle.h                                            \
+       $(INCDIR)/dyn-string.h                                          \
+       $(INCDIR)/fibheap.h                                             \
+       $(INCDIR)/floatformat.h                                         \
+       $(INCDIR)/hashtab.h                                             \
+       $(INCDIR)/libiberty.h                                           \
+       $(INCDIR)/objalloc.h                                            \
+       $(INCDIR)/partition.h                                           \
+       $(INCDIR)/safe-ctype.h                                          \
+       $(INCDIR)/sort.h                                                \
+       $(INCDIR)/splay-tree.h
+
+$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
+       -rm -f $(TARGETLIB) pic/$(TARGETLIB)
+       $(AR) $(AR_FLAGS) $(TARGETLIB) \
+         $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
+       $(RANLIB) $(TARGETLIB)
+       if [ x"$(PICFLAG)" != x ]; then \
+         cd pic; \
+         $(AR) $(AR_FLAGS) $(TARGETLIB) \
+           $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
+         $(RANLIB) $(TARGETLIB); \
+         cd ..; \
+       else true; fi
+
+$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+       -rm -f $(TESTLIB)
+       $(AR) $(AR_FLAGS) $(TESTLIB) \
+         $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+       $(RANLIB) $(TESTLIB)
+
+info: libiberty.info info-subdir
+install-info: install-info-subdir
+clean-info: clean-info-subdir
+dvi: libiberty.dvi dvi-subdir
+
+LIBIBERTY_PDFFILES = libiberty.pdf
+
+pdf: $(LIBIBERTY_PDFFILES) pdf-subdir
+
+.PHONY: install-pdf
+
+pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-pdf: $(LIBIBERTY_PDFFILES)
+       @$(NORMAL_INSTALL)
+       test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+       @list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(pdf__strip_dir) \
+         echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+         $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+       done
+
+# html, install-html targets
+HTMLS = libiberty.html
+
+html: $(HTMLS)
+
+.PHONY: install-html install-html-am install-html-recursive
+
+NORMAL_INSTALL = :
+mkdir_p = mkdir -p --
+html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-html: install-html-recursive  install-html-am
+
+install-html-am: $(HTMLS)
+       @$(NORMAL_INSTALL)
+       test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)"
+       @list='$(HTMLS)'; for p in $$list; do \
+         if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
+         f=$(html__strip_dir) \
+         if test -d "$$d$$p"; then \
+           echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+           echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
+         else \
+           echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+         fi; \
+       done
+
+install-html-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+TEXISRC = \
+       $(srcdir)/libiberty.texi \
+       $(srcdir)/copying-lib.texi \
+       $(srcdir)/obstacks.texi \
+       $(srcdir)/functions.texi
+
+# Additional files that have texi snippets that need to be collected
+# and sorted.  Some are here because the sources are imported from
+# elsewhere.  Others represent headers in ../include.
+TEXIFILES = fnmatch.txh pexecute.txh
+
+libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC)
+       $(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi
+
+libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC)
+       texi2dvi $(srcdir)/libiberty.texi
+
+libiberty.pdf : $(srcdir)/libiberty.texi $(TEXISRC)
+       texi2pdf $(srcdir)/libiberty.texi
+
+libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
+       $(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $<
+
+@MAINT@$(srcdir)/functions.texi : stamp-functions
+@MAINT@        @true
+
+@MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile
+@MAINT@@HAVE_PERL@     $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES)
+@MAINT@        echo stamp > stamp-functions
+
+INSTALL_DEST = @INSTALL_DEST@
+install: 
+
+# This is tricky.  Even though CC in the Makefile contains
+# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
+# default multilib, so we have to take LIBCFLAGS into account as well,
+# since it will be passed the multilib flags.
+MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
+install_to_libdir: all
+       ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
+       $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
+       ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
+       mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)
+       if test -n "${target_header_dir}"; then \
+         case "${target_header_dir}" in \
+           /*)    thd=${target_header_dir};; \
+           *)     thd=${includedir}/${target_header_dir};; \
+         esac; \
+         ${mkinstalldirs} $(DESTDIR)$${thd}; \
+         for h in ${INSTALLED_HEADERS}; do \
+           ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
+         done; \
+       fi
+       @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
+
+install_to_tooldir: all
+       ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
+       $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
+       ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
+       mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
+       @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
+
+# needed-list is used by libstdc++.  NEEDED is the list of functions
+# to include there.  Do not add anything LGPL to this list; libstdc++
+# can't use anything encumbering.
+NEEDED = atexit calloc memchr memcmp memcpy memmove memset rename strchr \
+        strerror strncmp strrchr strstr strtol strtoul tmpnam vfprintf vprintf \
+        vfork waitpid bcmp bcopy bzero
+needed-list: Makefile
+       rm -f needed-list; touch needed-list; \
+       for f in $(NEEDED); do \
+         for g in $(LIBOBJS) $(EXTRA_OFILES); do \
+           case "$$g" in \
+             *$$f*) echo $$g >> needed-list ;; \
+           esac; \
+         done; \
+       done
+
+# required-list was used when building a shared bfd/opcodes/libiberty
+# library.  I don't know if it used by anything currently.
+required-list: Makefile
+       echo $(REQUIRED_OFILES) > required-list
+
+stamp-picdir:
+       if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \
+         mkdir pic; \
+       else true; fi
+       touch stamp-picdir
+
+.PHONY: all etags tags ls clean stage1 stage2
+
+etags tags: TAGS etags-subdir
+
+TAGS: $(CFILES)
+       etags `for i in $(CFILES); do echo $(srcdir)/$$i ; done`
+
+# The standalone demangler (c++filt) has been moved to binutils.
+demangle:
+       @echo "The standalone demangler, now named c++filt, is now"
+       @echo "a part of binutils."
+       @false
+
+ls:
+       @echo Makefile $(CFILES)
+
+# Various targets for maintainers.
+
+maint-missing :
+       @$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+
+maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
+       @true
+
+maint-undoc : $(srcdir)/functions.texi
+       @$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc
+
+maint-deps :
+       @$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR)
+
+# Need to deal with profiled libraries, too.
+
+# Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
+# multiple times, hence our explicit recursion with an empty SUBDIRS.
+mostlyclean: mostlyclean-subdir
+       -rm -rf *.o pic core errs \#* *.E a.out
+       -rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
+       -rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
+       -rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky
+       -rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg
+       -rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr
+       -rm -f libtexi.stamp
+       @$(MULTICLEAN) multi-clean DO=mostlyclean
+clean: clean-subdir
+       $(MAKE) SUBDIRS="" mostlyclean
+       -rm -f *.a required-list tmpmulti.out
+       -rm -f libiberty.dvi libiberty.pdf libiberty.info* libiberty.html
+       @$(MULTICLEAN) multi-clean DO=clean
+distclean: distclean-subdir
+       $(MAKE) SUBDIRS="" clean
+       @$(MULTICLEAN) multi-clean DO=distclean
+       -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out
+       -rm -f config.log
+       -rmdir testsuite 2>/dev/null
+maintainer-clean realclean: maintainer-clean-subdir
+       $(MAKE) SUBDIRS="" distclean
+
+force:
+
+Makefile: $(srcdir)/Makefile.in config.status
+       CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
+
+# Depending on Makefile makes sure that config.status has been re-run
+# if needed.  This prevents problems with parallel builds.
+config.h: stamp-h ; @true
+stamp-h: $(srcdir)/config.in config.status Makefile
+       CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
+
+config.status: $(srcdir)/configure
+       $(SHELL) ./config.status --recheck
+
+# Depending on stamp-h makes sure that config.status has been re-run
+# if needed.  This prevents problems with parallel builds, in case
+# subdirectories need to run config.status also.
+all-subdir check-subdir installcheck-subdir info-subdir        \
+install-info-subdir clean-info-subdir dvi-subdir pdf-subdir install-subdir     \
+etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \
+maintainer-clean-subdir: stamp-h
+       @subdirs='$(SUBDIRS)'; \
+       target=`echo $@ | sed -e 's/-subdir//'`; \
+       for dir in $$subdirs ; do \
+         cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \
+       done
+
+$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir
+$(CONFIGURED_OFILES): stamp-picdir
+
+# Don't export variables to the environment, in order to not confuse
+# configure.
+.NOEXPORT:
+
+# The dependencies in the remainder of this file are automatically
+# generated by "make maint-deps".  Manual edits will be lost.
+
+./_doprnt.o: $(srcdir)/_doprnt.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
+
+./alloca.o: $(srcdir)/alloca.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
+
+./argv.o: $(srcdir)/argv.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
+
+./asprintf.o: $(srcdir)/asprintf.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
+
+./atexit.o: $(srcdir)/atexit.c stamp-h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
+
+./basename.o: $(srcdir)/basename.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
+
+./bcmp.o: $(srcdir)/bcmp.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
+
+./bcopy.o: $(srcdir)/bcopy.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
+
+./bsearch.o: $(srcdir)/bsearch.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
+
+./bzero.o: $(srcdir)/bzero.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
+
+./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
+
+./choose-temp.o: $(srcdir)/choose-temp.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
+
+./clock.o: $(srcdir)/clock.c stamp-h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
+
+./concat.o: $(srcdir)/concat.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
+
+./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
+
+./cp-demangle.o: $(srcdir)/cp-demangle.c stamp-h $(INCDIR)/ansidecl.h \
+       $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
+       $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
+
+./cp-demint.o: $(srcdir)/cp-demint.c stamp-h $(INCDIR)/ansidecl.h \
+       $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
+
+./cplus-dem.o: $(srcdir)/cplus-dem.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
+
+./dyn-string.o: $(srcdir)/dyn-string.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
+
+./fdmatch.o: $(srcdir)/fdmatch.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
+
+./ffs.o: $(srcdir)/ffs.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
+
+./fibheap.o: $(srcdir)/fibheap.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
+
+./filename_cmp.o: $(srcdir)/filename_cmp.c stamp-h $(INCDIR)/filenames.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION)
+
+./floatformat.o: $(srcdir)/floatformat.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
+
+./fnmatch.o: $(srcdir)/fnmatch.c stamp-h $(INCDIR)/fnmatch.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
+
+./fopen_unlocked.o: $(srcdir)/fopen_unlocked.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/fopen_unlocked.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/fopen_unlocked.c $(OUTPUT_OPTION)
+
+./getcwd.o: $(srcdir)/getcwd.c stamp-h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
+
+./getopt.o: $(srcdir)/getopt.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/getopt.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
+
+./getopt1.o: $(srcdir)/getopt1.c stamp-h $(INCDIR)/getopt.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
+
+./getpagesize.o: $(srcdir)/getpagesize.c stamp-h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
+
+./getpwd.o: $(srcdir)/getpwd.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
+
+./getruntime.o: $(srcdir)/getruntime.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
+
+./gettimeofday.o: $(srcdir)/gettimeofday.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/gettimeofday.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/gettimeofday.c $(OUTPUT_OPTION)
+
+./hashtab.o: $(srcdir)/hashtab.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
+
+./hex.o: $(srcdir)/hex.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
+
+./index.o: $(srcdir)/index.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
+
+./insque.o: $(srcdir)/insque.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
+
+./lbasename.o: $(srcdir)/lbasename.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
+
+./lrealpath.o: $(srcdir)/lrealpath.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
+
+./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c stamp-h \
+       $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
+
+./make-temp-file.o: $(srcdir)/make-temp-file.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
+
+./md5.o: $(srcdir)/md5.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
+
+./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
+
+./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
+
+./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
+
+./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
+
+./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
+
+./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
+
+./mkstemps.o: $(srcdir)/mkstemps.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
+
+./msdos.o: $(srcdir)/msdos.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
+
+./objalloc.o: $(srcdir)/objalloc.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/objalloc.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
+
+./obstack.o: $(srcdir)/obstack.c stamp-h $(INCDIR)/obstack.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
+
+./partition.o: $(srcdir)/partition.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(INCDIR)/partition.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
+
+./pex-common.o: $(srcdir)/pex-common.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-common.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-common.c $(OUTPUT_OPTION)
+
+./pex-djgpp.o: $(srcdir)/pex-djgpp.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
+
+./pex-msdos.o: $(srcdir)/pex-msdos.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
+
+./pex-one.o: $(srcdir)/pex-one.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-one.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-one.c $(OUTPUT_OPTION)
+
+./pex-unix.o: $(srcdir)/pex-unix.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
+
+./pex-win32.o: $(srcdir)/pex-win32.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
+
+./pexecute.o: $(srcdir)/pexecute.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/pexecute.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/pexecute.c $(OUTPUT_OPTION)
+
+./physmem.o: $(srcdir)/physmem.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
+
+./putenv.o: $(srcdir)/putenv.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
+
+./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
+
+./regex.o: $(srcdir)/regex.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \
+       $(INCDIR)/xregex2.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
+
+./rename.o: $(srcdir)/rename.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
+
+./rindex.o: $(srcdir)/rindex.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
+
+./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
+
+./setenv.o: $(srcdir)/setenv.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
+
+./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
+
+./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
+
+./sort.o: $(srcdir)/sort.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/sort.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
+
+./spaces.o: $(srcdir)/spaces.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
+
+./splay-tree.o: $(srcdir)/splay-tree.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
+
+./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
+
+./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
+
+./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
+
+./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
+
+./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
+
+./strerror.o: $(srcdir)/strerror.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
+
+./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
+
+./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
+
+./strndup.o: $(srcdir)/strndup.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strndup.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strndup.c $(OUTPUT_OPTION)
+
+./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
+
+./strsignal.o: $(srcdir)/strsignal.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
+
+./strstr.o: $(srcdir)/strstr.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
+
+./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
+
+./strtol.o: $(srcdir)/strtol.c stamp-h $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
+
+./strtoul.o: $(srcdir)/strtoul.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
+
+./strverscmp.o: $(srcdir)/strverscmp.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+       $(INCDIR)/safe-ctype.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/strverscmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/strverscmp.c $(OUTPUT_OPTION)
+
+./tmpnam.o: $(srcdir)/tmpnam.c
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
+
+./unlink-if-ordinary.o: $(srcdir)/unlink-if-ordinary.c stamp-h \
+       $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION)
+
+./vasprintf.o: $(srcdir)/vasprintf.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
+
+./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
+
+./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
+
+./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
+
+./vsnprintf.o: $(srcdir)/vsnprintf.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
+
+./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
+
+./waitpid.o: $(srcdir)/waitpid.c stamp-h $(INCDIR)/ansidecl.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
+
+./xatexit.o: $(srcdir)/xatexit.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
+
+./xexit.o: $(srcdir)/xexit.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
+
+./xmalloc.o: $(srcdir)/xmalloc.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
+
+./xmemdup.o: $(srcdir)/xmemdup.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
+
+./xstrdup.o: $(srcdir)/xstrdup.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
+
+./xstrerror.o: $(srcdir)/xstrerror.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
+
+./xstrndup.o: $(srcdir)/xstrndup.c stamp-h $(INCDIR)/ansidecl.h \
+       $(INCDIR)/libiberty.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrndup.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/xstrndup.c $(OUTPUT_OPTION)
+
diff --git a/libiberty/README b/libiberty/README
new file mode 100644 (file)
index 0000000..886bd67
--- /dev/null
@@ -0,0 +1,66 @@
+This directory contains the -liberty library of free software.
+It is a collection of subroutines used by various GNU programs.
+Current members include:
+
+       getopt -- get options from command line
+       obstack -- stacks of arbitrarily-sized objects
+       strerror -- error message strings corresponding to errno
+       strtol -- string-to-long conversion
+       strtoul -- string-to-unsigned-long conversion
+
+We expect many of the GNU subroutines that are floating around to
+eventually arrive here.
+
+The library must be configured from the top source directory.  Don't
+try to run configure in this directory.  Follow the configuration
+instructions in ../README.
+
+Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to
+"gcc-patches@gcc.gnu.org".  Thank you.
+
+ADDING A NEW FILE
+=================
+
+There are two sets of files:  Those that are "required" will be
+included in the library for all configurations, while those
+that are "optional" will be included in the library only if "needed."
+
+To add a new required file, edit Makefile to add the source file
+name to CFILES and the object file to REQUIRED_OFILES.
+
+To add a new optional file, it must provide a single function, and the
+name of the function must be the same as the name of the file.
+
+    * Add the source file name to CFILES.
+
+    * Add the function to name to the funcs shell variable in
+      configure.ac.
+
+    * Add the function to the AC_CHECK_FUNCS lists just after the
+      setting of the funcs shell variable.  These AC_CHECK_FUNCS calls
+      are never executed; they are there to make autoheader work
+      better.
+
+    * Consider the special cases of building libiberty; as of this
+      writing, the special cases are newlib and VxWorks.  If a
+      particular special case provides the function, you do not need
+      to do anything.  If it does not provide the function, add the
+      object file to LIBOBJS, and add the function name to the case
+      controlling whether to define HAVE_func.
+
+The optional file you've added (e.g. getcwd.c) should compile and work
+on all hosts where it is needed.  It does not have to work or even
+compile on hosts where it is not needed.
+
+ADDING A NEW CONFIGURATION
+==========================
+
+On most hosts you should be able to use the scheme for automatically
+figuring out which files are needed.  In that case, you probably
+don't need a special Makefile stub for that configuration.
+
+If the fully automatic scheme doesn't work, you may be able to get
+by with defining EXTRA_OFILES in your Makefile stub.  This is
+a list of object file names that should be treated as required
+for this configuration - they will be included in libiberty.a,
+regardless of whatever might be in the C library.
diff --git a/libiberty/_doprnt.c b/libiberty/_doprnt.c
new file mode 100644 (file)
index 0000000..ca97bc8
--- /dev/null
@@ -0,0 +1,296 @@
+/* Provide a version of _doprnt in terms of fprintf.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002   Free Software Foundation, Inc.
+   Contributed by Kaveh Ghazi  (ghazi@caip.rutgers.edu)  3/29/98
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "ansidecl.h"
+#include "safe-ctype.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#undef _doprnt
+
+#ifdef HAVE__DOPRNT
+#define TEST
+#endif
+
+#ifdef TEST /* Make sure to use the internal one.  */
+#define _doprnt my_doprnt
+#endif
+
+#define COPY_VA_INT \
+  do { \
+        const int value = abs (va_arg (ap, int)); \
+        char buf[32]; \
+        ptr++; /* Go past the asterisk.  */ \
+        *sptr = '\0'; /* NULL terminate sptr.  */ \
+        sprintf(buf, "%d", value); \
+        strcat(sptr, buf); \
+        while (*sptr) sptr++; \
+     } while (0)
+
+#define PRINT_CHAR(CHAR) \
+  do { \
+        putc(CHAR, stream); \
+        ptr++; \
+        total_printed++; \
+        continue; \
+     } while (0)
+
+#define PRINT_TYPE(TYPE) \
+  do { \
+       int result; \
+       TYPE value = va_arg (ap, TYPE); \
+       *sptr++ = *ptr++; /* Copy the type specifier.  */ \
+       *sptr = '\0'; /* NULL terminate sptr.  */ \
+       result = fprintf(stream, specifier, value); \
+       if (result == -1) \
+         return -1; \
+       else \
+         { \
+           total_printed += result; \
+           continue; \
+         } \
+      } while (0)
+
+int
+_doprnt (const char *format, va_list ap, FILE *stream)
+{
+  const char * ptr = format;
+  char specifier[128];
+  int total_printed = 0;
+  
+  while (*ptr != '\0')
+    {
+      if (*ptr != '%') /* While we have regular characters, print them.  */
+       PRINT_CHAR(*ptr);
+      else /* We got a format specifier! */
+       {
+         char * sptr = specifier;
+         int wide_width = 0, short_width = 0;
+         
+         *sptr++ = *ptr++; /* Copy the % and move forward.  */
+
+         while (strchr ("-+ #0", *ptr)) /* Move past flags.  */
+           *sptr++ = *ptr++;
+
+         if (*ptr == '*')
+           COPY_VA_INT;
+         else
+           while (ISDIGIT(*ptr)) /* Handle explicit numeric value.  */
+             *sptr++ = *ptr++;
+         
+         if (*ptr == '.')
+           {
+             *sptr++ = *ptr++; /* Copy and go past the period.  */
+             if (*ptr == '*')
+               COPY_VA_INT;
+             else
+               while (ISDIGIT(*ptr)) /* Handle explicit numeric value.  */
+                 *sptr++ = *ptr++;
+           }
+         while (strchr ("hlL", *ptr))
+           {
+             switch (*ptr)
+               {
+               case 'h':
+                 short_width = 1;
+                 break;
+               case 'l':
+                 wide_width++;
+                 break;
+               case 'L':
+                 wide_width = 2;
+                 break;
+               default:
+                 abort();
+               }
+             *sptr++ = *ptr++;
+           }
+
+         switch (*ptr)
+           {
+           case 'd':
+           case 'i':
+           case 'o':
+           case 'u':
+           case 'x':
+           case 'X':
+           case 'c':
+             {
+               /* Short values are promoted to int, so just copy it
+                   as an int and trust the C library printf to cast it
+                   to the right width.  */
+               if (short_width)
+                 PRINT_TYPE(int);
+               else
+                 {
+                   switch (wide_width)
+                     {
+                     case 0:
+                       PRINT_TYPE(int);
+                       break;
+                     case 1:
+                       PRINT_TYPE(long);
+                       break;
+                     case 2:
+                     default:
+#if defined(__GNUC__) || defined(HAVE_LONG_LONG)
+                       PRINT_TYPE(long long);
+#else
+                       PRINT_TYPE(long); /* Fake it and hope for the best.  */
+#endif
+                       break;
+                     } /* End of switch (wide_width) */
+                 } /* End of else statement */
+             } /* End of integer case */
+             break;
+           case 'f':
+           case 'e':
+           case 'E':
+           case 'g':
+           case 'G':
+             {
+               if (wide_width == 0)
+                 PRINT_TYPE(double);
+               else
+                 {
+#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE)
+                   PRINT_TYPE(long double);
+#else
+                   PRINT_TYPE(double); /* Fake it and hope for the best.  */
+#endif
+                 }
+             }
+             break;
+           case 's':
+             PRINT_TYPE(char *);
+             break;
+           case 'p':
+             PRINT_TYPE(void *);
+             break;
+           case '%':
+             PRINT_CHAR('%');
+             break;
+           default:
+             abort();
+           } /* End of switch (*ptr) */
+       } /* End of else statement */
+    }
+
+  return total_printed;
+}
+
+#ifdef TEST
+
+#include <math.h>
+#ifndef M_PI
+#define M_PI (3.1415926535897932385)
+#endif
+
+#define RESULT(x) do \
+{ \
+    int i = (x); \
+    printf ("printed %d characters\n", i); \
+    fflush(stdin); \
+} while (0)
+
+static int checkit (const char * format, ...) ATTRIBUTE_PRINTF_1;
+
+static int
+checkit (const char* format, ...)
+{
+  int result;
+  VA_OPEN (args, format);
+  VA_FIXEDARG (args, char *, format);
+
+  result = _doprnt (format, args, stdout);
+  VA_CLOSE (args);
+
+  return result;
+}
+
+int
+main (void)
+{
+  RESULT(checkit ("<%d>\n", 0x12345678));
+  RESULT(printf ("<%d>\n", 0x12345678));
+
+  RESULT(checkit ("<%200d>\n", 5));
+  RESULT(printf ("<%200d>\n", 5));
+
+  RESULT(checkit ("<%.300d>\n", 6));
+  RESULT(printf ("<%.300d>\n", 6));
+
+  RESULT(checkit ("<%100.150d>\n", 7));
+  RESULT(printf ("<%100.150d>\n", 7));
+
+  RESULT(checkit ("<%s>\n",
+                 "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
+777777777777777777333333333333366666666666622222222222777777777777733333"));
+  RESULT(printf ("<%s>\n",
+                "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
+777777777777777777333333333333366666666666622222222222777777777777733333"));
+
+  RESULT(checkit ("<%f><%0+#f>%s%d%s>\n",
+                 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
+  RESULT(printf ("<%f><%0+#f>%s%d%s>\n",
+                1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
+
+  RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
+  RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
+
+  RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
+  RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
+
+  RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
+                 75, 75, 75, 75, 75, 75, 75));
+  RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
+                75, 75, 75, 75, 75, 75, 75));
+
+  RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
+                 75, 75, 75, 75, 75, 75, 75));
+  RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
+                75, 75, 75, 75, 75, 75, 75));
+
+  RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
+  RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
+
+#if defined(__GNUC__) || defined (HAVE_LONG_LONG)
+  RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
+  RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
+  RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
+  RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
+#endif
+
+#if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE)
+  RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
+                 1.23456, 1.234567890123456789L, 1.23456));
+  RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
+                1.23456, 1.234567890123456789L, 1.23456));
+#endif
+
+  return 0;
+}
+#endif /* TEST */
diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4
new file mode 100644 (file)
index 0000000..06cf3f9
--- /dev/null
@@ -0,0 +1,222 @@
+sinclude(../config-aux/acx.m4)
+sinclude(../config-aux/no-executables.m4)
+sinclude(../config-aux/warnings.m4)
+
+dnl See whether strncmp reads past the end of its string parameters.
+dnl On some versions of SunOS4 at least, strncmp reads a word at a time
+dnl but erroneously reads past the end of strings.  This can cause
+dnl a SEGV in some cases.
+AC_DEFUN(libiberty_AC_FUNC_STRNCMP,
+[AC_REQUIRE([AC_FUNC_MMAP])
+AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works,
+[AC_TRY_RUN([
+/* Test by Jim Wilson and Kaveh Ghazi.
+   Check whether strncmp reads past the end of its string parameters. */
+#include <sys/types.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+
+#ifndef MAP_ANON
+#ifdef MAP_ANONYMOUS
+#define MAP_ANON MAP_ANONYMOUS
+#else
+#define MAP_ANON MAP_FILE
+#endif
+#endif
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#endif
+
+#define MAP_LEN 0x10000
+
+main ()
+{
+#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE)
+  char *p;
+  int dev_zero;
+
+  dev_zero = open ("/dev/zero", O_RDONLY);
+  if (dev_zero < 0)
+    exit (1);
+  
+  p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
+                    MAP_ANON|MAP_PRIVATE, dev_zero, 0);
+  if (p == (char *)-1)
+    p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
+                      MAP_ANON|MAP_PRIVATE, -1, 0);
+  if (p == (char *)-1)
+    exit (2);
+  else
+    {
+      char *string = "__si_type_info";
+      char *q = (char *) p + MAP_LEN - strlen (string) - 2;
+      char *r = (char *) p + 0xe;
+
+      strcpy (q, string);
+      strcpy (r, string);
+      strncmp (r, q, 14);
+    }
+#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
+  exit (0);
+}
+], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no,
+  ac_cv_func_strncmp_works=no)
+rm -f core core.* *.core])
+if test $ac_cv_func_strncmp_works = no ; then
+  AC_LIBOBJ([strncmp])
+fi
+])
+
+dnl See if errno must be declared even when <errno.h> is included.
+AC_DEFUN(libiberty_AC_DECLARE_ERRNO,
+[AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno,
+[AC_TRY_COMPILE(
+[#include <errno.h>],
+[int x = errno;],
+libiberty_cv_declare_errno=no,
+libiberty_cv_declare_errno=yes)])
+if test $libiberty_cv_declare_errno = yes
+then AC_DEFINE(NEED_DECLARATION_ERRNO, 1,
+  [Define if errno must be declared even when <errno.h> is included.])
+fi
+])
+
+dnl See whether we need a declaration for a function.
+AC_DEFUN(libiberty_NEED_DECLARATION,
+[AC_MSG_CHECKING([whether $1 must be declared])
+AC_CACHE_VAL(libiberty_cv_decl_needed_$1,
+[AC_TRY_COMPILE([
+#include "confdefs.h"
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif],
+[char *(*pfn) = (char *(*)) $1],
+libiberty_cv_decl_needed_$1=no, libiberty_cv_decl_needed_$1=yes)])
+AC_MSG_RESULT($libiberty_cv_decl_needed_$1)
+if test $libiberty_cv_decl_needed_$1 = yes; then
+  AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
+            [Define if $1 is not declared in system header files.])
+fi
+])dnl
+
+# We always want a C version of alloca() compiled into libiberty,
+# because native-compiler support for the real alloca is so !@#$%
+# unreliable that GCC has decided to use it only when being compiled
+# by GCC.  This is the part of AC_FUNC_ALLOCA that calculates the
+# information alloca.c needs.
+AC_DEFUN(libiberty_AC_FUNC_C_ALLOCA,
+[AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    AC_CHECK_FUNC($ac_func, 
+      [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, 
+  [Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP
+   systems. This function is required for alloca.c support on those
+   systems.])  break])
+  done
+fi
+
+AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction,
+[AC_TRY_RUN([find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+main ()
+{
+  exit (find_stack_direction() < 0);
+}], 
+  ac_cv_c_stack_direction=1,
+  ac_cv_c_stack_direction=-1,
+  ac_cv_c_stack_direction=0)])
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction,
+  [Define if you know the direction of stack growth for your system;
+   otherwise it will be automatically deduced at run-time.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown])
+])
+
+# AC_LANG_FUNC_LINK_TRY(C)(FUNCTION)
+# ----------------------------------
+# Don't include <ctype.h> because on OSF/1 3.0 it includes
+# <sys/types.h> which includes <sys/select.h> which contains a
+# prototype for select.  Similarly for bzero.
+#
+# This test used to merely assign f=$1 in main(), but that was
+# optimized away by HP unbundled cc A.05.36 for ia64 under +O3,
+# presumably on the basis that there's no need to do that store if the
+# program is about to exit.  Conversely, the AIX linker optimizes an
+# unused external declaration that initializes f=$1.  So this test
+# program has both an external initialization of f, and a use of f in
+# main that affects the exit status.
+#
+m4_define([AC_LANG_FUNC_LINK_TRY(C)],
+[AC_LANG_PROGRAM(
+[/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $1 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $1 ();
+/* 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_$1) || defined (__stub___$1)
+choke me
+#else
+char (*f) () = $1;
+#endif
+#ifdef __cplusplus
+}
+#endif
+], [return f != $1;])])
+
diff --git a/libiberty/alloca.c b/libiberty/alloca.c
new file mode 100644 (file)
index 0000000..9b2e9cb
--- /dev/null
@@ -0,0 +1,483 @@
+/* alloca.c -- allocate automatically reclaimed memory
+   (Mostly) portable public-domain implementation -- D A Gwyn
+
+   This implementation of the PWB library alloca function,
+   which is used to allocate space off the run-time stack so
+   that it is automatically reclaimed upon procedure exit,
+   was inspired by discussions with J. Q. Johnson of Cornell.
+   J.Otto Tennant <jot@cray.com> contributed the Cray support.
+
+   There are some preprocessor constants that can
+   be defined when compiling for your specific system, for
+   improved efficiency; however, the defaults should be okay.
+
+   The general concept of this implementation is to keep
+   track of all alloca-allocated blocks, and reclaim any
+   that are found to be deeper in the stack than the current
+   invocation.  This heuristic does not reclaim storage as
+   soon as it becomes invalid, but it will do so eventually.
+
+   As a special case, alloca(0) reclaims storage without
+   allocating any.  It is a good idea to use alloca(0) in
+   your main control loop, etc. to force garbage collection.  */
+
+/*
+
+@deftypefn Replacement void* alloca (size_t @var{size})
+
+This function allocates memory which will be automatically reclaimed
+after the procedure exits.  The @libib{} implementation does not free
+the memory immediately but will do so eventually during subsequent
+calls to this function.  Memory is allocated using @code{xmalloc} under
+normal circumstances.
+
+The header file @file{alloca-conf.h} can be used in conjunction with the
+GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make
+available this function.  The @code{AC_FUNC_ALLOCA} test requires that
+client code use a block of preprocessor code to be safe (see the Autoconf
+manual for more); this header incorporates that logic and more, including
+the possibility of a GCC built-in function.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <libiberty.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+/* These variables are used by the ASTRDUP implementation that relies
+   on C_alloca.  */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+const char *libiberty_optr;
+char *libiberty_nptr;
+unsigned long libiberty_len;
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/* If your stack is a linked list of frames, you have to
+   provide an "address metric" ADDRESS_FUNCTION macro.  */
+
+#if defined (CRAY) && defined (CRAY_STACKSEG_END)
+static long i00afunc ();
+#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
+#else
+#define ADDRESS_FUNCTION(arg) &(arg)
+#endif
+
+#ifndef NULL
+#define        NULL    0
+#endif
+
+/* Define STACK_DIRECTION if you know the direction of stack
+   growth for your system; otherwise it will be automatically
+   deduced at run-time.
+
+   STACK_DIRECTION > 0 => grows toward higher addresses
+   STACK_DIRECTION < 0 => grows toward lower addresses
+   STACK_DIRECTION = 0 => direction of growth unknown  */
+
+#ifndef STACK_DIRECTION
+#define        STACK_DIRECTION 0       /* Direction unknown.  */
+#endif
+
+#if STACK_DIRECTION != 0
+
+#define        STACK_DIR       STACK_DIRECTION /* Known at compile-time.  */
+
+#else /* STACK_DIRECTION == 0; need run-time code.  */
+
+static int stack_dir;          /* 1 or -1 once known.  */
+#define        STACK_DIR       stack_dir
+
+static void
+find_stack_direction (void)
+{
+  static char *addr = NULL;    /* Address of first `dummy', once known.  */
+  auto char dummy;             /* To get stack address.  */
+
+  if (addr == NULL)
+    {                          /* Initial entry.  */
+      addr = ADDRESS_FUNCTION (dummy);
+
+      find_stack_direction (); /* Recurse once.  */
+    }
+  else
+    {
+      /* Second entry.  */
+      if (ADDRESS_FUNCTION (dummy) > addr)
+       stack_dir = 1;          /* Stack grew upward.  */
+      else
+       stack_dir = -1;         /* Stack grew downward.  */
+    }
+}
+
+#endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+   (a) chain together all alloca'ed blocks;
+   (b) keep track of stack depth.
+
+   It is very important that sizeof(header) agree with malloc
+   alignment chunk size.  The following default should work okay.  */
+
+#ifndef        ALIGN_SIZE
+#define        ALIGN_SIZE      sizeof(double)
+#endif
+
+typedef union hdr
+{
+  char align[ALIGN_SIZE];      /* To force sizeof(header).  */
+  struct
+    {
+      union hdr *next;         /* For chaining headers.  */
+      char *deep;              /* For stack depth measure.  */
+    } h;
+} header;
+
+static header *last_alloca_header = NULL;      /* -> last alloca header.  */
+
+/* Return a pointer to at least SIZE bytes of storage,
+   which will be automatically reclaimed upon exit from
+   the procedure that called alloca.  Originally, this space
+   was supposed to be taken from the current stack frame of the
+   caller, but that method cannot be made to work for some
+   implementations of C, for example under Gould's UTX/32.  */
+
+/* @undocumented C_alloca */
+
+PTR
+C_alloca (size_t size)
+{
+  auto char probe;             /* Probes stack depth: */
+  register char *depth = ADDRESS_FUNCTION (probe);
+
+#if STACK_DIRECTION == 0
+  if (STACK_DIR == 0)          /* Unknown growth direction.  */
+    find_stack_direction ();
+#endif
+
+  /* Reclaim garbage, defined as all alloca'd storage that
+     was allocated from deeper in the stack than currently.  */
+
+  {
+    register header *hp;       /* Traverses linked list.  */
+
+    for (hp = last_alloca_header; hp != NULL;)
+      if ((STACK_DIR > 0 && hp->h.deep > depth)
+         || (STACK_DIR < 0 && hp->h.deep < depth))
+       {
+         register header *np = hp->h.next;
+
+         free ((PTR) hp);      /* Collect garbage.  */
+
+         hp = np;              /* -> next header.  */
+       }
+      else
+       break;                  /* Rest are not deeper.  */
+
+    last_alloca_header = hp;   /* -> last valid storage.  */
+  }
+
+  if (size == 0)
+    return NULL;               /* No allocation required.  */
+
+  /* Allocate combined header + user data storage.  */
+
+  {
+    register void *new_storage = XNEWVEC (char, sizeof (header) + size);
+    /* Address of header.  */
+
+    if (new_storage == 0)
+      abort();
+
+    ((header *) new_storage)->h.next = last_alloca_header;
+    ((header *) new_storage)->h.deep = depth;
+
+    last_alloca_header = (header *) new_storage;
+
+    /* User storage begins just after header.  */
+
+    return (PTR) ((char *) new_storage + sizeof (header));
+  }
+}
+
+#if defined (CRAY) && defined (CRAY_STACKSEG_END)
+
+#ifdef DEBUG_I00AFUNC
+#include <stdio.h>
+#endif
+
+#ifndef CRAY_STACK
+#define CRAY_STACK
+#ifndef CRAY2
+/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
+struct stack_control_header
+  {
+    long shgrow:32;            /* Number of times stack has grown.  */
+    long shaseg:32;            /* Size of increments to stack.  */
+    long shhwm:32;             /* High water mark of stack.  */
+    long shsize:32;            /* Current size of stack (all segments).  */
+  };
+
+/* The stack segment linkage control information occurs at
+   the high-address end of a stack segment.  (The stack
+   grows from low addresses to high addresses.)  The initial
+   part of the stack segment linkage control information is
+   0200 (octal) words.  This provides for register storage
+   for the routine which overflows the stack.  */
+
+struct stack_segment_linkage
+  {
+    long ss[0200];             /* 0200 overflow words.  */
+    long sssize:32;            /* Number of words in this segment.  */
+    long ssbase:32;            /* Offset to stack base.  */
+    long:32;
+    long sspseg:32;            /* Offset to linkage control of previous
+                                  segment of stack.  */
+    long:32;
+    long sstcpt:32;            /* Pointer to task common address block.  */
+    long sscsnm;               /* Private control structure number for
+                                  microtasking.  */
+    long ssusr1;               /* Reserved for user.  */
+    long ssusr2;               /* Reserved for user.  */
+    long sstpid;               /* Process ID for pid based multi-tasking.  */
+    long ssgvup;               /* Pointer to multitasking thread giveup.  */
+    long sscray[7];            /* Reserved for Cray Research.  */
+    long ssa0;
+    long ssa1;
+    long ssa2;
+    long ssa3;
+    long ssa4;
+    long ssa5;
+    long ssa6;
+    long ssa7;
+    long sss0;
+    long sss1;
+    long sss2;
+    long sss3;
+    long sss4;
+    long sss5;
+    long sss6;
+    long sss7;
+  };
+
+#else /* CRAY2 */
+/* The following structure defines the vector of words
+   returned by the STKSTAT library routine.  */
+struct stk_stat
+  {
+    long now;                  /* Current total stack size.  */
+    long maxc;                 /* Amount of contiguous space which would
+                                  be required to satisfy the maximum
+                                  stack demand to date.  */
+    long high_water;           /* Stack high-water mark.  */
+    long overflows;            /* Number of stack overflow ($STKOFEN) calls.  */
+    long hits;                 /* Number of internal buffer hits.  */
+    long extends;              /* Number of block extensions.  */
+    long stko_mallocs;         /* Block allocations by $STKOFEN.  */
+    long underflows;           /* Number of stack underflow calls ($STKRETN).  */
+    long stko_free;            /* Number of deallocations by $STKRETN.  */
+    long stkm_free;            /* Number of deallocations by $STKMRET.  */
+    long segments;             /* Current number of stack segments.  */
+    long maxs;                 /* Maximum number of stack segments so far.  */
+    long pad_size;             /* Stack pad size.  */
+    long current_address;      /* Current stack segment address.  */
+    long current_size;         /* Current stack segment size.  This
+                                  number is actually corrupted by STKSTAT to
+                                  include the fifteen word trailer area.  */
+    long initial_address;      /* Address of initial segment.  */
+    long initial_size;         /* Size of initial segment.  */
+  };
+
+/* The following structure describes the data structure which trails
+   any stack segment.  I think that the description in 'asdef' is
+   out of date.  I only describe the parts that I am sure about.  */
+
+struct stk_trailer
+  {
+    long this_address;         /* Address of this block.  */
+    long this_size;            /* Size of this block (does not include
+                                  this trailer).  */
+    long unknown2;
+    long unknown3;
+    long link;                 /* Address of trailer block of previous
+                                  segment.  */
+    long unknown5;
+    long unknown6;
+    long unknown7;
+    long unknown8;
+    long unknown9;
+    long unknown10;
+    long unknown11;
+    long unknown12;
+    long unknown13;
+    long unknown14;
+  };
+
+#endif /* CRAY2 */
+#endif /* not CRAY_STACK */
+
+#ifdef CRAY2
+/* Determine a "stack measure" for an arbitrary ADDRESS.
+   I doubt that "lint" will like this much.  */
+
+static long
+i00afunc (long *address)
+{
+  struct stk_stat status;
+  struct stk_trailer *trailer;
+  long *block, size;
+  long result = 0;
+
+  /* We want to iterate through all of the segments.  The first
+     step is to get the stack status structure.  We could do this
+     more quickly and more directly, perhaps, by referencing the
+     $LM00 common block, but I know that this works.  */
+
+  STKSTAT (&status);
+
+  /* Set up the iteration.  */
+
+  trailer = (struct stk_trailer *) (status.current_address
+                                   + status.current_size
+                                   - 15);
+
+  /* There must be at least one stack segment.  Therefore it is
+     a fatal error if "trailer" is null.  */
+
+  if (trailer == 0)
+    abort ();
+
+  /* Discard segments that do not contain our argument address.  */
+
+  while (trailer != 0)
+    {
+      block = (long *) trailer->this_address;
+      size = trailer->this_size;
+      if (block == 0 || size == 0)
+       abort ();
+      trailer = (struct stk_trailer *) trailer->link;
+      if ((block <= address) && (address < (block + size)))
+       break;
+    }
+
+  /* Set the result to the offset in this segment and add the sizes
+     of all predecessor segments.  */
+
+  result = address - block;
+
+  if (trailer == 0)
+    {
+      return result;
+    }
+
+  do
+    {
+      if (trailer->this_size <= 0)
+       abort ();
+      result += trailer->this_size;
+      trailer = (struct stk_trailer *) trailer->link;
+    }
+  while (trailer != 0);
+
+  /* We are done.  Note that if you present a bogus address (one
+     not in any segment), you will get a different number back, formed
+     from subtracting the address of the first block.  This is probably
+     not what you want.  */
+
+  return (result);
+}
+
+#else /* not CRAY2 */
+/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
+   Determine the number of the cell within the stack,
+   given the address of the cell.  The purpose of this
+   routine is to linearize, in some sense, stack addresses
+   for alloca.  */
+
+static long
+i00afunc (long address)
+{
+  long stkl = 0;
+
+  long size, pseg, this_segment, stack;
+  long result = 0;
+
+  struct stack_segment_linkage *ssptr;
+
+  /* Register B67 contains the address of the end of the
+     current stack segment.  If you (as a subprogram) store
+     your registers on the stack and find that you are past
+     the contents of B67, you have overflowed the segment.
+
+     B67 also points to the stack segment linkage control
+     area, which is what we are really interested in.  */
+
+  stkl = CRAY_STACKSEG_END ();
+  ssptr = (struct stack_segment_linkage *) stkl;
+
+  /* If one subtracts 'size' from the end of the segment,
+     one has the address of the first word of the segment.
+
+     If this is not the first segment, 'pseg' will be
+     nonzero.  */
+
+  pseg = ssptr->sspseg;
+  size = ssptr->sssize;
+
+  this_segment = stkl - size;
+
+  /* It is possible that calling this routine itself caused
+     a stack overflow.  Discard stack segments which do not
+     contain the target address.  */
+
+  while (!(this_segment <= address && address <= stkl))
+    {
+#ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
+#endif
+      if (pseg == 0)
+       break;
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      this_segment = stkl - size;
+    }
+
+  result = address - this_segment;
+
+  /* If you subtract pseg from the current end of the stack,
+     you get the address of the previous stack segment's end.
+     This seems a little convoluted to me, but I'll bet you save
+     a cycle somewhere.  */
+
+  while (pseg != 0)
+    {
+#ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o\n", pseg, size);
+#endif
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      result += size;
+    }
+  return (result);
+}
+
+#endif /* not CRAY2 */
+#endif /* CRAY */
diff --git a/libiberty/argv.c b/libiberty/argv.c
new file mode 100644 (file)
index 0000000..38bd449
--- /dev/null
@@ -0,0 +1,513 @@
+/* Create and destroy argument vectors (argv's)
+   Copyright (C) 1992, 2001 Free Software Foundation, Inc.
+   Written by Fred Fish @ Cygnus Support
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+
+/*  Create and destroy argument vectors.  An argument vector is simply an
+    array of string pointers, terminated by a NULL pointer. */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+/*  Routines imported from standard C runtime libraries. */
+
+#include <stddef.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef EOS
+#define EOS '\0'
+#endif
+
+#define INITIAL_MAXARGC 8      /* Number of args + NULL in initial argv */
+
+
+/*
+
+@deftypefn Extension char** dupargv (char **@var{vector})
+
+Duplicate an argument vector.  Simply scans through @var{vector},
+duplicating each argument until the terminating @code{NULL} is found.
+Returns a pointer to the argument vector if successful.  Returns
+@code{NULL} if there is insufficient memory to complete building the
+argument vector.
+
+@end deftypefn
+
+*/
+
+char **
+dupargv (char **argv)
+{
+  int argc;
+  char **copy;
+  
+  if (argv == NULL)
+    return NULL;
+  
+  /* the vector */
+  for (argc = 0; argv[argc] != NULL; argc++);
+  copy = (char **) malloc ((argc + 1) * sizeof (char *));
+  if (copy == NULL)
+    return NULL;
+  
+  /* the strings */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    {
+      int len = strlen (argv[argc]);
+      copy[argc] = (char *) malloc (len + 1);
+      if (copy[argc] == NULL)
+       {
+         freeargv (copy);
+         return NULL;
+       }
+      strcpy (copy[argc], argv[argc]);
+    }
+  copy[argc] = NULL;
+  return copy;
+}
+
+/*
+
+@deftypefn Extension void freeargv (char **@var{vector})
+
+Free an argument vector that was built using @code{buildargv}.  Simply
+scans through @var{vector}, freeing the memory for each argument until
+the terminating @code{NULL} is found, and then frees @var{vector}
+itself.
+
+@end deftypefn
+
+*/
+
+void freeargv (char **vector)
+{
+  register char **scan;
+
+  if (vector != NULL)
+    {
+      for (scan = vector; *scan != NULL; scan++)
+       {
+         free (*scan);
+       }
+      free (vector);
+    }
+}
+
+/*
+
+@deftypefn Extension char** buildargv (char *@var{sp})
+
+Given a pointer to a string, parse the string extracting fields
+separated by whitespace and optionally enclosed within either single
+or double quotes (which are stripped off), and build a vector of
+pointers to copies of the string for each field.  The input string
+remains unchanged.  The last element of the vector is followed by a
+@code{NULL} element.
+
+All of the memory for the pointer array and copies of the string
+is obtained from @code{malloc}.  All of the memory can be returned to the
+system with the single function call @code{freeargv}, which takes the
+returned result of @code{buildargv}, as it's argument.
+
+Returns a pointer to the argument vector if successful.  Returns
+@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient
+memory to complete building the argument vector.
+
+If the input is a null string (as opposed to a @code{NULL} pointer),
+then buildarg returns an argument vector that has one arg, a null
+string.
+
+@end deftypefn
+
+The memory for the argv array is dynamically expanded as necessary.
+
+In order to provide a working buffer for extracting arguments into,
+with appropriate stripping of quotes and translation of backslash
+sequences, we allocate a working buffer at least as long as the input
+string.  This ensures that we always have enough space in which to
+work, since the extracted arg is never larger than the input string.
+
+The argument vector is always kept terminated with a @code{NULL} arg
+pointer, so it can be passed to @code{freeargv} at any time, or
+returned, as appropriate.
+
+*/
+
+char **buildargv (const char *input)
+{
+  char *arg;
+  char *copybuf;
+  int squote = 0;
+  int dquote = 0;
+  int bsquote = 0;
+  int argc = 0;
+  int maxargc = 0;
+  char **argv = NULL;
+  char **nargv;
+
+  if (input != NULL)
+    {
+      copybuf = (char *) alloca (strlen (input) + 1);
+      /* Is a do{}while to always execute the loop once.  Always return an
+        argv, even for null strings.  See NOTES above, test case below. */
+      do
+       {
+         /* Pick off argv[argc] */
+         while (ISBLANK (*input))
+           {
+             input++;
+           }
+         if ((maxargc == 0) || (argc >= (maxargc - 1)))
+           {
+             /* argv needs initialization, or expansion */
+             if (argv == NULL)
+               {
+                 maxargc = INITIAL_MAXARGC;
+                 nargv = (char **) malloc (maxargc * sizeof (char *));
+               }
+             else
+               {
+                 maxargc *= 2;
+                 nargv = (char **) realloc (argv, maxargc * sizeof (char *));
+               }
+             if (nargv == NULL)
+               {
+                 if (argv != NULL)
+                   {
+                     freeargv (argv);
+                     argv = NULL;
+                   }
+                 break;
+               }
+             argv = nargv;
+             argv[argc] = NULL;
+           }
+         /* Begin scanning arg */
+         arg = copybuf;
+         while (*input != EOS)
+           {
+             if (ISSPACE (*input) && !squote && !dquote && !bsquote)
+               {
+                 break;
+               }
+             else
+               {
+                 if (bsquote)
+                   {
+                     bsquote = 0;
+                     *arg++ = *input;
+                   }
+                 else if (*input == '\\')
+                   {
+                     bsquote = 1;
+                   }
+                 else if (squote)
+                   {
+                     if (*input == '\'')
+                       {
+                         squote = 0;
+                       }
+                     else
+                       {
+                         *arg++ = *input;
+                       }
+                   }
+                 else if (dquote)
+                   {
+                     if (*input == '"')
+                       {
+                         dquote = 0;
+                       }
+                     else
+                       {
+                         *arg++ = *input;
+                       }
+                   }
+                 else
+                   {
+                     if (*input == '\'')
+                       {
+                         squote = 1;
+                       }
+                     else if (*input == '"')
+                       {
+                         dquote = 1;
+                       }
+                     else
+                       {
+                         *arg++ = *input;
+                       }
+                   }
+                 input++;
+               }
+           }
+         *arg = EOS;
+         argv[argc] = strdup (copybuf);
+         if (argv[argc] == NULL)
+           {
+             freeargv (argv);
+             argv = NULL;
+             break;
+           }
+         argc++;
+         argv[argc] = NULL;
+
+         while (ISSPACE (*input))
+           {
+             input++;
+           }
+       }
+      while (*input != EOS);
+    }
+  return (argv);
+}
+
+/*
+
+@deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file})
+
+Write each member of ARGV, handling all necessary quoting, to the file
+named by FILE, separated by whitespace.  Return 0 on success, non-zero
+if an error occurred while writing to FILE.
+
+@end deftypefn
+
+*/
+
+int
+writeargv (char **argv, FILE *f)
+{
+  int status = 0;
+
+  if (f == NULL)
+    return 1;
+
+  while (*argv != NULL)
+    {
+      const char *arg = *argv;
+
+      while (*arg != EOS)
+        {
+          char c = *arg;
+
+          if (ISSPACE(c) || c == '\\' || c == '\'' || c == '"')
+            if (EOF == fputc ('\\', f))
+              {
+                status = 1;
+                goto done;
+              }
+
+          if (EOF == fputc (c, f))
+            {
+              status = 1;
+              goto done;
+            }
+          arg++;
+        }
+
+      if (EOF == fputc ('\n', f))
+        {
+          status = 1;
+          goto done;
+        }
+      argv++;
+    }
+
+ done:
+  return status;
+}
+
+/*
+
+@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
+
+The @var{argcp} and @code{argvp} arguments are pointers to the usual
+@code{argc} and @code{argv} arguments to @code{main}.  This function
+looks for arguments that begin with the character @samp{@@}.  Any such
+arguments are interpreted as ``response files''.  The contents of the
+response file are interpreted as additional command line options.  In
+particular, the file is separated into whitespace-separated strings;
+each such string is taken as a command-line option.  The new options
+are inserted in place of the option naming the response file, and
+@code{*argcp} and @code{*argvp} will be updated.  If the value of
+@code{*argvp} is modified by this function, then the new value has
+been dynamically allocated and can be deallocated by the caller with
+@code{freeargv}.  However, most callers will simply call
+@code{expandargv} near the beginning of @code{main} and allow the
+operating system to free the memory when the program exits.
+
+@end deftypefn
+
+*/
+
+void
+expandargv (int *argcp, char ***argvp)
+{
+  /* The argument we are currently processing.  */
+  int i = 0;
+  /* Non-zero if ***argvp has been dynamically allocated.  */
+  int argv_dynamic = 0;
+  /* Loop over the arguments, handling response files.  We always skip
+     ARGVP[0], as that is the name of the program being run.  */
+  while (++i < *argcp)
+    {
+      /* The name of the response file.  */
+      const char *filename;
+      /* The response file.  */
+      FILE *f;
+      /* An upper bound on the number of characters in the response
+        file.  */
+      long pos;
+      /* The number of characters in the response file, when actually
+        read.  */
+      size_t len;
+      /* A dynamically allocated buffer used to hold options read from a
+        response file.  */
+      char *buffer;
+      /* Dynamically allocated storage for the options read from the
+        response file.  */
+      char **file_argv;
+      /* The number of options read from the response file, if any.  */
+      size_t file_argc;
+      /* We are only interested in options of the form "@file".  */
+      filename = (*argvp)[i];
+      if (filename[0] != '@')
+       continue;
+      /* Read the contents of the file.  */
+      f = fopen (++filename, "r");
+      if (!f)
+       continue;
+      if (fseek (f, 0L, SEEK_END) == -1)
+       goto error;
+      pos = ftell (f);
+      if (pos == -1)
+       goto error;
+      if (fseek (f, 0L, SEEK_SET) == -1)
+       goto error;
+      buffer = (char *) xmalloc (pos * sizeof (char) + 1);
+      len = fread (buffer, sizeof (char), pos, f);
+      if (len != (size_t) pos
+         /* On Windows, fread may return a value smaller than POS,
+            due to CR/LF->CR translation when reading text files.
+            That does not in-and-of itself indicate failure.  */
+         && ferror (f))
+       goto error;
+      /* Add a NUL terminator.  */
+      buffer[len] = '\0';
+      /* Parse the string.  */
+      file_argv = buildargv (buffer);
+      /* If *ARGVP is not already dynamically allocated, copy it.  */
+      if (!argv_dynamic)
+       {
+         *argvp = dupargv (*argvp);
+         if (!*argvp)
+           {
+             fputs ("\nout of memory\n", stderr);
+             xexit (1);
+           }
+       }
+      /* Count the number of arguments.  */
+      file_argc = 0;
+      while (file_argv[file_argc] && *file_argv[file_argc])
+       ++file_argc;
+      /* Now, insert FILE_ARGV into ARGV.  The "+1" below handles the
+        NULL terminator at the end of ARGV.  */ 
+      *argvp = ((char **) 
+               xrealloc (*argvp, 
+                         (*argcp + file_argc + 1) * sizeof (char *)));
+      memmove (*argvp + i + file_argc, *argvp + i + 1, 
+              (*argcp - i) * sizeof (char *));
+      memcpy (*argvp + i, file_argv, file_argc * sizeof (char *));
+      /* The original option has been replaced by all the new
+        options.  */
+      *argcp += file_argc - 1;
+      /* Free up memory allocated to process the response file.  We do
+        not use freeargv because the individual options in FILE_ARGV
+        are now in the main ARGV.  */
+      free (file_argv);
+      free (buffer);
+      /* Rescan all of the arguments just read to support response
+        files that include other response files.  */
+      --i;
+    error:
+      /* We're all done with the file now.  */
+      fclose (f);
+    }
+}
+
+#ifdef MAIN
+
+/* Simple little test driver. */
+
+static const char *const tests[] =
+{
+  "a simple command line",
+  "arg 'foo' is single quoted",
+  "arg \"bar\" is double quoted",
+  "arg \"foo bar\" has embedded whitespace",
+  "arg 'Jack said \\'hi\\'' has single quotes",
+  "arg 'Jack said \\\"hi\\\"' has double quotes",
+  "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9",
+  
+  /* This should be expanded into only one argument.  */
+  "trailing-whitespace ",
+
+  "",
+  NULL
+};
+
+int
+main (void)
+{
+  char **argv;
+  const char *const *test;
+  char **targs;
+
+  for (test = tests; *test != NULL; test++)
+    {
+      printf ("buildargv(\"%s\")\n", *test);
+      if ((argv = buildargv (*test)) == NULL)
+       {
+         printf ("failed!\n\n");
+       }
+      else
+       {
+         for (targs = argv; *targs != NULL; targs++)
+           {
+             printf ("\t\"%s\"\n", *targs);
+           }
+         printf ("\n");
+       }
+      freeargv (argv);
+    }
+
+  return 0;
+}
+
+#endif /* MAIN */
diff --git a/libiberty/asprintf.c b/libiberty/asprintf.c
new file mode 100644 (file)
index 0000000..3cf5052
--- /dev/null
@@ -0,0 +1,56 @@
+/* Like sprintf but provides a pointer to malloc'd storage, which must
+   be freed by the caller.
+   Copyright (C) 1997, 2003 Free Software Foundation, Inc.
+   Contributed by Cygnus Solutions.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <stdarg.h>
+
+/*
+
+@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...)
+
+Like @code{sprintf}, but instead of passing a pointer to a buffer, you
+pass a pointer to a pointer.  This function will compute the size of
+the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{sprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+@code{*@var{resptr}}.
+
+@end deftypefn
+
+*/
+
+int
+asprintf (char **buf, const char *fmt, ...)
+{
+  int status;
+  VA_OPEN (ap, fmt);
+  VA_FIXEDARG (ap, char **, buf);
+  VA_FIXEDARG (ap, const char *, fmt);
+  status = vasprintf (buf, fmt, ap);
+  VA_CLOSE (ap);
+  return status;
+}
diff --git a/libiberty/at-file.texi b/libiberty/at-file.texi
new file mode 100644 (file)
index 0000000..080d195
--- /dev/null
@@ -0,0 +1,15 @@
+@c This file is designed to be included in manuals that use 
+@c expandargv.
+
+@item @@@var{file}
+Read command-line options from @var{file}.  The options read are
+inserted in place of the original @@@var{file} option.  If @var{file}
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.  
+
+Options in @var{file} are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The @var{file} may itself contain additional
+@@@var{file} options; any such options will be processed recursively.
diff --git a/libiberty/atexit.c b/libiberty/atexit.c
new file mode 100644 (file)
index 0000000..e091f01
--- /dev/null
@@ -0,0 +1,27 @@
+/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */
+/* This function is in the public domain.  --Mike Stump. */
+
+/*
+
+@deftypefn Supplemental int atexit (void (*@var{f})())
+
+Causes function @var{f} to be called at exit.  Returns 0.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+
+#ifdef HAVE_ON_EXIT
+
+int
+atexit(void (*f)(void))
+{
+  /* If the system doesn't provide a definition for atexit, use on_exit
+     if the system provides that.  */
+  on_exit (f, 0);
+  return 0;
+}
+
+#endif
diff --git a/libiberty/basename.c b/libiberty/basename.c
new file mode 100644 (file)
index 0000000..0f2c069
--- /dev/null
@@ -0,0 +1,62 @@
+/* Return the basename of a pathname.
+   This file is in the public domain. */
+
+/*
+
+@deftypefn Supplemental char* basename (const char *@var{name})
+
+Returns a pointer to the last component of pathname @var{name}.
+Behavior is undefined if the pathname ends in a directory separator.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2 
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+/* Define IS_DIR_SEPARATOR.  */
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+char *
+basename (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (ISALPHA (name[0]) && name[1] == ':') 
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    {
+      if (IS_DIR_SEPARATOR (*name))
+       {
+         base = name + 1;
+       }
+    }
+  return (char *) base;
+}
+
diff --git a/libiberty/bcmp.c b/libiberty/bcmp.c
new file mode 100644 (file)
index 0000000..c639f98
--- /dev/null
@@ -0,0 +1,27 @@
+/* bcmp
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, nonzero otherwise.  Returns zero if
+@var{count} is zero.  A nonzero result only indicates a difference,
+it does not indicate any sorting order (say, by having a positive
+result mean @var{x} sorts before @var{y}).
+
+@end deftypefn
+
+*/
+
+#include <stddef.h>
+
+extern int memcmp(const void *, const void *, size_t);
+
+int
+bcmp (const void *s1, const void *s2, size_t count)
+{
+  return memcmp (s1, s2, count);
+}
+
diff --git a/libiberty/bcopy.c b/libiberty/bcopy.c
new file mode 100644 (file)
index 0000000..f9b7a8a
--- /dev/null
@@ -0,0 +1,31 @@
+/* bcopy -- copy memory regions of arbitary length
+
+@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  The use of @code{bcopy} is deprecated in new programs.
+
+@end deftypefn
+
+*/
+
+#include <stddef.h>
+
+void
+bcopy (const void *src, void *dest, size_t len)
+{
+  if (dest < src)
+    {
+      const char *firsts = (const char *) src;
+      char *firstd = (char *) dest;
+      while (len--)
+       *firstd++ = *firsts++;
+    }
+  else
+    {
+      const char *lasts = (const char *)src + (len-1);
+      char *lastd = (char *)dest + (len-1);
+      while (len--)
+        *lastd-- = *lasts--;
+    }
+}
diff --git a/libiberty/bsearch.c b/libiberty/bsearch.c
new file mode 100644 (file)
index 0000000..771d5de
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. [rescinded 22 July 1999]
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+
+@deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *))
+
+Performs a search over an array of @var{nmemb} elements pointed to by
+@var{base} for a member that matches the object pointed to by @var{key}.
+The size of each member is specified by @var{size}.  The array contents
+should be sorted in ascending order according to the @var{compar}
+comparison function.  This routine should take two arguments pointing to
+the @var{key} and to an array member, in that order, and should return an
+integer less than, equal to, or greater than zero if the @var{key} object
+is respectively less than, matching, or greater than the array member.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+#include "ansidecl.h"
+#include <sys/types.h>         /* size_t */
+#include <stdio.h>
+
+/*
+ * Perform a binary search.
+ *
+ * The code below is a bit sneaky.  After a comparison fails, we
+ * divide the work in half by moving either left or right. If lim
+ * is odd, moving left simply involves halving lim: e.g., when lim
+ * is 5 we look at item 2, so we change lim to 2 so that we will
+ * look at items 0 & 1.  If lim is even, the same applies.  If lim
+ * is odd, moving right again involes halving lim, this time moving
+ * the base up one item past p: e.g., when lim is 5 we change base
+ * to item 3 and make lim 2 so that we will look at items 3 and 4.
+ * If lim is even, however, we have to shrink it by one before
+ * halving: e.g., when lim is 4, we still looked at item 2, so we
+ * have to make lim 3, then halve, obtaining 1, so that we will only
+ * look at item 3.
+ */
+void *
+bsearch (register const void *key, const void *base0,
+         size_t nmemb, register size_t size,
+         register int (*compar)(const void *, const void *))
+{
+       register const char *base = (const char *) base0;
+       register int lim, cmp;
+       register const void *p;
+
+       for (lim = nmemb; lim != 0; lim >>= 1) {
+               p = base + (lim >> 1) * size;
+               cmp = (*compar)(key, p);
+               if (cmp == 0)
+                       return (void *)p;
+               if (cmp > 0) {  /* key > p: move right */
+                       base = (const char *)p + size;
+                       lim--;
+               } /* else move left */
+       }
+       return (NULL);
+}
diff --git a/libiberty/bzero.c b/libiberty/bzero.c
new file mode 100644 (file)
index 0000000..44ad73d
--- /dev/null
@@ -0,0 +1,23 @@
+/* Portable version of bzero for systems without it.
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count})
+
+Zeros @var{count} bytes starting at @var{mem}.  Use of this function
+is deprecated in favor of @code{memset}.
+
+@end deftypefn
+
+*/
+
+#include <stddef.h>
+
+extern void *memset(void *, int, size_t);
+
+void
+bzero (void *to, size_t count)
+{
+  memset (to, 0, count);
+}
diff --git a/libiberty/calloc.c b/libiberty/calloc.c
new file mode 100644 (file)
index 0000000..f4bd27b
--- /dev/null
@@ -0,0 +1,34 @@
+/* calloc -- allocate memory which has been initialized to zero.
+   This function is in the public domain. */
+
+/*
+
+@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
+
+Uses @code{malloc} to allocate storage for @var{nelem} objects of
+@var{elsize} bytes each, then zeros the memory.
+
+@end deftypefn
+
+*/
+#include "ansidecl.h"
+#include <stddef.h>
+
+/* For systems with larger pointers than ints, this must be declared.  */
+PTR malloc (size_t);
+void bzero (PTR, size_t);
+
+PTR
+calloc (size_t nelem, size_t elsize)
+{
+  register PTR ptr;  
+
+  if (nelem == 0 || elsize == 0)
+    nelem = elsize = 1;
+  
+  ptr = malloc (nelem * elsize);
+  if (ptr) bzero (ptr, nelem * elsize);
+  
+  return ptr;
+}
diff --git a/libiberty/choose-temp.c b/libiberty/choose-temp.c
new file mode 100644 (file)
index 0000000..b1c2e5b
--- /dev/null
@@ -0,0 +1,71 @@
+/* Utility to pick a temporary filename prefix.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>     /* May get P_tmpdir.  */
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "libiberty.h"
+extern char *choose_tmpdir (void);
+
+/* Name of temporary file.
+   mktemp requires 6 trailing X's.  */
+#define TEMP_FILE "ccXXXXXX"
+#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
+
+/*
+
+@deftypefn Extension char* choose_temp_base (void)
+
+Return a prefix for temporary file names or @code{NULL} if unable to
+find one.  The current directory is chosen if all else fails so the
+program is exited if a temporary directory can't be found (@code{mktemp}
+fails).  The buffer for the result is obtained with @code{xmalloc}.
+
+This function is provided for backwards compatibility only.  Its use is
+not recommended.
+
+@end deftypefn
+
+*/
+
+char *
+choose_temp_base (void)
+{
+  const char *base = choose_tmpdir ();
+  char *temp_filename;
+  int len;
+
+  len = strlen (base);
+  temp_filename = XNEWVEC (char, len + TEMP_FILE_LEN + 1);
+  strcpy (temp_filename, base);
+  strcpy (temp_filename + len, TEMP_FILE);
+
+  if (mktemp (temp_filename) == 0)
+    abort ();
+  return temp_filename;
+}
diff --git a/libiberty/clock.c b/libiberty/clock.c
new file mode 100644 (file)
index 0000000..07d902e
--- /dev/null
@@ -0,0 +1,103 @@
+/* ANSI-compatible clock function.
+   Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/*
+
+@deftypefn Supplemental long clock (void)
+
+Returns an approximation of the CPU time used by the process as a
+@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
+number of seconds used.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+
+#ifdef HAVE_GETRUSAGE
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+#ifdef HAVE_TIMES
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/times.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef _SC_CLK_TCK
+#define GNU_HZ  sysconf(_SC_CLK_TCK)
+#else
+#ifdef HZ
+#define GNU_HZ  HZ
+#else
+#ifdef CLOCKS_PER_SEC
+#define GNU_HZ  CLOCKS_PER_SEC
+#endif
+#endif
+#endif
+
+/* FIXME: should be able to declare as clock_t. */
+
+long
+clock (void)
+{
+#ifdef HAVE_GETRUSAGE
+  struct rusage rusage;
+
+  getrusage (0, &rusage);
+  return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
+         + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
+#else
+#ifdef HAVE_TIMES
+  struct tms tms;
+
+  times (&tms);
+  return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
+#else
+#ifdef VMS
+  struct
+    {
+      int proc_user_time;
+      int proc_system_time;
+      int child_user_time;
+      int child_system_time;
+    } vms_times;
+
+  times (&vms_times);
+  return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
+#else
+  /* A fallback, if nothing else available. */
+  return 0;
+#endif /* VMS */
+#endif /* HAVE_TIMES */
+#endif /* HAVE_GETRUSAGE */
+}
+
diff --git a/libiberty/concat.c b/libiberty/concat.c
new file mode 100644 (file)
index 0000000..1f329ea
--- /dev/null
@@ -0,0 +1,232 @@
+/* Concatenate variable number of strings.
+   Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc.
+   Written by Fred Fish @ Cygnus Support
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+
+/*
+
+@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL})
+
+Concatenate zero or more of strings and return the result in freshly
+@code{xmalloc}ed memory.  Returns @code{NULL} if insufficient memory is
+available.  The argument list is terminated by the first @code{NULL}
+pointer encountered.  Pointers to empty strings are ignored.
+
+@end deftypefn
+
+NOTES
+
+       This function uses xmalloc() which is expected to be a front end
+       function to malloc() that deals with low memory situations.  In
+       typical use, if malloc() returns NULL then xmalloc() diverts to an
+       error handler routine which never returns, and thus xmalloc will
+       never return a NULL pointer.  If the client application wishes to
+       deal with low memory situations itself, it should supply an xmalloc
+       that just directly invokes malloc and blindly returns whatever
+       malloc returns.
+
+*/
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+#include <sys/types.h>         /* size_t */
+
+#include <stdarg.h>
+
+# if HAVE_STRING_H
+#  include <string.h>
+# else
+#  if HAVE_STRINGS_H
+#   include <strings.h>
+#  endif
+# endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+static inline unsigned long vconcat_length (const char *, va_list);
+static inline unsigned long
+vconcat_length (const char *first, va_list args)
+{
+  unsigned long length = 0;
+  const char *arg;
+
+  for (arg = first; arg ; arg = va_arg (args, const char *))
+    length += strlen (arg);
+
+  return length;
+}
+
+static inline char *
+vconcat_copy (char *dst, const char *first, va_list args)
+{
+  char *end = dst;
+  const char *arg;
+
+  for (arg = first; arg ; arg = va_arg (args, const char *))
+    {
+      unsigned long length = strlen (arg);
+      memcpy (end, arg, length);
+      end += length;
+    }
+  *end = '\000';
+
+  return dst;
+}
+
+/* @undocumented concat_length */
+
+unsigned long
+concat_length (const char *first, ...)
+{
+  unsigned long length;
+
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, const char *, first);
+  length = vconcat_length (first, args);
+  VA_CLOSE (args);
+
+  return length;
+}
+
+/* @undocumented concat_copy */
+
+char *
+concat_copy (char *dst, const char *first, ...)
+{
+  char *save_dst;
+
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, char *, dst);
+  VA_FIXEDARG (args, const char *, first);
+  vconcat_copy (dst, first, args);
+  save_dst = dst; /* With K&R C, dst goes out of scope here.  */
+  VA_CLOSE (args);
+
+  return save_dst;
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+char *libiberty_concat_ptr;
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/* @undocumented concat_copy2 */
+
+char *
+concat_copy2 (const char *first, ...)
+{
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, const char *, first);
+  vconcat_copy (libiberty_concat_ptr, first, args);
+  VA_CLOSE (args);
+
+  return libiberty_concat_ptr;
+}
+
+char *
+concat (const char *first, ...)
+{
+  char *newstr;
+
+  /* First compute the size of the result and get sufficient memory.  */
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, const char *, first);
+  newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
+  VA_CLOSE (args);
+
+  /* Now copy the individual pieces to the result string. */
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, const char *, first);
+  vconcat_copy (newstr, first, args);
+  VA_CLOSE (args);
+
+  return newstr;
+}
+
+/*
+
+@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL})
+
+Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
+is freed after the string is created.  This is intended to be useful
+when you're extending an existing string or building up a string in a
+loop:
+
+@example
+  str = reconcat (str, "pre-", str, NULL);
+@end example
+
+@end deftypefn
+
+*/
+
+char *
+reconcat (char *optr, const char *first, ...)
+{
+  char *newstr;
+
+  /* First compute the size of the result and get sufficient memory.  */
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, char *, optr);
+  VA_FIXEDARG (args, const char *, first);
+  newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
+  VA_CLOSE (args);
+
+  /* Now copy the individual pieces to the result string. */
+  VA_OPEN (args, first);
+  VA_FIXEDARG (args, char *, optr);
+  VA_FIXEDARG (args, const char *, first);
+  vconcat_copy (newstr, first, args);
+  if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C.  */
+    free (optr);
+  VA_CLOSE (args);
+
+  return newstr;
+}
+
+#ifdef MAIN
+#define NULLP (char *)0
+
+/* Simple little test driver. */
+
+#include <stdio.h>
+
+int
+main (void)
+{
+  printf ("\"\" = \"%s\"\n", concat (NULLP));
+  printf ("\"a\" = \"%s\"\n", concat ("a", NULLP));
+  printf ("\"ab\" = \"%s\"\n", concat ("a", "b", NULLP));
+  printf ("\"abc\" = \"%s\"\n", concat ("a", "b", "c", NULLP));
+  printf ("\"abcd\" = \"%s\"\n", concat ("ab", "cd", NULLP));
+  printf ("\"abcde\" = \"%s\"\n", concat ("ab", "c", "de", NULLP));
+  printf ("\"abcdef\" = \"%s\"\n", concat ("", "a", "", "bcd", "ef", NULLP));
+  return 0;
+}
+
+#endif
diff --git a/libiberty/config.h-vms b/libiberty/config.h-vms
new file mode 100644 (file)
index 0000000..ccac6a2
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef NEED_strerror
+#define NEED_strerror
+#endif
+#ifndef NEED_basename
+#define NEED_basename
+#endif
+#ifndef NEED_psignal
+#define NEED_psignal
+#endif
+#ifndef NEED_on_exit
+#define NEED_on_exit
+#endif
+
diff --git a/libiberty/config.in b/libiberty/config.in
new file mode 100644 (file)
index 0000000..8bd10cd
--- /dev/null
@@ -0,0 +1,444 @@
+/* config.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems. */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if you have the <alloca.h> header file. */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* Define to 1 if you have the `atexit' function. */
+#undef HAVE_ATEXIT
+
+/* Define to 1 if you have the `basename' function. */
+#undef HAVE_BASENAME
+
+/* Define to 1 if you have the `bcmp' function. */
+#undef HAVE_BCMP
+
+/* Define to 1 if you have the `bcopy' function. */
+#undef HAVE_BCOPY
+
+/* Define to 1 if you have the `bsearch' function. */
+#undef HAVE_BSEARCH
+
+/* Define to 1 if you have the `bzero' function. */
+#undef HAVE_BZERO
+
+/* Define to 1 if you have the `calloc' function. */
+#undef HAVE_CALLOC
+
+/* Define to 1 if you have the `canonicalize_file_name' function. */
+#undef HAVE_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if you have the `clock' function. */
+#undef HAVE_CLOCK
+
+/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ASPRINTF
+
+/* Define to 1 if you have the declaration of `basename', and to 0 if you
+   don't. */
+#undef HAVE_DECL_BASENAME
+
+/* Define to 1 if you have the declaration of `calloc', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CALLOC
+
+/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
+#undef HAVE_DECL_FFS
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETENV
+
+/* Define to 1 if you have the declaration of `getopt', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETOPT
+
+/* Define to 1 if you have the declaration of `malloc', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MALLOC
+
+/* Define to 1 if you have the declaration of `realloc', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REALLOC
+
+/* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SBRK
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRVERSCMP
+
+/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VASPRINTF
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VSNPRINTF
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `ffs' function. */
+#undef HAVE_FFS
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
+/* Define to 1 if you have the `getsysinfo' function. */
+#undef HAVE_GETSYSINFO
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `index' function. */
+#undef HAVE_INDEX
+
+/* Define to 1 if you have the `insque' function. */
+#undef HAVE_INSQUE
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */
+#undef HAVE_MACHINE_HAL_SYSINFO_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the `memchr' function. */
+#undef HAVE_MEMCHR
+
+/* Define to 1 if you have the `memcmp' function. */
+#undef HAVE_MEMCMP
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mkstemps' function. */
+#undef HAVE_MKSTEMPS
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `on_exit' function. */
+#undef HAVE_ON_EXIT
+
+/* Define to 1 if you have the `psignal' function. */
+#undef HAVE_PSIGNAL
+
+/* Define to 1 if you have the `pstat_getdynamic' function. */
+#undef HAVE_PSTAT_GETDYNAMIC
+
+/* Define to 1 if you have the `pstat_getstatic' function. */
+#undef HAVE_PSTAT_GETSTATIC
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the `random' function. */
+#undef HAVE_RANDOM
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `rename' function. */
+#undef HAVE_RENAME
+
+/* Define to 1 if you have the `rindex' function. */
+#undef HAVE_RINDEX
+
+/* Define to 1 if you have the `sbrk' function. */
+#undef HAVE_SBRK
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `sigsetmask' function. */
+#undef HAVE_SIGSETMASK
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+#undef HAVE_STDIO_EXT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `stpncpy' function. */
+#undef HAVE_STPNCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* 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 `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strsignal' function. */
+#undef HAVE_STRSIGNAL
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtod' function. */
+#undef HAVE_STRTOD
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if you have the `strverscmp' function. */
+#undef HAVE_STRVERSCMP
+
+/* Define to 1 if you have the `sysconf' function. */
+#undef HAVE_SYSCONF
+
+/* Define to 1 if you have the `sysctl' function. */
+#undef HAVE_SYSCTL
+
+/* Define to 1 if you have the `sysmp' function. */
+#undef HAVE_SYSMP
+
+/* Define if you have the sys_errlist variable. */
+#undef HAVE_SYS_ERRLIST
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#undef HAVE_SYS_FILE_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define if you have the sys_nerr variable. */
+#undef HAVE_SYS_NERR
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/pstat.h> header file. */
+#undef HAVE_SYS_PSTAT_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define if you have the sys_siglist variable. */
+#undef HAVE_SYS_SIGLIST
+
+/* 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/sysctl.h> header file. */
+#undef HAVE_SYS_SYSCTL_H
+
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+#undef HAVE_SYS_SYSINFO_H
+
+/* Define to 1 if you have the <sys/sysmp.h> header file. */
+#undef HAVE_SYS_SYSMP_H
+
+/* Define to 1 if you have the <sys/systemcfg.h> header file. */
+#undef HAVE_SYS_SYSTEMCFG_H
+
+/* Define to 1 if you have the <sys/table.h> header file. */
+#undef HAVE_SYS_TABLE_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the `table' function. */
+#undef HAVE_TABLE
+
+/* Define to 1 if you have the `times' function. */
+#undef HAVE_TIMES
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the `tmpnam' function. */
+#undef HAVE_TMPNAM
+
+/* Define if you have the \`uintptr_t' type. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vasprintf' function. */
+#undef HAVE_VASPRINTF
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
+/* Define to 1 if you have the `vfprintf' function. */
+#undef HAVE_VFPRINTF
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `vsprintf' function. */
+#undef HAVE_VSPRINTF
+
+/* Define to 1 if you have the `wait3' function. */
+#undef HAVE_WAIT3
+
+/* Define to 1 if you have the `wait4' function. */
+#undef HAVE_WAIT4
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* Define to 1 if you have the `_doprnt' function. */
+#undef HAVE__DOPRNT
+
+/* Define if you have the _system_configuration variable. */
+#undef HAVE__SYSTEM_CONFIGURATION
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define if canonicalize_file_name is not declared in system header files. */
+#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME
+
+/* Define if errno must be declared even when <errno.h> is included. */
+#undef NEED_DECLARATION_ERRNO
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* Define if you know the direction of stack growth for your system; otherwise
+   it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows
+   toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses
+   STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to an unsigned 64-bit type available in the compiler. */
+#undef UNSIGNED_64BIT_TYPE
+
+/* Define to 1 if your processor stores words with the most significant byte
+   first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned long' if <sys/types.h> does not define. */
+#undef uintptr_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
diff --git a/libiberty/config/mh-aix b/libiberty/config/mh-aix
new file mode 100644 (file)
index 0000000..6b64505
--- /dev/null
@@ -0,0 +1,9 @@
+# This file is only needed by AIX 3.1.
+HDEFINES = -D__IEEE_BIG_ENDIAN
+
+# Most releases of AIX 3.1 include an incorrect internal version of copysign
+# in libc.a for use by some libc public functions including modf.  The public
+# version of copysign in libm.a is usable.  For the sake of libg++ (which
+# uses modf), we add copysign here.  Supposedly, this problem is fixed in AIX
+# 3.1.8 and above, including all releases of AIX 3.2.
+EXTRA_OFILES = copysign.o
diff --git a/libiberty/config/mh-cxux7 b/libiberty/config/mh-cxux7
new file mode 100644 (file)
index 0000000..a924b08
--- /dev/null
@@ -0,0 +1 @@
+HDEFINES = -DHARRIS_FLOAT_FORMAT
diff --git a/libiberty/config/mh-fbsd21 b/libiberty/config/mh-fbsd21
new file mode 100644 (file)
index 0000000..1375a78
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_OFILES=vasprintf.o
diff --git a/libiberty/config/mh-openedition b/libiberty/config/mh-openedition
new file mode 100644 (file)
index 0000000..8de8ed1
--- /dev/null
@@ -0,0 +1,3 @@
+HDEFINES = -D_ALL_SOURCE -DLE370
+CC=c89
+
diff --git a/libiberty/config/mh-windows b/libiberty/config/mh-windows
new file mode 100644 (file)
index 0000000..3ff5f79
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o
diff --git a/libiberty/configure b/libiberty/configure
new file mode 100755 (executable)
index 0000000..51ee4ec
--- /dev/null
@@ -0,0 +1,10596 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 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 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  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
+
+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
+  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=.
+  case $as_dir in
+        /*)
+          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=:
+  # Zsh 3.x and 4.x performs 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=:
+  # Zsh 3.x and 4.x performs 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
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  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 autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+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`
+
+#
+# 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}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="xmalloc.c"
+# 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
+libiberty_topdir
+MAINT
+NOTMAINT
+MAKEINFO
+BUILD_INFO
+PERL
+HAVE_PERL
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+AR
+RANLIB
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+CPP
+ac_libiberty_warn_cflags
+NO_MINUS_C_MINUS_O
+OUTPUT_OPTION
+GREP
+EGREP
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+LIBOBJS
+CHECK
+target_header_dir
+pexecute
+INSTALL_DEST
+LTLIBOBJS'
+ac_subst_files='host_makefile_frag'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# 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'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+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
+    ac_prev=
+    continue
+  fi
+
+  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_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -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-\(.*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=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-\([^=]*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -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 ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --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)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --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 ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    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
+   { (exit 1); exit 1; }; }
+    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
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+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
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+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=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { 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'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+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.
+    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
+  fi
+fi
+
+ac_tool_prefix=
+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 .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { 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 the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$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'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       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.
+#
+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 this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+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]
+  --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/PACKAGE]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --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
+  --enable-multilib       build many library versions (default)
+  --enable-install-libiberty       Install headers for end users
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-target-subdir=SUBDIR      Configuring in a subdirectory for target
+  --with-build-subdir=SUBDIR       Configuring in a subdirectory for build
+  --with-cross-host=HOST           Configuring with a cross compiler
+  --with-newlib                    Configuring with newlib
+
+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>
+  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
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+    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 || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 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
+fi
+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 $as_me, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 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`
+/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`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# 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: 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.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    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"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 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 -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  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;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+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;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 $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
+  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;}
+      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;}
+      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=:
+      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=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  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;}
+   { (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
+
+
+
+
+# This works around the fact that libtool configuration may change LD
+# for this particular configuration, but some shells, instead of
+# keeping the changes in LD private, export them just because LD is
+# exported.  We don't use libtool yet, but some day we might, so...
+ORIGINAL_LD_FOR_MULTILIBS=$LD
+
+
+# Check whether --with-target-subdir was given.
+if test "${with_target_subdir+set}" = set; then
+  withval=$with_target_subdir;
+fi
+
+
+# Check whether --with-build-subdir was given.
+if test "${with_build_subdir+set}" = set; then
+  withval=$with_build_subdir;
+fi
+
+
+# Check whether --with-cross-host was given.
+if test "${with_cross_host+set}" = set; then
+  withval=$with_cross_host;
+fi
+
+
+# Check whether --with-newlib was given.
+if test "${with_newlib+set}" = set; then
+  withval=$with_newlib;
+fi
+
+
+if test "${srcdir}" = "."; then
+  if test -n "${with_build_subdir}"; then
+    libiberty_topdir="${srcdir}/../.."
+    with_target_subdir=
+  elif test -z "${with_target_subdir}"; then
+    libiberty_topdir="${srcdir}/.."
+  else
+    if test "${with_target_subdir}" != "."; then
+      libiberty_topdir="${srcdir}/${with_multisrctop}../.."
+    else
+      libiberty_topdir="${srcdir}/${with_multisrctop}.."
+    fi
+  fi
+else
+  libiberty_topdir="${srcdir}/.."
+fi
+
+ac_aux_dir=
+for ac_dir in ../config-aux "$srcdir"/../config-aux; 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
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  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 ../config-aux \"$srcdir\"/../config-aux" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ../config-aux \"$srcdir\"/../config-aux" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# 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.
+
+
+
+
+
+{ 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 was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; maintainer_mode=$enableval
+else
+  maintainer_mode=no
+fi
+
+
+{ echo "$as_me:$LINENO: result: $maintainer_mode" >&5
+echo "${ECHO_T}$maintainer_mode" >&6; }
+
+if test "$maintainer_mode" = "yes"; then
+  MAINT=''
+  NOTMAINT='#'
+else
+  MAINT='#'
+  NOTMAINT=''
+fi
+
+# Do we have a single-tree copy of texinfo?  Even if we do, we can't
+# rely on it - libiberty is built before texinfo.
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; 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_MAKEINFO+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$MAKEINFO"; then
+  ac_cv_prog_MAKEINFO="$MAKEINFO" # 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_MAKEINFO="makeinfo"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+MAKEINFO=$ac_cv_prog_MAKEINFO
+if test -n "$MAKEINFO"; then
+  { echo "$as_me:$LINENO: result: $MAKEINFO" >&5
+echo "${ECHO_T}$MAKEINFO" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test "x$MAKEINFO" = "x"; then
+    MAKEINFO="@echo makeinfo missing; true"
+    BUILD_INFO=
+else
+    BUILD_INFO=info
+    case "$MAKEINFO" in
+      */missing\ makeinfo*)
+       BUILD_INFO=
+       { echo "$as_me:$LINENO: WARNING:
+*** Makeinfo is missing. Info documentation will not be built." >&5
+echo "$as_me: WARNING:
+*** Makeinfo is missing. Info documentation will not be built." >&2;}
+        ;;
+      *)
+       case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
+         x*\ [1-3].* )
+           MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true"
+           BUILD_INFO=
+           { echo "$as_me:$LINENO: WARNING:
+*** Makeinfo is too old. Info documentation will not be built." >&5
+echo "$as_me: WARNING:
+*** Makeinfo is too old. Info documentation will not be built." >&2;}
+         ;;
+       esac
+       ;;
+    esac
+fi
+
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; 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_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # 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_PERL="perl"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  { echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test x"$PERL" = x""; then
+  HAVE_PERL='#'
+else
+  HAVE_PERL=''
+fi
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/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_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 &&
+  { { 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=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_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; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+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
+
+
+{ 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
+  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` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+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
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; 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_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_ac_ct_AR="ar"
+    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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_ac_ct_RANLIB="ranlib"
+    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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+# Add --enable-multilib to configure.
+# Default to --enable-multilib
+# Check whether --enable-multilib was given.
+if test "${enable_multilib+set}" = set; then
+  enableval=$enable_multilib; case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5
+echo "$as_me: error: bad value $enableval for multilib option" >&2;}
+   { (exit 1); exit 1; }; } ;;
+ esac
+else
+  multilib=yes
+fi
+
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+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
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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.
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+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
+    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
+    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.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+See \`config.log' for more details." >&5
+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`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+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
+# FIXME: Cleanup?
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  gcc_no_link=no
+else
+  gcc_no_link=yes
+fi
+
+if test x$gcc_no_link = xyes; then
+  # Setting cross_compile will disable run tests; it will
+  # also disable AC_CHECK_FILE but that's generally
+  # correct if we can't link.
+  cross_compiling=yes
+  EXEEXT=
+else
+  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
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out 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[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # 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 | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        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
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { 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
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# 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; }
+# 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'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  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.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+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; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# 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 { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+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 | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { 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
+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; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+fi
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  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 | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  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
+See \`config.log' for more details." >&5
+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; }
+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; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+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`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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 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; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=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 <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* 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 -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 -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);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&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
+
+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
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # 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
+  # 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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&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
+
+
+ac_c_preproc_warn_flag=yes
+
+
+ac_libiberty_warn_cflags=
+save_CFLAGS="$CFLAGS"
+for option in -W -Wall -Wwrite-strings -Wc++-compat \
+                         -Wstrict-prototypes; do
+  as_acx_Woption=`echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
+
+  { echo "$as_me:$LINENO: checking whether $CC supports $option" >&5
+echo $ECHO_N "checking whether $CC supports $option... $ECHO_C" >&6; }
+if { as_var=$as_acx_Woption; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  CFLAGS="$option"
+    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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_acx_Woption=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_acx_Woption=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+ac_res=`eval echo '${'$as_acx_Woption'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+  if test `eval echo '${'$as_acx_Woption'}'` = yes; then
+  ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$option"
+fi
+
+  done
+CFLAGS="$save_CFLAGS"
+
+if test "$GCC" = yes; then
+  { echo "$as_me:$LINENO: checking whether $CC supports -pedantic " >&5
+echo $ECHO_N "checking whether $CC supports -pedantic ... $ECHO_C" >&6; }
+if test "${acx_cv_prog_cc_pedantic_+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  save_CFLAGS="$CFLAGS"
+CFLAGS="-pedantic "
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  acx_cv_prog_cc_pedantic_=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       acx_cv_prog_cc_pedantic_=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
+fi
+{ echo "$as_me:$LINENO: result: $acx_cv_prog_cc_pedantic_" >&5
+echo "${ECHO_T}$acx_cv_prog_cc_pedantic_" >&6; }
+if test $acx_cv_prog_cc_pedantic_ = yes; then
+  ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }-pedantic "
+fi
+
+
+fi
+
+
+
+if test "x$CC" != xcc; then
+  { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; }
+fi
+set dummy $CC; ac_cc=`echo $2 |
+                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+   test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+      then
+       # cc works too.
+       :
+      else
+       # cc exists but doesn't like -o.
+       eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# autoconf is lame and doesn't give us any substitution variable for this.
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
+  NO_MINUS_C_MINUS_O=yes
+else
+  OUTPUT_OPTION='-o $@'
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_inline=$ac_kw
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name 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
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+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
+rm -f conftest*
+
+fi
+
+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>
+
+_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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <$ac_header>
+_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 "echo \"\$as_me:$LINENO: $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
+  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
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  eval "$as_ac_Header=no"
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if  ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+       && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
+ bogus endian macros
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_bigendian=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_bigendian=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       # It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+  # try to guess the endianness by grepping values into an object file
+  ac_cv_c_bigendian=unknown
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+  ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+  if test "$ac_cv_c_bigendian" = unknown; then
+    ac_cv_c_bigendian=no
+  else
+    # finding both strings is unlikely to happen, but who knows?
+    ac_cv_c_bigendian=unknown
+  fi
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+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 ()
+{
+
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long int l;
+    char c[sizeof (long int)];
+  } u;
+  u.l = 1;
+  return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
+case $ac_cv_c_bigendian in
+  yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+  no)
+     ;;
+  *)
+    { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+
+
+
+
+ac_config_headers="$ac_config_headers config.h:config.in"
+
+
+
+# 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
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+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 { 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.
+           :
+         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
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+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.  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 value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# 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}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+# Don't build the shared library for build.
+if [ -n "${with_build_subdir}" ]; then
+  enable_shared=no
+fi
+
+frag=
+case "${host}" in
+  rs6000-ibm-aix3.1 | rs6000-ibm-aix)
+                        frag=mh-aix ;;
+  *-*-cxux7*)          frag=mh-cxux7 ;;
+  *-*-freebsd2.1.*)    frag=mh-fbsd21 ;;
+  *-*-freebsd2.2.[012])        frag=mh-fbsd21 ;;
+  i370-*-opened*)       frag=mh-openedition ;;
+  i[34567]86-*-windows*)       frag=mh-windows ;;
+esac
+
+if [ -n "${frag}" ]; then
+  frags=${libiberty_topdir}/libiberty/config/$frag
+else
+  frags=
+fi
+
+# If they didn't specify --enable-shared, don't generate shared libs.
+case "${enable_shared}" in
+  yes) shared=yes ;;
+  no) shared=no ;;
+  "") shared=no ;;
+  *) shared=yes ;;
+esac
+if [ "${shared}" = "yes" ]; then
+  frag=
+  case "${host}" in
+    *-*-cygwin*)       ;;
+    alpha*-*-linux*)   frag=mh-elfalphapic ;;
+    arm*-*-*)          frag=mh-armpic ;;
+    hppa*-*-*)         frag=mh-papic ;;
+    i[34567]86-*-* | x86_64-*-*)
+                       frag=mh-x86pic ;;
+    powerpc*-*-aix*)   ;;
+    powerpc*-*-*)      frag=mh-ppcpic ;;
+    sparc*-*-*)                frag=mh-sparcpic ;;
+    s390*-*-*)         frag=mh-s390pic ;;
+    *)                 frag=mh-${host_cpu}pic ;;
+  esac
+  if [ -n "${frag}" ]; then
+    frags="${frags} ${libiberty_topdir}/config/${frag}"
+  fi
+fi
+
+echo "# Warning: this fragment is automatically generated" > temp-frag
+
+for frag in ${frags}; do
+  if [ -f ${frag} ]; then
+    echo "Appending ${frag} to xhost-mkfrag"
+    echo "# Following fragment copied from ${frag}" >> temp-frag
+    cat ${frag} >> temp-frag
+  fi
+done
+
+# record if we want to build shared libs.
+if [ "${shared}" = "yes" ]; then
+  echo enable_shared = yes >> temp-frag
+else
+  echo enable_shared = no >> temp-frag
+fi
+
+frag=xhost-mkfrag
+${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag
+
+host_makefile_frag=${frag}
+
+
+# It's OK to check for header files.  Although the compiler may not be
+# able to link anything, it had better be able to at least compile
+# something.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <$ac_header>
+_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 "echo \"\$as_me:$LINENO: $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
+  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
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  eval "$as_ac_Header=no"
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_wait_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main ()
+{
+  int s;
+  wait (&s);
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_sys_wait_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_sys_wait_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_WAIT_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_time=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+{ echo "$as_me:$LINENO: checking whether errno must be declared" >&5
+echo $ECHO_N "checking whether errno must be declared... $ECHO_C" >&6; }
+if test "${libiberty_cv_declare_errno+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <errno.h>
+int
+main ()
+{
+int x = errno;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  libiberty_cv_declare_errno=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       libiberty_cv_declare_errno=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $libiberty_cv_declare_errno" >&5
+echo "${ECHO_T}$libiberty_cv_declare_errno" >&6; }
+if test $libiberty_cv_declare_errno = yes
+then
+cat >>confdefs.h <<\_ACEOF
+#define NEED_DECLARATION_ERRNO 1
+_ACEOF
+
+fi
+
+
+# Determine the size of an int for struct fibnode.
+{ echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6; }
+if test "${ac_cv_type_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef int ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_int=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  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
+   typedef int ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi ;;
+esac
+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
+   typedef int ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_int" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+
+{ echo "$as_me:$LINENO: checking for uintptr_t" >&5
+echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_uintptr_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef uintptr_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_uintptr_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_uintptr_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
+echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
+if test $ac_cv_type_uintptr_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define uintptr_t unsigned long
+_ACEOF
+
+fi
+
+
+# Look for a 64-bit type.
+{ echo "$as_me:$LINENO: checking for a 64-bit type" >&5
+echo $ECHO_N "checking for a 64-bit type... $ECHO_C" >&6; }
+if test "${liberty_cv_uint64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+int
+main ()
+{
+extern uint64_t foo;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  liberty_cv_uint64=uint64_t
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+int
+main ()
+{
+extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  liberty_cv_uint64="unsigned long"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+int
+main ()
+{
+extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  liberty_cv_uint64="unsigned long long"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       liberty_cv_uint64=none
+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 core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+{ echo "$as_me:$LINENO: result: $liberty_cv_uint64" >&5
+echo "${ECHO_T}$liberty_cv_uint64" >&6; }
+if test "$liberty_cv_uint64" != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define UNSIGNED_64BIT_TYPE $liberty_cv_uint64
+_ACEOF
+
+fi
+
+# Given the above check, we always have uintptr_t or a fallback
+# definition.  So define HAVE_UINTPTR_T in case any imported code
+# relies on it.
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for pid_t" >&5
+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_pid_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef pid_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_pid_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_pid_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+echo "${ECHO_T}$ac_cv_type_pid_t" >&6; }
+if test $ac_cv_type_pid_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+
+# This is the list of functions which libiberty will provide if they
+# are not available on the host.
+
+funcs="asprintf"
+funcs="$funcs atexit"
+funcs="$funcs basename"
+funcs="$funcs bcmp"
+funcs="$funcs bcopy"
+funcs="$funcs bsearch"
+funcs="$funcs bzero"
+funcs="$funcs calloc"
+funcs="$funcs clock"
+funcs="$funcs ffs"
+funcs="$funcs getcwd"
+funcs="$funcs getpagesize"
+funcs="$funcs gettimeofday"
+funcs="$funcs index"
+funcs="$funcs insque"
+funcs="$funcs memchr"
+funcs="$funcs memcmp"
+funcs="$funcs memcpy"
+funcs="$funcs memmove"
+funcs="$funcs mempcpy"
+funcs="$funcs memset"
+funcs="$funcs mkstemps"
+funcs="$funcs putenv"
+funcs="$funcs random"
+funcs="$funcs rename"
+funcs="$funcs rindex"
+funcs="$funcs setenv"
+funcs="$funcs snprintf"
+funcs="$funcs sigsetmask"
+funcs="$funcs stpcpy"
+funcs="$funcs stpncpy"
+funcs="$funcs strcasecmp"
+funcs="$funcs strchr"
+funcs="$funcs strdup"
+funcs="$funcs strncasecmp"
+funcs="$funcs strndup"
+funcs="$funcs strrchr"
+funcs="$funcs strstr"
+funcs="$funcs strtod"
+funcs="$funcs strtol"
+funcs="$funcs strtoul"
+funcs="$funcs strverscmp"
+funcs="$funcs tmpnam"
+funcs="$funcs vasprintf"
+funcs="$funcs vfprintf"
+funcs="$funcs vprintf"
+funcs="$funcs vsnprintf"
+funcs="$funcs vsprintf"
+funcs="$funcs waitpid"
+
+# Also in the old function.def file: alloca, vfork, getopt.
+
+vars="sys_errlist sys_nerr sys_siglist"
+
+checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
+checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp"
+checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking"
+
+# These are neither executed nor required, but they help keep
+# autoheader happy without adding a bunch of text to acconfig.h.
+if test "x" = "y"; then
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \
+  getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \
+  memmove mempcpy memset putenv random rename rindex sigsetmask \
+  strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \
+  strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \
+  vsprintf waitpid getrusage on_exit psignal strerror strsignal \
+  sysconf times sbrk gettimeofday ffs snprintf vsnprintf \
+  pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \
+  realpath canonicalize_file_name __fsetlocking
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  { echo "$as_me:$LINENO: checking whether basename is declared" >&5
+echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_basename+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 basename
+  (void) basename;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_basename=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_basename=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5
+echo "${ECHO_T}$ac_cv_have_decl_basename" >&6; }
+if test $ac_cv_have_decl_basename = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether ffs is declared" >&5
+echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_ffs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 ffs
+  (void) ffs;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_ffs=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_ffs=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5
+echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6; }
+if test $ac_cv_have_decl_ffs = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFS 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFS 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
+echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_asprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 asprintf
+  (void) asprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_asprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_asprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6; }
+if test $ac_cv_have_decl_asprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
+echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_vasprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 vasprintf
+  (void) vasprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_vasprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_vasprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6; }
+if test $ac_cv_have_decl_vasprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
+echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_snprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 snprintf
+  (void) snprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_snprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_snprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; }
+if test $ac_cv_have_decl_snprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
+echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_vsnprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 vsnprintf
+  (void) vsnprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_vsnprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_vsnprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; }
+if test $ac_cv_have_decl_vsnprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF 0
+_ACEOF
+
+
+fi
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_ERRLIST 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_NERR 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_SIGLIST 1
+_ACEOF
+
+fi
+
+# For each of these functions, if the host does not provide the
+# function we want to put FN.o in LIBOBJS, and if the host does
+# provide the function, we want to define HAVE_FN in config.h.
+
+setobjs=
+CHECK=
+target_header_dir=
+if test -n "${with_target_subdir}"; then
+
+  # We are being configured as a target library.  AC_REPLACE_FUNCS
+  # may not work correctly, because the compiler may not be able to
+  # link executables.  Note that we may still be being configured
+  # native.
+
+  # If we are being configured for newlib, we know which functions
+  # newlib provide and which ones we will be expected to provide.
+
+  if test "x${with_newlib}" = "xyes"; then
+    case " $LIBOBJS " in
+  *" asprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" basename.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS basename.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" insque.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS insque.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" random.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS random.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strdup.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" vasprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
+ ;;
+esac
+
+
+    for f in $funcs; do
+      case "$f" in
+       asprintf | basename | insque | random | strdup | vasprintf)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+         ;;
+      esac
+    done
+
+    # newlib doesnt provide any of the variables in $vars, so we
+    # dont have to check them here.
+
+    # Of the functions in $checkfuncs, newlib only has strerror.
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
+
+
+    setobjs=yes
+
+  fi
+
+  # If we are being configured for Mingw, we know which functions
+  # Mingw provides and which ones we will be expected to provide.
+
+  case "${host}" in
+  *-*-mingw*)
+    case " $LIBOBJS " in
+  *" asprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" basename.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS basename.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" bcmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS bcmp.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" bcopy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS bcopy.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" bzero.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS bzero.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" clock.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS clock.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" ffs.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS ffs.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" getpagesize.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" index.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS index.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" insque.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS insque.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" mempcpy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS mempcpy.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" mkstemps.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS mkstemps.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" random.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS random.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" rindex.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS rindex.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" sigsetmask.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS sigsetmask.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" stpcpy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS stpcpy.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" stpncpy.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS stpncpy.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strndup.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strndup.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strverscmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strverscmp.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" vasprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" waitpid.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS waitpid.$ac_objext"
+ ;;
+esac
+
+
+    for f in $funcs; do
+      case "$f" in
+       asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+         ;;
+      esac
+    done
+
+    # Mingw doesnt provide any of the variables in $vars, so we
+    # dont have to check them here.
+
+    # Of the functions in $checkfuncs, Mingw only has strerror.
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
+
+
+    setobjs=yes
+    ;;
+
+  esac
+
+  # We may wish to install the target headers somewhere.
+  # Check whether --enable-install-libiberty was given.
+if test "${enable_install_libiberty+set}" = set; then
+  enableval=$enable_install_libiberty; enable_install_libiberty=$enableval
+else
+  enable_install_libiberty=no
+fi
+
+  # Option parsed, now set things appropriately.
+  case x"$enable_install_libiberty" in
+    xyes|x)
+      target_header_dir=libiberty
+      ;;
+    xno)
+      target_header_dir=
+      ;;
+    *)
+      # This could be sanity-checked in various ways...
+      target_header_dir="${enable_install_libiberty}"
+      ;;
+  esac
+
+
+else
+
+   # Not a target library, so we set things up to run the test suite.
+   CHECK=really-check
+
+fi
+
+
+
+
+case "${host}" in
+  *-*-cygwin* | *-*-mingw*)
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_ERRLIST 1
+_ACEOF
+
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_NERR 1
+_ACEOF
+
+    ;;
+esac
+
+if test -z "${setobjs}"; then
+  case "${host}" in
+
+  *-*-vxworks*)
+    # Handle VxWorks configuration specially, since on VxWorks the
+    # libraries are actually on the target board, not in the file
+    # system.
+    case " $LIBOBJS " in
+  *" basename.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS basename.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" getpagesize.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" insque.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS insque.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" random.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS random.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strcasecmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strncasecmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" strdup.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" vfork.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vfork.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" waitpid.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS waitpid.$ac_objext"
+ ;;
+esac
+
+    case " $LIBOBJS " in
+  *" vasprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
+ ;;
+esac
+
+    for f in $funcs; do
+      case "$f" in
+       basename | getpagesize | insque | random | strcasecmp)
+         ;;
+       strncasecmp | strdup | vfork | waitpid | vasprintf)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+         ;;
+      esac
+    done
+
+    # VxWorks doesn't provide any of the variables in $vars, so we
+    # don't have to check them here.
+
+    # Of the functions in $checkfuncs, VxWorks only has strerror.
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRERROR 1
+_ACEOF
+
+
+    setobjs=yes
+    ;;
+
+  *-*-msdosdjgpp)
+    for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+             getcwd getpagesize getrusage gettimeofday \
+             index insque memchr memcmp memcpy memmove memset psignal \
+             putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+             strchr strdup strerror strncasecmp strrchr strstr strtod \
+             strtol strtoul sysconf times tmpnam vfprintf vprintf \
+             vsprintf waitpid
+    do
+      n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+      cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+    done
+
+
+    setobjs=yes
+    ;;
+
+  esac
+fi
+
+if test -z "${setobjs}"; then
+
+  case "${host}" in
+
+  *-*-cygwin*)
+    # The Cygwin library actually uses a couple of files from
+    # libiberty when it is built.  If we are building a native
+    # Cygwin, and we run the tests, we will appear to have these
+    # files.  However, when we go on to build winsup, we will wind up
+    # with a library which does not have the files, since they should
+    # have come from libiberty.
+
+    # We handle this by removing the functions the winsup library
+    # provides from our shell variables, so that they appear to be
+    # missing.
+
+    # DJ - only if we're *building* cygwin, not just building *with* cygwin
+
+    if test -n "${with_target_subdir}"
+    then
+      funcs="`echo $funcs | sed -e 's/random//'`"
+      case " $LIBOBJS " in
+  *" random.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS random.$ac_objext"
+ ;;
+esac
+
+      vars="`echo $vars | sed -e 's/sys_siglist//'`"
+      checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`"
+    fi
+    ;;
+
+  *-*-mingw32*)
+    # Under mingw32, sys_nerr and sys_errlist exist, but they are
+    # macros, so the test below won't find them.
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
+    ;;
+
+  *-*-msdosdjgpp*)
+    # vfork and fork are stubs.
+    ac_cv_func_vfork_works=no
+    ;;
+
+  *-*-uwin*)
+    # Under some versions of uwin, vfork is notoriously buggy and the test
+    # can hang configure; on other versions, vfork exists just as a stub.
+    # FIXME: This should be removed once vfork in uwin's runtime is fixed.
+    ac_cv_func_vfork_works=no
+    # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
+    # macros (actually, these are imported from a DLL, but the end effect
+    # is the same), so the test below won't find them.
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
+    ;;
+
+  *-*-*vms*)
+    # Under VMS, vfork works very different than on Unix. The standard test
+    # won't work, and it isn't easily adaptable. It makes more sense to
+    # just force it.
+    ac_cv_func_vfork_works=yes
+    ;;
+
+  esac
+
+  # We haven't set the list of objects yet.  Use the standard autoconf
+  # tests.  This will only work if the compiler works.
+  { echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_strerror=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+for ac_func in $funcs
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+  { echo "$as_me:$LINENO: checking whether alloca needs Cray hooks" >&5
+echo $ECHO_N "checking whether alloca needs Cray hooks... $ECHO_C" >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+  break
+fi
+
+  done
+fi
+
+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+main ()
+{
+  exit (find_stack_direction() < 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_stack_direction=1
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+
+for ac_header in vfork.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <$ac_header>
+_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 "echo \"\$as_me:$LINENO: $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
+  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
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  eval "$as_ac_Header=no"
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+for ac_func in fork vfork
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { echo "$as_me:$LINENO: checking for working fork" >&5
+echo $ECHO_N "checking for working fork... $ECHO_C" >&6; }
+if test "${ac_cv_func_fork_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_fork_works=cross
+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 ()
+{
+
+         /* By Ruediger Kuhlmann. */
+         return fork () < 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_fork_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
+echo "${ECHO_T}$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { echo "$as_me:$LINENO: checking for working vfork" >&5
+echo $ECHO_N "checking for working vfork... $ECHO_C" >&6; }
+if test "${ac_cv_func_vfork_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_vfork_works=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+       || p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+        /* Was there some problem with vforking?  */
+        child < 0
+
+        /* Did the child fail?  (This shouldn't happen.)  */
+        || status
+
+        /* Did the vfork/compiler bug occur?  */
+        || parent != getpid()
+
+        /* Did the file descriptor bug occur?  */
+        || fstat(fileno(stdout), &st) != 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_vfork_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
+echo "${ECHO_T}$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_VFORK 1
+_ACEOF
+
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define vfork fork
+_ACEOF
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_FORK 1
+_ACEOF
+
+fi
+
+  if test $ac_cv_func_vfork_works = no; then
+    case " $LIBOBJS " in
+  *" vfork.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS vfork.$ac_objext"
+ ;;
+esac
+
+  fi
+  # We only need _doprnt if we might use it to implement v*printf.
+  if test $ac_cv_func_vprintf != yes \
+     || test $ac_cv_func_vfprintf != yes \
+     || test $ac_cv_func_vsprintf != yes; then
+
+for ac_func in _doprnt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+  else
+
+for ac_func in _doprnt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  fi
+
+  for v in $vars; do
+    { echo "$as_me:$LINENO: checking for $v" >&5
+echo $ECHO_N "checking for $v... $ECHO_C" >&6; }
+    if { as_var=libiberty_cv_var_$v; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+int *p;
+int
+main ()
+{
+extern int $v []; p = $v;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "libiberty_cv_var_$v=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "libiberty_cv_var_$v=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+    if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
+      { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+      n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+      cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+    else
+      { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    fi
+  done
+
+  # special check for _system_configuration because AIX <4.3.2 do not
+  # contain the `physmem' member.
+  { echo "$as_me:$LINENO: checking for external symbol _system_configuration" >&5
+echo $ECHO_N "checking for external symbol _system_configuration... $ECHO_C" >&6; }
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/systemcfg.h>
+int
+main ()
+{
+double x = _system_configuration.physmem;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE__SYSTEM_CONFIGURATION 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+for ac_func in $checkfuncs
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  { echo "$as_me:$LINENO: checking whether basename is declared" >&5
+echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_basename+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 basename
+  (void) basename;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_basename=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_basename=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5
+echo "${ECHO_T}$ac_cv_have_decl_basename" >&6; }
+if test $ac_cv_have_decl_basename = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_BASENAME 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether ffs is declared" >&5
+echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_ffs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 ffs
+  (void) ffs;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_ffs=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_ffs=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5
+echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6; }
+if test $ac_cv_have_decl_ffs = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFS 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FFS 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
+echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_asprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 asprintf
+  (void) asprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_asprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_asprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6; }
+if test $ac_cv_have_decl_asprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
+echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_vasprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 vasprintf
+  (void) vasprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_vasprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_vasprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6; }
+if test $ac_cv_have_decl_vasprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VASPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
+echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_snprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 snprintf
+  (void) snprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_snprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_snprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; }
+if test $ac_cv_have_decl_snprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
+echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_vsnprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 vsnprintf
+  (void) vsnprintf;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_vsnprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_vsnprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; }
+if test $ac_cv_have_decl_vsnprintf = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF 0
+_ACEOF
+
+
+fi
+
+
+  { echo "$as_me:$LINENO: checking whether calloc is declared" >&5
+echo $ECHO_N "checking whether calloc is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_calloc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 calloc
+  (void) calloc;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_calloc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_calloc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_calloc" >&5
+echo "${ECHO_T}$ac_cv_have_decl_calloc" >&6; }
+if test $ac_cv_have_decl_calloc = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CALLOC 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CALLOC 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5
+echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getenv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 getenv
+  (void) getenv;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getenv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_getenv=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; }
+if test $ac_cv_have_decl_getenv = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether getopt is declared" >&5
+echo $ECHO_N "checking whether getopt is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getopt+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 getopt
+  (void) getopt;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getopt=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_getopt=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getopt" >&6; }
+if test $ac_cv_have_decl_getopt = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETOPT 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETOPT 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether malloc is declared" >&5
+echo $ECHO_N "checking whether malloc is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_malloc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 malloc
+  (void) malloc;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_malloc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_malloc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_malloc" >&5
+echo "${ECHO_T}$ac_cv_have_decl_malloc" >&6; }
+if test $ac_cv_have_decl_malloc = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MALLOC 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MALLOC 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether realloc is declared" >&5
+echo $ECHO_N "checking whether realloc is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_realloc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 realloc
+  (void) realloc;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_realloc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_realloc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_realloc" >&5
+echo "${ECHO_T}$ac_cv_have_decl_realloc" >&6; }
+if test $ac_cv_have_decl_realloc = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REALLOC 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REALLOC 0
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking whether sbrk is declared" >&5
+echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_sbrk+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 sbrk
+  (void) sbrk;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_sbrk=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_sbrk=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5
+echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6; }
+if test $ac_cv_have_decl_sbrk = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SBRK 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SBRK 0
+_ACEOF
+
+
+fi
+
+
+  { echo "$as_me:$LINENO: checking whether strverscmp is declared" >&5
+echo $ECHO_N "checking whether strverscmp is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strverscmp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 strverscmp
+  (void) strverscmp;
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_strverscmp=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_strverscmp=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strverscmp" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strverscmp" >&6; }
+if test $ac_cv_have_decl_strverscmp = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRVERSCMP 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRVERSCMP 0
+_ACEOF
+
+
+fi
+
+
+  { echo "$as_me:$LINENO: checking whether canonicalize_file_name must be declared" >&5
+echo $ECHO_N "checking whether canonicalize_file_name must be declared... $ECHO_C" >&6; }
+if test "${libiberty_cv_decl_needed_canonicalize_file_name+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "confdefs.h"
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+int
+main ()
+{
+char *(*pfn) = (char *(*)) canonicalize_file_name
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  libiberty_cv_decl_needed_canonicalize_file_name=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       libiberty_cv_decl_needed_canonicalize_file_name=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+{ echo "$as_me:$LINENO: result: $libiberty_cv_decl_needed_canonicalize_file_name" >&5
+echo "${ECHO_T}$libiberty_cv_decl_needed_canonicalize_file_name" >&6; }
+if test $libiberty_cv_decl_needed_canonicalize_file_name = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define NEED_DECLARATION_CANONICALIZE_FILE_NAME 1
+_ACEOF
+
+fi
+
+fi
+
+# Figure out which version of pexecute to use.
+case "${host}" in
+     *-*-mingw* | *-*-winnt*)  pexecute=./pex-win32.o  ;;
+     *-*-msdosdjgpp*)          pexecute=./pex-djgpp.o  ;;
+     *-*-msdos*)               pexecute=./pex-msdos.o  ;;
+     *)                                pexecute=./pex-unix.o   ;;
+esac
+
+
+if test x$gcc_no_link = xyes; then
+  if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
+    ac_cv_func_mmap_fixed_mapped=no
+  fi
+fi
+if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <$ac_header>
+_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 "echo \"\$as_me:$LINENO: $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
+  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
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  eval "$as_ac_Header=no"
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test x$gcc_no_link = xyes; then
+  { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* 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.  Under hpux,
+    including <limits.h> includes <sys/time.h> and causes problems
+    checking for functions defined therein.  */
+#if defined (__STDC__) && !defined (_HPUX_SOURCE)
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+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
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+       mmap private not fixed
+       mmap private fixed at somewhere currently unmapped
+       mmap private fixed at somewhere already mapped
+       mmap shared not fixed
+       mmap shared fixed at somewhere currently unmapped
+       mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the file system buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propagated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h.  */
+# ifndef HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192  /* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+  char *data, *data2, *data3;
+  int i, pagesize;
+  int fd;
+
+  pagesize = getpagesize ();
+
+  /* First, make a file with some known garbage in it. */
+  data = (char *) malloc (pagesize);
+  if (!data)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    return 1;
+  if (write (fd, data, pagesize) != pagesize)
+    return 1;
+  close (fd);
+
+  /* Next, try to mmap the file at a fixed address which already has
+     something else allocated at it.  If we can, also make sure that
+     we see the same garbage.  */
+  fd = open ("conftest.mmap", O_RDWR);
+  if (fd < 0)
+    return 1;
+  data2 = (char *) malloc (2 * pagesize);
+  if (!data2)
+    return 1;
+  data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+                    MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      return 1;
+
+  /* Finally, make sure that changes to the mapped area do not
+     percolate back to the file as seen by read().  (This is a bug on
+     some variants of i386 svr4.0.)  */
+  for (i = 0; i < pagesize; ++i)
+    *(data2 + i) = *(data2 + i) + 1;
+  data3 = (char *) malloc (pagesize);
+  if (!data3)
+    return 1;
+  if (read (fd, data3, pagesize) != pagesize)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      return 1;
+  close (fd);
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+fi
+
+{ echo "$as_me:$LINENO: checking for working strncmp" >&5
+echo $ECHO_N "checking for working strncmp... $ECHO_C" >&6; }
+if test "${ac_cv_func_strncmp_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_strncmp_works=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Test by Jim Wilson and Kaveh Ghazi.
+   Check whether strncmp reads past the end of its string parameters. */
+#include <sys/types.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+
+#ifndef MAP_ANON
+#ifdef MAP_ANONYMOUS
+#define MAP_ANON MAP_ANONYMOUS
+#else
+#define MAP_ANON MAP_FILE
+#endif
+#endif
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#endif
+
+#define MAP_LEN 0x10000
+
+main ()
+{
+#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE)
+  char *p;
+  int dev_zero;
+
+  dev_zero = open ("/dev/zero", O_RDONLY);
+  if (dev_zero < 0)
+    exit (1);
+
+  p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
+                    MAP_ANON|MAP_PRIVATE, dev_zero, 0);
+  if (p == (char *)-1)
+    p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
+                      MAP_ANON|MAP_PRIVATE, -1, 0);
+  if (p == (char *)-1)
+    exit (2);
+  else
+    {
+      char *string = "__si_type_info";
+      char *q = (char *) p + MAP_LEN - strlen (string) - 2;
+      char *r = (char *) p + 0xe;
+
+      strcpy (q, string);
+      strcpy (r, string);
+      strncmp (r, q, 14);
+    }
+#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
+  exit (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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_strncmp_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_strncmp_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+rm -f core core.* *.core
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_strncmp_works" >&5
+echo "${ECHO_T}$ac_cv_func_strncmp_works" >&6; }
+if test $ac_cv_func_strncmp_works = no ; then
+  case " $LIBOBJS " in
+  *" strncmp.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strncmp.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+# Install a library built with a cross compiler in $(tooldir) rather
+# than $(libdir).
+if test -z "${with_cross_host}"; then
+  INSTALL_DEST=libdir
+else
+  INSTALL_DEST=tooldir
+fi
+
+
+
+L=""
+for l in x $LIBOBJS; do
+  case $l in
+    x) ;;
+    *) L="$L ./$l" ;;
+  esac
+done
+LIBOBJS="$L"
+
+
+
+
+
+# We need multilib support, but only if configuring for the target.
+ac_config_files="$ac_config_files Makefile"
+
+ac_config_commands="$ac_config_commands default"
+
+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
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_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, 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     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 "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+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_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`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
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+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
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# 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.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, 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
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+_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.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { 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 ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { 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_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+srcdir=${srcdir}
+host=${host}
+target=${target}
+with_target_subdir=${with_target_subdir}
+with_multisubdir=${with_multisubdir}
+ac_configure_args="--enable-multilib ${ac_configure_args}"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
+libiberty_topdir=${libiberty_topdir}
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+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
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# 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 ||
+{
+  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 "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# 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
+
+_ACEOF
+
+# Create sed commands to just substitute file output variables.
+
+# Remaining file output variables are in a fragment that also has non-file
+# output varibles.
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+libiberty_topdir!$libiberty_topdir$ac_delim
+MAINT!$MAINT$ac_delim
+NOTMAINT!$NOTMAINT$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+BUILD_INFO!$BUILD_INFO$ac_delim
+PERL!$PERL$ac_delim
+HAVE_PERL!$HAVE_PERL$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+AR!$AR$ac_delim
+RANLIB!$RANLIB$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+CPP!$CPP$ac_delim
+ac_libiberty_warn_cflags!$ac_libiberty_warn_cflags$ac_delim
+NO_MINUS_C_MINUS_O!$NO_MINUS_C_MINUS_O$ac_delim
+OUTPUT_OPTION!$OUTPUT_OPTION$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+CHECK!$CHECK$ac_delim
+target_header_dir!$target_header_dir$ac_delim
+pexecute!$pexecute$ac_delim
+INSTALL_DEST!$INSTALL_DEST$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+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
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+/^[     ]*@host_makefile_frag@[         ]*$/{
+r $host_makefile_frag
+d
+}
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_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
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+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
+
+  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 ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      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 "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    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'`
+  { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# 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=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  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
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;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
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+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"; } &&
+  { 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
+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;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
+ac_dB='\\)[     (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+       t rset
+       :rset
+       s/^[     ]*#[    ]*define[       ][      ]*//
+       t ok
+       d
+       :ok
+       s/[\\&,]/\\&/g
+       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then 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.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[    #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
+/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    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;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+if test -n "$CONFIG_FILES"; then
+  if test -n "${with_target_subdir}"; then
+    # FIXME: We shouldn't need to set ac_file
+    ac_file=Makefile
+    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
+    . ${libiberty_topdir}/config-ml.in
+  fi
+fi ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
new file mode 100644 (file)
index 0000000..0d42616
--- /dev/null
@@ -0,0 +1,738 @@
+dnl Process this file with autoconf to produce a configure script
+
+AC_PREREQ(2.59)
+AC_INIT
+AC_CONFIG_SRCDIR([xmalloc.c])
+
+# This works around the fact that libtool configuration may change LD
+# for this particular configuration, but some shells, instead of
+# keeping the changes in LD private, export them just because LD is
+# exported.  We don't use libtool yet, but some day we might, so...
+ORIGINAL_LD_FOR_MULTILIBS=$LD
+
+dnl We use these options to decide which functions to include.
+AC_ARG_WITH(target-subdir,
+[  --with-target-subdir=SUBDIR      Configuring in a subdirectory for target])
+AC_ARG_WITH(build-subdir,
+[  --with-build-subdir=SUBDIR       Configuring in a subdirectory for build])
+AC_ARG_WITH(cross-host,
+[  --with-cross-host=HOST           Configuring with a cross compiler])
+AC_ARG_WITH(newlib,
+[  --with-newlib                    Configuring with newlib])
+
+if test "${srcdir}" = "."; then
+  if test -n "${with_build_subdir}"; then
+    libiberty_topdir="${srcdir}/../.."
+    with_target_subdir=
+  elif test -z "${with_target_subdir}"; then
+    libiberty_topdir="${srcdir}/.."
+  else
+    if test "${with_target_subdir}" != "."; then
+      libiberty_topdir="${srcdir}/${with_multisrctop}../.."
+    else
+      libiberty_topdir="${srcdir}/${with_multisrctop}.."
+    fi
+  fi
+else
+  libiberty_topdir="${srcdir}/.."
+fi
+AC_SUBST(libiberty_topdir)
+AC_CONFIG_AUX_DIR(../config-aux)
+AC_CONFIG_MACRO_DIR(../config-aux)
+
+dnl Very limited version of automake's enable-maintainer-mode
+
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode
+                          enable make rules and dependencies not useful
+                          (and sometimes confusing) to the casual installer],
+      maintainer_mode=$enableval,
+      maintainer_mode=no)
+
+AC_MSG_RESULT($maintainer_mode)
+
+if test "$maintainer_mode" = "yes"; then
+  MAINT=''
+  NOTMAINT='#'
+else
+  MAINT='#'
+  NOTMAINT=''
+fi
+AC_SUBST(MAINT)dnl
+AC_SUBST(NOTMAINT)dnl
+
+# Do we have a single-tree copy of texinfo?  Even if we do, we can't
+# rely on it - libiberty is built before texinfo.
+AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
+if test "x$MAKEINFO" = "x"; then
+    MAKEINFO="@echo makeinfo missing; true"
+    BUILD_INFO=
+else
+    BUILD_INFO=info
+    case "$MAKEINFO" in
+      */missing\ makeinfo*)
+       BUILD_INFO=
+       AC_MSG_WARN([
+*** Makeinfo is missing. Info documentation will not be built.])
+        ;;
+      *)
+       case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
+         x*\ [[1-3]].* )
+           MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true"
+           BUILD_INFO=
+           AC_MSG_WARN([
+*** Makeinfo is too old. Info documentation will not be built.])
+         ;;
+       esac
+       ;;
+    esac
+fi
+AC_SUBST(MAKEINFO)
+AC_SUBST(BUILD_INFO)
+
+AC_CHECK_PROG(PERL, perl, perl, )
+if test x"$PERL" = x""; then
+  HAVE_PERL='#'
+else
+  HAVE_PERL=''
+fi
+AC_SUBST(HAVE_PERL)
+
+AC_CANONICAL_HOST
+
+dnl When we start using automake:
+dnl AM_INIT_AUTOMAKE(libiberty, 1.0)
+
+dnl These must be called before AM_PROG_LIBTOOL, because it may want
+dnl to call AC_CHECK_PROG.
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+
+dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB.
+# Add --enable-multilib to configure.
+# Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[  --enable-multilib       build many library versions (default)],
+[case "$enableval" in
+  yes) multilib=yes ;;
+  no)  multilib=no ;;
+  *)   AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
+ esac],
+             [multilib=yes])
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+   && test "x${with_multisubdir}" != x ; then
+   cross_compiling=maybe
+fi
+
+GCC_NO_EXECUTABLES
+AC_PROG_CC
+AC_PROG_CPP_WERROR
+
+ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \
+                         -Wstrict-prototypes], [ac_libiberty_warn_cflags])
+ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([], [ac_libiberty_warn_cflags])
+
+AC_PROG_CC_C_O
+# autoconf is lame and doesn't give us any substitution variable for this.
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
+  NO_MINUS_C_MINUS_O=yes
+else
+  OUTPUT_OPTION='-o $@'
+fi
+AC_SUBST(NO_MINUS_C_MINUS_O)
+AC_SUBST(OUTPUT_OPTION)
+
+AC_C_CONST
+AC_C_INLINE
+AC_C_BIGENDIAN
+
+dnl When we start using libtool:
+dnl Default to a non shared library.  This may be overridden by the
+dnl configure option --enable-shared.
+dnl AM_DISABLE_SHARED
+
+dnl When we start using libtool:
+dnl AM_PROG_LIBTOOL
+
+dnl When we start using automake:
+dnl AM_CONFIG_HEADER(config.h:config.in)
+AC_CONFIG_HEADER(config.h:config.in)
+
+dnl When we start using automake:
+dnl AM_MAINTAINER_MODE
+dnl AC_EXEEXT
+
+dnl When we start using automake:
+dnl AM_PROG_INSTALL
+AC_PROG_INSTALL
+
+# Don't build the shared library for build.
+if [[ -n "${with_build_subdir}" ]]; then
+  enable_shared=no
+fi
+
+frag=
+case "${host}" in
+  rs6000-ibm-aix3.1 | rs6000-ibm-aix)
+                        frag=mh-aix ;;
+  *-*-cxux7*)          frag=mh-cxux7 ;;
+  *-*-freebsd2.1.*)    frag=mh-fbsd21 ;;
+  *-*-freebsd2.2.[[012]])      frag=mh-fbsd21 ;;
+  i370-*-opened*)       frag=mh-openedition ;;
+  i[[34567]]86-*-windows*)     frag=mh-windows ;;
+esac
+
+if [[ -n "${frag}" ]]; then
+  frags=${libiberty_topdir}/libiberty/config/$frag
+else
+  frags=
+fi
+
+# If they didn't specify --enable-shared, don't generate shared libs.
+case "${enable_shared}" in
+  yes) shared=yes ;;
+  no) shared=no ;;
+  "") shared=no ;;
+  *) shared=yes ;;
+esac
+if [[ "${shared}" = "yes" ]]; then
+  frag=
+  case "${host}" in
+    *-*-cygwin*)       ;;
+    alpha*-*-linux*)   frag=mh-elfalphapic ;;
+    arm*-*-*)          frag=mh-armpic ;;
+    hppa*-*-*)         frag=mh-papic ;;
+    i[[34567]]86-*-* | x86_64-*-*)
+                       frag=mh-x86pic ;;
+    powerpc*-*-aix*)   ;;
+    powerpc*-*-*)      frag=mh-ppcpic ;;
+    sparc*-*-*)                frag=mh-sparcpic ;;
+    s390*-*-*)         frag=mh-s390pic ;;
+    *)                 frag=mh-${host_cpu}pic ;;
+  esac
+  if [[ -n "${frag}" ]]; then
+    frags="${frags} ${libiberty_topdir}/config/${frag}"
+  fi
+fi
+
+echo "# Warning: this fragment is automatically generated" > temp-frag
+
+for frag in ${frags}; do
+  if [[ -f ${frag} ]]; then
+    echo "Appending ${frag} to xhost-mkfrag"
+    echo "# Following fragment copied from ${frag}" >> temp-frag
+    cat ${frag} >> temp-frag
+  fi
+done
+
+# record if we want to build shared libs.
+if [[ "${shared}" = "yes" ]]; then
+  echo enable_shared = yes >> temp-frag
+else
+  echo enable_shared = no >> temp-frag
+fi
+
+frag=xhost-mkfrag
+${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag
+
+host_makefile_frag=${frag}
+AC_SUBST_FILE(host_makefile_frag)
+
+# It's OK to check for header files.  Although the compiler may not be
+# able to link anything, it had better be able to at least compile
+# something.
+AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h)
+AC_HEADER_SYS_WAIT
+AC_HEADER_TIME
+
+libiberty_AC_DECLARE_ERRNO
+
+# Determine the size of an int for struct fibnode.
+AC_CHECK_SIZEOF([int])
+
+AC_CHECK_TYPE(uintptr_t, unsigned long)
+
+# Look for a 64-bit type.
+AC_MSG_CHECKING([for a 64-bit type])
+AC_CACHE_VAL(liberty_cv_uint64,
+[AC_TRY_COMPILE(
+[#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif],
+[extern uint64_t foo;],
+liberty_cv_uint64=uint64_t,
+[AC_TRY_COMPILE(
+[#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif],
+[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];],
+liberty_cv_uint64="unsigned long",
+[AC_TRY_COMPILE(
+[#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif],
+[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];],
+liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])])
+AC_MSG_RESULT($liberty_cv_uint64)
+if test "$liberty_cv_uint64" != none; then
+  AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
+                     [Define to an unsigned 64-bit type available in the compiler.])
+fi
+
+# Given the above check, we always have uintptr_t or a fallback
+# definition.  So define HAVE_UINTPTR_T in case any imported code
+# relies on it.
+AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.])
+
+AC_TYPE_PID_T
+
+# This is the list of functions which libiberty will provide if they
+# are not available on the host.
+
+funcs="asprintf"
+funcs="$funcs atexit"
+funcs="$funcs basename"
+funcs="$funcs bcmp"
+funcs="$funcs bcopy"
+funcs="$funcs bsearch"
+funcs="$funcs bzero"
+funcs="$funcs calloc"
+funcs="$funcs clock"
+funcs="$funcs ffs"
+funcs="$funcs getcwd"
+funcs="$funcs getpagesize"
+funcs="$funcs gettimeofday"
+funcs="$funcs index"
+funcs="$funcs insque"
+funcs="$funcs memchr"
+funcs="$funcs memcmp"
+funcs="$funcs memcpy"
+funcs="$funcs memmove"
+funcs="$funcs mempcpy"
+funcs="$funcs memset"
+funcs="$funcs mkstemps"
+funcs="$funcs putenv"
+funcs="$funcs random"
+funcs="$funcs rename"
+funcs="$funcs rindex"
+funcs="$funcs setenv"
+funcs="$funcs snprintf"
+funcs="$funcs sigsetmask"
+funcs="$funcs stpcpy"
+funcs="$funcs stpncpy"
+funcs="$funcs strcasecmp"
+funcs="$funcs strchr"
+funcs="$funcs strdup"
+funcs="$funcs strncasecmp"
+funcs="$funcs strndup"
+funcs="$funcs strrchr"
+funcs="$funcs strstr"
+funcs="$funcs strtod"
+funcs="$funcs strtol"
+funcs="$funcs strtoul"
+funcs="$funcs strverscmp"
+funcs="$funcs tmpnam"
+funcs="$funcs vasprintf"
+funcs="$funcs vfprintf"
+funcs="$funcs vprintf"
+funcs="$funcs vsnprintf"
+funcs="$funcs vsprintf"
+funcs="$funcs waitpid"
+
+# Also in the old function.def file: alloca, vfork, getopt.
+
+vars="sys_errlist sys_nerr sys_siglist"
+
+checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
+checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp"
+checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking"
+
+# These are neither executed nor required, but they help keep
+# autoheader happy without adding a bunch of text to acconfig.h.
+if test "x" = "y"; then
+  AC_CHECK_FUNCS(asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \
+  getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \
+  memmove mempcpy memset putenv random rename rindex sigsetmask \
+  strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \
+  strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \
+  vsprintf waitpid getrusage on_exit psignal strerror strsignal \
+  sysconf times sbrk gettimeofday ffs snprintf vsnprintf \
+  pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \
+  realpath canonicalize_file_name __fsetlocking)
+  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf])
+  AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
+  AC_DEFINE(HAVE_SYS_NERR,    1, [Define if you have the sys_nerr variable.])
+  AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])
+fi
+
+# For each of these functions, if the host does not provide the
+# function we want to put FN.o in LIBOBJS, and if the host does
+# provide the function, we want to define HAVE_FN in config.h.
+
+setobjs=
+CHECK=
+target_header_dir=
+if test -n "${with_target_subdir}"; then
+
+  # We are being configured as a target library.  AC_REPLACE_FUNCS
+  # may not work correctly, because the compiler may not be able to
+  # link executables.  Note that we may still be being configured
+  # native.
+
+  # If we are being configured for newlib, we know which functions
+  # newlib provide and which ones we will be expected to provide.
+
+  if test "x${with_newlib}" = "xyes"; then
+    AC_LIBOBJ([asprintf])
+    AC_LIBOBJ([basename])
+    AC_LIBOBJ([insque])
+    AC_LIBOBJ([random])
+    AC_LIBOBJ([strdup])
+    AC_LIBOBJ([vasprintf])
+
+    for f in $funcs; do
+      case "$f" in
+       asprintf | basename | insque | random | strdup | vasprintf)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         AC_DEFINE_UNQUOTED($n)
+         ;;
+      esac
+    done
+
+    # newlib doesnt provide any of the variables in $vars, so we
+    # dont have to check them here.
+
+    # Of the functions in $checkfuncs, newlib only has strerror.
+    AC_DEFINE(HAVE_STRERROR)
+
+    setobjs=yes
+
+  fi
+
+  # If we are being configured for Mingw, we know which functions
+  # Mingw provides and which ones we will be expected to provide.
+
+  case "${host}" in
+  *-*-mingw*)
+    AC_LIBOBJ([asprintf])
+    AC_LIBOBJ([basename])
+    AC_LIBOBJ([bcmp])
+    AC_LIBOBJ([bcopy])
+    AC_LIBOBJ([bzero])
+    AC_LIBOBJ([clock])
+    AC_LIBOBJ([ffs])
+    AC_LIBOBJ([getpagesize])
+    AC_LIBOBJ([index])
+    AC_LIBOBJ([insque])
+    AC_LIBOBJ([mempcpy])
+    AC_LIBOBJ([mkstemps])
+    AC_LIBOBJ([random])
+    AC_LIBOBJ([rindex])
+    AC_LIBOBJ([sigsetmask])
+    AC_LIBOBJ([stpcpy])
+    AC_LIBOBJ([stpncpy])
+    AC_LIBOBJ([strndup])
+    AC_LIBOBJ([strverscmp])
+    AC_LIBOBJ([vasprintf])
+    AC_LIBOBJ([waitpid])
+
+    for f in $funcs; do
+      case "$f" in
+       asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         AC_DEFINE_UNQUOTED($n)
+         ;;
+      esac
+    done
+
+    # Mingw doesnt provide any of the variables in $vars, so we
+    # dont have to check them here.
+
+    # Of the functions in $checkfuncs, Mingw only has strerror.
+    AC_DEFINE(HAVE_STRERROR)
+
+    setobjs=yes
+    ;;
+
+  esac
+
+  # We may wish to install the target headers somewhere.
+  AC_ARG_ENABLE(install-libiberty,
+  [  --enable-install-libiberty       Install headers for end users],
+  enable_install_libiberty=$enableval,
+  enable_install_libiberty=no)dnl
+  
+  # Option parsed, now set things appropriately.
+  case x"$enable_install_libiberty" in
+    xyes|x)
+      target_header_dir=libiberty
+      ;;
+    xno)   
+      target_header_dir=
+      ;;
+    *) 
+      # This could be sanity-checked in various ways...
+      target_header_dir="${enable_install_libiberty}"
+      ;;
+  esac
+
+
+else
+
+   # Not a target library, so we set things up to run the test suite.
+   CHECK=really-check
+
+fi
+
+AC_SUBST(CHECK)
+AC_SUBST(target_header_dir)
+
+case "${host}" in
+  *-*-cygwin* | *-*-mingw*)
+    AC_DEFINE(HAVE_SYS_ERRLIST)
+    AC_DEFINE(HAVE_SYS_NERR)
+    ;;
+esac
+
+if test -z "${setobjs}"; then
+  case "${host}" in
+
+  *-*-vxworks*)
+    # Handle VxWorks configuration specially, since on VxWorks the
+    # libraries are actually on the target board, not in the file
+    # system.
+    AC_LIBOBJ([basename])
+    AC_LIBOBJ([getpagesize])
+    AC_LIBOBJ([insque])
+    AC_LIBOBJ([random])
+    AC_LIBOBJ([strcasecmp])
+    AC_LIBOBJ([strncasecmp])
+    AC_LIBOBJ([strdup])
+    AC_LIBOBJ([vfork])
+    AC_LIBOBJ([waitpid])
+    AC_LIBOBJ([vasprintf])
+    for f in $funcs; do
+      case "$f" in
+       basename | getpagesize | insque | random | strcasecmp)
+         ;;
+       strncasecmp | strdup | vfork | waitpid | vasprintf)
+         ;;
+       *)
+         n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+         AC_DEFINE_UNQUOTED($n)
+         ;;
+      esac
+    done
+
+    # VxWorks doesn't provide any of the variables in $vars, so we
+    # don't have to check them here.
+
+    # Of the functions in $checkfuncs, VxWorks only has strerror.
+    AC_DEFINE(HAVE_STRERROR)
+
+    setobjs=yes
+    ;;
+
+  *-*-msdosdjgpp)
+    for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+             getcwd getpagesize getrusage gettimeofday \
+             index insque memchr memcmp memcpy memmove memset psignal \
+             putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+             strchr strdup strerror strncasecmp strrchr strstr strtod \
+             strtol strtoul sysconf times tmpnam vfprintf vprintf \
+             vsprintf waitpid
+    do
+      n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+      AC_DEFINE_UNQUOTED($n)
+    done
+
+
+    setobjs=yes
+    ;;
+
+  esac
+fi
+
+if test -z "${setobjs}"; then
+
+  case "${host}" in
+
+  *-*-cygwin*)
+    # The Cygwin library actually uses a couple of files from
+    # libiberty when it is built.  If we are building a native
+    # Cygwin, and we run the tests, we will appear to have these
+    # files.  However, when we go on to build winsup, we will wind up
+    # with a library which does not have the files, since they should
+    # have come from libiberty.
+
+    # We handle this by removing the functions the winsup library
+    # provides from our shell variables, so that they appear to be
+    # missing.
+
+    # DJ - only if we're *building* cygwin, not just building *with* cygwin
+  
+    if test -n "${with_target_subdir}"
+    then
+      funcs="`echo $funcs | sed -e 's/random//'`"
+      AC_LIBOBJ([random])
+      vars="`echo $vars | sed -e 's/sys_siglist//'`"
+      checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`"
+    fi
+    ;;
+
+  *-*-mingw32*)
+    # Under mingw32, sys_nerr and sys_errlist exist, but they are
+    # macros, so the test below won't find them.
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
+    ;;
+
+  *-*-msdosdjgpp*)
+    # vfork and fork are stubs.
+    ac_cv_func_vfork_works=no
+    ;;
+
+  *-*-uwin*)
+    # Under some versions of uwin, vfork is notoriously buggy and the test 
+    # can hang configure; on other versions, vfork exists just as a stub.
+    # FIXME: This should be removed once vfork in uwin's runtime is fixed.
+    ac_cv_func_vfork_works=no
+    # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
+    # macros (actually, these are imported from a DLL, but the end effect 
+    # is the same), so the test below won't find them.
+    libiberty_cv_var_sys_nerr=yes
+    libiberty_cv_var_sys_errlist=yes
+    ;;
+
+  *-*-*vms*)
+    # Under VMS, vfork works very different than on Unix. The standard test 
+    # won't work, and it isn't easily adaptable. It makes more sense to
+    # just force it.
+    ac_cv_func_vfork_works=yes
+    ;;
+
+  esac
+
+  # We haven't set the list of objects yet.  Use the standard autoconf
+  # tests.  This will only work if the compiler works.
+  AC_ISC_POSIX
+  AC_REPLACE_FUNCS($funcs)
+  libiberty_AC_FUNC_C_ALLOCA
+  AC_FUNC_FORK
+  if test $ac_cv_func_vfork_works = no; then
+    AC_LIBOBJ([vfork])
+  fi
+  # We only need _doprnt if we might use it to implement v*printf.
+  if test $ac_cv_func_vprintf != yes \
+     || test $ac_cv_func_vfprintf != yes \
+     || test $ac_cv_func_vsprintf != yes; then
+    AC_REPLACE_FUNCS(_doprnt)
+  else
+    AC_CHECK_FUNCS(_doprnt)
+  fi
+
+  for v in $vars; do
+    AC_MSG_CHECKING([for $v])
+    AC_CACHE_VAL(libiberty_cv_var_$v,
+      [AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v []; p = $v;]])],
+                     [eval "libiberty_cv_var_$v=yes"],
+                     [eval "libiberty_cv_var_$v=no"])])
+    if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
+      AC_MSG_RESULT(yes)
+      n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+      AC_DEFINE_UNQUOTED($n)
+    else
+      AC_MSG_RESULT(no)
+    fi
+  done
+
+  # special check for _system_configuration because AIX <4.3.2 do not
+  # contain the `physmem' member.
+  AC_MSG_CHECKING([for external symbol _system_configuration])
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/systemcfg.h>]],
+                       [[double x = _system_configuration.physmem;]])],
+    [AC_MSG_RESULT([yes])
+    AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1,
+             [Define if you have the _system_configuration variable.])],
+    [AC_MSG_RESULT([no])])
+
+  AC_CHECK_FUNCS($checkfuncs)
+  AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf])
+  AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc, sbrk])
+  AC_CHECK_DECLS([strverscmp])
+  libiberty_NEED_DECLARATION(canonicalize_file_name)
+fi
+
+# Figure out which version of pexecute to use.
+case "${host}" in
+     *-*-mingw* | *-*-winnt*)  pexecute=./pex-win32.o  ;;
+     *-*-msdosdjgpp*)          pexecute=./pex-djgpp.o  ;;
+     *-*-msdos*)               pexecute=./pex-msdos.o  ;;
+     *)                                pexecute=./pex-unix.o   ;;
+esac
+AC_SUBST(pexecute)
+
+libiberty_AC_FUNC_STRNCMP
+
+# Install a library built with a cross compiler in $(tooldir) rather
+# than $(libdir).
+if test -z "${with_cross_host}"; then
+  INSTALL_DEST=libdir
+else
+  INSTALL_DEST=tooldir
+fi
+AC_SUBST(INSTALL_DEST)
+
+m4_pattern_allow(LIBOBJS)
+L=""
+for l in x $LIBOBJS; do
+  case $l in
+    x) ;;
+    *) L="$L ./$l" ;;
+  esac
+done
+LIBOBJS="$L"
+
+dnl Required by html and install-html
+AC_SUBST(datarootdir)
+AC_SUBST(docdir)
+AC_SUBST(htmldir)
+
+# We need multilib support, but only if configuring for the target.
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_COMMANDS([default],
+  [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+if test -n "$CONFIG_FILES"; then
+  if test -n "${with_target_subdir}"; then
+    # FIXME: We shouldn't need to set ac_file
+    ac_file=Makefile
+    LD="${ORIGINAL_LD_FOR_MULTILIBS}"
+    . ${libiberty_topdir}/config-ml.in
+  fi
+fi]],
+[[srcdir=${srcdir}
+host=${host}
+target=${target}
+with_target_subdir=${with_target_subdir}
+with_multisubdir=${with_multisubdir}
+ac_configure_args="--enable-multilib ${ac_configure_args}"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
+libiberty_topdir=${libiberty_topdir}
+]])
+AC_OUTPUT
diff --git a/libiberty/copying-lib.texi b/libiberty/copying-lib.texi
new file mode 100644 (file)
index 0000000..79e1038
--- /dev/null
@@ -0,0 +1,565 @@
+@node Library Copying
+@appendixsec GNU LESSER GENERAL PUBLIC LICENSE
+
+@cindex LGPL, Lesser General Public License
+@center Version 2.1, February 1999
+
+@display
+Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
+51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+as the successor of the GNU Library Public License, version 2, hence the
+version number 2.1.]
+@end display
+
+@appendixsubsec Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software---to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software---typically libraries---of the Free
+Software Foundation and other authors who decide to use it.  You can use
+it too, but we suggest you first think carefully about whether this
+license or the ordinary General Public License is the better strategy to
+use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of it
+in new free programs; and that you are informed that you can do these
+things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the @dfn{Lesser} General Public License because it
+does @emph{Less} to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+``work based on the library'' and a ``work that uses the library''.  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+@iftex
+@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end iftex
+@ifinfo
+@center GNU LESSER GENERAL PUBLIC LICENSE
+@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end ifinfo
+
+@enumerate 0
+@item
+This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this
+Lesser General Public License (also called ``this License'').  Each
+licensee is addressed as ``you''.
+
+  A ``library'' means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The ``Library'', below, refers to any such software library or work
+which has been distributed under these terms.  A ``work based on the
+Library'' means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term ``modification''.)
+
+  ``Source code'' for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+@item
+You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+@item
+You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+@enumerate a
+@item
+The modified work must itself be a software library.
+
+@item
+You must cause the files modified to carry prominent notices
+stating that you changed the files and the date of any change.
+
+@item
+You must cause the whole of the work to be licensed at no
+charge to all third parties under the terms of this License.
+
+@item
+If a facility in the modified Library refers to a function or a
+table of data to be supplied by an application program that uses
+the facility, other than as an argument passed when the facility
+is invoked, then you must make a good faith effort to ensure that,
+in the event an application does not supply such function or
+table, the facility still operates, and performs whatever part of
+its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has
+a purpose that is entirely well-defined independent of the
+application.  Therefore, Subsection 2d requires that any
+application-supplied function or table used by this function must
+be optional: if the application does not supply it, the square
+root function must still compute square roots.)
+@end enumerate
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+@item
+You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+@item
+You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+@item
+A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a ``work that uses the Library''.  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a ``work that uses the Library'' with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a ``work that uses the
+library''.  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a ``work that uses the Library'' uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+@item
+As an exception to the Sections above, you may also combine or
+link a ``work that uses the Library'' with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+@enumerate a
+@item
+Accompany the work with the complete corresponding
+machine-readable source code for the Library including whatever
+changes were used in the work (which must be distributed under
+Sections 1 and 2 above); and, if the work is an executable linked
+with the Library, with the complete machine-readable ``work that
+uses the Library'', as object code and/or source code, so that the
+user can modify the Library and then relink to produce a modified
+executable containing the modified Library.  (It is understood
+that the user who changes the contents of definitions files in the
+Library will not necessarily be able to recompile the application
+to use the modified definitions.)
+
+@item
+Use a suitable shared library mechanism for linking with the Library.  A
+suitable mechanism is one that (1) uses at run time a copy of the
+library already present on the user's computer system, rather than
+copying library functions into the executable, and (2) will operate
+properly with a modified version of the library, if the user installs
+one, as long as the modified version is interface-compatible with the
+version that the work was made with.
+
+@item
+Accompany the work with a written offer, valid for at
+least three years, to give the same user the materials
+specified in Subsection 6a, above, for a charge no more
+than the cost of performing this distribution.
+
+@item
+If distribution of the work is made by offering access to copy
+from a designated place, offer equivalent access to copy the above
+specified materials from the same place.
+
+@item
+Verify that the user has already received a copy of these
+materials or that you have already sent this user a copy.
+@end enumerate
+
+  For an executable, the required form of the ``work that uses the
+Library'' must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies the
+executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+@item
+You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+@enumerate a
+@item
+Accompany the combined library with a copy of the same work
+based on the Library, uncombined with any other library
+facilities.  This must be distributed under the terms of the
+Sections above.
+
+@item
+Give prominent notice with the combined library of the fact
+that part of it is a work based on the Library, and explaining
+where to find the accompanying uncombined form of the same work.
+@end enumerate
+
+@item
+You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+@item
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+@item
+Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+@item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+@item
+If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+@item
+The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+``any later version'', you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+@item
+If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@appendixsubsec How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the library's name and an idea of what it does.}
+Copyright (C) @var{year}  @var{name of author}
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at
+your option) any later version.
+
+This library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the library, if
+necessary.  Here is a sample; alter the names:
+
+@smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+`Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+@var{signature of Ty Coon}, 1 April 1990
+Ty Coon, President of Vice
+@end smallexample
+
+That's all there is to it!
diff --git a/libiberty/copysign.c b/libiberty/copysign.c
new file mode 100644 (file)
index 0000000..6793f22
--- /dev/null
@@ -0,0 +1,154 @@
+#include <ansidecl.h>
+
+#ifdef __IEEE_BIG_ENDIAN
+
+typedef union 
+{
+  double value;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 11;
+    unsigned int fraction0:4;
+    unsigned int fraction1:16;
+    unsigned int fraction2:16;
+    unsigned int fraction3:16;
+    
+  } number;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 11;
+    unsigned int quiet:1;
+    unsigned int function0:3;
+    unsigned int function1:16;
+    unsigned int function2:16;
+    unsigned int function3:16;
+  } nan;
+  struct 
+  {
+    unsigned long msw;
+    unsigned long lsw;
+  } parts;
+    long aslong[2];
+} __ieee_double_shape_type;
+
+#endif
+
+#ifdef __IEEE_LITTLE_ENDIAN
+
+typedef union 
+{
+  double value;
+  struct 
+  {
+#ifdef __SMALL_BITFIELDS
+    unsigned int fraction3:16;
+    unsigned int fraction2:16;
+    unsigned int fraction1:16;
+    unsigned int fraction0: 4;
+#else
+    unsigned int fraction1:32;
+    unsigned int fraction0:20;
+#endif
+    unsigned int exponent :11;
+    unsigned int sign     : 1;
+  } number;
+  struct 
+  {
+#ifdef __SMALL_BITFIELDS
+    unsigned int function3:16;
+    unsigned int function2:16;
+    unsigned int function1:16;
+    unsigned int function0:3;
+#else
+    unsigned int function1:32;
+    unsigned int function0:19;
+#endif
+    unsigned int quiet:1;
+    unsigned int exponent: 11;
+    unsigned int sign : 1;
+  } nan;
+  struct 
+  {
+    unsigned long lsw;
+    unsigned long msw;
+  } parts;
+
+  long aslong[2];
+
+} __ieee_double_shape_type;
+
+#endif
+
+#ifdef __IEEE_BIG_ENDIAN
+typedef union
+{
+  float value;
+  struct 
+  {
+    unsigned int sign : 1;
+    unsigned int exponent: 8;
+    unsigned int fraction0: 7;
+    unsigned int fraction1: 16;
+  } number;
+  struct 
+  {
+    unsigned int sign:1;
+    unsigned int exponent:8;
+    unsigned int quiet:1;
+    unsigned int function0:6;
+    unsigned int function1:16;
+  } nan;
+  long p1;
+  
+} __ieee_float_shape_type;
+#endif
+
+#ifdef __IEEE_LITTLE_ENDIAN
+typedef union
+{
+  float value;
+  struct 
+  {
+    unsigned int fraction0: 7;
+    unsigned int fraction1: 16;
+    unsigned int exponent: 8;
+    unsigned int sign : 1;
+  } number;
+  struct 
+  {
+    unsigned int function1:16;
+    unsigned int function0:6;
+    unsigned int quiet:1;
+    unsigned int exponent:8;
+    unsigned int sign:1;
+  } nan;
+  long p1;
+  
+} __ieee_float_shape_type;
+#endif
+
+#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)
+
+double
+copysign (double x, double y)
+{
+  __ieee_double_shape_type a,b;
+  b.value = y;  
+  a.value = x;
+  a.number.sign =b.number.sign;
+  return a.value;
+}
+
+#else
+
+double
+copysign (double x, double y)
+{
+  if ((x < 0 && y > 0) || (x > 0 && y < 0))
+    return -x;
+  return x;
+}
+
+#endif
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
new file mode 100644 (file)
index 0000000..3fc6a21
--- /dev/null
@@ -0,0 +1,4537 @@
+/* Demangler for g++ V3 ABI.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <ian@wasabisystems.com>.
+
+   This file is part of the libiberty library, which is part of GCC.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   In addition to the permissions in the GNU General Public License, the
+   Free Software Foundation gives you unlimited permission to link the
+   compiled version of this file into combinations with other programs,
+   and to distribute those combinations without any restriction coming
+   from the use of this file.  (The General Public License restrictions
+   do apply in other respects; for example, they cover modification of
+   the file, and distribution when not linked into a combined
+   executable.)
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
+*/
+
+/* This code implements a demangler for the g++ V3 ABI.  The ABI is
+   described on this web page:
+       http://www.codesourcery.com/cxx-abi/abi.html#mangling
+
+   This code was written while looking at the demangler written by
+   Alex Samuel <samuel@codesourcery.com>.
+
+   This code first pulls the mangled name apart into a list of
+   components, and then walks the list generating the demangled
+   name.
+
+   This file will normally define the following functions, q.v.:
+      char *cplus_demangle_v3(const char *mangled, int options)
+      char *java_demangle_v3(const char *mangled)
+      int cplus_demangle_v3_callback(const char *mangled, int options,
+                                     demangle_callbackref callback)
+      int java_demangle_v3_callback(const char *mangled,
+                                    demangle_callbackref callback)
+      enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
+      enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
+
+   Also, the interface to the component list is public, and defined in
+   demangle.h.  The interface consists of these types, which are
+   defined in demangle.h:
+      enum demangle_component_type
+      struct demangle_component
+      demangle_callbackref
+   and these functions defined in this file:
+      cplus_demangle_fill_name
+      cplus_demangle_fill_extended_operator
+      cplus_demangle_fill_ctor
+      cplus_demangle_fill_dtor
+      cplus_demangle_print
+      cplus_demangle_print_callback
+   and other functions defined in the file cp-demint.c.
+
+   This file also defines some other functions and variables which are
+   only to be used by the file cp-demint.c.
+
+   Preprocessor macros you can define while compiling this file:
+
+   IN_LIBGCC2
+      If defined, this file defines the following functions, q.v.:
+         char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
+                               int *status)
+         int __gcclibcxx_demangle_callback (const char *,
+                                            void (*)
+                                              (const char *, size_t, void *),
+                                            void *)
+      instead of cplus_demangle_v3[_callback]() and
+      java_demangle_v3[_callback]().
+
+   IN_GLIBCPP_V3
+      If defined, this file defines only __cxa_demangle() and
+      __gcclibcxx_demangle_callback(), and no other publically visible
+      functions or variables.
+
+   STANDALONE_DEMANGLER
+      If defined, this file defines a main() function which demangles
+      any arguments, or, if none, demangles stdin.
+
+   CP_DEMANGLE_DEBUG
+      If defined, turns on debugging mode, which prints information on
+      stdout about the mangled string.  This is not generally useful.
+*/
+
+#if defined (_AIX) && !defined (__GNUC__)
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#else
+# ifndef alloca
+#  ifdef __GNUC__
+#   define alloca __builtin_alloca
+#  else
+extern char *alloca ();
+#  endif /* __GNUC__ */
+# endif /* alloca */
+#endif /* HAVE_ALLOCA_H */
+
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "demangle.h"
+#include "cp-demangle.h"
+
+/* If IN_GLIBCPP_V3 is defined, some functions are made static.  We
+   also rename them via #define to avoid compiler errors when the
+   static definition conflicts with the extern declaration in a header
+   file.  */
+#ifdef IN_GLIBCPP_V3
+
+#define CP_STATIC_IF_GLIBCPP_V3 static
+
+#define cplus_demangle_fill_name d_fill_name
+static int d_fill_name (struct demangle_component *, const char *, int);
+
+#define cplus_demangle_fill_extended_operator d_fill_extended_operator
+static int
+d_fill_extended_operator (struct demangle_component *, int,
+                          struct demangle_component *);
+
+#define cplus_demangle_fill_ctor d_fill_ctor
+static int
+d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds,
+             struct demangle_component *);
+
+#define cplus_demangle_fill_dtor d_fill_dtor
+static int
+d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds,
+             struct demangle_component *);
+
+#define cplus_demangle_mangled_name d_mangled_name
+static struct demangle_component *d_mangled_name (struct d_info *, int);
+
+#define cplus_demangle_type d_type
+static struct demangle_component *d_type (struct d_info *);
+
+#define cplus_demangle_print d_print
+static char *d_print (int, const struct demangle_component *, int, size_t *);
+
+#define cplus_demangle_print_callback d_print_callback
+static int d_print_callback (int, const struct demangle_component *,
+                             demangle_callbackref, void *);
+
+#define cplus_demangle_init_info d_init_info
+static void d_init_info (const char *, int, size_t, struct d_info *);
+
+#else /* ! defined(IN_GLIBCPP_V3) */
+#define CP_STATIC_IF_GLIBCPP_V3
+#endif /* ! defined(IN_GLIBCPP_V3) */
+
+/* See if the compiler supports dynamic arrays.  */
+
+#ifdef __GNUC__
+#define CP_DYNAMIC_ARRAYS
+#else
+#ifdef __STDC__
+#ifdef __STDC_VERSION__
+#if __STDC_VERSION__ >= 199901L
+#define CP_DYNAMIC_ARRAYS
+#endif /* __STDC__VERSION >= 199901L */
+#endif /* defined (__STDC_VERSION__) */
+#endif /* defined (__STDC__) */
+#endif /* ! defined (__GNUC__) */
+
+/* We avoid pulling in the ctype tables, to prevent pulling in
+   additional unresolved symbols when this code is used in a library.
+   FIXME: Is this really a valid reason?  This comes from the original
+   V3 demangler code.
+
+   As of this writing this file has the following undefined references
+   when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy,
+   strcat, strlen.  */
+
+#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
+#define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
+#define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
+
+/* The prefix prepended by GCC to an identifier represnting the
+   anonymous namespace.  */
+#define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
+#define ANONYMOUS_NAMESPACE_PREFIX_LEN \
+  (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
+
+/* Information we keep for the standard substitutions.  */
+
+struct d_standard_sub_info
+{
+  /* The code for this substitution.  */
+  char code;
+  /* The simple string it expands to.  */
+  const char *simple_expansion;
+  /* The length of the simple expansion.  */
+  int simple_len;
+  /* The results of a full, verbose, expansion.  This is used when
+     qualifying a constructor/destructor, or when in verbose mode.  */
+  const char *full_expansion;
+  /* The length of the full expansion.  */
+  int full_len;
+  /* What to set the last_name field of d_info to; NULL if we should
+     not set it.  This is only relevant when qualifying a
+     constructor/destructor.  */
+  const char *set_last_name;
+  /* The length of set_last_name.  */
+  int set_last_name_len;
+};
+
+/* Accessors for subtrees of struct demangle_component.  */
+
+#define d_left(dc) ((dc)->u.s_binary.left)
+#define d_right(dc) ((dc)->u.s_binary.right)
+
+/* A list of templates.  This is used while printing.  */
+
+struct d_print_template
+{
+  /* Next template on the list.  */
+  struct d_print_template *next;
+  /* This template.  */
+  const struct demangle_component *template_decl;
+};
+
+/* A list of type modifiers.  This is used while printing.  */
+
+struct d_print_mod
+{
+  /* Next modifier on the list.  These are in the reverse of the order
+     in which they appeared in the mangled string.  */
+  struct d_print_mod *next;
+  /* The modifier.  */
+  const struct demangle_component *mod;
+  /* Whether this modifier was printed.  */
+  int printed;
+  /* The list of templates which applies to this modifier.  */
+  struct d_print_template *templates;
+};
+
+/* We use these structures to hold information during printing.  */
+
+struct d_growable_string
+{
+  /* Buffer holding the result.  */
+  char *buf;
+  /* Current length of data in buffer.  */
+  size_t len;
+  /* Allocated size of buffer.  */
+  size_t alc;
+  /* Set to 1 if we had a memory allocation failure.  */
+  int allocation_failure;
+};
+
+enum { D_PRINT_BUFFER_LENGTH = 256 };
+struct d_print_info
+{
+  /* The options passed to the demangler.  */
+  int options;
+  /* Fixed-length allocated buffer for demangled data, flushed to the
+     callback with a NUL termination once full.  */
+  char buf[D_PRINT_BUFFER_LENGTH];
+  /* Current length of data in buffer.  */
+  size_t len;
+  /* The last character printed, saved individually so that it survives
+     any buffer flush.  */
+  char last_char;
+  /* Callback function to handle demangled buffer flush.  */
+  demangle_callbackref callback;
+  /* Opaque callback argument.  */
+  void *opaque;
+  /* The current list of templates, if any.  */
+  struct d_print_template *templates;
+  /* The current list of modifiers (e.g., pointer, reference, etc.),
+     if any.  */
+  struct d_print_mod *modifiers;
+  /* Set to 1 if we saw a demangling error.  */
+  int demangle_failure;
+};
+
+#ifdef CP_DEMANGLE_DEBUG
+static void d_dump (struct demangle_component *, int);
+#endif
+
+static struct demangle_component *
+d_make_empty (struct d_info *);
+
+static struct demangle_component *
+d_make_comp (struct d_info *, enum demangle_component_type,
+             struct demangle_component *,
+             struct demangle_component *);
+
+static struct demangle_component *
+d_make_name (struct d_info *, const char *, int);
+
+static struct demangle_component *
+d_make_builtin_type (struct d_info *,
+                     const struct demangle_builtin_type_info *);
+
+static struct demangle_component *
+d_make_operator (struct d_info *,
+                 const struct demangle_operator_info *);
+
+static struct demangle_component *
+d_make_extended_operator (struct d_info *, int,
+                          struct demangle_component *);
+
+static struct demangle_component *
+d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds,
+             struct demangle_component *);
+
+static struct demangle_component *
+d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds,
+             struct demangle_component *);
+
+static struct demangle_component *
+d_make_template_param (struct d_info *, long);
+
+static struct demangle_component *
+d_make_sub (struct d_info *, const char *, int);
+
+static int
+has_return_type (struct demangle_component *);
+
+static int
+is_ctor_dtor_or_conversion (struct demangle_component *);
+
+static struct demangle_component *d_encoding (struct d_info *, int);
+
+static struct demangle_component *d_name (struct d_info *);
+
+static struct demangle_component *d_nested_name (struct d_info *);
+
+static struct demangle_component *d_prefix (struct d_info *);
+
+static struct demangle_component *d_unqualified_name (struct d_info *);
+
+static struct demangle_component *d_source_name (struct d_info *);
+
+static long d_number (struct d_info *);
+
+static struct demangle_component *d_identifier (struct d_info *, int);
+
+static struct demangle_component *d_operator_name (struct d_info *);
+
+static struct demangle_component *d_special_name (struct d_info *);
+
+static int d_call_offset (struct d_info *, int);
+
+static struct demangle_component *d_ctor_dtor_name (struct d_info *);
+
+static struct demangle_component **
+d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
+
+static struct demangle_component *
+d_function_type (struct d_info *);
+
+static struct demangle_component *
+d_bare_function_type (struct d_info *, int);
+
+static struct demangle_component *
+d_class_enum_type (struct d_info *);
+
+static struct demangle_component *d_array_type (struct d_info *);
+
+static struct demangle_component *
+d_pointer_to_member_type (struct d_info *);
+
+static struct demangle_component *
+d_template_param (struct d_info *);
+
+static struct demangle_component *d_template_args (struct d_info *);
+
+static struct demangle_component *
+d_template_arg (struct d_info *);
+
+static struct demangle_component *d_expression (struct d_info *);
+
+static struct demangle_component *d_expr_primary (struct d_info *);
+
+static struct demangle_component *d_local_name (struct d_info *);
+
+static int d_discriminator (struct d_info *);
+
+static int
+d_add_substitution (struct d_info *, struct demangle_component *);
+
+static struct demangle_component *d_substitution (struct d_info *, int);
+
+static void d_growable_string_init (struct d_growable_string *, size_t);
+
+static inline void
+d_growable_string_resize (struct d_growable_string *, size_t);
+
+static inline void
+d_growable_string_append_buffer (struct d_growable_string *,
+                                 const char *, size_t);
+static void
+d_growable_string_callback_adapter (const char *, size_t, void *);
+
+static void
+d_print_init (struct d_print_info *, int, demangle_callbackref, void *);
+
+static inline void d_print_error (struct d_print_info *);
+
+static inline int d_print_saw_error (struct d_print_info *);
+
+static inline void d_print_flush (struct d_print_info *);
+
+static inline void d_append_char (struct d_print_info *, char);
+
+static inline void d_append_buffer (struct d_print_info *,
+                                    const char *, size_t);
+
+static inline void d_append_string (struct d_print_info *, const char *);
+
+static inline char d_last_char (struct d_print_info *);
+
+static void
+d_print_comp (struct d_print_info *, const struct demangle_component *);
+
+static void
+d_print_java_identifier (struct d_print_info *, const char *, int);
+
+static void
+d_print_mod_list (struct d_print_info *, struct d_print_mod *, int);
+
+static void
+d_print_mod (struct d_print_info *, const struct demangle_component *);
+
+static void
+d_print_function_type (struct d_print_info *,
+                       const struct demangle_component *,
+                       struct d_print_mod *);
+
+static void
+d_print_array_type (struct d_print_info *,
+                    const struct demangle_component *,
+                    struct d_print_mod *);
+
+static void
+d_print_expr_op (struct d_print_info *, const struct demangle_component *);
+
+static void
+d_print_cast (struct d_print_info *, const struct demangle_component *);
+
+static int d_demangle_callback (const char *, int,
+                                demangle_callbackref, void *);
+static char *d_demangle (const char *, int, size_t *);
+
+#ifdef CP_DEMANGLE_DEBUG
+
+static void
+d_dump (struct demangle_component *dc, int indent)
+{
+  int i;
+
+  if (dc == NULL)
+    {
+      if (indent == 0)
+        printf ("failed demangling\n");
+      return;
+    }
+
+  for (i = 0; i < indent; ++i)
+    putchar (' ');
+
+  switch (dc->type)
+    {
+    case DEMANGLE_COMPONENT_NAME:
+      printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
+      return;
+    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
+      printf ("template parameter %ld\n", dc->u.s_number.number);
+      return;
+    case DEMANGLE_COMPONENT_CTOR:
+      printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
+      d_dump (dc->u.s_ctor.name, indent + 2);
+      return;
+    case DEMANGLE_COMPONENT_DTOR:
+      printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
+      d_dump (dc->u.s_dtor.name, indent + 2);
+      return;
+    case DEMANGLE_COMPONENT_SUB_STD:
+      printf ("standard substitution %s\n", dc->u.s_string.string);
+      return;
+    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
+      printf ("builtin type %s\n", dc->u.s_builtin.type->name);
+      return;
+    case DEMANGLE_COMPONENT_OPERATOR:
+      printf ("operator %s\n", dc->u.s_operator.op->name);
+      return;
+    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
+      printf ("extended operator with %d args\n",
+             dc->u.s_extended_operator.args);
+      d_dump (dc->u.s_extended_operator.name, indent + 2);
+      return;
+
+    case DEMANGLE_COMPONENT_QUAL_NAME:
+      printf ("qualified name\n");
+      break;
+    case DEMANGLE_COMPONENT_LOCAL_NAME:
+      printf ("local name\n");
+      break;
+    case DEMANGLE_COMPONENT_TYPED_NAME:
+      printf ("typed name\n");
+      break;
+    case DEMANGLE_COMPONENT_TEMPLATE:
+      printf ("template\n");
+      break;
+    case DEMANGLE_COMPONENT_VTABLE:
+      printf ("vtable\n");
+      break;
+    case DEMANGLE_COMPONENT_VTT:
+      printf ("VTT\n");
+      break;
+    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+      printf ("construction vtable\n");
+      break;
+    case DEMANGLE_COMPONENT_TYPEINFO:
+      printf ("typeinfo\n");
+      break;
+    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+      printf ("typeinfo name\n");
+      break;
+    case DEMANGLE_COMPONENT_TYPEINFO_FN:
+      printf ("typeinfo function\n");
+      break;
+    case DEMANGLE_COMPONENT_THUNK:
+      printf ("thunk\n");
+      break;
+    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+      printf ("virtual thunk\n");
+      break;
+    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+      printf ("covariant thunk\n");
+      break;
+    case DEMANGLE_COMPONENT_JAVA_CLASS:
+      printf ("java class\n");
+      break;
+    case DEMANGLE_COMPONENT_GUARD:
+      printf ("guard\n");
+      break;
+    case DEMANGLE_COMPONENT_REFTEMP:
+      printf ("reference temporary\n");
+      break;
+    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
+      printf ("hidden alias\n");
+      break;
+    case DEMANGLE_COMPONENT_RESTRICT:
+      printf ("restrict\n");
+      break;
+    case DEMANGLE_COMPONENT_VOLATILE:
+      printf ("volatile\n");
+      break;
+    case DEMANGLE_COMPONENT_CONST:
+      printf ("const\n");
+      break;
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+      printf ("restrict this\n");
+      break;
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+      printf ("volatile this\n");
+      break;
+    case DEMANGLE_COMPONENT_CONST_THIS:
+      printf ("const this\n");
+      break;
+    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+      printf ("vendor type qualifier\n");
+      break;
+    case DEMANGLE_COMPONENT_POINTER:
+      printf ("pointer\n");
+      break;
+    case DEMANGLE_COMPONENT_REFERENCE:
+      printf ("reference\n");
+      break;
+    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
+      printf ("rvalue reference\n");
+      break;
+    case DEMANGLE_COMPONENT_COMPLEX:
+      printf ("complex\n");
+      break;
+    case DEMANGLE_COMPONENT_IMAGINARY:
+      printf ("imaginary\n");
+      break;
+    case DEMANGLE_COMPONENT_VENDOR_TYPE:
+      printf ("vendor type\n");
+      break;
+    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+      printf ("function type\n");
+      break;
+    case DEMANGLE_COMPONENT_ARRAY_TYPE:
+      printf ("array type\n");
+      break;
+    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+      printf ("pointer to member type\n");
+      break;
+    case DEMANGLE_COMPONENT_ARGLIST:
+      printf ("argument list\n");
+      break;
+    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+      printf ("template argument list\n");
+      break;
+    case DEMANGLE_COMPONENT_CAST:
+      printf ("cast\n");
+      break;
+    case DEMANGLE_COMPONENT_UNARY:
+      printf ("unary operator\n");
+      break;
+    case DEMANGLE_COMPONENT_BINARY:
+      printf ("binary operator\n");
+      break;
+    case DEMANGLE_COMPONENT_BINARY_ARGS:
+      printf ("binary operator arguments\n");
+      break;
+    case DEMANGLE_COMPONENT_TRINARY:
+      printf ("trinary operator\n");
+      break;
+    case DEMANGLE_COMPONENT_TRINARY_ARG1:
+      printf ("trinary operator arguments 1\n");
+      break;
+    case DEMANGLE_COMPONENT_TRINARY_ARG2:
+      printf ("trinary operator arguments 1\n");
+      break;
+    case DEMANGLE_COMPONENT_LITERAL:
+      printf ("literal\n");
+      break;
+    case DEMANGLE_COMPONENT_LITERAL_NEG:
+      printf ("negative literal\n");
+      break;
+    }
+
+  d_dump (d_left (dc), indent + 2);
+  d_dump (d_right (dc), indent + 2);
+}
+
+#endif /* CP_DEMANGLE_DEBUG */
+
+/* Fill in a DEMANGLE_COMPONENT_NAME.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len)
+{
+  if (p == NULL || s == NULL || len == 0)
+    return 0;
+  p->type = DEMANGLE_COMPONENT_NAME;
+  p->u.s_name.s = s;
+  p->u.s_name.len = len;
+  return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_extended_operator (struct demangle_component *p, int args,
+                                       struct demangle_component *name)
+{
+  if (p == NULL || args < 0 || name == NULL)
+    return 0;
+  p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
+  p->u.s_extended_operator.args = args;
+  p->u.s_extended_operator.name = name;
+  return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_CTOR.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_ctor (struct demangle_component *p,
+                          enum gnu_v3_ctor_kinds kind,
+                          struct demangle_component *name)
+{
+  if (p == NULL
+      || name == NULL
+      || (kind < gnu_v3_complete_object_ctor
+         && kind > gnu_v3_complete_object_allocating_ctor))
+    return 0;
+  p->type = DEMANGLE_COMPONENT_CTOR;
+  p->u.s_ctor.kind = kind;
+  p->u.s_ctor.name = name;
+  return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_DTOR.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_dtor (struct demangle_component *p,
+                          enum gnu_v3_dtor_kinds kind,
+                          struct demangle_component *name)
+{
+  if (p == NULL
+      || name == NULL
+      || (kind < gnu_v3_deleting_dtor
+         && kind > gnu_v3_base_object_dtor))
+    return 0;
+  p->type = DEMANGLE_COMPONENT_DTOR;
+  p->u.s_dtor.kind = kind;
+  p->u.s_dtor.name = name;
+  return 1;
+}
+
+/* Add a new component.  */
+
+static struct demangle_component *
+d_make_empty (struct d_info *di)
+{
+  struct demangle_component *p;
+
+  if (di->next_comp >= di->num_comps)
+    return NULL;
+  p = &di->comps[di->next_comp];
+  ++di->next_comp;
+  return p;
+}
+
+/* Add a new generic component.  */
+
+static struct demangle_component *
+d_make_comp (struct d_info *di, enum demangle_component_type type,
+             struct demangle_component *left,
+             struct demangle_component *right)
+{
+  struct demangle_component *p;
+
+  /* We check for errors here.  A typical error would be a NULL return
+     from a subroutine.  We catch those here, and return NULL
+     upward.  */
+  switch (type)
+    {
+      /* These types require two parameters.  */
+    case DEMANGLE_COMPONENT_QUAL_NAME:
+    case DEMANGLE_COMPONENT_LOCAL_NAME:
+    case DEMANGLE_COMPONENT_TYPED_NAME:
+    case DEMANGLE_COMPONENT_TEMPLATE:
+    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+    case DEMANGLE_COMPONENT_UNARY:
+    case DEMANGLE_COMPONENT_BINARY:
+    case DEMANGLE_COMPONENT_BINARY_ARGS:
+    case DEMANGLE_COMPONENT_TRINARY:
+    case DEMANGLE_COMPONENT_TRINARY_ARG1:
+    case DEMANGLE_COMPONENT_TRINARY_ARG2:
+    case DEMANGLE_COMPONENT_LITERAL:
+    case DEMANGLE_COMPONENT_LITERAL_NEG:
+      if (left == NULL || right == NULL)
+       return NULL;
+      break;
+
+      /* These types only require one parameter.  */
+    case DEMANGLE_COMPONENT_VTABLE:
+    case DEMANGLE_COMPONENT_VTT:
+    case DEMANGLE_COMPONENT_TYPEINFO:
+    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+    case DEMANGLE_COMPONENT_TYPEINFO_FN:
+    case DEMANGLE_COMPONENT_THUNK:
+    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+    case DEMANGLE_COMPONENT_JAVA_CLASS:
+    case DEMANGLE_COMPONENT_GUARD:
+    case DEMANGLE_COMPONENT_REFTEMP:
+    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
+    case DEMANGLE_COMPONENT_POINTER:
+    case DEMANGLE_COMPONENT_REFERENCE:
+    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
+    case DEMANGLE_COMPONENT_COMPLEX:
+    case DEMANGLE_COMPONENT_IMAGINARY:
+    case DEMANGLE_COMPONENT_VENDOR_TYPE:
+    case DEMANGLE_COMPONENT_ARGLIST:
+    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+    case DEMANGLE_COMPONENT_CAST:
+      if (left == NULL)
+       return NULL;
+      break;
+
+      /* This needs a right parameter, but the left parameter can be
+        empty.  */
+    case DEMANGLE_COMPONENT_ARRAY_TYPE:
+      if (right == NULL)
+       return NULL;
+      break;
+
+      /* These are allowed to have no parameters--in some cases they
+        will be filled in later.  */
+    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+    case DEMANGLE_COMPONENT_RESTRICT:
+    case DEMANGLE_COMPONENT_VOLATILE:
+    case DEMANGLE_COMPONENT_CONST:
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+    case DEMANGLE_COMPONENT_CONST_THIS:
+      break;
+
+      /* Other types should not be seen here.  */
+    default:
+      return NULL;
+    }
+
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = type;
+      p->u.s_binary.left = left;
+      p->u.s_binary.right = right;
+    }
+  return p;
+}
+
+/* Add a new name component.  */
+
+static struct demangle_component *
+d_make_name (struct d_info *di, const char *s, int len)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (! cplus_demangle_fill_name (p, s, len))
+    return NULL;
+  return p;
+}
+
+/* Add a new builtin type component.  */
+
+static struct demangle_component *
+d_make_builtin_type (struct d_info *di,
+                     const struct demangle_builtin_type_info *type)
+{
+  struct demangle_component *p;
+
+  if (type == NULL)
+    return NULL;
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
+      p->u.s_builtin.type = type;
+    }
+  return p;
+}
+
+/* Add a new operator component.  */
+
+static struct demangle_component *
+d_make_operator (struct d_info *di, const struct demangle_operator_info *op)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = DEMANGLE_COMPONENT_OPERATOR;
+      p->u.s_operator.op = op;
+    }
+  return p;
+}
+
+/* Add a new extended operator component.  */
+
+static struct demangle_component *
+d_make_extended_operator (struct d_info *di, int args,
+                          struct demangle_component *name)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (! cplus_demangle_fill_extended_operator (p, args, name))
+    return NULL;
+  return p;
+}
+
+/* Add a new constructor component.  */
+
+static struct demangle_component *
+d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind,
+             struct demangle_component *name)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (! cplus_demangle_fill_ctor (p, kind, name))
+    return NULL;
+  return p;
+}
+
+/* Add a new destructor component.  */
+
+static struct demangle_component *
+d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind,
+             struct demangle_component *name)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (! cplus_demangle_fill_dtor (p, kind, name))
+    return NULL;
+  return p;
+}
+
+/* Add a new template parameter.  */
+
+static struct demangle_component *
+d_make_template_param (struct d_info *di, long i)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
+      p->u.s_number.number = i;
+    }
+  return p;
+}
+
+/* Add a new standard substitution component.  */
+
+static struct demangle_component *
+d_make_sub (struct d_info *di, const char *name, int len)
+{
+  struct demangle_component *p;
+
+  p = d_make_empty (di);
+  if (p != NULL)
+    {
+      p->type = DEMANGLE_COMPONENT_SUB_STD;
+      p->u.s_string.string = name;
+      p->u.s_string.len = len;
+    }
+  return p;
+}
+
+/* <mangled-name> ::= _Z <encoding>
+
+   TOP_LEVEL is non-zero when called at the top level.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_mangled_name (struct d_info *di, int top_level)
+{
+  if (! d_check_char (di, '_'))
+    return NULL;
+  if (! d_check_char (di, 'Z'))
+    return NULL;
+  return d_encoding (di, top_level);
+}
+
+/* Return whether a function should have a return type.  The argument
+   is the function name, which may be qualified in various ways.  The
+   rules are that template functions have return types with some
+   exceptions, function types which are not part of a function name
+   mangling have return types with some exceptions, and non-template
+   function names do not have return types.  The exceptions are that
+   constructors, destructors, and conversion operators do not have
+   return types.  */
+
+static int
+has_return_type (struct demangle_component *dc)
+{
+  if (dc == NULL)
+    return 0;
+  switch (dc->type)
+    {
+    default:
+      return 0;
+    case DEMANGLE_COMPONENT_TEMPLATE:
+      return ! is_ctor_dtor_or_conversion (d_left (dc));
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+    case DEMANGLE_COMPONENT_CONST_THIS:
+      return has_return_type (d_left (dc));
+    }
+}
+
+/* Return whether a name is a constructor, a destructor, or a
+   conversion operator.  */
+
+static int
+is_ctor_dtor_or_conversion (struct demangle_component *dc)
+{
+  if (dc == NULL)
+    return 0;
+  switch (dc->type)
+    {
+    default:
+      return 0;
+    case DEMANGLE_COMPONENT_QUAL_NAME:
+    case DEMANGLE_COMPONENT_LOCAL_NAME:
+      return is_ctor_dtor_or_conversion (d_right (dc));
+    case DEMANGLE_COMPONENT_CTOR:
+    case DEMANGLE_COMPONENT_DTOR:
+    case DEMANGLE_COMPONENT_CAST:
+      return 1;
+    }
+}
+
+/* <encoding> ::= <(function) name> <bare-function-type>
+              ::= <(data) name>
+              ::= <special-name>
+
+   TOP_LEVEL is non-zero when called at the top level, in which case
+   if DMGL_PARAMS is not set we do not demangle the function
+   parameters.  We only set this at the top level, because otherwise
+   we would not correctly demangle names in local scopes.  */
+
+static struct demangle_component *
+d_encoding (struct d_info *di, int top_level)
+{
+  char peek = d_peek_char (di);
+
+  if (peek == 'G' || peek == 'T')
+    return d_special_name (di);
+  else
+    {
+      struct demangle_component *dc;
+
+      dc = d_name (di);
+
+      if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
+       {
+         /* Strip off any initial CV-qualifiers, as they really apply
+            to the `this' parameter, and they were not output by the
+            v2 demangler without DMGL_PARAMS.  */
+         while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+                || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+                || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
+           dc = d_left (dc);
+
+         /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
+            there may be CV-qualifiers on its right argument which
+            really apply here; this happens when parsing a class
+            which is local to a function.  */
+         if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+           {
+             struct demangle_component *dcr;
+
+             dcr = d_right (dc);
+             while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+                    || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+                    || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
+               dcr = d_left (dcr);
+             dc->u.s_binary.right = dcr;
+           }
+
+         return dc;
+       }
+
+      peek = d_peek_char (di);
+      if (dc == NULL || peek == '\0' || peek == 'E')
+       return dc;
+      return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
+                         d_bare_function_type (di, has_return_type (dc)));
+    }
+}
+
+/* <name> ::= <nested-name>
+          ::= <unscoped-name>
+          ::= <unscoped-template-name> <template-args>
+          ::= <local-name>
+
+   <unscoped-name> ::= <unqualified-name>
+                   ::= St <unqualified-name>
+
+   <unscoped-template-name> ::= <unscoped-name>
+                            ::= <substitution>
+*/
+
+static struct demangle_component *
+d_name (struct d_info *di)
+{
+  char peek = d_peek_char (di);
+  struct demangle_component *dc;
+
+  switch (peek)
+    {
+    case 'N':
+      return d_nested_name (di);
+
+    case 'Z':
+      return d_local_name (di);
+
+    case 'L':
+      return d_unqualified_name (di);
+       
+    case 'S':
+      {
+       int subst;
+
+       if (d_peek_next_char (di) != 't')
+         {
+           dc = d_substitution (di, 0);
+           subst = 1;
+         }
+       else
+         {
+           d_advance (di, 2);
+           dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
+                             d_make_name (di, "std", 3),
+                             d_unqualified_name (di));
+           di->expansion += 3;
+           subst = 0;
+         }
+
+       if (d_peek_char (di) != 'I')
+         {
+           /* The grammar does not permit this case to occur if we
+              called d_substitution() above (i.e., subst == 1).  We
+              don't bother to check.  */
+         }
+       else
+         {
+           /* This is <template-args>, which means that we just saw
+              <unscoped-template-name>, which is a substitution
+              candidate if we didn't just get it from a
+              substitution.  */
+           if (! subst)
+             {
+               if (! d_add_substitution (di, dc))
+                 return NULL;
+             }
+           dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
+                             d_template_args (di));
+         }
+
+       return dc;
+      }
+
+    default:
+      dc = d_unqualified_name (di);
+      if (d_peek_char (di) == 'I')
+       {
+         /* This is <template-args>, which means that we just saw
+            <unscoped-template-name>, which is a substitution
+            candidate.  */
+         if (! d_add_substitution (di, dc))
+           return NULL;
+         dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
+                           d_template_args (di));
+       }
+      return dc;
+    }
+}
+
+/* <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
+                 ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
+*/
+
+static struct demangle_component *
+d_nested_name (struct d_info *di)
+{
+  struct demangle_component *ret;
+  struct demangle_component **pret;
+
+  if (! d_check_char (di, 'N'))
+    return NULL;
+
+  pret = d_cv_qualifiers (di, &ret, 1);
+  if (pret == NULL)
+    return NULL;
+
+  *pret = d_prefix (di);
+  if (*pret == NULL)
+    return NULL;
+
+  if (! d_check_char (di, 'E'))
+    return NULL;
+
+  return ret;
+}
+
+/* <prefix> ::= <prefix> <unqualified-name>
+            ::= <template-prefix> <template-args>
+            ::= <template-param>
+            ::=
+            ::= <substitution>
+
+   <template-prefix> ::= <prefix> <(template) unqualified-name>
+                     ::= <template-param>
+                     ::= <substitution>
+*/
+
+static struct demangle_component *
+d_prefix (struct d_info *di)
+{
+  struct demangle_component *ret = NULL;
+
+  while (1)
+    {
+      char peek;
+      enum demangle_component_type comb_type;
+      struct demangle_component *dc;
+
+      peek = d_peek_char (di);
+      if (peek == '\0')
+       return NULL;
+
+      /* The older code accepts a <local-name> here, but I don't see
+        that in the grammar.  The older code does not accept a
+        <template-param> here.  */
+
+      comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
+      if (IS_DIGIT (peek)
+         || IS_LOWER (peek)
+         || peek == 'C'
+         || peek == 'D'
+         || peek == 'L')
+       dc = d_unqualified_name (di);
+      else if (peek == 'S')
+       dc = d_substitution (di, 1);
+      else if (peek == 'I')
+       {
+         if (ret == NULL)
+           return NULL;
+         comb_type = DEMANGLE_COMPONENT_TEMPLATE;
+         dc = d_template_args (di);
+       }
+      else if (peek == 'T')
+       dc = d_template_param (di);
+      else if (peek == 'E')
+       return ret;
+      else
+       return NULL;
+
+      if (ret == NULL)
+       ret = dc;
+      else
+       ret = d_make_comp (di, comb_type, ret, dc);
+
+      if (peek != 'S' && d_peek_char (di) != 'E')
+       {
+         if (! d_add_substitution (di, ret))
+           return NULL;
+       }
+    }
+}
+
+/* <unqualified-name> ::= <operator-name>
+                      ::= <ctor-dtor-name>
+                      ::= <source-name>
+                     ::= <local-source-name> 
+
+    <local-source-name>        ::= L <source-name> <discriminator>
+*/
+
+static struct demangle_component *
+d_unqualified_name (struct d_info *di)
+{
+  char peek;
+
+  peek = d_peek_char (di);
+  if (IS_DIGIT (peek))
+    return d_source_name (di);
+  else if (IS_LOWER (peek))
+    {
+      struct demangle_component *ret;
+
+      ret = d_operator_name (di);
+      if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
+       di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
+      return ret;
+    }
+  else if (peek == 'C' || peek == 'D')
+    return d_ctor_dtor_name (di);
+  else if (peek == 'L')
+    {
+      struct demangle_component * ret;
+
+      d_advance (di, 1);
+
+      ret = d_source_name (di);
+      if (ret == NULL)
+       return NULL;
+      if (! d_discriminator (di))
+       return NULL;
+      return ret;
+    }
+  else
+    return NULL;
+}
+
+/* <source-name> ::= <(positive length) number> <identifier>  */
+
+static struct demangle_component *
+d_source_name (struct d_info *di)
+{
+  long len;
+  struct demangle_component *ret;
+
+  len = d_number (di);
+  if (len <= 0)
+    return NULL;
+  ret = d_identifier (di, len);
+  di->last_name = ret;
+  return ret;
+}
+
+/* number ::= [n] <(non-negative decimal integer)>  */
+
+static long
+d_number (struct d_info *di)
+{
+  int negative;
+  char peek;
+  long ret;
+
+  negative = 0;
+  peek = d_peek_char (di);
+  if (peek == 'n')
+    {
+      negative = 1;
+      d_advance (di, 1);
+      peek = d_peek_char (di);
+    }
+
+  ret = 0;
+  while (1)
+    {
+      if (! IS_DIGIT (peek))
+       {
+         if (negative)
+           ret = - ret;
+         return ret;
+       }
+      ret = ret * 10 + peek - '0';
+      d_advance (di, 1);
+      peek = d_peek_char (di);
+    }
+}
+
+/* identifier ::= <(unqualified source code identifier)>  */
+
+static struct demangle_component *
+d_identifier (struct d_info *di, int len)
+{
+  const char *name;
+
+  name = d_str (di);
+
+  if (di->send - name < len)
+    return NULL;
+
+  d_advance (di, len);
+
+  /* A Java mangled name may have a trailing '$' if it is a C++
+     keyword.  This '$' is not included in the length count.  We just
+     ignore the '$'.  */
+  if ((di->options & DMGL_JAVA) != 0
+      && d_peek_char (di) == '$')
+    d_advance (di, 1);
+
+  /* Look for something which looks like a gcc encoding of an
+     anonymous namespace, and replace it with a more user friendly
+     name.  */
+  if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
+      && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
+                ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
+    {
+      const char *s;
+
+      s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
+      if ((*s == '.' || *s == '_' || *s == '$')
+         && s[1] == 'N')
+       {
+         di->expansion -= len - sizeof "(anonymous namespace)";
+         return d_make_name (di, "(anonymous namespace)",
+                             sizeof "(anonymous namespace)" - 1);
+       }
+    }
+
+  return d_make_name (di, name, len);
+}
+
+/* operator_name ::= many different two character encodings.
+                 ::= cv <type>
+                 ::= v <digit> <source-name>
+*/
+
+#define NL(s) s, (sizeof s) - 1
+
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_operator_info cplus_demangle_operators[] =
+{
+  { "aN", NL ("&="),        2 },
+  { "aS", NL ("="),         2 },
+  { "aa", NL ("&&"),        2 },
+  { "ad", NL ("&"),         1 },
+  { "an", NL ("&"),         2 },
+  { "cl", NL ("()"),        0 },
+  { "cm", NL (","),         2 },
+  { "co", NL ("~"),         1 },
+  { "dV", NL ("/="),        2 },
+  { "da", NL ("delete[]"),  1 },
+  { "de", NL ("*"),         1 },
+  { "dl", NL ("delete"),    1 },
+  { "dv", NL ("/"),         2 },
+  { "eO", NL ("^="),        2 },
+  { "eo", NL ("^"),         2 },
+  { "eq", NL ("=="),        2 },
+  { "ge", NL (">="),        2 },
+  { "gt", NL (">"),         2 },
+  { "ix", NL ("[]"),        2 },
+  { "lS", NL ("<<="),       2 },
+  { "le", NL ("<="),        2 },
+  { "ls", NL ("<<"),        2 },
+  { "lt", NL ("<"),         2 },
+  { "mI", NL ("-="),        2 },
+  { "mL", NL ("*="),        2 },
+  { "mi", NL ("-"),         2 },
+  { "ml", NL ("*"),         2 },
+  { "mm", NL ("--"),        1 },
+  { "na", NL ("new[]"),     1 },
+  { "ne", NL ("!="),        2 },
+  { "ng", NL ("-"),         1 },
+  { "nt", NL ("!"),         1 },
+  { "nw", NL ("new"),       1 },
+  { "oR", NL ("|="),        2 },
+  { "oo", NL ("||"),        2 },
+  { "or", NL ("|"),         2 },
+  { "pL", NL ("+="),        2 },
+  { "pl", NL ("+"),         2 },
+  { "pm", NL ("->*"),       2 },
+  { "pp", NL ("++"),        1 },
+  { "ps", NL ("+"),         1 },
+  { "pt", NL ("->"),        2 },
+  { "qu", NL ("?"),         3 },
+  { "rM", NL ("%="),        2 },
+  { "rS", NL (">>="),       2 },
+  { "rm", NL ("%"),         2 },
+  { "rs", NL (">>"),        2 },
+  { "st", NL ("sizeof "),   1 },
+  { "sz", NL ("sizeof "),   1 },
+  { NULL, NULL, 0,          0 }
+};
+
+static struct demangle_component *
+d_operator_name (struct d_info *di)
+{
+  char c1;
+  char c2;
+
+  c1 = d_next_char (di);
+  c2 = d_next_char (di);
+  if (c1 == 'v' && IS_DIGIT (c2))
+    return d_make_extended_operator (di, c2 - '0', d_source_name (di));
+  else if (c1 == 'c' && c2 == 'v')
+    return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
+                       cplus_demangle_type (di), NULL);
+  else
+    {
+      /* LOW is the inclusive lower bound.  */
+      int low = 0;
+      /* HIGH is the exclusive upper bound.  We subtract one to ignore
+        the sentinel at the end of the array.  */
+      int high = ((sizeof (cplus_demangle_operators)
+                  / sizeof (cplus_demangle_operators[0]))
+                 - 1);
+
+      while (1)
+       {
+         int i;
+         const struct demangle_operator_info *p;
+
+         i = low + (high - low) / 2;
+         p = cplus_demangle_operators + i;
+
+         if (c1 == p->code[0] && c2 == p->code[1])
+           return d_make_operator (di, p);
+
+         if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
+           high = i;
+         else
+           low = i + 1;
+         if (low == high)
+           return NULL;
+       }
+    }
+}
+
+/* <special-name> ::= TV <type>
+                  ::= TT <type>
+                  ::= TI <type>
+                  ::= TS <type>
+                  ::= GV <(object) name>
+                  ::= T <call-offset> <(base) encoding>
+                  ::= Tc <call-offset> <call-offset> <(base) encoding>
+   Also g++ extensions:
+                  ::= TC <type> <(offset) number> _ <(base) type>
+                  ::= TF <type>
+                  ::= TJ <type>
+                  ::= GR <name>
+                 ::= GA <encoding>
+*/
+
+static struct demangle_component *
+d_special_name (struct d_info *di)
+{
+  di->expansion += 20;
+  if (d_check_char (di, 'T'))
+    {
+      switch (d_next_char (di))
+       {
+       case 'V':
+         di->expansion -= 5;
+         return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
+                             cplus_demangle_type (di), NULL);
+       case 'T':
+         di->expansion -= 10;
+         return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
+                             cplus_demangle_type (di), NULL);
+       case 'I':
+         return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
+                             cplus_demangle_type (di), NULL);
+       case 'S':
+         return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
+                             cplus_demangle_type (di), NULL);
+
+       case 'h':
+         if (! d_call_offset (di, 'h'))
+           return NULL;
+         return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
+                             d_encoding (di, 0), NULL);
+
+       case 'v':
+         if (! d_call_offset (di, 'v'))
+           return NULL;
+         return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
+                             d_encoding (di, 0), NULL);
+
+       case 'c':
+         if (! d_call_offset (di, '\0'))
+           return NULL;
+         if (! d_call_offset (di, '\0'))
+           return NULL;
+         return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
+                             d_encoding (di, 0), NULL);
+
+       case 'C':
+         {
+           struct demangle_component *derived_type;
+           long offset;
+           struct demangle_component *base_type;
+
+           derived_type = cplus_demangle_type (di);
+           offset = d_number (di);
+           if (offset < 0)
+             return NULL;
+           if (! d_check_char (di, '_'))
+             return NULL;
+           base_type = cplus_demangle_type (di);
+           /* We don't display the offset.  FIXME: We should display
+              it in verbose mode.  */
+           di->expansion += 5;
+           return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
+                               base_type, derived_type);
+         }
+
+       case 'F':
+         return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
+                             cplus_demangle_type (di), NULL);
+       case 'J':
+         return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
+                             cplus_demangle_type (di), NULL);
+
+       default:
+         return NULL;
+       }
+    }
+  else if (d_check_char (di, 'G'))
+    {
+      switch (d_next_char (di))
+       {
+       case 'V':
+         return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
+
+       case 'R':
+         return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di),
+                             NULL);
+
+       case 'A':
+         return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
+                             d_encoding (di, 0), NULL);
+
+       default:
+         return NULL;
+       }
+    }
+  else
+    return NULL;
+}
+
+/* <call-offset> ::= h <nv-offset> _
+                 ::= v <v-offset> _
+
+   <nv-offset> ::= <(offset) number>
+
+   <v-offset> ::= <(offset) number> _ <(virtual offset) number>
+
+   The C parameter, if not '\0', is a character we just read which is
+   the start of the <call-offset>.
+
+   We don't display the offset information anywhere.  FIXME: We should
+   display it in verbose mode.  */
+
+static int
+d_call_offset (struct d_info *di, int c)
+{
+  if (c == '\0')
+    c = d_next_char (di);
+
+  if (c == 'h')
+    d_number (di);
+  else if (c == 'v')
+    {
+      d_number (di);
+      if (! d_check_char (di, '_'))
+       return 0;
+      d_number (di);
+    }
+  else
+    return 0;
+
+  if (! d_check_char (di, '_'))
+    return 0;
+
+  return 1;
+}
+
+/* <ctor-dtor-name> ::= C1
+                    ::= C2
+                    ::= C3
+                    ::= D0
+                    ::= D1
+                    ::= D2
+*/
+
+static struct demangle_component *
+d_ctor_dtor_name (struct d_info *di)
+{
+  if (di->last_name != NULL)
+    {
+      if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
+       di->expansion += di->last_name->u.s_name.len;
+      else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
+       di->expansion += di->last_name->u.s_string.len;
+    }
+  switch (d_peek_char (di))
+    {
+    case 'C':
+      {
+       enum gnu_v3_ctor_kinds kind;
+
+       switch (d_peek_next_char (di))
+         {
+         case '1':
+           kind = gnu_v3_complete_object_ctor;
+           break;
+         case '2':
+           kind = gnu_v3_base_object_ctor;
+           break;
+         case '3':
+           kind = gnu_v3_complete_object_allocating_ctor;
+           break;
+         default:
+           return NULL;
+         }
+       d_advance (di, 2);
+       return d_make_ctor (di, kind, di->last_name);
+      }
+
+    case 'D':
+      {
+       enum gnu_v3_dtor_kinds kind;
+
+       switch (d_peek_next_char (di))
+         {
+         case '0':
+           kind = gnu_v3_deleting_dtor;
+           break;
+         case '1':
+           kind = gnu_v3_complete_object_dtor;
+           break;
+         case '2':
+           kind = gnu_v3_base_object_dtor;
+           break;
+         default:
+           return NULL;
+         }
+       d_advance (di, 2);
+       return d_make_dtor (di, kind, di->last_name);
+      }
+
+    default:
+      return NULL;
+    }
+}
+
+/* <type> ::= <builtin-type>
+          ::= <function-type>
+          ::= <class-enum-type>
+          ::= <array-type>
+          ::= <pointer-to-member-type>
+          ::= <template-param>
+          ::= <template-template-param> <template-args>
+          ::= <substitution>
+          ::= <CV-qualifiers> <type>
+          ::= P <type>
+          ::= R <type>
+          ::= O <type> (C++0x)
+          ::= C <type>
+          ::= G <type>
+          ::= U <source-name> <type>
+
+   <builtin-type> ::= various one letter codes
+                  ::= u <source-name>
+*/
+
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_builtin_type_info
+cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
+{
+  /* a */ { NL ("signed char"),        NL ("signed char"),     D_PRINT_DEFAULT },
+  /* b */ { NL ("bool"),       NL ("boolean"),         D_PRINT_BOOL },
+  /* c */ { NL ("char"),       NL ("byte"),            D_PRINT_DEFAULT },
+  /* d */ { NL ("double"),     NL ("double"),          D_PRINT_FLOAT },
+  /* e */ { NL ("long double"),        NL ("long double"),     D_PRINT_FLOAT },
+  /* f */ { NL ("float"),      NL ("float"),           D_PRINT_FLOAT },
+  /* g */ { NL ("__float128"), NL ("__float128"),      D_PRINT_FLOAT },
+  /* h */ { NL ("unsigned char"), NL ("unsigned char"),        D_PRINT_DEFAULT },
+  /* i */ { NL ("int"),                NL ("int"),             D_PRINT_INT },
+  /* j */ { NL ("unsigned int"), NL ("unsigned"),      D_PRINT_UNSIGNED },
+  /* k */ { NULL, 0,           NULL, 0,                D_PRINT_DEFAULT },
+  /* l */ { NL ("long"),       NL ("long"),            D_PRINT_LONG },
+  /* m */ { NL ("unsigned long"), NL ("unsigned long"),        D_PRINT_UNSIGNED_LONG },
+  /* n */ { NL ("__int128"),   NL ("__int128"),        D_PRINT_DEFAULT },
+  /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
+           D_PRINT_DEFAULT },
+  /* p */ { NULL, 0,           NULL, 0,                D_PRINT_DEFAULT },
+  /* q */ { NULL, 0,           NULL, 0,                D_PRINT_DEFAULT },
+  /* r */ { NULL, 0,           NULL, 0,                D_PRINT_DEFAULT },
+  /* s */ { NL ("short"),      NL ("short"),           D_PRINT_DEFAULT },
+  /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
+  /* u */ { NULL, 0,           NULL, 0,                D_PRINT_DEFAULT },
+  /* v */ { NL ("void"),       NL ("void"),            D_PRINT_VOID },
+  /* w */ { NL ("wchar_t"),    NL ("char"),            D_PRINT_DEFAULT },
+  /* x */ { NL ("long long"),  NL ("long"),            D_PRINT_LONG_LONG },
+  /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
+           D_PRINT_UNSIGNED_LONG_LONG },
+  /* z */ { NL ("..."),                NL ("..."),             D_PRINT_DEFAULT },
+};
+
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_type (struct d_info *di)
+{
+  char peek;
+  struct demangle_component *ret;
+  int can_subst;
+
+  /* The ABI specifies that when CV-qualifiers are used, the base type
+     is substitutable, and the fully qualified type is substitutable,
+     but the base type with a strict subset of the CV-qualifiers is
+     not substitutable.  The natural recursive implementation of the
+     CV-qualifiers would cause subsets to be substitutable, so instead
+     we pull them all off now.
+
+     FIXME: The ABI says that order-insensitive vendor qualifiers
+     should be handled in the same way, but we have no way to tell
+     which vendor qualifiers are order-insensitive and which are
+     order-sensitive.  So we just assume that they are all
+     order-sensitive.  g++ 3.4 supports only one vendor qualifier,
+     __vector, and it treats it as order-sensitive when mangling
+     names.  */
+
+  peek = d_peek_char (di);
+  if (peek == 'r' || peek == 'V' || peek == 'K')
+    {
+      struct demangle_component **pret;
+
+      pret = d_cv_qualifiers (di, &ret, 0);
+      if (pret == NULL)
+       return NULL;
+      *pret = cplus_demangle_type (di);
+      if (! *pret || ! d_add_substitution (di, ret))
+       return NULL;
+      return ret;
+    }
+
+  can_subst = 1;
+
+  switch (peek)
+    {
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
+    case 'h': case 'i': case 'j':           case 'l': case 'm': case 'n':
+    case 'o':                               case 's': case 't':
+    case 'v': case 'w': case 'x': case 'y': case 'z':
+      ret = d_make_builtin_type (di,
+                                &cplus_demangle_builtin_types[peek - 'a']);
+      di->expansion += ret->u.s_builtin.type->len;
+      can_subst = 0;
+      d_advance (di, 1);
+      break;
+
+    case 'u':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
+                        d_source_name (di), NULL);
+      break;
+
+    case 'F':
+      ret = d_function_type (di);
+      break;
+
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+    case 'N':
+    case 'Z':
+      ret = d_class_enum_type (di);
+      break;
+
+    case 'A':
+      ret = d_array_type (di);
+      break;
+
+    case 'M':
+      ret = d_pointer_to_member_type (di);
+      break;
+
+    case 'T':
+      ret = d_template_param (di);
+      if (d_peek_char (di) == 'I')
+       {
+         /* This is <template-template-param> <template-args>.  The
+            <template-template-param> part is a substitution
+            candidate.  */
+         if (! d_add_substitution (di, ret))
+           return NULL;
+         ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
+                            d_template_args (di));
+       }
+      break;
+
+    case 'S':
+      /* If this is a special substitution, then it is the start of
+        <class-enum-type>.  */
+      {
+       char peek_next;
+
+       peek_next = d_peek_next_char (di);
+       if (IS_DIGIT (peek_next)
+           || peek_next == '_'
+           || IS_UPPER (peek_next))
+         {
+           ret = d_substitution (di, 0);
+           /* The substituted name may have been a template name and
+              may be followed by tepmlate args.  */
+           if (d_peek_char (di) == 'I')
+             ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
+                                d_template_args (di));
+           else
+             can_subst = 0;
+         }
+       else
+         {
+           ret = d_class_enum_type (di);
+           /* If the substitution was a complete type, then it is not
+              a new substitution candidate.  However, if the
+              substitution was followed by template arguments, then
+              the whole thing is a substitution candidate.  */
+           if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
+             can_subst = 0;
+         }
+      }
+      break;
+
+    case 'O':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE,
+                         cplus_demangle_type (di), NULL);
+      break;
+
+    case 'P':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
+                        cplus_demangle_type (di), NULL);
+      break;
+
+    case 'R':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
+                         cplus_demangle_type (di), NULL);
+      break;
+
+    case 'C':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
+                        cplus_demangle_type (di), NULL);
+      break;
+
+    case 'G':
+      d_advance (di, 1);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
+                        cplus_demangle_type (di), NULL);
+      break;
+
+    case 'U':
+      d_advance (di, 1);
+      ret = d_source_name (di);
+      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
+                        cplus_demangle_type (di), ret);
+      break;
+
+    default:
+      return NULL;
+    }
+
+  if (can_subst)
+    {
+      if (! d_add_substitution (di, ret))
+       return NULL;
+    }
+
+  return ret;
+}
+
+/* <CV-qualifiers> ::= [r] [V] [K]  */
+
+static struct demangle_component **
+d_cv_qualifiers (struct d_info *di,
+                 struct demangle_component **pret, int member_fn)
+{
+  char peek;
+
+  peek = d_peek_char (di);
+  while (peek == 'r' || peek == 'V' || peek == 'K')
+    {
+      enum demangle_component_type t;
+
+      d_advance (di, 1);
+      if (peek == 'r')
+       {
+         t = (member_fn
+              ? DEMANGLE_COMPONENT_RESTRICT_THIS
+              : DEMANGLE_COMPONENT_RESTRICT);
+         di->expansion += sizeof "restrict";
+       }
+      else if (peek == 'V')
+       {
+         t = (member_fn
+              ? DEMANGLE_COMPONENT_VOLATILE_THIS
+              : DEMANGLE_COMPONENT_VOLATILE);
+         di->expansion += sizeof "volatile";
+       }
+      else
+       {
+         t = (member_fn
+              ? DEMANGLE_COMPONENT_CONST_THIS
+              : DEMANGLE_COMPONENT_CONST);
+         di->expansion += sizeof "const";
+       }
+
+      *pret = d_make_comp (di, t, NULL, NULL);
+      if (*pret == NULL)
+       return NULL;
+      pret = &d_left (*pret);
+
+      peek = d_peek_char (di);
+    }
+
+  return pret;
+}
+
+/* <function-type> ::= F [Y] <bare-function-type> E  */
+
+static struct demangle_component *
+d_function_type (struct d_info *di)
+{
+  struct demangle_component *ret;
+
+  if (! d_check_char (di, 'F'))
+    return NULL;
+  if (d_peek_char (di) == 'Y')
+    {
+      /* Function has C linkage.  We don't print this information.
+        FIXME: We should print it in verbose mode.  */
+      d_advance (di, 1);
+    }
+  ret = d_bare_function_type (di, 1);
+  if (! d_check_char (di, 'E'))
+    return NULL;
+  return ret;
+}
+
+/* <bare-function-type> ::= [J]<type>+  */
+
+static struct demangle_component *
+d_bare_function_type (struct d_info *di, int has_return_type)
+{
+  struct demangle_component *return_type;
+  struct demangle_component *tl;
+  struct demangle_component **ptl;
+  char peek;
+
+  /* Detect special qualifier indicating that the first argument
+     is the return type.  */
+  peek = d_peek_char (di);
+  if (peek == 'J')
+    {
+      d_advance (di, 1);
+      has_return_type = 1;
+    }
+
+  return_type = NULL;
+  tl = NULL;
+  ptl = &tl;
+  while (1)
+    {
+      struct demangle_component *type;
+
+      peek = d_peek_char (di);
+      if (peek == '\0' || peek == 'E')
+       break;
+      type = cplus_demangle_type (di);
+      if (type == NULL)
+       return NULL;
+      if (has_return_type)
+       {
+         return_type = type;
+         has_return_type = 0;
+       }
+      else
+       {
+         *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
+         if (*ptl == NULL)
+           return NULL;
+         ptl = &d_right (*ptl);
+       }
+    }
+
+  /* There should be at least one parameter type besides the optional
+     return type.  A function which takes no arguments will have a
+     single parameter type void.  */
+  if (tl == NULL)
+    return NULL;
+
+  /* If we have a single parameter type void, omit it.  */
+  if (d_right (tl) == NULL
+      && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
+      && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
+    {
+      di->expansion -= d_left (tl)->u.s_builtin.type->len;
+      tl = NULL;
+    }
+
+  return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl);
+}
+
+/* <class-enum-type> ::= <name>  */
+
+static struct demangle_component *
+d_class_enum_type (struct d_info *di)
+{
+  return d_name (di);
+}
+
+/* <array-type> ::= A <(positive dimension) number> _ <(element) type>
+                ::= A [<(dimension) expression>] _ <(element) type>
+*/
+
+static struct demangle_component *
+d_array_type (struct d_info *di)
+{
+  char peek;
+  struct demangle_component *dim;
+
+  if (! d_check_char (di, 'A'))
+    return NULL;
+
+  peek = d_peek_char (di);
+  if (peek == '_')
+    dim = NULL;
+  else if (IS_DIGIT (peek))
+    {
+      const char *s;
+
+      s = d_str (di);
+      do
+       {
+         d_advance (di, 1);
+         peek = d_peek_char (di);
+       }
+      while (IS_DIGIT (peek));
+      dim = d_make_name (di, s, d_str (di) - s);
+      if (dim == NULL)
+       return NULL;
+    }
+  else
+    {
+      dim = d_expression (di);
+      if (dim == NULL)
+       return NULL;
+    }
+
+  if (! d_check_char (di, '_'))
+    return NULL;
+
+  return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
+                     cplus_demangle_type (di));
+}
+
+/* <pointer-to-member-type> ::= M <(class) type> <(member) type>  */
+
+static struct demangle_component *
+d_pointer_to_member_type (struct d_info *di)
+{
+  struct demangle_component *cl;
+  struct demangle_component *mem;
+  struct demangle_component **pmem;
+
+  if (! d_check_char (di, 'M'))
+    return NULL;
+
+  cl = cplus_demangle_type (di);
+
+  /* The ABI specifies that any type can be a substitution source, and
+     that M is followed by two types, and that when a CV-qualified
+     type is seen both the base type and the CV-qualified types are
+     substitution sources.  The ABI also specifies that for a pointer
+     to a CV-qualified member function, the qualifiers are attached to
+     the second type.  Given the grammar, a plain reading of the ABI
+     suggests that both the CV-qualified member function and the
+     non-qualified member function are substitution sources.  However,
+     g++ does not work that way.  g++ treats only the CV-qualified
+     member function as a substitution source.  FIXME.  So to work
+     with g++, we need to pull off the CV-qualifiers here, in order to
+     avoid calling add_substitution() in cplus_demangle_type().  But
+     for a CV-qualified member which is not a function, g++ does
+     follow the ABI, so we need to handle that case here by calling
+     d_add_substitution ourselves.  */
+
+  pmem = d_cv_qualifiers (di, &mem, 1);
+  if (pmem == NULL)
+    return NULL;
+  *pmem = cplus_demangle_type (di);
+  if (*pmem == NULL)
+    return NULL;
+
+  if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
+    {
+      if (! d_add_substitution (di, mem))
+       return NULL;
+    }
+
+  return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
+}
+
+/* <template-param> ::= T_
+                    ::= T <(parameter-2 non-negative) number> _
+*/
+
+static struct demangle_component *
+d_template_param (struct d_info *di)
+{
+  long param;
+
+  if (! d_check_char (di, 'T'))
+    return NULL;
+
+  if (d_peek_char (di) == '_')
+    param = 0;
+  else
+    {
+      param = d_number (di);
+      if (param < 0)
+       return NULL;
+      param += 1;
+    }
+
+  if (! d_check_char (di, '_'))
+    return NULL;
+
+  ++di->did_subs;
+
+  return d_make_template_param (di, param);
+}
+
+/* <template-args> ::= I <template-arg>+ E  */
+
+static struct demangle_component *
+d_template_args (struct d_info *di)
+{
+  struct demangle_component *hold_last_name;
+  struct demangle_component *al;
+  struct demangle_component **pal;
+
+  /* Preserve the last name we saw--don't let the template arguments
+     clobber it, as that would give us the wrong name for a subsequent
+     constructor or destructor.  */
+  hold_last_name = di->last_name;
+
+  if (! d_check_char (di, 'I'))
+    return NULL;
+
+  al = NULL;
+  pal = &al;
+  while (1)
+    {
+      struct demangle_component *a;
+
+      a = d_template_arg (di);
+      if (a == NULL)
+       return NULL;
+
+      *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
+      if (*pal == NULL)
+       return NULL;
+      pal = &d_right (*pal);
+
+      if (d_peek_char (di) == 'E')
+       {
+         d_advance (di, 1);
+         break;
+       }
+    }
+
+  di->last_name = hold_last_name;
+
+  return al;
+}
+
+/* <template-arg> ::= <type>
+                  ::= X <expression> E
+                  ::= <expr-primary>
+*/
+
+static struct demangle_component *
+d_template_arg (struct d_info *di)
+{
+  struct demangle_component *ret;
+
+  switch (d_peek_char (di))
+    {
+    case 'X':
+      d_advance (di, 1);
+      ret = d_expression (di);
+      if (! d_check_char (di, 'E'))
+       return NULL;
+      return ret;
+
+    case 'L':
+      return d_expr_primary (di);
+
+    default:
+      return cplus_demangle_type (di);
+    }
+}
+
+/* <expression> ::= <(unary) operator-name> <expression>
+                ::= <(binary) operator-name> <expression> <expression>
+                ::= <(trinary) operator-name> <expression> <expression> <expression>
+                ::= st <type>
+                ::= <template-param>
+                ::= sr <type> <unqualified-name>
+                ::= sr <type> <unqualified-name> <template-args>
+                ::= <expr-primary>
+*/
+
+static struct demangle_component *
+d_expression (struct d_info *di)
+{
+  char peek;
+
+  peek = d_peek_char (di);
+  if (peek == 'L')
+    return d_expr_primary (di);
+  else if (peek == 'T')
+    return d_template_param (di);
+  else if (peek == 's' && d_peek_next_char (di) == 'r')
+    {
+      struct demangle_component *type;
+      struct demangle_component *name;
+
+      d_advance (di, 2);
+      type = cplus_demangle_type (di);
+      name = d_unqualified_name (di);
+      if (d_peek_char (di) != 'I')
+       return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
+      else
+       return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
+                           d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
+                                        d_template_args (di)));
+    }
+  else
+    {
+      struct demangle_component *op;
+      int args;
+
+      op = d_operator_name (di);
+      if (op == NULL)
+       return NULL;
+
+      if (op->type == DEMANGLE_COMPONENT_OPERATOR)
+       di->expansion += op->u.s_operator.op->len - 2;
+
+      if (op->type == DEMANGLE_COMPONENT_OPERATOR
+         && strcmp (op->u.s_operator.op->code, "st") == 0)
+       return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+                           cplus_demangle_type (di));
+
+      switch (op->type)
+       {
+       default:
+         return NULL;
+       case DEMANGLE_COMPONENT_OPERATOR:
+         args = op->u.s_operator.op->args;
+         break;
+       case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
+         args = op->u.s_extended_operator.args;
+         break;
+       case DEMANGLE_COMPONENT_CAST:
+         args = 1;
+         break;
+       }
+
+      switch (args)
+       {
+       case 1:
+         return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+                             d_expression (di));
+       case 2:
+         {
+           struct demangle_component *left;
+
+           left = d_expression (di);
+           return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
+                               d_make_comp (di,
+                                            DEMANGLE_COMPONENT_BINARY_ARGS,
+                                            left,
+                                            d_expression (di)));
+         }
+       case 3:
+         {
+           struct demangle_component *first;
+           struct demangle_component *second;
+
+           first = d_expression (di);
+           second = d_expression (di);
+           return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
+                               d_make_comp (di,
+                                            DEMANGLE_COMPONENT_TRINARY_ARG1,
+                                            first,
+                                            d_make_comp (di,
+                                                         DEMANGLE_COMPONENT_TRINARY_ARG2,
+                                                         second,
+                                                         d_expression (di))));
+         }
+       default:
+         return NULL;
+       }
+    }
+}
+
+/* <expr-primary> ::= L <type> <(value) number> E
+                  ::= L <type> <(value) float> E
+                  ::= L <mangled-name> E
+*/
+
+static struct demangle_component *
+d_expr_primary (struct d_info *di)
+{
+  struct demangle_component *ret;
+
+  if (! d_check_char (di, 'L'))
+    return NULL;
+  if (d_peek_char (di) == '_')
+    ret = cplus_demangle_mangled_name (di, 0);
+  else
+    {
+      struct demangle_component *type;
+      enum demangle_component_type t;
+      const char *s;
+
+      type = cplus_demangle_type (di);
+      if (type == NULL)
+       return NULL;
+
+      /* If we have a type we know how to print, we aren't going to
+        print the type name itself.  */
+      if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
+         && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
+       di->expansion -= type->u.s_builtin.type->len;
+
+      /* Rather than try to interpret the literal value, we just
+        collect it as a string.  Note that it's possible to have a
+        floating point literal here.  The ABI specifies that the
+        format of such literals is machine independent.  That's fine,
+        but what's not fine is that versions of g++ up to 3.2 with
+        -fabi-version=1 used upper case letters in the hex constant,
+        and dumped out gcc's internal representation.  That makes it
+        hard to tell where the constant ends, and hard to dump the
+        constant in any readable form anyhow.  We don't attempt to
+        handle these cases.  */
+
+      t = DEMANGLE_COMPONENT_LITERAL;
+      if (d_peek_char (di) == 'n')
+       {
+         t = DEMANGLE_COMPONENT_LITERAL_NEG;
+         d_advance (di, 1);
+       }
+      s = d_str (di);
+      while (d_peek_char (di) != 'E')
+       {
+         if (d_peek_char (di) == '\0')
+           return NULL;
+         d_advance (di, 1);
+       }
+      ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
+    }
+  if (! d_check_char (di, 'E'))
+    return NULL;
+  return ret;
+}
+
+/* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
+                ::= Z <(function) encoding> E s [<discriminator>]
+*/
+
+static struct demangle_component *
+d_local_name (struct d_info *di)
+{
+  struct demangle_component *function;
+
+  if (! d_check_char (di, 'Z'))
+    return NULL;
+
+  function = d_encoding (di, 0);
+
+  if (! d_check_char (di, 'E'))
+    return NULL;
+
+  if (d_peek_char (di) == 's')
+    {
+      d_advance (di, 1);
+      if (! d_discriminator (di))
+       return NULL;
+      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
+                         d_make_name (di, "string literal",
+                                      sizeof "string literal" - 1));
+    }
+  else
+    {
+      struct demangle_component *name;
+
+      name = d_name (di);
+      if (! d_discriminator (di))
+       return NULL;
+      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
+    }
+}
+
+/* <discriminator> ::= _ <(non-negative) number>
+
+   We demangle the discriminator, but we don't print it out.  FIXME:
+   We should print it out in verbose mode.  */
+
+static int
+d_discriminator (struct d_info *di)
+{
+  long discrim;
+
+  if (d_peek_char (di) != '_')
+    return 1;
+  d_advance (di, 1);
+  discrim = d_number (di);
+  if (discrim < 0)
+    return 0;
+  return 1;
+}
+
+/* Add a new substitution.  */
+
+static int
+d_add_substitution (struct d_info *di, struct demangle_component *dc)
+{
+  if (dc == NULL)
+    return 0;
+  if (di->next_sub >= di->num_subs)
+    return 0;
+  di->subs[di->next_sub] = dc;
+  ++di->next_sub;
+  return 1;
+}
+
+/* <substitution> ::= S <seq-id> _
+                  ::= S_
+                  ::= St
+                  ::= Sa
+                  ::= Sb
+                  ::= Ss
+                  ::= Si
+                  ::= So
+                  ::= Sd
+
+   If PREFIX is non-zero, then this type is being used as a prefix in
+   a qualified name.  In this case, for the standard substitutions, we
+   need to check whether we are being used as a prefix for a
+   constructor or destructor, and return a full template name.
+   Otherwise we will get something like std::iostream::~iostream()
+   which does not correspond particularly well to any function which
+   actually appears in the source.
+*/
+
+static const struct d_standard_sub_info standard_subs[] =
+{
+  { 't', NL ("std"),
+    NL ("std"),
+    NULL, 0 },
+  { 'a', NL ("std::allocator"),
+    NL ("std::allocator"),
+    NL ("allocator") },
+  { 'b', NL ("std::basic_string"),
+    NL ("std::basic_string"),
+    NL ("basic_string") },
+  { 's', NL ("std::string"),
+    NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
+    NL ("basic_string") },
+  { 'i', NL ("std::istream"),
+    NL ("std::basic_istream<char, std::char_traits<char> >"),
+    NL ("basic_istream") },
+  { 'o', NL ("std::ostream"),
+    NL ("std::basic_ostream<char, std::char_traits<char> >"),
+    NL ("basic_ostream") },
+  { 'd', NL ("std::iostream"),
+    NL ("std::basic_iostream<char, std::char_traits<char> >"),
+    NL ("basic_iostream") }
+};
+
+static struct demangle_component *
+d_substitution (struct d_info *di, int prefix)
+{
+  char c;
+
+  if (! d_check_char (di, 'S'))
+    return NULL;
+
+  c = d_next_char (di);
+  if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
+    {
+      int id;
+
+      id = 0;
+      if (c != '_')
+       {
+         do
+           {
+             if (IS_DIGIT (c))
+               id = id * 36 + c - '0';
+             else if (IS_UPPER (c))
+               id = id * 36 + c - 'A' + 10;
+             else
+               return NULL;
+             if (id < 0)
+               return NULL;
+             c = d_next_char (di);
+           }
+         while (c != '_');
+
+         ++id;
+       }
+
+      if (id >= di->next_sub)
+       return NULL;
+
+      ++di->did_subs;
+
+      return di->subs[id];
+    }
+  else
+    {
+      int verbose;
+      const struct d_standard_sub_info *p;
+      const struct d_standard_sub_info *pend;
+
+      verbose = (di->options & DMGL_VERBOSE) != 0;
+      if (! verbose && prefix)
+       {
+         char peek;
+
+         peek = d_peek_char (di);
+         if (peek == 'C' || peek == 'D')
+           verbose = 1;
+       }
+
+      pend = (&standard_subs[0]
+             + sizeof standard_subs / sizeof standard_subs[0]);
+      for (p = &standard_subs[0]; p < pend; ++p)
+       {
+         if (c == p->code)
+           {
+             const char *s;
+             int len;
+
+             if (p->set_last_name != NULL)
+               di->last_name = d_make_sub (di, p->set_last_name,
+                                           p->set_last_name_len);
+             if (verbose)
+               {
+                 s = p->full_expansion;
+                 len = p->full_len;
+               }
+             else
+               {
+                 s = p->simple_expansion;
+                 len = p->simple_len;
+               }
+             di->expansion += len;
+             return d_make_sub (di, s, len);
+           }
+       }
+
+      return NULL;
+    }
+}
+
+/* Initialize a growable string.  */
+
+static void
+d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
+{
+  dgs->buf = NULL;
+  dgs->len = 0;
+  dgs->alc = 0;
+  dgs->allocation_failure = 0;
+
+  if (estimate > 0)
+    d_growable_string_resize (dgs, estimate);
+}
+
+/* Grow a growable string to a given size.  */
+
+static inline void
+d_growable_string_resize (struct d_growable_string *dgs, size_t need)
+{
+  size_t newalc;
+  char *newbuf;
+
+  if (dgs->allocation_failure)
+    return;
+
+  /* Start allocation at two bytes to avoid any possibility of confusion
+     with the special value of 1 used as a return in *palc to indicate
+     allocation failures.  */
+  newalc = dgs->alc > 0 ? dgs->alc : 2;
+  while (newalc < need)
+    newalc <<= 1;
+
+  newbuf = (char *) realloc (dgs->buf, newalc);
+  if (newbuf == NULL)
+    {
+      free (dgs->buf);
+      dgs->buf = NULL;
+      dgs->len = 0;
+      dgs->alc = 0;
+      dgs->allocation_failure = 1;
+      return;
+    }
+  dgs->buf = newbuf;
+  dgs->alc = newalc;
+}
+
+/* Append a buffer to a growable string.  */
+
+static inline void
+d_growable_string_append_buffer (struct d_growable_string *dgs,
+                                 const char *s, size_t l)
+{
+  size_t need;
+
+  need = dgs->len + l + 1;
+  if (need > dgs->alc)
+    d_growable_string_resize (dgs, need);
+
+  if (dgs->allocation_failure)
+    return;
+
+  memcpy (dgs->buf + dgs->len, s, l);
+  dgs->buf[dgs->len + l] = '\0';
+  dgs->len += l;
+}
+
+/* Bridge growable strings to the callback mechanism.  */
+
+static void
+d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
+{
+  struct d_growable_string *dgs = (struct d_growable_string*) opaque;
+
+  d_growable_string_append_buffer (dgs, s, l);
+}
+
+/* Initialize a print information structure.  */
+
+static void
+d_print_init (struct d_print_info *dpi, int options,
+              demangle_callbackref callback, void *opaque)
+{
+  dpi->options = options;
+  dpi->len = 0;
+  dpi->last_char = '\0';
+  dpi->templates = NULL;
+  dpi->modifiers = NULL;
+
+  dpi->callback = callback;
+  dpi->opaque = opaque;
+
+  dpi->demangle_failure = 0;
+}
+
+/* Indicate that an error occurred during printing, and test for error.  */
+
+static inline void
+d_print_error (struct d_print_info *dpi)
+{
+  dpi->demangle_failure = 1;
+}
+
+static inline int
+d_print_saw_error (struct d_print_info *dpi)
+{
+  return dpi->demangle_failure != 0;
+}
+
+/* Flush buffered characters to the callback.  */
+
+static inline void
+d_print_flush (struct d_print_info *dpi)
+{
+  dpi->buf[dpi->len] = '\0';
+  dpi->callback (dpi->buf, dpi->len, dpi->opaque);
+  dpi->len = 0;
+}
+
+/* Append characters and buffers for printing.  */
+
+static inline void
+d_append_char (struct d_print_info *dpi, char c)
+{
+  if (dpi->len == sizeof (dpi->buf) - 1)
+    d_print_flush (dpi);
+
+  dpi->buf[dpi->len++] = c;
+  dpi->last_char = c;
+}
+
+static inline void
+d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
+{
+  size_t i;
+
+  for (i = 0; i < l; i++)
+    d_append_char (dpi, s[i]);
+}
+
+static inline void
+d_append_string (struct d_print_info *dpi, const char *s)
+{
+  d_append_buffer (dpi, s, strlen (s));
+}
+
+static inline char
+d_last_char (struct d_print_info *dpi)
+{
+  return dpi->last_char;
+}
+
+/* Turn components into a human readable string.  OPTIONS is the
+   options bits passed to the demangler.  DC is the tree to print.
+   CALLBACK is a function to call to flush demangled string segments
+   as they fill the intermediate buffer, and OPAQUE is a generalized
+   callback argument.  On success, this returns 1.  On failure,
+   it returns 0, indicating a bad parse.  It does not use heap
+   memory to build an output string, so cannot encounter memory
+   allocation failure.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_print_callback (int options,
+                               const struct demangle_component *dc,
+                               demangle_callbackref callback, void *opaque)
+{
+  struct d_print_info dpi;
+
+  d_print_init (&dpi, options, callback, opaque);
+
+  d_print_comp (&dpi, dc);
+
+  d_print_flush (&dpi);
+
+  return ! d_print_saw_error (&dpi);
+}
+
+/* Turn components into a human readable string.  OPTIONS is the
+   options bits passed to the demangler.  DC is the tree to print.
+   ESTIMATE is a guess at the length of the result.  This returns a
+   string allocated by malloc, or NULL on error.  On success, this
+   sets *PALC to the size of the allocated buffer.  On failure, this
+   sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
+   failure.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+char *
+cplus_demangle_print (int options, const struct demangle_component *dc,
+                      int estimate, size_t *palc)
+{
+  struct d_growable_string dgs;
+
+  d_growable_string_init (&dgs, estimate);
+
+  if (! cplus_demangle_print_callback (options, dc,
+                                       d_growable_string_callback_adapter,
+                                       &dgs))
+    {
+      free (dgs.buf);
+      *palc = 0;
+      return NULL;
+    }
+
+  *palc = dgs.allocation_failure ? 1 : dgs.alc;
+  return dgs.buf;
+}
+
+/* Subroutine to handle components.  */
+
+static void
+d_print_comp (struct d_print_info *dpi,
+              const struct demangle_component *dc)
+{
+  if (dc == NULL)
+    {
+      d_print_error (dpi);
+      return;
+    }
+  if (d_print_saw_error (dpi))
+    return;
+
+  switch (dc->type)
+    {
+    case DEMANGLE_COMPONENT_NAME:
+      if ((dpi->options & DMGL_JAVA) == 0)
+       d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
+      else
+       d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
+      return;
+
+    case DEMANGLE_COMPONENT_QUAL_NAME:
+    case DEMANGLE_COMPONENT_LOCAL_NAME:
+      d_print_comp (dpi, d_left (dc));
+      if ((dpi->options & DMGL_JAVA) == 0)
+       d_append_string (dpi, "::");
+      else
+       d_append_char (dpi, '.');
+      d_print_comp (dpi, d_right (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_TYPED_NAME:
+      {
+       struct d_print_mod *hold_modifiers;
+       struct demangle_component *typed_name;
+       struct d_print_mod adpm[4];
+       unsigned int i;
+       struct d_print_template dpt;
+
+       /* Pass the name down to the type so that it can be printed in
+          the right place for the type.  We also have to pass down
+          any CV-qualifiers, which apply to the this parameter.  */
+       hold_modifiers = dpi->modifiers;
+       i = 0;
+       typed_name = d_left (dc);
+       while (typed_name != NULL)
+         {
+           if (i >= sizeof adpm / sizeof adpm[0])
+             {
+               d_print_error (dpi);
+               return;
+             }
+
+           adpm[i].next = dpi->modifiers;
+           dpi->modifiers = &adpm[i];
+           adpm[i].mod = typed_name;
+           adpm[i].printed = 0;
+           adpm[i].templates = dpi->templates;
+           ++i;
+
+           if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
+               && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
+               && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
+             break;
+
+           typed_name = d_left (typed_name);
+         }
+
+       if (typed_name == NULL)
+         {
+           d_print_error (dpi);
+           return;
+         }
+
+       /* If typed_name is a template, then it applies to the
+          function type as well.  */
+       if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
+         {
+           dpt.next = dpi->templates;
+           dpi->templates = &dpt;
+           dpt.template_decl = typed_name;
+         }
+
+       /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
+          there may be CV-qualifiers on its right argument which
+          really apply here; this happens when parsing a class which
+          is local to a function.  */
+       if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+         {
+           struct demangle_component *local_name;
+
+           local_name = d_right (typed_name);
+           while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+                  || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+                  || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
+             {
+               if (i >= sizeof adpm / sizeof adpm[0])
+                 {
+                   d_print_error (dpi);
+                   return;
+                 }
+
+               adpm[i] = adpm[i - 1];
+               adpm[i].next = &adpm[i - 1];
+               dpi->modifiers = &adpm[i];
+
+               adpm[i - 1].mod = local_name;
+               adpm[i - 1].printed = 0;
+               adpm[i - 1].templates = dpi->templates;
+               ++i;
+
+               local_name = d_left (local_name);
+             }
+         }
+
+       d_print_comp (dpi, d_right (dc));
+
+       if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
+         dpi->templates = dpt.next;
+
+       /* If the modifiers didn't get printed by the type, print them
+          now.  */
+       while (i > 0)
+         {
+           --i;
+           if (! adpm[i].printed)
+             {
+               d_append_char (dpi, ' ');
+               d_print_mod (dpi, adpm[i].mod);
+             }
+         }
+
+       dpi->modifiers = hold_modifiers;
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_TEMPLATE:
+      {
+       struct d_print_mod *hold_dpm;
+       struct demangle_component *dcl;
+
+       /* Don't push modifiers into a template definition.  Doing so
+          could give the wrong definition for a template argument.
+          Instead, treat the template essentially as a name.  */
+
+       hold_dpm = dpi->modifiers;
+       dpi->modifiers = NULL;
+
+        dcl = d_left (dc);
+
+        if ((dpi->options & DMGL_JAVA) != 0
+            && dcl->type == DEMANGLE_COMPONENT_NAME
+            && dcl->u.s_name.len == 6
+            && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
+          {
+            /* Special-case Java arrays, so that JArray<TYPE> appears
+               instead as TYPE[].  */
+
+            d_print_comp (dpi, d_right (dc));
+            d_append_string (dpi, "[]");
+          }
+        else
+          {
+           d_print_comp (dpi, dcl);
+           if (d_last_char (dpi) == '<')
+             d_append_char (dpi, ' ');
+           d_append_char (dpi, '<');
+           d_print_comp (dpi, d_right (dc));
+           /* Avoid generating two consecutive '>' characters, to avoid
+              the C++ syntactic ambiguity.  */
+           if (d_last_char (dpi) == '>')
+             d_append_char (dpi, ' ');
+           d_append_char (dpi, '>');
+          }
+
+       dpi->modifiers = hold_dpm;
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
+      {
+       long i;
+       struct demangle_component *a;
+       struct d_print_template *hold_dpt;
+
+       if (dpi->templates == NULL)
+         {
+           d_print_error (dpi);
+           return;
+         }
+       i = dc->u.s_number.number;
+       for (a = d_right (dpi->templates->template_decl);
+            a != NULL;
+            a = d_right (a))
+         {
+           if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
+             {
+               d_print_error (dpi);
+               return;
+             }
+           if (i <= 0)
+             break;
+           --i;
+         }
+       if (i != 0 || a == NULL)
+         {
+           d_print_error (dpi);
+           return;
+         }
+
+       /* While processing this parameter, we need to pop the list of
+          templates.  This is because the template parameter may
+          itself be a reference to a parameter of an outer
+          template.  */
+
+       hold_dpt = dpi->templates;
+       dpi->templates = hold_dpt->next;
+
+       d_print_comp (dpi, d_left (a));
+
+       dpi->templates = hold_dpt;
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_CTOR:
+      d_print_comp (dpi, dc->u.s_ctor.name);
+      return;
+
+    case DEMANGLE_COMPONENT_DTOR:
+      d_append_char (dpi, '~');
+      d_print_comp (dpi, dc->u.s_dtor.name);
+      return;
+
+    case DEMANGLE_COMPONENT_VTABLE:
+      d_append_string (dpi, "vtable for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_VTT:
+      d_append_string (dpi, "VTT for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+      d_append_string (dpi, "construction vtable for ");
+      d_print_comp (dpi, d_left (dc));
+      d_append_string (dpi, "-in-");
+      d_print_comp (dpi, d_right (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_TYPEINFO:
+      d_append_string (dpi, "typeinfo for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+      d_append_string (dpi, "typeinfo name for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_TYPEINFO_FN:
+      d_append_string (dpi, "typeinfo fn for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_THUNK:
+      d_append_string (dpi, "non-virtual thunk to ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+      d_append_string (dpi, "virtual thunk to ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+      d_append_string (dpi, "covariant return thunk to ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_JAVA_CLASS:
+      d_append_string (dpi, "java Class for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_GUARD:
+      d_append_string (dpi, "guard variable for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_REFTEMP:
+      d_append_string (dpi, "reference temporary for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
+      d_append_string (dpi, "hidden alias for ");
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_SUB_STD:
+      d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
+      return;
+
+    case DEMANGLE_COMPONENT_RESTRICT:
+    case DEMANGLE_COMPONENT_VOLATILE:
+    case DEMANGLE_COMPONENT_CONST:
+      {
+       struct d_print_mod *pdpm;
+
+       /* When printing arrays, it's possible to have cases where the
+          same CV-qualifier gets pushed on the stack multiple times.
+          We only need to print it once.  */
+
+       for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
+         {
+           if (! pdpm->printed)
+             {
+               if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
+                   && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
+                   && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
+                 break;
+               if (pdpm->mod->type == dc->type)
+                 {
+                   d_print_comp (dpi, d_left (dc));
+                   return;
+                 }
+             }
+         }
+      }
+      /* Fall through.  */
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+    case DEMANGLE_COMPONENT_CONST_THIS:
+    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+    case DEMANGLE_COMPONENT_POINTER:
+    case DEMANGLE_COMPONENT_REFERENCE:
+    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
+    case DEMANGLE_COMPONENT_COMPLEX:
+    case DEMANGLE_COMPONENT_IMAGINARY:
+      {
+       /* We keep a list of modifiers on the stack.  */
+       struct d_print_mod dpm;
+
+       dpm.next = dpi->modifiers;
+       dpi->modifiers = &dpm;
+       dpm.mod = dc;
+       dpm.printed = 0;
+       dpm.templates = dpi->templates;
+
+       d_print_comp (dpi, d_left (dc));
+
+       /* If the modifier didn't get printed by the type, print it
+          now.  */
+       if (! dpm.printed)
+         d_print_mod (dpi, dc);
+
+       dpi->modifiers = dpm.next;
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
+      if ((dpi->options & DMGL_JAVA) == 0)
+       d_append_buffer (dpi, dc->u.s_builtin.type->name,
+                        dc->u.s_builtin.type->len);
+      else
+       d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
+                        dc->u.s_builtin.type->java_len);
+      return;
+
+    case DEMANGLE_COMPONENT_VENDOR_TYPE:
+      d_print_comp (dpi, d_left (dc));
+      return;
+
+    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+      {
+       if ((dpi->options & DMGL_RET_POSTFIX) != 0)
+         d_print_function_type (dpi, dc, dpi->modifiers);
+
+       /* Print return type if present */
+       if (d_left (dc) != NULL)
+         {
+           struct d_print_mod dpm;
+
+           /* We must pass this type down as a modifier in order to
+              print it in the right location.  */
+           dpm.next = dpi->modifiers;
+           dpi->modifiers = &dpm;
+           dpm.mod = dc;
+           dpm.printed = 0;
+           dpm.templates = dpi->templates;
+
+           d_print_comp (dpi, d_left (dc));
+
+           dpi->modifiers = dpm.next;
+
+           if (dpm.printed)
+             return;
+
+           /* In standard prefix notation, there is a space between the
+              return type and the function signature.  */
+           if ((dpi->options & DMGL_RET_POSTFIX) == 0)
+             d_append_char (dpi, ' ');
+         }
+
+       if ((dpi->options & DMGL_RET_POSTFIX) == 0) 
+         d_print_function_type (dpi, dc, dpi->modifiers);
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_ARRAY_TYPE:
+      {
+       struct d_print_mod *hold_modifiers;
+       struct d_print_mod adpm[4];
+       unsigned int i;
+       struct d_print_mod *pdpm;
+
+       /* We must pass this type down as a modifier in order to print
+          multi-dimensional arrays correctly.  If the array itself is
+          CV-qualified, we act as though the element type were
+          CV-qualified.  We do this by copying the modifiers down
+          rather than fiddling pointers, so that we don't wind up
+          with a d_print_mod higher on the stack pointing into our
+          stack frame after we return.  */
+
+       hold_modifiers = dpi->modifiers;
+
+       adpm[0].next = hold_modifiers;
+       dpi->modifiers = &adpm[0];
+       adpm[0].mod = dc;
+       adpm[0].printed = 0;
+       adpm[0].templates = dpi->templates;
+
+       i = 1;
+       pdpm = hold_modifiers;
+       while (pdpm != NULL
+              && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
+                  || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
+                  || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
+         {
+           if (! pdpm->printed)
+             {
+               if (i >= sizeof adpm / sizeof adpm[0])
+                 {
+                   d_print_error (dpi);
+                   return;
+                 }
+
+               adpm[i] = *pdpm;
+               adpm[i].next = dpi->modifiers;
+               dpi->modifiers = &adpm[i];
+               pdpm->printed = 1;
+               ++i;
+             }
+
+           pdpm = pdpm->next;
+         }
+
+       d_print_comp (dpi, d_right (dc));
+
+       dpi->modifiers = hold_modifiers;
+
+       if (adpm[0].printed)
+         return;
+
+       while (i > 1)
+         {
+           --i;
+           d_print_mod (dpi, adpm[i].mod);
+         }
+
+       d_print_array_type (dpi, dc, dpi->modifiers);
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+      {
+       struct d_print_mod dpm;
+
+       dpm.next = dpi->modifiers;
+       dpi->modifiers = &dpm;
+       dpm.mod = dc;
+       dpm.printed = 0;
+       dpm.templates = dpi->templates;
+
+       d_print_comp (dpi, d_right (dc));
+
+       /* If the modifier didn't get printed by the type, print it
+          now.  */
+       if (! dpm.printed)
+         {
+           d_append_char (dpi, ' ');
+           d_print_comp (dpi, d_left (dc));
+           d_append_string (dpi, "::*");
+         }
+
+       dpi->modifiers = dpm.next;
+
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_ARGLIST:
+    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+      d_print_comp (dpi, d_left (dc));
+      if (d_right (dc) != NULL)
+       {
+         d_append_string (dpi, ", ");
+         d_print_comp (dpi, d_right (dc));
+       }
+      return;
+
+    case DEMANGLE_COMPONENT_OPERATOR:
+      {
+       char c;
+
+       d_append_string (dpi, "operator");
+       c = dc->u.s_operator.op->name[0];
+       if (IS_LOWER (c))
+         d_append_char (dpi, ' ');
+       d_append_buffer (dpi, dc->u.s_operator.op->name,
+                        dc->u.s_operator.op->len);
+       return;
+      }
+
+    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
+      d_append_string (dpi, "operator ");
+      d_print_comp (dpi, dc->u.s_extended_operator.name);
+      return;
+
+    case DEMANGLE_COMPONENT_CAST:
+      d_append_string (dpi, "operator ");
+      d_print_cast (dpi, dc);
+      return;
+
+    case DEMANGLE_COMPONENT_UNARY:
+      if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
+       d_print_expr_op (dpi, d_left (dc));
+      else
+       {
+         d_append_char (dpi, '(');
+         d_print_cast (dpi, d_left (dc));
+         d_append_char (dpi, ')');
+       }
+      d_append_char (dpi, '(');
+      d_print_comp (dpi, d_right (dc));
+      d_append_char (dpi, ')');
+      return;
+
+    case DEMANGLE_COMPONENT_BINARY:
+      if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
+       {
+         d_print_error (dpi);
+         return;
+       }
+
+      /* We wrap an expression which uses the greater-than operator in
+        an extra layer of parens so that it does not get confused
+        with the '>' which ends the template parameters.  */
+      if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
+         && d_left (dc)->u.s_operator.op->len == 1
+         && d_left (dc)->u.s_operator.op->name[0] == '>')
+       d_append_char (dpi, '(');
+
+      d_append_char (dpi, '(');
+      d_print_comp (dpi, d_left (d_right (dc)));
+      d_append_string (dpi, ") ");
+      d_print_expr_op (dpi, d_left (dc));
+      d_append_string (dpi, " (");
+      d_print_comp (dpi, d_right (d_right (dc)));
+      d_append_char (dpi, ')');
+
+      if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
+         && d_left (dc)->u.s_operator.op->len == 1
+         && d_left (dc)->u.s_operator.op->name[0] == '>')
+       d_append_char (dpi, ')');
+
+      return;
+
+    case DEMANGLE_COMPONENT_BINARY_ARGS:
+      /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
+      d_print_error (dpi);
+      return;
+
+    case DEMANGLE_COMPONENT_TRINARY:
+      if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
+         || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
+       {
+         d_print_error (dpi);
+         return;
+       }
+      d_append_char (dpi, '(');
+      d_print_comp (dpi, d_left (d_right (dc)));
+      d_append_string (dpi, ") ");
+      d_print_expr_op (dpi, d_left (dc));
+      d_append_string (dpi, " (");
+      d_print_comp (dpi, d_left (d_right (d_right (dc))));
+      d_append_string (dpi, ") : (");
+      d_print_comp (dpi, d_right (d_right (d_right (dc))));
+      d_append_char (dpi, ')');
+      return;
+
+    case DEMANGLE_COMPONENT_TRINARY_ARG1:
+    case DEMANGLE_COMPONENT_TRINARY_ARG2:
+      /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
+      d_print_error (dpi);
+      return;
+
+    case DEMANGLE_COMPONENT_LITERAL:
+    case DEMANGLE_COMPONENT_LITERAL_NEG:
+      {
+       enum d_builtin_type_print tp;
+
+       /* For some builtin types, produce simpler output.  */
+       tp = D_PRINT_DEFAULT;
+       if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
+         {
+           tp = d_left (dc)->u.s_builtin.type->print;
+           switch (tp)
+             {
+             case D_PRINT_INT:
+             case D_PRINT_UNSIGNED:
+             case D_PRINT_LONG:
+             case D_PRINT_UNSIGNED_LONG:
+             case D_PRINT_LONG_LONG:
+             case D_PRINT_UNSIGNED_LONG_LONG:
+               if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
+                 {
+                   if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
+                     d_append_char (dpi, '-');
+                   d_print_comp (dpi, d_right (dc));
+                   switch (tp)
+                     {
+                     default:
+                       break;
+                     case D_PRINT_UNSIGNED:
+                       d_append_char (dpi, 'u');
+                       break;
+                     case D_PRINT_LONG:
+                       d_append_char (dpi, 'l');
+                       break;
+                     case D_PRINT_UNSIGNED_LONG:
+                       d_append_string (dpi, "ul");
+                       break;
+                     case D_PRINT_LONG_LONG:
+                       d_append_string (dpi, "ll");
+                       break;
+                     case D_PRINT_UNSIGNED_LONG_LONG:
+                       d_append_string (dpi, "ull");
+                       break;
+                     }
+                   return;
+                 }
+               break;
+
+             case D_PRINT_BOOL:
+               if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
+                   && d_right (dc)->u.s_name.len == 1
+                   && dc->type == DEMANGLE_COMPONENT_LITERAL)
+                 {
+                   switch (d_right (dc)->u.s_name.s[0])
+                     {
+                     case '0':
+                       d_append_string (dpi, "false");
+                       return;
+                     case '1':
+                       d_append_string (dpi, "true");
+                       return;
+                     default:
+                       break;
+                     }
+                 }
+               break;
+
+             default:
+               break;
+             }
+         }
+
+       d_append_char (dpi, '(');
+       d_print_comp (dpi, d_left (dc));
+       d_append_char (dpi, ')');
+       if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
+         d_append_char (dpi, '-');
+       if (tp == D_PRINT_FLOAT)
+         d_append_char (dpi, '[');
+       d_print_comp (dpi, d_right (dc));
+       if (tp == D_PRINT_FLOAT)
+         d_append_char (dpi, ']');
+      }
+      return;
+
+    default:
+      d_print_error (dpi);
+      return;
+    }
+}
+
+/* Print a Java dentifier.  For Java we try to handle encoded extended
+   Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
+   so we don't it for C++.  Characters are encoded as
+   __U<hex-char>+_.  */
+
+static void
+d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
+{
+  const char *p;
+  const char *end;
+
+  end = name + len;
+  for (p = name; p < end; ++p)
+    {
+      if (end - p > 3
+         && p[0] == '_'
+         && p[1] == '_'
+         && p[2] == 'U')
+       {
+         unsigned long c;
+         const char *q;
+
+         c = 0;
+         for (q = p + 3; q < end; ++q)
+           {
+             int dig;
+
+             if (IS_DIGIT (*q))
+               dig = *q - '0';
+             else if (*q >= 'A' && *q <= 'F')
+               dig = *q - 'A' + 10;
+             else if (*q >= 'a' && *q <= 'f')
+               dig = *q - 'a' + 10;
+             else
+               break;
+
+             c = c * 16 + dig;
+           }
+         /* If the Unicode character is larger than 256, we don't try
+            to deal with it here.  FIXME.  */
+         if (q < end && *q == '_' && c < 256)
+           {
+             d_append_char (dpi, c);
+             p = q;
+             continue;
+           }
+       }
+
+      d_append_char (dpi, *p);
+    }
+}
+
+/* Print a list of modifiers.  SUFFIX is 1 if we are printing
+   qualifiers on this after printing a function.  */
+
+static void
+d_print_mod_list (struct d_print_info *dpi,
+                  struct d_print_mod *mods, int suffix)
+{
+  struct d_print_template *hold_dpt;
+
+  if (mods == NULL || d_print_saw_error (dpi))
+    return;
+
+  if (mods->printed
+      || (! suffix
+         && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+             || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+             || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
+    {
+      d_print_mod_list (dpi, mods->next, suffix);
+      return;
+    }
+
+  mods->printed = 1;
+
+  hold_dpt = dpi->templates;
+  dpi->templates = mods->templates;
+
+  if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
+    {
+      d_print_function_type (dpi, mods->mod, mods->next);
+      dpi->templates = hold_dpt;
+      return;
+    }
+  else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
+    {
+      d_print_array_type (dpi, mods->mod, mods->next);
+      dpi->templates = hold_dpt;
+      return;
+    }
+  else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+    {
+      struct d_print_mod *hold_modifiers;
+      struct demangle_component *dc;
+
+      /* When this is on the modifier stack, we have pulled any
+        qualifiers off the right argument already.  Otherwise, we
+        print it as usual, but don't let the left argument see any
+        modifiers.  */
+
+      hold_modifiers = dpi->modifiers;
+      dpi->modifiers = NULL;
+      d_print_comp (dpi, d_left (mods->mod));
+      dpi->modifiers = hold_modifiers;
+
+      if ((dpi->options & DMGL_JAVA) == 0)
+       d_append_string (dpi, "::");
+      else
+       d_append_char (dpi, '.');
+
+      dc = d_right (mods->mod);
+      while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+            || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+            || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
+       dc = d_left (dc);
+
+      d_print_comp (dpi, dc);
+
+      dpi->templates = hold_dpt;
+      return;
+    }
+
+  d_print_mod (dpi, mods->mod);
+
+  dpi->templates = hold_dpt;
+
+  d_print_mod_list (dpi, mods->next, suffix);
+}
+
+/* Print a modifier.  */
+
+static void
+d_print_mod (struct d_print_info *dpi,
+             const struct demangle_component *mod)
+{
+  switch (mod->type)
+    {
+    case DEMANGLE_COMPONENT_RESTRICT:
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+      d_append_string (dpi, " restrict");
+      return;
+    case DEMANGLE_COMPONENT_VOLATILE:
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+      d_append_string (dpi, " volatile");
+      return;
+    case DEMANGLE_COMPONENT_CONST:
+    case DEMANGLE_COMPONENT_CONST_THIS:
+      d_append_string (dpi, " const");
+      return;
+    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+      d_append_char (dpi, ' ');
+      d_print_comp (dpi, d_right (mod));
+      return;
+    case DEMANGLE_COMPONENT_POINTER:
+      /* There is no pointer symbol in Java.  */
+      if ((dpi->options & DMGL_JAVA) == 0)
+       d_append_char (dpi, '*');
+      return;
+    case DEMANGLE_COMPONENT_REFERENCE:
+      d_append_char (dpi, '&');
+      return;
+    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
+      d_append_string (dpi, "&&");
+      return;
+    case DEMANGLE_COMPONENT_COMPLEX:
+      d_append_string (dpi, "complex ");
+      return;
+    case DEMANGLE_COMPONENT_IMAGINARY:
+      d_append_string (dpi, "imaginary ");
+      return;
+    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+      if (d_last_char (dpi) != '(')
+       d_append_char (dpi, ' ');
+      d_print_comp (dpi, d_left (mod));
+      d_append_string (dpi, "::*");
+      return;
+    case DEMANGLE_COMPONENT_TYPED_NAME:
+      d_print_comp (dpi, d_left (mod));
+      return;
+    default:
+      /* Otherwise, we have something that won't go back on the
+        modifier stack, so we can just print it.  */
+      d_print_comp (dpi, mod);
+      return;
+    }
+}
+
+/* Print a function type, except for the return type.  */
+
+static void
+d_print_function_type (struct d_print_info *dpi,
+                       const struct demangle_component *dc,
+                       struct d_print_mod *mods)
+{
+  int need_paren;
+  int saw_mod;
+  int need_space;
+  struct d_print_mod *p;
+  struct d_print_mod *hold_modifiers;
+
+  need_paren = 0;
+  saw_mod = 0;
+  need_space = 0;
+  for (p = mods; p != NULL; p = p->next)
+    {
+      if (p->printed)
+       break;
+
+      saw_mod = 1;
+      switch (p->mod->type)
+       {
+       case DEMANGLE_COMPONENT_POINTER:
+       case DEMANGLE_COMPONENT_REFERENCE:
+       case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
+         need_paren = 1;
+         break;
+       case DEMANGLE_COMPONENT_RESTRICT:
+       case DEMANGLE_COMPONENT_VOLATILE:
+       case DEMANGLE_COMPONENT_CONST:
+       case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+       case DEMANGLE_COMPONENT_COMPLEX:
+       case DEMANGLE_COMPONENT_IMAGINARY:
+       case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+         need_space = 1;
+         need_paren = 1;
+         break;
+       case DEMANGLE_COMPONENT_RESTRICT_THIS:
+       case DEMANGLE_COMPONENT_VOLATILE_THIS:
+       case DEMANGLE_COMPONENT_CONST_THIS:
+         break;
+       default:
+         break;
+       }
+      if (need_paren)
+       break;
+    }
+
+  if (d_left (dc) != NULL && ! saw_mod)
+    need_paren = 1;
+
+  if (need_paren)
+    {
+      if (! need_space)
+       {
+         if (d_last_char (dpi) != '('
+             && d_last_char (dpi) != '*')
+           need_space = 1;
+       }
+      if (need_space && d_last_char (dpi) != ' ')
+       d_append_char (dpi, ' ');
+      d_append_char (dpi, '(');
+    }
+
+  hold_modifiers = dpi->modifiers;
+  dpi->modifiers = NULL;
+
+  d_print_mod_list (dpi, mods, 0);
+
+  if (need_paren)
+    d_append_char (dpi, ')');
+
+  d_append_char (dpi, '(');
+
+  if (d_right (dc) != NULL)
+    d_print_comp (dpi, d_right (dc));
+
+  d_append_char (dpi, ')');
+
+  d_print_mod_list (dpi, mods, 1);
+
+  dpi->modifiers = hold_modifiers;
+}
+
+/* Print an array type, except for the element type.  */
+
+static void
+d_print_array_type (struct d_print_info *dpi,
+                    const struct demangle_component *dc,
+                    struct d_print_mod *mods)
+{
+  int need_space;
+
+  need_space = 1;
+  if (mods != NULL)
+    {
+      int need_paren;
+      struct d_print_mod *p;
+
+      need_paren = 0;
+      for (p = mods; p != NULL; p = p->next)
+       {
+         if (! p->printed)
+           {
+             if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
+               {
+                 need_space = 0;
+                 break;
+               }
+             else
+               {
+                 need_paren = 1;
+                 need_space = 1;
+                 break;
+               }
+           }
+       }
+
+      if (need_paren)
+       d_append_string (dpi, " (");
+
+      d_print_mod_list (dpi, mods, 0);
+
+      if (need_paren)
+       d_append_char (dpi, ')');
+    }
+
+  if (need_space)
+    d_append_char (dpi, ' ');
+
+  d_append_char (dpi, '[');
+
+  if (d_left (dc) != NULL)
+    d_print_comp (dpi, d_left (dc));
+
+  d_append_char (dpi, ']');
+}
+
+/* Print an operator in an expression.  */
+
+static void
+d_print_expr_op (struct d_print_info *dpi,
+                 const struct demangle_component *dc)
+{
+  if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
+    d_append_buffer (dpi, dc->u.s_operator.op->name,
+                    dc->u.s_operator.op->len);
+  else
+    d_print_comp (dpi, dc);
+}
+
+/* Print a cast.  */
+
+static void
+d_print_cast (struct d_print_info *dpi,
+              const struct demangle_component *dc)
+{
+  if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
+    d_print_comp (dpi, d_left (dc));
+  else
+    {
+      struct d_print_mod *hold_dpm;
+      struct d_print_template dpt;
+
+      /* It appears that for a templated cast operator, we need to put
+        the template parameters in scope for the operator name, but
+        not for the parameters.  The effect is that we need to handle
+        the template printing here.  */
+
+      hold_dpm = dpi->modifiers;
+      dpi->modifiers = NULL;
+
+      dpt.next = dpi->templates;
+      dpi->templates = &dpt;
+      dpt.template_decl = d_left (dc);
+
+      d_print_comp (dpi, d_left (d_left (dc)));
+
+      dpi->templates = dpt.next;
+
+      if (d_last_char (dpi) == '<')
+       d_append_char (dpi, ' ');
+      d_append_char (dpi, '<');
+      d_print_comp (dpi, d_right (d_left (dc)));
+      /* Avoid generating two consecutive '>' characters, to avoid
+        the C++ syntactic ambiguity.  */
+      if (d_last_char (dpi) == '>')
+       d_append_char (dpi, ' ');
+      d_append_char (dpi, '>');
+
+      dpi->modifiers = hold_dpm;
+    }
+}
+
+/* Initialize the information structure we use to pass around
+   information.  */
+
+CP_STATIC_IF_GLIBCPP_V3
+void
+cplus_demangle_init_info (const char *mangled, int options, size_t len,
+                          struct d_info *di)
+{
+  di->s = mangled;
+  di->send = mangled + len;
+  di->options = options;
+
+  di->n = mangled;
+
+  /* We can not need more components than twice the number of chars in
+     the mangled string.  Most components correspond directly to
+     chars, but the ARGLIST types are exceptions.  */
+  di->num_comps = 2 * len;
+  di->next_comp = 0;
+
+  /* Similarly, we can not need more substitutions than there are
+     chars in the mangled string.  */
+  di->num_subs = len;
+  di->next_sub = 0;
+  di->did_subs = 0;
+
+  di->last_name = NULL;
+
+  di->expansion = 0;
+}
+
+/* Internal implementation for the demangler.  If MANGLED is a g++ v3 ABI
+   mangled name, return strings in repeated callback giving the demangled
+   name.  OPTIONS is the usual libiberty demangler options.  On success,
+   this returns 1.  On failure, returns 0.  */
+
+static int
+d_demangle_callback (const char *mangled, int options,
+                     demangle_callbackref callback, void *opaque)
+{
+  int type;
+  struct d_info di;
+  struct demangle_component *dc;
+  int status;
+
+  if (mangled[0] == '_' && mangled[1] == 'Z')
+    type = 0;
+  else if (strncmp (mangled, "_GLOBAL_", 8) == 0
+          && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
+          && (mangled[9] == 'D' || mangled[9] == 'I')
+          && mangled[10] == '_')
+    {
+      const char *intro;
+
+      intro = (mangled[9] == 'I')
+              ? "global constructors keyed to "
+              : "global destructors keyed to ";
+
+      callback (intro, strlen (intro), opaque);
+      callback (mangled + 11, strlen (mangled + 11), opaque);
+      return 1;
+    }
+  else
+    {
+      if ((options & DMGL_TYPES) == 0)
+       return 0;
+      type = 1;
+    }
+
+  cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
+
+  {
+#ifdef CP_DYNAMIC_ARRAYS
+    __extension__ struct demangle_component comps[di.num_comps];
+    __extension__ struct demangle_component *subs[di.num_subs];
+
+    di.comps = comps;
+    di.subs = subs;
+#else
+    di.comps = alloca (di.num_comps * sizeof (*di.comps));
+    di.subs = alloca (di.num_subs * sizeof (*di.subs));
+#endif
+
+    if (type)
+      dc = cplus_demangle_type (&di);
+    else
+      dc = cplus_demangle_mangled_name (&di, 1);
+
+    /* If DMGL_PARAMS is set, then if we didn't consume the entire
+       mangled string, then we didn't successfully demangle it.  If
+       DMGL_PARAMS is not set, we didn't look at the trailing
+       parameters.  */
+    if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
+      dc = NULL;
+
+#ifdef CP_DEMANGLE_DEBUG
+    d_dump (dc, 0);
+#endif
+
+    status = (dc != NULL)
+             ? cplus_demangle_print_callback (options, dc, callback, opaque)
+             : 0;
+  }
+
+  return status;
+}
+
+/* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
+   name, return a buffer allocated with malloc holding the demangled
+   name.  OPTIONS is the usual libiberty demangler options.  On
+   success, this sets *PALC to the allocated size of the returned
+   buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
+   a memory allocation failure, and returns NULL.  */
+
+static char *
+d_demangle (const char *mangled, int options, size_t *palc)
+{
+  struct d_growable_string dgs;
+  int status;
+
+  d_growable_string_init (&dgs, 0);
+
+  status = d_demangle_callback (mangled, options,
+                                d_growable_string_callback_adapter, &dgs);
+  if (status == 0)
+    {
+      free (dgs.buf);
+      *palc = 0;
+      return NULL;
+    }
+
+  *palc = dgs.allocation_failure ? 1 : 0;
+  return dgs.buf;
+}
+
+#if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
+
+extern char *__cxa_demangle (const char *, char *, size_t *, int *);
+
+/* ia64 ABI-mandated entry point in the C++ runtime library for
+   performing demangling.  MANGLED_NAME is a NUL-terminated character
+   string containing the name to be demangled.
+
+   OUTPUT_BUFFER is a region of memory, allocated with malloc, of
+   *LENGTH bytes, into which the demangled name is stored.  If
+   OUTPUT_BUFFER is not long enough, it is expanded using realloc.
+   OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
+   is placed in a region of memory allocated with malloc.
+
+   If LENGTH is non-NULL, the length of the buffer containing the
+   demangled name, is placed in *LENGTH.
+
+   The return value is a pointer to the start of the NUL-terminated
+   demangled name, or NULL if the demangling fails.  The caller is
+   responsible for deallocating this memory using free.
+
+   *STATUS is set to one of the following values:
+      0: The demangling operation succeeded.
+     -1: A memory allocation failure occurred.
+     -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
+     -3: One of the arguments is invalid.
+
+   The demangling is performed using the C++ ABI mangling rules, with
+   GNU extensions.  */
+
+char *
+__cxa_demangle (const char *mangled_name, char *output_buffer,
+                size_t *length, int *status)
+{
+  char *demangled;
+  size_t alc;
+
+  if (mangled_name == NULL)
+    {
+      if (status != NULL)
+       *status = -3;
+      return NULL;
+    }
+
+  if (output_buffer != NULL && length == NULL)
+    {
+      if (status != NULL)
+       *status = -3;
+      return NULL;
+    }
+
+  demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
+
+  if (demangled == NULL)
+    {
+      if (status != NULL)
+       {
+         if (alc == 1)
+           *status = -1;
+         else
+           *status = -2;
+       }
+      return NULL;
+    }
+
+  if (output_buffer == NULL)
+    {
+      if (length != NULL)
+       *length = alc;
+    }
+  else
+    {
+      if (strlen (demangled) < *length)
+       {
+         strcpy (output_buffer, demangled);
+         free (demangled);
+         demangled = output_buffer;
+       }
+      else
+       {
+         free (output_buffer);
+         *length = alc;
+       }
+    }
+
+  if (status != NULL)
+    *status = 0;
+
+  return demangled;
+}
+
+extern int __gcclibcxx_demangle_callback (const char *,
+                                          void (*)
+                                            (const char *, size_t, void *),
+                                          void *);
+
+/* Alternative, allocationless entry point in the C++ runtime library
+   for performing demangling.  MANGLED_NAME is a NUL-terminated character
+   string containing the name to be demangled.
+
+   CALLBACK is a callback function, called with demangled string
+   segments as demangling progresses; it is called at least once,
+   but may be called more than once.  OPAQUE is a generalized pointer
+   used as a callback argument.
+
+   The return code is one of the following values, equivalent to
+   the STATUS values of __cxa_demangle() (excluding -1, since this
+   function performs no memory allocations):
+      0: The demangling operation succeeded.
+     -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
+     -3: One of the arguments is invalid.
+
+   The demangling is performed using the C++ ABI mangling rules, with
+   GNU extensions.  */
+
+int
+__gcclibcxx_demangle_callback (const char *mangled_name,
+                               void (*callback) (const char *, size_t, void *),
+                               void *opaque)
+{
+  int status;
+
+  if (mangled_name == NULL || callback == NULL)
+    return -3;
+
+  status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
+                                callback, opaque);
+  if (status == 0)
+    return -2;
+
+  return 0;
+}
+
+#else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
+
+/* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
+   mangled name, return a buffer allocated with malloc holding the
+   demangled name.  Otherwise, return NULL.  */
+
+char *
+cplus_demangle_v3 (const char *mangled, int options)
+{
+  size_t alc;
+
+  return d_demangle (mangled, options, &alc);
+}
+
+int
+cplus_demangle_v3_callback (const char *mangled, int options,
+                            demangle_callbackref callback, void *opaque)
+{
+  return d_demangle_callback (mangled, options, callback, opaque);
+}
+
+/* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
+   conventions, but the output formatting is a little different.
+   This instructs the C++ demangler not to emit pointer characters ("*"), to
+   use Java's namespace separator symbol ("." instead of "::"), and to output
+   JArray<TYPE> as TYPE[].  */
+
+char *
+java_demangle_v3 (const char *mangled)
+{
+  size_t alc;
+
+  return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
+}
+
+int
+java_demangle_v3_callback (const char *mangled,
+                           demangle_callbackref callback, void *opaque)
+{
+  return d_demangle_callback (mangled,
+                              DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
+                              callback, opaque);
+}
+
+#endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
+
+#ifndef IN_GLIBCPP_V3
+
+/* Demangle a string in order to find out whether it is a constructor
+   or destructor.  Return non-zero on success.  Set *CTOR_KIND and
+   *DTOR_KIND appropriately.  */
+
+static int
+is_ctor_or_dtor (const char *mangled,
+                 enum gnu_v3_ctor_kinds *ctor_kind,
+                 enum gnu_v3_dtor_kinds *dtor_kind)
+{
+  struct d_info di;
+  struct demangle_component *dc;
+  int ret;
+
+  *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
+  *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
+
+  cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
+
+  {
+#ifdef CP_DYNAMIC_ARRAYS
+    __extension__ struct demangle_component comps[di.num_comps];
+    __extension__ struct demangle_component *subs[di.num_subs];
+
+    di.comps = comps;
+    di.subs = subs;
+#else
+    di.comps = alloca (di.num_comps * sizeof (*di.comps));
+    di.subs = alloca (di.num_subs * sizeof (*di.subs));
+#endif
+
+    dc = cplus_demangle_mangled_name (&di, 1);
+
+    /* Note that because we did not pass DMGL_PARAMS, we don't expect
+       to demangle the entire string.  */
+
+    ret = 0;
+    while (dc != NULL)
+      {
+       switch (dc->type)
+         {
+         default:
+           dc = NULL;
+           break;
+         case DEMANGLE_COMPONENT_TYPED_NAME:
+         case DEMANGLE_COMPONENT_TEMPLATE:
+         case DEMANGLE_COMPONENT_RESTRICT_THIS:
+         case DEMANGLE_COMPONENT_VOLATILE_THIS:
+         case DEMANGLE_COMPONENT_CONST_THIS:
+           dc = d_left (dc);
+           break;
+         case DEMANGLE_COMPONENT_QUAL_NAME:
+         case DEMANGLE_COMPONENT_LOCAL_NAME:
+           dc = d_right (dc);
+           break;
+         case DEMANGLE_COMPONENT_CTOR:
+           *ctor_kind = dc->u.s_ctor.kind;
+           ret = 1;
+           dc = NULL;
+           break;
+         case DEMANGLE_COMPONENT_DTOR:
+           *dtor_kind = dc->u.s_dtor.kind;
+           ret = 1;
+           dc = NULL;
+           break;
+         }
+      }
+  }
+
+  return ret;
+}
+
+/* Return whether NAME is the mangled form of a g++ V3 ABI constructor
+   name.  A non-zero return indicates the type of constructor.  */
+
+enum gnu_v3_ctor_kinds
+is_gnu_v3_mangled_ctor (const char *name)
+{
+  enum gnu_v3_ctor_kinds ctor_kind;
+  enum gnu_v3_dtor_kinds dtor_kind;
+
+  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
+    return (enum gnu_v3_ctor_kinds) 0;
+  return ctor_kind;
+}
+
+
+/* Return whether NAME is the mangled form of a g++ V3 ABI destructor
+   name.  A non-zero return indicates the type of destructor.  */
+
+enum gnu_v3_dtor_kinds
+is_gnu_v3_mangled_dtor (const char *name)
+{
+  enum gnu_v3_ctor_kinds ctor_kind;
+  enum gnu_v3_dtor_kinds dtor_kind;
+
+  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
+    return (enum gnu_v3_dtor_kinds) 0;
+  return dtor_kind;
+}
+
+#endif /* IN_GLIBCPP_V3 */
+
+#ifdef STANDALONE_DEMANGLER
+
+#include "getopt.h"
+#include "dyn-string.h"
+
+static void print_usage (FILE* fp, int exit_value);
+
+#define IS_ALPHA(CHAR)                                                  \
+  (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
+   || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
+
+/* Non-zero if CHAR is a character than can occur in a mangled name.  */
+#define is_mangled_char(CHAR)                                           \
+  (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
+   || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
+
+/* The name of this program, as invoked.  */
+const char* program_name;
+
+/* Prints usage summary to FP and then exits with EXIT_VALUE.  */
+
+static void
+print_usage (FILE* fp, int exit_value)
+{
+  fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
+  fprintf (fp, "Options:\n");
+  fprintf (fp, "  -h,--help       Display this message.\n");
+  fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
+  fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
+  fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
+
+  exit (exit_value);
+}
+
+/* Option specification for getopt_long.  */
+static const struct option long_options[] = 
+{
+  { "help",     no_argument, NULL, 'h' },
+  { "no-params", no_argument, NULL, 'p' },
+  { "verbose",   no_argument, NULL, 'v' },
+  { NULL,        no_argument, NULL, 0   },
+};
+
+/* Main entry for a demangling filter executable.  It will demangle
+   its command line arguments, if any.  If none are provided, it will
+   filter stdin to stdout, replacing any recognized mangled C++ names
+   with their demangled equivalents.  */
+
+int
+main (int argc, char *argv[])
+{
+  int i;
+  int opt_char;
+  int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
+
+  /* Use the program name of this program, as invoked.  */
+  program_name = argv[0];
+
+  /* Parse options.  */
+  do 
+    {
+      opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
+      switch (opt_char)
+       {
+       case '?':  /* Unrecognized option.  */
+         print_usage (stderr, 1);
+         break;
+
+       case 'h':
+         print_usage (stdout, 0);
+         break;
+
+       case 'p':
+         options &= ~ DMGL_PARAMS;
+         break;
+
+       case 'v':
+         options |= DMGL_VERBOSE;
+         break;
+       }
+    }
+  while (opt_char != -1);
+
+  if (optind == argc) 
+    /* No command line arguments were provided.  Filter stdin.  */
+    {
+      dyn_string_t mangled = dyn_string_new (3);
+      char *s;
+
+      /* Read all of input.  */
+      while (!feof (stdin))
+       {
+         char c;
+
+         /* Pile characters into mangled until we hit one that can't
+            occur in a mangled name.  */
+         c = getchar ();
+         while (!feof (stdin) && is_mangled_char (c))
+           {
+             dyn_string_append_char (mangled, c);
+             if (feof (stdin))
+               break;
+             c = getchar ();
+           }
+
+         if (dyn_string_length (mangled) > 0)
+           {
+#ifdef IN_GLIBCPP_V3
+             s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
+#else
+             s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
+#endif
+
+             if (s != NULL)
+               {
+                 fputs (s, stdout);
+                 free (s);
+               }
+             else
+               {
+                 /* It might not have been a mangled name.  Print the
+                    original text.  */
+                 fputs (dyn_string_buf (mangled), stdout);
+               }
+
+             dyn_string_clear (mangled);
+           }
+
+         /* If we haven't hit EOF yet, we've read one character that
+            can't occur in a mangled name, so print it out.  */
+         if (!feof (stdin))
+           putchar (c);
+       }
+
+      dyn_string_delete (mangled);
+    }
+  else
+    /* Demangle command line arguments.  */
+    {
+      /* Loop over command line arguments.  */
+      for (i = optind; i < argc; ++i)
+       {
+         char *s;
+#ifdef IN_GLIBCPP_V3
+         int status;
+#endif
+
+         /* Attempt to demangle.  */
+#ifdef IN_GLIBCPP_V3
+         s = __cxa_demangle (argv[i], NULL, NULL, &status);
+#else
+         s = cplus_demangle_v3 (argv[i], options);
+#endif
+
+         /* If it worked, print the demangled name.  */
+         if (s != NULL)
+           {
+             printf ("%s\n", s);
+             free (s);
+           }
+         else
+           {
+#ifdef IN_GLIBCPP_V3
+             fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
+#else
+             fprintf (stderr, "Failed: %s\n", argv[i]);
+#endif
+           }
+       }
+    }
+
+  return 0;
+}
+
+#endif /* STANDALONE_DEMANGLER */
diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h
new file mode 100644 (file)
index 0000000..8622f29
--- /dev/null
@@ -0,0 +1,168 @@
+/* Internal demangler interface for g++ V3 ABI.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <ian@wasabisystems.com>.
+
+   This file is part of the libiberty library, which is part of GCC.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   In addition to the permissions in the GNU General Public License, the
+   Free Software Foundation gives you unlimited permission to link the
+   compiled version of this file into combinations with other programs,
+   and to distribute those combinations without any restriction coming
+   from the use of this file.  (The General Public License restrictions
+   do apply in other respects; for example, they cover modification of
+   the file, and distribution when not linked into a combined
+   executable.)
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
+*/
+
+/* This file provides some definitions shared by cp-demangle.c and
+   cp-demint.c.  It should not be included by any other files.  */
+
+/* Information we keep for operators.  */
+
+struct demangle_operator_info
+{
+  /* Mangled name.  */
+  const char *code;
+  /* Real name.  */
+  const char *name;
+  /* Length of real name.  */
+  int len;
+  /* Number of arguments.  */
+  int args;
+};
+
+/* How to print the value of a builtin type.  */
+
+enum d_builtin_type_print
+{
+  /* Print as (type)val.  */
+  D_PRINT_DEFAULT,
+  /* Print as integer.  */
+  D_PRINT_INT,
+  /* Print as unsigned integer, with trailing "u".  */
+  D_PRINT_UNSIGNED,
+  /* Print as long, with trailing "l".  */
+  D_PRINT_LONG,
+  /* Print as unsigned long, with trailing "ul".  */
+  D_PRINT_UNSIGNED_LONG,
+  /* Print as long long, with trailing "ll".  */
+  D_PRINT_LONG_LONG,
+  /* Print as unsigned long long, with trailing "ull".  */
+  D_PRINT_UNSIGNED_LONG_LONG,
+  /* Print as bool.  */
+  D_PRINT_BOOL,
+  /* Print as float--put value in square brackets.  */
+  D_PRINT_FLOAT,
+  /* Print in usual way, but here to detect void.  */
+  D_PRINT_VOID
+};
+
+/* Information we keep for a builtin type.  */
+
+struct demangle_builtin_type_info
+{
+  /* Type name.  */
+  const char *name;
+  /* Length of type name.  */
+  int len;
+  /* Type name when using Java.  */
+  const char *java_name;
+  /* Length of java name.  */
+  int java_len;
+  /* How to print a value of this type.  */
+  enum d_builtin_type_print print;
+};
+
+/* The information structure we pass around.  */
+
+struct d_info
+{
+  /* The string we are demangling.  */
+  const char *s;
+  /* The end of the string we are demangling.  */
+  const char *send;
+  /* The options passed to the demangler.  */
+  int options;
+  /* The next character in the string to consider.  */
+  const char *n;
+  /* The array of components.  */
+  struct demangle_component *comps;
+  /* The index of the next available component.  */
+  int next_comp;
+  /* The number of available component structures.  */
+  int num_comps;
+  /* The array of substitutions.  */
+  struct demangle_component **subs;
+  /* The index of the next substitution.  */
+  int next_sub;
+  /* The number of available entries in the subs array.  */
+  int num_subs;
+  /* The number of substitutions which we actually made from the subs
+     array, plus the number of template parameter references we
+     saw.  */
+  int did_subs;
+  /* The last name we saw, for constructors and destructors.  */
+  struct demangle_component *last_name;
+  /* A running total of the length of large expansions from the
+     mangled name to the demangled name, such as standard
+     substitutions and builtin types.  */
+  int expansion;
+};
+
+/* To avoid running past the ending '\0', don't:
+   - call d_peek_next_char if d_peek_char returned '\0'
+   - call d_advance with an 'i' that is too large
+   - call d_check_char(di, '\0')
+   Everything else is safe.  */
+#define d_peek_char(di) (*((di)->n))
+#define d_peek_next_char(di) ((di)->n[1])
+#define d_advance(di, i) ((di)->n += (i))
+#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
+#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
+#define d_str(di) ((di)->n)
+
+/* Functions and arrays in cp-demangle.c which are referenced by
+   functions in cp-demint.c.  */
+#ifdef IN_GLIBCPP_V3
+#define CP_STATIC_IF_GLIBCPP_V3 static
+#else
+#define CP_STATIC_IF_GLIBCPP_V3 extern
+#endif
+
+#ifndef IN_GLIBCPP_V3
+extern const struct demangle_operator_info cplus_demangle_operators[];
+#endif
+
+#define D_BUILTIN_TYPE_COUNT (26)
+
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_builtin_type_info
+cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
+
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_mangled_name (struct d_info *, int);
+
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_type (struct d_info *);
+
+extern void
+cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
+
+/* cp-demangle.c needs to define this a little differently */
+#undef CP_STATIC_IF_GLIBCPP_V3
diff --git a/libiberty/cp-demint.c b/libiberty/cp-demint.c
new file mode 100644 (file)
index 0000000..2e8f8d2
--- /dev/null
@@ -0,0 +1,234 @@
+/* Demangler component interface functions.
+   Copyright (C) 2004 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <ian@wasabisystems.com>.
+
+   This file is part of the libiberty library, which is part of GCC.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   In addition to the permissions in the GNU General Public License, the
+   Free Software Foundation gives you unlimited permission to link the
+   compiled version of this file into combinations with other programs,
+   and to distribute those combinations without any restriction coming
+   from the use of this file.  (The General Public License restrictions
+   do apply in other respects; for example, they cover modification of
+   the file, and distribution when not linked into a combined
+   executable.)
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
+*/
+
+/* This file implements a few interface functions which are provided
+   for use with struct demangle_component trees.  These functions are
+   declared in demangle.h.  These functions are closely tied to the
+   demangler code in cp-demangle.c, and other interface functions can
+   be found in that file.  We put these functions in a separate file
+   because they are not needed by the demangler, and so we avoid
+   having them pulled in by programs which only need the
+   demangler.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "demangle.h"
+#include "cp-demangle.h"
+
+/* Fill in most component types.  */
+
+int
+cplus_demangle_fill_component (struct demangle_component *p,
+                               enum demangle_component_type type,
+                               struct demangle_component *left,
+                                struct demangle_component *right)
+{
+  if (p == NULL)
+    return 0;
+  switch (type)
+    {
+    case DEMANGLE_COMPONENT_QUAL_NAME:
+    case DEMANGLE_COMPONENT_LOCAL_NAME:
+    case DEMANGLE_COMPONENT_TYPED_NAME:
+    case DEMANGLE_COMPONENT_TEMPLATE:
+    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+    case DEMANGLE_COMPONENT_ARRAY_TYPE:
+    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+    case DEMANGLE_COMPONENT_ARGLIST:
+    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+    case DEMANGLE_COMPONENT_UNARY:
+    case DEMANGLE_COMPONENT_BINARY:
+    case DEMANGLE_COMPONENT_BINARY_ARGS:
+    case DEMANGLE_COMPONENT_TRINARY:
+    case DEMANGLE_COMPONENT_TRINARY_ARG1:
+    case DEMANGLE_COMPONENT_TRINARY_ARG2:
+    case DEMANGLE_COMPONENT_LITERAL:
+    case DEMANGLE_COMPONENT_LITERAL_NEG:
+      break;
+
+      /* These component types only have one subtree.  */
+    case DEMANGLE_COMPONENT_VTABLE:
+    case DEMANGLE_COMPONENT_VTT:
+    case DEMANGLE_COMPONENT_TYPEINFO:
+    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+    case DEMANGLE_COMPONENT_TYPEINFO_FN:
+    case DEMANGLE_COMPONENT_THUNK:
+    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+    case DEMANGLE_COMPONENT_JAVA_CLASS:
+    case DEMANGLE_COMPONENT_GUARD:
+    case DEMANGLE_COMPONENT_REFTEMP:
+    case DEMANGLE_COMPONENT_RESTRICT:
+    case DEMANGLE_COMPONENT_VOLATILE:
+    case DEMANGLE_COMPONENT_CONST:
+    case DEMANGLE_COMPONENT_RESTRICT_THIS:
+    case DEMANGLE_COMPONENT_VOLATILE_THIS:
+    case DEMANGLE_COMPONENT_CONST_THIS:
+    case DEMANGLE_COMPONENT_POINTER:
+    case DEMANGLE_COMPONENT_REFERENCE:
+    case DEMANGLE_COMPONENT_COMPLEX:
+    case DEMANGLE_COMPONENT_IMAGINARY:
+    case DEMANGLE_COMPONENT_VENDOR_TYPE:
+    case DEMANGLE_COMPONENT_CAST:
+      if (right != NULL)
+       return 0;
+      break;
+
+    default:
+      /* Other types do not use subtrees.  */
+      return 0;
+    }
+
+  p->type = type;
+  p->u.s_binary.left = left;
+  p->u.s_binary.right = right;
+
+  return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE.  */
+
+int
+cplus_demangle_fill_builtin_type (struct demangle_component *p,
+                                  const char *type_name)
+{
+  int len;
+  unsigned int i;
+
+  if (p == NULL || type_name == NULL)
+    return 0;
+  len = strlen (type_name);
+  for (i = 0; i < D_BUILTIN_TYPE_COUNT; ++i)
+    {
+      if (len == cplus_demangle_builtin_types[i].len
+         && strcmp (type_name, cplus_demangle_builtin_types[i].name) == 0)
+       {
+         p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
+         p->u.s_builtin.type = &cplus_demangle_builtin_types[i];
+         return 1;
+       }
+    }
+  return 0;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_OPERATOR.  */
+
+int
+cplus_demangle_fill_operator (struct demangle_component *p,
+                              const char *opname, int args)
+{
+  int len;
+  unsigned int i;
+
+  if (p == NULL || opname == NULL)
+    return 0;
+  len = strlen (opname);
+  for (i = 0; cplus_demangle_operators[i].name != NULL; ++i)
+    {
+      if (len == cplus_demangle_operators[i].len
+         && args == cplus_demangle_operators[i].args
+         && strcmp (opname, cplus_demangle_operators[i].name) == 0)
+       {
+         p->type = DEMANGLE_COMPONENT_OPERATOR;
+         p->u.s_operator.op = &cplus_demangle_operators[i];
+         return 1;
+       }
+    }
+  return 0;
+}
+
+/* Translate a mangled name into components.  */
+
+struct demangle_component *
+cplus_demangle_v3_components (const char *mangled, int options, void **mem)
+{
+  size_t len;
+  int type;
+  struct d_info di;
+  struct demangle_component *dc;
+
+  len = strlen (mangled);
+
+  if (mangled[0] == '_' && mangled[1] == 'Z')
+    type = 0;
+  else
+    {
+      if ((options & DMGL_TYPES) == 0)
+       return NULL;
+      type = 1;
+    }
+
+  cplus_demangle_init_info (mangled, options, len, &di);
+
+  di.comps = ((struct demangle_component *)
+             malloc (di.num_comps * sizeof (struct demangle_component)));
+  di.subs = ((struct demangle_component **)
+            malloc (di.num_subs * sizeof (struct demangle_component *)));
+  if (di.comps == NULL || di.subs == NULL)
+    {
+      if (di.comps != NULL)
+       free (di.comps);
+      if (di.subs != NULL)
+       free (di.subs);
+      return NULL;
+    }
+
+  if (! type)
+    dc = cplus_demangle_mangled_name (&di, 1);
+  else
+    dc = cplus_demangle_type (&di);
+
+  /* If DMGL_PARAMS is set, then if we didn't consume the entire
+     mangled string, then we didn't successfully demangle it.  */
+  if ((options & DMGL_PARAMS) != 0 && d_peek_char (&di) != '\0')
+    dc = NULL;
+
+  free (di.subs);
+
+  if (dc != NULL)
+    *mem = di.comps;
+  else
+    free (di.comps);
+
+  return dc;
+}
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
new file mode 100644 (file)
index 0000000..1f8b1fc
--- /dev/null
@@ -0,0 +1,4717 @@
+/* Demangler for GNU C++
+   Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Written by James Clark (jjc@jclark.uucp)
+   Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
+   Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+In addition to the permissions in the GNU Library General Public
+License, the Free Software Foundation gives you unlimited permission
+to link the compiled version of this file into combinations with other
+programs, and to distribute those combinations without any restriction
+coming from the use of this file.  (The Library Public License
+restrictions do apply in other respects; for example, they cover
+modification of the file, and distribution when not linked into a
+combined executable.)
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* This file exports two functions; cplus_mangle_opname and cplus_demangle.
+
+   This file imports xmalloc and xrealloc, which are like malloc and
+   realloc except that they generate a fatal error if there is no
+   available memory.  */
+
+/* This file lives in both GCC and libiberty.  When making changes, please
+   try not to break either.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "safe-ctype.h"
+
+#include <sys/types.h>
+#include <string.h>
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+char * malloc ();
+char * realloc ();
+#endif
+
+#include <demangle.h>
+#undef CURRENT_DEMANGLING_STYLE
+#define CURRENT_DEMANGLING_STYLE work->options
+
+#include "libiberty.h"
+
+static char *ada_demangle (const char *, int);
+
+#define min(X,Y) (((X) < (Y)) ? (X) : (Y))
+
+/* A value at least one greater than the maximum number of characters
+   that will be output when using the `%d' format with `printf'.  */
+#define INTBUF_SIZE 32
+
+extern void fancy_abort (void) ATTRIBUTE_NORETURN;
+
+/* In order to allow a single demangler executable to demangle strings
+   using various common values of CPLUS_MARKER, as well as any specific
+   one set at compile time, we maintain a string containing all the
+   commonly used ones, and check to see if the marker we are looking for
+   is in that string.  CPLUS_MARKER is usually '$' on systems where the
+   assembler can deal with that.  Where the assembler can't, it's usually
+   '.' (but on many systems '.' is used for other things).  We put the
+   current defined CPLUS_MARKER first (which defaults to '$'), followed
+   by the next most common value, followed by an explicit '$' in case
+   the value of CPLUS_MARKER is not '$'.
+
+   We could avoid this if we could just get g++ to tell us what the actual
+   cplus marker character is as part of the debug information, perhaps by
+   ensuring that it is the character that terminates the gcc<n>_compiled
+   marker symbol (FIXME).  */
+
+#if !defined (CPLUS_MARKER)
+#define CPLUS_MARKER '$'
+#endif
+
+enum demangling_styles current_demangling_style = auto_demangling;
+
+static char cplus_markers[] = { CPLUS_MARKER, '.', '$', '\0' };
+
+static char char_str[2] = { '\000', '\000' };
+
+void
+set_cplus_marker_for_demangling (int ch)
+{
+  cplus_markers[0] = ch;
+}
+
+typedef struct string          /* Beware: these aren't required to be */
+{                              /*  '\0' terminated.  */
+  char *b;                     /* pointer to start of string */
+  char *p;                     /* pointer after last character */
+  char *e;                     /* pointer after end of allocated space */
+} string;
+
+/* Stuff that is shared between sub-routines.
+   Using a shared structure allows cplus_demangle to be reentrant.  */
+
+struct work_stuff
+{
+  int options;
+  char **typevec;
+  char **ktypevec;
+  char **btypevec;
+  int numk;
+  int numb;
+  int ksize;
+  int bsize;
+  int ntypes;
+  int typevec_size;
+  int constructor;
+  int destructor;
+  int static_type;     /* A static member function */
+  int temp_start;       /* index in demangled to start of template args */
+  int type_quals;       /* The type qualifiers.  */
+  int dllimported;     /* Symbol imported from a PE DLL */
+  char **tmpl_argvec;   /* Template function arguments. */
+  int ntmpl_args;       /* The number of template function arguments. */
+  int forgetting_types; /* Nonzero if we are not remembering the types
+                          we see.  */
+  string* previous_argument; /* The last function argument demangled.  */
+  int nrepeats;         /* The number of times to repeat the previous
+                          argument.  */
+};
+
+#define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI)
+#define PRINT_ARG_TYPES       (work -> options & DMGL_PARAMS)
+
+static const struct optable
+{
+  const char *const in;
+  const char *const out;
+  const int flags;
+} optable[] = {
+  {"nw",         " new",       DMGL_ANSI},     /* new (1.92,    ansi) */
+  {"dl",         " delete",    DMGL_ANSI},     /* new (1.92,    ansi) */
+  {"new",        " new",       0},             /* old (1.91,    and 1.x) */
+  {"delete",     " delete",    0},             /* old (1.91,    and 1.x) */
+  {"vn",         " new []",    DMGL_ANSI},     /* GNU, pending ansi */
+  {"vd",         " delete []", DMGL_ANSI},     /* GNU, pending ansi */
+  {"as",         "=",          DMGL_ANSI},     /* ansi */
+  {"ne",         "!=",         DMGL_ANSI},     /* old, ansi */
+  {"eq",         "==",         DMGL_ANSI},     /* old, ansi */
+  {"ge",         ">=",         DMGL_ANSI},     /* old, ansi */
+  {"gt",         ">",          DMGL_ANSI},     /* old, ansi */
+  {"le",         "<=",         DMGL_ANSI},     /* old, ansi */
+  {"lt",         "<",          DMGL_ANSI},     /* old, ansi */
+  {"plus",       "+",          0},             /* old */
+  {"pl",         "+",          DMGL_ANSI},     /* ansi */
+  {"apl",        "+=",         DMGL_ANSI},     /* ansi */
+  {"minus",      "-",          0},             /* old */
+  {"mi",         "-",          DMGL_ANSI},     /* ansi */
+  {"ami",        "-=",         DMGL_ANSI},     /* ansi */
+  {"mult",       "*",          0},             /* old */
+  {"ml",         "*",          DMGL_ANSI},     /* ansi */
+  {"amu",        "*=",         DMGL_ANSI},     /* ansi (ARM/Lucid) */
+  {"aml",        "*=",         DMGL_ANSI},     /* ansi (GNU/g++) */
+  {"convert",    "+",          0},             /* old (unary +) */
+  {"negate",     "-",          0},             /* old (unary -) */
+  {"trunc_mod",          "%",          0},             /* old */
+  {"md",         "%",          DMGL_ANSI},     /* ansi */
+  {"amd",        "%=",         DMGL_ANSI},     /* ansi */
+  {"trunc_div",          "/",          0},             /* old */
+  {"dv",         "/",          DMGL_ANSI},     /* ansi */
+  {"adv",        "/=",         DMGL_ANSI},     /* ansi */
+  {"truth_andif", "&&",                0},             /* old */
+  {"aa",         "&&",         DMGL_ANSI},     /* ansi */
+  {"truth_orif",  "||",                0},             /* old */
+  {"oo",         "||",         DMGL_ANSI},     /* ansi */
+  {"truth_not",          "!",          0},             /* old */
+  {"nt",         "!",          DMGL_ANSI},     /* ansi */
+  {"postincrement","++",       0},             /* old */
+  {"pp",         "++",         DMGL_ANSI},     /* ansi */
+  {"postdecrement","--",       0},             /* old */
+  {"mm",         "--",         DMGL_ANSI},     /* ansi */
+  {"bit_ior",    "|",          0},             /* old */
+  {"or",         "|",          DMGL_ANSI},     /* ansi */
+  {"aor",        "|=",         DMGL_ANSI},     /* ansi */
+  {"bit_xor",    "^",          0},             /* old */
+  {"er",         "^",          DMGL_ANSI},     /* ansi */
+  {"aer",        "^=",         DMGL_ANSI},     /* ansi */
+  {"bit_and",    "&",          0},             /* old */
+  {"ad",         "&",          DMGL_ANSI},     /* ansi */
+  {"aad",        "&=",         DMGL_ANSI},     /* ansi */
+  {"bit_not",    "~",          0},             /* old */
+  {"co",         "~",          DMGL_ANSI},     /* ansi */
+  {"call",       "()",         0},             /* old */
+  {"cl",         "()",         DMGL_ANSI},     /* ansi */
+  {"alshift",    "<<",         0},             /* old */
+  {"ls",         "<<",         DMGL_ANSI},     /* ansi */
+  {"als",        "<<=",        DMGL_ANSI},     /* ansi */
+  {"arshift",    ">>",         0},             /* old */
+  {"rs",         ">>",         DMGL_ANSI},     /* ansi */
+  {"ars",        ">>=",        DMGL_ANSI},     /* ansi */
+  {"component",          "->",         0},             /* old */
+  {"pt",         "->",         DMGL_ANSI},     /* ansi; Lucid C++ form */
+  {"rf",         "->",         DMGL_ANSI},     /* ansi; ARM/GNU form */
+  {"indirect",   "*",          0},             /* old */
+  {"method_call",  "->()",     0},             /* old */
+  {"addr",       "&",          0},             /* old (unary &) */
+  {"array",      "[]",         0},             /* old */
+  {"vc",         "[]",         DMGL_ANSI},     /* ansi */
+  {"compound",   ", ",         0},             /* old */
+  {"cm",         ", ",         DMGL_ANSI},     /* ansi */
+  {"cond",       "?:",         0},             /* old */
+  {"cn",         "?:",         DMGL_ANSI},     /* pseudo-ansi */
+  {"max",        ">?",         0},             /* old */
+  {"mx",         ">?",         DMGL_ANSI},     /* pseudo-ansi */
+  {"min",        "<?",         0},             /* old */
+  {"mn",         "<?",         DMGL_ANSI},     /* pseudo-ansi */
+  {"nop",        "",           0},             /* old (for operator=) */
+  {"rm",         "->*",        DMGL_ANSI},     /* ansi */
+  {"sz",          "sizeof ",    DMGL_ANSI}      /* pseudo-ansi */
+};
+
+/* These values are used to indicate the various type varieties.
+   They are all non-zero so that they can be used as `success'
+   values.  */
+typedef enum type_kind_t
+{
+  tk_none,
+  tk_pointer,
+  tk_reference,
+  tk_integral,
+  tk_bool,
+  tk_char,
+  tk_real
+} type_kind_t;
+
+const struct demangler_engine libiberty_demanglers[] =
+{
+  {
+    NO_DEMANGLING_STYLE_STRING,
+    no_demangling,
+    "Demangling disabled"
+  }
+  ,
+  {
+    AUTO_DEMANGLING_STYLE_STRING,
+      auto_demangling,
+      "Automatic selection based on executable"
+  }
+  ,
+  {
+    GNU_DEMANGLING_STYLE_STRING,
+      gnu_demangling,
+      "GNU (g++) style demangling"
+  }
+  ,
+  {
+    LUCID_DEMANGLING_STYLE_STRING,
+      lucid_demangling,
+      "Lucid (lcc) style demangling"
+  }
+  ,
+  {
+    ARM_DEMANGLING_STYLE_STRING,
+      arm_demangling,
+      "ARM style demangling"
+  }
+  ,
+  {
+    HP_DEMANGLING_STYLE_STRING,
+      hp_demangling,
+      "HP (aCC) style demangling"
+  }
+  ,
+  {
+    EDG_DEMANGLING_STYLE_STRING,
+      edg_demangling,
+      "EDG style demangling"
+  }
+  ,
+  {
+    GNU_V3_DEMANGLING_STYLE_STRING,
+    gnu_v3_demangling,
+    "GNU (g++) V3 ABI-style demangling"
+  }
+  ,
+  {
+    JAVA_DEMANGLING_STYLE_STRING,
+    java_demangling,
+    "Java style demangling"
+  }
+  ,
+  {
+    GNAT_DEMANGLING_STYLE_STRING,
+    gnat_demangling,
+    "GNAT style demangling"
+  }
+  ,
+  {
+    NULL, unknown_demangling, NULL
+  }
+};
+
+#define STRING_EMPTY(str)      ((str) -> b == (str) -> p)
+#define APPEND_BLANK(str)      {if (!STRING_EMPTY(str)) \
+    string_append(str, " ");}
+#define LEN_STRING(str)         ( (STRING_EMPTY(str))?0:((str)->p - (str)->b))
+
+/* The scope separator appropriate for the language being demangled.  */
+
+#define SCOPE_STRING(work) ((work->options & DMGL_JAVA) ? "." : "::")
+
+#define ARM_VTABLE_STRING "__vtbl__"   /* Lucid/ARM virtual table prefix */
+#define ARM_VTABLE_STRLEN 8            /* strlen (ARM_VTABLE_STRING) */
+
+/* Prototypes for local functions */
+
+static void delete_work_stuff (struct work_stuff *);
+
+static void delete_non_B_K_work_stuff (struct work_stuff *);
+
+static char *mop_up (struct work_stuff *, string *, int);
+
+static void squangle_mop_up (struct work_stuff *);
+
+static void work_stuff_copy_to_from (struct work_stuff *, struct work_stuff *);
+
+#if 0
+static int
+demangle_method_args (struct work_stuff *, const char **, string *);
+#endif
+
+static char *
+internal_cplus_demangle (struct work_stuff *, const char *);
+
+static int
+demangle_template_template_parm (struct work_stuff *work,
+                                 const char **, string *);
+
+static int
+demangle_template (struct work_stuff *work, const char **, string *,
+                   string *, int, int);
+
+static int
+arm_pt (struct work_stuff *, const char *, int, const char **,
+        const char **);
+
+static int
+demangle_class_name (struct work_stuff *, const char **, string *);
+
+static int
+demangle_qualified (struct work_stuff *, const char **, string *,
+                    int, int);
+
+static int demangle_class (struct work_stuff *, const char **, string *);
+
+static int demangle_fund_type (struct work_stuff *, const char **, string *);
+
+static int demangle_signature (struct work_stuff *, const char **, string *);
+
+static int demangle_prefix (struct work_stuff *, const char **, string *);
+
+static int gnu_special (struct work_stuff *, const char **, string *);
+
+static int arm_special (const char **, string *);
+
+static void string_need (string *, int);
+
+static void string_delete (string *);
+
+static void
+string_init (string *);
+
+static void string_clear (string *);
+
+#if 0
+static int string_empty (string *);
+#endif
+
+static void string_append (string *, const char *);
+
+static void string_appends (string *, string *);
+
+static void string_appendn (string *, const char *, int);
+
+static void string_prepend (string *, const char *);
+
+static void string_prependn (string *, const char *, int);
+
+static void string_append_template_idx (string *, int);
+
+static int get_count (const char **, int *);
+
+static int consume_count (const char **);
+
+static int consume_count_with_underscores (const char**);
+
+static int demangle_args (struct work_stuff *, const char **, string *);
+
+static int demangle_nested_args (struct work_stuff*, const char**, string*);
+
+static int do_type (struct work_stuff *, const char **, string *);
+
+static int do_arg (struct work_stuff *, const char **, string *);
+
+static void
+demangle_function_name (struct work_stuff *, const char **, string *,
+                        const char *);
+
+static int
+iterate_demangle_function (struct work_stuff *,
+                           const char **, string *, const char *);
+
+static void remember_type (struct work_stuff *, const char *, int);
+
+static void remember_Btype (struct work_stuff *, const char *, int, int);
+
+static int register_Btype (struct work_stuff *);
+
+static void remember_Ktype (struct work_stuff *, const char *, int);
+
+static void forget_types (struct work_stuff *);
+
+static void forget_B_and_K_types (struct work_stuff *);
+
+static void string_prepends (string *, string *);
+
+static int
+demangle_template_value_parm (struct work_stuff*, const char**,
+                              string*, type_kind_t);
+
+static int
+do_hpacc_template_const_value (struct work_stuff *, const char **, string *);
+
+static int
+do_hpacc_template_literal (struct work_stuff *, const char **, string *);
+
+static int snarf_numeric_literal (const char **, string *);
+
+/* There is a TYPE_QUAL value for each type qualifier.  They can be
+   combined by bitwise-or to form the complete set of qualifiers for a
+   type.  */
+
+#define TYPE_UNQUALIFIED   0x0
+#define TYPE_QUAL_CONST    0x1
+#define TYPE_QUAL_VOLATILE 0x2
+#define TYPE_QUAL_RESTRICT 0x4
+
+static int code_for_qualifier (int);
+
+static const char* qualifier_string (int);
+
+static const char* demangle_qualifier (int);
+
+static int demangle_expression (struct work_stuff *, const char **, string *, 
+                                type_kind_t);
+
+static int
+demangle_integral_value (struct work_stuff *, const char **, string *);
+
+static int
+demangle_real_value (struct work_stuff *, const char **, string *);
+
+static void
+demangle_arm_hp_template (struct work_stuff *, const char **, int, string *);
+
+static void
+recursively_demangle (struct work_stuff *, const char **, string *, int);
+
+static void grow_vect (char **, size_t *, size_t, int);
+
+/* Translate count to integer, consuming tokens in the process.
+   Conversion terminates on the first non-digit character.
+
+   Trying to consume something that isn't a count results in no
+   consumption of input and a return of -1.
+
+   Overflow consumes the rest of the digits, and returns -1.  */
+
+static int
+consume_count (const char **type)
+{
+  int count = 0;
+
+  if (! ISDIGIT ((unsigned char)**type))
+    return -1;
+
+  while (ISDIGIT ((unsigned char)**type))
+    {
+      count *= 10;
+
+      /* Check for overflow.
+        We assume that count is represented using two's-complement;
+        no power of two is divisible by ten, so if an overflow occurs
+        when multiplying by ten, the result will not be a multiple of
+        ten.  */
+      if ((count % 10) != 0)
+       {
+         while (ISDIGIT ((unsigned char) **type))
+           (*type)++;
+         return -1;
+       }
+
+      count += **type - '0';
+      (*type)++;
+    }
+
+  if (count < 0)
+    count = -1;
+
+  return (count);
+}
+
+
+/* Like consume_count, but for counts that are preceded and followed
+   by '_' if they are greater than 10.  Also, -1 is returned for
+   failure, since 0 can be a valid value.  */
+
+static int
+consume_count_with_underscores (const char **mangled)
+{
+  int idx;
+
+  if (**mangled == '_')
+    {
+      (*mangled)++;
+      if (!ISDIGIT ((unsigned char)**mangled))
+       return -1;
+
+      idx = consume_count (mangled);
+      if (**mangled != '_')
+       /* The trailing underscore was missing. */
+       return -1;
+
+      (*mangled)++;
+    }
+  else
+    {
+      if (**mangled < '0' || **mangled > '9')
+       return -1;
+
+      idx = **mangled - '0';
+      (*mangled)++;
+    }
+
+  return idx;
+}
+
+/* C is the code for a type-qualifier.  Return the TYPE_QUAL
+   corresponding to this qualifier.  */
+
+static int
+code_for_qualifier (int c)
+{
+  switch (c)
+    {
+    case 'C':
+      return TYPE_QUAL_CONST;
+
+    case 'V':
+      return TYPE_QUAL_VOLATILE;
+
+    case 'u':
+      return TYPE_QUAL_RESTRICT;
+
+    default:
+      break;
+    }
+
+  /* C was an invalid qualifier.  */
+  abort ();
+}
+
+/* Return the string corresponding to the qualifiers given by
+   TYPE_QUALS.  */
+
+static const char*
+qualifier_string (int type_quals)
+{
+  switch (type_quals)
+    {
+    case TYPE_UNQUALIFIED:
+      return "";
+
+    case TYPE_QUAL_CONST:
+      return "const";
+
+    case TYPE_QUAL_VOLATILE:
+      return "volatile";
+
+    case TYPE_QUAL_RESTRICT:
+      return "__restrict";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE:
+      return "const volatile";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT:
+      return "const __restrict";
+
+    case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+      return "volatile __restrict";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+      return "const volatile __restrict";
+
+    default:
+      break;
+    }
+
+  /* TYPE_QUALS was an invalid qualifier set.  */
+  abort ();
+}
+
+/* C is the code for a type-qualifier.  Return the string
+   corresponding to this qualifier.  This function should only be
+   called with a valid qualifier code.  */
+
+static const char*
+demangle_qualifier (int c)
+{
+  return qualifier_string (code_for_qualifier (c));
+}
+
+int
+cplus_demangle_opname (const char *opname, char *result, int options)
+{
+  int len, len1, ret;
+  string type;
+  struct work_stuff work[1];
+  const char *tem;
+
+  len = strlen(opname);
+  result[0] = '\0';
+  ret = 0;
+  memset ((char *) work, 0, sizeof (work));
+  work->options = options;
+
+  if (opname[0] == '_' && opname[1] == '_'
+      && opname[2] == 'o' && opname[3] == 'p')
+    {
+      /* ANSI.  */
+      /* type conversion operator.  */
+      tem = opname + 4;
+      if (do_type (work, &tem, &type))
+       {
+         strcat (result, "operator ");
+         strncat (result, type.b, type.p - type.b);
+         string_delete (&type);
+         ret = 1;
+       }
+    }
+  else if (opname[0] == '_' && opname[1] == '_'
+          && ISLOWER((unsigned char)opname[2])
+          && ISLOWER((unsigned char)opname[3]))
+    {
+      if (opname[4] == '\0')
+       {
+         /* Operator.  */
+         size_t i;
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             if (strlen (optable[i].in) == 2
+                 && memcmp (optable[i].in, opname + 2, 2) == 0)
+               {
+                 strcat (result, "operator");
+                 strcat (result, optable[i].out);
+                 ret = 1;
+                 break;
+               }
+           }
+       }
+      else
+       {
+         if (opname[2] == 'a' && opname[5] == '\0')
+           {
+             /* Assignment.  */
+             size_t i;
+             for (i = 0; i < ARRAY_SIZE (optable); i++)
+               {
+                 if (strlen (optable[i].in) == 3
+                     && memcmp (optable[i].in, opname + 2, 3) == 0)
+                   {
+                     strcat (result, "operator");
+                     strcat (result, optable[i].out);
+                     ret = 1;
+                     break;
+                   }
+               }
+           }
+       }
+    }
+  else if (len >= 3
+          && opname[0] == 'o'
+          && opname[1] == 'p'
+          && strchr (cplus_markers, opname[2]) != NULL)
+    {
+      /* see if it's an assignment expression */
+      if (len >= 10 /* op$assign_ */
+         && memcmp (opname + 3, "assign_", 7) == 0)
+       {
+         size_t i;
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             len1 = len - 10;
+             if ((int) strlen (optable[i].in) == len1
+                 && memcmp (optable[i].in, opname + 10, len1) == 0)
+               {
+                 strcat (result, "operator");
+                 strcat (result, optable[i].out);
+                 strcat (result, "=");
+                 ret = 1;
+                 break;
+               }
+           }
+       }
+      else
+       {
+         size_t i;
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             len1 = len - 3;
+             if ((int) strlen (optable[i].in) == len1
+                 && memcmp (optable[i].in, opname + 3, len1) == 0)
+               {
+                 strcat (result, "operator");
+                 strcat (result, optable[i].out);
+                 ret = 1;
+                 break;
+               }
+           }
+       }
+    }
+  else if (len >= 5 && memcmp (opname, "type", 4) == 0
+          && strchr (cplus_markers, opname[4]) != NULL)
+    {
+      /* type conversion operator */
+      tem = opname + 5;
+      if (do_type (work, &tem, &type))
+       {
+         strcat (result, "operator ");
+         strncat (result, type.b, type.p - type.b);
+         string_delete (&type);
+         ret = 1;
+       }
+    }
+  squangle_mop_up (work);
+  return ret;
+
+}
+
+/* Takes operator name as e.g. "++" and returns mangled
+   operator name (e.g. "postincrement_expr"), or NULL if not found.
+
+   If OPTIONS & DMGL_ANSI == 1, return the ANSI name;
+   if OPTIONS & DMGL_ANSI == 0, return the old GNU name.  */
+
+const char *
+cplus_mangle_opname (const char *opname, int options)
+{
+  size_t i;
+  int len;
+
+  len = strlen (opname);
+  for (i = 0; i < ARRAY_SIZE (optable); i++)
+    {
+      if ((int) strlen (optable[i].out) == len
+         && (options & DMGL_ANSI) == (optable[i].flags & DMGL_ANSI)
+         && memcmp (optable[i].out, opname, len) == 0)
+       return optable[i].in;
+    }
+  return (0);
+}
+
+/* Add a routine to set the demangling style to be sure it is valid and
+   allow for any demangler initialization that maybe necessary. */
+
+enum demangling_styles
+cplus_demangle_set_style (enum demangling_styles style)
+{
+  const struct demangler_engine *demangler = libiberty_demanglers; 
+
+  for (; demangler->demangling_style != unknown_demangling; ++demangler)
+    if (style == demangler->demangling_style)
+      {
+       current_demangling_style = style;
+       return current_demangling_style;
+      }
+
+  return unknown_demangling;
+}
+
+/* Do string name to style translation */
+
+enum demangling_styles
+cplus_demangle_name_to_style (const char *name)
+{
+  const struct demangler_engine *demangler = libiberty_demanglers; 
+
+  for (; demangler->demangling_style != unknown_demangling; ++demangler)
+    if (strcmp (name, demangler->demangling_style_name) == 0)
+      return demangler->demangling_style;
+
+  return unknown_demangling;
+}
+
+/* char *cplus_demangle (const char *mangled, int options)
+
+   If MANGLED is a mangled function name produced by GNU C++, then
+   a pointer to a @code{malloc}ed string giving a C++ representation
+   of the name will be returned; otherwise NULL will be returned.
+   It is the caller's responsibility to free the string which
+   is returned.
+
+   The OPTIONS arg may contain one or more of the following bits:
+
+       DMGL_ANSI       ANSI qualifiers such as `const' and `void' are
+                       included.
+       DMGL_PARAMS     Function parameters are included.
+
+   For example,
+
+   cplus_demangle ("foo__1Ai", DMGL_PARAMS)            => "A::foo(int)"
+   cplus_demangle ("foo__1Ai", DMGL_PARAMS | DMGL_ANSI)        => "A::foo(int)"
+   cplus_demangle ("foo__1Ai", 0)                      => "A::foo"
+
+   cplus_demangle ("foo__1Afe", DMGL_PARAMS)           => "A::foo(float,...)"
+   cplus_demangle ("foo__1Afe", DMGL_PARAMS | DMGL_ANSI)=> "A::foo(float,...)"
+   cplus_demangle ("foo__1Afe", 0)                     => "A::foo"
+
+   Note that any leading underscores, or other such characters prepended by
+   the compilation system, are presumed to have already been stripped from
+   MANGLED.  */
+
+char *
+cplus_demangle (const char *mangled, int options)
+{
+  char *ret;
+  struct work_stuff work[1];
+
+  if (current_demangling_style == no_demangling)
+    return xstrdup (mangled);
+
+  memset ((char *) work, 0, sizeof (work));
+  work->options = options;
+  if ((work->options & DMGL_STYLE_MASK) == 0)
+    work->options |= (int) current_demangling_style & DMGL_STYLE_MASK;
+
+  /* The V3 ABI demangling is implemented elsewhere.  */
+  if (GNU_V3_DEMANGLING || AUTO_DEMANGLING)
+    {
+      ret = cplus_demangle_v3 (mangled, work->options);
+      if (ret || GNU_V3_DEMANGLING)
+       return ret;
+    }
+
+  if (JAVA_DEMANGLING)
+    {
+      ret = java_demangle_v3 (mangled);
+      if (ret)
+        return ret;
+    }
+
+  if (GNAT_DEMANGLING)
+    return ada_demangle(mangled,options);
+
+  ret = internal_cplus_demangle (work, mangled);
+  squangle_mop_up (work);
+  return (ret);
+}
+
+
+/* Assuming *OLD_VECT points to an array of *SIZE objects of size
+   ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
+   updating *OLD_VECT and *SIZE as necessary.  */
+
+static void
+grow_vect (char **old_vect, size_t *size, size_t min_size, int element_size)
+{
+  if (*size < min_size)
+    {
+      *size *= 2;
+      if (*size < min_size)
+       *size = min_size;
+      *old_vect = XRESIZEVAR (char, *old_vect, *size * element_size);
+    }
+}
+
+/* Demangle ada names:
+   1. Discard final __{DIGIT}+ or ${DIGIT}+
+   2. Convert other instances of embedded "__" to `.'.
+   3. Discard leading _ada_.
+   4. Remove everything after first ___ if it is followed by 'X'.
+   5. Put symbols that should be suppressed in <...> brackets.
+   The resulting string is valid until the next call of ada_demangle.  */
+
+static char *
+ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
+{
+  int i, j;
+  int len0;
+  const char* p;
+  char *demangled = NULL;
+  int changed;
+  size_t demangled_size = 0;
+  
+  changed = 0;
+
+  if (strncmp (mangled, "_ada_", 5) == 0)
+    {
+      mangled += 5;
+      changed = 1;
+    }
+  
+  if (mangled[0] == '_' || mangled[0] == '<')
+    goto Suppress;
+  
+  p = strstr (mangled, "___");
+  if (p == NULL)
+    len0 = strlen (mangled);
+  else
+    {
+      if (p[3] == 'X')
+       {
+         len0 = p - mangled;
+         changed = 1;
+       }
+      else
+       goto Suppress;
+    }
+  
+  /* Make demangled big enough for possible expansion by operator name.  */
+  grow_vect (&demangled,
+            &demangled_size,  2 * len0 + 1,
+            sizeof (char));
+  
+  if (ISDIGIT ((unsigned char) mangled[len0 - 1])) {
+    for (i = len0 - 2; i >= 0 && ISDIGIT ((unsigned char) mangled[i]); i -= 1)
+      ;
+    if (i > 1 && mangled[i] == '_' && mangled[i - 1] == '_')
+      {
+       len0 = i - 1;
+       changed = 1;
+      }
+    else if (mangled[i] == '$')
+      {
+       len0 = i;
+       changed = 1;
+      }
+  }
+  
+  for (i = 0, j = 0; i < len0 && ! ISALPHA ((unsigned char)mangled[i]);
+       i += 1, j += 1)
+    demangled[j] = mangled[i];
+  
+  while (i < len0)
+    {
+      if (i < len0 - 2 && mangled[i] == '_' && mangled[i + 1] == '_')
+       {
+         demangled[j] = '.';
+         changed = 1;
+         i += 2; j += 1;
+       }
+      else
+       {
+         demangled[j] = mangled[i];
+         i += 1;  j += 1;
+       }
+    }
+  demangled[j] = '\000';
+  
+  for (i = 0; demangled[i] != '\0'; i += 1)
+    if (ISUPPER ((unsigned char)demangled[i]) || demangled[i] == ' ')
+      goto Suppress;
+
+  if (! changed)
+    return NULL;
+  else
+    return demangled;
+  
+ Suppress:
+  grow_vect (&demangled,
+            &demangled_size,  strlen (mangled) + 3,
+            sizeof (char));
+
+  if (mangled[0] == '<')
+     strcpy (demangled, mangled);
+  else
+    sprintf (demangled, "<%s>", mangled);
+
+  return demangled;
+}
+
+/* This function performs most of what cplus_demangle use to do, but
+   to be able to demangle a name with a B, K or n code, we need to
+   have a longer term memory of what types have been seen. The original
+   now initializes and cleans up the squangle code info, while internal
+   calls go directly to this routine to avoid resetting that info. */
+
+static char *
+internal_cplus_demangle (struct work_stuff *work, const char *mangled)
+{
+
+  string decl;
+  int success = 0;
+  char *demangled = NULL;
+  int s1, s2, s3, s4;
+  s1 = work->constructor;
+  s2 = work->destructor;
+  s3 = work->static_type;
+  s4 = work->type_quals;
+  work->constructor = work->destructor = 0;
+  work->type_quals = TYPE_UNQUALIFIED;
+  work->dllimported = 0;
+
+  if ((mangled != NULL) && (*mangled != '\0'))
+    {
+      string_init (&decl);
+
+      /* First check to see if gnu style demangling is active and if the
+        string to be demangled contains a CPLUS_MARKER.  If so, attempt to
+        recognize one of the gnu special forms rather than looking for a
+        standard prefix.  In particular, don't worry about whether there
+        is a "__" string in the mangled string.  Consider "_$_5__foo" for
+        example.  */
+
+      if ((AUTO_DEMANGLING || GNU_DEMANGLING))
+       {
+         success = gnu_special (work, &mangled, &decl);
+       }
+      if (!success)
+       {
+         success = demangle_prefix (work, &mangled, &decl);
+       }
+      if (success && (*mangled != '\0'))
+       {
+         success = demangle_signature (work, &mangled, &decl);
+       }
+      if (work->constructor == 2)
+        {
+          string_prepend (&decl, "global constructors keyed to ");
+          work->constructor = 0;
+        }
+      else if (work->destructor == 2)
+        {
+          string_prepend (&decl, "global destructors keyed to ");
+          work->destructor = 0;
+        }
+      else if (work->dllimported == 1)
+        {
+          string_prepend (&decl, "import stub for ");
+          work->dllimported = 0;
+        }
+      demangled = mop_up (work, &decl, success);
+    }
+  work->constructor = s1;
+  work->destructor = s2;
+  work->static_type = s3;
+  work->type_quals = s4;
+  return demangled;
+}
+
+
+/* Clear out and squangling related storage */
+static void
+squangle_mop_up (struct work_stuff *work)
+{
+  /* clean up the B and K type mangling types. */
+  forget_B_and_K_types (work);
+  if (work -> btypevec != NULL)
+    {
+      free ((char *) work -> btypevec);
+    }
+  if (work -> ktypevec != NULL)
+    {
+      free ((char *) work -> ktypevec);
+    }
+}
+
+
+/* Copy the work state and storage.  */
+
+static void
+work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from)
+{
+  int i;
+
+  delete_work_stuff (to);
+
+  /* Shallow-copy scalars.  */
+  memcpy (to, from, sizeof (*to));
+
+  /* Deep-copy dynamic storage.  */
+  if (from->typevec_size)
+    to->typevec = XNEWVEC (char *, from->typevec_size);
+
+  for (i = 0; i < from->ntypes; i++)
+    {
+      int len = strlen (from->typevec[i]) + 1;
+
+      to->typevec[i] = XNEWVEC (char, len);
+      memcpy (to->typevec[i], from->typevec[i], len);
+    }
+
+  if (from->ksize)
+    to->ktypevec = XNEWVEC (char *, from->ksize);
+
+  for (i = 0; i < from->numk; i++)
+    {
+      int len = strlen (from->ktypevec[i]) + 1;
+
+      to->ktypevec[i] = XNEWVEC (char, len);
+      memcpy (to->ktypevec[i], from->ktypevec[i], len);
+    }
+
+  if (from->bsize)
+    to->btypevec = XNEWVEC (char *, from->bsize);
+
+  for (i = 0; i < from->numb; i++)
+    {
+      int len = strlen (from->btypevec[i]) + 1;
+
+      to->btypevec[i] = XNEWVEC (char , len);
+      memcpy (to->btypevec[i], from->btypevec[i], len);
+    }
+
+  if (from->ntmpl_args)
+    to->tmpl_argvec = XNEWVEC (char *, from->ntmpl_args);
+
+  for (i = 0; i < from->ntmpl_args; i++)
+    {
+      int len = strlen (from->tmpl_argvec[i]) + 1;
+
+      to->tmpl_argvec[i] = XNEWVEC (char, len);
+      memcpy (to->tmpl_argvec[i], from->tmpl_argvec[i], len);
+    }
+
+  if (from->previous_argument)
+    {
+      to->previous_argument = XNEW (string);
+      string_init (to->previous_argument);
+      string_appends (to->previous_argument, from->previous_argument);
+    }
+}
+
+
+/* Delete dynamic stuff in work_stuff that is not to be re-used.  */
+
+static void
+delete_non_B_K_work_stuff (struct work_stuff *work)
+{
+  /* Discard the remembered types, if any.  */
+
+  forget_types (work);
+  if (work -> typevec != NULL)
+    {
+      free ((char *) work -> typevec);
+      work -> typevec = NULL;
+      work -> typevec_size = 0;
+    }
+  if (work->tmpl_argvec)
+    {
+      int i;
+
+      for (i = 0; i < work->ntmpl_args; i++)
+       if (work->tmpl_argvec[i])
+         free ((char*) work->tmpl_argvec[i]);
+
+      free ((char*) work->tmpl_argvec);
+      work->tmpl_argvec = NULL;
+    }
+  if (work->previous_argument)
+    {
+      string_delete (work->previous_argument);
+      free ((char*) work->previous_argument);
+      work->previous_argument = NULL;
+    }
+}
+
+
+/* Delete all dynamic storage in work_stuff.  */
+static void
+delete_work_stuff (struct work_stuff *work)
+{
+  delete_non_B_K_work_stuff (work);
+  squangle_mop_up (work);
+}
+
+
+/* Clear out any mangled storage */
+
+static char *
+mop_up (struct work_stuff *work, string *declp, int success)
+{
+  char *demangled = NULL;
+
+  delete_non_B_K_work_stuff (work);
+
+  /* If demangling was successful, ensure that the demangled string is null
+     terminated and return it.  Otherwise, free the demangling decl.  */
+
+  if (!success)
+    {
+      string_delete (declp);
+    }
+  else
+    {
+      string_appendn (declp, "", 1);
+      demangled = declp->b;
+    }
+  return (demangled);
+}
+
+/*
+
+LOCAL FUNCTION
+
+       demangle_signature -- demangle the signature part of a mangled name
+
+SYNOPSIS
+
+       static int
+       demangle_signature (struct work_stuff *work, const char **mangled,
+                           string *declp);
+
+DESCRIPTION
+
+       Consume and demangle the signature portion of the mangled name.
+
+       DECLP is the string where demangled output is being built.  At
+       entry it contains the demangled root name from the mangled name
+       prefix.  I.E. either a demangled operator name or the root function
+       name.  In some special cases, it may contain nothing.
+
+       *MANGLED points to the current unconsumed location in the mangled
+       name.  As tokens are consumed and demangling is performed, the
+       pointer is updated to continuously point at the next token to
+       be consumed.
+
+       Demangling GNU style mangled names is nasty because there is no
+       explicit token that marks the start of the outermost function
+       argument list.  */
+
+static int
+demangle_signature (struct work_stuff *work,
+                    const char **mangled, string *declp)
+{
+  int success = 1;
+  int func_done = 0;
+  int expect_func = 0;
+  int expect_return_type = 0;
+  const char *oldmangled = NULL;
+  string trawname;
+  string tname;
+
+  while (success && (**mangled != '\0'))
+    {
+      switch (**mangled)
+       {
+       case 'Q':
+         oldmangled = *mangled;
+         success = demangle_qualified (work, mangled, declp, 1, 0);
+         if (success)
+           remember_type (work, oldmangled, *mangled - oldmangled);
+         if (AUTO_DEMANGLING || GNU_DEMANGLING)
+           expect_func = 1;
+         oldmangled = NULL;
+         break;
+
+        case 'K':
+         oldmangled = *mangled;
+         success = demangle_qualified (work, mangled, declp, 1, 0);
+         if (AUTO_DEMANGLING || GNU_DEMANGLING)
+           {
+             expect_func = 1;
+           }
+         oldmangled = NULL;
+         break;
+
+       case 'S':
+         /* Static member function */
+         if (oldmangled == NULL)
+           {
+             oldmangled = *mangled;
+           }
+         (*mangled)++;
+         work -> static_type = 1;
+         break;
+
+       case 'C':
+       case 'V':
+       case 'u':
+         work->type_quals |= code_for_qualifier (**mangled);
+
+         /* a qualified member function */
+         if (oldmangled == NULL)
+           oldmangled = *mangled;
+         (*mangled)++;
+         break;
+
+       case 'L':
+         /* Local class name follows after "Lnnn_" */
+         if (HP_DEMANGLING)
+           {
+             while (**mangled && (**mangled != '_'))
+               (*mangled)++;
+             if (!**mangled)
+               success = 0;
+             else
+               (*mangled)++;
+           }
+         else
+           success = 0;
+         break;
+
+       case '0': case '1': case '2': case '3': case '4':
+       case '5': case '6': case '7': case '8': case '9':
+         if (oldmangled == NULL)
+           {
+             oldmangled = *mangled;
+           }
+          work->temp_start = -1; /* uppermost call to demangle_class */
+         success = demangle_class (work, mangled, declp);
+         if (success)
+           {
+             remember_type (work, oldmangled, *mangled - oldmangled);
+           }
+         if (AUTO_DEMANGLING || GNU_DEMANGLING || EDG_DEMANGLING)
+           {
+              /* EDG and others will have the "F", so we let the loop cycle
+                 if we are looking at one. */
+              if (**mangled != 'F')
+                 expect_func = 1;
+           }
+         oldmangled = NULL;
+         break;
+
+       case 'B':
+         {
+           string s;
+           success = do_type (work, mangled, &s);
+           if (success)
+             {
+               string_append (&s, SCOPE_STRING (work));
+               string_prepends (declp, &s);
+               string_delete (&s);
+             }
+           oldmangled = NULL;
+           expect_func = 1;
+         }
+         break;
+
+       case 'F':
+         /* Function */
+         /* ARM/HP style demangling includes a specific 'F' character after
+            the class name.  For GNU style, it is just implied.  So we can
+            safely just consume any 'F' at this point and be compatible
+            with either style.  */
+
+         oldmangled = NULL;
+         func_done = 1;
+         (*mangled)++;
+
+         /* For lucid/ARM/HP style we have to forget any types we might
+            have remembered up to this point, since they were not argument
+            types.  GNU style considers all types seen as available for
+            back references.  See comment in demangle_args() */
+
+         if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
+           {
+             forget_types (work);
+           }
+         success = demangle_args (work, mangled, declp);
+         /* After picking off the function args, we expect to either
+            find the function return type (preceded by an '_') or the
+            end of the string. */
+         if (success && (AUTO_DEMANGLING || EDG_DEMANGLING) && **mangled == '_')
+           {
+             ++(*mangled);
+              /* At this level, we do not care about the return type. */
+              success = do_type (work, mangled, &tname);
+              string_delete (&tname);
+            }
+
+         break;
+
+       case 't':
+         /* G++ Template */
+         string_init(&trawname);
+         string_init(&tname);
+         if (oldmangled == NULL)
+           {
+             oldmangled = *mangled;
+           }
+         success = demangle_template (work, mangled, &tname,
+                                      &trawname, 1, 1);
+         if (success)
+           {
+             remember_type (work, oldmangled, *mangled - oldmangled);
+           }
+         string_append (&tname, SCOPE_STRING (work));
+
+         string_prepends(declp, &tname);
+         if (work -> destructor & 1)
+           {
+             string_prepend (&trawname, "~");
+             string_appends (declp, &trawname);
+             work->destructor -= 1;
+           }
+         if ((work->constructor & 1) || (work->destructor & 1))
+           {
+             string_appends (declp, &trawname);
+             work->constructor -= 1;
+           }
+         string_delete(&trawname);
+         string_delete(&tname);
+         oldmangled = NULL;
+         expect_func = 1;
+         break;
+
+       case '_':
+         if ((AUTO_DEMANGLING || GNU_DEMANGLING) && expect_return_type)
+           {
+             /* Read the return type. */
+             string return_type;
+
+             (*mangled)++;
+             success = do_type (work, mangled, &return_type);
+             APPEND_BLANK (&return_type);
+
+             string_prepends (declp, &return_type);
+             string_delete (&return_type);
+             break;
+           }
+         else
+           /* At the outermost level, we cannot have a return type specified,
+              so if we run into another '_' at this point we are dealing with
+              a mangled name that is either bogus, or has been mangled by
+              some algorithm we don't know how to deal with.  So just
+              reject the entire demangling.  */
+            /* However, "_nnn" is an expected suffix for alternate entry point
+               numbered nnn for a function, with HP aCC, so skip over that
+               without reporting failure. pai/1997-09-04 */
+            if (HP_DEMANGLING)
+              {
+                (*mangled)++;
+                while (**mangled && ISDIGIT ((unsigned char)**mangled))
+                  (*mangled)++;
+              }
+            else
+             success = 0;
+         break;
+
+       case 'H':
+         if (AUTO_DEMANGLING || GNU_DEMANGLING)
+           {
+             /* A G++ template function.  Read the template arguments. */
+             success = demangle_template (work, mangled, declp, 0, 0,
+                                          0);
+             if (!(work->constructor & 1))
+               expect_return_type = 1;
+             (*mangled)++;
+             break;
+           }
+         else
+           /* fall through */
+           {;}
+
+       default:
+         if (AUTO_DEMANGLING || GNU_DEMANGLING)
+           {
+             /* Assume we have stumbled onto the first outermost function
+                argument token, and start processing args.  */
+             func_done = 1;
+             success = demangle_args (work, mangled, declp);
+           }
+         else
+           {
+             /* Non-GNU demanglers use a specific token to mark the start
+                of the outermost function argument tokens.  Typically 'F',
+                for ARM/HP-demangling, for example.  So if we find something
+                we are not prepared for, it must be an error.  */
+             success = 0;
+           }
+         break;
+       }
+      /*
+       if (AUTO_DEMANGLING || GNU_DEMANGLING)
+       */
+      {
+       if (success && expect_func)
+         {
+           func_done = 1;
+              if (LUCID_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING)
+                {
+                  forget_types (work);
+                }
+           success = demangle_args (work, mangled, declp);
+           /* Since template include the mangling of their return types,
+              we must set expect_func to 0 so that we don't try do
+              demangle more arguments the next time we get here.  */
+           expect_func = 0;
+         }
+      }
+    }
+  if (success && !func_done)
+    {
+      if (AUTO_DEMANGLING || GNU_DEMANGLING)
+       {
+         /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and
+            bar__3fooi is 'foo::bar(int)'.  We get here when we find the
+            first case, and need to ensure that the '(void)' gets added to
+            the current declp.  Note that with ARM/HP, the first case
+            represents the name of a static data member 'foo::bar',
+            which is in the current declp, so we leave it alone.  */
+         success = demangle_args (work, mangled, declp);
+       }
+    }
+  if (success && PRINT_ARG_TYPES)
+    {
+      if (work->static_type)
+       string_append (declp, " static");
+      if (work->type_quals != TYPE_UNQUALIFIED)
+       {
+         APPEND_BLANK (declp);
+         string_append (declp, qualifier_string (work->type_quals));
+       }
+    }
+
+  return (success);
+}
+
+#if 0
+
+static int
+demangle_method_args (struct work_stuff *work, const char **mangled,
+                      string *declp)
+{
+  int success = 0;
+
+  if (work -> static_type)
+    {
+      string_append (declp, *mangled + 1);
+      *mangled += strlen (*mangled);
+      success = 1;
+    }
+  else
+    {
+      success = demangle_args (work, mangled, declp);
+    }
+  return (success);
+}
+
+#endif
+
+static int
+demangle_template_template_parm (struct work_stuff *work,
+                                 const char **mangled, string *tname)
+{
+  int i;
+  int r;
+  int need_comma = 0;
+  int success = 1;
+  string temp;
+
+  string_append (tname, "template <");
+  /* get size of template parameter list */
+  if (get_count (mangled, &r))
+    {
+      for (i = 0; i < r; i++)
+       {
+         if (need_comma)
+           {
+             string_append (tname, ", ");
+           }
+
+           /* Z for type parameters */
+           if (**mangled == 'Z')
+             {
+               (*mangled)++;
+               string_append (tname, "class");
+             }
+             /* z for template parameters */
+           else if (**mangled == 'z')
+             {
+               (*mangled)++;
+               success =
+                 demangle_template_template_parm (work, mangled, tname);
+               if (!success)
+                 {
+                   break;
+                 }
+             }
+           else
+             {
+               /* temp is initialized in do_type */
+               success = do_type (work, mangled, &temp);
+               if (success)
+                 {
+                   string_appends (tname, &temp);
+                 }
+               string_delete(&temp);
+               if (!success)
+                 {
+                   break;
+                 }
+             }
+         need_comma = 1;
+       }
+
+    }
+  if (tname->p[-1] == '>')
+    string_append (tname, " ");
+  string_append (tname, "> class");
+  return (success);
+}
+
+static int
+demangle_expression (struct work_stuff *work, const char **mangled,
+                     string *s, type_kind_t tk)
+{
+  int need_operator = 0;
+  int success;
+
+  success = 1;
+  string_appendn (s, "(", 1);
+  (*mangled)++;
+  while (success && **mangled != 'W' && **mangled != '\0')
+    {
+      if (need_operator)
+       {
+         size_t i;
+         size_t len;
+
+         success = 0;
+
+         len = strlen (*mangled);
+
+         for (i = 0; i < ARRAY_SIZE (optable); ++i)
+           {
+             size_t l = strlen (optable[i].in);
+
+             if (l <= len
+                 && memcmp (optable[i].in, *mangled, l) == 0)
+               {
+                 string_appendn (s, " ", 1);
+                 string_append (s, optable[i].out);
+                 string_appendn (s, " ", 1);
+                 success = 1;
+                 (*mangled) += l;
+                 break;
+               }
+           }
+
+         if (!success)
+           break;
+       }
+      else
+       need_operator = 1;
+
+      success = demangle_template_value_parm (work, mangled, s, tk);
+    }
+
+  if (**mangled != 'W')
+    success = 0;
+  else
+    {
+      string_appendn (s, ")", 1);
+      (*mangled)++;
+    }
+
+  return success;
+}
+
+static int
+demangle_integral_value (struct work_stuff *work,
+                         const char **mangled, string *s)
+{
+  int success;
+
+  if (**mangled == 'E')
+    success = demangle_expression (work, mangled, s, tk_integral);
+  else if (**mangled == 'Q' || **mangled == 'K')
+    success = demangle_qualified (work, mangled, s, 0, 1);
+  else
+    {
+      int value;
+
+      /* By default, we let the number decide whether we shall consume an
+        underscore.  */
+      int multidigit_without_leading_underscore = 0;
+      int leave_following_underscore = 0;
+
+      success = 0;
+
+      if (**mangled == '_')
+        {
+         if (mangled[0][1] == 'm')
+           {
+             /* Since consume_count_with_underscores does not handle the
+                `m'-prefix we must do it here, using consume_count and
+                adjusting underscores: we have to consume the underscore
+                matching the prepended one.  */
+             multidigit_without_leading_underscore = 1;
+             string_appendn (s, "-", 1);
+             (*mangled) += 2;
+           }
+         else
+           {
+             /* Do not consume a following underscore;
+                consume_count_with_underscores will consume what
+                should be consumed.  */
+             leave_following_underscore = 1;
+           }
+       }
+      else
+       {
+         /* Negative numbers are indicated with a leading `m'.  */
+         if (**mangled == 'm')
+         {
+           string_appendn (s, "-", 1);
+           (*mangled)++;
+         }
+         /* Since consume_count_with_underscores does not handle
+            multi-digit numbers that do not start with an underscore,
+            and this number can be an integer template parameter,
+            we have to call consume_count. */
+         multidigit_without_leading_underscore = 1;
+         /* These multi-digit numbers never end on an underscore,
+            so if there is one then don't eat it. */
+         leave_following_underscore = 1;
+       }
+
+      /* We must call consume_count if we expect to remove a trailing
+        underscore, since consume_count_with_underscores expects
+        the leading underscore (that we consumed) if it is to handle
+        multi-digit numbers.  */
+      if (multidigit_without_leading_underscore)
+       value = consume_count (mangled);
+      else
+       value = consume_count_with_underscores (mangled);
+
+      if (value != -1)
+       {
+         char buf[INTBUF_SIZE];
+         sprintf (buf, "%d", value);
+         string_append (s, buf);
+
+         /* Numbers not otherwise delimited, might have an underscore
+            appended as a delimeter, which we should skip.
+
+            ??? This used to always remove a following underscore, which
+            is wrong.  If other (arbitrary) cases are followed by an
+            underscore, we need to do something more radical.  */
+
+         if ((value > 9 || multidigit_without_leading_underscore)
+             && ! leave_following_underscore
+             && **mangled == '_')
+           (*mangled)++;
+
+         /* All is well.  */
+         success = 1;
+       }
+      }
+
+  return success;
+}
+
+/* Demangle the real value in MANGLED.  */
+
+static int
+demangle_real_value (struct work_stuff *work,
+                     const char **mangled, string *s)
+{
+  if (**mangled == 'E')
+    return demangle_expression (work, mangled, s, tk_real);
+
+  if (**mangled == 'm')
+    {
+      string_appendn (s, "-", 1);
+      (*mangled)++;
+    }
+  while (ISDIGIT ((unsigned char)**mangled))
+    {
+      string_appendn (s, *mangled, 1);
+      (*mangled)++;
+    }
+  if (**mangled == '.') /* fraction */
+    {
+      string_appendn (s, ".", 1);
+      (*mangled)++;
+      while (ISDIGIT ((unsigned char)**mangled))
+       {
+         string_appendn (s, *mangled, 1);
+         (*mangled)++;
+       }
+    }
+  if (**mangled == 'e') /* exponent */
+    {
+      string_appendn (s, "e", 1);
+      (*mangled)++;
+      while (ISDIGIT ((unsigned char)**mangled))
+       {
+         string_appendn (s, *mangled, 1);
+         (*mangled)++;
+       }
+    }
+
+  return 1;
+}
+
+static int
+demangle_template_value_parm (struct work_stuff *work, const char **mangled,
+                              string *s, type_kind_t tk)
+{
+  int success = 1;
+
+  if (**mangled == 'Y')
+    {
+      /* The next argument is a template parameter. */
+      int idx;
+
+      (*mangled)++;
+      idx = consume_count_with_underscores (mangled);
+      if (idx == -1
+         || (work->tmpl_argvec && idx >= work->ntmpl_args)
+         || consume_count_with_underscores (mangled) == -1)
+       return -1;
+      if (work->tmpl_argvec)
+       string_append (s, work->tmpl_argvec[idx]);
+      else
+       string_append_template_idx (s, idx);
+    }
+  else if (tk == tk_integral)
+    success = demangle_integral_value (work, mangled, s);
+  else if (tk == tk_char)
+    {
+      char tmp[2];
+      int val;
+      if (**mangled == 'm')
+       {
+         string_appendn (s, "-", 1);
+         (*mangled)++;
+       }
+      string_appendn (s, "'", 1);
+      val = consume_count(mangled);
+      if (val <= 0)
+       success = 0;
+      else
+       {
+         tmp[0] = (char)val;
+         tmp[1] = '\0';
+         string_appendn (s, &tmp[0], 1);
+         string_appendn (s, "'", 1);
+       }
+    }
+  else if (tk == tk_bool)
+    {
+      int val = consume_count (mangled);
+      if (val == 0)
+       string_appendn (s, "false", 5);
+      else if (val == 1)
+       string_appendn (s, "true", 4);
+      else
+       success = 0;
+    }
+  else if (tk == tk_real)
+    success = demangle_real_value (work, mangled, s);
+  else if (tk == tk_pointer || tk == tk_reference)
+    {
+      if (**mangled == 'Q')
+       success = demangle_qualified (work, mangled, s,
+                                     /*isfuncname=*/0, 
+                                     /*append=*/1);
+      else
+       {
+         int symbol_len  = consume_count (mangled);
+         if (symbol_len == -1)
+           return -1;
+         if (symbol_len == 0)
+           string_appendn (s, "0", 1);
+         else
+           {
+             char *p = XNEWVEC (char, symbol_len + 1), *q;
+             strncpy (p, *mangled, symbol_len);
+             p [symbol_len] = '\0';
+             /* We use cplus_demangle here, rather than
+                internal_cplus_demangle, because the name of the entity
+                mangled here does not make use of any of the squangling
+                or type-code information we have built up thus far; it is
+                mangled independently.  */
+             q = cplus_demangle (p, work->options);
+             if (tk == tk_pointer)
+               string_appendn (s, "&", 1);
+             /* FIXME: Pointer-to-member constants should get a
+                qualifying class name here.  */
+             if (q)
+               {
+                 string_append (s, q);
+                 free (q);
+               }
+             else
+               string_append (s, p);
+             free (p);
+           }
+         *mangled += symbol_len;
+       }
+    }
+
+  return success;
+}
+
+/* Demangle the template name in MANGLED.  The full name of the
+   template (e.g., S<int>) is placed in TNAME.  The name without the
+   template parameters (e.g. S) is placed in TRAWNAME if TRAWNAME is
+   non-NULL.  If IS_TYPE is nonzero, this template is a type template,
+   not a function template.  If both IS_TYPE and REMEMBER are nonzero,
+   the template is remembered in the list of back-referenceable
+   types.  */
+
+static int
+demangle_template (struct work_stuff *work, const char **mangled,
+                   string *tname, string *trawname,
+                   int is_type, int remember)
+{
+  int i;
+  int r;
+  int need_comma = 0;
+  int success = 0;
+  int is_java_array = 0;
+  string temp;
+
+  (*mangled)++;
+  if (is_type)
+    {
+      /* get template name */
+      if (**mangled == 'z')
+       {
+         int idx;
+         (*mangled)++;
+         (*mangled)++;
+
+         idx = consume_count_with_underscores (mangled);
+         if (idx == -1
+             || (work->tmpl_argvec && idx >= work->ntmpl_args)
+             || consume_count_with_underscores (mangled) == -1)
+           return (0);
+
+         if (work->tmpl_argvec)
+           {
+             string_append (tname, work->tmpl_argvec[idx]);
+             if (trawname)
+               string_append (trawname, work->tmpl_argvec[idx]);
+           }
+         else
+           {
+             string_append_template_idx (tname, idx);
+             if (trawname)
+               string_append_template_idx (trawname, idx);
+           }
+       }
+      else
+       {
+         if ((r = consume_count (mangled)) <= 0
+             || (int) strlen (*mangled) < r)
+           {
+             return (0);
+           }
+         is_java_array = (work -> options & DMGL_JAVA)
+           && strncmp (*mangled, "JArray1Z", 8) == 0;
+         if (! is_java_array)
+           {
+             string_appendn (tname, *mangled, r);
+           }
+         if (trawname)
+           string_appendn (trawname, *mangled, r);
+         *mangled += r;
+       }
+    }
+  if (!is_java_array)
+    string_append (tname, "<");
+  /* get size of template parameter list */
+  if (!get_count (mangled, &r))
+    {
+      return (0);
+    }
+  if (!is_type)
+    {
+      /* Create an array for saving the template argument values. */
+      work->tmpl_argvec = XNEWVEC (char *, r);
+      work->ntmpl_args = r;
+      for (i = 0; i < r; i++)
+       work->tmpl_argvec[i] = 0;
+    }
+  for (i = 0; i < r; i++)
+    {
+      if (need_comma)
+       {
+         string_append (tname, ", ");
+       }
+      /* Z for type parameters */
+      if (**mangled == 'Z')
+       {
+         (*mangled)++;
+         /* temp is initialized in do_type */
+         success = do_type (work, mangled, &temp);
+         if (success)
+           {
+             string_appends (tname, &temp);
+
+             if (!is_type)
+               {
+                 /* Save the template argument. */
+                 int len = temp.p - temp.b;
+                 work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
+                 memcpy (work->tmpl_argvec[i], temp.b, len);
+                 work->tmpl_argvec[i][len] = '\0';
+               }
+           }
+         string_delete(&temp);
+         if (!success)
+           {
+             break;
+           }
+       }
+      /* z for template parameters */
+      else if (**mangled == 'z')
+       {
+         int r2;
+         (*mangled)++;
+         success = demangle_template_template_parm (work, mangled, tname);
+
+         if (success
+             && (r2 = consume_count (mangled)) > 0
+             && (int) strlen (*mangled) >= r2)
+           {
+             string_append (tname, " ");
+             string_appendn (tname, *mangled, r2);
+             if (!is_type)
+               {
+                 /* Save the template argument. */
+                 int len = r2;
+                 work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
+                 memcpy (work->tmpl_argvec[i], *mangled, len);
+                 work->tmpl_argvec[i][len] = '\0';
+               }
+             *mangled += r2;
+           }
+         if (!success)
+           {
+             break;
+           }
+       }
+      else
+       {
+         string  param;
+         string* s;
+
+         /* otherwise, value parameter */
+
+         /* temp is initialized in do_type */
+         success = do_type (work, mangled, &temp);
+         string_delete(&temp);
+         if (!success)
+           break;
+
+         if (!is_type)
+           {
+             s = &param;
+             string_init (s);
+           }
+         else
+           s = tname;
+
+         success = demangle_template_value_parm (work, mangled, s,
+                                                 (type_kind_t) success);
+
+         if (!success)
+           {
+             if (!is_type)
+               string_delete (s);
+             success = 0;
+             break;
+           }
+
+         if (!is_type)
+           {
+             int len = s->p - s->b;
+             work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
+             memcpy (work->tmpl_argvec[i], s->b, len);
+             work->tmpl_argvec[i][len] = '\0';
+
+             string_appends (tname, s);
+             string_delete (s);
+           }
+       }
+      need_comma = 1;
+    }
+  if (is_java_array)
+    {
+      string_append (tname, "[]");
+    }
+  else
+    {
+      if (tname->p[-1] == '>')
+       string_append (tname, " ");
+      string_append (tname, ">");
+    }
+
+  if (is_type && remember)
+    {
+      const int bindex = register_Btype (work);
+      remember_Btype (work, tname->b, LEN_STRING (tname), bindex);
+    }
+
+  /*
+    if (work -> static_type)
+    {
+    string_append (declp, *mangled + 1);
+    *mangled += strlen (*mangled);
+    success = 1;
+    }
+    else
+    {
+    success = demangle_args (work, mangled, declp);
+    }
+    }
+    */
+  return (success);
+}
+
+static int
+arm_pt (struct work_stuff *work, const char *mangled,
+        int n, const char **anchor, const char **args)
+{
+  /* Check if ARM template with "__pt__" in it ("parameterized type") */
+  /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */
+  if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = strstr (mangled, "__pt__")))
+    {
+      int len;
+      *args = *anchor + 6;
+      len = consume_count (args);
+      if (len == -1)
+       return 0;
+      if (*args + len == mangled + n && **args == '_')
+       {
+         ++*args;
+         return 1;
+       }
+    }
+  if (AUTO_DEMANGLING || EDG_DEMANGLING)
+    {
+      if ((*anchor = strstr (mangled, "__tm__"))
+          || (*anchor = strstr (mangled, "__ps__"))
+          || (*anchor = strstr (mangled, "__pt__")))
+        {
+          int len;
+          *args = *anchor + 6;
+          len = consume_count (args);
+         if (len == -1)
+           return 0;
+          if (*args + len == mangled + n && **args == '_')
+            {
+              ++*args;
+              return 1;
+            }
+        }
+      else if ((*anchor = strstr (mangled, "__S")))
+        {
+         int len;
+         *args = *anchor + 3;
+         len = consume_count (args);
+         if (len == -1)
+           return 0;
+         if (*args + len == mangled + n && **args == '_')
+            {
+              ++*args;
+             return 1;
+            }
+        }
+    }
+
+  return 0;
+}
+
+static void
+demangle_arm_hp_template (struct work_stuff *work, const char **mangled,
+                          int n, string *declp)
+{
+  const char *p;
+  const char *args;
+  const char *e = *mangled + n;
+  string arg;
+
+  /* Check for HP aCC template spec: classXt1t2 where t1, t2 are
+     template args */
+  if (HP_DEMANGLING && ((*mangled)[n] == 'X'))
+    {
+      char *start_spec_args = NULL;
+      int hold_options;
+
+      /* First check for and omit template specialization pseudo-arguments,
+         such as in "Spec<#1,#1.*>" */
+      start_spec_args = strchr (*mangled, '<');
+      if (start_spec_args && (start_spec_args - *mangled < n))
+        string_appendn (declp, *mangled, start_spec_args - *mangled);
+      else
+        string_appendn (declp, *mangled, n);
+      (*mangled) += n + 1;
+      string_init (&arg);
+      if (work->temp_start == -1) /* non-recursive call */
+        work->temp_start = declp->p - declp->b;
+
+      /* We want to unconditionally demangle parameter types in
+        template parameters.  */
+      hold_options = work->options;
+      work->options |= DMGL_PARAMS;
+
+      string_append (declp, "<");
+      while (1)
+        {
+          string_delete (&arg);
+          switch (**mangled)
+            {
+              case 'T':
+                /* 'T' signals a type parameter */
+                (*mangled)++;
+                if (!do_type (work, mangled, &arg))
+                  goto hpacc_template_args_done;
+                break;
+
+              case 'U':
+              case 'S':
+                /* 'U' or 'S' signals an integral value */
+                if (!do_hpacc_template_const_value (work, mangled, &arg))
+                  goto hpacc_template_args_done;
+                break;
+
+              case 'A':
+                /* 'A' signals a named constant expression (literal) */
+                if (!do_hpacc_template_literal (work, mangled, &arg))
+                  goto hpacc_template_args_done;
+                break;
+
+              default:
+                /* Today, 1997-09-03, we have only the above types
+                   of template parameters */
+                /* FIXME: maybe this should fail and return null */
+                goto hpacc_template_args_done;
+            }
+          string_appends (declp, &arg);
+         /* Check if we're at the end of template args.
+             0 if at end of static member of template class,
+             _ if done with template args for a function */
+          if ((**mangled == '\000') || (**mangled == '_'))
+            break;
+          else
+            string_append (declp, ",");
+        }
+    hpacc_template_args_done:
+      string_append (declp, ">");
+      string_delete (&arg);
+      if (**mangled == '_')
+        (*mangled)++;
+      work->options = hold_options;
+      return;
+    }
+  /* ARM template? (Also handles HP cfront extensions) */
+  else if (arm_pt (work, *mangled, n, &p, &args))
+    {
+      int hold_options;
+      string type_str;
+
+      string_init (&arg);
+      string_appendn (declp, *mangled, p - *mangled);
+      if (work->temp_start == -1)  /* non-recursive call */
+       work->temp_start = declp->p - declp->b;
+
+      /* We want to unconditionally demangle parameter types in
+        template parameters.  */
+      hold_options = work->options;
+      work->options |= DMGL_PARAMS;
+
+      string_append (declp, "<");
+      /* should do error checking here */
+      while (args < e) {
+       string_delete (&arg);
+
+       /* Check for type or literal here */
+       switch (*args)
+         {
+           /* HP cfront extensions to ARM for template args */
+           /* spec: Xt1Lv1 where t1 is a type, v1 is a literal value */
+           /* FIXME: We handle only numeric literals for HP cfront */
+          case 'X':
+            /* A typed constant value follows */
+            args++;
+            if (!do_type (work, &args, &type_str))
+             goto cfront_template_args_done;
+            string_append (&arg, "(");
+            string_appends (&arg, &type_str);
+            string_delete (&type_str);
+            string_append (&arg, ")");
+            if (*args != 'L')
+              goto cfront_template_args_done;
+            args++;
+            /* Now snarf a literal value following 'L' */
+            if (!snarf_numeric_literal (&args, &arg))
+             goto cfront_template_args_done;
+            break;
+
+          case 'L':
+            /* Snarf a literal following 'L' */
+            args++;
+            if (!snarf_numeric_literal (&args, &arg))
+             goto cfront_template_args_done;
+            break;
+          default:
+            /* Not handling other HP cfront stuff */
+            {
+              const char* old_args = args;
+              if (!do_type (work, &args, &arg))
+                goto cfront_template_args_done;
+
+              /* Fail if we didn't make any progress: prevent infinite loop. */
+              if (args == old_args)
+               {
+                 work->options = hold_options;
+                 return;
+               }
+            }
+         }
+       string_appends (declp, &arg);
+       string_append (declp, ",");
+      }
+    cfront_template_args_done:
+      string_delete (&arg);
+      if (args >= e)
+       --declp->p; /* remove extra comma */
+      string_append (declp, ">");
+      work->options = hold_options;
+    }
+  else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
+          && (*mangled)[9] == 'N'
+          && (*mangled)[8] == (*mangled)[10]
+          && strchr (cplus_markers, (*mangled)[8]))
+    {
+      /* A member of the anonymous namespace.  */
+      string_append (declp, "{anonymous}");
+    }
+  else
+    {
+      if (work->temp_start == -1) /* non-recursive call only */
+       work->temp_start = 0;     /* disable in recursive calls */
+      string_appendn (declp, *mangled, n);
+    }
+  *mangled += n;
+}
+
+/* Extract a class name, possibly a template with arguments, from the
+   mangled string; qualifiers, local class indicators, etc. have
+   already been dealt with */
+
+static int
+demangle_class_name (struct work_stuff *work, const char **mangled,
+                     string *declp)
+{
+  int n;
+  int success = 0;
+
+  n = consume_count (mangled);
+  if (n == -1)
+    return 0;
+  if ((int) strlen (*mangled) >= n)
+    {
+      demangle_arm_hp_template (work, mangled, n, declp);
+      success = 1;
+    }
+
+  return (success);
+}
+
+/*
+
+LOCAL FUNCTION
+
+       demangle_class -- demangle a mangled class sequence
+
+SYNOPSIS
+
+       static int
+       demangle_class (struct work_stuff *work, const char **mangled,
+                       strint *declp)
+
+DESCRIPTION
+
+       DECLP points to the buffer into which demangling is being done.
+
+       *MANGLED points to the current token to be demangled.  On input,
+       it points to a mangled class (I.E. "3foo", "13verylongclass", etc.)
+       On exit, it points to the next token after the mangled class on
+       success, or the first unconsumed token on failure.
+
+       If the CONSTRUCTOR or DESTRUCTOR flags are set in WORK, then
+       we are demangling a constructor or destructor.  In this case
+       we prepend "class::class" or "class::~class" to DECLP.
+
+       Otherwise, we prepend "class::" to the current DECLP.
+
+       Reset the constructor/destructor flags once they have been
+       "consumed".  This allows demangle_class to be called later during
+       the same demangling, to do normal class demangling.
+
+       Returns 1 if demangling is successful, 0 otherwise.
+
+*/
+
+static int
+demangle_class (struct work_stuff *work, const char **mangled, string *declp)
+{
+  int success = 0;
+  int btype;
+  string class_name;
+  char *save_class_name_end = 0;
+
+  string_init (&class_name);
+  btype = register_Btype (work);
+  if (demangle_class_name (work, mangled, &class_name))
+    {
+      save_class_name_end = class_name.p;
+      if ((work->constructor & 1) || (work->destructor & 1))
+       {
+          /* adjust so we don't include template args */
+          if (work->temp_start && (work->temp_start != -1))
+            {
+              class_name.p = class_name.b + work->temp_start;
+            }
+         string_prepends (declp, &class_name);
+         if (work -> destructor & 1)
+           {
+             string_prepend (declp, "~");
+              work -> destructor -= 1;
+           }
+         else
+           {
+             work -> constructor -= 1;
+           }
+       }
+      class_name.p = save_class_name_end;
+      remember_Ktype (work, class_name.b, LEN_STRING(&class_name));
+      remember_Btype (work, class_name.b, LEN_STRING(&class_name), btype);
+      string_prepend (declp, SCOPE_STRING (work));
+      string_prepends (declp, &class_name);
+      success = 1;
+    }
+  string_delete (&class_name);
+  return (success);
+}
+
+
+/* Called when there's a "__" in the mangled name, with `scan' pointing to
+   the rightmost guess.
+
+   Find the correct "__"-sequence where the function name ends and the
+   signature starts, which is ambiguous with GNU mangling.
+   Call demangle_signature here, so we can make sure we found the right
+   one; *mangled will be consumed so caller will not make further calls to
+   demangle_signature.  */
+
+static int
+iterate_demangle_function (struct work_stuff *work, const char **mangled,
+                           string *declp, const char *scan)
+{
+  const char *mangle_init = *mangled;
+  int success = 0;
+  string decl_init;
+  struct work_stuff work_init;
+
+  if (*(scan + 2) == '\0')
+    return 0;
+
+  /* Do not iterate for some demangling modes, or if there's only one
+     "__"-sequence.  This is the normal case.  */
+  if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING
+      || strstr (scan + 2, "__") == NULL)
+    {
+      demangle_function_name (work, mangled, declp, scan);
+      return 1;
+    }
+
+  /* Save state so we can restart if the guess at the correct "__" was
+     wrong.  */
+  string_init (&decl_init);
+  string_appends (&decl_init, declp);
+  memset (&work_init, 0, sizeof work_init);
+  work_stuff_copy_to_from (&work_init, work);
+
+  /* Iterate over occurrences of __, allowing names and types to have a
+     "__" sequence in them.  We must start with the first (not the last)
+     occurrence, since "__" most often occur between independent mangled
+     parts, hence starting at the last occurence inside a signature
+     might get us a "successful" demangling of the signature.  */
+
+  while (scan[2])
+    {
+      demangle_function_name (work, mangled, declp, scan);
+      success = demangle_signature (work, mangled, declp);
+      if (success)
+       break;
+
+      /* Reset demangle state for the next round.  */
+      *mangled = mangle_init;
+      string_clear (declp);
+      string_appends (declp, &decl_init);
+      work_stuff_copy_to_from (work, &work_init);
+
+      /* Leave this underscore-sequence.  */
+      scan += 2;
+
+      /* Scan for the next "__" sequence.  */
+      while (*scan && (scan[0] != '_' || scan[1] != '_'))
+       scan++;
+
+      /* Move to last "__" in this sequence.  */
+      while (*scan && *scan == '_')
+       scan++;
+      scan -= 2;
+    }
+
+  /* Delete saved state.  */
+  delete_work_stuff (&work_init);
+  string_delete (&decl_init);
+
+  return success;
+}
+
+/*
+
+LOCAL FUNCTION
+
+       demangle_prefix -- consume the mangled name prefix and find signature
+
+SYNOPSIS
+
+       static int
+       demangle_prefix (struct work_stuff *work, const char **mangled,
+                        string *declp);
+
+DESCRIPTION
+
+       Consume and demangle the prefix of the mangled name.
+       While processing the function name root, arrange to call
+       demangle_signature if the root is ambiguous.
+
+       DECLP points to the string buffer into which demangled output is
+       placed.  On entry, the buffer is empty.  On exit it contains
+       the root function name, the demangled operator name, or in some
+       special cases either nothing or the completely demangled result.
+
+       MANGLED points to the current pointer into the mangled name.  As each
+       token of the mangled name is consumed, it is updated.  Upon entry
+       the current mangled name pointer points to the first character of
+       the mangled name.  Upon exit, it should point to the first character
+       of the signature if demangling was successful, or to the first
+       unconsumed character if demangling of the prefix was unsuccessful.
+
+       Returns 1 on success, 0 otherwise.
+ */
+
+static int
+demangle_prefix (struct work_stuff *work, const char **mangled,
+                 string *declp)
+{
+  int success = 1;
+  const char *scan;
+  int i;
+
+  if (strlen(*mangled) > 6
+      && (strncmp(*mangled, "_imp__", 6) == 0
+          || strncmp(*mangled, "__imp_", 6) == 0))
+    {
+      /* it's a symbol imported from a PE dynamic library. Check for both
+         new style prefix _imp__ and legacy __imp_ used by older versions
+        of dlltool. */
+      (*mangled) += 6;
+      work->dllimported = 1;
+    }
+  else if (strlen(*mangled) >= 11 && strncmp(*mangled, "_GLOBAL_", 8) == 0)
+    {
+      char *marker = strchr (cplus_markers, (*mangled)[8]);
+      if (marker != NULL && *marker == (*mangled)[10])
+       {
+         if ((*mangled)[9] == 'D')
+           {
+             /* it's a GNU global destructor to be executed at program exit */
+             (*mangled) += 11;
+             work->destructor = 2;
+             if (gnu_special (work, mangled, declp))
+               return success;
+           }
+         else if ((*mangled)[9] == 'I')
+           {
+             /* it's a GNU global constructor to be executed at program init */
+             (*mangled) += 11;
+             work->constructor = 2;
+             if (gnu_special (work, mangled, declp))
+               return success;
+           }
+       }
+    }
+  else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__std__", 7) == 0)
+    {
+      /* it's a ARM global destructor to be executed at program exit */
+      (*mangled) += 7;
+      work->destructor = 2;
+    }
+  else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__sti__", 7) == 0)
+    {
+      /* it's a ARM global constructor to be executed at program initial */
+      (*mangled) += 7;
+      work->constructor = 2;
+    }
+
+  /*  This block of code is a reduction in strength time optimization
+      of:
+      scan = strstr (*mangled, "__"); */
+
+  {
+    scan = *mangled;
+
+    do {
+      scan = strchr (scan, '_');
+    } while (scan != NULL && *++scan != '_');
+
+    if (scan != NULL) --scan;
+  }
+
+  if (scan != NULL)
+    {
+      /* We found a sequence of two or more '_', ensure that we start at
+        the last pair in the sequence.  */
+      i = strspn (scan, "_");
+      if (i > 2)
+       {
+         scan += (i - 2);
+       }
+    }
+
+  if (scan == NULL)
+    {
+      success = 0;
+    }
+  else if (work -> static_type)
+    {
+      if (!ISDIGIT ((unsigned char)scan[0]) && (scan[0] != 't'))
+       {
+         success = 0;
+       }
+    }
+  else if ((scan == *mangled)
+          && (ISDIGIT ((unsigned char)scan[2]) || (scan[2] == 'Q')
+              || (scan[2] == 't') || (scan[2] == 'K') || (scan[2] == 'H')))
+    {
+      /* The ARM says nothing about the mangling of local variables.
+        But cfront mangles local variables by prepending __<nesting_level>
+        to them. As an extension to ARM demangling we handle this case.  */
+      if ((LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING)
+         && ISDIGIT ((unsigned char)scan[2]))
+       {
+         *mangled = scan + 2;
+         consume_count (mangled);
+         string_append (declp, *mangled);
+         *mangled += strlen (*mangled);
+         success = 1;
+       }
+      else
+       {
+         /* A GNU style constructor starts with __[0-9Qt].  But cfront uses
+            names like __Q2_3foo3bar for nested type names.  So don't accept
+            this style of constructor for cfront demangling.  A GNU
+            style member-template constructor starts with 'H'. */
+         if (!(LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING))
+           work -> constructor += 1;
+         *mangled = scan + 2;
+       }
+    }
+  else if (ARM_DEMANGLING && scan[2] == 'p' && scan[3] == 't')
+    {
+      /* Cfront-style parameterized type.  Handled later as a signature. */
+      success = 1;
+
+      /* ARM template? */
+      demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
+    }
+  else if (EDG_DEMANGLING && ((scan[2] == 't' && scan[3] == 'm')
+                              || (scan[2] == 'p' && scan[3] == 's')
+                              || (scan[2] == 'p' && scan[3] == 't')))
+    {
+      /* EDG-style parameterized type.  Handled later as a signature. */
+      success = 1;
+
+      /* EDG template? */
+      demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
+    }
+  else if ((scan == *mangled) && !ISDIGIT ((unsigned char)scan[2])
+          && (scan[2] != 't'))
+    {
+      /* Mangled name starts with "__".  Skip over any leading '_' characters,
+        then find the next "__" that separates the prefix from the signature.
+        */
+      if (!(ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
+         || (arm_special (mangled, declp) == 0))
+       {
+         while (*scan == '_')
+           {
+             scan++;
+           }
+         if ((scan = strstr (scan, "__")) == NULL || (*(scan + 2) == '\0'))
+           {
+             /* No separator (I.E. "__not_mangled"), or empty signature
+                (I.E. "__not_mangled_either__") */
+             success = 0;
+           }
+         else
+           return iterate_demangle_function (work, mangled, declp, scan);
+       }
+    }
+  else if (*(scan + 2) != '\0')
+    {
+      /* Mangled name does not start with "__" but does have one somewhere
+        in there with non empty stuff after it.  Looks like a global
+        function name.  Iterate over all "__":s until the right
+        one is found.  */
+      return iterate_demangle_function (work, mangled, declp, scan);
+    }
+  else
+    {
+      /* Doesn't look like a mangled name */
+      success = 0;
+    }
+
+  if (!success && (work->constructor == 2 || work->destructor == 2))
+    {
+      string_append (declp, *mangled);
+      *mangled += strlen (*mangled);
+      success = 1;
+    }
+  return (success);
+}
+
+/*
+
+LOCAL FUNCTION
+
+       gnu_special -- special handling of gnu mangled strings
+
+SYNOPSIS
+
+       static int
+       gnu_special (struct work_stuff *work, const char **mangled,
+                    string *declp);
+
+
+DESCRIPTION
+
+       Process some special GNU style mangling forms that don't fit
+       the normal pattern.  For example:
+
+               _$_3foo         (destructor for class foo)
+               _vt$foo         (foo virtual table)
+               _vt$foo$bar     (foo::bar virtual table)
+               __vt_foo        (foo virtual table, new style with thunks)
+               _3foo$varname   (static data member)
+               _Q22rs2tu$vw    (static data member)
+               __t6vector1Zii  (constructor with template)
+               __thunk_4__$_7ostream (virtual function thunk)
+ */
+
+static int
+gnu_special (struct work_stuff *work, const char **mangled, string *declp)
+{
+  int n;
+  int success = 1;
+  const char *p;
+
+  if ((*mangled)[0] == '_'
+      && strchr (cplus_markers, (*mangled)[1]) != NULL
+      && (*mangled)[2] == '_')
+    {
+      /* Found a GNU style destructor, get past "_<CPLUS_MARKER>_" */
+      (*mangled) += 3;
+      work -> destructor += 1;
+    }
+  else if ((*mangled)[0] == '_'
+          && (((*mangled)[1] == '_'
+               && (*mangled)[2] == 'v'
+               && (*mangled)[3] == 't'
+               && (*mangled)[4] == '_')
+              || ((*mangled)[1] == 'v'
+                  && (*mangled)[2] == 't'
+                  && strchr (cplus_markers, (*mangled)[3]) != NULL)))
+    {
+      /* Found a GNU style virtual table, get past "_vt<CPLUS_MARKER>"
+         and create the decl.  Note that we consume the entire mangled
+        input string, which means that demangle_signature has no work
+        to do.  */
+      if ((*mangled)[2] == 'v')
+       (*mangled) += 5; /* New style, with thunks: "__vt_" */
+      else
+       (*mangled) += 4; /* Old style, no thunks: "_vt<CPLUS_MARKER>" */
+      while (**mangled != '\0')
+       {
+         switch (**mangled)
+           {
+           case 'Q':
+           case 'K':
+             success = demangle_qualified (work, mangled, declp, 0, 1);
+             break;
+           case 't':
+             success = demangle_template (work, mangled, declp, 0, 1,
+                                          1);
+             break;
+           default:
+             if (ISDIGIT((unsigned char)*mangled[0]))
+               {
+                 n = consume_count(mangled);
+                 /* We may be seeing a too-large size, or else a
+                    ".<digits>" indicating a static local symbol.  In
+                    any case, declare victory and move on; *don't* try
+                    to use n to allocate.  */
+                 if (n > (int) strlen (*mangled))
+                   {
+                     success = 1;
+                     break;
+                   }
+               }
+             else
+               {
+                 n = strcspn (*mangled, cplus_markers);
+               }
+             string_appendn (declp, *mangled, n);
+             (*mangled) += n;
+           }
+
+         p = strpbrk (*mangled, cplus_markers);
+         if (success && ((p == NULL) || (p == *mangled)))
+           {
+             if (p != NULL)
+               {
+                 string_append (declp, SCOPE_STRING (work));
+                 (*mangled)++;
+               }
+           }
+         else
+           {
+             success = 0;
+             break;
+           }
+       }
+      if (success)
+       string_append (declp, " virtual table");
+    }
+  else if ((*mangled)[0] == '_'
+          && (strchr("0123456789Qt", (*mangled)[1]) != NULL)
+          && (p = strpbrk (*mangled, cplus_markers)) != NULL)
+    {
+      /* static data member, "_3foo$varname" for example */
+      (*mangled)++;
+      switch (**mangled)
+       {
+       case 'Q':
+       case 'K':
+         success = demangle_qualified (work, mangled, declp, 0, 1);
+         break;
+       case 't':
+         success = demangle_template (work, mangled, declp, 0, 1, 1);
+         break;
+       default:
+         n = consume_count (mangled);
+         if (n < 0 || n > (long) strlen (*mangled))
+           {
+             success = 0;
+             break;
+           }
+
+         if (n > 10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
+             && (*mangled)[9] == 'N'
+             && (*mangled)[8] == (*mangled)[10]
+             && strchr (cplus_markers, (*mangled)[8]))
+           {
+             /* A member of the anonymous namespace.  There's information
+                about what identifier or filename it was keyed to, but
+                it's just there to make the mangled name unique; we just
+                step over it.  */
+             string_append (declp, "{anonymous}");
+             (*mangled) += n;
+
+             /* Now p points to the marker before the N, so we need to
+                update it to the first marker after what we consumed.  */
+             p = strpbrk (*mangled, cplus_markers);
+             break;
+           }
+
+         string_appendn (declp, *mangled, n);
+         (*mangled) += n;
+       }
+      if (success && (p == *mangled))
+       {
+         /* Consumed everything up to the cplus_marker, append the
+            variable name.  */
+         (*mangled)++;
+         string_append (declp, SCOPE_STRING (work));
+         n = strlen (*mangled);
+         string_appendn (declp, *mangled, n);
+         (*mangled) += n;
+       }
+      else
+       {
+         success = 0;
+       }
+    }
+  else if (strncmp (*mangled, "__thunk_", 8) == 0)
+    {
+      int delta;
+
+      (*mangled) += 8;
+      delta = consume_count (mangled);
+      if (delta == -1)
+       success = 0;
+      else
+       {
+         char *method = internal_cplus_demangle (work, ++*mangled);
+
+         if (method)
+           {
+             char buf[50];
+             sprintf (buf, "virtual function thunk (delta:%d) for ", -delta);
+             string_append (declp, buf);
+             string_append (declp, method);
+             free (method);
+             n = strlen (*mangled);
+             (*mangled) += n;
+           }
+         else
+           {
+             success = 0;
+           }
+       }
+    }
+  else if (strncmp (*mangled, "__t", 3) == 0
+          && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f'))
+    {
+      p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function";
+      (*mangled) += 4;
+      switch (**mangled)
+       {
+       case 'Q':
+       case 'K':
+         success = demangle_qualified (work, mangled, declp, 0, 1);
+         break;
+       case 't':
+         success = demangle_template (work, mangled, declp, 0, 1, 1);
+         break;
+       default:
+         success = do_type (work, mangled, declp);
+         break;
+       }
+      if (success && **mangled != '\0')
+       success = 0;
+      if (success)
+       string_append (declp, p);
+    }
+  else
+    {
+      success = 0;
+    }
+  return (success);
+}
+
+static void
+recursively_demangle(struct work_stuff *work, const char **mangled,
+                     string *result, int namelength)
+{
+  char * recurse = (char *)NULL;
+  char * recurse_dem = (char *)NULL;
+
+  recurse = XNEWVEC (char, namelength + 1);
+  memcpy (recurse, *mangled, namelength);
+  recurse[namelength] = '\000';
+
+  recurse_dem = cplus_demangle (recurse, work->options);
+
+  if (recurse_dem)
+    {
+      string_append (result, recurse_dem);
+      free (recurse_dem);
+    }
+  else
+    {
+      string_appendn (result, *mangled, namelength);
+    }
+  free (recurse);
+  *mangled += namelength;
+}
+
+/*
+
+LOCAL FUNCTION
+
+       arm_special -- special handling of ARM/lucid mangled strings
+
+SYNOPSIS
+
+       static int
+       arm_special (const char **mangled,
+                    string *declp);
+
+
+DESCRIPTION
+
+       Process some special ARM style mangling forms that don't fit
+       the normal pattern.  For example:
+
+               __vtbl__3foo            (foo virtual table)
+               __vtbl__3foo__3bar      (bar::foo virtual table)
+
+ */
+
+static int
+arm_special (const char **mangled, string *declp)
+{
+  int n;
+  int success = 1;
+  const char *scan;
+
+  if (strncmp (*mangled, ARM_VTABLE_STRING, ARM_VTABLE_STRLEN) == 0)
+    {
+      /* Found a ARM style virtual table, get past ARM_VTABLE_STRING
+         and create the decl.  Note that we consume the entire mangled
+        input string, which means that demangle_signature has no work
+        to do.  */
+      scan = *mangled + ARM_VTABLE_STRLEN;
+      while (*scan != '\0')        /* first check it can be demangled */
+        {
+          n = consume_count (&scan);
+          if (n == -1)
+           {
+             return (0);           /* no good */
+           }
+          scan += n;
+          if (scan[0] == '_' && scan[1] == '_')
+           {
+             scan += 2;
+           }
+        }
+      (*mangled) += ARM_VTABLE_STRLEN;
+      while (**mangled != '\0')
+       {
+         n = consume_count (mangled);
+          if (n == -1
+             || n > (long) strlen (*mangled))
+           return 0;
+         string_prependn (declp, *mangled, n);
+         (*mangled) += n;
+         if ((*mangled)[0] == '_' && (*mangled)[1] == '_')
+           {
+             string_prepend (declp, "::");
+             (*mangled) += 2;
+           }
+       }
+      string_append (declp, " virtual table");
+    }
+  else
+    {
+      success = 0;
+    }
+  return (success);
+}
+
+/*
+
+LOCAL FUNCTION
+
+       demangle_qualified -- demangle 'Q' qualified name strings
+
+SYNOPSIS
+
+       static int
+       demangle_qualified (struct work_stuff *, const char *mangled,
+                           string *result, int isfuncname, int append);
+
+DESCRIPTION
+
+       Demangle a qualified name, such as "Q25Outer5Inner" which is
+       the mangled form of "Outer::Inner".  The demangled output is
+       prepended or appended to the result string according to the
+       state of the append flag.
+
+       If isfuncname is nonzero, then the qualified name we are building
+       is going to be used as a member function name, so if it is a
+       constructor or destructor function, append an appropriate
+       constructor or destructor name.  I.E. for the above example,
+       the result for use as a constructor is "Outer::Inner::Inner"
+       and the result for use as a destructor is "Outer::Inner::~Inner".
+
+BUGS
+
+       Numeric conversion is ASCII dependent (FIXME).
+
+ */
+
+static int
+demangle_qualified (struct work_stuff *work, const char **mangled,
+                    string *result, int isfuncname, int append)
+{
+  int qualifiers = 0;
+  int success = 1;
+  char num[2];
+  string temp;
+  string last_name;
+  int bindex = register_Btype (work);
+
+  /* We only make use of ISFUNCNAME if the entity is a constructor or
+     destructor.  */
+  isfuncname = (isfuncname
+               && ((work->constructor & 1) || (work->destructor & 1)));
+
+  string_init (&temp);
+  string_init (&last_name);
+
+  if ((*mangled)[0] == 'K')
+    {
+    /* Squangling qualified name reuse */
+      int idx;
+      (*mangled)++;
+      idx = consume_count_with_underscores (mangled);
+      if (idx == -1 || idx >= work -> numk)
+        success = 0;
+      else
+        string_append (&temp, work -> ktypevec[idx]);
+    }
+  else
+    switch ((*mangled)[1])
+    {
+    case '_':
+      /* GNU mangled name with more than 9 classes.  The count is preceded
+        by an underscore (to distinguish it from the <= 9 case) and followed
+        by an underscore.  */
+      (*mangled)++;
+      qualifiers = consume_count_with_underscores (mangled);
+      if (qualifiers == -1)
+       success = 0;
+      break;
+
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      /* The count is in a single digit.  */
+      num[0] = (*mangled)[1];
+      num[1] = '\0';
+      qualifiers = atoi (num);
+
+      /* If there is an underscore after the digit, skip it.  This is
+        said to be for ARM-qualified names, but the ARM makes no
+        mention of such an underscore.  Perhaps cfront uses one.  */
+      if ((*mangled)[2] == '_')
+       {
+         (*mangled)++;
+       }
+      (*mangled) += 2;
+      break;
+
+    case '0':
+    default:
+      success = 0;
+    }
+
+  if (!success)
+    return success;
+
+  /* Pick off the names and collect them in the temp buffer in the order
+     in which they are found, separated by '::'.  */
+
+  while (qualifiers-- > 0)
+    {
+      int remember_K = 1;
+      string_clear (&last_name);
+
+      if (*mangled[0] == '_')
+       (*mangled)++;
+
+      if (*mangled[0] == 't')
+       {
+         /* Here we always append to TEMP since we will want to use
+            the template name without the template parameters as a
+            constructor or destructor name.  The appropriate
+            (parameter-less) value is returned by demangle_template
+            in LAST_NAME.  We do not remember the template type here,
+            in order to match the G++ mangling algorithm.  */
+         success = demangle_template(work, mangled, &temp,
+                                     &last_name, 1, 0);
+         if (!success)
+           break;
+       }
+      else if (*mangled[0] == 'K')
+       {
+          int idx;
+          (*mangled)++;
+          idx = consume_count_with_underscores (mangled);
+          if (idx == -1 || idx >= work->numk)
+            success = 0;
+          else
+            string_append (&temp, work->ktypevec[idx]);
+          remember_K = 0;
+
+         if (!success) break;
+       }
+      else
+       {
+         if (EDG_DEMANGLING)
+            {
+             int namelength;
+             /* Now recursively demangle the qualifier
+              * This is necessary to deal with templates in
+              * mangling styles like EDG */
+             namelength = consume_count (mangled);
+             if (namelength == -1)
+               {
+                 success = 0;
+                 break;
+               }
+             recursively_demangle(work, mangled, &temp, namelength);
+            }
+          else
+            {
+              string_delete (&last_name);
+              success = do_type (work, mangled, &last_name);
+              if (!success)
+                break;
+              string_appends (&temp, &last_name);
+            }
+       }
+
+      if (remember_K)
+       remember_Ktype (work, temp.b, LEN_STRING (&temp));
+
+      if (qualifiers > 0)
+       string_append (&temp, SCOPE_STRING (work));
+    }
+
+  remember_Btype (work, temp.b, LEN_STRING (&temp), bindex);
+
+  /* If we are using the result as a function name, we need to append
+     the appropriate '::' separated constructor or destructor name.
+     We do this here because this is the most convenient place, where
+     we already have a pointer to the name and the length of the name.  */
+
+  if (isfuncname)
+    {
+      string_append (&temp, SCOPE_STRING (work));
+      if (work -> destructor & 1)
+       string_append (&temp, "~");
+      string_appends (&temp, &last_name);
+    }
+
+  /* Now either prepend the temp buffer to the result, or append it,
+     depending upon the state of the append flag.  */
+
+  if (append)
+    string_appends (result, &temp);
+  else
+    {
+      if (!STRING_EMPTY (result))
+       string_append (&temp, SCOPE_STRING (work));
+      string_prepends (result, &temp);
+    }
+
+  string_delete (&last_name);
+  string_delete (&temp);
+  return (success);
+}
+
+/*
+
+LOCAL FUNCTION
+
+       get_count -- convert an ascii count to integer, consuming tokens
+
+SYNOPSIS
+
+       static int
+       get_count (const char **type, int *count)
+
+DESCRIPTION
+
+       Assume that *type points at a count in a mangled name; set
+       *count to its value, and set *type to the next character after
+       the count.  There are some weird rules in effect here.
+
+       If *type does not point at a string of digits, return zero.
+
+       If *type points at a string of digits followed by an
+       underscore, set *count to their value as an integer, advance
+       *type to point *after the underscore, and return 1.
+
+       If *type points at a string of digits not followed by an
+       underscore, consume only the first digit.  Set *count to its
+       value as an integer, leave *type pointing after that digit,
+       and return 1.
+
+        The excuse for this odd behavior: in the ARM and HP demangling
+        styles, a type can be followed by a repeat count of the form
+        `Nxy', where:
+
+        `x' is a single digit specifying how many additional copies
+            of the type to append to the argument list, and
+
+        `y' is one or more digits, specifying the zero-based index of
+            the first repeated argument in the list.  Yes, as you're
+            unmangling the name you can figure this out yourself, but
+            it's there anyway.
+
+        So, for example, in `bar__3fooFPiN51', the first argument is a
+        pointer to an integer (`Pi'), and then the next five arguments
+        are the same (`N5'), and the first repeat is the function's
+        second argument (`1').
+*/
+
+static int
+get_count (const char **type, int *count)
+{
+  const char *p;
+  int n;
+
+  if (!ISDIGIT ((unsigned char)**type))
+    return (0);
+  else
+    {
+      *count = **type - '0';
+      (*type)++;
+      if (ISDIGIT ((unsigned char)**type))
+       {
+         p = *type;
+         n = *count;
+         do
+           {
+             n *= 10;
+             n += *p - '0';
+             p++;
+           }
+         while (ISDIGIT ((unsigned char)*p));
+         if (*p == '_')
+           {
+             *type = p + 1;
+             *count = n;
+           }
+       }
+    }
+  return (1);
+}
+
+/* RESULT will be initialised here; it will be freed on failure.  The
+   value returned is really a type_kind_t.  */
+
+static int
+do_type (struct work_stuff *work, const char **mangled, string *result)
+{
+  int n;
+  int done;
+  int success;
+  string decl;
+  const char *remembered_type;
+  int type_quals;
+  type_kind_t tk = tk_none;
+
+  string_init (&decl);
+  string_init (result);
+
+  done = 0;
+  success = 1;
+  while (success && !done)
+    {
+      int member;
+      switch (**mangled)
+       {
+
+         /* A pointer type */
+       case 'P':
+       case 'p':
+         (*mangled)++;
+         if (! (work -> options & DMGL_JAVA))
+           string_prepend (&decl, "*");
+         if (tk == tk_none)
+           tk = tk_pointer;
+         break;
+
+         /* A reference type */
+       case 'R':
+         (*mangled)++;
+         string_prepend (&decl, "&");
+         if (tk == tk_none)
+           tk = tk_reference;
+         break;
+
+         /* An array */
+       case 'A':
+         {
+           ++(*mangled);
+           if (!STRING_EMPTY (&decl)
+               && (decl.b[0] == '*' || decl.b[0] == '&'))
+             {
+               string_prepend (&decl, "(");
+               string_append (&decl, ")");
+             }
+           string_append (&decl, "[");
+           if (**mangled != '_')
+             success = demangle_template_value_parm (work, mangled, &decl,
+                                                     tk_integral);
+           if (**mangled == '_')
+             ++(*mangled);
+           string_append (&decl, "]");
+           break;
+         }
+
+       /* A back reference to a previously seen type */
+       case 'T':
+         (*mangled)++;
+         if (!get_count (mangled, &n) || n >= work -> ntypes)
+           {
+             success = 0;
+           }
+         else
+           {
+             remembered_type = work -> typevec[n];
+             mangled = &remembered_type;
+           }
+         break;
+
+         /* A function */
+       case 'F':
+         (*mangled)++;
+           if (!STRING_EMPTY (&decl)
+               && (decl.b[0] == '*' || decl.b[0] == '&'))
+           {
+             string_prepend (&decl, "(");
+             string_append (&decl, ")");
+           }
+         /* After picking off the function args, we expect to either find the
+            function return type (preceded by an '_') or the end of the
+            string.  */
+         if (!demangle_nested_args (work, mangled, &decl)
+             || (**mangled != '_' && **mangled != '\0'))
+           {
+             success = 0;
+             break;
+           }
+         if (success && (**mangled == '_'))
+           (*mangled)++;
+         break;
+
+       case 'M':
+       case 'O':
+         {
+           type_quals = TYPE_UNQUALIFIED;
+
+           member = **mangled == 'M';
+           (*mangled)++;
+
+           string_append (&decl, ")");
+
+           /* We don't need to prepend `::' for a qualified name;
+              demangle_qualified will do that for us.  */
+           if (**mangled != 'Q')
+             string_prepend (&decl, SCOPE_STRING (work));
+
+           if (ISDIGIT ((unsigned char)**mangled))
+             {
+               n = consume_count (mangled);
+               if (n == -1
+                   || (int) strlen (*mangled) < n)
+                 {
+                   success = 0;
+                   break;
+                 }
+               string_prependn (&decl, *mangled, n);
+               *mangled += n;
+             }
+           else if (**mangled == 'X' || **mangled == 'Y')
+             {
+               string temp;
+               do_type (work, mangled, &temp);
+               string_prepends (&decl, &temp);
+               string_delete (&temp);
+             }
+           else if (**mangled == 't')
+             {
+               string temp;
+               string_init (&temp);
+               success = demangle_template (work, mangled, &temp,
+                                            NULL, 1, 1);
+               if (success)
+                 {
+                   string_prependn (&decl, temp.b, temp.p - temp.b);
+                   string_delete (&temp);
+                 }
+               else
+                 break;
+             }
+           else if (**mangled == 'Q')
+             {
+               success = demangle_qualified (work, mangled, &decl,
+                                             /*isfuncnam=*/0, 
+                                             /*append=*/0);
+               if (!success)
+                 break;
+             }
+           else
+             {
+               success = 0;
+               break;
+             }
+
+           string_prepend (&decl, "(");
+           if (member)
+             {
+               switch (**mangled)
+                 {
+                 case 'C':
+                 case 'V':
+                 case 'u':
+                   type_quals |= code_for_qualifier (**mangled);
+                   (*mangled)++;
+                   break;
+
+                 default:
+                   break;
+                 }
+
+               if (*(*mangled)++ != 'F')
+                 {
+                   success = 0;
+                   break;
+                 }
+             }
+           if ((member && !demangle_nested_args (work, mangled, &decl))
+               || **mangled != '_')
+             {
+               success = 0;
+               break;
+             }
+           (*mangled)++;
+           if (! PRINT_ANSI_QUALIFIERS)
+             {
+               break;
+             }
+           if (type_quals != TYPE_UNQUALIFIED)
+             {
+               APPEND_BLANK (&decl);
+               string_append (&decl, qualifier_string (type_quals));
+             }
+           break;
+         }
+        case 'G':
+         (*mangled)++;
+         break;
+
+       case 'C':
+       case 'V':
+       case 'u':
+         if (PRINT_ANSI_QUALIFIERS)
+           {
+             if (!STRING_EMPTY (&decl))
+               string_prepend (&decl, " ");
+
+             string_prepend (&decl, demangle_qualifier (**mangled));
+           }
+         (*mangled)++;
+         break;
+         /*
+           }
+           */
+
+         /* fall through */
+       default:
+         done = 1;
+         break;
+       }
+    }
+
+  if (success) switch (**mangled)
+    {
+      /* A qualified name, such as "Outer::Inner".  */
+    case 'Q':
+    case 'K':
+      {
+        success = demangle_qualified (work, mangled, result, 0, 1);
+        break;
+      }
+
+    /* A back reference to a previously seen squangled type */
+    case 'B':
+      (*mangled)++;
+      if (!get_count (mangled, &n) || n >= work -> numb)
+       success = 0;
+      else
+       string_append (result, work->btypevec[n]);
+      break;
+
+    case 'X':
+    case 'Y':
+      /* A template parm.  We substitute the corresponding argument. */
+      {
+       int idx;
+
+       (*mangled)++;
+       idx = consume_count_with_underscores (mangled);
+
+       if (idx == -1
+           || (work->tmpl_argvec && idx >= work->ntmpl_args)
+           || consume_count_with_underscores (mangled) == -1)
+         {
+           success = 0;
+           break;
+         }
+
+       if (work->tmpl_argvec)
+         string_append (result, work->tmpl_argvec[idx]);
+       else
+         string_append_template_idx (result, idx);
+
+       success = 1;
+      }
+    break;
+
+    default:
+      success = demangle_fund_type (work, mangled, result);
+      if (tk == tk_none)
+       tk = (type_kind_t) success;
+      break;
+    }
+
+  if (success)
+    {
+      if (!STRING_EMPTY (&decl))
+       {
+         string_append (result, " ");
+         string_appends (result, &decl);
+       }
+    }
+  else
+    string_delete (result);
+  string_delete (&decl);
+
+  if (success)
+    /* Assume an integral type, if we're not sure.  */
+    return (int) ((tk == tk_none) ? tk_integral : tk);
+  else
+    return 0;
+}
+
+/* Given a pointer to a type string that represents a fundamental type
+   argument (int, long, unsigned int, etc) in TYPE, a pointer to the
+   string in which the demangled output is being built in RESULT, and
+   the WORK structure, decode the types and add them to the result.
+
+   For example:
+
+       "Ci"    =>      "const int"
+       "Sl"    =>      "signed long"
+       "CUs"   =>      "const unsigned short"
+
+   The value returned is really a type_kind_t.  */
+
+static int
+demangle_fund_type (struct work_stuff *work,
+                    const char **mangled, string *result)
+{
+  int done = 0;
+  int success = 1;
+  char buf[INTBUF_SIZE + 5 /* 'int%u_t' */];
+  unsigned int dec = 0;
+  type_kind_t tk = tk_integral;
+
+  /* First pick off any type qualifiers.  There can be more than one.  */
+
+  while (!done)
+    {
+      switch (**mangled)
+       {
+       case 'C':
+       case 'V':
+       case 'u':
+         if (PRINT_ANSI_QUALIFIERS)
+           {
+              if (!STRING_EMPTY (result))
+                string_prepend (result, " ");
+             string_prepend (result, demangle_qualifier (**mangled));
+           }
+         (*mangled)++;
+         break;
+       case 'U':
+         (*mangled)++;
+         APPEND_BLANK (result);
+         string_append (result, "unsigned");
+         break;
+       case 'S': /* signed char only */
+         (*mangled)++;
+         APPEND_BLANK (result);
+         string_append (result, "signed");
+         break;
+       case 'J':
+         (*mangled)++;
+         APPEND_BLANK (result);
+         string_append (result, "__complex");
+         break;
+       default:
+         done = 1;
+         break;
+       }
+    }
+
+  /* Now pick off the fundamental type.  There can be only one.  */
+
+  switch (**mangled)
+    {
+    case '\0':
+    case '_':
+      break;
+    case 'v':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "void");
+      break;
+    case 'x':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "long long");
+      break;
+    case 'l':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "long");
+      break;
+    case 'i':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "int");
+      break;
+    case 's':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "short");
+      break;
+    case 'b':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "bool");
+      tk = tk_bool;
+      break;
+    case 'c':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "char");
+      tk = tk_char;
+      break;
+    case 'w':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "wchar_t");
+      tk = tk_char;
+      break;
+    case 'r':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "long double");
+      tk = tk_real;
+      break;
+    case 'd':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "double");
+      tk = tk_real;
+      break;
+    case 'f':
+      (*mangled)++;
+      APPEND_BLANK (result);
+      string_append (result, "float");
+      tk = tk_real;
+      break;
+    case 'G':
+      (*mangled)++;
+      if (!ISDIGIT ((unsigned char)**mangled))
+       {
+         success = 0;
+         break;
+       }
+    case 'I':
+      (*mangled)++;
+      if (**mangled == '_')
+       {
+         int i;
+         (*mangled)++;
+         for (i = 0;
+              i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_';
+              (*mangled)++, i++)
+           buf[i] = **mangled;
+         if (**mangled != '_')
+           {
+             success = 0;
+             break;
+           }
+         buf[i] = '\0';
+         (*mangled)++;
+       }
+      else
+       {
+         strncpy (buf, *mangled, 2);
+         buf[2] = '\0';
+         *mangled += min (strlen (*mangled), 2);
+       }
+      sscanf (buf, "%x", &dec);
+      sprintf (buf, "int%u_t", dec);
+      APPEND_BLANK (result);
+      string_append (result, buf);
+      break;
+
+      /* fall through */
+      /* An explicit type, such as "6mytype" or "7integer" */
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      {
+        int bindex = register_Btype (work);
+        string btype;
+        string_init (&btype);
+        if (demangle_class_name (work, mangled, &btype)) {
+          remember_Btype (work, btype.b, LEN_STRING (&btype), bindex);
+          APPEND_BLANK (result);
+          string_appends (result, &btype);
+        }
+        else
+          success = 0;
+        string_delete (&btype);
+        break;
+      }
+    case 't':
+      {
+        string btype;
+        string_init (&btype);
+        success = demangle_template (work, mangled, &btype, 0, 1, 1);
+        string_appends (result, &btype);
+        string_delete (&btype);
+        break;
+      }
+    default:
+      success = 0;
+      break;
+    }
+
+  return success ? ((int) tk) : 0;
+}
+
+
+/* Handle a template's value parameter for HP aCC (extension from ARM)
+   **mangled points to 'S' or 'U' */
+
+static int
+do_hpacc_template_const_value (struct work_stuff *work ATTRIBUTE_UNUSED,
+                               const char **mangled, string *result)
+{
+  int unsigned_const;
+
+  if (**mangled != 'U' && **mangled != 'S')
+    return 0;
+
+  unsigned_const = (**mangled == 'U');
+
+  (*mangled)++;
+
+  switch (**mangled)
+    {
+      case 'N':
+        string_append (result, "-");
+        /* fall through */
+      case 'P':
+        (*mangled)++;
+        break;
+      case 'M':
+        /* special case for -2^31 */
+        string_append (result, "-2147483648");
+        (*mangled)++;
+        return 1;
+      default:
+        return 0;
+    }
+
+  /* We have to be looking at an integer now */
+  if (!(ISDIGIT ((unsigned char)**mangled)))
+    return 0;
+
+  /* We only deal with integral values for template
+     parameters -- so it's OK to look only for digits */
+  while (ISDIGIT ((unsigned char)**mangled))
+    {
+      char_str[0] = **mangled;
+      string_append (result, char_str);
+      (*mangled)++;
+    }
+
+  if (unsigned_const)
+    string_append (result, "U");
+
+  /* FIXME? Some day we may have 64-bit (or larger :-) ) constants
+     with L or LL suffixes. pai/1997-09-03 */
+
+  return 1; /* success */
+}
+
+/* Handle a template's literal parameter for HP aCC (extension from ARM)
+   **mangled is pointing to the 'A' */
+
+static int
+do_hpacc_template_literal (struct work_stuff *work, const char **mangled,
+                           string *result)
+{
+  int literal_len = 0;
+  char * recurse;
+  char * recurse_dem;
+
+  if (**mangled != 'A')
+    return 0;
+
+  (*mangled)++;
+
+  literal_len = consume_count (mangled);
+
+  if (literal_len <= 0)
+    return 0;
+
+  /* Literal parameters are names of arrays, functions, etc.  and the
+     canonical representation uses the address operator */
+  string_append (result, "&");
+
+  /* Now recursively demangle the literal name */
+  recurse = XNEWVEC (char, literal_len + 1);
+  memcpy (recurse, *mangled, literal_len);
+  recurse[literal_len] = '\000';
+
+  recurse_dem = cplus_demangle (recurse, work->options);
+
+  if (recurse_dem)
+    {
+      string_append (result, recurse_dem);
+      free (recurse_dem);
+    }
+  else
+    {
+      string_appendn (result, *mangled, literal_len);
+    }
+  (*mangled) += literal_len;
+  free (recurse);
+
+  return 1;
+}
+
+static int
+snarf_numeric_literal (const char **args, string *arg)
+{
+  if (**args == '-')
+    {
+      char_str[0] = '-';
+      string_append (arg, char_str);
+      (*args)++;
+    }
+  else if (**args == '+')
+    (*args)++;
+
+  if (!ISDIGIT ((unsigned char)**args))
+    return 0;
+
+  while (ISDIGIT ((unsigned char)**args))
+    {
+      char_str[0] = **args;
+      string_append (arg, char_str);
+      (*args)++;
+    }
+
+  return 1;
+}
+
+/* Demangle the next argument, given by MANGLED into RESULT, which
+   *should be an uninitialized* string.  It will be initialized here,
+   and free'd should anything go wrong.  */
+
+static int
+do_arg (struct work_stuff *work, const char **mangled, string *result)
+{
+  /* Remember where we started so that we can record the type, for
+     non-squangling type remembering.  */
+  const char *start = *mangled;
+
+  string_init (result);
+
+  if (work->nrepeats > 0)
+    {
+      --work->nrepeats;
+
+      if (work->previous_argument == 0)
+       return 0;
+
+      /* We want to reissue the previous type in this argument list.  */
+      string_appends (result, work->previous_argument);
+      return 1;
+    }
+
+  if (**mangled == 'n')
+    {
+      /* A squangling-style repeat.  */
+      (*mangled)++;
+      work->nrepeats = consume_count(mangled);
+
+      if (work->nrepeats <= 0)
+       /* This was not a repeat count after all.  */
+       return 0;
+
+      if (work->nrepeats > 9)
+       {
+         if (**mangled != '_')
+           /* The repeat count should be followed by an '_' in this
+              case.  */
+           return 0;
+         else
+           (*mangled)++;
+       }
+
+      /* Now, the repeat is all set up.  */
+      return do_arg (work, mangled, result);
+    }
+
+  /* Save the result in WORK->previous_argument so that we can find it
+     if it's repeated.  Note that saving START is not good enough: we
+     do not want to add additional types to the back-referenceable
+     type vector when processing a repeated type.  */
+  if (work->previous_argument)
+    string_delete (work->previous_argument);
+  else
+    work->previous_argument = XNEW (string);
+
+  if (!do_type (work, mangled, work->previous_argument))
+    return 0;
+
+  string_appends (result, work->previous_argument);
+
+  remember_type (work, start, *mangled - start);
+  return 1;
+}
+
+static void
+remember_type (struct work_stuff *work, const char *start, int len)
+{
+  char *tem;
+
+  if (work->forgetting_types)
+    return;
+
+  if (work -> ntypes >= work -> typevec_size)
+    {
+      if (work -> typevec_size == 0)
+       {
+         work -> typevec_size = 3;
+         work -> typevec = XNEWVEC (char *, work->typevec_size);
+       }
+      else
+       {
+         work -> typevec_size *= 2;
+         work -> typevec
+           = XRESIZEVEC (char *, work->typevec, work->typevec_size);
+       }
+    }
+  tem = XNEWVEC (char, len + 1);
+  memcpy (tem, start, len);
+  tem[len] = '\0';
+  work -> typevec[work -> ntypes++] = tem;
+}
+
+
+/* Remember a K type class qualifier. */
+static void
+remember_Ktype (struct work_stuff *work, const char *start, int len)
+{
+  char *tem;
+
+  if (work -> numk >= work -> ksize)
+    {
+      if (work -> ksize == 0)
+       {
+         work -> ksize = 5;
+         work -> ktypevec = XNEWVEC (char *, work->ksize);
+       }
+      else
+       {
+         work -> ksize *= 2;
+         work -> ktypevec
+           = XRESIZEVEC (char *, work->ktypevec, work->ksize);
+       }
+    }
+  tem = XNEWVEC (char, len + 1);
+  memcpy (tem, start, len);
+  tem[len] = '\0';
+  work -> ktypevec[work -> numk++] = tem;
+}
+
+/* Register a B code, and get an index for it. B codes are registered
+   as they are seen, rather than as they are completed, so map<temp<char> >
+   registers map<temp<char> > as B0, and temp<char> as B1 */
+
+static int
+register_Btype (struct work_stuff *work)
+{
+  int ret;
+
+  if (work -> numb >= work -> bsize)
+    {
+      if (work -> bsize == 0)
+       {
+         work -> bsize = 5;
+         work -> btypevec = XNEWVEC (char *, work->bsize);
+       }
+      else
+       {
+         work -> bsize *= 2;
+         work -> btypevec
+           = XRESIZEVEC (char *, work->btypevec, work->bsize);
+       }
+    }
+  ret = work -> numb++;
+  work -> btypevec[ret] = NULL;
+  return(ret);
+}
+
+/* Store a value into a previously registered B code type. */
+
+static void
+remember_Btype (struct work_stuff *work, const char *start,
+                int len, int index)
+{
+  char *tem;
+
+  tem = XNEWVEC (char, len + 1);
+  memcpy (tem, start, len);
+  tem[len] = '\0';
+  work -> btypevec[index] = tem;
+}
+
+/* Lose all the info related to B and K type codes. */
+static void
+forget_B_and_K_types (struct work_stuff *work)
+{
+  int i;
+
+  while (work -> numk > 0)
+    {
+      i = --(work -> numk);
+      if (work -> ktypevec[i] != NULL)
+       {
+         free (work -> ktypevec[i]);
+         work -> ktypevec[i] = NULL;
+       }
+    }
+
+  while (work -> numb > 0)
+    {
+      i = --(work -> numb);
+      if (work -> btypevec[i] != NULL)
+       {
+         free (work -> btypevec[i]);
+         work -> btypevec[i] = NULL;
+       }
+    }
+}
+/* Forget the remembered types, but not the type vector itself.  */
+
+static void
+forget_types (struct work_stuff *work)
+{
+  int i;
+
+  while (work -> ntypes > 0)
+    {
+      i = --(work -> ntypes);
+      if (work -> typevec[i] != NULL)
+       {
+         free (work -> typevec[i]);
+         work -> typevec[i] = NULL;
+       }
+    }
+}
+
+/* Process the argument list part of the signature, after any class spec
+   has been consumed, as well as the first 'F' character (if any).  For
+   example:
+
+   "__als__3fooRT0"            =>      process "RT0"
+   "complexfunc5__FPFPc_PFl_i" =>      process "PFPc_PFl_i"
+
+   DECLP must be already initialised, usually non-empty.  It won't be freed
+   on failure.
+
+   Note that g++ differs significantly from ARM and lucid style mangling
+   with regards to references to previously seen types.  For example, given
+   the source fragment:
+
+     class foo {
+       public:
+       foo::foo (int, foo &ia, int, foo &ib, int, foo &ic);
+     };
+
+     foo::foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; }
+     void foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; }
+
+   g++ produces the names:
+
+     __3fooiRT0iT2iT2
+     foo__FiR3fooiT1iT1
+
+   while lcc (and presumably other ARM style compilers as well) produces:
+
+     foo__FiR3fooT1T2T1T2
+     __ct__3fooFiR3fooT1T2T1T2
+
+   Note that g++ bases its type numbers starting at zero and counts all
+   previously seen types, while lucid/ARM bases its type numbers starting
+   at one and only considers types after it has seen the 'F' character
+   indicating the start of the function args.  For lucid/ARM style, we
+   account for this difference by discarding any previously seen types when
+   we see the 'F' character, and subtracting one from the type number
+   reference.
+
+ */
+
+static int
+demangle_args (struct work_stuff *work, const char **mangled,
+               string *declp)
+{
+  string arg;
+  int need_comma = 0;
+  int r;
+  int t;
+  const char *tem;
+  char temptype;
+
+  if (PRINT_ARG_TYPES)
+    {
+      string_append (declp, "(");
+      if (**mangled == '\0')
+       {
+         string_append (declp, "void");
+       }
+    }
+
+  while ((**mangled != '_' && **mangled != '\0' && **mangled != 'e')
+        || work->nrepeats > 0)
+    {
+      if ((**mangled == 'N') || (**mangled == 'T'))
+       {
+         temptype = *(*mangled)++;
+
+         if (temptype == 'N')
+           {
+             if (!get_count (mangled, &r))
+               {
+                 return (0);
+               }
+           }
+         else
+           {
+             r = 1;
+           }
+          if ((HP_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) && work -> ntypes >= 10)
+            {
+              /* If we have 10 or more types we might have more than a 1 digit
+                 index so we'll have to consume the whole count here. This
+                 will lose if the next thing is a type name preceded by a
+                 count but it's impossible to demangle that case properly
+                 anyway. Eg if we already have 12 types is T12Pc "(..., type1,
+                 Pc, ...)"  or "(..., type12, char *, ...)" */
+              if ((t = consume_count(mangled)) <= 0)
+                {
+                  return (0);
+                }
+            }
+          else
+           {
+             if (!get_count (mangled, &t))
+               {
+                 return (0);
+               }
+           }
+         if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
+           {
+             t--;
+           }
+         /* Validate the type index.  Protect against illegal indices from
+            malformed type strings.  */
+         if ((t < 0) || (t >= work -> ntypes))
+           {
+             return (0);
+           }
+         while (work->nrepeats > 0 || --r >= 0)
+           {
+             tem = work -> typevec[t];
+             if (need_comma && PRINT_ARG_TYPES)
+               {
+                 string_append (declp, ", ");
+               }
+             if (!do_arg (work, &tem, &arg))
+               {
+                 return (0);
+               }
+             if (PRINT_ARG_TYPES)
+               {
+                 string_appends (declp, &arg);
+               }
+             string_delete (&arg);
+             need_comma = 1;
+           }
+       }
+      else
+       {
+         if (need_comma && PRINT_ARG_TYPES)
+           string_append (declp, ", ");
+         if (!do_arg (work, mangled, &arg))
+           return (0);
+         if (PRINT_ARG_TYPES)
+           string_appends (declp, &arg);
+         string_delete (&arg);
+         need_comma = 1;
+       }
+    }
+
+  if (**mangled == 'e')
+    {
+      (*mangled)++;
+      if (PRINT_ARG_TYPES)
+       {
+         if (need_comma)
+           {
+             string_append (declp, ",");
+           }
+         string_append (declp, "...");
+       }
+    }
+
+  if (PRINT_ARG_TYPES)
+    {
+      string_append (declp, ")");
+    }
+  return (1);
+}
+
+/* Like demangle_args, but for demangling the argument lists of function
+   and method pointers or references, not top-level declarations.  */
+
+static int
+demangle_nested_args (struct work_stuff *work, const char **mangled,
+                      string *declp)
+{
+  string* saved_previous_argument;
+  int result;
+  int saved_nrepeats;
+
+  /* The G++ name-mangling algorithm does not remember types on nested
+     argument lists, unless -fsquangling is used, and in that case the
+     type vector updated by remember_type is not used.  So, we turn
+     off remembering of types here.  */
+  ++work->forgetting_types;
+
+  /* For the repeat codes used with -fsquangling, we must keep track of
+     the last argument.  */
+  saved_previous_argument = work->previous_argument;
+  saved_nrepeats = work->nrepeats;
+  work->previous_argument = 0;
+  work->nrepeats = 0;
+
+  /* Actually demangle the arguments.  */
+  result = demangle_args (work, mangled, declp);
+
+  /* Restore the previous_argument field.  */
+  if (work->previous_argument)
+    {
+      string_delete (work->previous_argument);
+      free ((char *) work->previous_argument);
+    }
+  work->previous_argument = saved_previous_argument;
+  --work->forgetting_types;
+  work->nrepeats = saved_nrepeats;
+
+  return result;
+}
+
+static void
+demangle_function_name (struct work_stuff *work, const char **mangled,
+                        string *declp, const char *scan)
+{
+  size_t i;
+  string type;
+  const char *tem;
+
+  string_appendn (declp, (*mangled), scan - (*mangled));
+  string_need (declp, 1);
+  *(declp -> p) = '\0';
+
+  /* Consume the function name, including the "__" separating the name
+     from the signature.  We are guaranteed that SCAN points to the
+     separator.  */
+
+  (*mangled) = scan + 2;
+  /* We may be looking at an instantiation of a template function:
+     foo__Xt1t2_Ft3t4, where t1, t2, ... are template arguments and a
+     following _F marks the start of the function arguments.  Handle
+     the template arguments first. */
+
+  if (HP_DEMANGLING && (**mangled == 'X'))
+    {
+      demangle_arm_hp_template (work, mangled, 0, declp);
+      /* This leaves MANGLED pointing to the 'F' marking func args */
+    }
+
+  if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
+    {
+
+      /* See if we have an ARM style constructor or destructor operator.
+        If so, then just record it, clear the decl, and return.
+        We can't build the actual constructor/destructor decl until later,
+        when we recover the class name from the signature.  */
+
+      if (strcmp (declp -> b, "__ct") == 0)
+       {
+         work -> constructor += 1;
+         string_clear (declp);
+         return;
+       }
+      else if (strcmp (declp -> b, "__dt") == 0)
+       {
+         work -> destructor += 1;
+         string_clear (declp);
+         return;
+       }
+    }
+
+  if (declp->p - declp->b >= 3
+      && declp->b[0] == 'o'
+      && declp->b[1] == 'p'
+      && strchr (cplus_markers, declp->b[2]) != NULL)
+    {
+      /* see if it's an assignment expression */
+      if (declp->p - declp->b >= 10 /* op$assign_ */
+         && memcmp (declp->b + 3, "assign_", 7) == 0)
+       {
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             int len = declp->p - declp->b - 10;
+             if ((int) strlen (optable[i].in) == len
+                 && memcmp (optable[i].in, declp->b + 10, len) == 0)
+               {
+                 string_clear (declp);
+                 string_append (declp, "operator");
+                 string_append (declp, optable[i].out);
+                 string_append (declp, "=");
+                 break;
+               }
+           }
+       }
+      else
+       {
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             int len = declp->p - declp->b - 3;
+             if ((int) strlen (optable[i].in) == len
+                 && memcmp (optable[i].in, declp->b + 3, len) == 0)
+               {
+                 string_clear (declp);
+                 string_append (declp, "operator");
+                 string_append (declp, optable[i].out);
+                 break;
+               }
+           }
+       }
+    }
+  else if (declp->p - declp->b >= 5 && memcmp (declp->b, "type", 4) == 0
+          && strchr (cplus_markers, declp->b[4]) != NULL)
+    {
+      /* type conversion operator */
+      tem = declp->b + 5;
+      if (do_type (work, &tem, &type))
+       {
+         string_clear (declp);
+         string_append (declp, "operator ");
+         string_appends (declp, &type);
+         string_delete (&type);
+       }
+    }
+  else if (declp->b[0] == '_' && declp->b[1] == '_'
+          && declp->b[2] == 'o' && declp->b[3] == 'p')
+    {
+      /* ANSI.  */
+      /* type conversion operator.  */
+      tem = declp->b + 4;
+      if (do_type (work, &tem, &type))
+       {
+         string_clear (declp);
+         string_append (declp, "operator ");
+         string_appends (declp, &type);
+         string_delete (&type);
+       }
+    }
+  else if (declp->b[0] == '_' && declp->b[1] == '_'
+          && ISLOWER((unsigned char)declp->b[2])
+          && ISLOWER((unsigned char)declp->b[3]))
+    {
+      if (declp->b[4] == '\0')
+       {
+         /* Operator.  */
+         for (i = 0; i < ARRAY_SIZE (optable); i++)
+           {
+             if (strlen (optable[i].in) == 2
+                 && memcmp (optable[i].in, declp->b + 2, 2) == 0)
+               {
+                 string_clear (declp);
+                 string_append (declp, "operator");
+                 string_append (declp, optable[i].out);
+                 break;
+               }
+           }
+       }
+      else
+       {
+         if (declp->b[2] == 'a' && declp->b[5] == '\0')
+           {
+             /* Assignment.  */
+             for (i = 0; i < ARRAY_SIZE (optable); i++)
+               {
+                 if (strlen (optable[i].in) == 3
+                     && memcmp (optable[i].in, declp->b + 2, 3) == 0)
+                   {
+                     string_clear (declp);
+                     string_append (declp, "operator");
+                     string_append (declp, optable[i].out);
+                     break;
+                   }
+               }
+           }
+       }
+    }
+}
+
+/* a mini string-handling package */
+
+static void
+string_need (string *s, int n)
+{
+  int tem;
+
+  if (s->b == NULL)
+    {
+      if (n < 32)
+       {
+         n = 32;
+       }
+      s->p = s->b = XNEWVEC (char, n);
+      s->e = s->b + n;
+    }
+  else if (s->e - s->p < n)
+    {
+      tem = s->p - s->b;
+      n += tem;
+      n *= 2;
+      s->b = XRESIZEVEC (char, s->b, n);
+      s->p = s->b + tem;
+      s->e = s->b + n;
+    }
+}
+
+static void
+string_delete (string *s)
+{
+  if (s->b != NULL)
+    {
+      free (s->b);
+      s->b = s->e = s->p = NULL;
+    }
+}
+
+static void
+string_init (string *s)
+{
+  s->b = s->p = s->e = NULL;
+}
+
+static void
+string_clear (string *s)
+{
+  s->p = s->b;
+}
+
+#if 0
+
+static int
+string_empty (string *s)
+{
+  return (s->b == s->p);
+}
+
+#endif
+
+static void
+string_append (string *p, const char *s)
+{
+  int n;
+  if (s == NULL || *s == '\0')
+    return;
+  n = strlen (s);
+  string_need (p, n);
+  memcpy (p->p, s, n);
+  p->p += n;
+}
+
+static void
+string_appends (string *p, string *s)
+{
+  int n;
+
+  if (s->b != s->p)
+    {
+      n = s->p - s->b;
+      string_need (p, n);
+      memcpy (p->p, s->b, n);
+      p->p += n;
+    }
+}
+
+static void
+string_appendn (string *p, const char *s, int n)
+{
+  if (n != 0)
+    {
+      string_need (p, n);
+      memcpy (p->p, s, n);
+      p->p += n;
+    }
+}
+
+static void
+string_prepend (string *p, const char *s)
+{
+  if (s != NULL && *s != '\0')
+    {
+      string_prependn (p, s, strlen (s));
+    }
+}
+
+static void
+string_prepends (string *p, string *s)
+{
+  if (s->b != s->p)
+    {
+      string_prependn (p, s->b, s->p - s->b);
+    }
+}
+
+static void
+string_prependn (string *p, const char *s, int n)
+{
+  char *q;
+
+  if (n != 0)
+    {
+      string_need (p, n);
+      for (q = p->p - 1; q >= p->b; q--)
+       {
+         q[n] = q[0];
+       }
+      memcpy (p->b, s, n);
+      p->p += n;
+    }
+}
+
+static void
+string_append_template_idx (string *s, int idx)
+{
+  char buf[INTBUF_SIZE + 1 /* 'T' */];
+  sprintf(buf, "T%d", idx);
+  string_append (s, buf);
+}
diff --git a/libiberty/dyn-string.c b/libiberty/dyn-string.c
new file mode 100644 (file)
index 0000000..9de50ed
--- /dev/null
@@ -0,0 +1,397 @@
+/* An abstract string datatype.
+   Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+This file is part of GNU CC.
+   
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combined
+executable.)
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include "libiberty.h"
+#include "dyn-string.h"
+
+/* Performs in-place initialization of a dyn_string struct.  This
+   function can be used with a dyn_string struct on the stack or
+   embedded in another object.  The contents of of the string itself
+   are still dynamically allocated.  The string initially is capable
+   of holding at least SPACE characeters, including the terminating
+   NUL.  If SPACE is 0, it will silently be increated to 1.  
+
+   If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation
+   fails, returns 0.  Otherwise returns 1.  */
+
+int
+dyn_string_init (struct dyn_string *ds_struct_ptr, int space)
+{
+  /* We need at least one byte in which to store the terminating NUL.  */
+  if (space == 0)
+    space = 1;
+
+#ifdef RETURN_ON_ALLOCATION_FAILURE
+  ds_struct_ptr->s = (char *) malloc (space);
+  if (ds_struct_ptr->s == NULL)
+    return 0;
+#else
+  ds_struct_ptr->s = XNEWVEC (char, space);
+#endif
+  ds_struct_ptr->allocated = space;
+  ds_struct_ptr->length = 0;
+  ds_struct_ptr->s[0] = '\0';
+
+  return 1;
+}
+
+/* Create a new dynamic string capable of holding at least SPACE
+   characters, including the terminating NUL.  If SPACE is 0, it will
+   be silently increased to 1.  If RETURN_ON_ALLOCATION_FAILURE is
+   defined and memory allocation fails, returns NULL.  Otherwise
+   returns the newly allocated string.  */
+
+dyn_string_t 
+dyn_string_new (int space)
+{
+  dyn_string_t result;
+#ifdef RETURN_ON_ALLOCATION_FAILURE
+  result = (dyn_string_t) malloc (sizeof (struct dyn_string));
+  if (result == NULL)
+    return NULL;
+  if (!dyn_string_init (result, space))
+    {
+      free (result);
+      return NULL;
+    }
+#else
+  result = XNEW (struct dyn_string);
+  dyn_string_init (result, space);
+#endif
+  return result;
+}
+
+/* Free the memory used by DS.  */
+
+void 
+dyn_string_delete (dyn_string_t ds)
+{
+  free (ds->s);
+  free (ds);
+}
+
+/* Returns the contents of DS in a buffer allocated with malloc.  It
+   is the caller's responsibility to deallocate the buffer using free.
+   DS is then set to the empty string.  Deletes DS itself.  */
+
+char*
+dyn_string_release (dyn_string_t ds)
+{
+  /* Store the old buffer.  */
+  char* result = ds->s;
+  /* The buffer is no longer owned by DS.  */
+  ds->s = NULL;
+  /* Delete DS.  */
+  free (ds);
+  /* Return the old buffer.  */
+  return result;
+}
+
+/* Increase the capacity of DS so it can hold at least SPACE
+   characters, plus the terminating NUL.  This function will not (at
+   present) reduce the capacity of DS.  Returns DS on success. 
+
+   If RETURN_ON_ALLOCATION_FAILURE is defined and a memory allocation
+   operation fails, deletes DS and returns NULL.  */
+
+dyn_string_t 
+dyn_string_resize (dyn_string_t ds, int space)
+{
+  int new_allocated = ds->allocated;
+
+  /* Increase SPACE to hold the NUL termination.  */
+  ++space;
+
+  /* Increase allocation by factors of two.  */
+  while (space > new_allocated)
+    new_allocated *= 2;
+    
+  if (new_allocated != ds->allocated)
+    {
+      ds->allocated = new_allocated;
+      /* We actually need more space.  */
+#ifdef RETURN_ON_ALLOCATION_FAILURE
+      ds->s = (char *) realloc (ds->s, ds->allocated);
+      if (ds->s == NULL)
+       {
+         free (ds);
+         return NULL;
+       }
+#else
+      ds->s = XRESIZEVEC (char, ds->s, ds->allocated);
+#endif
+    }
+
+  return ds;
+}
+
+/* Sets the contents of DS to the empty string.  */
+
+void
+dyn_string_clear (dyn_string_t ds)
+{
+  /* A dyn_string always has room for at least the NUL terminator.  */
+  ds->s[0] = '\0';
+  ds->length = 0;
+}
+
+/* Makes the contents of DEST the same as the contents of SRC.  DEST
+   and SRC must be distinct.  Returns 1 on success.  On failure, if
+   RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0.  */
+
+int
+dyn_string_copy (dyn_string_t dest, dyn_string_t src)
+{
+  if (dest == src)
+    abort ();
+
+  /* Make room in DEST.  */
+  if (dyn_string_resize (dest, src->length) == NULL)
+    return 0;
+  /* Copy DEST into SRC.  */
+  strcpy (dest->s, src->s);
+  /* Update the size of DEST.  */
+  dest->length = src->length;
+  return 1;
+}
+
+/* Copies SRC, a NUL-terminated string, into DEST.  Returns 1 on
+   success.  On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST
+   and returns 0.  */
+
+int
+dyn_string_copy_cstr (dyn_string_t dest, const char *src)
+{
+  int length = strlen (src);
+  /* Make room in DEST.  */
+  if (dyn_string_resize (dest, length) == NULL)
+    return 0;
+  /* Copy DEST into SRC.  */
+  strcpy (dest->s, src);
+  /* Update the size of DEST.  */
+  dest->length = length;
+  return 1;
+}
+
+/* Inserts SRC at the beginning of DEST.  DEST is expanded as
+   necessary.  SRC and DEST must be distinct.  Returns 1 on success.
+   On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and
+   returns 0.  */
+
+int
+dyn_string_prepend (dyn_string_t dest, dyn_string_t src)
+{
+  return dyn_string_insert (dest, 0, src);
+}
+
+/* Inserts SRC, a NUL-terminated string, at the beginning of DEST.
+   DEST is expanded as necessary.  Returns 1 on success.  On failure,
+   if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */
+
+int
+dyn_string_prepend_cstr (dyn_string_t dest, const char *src)
+{
+  return dyn_string_insert_cstr (dest, 0, src);
+}
+
+/* Inserts SRC into DEST starting at position POS.  DEST is expanded
+   as necessary.  SRC and DEST must be distinct.  Returns 1 on
+   success.  On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST
+   and returns 0.  */
+
+int
+dyn_string_insert (dyn_string_t dest, int pos, dyn_string_t src)
+{
+  int i;
+
+  if (src == dest)
+    abort ();
+
+  if (dyn_string_resize (dest, dest->length + src->length) == NULL)
+    return 0;
+  /* Make room for the insertion.  Be sure to copy the NUL.  */
+  for (i = dest->length; i >= pos; --i)
+    dest->s[i + src->length] = dest->s[i];
+  /* Splice in the new stuff.  */
+  strncpy (dest->s + pos, src->s, src->length);
+  /* Compute the new length.  */
+  dest->length += src->length;
+  return 1;
+}
+
+/* Inserts SRC, a NUL-terminated string, into DEST starting at
+   position POS.  DEST is expanded as necessary.  Returns 1 on
+   success.  On failure, RETURN_ON_ALLOCATION_FAILURE, deletes DEST
+   and returns 0.  */
+
+int
+dyn_string_insert_cstr (dyn_string_t dest, int pos, const char *src)
+{
+  int i;
+  int length = strlen (src);
+
+  if (dyn_string_resize (dest, dest->length + length) == NULL)
+    return 0;
+  /* Make room for the insertion.  Be sure to copy the NUL.  */
+  for (i = dest->length; i >= pos; --i)
+    dest->s[i + length] = dest->s[i];
+  /* Splice in the new stuff.  */
+  strncpy (dest->s + pos, src, length);
+  /* Compute the new length.  */
+  dest->length += length;
+  return 1;
+}
+
+/* Inserts character C into DEST starting at position POS.  DEST is
+   expanded as necessary.  Returns 1 on success.  On failure,
+   RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0.  */
+
+int
+dyn_string_insert_char (dyn_string_t dest, int pos, int c)
+{
+  int i;
+
+  if (dyn_string_resize (dest, dest->length + 1) == NULL)
+    return 0;
+  /* Make room for the insertion.  Be sure to copy the NUL.  */
+  for (i = dest->length; i >= pos; --i)
+    dest->s[i + 1] = dest->s[i];
+  /* Add the new character.  */
+  dest->s[pos] = c;
+  /* Compute the new length.  */
+  ++dest->length;
+  return 1;
+}
+     
+/* Append S to DS, resizing DS if necessary.  Returns 1 on success.
+   On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and
+   returns 0.  */
+
+int
+dyn_string_append (dyn_string_t dest, dyn_string_t s)
+{
+  if (dyn_string_resize (dest, dest->length + s->length) == 0)
+    return 0;
+  strcpy (dest->s + dest->length, s->s);
+  dest->length += s->length;
+  return 1;
+}
+
+/* Append the NUL-terminated string S to DS, resizing DS if necessary.
+   Returns 1 on success.  On failure, if RETURN_ON_ALLOCATION_FAILURE,
+   deletes DEST and returns 0.  */
+
+int
+dyn_string_append_cstr (dyn_string_t dest, const char *s)
+{
+  int len = strlen (s);
+
+  /* The new length is the old length plus the size of our string, plus
+     one for the null at the end.  */
+  if (dyn_string_resize (dest, dest->length + len) == NULL)
+    return 0;
+  strcpy (dest->s + dest->length, s);
+  dest->length += len;
+  return 1;
+}
+
+/* Appends C to the end of DEST.  Returns 1 on success.  On failiure,
+   if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0.  */
+
+int
+dyn_string_append_char (dyn_string_t dest, int c)
+{
+  /* Make room for the extra character.  */
+  if (dyn_string_resize (dest, dest->length + 1) == NULL)
+    return 0;
+  /* Append the character; it will overwrite the old NUL.  */
+  dest->s[dest->length] = c;
+  /* Add a new NUL at the end.  */
+  dest->s[dest->length + 1] = '\0';
+  /* Update the length.  */
+  ++(dest->length);
+  return 1;
+}
+
+/* Sets the contents of DEST to the substring of SRC starting at START
+   and ending before END.  START must be less than or equal to END,
+   and both must be between zero and the length of SRC, inclusive.
+   Returns 1 on success.  On failure, if RETURN_ON_ALLOCATION_FAILURE,
+   deletes DEST and returns 0.  */
+
+int
+dyn_string_substring (dyn_string_t dest, dyn_string_t src,
+                      int start, int end)
+{
+  int i;
+  int length = end - start;
+
+  if (start > end || start > src->length || end > src->length)
+    abort ();
+
+  /* Make room for the substring.  */
+  if (dyn_string_resize (dest, length) == NULL)
+    return 0;
+  /* Copy the characters in the substring,  */
+  for (i = length; --i >= 0; )
+    dest->s[i] = src->s[start + i];
+  /* NUL-terimate the result.  */
+  dest->s[length] = '\0';
+  /* Record the length of the substring.  */
+  dest->length = length;
+
+  return 1;
+}
+
+/* Returns non-zero if DS1 and DS2 have the same contents.  */
+
+int
+dyn_string_eq (dyn_string_t ds1, dyn_string_t ds2)
+{
+  /* If DS1 and DS2 have different lengths, they must not be the same.  */
+  if (ds1->length != ds2->length)
+    return 0;
+  else
+    return !strcmp (ds1->s, ds2->s);
+}
diff --git a/libiberty/fdmatch.c b/libiberty/fdmatch.c
new file mode 100644 (file)
index 0000000..f613cb3
--- /dev/null
@@ -0,0 +1,68 @@
+/* Compare two open file descriptors to see if they refer to the same file.
+   Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+
+/*
+
+@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2})
+
+Check to see if two open file descriptors refer to the same file.
+This is useful, for example, when we have an open file descriptor for
+an unnamed file, and the name of a file that we believe to correspond
+to that fd.  This can happen when we are exec'd with an already open
+file (@code{stdout} for example) or from the SVR4 @file{/proc} calls
+that return open file descriptors for mapped address spaces.  All we
+have to do is open the file by name and check the two file descriptors
+for a match, which is done by comparing major and minor device numbers
+and inode numbers.
+
+@end deftypefn
+
+BUGS
+
+       (FIXME: does this work for networks?)
+       It works for NFS, which assigns a device number to each mount.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+
+int fdmatch (int fd1, int fd2)
+{
+  struct stat sbuf1;
+  struct stat sbuf2;
+
+  if ((fstat (fd1, &sbuf1) == 0) &&
+      (fstat (fd2, &sbuf2) == 0) &&
+      (sbuf1.st_dev == sbuf2.st_dev) &&
+      (sbuf1.st_ino == sbuf2.st_ino))
+    {
+      return (1);
+    }
+  else
+    {
+      return (0);
+    }
+}
diff --git a/libiberty/ffs.c b/libiberty/ffs.c
new file mode 100644 (file)
index 0000000..603cbe8
--- /dev/null
@@ -0,0 +1,26 @@
+/* ffs -- Find the first bit set in the parameter
+
+@deftypefn Supplemental int ffs (int @var{valu})
+
+Find the first (least significant) bit set in @var{valu}.  Bits are
+numbered from right to left, starting with bit 1 (corresponding to the
+value 1).  If @var{valu} is zero, zero is returned.
+
+@end deftypefn
+
+*/
+
+int
+ffs (register int valu)
+{
+  register int bit;
+
+  if (valu == 0)
+    return 0;
+
+  for (bit = 1; !(valu & 1); bit++)
+       valu >>= 1;
+
+  return bit;
+}
+
diff --git a/libiberty/fibheap.c b/libiberty/fibheap.c
new file mode 100644 (file)
index 0000000..c032149
--- /dev/null
@@ -0,0 +1,478 @@
+/* A Fibonacci heap datatype.
+   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Daniel Berlin (dan@cgsoftware.com).
+   
+This file is part of GNU CC.
+   
+GNU CC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#include "libiberty.h"
+#include "fibheap.h"
+
+
+#define FIBHEAPKEY_MIN LONG_MIN
+
+static void fibheap_ins_root (fibheap_t, fibnode_t);
+static void fibheap_rem_root (fibheap_t, fibnode_t);
+static void fibheap_consolidate (fibheap_t);
+static void fibheap_link (fibheap_t, fibnode_t, fibnode_t);
+static void fibheap_cut (fibheap_t, fibnode_t, fibnode_t);
+static void fibheap_cascading_cut (fibheap_t, fibnode_t);
+static fibnode_t fibheap_extr_min_node (fibheap_t);
+static int fibheap_compare (fibheap_t, fibnode_t, fibnode_t);
+static int fibheap_comp_data (fibheap_t, fibheapkey_t, void *, fibnode_t);
+static fibnode_t fibnode_new (void);
+static void fibnode_insert_after (fibnode_t, fibnode_t);
+#define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b)
+static fibnode_t fibnode_remove (fibnode_t);
+
+\f
+/* Create a new fibonacci heap.  */
+fibheap_t
+fibheap_new (void)
+{
+  return (fibheap_t) xcalloc (1, sizeof (struct fibheap));
+}
+
+/* Create a new fibonacci heap node.  */
+static fibnode_t
+fibnode_new (void)
+{
+  fibnode_t node;
+
+  node = (fibnode_t) xcalloc (1, sizeof *node);
+  node->left = node;
+  node->right = node;
+
+  return node;
+}
+
+static inline int
+fibheap_compare (fibheap_t heap ATTRIBUTE_UNUSED, fibnode_t a, fibnode_t b)
+{
+  if (a->key < b->key)
+    return -1;
+  if (a->key > b->key)
+    return 1;
+  return 0;
+}
+
+static inline int
+fibheap_comp_data (fibheap_t heap, fibheapkey_t key, void *data, fibnode_t b)
+{
+  struct fibnode a;
+
+  a.key = key;
+  a.data = data;
+
+  return fibheap_compare (heap, &a, b);
+}
+
+/* Insert DATA, with priority KEY, into HEAP.  */
+fibnode_t
+fibheap_insert (fibheap_t heap, fibheapkey_t key, void *data)
+{
+  fibnode_t node;
+
+  /* Create the new node.  */
+  node = fibnode_new ();
+
+  /* Set the node's data.  */
+  node->data = data;
+  node->key = key;
+
+  /* Insert it into the root list.  */
+  fibheap_ins_root (heap, node);
+
+  /* If their was no minimum, or this key is less than the min,
+     it's the new min.  */
+  if (heap->min == NULL || node->key < heap->min->key)
+    heap->min = node;
+
+  heap->nodes++;
+
+  return node;
+}
+
+/* Return the data of the minimum node (if we know it).  */
+void *
+fibheap_min (fibheap_t heap)
+{
+  /* If there is no min, we can't easily return it.  */
+  if (heap->min == NULL)
+    return NULL;
+  return heap->min->data;
+}
+
+/* Return the key of the minimum node (if we know it).  */
+fibheapkey_t
+fibheap_min_key (fibheap_t heap)
+{
+  /* If there is no min, we can't easily return it.  */
+  if (heap->min == NULL)
+    return 0;
+  return heap->min->key;
+}
+
+/* Union HEAPA and HEAPB into a new heap.  */
+fibheap_t
+fibheap_union (fibheap_t heapa, fibheap_t heapb)
+{
+  fibnode_t a_root, b_root, temp;
+
+  /* If one of the heaps is empty, the union is just the other heap.  */
+  if ((a_root = heapa->root) == NULL)
+    {
+      free (heapa);
+      return heapb;
+    }
+  if ((b_root = heapb->root) == NULL)
+    {
+      free (heapb);
+      return heapa;
+    }
+
+  /* Merge them to the next nodes on the opposite chain.  */
+  a_root->left->right = b_root;
+  b_root->left->right = a_root;
+  temp = a_root->left;
+  a_root->left = b_root->left;
+  b_root->left = temp;
+  heapa->nodes += heapb->nodes;
+
+  /* And set the new minimum, if it's changed.  */
+  if (fibheap_compare (heapa, heapb->min, heapa->min) < 0)
+    heapa->min = heapb->min;
+
+  free (heapb);
+  return heapa;
+}
+
+/* Extract the data of the minimum node from HEAP.  */
+void *
+fibheap_extract_min (fibheap_t heap)
+{
+  fibnode_t z;
+  void *ret = NULL;
+
+  /* If we don't have a min set, it means we have no nodes.  */
+  if (heap->min != NULL)
+    {
+      /* Otherwise, extract the min node, free the node, and return the
+         node's data.  */
+      z = fibheap_extr_min_node (heap);
+      ret = z->data;
+      free (z);
+    }
+
+  return ret;
+}
+
+/* Replace both the KEY and the DATA associated with NODE.  */
+void *
+fibheap_replace_key_data (fibheap_t heap, fibnode_t node,
+                          fibheapkey_t key, void *data)
+{
+  void *odata;
+  fibheapkey_t okey;
+  fibnode_t y;
+
+  /* If we wanted to, we could actually do a real increase by redeleting and
+     inserting. However, this would require O (log n) time. So just bail out
+     for now.  */
+  if (fibheap_comp_data (heap, key, data, node) > 0)
+    return NULL;
+
+  odata = node->data;
+  okey = node->key;
+  node->data = data;
+  node->key = key;
+  y = node->parent;
+
+  if (okey == key)
+    return odata;
+
+  /* These two compares are specifically <= 0 to make sure that in the case
+     of equality, a node we replaced the data on, becomes the new min.  This
+     is needed so that delete's call to extractmin gets the right node.  */
+  if (y != NULL && fibheap_compare (heap, node, y) <= 0)
+    {
+      fibheap_cut (heap, node, y);
+      fibheap_cascading_cut (heap, y);
+    }
+
+  if (fibheap_compare (heap, node, heap->min) <= 0)
+    heap->min = node;
+
+  return odata;
+}
+
+/* Replace the DATA associated with NODE.  */
+void *
+fibheap_replace_data (fibheap_t heap, fibnode_t node, void *data)
+{
+  return fibheap_replace_key_data (heap, node, node->key, data);
+}
+
+/* Replace the KEY associated with NODE.  */
+fibheapkey_t
+fibheap_replace_key (fibheap_t heap, fibnode_t node, fibheapkey_t key)
+{
+  int okey = node->key;
+  fibheap_replace_key_data (heap, node, key, node->data);
+  return okey;
+}
+
+/* Delete NODE from HEAP.  */
+void *
+fibheap_delete_node (fibheap_t heap, fibnode_t node)
+{
+  void *ret = node->data;
+
+  /* To perform delete, we just make it the min key, and extract.  */
+  fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
+  fibheap_extract_min (heap);
+
+  return ret;
+}
+
+/* Delete HEAP.  */
+void
+fibheap_delete (fibheap_t heap)
+{
+  while (heap->min != NULL)
+    free (fibheap_extr_min_node (heap));
+
+  free (heap);
+}
+
+/* Determine if HEAP is empty.  */
+int
+fibheap_empty (fibheap_t heap)
+{
+  return heap->nodes == 0;
+}
+
+/* Extract the minimum node of the heap.  */
+static fibnode_t
+fibheap_extr_min_node (fibheap_t heap)
+{
+  fibnode_t ret = heap->min;
+  fibnode_t x, y, orig;
+
+  /* Attach the child list of the minimum node to the root list of the heap.
+     If there is no child list, we don't do squat.  */
+  for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y)
+    {
+      if (orig == NULL)
+       orig = x;
+      y = x->right;
+      x->parent = NULL;
+      fibheap_ins_root (heap, x);
+    }
+
+  /* Remove the old root.  */
+  fibheap_rem_root (heap, ret);
+  heap->nodes--;
+
+  /* If we are left with no nodes, then the min is NULL.  */
+  if (heap->nodes == 0)
+    heap->min = NULL;
+  else
+    {
+      /* Otherwise, consolidate to find new minimum, as well as do the reorg
+         work that needs to be done.  */
+      heap->min = ret->right;
+      fibheap_consolidate (heap);
+    }
+
+  return ret;
+}
+
+/* Insert NODE into the root list of HEAP.  */
+static void
+fibheap_ins_root (fibheap_t heap, fibnode_t node)
+{
+  /* If the heap is currently empty, the new node becomes the singleton
+     circular root list.  */
+  if (heap->root == NULL)
+    {
+      heap->root = node;
+      node->left = node;
+      node->right = node;
+      return;
+    }
+
+  /* Otherwise, insert it in the circular root list between the root
+     and it's right node.  */
+  fibnode_insert_after (heap->root, node);
+}
+
+/* Remove NODE from the rootlist of HEAP.  */
+static void
+fibheap_rem_root (fibheap_t heap, fibnode_t node)
+{
+  if (node->left == node)
+    heap->root = NULL;
+  else
+    heap->root = fibnode_remove (node);
+}
+
+/* Consolidate the heap.  */
+static void
+fibheap_consolidate (fibheap_t heap)
+{
+  fibnode_t a[1 + 8 * sizeof (long)];
+  fibnode_t w;
+  fibnode_t y;
+  fibnode_t x;
+  int i;
+  int d;
+  int D;
+
+  D = 1 + 8 * sizeof (long);
+
+  memset (a, 0, sizeof (fibnode_t) * D);
+
+  while ((w = heap->root) != NULL)
+    {
+      x = w;
+      fibheap_rem_root (heap, w);
+      d = x->degree;
+      while (a[d] != NULL)
+       {
+         y = a[d];
+         if (fibheap_compare (heap, x, y) > 0)
+           {
+             fibnode_t temp;
+             temp = x;
+             x = y;
+             y = temp;
+           }
+         fibheap_link (heap, y, x);
+         a[d] = NULL;
+         d++;
+       }
+      a[d] = x;
+    }
+  heap->min = NULL;
+  for (i = 0; i < D; i++)
+    if (a[i] != NULL)
+      {
+       fibheap_ins_root (heap, a[i]);
+       if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0)
+         heap->min = a[i];
+      }
+}
+
+/* Make NODE a child of PARENT.  */
+static void
+fibheap_link (fibheap_t heap ATTRIBUTE_UNUSED,
+              fibnode_t node, fibnode_t parent)
+{
+  if (parent->child == NULL)
+    parent->child = node;
+  else
+    fibnode_insert_before (parent->child, node);
+  node->parent = parent;
+  parent->degree++;
+  node->mark = 0;
+}
+
+/* Remove NODE from PARENT's child list.  */
+static void
+fibheap_cut (fibheap_t heap, fibnode_t node, fibnode_t parent)
+{
+  fibnode_remove (node);
+  parent->degree--;
+  fibheap_ins_root (heap, node);
+  node->parent = NULL;
+  node->mark = 0;
+}
+
+static void
+fibheap_cascading_cut (fibheap_t heap, fibnode_t y)
+{
+  fibnode_t z;
+
+  while ((z = y->parent) != NULL)
+    {
+      if (y->mark == 0)
+       {
+         y->mark = 1;
+         return;
+       }
+      else
+       {
+         fibheap_cut (heap, y, z);
+         y = z;
+       }
+    }
+}
+
+static void
+fibnode_insert_after (fibnode_t a, fibnode_t b)
+{
+  if (a == a->right)
+    {
+      a->right = b;
+      a->left = b;
+      b->right = a;
+      b->left = a;
+    }
+  else
+    {
+      b->right = a->right;
+      a->right->left = b;
+      a->right = b;
+      b->left = a;
+    }
+}
+
+static fibnode_t
+fibnode_remove (fibnode_t node)
+{
+  fibnode_t ret;
+
+  if (node == node->left)
+    ret = NULL;
+  else
+    ret = node->left;
+
+  if (node->parent != NULL && node->parent->child == node)
+    node->parent->child = ret;
+
+  node->right->left = node->left;
+  node->left->right = node->right;
+
+  node->parent = NULL;
+  node->left = node;
+  node->right = node;
+
+  return ret;
+}
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
new file mode 100644 (file)
index 0000000..0a4d0d8
--- /dev/null
@@ -0,0 +1,78 @@
+/* File name comparison routine.
+
+   Copyright (C) 2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "filenames.h"
+#include "safe-ctype.h"
+
+/*
+
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what @code{strcmp}
+would return.  In other words, it returns a negative value if @var{s1}
+is less than @var{s2}, or a positive value if @var{s2} is greater than
+@var{s2}.
+
+This function does not normalize file names.  As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
+*/
+
+int
+filename_cmp (const char *s1, const char *s2)
+{
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+  return strcmp(s1, s2);
+#else
+  for (;;)
+    {
+      int c1 = TOLOWER (*s1);
+      int c2 = TOLOWER (*s2);
+
+      /* On DOS-based file systems, the '/' and the '\' are equivalent.  */
+      if (c1 == '/')
+        c1 = '\\';
+      if (c2 == '/')
+        c2 = '\\';
+
+      if (c1 != c2)
+        return (c1 - c2);
+
+      if (c1 == '\0')
+        return 0;
+
+      s1++;
+      s2++;
+    }
+#endif
+}
+
diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c
new file mode 100644 (file)
index 0000000..cbf13ea
--- /dev/null
@@ -0,0 +1,759 @@
+/* IEEE floating point support routines, for GDB, the GNU Debugger.
+   Copyright 1991, 1994, 1999, 2000, 2003, 2005, 2006
+   Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This is needed to pick up the NAN macro on some systems.  */
+#define _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* On some platforms, <float.h> provides DBL_QNAN.  */
+#ifdef STDC_HEADERS
+#include <float.h>
+#endif
+
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "floatformat.h"
+
+#ifndef INFINITY
+#ifdef HUGE_VAL
+#define INFINITY HUGE_VAL
+#else
+#define INFINITY (1.0 / 0.0)
+#endif
+#endif
+
+#ifndef NAN
+#ifdef DBL_QNAN
+#define NAN DBL_QNAN
+#else
+#define NAN (0.0 / 0.0)
+#endif
+#endif
+
+static int mant_bits_set (const struct floatformat *, const unsigned char *);
+static unsigned long get_field (const unsigned char *,
+                                enum floatformat_byteorders,
+                                unsigned int,
+                                unsigned int,
+                                unsigned int);
+static int floatformat_always_valid (const struct floatformat *fmt,
+                                     const void *from);
+
+static int
+floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
+                          const void *from ATTRIBUTE_UNUSED)
+{
+  return 1;
+}
+
+/* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
+   going to bother with trying to muck around with whether it is defined in
+   a system header, what we do if not, etc.  */
+#define FLOATFORMAT_CHAR_BIT 8
+
+/* floatformats for IEEE single and double, big and little endian.  */
+const struct floatformat floatformat_ieee_single_big =
+{
+  floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
+  floatformat_intbit_no,
+  "floatformat_ieee_single_big",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ieee_single_little =
+{
+  floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
+  floatformat_intbit_no,
+  "floatformat_ieee_single_little",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ieee_double_big =
+{
+  floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_ieee_double_big",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ieee_double_little =
+{
+  floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_ieee_double_little",
+  floatformat_always_valid,
+  NULL
+};
+
+/* floatformat for IEEE double, little endian byte order, with big endian word
+   ordering, as on the ARM.  */
+
+const struct floatformat floatformat_ieee_double_littlebyte_bigword =
+{
+  floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_ieee_double_littlebyte_bigword",
+  floatformat_always_valid,
+  NULL
+};
+
+/* floatformat for VAX.  Not quite IEEE, but close enough.  */
+
+const struct floatformat floatformat_vax_f =
+{
+  floatformat_vax, 32, 0, 1, 8, 129, 0, 9, 23,
+  floatformat_intbit_no,
+  "floatformat_vax_f",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_vax_d =
+{
+  floatformat_vax, 64, 0, 1, 8, 129, 0, 9, 55,
+  floatformat_intbit_no,
+  "floatformat_vax_d",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_vax_g =
+{
+  floatformat_vax, 64, 0, 1, 11, 1025, 0, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_vax_g",
+  floatformat_always_valid,
+  NULL
+};
+
+static int floatformat_i387_ext_is_valid (const struct floatformat *fmt,
+                                         const void *from);
+
+static int
+floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from)
+{
+  /* In the i387 double-extended format, if the exponent is all ones,
+     then the integer bit must be set.  If the exponent is neither 0
+     nor ~0, the intbit must also be set.  Only if the exponent is
+     zero can it be zero, and then it must be zero.  */
+  unsigned long exponent, int_bit;
+  const unsigned char *ufrom = (const unsigned char *) from;
+
+  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
+                       fmt->exp_start, fmt->exp_len);
+  int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
+                      fmt->man_start, 1);
+
+  if ((exponent == 0) != (int_bit == 0))
+    return 0;
+  else
+    return 1;
+}
+
+const struct floatformat floatformat_i387_ext =
+{
+  floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
+  floatformat_intbit_yes,
+  "floatformat_i387_ext",
+  floatformat_i387_ext_is_valid,
+  NULL
+};
+const struct floatformat floatformat_m68881_ext =
+{
+  /* Note that the bits from 16 to 31 are unused.  */
+  floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
+  floatformat_intbit_yes,
+  "floatformat_m68881_ext",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_i960_ext =
+{
+  /* Note that the bits from 0 to 15 are unused.  */
+  floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
+  floatformat_intbit_yes,
+  "floatformat_i960_ext",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_m88110_ext =
+{
+  floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
+  floatformat_intbit_yes,
+  "floatformat_m88110_ext",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_m88110_harris_ext =
+{
+  /* Harris uses raw format 128 bytes long, but the number is just an ieee
+     double, and the last 64 bits are wasted. */
+  floatformat_big,128, 0, 1, 11,  0x3ff,  0x7ff, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_m88110_ext_harris",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_arm_ext_big =
+{
+  /* Bits 1 to 16 are unused.  */
+  floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
+  floatformat_intbit_yes,
+  "floatformat_arm_ext_big",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_arm_ext_littlebyte_bigword =
+{
+  /* Bits 1 to 16 are unused.  */
+  floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
+  floatformat_intbit_yes,
+  "floatformat_arm_ext_littlebyte_bigword",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ia64_spill_big =
+{
+  floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
+  floatformat_intbit_yes,
+  "floatformat_ia64_spill_big",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ia64_spill_little =
+{
+  floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
+  floatformat_intbit_yes,
+  "floatformat_ia64_spill_little",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ia64_quad_big =
+{
+  floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
+  floatformat_intbit_no,
+  "floatformat_ia64_quad_big",
+  floatformat_always_valid,
+  NULL
+};
+const struct floatformat floatformat_ia64_quad_little =
+{
+  floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
+  floatformat_intbit_no,
+  "floatformat_ia64_quad_little",
+  floatformat_always_valid,
+  NULL
+};
+
+static int
+floatformat_ibm_long_double_is_valid (const struct floatformat *fmt,
+                                     const void *from)
+{
+  const unsigned char *ufrom = (const unsigned char *) from;
+  const struct floatformat *hfmt = fmt->split_half;
+  long top_exp, bot_exp;
+  int top_nan = 0;
+
+  top_exp = get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
+                      hfmt->exp_start, hfmt->exp_len);
+  bot_exp = get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize,
+                      hfmt->exp_start, hfmt->exp_len);
+
+  if ((unsigned long) top_exp == hfmt->exp_nan)
+    top_nan = mant_bits_set (hfmt, ufrom);
+
+  /* A NaN is valid with any low part.  */
+  if (top_nan)
+    return 1;
+
+  /* An infinity, zero or denormal requires low part 0 (positive or
+     negative).  */
+  if ((unsigned long) top_exp == hfmt->exp_nan || top_exp == 0)
+    {
+      if (bot_exp != 0)
+       return 0;
+
+      return !mant_bits_set (hfmt, ufrom + 8);
+    }
+
+  /* The top part is now a finite normal value.  The long double value
+     is the sum of the two parts, and the top part must equal the
+     result of rounding the long double value to nearest double.  Thus
+     the bottom part must be <= 0.5ulp of the top part in absolute
+     value, and if it is < 0.5ulp then the long double is definitely
+     valid.  */
+  if (bot_exp < top_exp - 53)
+    return 1;
+  if (bot_exp > top_exp - 53 && bot_exp != 0)
+    return 0;
+  if (bot_exp == 0)
+    {
+      /* The bottom part is 0 or denormal.  Determine which, and if
+        denormal the first two set bits.  */
+      int first_bit = -1, second_bit = -1, cur_bit;
+      for (cur_bit = 0; (unsigned int) cur_bit < hfmt->man_len; cur_bit++)
+       if (get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize,
+                      hfmt->man_start + cur_bit, 1))
+         {
+           if (first_bit == -1)
+             first_bit = cur_bit;
+           else
+             {
+               second_bit = cur_bit;
+               break;
+             }
+         }
+      /* Bottom part 0 is OK.  */
+      if (first_bit == -1)
+       return 1;
+      /* The real exponent of the bottom part is -first_bit.  */
+      if (-first_bit < top_exp - 53)
+       return 1;
+      if (-first_bit > top_exp - 53)
+       return 0;
+      /* The bottom part is at least 0.5ulp of the top part.  For this
+        to be OK, the bottom part must be exactly 0.5ulp (i.e. no
+        more bits set) and the top part must have last bit 0.  */
+      if (second_bit != -1)
+       return 0;
+      return !get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
+                        hfmt->man_start + hfmt->man_len - 1, 1);
+    }
+  else
+    {
+      /* The bottom part is at least 0.5ulp of the top part.  For this
+        to be OK, it must be exactly 0.5ulp (i.e. no explicit bits
+        set) and the top part must have last bit 0.  */
+      if (get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
+                    hfmt->man_start + hfmt->man_len - 1, 1))
+       return 0;
+      return !mant_bits_set (hfmt, ufrom + 8);
+    }
+}
+
+const struct floatformat floatformat_ibm_long_double =
+{
+  floatformat_big, 128, 0, 1, 11, 1023, 2047, 12, 52,
+  floatformat_intbit_no,
+  "floatformat_ibm_long_double",
+  floatformat_ibm_long_double_is_valid,
+  &floatformat_ieee_double_big
+};
+\f
+
+#ifndef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+/* Return 1 if any bits are explicitly set in the mantissa of UFROM,
+   format FMT, 0 otherwise.  */
+static int
+mant_bits_set (const struct floatformat *fmt, const unsigned char *ufrom)
+{
+  unsigned int mant_bits, mant_off;
+  int mant_bits_left;
+
+  mant_off = fmt->man_start;
+  mant_bits_left = fmt->man_len;
+  while (mant_bits_left > 0)
+    {
+      mant_bits = min (mant_bits_left, 32);
+
+      if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
+                    mant_off, mant_bits) != 0)
+       return 1;
+
+      mant_off += mant_bits;
+      mant_bits_left -= mant_bits;
+    }
+  return 0;
+}
+
+/* Extract a field which starts at START and is LEN bits long.  DATA and
+   TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
+static unsigned long
+get_field (const unsigned char *data, enum floatformat_byteorders order,
+           unsigned int total_len, unsigned int start, unsigned int len)
+{
+  unsigned long result = 0;
+  unsigned int cur_byte;
+  int lo_bit, hi_bit, cur_bitshift = 0;
+  int nextbyte = (order == floatformat_little) ? 1 : -1;
+
+  /* Start is in big-endian bit order!  Fix that first.  */
+  start = total_len - (start + len);
+
+  /* Start at the least significant part of the field.  */
+  if (order == floatformat_little)
+    cur_byte = start / FLOATFORMAT_CHAR_BIT;
+  else
+    cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
+
+  lo_bit = start % FLOATFORMAT_CHAR_BIT;
+  hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
+  
+  do
+    {
+      unsigned int shifted = *(data + cur_byte) >> lo_bit;
+      unsigned int bits = hi_bit - lo_bit;
+      unsigned int mask = (1 << bits) - 1;
+      result |= (shifted & mask) << cur_bitshift;
+      len -= bits;
+      cur_bitshift += bits;
+      cur_byte += nextbyte;
+      lo_bit = 0;
+      hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
+    }
+  while (len != 0);
+
+  return result;
+}
+  
+/* Convert from FMT to a double.
+   FROM is the address of the extended float.
+   Store the double in *TO.  */
+
+void
+floatformat_to_double (const struct floatformat *fmt,
+                       const void *from, double *to)
+{
+  const unsigned char *ufrom = (const unsigned char *) from;
+  double dto;
+  long exponent;
+  unsigned long mant;
+  unsigned int mant_bits, mant_off;
+  int mant_bits_left;
+  int special_exponent;                /* It's a NaN, denorm or zero */
+
+  /* Split values are not handled specially, since the top half has
+     the correctly rounded double value (in the only supported case of
+     split values).  */
+
+  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
+                       fmt->exp_start, fmt->exp_len);
+
+  /* If the exponent indicates a NaN, we don't have information to
+     decide what to do.  So we handle it like IEEE, except that we
+     don't try to preserve the type of NaN.  FIXME.  */
+  if ((unsigned long) exponent == fmt->exp_nan)
+    {
+      int nan = mant_bits_set (fmt, ufrom);
+
+      /* On certain systems (such as GNU/Linux), the use of the
+        INFINITY macro below may generate a warning that can not be
+        silenced due to a bug in GCC (PR preprocessor/11931).  The
+        preprocessor fails to recognise the __extension__ keyword in
+        conjunction with the GNU/C99 extension for hexadecimal
+        floating point constants and will issue a warning when
+        compiling with -pedantic.  */
+      if (nan)
+       dto = NAN;
+      else
+       dto = INFINITY;
+
+      if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
+       dto = -dto;
+
+      *to = dto;
+
+      return;
+    }
+
+  mant_bits_left = fmt->man_len;
+  mant_off = fmt->man_start;
+  dto = 0.0;
+
+  special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
+
+  /* Don't bias zero's, denorms or NaNs.  */
+  if (!special_exponent)
+    exponent -= fmt->exp_bias;
+
+  /* Build the result algebraically.  Might go infinite, underflow, etc;
+     who cares. */
+
+  /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
+     increment the exponent by one to account for the integer bit.  */
+
+  if (!special_exponent)
+    {
+      if (fmt->intbit == floatformat_intbit_no)
+       dto = ldexp (1.0, exponent);
+      else
+       exponent++;
+    }
+
+  while (mant_bits_left > 0)
+    {
+      mant_bits = min (mant_bits_left, 32);
+
+      mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
+                        mant_off, mant_bits);
+
+      /* Handle denormalized numbers.  FIXME: What should we do for
+        non-IEEE formats?  */
+      if (special_exponent && exponent == 0 && mant != 0)
+       dto += ldexp ((double)mant,
+                     (- fmt->exp_bias
+                      - mant_bits
+                      - (mant_off - fmt->man_start)
+                      + 1));
+      else
+       dto += ldexp ((double)mant, exponent - mant_bits);
+      if (exponent != 0)
+       exponent -= mant_bits;
+      mant_off += mant_bits;
+      mant_bits_left -= mant_bits;
+    }
+
+  /* Negate it if negative.  */
+  if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
+    dto = -dto;
+  *to = dto;
+}
+\f
+static void put_field (unsigned char *, enum floatformat_byteorders,
+                       unsigned int,
+                       unsigned int,
+                       unsigned int,
+                       unsigned long);
+
+/* Set a field which starts at START and is LEN bits long.  DATA and
+   TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
+static void
+put_field (unsigned char *data, enum floatformat_byteorders order,
+           unsigned int total_len, unsigned int start, unsigned int len,
+           unsigned long stuff_to_put)
+{
+  unsigned int cur_byte;
+  int lo_bit, hi_bit;
+  int nextbyte = (order == floatformat_little) ? 1 : -1;
+
+  /* Start is in big-endian bit order!  Fix that first.  */
+  start = total_len - (start + len);
+
+  /* Start at the least significant part of the field.  */
+  if (order == floatformat_little)
+    cur_byte = start / FLOATFORMAT_CHAR_BIT;
+  else
+    cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
+
+  lo_bit = start % FLOATFORMAT_CHAR_BIT;
+  hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
+  
+  do
+    {
+      unsigned char *byte_ptr = data + cur_byte;
+      unsigned int bits = hi_bit - lo_bit;
+      unsigned int mask = ((1 << bits) - 1) << lo_bit;
+      *byte_ptr = (*byte_ptr & ~mask) | ((stuff_to_put << lo_bit) & mask);
+      stuff_to_put >>= bits;
+      len -= bits;
+      cur_byte += nextbyte;
+      lo_bit = 0;
+      hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
+    }
+  while (len != 0);
+}
+
+/* The converse: convert the double *FROM to an extended float
+   and store where TO points.  Neither FROM nor TO have any alignment
+   restrictions.  */
+
+void
+floatformat_from_double (const struct floatformat *fmt,
+                         const double *from, void *to)
+{
+  double dfrom;
+  int exponent;
+  double mant;
+  unsigned int mant_bits, mant_off;
+  int mant_bits_left;
+  unsigned char *uto = (unsigned char *) to;
+
+  dfrom = *from;
+  memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
+
+  /* Split values are not handled specially, since a bottom half of
+     zero is correct for any value representable as double (in the
+     only supported case of split values).  */
+
+  /* If negative, set the sign bit.  */
+  if (dfrom < 0)
+    {
+      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
+      dfrom = -dfrom;
+    }
+
+  if (dfrom == 0)
+    {
+      /* 0.0.  */
+      return;
+    }
+
+  if (dfrom != dfrom)
+    {
+      /* NaN.  */
+      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
+                fmt->exp_len, fmt->exp_nan);
+      /* Be sure it's not infinity, but NaN value is irrelevant.  */
+      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
+                32, 1);
+      return;
+    }
+
+  if (dfrom + dfrom == dfrom)
+    {
+      /* This can only happen for an infinite value (or zero, which we
+        already handled above).  */
+      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
+                fmt->exp_len, fmt->exp_nan);
+      return;
+    }
+
+  mant = frexp (dfrom, &exponent);
+  if (exponent + fmt->exp_bias - 1 > 0)
+    put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
+              fmt->exp_len, exponent + fmt->exp_bias - 1);
+  else
+    {
+      /* Handle a denormalized number.  FIXME: What should we do for
+        non-IEEE formats?  */
+      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
+                fmt->exp_len, 0);
+      mant = ldexp (mant, exponent + fmt->exp_bias - 1);
+    }
+
+  mant_bits_left = fmt->man_len;
+  mant_off = fmt->man_start;
+  while (mant_bits_left > 0)
+    {
+      unsigned long mant_long;
+      mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
+
+      mant *= 4294967296.0;
+      mant_long = (unsigned long)mant;
+      mant -= mant_long;
+
+      /* If the integer bit is implicit, and we are not creating a
+        denormalized number, then we need to discard it.  */
+      if ((unsigned int) mant_bits_left == fmt->man_len
+         && fmt->intbit == floatformat_intbit_no
+         && exponent + fmt->exp_bias - 1 > 0)
+       {
+         mant_long &= 0x7fffffff;
+         mant_bits -= 1;
+       }
+      else if (mant_bits < 32)
+       {
+         /* The bits we want are in the most significant MANT_BITS bits of
+            mant_long.  Move them to the least significant.  */
+         mant_long >>= 32 - mant_bits;
+       }
+
+      put_field (uto, fmt->byteorder, fmt->totalsize,
+                mant_off, mant_bits, mant_long);
+      mant_off += mant_bits;
+      mant_bits_left -= mant_bits;
+    }
+}
+
+/* Return non-zero iff the data at FROM is a valid number in format FMT.  */
+
+int
+floatformat_is_valid (const struct floatformat *fmt, const void *from)
+{
+  return fmt->is_valid (fmt, from);
+}
+
+
+#ifdef IEEE_DEBUG
+
+#include <stdio.h>
+
+/* This is to be run on a host which uses IEEE floating point.  */
+
+void
+ieee_test (double n)
+{
+  double result;
+
+  floatformat_to_double (&floatformat_ieee_double_little, &n, &result);
+  if ((n != result && (! isnan (n) || ! isnan (result)))
+      || (n < 0 && result >= 0)
+      || (n >= 0 && result < 0))
+    printf ("Differ(to): %.20g -> %.20g\n", n, result);
+
+  floatformat_from_double (&floatformat_ieee_double_little, &n, &result);
+  if ((n != result && (! isnan (n) || ! isnan (result)))
+      || (n < 0 && result >= 0)
+      || (n >= 0 && result < 0))
+    printf ("Differ(from): %.20g -> %.20g\n", n, result);
+
+#if 0
+  {
+    char exten[16];
+
+    floatformat_from_double (&floatformat_m68881_ext, &n, exten);
+    floatformat_to_double (&floatformat_m68881_ext, exten, &result);
+    if (n != result)
+      printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
+  }
+#endif
+
+#if IEEE_DEBUG > 1
+  /* This is to be run on a host which uses 68881 format.  */
+  {
+    long double ex = *(long double *)exten;
+    if (ex != n)
+      printf ("Differ(from vs. extended): %.20g\n", n);
+  }
+#endif
+}
+
+int
+main (void)
+{
+  ieee_test (0.0);
+  ieee_test (0.5);
+  ieee_test (256.0);
+  ieee_test (0.12345);
+  ieee_test (234235.78907234);
+  ieee_test (-512.0);
+  ieee_test (-0.004321);
+  ieee_test (1.2E-70);
+  ieee_test (1.2E-316);
+  ieee_test (4.9406564584124654E-324);
+  ieee_test (- 4.9406564584124654E-324);
+  ieee_test (- 0.0);
+  ieee_test (- INFINITY);
+  ieee_test (- NAN);
+  ieee_test (INFINITY);
+  ieee_test (NAN);
+  return 0;
+}
+#endif
diff --git a/libiberty/fnmatch.c b/libiberty/fnmatch.c
new file mode 100644 (file)
index 0000000..fc897be
--- /dev/null
@@ -0,0 +1,220 @@
+/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
+
+NOTE: This source is derived from an old version taken from the GNU C
+Library (glibc).
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#if defined (CONFIG_BROKETS)
+/* We use <config.h> instead of "config.h" so that a compilation
+   using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
+   (which it would do because it found this file in $srcdir).  */
+#include <config.h>
+#else
+#include "config.h"
+#endif
+#endif
+
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+/* This code to undef const added in libiberty.  */
+#ifndef __STDC__
+/* This is a separate conditional since some stdc systems
+   reject `defined (const)'.  */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <errno.h>
+#include <fnmatch.h>
+#include <safe-ctype.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
+extern int errno;
+#endif
+
+/* Match STRING against the filename pattern PATTERN, returning zero if
+   it matches, nonzero if not.  */
+int
+fnmatch (const char *pattern, const char *string, int flags)
+{
+  register const char *p = pattern, *n = string;
+  register unsigned char c;
+
+#define FOLD(c)        ((flags & FNM_CASEFOLD) ? TOLOWER (c) : (c))
+
+  while ((c = *p++) != '\0')
+    {
+      c = FOLD (c);
+
+      switch (c)
+       {
+       case '?':
+         if (*n == '\0')
+           return FNM_NOMATCH;
+         else if ((flags & FNM_FILE_NAME) && *n == '/')
+           return FNM_NOMATCH;
+         else if ((flags & FNM_PERIOD) && *n == '.' &&
+                  (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
+           return FNM_NOMATCH;
+         break;
+
+       case '\\':
+         if (!(flags & FNM_NOESCAPE))
+           {
+             c = *p++;
+             c = FOLD (c);
+           }
+         if (FOLD ((unsigned char)*n) != c)
+           return FNM_NOMATCH;
+         break;
+
+       case '*':
+         if ((flags & FNM_PERIOD) && *n == '.' &&
+             (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
+           return FNM_NOMATCH;
+
+         for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
+           if (((flags & FNM_FILE_NAME) && *n == '/') ||
+               (c == '?' && *n == '\0'))
+             return FNM_NOMATCH;
+
+         if (c == '\0')
+           return 0;
+
+         {
+           unsigned char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
+           c1 = FOLD (c1);
+           for (--p; *n != '\0'; ++n)
+             if ((c == '[' || FOLD ((unsigned char)*n) == c1) &&
+                 fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
+               return 0;
+           return FNM_NOMATCH;
+         }
+
+       case '[':
+         {
+           /* Nonzero if the sense of the character class is inverted.  */
+           register int negate;
+
+           if (*n == '\0')
+             return FNM_NOMATCH;
+
+           if ((flags & FNM_PERIOD) && *n == '.' &&
+               (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
+             return FNM_NOMATCH;
+
+           negate = (*p == '!' || *p == '^');
+           if (negate)
+             ++p;
+
+           c = *p++;
+           for (;;)
+             {
+               register unsigned char cstart = c, cend = c;
+
+               if (!(flags & FNM_NOESCAPE) && c == '\\')
+                 cstart = cend = *p++;
+
+               cstart = cend = FOLD (cstart);
+
+               if (c == '\0')
+                 /* [ (unterminated) loses.  */
+                 return FNM_NOMATCH;
+
+               c = *p++;
+               c = FOLD (c);
+
+               if ((flags & FNM_FILE_NAME) && c == '/')
+                 /* [/] can never match.  */
+                 return FNM_NOMATCH;
+
+               if (c == '-' && *p != ']')
+                 {
+                   cend = *p++;
+                   if (!(flags & FNM_NOESCAPE) && cend == '\\')
+                     cend = *p++;
+                   if (cend == '\0')
+                     return FNM_NOMATCH;
+                   cend = FOLD (cend);
+
+                   c = *p++;
+                 }
+
+               if (FOLD ((unsigned char)*n) >= cstart
+                   && FOLD ((unsigned char)*n) <= cend)
+                 goto matched;
+
+               if (c == ']')
+                 break;
+             }
+           if (!negate)
+             return FNM_NOMATCH;
+           break;
+
+         matched:;
+           /* Skip the rest of the [...] that already matched.  */
+           while (c != ']')
+             {
+               if (c == '\0')
+                 /* [... (unterminated) loses.  */
+                 return FNM_NOMATCH;
+
+               c = *p++;
+               if (!(flags & FNM_NOESCAPE) && c == '\\')
+                 /* XXX 1003.2d11 is unclear if this is right.  */
+                 ++p;
+             }
+           if (negate)
+             return FNM_NOMATCH;
+         }
+         break;
+
+       default:
+         if (c != FOLD ((unsigned char)*n))
+           return FNM_NOMATCH;
+       }
+
+      ++n;
+    }
+
+  if (*n == '\0')
+    return 0;
+
+  if ((flags & FNM_LEADING_DIR) && *n == '/')
+    /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz".  */
+    return 0;
+
+  return FNM_NOMATCH;
+}
+
+#endif /* _LIBC or not __GNU_LIBRARY__.  */
diff --git a/libiberty/fnmatch.txh b/libiberty/fnmatch.txh
new file mode 100644 (file)
index 0000000..92e11bc
--- /dev/null
@@ -0,0 +1,48 @@
+@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
+
+Matches @var{string} against @var{pattern}, returning zero if it
+matches, @code{FNM_NOMATCH} if not.  @var{pattern} may contain the
+wildcards @code{?} to match any one character, @code{*} to match any
+zero or more characters, or a set of alternate characters in square
+brackets, like @samp{[a-gt8]}, which match one character (@code{a}
+through @code{g}, or @code{t}, or @code{8}, in this example) if that one
+character is in the set.  A set may be inverted (i.e., match anything
+except what's in the set) by giving @code{^} or @code{!} as the first
+character in the set.  To include those characters in the set, list them
+as anything other than the first character of the set.  To include a
+dash in the set, list it last in the set.  A backslash character makes
+the following character not special, so for example you could match
+against a literal asterisk with @samp{\*}.  To match a literal
+backslash, use @samp{\\}.
+
+@code{flags} controls various aspects of the matching process, and is a
+boolean OR of zero or more of the following values (defined in
+@code{<fnmatch.h>}):
+
+@table @code
+
+@item FNM_PATHNAME
+@itemx FNM_FILE_NAME
+@var{string} is assumed to be a path name.  No wildcard will ever match
+@code{/}.
+
+@item FNM_NOESCAPE
+Do not interpret backslashes as quoting the following special character.
+
+@item FNM_PERIOD
+A leading period (at the beginning of @var{string}, or if
+@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or
+@code{?} but must be matched explicitly.
+
+@item FNM_LEADING_DIR
+Means that @var{string} also matches @var{pattern} if some initial part
+of @var{string} matches, and is followed by @code{/} and zero or more
+characters.  For example, @samp{foo*} would match either @samp{foobar}
+or @samp{foobar/grill}.
+
+@item FNM_CASEFOLD
+Ignores case when performing the comparison.
+
+@end table
+
+@end deftypefn
diff --git a/libiberty/fopen_unlocked.c b/libiberty/fopen_unlocked.c
new file mode 100644 (file)
index 0000000..3c3cefe
--- /dev/null
@@ -0,0 +1,126 @@
+/* Implement fopen_unlocked and related functions.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Extension void unlock_stream (FILE * @var{stream})
+
+If the OS supports it, ensure that the supplied stream is setup to
+avoid any multi-threaded locking.  Otherwise leave the @code{FILE}
+pointer unchanged.  If the @var{stream} is @code{NULL} do nothing.
+
+@end deftypefn
+
+@deftypefn Extension void unlock_std_streams (void)
+
+If the OS supports it, ensure that the standard I/O streams,
+@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any
+multi-threaded locking.  Otherwise do nothing.
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fdopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream})
+
+Opens and returns a @code{FILE} pointer via @code{freopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDIO_EXT_H
+#include <stdio_ext.h>
+#endif
+
+#include "libiberty.h"
+
+/* This is an inline helper function to consolidate attempts to unlock
+   a stream.  */
+
+static inline void
+unlock_1 (FILE *const fp ATTRIBUTE_UNUSED)
+{
+#if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER)
+  if (fp)
+    __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+}
+
+void
+unlock_stream (FILE *fp)
+{
+  unlock_1 (fp);
+}
+
+void
+unlock_std_streams (void)
+{
+  unlock_1 (stdin);
+  unlock_1 (stdout);
+  unlock_1 (stderr);
+}
+
+FILE *
+fopen_unlocked (const char *path, const char *mode)            
+{
+  FILE *const fp = fopen (path, mode);
+  unlock_1 (fp);
+  return fp;
+}
+
+FILE *
+fdopen_unlocked (int fildes, const char *mode)
+{
+  FILE *const fp = fdopen (fildes, mode);
+  unlock_1 (fp);
+  return fp;
+}
+
+FILE *
+freopen_unlocked (const char *path, const char *mode, FILE *stream)
+{
+  FILE *const fp = freopen (path, mode, stream);
+  unlock_1 (fp);
+  return fp;
+}
diff --git a/libiberty/functions.texi b/libiberty/functions.texi
new file mode 100644 (file)
index 0000000..e6ab84c
--- /dev/null
@@ -0,0 +1,1582 @@
+@c Automatically generated from *.c and others (the comments before
+@c each entry tell you which file and where in that file).  DO NOT EDIT!
+@c Edit the *.c files, configure with --enable-maintainer-mode,
+@c and let gather-docs build you a new copy.
+
+@c safe-ctype.c:25
+@defvr Extension HOST_CHARSET
+This macro indicates the basic character set and encoding used by the
+host: more precisely, the encoding used for character constants in
+preprocessor @samp{#if} statements (the C "execution character set").
+It is defined by @file{safe-ctype.h}, and will be an integer constant
+with one of the following values:
+
+@ftable @code
+@item HOST_CHARSET_UNKNOWN
+The host character set is unknown - that is, not one of the next two
+possibilities.
+
+@item HOST_CHARSET_ASCII
+The host character set is ASCII.
+
+@item HOST_CHARSET_EBCDIC
+The host character set is some variant of EBCDIC.  (Only one of the
+nineteen EBCDIC varying characters is tested; exercise caution.)
+@end ftable
+@end defvr
+
+@c alloca.c:26
+@deftypefn Replacement void* alloca (size_t @var{size})
+
+This function allocates memory which will be automatically reclaimed
+after the procedure exits.  The @libib{} implementation does not free
+the memory immediately but will do so eventually during subsequent
+calls to this function.  Memory is allocated using @code{xmalloc} under
+normal circumstances.
+
+The header file @file{alloca-conf.h} can be used in conjunction with the
+GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make
+available this function.  The @code{AC_FUNC_ALLOCA} test requires that
+client code use a block of preprocessor code to be safe (see the Autoconf
+manual for more); this header incorporates that logic and more, including
+the possibility of a GCC built-in function.
+
+@end deftypefn
+
+@c asprintf.c:32
+@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...)
+
+Like @code{sprintf}, but instead of passing a pointer to a buffer, you
+pass a pointer to a pointer.  This function will compute the size of
+the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{sprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+@code{*@var{resptr}}.
+
+@end deftypefn
+
+@c atexit.c:6
+@deftypefn Supplemental int atexit (void (*@var{f})())
+
+Causes function @var{f} to be called at exit.  Returns 0.
+
+@end deftypefn
+
+@c basename.c:6
+@deftypefn Supplemental char* basename (const char *@var{name})
+
+Returns a pointer to the last component of pathname @var{name}.
+Behavior is undefined if the pathname ends in a directory separator.
+
+@end deftypefn
+
+@c bcmp.c:6
+@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, nonzero otherwise.  Returns zero if
+@var{count} is zero.  A nonzero result only indicates a difference,
+it does not indicate any sorting order (say, by having a positive
+result mean @var{x} sorts before @var{y}).
+
+@end deftypefn
+
+@c bcopy.c:3
+@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  The use of @code{bcopy} is deprecated in new programs.
+
+@end deftypefn
+
+@c bsearch.c:33
+@deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *))
+
+Performs a search over an array of @var{nmemb} elements pointed to by
+@var{base} for a member that matches the object pointed to by @var{key}.
+The size of each member is specified by @var{size}.  The array contents
+should be sorted in ascending order according to the @var{compar}
+comparison function.  This routine should take two arguments pointing to
+the @var{key} and to an array member, in that order, and should return an
+integer less than, equal to, or greater than zero if the @var{key} object
+is respectively less than, matching, or greater than the array member.
+
+@end deftypefn
+
+@c argv.c:124
+@deftypefn Extension char** buildargv (char *@var{sp})
+
+Given a pointer to a string, parse the string extracting fields
+separated by whitespace and optionally enclosed within either single
+or double quotes (which are stripped off), and build a vector of
+pointers to copies of the string for each field.  The input string
+remains unchanged.  The last element of the vector is followed by a
+@code{NULL} element.
+
+All of the memory for the pointer array and copies of the string
+is obtained from @code{malloc}.  All of the memory can be returned to the
+system with the single function call @code{freeargv}, which takes the
+returned result of @code{buildargv}, as it's argument.
+
+Returns a pointer to the argument vector if successful.  Returns
+@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient
+memory to complete building the argument vector.
+
+If the input is a null string (as opposed to a @code{NULL} pointer),
+then buildarg returns an argument vector that has one arg, a null
+string.
+
+@end deftypefn
+
+@c bzero.c:6
+@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count})
+
+Zeros @var{count} bytes starting at @var{mem}.  Use of this function
+is deprecated in favor of @code{memset}.
+
+@end deftypefn
+
+@c calloc.c:6
+@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
+
+Uses @code{malloc} to allocate storage for @var{nelem} objects of
+@var{elsize} bytes each, then zeros the memory.
+
+@end deftypefn
+
+@c choose-temp.c:42
+@deftypefn Extension char* choose_temp_base (void)
+
+Return a prefix for temporary file names or @code{NULL} if unable to
+find one.  The current directory is chosen if all else fails so the
+program is exited if a temporary directory can't be found (@code{mktemp}
+fails).  The buffer for the result is obtained with @code{xmalloc}.
+
+This function is provided for backwards compatibility only.  Its use is
+not recommended.
+
+@end deftypefn
+
+@c make-temp-file.c:87
+@deftypefn Replacement char* choose_tmpdir ()
+
+Returns a pointer to a directory path suitable for creating temporary
+files in.
+
+@end deftypefn
+
+@c clock.c:27
+@deftypefn Supplemental long clock (void)
+
+Returns an approximation of the CPU time used by the process as a
+@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
+number of seconds used.
+
+@end deftypefn
+
+@c concat.c:24
+@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL})
+
+Concatenate zero or more of strings and return the result in freshly
+@code{xmalloc}ed memory.  Returns @code{NULL} if insufficient memory is
+available.  The argument list is terminated by the first @code{NULL}
+pointer encountered.  Pointers to empty strings are ignored.
+
+@end deftypefn
+
+@c argv.c:52
+@deftypefn Extension char** dupargv (char **@var{vector})
+
+Duplicate an argument vector.  Simply scans through @var{vector},
+duplicating each argument until the terminating @code{NULL} is found.
+Returns a pointer to the argument vector if successful.  Returns
+@code{NULL} if there is insufficient memory to complete building the
+argument vector.
+
+@end deftypefn
+
+@c strerror.c:567
+@deftypefn Extension int errno_max (void)
+
+Returns the maximum @code{errno} value for which a corresponding
+symbolic name or message is available.  Note that in the case where we
+use the @code{sys_errlist} supplied by the system, it is possible for
+there to be more symbolic names than messages, or vice versa.  In
+fact, the manual page for @code{perror(3C)} explicitly warns that one
+should check the size of the table (@code{sys_nerr}) before indexing
+it, since new error codes may be added to the system before they are
+added to the table.  Thus @code{sys_nerr} might be smaller than value
+implied by the largest @code{errno} value defined in @code{<errno.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+@end deftypefn
+
+@c argv.c:348
+@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
+
+The @var{argcp} and @code{argvp} arguments are pointers to the usual
+@code{argc} and @code{argv} arguments to @code{main}.  This function
+looks for arguments that begin with the character @samp{@@}.  Any such
+arguments are interpreted as ``response files''.  The contents of the
+response file are interpreted as additional command line options.  In
+particular, the file is separated into whitespace-separated strings;
+each such string is taken as a command-line option.  The new options
+are inserted in place of the option naming the response file, and
+@code{*argcp} and @code{*argvp} will be updated.  If the value of
+@code{*argvp} is modified by this function, then the new value has
+been dynamically allocated and can be deallocated by the caller with
+@code{freeargv}.  However, most callers will simply call
+@code{expandargv} near the beginning of @code{main} and allow the
+operating system to free the memory when the program exits.
+
+@end deftypefn
+
+@c fdmatch.c:23
+@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2})
+
+Check to see if two open file descriptors refer to the same file.
+This is useful, for example, when we have an open file descriptor for
+an unnamed file, and the name of a file that we believe to correspond
+to that fd.  This can happen when we are exec'd with an already open
+file (@code{stdout} for example) or from the SVR4 @file{/proc} calls
+that return open file descriptors for mapped address spaces.  All we
+have to do is open the file by name and check the two file descriptors
+for a match, which is done by comparing major and minor device numbers
+and inode numbers.
+
+@end deftypefn
+
+@c fopen_unlocked.c:48
+@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fdopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+@c ffs.c:3
+@deftypefn Supplemental int ffs (int @var{valu})
+
+Find the first (least significant) bit set in @var{valu}.  Bits are
+numbered from right to left, starting with bit 1 (corresponding to the
+value 1).  If @var{valu} is zero, zero is returned.
+
+@end deftypefn
+
+@c filename_cmp.c:32
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what @code{strcmp}
+would return.  In other words, it returns a negative value if @var{s1}
+is less than @var{s2}, or a positive value if @var{s2} is greater than
+@var{s2}.
+
+This function does not normalize file names.  As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
+@c fnmatch.txh:1
+@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
+
+Matches @var{string} against @var{pattern}, returning zero if it
+matches, @code{FNM_NOMATCH} if not.  @var{pattern} may contain the
+wildcards @code{?} to match any one character, @code{*} to match any
+zero or more characters, or a set of alternate characters in square
+brackets, like @samp{[a-gt8]}, which match one character (@code{a}
+through @code{g}, or @code{t}, or @code{8}, in this example) if that one
+character is in the set.  A set may be inverted (i.e., match anything
+except what's in the set) by giving @code{^} or @code{!} as the first
+character in the set.  To include those characters in the set, list them
+as anything other than the first character of the set.  To include a
+dash in the set, list it last in the set.  A backslash character makes
+the following character not special, so for example you could match
+against a literal asterisk with @samp{\*}.  To match a literal
+backslash, use @samp{\\}.
+
+@code{flags} controls various aspects of the matching process, and is a
+boolean OR of zero or more of the following values (defined in
+@code{<fnmatch.h>}):
+
+@table @code
+
+@item FNM_PATHNAME
+@itemx FNM_FILE_NAME
+@var{string} is assumed to be a path name.  No wildcard will ever match
+@code{/}.
+
+@item FNM_NOESCAPE
+Do not interpret backslashes as quoting the following special character.
+
+@item FNM_PERIOD
+A leading period (at the beginning of @var{string}, or if
+@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or
+@code{?} but must be matched explicitly.
+
+@item FNM_LEADING_DIR
+Means that @var{string} also matches @var{pattern} if some initial part
+of @var{string} matches, and is followed by @code{/} and zero or more
+characters.  For example, @samp{foo*} would match either @samp{foobar}
+or @samp{foobar/grill}.
+
+@item FNM_CASEFOLD
+Ignores case when performing the comparison.
+
+@end table
+
+@end deftypefn
+
+@c fopen_unlocked.c:39
+@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+@c argv.c:97
+@deftypefn Extension void freeargv (char **@var{vector})
+
+Free an argument vector that was built using @code{buildargv}.  Simply
+scans through @var{vector}, freeing the memory for each argument until
+the terminating @code{NULL} is found, and then frees @var{vector}
+itself.
+
+@end deftypefn
+
+@c fopen_unlocked.c:57
+@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream})
+
+Opens and returns a @code{FILE} pointer via @code{freopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+@end deftypefn
+
+@c getruntime.c:82
+@deftypefn Replacement long get_run_time (void)
+
+Returns the time used so far, in microseconds.  If possible, this is
+the time used by this process, else it is the elapsed time since the
+process started.
+
+@end deftypefn
+
+@c getcwd.c:6
+@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
+
+Copy the absolute pathname for the current working directory into
+@var{pathname}, which is assumed to point to a buffer of at least
+@var{len} bytes, and return a pointer to the buffer.  If the current
+directory's path doesn't fit in @var{len} characters, the result is
+@code{NULL} and @code{errno} is set.  If @var{pathname} is a null pointer,
+@code{getcwd} will obtain @var{len} bytes of space using
+@code{malloc}.
+
+@end deftypefn
+
+@c getpagesize.c:5
+@deftypefn Supplemental int getpagesize (void)
+
+Returns the number of bytes in a page of memory.  This is the
+granularity of many of the system memory management routines.  No
+guarantee is made as to whether or not it is the same as the basic
+memory management hardware page size.
+
+@end deftypefn
+
+@c getpwd.c:5
+@deftypefn Supplemental char* getpwd (void)
+
+Returns the current working directory.  This implementation caches the
+result on the assumption that the process will not call @code{chdir}
+between calls to @code{getpwd}.
+
+@end deftypefn
+
+@c gettimeofday.c:12
+@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz})
+
+Writes the current time to @var{tp}.  This implementation requires
+that @var{tz} be NULL.  Returns 0 on success, -1 on failure.
+
+@end deftypefn
+
+@c hex.c:33
+@deftypefn Extension void hex_init (void)
+
+Initializes the array mapping the current character set to
+corresponding hex values.  This function must be called before any
+call to @code{hex_p} or @code{hex_value}.  If you fail to call it, a
+default ASCII-based table will normally be used on ASCII systems.
+
+@end deftypefn
+
+@c hex.c:42
+@deftypefn Extension int hex_p (int @var{c})
+
+Evaluates to non-zero if the given character is a valid hex character,
+or zero if it is not.  Note that the value you pass will be cast to
+@code{unsigned char} within the macro.
+
+@end deftypefn
+
+@c hex.c:50
+@deftypefn Extension {unsigned int} hex_value (int @var{c})
+
+Returns the numeric equivalent of the given character when interpreted
+as a hexadecimal digit.  The result is undefined if you pass an
+invalid hex digit.  Note that the value you pass will be cast to
+@code{unsigned char} within the macro.
+
+The @code{hex_value} macro returns @code{unsigned int}, rather than
+signed @code{int}, to make it easier to use in parsing addresses from
+hex dump files: a signed @code{int} would be sign-extended when
+converted to a wider unsigned type --- like @code{bfd_vma}, on some
+systems.
+
+@end deftypefn
+
+@c index.c:5
+@deftypefn Supplemental char* index (char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{index} is
+deprecated in new programs in favor of @code{strchr}.
+
+@end deftypefn
+
+@c insque.c:6
+@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred})
+@deftypefnx Supplemental void remque (struct qelem *@var{elem})
+
+Routines to manipulate queues built from doubly linked lists.  The
+@code{insque} routine inserts @var{elem} in the queue immediately
+after @var{pred}.  The @code{remque} routine removes @var{elem} from
+its containing queue.  These routines expect to be passed pointers to
+structures which have as their first members a forward pointer and a
+back pointer, like this prototype (although no prototype is provided):
+
+@example
+struct qelem @{
+  struct qelem *q_forw;
+  struct qelem *q_back;
+  char q_data[];
+@};
+@end example
+
+@end deftypefn
+
+@c safe-ctype.c:46
+@deffn  Extension ISALPHA  (@var{c})
+@deffnx Extension ISALNUM  (@var{c})
+@deffnx Extension ISBLANK  (@var{c})
+@deffnx Extension ISCNTRL  (@var{c})
+@deffnx Extension ISDIGIT  (@var{c})
+@deffnx Extension ISGRAPH  (@var{c})
+@deffnx Extension ISLOWER  (@var{c})
+@deffnx Extension ISPRINT  (@var{c})
+@deffnx Extension ISPUNCT  (@var{c})
+@deffnx Extension ISSPACE  (@var{c})
+@deffnx Extension ISUPPER  (@var{c})
+@deffnx Extension ISXDIGIT (@var{c})
+
+These twelve macros are defined by @file{safe-ctype.h}.  Each has the
+same meaning as the corresponding macro (with name in lowercase)
+defined by the standard header @file{ctype.h}.  For example,
+@code{ISALPHA} returns true for alphabetic characters and false for
+others.  However, there are two differences between these macros and
+those provided by @file{ctype.h}:
+
+@itemize @bullet
+@item These macros are guaranteed to have well-defined behavior for all 
+values representable by @code{signed char} and @code{unsigned char}, and
+for @code{EOF}.
+
+@item These macros ignore the current locale; they are true for these
+fixed sets of characters:
+@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
+@item @code{ALPHA}  @tab @kbd{A-Za-z}
+@item @code{ALNUM}  @tab @kbd{A-Za-z0-9}
+@item @code{BLANK}  @tab @kbd{space tab}
+@item @code{CNTRL}  @tab @code{!PRINT}
+@item @code{DIGIT}  @tab @kbd{0-9}
+@item @code{GRAPH}  @tab @code{ALNUM || PUNCT}
+@item @code{LOWER}  @tab @kbd{a-z}
+@item @code{PRINT}  @tab @code{GRAPH ||} @kbd{space}
+@item @code{PUNCT}  @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
+@item @code{SPACE}  @tab @kbd{space tab \n \r \f \v}
+@item @code{UPPER}  @tab @kbd{A-Z}
+@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
+@end multitable
+
+Note that, if the host character set is ASCII or a superset thereof,
+all these macros will return false for all values of @code{char} outside
+the range of 7-bit ASCII.  In particular, both ISPRINT and ISCNTRL return
+false for characters with numeric values from 128 to 255.
+@end itemize
+@end deffn
+
+@c safe-ctype.c:95
+@deffn  Extension ISIDNUM         (@var{c})
+@deffnx Extension ISIDST          (@var{c})
+@deffnx Extension IS_VSPACE       (@var{c})
+@deffnx Extension IS_NVSPACE      (@var{c})
+@deffnx Extension IS_SPACE_OR_NUL (@var{c})
+@deffnx Extension IS_ISOBASIC     (@var{c})
+These six macros are defined by @file{safe-ctype.h} and provide
+additional character classes which are useful when doing lexical
+analysis of C or similar languages.  They are true for the following
+sets of characters:
+
+@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
+@item @code{IDNUM}        @tab @kbd{A-Za-z0-9_}
+@item @code{IDST}         @tab @kbd{A-Za-z_}
+@item @code{VSPACE}       @tab @kbd{\r \n}
+@item @code{NVSPACE}      @tab @kbd{space tab \f \v \0}
+@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
+@item @code{ISOBASIC}     @tab @code{VSPACE || NVSPACE || PRINT}
+@end multitable
+@end deffn
+
+@c lbasename.c:23
+@deftypefn Replacement {const char*} lbasename (const char *@var{name})
+
+Given a pointer to a string containing a typical pathname
+(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
+last component of the pathname (@samp{ls.c} in this case).  The
+returned pointer is guaranteed to lie within the original
+string.  This latter fact is not true of many vendor C
+libraries, which return special strings or modify the passed
+strings for particular input.
+
+In particular, the empty string returns the same empty string,
+and a path ending in @code{/} returns the empty string after it.
+
+@end deftypefn
+
+@c lrealpath.c:25
+@deftypefn Replacement {const char*} lrealpath (const char *@var{name})
+
+Given a pointer to a string containing a pathname, returns a canonical
+version of the filename.  Symlinks will be resolved, and ``.'' and ``..''
+components will be simplified.  The returned value will be allocated using
+@code{malloc}, or @code{NULL} will be returned on a memory allocation error.
+
+@end deftypefn
+
+@c make-relative-prefix.c:24
+@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix})
+
+Given three paths @var{progname}, @var{bin_prefix}, @var{prefix},
+return the path that is in the same position relative to
+@var{progname}'s directory as @var{prefix} is relative to
+@var{bin_prefix}.  That is, a string starting with the directory
+portion of @var{progname}, followed by a relative pathname of the
+difference between @var{bin_prefix} and @var{prefix}.
+
+If @var{progname} does not contain any directory separators,
+@code{make_relative_prefix} will search @env{PATH} to find a program
+named @var{progname}.  Also, if @var{progname} is a symbolic link,
+the symbolic link will be resolved.
+
+For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta},
+@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is
+@code{/red/green/blue/gcc}, then this function will return
+@code{/red/green/blue/../../omega/}.
+
+The return value is normally allocated via @code{malloc}.  If no
+relative prefix can be found, return @code{NULL}.
+
+@end deftypefn
+
+@c make-temp-file.c:137
+@deftypefn Replacement char* make_temp_file (const char *@var{suffix})
+
+Return a temporary file name (as a string) or @code{NULL} if unable to
+create one.  @var{suffix} is a suffix to append to the file name.  The
+string is @code{malloc}ed, and the temporary file has been created.
+
+@end deftypefn
+
+@c memchr.c:3
+@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n})
+
+This function searches memory starting at @code{*@var{s}} for the
+character @var{c}.  The search only ends with the first occurrence of
+@var{c}, or after @var{length} characters; in particular, a null
+character does not terminate the search.  If the character @var{c} is
+found within @var{length} characters of @code{*@var{s}}, a pointer
+to the character is returned.  If @var{c} is not found, then @code{NULL} is
+returned.
+
+@end deftypefn
+
+@c memcmp.c:6
+@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, a value less than zero if @var{x} is
+lexically less than @var{y}, or a value greater than zero if @var{x}
+is lexically greater than @var{y}.  Note that lexical order is determined
+as if comparing unsigned char arrays.
+
+@end deftypefn
+
+@c memcpy.c:6
+@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  Returns a pointer to @var{out}.
+
+@end deftypefn
+
+@c memmove.c:6
+@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count})
+
+Copies @var{count} bytes from memory area @var{from} to memory area
+@var{to}, returning a pointer to @var{to}.
+
+@end deftypefn
+
+@c mempcpy.c:23
+@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  Returns a pointer to @var{out} + @var{length}.
+
+@end deftypefn
+
+@c memset.c:6
+@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count})
+
+Sets the first @var{count} bytes of @var{s} to the constant byte
+@var{c}, returning a pointer to @var{s}.
+
+@end deftypefn
+
+@c mkstemps.c:58
+@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
+
+Generate a unique temporary file name from @var{pattern}.
+@var{pattern} has the form:
+
+@example
+   @var{path}/ccXXXXXX@var{suffix}
+@end example
+
+@var{suffix_len} tells us how long @var{suffix} is (it can be zero
+length).  The last six characters of @var{pattern} before @var{suffix}
+must be @samp{XXXXXX}; they are replaced with a string that makes the
+filename unique.  Returns a file descriptor open on the file for
+reading and writing.
+
+@end deftypefn
+
+@c pexecute.txh:266
+@deftypefn Extension void pex_free (struct pex_obj @var{obj})
+
+Clean up and free all data associated with @var{obj}.
+
+@end deftypefn
+
+@c pexecute.txh:241
+@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector})
+
+Returns the exit status of all programs run using @var{obj}.
+@var{count} is the number of results expected.  The results will be
+placed into @var{vector}.  The results are in the order of the calls
+to @code{pex_run}.  Returns 0 on error, 1 on success.
+
+@end deftypefn
+
+@c pexecute.txh:250
+@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector})
+
+Returns the process execution times of all programs run using
+@var{obj}.  @var{count} is the number of results expected.  The
+results will be placed into @var{vector}.  The results are in the
+order of the calls to @code{pex_run}.  Returns 0 on error, 1 on
+success.
+
+@code{struct pex_time} has the following fields of the type
+@code{unsigned long}: @code{user_seconds},
+@code{user_microseconds}, @code{system_seconds},
+@code{system_microseconds}.  On systems which do not support reporting
+process times, all the fields will be set to @code{0}.
+
+@end deftypefn
+
+@c pexecute.txh:2
+@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase})
+
+Prepare to execute one or more programs, with standard output of each
+program fed to standard input of the next.  This is a system
+independent interface to execute a pipeline.
+
+@var{flags} is a bitwise combination of the following:
+
+@table @code
+
+@vindex PEX_RECORD_TIMES
+@item PEX_RECORD_TIMES
+Record subprocess times if possible.
+
+@vindex PEX_USE_PIPES
+@item PEX_USE_PIPES
+Use pipes for communication between processes, if possible.
+
+@vindex PEX_SAVE_TEMPS
+@item PEX_SAVE_TEMPS
+Don't delete temporary files used for communication between
+processes.
+
+@end table
+
+@var{pname} is the name of program to be executed, used in error
+messages.  @var{tempbase} is a base name to use for any required
+temporary files; it may be @code{NULL} to use a randomly chosen name.
+
+@end deftypefn
+
+@c pexecute.txh:155
+@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name})
+
+Return a stream for a temporary file to pass to the first program in
+the pipeline as input.
+
+The name of the input file is chosen according to the same rules
+@code{pex_run} uses to choose output file names, based on
+@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}.
+
+Don't call @code{fclose} on the returned stream; the first call to
+@code{pex_run} closes it automatically.
+
+If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in
+binary mode; otherwise, open it in the default mode.  Including
+@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
+@end deftypefn
+
+@c pexecute.txh:172
+@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary})
+
+Return a stream @var{fp} for a pipe connected to the standard input of
+the first program in the pipeline; @var{fp} is opened for writing.
+You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call
+that returned @var{obj}.
+
+You must close @var{fp} using @code{fclose} yourself when you have
+finished writing data to the pipeline.
+
+The file descriptor underlying @var{fp} is marked not to be inherited
+by child processes.
+
+On systems that do not support pipes, this function returns
+@code{NULL}, and sets @code{errno} to @code{EINVAL}.  If you would
+like to write code that is portable to all systems the @code{pex}
+functions support, consider using @code{pex_input_file} instead.
+
+There are two opportunities for deadlock using
+@code{pex_input_pipe}:
+
+@itemize @bullet
+@item
+Most systems' pipes can buffer only a fixed amount of data; a process
+that writes to a full pipe blocks.  Thus, if you write to @file{fp}
+before starting the first process, you run the risk of blocking when
+there is no child process yet to read the data and allow you to
+continue.  @code{pex_input_pipe} makes no promises about the
+size of the pipe's buffer, so if you need to write any data at all
+before starting the first process in the pipeline, consider using
+@code{pex_input_file} instead.
+
+@item
+Using @code{pex_input_pipe} and @code{pex_read_output} together
+may also cause deadlock.  If the output pipe fills up, so that each
+program in the pipeline is waiting for the next to read more data, and
+you fill the input pipe by writing more data to @var{fp}, then there
+is no way to make progress: the only process that could read data from
+the output pipe is you, but you are blocked on the input pipe.
+
+@end itemize
+
+@end deftypefn
+
+@c pexecute.txh:272
+@deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err})
+
+An interface to permit the easy execution of a
+single program.  The return value and most of the parameters are as
+for a call to @code{pex_run}.  @var{flags} is restricted to a
+combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and
+@code{PEX_BINARY_OUTPUT}.  @var{outname} is interpreted as if
+@code{PEX_LAST} were set.  On a successful return, @code{*@var{status}} will
+be set to the exit status of the program.
+
+@end deftypefn
+
+@c pexecute.txh:228
+@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+error of the last program in the pipeline.  When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+@c pexecute.txh:216
+@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+output of the last program in the pipeline.  When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+@c pexecute.txh:33
+@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline.  On success this returns
+@code{NULL}.  On failure it returns an error message, a statically
+allocated string.
+
+@var{obj} is returned by a previous call to @code{pex_init}.
+
+@var{flags} is a bitwise combination of the following:
+
+@table @code
+
+@vindex PEX_LAST
+@item PEX_LAST
+This must be set on the last program in the pipeline.  In particular,
+it should be set when executing a single program.  The standard output
+of the program will be sent to @var{outname}, or, if @var{outname} is
+@code{NULL}, to the standard output of the calling program.  Do @emph{not}
+set this bit if you want to call @code{pex_read_output}
+(described below).  After a call to @code{pex_run} with this bit set,
+@var{pex_run} may no longer be called with the same @var{obj}.
+
+@vindex PEX_SEARCH
+@item PEX_SEARCH
+Search for the program using the user's executable search path.
+
+@vindex PEX_SUFFIX
+@item PEX_SUFFIX
+@var{outname} is a suffix.  See the description of @var{outname},
+below.
+
+@vindex PEX_STDERR_TO_STDOUT
+@item PEX_STDERR_TO_STDOUT
+Send the program's standard error to standard output, if possible.
+
+@vindex PEX_BINARY_INPUT
+@vindex PEX_BINARY_OUTPUT
+@vindex PEX_BINARY_ERROR
+@item PEX_BINARY_INPUT
+@itemx PEX_BINARY_OUTPUT
+@itemx PEX_BINARY_ERROR
+The standard input (output or error) of the program should be read (written) in
+binary mode rather than text mode.  These flags are ignored on systems
+which do not distinguish binary mode and text mode, such as Unix.  For
+proper behavior these flags should match appropriately---a call to
+@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
+call using @code{PEX_BINARY_INPUT}.
+
+@vindex PEX_STDERR_TO_PIPE
+@item PEX_STDERR_TO_PIPE
+Send the program's standard error to a pipe, if possible.  This flag
+cannot be specified together with @code{PEX_STDERR_TO_STDOUT}.  This
+flag can be specified only on the last program in pipeline.
+
+@end table
+
+@var{executable} is the program to execute.  @var{argv} is the set of
+arguments to pass to the program; normally @code{@var{argv}[0]} will
+be a copy of @var{executable}.
+
+@var{outname} is used to set the name of the file to use for standard
+output.  There are two cases in which no output file will be used:
+
+@enumerate
+@item
+if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES}
+was set in the call to @code{pex_init}, and the system supports pipes
+
+@item
+if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is
+@code{NULL}
+@end enumerate
+
+@noindent
+Otherwise the code will use a file to hold standard
+output.  If @code{PEX_LAST} is not set, this file is considered to be
+a temporary file, and it will be removed when no longer needed, unless
+@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}.
+
+There are two cases to consider when setting the name of the file to
+hold standard output.
+
+@enumerate
+@item
+@code{PEX_SUFFIX} is set in @var{flags}.  In this case
+@var{outname} may not be @code{NULL}.  If the @var{tempbase} parameter
+to @code{pex_init} was not @code{NULL}, then the output file name is
+the concatenation of @var{tempbase} and @var{outname}.  If
+@var{tempbase} was @code{NULL}, then the output file name is a random
+file name ending in @var{outname}.
+
+@item
+@code{PEX_SUFFIX} was not set in @var{flags}.  In this
+case, if @var{outname} is not @code{NULL}, it is used as the output
+file name.  If @var{outname} is @code{NULL}, and @var{tempbase} was
+not NULL, the output file name is randomly chosen using
+@var{tempbase}.  Otherwise the output file name is chosen completely
+at random.
+@end enumerate
+
+@var{errname} is the file name to use for standard error output.  If
+it is @code{NULL}, standard error is the same as the caller's.
+Otherwise, standard error is written to the named file.
+
+On an error return, the code sets @code{*@var{err}} to an @code{errno}
+value, or to 0 if there is no relevant @code{errno}.
+
+@end deftypefn
+
+@c pexecute.txh:142
+@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline, permitting the environment for the
+program to be specified.  Behaviour and parameters not listed below are
+as for @code{pex_run}.
+
+@var{env} is the environment for the child process, specified as an array of
+character pointers.  Each element of the array should point to a string of the
+form @code{VAR=VALUE}, with the exception of the last element that must be
+@code{NULL}.
+
+@end deftypefn
+
+@c pexecute.txh:284
+@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags})
+
+This is the old interface to execute one or more programs.  It is
+still supported for compatibility purposes, but is no longer
+documented.
+
+@end deftypefn
+
+@c strsignal.c:539
+@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
+
+Print @var{message} to the standard error, followed by a colon,
+followed by the description of the signal specified by @var{signo},
+followed by a newline.
+
+@end deftypefn
+
+@c putenv.c:21
+@deftypefn Supplemental int putenv (const char *@var{string})
+
+Uses @code{setenv} or @code{unsetenv} to put @var{string} into
+the environment or remove it.  If @var{string} is of the form
+@samp{name=value} the string is added; if no @samp{=} is present the
+name is unset/removed.
+
+@end deftypefn
+
+@c pexecute.txh:292
+@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
+
+Another part of the old execution interface.
+
+@end deftypefn
+
+@c random.c:39
+@deftypefn Supplement {long int} random (void)
+@deftypefnx Supplement void srandom (unsigned int @var{seed})
+@deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n})
+@deftypefnx Supplement void* setstate (void *@var{arg_state})
+
+Random number functions.  @code{random} returns a random number in the
+range 0 to @code{LONG_MAX}.  @code{srandom} initializes the random
+number generator to some starting point determined by @var{seed}
+(else, the values returned by @code{random} are always the same for each
+run of the program).  @code{initstate} and @code{setstate} allow fine-grained
+control over the state of the random number generator.
+
+@end deftypefn
+
+@c concat.c:173
+@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL})
+
+Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
+is freed after the string is created.  This is intended to be useful
+when you're extending an existing string or building up a string in a
+loop:
+
+@example
+  str = reconcat (str, "pre-", str, NULL);
+@end example
+
+@end deftypefn
+
+@c rename.c:6
+@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
+
+Renames a file from @var{old} to @var{new}.  If @var{new} already
+exists, it is removed.
+
+@end deftypefn
+
+@c rindex.c:5
+@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{rindex} is
+deprecated in new programs in favor of @code{strrchr}.
+
+@end deftypefn
+
+@c setenv.c:22
+@deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite})
+@deftypefnx Supplemental void unsetenv (const char *@var{name})
+
+@code{setenv} adds @var{name} to the environment with value
+@var{value}.  If the name was already present in the environment,
+the new value will be stored only if @var{overwrite} is nonzero.
+The companion @code{unsetenv} function removes @var{name} from the
+environment.  This implementation is not safe for multithreaded code.
+
+@end deftypefn
+
+@c strsignal.c:348
+@deftypefn Extension int signo_max (void)
+
+Returns the maximum signal value for which a corresponding symbolic
+name or message is available.  Note that in the case where we use the
+@code{sys_siglist} supplied by the system, it is possible for there to
+be more symbolic names than messages, or vice versa.  In fact, the
+manual page for @code{psignal(3b)} explicitly warns that one should
+check the size of the table (@code{NSIG}) before indexing it, since
+new signal codes may be added to the system before they are added to
+the table.  Thus @code{NSIG} might be smaller than value implied by
+the largest signo value defined in @code{<signal.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+@end deftypefn
+
+@c sigsetmask.c:8
+@deftypefn Supplemental int sigsetmask (int @var{set})
+
+Sets the signal mask to the one provided in @var{set} and returns
+the old mask (which, for libiberty's implementation, will always
+be the value @code{1}).
+
+@end deftypefn
+
+@c snprintf.c:28
+@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...)
+
+This function is similar to sprintf, but it will print at most @var{n}
+characters.  On error the return value is -1, otherwise it returns the
+number of characters that would have been printed had @var{n} been
+sufficiently large, regardless of the actual value of @var{n}.  Note
+some pre-C99 system libraries do not implement this correctly so users
+cannot generally rely on the return value if the system version of
+this function is used.
+
+@end deftypefn
+
+@c spaces.c:22
+@deftypefn Extension char* spaces (int @var{count})
+
+Returns a pointer to a memory region filled with the specified
+number of spaces and null terminated.  The returned pointer is
+valid until at least the next call.
+
+@end deftypefn
+
+@c stpcpy.c:23
+@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src})
+
+Copies the string @var{src} into @var{dst}.  Returns a pointer to
+@var{dst} + strlen(@var{src}).
+
+@end deftypefn
+
+@c stpncpy.c:23
+@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len})
+
+Copies the string @var{src} into @var{dst}, copying exactly @var{len}
+and padding with zeros if necessary.  If @var{len} < strlen(@var{src})
+then return @var{dst} + @var{len}, otherwise returns @var{dst} +
+strlen(@var{src}).
+
+@end deftypefn
+
+@c strcasecmp.c:15
+@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strcmp}.
+
+@end deftypefn
+
+@c strchr.c:6
+@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+@end deftypefn
+
+@c strdup.c:3
+@deftypefn Supplemental char* strdup (const char *@var{s})
+
+Returns a pointer to a copy of @var{s} in memory obtained from
+@code{malloc}, or @code{NULL} if insufficient memory was available.
+
+@end deftypefn
+
+@c strerror.c:670
+@deftypefn Replacement {const char*} strerrno (int @var{errnum})
+
+Given an error number returned from a system call (typically returned
+in @code{errno}), returns a pointer to a string containing the
+symbolic name of that error number, as found in @code{<errno.h>}.
+
+If the supplied error number is within the valid range of indices for
+symbolic names, but no name is available for the particular error
+number, then returns the string @samp{Error @var{num}}, where @var{num}
+is the error number.
+
+If the supplied error number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strerrno}.
+
+@end deftypefn
+
+@c strerror.c:603
+@deftypefn Supplemental char* strerror (int @var{errnoval})
+
+Maps an @code{errno} number to an error message string, the contents
+of which are implementation defined.  On systems which have the
+external variables @code{sys_nerr} and @code{sys_errlist}, these
+strings will be the same as the ones used by @code{perror}.
+
+If the supplied error number is within the valid range of indices for
+the @code{sys_errlist}, but no message is available for the particular
+error number, then returns the string @samp{Error @var{num}}, where
+@var{num} is the error number.
+
+If the supplied error number is not a valid index into
+@code{sys_errlist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the
+next call to @code{strerror}.
+
+@end deftypefn
+
+@c strncasecmp.c:15
+@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strncmp}.
+
+@end deftypefn
+
+@c strncmp.c:6
+@deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+
+Compares the first @var{n} bytes of two strings, returning a value as
+@code{strcmp}.
+
+@end deftypefn
+
+@c strndup.c:23
+@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+in memory obtained from @code{malloc}, or @code{NULL} if insufficient
+memory was available.  The result is always NUL terminated.
+
+@end deftypefn
+
+@c strrchr.c:6
+@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+@end deftypefn
+
+@c strsignal.c:383
+@deftypefn Supplemental {const char *} strsignal (int @var{signo})
+
+Maps an signal number to an signal message string, the contents of
+which are implementation defined.  On systems which have the external
+variable @code{sys_siglist}, these strings will be the same as the
+ones used by @code{psignal()}.
+
+If the supplied signal number is within the valid range of indices for
+the @code{sys_siglist}, but no message is available for the particular
+signal number, then returns the string @samp{Signal @var{num}}, where
+@var{num} is the signal number.
+
+If the supplied signal number is not a valid index into
+@code{sys_siglist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the next
+call to @code{strsignal}.
+
+@end deftypefn
+
+@c strsignal.c:446
+@deftypefn Extension {const char*} strsigno (int @var{signo})
+
+Given an signal number, returns a pointer to a string containing the
+symbolic name of that signal number, as found in @code{<signal.h>}.
+
+If the supplied signal number is within the valid range of indices for
+symbolic names, but no name is available for the particular signal
+number, then returns the string @samp{Signal @var{num}}, where
+@var{num} is the signal number.
+
+If the supplied signal number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strsigno}.
+
+@end deftypefn
+
+@c strstr.c:6
+@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
+
+This function searches for the substring @var{sub} in the string
+@var{string}, not including the terminating null characters.  A pointer
+to the first occurrence of @var{sub} is returned, or @code{NULL} if the
+substring is absent.  If @var{sub} points to a string with zero
+length, the function returns @var{string}.
+
+@end deftypefn
+
+@c strtod.c:27
+@deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr})
+
+This ISO C function converts the initial portion of @var{string} to a
+@code{double}.  If @var{endptr} is not @code{NULL}, a pointer to the
+character after the last character used in the conversion is stored in
+the location referenced by @var{endptr}.  If no conversion is
+performed, zero is returned and the value of @var{string} is stored in
+the location referenced by @var{endptr}.
+
+@end deftypefn
+
+@c strerror.c:729
+@deftypefn Extension int strtoerrno (const char *@var{name})
+
+Given the symbolic name of a error number (e.g., @code{EACCES}), map it
+to an errno value.  If no translation is found, returns 0.
+
+@end deftypefn
+
+@c strtol.c:33
+@deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base})
+@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base})
+
+The @code{strtol} function converts the string in @var{string} to a
+long integer value according to the given @var{base}, which must be
+between 2 and 36 inclusive, or be the special value 0.  If @var{base}
+is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
+to indicate bases 8 and 16, respectively, else default to base 10.
+When the base is 16 (either explicitly or implicitly), a prefix of
+@code{0x} is allowed.  The handling of @var{endptr} is as that of
+@code{strtod} above.  The @code{strtoul} function is the same, except
+that the converted value is unsigned.
+
+@end deftypefn
+
+@c strsignal.c:500
+@deftypefn Extension int strtosigno (const char *@var{name})
+
+Given the symbolic name of a signal, map it to a signal number.  If no
+translation is found, returns 0.
+
+@end deftypefn
+
+@c strverscmp.c:25
+@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
+The @code{strverscmp} function compares the string @var{s1} against
+@var{s2}, considering them as holding indices/version numbers.  Return
+value follows the same conventions as found in the @code{strverscmp}
+function.  In fact, if @var{s1} and @var{s2} contain no digits,
+@code{strverscmp} behaves like @code{strcmp}.
+
+Basically, we compare strings normally (character by character), until
+we find a digit in each string - then we enter a special comparison
+mode, where each sequence of digits is taken as a whole.  If we reach the
+end of these two parts without noticing a difference, we return to the
+standard comparison mode.  There are two types of numeric parts:
+"integral" and "fractional" (those  begin with a '0'). The types
+of the numeric parts affect the way we sort them:
+
+@itemize @bullet
+@item
+integral/integral: we compare values as you would expect.
+
+@item
+fractional/integral: the fractional part is less than the integral one.
+Again, no surprise.
+
+@item
+fractional/fractional: the things become a bit more complex.
+If the common prefix contains only leading zeroes, the longest part is less
+than the other one; else the comparison behaves normally.
+@end itemize
+
+@smallexample
+strverscmp ("no digit", "no digit")
+    @result{} 0    // @r{same behavior as strcmp.}
+strverscmp ("item#99", "item#100")
+    @result{} <0   // @r{same prefix, but 99 < 100.}
+strverscmp ("alpha1", "alpha001")
+    @result{} >0   // @r{fractional part inferior to integral one.}
+strverscmp ("part1_f012", "part1_f01")
+    @result{} >0   // @r{two fractional parts.}
+strverscmp ("foo.009", "foo.0")
+    @result{} <0   // @r{idem, but with leading zeroes only.}
+@end smallexample
+
+This function is especially useful when dealing with filename sorting,
+because filenames frequently hold indices/version numbers.
+@end deftypefun
+
+@c tmpnam.c:3
+@deftypefn Supplemental char* tmpnam (char *@var{s})
+
+This function attempts to create a name for a temporary file, which
+will be a valid file name yet not exist when @code{tmpnam} checks for
+it.  @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
+or be @code{NULL}.  Use of this function creates a security risk, and it must
+not be used in new projects.  Use @code{mkstemp} instead.
+
+@end deftypefn
+
+@c unlink-if-ordinary.c:27
+@deftypefn Supplemental int unlink_if_ordinary (const char*)
+
+Unlinks the named file, unless it is special (e.g. a device file).
+Returns 0 when the file was unlinked, a negative value (and errno set) when
+there was an error deleting the file, and a positive value if no attempt
+was made to unlink the file because it is special.
+
+@end deftypefn
+
+@c fopen_unlocked.c:31
+@deftypefn Extension void unlock_std_streams (void)
+
+If the OS supports it, ensure that the standard I/O streams,
+@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any
+multi-threaded locking.  Otherwise do nothing.
+
+@end deftypefn
+
+@c fopen_unlocked.c:23
+@deftypefn Extension void unlock_stream (FILE * @var{stream})
+
+If the OS supports it, ensure that the supplied stream is setup to
+avoid any multi-threaded locking.  Otherwise leave the @code{FILE}
+pointer unchanged.  If the @var{stream} is @code{NULL} do nothing.
+
+@end deftypefn
+
+@c vasprintf.c:47
+@deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args})
+
+Like @code{vsprintf}, but instead of passing a pointer to a buffer,
+you pass a pointer to a pointer.  This function will compute the size
+of the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{vsprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+@code{*@var{resptr}}.
+
+@end deftypefn
+
+@c vfork.c:6
+@deftypefn Supplemental int vfork (void)
+
+Emulates @code{vfork} by calling @code{fork} and returning its value.
+
+@end deftypefn
+
+@c vprintf.c:3
+@deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap})
+@deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap})
+@deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap})
+
+These functions are the same as @code{printf}, @code{fprintf}, and
+@code{sprintf}, respectively, except that they are called with a
+@code{va_list} instead of a variable number of arguments.  Note that
+they do not call @code{va_end}; this is the application's
+responsibility.  In @libib{} they are implemented in terms of the
+nonstandard but common function @code{_doprnt}.
+
+@end deftypefn
+
+@c vsnprintf.c:28
+@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap})
+
+This function is similar to vsprintf, but it will print at most
+@var{n} characters.  On error the return value is -1, otherwise it
+returns the number of characters that would have been printed had
+@var{n} been sufficiently large, regardless of the actual value of
+@var{n}.  Note some pre-C99 system libraries do not implement this
+correctly so users cannot generally rely on the return value if the
+system version of this function is used.
+
+@end deftypefn
+
+@c waitpid.c:3
+@deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int)
+
+This is a wrapper around the @code{wait} function.  Any ``special''
+values of @var{pid} depend on your implementation of @code{wait}, as
+does the return value.  The third argument is unused in @libib{}.
+
+@end deftypefn
+
+@c argv.c:293
+@deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file})
+
+Write each member of ARGV, handling all necessary quoting, to the file
+named by FILE, separated by whitespace.  Return 0 on success, non-zero
+if an error occurred while writing to FILE.
+
+@end deftypefn
+
+@c xatexit.c:11
+@deftypefun int xatexit (void (*@var{fn}) (void))
+
+Behaves as the standard @code{atexit} function, but with no limit on
+the number of registered functions.  Returns 0 on success, or @minus{}1 on
+failure.  If you use @code{xatexit} to register functions, you must use
+@code{xexit} to terminate your program.
+
+@end deftypefun
+
+@c xmalloc.c:38
+@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
+
+Allocate memory without fail, and set it to zero.  This routine functions
+like @code{calloc}, but will behave the same as @code{xmalloc} if memory
+cannot be found.
+
+@end deftypefn
+
+@c xexit.c:22
+@deftypefn Replacement void xexit (int @var{code})
+
+Terminates the program.  If any functions have been registered with
+the @code{xatexit} replacement function, they will be called first.
+Termination is handled via the system's normal @code{exit} call.
+
+@end deftypefn
+
+@c xmalloc.c:22
+@deftypefn Replacement void* xmalloc (size_t)
+
+Allocate memory without fail.  If @code{malloc} fails, this will print
+a message to @code{stderr} (using the name set by
+@code{xmalloc_set_program_name},
+if any) and then call @code{xexit}.  Note that it is therefore safe for
+a program to contain @code{#define malloc xmalloc} in its source.
+
+@end deftypefn
+
+@c xmalloc.c:53
+@deftypefn Replacement void xmalloc_failed (size_t)
+
+This function is not meant to be called by client code, and is listed
+here for completeness only.  If any of the allocation routines fail, this
+function will be called to print an error message and terminate execution.
+
+@end deftypefn
+
+@c xmalloc.c:46
+@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
+
+You can use this to set the name of the program used by
+@code{xmalloc_failed} when printing a failure message.
+
+@end deftypefn
+
+@c xmemdup.c:7
+@deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size})
+
+Duplicates a region of memory without fail.  First, @var{alloc_size} bytes
+are allocated, then @var{copy_size} bytes from @var{input} are copied into
+it, and the new memory is returned.  If fewer bytes are copied than were
+allocated, the remaining memory is zeroed.
+
+@end deftypefn
+
+@c xmalloc.c:32
+@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
+Reallocate memory without fail.  This routine functions like @code{realloc},
+but will behave the same as @code{xmalloc} if memory cannot be found.
+
+@end deftypefn
+
+@c xstrdup.c:7
+@deftypefn Replacement char* xstrdup (const char *@var{s})
+
+Duplicates a character string without fail, using @code{xmalloc} to
+obtain memory.
+
+@end deftypefn
+
+@c xstrerror.c:7
+@deftypefn Replacement char* xstrerror (int @var{errnum})
+
+Behaves exactly like the standard @code{strerror} function, but
+will never return a @code{NULL} pointer.
+
+@end deftypefn
+
+@c xstrndup.c:23
+@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+without fail, using @code{xmalloc} to obtain memory.  The result is
+always NUL terminated.
+
+@end deftypefn
+
+
diff --git a/libiberty/gather-docs b/libiberty/gather-docs
new file mode 100644 (file)
index 0000000..be4dbbf
--- /dev/null
@@ -0,0 +1,128 @@
+#!/usr/bin/perl
+# -*- perl -*-
+
+#   Copyright (C) 2001
+#   Free Software Foundation
+#
+# This file is part of the libiberty library.
+# Libiberty is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# Libiberty is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with libiberty; see the file COPYING.LIB.  If not,
+# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# Originally written by DJ Delorie <dj@redhat.com>
+
+
+
+# This program looks for texinfo snippets in source files and other
+# files, and builds per-category files with entries sorted in
+# alphabetical order.
+
+# The syntax it looks for is lines starting with '@def' in *.c and
+# other files (see TEXIFILES in Makefile.in).  Entries are terminated
+# at the next @def* (which begins a new entry) or, for C files, a line
+# that begins with '*/' without leading spaces (this assumes that the
+# texinfo snippet is within a C-style /* */ comment).
+
+# 
+
+
+
+if ($ARGV[0] eq "-v") {
+    $verbose = 1;
+    shift;
+}
+
+$srcdir = shift;
+$outfile = shift;
+
+if ($outfile !~ /\S/ || ! -f "$srcdir/Makefile.in" ) {
+    print STDERR "Usage: gather-docs [-v] srcdir outfile.txi [files with snippets in them ...]\n";
+    exit 1;
+}
+
+$errors = 0;
+
+for $in (@ARGV) {
+
+    if (!open(IN, "$srcdir/$in")) {
+       print STDERR "Cannot open $srcdir/$in for reading: $!\n";
+       $errors ++;
+
+    } else {
+       $first = 1;
+       $pertinent = 0;
+       $man_mode = 0;
+       $line = 0;
+
+       while (<IN>) {
+           $line ++;
+           $pertinent = 1 if /^\@def[a-z]*[a-wyz] /;
+           $pertinent = 0 if /^\*\//;
+           next unless $pertinent;
+
+           if (/^\@def[a-z]*[a-wyz] /) {
+               
+               ($name) = m/[^\(]* ([^\( \t\r\n]+) *\(/;
+               $name =~ s/[    ]*$//;
+               $key = $name;
+               $key =~ tr/A-Z/a-z/;
+               $key =~ s/[^a-z0-9]+/ /g;
+               $name{$key} = $node;
+               $lines{$key} = '';
+               $src_file{$key} = $in;
+               $src_line{$key} = $line;
+               print "\nReading $in :" if $verbose && $first;
+               $first = 0;
+               print " $name" if $verbose;
+               $node_lines{$key} .= $_;
+
+           } else {
+               $node_lines{$key} .= $_;
+           }
+
+           $pertinent = 0 if /^\@end def/;
+       }
+       close (IN);
+    }
+}
+
+print "\n" if $verbose;
+exit $errors if $errors;
+
+if (!open (OUT, "> $outfile")) {
+    print STDERR "Cannot open $outfile for writing: $!\n";
+    $errors ++;
+    next;
+}
+print "Writing $outfile\n" if $verbose;
+
+print OUT "\@c Automatically generated from *.c and others (the comments before\n";
+print OUT "\@c each entry tell you which file and where in that file).  DO NOT EDIT!\n";
+print OUT "\@c Edit the *.c files, configure with --enable-maintainer-mode,\n";
+print OUT "\@c and let gather-docs build you a new copy.\n\n";
+
+for $key (sort keys %name) {
+    print OUT "\@c $src_file{$key}:$src_line{$key}\n";
+    print OUT $node_lines{$key};
+    print OUT "\n";
+}
+
+if (! print OUT "\n") {
+    print STDERR "Disk full writing $srcdir/$cat.texi\n";
+    $errors ++;
+}
+
+close (OUT);
+
+exit $errors;
diff --git a/libiberty/getcwd.c b/libiberty/getcwd.c
new file mode 100644 (file)
index 0000000..28f26eb
--- /dev/null
@@ -0,0 +1,62 @@
+/* Emulate getcwd using getwd.
+   This function is in the public domain. */
+
+/*
+
+@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
+
+Copy the absolute pathname for the current working directory into
+@var{pathname}, which is assumed to point to a buffer of at least
+@var{len} bytes, and return a pointer to the buffer.  If the current
+directory's path doesn't fit in @var{len} characters, the result is
+@code{NULL} and @code{errno} is set.  If @var{pathname} is a null pointer,
+@code{getcwd} will obtain @var{len} bytes of space using
+@code{malloc}.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <errno.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+extern char *getwd ();
+extern int errno;
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+char *
+getcwd (char *buf, size_t len)
+{
+  char ourbuf[MAXPATHLEN];
+  char *result;
+
+  result = getwd (ourbuf);
+  if (result) {
+    if (strlen (ourbuf) >= len) {
+      errno = ERANGE;
+      return 0;
+    }
+    if (!buf) {
+       buf = (char*)malloc(len);
+       if (!buf) {
+           errno = ENOMEM;
+          return 0;
+       }
+    }
+    strcpy (buf, ourbuf);
+  }
+  return buf;
+}
diff --git a/libiberty/getopt.c b/libiberty/getopt.c
new file mode 100644 (file)
index 0000000..d9c3532
--- /dev/null
@@ -0,0 +1,1052 @@
+/* Getopt for GNU.
+   NOTE: getopt is now part of the C library, so if you don't know what
+   "Keep this file name-space clean" means, talk to drepper@gnu.org
+   before changing it!
+
+   Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   1996, 1997, 1998, 2005 Free Software Foundation, Inc.
+
+   NOTE: This source is derived from an old version taken from the GNU C
+   Library (glibc).
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+\f
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+   Ditto for AIX 3.2 and <stdlib.h>.  */
+#ifndef _NO_PROTO
+# define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if !defined __STDC__ || !__STDC__
+/* This is a separate conditional since some stdc systems
+   reject `defined (const)'.  */
+# ifndef const
+#  define const
+# endif
+#endif
+
+#include "ansidecl.h"
+#include <stdio.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+# include <gnu-versions.h>
+# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#  define ELIDE_CODE
+# endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+   contain conflicting prototypes for getopt.  */
+# include <stdlib.h>
+# include <unistd.h>
+#endif /* GNU C library.  */
+
+#ifdef VMS
+# include <unixlib.h>
+# if HAVE_STRING_H - 0
+#  include <string.h>
+# endif
+#endif
+
+#ifndef _
+/* This is for other GNU distributions with internationalized messages.
+   When compiling libc, the _ macro is predefined.  */
+# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+#  include <libintl.h>
+#  define _(msgid)     gettext (msgid)
+# else
+#  define _(msgid)     (msgid)
+# endif
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+   but it behaves differently for the user, since it allows the user
+   to intersperse the options with the other arguments.
+
+   As `getopt' works, it permutes the elements of ARGV so that,
+   when it is done, all the options precede everything else.  Thus
+   all application programs are extended to handle flexible argument order.
+
+   Setting the environment variable POSIXLY_CORRECT disables permutation.
+   Then the behavior is completely standard.
+
+   GNU application programs can use a third alternative mode in which
+   they can distinguish the relative order of options and other arguments.  */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+char *optarg = NULL;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+/* 1003.2 says this must be 1 before any call.  */
+int optind = 1;
+
+/* Formerly, initialization of getopt depended on optind==0, which
+   causes problems with re-calling getopt as programs generally don't
+   know that. */
+
+int __getopt_initialized = 0;
+
+/* The next char to be scanned in the option-element
+   in which the last option character we returned was found.
+   This allows us to pick up the scan where we left off.
+
+   If this is zero, or a null string, it means resume the scan
+   by advancing to the next ARGV-element.  */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+   This must be initialized on some systems to avoid linking in the
+   system's own getopt implementation.  */
+
+int optopt = '?';
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+   If the caller did not specify anything,
+   the default is REQUIRE_ORDER if the environment variable
+   POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+   REQUIRE_ORDER means don't recognize them as options;
+   stop option processing when the first non-option is seen.
+   This is what Unix does.
+   This mode of operation is selected by either setting the environment
+   variable POSIXLY_CORRECT, or using `+' as the first character
+   of the list of option characters.
+
+   PERMUTE is the default.  We permute the contents of ARGV as we scan,
+   so that eventually all the non-options are at the end.  This allows options
+   to be given in any order, even with programs that were not written to
+   expect this.
+
+   RETURN_IN_ORDER is an option available to programs that were written
+   to expect options and other ARGV-elements in any order and that care about
+   the ordering of the two.  We describe each non-option ARGV-element
+   as if it were the argument of an option with character code 1.
+   Using `-' as the first character of the list of option characters
+   selects this mode of operation.
+
+   The special argument `--' forces an end of option-scanning regardless
+   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
+   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
+
+static enum
+{
+  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable.  */
+static char *posixly_correct;
+\f
+#ifdef __GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+   because there are many ways it can cause trouble.
+   On some systems, it contains special magic macros that don't work
+   in GCC.  */
+# include <string.h>
+# define my_index      strchr
+#else
+
+# if HAVE_STRING_H
+#  include <string.h>
+# else
+#  if HAVE_STRINGS_H
+#   include <strings.h>
+#  endif
+# endif
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+#if HAVE_STDLIB_H && HAVE_DECL_GETENV
+#  include <stdlib.h>
+#elif !defined(getenv)
+#  ifdef __cplusplus
+extern "C" {
+#  endif /* __cplusplus */
+extern char *getenv (const char *);
+#  ifdef __cplusplus
+}
+#  endif /* __cplusplus */
+#endif
+
+static char *
+my_index (const char *str, int chr)
+{
+  while (*str)
+    {
+      if (*str == chr)
+       return (char *) str;
+      str++;
+    }
+  return 0;
+}
+
+/* If using GCC, we can safely declare strlen this way.
+   If not using GCC, it is ok not to declare it.  */
+#ifdef __GNUC__
+/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+   That was relevant to code that was here before.  */
+# if (!defined __STDC__ || !__STDC__) && !defined strlen
+/* gcc with -traditional declares the built-in strlen to return int,
+   and has done so at least since version 2.4.5. -- rms.  */
+extern int strlen (const char *);
+# endif /* not __STDC__ */
+#endif /* __GNUC__ */
+
+#endif /* not __GNU_LIBRARY__ */
+\f
+/* Handle permutation of arguments.  */
+
+/* Describe the part of ARGV that contains non-options that have
+   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+   `last_nonopt' is the index after the last of them.  */
+
+static int first_nonopt;
+static int last_nonopt;
+
+#ifdef _LIBC
+/* Bash 2.0 gives us an environment variable containing flags
+   indicating ARGV elements that should not be considered arguments.  */
+
+/* Defined in getopt_init.c  */
+extern char *__getopt_nonoption_flags;
+
+static int nonoption_flags_max_len;
+static int nonoption_flags_len;
+
+static int original_argc;
+static char *const *original_argv;
+
+/* Make sure the environment variable bash 2.0 puts in the environment
+   is valid for the getopt call we must make sure that the ARGV passed
+   to getopt is that one passed to the process.  */
+static void
+__attribute__ ((unused))
+store_args_and_env (int argc, char *const *argv)
+{
+  /* XXX This is no good solution.  We should rather copy the args so
+     that we can compare them later.  But we must not use malloc(3).  */
+  original_argc = argc;
+  original_argv = argv;
+}
+# ifdef text_set_element
+text_set_element (__libc_subinit, store_args_and_env);
+# endif /* text_set_element */
+
+# define SWAP_FLAGS(ch1, ch2) \
+  if (nonoption_flags_len > 0)                                               \
+    {                                                                        \
+      char __tmp = __getopt_nonoption_flags[ch1];                            \
+      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];         \
+      __getopt_nonoption_flags[ch2] = __tmp;                                 \
+    }
+#else  /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+   One subsequence is elements [first_nonopt,last_nonopt)
+   which contains all the non-options that have been skipped so far.
+   The other is elements [last_nonopt,optind), which contains all
+   the options processed since those non-options were skipped.
+
+   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   the new indices of the non-options in ARGV after they are moved.  */
+
+#if defined __STDC__ && __STDC__
+static void exchange (char **);
+#endif
+
+static void
+exchange (char **argv)
+{
+  int bottom = first_nonopt;
+  int middle = last_nonopt;
+  int top = optind;
+  char *tem;
+
+  /* Exchange the shorter segment with the far end of the longer segment.
+     That puts the shorter segment into the right place.
+     It leaves the longer segment in the right place overall,
+     but it consists of two parts that need to be swapped next.  */
+
+#ifdef _LIBC
+  /* First make sure the handling of the `__getopt_nonoption_flags'
+     string can work normally.  Our top argument must be in the range
+     of the string.  */
+  if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
+    {
+      /* We must extend the array.  The user plays games with us and
+        presents new arguments.  */
+      char *new_str = (char *) malloc (top + 1);
+      if (new_str == NULL)
+       nonoption_flags_len = nonoption_flags_max_len = 0;
+      else
+       {
+         memset (mempcpy (new_str, __getopt_nonoption_flags,
+                          nonoption_flags_max_len),
+                 '\0', top + 1 - nonoption_flags_max_len);
+         nonoption_flags_max_len = top + 1;
+         __getopt_nonoption_flags = new_str;
+       }
+    }
+#endif
+
+  while (top > middle && middle > bottom)
+    {
+      if (top - middle > middle - bottom)
+       {
+         /* Bottom segment is the short one.  */
+         int len = middle - bottom;
+         register int i;
+
+         /* Swap it with the top part of the top segment.  */
+         for (i = 0; i < len; i++)
+           {
+             tem = argv[bottom + i];
+             argv[bottom + i] = argv[top - (middle - bottom) + i];
+             argv[top - (middle - bottom) + i] = tem;
+             SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+           }
+         /* Exclude the moved bottom segment from further swapping.  */
+         top -= len;
+       }
+      else
+       {
+         /* Top segment is the short one.  */
+         int len = top - middle;
+         register int i;
+
+         /* Swap it with the bottom part of the bottom segment.  */
+         for (i = 0; i < len; i++)
+           {
+             tem = argv[bottom + i];
+             argv[bottom + i] = argv[middle + i];
+             argv[middle + i] = tem;
+             SWAP_FLAGS (bottom + i, middle + i);
+           }
+         /* Exclude the moved top segment from further swapping.  */
+         bottom += len;
+       }
+    }
+
+  /* Update records for the slots the non-options now occupy.  */
+
+  first_nonopt += (optind - last_nonopt);
+  last_nonopt = optind;
+}
+
+/* Initialize the internal data when the first call is made.  */
+
+#if defined __STDC__ && __STDC__
+static const char *_getopt_initialize (int, char *const *, const char *);
+#endif
+static const char *
+_getopt_initialize (int argc ATTRIBUTE_UNUSED,
+                   char *const *argv ATTRIBUTE_UNUSED,
+                   const char *optstring)
+{
+  /* Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  first_nonopt = last_nonopt = optind;
+
+  nextchar = NULL;
+
+  posixly_correct = getenv ("POSIXLY_CORRECT");
+
+  /* Determine how to handle the ordering of options and nonoptions.  */
+
+  if (optstring[0] == '-')
+    {
+      ordering = RETURN_IN_ORDER;
+      ++optstring;
+    }
+  else if (optstring[0] == '+')
+    {
+      ordering = REQUIRE_ORDER;
+      ++optstring;
+    }
+  else if (posixly_correct != NULL)
+    ordering = REQUIRE_ORDER;
+  else
+    ordering = PERMUTE;
+
+#ifdef _LIBC
+  if (posixly_correct == NULL
+      && argc == original_argc && argv == original_argv)
+    {
+      if (nonoption_flags_max_len == 0)
+       {
+         if (__getopt_nonoption_flags == NULL
+             || __getopt_nonoption_flags[0] == '\0')
+           nonoption_flags_max_len = -1;
+         else
+           {
+             const char *orig_str = __getopt_nonoption_flags;
+             int len = nonoption_flags_max_len = strlen (orig_str);
+             if (nonoption_flags_max_len < argc)
+               nonoption_flags_max_len = argc;
+             __getopt_nonoption_flags =
+               (char *) malloc (nonoption_flags_max_len);
+             if (__getopt_nonoption_flags == NULL)
+               nonoption_flags_max_len = -1;
+             else
+               memset (mempcpy (__getopt_nonoption_flags, orig_str, len),
+                       '\0', nonoption_flags_max_len - len);
+           }
+       }
+      nonoption_flags_len = nonoption_flags_max_len;
+    }
+  else
+    nonoption_flags_len = 0;
+#endif
+
+  return optstring;
+}
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns -1.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return '?' after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return '?'.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal (int argc, char *const *argv, const char *optstring,
+                  const struct option *longopts,
+                  int *longind, int long_only)
+{
+  optarg = NULL;
+
+  if (optind == 0 || !__getopt_initialized)
+    {
+      if (optind == 0)
+       optind = 1;     /* Don't scan ARGV[0], the program name.  */
+      optstring = _getopt_initialize (argc, argv, optstring);
+      __getopt_initialized = 1;
+    }
+
+  /* Test whether ARGV[optind] points to a non-option argument.
+     Either it does not have option syntax, or there is an environment flag
+     from the shell indicating it is not an option.  The later information
+     is only used when the used in the GNU libc.  */
+#ifdef _LIBC
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'              \
+                     || (optind < nonoption_flags_len                        \
+                         && __getopt_nonoption_flags[optind] == '1'))
+#else
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+#endif
+
+  if (nextchar == NULL || *nextchar == '\0')
+    {
+      /* Advance to the next ARGV-element.  */
+
+      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+        moved back by the user (who may also have changed the arguments).  */
+      if (last_nonopt > optind)
+       last_nonopt = optind;
+      if (first_nonopt > optind)
+       first_nonopt = optind;
+
+      if (ordering == PERMUTE)
+       {
+         /* If we have just processed some options following some non-options,
+            exchange them so that the options come first.  */
+
+         if (first_nonopt != last_nonopt && last_nonopt != optind)
+           exchange ((char **) argv);
+         else if (last_nonopt != optind)
+           first_nonopt = optind;
+
+         /* Skip any additional non-options
+            and extend the range of non-options previously skipped.  */
+
+         while (optind < argc && NONOPTION_P)
+           optind++;
+         last_nonopt = optind;
+       }
+
+      /* The special ARGV-element `--' means premature end of options.
+        Skip it like a null option,
+        then exchange with previous non-options as if it were an option,
+        then skip everything else like a non-option.  */
+
+      if (optind != argc && !strcmp (argv[optind], "--"))
+       {
+         optind++;
+
+         if (first_nonopt != last_nonopt && last_nonopt != optind)
+           exchange ((char **) argv);
+         else if (first_nonopt == last_nonopt)
+           first_nonopt = optind;
+         last_nonopt = argc;
+
+         optind = argc;
+       }
+
+      /* If we have done all the ARGV-elements, stop the scan
+        and back over any non-options that we skipped and permuted.  */
+
+      if (optind == argc)
+       {
+         /* Set the next-arg-index to point at the non-options
+            that we previously skipped, so the caller will digest them.  */
+         if (first_nonopt != last_nonopt)
+           optind = first_nonopt;
+         return -1;
+       }
+
+      /* If we have come to a non-option and did not permute it,
+        either stop the scan or describe it to the caller and pass it by.  */
+
+      if (NONOPTION_P)
+       {
+         if (ordering == REQUIRE_ORDER)
+           return -1;
+         optarg = argv[optind++];
+         return 1;
+       }
+
+      /* We have found another option-ARGV-element.
+        Skip the initial punctuation.  */
+
+      nextchar = (argv[optind] + 1
+                 + (longopts != NULL && argv[optind][1] == '-'));
+    }
+
+  /* Decode the current option-ARGV-element.  */
+
+  /* Check whether the ARGV-element is a long option.
+
+     If long_only and the ARGV-element has the form "-f", where f is
+     a valid short option, don't consider it an abbreviated form of
+     a long option that starts with f.  Otherwise there would be no
+     way to give the -f short option.
+
+     On the other hand, if there's a long option "fubar" and
+     the ARGV-element is "-fu", do consider that an abbreviation of
+     the long option, just like "--fu", and not "-f" with arg "u".
+
+     This distinction seems to be the most useful approach.  */
+
+  if (longopts != NULL
+      && (argv[optind][1] == '-'
+         || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+    {
+      char *nameend;
+      const struct option *p;
+      const struct option *pfound = NULL;
+      int exact = 0;
+      int ambig = 0;
+      int indfound = -1;
+      int option_index;
+
+      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+       /* Do nothing.  */ ;
+
+      /* Test all long options for either exact match
+        or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name; p++, option_index++)
+       if (!strncmp (p->name, nextchar, nameend - nextchar))
+         {
+           if ((unsigned int) (nameend - nextchar)
+               == (unsigned int) strlen (p->name))
+             {
+               /* Exact match found.  */
+               pfound = p;
+               indfound = option_index;
+               exact = 1;
+               break;
+             }
+           else if (pfound == NULL)
+             {
+               /* First nonexact match found.  */
+               pfound = p;
+               indfound = option_index;
+             }
+           else
+             /* Second or later nonexact match found.  */
+             ambig = 1;
+         }
+
+      if (ambig && !exact)
+       {
+         if (opterr)
+           fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+                    argv[0], argv[optind]);
+         nextchar += strlen (nextchar);
+         optind++;
+         optopt = 0;
+         return '?';
+       }
+
+      if (pfound != NULL)
+       {
+         option_index = indfound;
+         optind++;
+         if (*nameend)
+           {
+             /* Don't test has_arg with >, because some C compilers don't
+                allow it to be used on enums.  */
+             if (pfound->has_arg)
+               optarg = nameend + 1;
+             else
+               {
+                 if (opterr)
+                   {
+                     if (argv[optind - 1][1] == '-')
+                       /* --option */
+                       fprintf (stderr,
+                                _("%s: option `--%s' doesn't allow an argument\n"),
+                                argv[0], pfound->name);
+                     else
+                       /* +option or -option */
+                       fprintf (stderr,
+                                _("%s: option `%c%s' doesn't allow an argument\n"),
+                                argv[0], argv[optind - 1][0], pfound->name);
+
+                     nextchar += strlen (nextchar);
+
+                     optopt = pfound->val;
+                     return '?';
+                   }
+               }
+           }
+         else if (pfound->has_arg == 1)
+           {
+             if (optind < argc)
+               optarg = argv[optind++];
+             else
+               {
+                 if (opterr)
+                   fprintf (stderr,
+                          _("%s: option `%s' requires an argument\n"),
+                          argv[0], argv[optind - 1]);
+                 nextchar += strlen (nextchar);
+                 optopt = pfound->val;
+                 return optstring[0] == ':' ? ':' : '?';
+               }
+           }
+         nextchar += strlen (nextchar);
+         if (longind != NULL)
+           *longind = option_index;
+         if (pfound->flag)
+           {
+             *(pfound->flag) = pfound->val;
+             return 0;
+           }
+         return pfound->val;
+       }
+
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+        or the option starts with '--' or is not a valid short
+        option, then it's an error.
+        Otherwise interpret it as a short option.  */
+      if (!long_only || argv[optind][1] == '-'
+         || my_index (optstring, *nextchar) == NULL)
+       {
+         if (opterr)
+           {
+             if (argv[optind][1] == '-')
+               /* --option */
+               fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+                        argv[0], nextchar);
+             else
+               /* +option or -option */
+               fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+                        argv[0], argv[optind][0], nextchar);
+           }
+         nextchar = (char *) "";
+         optind++;
+         optopt = 0;
+         return '?';
+       }
+    }
+
+  /* Look at and handle the next short option-character.  */
+
+  {
+    char c = *nextchar++;
+    char *temp = my_index (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*nextchar == '\0')
+      ++optind;
+
+    if (temp == NULL || c == ':')
+      {
+       if (opterr)
+         {
+           if (posixly_correct)
+             /* 1003.2 specifies the format of this message.  */
+             fprintf (stderr, _("%s: illegal option -- %c\n"),
+                      argv[0], c);
+           else
+             fprintf (stderr, _("%s: invalid option -- %c\n"),
+                      argv[0], c);
+         }
+       optopt = c;
+       return '?';
+      }
+    /* Convenience. Treat POSIX -W foo same as long option --foo */
+    if (temp[0] == 'W' && temp[1] == ';')
+      {
+       char *nameend;
+       const struct option *p;
+       const struct option *pfound = NULL;
+       int exact = 0;
+       int ambig = 0;
+       int indfound = 0;
+       int option_index;
+
+       /* This is an option that requires an argument.  */
+       if (*nextchar != '\0')
+         {
+           optarg = nextchar;
+           /* If we end this ARGV-element by taking the rest as an arg,
+              we must advance to the next element now.  */
+           optind++;
+         }
+       else if (optind == argc)
+         {
+           if (opterr)
+             {
+               /* 1003.2 specifies the format of this message.  */
+               fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+                        argv[0], c);
+             }
+           optopt = c;
+           if (optstring[0] == ':')
+             c = ':';
+           else
+             c = '?';
+           return c;
+         }
+       else
+         /* We already incremented `optind' once;
+            increment it again when taking next ARGV-elt as argument.  */
+         optarg = argv[optind++];
+
+       /* optarg is now the argument, see if it's in the
+          table of longopts.  */
+
+       for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
+         /* Do nothing.  */ ;
+
+       /* Test all long options for either exact match
+          or abbreviated matches.  */
+       for (p = longopts, option_index = 0; p->name; p++, option_index++)
+         if (!strncmp (p->name, nextchar, nameend - nextchar))
+           {
+             if ((unsigned int) (nameend - nextchar) == strlen (p->name))
+               {
+                 /* Exact match found.  */
+                 pfound = p;
+                 indfound = option_index;
+                 exact = 1;
+                 break;
+               }
+             else if (pfound == NULL)
+               {
+                 /* First nonexact match found.  */
+                 pfound = p;
+                 indfound = option_index;
+               }
+             else
+               /* Second or later nonexact match found.  */
+               ambig = 1;
+           }
+       if (ambig && !exact)
+         {
+           if (opterr)
+             fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+                      argv[0], argv[optind]);
+           nextchar += strlen (nextchar);
+           optind++;
+           return '?';
+         }
+       if (pfound != NULL)
+         {
+           option_index = indfound;
+           if (*nameend)
+             {
+               /* Don't test has_arg with >, because some C compilers don't
+                  allow it to be used on enums.  */
+               if (pfound->has_arg)
+                 optarg = nameend + 1;
+               else
+                 {
+                   if (opterr)
+                     fprintf (stderr, _("\
+%s: option `-W %s' doesn't allow an argument\n"),
+                              argv[0], pfound->name);
+
+                   nextchar += strlen (nextchar);
+                   return '?';
+                 }
+             }
+           else if (pfound->has_arg == 1)
+             {
+               if (optind < argc)
+                 optarg = argv[optind++];
+               else
+                 {
+                   if (opterr)
+                     fprintf (stderr,
+                              _("%s: option `%s' requires an argument\n"),
+                              argv[0], argv[optind - 1]);
+                   nextchar += strlen (nextchar);
+                   return optstring[0] == ':' ? ':' : '?';
+                 }
+             }
+           nextchar += strlen (nextchar);
+           if (longind != NULL)
+             *longind = option_index;
+           if (pfound->flag)
+             {
+               *(pfound->flag) = pfound->val;
+               return 0;
+             }
+           return pfound->val;
+         }
+         nextchar = NULL;
+         return 'W';   /* Let the application handle it.   */
+      }
+    if (temp[1] == ':')
+      {
+       if (temp[2] == ':')
+         {
+           /* This is an option that accepts an argument optionally.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               optind++;
+             }
+           else
+             optarg = NULL;
+           nextchar = NULL;
+         }
+       else
+         {
+           /* This is an option that requires an argument.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               /* If we end this ARGV-element by taking the rest as an arg,
+                  we must advance to the next element now.  */
+               optind++;
+             }
+           else if (optind == argc)
+             {
+               if (opterr)
+                 {
+                   /* 1003.2 specifies the format of this message.  */
+                   fprintf (stderr,
+                          _("%s: option requires an argument -- %c\n"),
+                          argv[0], c);
+                 }
+               optopt = c;
+               if (optstring[0] == ':')
+                 c = ':';
+               else
+                 c = '?';
+             }
+           else
+             /* We already incremented `optind' once;
+                increment it again when taking next ARGV-elt as argument.  */
+             optarg = argv[optind++];
+           nextchar = NULL;
+         }
+      }
+    return c;
+  }
+}
+
+int
+getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, argv, optstring,
+                          (const struct option *) 0,
+                          (int *) 0,
+                          0);
+}
+
+#endif /* Not ELIDE_CODE.  */
+\f
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+   the above definition of `getopt'.  */
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+
+      c = getopt (argc, argv, "abc:d:0123456789");
+      if (c == -1)
+       break;
+
+      switch (c)
+       {
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+         if (digit_optind != 0 && digit_optind != this_option_optind)
+           printf ("digits occur in two different argv-elements.\n");
+         digit_optind = this_option_optind;
+         printf ("option %c\n", c);
+         break;
+
+       case 'a':
+         printf ("option a\n");
+         break;
+
+       case 'b':
+         printf ("option b\n");
+         break;
+
+       case 'c':
+         printf ("option c with value `%s'\n", optarg);
+         break;
+
+       case '?':
+         break;
+
+       default:
+         printf ("?? getopt returned character code 0%o ??\n", c);
+       }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+       printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/libiberty/getopt1.c b/libiberty/getopt1.c
new file mode 100644 (file)
index 0000000..255b144
--- /dev/null
@@ -0,0 +1,180 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2005
+     Free Software Foundation, Inc.
+
+   NOTE: This source is derived from an old version taken from the GNU C
+   Library (glibc).
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+\f
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if !defined __STDC__ || !__STDC__
+/* This is a separate conditional since some stdc systems
+   reject `defined (const)'.  */
+#ifndef const
+#define const
+#endif
+#endif
+
+#include <stdio.h>
+
+#include "getopt.h"
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#define GETOPT_INTERFACE_VERSION 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+#include <gnu-versions.h>
+#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+#ifndef ELIDE_CODE
+
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef        NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (int argc,  char *const *argv,  const char *options,
+             const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+   If an option that starts with '-' (not '--') doesn't match a long option,
+   but does match a short option, it is parsed as a short option
+   instead.  */
+
+int
+getopt_long_only (int argc, char *const *argv, const char *options,
+                  const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+
+#endif /* Not ELIDE_CODE.  */
+\f
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+      int option_index = 0;
+      static struct option long_options[] =
+      {
+       {"add", 1, 0, 0},
+       {"append", 0, 0, 0},
+       {"delete", 1, 0, 0},
+       {"verbose", 0, 0, 0},
+       {"create", 0, 0, 0},
+       {"file", 1, 0, 0},
+       {0, 0, 0, 0}
+      };
+
+      c = getopt_long (argc, argv, "abc:d:0123456789",
+                      long_options, &option_index);
+      if (c == -1)
+       break;
+
+      switch (c)
+       {
+       case 0:
+         printf ("option %s", long_options[option_index].name);
+         if (optarg)
+           printf (" with arg %s", optarg);
+         printf ("\n");
+         break;
+
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+         if (digit_optind != 0 && digit_optind != this_option_optind)
+           printf ("digits occur in two different argv-elements.\n");
+         digit_optind = this_option_optind;
+         printf ("option %c\n", c);
+         break;
+
+       case 'a':
+         printf ("option a\n");
+         break;
+
+       case 'b':
+         printf ("option b\n");
+         break;
+
+       case 'c':
+         printf ("option c with value `%s'\n", optarg);
+         break;
+
+       case 'd':
+         printf ("option d with value `%s'\n", optarg);
+         break;
+
+       case '?':
+         break;
+
+       default:
+         printf ("?? getopt returned character code 0%o ??\n", c);
+       }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+       printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/libiberty/getpagesize.c b/libiberty/getpagesize.c
new file mode 100644 (file)
index 0000000..1c3a263
--- /dev/null
@@ -0,0 +1,90 @@
+/* Emulation of getpagesize() for systems that need it. */
+
+/*
+
+@deftypefn Supplemental int getpagesize (void)
+
+Returns the number of bytes in a page of memory.  This is the
+granularity of many of the system memory management routines.  No
+guarantee is made as to whether or not it is the same as the basic
+memory management hardware page size.
+
+@end deftypefn
+
+BUGS
+
+       Is intended as a reasonable replacement for systems where this
+       is not provided as a system call.  The value of 4096 may or may
+       not be correct for the systems where it is returned as the default
+       value.
+
+*/
+
+#ifndef VMS
+
+#include "config.h"
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#undef GNU_OUR_PAGESIZE
+#if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H)
+#include <unistd.h>
+#ifdef _SC_PAGESIZE
+#define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE)
+#endif
+#endif
+
+#ifndef GNU_OUR_PAGESIZE
+# ifdef        PAGESIZE
+#  define      GNU_OUR_PAGESIZE PAGESIZE
+# else /* no PAGESIZE */
+#  ifdef       EXEC_PAGESIZE
+#   define     GNU_OUR_PAGESIZE EXEC_PAGESIZE
+#  else        /* no EXEC_PAGESIZE */
+#   ifdef      NBPG
+#    define    GNU_OUR_PAGESIZE (NBPG * CLSIZE)
+#    ifndef    CLSIZE
+#     define   CLSIZE 1
+#    endif     /* CLSIZE */
+#   else       /* no NBPG */
+#    ifdef     NBPC
+#     define   GNU_OUR_PAGESIZE NBPC
+#    else      /* no NBPC */
+#     define   GNU_OUR_PAGESIZE 4096   /* Just punt and use reasonable value */
+#    endif /* NBPC */
+#   endif /* NBPG */
+#  endif /* EXEC_PAGESIZE */
+# endif /* PAGESIZE */
+#endif /* GNU_OUR_PAGESIZE */
+
+int
+getpagesize (void)
+{
+  return (GNU_OUR_PAGESIZE);
+}
+
+#else /* VMS */
+
+#if 0  /* older distributions of gcc-vms are missing <syidef.h> */
+#include <syidef.h>
+#endif
+#ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */
+#define SYI$_PAGE_SIZE 4452
+#endif
+extern unsigned long lib$getsyi(const unsigned short *,...);
+
+int getpagesize (void)
+{
+  long pagsiz = 0L;
+  unsigned short itmcod = SYI$_PAGE_SIZE;
+
+  (void) lib$getsyi (&itmcod, (void *) &pagsiz);
+  if (pagsiz == 0L)
+    pagsiz = 512L;     /* VAX default */
+  return (int) pagsiz;
+}
+
+#endif /* VMS */
diff --git a/libiberty/getpwd.c b/libiberty/getpwd.c
new file mode 100644 (file)
index 0000000..fa5c132
--- /dev/null
@@ -0,0 +1,128 @@
+/* getpwd.c - get the working directory */
+
+/*
+
+@deftypefn Supplemental char* getpwd (void)
+
+Returns the current working directory.  This implementation caches the
+result on the assumption that the process will not call @code{chdir}
+between calls to @code{getpwd}.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include "libiberty.h"
+
+/* Virtually every UN*X system now in common use (except for pre-4.3-tahoe
+   BSD systems) now provides getcwd as called for by POSIX.  Allow for
+   the few exceptions to the general rule here.  */
+
+#if !defined(HAVE_GETCWD) && defined(HAVE_GETWD)
+/* Prototype in case the system headers doesn't provide it. */
+extern char *getwd ();
+#define getcwd(buf,len) getwd(buf)
+#endif
+
+#ifdef MAXPATHLEN
+#define GUESSPATHLEN (MAXPATHLEN + 1)
+#else
+#define GUESSPATHLEN 100
+#endif
+
+#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN__)))
+
+/* Get the working directory.  Use the PWD environment variable if it's
+   set correctly, since this is faster and gives more uniform answers
+   to the user.  Yield the working directory if successful; otherwise,
+   yield 0 and set errno.  */
+
+char *
+getpwd (void)
+{
+  static char *pwd;
+  static int failure_errno;
+
+  char *p = pwd;
+  size_t s;
+  struct stat dotstat, pwdstat;
+
+  if (!p && !(errno = failure_errno))
+    {
+      if (! ((p = getenv ("PWD")) != 0
+            && *p == '/'
+            && stat (p, &pwdstat) == 0
+            && stat (".", &dotstat) == 0
+            && dotstat.st_ino == pwdstat.st_ino
+            && dotstat.st_dev == pwdstat.st_dev))
+
+       /* The shortcut didn't work.  Try the slow, ``sure'' way.  */
+       for (s = GUESSPATHLEN;  !getcwd (p = XNEWVEC (char, s), s);  s *= 2)
+         {
+           int e = errno;
+           free (p);
+#ifdef ERANGE
+           if (e != ERANGE)
+#endif
+             {
+               errno = failure_errno = e;
+               p = 0;
+               break;
+             }
+         }
+
+      /* Cache the result.  This assumes that the program does
+        not invoke chdir between calls to getpwd.  */
+      pwd = p;
+    }
+  return p;
+}
+
+#else  /* VMS || _WIN32 && !__CYGWIN__ */
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif
+
+char *
+getpwd (void)
+{
+  static char *pwd = 0;
+
+  if (!pwd)
+    pwd = getcwd (XNEWVEC (char, MAXPATHLEN + 1), MAXPATHLEN + 1
+#ifdef VMS
+                 , 0
+#endif
+                 );
+  return pwd;
+}
+
+#endif /* VMS || _WIN32 && !__CYGWIN__ */
diff --git a/libiberty/getruntime.c b/libiberty/getruntime.c
new file mode 100644 (file)
index 0000000..82f3d2e
--- /dev/null
@@ -0,0 +1,116 @@
+/* Return time used so far, in microseconds.
+   Copyright (C) 1994, 1999, 2002 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+
+#include "ansidecl.h"
+#include "libiberty.h"
+
+/* On some systems (such as WindISS), you must include <sys/types.h>
+   to get the definition of "time_t" before you include <time.h>.  */
+#include <sys/types.h>
+
+/* There are several ways to get elapsed execution time; unfortunately no
+   single way is available for all host systems, nor are there reliable
+   ways to find out which way is correct for a given host. */
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  ifdef HAVE_TIME_H
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
+#include <sys/resource.h>
+#endif
+
+#ifdef HAVE_TIMES
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/times.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* This is a fallback; if wrong, it will likely make obviously wrong
+   results. */
+
+#ifndef CLOCKS_PER_SEC
+#define CLOCKS_PER_SEC 1
+#endif
+
+#ifdef _SC_CLK_TCK
+#define GNU_HZ  sysconf(_SC_CLK_TCK)
+#else
+#ifdef HZ
+#define GNU_HZ  HZ
+#else
+#ifdef CLOCKS_PER_SEC
+#define GNU_HZ  CLOCKS_PER_SEC
+#endif
+#endif
+#endif
+
+/*
+
+@deftypefn Replacement long get_run_time (void)
+
+Returns the time used so far, in microseconds.  If possible, this is
+the time used by this process, else it is the elapsed time since the
+process started.
+
+@end deftypefn
+
+*/
+
+long
+get_run_time (void)
+{
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
+  struct rusage rusage;
+
+  getrusage (0, &rusage);
+  return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
+         + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
+#else /* ! HAVE_GETRUSAGE */
+#ifdef HAVE_TIMES
+  struct tms tms;
+
+  times (&tms);
+  return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
+#else /* ! HAVE_TIMES */
+  /* Fall back on clock and hope it's correctly implemented. */
+  const long clocks_per_sec = CLOCKS_PER_SEC;
+  if (clocks_per_sec <= 1000000)
+    return clock () * (1000000 / clocks_per_sec);
+  else
+    return clock () / clocks_per_sec;
+#endif  /* HAVE_TIMES */
+#endif  /* HAVE_GETRUSAGE */
+}
diff --git a/libiberty/gettimeofday.c b/libiberty/gettimeofday.c
new file mode 100644 (file)
index 0000000..fca1679
--- /dev/null
@@ -0,0 +1,30 @@
+#include "config.h"
+#include "libiberty.h"
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+/* 
+
+@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz})
+
+Writes the current time to @var{tp}.  This implementation requires
+that @var{tz} be NULL.  Returns 0 on success, -1 on failure.
+
+@end deftypefn
+
+*/ 
+
+int
+gettimeofday (struct timeval *tp, void *tz)
+{
+  if (tz)
+    abort ();
+  tp->tv_usec = 0;
+  if (time (&tp->tv_sec) == (time_t) -1)
+    return -1;
+  return 0;
+}
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
new file mode 100644 (file)
index 0000000..bf34a6d
--- /dev/null
@@ -0,0 +1,955 @@
+/* An expandable hash tables datatype.  
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov (vmakarov@cygnus.com).
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* This package implements basic hash table functionality.  It is possible
+   to search for an entry, create an entry and destroy an entry.
+
+   Elements in the table are generic pointers.
+
+   The size of the table is not fixed; if the occupancy of the table
+   grows too high the hash table will be expanded.
+
+   The abstract data implementation is based on generalized Algorithm D
+   from Knuth's book "The art of computer programming".  Hash table is
+   expanded by creation of new hash table and transferring elements from
+   the old table to the new table. */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <stdio.h>
+
+#include "libiberty.h"
+#include "ansidecl.h"
+#include "hashtab.h"
+
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+
+static unsigned int higher_prime_index (unsigned long);
+static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);
+static hashval_t htab_mod (hashval_t, htab_t);
+static hashval_t htab_mod_m2 (hashval_t, htab_t);
+static hashval_t hash_pointer (const void *);
+static int eq_pointer (const void *, const void *);
+static int htab_expand (htab_t);
+static PTR *find_empty_slot_for_expand (htab_t, hashval_t);
+
+/* At some point, we could make these be NULL, and modify the
+   hash-table routines to handle NULL specially; that would avoid
+   function-call overhead for the common case of hashing pointers.  */
+htab_hash htab_hash_pointer = hash_pointer;
+htab_eq htab_eq_pointer = eq_pointer;
+
+/* Table of primes and multiplicative inverses.
+
+   Note that these are not minimally reduced inverses.  Unlike when generating
+   code to divide by a constant, we want to be able to use the same algorithm
+   all the time.  All of these inverses (are implied to) have bit 32 set.
+
+   For the record, here's the function that computed the table; it's a 
+   vastly simplified version of the function of the same name from gcc.  */
+
+#if 0
+unsigned int
+ceil_log2 (unsigned int x)
+{
+  int i;
+  for (i = 31; i >= 0 ; --i)
+    if (x > (1u << i))
+      return i+1;
+  abort ();
+}
+
+unsigned int
+choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp)
+{
+  unsigned long long mhigh;
+  double nx;
+  int lgup, post_shift;
+  int pow, pow2;
+  int n = 32, precision = 32;
+
+  lgup = ceil_log2 (d);
+  pow = n + lgup;
+  pow2 = n + lgup - precision;
+
+  nx = ldexp (1.0, pow) + ldexp (1.0, pow2);
+  mhigh = nx / d;
+
+  *shiftp = lgup - 1;
+  *mlp = mhigh;
+  return mhigh >> 32;
+}
+#endif
+
+struct prime_ent
+{
+  hashval_t prime;
+  hashval_t inv;
+  hashval_t inv_m2;    /* inverse of prime-2 */
+  hashval_t shift;
+};
+
+static struct prime_ent const prime_tab[] = {
+  {          7, 0x24924925, 0x9999999b, 2 },
+  {         13, 0x3b13b13c, 0x745d1747, 3 },
+  {         31, 0x08421085, 0x1a7b9612, 4 },
+  {         61, 0x0c9714fc, 0x15b1e5f8, 5 },
+  {        127, 0x02040811, 0x0624dd30, 6 },
+  {        251, 0x05197f7e, 0x073260a5, 7 },
+  {        509, 0x01824366, 0x02864fc8, 8 },
+  {       1021, 0x00c0906d, 0x014191f7, 9 },
+  {       2039, 0x0121456f, 0x0161e69e, 10 },
+  {       4093, 0x00300902, 0x00501908, 11 },
+  {       8191, 0x00080041, 0x00180241, 12 },
+  {      16381, 0x000c0091, 0x00140191, 13 },
+  {      32749, 0x002605a5, 0x002a06e6, 14 },
+  {      65521, 0x000f00e2, 0x00110122, 15 },
+  {     131071, 0x00008001, 0x00018003, 16 },
+  {     262139, 0x00014002, 0x0001c004, 17 },
+  {     524287, 0x00002001, 0x00006001, 18 },
+  {    1048573, 0x00003001, 0x00005001, 19 },
+  {    2097143, 0x00004801, 0x00005801, 20 },
+  {    4194301, 0x00000c01, 0x00001401, 21 },
+  {    8388593, 0x00001e01, 0x00002201, 22 },
+  {   16777213, 0x00000301, 0x00000501, 23 },
+  {   33554393, 0x00001381, 0x00001481, 24 },
+  {   67108859, 0x00000141, 0x000001c1, 25 },
+  {  134217689, 0x000004e1, 0x00000521, 26 },
+  {  268435399, 0x00000391, 0x000003b1, 27 },
+  {  536870909, 0x00000019, 0x00000029, 28 },
+  { 1073741789, 0x0000008d, 0x00000095, 29 },
+  { 2147483647, 0x00000003, 0x00000007, 30 },
+  /* Avoid "decimal constant so large it is unsigned" for 4294967291.  */
+  { 0xfffffffb, 0x00000006, 0x00000008, 31 }
+};
+
+/* The following function returns an index into the above table of the
+   nearest prime number which is greater than N, and near a power of two. */
+
+static unsigned int
+higher_prime_index (unsigned long n)
+{
+  unsigned int low = 0;
+  unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);
+
+  while (low != high)
+    {
+      unsigned int mid = low + (high - low) / 2;
+      if (n > prime_tab[mid].prime)
+       low = mid + 1;
+      else
+       high = mid;
+    }
+
+  /* If we've run out of primes, abort.  */
+  if (n > prime_tab[low].prime)
+    {
+      fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
+      abort ();
+    }
+
+  return low;
+}
+
+/* Returns a hash code for P.  */
+
+static hashval_t
+hash_pointer (const PTR p)
+{
+  return (hashval_t) ((long)p >> 3);
+}
+
+/* Returns non-zero if P1 and P2 are equal.  */
+
+static int
+eq_pointer (const PTR p1, const PTR p2)
+{
+  return p1 == p2;
+}
+
+
+/* The parens around the function names in the next two definitions
+   are essential in order to prevent macro expansions of the name.
+   The bodies, however, are expanded as expected, so they are not
+   recursive definitions.  */
+
+/* Return the current size of given hash table.  */
+
+#define htab_size(htab)  ((htab)->size)
+
+size_t
+(htab_size) (htab_t htab)
+{
+  return htab_size (htab);
+}
+
+/* Return the current number of elements in given hash table. */
+
+#define htab_elements(htab)  ((htab)->n_elements - (htab)->n_deleted)
+
+size_t
+(htab_elements) (htab_t htab)
+{
+  return htab_elements (htab);
+}
+
+/* Return X % Y.  */
+
+static inline hashval_t
+htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift)
+{
+  /* The multiplicative inverses computed above are for 32-bit types, and
+     requires that we be able to compute a highpart multiply.  */
+#ifdef UNSIGNED_64BIT_TYPE
+  __extension__ typedef UNSIGNED_64BIT_TYPE ull;
+  if (sizeof (hashval_t) * CHAR_BIT <= 32)
+    {
+      hashval_t t1, t2, t3, t4, q, r;
+
+      t1 = ((ull)x * inv) >> 32;
+      t2 = x - t1;
+      t3 = t2 >> 1;
+      t4 = t1 + t3;
+      q  = t4 >> shift;
+      r  = x - (q * y);
+
+      return r;
+    }
+#endif
+
+  /* Otherwise just use the native division routines.  */
+  return x % y;
+}
+
+/* Compute the primary hash for HASH given HTAB's current size.  */
+
+static inline hashval_t
+htab_mod (hashval_t hash, htab_t htab)
+{
+  const struct prime_ent *p = &prime_tab[htab->size_prime_index];
+  return htab_mod_1 (hash, p->prime, p->inv, p->shift);
+}
+
+/* Compute the secondary hash for HASH given HTAB's current size.  */
+
+static inline hashval_t
+htab_mod_m2 (hashval_t hash, htab_t htab)
+{
+  const struct prime_ent *p = &prime_tab[htab->size_prime_index];
+  return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);
+}
+
+/* This function creates table with length slightly longer than given
+   source length.  Created hash table is initiated as empty (all the
+   hash table entries are HTAB_EMPTY_ENTRY).  The function returns the
+   created hash table, or NULL if memory allocation fails.  */
+
+htab_t
+htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,
+                   htab_del del_f, htab_alloc alloc_f, htab_free free_f)
+{
+  htab_t result;
+  unsigned int size_prime_index;
+
+  size_prime_index = higher_prime_index (size);
+  size = prime_tab[size_prime_index].prime;
+
+  result = (htab_t) (*alloc_f) (1, sizeof (struct htab));
+  if (result == NULL)
+    return NULL;
+  result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR));
+  if (result->entries == NULL)
+    {
+      if (free_f != NULL)
+       (*free_f) (result);
+      return NULL;
+    }
+  result->size = size;
+  result->size_prime_index = size_prime_index;
+  result->hash_f = hash_f;
+  result->eq_f = eq_f;
+  result->del_f = del_f;
+  result->alloc_f = alloc_f;
+  result->free_f = free_f;
+  return result;
+}
+
+/* As above, but use the variants of alloc_f and free_f which accept
+   an extra argument.  */
+
+htab_t
+htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f,
+                      htab_del del_f, void *alloc_arg,
+                      htab_alloc_with_arg alloc_f,
+                     htab_free_with_arg free_f)
+{
+  htab_t result;
+  unsigned int size_prime_index;
+
+  size_prime_index = higher_prime_index (size);
+  size = prime_tab[size_prime_index].prime;
+
+  result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
+  if (result == NULL)
+    return NULL;
+  result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR));
+  if (result->entries == NULL)
+    {
+      if (free_f != NULL)
+       (*free_f) (alloc_arg, result);
+      return NULL;
+    }
+  result->size = size;
+  result->size_prime_index = size_prime_index;
+  result->hash_f = hash_f;
+  result->eq_f = eq_f;
+  result->del_f = del_f;
+  result->alloc_arg = alloc_arg;
+  result->alloc_with_arg_f = alloc_f;
+  result->free_with_arg_f = free_f;
+  return result;
+}
+
+/* Update the function pointers and allocation parameter in the htab_t.  */
+
+void
+htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f,
+                       htab_del del_f, PTR alloc_arg,
+                       htab_alloc_with_arg alloc_f, htab_free_with_arg free_f)
+{
+  htab->hash_f = hash_f;
+  htab->eq_f = eq_f;
+  htab->del_f = del_f;
+  htab->alloc_arg = alloc_arg;
+  htab->alloc_with_arg_f = alloc_f;
+  htab->free_with_arg_f = free_f;
+}
+
+/* These functions exist solely for backward compatibility.  */
+
+#undef htab_create
+htab_t
+htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
+{
+  return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
+}
+
+htab_t
+htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
+{
+  return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
+}
+
+/* This function frees all memory allocated for given hash table.
+   Naturally the hash table must already exist. */
+
+void
+htab_delete (htab_t htab)
+{
+  size_t size = htab_size (htab);
+  PTR *entries = htab->entries;
+  int i;
+
+  if (htab->del_f)
+    for (i = size - 1; i >= 0; i--)
+      if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
+       (*htab->del_f) (entries[i]);
+
+  if (htab->free_f != NULL)
+    {
+      (*htab->free_f) (entries);
+      (*htab->free_f) (htab);
+    }
+  else if (htab->free_with_arg_f != NULL)
+    {
+      (*htab->free_with_arg_f) (htab->alloc_arg, entries);
+      (*htab->free_with_arg_f) (htab->alloc_arg, htab);
+    }
+}
+
+/* This function clears all entries in the given hash table.  */
+
+void
+htab_empty (htab_t htab)
+{
+  size_t size = htab_size (htab);
+  PTR *entries = htab->entries;
+  int i;
+
+  if (htab->del_f)
+    for (i = size - 1; i >= 0; i--)
+      if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
+       (*htab->del_f) (entries[i]);
+
+  /* Instead of clearing megabyte, downsize the table.  */
+  if (size > 1024*1024 / sizeof (PTR))
+    {
+      int nindex = higher_prime_index (1024 / sizeof (PTR));
+      int nsize = prime_tab[nindex].prime;
+
+      if (htab->free_f != NULL)
+       (*htab->free_f) (htab->entries);
+      else if (htab->free_with_arg_f != NULL)
+       (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
+      if (htab->alloc_with_arg_f != NULL)
+       htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
+                                                          sizeof (PTR *));
+      else
+       htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
+     htab->size = nsize;
+     htab->size_prime_index = nindex;
+    }
+  else
+    memset (entries, 0, size * sizeof (PTR));
+  htab->n_deleted = 0;
+  htab->n_elements = 0;
+}
+
+/* Similar to htab_find_slot, but without several unwanted side effects:
+    - Does not call htab->eq_f when it finds an existing entry.
+    - Does not change the count of elements/searches/collisions in the
+      hash table.
+   This function also assumes there are no deleted entries in the table.
+   HASH is the hash value for the element to be inserted.  */
+
+static PTR *
+find_empty_slot_for_expand (htab_t htab, hashval_t hash)
+{
+  hashval_t index = htab_mod (hash, htab);
+  size_t size = htab_size (htab);
+  PTR *slot = htab->entries + index;
+  hashval_t hash2;
+
+  if (*slot == HTAB_EMPTY_ENTRY)
+    return slot;
+  else if (*slot == HTAB_DELETED_ENTRY)
+    abort ();
+
+  hash2 = htab_mod_m2 (hash, htab);
+  for (;;)
+    {
+      index += hash2;
+      if (index >= size)
+       index -= size;
+
+      slot = htab->entries + index;
+      if (*slot == HTAB_EMPTY_ENTRY)
+       return slot;
+      else if (*slot == HTAB_DELETED_ENTRY)
+       abort ();
+    }
+}
+
+/* The following function changes size of memory allocated for the
+   entries and repeatedly inserts the table elements.  The occupancy
+   of the table after the call will be about 50%.  Naturally the hash
+   table must already exist.  Remember also that the place of the
+   table entries is changed.  If memory allocation failures are allowed,
+   this function will return zero, indicating that the table could not be
+   expanded.  If all goes well, it will return a non-zero value.  */
+
+static int
+htab_expand (htab_t htab)
+{
+  PTR *oentries;
+  PTR *olimit;
+  PTR *p;
+  PTR *nentries;
+  size_t nsize, osize, elts;
+  unsigned int oindex, nindex;
+
+  oentries = htab->entries;
+  oindex = htab->size_prime_index;
+  osize = htab->size;
+  olimit = oentries + osize;
+  elts = htab_elements (htab);
+
+  /* Resize only when table after removal of unused elements is either
+     too full or too empty.  */
+  if (elts * 2 > osize || (elts * 8 < osize && osize > 32))
+    {
+      nindex = higher_prime_index (elts * 2);
+      nsize = prime_tab[nindex].prime;
+    }
+  else
+    {
+      nindex = oindex;
+      nsize = osize;
+    }
+
+  if (htab->alloc_with_arg_f != NULL)
+    nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
+                                                 sizeof (PTR *));
+  else
+    nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
+  if (nentries == NULL)
+    return 0;
+  htab->entries = nentries;
+  htab->size = nsize;
+  htab->size_prime_index = nindex;
+  htab->n_elements -= htab->n_deleted;
+  htab->n_deleted = 0;
+
+  p = oentries;
+  do
+    {
+      PTR x = *p;
+
+      if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
+       {
+         PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
+
+         *q = x;
+       }
+
+      p++;
+    }
+  while (p < olimit);
+
+  if (htab->free_f != NULL)
+    (*htab->free_f) (oentries);
+  else if (htab->free_with_arg_f != NULL)
+    (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
+  return 1;
+}
+
+/* This function searches for a hash table entry equal to the given
+   element.  It cannot be used to insert or delete an element.  */
+
+PTR
+htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash)
+{
+  hashval_t index, hash2;
+  size_t size;
+  PTR entry;
+
+  htab->searches++;
+  size = htab_size (htab);
+  index = htab_mod (hash, htab);
+
+  entry = htab->entries[index];
+  if (entry == HTAB_EMPTY_ENTRY
+      || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
+    return entry;
+
+  hash2 = htab_mod_m2 (hash, htab);
+  for (;;)
+    {
+      htab->collisions++;
+      index += hash2;
+      if (index >= size)
+       index -= size;
+
+      entry = htab->entries[index];
+      if (entry == HTAB_EMPTY_ENTRY
+         || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
+       return entry;
+    }
+}
+
+/* Like htab_find_slot_with_hash, but compute the hash value from the
+   element.  */
+
+PTR
+htab_find (htab_t htab, const PTR element)
+{
+  return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
+}
+
+/* This function searches for a hash table slot containing an entry
+   equal to the given element.  To delete an entry, call this with
+   insert=NO_INSERT, then call htab_clear_slot on the slot returned
+   (possibly after doing some checks).  To insert an entry, call this
+   with insert=INSERT, then write the value you want into the returned
+   slot.  When inserting an entry, NULL may be returned if memory
+   allocation fails.  */
+
+PTR *
+htab_find_slot_with_hash (htab_t htab, const PTR element,
+                          hashval_t hash, enum insert_option insert)
+{
+  PTR *first_deleted_slot;
+  hashval_t index, hash2;
+  size_t size;
+  PTR entry;
+
+  size = htab_size (htab);
+  if (insert == INSERT && size * 3 <= htab->n_elements * 4)
+    {
+      if (htab_expand (htab) == 0)
+       return NULL;
+      size = htab_size (htab);
+    }
+
+  index = htab_mod (hash, htab);
+
+  htab->searches++;
+  first_deleted_slot = NULL;
+
+  entry = htab->entries[index];
+  if (entry == HTAB_EMPTY_ENTRY)
+    goto empty_entry;
+  else if (entry == HTAB_DELETED_ENTRY)
+    first_deleted_slot = &htab->entries[index];
+  else if ((*htab->eq_f) (entry, element))
+    return &htab->entries[index];
+      
+  hash2 = htab_mod_m2 (hash, htab);
+  for (;;)
+    {
+      htab->collisions++;
+      index += hash2;
+      if (index >= size)
+       index -= size;
+      
+      entry = htab->entries[index];
+      if (entry == HTAB_EMPTY_ENTRY)
+       goto empty_entry;
+      else if (entry == HTAB_DELETED_ENTRY)
+       {
+         if (!first_deleted_slot)
+           first_deleted_slot = &htab->entries[index];
+       }
+      else if ((*htab->eq_f) (entry, element))
+       return &htab->entries[index];
+    }
+
+ empty_entry:
+  if (insert == NO_INSERT)
+    return NULL;
+
+  if (first_deleted_slot)
+    {
+      htab->n_deleted--;
+      *first_deleted_slot = HTAB_EMPTY_ENTRY;
+      return first_deleted_slot;
+    }
+
+  htab->n_elements++;
+  return &htab->entries[index];
+}
+
+/* Like htab_find_slot_with_hash, but compute the hash value from the
+   element.  */
+
+PTR *
+htab_find_slot (htab_t htab, const PTR element, enum insert_option insert)
+{
+  return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
+                                  insert);
+}
+
+/* This function deletes an element with the given value from hash
+   table (the hash is computed from the element).  If there is no matching
+   element in the hash table, this function does nothing.  */
+
+void
+htab_remove_elt (htab_t htab, PTR element)
+{
+  htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element));
+}
+
+
+/* This function deletes an element with the given value from hash
+   table.  If there is no matching element in the hash table, this
+   function does nothing.  */
+
+void
+htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash)
+{
+  PTR *slot;
+
+  slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
+  if (*slot == HTAB_EMPTY_ENTRY)
+    return;
+
+  if (htab->del_f)
+    (*htab->del_f) (*slot);
+
+  *slot = HTAB_DELETED_ENTRY;
+  htab->n_deleted++;
+}
+
+/* This function clears a specified slot in a hash table.  It is
+   useful when you've already done the lookup and don't want to do it
+   again.  */
+
+void
+htab_clear_slot (htab_t htab, PTR *slot)
+{
+  if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
+      || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)
+    abort ();
+
+  if (htab->del_f)
+    (*htab->del_f) (*slot);
+
+  *slot = HTAB_DELETED_ENTRY;
+  htab->n_deleted++;
+}
+
+/* This function scans over the entire hash table calling
+   CALLBACK for each live entry.  If CALLBACK returns false,
+   the iteration stops.  INFO is passed as CALLBACK's second
+   argument.  */
+
+void
+htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info)
+{
+  PTR *slot;
+  PTR *limit;
+  
+  slot = htab->entries;
+  limit = slot + htab_size (htab);
+
+  do
+    {
+      PTR x = *slot;
+
+      if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
+       if (!(*callback) (slot, info))
+         break;
+    }
+  while (++slot < limit);
+}
+
+/* Like htab_traverse_noresize, but does resize the table when it is
+   too empty to improve effectivity of subsequent calls.  */
+
+void
+htab_traverse (htab_t htab, htab_trav callback, PTR info)
+{
+  if (htab_elements (htab) * 8 < htab_size (htab))
+    htab_expand (htab);
+
+  htab_traverse_noresize (htab, callback, info);
+}
+
+/* Return the fraction of fixed collisions during all work with given
+   hash table. */
+
+double
+htab_collisions (htab_t htab)
+{
+  if (htab->searches == 0)
+    return 0.0;
+
+  return (double) htab->collisions / (double) htab->searches;
+}
+
+/* Hash P as a null-terminated string.
+
+   Copied from gcc/hashtable.c.  Zack had the following to say with respect
+   to applicability, though note that unlike hashtable.c, this hash table
+   implementation re-hashes rather than chain buckets.
+
+   http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
+   From: Zack Weinberg <zackw@panix.com>
+   Date: Fri, 17 Aug 2001 02:15:56 -0400
+
+   I got it by extracting all the identifiers from all the source code
+   I had lying around in mid-1999, and testing many recurrences of
+   the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
+   prime numbers or the appropriate identity.  This was the best one.
+   I don't remember exactly what constituted "best", except I was
+   looking at bucket-length distributions mostly.
+   
+   So it should be very good at hashing identifiers, but might not be
+   as good at arbitrary strings.
+   
+   I'll add that it thoroughly trounces the hash functions recommended
+   for this use at http://burtleburtle.net/bob/hash/index.html, both
+   on speed and bucket distribution.  I haven't tried it against the
+   function they just started using for Perl's hashes.  */
+
+hashval_t
+htab_hash_string (const PTR p)
+{
+  const unsigned char *str = (const unsigned char *) p;
+  hashval_t r = 0;
+  unsigned char c;
+
+  while ((c = *str++) != 0)
+    r = r * 67 + c - 113;
+
+  return r;
+}
+
+/* DERIVED FROM:
+--------------------------------------------------------------------
+lookup2.c, by Bob Jenkins, December 1996, Public Domain.
+hash(), hash2(), hash3, and mix() are externally useful functions.
+Routines to test the hash are included if SELF_TEST is defined.
+You can use this free for any purpose.  It has no warranty.
+--------------------------------------------------------------------
+*/
+
+/*
+--------------------------------------------------------------------
+mix -- mix 3 32-bit values reversibly.
+For every delta with one or two bit set, and the deltas of all three
+  high bits or all three low bits, whether the original value of a,b,c
+  is almost all zero or is uniformly distributed,
+* If mix() is run forward or backward, at least 32 bits in a,b,c
+  have at least 1/4 probability of changing.
+* If mix() is run forward, every bit of c will change between 1/3 and
+  2/3 of the time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)
+mix() was built out of 36 single-cycle latency instructions in a 
+  structure that could supported 2x parallelism, like so:
+      a -= b; 
+      a -= c; x = (c>>13);
+      b -= c; a ^= x;
+      b -= a; x = (a<<8);
+      c -= a; b ^= x;
+      c -= b; x = (b>>13);
+      ...
+  Unfortunately, superscalar Pentiums and Sparcs can't take advantage 
+  of that parallelism.  They've also turned some of those single-cycle
+  latency instructions into multi-cycle latency instructions.  Still,
+  this is the fastest good hash I could find.  There were about 2^^68
+  to choose from.  I only looked at a billion or so.
+--------------------------------------------------------------------
+*/
+/* same, but slower, works on systems that might have 8 byte hashval_t's */
+#define mix(a,b,c) \
+{ \
+  a -= b; a -= c; a ^= (c>>13); \
+  b -= c; b -= a; b ^= (a<< 8); \
+  c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
+  a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
+  b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
+  c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
+  a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
+  b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
+  c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
+}
+
+/*
+--------------------------------------------------------------------
+hash() -- hash a variable-length key into a 32-bit value
+  k     : the key (the unaligned variable-length array of bytes)
+  len   : the length of the key, counting by bytes
+  level : can be any 4-byte value
+Returns a 32-bit value.  Every bit of the key affects every bit of
+the return value.  Every 1-bit and 2-bit delta achieves avalanche.
+About 36+6len instructions.
+
+The best hash table sizes are powers of 2.  There is no need to do
+mod a prime (mod is sooo slow!).  If you need less than 32 bits,
+use a bitmask.  For example, if you need only 10 bits, do
+  h = (h & hashmask(10));
+In which case, the hash table should have hashsize(10) elements.
+
+If you are hashing n strings (ub1 **)k, do it like this:
+  for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
+
+By Bob Jenkins, 1996.  bob_jenkins@burtleburtle.net.  You may use this
+code any way you wish, private, educational, or commercial.  It's free.
+
+See http://burtleburtle.net/bob/hash/evahash.html
+Use for hash table lookup, or anything where one collision in 2^32 is
+acceptable.  Do NOT use for cryptographic purposes.
+--------------------------------------------------------------------
+*/
+
+hashval_t
+iterative_hash (const PTR k_in /* the key */,
+                register size_t  length /* the length of the key */,
+                register hashval_t initval /* the previous hash, or
+                                              an arbitrary value */)
+{
+  register const unsigned char *k = (const unsigned char *)k_in;
+  register hashval_t a,b,c,len;
+
+  /* Set up the internal state */
+  len = length;
+  a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
+  c = initval;           /* the previous hash value */
+
+  /*---------------------------------------- handle most of the key */
+#ifndef WORDS_BIGENDIAN
+  /* On a little-endian machine, if the data is 4-byte aligned we can hash
+     by word for better speed.  This gives nondeterministic results on
+     big-endian machines.  */
+  if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
+    while (len >= 12)    /* aligned */
+      {
+       a += *(hashval_t *)(k+0);
+       b += *(hashval_t *)(k+4);
+       c += *(hashval_t *)(k+8);
+       mix(a,b,c);
+       k += 12; len -= 12;
+      }
+  else /* unaligned */
+#endif
+    while (len >= 12)
+      {
+       a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
+       b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
+       c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
+       mix(a,b,c);
+       k += 12; len -= 12;
+      }
+
+  /*------------------------------------- handle the last 11 bytes */
+  c += length;
+  switch(len)              /* all the case statements fall through */
+    {
+    case 11: c+=((hashval_t)k[10]<<24);
+    case 10: c+=((hashval_t)k[9]<<16);
+    case 9 : c+=((hashval_t)k[8]<<8);
+      /* the first byte of c is reserved for the length */
+    case 8 : b+=((hashval_t)k[7]<<24);
+    case 7 : b+=((hashval_t)k[6]<<16);
+    case 6 : b+=((hashval_t)k[5]<<8);
+    case 5 : b+=k[4];
+    case 4 : a+=((hashval_t)k[3]<<24);
+    case 3 : a+=((hashval_t)k[2]<<16);
+    case 2 : a+=((hashval_t)k[1]<<8);
+    case 1 : a+=k[0];
+      /* case 0: nothing left to add */
+    }
+  mix(a,b,c);
+  /*-------------------------------------------- report the result */
+  return c;
+}
diff --git a/libiberty/hex.c b/libiberty/hex.c
new file mode 100644 (file)
index 0000000..5eeafdb
--- /dev/null
@@ -0,0 +1,192 @@
+/* Hex character manipulation support.
+   Copyright (C) 1995, 2001 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include <stdio.h>  /* for EOF */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "libiberty.h"
+#include "safe-ctype.h" /* for HOST_CHARSET_ASCII */
+
+#if EOF != -1
+ #error "hex.c requires EOF == -1"
+#endif
+
+/*
+
+@deftypefn Extension void hex_init (void)
+
+Initializes the array mapping the current character set to
+corresponding hex values.  This function must be called before any
+call to @code{hex_p} or @code{hex_value}.  If you fail to call it, a
+default ASCII-based table will normally be used on ASCII systems.
+
+@end deftypefn
+
+@deftypefn Extension int hex_p (int @var{c})
+
+Evaluates to non-zero if the given character is a valid hex character,
+or zero if it is not.  Note that the value you pass will be cast to
+@code{unsigned char} within the macro.
+
+@end deftypefn
+
+@deftypefn Extension {unsigned int} hex_value (int @var{c})
+
+Returns the numeric equivalent of the given character when interpreted
+as a hexadecimal digit.  The result is undefined if you pass an
+invalid hex digit.  Note that the value you pass will be cast to
+@code{unsigned char} within the macro.
+
+The @code{hex_value} macro returns @code{unsigned int}, rather than
+signed @code{int}, to make it easier to use in parsing addresses from
+hex dump files: a signed @code{int} would be sign-extended when
+converted to a wider unsigned type --- like @code{bfd_vma}, on some
+systems.
+
+@end deftypefn
+
+@undocumented _hex_array_size
+@undocumented _hex_bad
+@undocumented _hex_value
+
+*/
+
+
+/* Are we ASCII? */
+#if HOST_CHARSET == HOST_CHARSET_ASCII
+
+const unsigned char _hex_value[_hex_array_size] =
+{
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* NUL SOH STX ETX */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* EOT ENQ ACK BEL */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* BS  HT  LF  VT  */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* FF  CR  SO  SI  */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* DLE DC1 DC2 DC3 */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* DC4 NAK SYN ETB */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* CAN EM  SUB ESC */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* FS  GS  RS  US  */
+
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* SP  !   "   #   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* $   %   &   '   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* (   )   *   +   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* ,   -   .   /   */
+  0,        1,        2,        3,          /* 0   1   2   3   */
+  4,        5,        6,        7,          /* 4   5   6   7   */
+  8,        9,        _hex_bad, _hex_bad,   /* 8   9   :   ;   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* <   =   >   ?   */
+
+  _hex_bad, 10,       11,       12,         /* @   A   B   C   */
+  13,       14,       15,       _hex_bad,   /* D   E   F   G   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* H   I   J   K   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* L   M   N   O   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* P   Q   R   S   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* T   U   V   W   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* X   Y   Z   [   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* \   ]   ^   _   */
+
+  _hex_bad, 10,       11,       12,         /* `   a   b   c   */
+  13,       14,       15,       _hex_bad,   /* d   e   f   g   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* h   i   j   k   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* l   m   n   o   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* p   q   r   s   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* t   u   v   w   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* x   y   z   {   */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,   /* |   }   ~   DEL */
+
+  /* The high half of unsigned char, all values are _hex_bad.  */
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+  _hex_bad, _hex_bad, _hex_bad, _hex_bad,
+};
+#define HEX_TABLE_INITIALIZED
+
+#else
+
+unsigned char _hex_value[_hex_array_size];
+
+#endif /* not ASCII */
+
+void
+hex_init (void)
+{
+#ifndef HEX_TABLE_INITIALIZED
+  int i;
+
+  for (i=0; i<_hex_array_size; i++)
+    {
+      switch (i)
+       {
+       case '0': _hex_value[i] = 0; break;
+       case '1': _hex_value[i] = 1; break;
+       case '2': _hex_value[i] = 2; break;
+       case '3': _hex_value[i] = 3; break;
+       case '4': _hex_value[i] = 4; break;
+       case '5': _hex_value[i] = 5; break;
+       case '6': _hex_value[i] = 6; break;
+       case '7': _hex_value[i] = 7; break;
+       case '8': _hex_value[i] = 8; break;
+       case '9': _hex_value[i] = 9; break;
+
+       case 'a': case 'A': _hex_value[i] = 10; break;
+       case 'b': case 'B': _hex_value[i] = 11; break;
+       case 'c': case 'C': _hex_value[i] = 12; break;
+       case 'd': case 'D': _hex_value[i] = 13; break;
+       case 'e': case 'E': _hex_value[i] = 14; break;
+       case 'f': case 'F': _hex_value[i] = 15; break;
+
+       default:
+         _hex_value[i] = _hex_bad;
+         break;
+       }
+    }
+#endif
+}
diff --git a/libiberty/index.c b/libiberty/index.c
new file mode 100644 (file)
index 0000000..acd0a45
--- /dev/null
@@ -0,0 +1,21 @@
+/* Stub implementation of (obsolete) index(). */
+
+/*
+
+@deftypefn Supplemental char* index (char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{index} is
+deprecated in new programs in favor of @code{strchr}.
+
+@end deftypefn
+
+*/
+
+extern char * strchr(const char *, int);
+
+char *
+index (const char *s, int c)
+{
+  return strchr (s, c);
+}
diff --git a/libiberty/insque.c b/libiberty/insque.c
new file mode 100644 (file)
index 0000000..3473bb9
--- /dev/null
@@ -0,0 +1,50 @@
+/* insque(3C) routines
+   This file is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred})
+@deftypefnx Supplemental void remque (struct qelem *@var{elem})
+
+Routines to manipulate queues built from doubly linked lists.  The
+@code{insque} routine inserts @var{elem} in the queue immediately
+after @var{pred}.  The @code{remque} routine removes @var{elem} from
+its containing queue.  These routines expect to be passed pointers to
+structures which have as their first members a forward pointer and a
+back pointer, like this prototype (although no prototype is provided):
+
+@example
+struct qelem @{
+  struct qelem *q_forw;
+  struct qelem *q_back;
+  char q_data[];
+@};
+@end example
+
+@end deftypefn
+
+*/
+
+
+struct qelem {
+  struct qelem *q_forw;
+  struct qelem *q_back;
+};
+
+
+void
+insque (struct qelem *elem, struct qelem *pred)
+{
+  elem -> q_forw = pred -> q_forw;
+  pred -> q_forw -> q_back = elem;
+  elem -> q_back = pred;
+  pred -> q_forw = elem;
+}
+
+
+void
+remque (struct qelem *elem)
+{
+  elem -> q_forw -> q_back = elem -> q_back;
+  elem -> q_back -> q_forw = elem -> q_forw;
+}
diff --git a/libiberty/lbasename.c b/libiberty/lbasename.c
new file mode 100644 (file)
index 0000000..56fcd62
--- /dev/null
@@ -0,0 +1,64 @@
+/* Libiberty basename.  Like basename, but is not overridden by the
+   system C library.
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Replacement {const char*} lbasename (const char *@var{name})
+
+Given a pointer to a string containing a typical pathname
+(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
+last component of the pathname (@samp{ls.c} in this case).  The
+returned pointer is guaranteed to lie within the original
+string.  This latter fact is not true of many vendor C
+libraries, which return special strings or modify the passed
+strings for particular input.
+
+In particular, the empty string returns the same empty string,
+and a path ending in @code{/} returns the empty string after it.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "filenames.h"
+
+const char *
+lbasename (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over a possible disk name.  */
+  if (ISALPHA (name[0]) && name[1] == ':') 
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+
+  return base;
+}
diff --git a/libiberty/libiberty.texi b/libiberty/libiberty.texi
new file mode 100644 (file)
index 0000000..d3701e6
--- /dev/null
@@ -0,0 +1,324 @@
+\input texinfo  @c -*-texinfo-*-
+@c %**start of header
+@setfilename libiberty.info
+@settitle @sc{gnu} libiberty
+@c %**end of header
+
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex pg cp
+
+@finalout
+@c %**end of header
+@dircategory GNU libraries
+@direntry
+* Libiberty: (libiberty).          Library of utility functions which
+                                   are missing or broken on some systems.
+@end direntry
+
+@macro libib
+@code{libiberty}
+@end macro
+
+@c The edition date is written in three locations.  Search for 'thedate'.
+@ifinfo
+This manual describes the GNU @libib library of utility subroutines.
+This edition accompanies GCC 3, September 2001.
+
+Copyright @copyright{} 2001 Free Software Foundation, Inc.
+
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.2
+      or any later version published by the Free Software Foundation;
+      with no Invariant Sections, with no Front-Cover Texts, and with no
+      Back-Cover Texts.  A copy of the license is included in the
+      section entitled ``GNU Free Documentation License''.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+@end ifinfo
+
+
+@c The edition date is written in three locations.  Search for 'thedate'.
+@titlepage
+@title @sc{gnu} libiberty
+@subtitle September 2001
+@subtitle for GCC 3
+@author Phil Edwards et al.
+@page
+
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 2001 Free Software Foundation, Inc.
+
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.2
+      or any later version published by the Free Software Foundation;
+      with no Invariant Sections, with no Front-Cover Texts, and with no
+      Back-Cover Texts.  A copy of the license is included in the
+      section entitled ``GNU Free Documentation License''.
+
+@end titlepage
+@contents
+@page
+
+@ifnottex
+@node    Top,Using,,
+@top     Introduction
+
+The @libib{} library is a collection of subroutines used by various
+GNU programs.  It is available under the Library General Public
+License; for more information, see @ref{Library Copying}.
+
+@c The edition date is written in three locations.  Search for 'thedate'.
+This edition accompanies GCC 3, September 2001.
+
+@end ifnottex
+
+@menu
+* Using::              How to use libiberty in your code.
+
+* Overview::           Overview of available function groups.
+
+* Functions::          Available functions, macros, and global variables.
+
+* Obstacks::           Object Stacks.
+
+* Licenses::           The various licenses under which libiberty sources are
+                       distributed.
+
+* Index::              Index of functions and categories.
+@end menu
+
+@node Using
+@chapter Using
+@cindex using libiberty
+@cindex libiberty usage
+@cindex how to use
+
+@c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
+
+To date, @libib{} is generally not installed on its own.  It has evolved
+over years but does not have its own version number nor release schedule.
+
+Possibly the easiest way to use @libib{} in your projects is to drop the
+@libib{} code into your project's sources, and to build the library along
+with your own sources; the library would then be linked in at the end.  This
+prevents any possible version mismatches with other copies of libiberty
+elsewhere on the system.
+
+Passing @option{--enable-install-libiberty} to the @command{configure}
+script when building @libib{} causes the header files and archive library
+to be installed when @kbd{make install} is run.  This option also takes
+an (optional) argument to specify the installation location, in the same
+manner as @option{--prefix}.
+
+For your own projects, an approach which offers stability and flexibility
+is to include @libib{} with your code, but allow the end user to optionally
+choose to use a previously-installed version instead.  In this way the
+user may choose (for example) to install @libib{} as part of GCC, and use
+that version for all software built with that compiler.  (This approach
+has proven useful with software using the GNU @code{readline} library.)
+
+Making use of @libib{} code usually requires that you include one or more
+header files from the @libib{} distribution.  (They will be named as
+necessary in the function descriptions.)  At link time, you will need to
+add @option{-liberty} to your link command invocation.
+
+
+@node Overview
+@chapter Overview
+
+Functions contained in @libib{} can be divided into three general categories.
+
+
+@menu
+* Supplemental Functions::       Providing functions which don't exist
+                                 on older operating systems.
+
+* Replacement Functions::        These functions are sometimes buggy or
+                                 unpredictable on some operating systems.
+
+* Extensions::                   Functions which provide useful extensions
+                                 or safety wrappers around existing code.
+@end menu
+
+@node Supplemental Functions
+@section Supplemental Functions
+@cindex supplemental functions
+@cindex functions, supplemental
+@cindex functions, missing
+
+Certain operating systems do not provide functions which have since
+become standardized, or at least common.  For example, the Single
+Unix Specification Version 2 requires that the @code{basename}
+function be provided, but an OS which predates that specification
+might not have this function.  This should not prevent well-written
+code from running on such a system.
+
+Similarly, some functions exist only among a particular ``flavor''
+or ``family'' of operating systems.  As an example, the @code{bzero}
+function is often not present on systems outside the BSD-derived
+family of systems.
+
+Many such functions are provided in @libib{}.  They are quickly
+listed here with little description, as systems which lack them
+become less and less common.  Each function @var{foo} is implemented
+in @file{@var{foo}.c} but not declared in any @libib{} header file; more
+comments and caveats for each function's implementation are often
+available in the source file.  Generally, the function can simply
+be declared as @code{extern}.
+
+
+
+@node Replacement Functions
+@section Replacement Functions
+@cindex replacement functions
+@cindex functions, replacement
+
+Some functions have extremely limited implementations on different
+platforms.  Other functions are tedious to use correctly; for example,
+proper use of @code{malloc} calls for the return value to be checked and
+appropriate action taken if memory has been exhausted.  A group of
+``replacement functions'' is available in @libib{} to address these issues
+for some of the most commonly used subroutines.
+
+All of these functions are declared in the @file{libiberty.h} header
+file.  Many of the implementations will use preprocessor macros set by
+GNU Autoconf, if you decide to make use of that program.  Some of these
+functions may call one another.
+
+
+@menu
+* Memory Allocation::            Testing and handling failed memory
+                                   requests automatically.
+* Exit Handlers::                Calling routines on program exit.
+* Error Reporting::              Mapping errno and signal numbers to
+                                   more useful string formats.
+@end menu
+
+@node Memory Allocation
+@subsection Memory Allocation
+@cindex memory allocation
+
+The functions beginning with the letter @samp{x} are wrappers around
+standard functions; the functions provided by the system environment
+are called and their results checked before the results are passed back
+to client code.  If the standard functions fail, these wrappers will
+terminate the program.  Thus, these versions can be used with impunity.
+
+
+@node Exit Handlers
+@subsection Exit Handlers
+@cindex exit handlers
+
+The existence and implementation of the @code{atexit} routine varies
+amongst the flavors of Unix.  @libib{} provides an unvarying dependable
+implementation via @code{xatexit} and @code{xexit}.
+
+
+@node Error Reporting
+@subsection Error Reporting
+@cindex error reporting
+
+These are a set of routines to facilitate programming with the system
+@code{errno} interface.  The @libib{} source file @file{strerror.c}
+contains a good deal of documentation for these functions.
+
+@c signal stuff
+
+
+@node Extensions
+@section Extensions
+@cindex extensions
+@cindex functions, extension
+
+@libib{} includes additional functionality above and beyond standard
+functions, which has proven generically useful in GNU programs, such as
+obstacks and regex.  These functions are often copied from other
+projects as they gain popularity, and are included here to provide a
+central location from which to use, maintain, and distribute them.
+
+@menu
+* Obstacks::                     Stacks of arbitrary objects.
+@end menu
+
+@c This is generated from the glibc manual using a make-obstacks-texi.sh
+@c script of Phil's.  Hope it's accurate.
+@include obstacks.texi
+
+@node Functions
+@chapter Function, Variable, and Macro Listing.
+@include functions.texi
+
+@node Licenses
+@appendix Licenses
+
+@menu
+
+* Library Copying::   The GNU Library General Public License
+* BSD::               Regents of the University of California
+
+@end menu
+
+@c This takes care of Library Copying.  It is the copying-lib.texi from the
+@c GNU web site, with its @node line altered to make makeinfo shut up.
+@include copying-lib.texi
+
+@page
+@node BSD
+@appendixsec BSD
+
+Copyright @copyright{} 1990 Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+@enumerate
+
+@item
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+@item
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+@item
+[rescinded 22 July 1999]
+
+@item
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+@end enumerate
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@bye
+
diff --git a/libiberty/lrealpath.c b/libiberty/lrealpath.c
new file mode 100644 (file)
index 0000000..b27c8de
--- /dev/null
@@ -0,0 +1,157 @@
+/* Libiberty realpath.  Like realpath, but more consistent behavior.
+   Based on gdb_realpath from GDB.
+
+   Copyright 2003 Free Software Foundation, Inc.
+
+   This file is part of the libiberty library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Replacement {const char*} lrealpath (const char *@var{name})
+
+Given a pointer to a string containing a pathname, returns a canonical
+version of the filename.  Symlinks will be resolved, and ``.'' and ``..''
+components will be simplified.  The returned value will be allocated using
+@code{malloc}, or @code{NULL} will be returned on a memory allocation error.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* On GNU libc systems the declaration is only visible with _GNU_SOURCE.  */
+#if defined(HAVE_CANONICALIZE_FILE_NAME) \
+    && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
+extern char *canonicalize_file_name (const char *);
+#endif
+
+#if defined(HAVE_REALPATH)
+# if defined (PATH_MAX)
+#  define REALPATH_LIMIT PATH_MAX
+# else
+#  if defined (MAXPATHLEN)
+#   define REALPATH_LIMIT MAXPATHLEN
+#  endif
+# endif
+#else
+  /* cygwin has realpath, so it won't get here.  */ 
+# if defined (_WIN32)
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h> /* for GetFullPathName */
+# endif
+#endif
+
+char *
+lrealpath (const char *filename)
+{
+  /* Method 1: The system has a compile time upper bound on a filename
+     path.  Use that and realpath() to canonicalize the name.  This is
+     the most common case.  Note that, if there isn't a compile time
+     upper bound, you want to avoid realpath() at all costs.  */
+#if defined(REALPATH_LIMIT)
+  {
+    char buf[REALPATH_LIMIT];
+    const char *rp = realpath (filename, buf);
+    if (rp == NULL)
+      rp = filename;
+    return strdup (rp);
+  }
+#endif /* REALPATH_LIMIT */
+
+  /* Method 2: The host system (i.e., GNU) has the function
+     canonicalize_file_name() which malloc's a chunk of memory and
+     returns that, use that.  */
+#if defined(HAVE_CANONICALIZE_FILE_NAME)
+  {
+    char *rp = canonicalize_file_name (filename);
+    if (rp == NULL)
+      return strdup (filename);
+    else
+      return rp;
+  }
+#endif
+
+  /* Method 3: Now we're getting desperate!  The system doesn't have a
+     compile time buffer size and no alternative function.  Query the
+     OS, using pathconf(), for the buffer limit.  Care is needed
+     though, some systems do not limit PATH_MAX (return -1 for
+     pathconf()) making it impossible to pass a correctly sized buffer
+     to realpath() (it could always overflow).  On those systems, we
+     skip this.  */
+#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
+  {
+    /* Find out the max path size.  */
+    long path_max = pathconf ("/", _PC_PATH_MAX);
+    if (path_max > 0)
+      {
+       /* PATH_MAX is bounded.  */
+       char *buf, *rp, *ret;
+       buf = (char *) malloc (path_max);
+       if (buf == NULL)
+         return NULL;
+       rp = realpath (filename, buf);
+       ret = strdup (rp ? rp : filename);
+       free (buf);
+       return ret;
+      }
+  }
+#endif
+
+  /* The MS Windows method.  If we don't have realpath, we assume we
+     don't have symlinks and just canonicalize to a Windows absolute
+     path.  GetFullPath converts ../ and ./ in relative paths to
+     absolute paths, filling in current drive if one is not given
+     or using the current directory of a specified drive (eg, "E:foo").
+     It also converts all forward slashes to back slashes.  */
+#if defined (_WIN32)
+  {
+    char buf[MAX_PATH];
+    char* basename;
+    DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
+    if (len == 0 || len > MAX_PATH - 1)
+      return strdup (filename);
+    else
+      {
+       /* The file system is case-preserving but case-insensitive,
+          Canonicalize to lowercase, using the codepage associated
+          with the process locale.  */
+        CharLowerBuff (buf, len);
+        return strdup (buf);
+      }
+  }
+#endif
+
+  /* This system is a lost cause, just duplicate the filename.  */
+  return strdup (filename);
+}
diff --git a/libiberty/maint-tool b/libiberty/maint-tool
new file mode 100644 (file)
index 0000000..a460b55
--- /dev/null
@@ -0,0 +1,296 @@
+#!/usr/bin/perl
+# -*- perl -*-
+
+#   Copyright (C) 2001, 2007
+#   Free Software Foundation
+#
+# This file is part of the libiberty library.
+# Libiberty is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# Libiberty is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with libiberty; see the file COPYING.LIB.  If not,
+# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# Originally written by DJ Delorie <dj@redhat.com>
+
+
+# This is a trivial script which checks the lists of C and O files in
+# the Makefile for consistency.
+
+$mode = shift;
+$srcdir = ".";
+
+if ($mode eq "-s") {
+    $srcdir = shift;
+    $mode = shift;
+}
+
+&missing() if $mode eq "missing";
+&undoc() if $mode eq "undoc";
+&deps() if $mode eq "deps";
+
+exit 0;
+
+format STDOUT =
+^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~
+$out
+        ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+$out
+.
+
+######################################################################
+
+sub missing {
+
+    opendir(S, $srcdir);
+    while ($f = readdir S) {
+       $have{$f} = 1;
+    }
+    closedir(S);
+    opendir(S, ".");
+    while ($f = readdir S) {
+       $have{$f} = 1;
+    }
+    closedir(S);
+
+    for $a (@ARGV) {
+       $listed{$a} = 1;
+       $have{$a} = 0;
+    }
+
+    for $f (sort keys %have) {
+       next unless $have{$f};
+       if ($f =~ /\.c$/) {
+           print "S $f\n";
+       }
+    }
+    for $f (sort keys %listed) {
+       if ($f =~ /(.*)\.c$/) {
+           $base = $1;
+           if (! $listed{"$base.o"}) {
+               print "O $f\n";
+           }
+       }
+    }
+}
+
+######################################################################
+
+sub undoc {
+
+    opendir(S, $srcdir);
+    while ($file = readdir S) {
+       if ($file =~ /\.texi$/) {
+           open(T, "$srcdir/$file");
+           while (<T>) {
+               if (/^\@deftype[^\(]* ([^\s\(]+) *\(/) {
+                   $documented{$1} = 1;
+               }
+           }
+           close(T);
+       }
+       if ($file =~ /\.c$/) {
+           open(C, "$srcdir/$file");
+           while (<C>) {
+               if (/\@undocumented (\S+)/) {
+                   $documented{$1} = 1;
+               }
+               if (/^static /) {
+                   if (! /[\(;]/) {
+                       s/[\r\n]+$/ /;
+                       $_ .= <C>;
+                   }
+                   while ($_ =~ /\([^\)]*$/) {
+                       s/[\r\n]+$/ /;
+                       $_ .= <C>;
+                   }
+               }
+               s/ VPARAMS([ \(])/$1/;
+               s/PREFIX\(([^\)]*)\)/byte_$1/;
+               if (/^static [^\(]* ([^\s\(]+) *\(.*\)$/) {
+                   $documented{$1} = 1;
+               }
+           }
+       }
+    }
+    closedir(D);
+
+    # $out = join(' ', sort keys %documented);
+    # write;
+    # print "\n";
+
+    system "etags $srcdir/*.c $srcdir/../include/*.h";
+    open(TAGS, "TAGS");
+    while (<TAGS>) {
+       s/[\r\n]+$//;
+       if (/^\014$/) {
+           $filename = <TAGS>;
+           $filename =~ s/[\r\n]+$//;
+           $filename =~ s/,\d+$//;
+           $filename =~ s@.*[/\\]@@;
+           next;
+       }
+       if ($filename =~ /\.c$/ ) {
+           next unless /^[_a-zA-Z]/;
+       } else {
+           next unless /^\# *define/;
+           s/\# *define *//;
+       }
+
+       s/ VPARAMS//;
+       s/ *\177.*//;
+       s/,$//;
+       s/DEFUN\(//;
+       s/\(//;
+
+       next if /^static /;
+       next if /\s/;
+       next if /^_/;
+       next if $documented{$_};
+       next if /_H_?$/;
+
+       if ($seen_in{$_} ne $filename) {
+           $saw{$_} ++;
+       }
+       $seen_in{$_} = $filename;
+    }
+
+    for $k (keys %saw) {
+       delete $saw{$k} if $saw{$k} > 1;
+    }
+
+    for $k (sort keys %saw) {
+       $fromfile{$seen_in{$k}} .= " " if $fromfile{$seen_in{$k}};
+       $fromfile{$seen_in{$k}} .= $k;
+    }
+
+    for $f (sort keys %fromfile) {
+       $out = "$f: $fromfile{$f}";
+       write;
+    }
+}
+
+######################################################################
+
+sub deps_for {
+    my($f) = @_;
+    my(%d);
+    open(F, $f);
+    %d = ();
+    while (<F>) {
+       if (/^#\s*include\s+["<](.*)[">]/) {
+           $d{$1} = 1;
+       }
+    }
+    close(F);
+    return keys %d;
+}
+
+sub canonicalize {
+    my ($p) = @_;
+    0 while $p =~ s@/\./@/@g;
+    0 while $p =~ s@^\./@@g;
+    0 while $p =~ s@/[^/]+/\.\./@/@g;
+    return $p;
+}
+
+sub locals_first {
+    my ($a,$b) = @_;
+    return -1 if $a eq "config.h";
+    return  1 if $b eq "config.h";
+    return $a cmp $b;
+}
+
+sub deps {
+
+    $crule  = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
+    $crule .= "\t  \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
+    $crule .= "\telse true; fi\n";
+    $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
+    $crule .= "\n";
+
+    $incdir = shift @ARGV;
+
+    opendir(INC, $incdir);
+    while ($f = readdir INC) {
+       next unless $f =~ /\.h$/;
+       $mine{$f} = "\$(INCDIR)/$f";
+       $deps{$f} = join(' ', &deps_for("$incdir/$f"));
+    }
+
+    opendir(INC, $srcdir);
+    while ($f = readdir INC) {
+       next unless $f =~ /\.h$/;
+       $mine{$f} = "\$(srcdir)/$f";
+       $deps{$f} = join(' ', &deps_for("$srcdir/$f"));
+    }
+
+    $mine{'config.h'} = "stamp-h";
+
+    open(IN, "$srcdir/Makefile.in");
+    open(OUT, ">$srcdir/Makefile.tmp");
+    while (<IN>) {
+       last if /remainder of this file/;
+       print OUT;
+    }
+    print OUT "# The dependencies in the remainder of this file are automatically\n";
+    print OUT "# generated by \"make maint-deps\".  Manual edits will be lost.\n\n";
+
+    opendir(S, $srcdir);
+    for $f (sort readdir S) {
+       if ($f =~ /\.c$/) {
+
+           %scanned = ();
+           @pending = &deps_for("$srcdir/$f");
+           while (@pending) {
+               @tmp = @pending;
+               @pending = ();
+               for $p (@tmp) {
+                   next unless $mine{$p};
+                   if (!$scanned{$p}) {
+                       push(@pending, split(' ', $deps{$p}));
+                       $scanned{$p} = 1;
+                   }
+               }
+           }
+           @deps = sort { &locals_first($a,$b) } keys %scanned;
+           $obj = $f;
+           $obj =~ s/\.c$/.o/;
+           $obj = "./$obj:";
+           if ($#deps >= 0) {
+               print OUT "$obj \$(srcdir)/$f";
+               $len = length("$obj $f");
+               for $dt (@deps) {
+                   $d = $mine{$dt};
+                   if ($len + length($d) > 70) {
+                       printf OUT " \\\n\t$d";
+                       $len = 8 + length($d);
+                   } else {
+                       print OUT " $d";
+                       $len += length($d) + 1;
+                   }
+               }
+               print OUT "\n";
+           } else {
+               print OUT "$obj \$(srcdir)/$f\n";
+           }
+           $c = $crule;
+           $c =~ s@\$\<@\$\(srcdir\)\/$f@g;
+           print OUT $c;
+       }
+    }
+    closedir(S);
+    close(IN);
+    close(OUT);
+
+    rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in");
+}
diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c
new file mode 100644 (file)
index 0000000..80e7f92
--- /dev/null
@@ -0,0 +1,414 @@
+/* Relative (relocatable) prefix support.
+   Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
+
+This file is part of libiberty.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+/*
+
+@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix})
+
+Given three paths @var{progname}, @var{bin_prefix}, @var{prefix},
+return the path that is in the same position relative to
+@var{progname}'s directory as @var{prefix} is relative to
+@var{bin_prefix}.  That is, a string starting with the directory
+portion of @var{progname}, followed by a relative pathname of the
+difference between @var{bin_prefix} and @var{prefix}.
+
+If @var{progname} does not contain any directory separators,
+@code{make_relative_prefix} will search @env{PATH} to find a program
+named @var{progname}.  Also, if @var{progname} is a symbolic link,
+the symbolic link will be resolved.
+
+For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta},
+@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is
+@code{/red/green/blue/gcc}, then this function will return
+@code{/red/green/blue/../../omega/}.
+
+The return value is normally allocated via @code{malloc}.  If no
+relative prefix can be found, return @code{NULL}.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <string.h>
+
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#ifndef R_OK
+#define R_OK 4
+#define W_OK 2
+#define X_OK 1
+#endif
+
+#ifndef DIR_SEPARATOR
+#  define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) \
+    || defined (__DJGPP__) || defined (__OS2__)
+#  define HAVE_DOS_BASED_FILE_SYSTEM
+#  define HAVE_HOST_EXECUTABLE_SUFFIX
+#  define HOST_EXECUTABLE_SUFFIX ".exe"
+#  ifndef DIR_SEPARATOR_2 
+#    define DIR_SEPARATOR_2 '\\'
+#  endif
+#  define PATH_SEPARATOR ';'
+#else
+#  define PATH_SEPARATOR ':'
+#endif
+
+#ifndef DIR_SEPARATOR_2
+#  define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else
+#  define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif
+
+#define DIR_UP ".."
+
+static char *save_string (const char *, int);
+static char **split_directories        (const char *, int *);
+static void free_split_directories (char **);
+
+static char *
+save_string (const char *s, int len)
+{
+  char *result = (char *) malloc (len + 1);
+
+  memcpy (result, s, len);
+  result[len] = 0;
+  return result;
+}
+
+/* Split a filename into component directories.  */
+
+static char **
+split_directories (const char *name, int *ptr_num_dirs)
+{
+  int num_dirs = 0;
+  char **dirs;
+  const char *p, *q;
+  int ch;
+
+  /* Count the number of directories.  Special case MSDOS disk names as part
+     of the initial directory.  */
+  p = name;
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+  if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
+    {
+      p += 3;
+      num_dirs++;
+    }
+#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
+
+  while ((ch = *p++) != '\0')
+    {
+      if (IS_DIR_SEPARATOR (ch))
+       {
+         num_dirs++;
+         while (IS_DIR_SEPARATOR (*p))
+           p++;
+       }
+    }
+
+  dirs = (char **) malloc (sizeof (char *) * (num_dirs + 2));
+  if (dirs == NULL)
+    return NULL;
+
+  /* Now copy the directory parts.  */
+  num_dirs = 0;
+  p = name;
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+  if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
+    {
+      dirs[num_dirs++] = save_string (p, 3);
+      if (dirs[num_dirs - 1] == NULL)
+       {
+         free (dirs);
+         return NULL;
+       }
+      p += 3;
+    }
+#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
+
+  q = p;
+  while ((ch = *p++) != '\0')
+    {
+      if (IS_DIR_SEPARATOR (ch))
+       {
+         while (IS_DIR_SEPARATOR (*p))
+           p++;
+
+         dirs[num_dirs++] = save_string (q, p - q);
+         if (dirs[num_dirs - 1] == NULL)
+           {
+             dirs[num_dirs] = NULL;
+             free_split_directories (dirs);
+             return NULL;
+           }
+         q = p;
+       }
+    }
+
+  if (p - 1 - q > 0)
+    dirs[num_dirs++] = save_string (q, p - 1 - q);
+  dirs[num_dirs] = NULL;
+
+  if (dirs[num_dirs - 1] == NULL)
+    {
+      free_split_directories (dirs);
+      return NULL;
+    }
+
+  if (ptr_num_dirs)
+    *ptr_num_dirs = num_dirs;
+  return dirs;
+}
+
+/* Release storage held by split directories.  */
+
+static void
+free_split_directories (char **dirs)
+{
+  int i = 0;
+
+  if (dirs != NULL)
+    {
+      while (dirs[i] != NULL)
+       free (dirs[i++]);
+
+      free ((char *) dirs);
+    }
+}
+
+/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
+   to PREFIX starting with the directory portion of PROGNAME and a relative
+   pathname of the difference between BIN_PREFIX and PREFIX.
+
+   For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is
+   /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this
+   function will return /red/green/blue/../../omega/.
+
+   If no relative prefix can be found, return NULL.  */
+
+static char *
+make_relative_prefix_1 (const char *progname, const char *bin_prefix,
+                       const char *prefix, const int resolve_links)
+{
+  char **prog_dirs = NULL, **bin_dirs = NULL, **prefix_dirs = NULL;
+  int prog_num, bin_num, prefix_num;
+  int i, n, common;
+  int needed_len;
+  char *ret = NULL, *ptr, *full_progname;
+
+  if (progname == NULL || bin_prefix == NULL || prefix == NULL)
+    return NULL;
+
+  /* If there is no full pathname, try to find the program by checking in each
+     of the directories specified in the PATH environment variable.  */
+  if (lbasename (progname) == progname)
+    {
+      char *temp;
+
+      temp = getenv ("PATH");
+      if (temp)
+       {
+         char *startp, *endp, *nstore;
+         size_t prefixlen = strlen (temp) + 1;
+         if (prefixlen < 2)
+           prefixlen = 2;
+
+         nstore = (char *) alloca (prefixlen + strlen (progname) + 1);
+
+         startp = endp = temp;
+         while (1)
+           {
+             if (*endp == PATH_SEPARATOR || *endp == 0)
+               {
+                 if (endp == startp)
+                   {
+                     nstore[0] = '.';
+                     nstore[1] = DIR_SEPARATOR;
+                     nstore[2] = '\0';
+                   }
+                 else
+                   {
+                     strncpy (nstore, startp, endp - startp);
+                     if (! IS_DIR_SEPARATOR (endp[-1]))
+                       {
+                         nstore[endp - startp] = DIR_SEPARATOR;
+                         nstore[endp - startp + 1] = 0;
+                       }
+                     else
+                       nstore[endp - startp] = 0;
+                   }
+                 strcat (nstore, progname);
+                 if (! access (nstore, X_OK)
+#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
+                      || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK)
+#endif
+                     )
+                   {
+                     progname = nstore;
+                     break;
+                   }
+
+                 if (*endp == 0)
+                   break;
+                 endp = startp = endp + 1;
+               }
+             else
+               endp++;
+           }
+       }
+    }
+
+  if ( resolve_links )
+    {
+      full_progname = lrealpath (progname);
+      if (full_progname == NULL)
+       return NULL;
+    }
+  else
+    full_progname = strdup(progname);
+
+  prog_dirs = split_directories (full_progname, &prog_num);
+  free (full_progname);
+  if (prog_dirs == NULL)
+    return NULL;
+
+  bin_dirs = split_directories (bin_prefix, &bin_num);
+  if (bin_dirs == NULL)
+    goto bailout;
+
+  /* Remove the program name from comparison of directory names.  */
+  prog_num--;
+
+  /* If we are still installed in the standard location, we don't need to
+     specify relative directories.  Also, if argv[0] still doesn't contain
+     any directory specifiers after the search above, then there is not much
+     we can do.  */
+  if (prog_num == bin_num)
+    {
+      for (i = 0; i < bin_num; i++)
+       {
+         if (strcmp (prog_dirs[i], bin_dirs[i]) != 0)
+           break;
+       }
+
+      if (prog_num <= 0 || i == bin_num)
+       goto bailout;
+    }
+
+  prefix_dirs = split_directories (prefix, &prefix_num);
+  if (prefix_dirs == NULL)
+    goto bailout;
+
+  /* Find how many directories are in common between bin_prefix & prefix.  */
+  n = (prefix_num < bin_num) ? prefix_num : bin_num;
+  for (common = 0; common < n; common++)
+    {
+      if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0)
+       break;
+    }
+
+  /* If there are no common directories, there can be no relative prefix.  */
+  if (common == 0)
+    goto bailout;
+
+  /* Two passes: first figure out the size of the result string, and
+     then construct it.  */
+  needed_len = 0;
+  for (i = 0; i < prog_num; i++)
+    needed_len += strlen (prog_dirs[i]);
+  needed_len += sizeof (DIR_UP) * (bin_num - common);
+  for (i = common; i < prefix_num; i++)
+    needed_len += strlen (prefix_dirs[i]);
+  needed_len += 1; /* Trailing NUL.  */
+
+  ret = (char *) malloc (needed_len);
+  if (ret == NULL)
+    goto bailout;
+
+  /* Build up the pathnames in argv[0].  */
+  *ret = '\0';
+  for (i = 0; i < prog_num; i++)
+    strcat (ret, prog_dirs[i]);
+
+  /* Now build up the ..'s.  */
+  ptr = ret + strlen(ret);
+  for (i = common; i < bin_num; i++)
+    {
+      strcpy (ptr, DIR_UP);
+      ptr += sizeof (DIR_UP) - 1;
+      *(ptr++) = DIR_SEPARATOR;
+    }
+  *ptr = '\0';
+
+  /* Put in directories to move over to prefix.  */
+  for (i = common; i < prefix_num; i++)
+    strcat (ret, prefix_dirs[i]);
+
+ bailout:
+  free_split_directories (prog_dirs);
+  free_split_directories (bin_dirs);
+  free_split_directories (prefix_dirs);
+
+  return ret;
+}
+
+
+/* Do the full job, including symlink resolution.
+   This path will find files installed in the same place as the
+   program even when a soft link has been made to the program
+   from somwhere else. */
+
+char *
+make_relative_prefix (const char *progname, const char *bin_prefix,
+                     const char *prefix)
+{
+  return make_relative_prefix_1 (progname, bin_prefix, prefix, 1);
+}
+
+/* Make the relative pathname without attempting to resolve any links.
+   '..' etc may also be left in the pathname.
+   This will find the files the user meant the program to find if the
+   installation is patched together with soft links. */
+
+char *
+make_relative_prefix_ignore_links (const char *progname,
+                                  const char *bin_prefix,
+                                  const char *prefix)
+{
+  return make_relative_prefix_1 (progname, bin_prefix, prefix, 0);
+}
+
diff --git a/libiberty/make-temp-file.c b/libiberty/make-temp-file.c
new file mode 100644 (file)
index 0000000..5e21414
--- /dev/null
@@ -0,0 +1,177 @@
+/* Utility to pick a temporary filename prefix.
+   Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>     /* May get P_tmpdir.  */
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_SYS_FILE_H
+#include <sys/file.h>   /* May get R_OK, etc. on some systems.  */
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#define W_OK 2
+#define X_OK 1
+#endif
+
+#include "libiberty.h"
+extern int mkstemps (char *, int);
+
+/* '/' works just fine on MS-DOS based systems.  */
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+/* Name of temporary file.
+   mktemp requires 6 trailing X's.  */
+#define TEMP_FILE "ccXXXXXX"
+#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
+
+/* Subroutine of choose_tmpdir.
+   If BASE is non-NULL, return it.
+   Otherwise it checks if DIR is a usable directory.
+   If success, DIR is returned.
+   Otherwise NULL is returned.  */
+
+static inline const char *try_dir (const char *, const char *);
+
+static inline const char *
+try_dir (const char *dir, const char *base)
+{
+  if (base != 0)
+    return base;
+  if (dir != 0
+      && access (dir, R_OK | W_OK | X_OK) == 0)
+    return dir;
+  return 0;
+}
+
+static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
+static const char usrtmp[] =
+{ DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
+static const char vartmp[] =
+{ DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
+
+static char *memoized_tmpdir;
+
+/*
+
+@deftypefn Replacement char* choose_tmpdir ()
+
+Returns a pointer to a directory path suitable for creating temporary
+files in.
+
+@end deftypefn
+
+*/
+
+char *
+choose_tmpdir (void)
+{
+  const char *base = 0;
+  char *tmpdir;
+  unsigned int len;
+
+  if (memoized_tmpdir)
+    return memoized_tmpdir;
+
+  base = try_dir (getenv ("TMPDIR"), base);
+  base = try_dir (getenv ("TMP"), base);
+  base = try_dir (getenv ("TEMP"), base);
+
+#ifdef P_tmpdir
+  base = try_dir (P_tmpdir, base);
+#endif
+
+  /* Try /var/tmp, /usr/tmp, then /tmp.  */
+  base = try_dir (vartmp, base);
+  base = try_dir (usrtmp, base);
+  base = try_dir (tmp, base);
+  /* If all else fails, use the current directory!  */
+  if (base == 0)
+    base = ".";
+
+  /* Append DIR_SEPARATOR to the directory we've chosen
+     and return it.  */
+  len = strlen (base);
+  tmpdir = XNEWVEC (char, len + 2);
+  strcpy (tmpdir, base);
+  tmpdir[len] = DIR_SEPARATOR;
+  tmpdir[len+1] = '\0';
+
+  memoized_tmpdir = tmpdir;
+  return tmpdir;
+}
+
+/*
+
+@deftypefn Replacement char* make_temp_file (const char *@var{suffix})
+
+Return a temporary file name (as a string) or @code{NULL} if unable to
+create one.  @var{suffix} is a suffix to append to the file name.  The
+string is @code{malloc}ed, and the temporary file has been created.
+
+@end deftypefn
+
+*/
+
+char *
+make_temp_file (const char *suffix)
+{
+  const char *base = choose_tmpdir ();
+  char *temp_filename;
+  int base_len, suffix_len;
+  int fd;
+
+  if (suffix == 0)
+    suffix = "";
+
+  base_len = strlen (base);
+  suffix_len = strlen (suffix);
+
+  temp_filename = XNEWVEC (char, base_len
+                          + TEMP_FILE_LEN
+                          + suffix_len + 1);
+  strcpy (temp_filename, base);
+  strcpy (temp_filename + base_len, TEMP_FILE);
+  strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix);
+
+  fd = mkstemps (temp_filename, suffix_len);
+  /* If mkstemps failed, then something bad is happening.  Maybe we should
+     issue a message about a possible security attack in progress?  */
+  if (fd == -1)
+    abort ();
+  /* Similarly if we can not close the file.  */
+  if (close (fd))
+    abort ();
+  return temp_filename;
+}
diff --git a/libiberty/makefile.vms b/libiberty/makefile.vms
new file mode 100644 (file)
index 0000000..6a7dd45
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# Makefile for libiberty under openVMS/Alpha
+#
+# For use with gnu-make for vms
+#
+# Created by Klaus K"ampf, kkaempf@progis.de
+#
+#
+
+OBJS=bcopy.obj,bcmp.obj,getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\
+   getopt1.obj,cplus-dem.obj,strncasecmp.obj,strcasecmp.obj,strdup.obj,\
+   concat.obj,getruntime.obj,getpagesize.obj,alloca.obj,xstrerror.obj,\
+   xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj
+
+ifeq ($(CC),gcc)
+CFLAGS=/include=([],[-.include])
+else
+# assume dec c
+CFLAGS=/noopt/debug/include=([],[-.include])/define=("const=")/warnings=disable=(missingreturn,implicitfunc)
+endif
+
+libiberty.olb: config.h alloca-conf.h $(OBJS)
+       purge
+       lib/create libiberty *.obj
+
+config.h: config.h-vms
+       $(CP) $< $@
+
+clean:
+       $$ purge
+       $(RM) config.h;
+       $(RM) *.obj;
+       $(RM) libiberty.olb;
diff --git a/libiberty/md5.c b/libiberty/md5.c
new file mode 100644 (file)
index 0000000..83e0beb
--- /dev/null
@@ -0,0 +1,430 @@
+/* md5.c - Functions to compute MD5 message digest of files or memory blocks
+   according to the definition of MD5 in RFC 1321 from April 1992.
+   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+
+   NOTE: This source is derived from an old version taken from the GNU C
+   Library (glibc).
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+# include <string.h>
+#else
+# ifndef HAVE_MEMCPY
+#  define memcpy(d, s, n) bcopy ((s), (d), (n))
+# endif
+#endif
+
+#include "ansidecl.h"
+#include "md5.h"
+
+#ifdef _LIBC
+# include <endian.h>
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define WORDS_BIGENDIAN 1
+# endif
+#endif
+
+#ifdef WORDS_BIGENDIAN
+# define SWAP(n)                                                       \
+    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
+#else
+# define SWAP(n) (n)
+#endif
+
+
+/* This array contains the bytes used to pad the buffer to the next
+   64-byte boundary.  (RFC 1321, 3.1: Step 1)  */
+static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ };
+
+
+/* Initialize structure containing state of computation.
+   (RFC 1321, 3.3: Step 3)  */
+void
+md5_init_ctx (struct md5_ctx *ctx)
+{
+  ctx->A = (md5_uint32) 0x67452301;
+  ctx->B = (md5_uint32) 0xefcdab89;
+  ctx->C = (md5_uint32) 0x98badcfe;
+  ctx->D = (md5_uint32) 0x10325476;
+
+  ctx->total[0] = ctx->total[1] = 0;
+  ctx->buflen = 0;
+}
+
+/* Put result from CTX in first 16 bytes following RESBUF.  The result
+   must be in little endian byte order.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+void *
+md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
+{
+  ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
+  ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
+  ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
+  ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
+
+  return resbuf;
+}
+
+/* Process the remaining bytes in the internal buffer and the usual
+   prolog according to the standard and write the result to RESBUF.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+void *
+md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
+{
+  /* Take yet unprocessed bytes into account.  */
+  md5_uint32 bytes = ctx->buflen;
+  size_t pad;
+
+  /* Now count remaining bytes.  */
+  ctx->total[0] += bytes;
+  if (ctx->total[0] < bytes)
+    ++ctx->total[1];
+
+  pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
+  memcpy (&ctx->buffer[bytes], fillbuf, pad);
+
+  /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
+  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
+                                                       (ctx->total[0] >> 29));
+
+  /* Process last bytes.  */
+  md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
+
+  return md5_read_ctx (ctx, resbuf);
+}
+
+/* Compute MD5 message digest for bytes read from STREAM.  The
+   resulting message digest number will be written into the 16 bytes
+   beginning at RESBLOCK.  */
+int
+md5_stream (FILE *stream, void *resblock)
+{
+  /* Important: BLOCKSIZE must be a multiple of 64.  */
+#define BLOCKSIZE 4096
+  struct md5_ctx ctx;
+  char buffer[BLOCKSIZE + 72];
+  size_t sum;
+
+  /* Initialize the computation context.  */
+  md5_init_ctx (&ctx);
+
+  /* Iterate over full file contents.  */
+  while (1)
+    {
+      /* We read the file in blocks of BLOCKSIZE bytes.  One call of the
+        computation function processes the whole buffer so that with the
+        next round of the loop another block can be read.  */
+      size_t n;
+      sum = 0;
+
+      /* Read block.  Take care for partial reads.  */
+      do
+       {
+         n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
+
+         sum += n;
+       }
+      while (sum < BLOCKSIZE && n != 0);
+      if (n == 0 && ferror (stream))
+        return 1;
+
+      /* If end of file is reached, end the loop.  */
+      if (n == 0)
+       break;
+
+      /* Process buffer with BLOCKSIZE bytes.  Note that
+                       BLOCKSIZE % 64 == 0
+       */
+      md5_process_block (buffer, BLOCKSIZE, &ctx);
+    }
+
+  /* Add the last bytes if necessary.  */
+  if (sum > 0)
+    md5_process_bytes (buffer, sum, &ctx);
+
+  /* Construct result in desired memory.  */
+  md5_finish_ctx (&ctx, resblock);
+  return 0;
+}
+
+/* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
+   result is always in little endian byte order, so that a byte-wise
+   output yields to the wanted ASCII representation of the message
+   digest.  */
+void *
+md5_buffer (const char *buffer, size_t len, void *resblock)
+{
+  struct md5_ctx ctx;
+
+  /* Initialize the computation context.  */
+  md5_init_ctx (&ctx);
+
+  /* Process whole buffer but last len % 64 bytes.  */
+  md5_process_bytes (buffer, len, &ctx);
+
+  /* Put result in desired memory area.  */
+  return md5_finish_ctx (&ctx, resblock);
+}
+
+
+void
+md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
+{
+  /* When we already have some bits in our internal buffer concatenate
+     both inputs first.  */
+  if (ctx->buflen != 0)
+    {
+      size_t left_over = ctx->buflen;
+      size_t add = 128 - left_over > len ? len : 128 - left_over;
+
+      memcpy (&ctx->buffer[left_over], buffer, add);
+      ctx->buflen += add;
+
+      if (left_over + add > 64)
+       {
+         md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
+         /* The regions in the following copy operation cannot overlap.  */
+         memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
+                 (left_over + add) & 63);
+         ctx->buflen = (left_over + add) & 63;
+       }
+
+      buffer = (const void *) ((const char *) buffer + add);
+      len -= add;
+    }
+
+  /* Process available complete blocks.  */
+  if (len > 64)
+    {
+#if !_STRING_ARCH_unaligned
+/* To check alignment gcc has an appropriate operator.  Other
+   compilers don't.  */
+# if __GNUC__ >= 2
+#  define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0)
+# else
+#  define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0)
+# endif
+      if (UNALIGNED_P (buffer))
+        while (len > 64)
+          {
+            md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
+            buffer = (const char *) buffer + 64;
+            len -= 64;
+          }
+      else
+#endif
+      md5_process_block (buffer, len & ~63, ctx);
+      buffer = (const void *) ((const char *) buffer + (len & ~63));
+      len &= 63;
+    }
+
+  /* Move remaining bytes in internal buffer.  */
+  if (len > 0)
+    {
+      memcpy (ctx->buffer, buffer, len);
+      ctx->buflen = len;
+    }
+}
+
+
+/* These are the four functions used in the four steps of the MD5 algorithm
+   and defined in the RFC 1321.  The first function is a little bit optimized
+   (as found in Colin Plumbs public domain implementation).  */
+/* #define FF(b, c, d) ((b & c) | (~b & d)) */
+#define FF(b, c, d) (d ^ (b & (c ^ d)))
+#define FG(b, c, d) FF (d, b, c)
+#define FH(b, c, d) (b ^ c ^ d)
+#define FI(b, c, d) (c ^ (b | ~d))
+
+/* Process LEN bytes of BUFFER, accumulating context into CTX.
+   It is assumed that LEN % 64 == 0.  */
+
+void
+md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
+{
+  md5_uint32 correct_words[16];
+  const md5_uint32 *words = (const md5_uint32 *) buffer;
+  size_t nwords = len / sizeof (md5_uint32);
+  const md5_uint32 *endp = words + nwords;
+  md5_uint32 A = ctx->A;
+  md5_uint32 B = ctx->B;
+  md5_uint32 C = ctx->C;
+  md5_uint32 D = ctx->D;
+
+  /* First increment the byte count.  RFC 1321 specifies the possible
+     length of the file up to 2^64 bits.  Here we only compute the
+     number of bytes.  Do a double word increment.  */
+  ctx->total[0] += len;
+  if (ctx->total[0] < len)
+    ++ctx->total[1];
+
+  /* Process all bytes in the buffer with 64 bytes in each round of
+     the loop.  */
+  while (words < endp)
+    {
+      md5_uint32 *cwp = correct_words;
+      md5_uint32 A_save = A;
+      md5_uint32 B_save = B;
+      md5_uint32 C_save = C;
+      md5_uint32 D_save = D;
+
+      /* First round: using the given function, the context and a constant
+        the next context is computed.  Because the algorithms processing
+        unit is a 32-bit word and it is determined to work on words in
+        little endian byte order we perhaps have to change the byte order
+        before the computation.  To reduce the work for the next steps
+        we store the swapped words in the array CORRECT_WORDS.  */
+
+#define OP(a, b, c, d, s, T)                                           \
+      do                                                               \
+        {                                                              \
+         a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T;             \
+         ++words;                                                      \
+         CYCLIC (a, s);                                                \
+         a += b;                                                       \
+        }                                                              \
+      while (0)
+
+      /* It is unfortunate that C does not provide an operator for
+        cyclic rotation.  Hope the C compiler is smart enough.  */
+#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
+
+      /* Before we start, one word to the strange constants.
+        They are defined in RFC 1321 as
+
+        T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
+       */
+
+      /* Round 1.  */
+      OP (A, B, C, D,  7, (md5_uint32) 0xd76aa478);
+      OP (D, A, B, C, 12, (md5_uint32) 0xe8c7b756);
+      OP (C, D, A, B, 17, (md5_uint32) 0x242070db);
+      OP (B, C, D, A, 22, (md5_uint32) 0xc1bdceee);
+      OP (A, B, C, D,  7, (md5_uint32) 0xf57c0faf);
+      OP (D, A, B, C, 12, (md5_uint32) 0x4787c62a);
+      OP (C, D, A, B, 17, (md5_uint32) 0xa8304613);
+      OP (B, C, D, A, 22, (md5_uint32) 0xfd469501);
+      OP (A, B, C, D,  7, (md5_uint32) 0x698098d8);
+      OP (D, A, B, C, 12, (md5_uint32) 0x8b44f7af);
+      OP (C, D, A, B, 17, (md5_uint32) 0xffff5bb1);
+      OP (B, C, D, A, 22, (md5_uint32) 0x895cd7be);
+      OP (A, B, C, D,  7, (md5_uint32) 0x6b901122);
+      OP (D, A, B, C, 12, (md5_uint32) 0xfd987193);
+      OP (C, D, A, B, 17, (md5_uint32) 0xa679438e);
+      OP (B, C, D, A, 22, (md5_uint32) 0x49b40821);
+
+      /* For the second to fourth round we have the possibly swapped words
+        in CORRECT_WORDS.  Redefine the macro to take an additional first
+        argument specifying the function to use.  */
+#undef OP
+#define OP(a, b, c, d, k, s, T)                                                \
+      do                                                               \
+       {                                                               \
+         a += FX (b, c, d) + correct_words[k] + T;                     \
+         CYCLIC (a, s);                                                \
+         a += b;                                                       \
+       }                                                               \
+      while (0)
+
+#define FX(b, c, d) FG (b, c, d)
+
+      /* Round 2.  */
+      OP (A, B, C, D,  1,  5, (md5_uint32) 0xf61e2562);
+      OP (D, A, B, C,  6,  9, (md5_uint32) 0xc040b340);
+      OP (C, D, A, B, 11, 14, (md5_uint32) 0x265e5a51);
+      OP (B, C, D, A,  0, 20, (md5_uint32) 0xe9b6c7aa);
+      OP (A, B, C, D,  5,  5, (md5_uint32) 0xd62f105d);
+      OP (D, A, B, C, 10,  9, (md5_uint32) 0x02441453);
+      OP (C, D, A, B, 15, 14, (md5_uint32) 0xd8a1e681);
+      OP (B, C, D, A,  4, 20, (md5_uint32) 0xe7d3fbc8);
+      OP (A, B, C, D,  9,  5, (md5_uint32) 0x21e1cde6);
+      OP (D, A, B, C, 14,  9, (md5_uint32) 0xc33707d6);
+      OP (C, D, A, B,  3, 14, (md5_uint32) 0xf4d50d87);
+      OP (B, C, D, A,  8, 20, (md5_uint32) 0x455a14ed);
+      OP (A, B, C, D, 13,  5, (md5_uint32) 0xa9e3e905);
+      OP (D, A, B, C,  2,  9, (md5_uint32) 0xfcefa3f8);
+      OP (C, D, A, B,  7, 14, (md5_uint32) 0x676f02d9);
+      OP (B, C, D, A, 12, 20, (md5_uint32) 0x8d2a4c8a);
+
+#undef FX
+#define FX(b, c, d) FH (b, c, d)
+
+      /* Round 3.  */
+      OP (A, B, C, D,  5,  4, (md5_uint32) 0xfffa3942);
+      OP (D, A, B, C,  8, 11, (md5_uint32) 0x8771f681);
+      OP (C, D, A, B, 11, 16, (md5_uint32) 0x6d9d6122);
+      OP (B, C, D, A, 14, 23, (md5_uint32) 0xfde5380c);
+      OP (A, B, C, D,  1,  4, (md5_uint32) 0xa4beea44);
+      OP (D, A, B, C,  4, 11, (md5_uint32) 0x4bdecfa9);
+      OP (C, D, A, B,  7, 16, (md5_uint32) 0xf6bb4b60);
+      OP (B, C, D, A, 10, 23, (md5_uint32) 0xbebfbc70);
+      OP (A, B, C, D, 13,  4, (md5_uint32) 0x289b7ec6);
+      OP (D, A, B, C,  0, 11, (md5_uint32) 0xeaa127fa);
+      OP (C, D, A, B,  3, 16, (md5_uint32) 0xd4ef3085);
+      OP (B, C, D, A,  6, 23, (md5_uint32) 0x04881d05);
+      OP (A, B, C, D,  9,  4, (md5_uint32) 0xd9d4d039);
+      OP (D, A, B, C, 12, 11, (md5_uint32) 0xe6db99e5);
+      OP (C, D, A, B, 15, 16, (md5_uint32) 0x1fa27cf8);
+      OP (B, C, D, A,  2, 23, (md5_uint32) 0xc4ac5665);
+
+#undef FX
+#define FX(b, c, d) FI (b, c, d)
+
+      /* Round 4.  */
+      OP (A, B, C, D,  0,  6, (md5_uint32) 0xf4292244);
+      OP (D, A, B, C,  7, 10, (md5_uint32) 0x432aff97);
+      OP (C, D, A, B, 14, 15, (md5_uint32) 0xab9423a7);
+      OP (B, C, D, A,  5, 21, (md5_uint32) 0xfc93a039);
+      OP (A, B, C, D, 12,  6, (md5_uint32) 0x655b59c3);
+      OP (D, A, B, C,  3, 10, (md5_uint32) 0x8f0ccc92);
+      OP (C, D, A, B, 10, 15, (md5_uint32) 0xffeff47d);
+      OP (B, C, D, A,  1, 21, (md5_uint32) 0x85845dd1);
+      OP (A, B, C, D,  8,  6, (md5_uint32) 0x6fa87e4f);
+      OP (D, A, B, C, 15, 10, (md5_uint32) 0xfe2ce6e0);
+      OP (C, D, A, B,  6, 15, (md5_uint32) 0xa3014314);
+      OP (B, C, D, A, 13, 21, (md5_uint32) 0x4e0811a1);
+      OP (A, B, C, D,  4,  6, (md5_uint32) 0xf7537e82);
+      OP (D, A, B, C, 11, 10, (md5_uint32) 0xbd3af235);
+      OP (C, D, A, B,  2, 15, (md5_uint32) 0x2ad7d2bb);
+      OP (B, C, D, A,  9, 21, (md5_uint32) 0xeb86d391);
+
+      /* Add the starting values of the context.  */
+      A += A_save;
+      B += B_save;
+      C += C_save;
+      D += D_save;
+    }
+
+  /* Put checksum in context given as argument.  */
+  ctx->A = A;
+  ctx->B = B;
+  ctx->C = C;
+  ctx->D = D;
+}
diff --git a/libiberty/memchr.c b/libiberty/memchr.c
new file mode 100644 (file)
index 0000000..451f817
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+
+@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n})
+
+This function searches memory starting at @code{*@var{s}} for the
+character @var{c}.  The search only ends with the first occurrence of
+@var{c}, or after @var{length} characters; in particular, a null
+character does not terminate the search.  If the character @var{c} is
+found within @var{length} characters of @code{*@var{s}}, a pointer
+to the character is returned.  If @var{c} is not found, then @code{NULL} is
+returned.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+PTR
+memchr (register const PTR src_void, int c, size_t length)
+{
+  const unsigned char *src = (const unsigned char *)src_void;
+  
+  while (length-- > 0)
+  {
+    if (*src == c)
+     return (PTR)src;
+    src++;
+  }
+  return NULL;
+}
diff --git a/libiberty/memcmp.c b/libiberty/memcmp.c
new file mode 100644 (file)
index 0000000..39edfca
--- /dev/null
@@ -0,0 +1,34 @@
+/* memcmp -- compare two memory regions.
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, a value less than zero if @var{x} is
+lexically less than @var{y}, or a value greater than zero if @var{x}
+is lexically greater than @var{y}.  Note that lexical order is determined
+as if comparing unsigned char arrays.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+int
+memcmp (const PTR str1, const PTR str2, size_t count)
+{
+  register const unsigned char *s1 = (const unsigned char*)str1;
+  register const unsigned char *s2 = (const unsigned char*)str2;
+
+  while (count-- > 0)
+    {
+      if (*s1++ != *s2++)
+         return s1[-1] < s2[-1] ? -1 : 1;
+    }
+  return 0;
+}
+
diff --git a/libiberty/memcpy.c b/libiberty/memcpy.c
new file mode 100644 (file)
index 0000000..9b5b242
--- /dev/null
@@ -0,0 +1,25 @@
+/* memcpy (the standard C function)
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  Returns a pointer to @var{out}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+void bcopy (const void*, void*, size_t);
+
+PTR
+memcpy (PTR out, const PTR in, size_t length)
+{
+    bcopy(in, out, length);
+    return out;
+}
diff --git a/libiberty/memmove.c b/libiberty/memmove.c
new file mode 100644 (file)
index 0000000..06a24fc
--- /dev/null
@@ -0,0 +1,25 @@
+/* Wrapper to implement ANSI C's memmove using BSD's bcopy. */
+/* This function is in the public domain.  --Per Bothner. */
+
+/*
+
+@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count})
+
+Copies @var{count} bytes from memory area @var{from} to memory area
+@var{to}, returning a pointer to @var{to}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+void bcopy (const void*, void*, size_t);
+
+PTR
+memmove (PTR s1, const PTR s2, size_t n)
+{
+  bcopy (s2, s1, n);
+  return s1;
+}
diff --git a/libiberty/mempcpy.c b/libiberty/mempcpy.c
new file mode 100644 (file)
index 0000000..beda7df
--- /dev/null
@@ -0,0 +1,41 @@
+/* Implement the mempcpy function.
+   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+@var{out}.  Returns a pointer to @var{out} + @var{length}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+extern PTR memcpy (PTR, const PTR, size_t);
+
+PTR
+mempcpy (PTR dst, const PTR src, size_t len)
+{
+  return (char *) memcpy (dst, src, len) + len;
+}
diff --git a/libiberty/memset.c b/libiberty/memset.c
new file mode 100644 (file)
index 0000000..1951ad6
--- /dev/null
@@ -0,0 +1,25 @@
+/* memset
+   This implementation is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count})
+
+Sets the first @var{count} bytes of @var{s} to the constant byte
+@var{c}, returning a pointer to @var{s}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+PTR
+memset (PTR dest, register int val, register size_t len)
+{
+  register unsigned char *ptr = (unsigned char*)dest;
+  while (len-- > 0)
+    *ptr++ = val;
+  return dest;
+}
diff --git a/libiberty/mkstemps.c b/libiberty/mkstemps.c
new file mode 100644 (file)
index 0000000..6c2e472
--- /dev/null
@@ -0,0 +1,140 @@
+/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc.
+   This file is derived from mkstemp.c from the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#include <errno.h>
+#include <stdio.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include "ansidecl.h"
+
+/* We need to provide a type for gcc_uint64_t.  */
+#ifdef __GNUC__
+__extension__ typedef unsigned long long gcc_uint64_t;
+#else
+typedef unsigned long gcc_uint64_t;
+#endif
+
+#ifndef TMP_MAX
+#define TMP_MAX 16384
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+/*
+
+@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
+
+Generate a unique temporary file name from @var{pattern}.
+@var{pattern} has the form:
+
+@example
+   @var{path}/ccXXXXXX@var{suffix}
+@end example
+
+@var{suffix_len} tells us how long @var{suffix} is (it can be zero
+length).  The last six characters of @var{pattern} before @var{suffix}
+must be @samp{XXXXXX}; they are replaced with a string that makes the
+filename unique.  Returns a file descriptor open on the file for
+reading and writing.
+
+@end deftypefn
+
+*/
+
+int
+mkstemps (char *pattern, int suffix_len)
+{
+  static const char letters[]
+    = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+  static gcc_uint64_t value;
+#ifdef HAVE_GETTIMEOFDAY
+  struct timeval tv;
+#endif
+  char *XXXXXX;
+  size_t len;
+  int count;
+
+  len = strlen (pattern);
+
+  if ((int) len < 6 + suffix_len
+      || strncmp (&pattern[len - 6 - suffix_len], "XXXXXX", 6))
+    {
+      return -1;
+    }
+
+  XXXXXX = &pattern[len - 6 - suffix_len];
+
+#ifdef HAVE_GETTIMEOFDAY
+  /* Get some more or less random data.  */
+  gettimeofday (&tv, NULL);
+  value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
+#else
+  value += getpid ();
+#endif
+
+  for (count = 0; count < TMP_MAX; ++count)
+    {
+      gcc_uint64_t v = value;
+      int fd;
+
+      /* Fill in the random bits.  */
+      XXXXXX[0] = letters[v % 62];
+      v /= 62;
+      XXXXXX[1] = letters[v % 62];
+      v /= 62;
+      XXXXXX[2] = letters[v % 62];
+      v /= 62;
+      XXXXXX[3] = letters[v % 62];
+      v /= 62;
+      XXXXXX[4] = letters[v % 62];
+      v /= 62;
+      XXXXXX[5] = letters[v % 62];
+
+      fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600);
+      if (fd >= 0)
+       /* The file does not exist.  */
+       return fd;
+
+      /* This is a random value.  It is only necessary that the next
+        TMP_MAX values generated by adding 7777 to VALUE are different
+        with (module 2^32).  */
+      value += 7777;
+    }
+
+  /* We return the null string if we can't find a unique file name.  */
+  pattern[0] = '\0';
+  return -1;
+}
diff --git a/libiberty/msdos.c b/libiberty/msdos.c
new file mode 100644 (file)
index 0000000..923e64d
--- /dev/null
@@ -0,0 +1,15 @@
+char msg[] = "No vfork available - aborting\n";
+vfork()
+{
+  write(1, msg, sizeof(msg));
+}
+
+sigsetmask()
+{
+  /* no signals support in go32 (yet) */
+}
+
+waitpid()
+{
+  return -1;
+}
diff --git a/libiberty/objalloc.c b/libiberty/objalloc.c
new file mode 100644 (file)
index 0000000..3ddac2c
--- /dev/null
@@ -0,0 +1,291 @@
+/* objalloc.c -- routines to allocate memory for objects
+   Copyright 1997 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor, Cygnus Solutions.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "ansidecl.h"
+
+#include "objalloc.h"
+
+/* Get a definition for NULL.  */
+#include <stdio.h>
+
+#if VMS
+#include <stdlib.h>
+#include <unixlib.h>
+#else
+
+/* Get a definition for size_t.  */
+#include <stddef.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+/* For systems with larger pointers than ints, this must be declared.  */
+extern PTR malloc (size_t);
+extern void free (PTR);
+#endif
+
+#endif
+
+/* These routines allocate space for an object.  Freeing allocated
+   space may or may not free all more recently allocated space.
+
+   We handle large and small allocation requests differently.  If we
+   don't have enough space in the current block, and the allocation
+   request is for more than 512 bytes, we simply pass it through to
+   malloc.  */
+
+/* The objalloc structure is defined in objalloc.h.  */
+
+/* This structure appears at the start of each chunk.  */
+
+struct objalloc_chunk
+{
+  /* Next chunk.  */
+  struct objalloc_chunk *next;
+  /* If this chunk contains large objects, this is the value of
+     current_ptr when this chunk was allocated.  If this chunk
+     contains small objects, this is NULL.  */
+  char *current_ptr;
+};
+
+/* The aligned size of objalloc_chunk.  */
+
+#define CHUNK_HEADER_SIZE                                      \
+  ((sizeof (struct objalloc_chunk) + OBJALLOC_ALIGN - 1)       \
+   &~ (OBJALLOC_ALIGN - 1))
+
+/* We ask for this much memory each time we create a chunk which is to
+   hold small objects.  */
+
+#define CHUNK_SIZE (4096 - 32)
+
+/* A request for this amount or more is just passed through to malloc.  */
+
+#define BIG_REQUEST (512)
+
+/* Create an objalloc structure.  */
+
+struct objalloc *
+objalloc_create (void)
+{
+  struct objalloc *ret;
+  struct objalloc_chunk *chunk;
+
+  ret = (struct objalloc *) malloc (sizeof *ret);
+  if (ret == NULL)
+    return NULL;
+
+  ret->chunks = (PTR) malloc (CHUNK_SIZE);
+  if (ret->chunks == NULL)
+    {
+      free (ret);
+      return NULL;
+    }
+
+  chunk = (struct objalloc_chunk *) ret->chunks;
+  chunk->next = NULL;
+  chunk->current_ptr = NULL;
+
+  ret->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE;
+  ret->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE;
+
+  return ret;
+}
+
+/* Allocate space from an objalloc structure.  */
+
+PTR
+_objalloc_alloc (struct objalloc *o, unsigned long len)
+{
+  /* We avoid confusion from zero sized objects by always allocating
+     at least 1 byte.  */
+  if (len == 0)
+    len = 1;
+
+  len = (len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1);
+
+  if (len <= o->current_space)
+    {
+      o->current_ptr += len;
+      o->current_space -= len;
+      return (PTR) (o->current_ptr - len);
+    }
+
+  if (len >= BIG_REQUEST)
+    {
+      char *ret;
+      struct objalloc_chunk *chunk;
+
+      ret = (char *) malloc (CHUNK_HEADER_SIZE + len);
+      if (ret == NULL)
+       return NULL;
+
+      chunk = (struct objalloc_chunk *) ret;
+      chunk->next = (struct objalloc_chunk *) o->chunks;
+      chunk->current_ptr = o->current_ptr;
+
+      o->chunks = (PTR) chunk;
+
+      return (PTR) (ret + CHUNK_HEADER_SIZE);
+    }
+  else
+    {
+      struct objalloc_chunk *chunk;
+
+      chunk = (struct objalloc_chunk *) malloc (CHUNK_SIZE);
+      if (chunk == NULL)
+       return NULL;
+      chunk->next = (struct objalloc_chunk *) o->chunks;
+      chunk->current_ptr = NULL;
+
+      o->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE;
+      o->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE;
+
+      o->chunks = (PTR) chunk;
+
+      return objalloc_alloc (o, len);
+    }
+}
+
+/* Free an entire objalloc structure.  */
+
+void
+objalloc_free (struct objalloc *o)
+{
+  struct objalloc_chunk *l;
+
+  l = (struct objalloc_chunk *) o->chunks;
+  while (l != NULL)
+    {
+      struct objalloc_chunk *next;
+
+      next = l->next;
+      free (l);
+      l = next;
+    }
+
+  free (o);
+}
+
+/* Free a block from an objalloc structure.  This also frees all more
+   recently allocated blocks.  */
+
+void
+objalloc_free_block (struct objalloc *o, PTR block)
+{
+  struct objalloc_chunk *p, *small;
+  char *b = (char *) block;
+
+  /* First set P to the chunk which contains the block we are freeing,
+     and set Q to the last small object chunk we see before P.  */
+  small = NULL;
+  for (p = (struct objalloc_chunk *) o->chunks; p != NULL; p = p->next)
+    {
+      if (p->current_ptr == NULL)
+       {
+         if (b > (char *) p && b < (char *) p + CHUNK_SIZE)
+           break;
+         small = p;
+       }
+      else
+       {
+         if (b == (char *) p + CHUNK_HEADER_SIZE)
+           break;
+       }
+    }
+
+  /* If we can't find the chunk, the caller has made a mistake.  */
+  if (p == NULL)
+    abort ();
+
+  if (p->current_ptr == NULL)
+    {
+      struct objalloc_chunk *q;
+      struct objalloc_chunk *first;
+
+      /* The block is in a chunk containing small objects.  We can
+        free every chunk through SMALL, because they have certainly
+        been allocated more recently.  After SMALL, we will not see
+        any chunks containing small objects; we can free any big
+        chunk if the current_ptr is greater than or equal to B.  We
+        can then reset the new current_ptr to B.  */
+
+      first = NULL;
+      q = (struct objalloc_chunk *) o->chunks;
+      while (q != p)
+       {
+         struct objalloc_chunk *next;
+
+         next = q->next;
+         if (small != NULL)
+           {
+             if (small == q)
+               small = NULL;
+             free (q);
+           }
+         else if (q->current_ptr > b)
+           free (q);
+         else if (first == NULL)
+           first = q;
+
+         q = next;
+       }
+
+      if (first == NULL)
+       first = p;
+      o->chunks = (PTR) first;
+
+      /* Now start allocating from this small block again.  */
+      o->current_ptr = b;
+      o->current_space = ((char *) p + CHUNK_SIZE) - b;
+    }
+  else
+    {
+      struct objalloc_chunk *q;
+      char *current_ptr;
+
+      /* This block is in a large chunk by itself.  We can free
+         everything on the list up to and including this block.  We
+         then start allocating from the next chunk containing small
+         objects, setting current_ptr from the value stored with the
+         large chunk we are freeing.  */
+
+      current_ptr = p->current_ptr;
+      p = p->next;
+
+      q = (struct objalloc_chunk *) o->chunks;
+      while (q != p)
+       {
+         struct objalloc_chunk *next;
+
+         next = q->next;
+         free (q);
+         q = next;
+       }
+
+      o->chunks = (PTR) p;
+
+      while (p->current_ptr != NULL)
+       p = p->next;
+
+      o->current_ptr = current_ptr;
+      o->current_space = ((char *) p + CHUNK_SIZE) - current_ptr;
+    }
+}
diff --git a/libiberty/obstack.c b/libiberty/obstack.c
new file mode 100644 (file)
index 0000000..a6dbaf0
--- /dev/null
@@ -0,0 +1,510 @@
+/* obstack.c - subroutines used implicitly by object stack macros
+   Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+
+
+   NOTE: This source is derived from an old version taken from the GNU C
+   Library (glibc).
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "obstack.h"
+
+/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
+   incremented whenever callers compiled using an old obstack.h can no
+   longer properly call the functions in this obstack.c.  */
+#define OBSTACK_INTERFACE_VERSION 1
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself, and the installed library
+   supports the same library interface we do.  This code is part of the GNU
+   C Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object
+   files, it is simpler to just do this in the source for each such file.  */
+
+#include <stdio.h>             /* Random thing to get __GNU_LIBRARY__.  */
+#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+#include <gnu-versions.h>
+#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+#define ELIDE_CODE
+#endif
+#endif
+
+
+#ifndef ELIDE_CODE
+
+
+#define POINTER void *
+
+/* Determine default alignment.  */
+struct fooalign {char x; double d;};
+#define DEFAULT_ALIGNMENT  \
+  ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
+/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
+   But in fact it might be less smart and round addresses to as much as
+   DEFAULT_ROUNDING.  So we prepare for it to do that.  */
+union fooround {long x; double d;};
+#define DEFAULT_ROUNDING (sizeof (union fooround))
+
+/* When we copy a long block of data, this is the unit to do it with.
+   On some machines, copying successive ints does not work;
+   in such a case, redefine COPYING_UNIT to `long' (if that works)
+   or `char' as a last resort.  */
+#ifndef COPYING_UNIT
+#define COPYING_UNIT int
+#endif
+
+
+/* The functions allocating more room by calling `obstack_chunk_alloc'
+   jump to the handler pointed to by `obstack_alloc_failed_handler'.
+   This variable by default points to the internal function
+   `print_and_abort'.  */
+static void print_and_abort (void);
+void (*obstack_alloc_failed_handler) (void) = print_and_abort;
+
+/* Exit value used when `print_and_abort' is used.  */
+#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+int obstack_exit_failure = EXIT_FAILURE;
+
+/* The non-GNU-C macros copy the obstack into this global variable
+   to avoid multiple evaluation.  */
+
+struct obstack *_obstack;
+
+/* Define a macro that either calls functions with the traditional malloc/free
+   calling interface, or calls functions with the mmalloc/mfree interface
+   (that adds an extra first argument), based on the state of use_extra_arg.
+   For free, do not use ?:, since some compilers, like the MIPS compilers,
+   do not allow (expr) ? void : void.  */
+
+#if defined (__STDC__) && __STDC__
+#define CALL_CHUNKFUN(h, size) \
+  (((h) -> use_extra_arg) \
+   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
+   : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
+
+#define CALL_FREEFUN(h, old_chunk) \
+  do { \
+    if ((h) -> use_extra_arg) \
+      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
+    else \
+      (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
+  } while (0)
+#else
+#define CALL_CHUNKFUN(h, size) \
+  (((h) -> use_extra_arg) \
+   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
+   : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
+
+#define CALL_FREEFUN(h, old_chunk) \
+  do { \
+    if ((h) -> use_extra_arg) \
+      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
+    else \
+      (*(void (*) ()) (h)->freefun) ((old_chunk)); \
+  } while (0)
+#endif
+
+\f
+/* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
+   Objects start on multiples of ALIGNMENT (0 means use default).
+   CHUNKFUN is the function to use to allocate chunks,
+   and FREEFUN the function to free them.
+
+   Return nonzero if successful, zero if out of memory.
+   To recover from an out of memory error,
+   free up some memory, then call this again.  */
+
+int
+_obstack_begin (struct obstack *h, int size, int alignment,
+                POINTER (*chunkfun) (long), void (*freefun) (void *))
+{
+  register struct _obstack_chunk *chunk; /* points to new chunk */
+
+  if (alignment == 0)
+    alignment = (int) DEFAULT_ALIGNMENT;
+  if (size == 0)
+    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
+    {
+      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
+        Use the values for range checking, because if range checking is off,
+        the extra bytes won't be missed terribly, but if range checking is on
+        and we used a larger request, a whole extra 4096 bytes would be
+        allocated.
+
+        These number are irrelevant to the new GNU malloc.  I suspect it is
+        less sensitive to the size of the request.  */
+      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
+                   + 4 + DEFAULT_ROUNDING - 1)
+                  & ~(DEFAULT_ROUNDING - 1));
+      size = 4096 - extra;
+    }
+
+  h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
+  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
+  h->chunk_size = size;
+  h->alignment_mask = alignment - 1;
+  h->use_extra_arg = 0;
+
+  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
+  if (!chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->next_free = h->object_base = chunk->contents;
+  h->chunk_limit = chunk->limit
+    = (char *) chunk + h->chunk_size;
+  chunk->prev = 0;
+  /* The initial chunk now contains no empty object.  */
+  h->maybe_empty_object = 0;
+  h->alloc_failed = 0;
+  return 1;
+}
+
+int
+_obstack_begin_1 (struct obstack *h, int size, int alignment,
+                  POINTER (*chunkfun) (POINTER, long),
+                  void (*freefun) (POINTER, POINTER), POINTER arg)
+{
+  register struct _obstack_chunk *chunk; /* points to new chunk */
+
+  if (alignment == 0)
+    alignment = (int) DEFAULT_ALIGNMENT;
+  if (size == 0)
+    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
+    {
+      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
+        Use the values for range checking, because if range checking is off,
+        the extra bytes won't be missed terribly, but if range checking is on
+        and we used a larger request, a whole extra 4096 bytes would be
+        allocated.
+
+        These number are irrelevant to the new GNU malloc.  I suspect it is
+        less sensitive to the size of the request.  */
+      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
+                   + 4 + DEFAULT_ROUNDING - 1)
+                  & ~(DEFAULT_ROUNDING - 1));
+      size = 4096 - extra;
+    }
+
+  h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
+  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
+  h->chunk_size = size;
+  h->alignment_mask = alignment - 1;
+  h->extra_arg = arg;
+  h->use_extra_arg = 1;
+
+  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
+  if (!chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->next_free = h->object_base = chunk->contents;
+  h->chunk_limit = chunk->limit
+    = (char *) chunk + h->chunk_size;
+  chunk->prev = 0;
+  /* The initial chunk now contains no empty object.  */
+  h->maybe_empty_object = 0;
+  h->alloc_failed = 0;
+  return 1;
+}
+
+/* Allocate a new current chunk for the obstack *H
+   on the assumption that LENGTH bytes need to be added
+   to the current object, or a new object of length LENGTH allocated.
+   Copies any partial object from the end of the old chunk
+   to the beginning of the new one.  */
+
+void
+_obstack_newchunk (struct obstack *h, int length)
+{
+  register struct _obstack_chunk *old_chunk = h->chunk;
+  register struct _obstack_chunk *new_chunk;
+  register long        new_size;
+  register long obj_size = h->next_free - h->object_base;
+  register long i;
+  long already;
+
+  /* Compute size for new chunk.  */
+  new_size = (obj_size + length) + (obj_size >> 3) + 100;
+  if (new_size < h->chunk_size)
+    new_size = h->chunk_size;
+
+  /* Allocate and initialize the new chunk.  */
+  new_chunk = CALL_CHUNKFUN (h, new_size);
+  if (!new_chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->chunk = new_chunk;
+  new_chunk->prev = old_chunk;
+  new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
+
+  /* Move the existing object to the new chunk.
+     Word at a time is fast and is safe if the object
+     is sufficiently aligned.  */
+  if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
+    {
+      for (i = obj_size / sizeof (COPYING_UNIT) - 1;
+          i >= 0; i--)
+       ((COPYING_UNIT *)new_chunk->contents)[i]
+         = ((COPYING_UNIT *)h->object_base)[i];
+      /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
+        but that can cross a page boundary on a machine
+        which does not do strict alignment for COPYING_UNITS.  */
+      already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
+    }
+  else
+    already = 0;
+  /* Copy remaining bytes one by one.  */
+  for (i = already; i < obj_size; i++)
+    new_chunk->contents[i] = h->object_base[i];
+
+  /* If the object just copied was the only data in OLD_CHUNK,
+     free that chunk and remove it from the chain.
+     But not if that chunk might contain an empty object.  */
+  if (h->object_base == old_chunk->contents && ! h->maybe_empty_object)
+    {
+      new_chunk->prev = old_chunk->prev;
+      CALL_FREEFUN (h, old_chunk);
+    }
+
+  h->object_base = new_chunk->contents;
+  h->next_free = h->object_base + obj_size;
+  /* The new chunk certainly contains no empty object yet.  */
+  h->maybe_empty_object = 0;
+}
+
+/* Return nonzero if object OBJ has been allocated from obstack H.
+   This is here for debugging.
+   If you use it in a program, you are probably losing.  */
+
+/* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
+   obstack.h because it is just for debugging.  */
+int _obstack_allocated_p (struct obstack *h, POINTER obj);
+
+int
+_obstack_allocated_p (struct obstack *h, POINTER obj)
+{
+  register struct _obstack_chunk *lp;  /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp; /* point to previous chunk if any */
+
+  lp = (h)->chunk;
+  /* We use >= rather than > since the object cannot be exactly at
+     the beginning of the chunk but might be an empty object exactly
+     at the end of an adjacent chunk.  */
+  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
+    {
+      plp = lp->prev;
+      lp = plp;
+    }
+  return lp != 0;
+}
+\f
+/* Free objects in obstack H, including OBJ and everything allocate
+   more recently than OBJ.  If OBJ is zero, free everything in H.  */
+
+#undef obstack_free
+
+/* This function has two names with identical definitions.
+   This is the first one, called from non-ANSI code.  */
+
+void
+_obstack_free (struct obstack *h, POINTER obj)
+{
+  register struct _obstack_chunk *lp;  /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp; /* point to previous chunk if any */
+
+  lp = h->chunk;
+  /* We use >= because there cannot be an object at the beginning of a chunk.
+     But there can be an empty object at that address
+     at the end of another chunk.  */
+  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
+    {
+      plp = lp->prev;
+      CALL_FREEFUN (h, lp);
+      lp = plp;
+      /* If we switch chunks, we can't tell whether the new current
+        chunk contains an empty object, so assume that it may.  */
+      h->maybe_empty_object = 1;
+    }
+  if (lp)
+    {
+      h->object_base = h->next_free = (char *) (obj);
+      h->chunk_limit = lp->limit;
+      h->chunk = lp;
+    }
+  else if (obj != 0)
+    /* obj is not in any of the chunks! */
+    abort ();
+}
+
+/* This function is used from ANSI code.  */
+
+void
+obstack_free (struct obstack *h, POINTER obj)
+{
+  register struct _obstack_chunk *lp;  /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp; /* point to previous chunk if any */
+
+  lp = h->chunk;
+  /* We use >= because there cannot be an object at the beginning of a chunk.
+     But there can be an empty object at that address
+     at the end of another chunk.  */
+  while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
+    {
+      plp = lp->prev;
+      CALL_FREEFUN (h, lp);
+      lp = plp;
+      /* If we switch chunks, we can't tell whether the new current
+        chunk contains an empty object, so assume that it may.  */
+      h->maybe_empty_object = 1;
+    }
+  if (lp)
+    {
+      h->object_base = h->next_free = (char *) (obj);
+      h->chunk_limit = lp->limit;
+      h->chunk = lp;
+    }
+  else if (obj != 0)
+    /* obj is not in any of the chunks! */
+    abort ();
+}
+\f
+int
+_obstack_memory_used (struct obstack *h)
+{
+  register struct _obstack_chunk* lp;
+  register int nbytes = 0;
+
+  for (lp = h->chunk; lp != 0; lp = lp->prev)
+    {
+      nbytes += lp->limit - (char *) lp;
+    }
+  return nbytes;
+}
+\f
+/* Define the error handler.  */
+#ifndef _
+# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+#  include <libintl.h>
+#  ifndef _
+#   define _(Str) gettext (Str)
+#  endif
+# else
+#  define _(Str) (Str)
+# endif
+#endif
+
+static void
+print_and_abort (void)
+{
+  fputs (_("memory exhausted\n"), stderr);
+  exit (obstack_exit_failure);
+}
+\f
+#if 0
+/* These are now turned off because the applications do not use it
+   and it uses bcopy via obstack_grow, which causes trouble on sysV.  */
+
+/* Now define the functional versions of the obstack macros.
+   Define them to simply use the corresponding macros to do the job.  */
+
+/* The function names appear in parentheses in order to prevent
+   the macro-definitions of the names from being expanded there.  */
+
+POINTER (obstack_base) (struct obstack *obstack)
+{
+  return obstack_base (obstack);
+}
+
+POINTER (obstack_next_free) (struct obstack *obstack)
+{
+  return obstack_next_free (obstack);
+}
+
+int (obstack_object_size) (struct obstack *obstack)
+{
+  return obstack_object_size (obstack);
+}
+
+int (obstack_room) (struct obstack *obstack)
+{
+  return obstack_room (obstack);
+}
+
+int (obstack_make_room) (struct obstack *obstack, int length)
+{
+  return obstack_make_room (obstack, length);
+}
+
+void (obstack_grow) (struct obstack *obstack, POINTER pointer, int length)
+{
+  obstack_grow (obstack, pointer, length);
+}
+
+void (obstack_grow0) (struct obstack *obstack, POINTER pointer, int length)
+{
+  obstack_grow0 (obstack, pointer, length);
+}
+
+void (obstack_1grow) (struct obstack *obstack, int character)
+{
+  obstack_1grow (obstack, character);
+}
+
+void (obstack_blank) (struct obstack *obstack, int length)
+{
+  obstack_blank (obstack, length);
+}
+
+void (obstack_1grow_fast) (struct obstack *obstack, int character)
+{
+  obstack_1grow_fast (obstack, character);
+}
+
+void (obstack_blank_fast) (struct obstack *obstack, int length)
+{
+  obstack_blank_fast (obstack, length);
+}
+
+POINTER (obstack_finish) (struct obstack *obstack)
+{
+  return obstack_finish (obstack);
+}
+
+POINTER (obstack_alloc) (struct obstack *obstack, int length)
+{
+  return obstack_alloc (obstack, length);
+}
+
+POINTER (obstack_copy) (struct obstack *obstack, POINTER pointer, int length)
+{
+  return obstack_copy (obstack, pointer, length);
+}
+
+POINTER (obstack_copy0) (struct obstack *obstack, POINTER pointer, int length)
+{
+  return obstack_copy0 (obstack, pointer, length);
+}
+
+#endif /* 0 */
+
+#endif /* !ELIDE_CODE */
diff --git a/libiberty/obstacks.texi b/libiberty/obstacks.texi
new file mode 100644 (file)
index 0000000..9bddf7c
--- /dev/null
@@ -0,0 +1,758 @@
+@node Obstacks,Licenses,Functions,Top
+@chapter Obstacks
+@cindex obstacks
+
+An @dfn{obstack} is a pool of memory containing a stack of objects.  You
+can create any number of separate obstacks, and then allocate objects in
+specified obstacks.  Within each obstack, the last object allocated must
+always be the first one freed, but distinct obstacks are independent of
+each other.
+
+Aside from this one constraint of order of freeing, obstacks are totally
+general: an obstack can contain any number of objects of any size.  They
+are implemented with macros, so allocation is usually very fast as long as
+the objects are usually small.  And the only space overhead per object is
+the padding needed to start each object on a suitable boundary.
+
+@menu
+* Creating Obstacks::          How to declare an obstack in your program.
+* Preparing for Obstacks::     Preparations needed before you can
+                                use obstacks.
+* Allocation in an Obstack::    Allocating objects in an obstack.
+* Freeing Obstack Objects::     Freeing objects in an obstack.
+* Obstack Functions::          The obstack functions are both
+                                functions and macros.
+* Growing Objects::             Making an object bigger by stages.
+* Extra Fast Growing::         Extra-high-efficiency (though more
+                                complicated) growing objects.
+* Status of an Obstack::        Inquiries about the status of an obstack.
+* Obstacks Data Alignment::     Controlling alignment of objects in obstacks.
+* Obstack Chunks::              How obstacks obtain and release chunks;
+                                efficiency considerations.
+* Summary of Obstacks::
+@end menu
+
+@node Creating Obstacks
+@section Creating Obstacks
+
+The utilities for manipulating obstacks are declared in the header
+file @file{obstack.h}.
+@pindex obstack.h
+
+@comment obstack.h
+@comment GNU
+@deftp {Data Type} {struct obstack}
+An obstack is represented by a data structure of type @code{struct
+obstack}.  This structure has a small fixed size; it records the status
+of the obstack and how to find the space in which objects are allocated.
+It does not contain any of the objects themselves.  You should not try
+to access the contents of the structure directly; use only the functions
+described in this chapter.
+@end deftp
+
+You can declare variables of type @code{struct obstack} and use them as
+obstacks, or you can allocate obstacks dynamically like any other kind
+of object.  Dynamic allocation of obstacks allows your program to have a
+variable number of different stacks.  (You can even allocate an
+obstack structure in another obstack, but this is rarely useful.)
+
+All the functions that work with obstacks require you to specify which
+obstack to use.  You do this with a pointer of type @code{struct obstack
+*}.  In the following, we often say ``an obstack'' when strictly
+speaking the object at hand is such a pointer.
+
+The objects in the obstack are packed into large blocks called
+@dfn{chunks}.  The @code{struct obstack} structure points to a chain of
+the chunks currently in use.
+
+The obstack library obtains a new chunk whenever you allocate an object
+that won't fit in the previous chunk.  Since the obstack library manages
+chunks automatically, you don't need to pay much attention to them, but
+you do need to supply a function which the obstack library should use to
+get a chunk.  Usually you supply a function which uses @code{malloc}
+directly or indirectly.  You must also supply a function to free a chunk.
+These matters are described in the following section.
+
+@node Preparing for Obstacks
+@section Preparing for Using Obstacks
+
+Each source file in which you plan to use the obstack functions
+must include the header file @file{obstack.h}, like this:
+
+@smallexample
+#include <obstack.h>
+@end smallexample
+
+@findex obstack_chunk_alloc
+@findex obstack_chunk_free
+Also, if the source file uses the macro @code{obstack_init}, it must
+declare or define two functions or macros that will be called by the
+obstack library.  One, @code{obstack_chunk_alloc}, is used to allocate
+the chunks of memory into which objects are packed.  The other,
+@code{obstack_chunk_free}, is used to return chunks when the objects in
+them are freed.  These macros should appear before any use of obstacks
+in the source file.
+
+Usually these are defined to use @code{malloc} via the intermediary
+@code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}).  This is done with
+the following pair of macro definitions:
+
+@smallexample
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+@end smallexample
+
+@noindent
+Though the memory you get using obstacks really comes from @code{malloc},
+using obstacks is faster because @code{malloc} is called less often, for
+larger blocks of memory.  @xref{Obstack Chunks}, for full details.
+
+At run time, before the program can use a @code{struct obstack} object
+as an obstack, it must initialize the obstack by calling
+@code{obstack_init}.
+
+@comment obstack.h
+@comment GNU
+@deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
+Initialize obstack @var{obstack-ptr} for allocation of objects.  This
+function calls the obstack's @code{obstack_chunk_alloc} function.  If
+allocation of memory fails, the function pointed to by
+@code{obstack_alloc_failed_handler} is called.  The @code{obstack_init}
+function always returns 1 (Compatibility notice: Former versions of
+obstack returned 0 if allocation failed).
+@end deftypefun
+
+Here are two examples of how to allocate the space for an obstack and
+initialize it.  First, an obstack that is a static variable:
+
+@smallexample
+static struct obstack myobstack;
+@dots{}
+obstack_init (&myobstack);
+@end smallexample
+
+@noindent
+Second, an obstack that is itself dynamically allocated:
+
+@smallexample
+struct obstack *myobstack_ptr
+  = (struct obstack *) xmalloc (sizeof (struct obstack));
+
+obstack_init (myobstack_ptr);
+@end smallexample
+
+@comment obstack.h
+@comment GNU
+@defvar obstack_alloc_failed_handler
+The value of this variable is a pointer to a function that
+@code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate
+memory.  The default action is to print a message and abort.
+You should supply a function that either calls @code{exit}
+(@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local
+Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return.
+
+@smallexample
+void my_obstack_alloc_failed (void)
+@dots{}
+obstack_alloc_failed_handler = &my_obstack_alloc_failed;
+@end smallexample
+
+@end defvar
+
+@node Allocation in an Obstack
+@section Allocation in an Obstack
+@cindex allocation (obstacks)
+
+The most direct way to allocate an object in an obstack is with
+@code{obstack_alloc}, which is invoked almost like @code{malloc}.
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+This allocates an uninitialized block of @var{size} bytes in an obstack
+and returns its address.  Here @var{obstack-ptr} specifies which obstack
+to allocate the block in; it is the address of the @code{struct obstack}
+object which represents the obstack.  Each obstack function or macro
+requires you to specify an @var{obstack-ptr} as the first argument.
+
+This function calls the obstack's @code{obstack_chunk_alloc} function if
+it needs to allocate a new chunk of memory; it calls
+@code{obstack_alloc_failed_handler} if allocation of memory by
+@code{obstack_chunk_alloc} failed.
+@end deftypefun
+
+For example, here is a function that allocates a copy of a string @var{str}
+in a specific obstack, which is in the variable @code{string_obstack}:
+
+@smallexample
+struct obstack string_obstack;
+
+char *
+copystring (char *string)
+@{
+  size_t len = strlen (string) + 1;
+  char *s = (char *) obstack_alloc (&string_obstack, len);
+  memcpy (s, string, len);
+  return s;
+@}
+@end smallexample
+
+To allocate a block with specified contents, use the function
+@code{obstack_copy}, declared like this:
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+This allocates a block and initializes it by copying @var{size}
+bytes of data starting at @var{address}.  It calls
+@code{obstack_alloc_failed_handler} if allocation of memory by
+@code{obstack_chunk_alloc} failed.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Like @code{obstack_copy}, but appends an extra byte containing a null
+character.  This extra byte is not counted in the argument @var{size}.
+@end deftypefun
+
+The @code{obstack_copy0} function is convenient for copying a sequence
+of characters into an obstack as a null-terminated string.  Here is an
+example of its use:
+
+@smallexample
+char *
+obstack_savestring (char *addr, int size)
+@{
+  return obstack_copy0 (&myobstack, addr, size);
+@}
+@end smallexample
+
+@noindent
+Contrast this with the previous example of @code{savestring} using
+@code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}).
+
+@node Freeing Obstack Objects
+@section Freeing Objects in an Obstack
+@cindex freeing (obstacks)
+
+To free an object allocated in an obstack, use the function
+@code{obstack_free}.  Since the obstack is a stack of objects, freeing
+one object automatically frees all other objects allocated more recently
+in the same obstack.
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+If @var{object} is a null pointer, everything allocated in the obstack
+is freed.  Otherwise, @var{object} must be the address of an object
+allocated in the obstack.  Then @var{object} is freed, along with
+everything allocated in @var{obstack} since @var{object}.
+@end deftypefun
+
+Note that if @var{object} is a null pointer, the result is an
+uninitialized obstack.  To free all memory in an obstack but leave it
+valid for further allocation, call @code{obstack_free} with the address
+of the first object allocated on the obstack:
+
+@smallexample
+obstack_free (obstack_ptr, first_object_allocated_ptr);
+@end smallexample
+
+Recall that the objects in an obstack are grouped into chunks.  When all
+the objects in a chunk become free, the obstack library automatically
+frees the chunk (@pxref{Preparing for Obstacks}).  Then other
+obstacks, or non-obstack allocation, can reuse the space of the chunk.
+
+@node Obstack Functions
+@section Obstack Functions and Macros
+@cindex macros
+
+The interfaces for using obstacks may be defined either as functions or
+as macros, depending on the compiler.  The obstack facility works with
+all C compilers, including both @w{ISO C} and traditional C, but there are
+precautions you must take if you plan to use compilers other than GNU C.
+
+If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack
+``functions'' are actually defined only as macros.  You can call these
+macros like functions, but you cannot use them in any other way (for
+example, you cannot take their address).
+
+Calling the macros requires a special precaution: namely, the first
+operand (the obstack pointer) may not contain any side effects, because
+it may be computed more than once.  For example, if you write this:
+
+@smallexample
+obstack_alloc (get_obstack (), 4);
+@end smallexample
+
+@noindent
+you will find that @code{get_obstack} may be called several times.
+If you use @code{*obstack_list_ptr++} as the obstack pointer argument,
+you will get very strange results since the incrementation may occur
+several times.
+
+In @w{ISO C}, each function has both a macro definition and a function
+definition.  The function definition is used if you take the address of the
+function without calling it.  An ordinary call uses the macro definition by
+default, but you can request the function definition instead by writing the
+function name in parentheses, as shown here:
+
+@smallexample
+char *x;
+void *(*funcp) ();
+/* @r{Use the macro}.  */
+x = (char *) obstack_alloc (obptr, size);
+/* @r{Call the function}.  */
+x = (char *) (obstack_alloc) (obptr, size);
+/* @r{Take the address of the function}.  */
+funcp = obstack_alloc;
+@end smallexample
+
+@noindent
+This is the same situation that exists in @w{ISO C} for the standard library
+functions.  @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}.
+
+@strong{Warning:} When you do use the macros, you must observe the
+precaution of avoiding side effects in the first operand, even in @w{ISO C}.
+
+If you use the GNU C compiler, this precaution is not necessary, because
+various language extensions in GNU C permit defining the macros so as to
+compute each argument only once.
+
+@node Growing Objects
+@section Growing Objects
+@cindex growing objects (in obstacks)
+@cindex changing the size of a block (obstacks)
+
+Because memory in obstack chunks is used sequentially, it is possible to
+build up an object step by step, adding one or more bytes at a time to the
+end of the object.  With this technique, you do not need to know how much
+data you will put in the object until you come to the end of it.  We call
+this the technique of @dfn{growing objects}.  The special functions
+for adding data to the growing object are described in this section.
+
+You don't need to do anything special when you start to grow an object.
+Using one of the functions to add data to the object automatically
+starts it.  However, it is necessary to say explicitly when the object is
+finished.  This is done with the function @code{obstack_finish}.
+
+The actual address of the object thus built up is not known until the
+object is finished.  Until then, it always remains possible that you will
+add so much data that the object must be copied into a new chunk.
+
+While the obstack is in use for a growing object, you cannot use it for
+ordinary allocation of another object.  If you try to do so, the space
+already added to the growing object will become part of the other object.
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+The most basic function for adding to a growing object is
+@code{obstack_blank}, which adds space without initializing it.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+To add a block of initialized space, use @code{obstack_grow}, which is
+the growing-object analogue of @code{obstack_copy}.  It adds @var{size}
+bytes of data to the growing object, copying the contents from
+@var{data}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+This is the growing-object analogue of @code{obstack_copy0}.  It adds
+@var{size} bytes copied from @var{data}, followed by an additional null
+character.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
+To add one character at a time, use the function @code{obstack_1grow}.
+It adds a single byte containing @var{c} to the growing object.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
+Adding the value of a pointer one can use the function
+@code{obstack_ptr_grow}.  It adds @code{sizeof (void *)} bytes
+containing the value of @var{data}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
+A single value of type @code{int} can be added by using the
+@code{obstack_int_grow} function.  It adds @code{sizeof (int)} bytes to
+the growing object and initializes them with the value of @var{data}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
+When you are finished growing the object, use the function
+@code{obstack_finish} to close it off and return its final address.
+
+Once you have finished the object, the obstack is available for ordinary
+allocation or for growing another object.
+
+This function can return a null pointer under the same conditions as
+@code{obstack_alloc} (@pxref{Allocation in an Obstack}).
+@end deftypefun
+
+When you build an object by growing it, you will probably need to know
+afterward how long it became.  You need not keep track of this as you grow
+the object, because you can find out the length from the obstack just
+before finishing the object with the function @code{obstack_object_size},
+declared as follows:
+
+@comment obstack.h
+@comment GNU
+@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+This function returns the current size of the growing object, in bytes.
+Remember to call this function @emph{before} finishing the object.
+After it is finished, @code{obstack_object_size} will return zero.
+@end deftypefun
+
+If you have started growing an object and wish to cancel it, you should
+finish it and then free it, like this:
+
+@smallexample
+obstack_free (obstack_ptr, obstack_finish (obstack_ptr));
+@end smallexample
+
+@noindent
+This has no effect if no object was growing.
+
+@cindex shrinking objects
+You can use @code{obstack_blank} with a negative size argument to make
+the current object smaller.  Just don't try to shrink it beyond zero
+length---there's no telling what will happen if you do that.
+
+@node Extra Fast Growing
+@section Extra Fast Growing Objects
+@cindex efficiency and obstacks
+
+The usual functions for growing objects incur overhead for checking
+whether there is room for the new growth in the current chunk.  If you
+are frequently constructing objects in small steps of growth, this
+overhead can be significant.
+
+You can reduce the overhead by using special ``fast growth''
+functions that grow the object without checking.  In order to have a
+robust program, you must do the checking yourself.  If you do this checking
+in the simplest way each time you are about to add data to the object, you
+have not saved anything, because that is what the ordinary growth
+functions do.  But if you can arrange to check less often, or check
+more efficiently, then you make the program faster.
+
+The function @code{obstack_room} returns the amount of room available
+in the current chunk.  It is declared as follows:
+
+@comment obstack.h
+@comment GNU
+@deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
+This returns the number of bytes that can be added safely to the current
+growing object (or to an object about to be started) in obstack
+@var{obstack} using the fast growth functions.
+@end deftypefun
+
+While you know there is room, you can use these fast growth functions
+for adding data to a growing object:
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
+The function @code{obstack_1grow_fast} adds one byte containing the
+character @var{c} to the growing object in obstack @var{obstack-ptr}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
+The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
+bytes containing the value of @var{data} to the growing object in
+obstack @var{obstack-ptr}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
+The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
+containing the value of @var{data} to the growing object in obstack
+@var{obstack-ptr}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+The function @code{obstack_blank_fast} adds @var{size} bytes to the
+growing object in obstack @var{obstack-ptr} without initializing them.
+@end deftypefun
+
+When you check for space using @code{obstack_room} and there is not
+enough room for what you want to add, the fast growth functions
+are not safe.  In this case, simply use the corresponding ordinary
+growth function instead.  Very soon this will copy the object to a
+new chunk; then there will be lots of room available again.
+
+So, each time you use an ordinary growth function, check afterward for
+sufficient space using @code{obstack_room}.  Once the object is copied
+to a new chunk, there will be plenty of space again, so the program will
+start using the fast growth functions again.
+
+Here is an example:
+
+@smallexample
+@group
+void
+add_string (struct obstack *obstack, const char *ptr, int len)
+@{
+  while (len > 0)
+    @{
+      int room = obstack_room (obstack);
+      if (room == 0)
+        @{
+          /* @r{Not enough room. Add one character slowly,}
+             @r{which may copy to a new chunk and make room.}  */
+          obstack_1grow (obstack, *ptr++);
+          len--;
+        @}
+      else
+        @{
+          if (room > len)
+            room = len;
+          /* @r{Add fast as much as we have room for.} */
+          len -= room;
+          while (room-- > 0)
+            obstack_1grow_fast (obstack, *ptr++);
+        @}
+    @}
+@}
+@end group
+@end smallexample
+
+@node Status of an Obstack
+@section Status of an Obstack
+@cindex obstack status
+@cindex status of obstack
+
+Here are functions that provide information on the current status of
+allocation in an obstack.  You can use them to learn about an object while
+still growing it.
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
+This function returns the tentative address of the beginning of the
+currently growing object in @var{obstack-ptr}.  If you finish the object
+immediately, it will have that address.  If you make it larger first, it
+may outgrow the current chunk---then its address will change!
+
+If no object is growing, this value says where the next object you
+allocate will start (once again assuming it fits in the current
+chunk).
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
+This function returns the address of the first free byte in the current
+chunk of obstack @var{obstack-ptr}.  This is the end of the currently
+growing object.  If no object is growing, @code{obstack_next_free}
+returns the same value as @code{obstack_base}.
+@end deftypefun
+
+@comment obstack.h
+@comment GNU
+@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+This function returns the size in bytes of the currently growing object.
+This is equivalent to
+
+@smallexample
+obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr})
+@end smallexample
+@end deftypefun
+
+@node Obstacks Data Alignment
+@section Alignment of Data in Obstacks
+@cindex alignment (in obstacks)
+
+Each obstack has an @dfn{alignment boundary}; each object allocated in
+the obstack automatically starts on an address that is a multiple of the
+specified boundary.  By default, this boundary is 4 bytes.
+
+To access an obstack's alignment boundary, use the macro
+@code{obstack_alignment_mask}, whose function prototype looks like
+this:
+
+@comment obstack.h
+@comment GNU
+@deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+The value is a bit mask; a bit that is 1 indicates that the corresponding
+bit in the address of an object should be 0.  The mask value should be one
+less than a power of 2; the effect is that all object addresses are
+multiples of that power of 2.  The default value of the mask is 3, so that
+addresses are multiples of 4.  A mask value of 0 means an object can start
+on any multiple of 1 (that is, no alignment is required).
+
+The expansion of the macro @code{obstack_alignment_mask} is an lvalue,
+so you can alter the mask by assignment.  For example, this statement:
+
+@smallexample
+obstack_alignment_mask (obstack_ptr) = 0;
+@end smallexample
+
+@noindent
+has the effect of turning off alignment processing in the specified obstack.
+@end deftypefn
+
+Note that a change in alignment mask does not take effect until
+@emph{after} the next time an object is allocated or finished in the
+obstack.  If you are not growing an object, you can make the new
+alignment mask take effect immediately by calling @code{obstack_finish}.
+This will finish a zero-length object and then do proper alignment for
+the next object.
+
+@node Obstack Chunks
+@section Obstack Chunks
+@cindex efficiency of chunks
+@cindex chunks
+
+Obstacks work by allocating space for themselves in large chunks, and
+then parceling out space in the chunks to satisfy your requests.  Chunks
+are normally 4096 bytes long unless you specify a different chunk size.
+The chunk size includes 8 bytes of overhead that are not actually used
+for storing objects.  Regardless of the specified size, longer chunks
+will be allocated when necessary for long objects.
+
+The obstack library allocates chunks by calling the function
+@code{obstack_chunk_alloc}, which you must define.  When a chunk is no
+longer needed because you have freed all the objects in it, the obstack
+library frees the chunk by calling @code{obstack_chunk_free}, which you
+must also define.
+
+These two must be defined (as macros) or declared (as functions) in each
+source file that uses @code{obstack_init} (@pxref{Creating Obstacks}).
+Most often they are defined as macros like this:
+
+@smallexample
+#define obstack_chunk_alloc malloc
+#define obstack_chunk_free free
+@end smallexample
+
+Note that these are simple macros (no arguments).  Macro definitions with
+arguments will not work!  It is necessary that @code{obstack_chunk_alloc}
+or @code{obstack_chunk_free}, alone, expand into a function name if it is
+not itself a function name.
+
+If you allocate chunks with @code{malloc}, the chunk size should be a
+power of 2.  The default chunk size, 4096, was chosen because it is long
+enough to satisfy many typical requests on the obstack yet short enough
+not to waste too much memory in the portion of the last chunk not yet used.
+
+@comment obstack.h
+@comment GNU
+@deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+This returns the chunk size of the given obstack.
+@end deftypefn
+
+Since this macro expands to an lvalue, you can specify a new chunk size by
+assigning it a new value.  Doing so does not affect the chunks already
+allocated, but will change the size of chunks allocated for that particular
+obstack in the future.  It is unlikely to be useful to make the chunk size
+smaller, but making it larger might improve efficiency if you are
+allocating many objects whose size is comparable to the chunk size.  Here
+is how to do so cleanly:
+
+@smallexample
+if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size})
+  obstack_chunk_size (obstack_ptr) = @var{new-chunk-size};
+@end smallexample
+
+@node Summary of Obstacks
+@section Summary of Obstack Functions
+
+Here is a summary of all the functions associated with obstacks.  Each
+takes the address of an obstack (@code{struct obstack *}) as its first
+argument.
+
+@table @code
+@item void obstack_init (struct obstack *@var{obstack-ptr})
+Initialize use of an obstack.  @xref{Creating Obstacks}.
+
+@item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+Allocate an object of @var{size} uninitialized bytes.
+@xref{Allocation in an Obstack}.
+
+@item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Allocate an object of @var{size} bytes, with contents copied from
+@var{address}.  @xref{Allocation in an Obstack}.
+
+@item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Allocate an object of @var{size}+1 bytes, with @var{size} of them copied
+from @var{address}, followed by a null character at the end.
+@xref{Allocation in an Obstack}.
+
+@item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+Free @var{object} (and everything allocated in the specified obstack
+more recently than @var{object}).  @xref{Freeing Obstack Objects}.
+
+@item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+Add @var{size} uninitialized bytes to a growing object.
+@xref{Growing Objects}.
+
+@item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Add @var{size} bytes, copied from @var{address}, to a growing object.
+@xref{Growing Objects}.
+
+@item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Add @var{size} bytes, copied from @var{address}, to a growing object,
+and then add another byte containing a null character.  @xref{Growing
+Objects}.
+
+@item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char})
+Add one byte containing @var{data-char} to a growing object.
+@xref{Growing Objects}.
+
+@item void *obstack_finish (struct obstack *@var{obstack-ptr})
+Finalize the object that is growing and return its permanent address.
+@xref{Growing Objects}.
+
+@item int obstack_object_size (struct obstack *@var{obstack-ptr})
+Get the current size of the currently growing object.  @xref{Growing
+Objects}.
+
+@item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+Add @var{size} uninitialized bytes to a growing object without checking
+that there is enough room.  @xref{Extra Fast Growing}.
+
+@item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char})
+Add one byte containing @var{data-char} to a growing object without
+checking that there is enough room.  @xref{Extra Fast Growing}.
+
+@item int obstack_room (struct obstack *@var{obstack-ptr})
+Get the amount of room now available for growing the current object.
+@xref{Extra Fast Growing}.
+
+@item int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+The mask used for aligning the beginning of an object.  This is an
+lvalue.  @xref{Obstacks Data Alignment}.
+
+@item int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+The size for allocating chunks.  This is an lvalue.  @xref{Obstack Chunks}.
+
+@item void *obstack_base (struct obstack *@var{obstack-ptr})
+Tentative starting address of the currently growing object.
+@xref{Status of an Obstack}.
+
+@item void *obstack_next_free (struct obstack *@var{obstack-ptr})
+Address just after the end of the currently growing object.
+@xref{Status of an Obstack}.
+@end table
+
diff --git a/libiberty/partition.c b/libiberty/partition.c
new file mode 100644 (file)
index 0000000..5f0745c
--- /dev/null
@@ -0,0 +1,183 @@
+/* List implementation of a partition of consecutive integers.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by CodeSourcery, LLC.
+
+   This file is part of GNU CC.
+
+   GNU CC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GNU CC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU CC; see the file COPYING.  If not, write to
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "libiberty.h"
+#include "partition.h"
+
+static int elem_compare (const void *, const void *);
+
+/* Creates a partition of NUM_ELEMENTS elements.  Initially each
+   element is in a class by itself.  */
+
+partition
+partition_new (int num_elements)
+{
+  int e;
+  
+  partition part = (partition) 
+    xmalloc (sizeof (struct partition_def) + 
+            (num_elements - 1) * sizeof (struct partition_elem));
+  part->num_elements = num_elements;
+  for (e = 0; e < num_elements; ++e) 
+    {
+      part->elements[e].class_element = e;
+      part->elements[e].next = &(part->elements[e]);
+      part->elements[e].class_count = 1;
+    }
+
+  return part;
+}
+
+/* Freeds a partition.  */
+
+void
+partition_delete (partition part)
+{
+  free (part);
+}
+
+/* Unites the classes containing ELEM1 and ELEM2 into a single class
+   of partition PART.  If ELEM1 and ELEM2 are already in the same
+   class, does nothing.  Returns the canonical element of the
+   resulting union class.  */
+
+int
+partition_union (partition part, int elem1, int elem2)
+{
+  struct partition_elem *elements = part->elements;
+  struct partition_elem *e1;
+  struct partition_elem *e2;
+  struct partition_elem *p;
+  struct partition_elem *old_next;
+  /* The canonical element of the resulting union class.  */
+  int class_element = elements[elem1].class_element;
+
+  /* If they're already in the same class, do nothing.  */
+  if (class_element == elements[elem2].class_element)
+    return class_element;
+
+  /* Make sure ELEM1 is in the larger class of the two.  If not, swap
+     them.  This way we always scan the shorter list.  */
+  if (elements[elem1].class_count < elements[elem2].class_count) 
+    {
+      int temp = elem1;
+      elem1 = elem2;
+      elem2 = temp;
+      class_element = elements[elem1].class_element;
+    }
+
+  e1 = &(elements[elem1]);
+  e2 = &(elements[elem2]);
+
+  /* Keep a count of the number of elements in the list.  */
+  elements[class_element].class_count 
+    += elements[e2->class_element].class_count;
+
+  /* Update the class fields in elem2's class list.  */
+  e2->class_element = class_element;
+  for (p = e2->next; p != e2; p = p->next)
+    p->class_element = class_element;
+  
+  /* Splice ELEM2's class list into ELEM1's.  These are circular
+     lists.  */
+  old_next = e1->next;
+  e1->next = e2->next;
+  e2->next = old_next;
+
+  return class_element;
+}
+
+/* Compare elements ELEM1 and ELEM2 from array of integers, given a
+   pointer to each.  Used to qsort such an array.  */
+
+static int 
+elem_compare (const void *elem1, const void *elem2)
+{
+  int e1 = * (const int *) elem1;
+  int e2 = * (const int *) elem2;
+  if (e1 < e2)
+    return -1;
+  else if (e1 > e2)
+    return 1;
+  else
+    return 0;
+}
+
+/* Prints PART to the file pointer FP.  The elements of each
+   class are sorted.  */
+
+void
+partition_print (partition part, FILE *fp)
+{
+  char *done;
+  int num_elements = part->num_elements;
+  struct partition_elem *elements = part->elements;
+  int *class_elements;
+  int e;
+
+  /* Flag the elements we've already printed.  */
+  done = (char *) xmalloc (num_elements);
+  memset (done, 0, num_elements);
+
+  /* A buffer used to sort elements in a class.  */
+  class_elements = (int *) xmalloc (num_elements * sizeof (int));
+
+  fputc ('[', fp);
+  for (e = 0; e < num_elements; ++e)
+    /* If we haven't printed this element, print its entire class.  */
+    if (! done[e]) 
+      {
+       int c = e;
+       int count = elements[elements[e].class_element].class_count;
+       int i;
+
+      /* Collect the elements in this class.  */
+       for (i = 0; i < count; ++i) {
+         class_elements[i] = c;
+         done[c] = 1;
+         c = elements[c].next - elements;
+       }
+       /* Sort them.  */
+       qsort ((void *) class_elements, count, sizeof (int), elem_compare);
+       /* Print them.  */
+       fputc ('(', fp);
+       for (i = 0; i < count; ++i) 
+         fprintf (fp, i == 0 ? "%d" : " %d", class_elements[i]);
+       fputc (')', fp);
+      }
+  fputc (']', fp);
+
+  free (class_elements);
+  free (done);
+}
+
diff --git a/libiberty/pex-common.c b/libiberty/pex-common.c
new file mode 100644 (file)
index 0000000..7f35536
--- /dev/null
@@ -0,0 +1,643 @@
+/* Common code for executing a program in a sub-process.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <ian@airs.com>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "libiberty.h"
+#include "pex-common.h"
+
+#include <stdio.h>
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+extern int mkstemps (char *, int);
+
+/* This file contains subroutines for the program execution routines
+   (pex_init, pex_run, etc.).  This file is compiled on all
+   systems.  */
+
+static void pex_add_remove (struct pex_obj *, const char *, int);
+static int pex_get_status_and_time (struct pex_obj *, int, const char **,
+                                   int *);
+
+/* Initialize a pex_obj structure.  */
+
+struct pex_obj *
+pex_init_common (int flags, const char *pname, const char *tempbase,
+                const struct pex_funcs *funcs)
+{
+  struct pex_obj *obj;
+
+  obj = XNEW (struct pex_obj);
+  obj->flags = flags;
+  obj->pname = pname;
+  obj->tempbase = tempbase;
+  obj->next_input = STDIN_FILE_NO;
+  obj->next_input_name = NULL;
+  obj->next_input_name_allocated = 0;
+  obj->stderr_pipe = -1;
+  obj->count = 0;
+  obj->children = NULL;
+  obj->status = NULL;
+  obj->time = NULL;
+  obj->number_waited = 0;
+  obj->input_file = NULL;
+  obj->read_output = NULL;
+  obj->read_err = NULL;
+  obj->remove_count = 0;
+  obj->remove = NULL;
+  obj->funcs = funcs;
+  obj->sysdep = NULL;
+  return obj;
+}
+
+/* Add a file to be removed when we are done.  */
+
+static void
+pex_add_remove (struct pex_obj *obj, const char *name, int allocated)
+{
+  char *add;
+
+  ++obj->remove_count;
+  obj->remove = XRESIZEVEC (char *, obj->remove, obj->remove_count);
+  if (allocated)
+    add = (char *) name;
+  else
+    add = xstrdup (name);
+  obj->remove[obj->remove_count - 1] = add;
+}
+
+/* Generate a temporary file name based on OBJ, FLAGS, and NAME.
+   Return NULL if we were unable to reserve a temporary filename.
+
+   If non-NULL, the result is either allocated with malloc, or the
+   same pointer as NAME.  */
+static char *
+temp_file (struct pex_obj *obj, int flags, char *name)
+{
+  if (name == NULL)
+    {
+      if (obj->tempbase == NULL)
+        {
+          name = make_temp_file (NULL);
+        }
+      else
+        {
+          int len = strlen (obj->tempbase);
+          int out;
+
+          if (len >= 6
+              && strcmp (obj->tempbase + len - 6, "XXXXXX") == 0)
+            name = xstrdup (obj->tempbase);
+          else
+            name = concat (obj->tempbase, "XXXXXX", NULL);
+
+          out = mkstemps (name, 0);
+          if (out < 0)
+            {
+              free (name);
+              return NULL;
+            }
+
+          /* This isn't obj->funcs->close because we got the
+             descriptor from mkstemps, not from a function in
+             obj->funcs.  Calling close here is just like what
+             make_temp_file does.  */
+          close (out);
+        }
+    }
+  else if ((flags & PEX_SUFFIX) != 0)
+    {
+      if (obj->tempbase == NULL)
+        name = make_temp_file (name);
+      else
+        name = concat (obj->tempbase, name, NULL);
+    }
+
+  return name;
+}
+
+
+/* As for pex_run (), but permits the environment for the child process
+   to be specified. */
+
+const char *
+pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable,
+                               char * const * argv, char * const * env,
+                        const char *orig_outname, const char *errname,
+                       int *err)
+{
+  const char *errmsg;
+  int in, out, errdes;
+  char *outname;
+  int outname_allocated;
+  int p[2];
+  int toclose;
+  long pid;
+
+  in = -1;
+  out = -1;
+  errdes = -1;
+  outname = (char *) orig_outname;
+  outname_allocated = 0;
+
+  /* If the user called pex_input_file, close the file now.  */
+  if (obj->input_file)
+    {
+      if (fclose (obj->input_file) == EOF)
+        {
+          errmsg = "closing pipeline input file";
+          goto error_exit;
+        }
+      obj->input_file = NULL;
+    }
+
+  /* Set IN.  */
+
+  if (obj->next_input_name != NULL)
+    {
+      /* We have to make sure that the previous process has completed
+        before we try to read the file.  */
+      if (!pex_get_status_and_time (obj, 0, &errmsg, err))
+       goto error_exit;
+
+      in = obj->funcs->open_read (obj, obj->next_input_name,
+                                 (flags & PEX_BINARY_INPUT) != 0);
+      if (in < 0)
+       {
+         *err = errno;
+         errmsg = "open temporary file";
+         goto error_exit;
+       }
+      if (obj->next_input_name_allocated)
+       {
+         free (obj->next_input_name);
+         obj->next_input_name_allocated = 0;
+       }
+      obj->next_input_name = NULL;
+    }
+  else
+    {
+      in = obj->next_input;
+      if (in < 0)
+       {
+         *err = 0;
+         errmsg = "pipeline already complete";
+         goto error_exit;
+       }
+    }
+
+  /* Set OUT and OBJ->NEXT_INPUT/OBJ->NEXT_INPUT_NAME.  */
+
+  if ((flags & PEX_LAST) != 0)
+    {
+      if (outname == NULL)
+       out = STDOUT_FILE_NO;
+      else if ((flags & PEX_SUFFIX) != 0)
+       {
+         outname = concat (obj->tempbase, outname, NULL);
+         outname_allocated = 1;
+       }
+      obj->next_input = -1;
+    }
+  else if ((obj->flags & PEX_USE_PIPES) == 0)
+    {
+      outname = temp_file (obj, flags, outname);
+      if (! outname)
+        {
+          *err = 0;
+          errmsg = "could not create temporary file";
+          goto error_exit;
+        }
+
+      if (outname != orig_outname)
+        outname_allocated = 1;
+
+      if ((obj->flags & PEX_SAVE_TEMPS) == 0)
+       {
+         pex_add_remove (obj, outname, outname_allocated);
+         outname_allocated = 0;
+       }
+
+      /* Hand off ownership of outname to the next stage.  */
+      obj->next_input_name = outname;
+      obj->next_input_name_allocated = outname_allocated;
+      outname_allocated = 0;
+    }
+  else
+    {
+      if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_OUTPUT) != 0) < 0)
+       {
+         *err = errno;
+         errmsg = "pipe";
+         goto error_exit;
+       }
+
+      out = p[WRITE_PORT];
+      obj->next_input = p[READ_PORT];
+    }
+
+  if (out < 0)
+    {
+      out = obj->funcs->open_write (obj, outname,
+                                   (flags & PEX_BINARY_OUTPUT) != 0);
+      if (out < 0)
+       {
+         *err = errno;
+         errmsg = "open temporary output file";
+         goto error_exit;
+       }
+    }
+
+  if (outname_allocated)
+    {
+      free (outname);
+      outname_allocated = 0;
+    }
+
+  /* Set ERRDES.  */
+
+  if (errname != NULL && (flags & PEX_STDERR_TO_PIPE) != 0)
+    {
+      *err = 0;
+      errmsg = "both ERRNAME and PEX_STDERR_TO_PIPE specified.";
+      goto error_exit;
+    }
+
+  if (obj->stderr_pipe != -1)
+    {
+      *err = 0;
+      errmsg = "PEX_STDERR_TO_PIPE used in the middle of pipeline";
+      goto error_exit;
+    }
+
+  if (errname == NULL)
+    {
+      if (flags & PEX_STDERR_TO_PIPE)
+       {
+         if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_ERROR) != 0) < 0)
+           {
+             *err = errno;
+             errmsg = "pipe";
+             goto error_exit;
+           }
+         
+         errdes = p[WRITE_PORT];
+         obj->stderr_pipe = p[READ_PORT];        
+       }
+      else
+       {
+         errdes = STDERR_FILE_NO;
+       }
+    }
+  else
+    {
+      errdes = obj->funcs->open_write (obj, errname, 
+                                      (flags & PEX_BINARY_ERROR) != 0);
+      if (errdes < 0)
+       {
+         *err = errno;
+         errmsg = "open error file";
+         goto error_exit;
+       }
+    }
+
+  /* If we are using pipes, the child process has to close the next
+     input pipe.  */
+
+  if ((obj->flags & PEX_USE_PIPES) == 0)
+    toclose = -1;
+  else
+    toclose = obj->next_input;
+
+  /* Run the program.  */
+
+  pid = obj->funcs->exec_child (obj, flags, executable, argv, env,
+                               in, out, errdes, toclose, &errmsg, err);
+  if (pid < 0)
+    goto error_exit;
+
+  ++obj->count;
+  obj->children = XRESIZEVEC (long, obj->children, obj->count);
+  obj->children[obj->count - 1] = pid;
+
+  return NULL;
+
+ error_exit:
+  if (in >= 0 && in != STDIN_FILE_NO)
+    obj->funcs->close (obj, in);
+  if (out >= 0 && out != STDOUT_FILE_NO)
+    obj->funcs->close (obj, out);
+  if (errdes >= 0 && errdes != STDERR_FILE_NO)
+    obj->funcs->close (obj, errdes);
+  if (outname_allocated)
+    free (outname);
+  return errmsg;
+}
+
+/* Run a program.  */
+
+const char *
+pex_run (struct pex_obj *obj, int flags, const char *executable,
+                char * const * argv, const char *orig_outname, const char *errname,
+         int *err)
+{
+  return pex_run_in_environment (obj, flags, executable, argv, NULL,
+                                orig_outname, errname, err);
+}
+
+/* Return a FILE pointer for a temporary file to fill with input for
+   the pipeline.  */
+FILE *
+pex_input_file (struct pex_obj *obj, int flags, const char *in_name)
+{
+  char *name = (char *) in_name;
+  FILE *f;
+
+  /* This must be called before the first pipeline stage is run, and
+     there must not have been any other input selected.  */
+  if (obj->count != 0
+      || (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
+      || obj->next_input_name)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+
+  name = temp_file (obj, flags, name);
+  if (! name)
+    return NULL;
+
+  f = fopen (name, (flags & PEX_BINARY_OUTPUT) ? "wb" : "w");
+  if (! f)
+    {
+      free (name);
+      return NULL;
+    }
+
+  obj->input_file = f;
+  obj->next_input_name = name;
+  obj->next_input_name_allocated = (name != in_name);
+
+  return f;
+}
+
+/* Return a stream for a pipe connected to the standard input of the
+   first stage of the pipeline.  */
+FILE *
+pex_input_pipe (struct pex_obj *obj, int binary)
+{
+  int p[2];
+  FILE *f;
+
+  /* You must call pex_input_pipe before the first pex_run or pex_one.  */
+  if (obj->count > 0)
+    goto usage_error;
+
+  /* You must be using pipes.  Implementations that don't support
+     pipes clear this flag before calling pex_init_common.  */
+  if (! (obj->flags & PEX_USE_PIPES))
+    goto usage_error;
+
+  /* If we have somehow already selected other input, that's a
+     mistake.  */
+  if ((obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
+      || obj->next_input_name)
+    goto usage_error;
+
+  if (obj->funcs->pipe (obj, p, binary != 0) < 0)
+    return NULL;
+
+  f = obj->funcs->fdopenw (obj, p[WRITE_PORT], binary != 0);
+  if (! f)
+    {
+      int saved_errno = errno;
+      obj->funcs->close (obj, p[READ_PORT]);
+      obj->funcs->close (obj, p[WRITE_PORT]);
+      errno = saved_errno;
+      return NULL;
+    }
+
+  obj->next_input = p[READ_PORT];
+
+  return f;
+
+ usage_error:
+  errno = EINVAL;
+  return NULL;
+}
+
+/* Return a FILE pointer for the output of the last program
+   executed.  */
+
+FILE *
+pex_read_output (struct pex_obj *obj, int binary)
+{
+  if (obj->next_input_name != NULL)
+    {
+      const char *errmsg;
+      int err;
+
+      /* We have to make sure that the process has completed before we
+        try to read the file.  */
+      if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
+       {
+         errno = err;
+         return NULL;
+       }
+
+      obj->read_output = fopen (obj->next_input_name, binary ? "rb" : "r");
+
+      if (obj->next_input_name_allocated)
+       {
+         free (obj->next_input_name);
+         obj->next_input_name_allocated = 0;
+       }
+      obj->next_input_name = NULL;
+    }
+  else
+    {
+      int o;
+
+      o = obj->next_input;
+      if (o < 0 || o == STDIN_FILE_NO)
+       return NULL;
+      obj->read_output = obj->funcs->fdopenr (obj, o, binary);
+      obj->next_input = -1;
+    }
+
+  return obj->read_output;
+}
+
+FILE *
+pex_read_err (struct pex_obj *obj, int binary)
+{
+  int o;
+  
+  o = obj->stderr_pipe;
+  if (o < 0 || o == STDIN_FILE_NO)
+    return NULL;
+  obj->read_err = obj->funcs->fdopenr (obj, o, binary);
+  return obj->read_err;    
+}
+
+/* Get the exit status and, if requested, the resource time for all
+   the child processes.  Return 0 on failure, 1 on success.  */
+
+static int
+pex_get_status_and_time (struct pex_obj *obj, int done, const char **errmsg,
+                        int *err)
+{
+  int ret;
+  int i;
+
+  if (obj->number_waited == obj->count)
+    return 1;
+
+  obj->status = XRESIZEVEC (int, obj->status, obj->count);
+  if ((obj->flags & PEX_RECORD_TIMES) != 0)
+    obj->time = XRESIZEVEC (struct pex_time, obj->time, obj->count);
+
+  ret = 1;
+  for (i = obj->number_waited; i < obj->count; ++i)
+    {
+      if (obj->funcs->wait (obj, obj->children[i], &obj->status[i],
+                           obj->time == NULL ? NULL : &obj->time[i],
+                           done, errmsg, err) < 0)
+       ret = 0;
+    }
+  obj->number_waited = i;
+
+  return ret;
+}
+
+/* Get exit status of executed programs.  */
+
+int
+pex_get_status (struct pex_obj *obj, int count, int *vector)
+{
+  if (obj->status == NULL)
+    {
+      const char *errmsg;
+      int err;
+
+      if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
+       return 0;
+    }
+
+  if (count > obj->count)
+    {
+      memset (vector + obj->count, 0, (count - obj->count) * sizeof (int));
+      count = obj->count;
+    }
+
+  memcpy (vector, obj->status, count * sizeof (int));
+
+  return 1;
+}
+
+/* Get process times of executed programs.  */
+
+int
+pex_get_times (struct pex_obj *obj, int count, struct pex_time *vector)
+{
+  if (obj->status == NULL)
+    {
+      const char *errmsg;
+      int err;
+
+      if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
+       return 0;
+    }
+
+  if (obj->time == NULL)
+    return 0;
+
+  if (count > obj->count)
+    {
+      memset (vector + obj->count, 0,
+             (count - obj->count) * sizeof (struct pex_time));
+      count = obj->count;
+    }
+
+  memcpy (vector, obj->time, count * sizeof (struct pex_time));
+
+  return 1;
+}
+
+/* Free a pex_obj structure.  */
+
+void
+pex_free (struct pex_obj *obj)
+{
+  if (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
+    obj->funcs->close (obj, obj->next_input);
+
+  /* If the caller forgot to wait for the children, we do it here, to
+     avoid zombies.  */
+  if (obj->status == NULL)
+    {
+      const char *errmsg;
+      int err;
+
+      obj->flags &= ~ PEX_RECORD_TIMES;
+      pex_get_status_and_time (obj, 1, &errmsg, &err);
+    }
+
+  if (obj->next_input_name_allocated)
+    free (obj->next_input_name);
+  if (obj->children != NULL)
+    free (obj->children);
+  if (obj->status != NULL)
+    free (obj->status);
+  if (obj->time != NULL)
+    free (obj->time);
+  if (obj->read_output != NULL)
+    fclose (obj->read_output);
+  if (obj->read_err != NULL)
+    fclose (obj->read_err);
+
+  if (obj->remove_count > 0)
+    {
+      int i;
+
+      for (i = 0; i < obj->remove_count; ++i)
+       {
+         remove (obj->remove[i]);
+         free (obj->remove[i]);
+       }
+      free (obj->remove);
+    }
+
+  if (obj->funcs->cleanup != NULL)
+    obj->funcs->cleanup (obj);
+
+  free (obj);
+}
diff --git a/libiberty/pex-common.h b/libiberty/pex-common.h
new file mode 100644 (file)
index 0000000..5b7bfcc
--- /dev/null
@@ -0,0 +1,153 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.  Shared logic.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+   Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifndef PEX_COMMON_H
+#define PEX_COMMON_H
+
+#include "config.h"
+#include "libiberty.h"
+#include <stdio.h>
+
+/* pid_t is may defined by config.h or sys/types.h needs to be
+   included.  */
+#if !defined(pid_t) && defined(HAVE_SYS_TYPES_H)
+#include <sys/types.h>
+#endif
+
+#define install_error_msg "installation problem, cannot exec `%s'"
+
+/* stdin file number.  */
+#define STDIN_FILE_NO 0
+
+/* stdout file number.  */
+#define STDOUT_FILE_NO 1
+
+/* stderr file number.  */
+#define STDERR_FILE_NO 2
+
+/* value of `pipe': port index for reading.  */
+#define READ_PORT 0
+
+/* value of `pipe': port index for writing.  */
+#define WRITE_PORT 1
+
+/* The structure used by pex_init and friends.  */
+
+struct pex_obj
+{
+  /* Flags.  */
+  int flags;
+  /* Name of calling program, for error messages.  */
+  const char *pname;
+  /* Base name to use for temporary files.  */
+  const char *tempbase;
+  /* Pipe to use as stdin for next process.  */
+  int next_input;
+  /* File name to use as stdin for next process.  */
+  char *next_input_name;
+  /* Whether next_input_name was allocated using malloc.  */
+  int next_input_name_allocated;
+  /* If not -1, stderr pipe from the last process.  */
+  int stderr_pipe;
+  /* Number of child processes.  */
+  int count;
+  /* PIDs of child processes; array allocated using malloc.  */
+  long *children;
+  /* Exit statuses of child processes; array allocated using malloc.  */
+  int *status;
+  /* Time used by child processes; array allocated using malloc.  */
+  struct pex_time *time;
+  /* Number of children we have already waited for.  */
+  int number_waited;
+  /* FILE created by pex_input_file.  */
+  FILE *input_file;
+  /* FILE created by pex_read_output.  */
+  FILE *read_output;
+  /* FILE created by pex_read_err.  */
+  FILE *read_err;
+  /* Number of temporary files to remove.  */
+  int remove_count;
+  /* List of temporary files to remove; array allocated using malloc
+     of strings allocated using malloc.  */
+  char **remove;
+  /* Pointers to system dependent functions.  */
+  const struct pex_funcs *funcs;
+  /* For use by system dependent code.  */
+  void *sysdep;
+};
+
+/* Functions passed to pex_run_common.  */
+
+struct pex_funcs
+{
+  /* Open file NAME for reading.  If BINARY is non-zero, open in
+     binary mode.  Return >= 0 on success, -1 on error.  */
+  int (*open_read) (struct pex_obj *, const char */* name */, int /* binary */);
+  /* Open file NAME for writing.  If BINARY is non-zero, open in
+     binary mode.  Return >= 0 on success, -1 on error.  */
+  int (*open_write) (struct pex_obj *, const char */* name */,
+                     int /* binary */);
+  /* Execute a child process.  FLAGS, EXECUTABLE, ARGV, ERR are from
+     pex_run.  IN, OUT, ERRDES, TOCLOSE are all descriptors, from
+     open_read, open_write, or pipe, or they are one of STDIN_FILE_NO,
+     STDOUT_FILE_NO or STDERR_FILE_NO; if IN, OUT, and ERRDES are not
+     STD*_FILE_NO, they should be closed.  If the descriptor TOCLOSE
+     is not -1, and the system supports pipes, TOCLOSE should be
+     closed in the child process.  The function should handle the
+     PEX_STDERR_TO_STDOUT flag.  Return >= 0 on success, or -1 on
+     error and set *ERRMSG and *ERR.  */
+  pid_t (*exec_child) (struct pex_obj *, int /* flags */,
+                      const char */* executable */, char * const * /* argv */,
+                      char * const * /* env */,
+                      int /* in */, int /* out */, int /* errdes */,
+                     int /* toclose */, const char **/* errmsg */,
+                     int */* err */);
+  /* Close a descriptor.  Return 0 on success, -1 on error.  */
+  int (*close) (struct pex_obj *, int);
+  /* Wait for a child to complete, returning exit status in *STATUS
+     and time in *TIME (if it is not null).  CHILD is from fork.  DONE
+     is 1 if this is called via pex_free.  ERRMSG and ERR are as in
+     fork.  Return 0 on success, -1 on error.  */
+  int (*wait) (struct pex_obj *, pid_t /* child */, int * /* status */,
+               struct pex_time * /* time */, int /* done */,
+               const char ** /* errmsg */, int * /* err */);
+  /* Create a pipe (only called if PEX_USE_PIPES is set) storing two
+     descriptors in P[0] and P[1].  If BINARY is non-zero, open in
+     binary mode.  Return 0 on success, -1 on error.  */
+  int (*pipe) (struct pex_obj *, int * /* p */, int /* binary */);
+  /* Get a FILE pointer to read from a file descriptor (only called if
+     PEX_USE_PIPES is set).  If BINARY is non-zero, open in binary
+     mode.  Return pointer on success, NULL on error.  */
+  FILE * (*fdopenr) (struct pex_obj *, int /* fd */, int /* binary */);
+  /* Get a FILE pointer to write to the file descriptor FD (only
+     called if PEX_USE_PIPES is set).  If BINARY is non-zero, open in
+     binary mode.  Arrange for FD not to be inherited by the child
+     processes.  Return pointer on success, NULL on error.  */
+  FILE * (*fdopenw) (struct pex_obj *, int /* fd */, int /* binary */);
+  /* Free any system dependent data associated with OBJ.  May be
+     NULL if there is nothing to do.  */
+  void (*cleanup) (struct pex_obj *);
+};
+
+extern struct pex_obj *pex_init_common (int, const char *, const char *,
+                                       const struct pex_funcs *);
+
+#endif
diff --git a/libiberty/pex-djgpp.c b/libiberty/pex-djgpp.c
new file mode 100644 (file)
index 0000000..bd27938
--- /dev/null
@@ -0,0 +1,294 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.  DJGPP specialization.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005
+   Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "pex-common.h"
+
+#include <stdio.h>
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <process.h>
+
+/* Use ECHILD if available, otherwise use EINVAL.  */
+#ifdef ECHILD
+#define PWAIT_ERROR ECHILD
+#else
+#define PWAIT_ERROR EINVAL
+#endif
+
+static int pex_djgpp_open_read (struct pex_obj *, const char *, int);
+static int pex_djgpp_open_write (struct pex_obj *, const char *, int);
+static pid_t pex_djgpp_exec_child (struct pex_obj *, int, const char *,
+                                 char * const *, char * const *,
+                                 int, int, int, int,
+                                 const char **, int *);
+static int pex_djgpp_close (struct pex_obj *, int);
+static int pex_djgpp_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
+                          int, const char **, int *);
+
+/* The list of functions we pass to the common routines.  */
+
+const struct pex_funcs funcs =
+{
+  pex_djgpp_open_read,
+  pex_djgpp_open_write,
+  pex_djgpp_exec_child,
+  pex_djgpp_close,
+  pex_djgpp_wait,
+  NULL, /* pipe */
+  NULL, /* fdopenr */
+  NULL, /* fdopenw */
+  NULL  /* cleanup */
+};
+
+/* Return a newly initialized pex_obj structure.  */
+
+struct pex_obj *
+pex_init (int flags, const char *pname, const char *tempbase)
+{
+  /* DJGPP does not support pipes.  */
+  flags &= ~ PEX_USE_PIPES;
+  return pex_init_common (flags, pname, tempbase, &funcs);
+}
+
+/* Open a file for reading.  */
+
+static int
+pex_djgpp_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED,
+                    const char *name, int binary)
+{
+  return open (name, O_RDONLY | (binary ? O_BINARY : O_TEXT));
+}
+
+/* Open a file for writing.  */
+
+static int
+pex_djgpp_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED,
+                     const char *name, int binary)
+{
+  /* Note that we can't use O_EXCL here because gcc may have already
+     created the temporary file via make_temp_file.  */
+  return open (name,
+              (O_WRONLY | O_CREAT | O_TRUNC
+               | (binary ? O_BINARY : O_TEXT)),
+              S_IRUSR | S_IWUSR);
+}
+
+/* Close a file.  */
+
+static int
+pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
+{
+  return close (fd);
+}
+
+/* Execute a child.  */
+
+static pid_t
+pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable,
+                     char * const * argv, char * const * env,
+                      int in, int out, int errdes,
+                     int toclose ATTRIBUTE_UNUSED, const char **errmsg,
+                     int *err)
+{
+  int org_in, org_out, org_errdes;
+  int status;
+  int *statuses;
+
+  org_in = -1;
+  org_out = -1;
+  org_errdes = -1;
+
+  if (in != STDIN_FILE_NO)
+    {
+      org_in = dup (STDIN_FILE_NO);
+      if (org_in < 0)
+       {
+         *err = errno;
+         *errmsg = "dup";
+         return (pid_t) -1;
+       }
+      if (dup2 (in, STDIN_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (close (in) < 0)
+       {
+         *err = errno;
+         *errmsg = "close";
+         return (pid_t) -1;
+       }
+    }
+
+  if (out != STDOUT_FILE_NO)
+    {
+      org_out = dup (STDOUT_FILE_NO);
+      if (org_out < 0)
+       {
+         *err = errno;
+         *errmsg = "dup";
+         return (pid_t) -1;
+       }
+      if (dup2 (out, STDOUT_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (close (out) < 0)
+       {
+         *err = errno;
+         *errmsg = "close";
+         return (pid_t) -1;
+       }
+    }
+
+  if (errdes != STDERR_FILE_NO
+      || (flags & PEX_STDERR_TO_STDOUT) != 0)
+    {
+      org_errdes = dup (STDERR_FILE_NO);
+      if (org_errdes < 0)
+       {
+         *err = errno;
+         *errmsg = "dup";
+         return (pid_t) -1;
+       }
+      if (dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes,
+                STDERR_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (errdes != STDERR_FILE_NO)
+       {
+         if (close (errdes) < 0)
+           {
+             *err = errno;
+             *errmsg = "close";
+             return (pid_t) -1;
+           }
+       }
+    }
+
+  if (env)
+    status = (((flags & PEX_SEARCH) != 0 ? spawnvpe : spawnve)
+             (P_WAIT, executable, argv, env));
+  else
+    status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv)
+             (P_WAIT, executable, argv));
+
+  if (status == -1)
+    {
+      *err = errno;
+      *errmsg = ((flags & PEX_SEARCH) != 0) ? "spawnvp" : "spawnv";
+    }
+
+  if (in != STDIN_FILE_NO)
+    {
+      if (dup2 (org_in, STDIN_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (close (org_in) < 0)
+       {
+         *err = errno;
+         *errmsg = "close";
+         return (pid_t) -1;
+       }
+    }
+
+  if (out != STDOUT_FILE_NO)
+    {
+      if (dup2 (org_out, STDOUT_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (close (org_out) < 0)
+       {
+         *err = errno;
+         *errmsg = "close";
+         return (pid_t) -1;
+       }
+    }
+
+  if (errdes != STDERR_FILE_NO
+      || (flags & PEX_STDERR_TO_STDOUT) != 0)
+    {
+      if (dup2 (org_errdes, STDERR_FILE_NO) < 0)
+       {
+         *err = errno;
+         *errmsg = "dup2";
+         return (pid_t) -1;
+       }
+      if (close (org_errdes) < 0)
+       {
+         *err = errno;
+         *errmsg = "close";
+         return (pid_t) -1;
+       }
+    }
+
+  /* Save the exit status for later.  When we are called, obj->count
+     is the number of children which have executed before this
+     one.  */
+  statuses = (int *) obj->sysdep;
+  statuses = XRESIZEVEC (int, statuses, obj->count + 1);
+  statuses[obj->count] = status;
+  obj->sysdep = (void *) statuses;
+
+  return (pid_t) obj->count;
+}
+
+/* Wait for a child process to complete.  Actually the child process
+   has already completed, and we just need to return the exit
+   status.  */
+
+static int
+pex_djgpp_wait (struct pex_obj *obj, pid_t pid, int *status,
+               struct pex_time *time, int done ATTRIBUTE_UNUSED,
+               const char **errmsg ATTRIBUTE_UNUSED,
+               int *err ATTRIBUTE_UNUSED)
+{
+  int *statuses;
+
+  if (time != NULL)
+    memset (time, 0, sizeof *time);
+
+  statuses = (int *) obj->sysdep;
+  *status = statuses[pid];
+
+  return 0;
+}
diff --git a/libiberty/pex-msdos.c b/libiberty/pex-msdos.c
new file mode 100644 (file)
index 0000000..ab4d736
--- /dev/null
@@ -0,0 +1,319 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.  Generic MSDOS specialization.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005
+   Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "pex-common.h"
+
+#include <stdio.h>
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include "safe-ctype.h"
+#include <process.h>
+
+/* The structure we keep in obj->sysdep.  */
+
+#define PEX_MSDOS_FILE_COUNT 3
+
+#define PEX_MSDOS_FD_OFFSET 10
+
+struct pex_msdos
+{
+  /* An array of file names.  We refer to these using file descriptors
+     of 10 + array index.  */
+  const char *files[PEX_MSDOS_FILE_COUNT];
+  /* Exit statuses of programs which have been run.  */
+  int *statuses;
+};
+
+static int pex_msdos_open (struct pex_obj *, const char *, int);
+static int pex_msdos_open (struct pex_obj *, const char *, int);
+static int pex_msdos_fdindex (struct pex_msdos *, int);
+static pid_t pex_msdos_exec_child (struct pex_obj *, int, const char *,
+                                 char * const *, char * const *,
+                                 int, int, int, int,
+                                 int, const char **, int *);
+static int pex_msdos_close (struct pex_obj *, int);
+static int pex_msdos_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
+                          int, const char **, int *);
+static void pex_msdos_cleanup (struct pex_obj *);
+
+/* The list of functions we pass to the common routines.  */
+
+const struct pex_funcs funcs =
+{
+  pex_msdos_open,
+  pex_msdos_open,
+  pex_msdos_exec_child,
+  pex_msdos_close,
+  pex_msdos_wait,
+  NULL, /* pipe */
+  NULL, /* fdopenr */
+  NULL, /* fdopenw */
+  pex_msdos_cleanup
+};
+
+/* Return a newly initialized pex_obj structure.  */
+
+struct pex_obj *
+pex_init (int flags, const char *pname, const char *tempbase)
+{
+  struct pex_obj *ret;
+  int i;
+
+  /* MSDOS does not support pipes.  */
+  flags &= ~ PEX_USE_PIPES;
+
+  ret = pex_init_common (flags, pname, tempbase, funcs);
+
+  ret->sysdep = XNEW (struct pex_msdos);
+  for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
+    ret->files[i] = NULL;
+  ret->statuses = NULL;
+
+  return ret;
+}
+
+/* Open a file.  FIXME: We ignore the binary argument, since we have
+   no way to handle it.  */
+
+static int
+pex_msdos_open (struct pex_obj *obj, const char *name,
+               int binary ATTRIBUTE_UNUSED)
+{
+  struct pex_msdos *ms;
+  int i;
+
+  ms = (struct pex_msdos *) obj->sysdep;
+
+  for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
+    {
+      if (ms->files[i] == NULL)
+       {
+         ms->files[i] = xstrdup (name);
+         return i + PEX_MSDOS_FD_OFFSET;
+       }
+    }
+
+  abort ();
+}
+
+/* Get the index into msdos->files associated with an open file
+   descriptor.  */
+
+static int
+pex_msdos_fdindex (struct pex_msdos *ms, int fd)
+{
+  fd -= PEX_MSDOS_FD_OFFSET;
+  if (fd < 0 || fd >= PEX_MSDOS_FILE_COUNT || ms->files[fd] == NULL)
+    abort ();
+  return fd;
+}
+
+
+/* Close a file.  */
+
+static int
+pex_msdos_close (struct pex_obj *obj, int fd)
+{
+  struct pex_msdos *ms;
+  int fdinex;
+
+  ms = (struct pex_msdos *) obj->sysdep;
+  fdindex = pe_msdos_fdindex (ms, fd);
+  free (ms->files[fdindex]);
+  ms->files[fdindex] = NULL;
+}
+
+/* Execute a child.  */
+
+static pid_t
+pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable,
+                     char * const * argv, char * const * env, int in, int out,
+                     int toclose ATTRIBUTE_UNUSED,
+                     int errdes ATTRIBUTE_UNUSED, const char **errmsg,
+                     int *err)
+{
+  struct pex_msdos *ms;
+  char *temp_base;
+  int temp_base_allocated;
+  char *rf;
+  int inindex;
+  char *infile;
+  int outindex;
+  char *outfile;
+  char *scmd;
+  FILE *argfile;
+  int i;
+  int status;
+
+  ms = (struct pex_msdos *) obj->sysdep;
+
+  /* FIXME: I don't know how to redirect stderr, so we ignore ERRDES
+     and PEX_STDERR_TO_STDOUT.  */
+
+  temp_base = obj->temp_base;
+  if (temp_base != NULL)
+    temp_base_allocated = 0;
+  else
+    {
+      temp_base = choose_temp_base ();
+      temp_base_allocated = 1;
+    }
+
+  rf = concat (temp_base, ".gp", NULL);
+
+  if (temp_base_allocated)
+    free (temp_base);
+
+  if (in == STDIN_FILE_NO)
+    {
+      inindex = -1;
+      infile = "";
+    }
+  else
+    {
+      inindex = pex_msdos_fdindex (ms, in);
+      infile = ms->files[inindex];
+    }
+
+  if (out == STDOUT_FILE_NO)
+    {
+      outindex = -1;
+      outfile = "";
+    }
+  else
+    {
+      outindex = pex_msdos_fdindex (ms, out);
+      outfile = ms->files[outindex];
+    }
+
+  scmd = XNEWVEC (char, strlen (program)
+                 + ((flags & PEXECUTE_SEARCH) != 0 ? 4 : 0)
+                 + strlen (rf)
+                 + strlen (infile)
+                 + strlen (outfile)
+                 + 10);
+  sprintf (scmd, "%s%s @%s%s%s%s%s",
+          program,
+          (flags & PEXECUTE_SEARCH) != 0 ? ".exe" : "",
+          rf,
+          inindex != -1 ? " <" : "",
+          infile,
+          outindex != -1 ? " >" : "",
+          outfile);
+
+  argfile = fopen (rf, "w");
+  if (argfile == NULL)
+    {
+      *err = errno;
+      free (scmd);
+      free (rf);
+      *errmsg = "cannot open temporary command file";
+      return (pid_t) -1;
+    }
+
+  for (i = 1; argv[i] != NULL; ++i)
+    {
+      char *p;
+
+      for (p = argv[i]; *p != '\0'; ++p)
+       {
+         if (*p == '"' || *p == '\'' || *p == '\\' || ISSPACE (*p))
+           putc ('\\', argfile);
+         putc (*p, argfile);
+       }
+      putc ('\n', argfile);
+    }
+
+  fclose (argfile);
+
+  status = system (scmd);
+
+  if (status == -1)
+    {
+      *err = errno;
+      remove (rf);
+      free (scmd);
+      free (rf);
+      *errmsg = "system";
+      return (pid_t) -1;
+    }
+
+  remove (rf);
+  free (scmd);
+  free (rf);
+
+  /* Save the exit status for later.  When we are called, obj->count
+     is the number of children which have executed before this
+     one.  */
+  ms->statuses = XRESIZEVEC(int, ms->statuses, obj->count + 1);
+  ms->statuses[obj->count] = status;
+
+  return (pid_t) obj->count;
+}
+
+/* Wait for a child process to complete.  Actually the child process
+   has already completed, and we just need to return the exit
+   status.  */
+
+static int
+pex_msdos_wait (struct pex_obj *obj, pid_t pid, int *status,
+               struct pex_time *time, int done ATTRIBUTE_UNUSED,
+               const char **errmsg ATTRIBUTE_UNUSED,
+               int *err ATTRIBUTE_UNUSED)
+{
+  struct pex_msdos *ms;
+
+  ms = (struct pex_msdos *) obj->sysdep;
+
+  if (time != NULL)
+    memset (time, 0, sizeof *time);
+
+  *status = ms->statuses[pid];
+
+  return 0;
+}
+
+/* Clean up the pex_msdos structure.  */
+
+static void
+pex_msdos_cleanup (struct pex_obj  *obj)
+{
+  struct pex_msdos *ms;
+  int i;
+
+  ms = (struct pex_msdos *) obj->sysdep;
+  for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
+    if (msdos->files[i] != NULL)
+      free (msdos->files[i]);
+  if (msdos->statuses != NULL)
+    free (msdos->statuses);
+  free (msdos);
+  obj->sysdep = NULL;
+}
diff --git a/libiberty/pex-one.c b/libiberty/pex-one.c
new file mode 100644 (file)
index 0000000..696b8bc
--- /dev/null
@@ -0,0 +1,43 @@
+/* Execute a program and wait for a result.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "libiberty.h"
+
+const char *
+pex_one (int flags, const char *executable, char * const *argv,
+        const char *pname, const char *outname, const char *errname,
+        int *status, int *err)
+{
+  struct pex_obj *obj;
+  const char *errmsg;
+
+  obj = pex_init (0, pname, NULL);
+  errmsg = pex_run (obj, flags, executable, argv, outname, errname, err);
+  if (errmsg == NULL)
+    {
+      if (!pex_get_status (obj, 1, status))
+       {
+         *err = 0;
+         errmsg = "pex_get_status failed";
+       }
+    }
+  pex_free (obj);
+  return errmsg;  
+}
diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c
new file mode 100644 (file)
index 0000000..366e96e
--- /dev/null
@@ -0,0 +1,538 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.  Generic Unix version
+   (also used for UWIN and VMS).
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+   Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "config.h"
+#include "libiberty.h"
+#include "pex-common.h"
+
+#include <stdio.h>
+#include <signal.h>
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#ifdef HAVE_GETRUSAGE
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+
+#ifdef vfork /* Autoconf may define this to fork for us. */
+# define VFORK_STRING "fork"
+#else
+# define VFORK_STRING "vfork"
+#endif
+#ifdef HAVE_VFORK_H
+#include <vfork.h>
+#endif
+#ifdef VMS
+#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
+               lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
+#endif /* VMS */
+
+
+/* File mode to use for private and world-readable files.  */
+
+#if defined (S_IRUSR) && defined (S_IWUSR) && defined (S_IRGRP) && defined (S_IWGRP) && defined (S_IROTH) && defined (S_IWOTH)
+#define PUBLIC_MODE  \
+    (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
+#else
+#define PUBLIC_MODE 0666
+#endif
+
+/* Get the exit status of a particular process, and optionally get the
+   time that it took.  This is simple if we have wait4, slightly
+   harder if we have waitpid, and is a pain if we only have wait.  */
+
+static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *);
+
+#ifdef HAVE_WAIT4
+
+static pid_t
+pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
+         struct pex_time *time)
+{
+  pid_t ret;
+  struct rusage r;
+
+#ifdef HAVE_WAITPID
+  if (time == NULL)
+    return waitpid (pid, status, 0);
+#endif
+
+  ret = wait4 (pid, status, 0, &r);
+
+  if (time != NULL)
+    {
+      time->user_seconds = r.ru_utime.tv_sec;
+      time->user_microseconds= r.ru_utime.tv_usec;
+      time->system_seconds = r.ru_stime.tv_sec;
+      time->system_microseconds= r.ru_stime.tv_usec;
+    }
+
+  return ret;
+}
+
+#else /* ! defined (HAVE_WAIT4) */
+
+#ifdef HAVE_WAITPID
+
+#ifndef HAVE_GETRUSAGE
+
+static pid_t
+pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
+         struct pex_time *time)
+{
+  if (time != NULL)
+    memset (time, 0, sizeof (struct pex_time));
+  return waitpid (pid, status, 0);
+}
+
+#else /* defined (HAVE_GETRUSAGE) */
+
+static pid_t
+pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
+         struct pex_time *time)
+{
+  struct rusage r1, r2;
+  pid_t ret;
+
+  if (time == NULL)
+    return waitpid (pid, status, 0);
+
+  getrusage (RUSAGE_CHILDREN, &r1);
+
+  ret = waitpid (pid, status, 0);
+  if (ret < 0)
+    return ret;
+
+  getrusage (RUSAGE_CHILDREN, &r2);
+
+  time->user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec;
+  time->user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec;
+  if (r2.ru_utime.tv_usec < r1.ru_utime.tv_usec)
+    {
+      --time->user_seconds;
+      time->user_microseconds += 1000000;
+    }
+
+  time->system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec;
+  time->system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec;
+  if (r2.ru_stime.tv_usec < r1.ru_stime.tv_usec)
+    {
+      --time->system_seconds;
+      time->system_microseconds += 1000000;
+    }
+
+  return ret;
+}
+
+#endif /* defined (HAVE_GETRUSAGE) */
+
+#else /* ! defined (HAVE_WAITPID) */
+
+struct status_list
+{
+  struct status_list *next;
+  pid_t pid;
+  int status;
+  struct pex_time time;
+};
+
+static pid_t
+pex_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time)
+{
+  struct status_list **pp;
+
+  for (pp = (struct status_list **) &obj->sysdep;
+       *pp != NULL;
+       pp = &(*pp)->next)
+    {
+      if ((*pp)->pid == pid)
+       {
+         struct status_list *p;
+
+         p = *pp;
+         *status = p->status;
+         if (time != NULL)
+           *time = p->time;
+         *pp = p->next;
+         free (p);
+         return pid;
+       }
+    }
+
+  while (1)
+    {
+      pid_t cpid;
+      struct status_list *psl;
+      struct pex_time pt;
+#ifdef HAVE_GETRUSAGE
+      struct rusage r1, r2;
+#endif
+
+      if (time != NULL)
+       {
+#ifdef HAVE_GETRUSAGE
+         getrusage (RUSAGE_CHILDREN, &r1);
+#else
+         memset (&pt, 0, sizeof (struct pex_time));
+#endif
+       }
+
+      cpid = wait (status);
+
+#ifdef HAVE_GETRUSAGE
+      if (time != NULL && cpid >= 0)
+       {
+         getrusage (RUSAGE_CHILDREN, &r2);
+
+         pt.user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec;
+         pt.user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec;
+         if (pt.user_microseconds < 0)
+           {
+             --pt.user_seconds;
+             pt.user_microseconds += 1000000;
+           }
+
+         pt.system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec;
+         pt.system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec;
+         if (pt.system_microseconds < 0)
+           {
+             --pt.system_seconds;
+             pt.system_microseconds += 1000000;
+           }
+       }
+#endif
+
+      if (cpid < 0 || cpid == pid)
+       {
+         if (time != NULL)
+           *time = pt;
+         return cpid;
+       }
+
+      psl = XNEW (struct status_list);
+      psl->pid = cpid;
+      psl->status = *status;
+      if (time != NULL)
+       psl->time = pt;
+      psl->next = (struct status_list *) obj->sysdep;
+      obj->sysdep = (void *) psl;
+    }
+}
+
+#endif /* ! defined (HAVE_WAITPID) */
+#endif /* ! defined (HAVE_WAIT4) */
+
+static void pex_child_error (struct pex_obj *, const char *, const char *, int)
+     ATTRIBUTE_NORETURN;
+static int pex_unix_open_read (struct pex_obj *, const char *, int);
+static int pex_unix_open_write (struct pex_obj *, const char *, int);
+static pid_t pex_unix_exec_child (struct pex_obj *, int, const char *,
+                                char * const *, char * const *,
+                                int, int, int, int,
+                                const char **, int *);
+static int pex_unix_close (struct pex_obj *, int);
+static int pex_unix_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
+                         int, const char **, int *);
+static int pex_unix_pipe (struct pex_obj *, int *, int);
+static FILE *pex_unix_fdopenr (struct pex_obj *, int, int);
+static FILE *pex_unix_fdopenw (struct pex_obj *, int, int);
+static void pex_unix_cleanup (struct pex_obj *);
+
+/* The list of functions we pass to the common routines.  */
+
+const struct pex_funcs funcs =
+{
+  pex_unix_open_read,
+  pex_unix_open_write,
+  pex_unix_exec_child,
+  pex_unix_close,
+  pex_unix_wait,
+  pex_unix_pipe,
+  pex_unix_fdopenr,
+  pex_unix_fdopenw,
+  pex_unix_cleanup
+};
+
+/* Return a newly initialized pex_obj structure.  */
+
+struct pex_obj *
+pex_init (int flags, const char *pname, const char *tempbase)
+{
+  return pex_init_common (flags, pname, tempbase, &funcs);
+}
+
+/* Open a file for reading.  */
+
+static int
+pex_unix_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
+                   int binary ATTRIBUTE_UNUSED)
+{
+  return open (name, O_RDONLY);
+}
+
+/* Open a file for writing.  */
+
+static int
+pex_unix_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
+                    int binary ATTRIBUTE_UNUSED)
+{
+  /* Note that we can't use O_EXCL here because gcc may have already
+     created the temporary file via make_temp_file.  */
+  return open (name, O_WRONLY | O_CREAT | O_TRUNC, PUBLIC_MODE);
+}
+
+/* Close a file.  */
+
+static int
+pex_unix_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
+{
+  return close (fd);
+}
+
+/* Report an error from a child process.  We don't use stdio routines,
+   because we might be here due to a vfork call.  */
+
+static void
+pex_child_error (struct pex_obj *obj, const char *executable,
+                const char *errmsg, int err)
+{
+#define writeerr(s) (void) write (STDERR_FILE_NO, s, strlen (s))
+  writeerr (obj->pname);
+  writeerr (": error trying to exec '");
+  writeerr (executable);
+  writeerr ("': ");
+  writeerr (errmsg);
+  writeerr (": ");
+  writeerr (xstrerror (err));
+  writeerr ("\n");
+  _exit (-1);
+}
+
+/* Execute a child.  */
+
+extern char **environ;
+
+static pid_t
+pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
+                    char * const * argv, char * const * env,
+                     int in, int out, int errdes,
+                    int toclose, const char **errmsg, int *err)
+{
+  pid_t pid;
+
+  /* We declare these to be volatile to avoid warnings from gcc about
+     them being clobbered by vfork.  */
+  volatile int sleep_interval;
+  volatile int retries;
+
+  sleep_interval = 1;
+  pid = -1;
+  for (retries = 0; retries < 4; ++retries)
+    {
+      pid = vfork ();
+      if (pid >= 0)
+       break;
+      sleep (sleep_interval);
+      sleep_interval *= 2;
+    }
+
+  switch (pid)
+    {
+    case -1:
+      *err = errno;
+      *errmsg = VFORK_STRING;
+      return (pid_t) -1;
+
+    case 0:
+      /* Child process.  */
+      if (in != STDIN_FILE_NO)
+       {
+         if (dup2 (in, STDIN_FILE_NO) < 0)
+           pex_child_error (obj, executable, "dup2", errno);
+         if (close (in) < 0)
+           pex_child_error (obj, executable, "close", errno);
+       }
+      if (out != STDOUT_FILE_NO)
+       {
+         if (dup2 (out, STDOUT_FILE_NO) < 0)
+           pex_child_error (obj, executable, "dup2", errno);
+         if (close (out) < 0)
+           pex_child_error (obj, executable, "close", errno);
+       }
+      if (errdes != STDERR_FILE_NO)
+       {
+         if (dup2 (errdes, STDERR_FILE_NO) < 0)
+           pex_child_error (obj, executable, "dup2", errno);
+         if (close (errdes) < 0)
+           pex_child_error (obj, executable, "close", errno);
+       }
+      if (toclose >= 0)
+       {
+         if (close (toclose) < 0)
+           pex_child_error (obj, executable, "close", errno);
+       }
+      if ((flags & PEX_STDERR_TO_STDOUT) != 0)
+       {
+         if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0)
+           pex_child_error (obj, executable, "dup2", errno);
+       }
+
+      if (env)
+        environ = (char**) env;
+
+      if ((flags & PEX_SEARCH) != 0)
+       {
+         execvp (executable, argv);
+         pex_child_error (obj, executable, "execvp", errno);
+       }
+      else
+       {
+         execv (executable, argv);
+         pex_child_error (obj, executable, "execv", errno);
+       }
+
+      /* NOTREACHED */
+      return (pid_t) -1;
+
+    default:
+      /* Parent process.  */
+      if (in != STDIN_FILE_NO)
+       {
+         if (close (in) < 0)
+           {
+             *err = errno;
+             *errmsg = "close";
+             return (pid_t) -1;
+           }
+       }
+      if (out != STDOUT_FILE_NO)
+       {
+         if (close (out) < 0)
+           {
+             *err = errno;
+             *errmsg = "close";
+             return (pid_t) -1;
+           }
+       }
+      if (errdes != STDERR_FILE_NO)
+       {
+         if (close (errdes) < 0)
+           {
+             *err = errno;
+             *errmsg = "close";
+             return (pid_t) -1;
+           }
+       }
+
+      return pid;
+    }
+}
+
+/* Wait for a child process to complete.  */
+
+static int
+pex_unix_wait (struct pex_obj *obj, pid_t pid, int *status,
+              struct pex_time *time, int done, const char **errmsg,
+              int *err)
+{
+  /* If we are cleaning up when the caller didn't retrieve process
+     status for some reason, encourage the process to go away.  */
+  if (done)
+    kill (pid, SIGTERM);
+
+  if (pex_wait (obj, pid, status, time) < 0)
+    {
+      *err = errno;
+      *errmsg = "wait";
+      return -1;
+    }
+
+  return 0;
+}
+
+/* Create a pipe.  */
+
+static int
+pex_unix_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p,
+              int binary ATTRIBUTE_UNUSED)
+{
+  return pipe (p);
+}
+
+/* Get a FILE pointer to read from a file descriptor.  */
+
+static FILE *
+pex_unix_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
+                 int binary ATTRIBUTE_UNUSED)
+{
+  return fdopen (fd, "r");
+}
+
+static FILE *
+pex_unix_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
+                 int binary ATTRIBUTE_UNUSED)
+{
+  if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0)
+    return NULL;
+  return fdopen (fd, "w");
+}
+
+static void
+pex_unix_cleanup (struct pex_obj *obj ATTRIBUTE_UNUSED)
+{
+#if !defined (HAVE_WAIT4) && !defined (HAVE_WAITPID)
+  while (obj->sysdep != NULL)
+    {
+      struct status_list *this;
+      struct status_list *next;
+
+      this = (struct status_list *) obj->sysdep;
+      next = this->next;
+      free (this);
+      obj->sysdep = (void *) next;
+    }
+#endif
+}
diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c
new file mode 100644 (file)
index 0000000..05d44e9
--- /dev/null
@@ -0,0 +1,889 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.  Generic Win32 specialization.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "pex-common.h"
+
+#include <windows.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#include <assert.h>
+#include <process.h>
+#include <io.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ctype.h>
+
+/* mingw32 headers may not define the following.  */
+
+#ifndef _P_WAIT
+#  define _P_WAIT      0
+#  define _P_NOWAIT    1
+#  define _P_OVERLAY   2
+#  define _P_NOWAITO   3
+#  define _P_DETACH    4
+
+#  define WAIT_CHILD           0
+#  define WAIT_GRANDCHILD      1
+#endif
+
+#define MINGW_NAME "Minimalist GNU for Windows"
+#define MINGW_NAME_LEN (sizeof(MINGW_NAME) - 1)
+
+extern char *stpcpy (char *dst, const char *src);
+
+/* Ensure that the executable pathname uses Win32 backslashes. This
+   is not necessary on NT, but on W9x, forward slashes causes
+   failure of spawn* and exec* functions (and probably any function
+   that calls CreateProcess) *iff* the executable pathname (argv[0])
+   is a quoted string.  And quoting is necessary in case a pathname
+   contains embedded white space.  You can't win.  */
+static void
+backslashify (char *s)
+{
+  while ((s = strchr (s, '/')) != NULL)
+    *s = '\\';
+  return;
+}
+
+static int pex_win32_open_read (struct pex_obj *, const char *, int);
+static int pex_win32_open_write (struct pex_obj *, const char *, int);
+static pid_t pex_win32_exec_child (struct pex_obj *, int, const char *,
+                                 char * const *, char * const *,
+                                  int, int, int, int,
+                                 const char **, int *);
+static int pex_win32_close (struct pex_obj *, int);
+static int pex_win32_wait (struct pex_obj *, pid_t, int *,
+                          struct pex_time *, int, const char **, int *);
+static int pex_win32_pipe (struct pex_obj *, int *, int);
+static FILE *pex_win32_fdopenr (struct pex_obj *, int, int);
+static FILE *pex_win32_fdopenw (struct pex_obj *, int, int);
+
+/* The list of functions we pass to the common routines.  */
+
+const struct pex_funcs funcs =
+{
+  pex_win32_open_read,
+  pex_win32_open_write,
+  pex_win32_exec_child,
+  pex_win32_close,
+  pex_win32_wait,
+  pex_win32_pipe,
+  pex_win32_fdopenr,
+  pex_win32_fdopenw,
+  NULL /* cleanup */
+};
+
+/* Return a newly initialized pex_obj structure.  */
+
+struct pex_obj *
+pex_init (int flags, const char *pname, const char *tempbase)
+{
+  return pex_init_common (flags, pname, tempbase, &funcs);
+}
+
+/* Open a file for reading.  */
+
+static int
+pex_win32_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
+                    int binary)
+{
+  return _open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT));
+}
+
+/* Open a file for writing.  */
+
+static int
+pex_win32_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
+                     int binary)
+{
+  /* Note that we can't use O_EXCL here because gcc may have already
+     created the temporary file via make_temp_file.  */
+  return _open (name,
+               (_O_WRONLY | _O_CREAT | _O_TRUNC
+                | (binary ? _O_BINARY : _O_TEXT)),
+               _S_IREAD | _S_IWRITE);
+}
+
+/* Close a file.  */
+
+static int
+pex_win32_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
+{
+  return _close (fd);
+}
+
+#ifdef USE_MINGW_MSYS
+static const char *mingw_keys[] = {"SOFTWARE", "Microsoft", "Windows", "CurrentVersion", "Uninstall", NULL};
+
+/* Tack the executable on the end of a (possibly slash terminated) buffer
+   and convert everything to \. */
+static const char *
+tack_on_executable (char *buf, const char *executable)
+{
+  char *p = strchr (buf, '\0');
+  if (p > buf && (p[-1] == '\\' || p[-1] == '/'))
+    p[-1] = '\0';
+  backslashify (strcat (buf, executable));
+  return buf;
+}
+
+/* Walk down a registry hierarchy until the end.  Return the key. */
+static HKEY
+openkey (HKEY hStart, const char *keys[])
+{
+  HKEY hKey, hTmp;
+  for (hKey = hStart; *keys; keys++)
+    {
+      LONG res;
+      hTmp = hKey;
+      res = RegOpenKey (hTmp, *keys, &hKey);
+
+      if (hTmp != HKEY_LOCAL_MACHINE)
+       RegCloseKey (hTmp);
+
+      if (res != ERROR_SUCCESS)
+       return NULL;
+    }
+  return hKey;
+}
+
+/* Return the "mingw root" as derived from the mingw uninstall information. */
+static const char *
+mingw_rootify (const char *executable)
+{
+  HKEY hKey, hTmp;
+  DWORD maxlen;
+  char *namebuf, *foundbuf;
+  DWORD i;
+  LONG res;
+
+  /* Open the uninstall "directory". */
+  hKey = openkey (HKEY_LOCAL_MACHINE, mingw_keys);
+
+  /* Not found. */
+  if (!hKey)
+    return executable;
+
+  /* Need to enumerate all of the keys here looking for one the most recent
+     one for MinGW. */
+  if (RegQueryInfoKey (hKey, NULL, NULL, NULL, NULL, &maxlen, NULL, NULL,
+                      NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
+    {
+      RegCloseKey (hKey);
+      return executable;
+    }
+  namebuf = XNEWVEC (char, ++maxlen);
+  foundbuf = XNEWVEC (char, maxlen);
+  foundbuf[0] = '\0';
+  if (!namebuf || !foundbuf)
+    {
+      RegCloseKey (hKey);
+      if (namebuf)
+       free (namebuf);
+      if (foundbuf)
+       free (foundbuf);
+      return executable;
+    }
+
+  /* Look through all of the keys for one that begins with Minimal GNU...
+     Try to get the latest version by doing a string compare although that
+     string never really works with version number sorting. */
+  for (i = 0; RegEnumKey (hKey, i, namebuf, maxlen) == ERROR_SUCCESS; i++)
+    {
+      int match = strcasecmp (namebuf, MINGW_NAME);
+      if (match < 0)
+       continue;
+      if (match > 0 && strncasecmp (namebuf, MINGW_NAME, MINGW_NAME_LEN) > 0)
+       continue;
+      if (strcasecmp (namebuf, foundbuf) > 0)
+       strcpy (foundbuf, namebuf);
+    }
+  free (namebuf);
+
+  /* If foundbuf is empty, we didn't find anything.  Punt. */
+  if (!foundbuf[0])
+    {
+      free (foundbuf);
+      RegCloseKey (hKey);
+      return executable;
+    }
+
+  /* Open the key that we wanted */
+  res = RegOpenKey (hKey, foundbuf, &hTmp);
+  RegCloseKey (hKey);
+  free (foundbuf);
+
+  /* Don't know why this would fail, but you gotta check */
+  if (res != ERROR_SUCCESS)
+    return executable;
+
+  maxlen = 0;
+  /* Get the length of the value pointed to by InstallLocation */
+  if (RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, NULL,
+                      &maxlen) != ERROR_SUCCESS || maxlen == 0)
+    {
+      RegCloseKey (hTmp);
+      return executable;
+    }
+
+  /* Allocate space for the install location */
+  foundbuf = XNEWVEC (char, maxlen + strlen (executable));
+  if (!foundbuf)
+    {
+      free (foundbuf);
+      RegCloseKey (hTmp);
+    }
+
+  /* Read the install location into the buffer */
+  res = RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, (LPBYTE) foundbuf,
+                        &maxlen);
+  RegCloseKey (hTmp);
+  if (res != ERROR_SUCCESS)
+    {
+      free (foundbuf);
+      return executable;
+    }
+
+  /* Concatenate the install location and the executable, turn all slashes
+     to backslashes, and return that. */
+  return tack_on_executable (foundbuf, executable);
+}
+
+/* Read the install location of msys from it's installation file and
+   rootify the executable based on that. */
+static const char *
+msys_rootify (const char *executable)
+{
+  size_t bufsize = 64;
+  size_t execlen = strlen (executable) + 1;
+  char *buf;
+  DWORD res = 0;
+  for (;;)
+    {
+      buf = XNEWVEC (char, bufsize + execlen);
+      if (!buf)
+       break;
+      res = GetPrivateProfileString ("InstallSettings", "InstallPath", NULL,
+                                    buf, bufsize, "msys.ini");
+      if (!res)
+       break;
+      if (strlen (buf) < bufsize)
+       break;
+      res = 0;
+      free (buf);
+      bufsize *= 2;
+      if (bufsize > 65536)
+       {
+         buf = NULL;
+         break;
+       }
+    }
+
+  if (res)
+    return tack_on_executable (buf, executable);
+
+  /* failed */
+  if (buf)
+    free (buf);
+  return executable;
+}
+#endif
+
+/* Return a Windows command-line from ARGV.  It is the caller's
+   responsibility to free the string returned.  */
+
+static char *
+argv_to_cmdline (char *const *argv)
+{
+  char *cmdline;
+  char *p;
+  size_t cmdline_len;
+  int i, j, k;
+
+  cmdline_len = 0;
+  for (i = 0; argv[i]; i++)
+    {
+      /* We quote every last argument.  This simplifies the problem;
+        we need only escape embedded double-quotes and immediately
+        preceeding backslash characters.  A sequence of backslach characters
+        that is not follwed by a double quote character will not be
+        escaped.  */
+      for (j = 0; argv[i][j]; j++)
+       {
+         if (argv[i][j] == '"')
+           {
+             /* Escape preceeding backslashes.  */
+             for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+               cmdline_len++;
+             /* Escape the qote character.  */
+             cmdline_len++;
+           }
+       }
+      /* Trailing backslashes also need to be escaped because they will be
+         followed by the terminating quote.  */
+      for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+       cmdline_len++;
+      cmdline_len += j;
+      cmdline_len += 3;  /* for leading and trailing quotes and space */
+    }
+  cmdline = XNEWVEC (char, cmdline_len);
+  p = cmdline;
+  for (i = 0; argv[i]; i++)
+    {
+      *p++ = '"';
+      for (j = 0; argv[i][j]; j++)
+       {
+         if (argv[i][j] == '"')
+           {
+             for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+               *p++ = '\\';
+             *p++ = '\\';
+           }
+         *p++ = argv[i][j];
+       }
+      for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
+       *p++ = '\\';
+      *p++ = '"';
+      *p++ = ' ';
+    }
+  p[-1] = '\0';
+  return cmdline;
+}
+
+/* We'll try the passed filename with all the known standard
+   extensions, and then without extension.  We try no extension
+   last so that we don't try to run some random extension-less
+   file that might be hanging around.  We try both extension
+   and no extension so that we don't need any fancy logic
+   to determine if a file has extension.  */
+static const char *const
+std_suffixes[] = {
+  ".com",
+  ".exe",
+  ".bat",
+  ".cmd",
+  "",
+  0
+};
+
+/* Returns the full path to PROGRAM.  If SEARCH is true, look for
+   PROGRAM in each directory in PATH.  */
+
+static char *
+find_executable (const char *program, BOOL search)
+{
+  char *full_executable;
+  char *e;
+  size_t fe_len;
+  const char *path = 0;
+  const char *const *ext;
+  const char *p, *q;
+  size_t proglen = strlen (program);
+  int has_slash = (strchr (program, '/') || strchr (program, '\\'));
+  HANDLE h;
+
+  if (has_slash)
+    search = FALSE;
+
+  if (search)
+    path = getenv ("PATH");
+  if (!path)
+    path = "";
+
+  fe_len = 0;
+  for (p = path; *p; p = q)
+    {
+      q = p;
+      while (*q != ';' && *q != '\0')
+       q++;
+      if ((size_t)(q - p) > fe_len)
+       fe_len = q - p;
+      if (*q == ';')
+       q++;
+    }
+  fe_len = fe_len + 1 + proglen + 5 /* space for extension */;
+  full_executable = XNEWVEC (char, fe_len);
+
+  p = path;
+  do
+    {
+      q = p;
+      while (*q != ';' && *q != '\0')
+       q++;
+
+      e = full_executable;
+      memcpy (e, p, q - p);
+      e += (q - p);
+      if (q - p)
+       *e++ = '\\';
+      strcpy (e, program);
+
+      if (*q == ';')
+       q++;
+
+      for (e = full_executable; *e; e++)
+       if (*e == '/')
+         *e = '\\';
+
+      /* At this point, e points to the terminating NUL character for
+         full_executable.  */
+      for (ext = std_suffixes; *ext; ext++)
+       {
+         /* Remove any current extension.  */
+         *e = '\0';
+         /* Add the new one.  */
+         strcat (full_executable, *ext);
+
+         /* Attempt to open this file.  */
+         h = CreateFile (full_executable, GENERIC_READ,
+                         FILE_SHARE_READ | FILE_SHARE_WRITE,
+                         0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+         if (h != INVALID_HANDLE_VALUE)
+           goto found;
+       }
+      p = q;
+    }
+  while (*p);
+  free (full_executable);
+  return 0;
+
+ found:
+  CloseHandle (h);
+  return full_executable;
+}
+
+/* Low-level process creation function and helper.  */
+
+static int
+env_compare (const void *a_ptr, const void *b_ptr)
+{
+  const char *a;
+  const char *b;
+  unsigned char c1;
+  unsigned char c2;
+
+  a = *(const char **) a_ptr;
+  b = *(const char **) b_ptr;
+
+  /* a and b will be of the form: VAR=VALUE
+     We compare only the variable name part here using a case-insensitive
+     comparison algorithm.  It might appear that in fact strcasecmp () can
+     take the place of this whole function, and indeed it could, save for
+     the fact that it would fail in cases such as comparing A1=foo and
+     A=bar (because 1 is less than = in the ASCII character set).
+     (Environment variables containing no numbers would work in such a
+     scenario.)  */
+
+  do
+    {
+      c1 = (unsigned char) tolower (*a++);
+      c2 = (unsigned char) tolower (*b++);
+
+      if (c1 == '=')
+        c1 = '\0';
+
+      if (c2 == '=')
+        c2 = '\0';
+    }
+  while (c1 == c2 && c1 != '\0');
+
+  return c1 - c2;
+}
+
+static pid_t
+win32_spawn (const char *executable,
+            BOOL search,
+            char *const *argv,
+             char *const *env, /* array of strings of the form: VAR=VALUE */
+            DWORD dwCreationFlags,
+            LPSTARTUPINFO si,
+            LPPROCESS_INFORMATION pi)
+{
+  char *full_executable;
+  char *cmdline;
+  char **env_copy;
+  char *env_block = NULL;
+
+  full_executable = NULL;
+  cmdline = NULL;
+
+  if (env)
+    {
+      int env_size;
+
+      /* Count the number of environment bindings supplied.  */
+      for (env_size = 0; env[env_size]; env_size++)
+        continue;
+    
+      /* Assemble an environment block, if required.  This consists of
+         VAR=VALUE strings juxtaposed (with one null character between each
+         pair) and an additional null at the end.  */
+      if (env_size > 0)
+        {
+          int var;
+          int total_size = 1; /* 1 is for the final null.  */
+          char *bufptr;
+    
+          /* Windows needs the members of the block to be sorted by variable
+             name.  */
+          env_copy = (char **) alloca (sizeof (char *) * env_size);
+          memcpy (env_copy, env, sizeof (char *) * env_size);
+          qsort (env_copy, env_size, sizeof (char *), env_compare);
+    
+          for (var = 0; var < env_size; var++)
+            total_size += strlen (env[var]) + 1;
+    
+          env_block = XNEWVEC (char, total_size);
+          bufptr = env_block;
+          for (var = 0; var < env_size; var++)
+            bufptr = stpcpy (bufptr, env_copy[var]) + 1;
+    
+          *bufptr = '\0';
+        }
+    }
+
+  full_executable = find_executable (executable, search);
+  if (!full_executable)
+    goto error;
+  cmdline = argv_to_cmdline (argv);
+  if (!cmdline)
+    goto error;
+    
+  /* Create the child process.  */  
+  if (!CreateProcess (full_executable, cmdline, 
+                     /*lpProcessAttributes=*/NULL,
+                     /*lpThreadAttributes=*/NULL,
+                     /*bInheritHandles=*/TRUE,
+                     dwCreationFlags,
+                     (LPVOID) env_block,
+                     /*lpCurrentDirectory=*/NULL,
+                     si,
+                     pi))
+    {
+      if (env_block)
+        free (env_block);
+
+      free (full_executable);
+
+      return (pid_t) -1;
+    }
+
+  /* Clean up.  */
+  CloseHandle (pi->hThread);
+  free (full_executable);
+  if (env_block)
+    free (env_block);
+
+  return (pid_t) pi->hProcess;
+
+ error:
+  if (env_block)
+    free (env_block);
+  if (cmdline)
+    free (cmdline);
+  if (full_executable)
+    free (full_executable);
+
+  return (pid_t) -1;
+}
+
+static pid_t
+spawn_script (const char *executable, char *const *argv,
+              char* const *env,
+             DWORD dwCreationFlags,
+             LPSTARTUPINFO si,
+             LPPROCESS_INFORMATION pi)
+{
+  pid_t pid = (pid_t) -1;
+  int save_errno = errno;
+  int fd = _open (executable, _O_RDONLY);
+
+  if (fd >= 0)
+    {
+      char buf[MAX_PATH + 5];
+      int len = _read (fd, buf, sizeof (buf) - 1);
+      _close (fd);
+      if (len > 3)
+       {
+         char *eol;
+         buf[len] = '\0';
+         eol = strchr (buf, '\n');
+         if (eol && strncmp (buf, "#!", 2) == 0)
+           {
+             char *executable1;
+             const char ** avhere = (const char **) --argv;
+             do
+               *eol = '\0';
+             while (*--eol == '\r' || *eol == ' ' || *eol == '\t');
+             for (executable1 = buf + 2; *executable1 == ' ' || *executable1 == '\t'; executable1++)
+               continue;
+
+             backslashify (executable1);
+             *avhere = executable1;
+#ifndef USE_MINGW_MSYS
+             executable = strrchr (executable1, '\\') + 1;
+             if (!executable)
+               executable = executable1;
+             pid = win32_spawn (executable, TRUE, argv, env,
+                                dwCreationFlags, si, pi);
+#else
+             if (strchr (executable1, '\\') == NULL)
+               pid = win32_spawn (executable1, TRUE, argv, env,
+                                  dwCreationFlags, si, pi);
+             else if (executable1[0] != '\\')
+               pid = win32_spawn (executable1, FALSE, argv, env,
+                                  dwCreationFlags, si, pi);
+             else
+               {
+                 const char *newex = mingw_rootify (executable1);
+                 *avhere = newex;
+                 pid = win32_spawn (newex, FALSE, argv, env,
+                                    dwCreationFlags, si, pi);
+                 if (executable1 != newex)
+                   free ((char *) newex);
+                 if ((long) pid < 0)
+                   {
+                     newex = msys_rootify (executable1);
+                     if (newex != executable1)
+                       {
+                         *avhere = newex;
+                         pid = win32_spawn (newex, FALSE, argv, env,
+                                            dwCreationFlags, si, pi);
+                         free ((char *) newex);
+                       }
+                   }
+               }
+#endif
+           }
+       }
+    }
+  if ((long) pid < 0)
+    errno = save_errno;
+  return pid;
+}
+
+/* Execute a child.  */
+
+static pid_t
+pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
+                     const char *executable, char * const * argv,
+                      char* const* env,
+                     int in, int out, int errdes,
+                     int toclose ATTRIBUTE_UNUSED,
+                     const char **errmsg,
+                     int *err)
+{
+  pid_t pid;
+  HANDLE stdin_handle;
+  HANDLE stdout_handle;
+  HANDLE stderr_handle;
+  DWORD dwCreationFlags;
+  OSVERSIONINFO version_info;
+  STARTUPINFO si;
+  PROCESS_INFORMATION pi;
+
+  stdin_handle = INVALID_HANDLE_VALUE;
+  stdout_handle = INVALID_HANDLE_VALUE;
+  stderr_handle = INVALID_HANDLE_VALUE;
+
+  stdin_handle = (HANDLE) _get_osfhandle (in);
+  stdout_handle = (HANDLE) _get_osfhandle (out);
+  if (!(flags & PEX_STDERR_TO_STDOUT))
+    stderr_handle = (HANDLE) _get_osfhandle (errdes);
+  else
+    stderr_handle = stdout_handle;
+
+  /* Determine the version of Windows we are running on.  */
+  version_info.dwOSVersionInfoSize = sizeof (version_info); 
+  GetVersionEx (&version_info);
+  if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+    /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not
+       supported, so we cannot avoid creating a console window.  */
+    dwCreationFlags = 0;
+  else
+    {
+      HANDLE conout_handle;
+
+      /* Determine whether or not we have an associated console.  */
+      conout_handle = CreateFile("CONOUT$", 
+                                GENERIC_WRITE,
+                                FILE_SHARE_WRITE,
+                                /*lpSecurityAttributes=*/NULL,
+                                OPEN_EXISTING,
+                                FILE_ATTRIBUTE_NORMAL,
+                                /*hTemplateFile=*/NULL);
+      if (conout_handle == INVALID_HANDLE_VALUE)
+       /* There is no console associated with this process.  Since
+          the child is a console process, the OS would normally
+          create a new console Window for the child.  Since we'll be
+          redirecting the child's standard streams, we do not need
+          the console window.  */ 
+       dwCreationFlags = CREATE_NO_WINDOW;
+      else 
+       {
+         /* There is a console associated with the process, so the OS
+            will not create a new console.  And, if we use
+            CREATE_NO_WINDOW in this situation, the child will have
+            no associated console.  Therefore, if the child's
+            standard streams are connected to the console, the output
+            will be discarded.  */
+         CloseHandle(conout_handle);
+         dwCreationFlags = 0;
+       }
+    }
+
+  /* Since the child will be a console process, it will, by default,
+     connect standard input/output to its console.  However, we want
+     the child to use the handles specifically designated above.  In
+     addition, if there is no console (such as when we are running in
+     a Cygwin X window), then we must redirect the child's
+     input/output, as there is no console for the child to use.  */
+  memset (&si, 0, sizeof (si));
+  si.cb = sizeof (si);
+  si.dwFlags = STARTF_USESTDHANDLES;
+  si.hStdInput = stdin_handle;
+  si.hStdOutput = stdout_handle;
+  si.hStdError = stderr_handle;
+
+  /* Create the child process.  */  
+  pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0,
+                    argv, env, dwCreationFlags, &si, &pi);
+  if (pid == (pid_t) -1)
+    pid = spawn_script (executable, argv, env, dwCreationFlags,
+                        &si, &pi);
+  if (pid == (pid_t) -1)
+    {
+      *err = ENOENT;
+      *errmsg = "CreateProcess";
+    }
+
+  /* Close the standard output and standard error handles in the
+     parent.  */ 
+  if (out != STDOUT_FILENO)
+    obj->funcs->close (obj, out);
+  if (errdes != STDERR_FILENO)
+    obj->funcs->close (obj, errdes);
+
+  return pid;
+}
+
+/* Wait for a child process to complete.  MS CRTDLL doesn't return
+   enough information in status to decide if the child exited due to a
+   signal or not, rather it simply returns an integer with the exit
+   code of the child; eg., if the child exited with an abort() call
+   and didn't have a handler for SIGABRT, it simply returns with
+   status == 3.  We fix the status code to conform to the usual WIF*
+   macros.  Note that WIFSIGNALED will never be true under CRTDLL. */
+
+static int
+pex_win32_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid,
+               int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED,
+               const char **errmsg, int *err)
+{
+  DWORD termstat;
+  HANDLE h;
+
+  if (time != NULL)
+    memset (time, 0, sizeof *time);
+
+  h = (HANDLE) pid;
+
+  /* FIXME: If done is non-zero, we should probably try to kill the
+     process.  */
+  if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0)
+    {
+      CloseHandle (h);
+      *err = ECHILD;
+      *errmsg = "WaitForSingleObject";
+      return -1;
+    }
+
+  GetExitCodeProcess (h, &termstat);
+  CloseHandle (h);
+  /* A value of 3 indicates that the child caught a signal, but not
+     which one.  Since only SIGABRT, SIGFPE and SIGINT do anything, we
+     report SIGABRT.  */
+  if (termstat == 3)
+    *status = SIGABRT;
+  else
+    *status = (termstat & 0xff) << 8;
+
+  return 0;
+}
+
+/* Create a pipe.  */
+
+static int
+pex_win32_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p,
+               int binary)
+{
+  return _pipe (p, 256, binary ? _O_BINARY : _O_TEXT);
+}
+
+/* Get a FILE pointer to read from a file descriptor.  */
+
+static FILE *
+pex_win32_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
+                  int binary)
+{
+  return fdopen (fd, binary ? "rb" : "r");
+}
+
+static FILE *
+pex_win32_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
+                  int binary)
+{
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+  if (h == INVALID_HANDLE_VALUE)
+    return NULL;
+  if (! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0))
+    return NULL;
+  return fdopen (fd, binary ? "wb" : "w");
+}
+
+#ifdef MAIN
+#include <stdio.h>
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv)
+{
+  char const *errmsg;
+  int err;
+  argv++;
+  printf ("%ld\n", (long) pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, NULL, 0, 0, 1, 2, &errmsg, &err));
+  exit (0);
+}
+#endif
diff --git a/libiberty/pexecute.c b/libiberty/pexecute.c
new file mode 100644 (file)
index 0000000..97f1574
--- /dev/null
@@ -0,0 +1,124 @@
+/* Utilities to execute a program in a subprocess (possibly linked by pipes
+   with other subprocesses), and wait for it.
+   Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* pexecute is an old routine.  This implementation uses the newer
+   pex_init/pex_run/pex_get_status/pex_free routines.  Don't use
+   pexecute in new code.  Use the newer routines instead.  */
+
+#include "config.h"
+#include "libiberty.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+/* We only permit a single pexecute chain to execute at a time.  This
+   was always true anyhow, though it wasn't documented.  */
+
+static struct pex_obj *pex;
+static int idx;
+
+int
+pexecute (const char *program, char * const *argv, const char *pname,
+         const char *temp_base, char **errmsg_fmt, char **errmsg_arg,
+         int flags)
+{
+  const char *errmsg;
+  int err;
+
+  if ((flags & PEXECUTE_FIRST) != 0)
+    {
+      if (pex != NULL)
+       {
+         *errmsg_fmt = (char *) "pexecute already in progress";
+         *errmsg_arg = NULL;
+         return -1;
+       }
+      pex = pex_init (PEX_USE_PIPES, pname, temp_base);
+      idx = 0;
+    }
+  else
+    {
+      if (pex == NULL)
+       {
+         *errmsg_fmt = (char *) "pexecute not in progress";
+         *errmsg_arg = NULL;
+         return -1;
+       }
+    }
+
+  errmsg = pex_run (pex,
+                   (((flags & PEXECUTE_LAST) != 0 ? PEX_LAST : 0)
+                    | ((flags & PEXECUTE_SEARCH) != 0 ? PEX_SEARCH : 0)),
+                   program, argv, NULL, NULL, &err);
+  if (errmsg != NULL)
+    {
+      *errmsg_fmt = (char *) errmsg;
+      *errmsg_arg = NULL;
+      return -1;
+    }
+
+  /* Instead of a PID, we just return a one-based index into the
+     status values.  We avoid zero just because the old pexecute would
+     never return it.  */
+  return ++idx;
+}
+
+int
+pwait (int pid, int *status, int flags ATTRIBUTE_UNUSED)
+{
+  /* The PID returned by pexecute is one-based.  */
+  --pid;
+
+  if (pex == NULL || pid < 0 || pid >= idx)
+    return -1;
+
+  if (pid == 0 && idx == 1)
+    {
+      if (!pex_get_status (pex, 1, status))
+       return -1;
+    }
+  else
+    {
+      int *vector;
+
+      vector = XNEWVEC (int, idx);
+      if (!pex_get_status (pex, idx, vector))
+       {
+         free (vector);
+         return -1;
+       }
+      *status = vector[pid];
+      free (vector);
+    }
+
+  /* Assume that we are done after the caller has retrieved the last
+     exit status.  The original implementation did not require that
+     the exit statuses be retrieved in order, but this implementation
+     does.  */
+  if (pid + 1 == idx)
+    {
+      pex_free (pex);
+      pex = NULL;
+      idx = 0;
+    }
+
+  return pid + 1;
+}
diff --git a/libiberty/pexecute.txh b/libiberty/pexecute.txh
new file mode 100644 (file)
index 0000000..8baf9a0
--- /dev/null
@@ -0,0 +1,298 @@
+@c -*- mode: texinfo -*-
+@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase})
+
+Prepare to execute one or more programs, with standard output of each
+program fed to standard input of the next.  This is a system
+independent interface to execute a pipeline.
+
+@var{flags} is a bitwise combination of the following:
+
+@table @code
+
+@vindex PEX_RECORD_TIMES
+@item PEX_RECORD_TIMES
+Record subprocess times if possible.
+
+@vindex PEX_USE_PIPES
+@item PEX_USE_PIPES
+Use pipes for communication between processes, if possible.
+
+@vindex PEX_SAVE_TEMPS
+@item PEX_SAVE_TEMPS
+Don't delete temporary files used for communication between
+processes.
+
+@end table
+
+@var{pname} is the name of program to be executed, used in error
+messages.  @var{tempbase} is a base name to use for any required
+temporary files; it may be @code{NULL} to use a randomly chosen name.
+
+@end deftypefn
+
+@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline.  On success this returns
+@code{NULL}.  On failure it returns an error message, a statically
+allocated string.
+
+@var{obj} is returned by a previous call to @code{pex_init}.
+
+@var{flags} is a bitwise combination of the following:
+
+@table @code
+
+@vindex PEX_LAST
+@item PEX_LAST
+This must be set on the last program in the pipeline.  In particular,
+it should be set when executing a single program.  The standard output
+of the program will be sent to @var{outname}, or, if @var{outname} is
+@code{NULL}, to the standard output of the calling program.  Do @emph{not}
+set this bit if you want to call @code{pex_read_output}
+(described below).  After a call to @code{pex_run} with this bit set,
+@var{pex_run} may no longer be called with the same @var{obj}.
+
+@vindex PEX_SEARCH
+@item PEX_SEARCH
+Search for the program using the user's executable search path.
+
+@vindex PEX_SUFFIX
+@item PEX_SUFFIX
+@var{outname} is a suffix.  See the description of @var{outname},
+below.
+
+@vindex PEX_STDERR_TO_STDOUT
+@item PEX_STDERR_TO_STDOUT
+Send the program's standard error to standard output, if possible.
+
+@vindex PEX_BINARY_INPUT
+@vindex PEX_BINARY_OUTPUT
+@vindex PEX_BINARY_ERROR
+@item PEX_BINARY_INPUT
+@itemx PEX_BINARY_OUTPUT
+@itemx PEX_BINARY_ERROR
+The standard input (output or error) of the program should be read (written) in
+binary mode rather than text mode.  These flags are ignored on systems
+which do not distinguish binary mode and text mode, such as Unix.  For
+proper behavior these flags should match appropriately---a call to
+@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
+call using @code{PEX_BINARY_INPUT}.
+
+@vindex PEX_STDERR_TO_PIPE
+@item PEX_STDERR_TO_PIPE
+Send the program's standard error to a pipe, if possible.  This flag
+cannot be specified together with @code{PEX_STDERR_TO_STDOUT}.  This
+flag can be specified only on the last program in pipeline.
+
+@end table
+
+@var{executable} is the program to execute.  @var{argv} is the set of
+arguments to pass to the program; normally @code{@var{argv}[0]} will
+be a copy of @var{executable}.
+
+@var{outname} is used to set the name of the file to use for standard
+output.  There are two cases in which no output file will be used:
+
+@enumerate
+@item
+if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES}
+was set in the call to @code{pex_init}, and the system supports pipes
+
+@item
+if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is
+@code{NULL}
+@end enumerate
+
+@noindent
+Otherwise the code will use a file to hold standard
+output.  If @code{PEX_LAST} is not set, this file is considered to be
+a temporary file, and it will be removed when no longer needed, unless
+@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}.
+
+There are two cases to consider when setting the name of the file to
+hold standard output.
+
+@enumerate
+@item
+@code{PEX_SUFFIX} is set in @var{flags}.  In this case
+@var{outname} may not be @code{NULL}.  If the @var{tempbase} parameter
+to @code{pex_init} was not @code{NULL}, then the output file name is
+the concatenation of @var{tempbase} and @var{outname}.  If
+@var{tempbase} was @code{NULL}, then the output file name is a random
+file name ending in @var{outname}.
+
+@item
+@code{PEX_SUFFIX} was not set in @var{flags}.  In this
+case, if @var{outname} is not @code{NULL}, it is used as the output
+file name.  If @var{outname} is @code{NULL}, and @var{tempbase} was
+not NULL, the output file name is randomly chosen using
+@var{tempbase}.  Otherwise the output file name is chosen completely
+at random.
+@end enumerate
+
+@var{errname} is the file name to use for standard error output.  If
+it is @code{NULL}, standard error is the same as the caller's.
+Otherwise, standard error is written to the named file.
+
+On an error return, the code sets @code{*@var{err}} to an @code{errno}
+value, or to 0 if there is no relevant @code{errno}.
+
+@end deftypefn
+
+@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline, permitting the environment for the
+program to be specified.  Behaviour and parameters not listed below are
+as for @code{pex_run}.
+
+@var{env} is the environment for the child process, specified as an array of
+character pointers.  Each element of the array should point to a string of the
+form @code{VAR=VALUE}, with the exception of the last element that must be
+@code{NULL}.
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name})
+
+Return a stream for a temporary file to pass to the first program in
+the pipeline as input.
+
+The name of the input file is chosen according to the same rules
+@code{pex_run} uses to choose output file names, based on
+@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}.
+
+Don't call @code{fclose} on the returned stream; the first call to
+@code{pex_run} closes it automatically.
+
+If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in
+binary mode; otherwise, open it in the default mode.  Including
+@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
+@end deftypefn
+
+@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary})
+
+Return a stream @var{fp} for a pipe connected to the standard input of
+the first program in the pipeline; @var{fp} is opened for writing.
+You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call
+that returned @var{obj}.
+
+You must close @var{fp} using @code{fclose} yourself when you have
+finished writing data to the pipeline.
+
+The file descriptor underlying @var{fp} is marked not to be inherited
+by child processes.
+
+On systems that do not support pipes, this function returns
+@code{NULL}, and sets @code{errno} to @code{EINVAL}.  If you would
+like to write code that is portable to all systems the @code{pex}
+functions support, consider using @code{pex_input_file} instead.
+
+There are two opportunities for deadlock using
+@code{pex_input_pipe}:
+
+@itemize @bullet
+@item
+Most systems' pipes can buffer only a fixed amount of data; a process
+that writes to a full pipe blocks.  Thus, if you write to @file{fp}
+before starting the first process, you run the risk of blocking when
+there is no child process yet to read the data and allow you to
+continue.  @code{pex_input_pipe} makes no promises about the
+size of the pipe's buffer, so if you need to write any data at all
+before starting the first process in the pipeline, consider using
+@code{pex_input_file} instead.
+
+@item
+Using @code{pex_input_pipe} and @code{pex_read_output} together
+may also cause deadlock.  If the output pipe fills up, so that each
+program in the pipeline is waiting for the next to read more data, and
+you fill the input pipe by writing more data to @var{fp}, then there
+is no way to make progress: the only process that could read data from
+the output pipe is you, but you are blocked on the input pipe.
+
+@end itemize
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+output of the last program in the pipeline.  When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+error of the last program in the pipeline.  When this is used,
+@code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+@var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+@end deftypefn
+
+
+@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector})
+
+Returns the exit status of all programs run using @var{obj}.
+@var{count} is the number of results expected.  The results will be
+placed into @var{vector}.  The results are in the order of the calls
+to @code{pex_run}.  Returns 0 on error, 1 on success.
+
+@end deftypefn
+
+@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector})
+
+Returns the process execution times of all programs run using
+@var{obj}.  @var{count} is the number of results expected.  The
+results will be placed into @var{vector}.  The results are in the
+order of the calls to @code{pex_run}.  Returns 0 on error, 1 on
+success.
+
+@code{struct pex_time} has the following fields of the type
+@code{unsigned long}: @code{user_seconds},
+@code{user_microseconds}, @code{system_seconds},
+@code{system_microseconds}.  On systems which do not support reporting
+process times, all the fields will be set to @code{0}.
+
+@end deftypefn
+
+@deftypefn Extension void pex_free (struct pex_obj @var{obj})
+
+Clean up and free all data associated with @var{obj}.  If you have not
+yet called @code{pex_get_times} or @code{pex_get_status}, this will
+try to kill the subprocesses.
+
+@end deftypefn
+
+@deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err})
+
+An interface to permit the easy execution of a
+single program.  The return value and most of the parameters are as
+for a call to @code{pex_run}.  @var{flags} is restricted to a
+combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and
+@code{PEX_BINARY_OUTPUT}.  @var{outname} is interpreted as if
+@code{PEX_LAST} were set.  On a successful return, @code{*@var{status}} will
+be set to the exit status of the program.
+
+@end deftypefn
+
+@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags})
+
+This is the old interface to execute one or more programs.  It is
+still supported for compatibility purposes, but is no longer
+documented.
+
+@end deftypefn
+
+@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
+
+Another part of the old execution interface.
+
+@end deftypefn
diff --git a/libiberty/physmem.c b/libiberty/physmem.c
new file mode 100644 (file)
index 0000000..09fbf3f
--- /dev/null
@@ -0,0 +1,305 @@
+/* Calculate the size of physical memory.
+   Copyright 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Paul Eggert.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if HAVE_SYS_PSTAT_H
+# include <sys/pstat.h>
+#endif
+
+#if HAVE_SYS_SYSMP_H
+# include <sys/sysmp.h>
+#endif
+
+#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
+# include <sys/sysinfo.h>
+# include <machine/hal_sysinfo.h>
+#endif
+
+#if HAVE_SYS_TABLE_H
+# include <sys/table.h>
+#endif
+
+#include <sys/types.h>
+
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+#if HAVE_SYS_SYSCTL_H
+# include <sys/sysctl.h>
+#endif
+
+#if HAVE_SYS_SYSTEMCFG_H
+# include <sys/systemcfg.h>
+#endif
+
+#ifdef _WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/*  MEMORYSTATUSEX is missing from older windows headers, so define
+    a local replacement.  */
+typedef struct
+{
+  DWORD dwLength;
+  DWORD dwMemoryLoad;
+  DWORDLONG ullTotalPhys;
+  DWORDLONG ullAvailPhys;
+  DWORDLONG ullTotalPageFile;
+  DWORDLONG ullAvailPageFile;
+  DWORDLONG ullTotalVirtual;
+  DWORDLONG ullAvailVirtual;
+  DWORDLONG ullAvailExtendedVirtual;
+} lMEMORYSTATUSEX;
+typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
+#endif
+
+#include "libiberty.h"
+
+/* Return the total amount of physical memory.  */
+double
+physmem_total (void)
+{
+#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
+  { /* This works on linux-gnu, solaris2 and cygwin.  */
+    double pages = sysconf (_SC_PHYS_PAGES);
+    double pagesize = sysconf (_SC_PAGESIZE);
+    if (0 <= pages && 0 <= pagesize)
+      return pages * pagesize;
+  }
+#endif
+
+#if HAVE_PSTAT_GETSTATIC
+  { /* This works on hpux11.  */
+    struct pst_static pss;
+    if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
+      {
+       double pages = pss.physical_memory;
+       double pagesize = pss.page_size;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
+  { /* This works on irix6. */
+    struct rminfo realmem;
+    if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
+      {
+       double pagesize = sysconf (_SC_PAGESIZE);
+       double pages = realmem.physmem;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+#if HAVE_GETSYSINFO && defined GSI_PHYSMEM
+  { /* This works on Tru64 UNIX V4/5.  */
+    int physmem;
+
+    if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
+                   NULL, NULL, NULL) == 1)
+      {
+       double kbytes = physmem;
+
+       if (0 <= kbytes)
+         return kbytes * 1024.0;
+      }
+  }
+#endif
+
+#if HAVE_SYSCTL && defined HW_PHYSMEM
+  { /* This works on *bsd and darwin.  */
+    unsigned int physmem;
+    size_t len = sizeof physmem;
+    static int mib[2] = { CTL_HW, HW_PHYSMEM };
+
+    if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
+       && len == sizeof (physmem))
+      return (double) physmem;
+  }
+#endif
+
+#if HAVE__SYSTEM_CONFIGURATION
+  /* This works on AIX 4.3.3+.  */
+  return _system_configuration.physmem;
+#endif
+
+#if defined _WIN32
+  { /* this works on windows */
+    PFN_MS_EX pfnex;
+    HMODULE h = GetModuleHandle ("kernel32.dll");
+
+    if (!h)
+      return 0.0;
+
+    /*  Use GlobalMemoryStatusEx if available.  */
+    if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
+      {
+       lMEMORYSTATUSEX lms_ex;
+       lms_ex.dwLength = sizeof lms_ex;
+       if (!pfnex (&lms_ex))
+         return 0.0;
+       return (double) lms_ex.ullTotalPhys;
+      }
+
+    /*  Fall back to GlobalMemoryStatus which is always available.
+        but returns wrong results for physical memory > 4GB.  */
+    else
+      {
+       MEMORYSTATUS ms;
+       GlobalMemoryStatus (&ms);
+       return (double) ms.dwTotalPhys;
+      }
+  }
+#endif
+
+  /* Return 0 if we can't determine the value.  */
+  return 0;
+}
+
+/* Return the amount of physical memory available.  */
+double
+physmem_available (void)
+{
+#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
+  { /* This works on linux-gnu, solaris2 and cygwin.  */
+    double pages = sysconf (_SC_AVPHYS_PAGES);
+    double pagesize = sysconf (_SC_PAGESIZE);
+    if (0 <= pages && 0 <= pagesize)
+      return pages * pagesize;
+  }
+#endif
+
+#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
+  { /* This works on hpux11.  */
+    struct pst_static pss;
+    struct pst_dynamic psd;
+    if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
+       && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
+      {
+       double pages = psd.psd_free;
+       double pagesize = pss.page_size;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
+  { /* This works on irix6. */
+    struct rminfo realmem;
+    if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
+      {
+       double pagesize = sysconf (_SC_PAGESIZE);
+       double pages = realmem.availrmem;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+#if HAVE_TABLE && defined TBL_VMSTATS
+  { /* This works on Tru64 UNIX V4/5.  */
+    struct tbl_vmstats vmstats;
+
+    if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
+      {
+       double pages = vmstats.free_count;
+       double pagesize = vmstats.pagesize;
+
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+#if HAVE_SYSCTL && defined HW_USERMEM
+  { /* This works on *bsd and darwin.  */
+    unsigned int usermem;
+    size_t len = sizeof usermem;
+    static int mib[2] = { CTL_HW, HW_USERMEM };
+
+    if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0
+       && len == sizeof (usermem))
+      return (double) usermem;
+  }
+#endif
+
+#if defined _WIN32
+  { /* this works on windows */
+    PFN_MS_EX pfnex;
+    HMODULE h = GetModuleHandle ("kernel32.dll");
+
+    if (!h)
+      return 0.0;
+
+    /*  Use GlobalMemoryStatusEx if available.  */
+    if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
+      {
+       lMEMORYSTATUSEX lms_ex;
+       lms_ex.dwLength = sizeof lms_ex;
+       if (!pfnex (&lms_ex))
+         return 0.0;
+       return (double) lms_ex.ullAvailPhys;
+      }
+
+    /*  Fall back to GlobalMemoryStatus which is always available.
+        but returns wrong results for physical memory > 4GB  */
+    else
+      {
+       MEMORYSTATUS ms;
+       GlobalMemoryStatus (&ms);
+       return (double) ms.dwAvailPhys;
+      }
+  }
+#endif
+
+  /* Guess 25% of physical memory.  */
+  return physmem_total () / 4;
+}
+
+
+#if DEBUG
+
+# include <stdio.h>
+# include <stdlib.h>
+
+int
+main (void)
+{
+  printf ("%12.f %12.f\n", physmem_total (), physmem_available ());
+  exit (0);
+}
+
+#endif /* DEBUG */
+
+/*
+Local Variables:
+compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c"
+End:
+*/
diff --git a/libiberty/putenv.c b/libiberty/putenv.c
new file mode 100644 (file)
index 0000000..248f50e
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc.
+   This file based on putenv.c in the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Supplemental int putenv (const char *@var{string})
+
+Uses @code{setenv} or @code{unsetenv} to put @var{string} into
+the environment or remove it.  If @var{string} is of the form
+@samp{name=value} the string is added; if no @samp{=} is present the
+name is unset/removed.
+
+@end deftypefn
+
+*/
+
+#if defined (_AIX) && !defined (__GNUC__)
+ #pragma alloca
+#endif
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "ansidecl.h"
+
+#define putenv libiberty_putenv
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+# include <string.h>
+#endif
+
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#else
+# ifndef alloca
+#  ifdef __GNUC__
+#   define alloca __builtin_alloca
+#  else
+extern char *alloca ();
+#  endif /* __GNUC__ */
+# endif /* alloca */
+#endif /* HAVE_ALLOCA_H */
+
+#undef putenv
+
+/* Below this point, it's verbatim code from the glibc-2.0 implementation */
+
+
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.  */
+int
+putenv (const char *string)
+{
+  const char *const name_end = strchr (string, '=');
+
+  if (name_end)
+    {
+      char *name = (char *) alloca (name_end - string + 1);
+      memcpy (name, string, name_end - string);
+      name[name_end - string] = '\0';
+      return setenv (name, name_end + 1, 1);
+    }
+
+  unsetenv (string);
+  return 0;
+}
diff --git a/libiberty/random.c b/libiberty/random.c
new file mode 100644 (file)
index 0000000..c306698
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. [rescinded 22 July 1999]
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * This is derived from the Berkeley source:
+ *     @(#)random.c    5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ */
+
+/*
+
+@deftypefn Supplement {long int} random (void)
+@deftypefnx Supplement void srandom (unsigned int @var{seed})
+@deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n})
+@deftypefnx Supplement void* setstate (void *@var{arg_state})
+
+Random number functions.  @code{random} returns a random number in the
+range 0 to @code{LONG_MAX}.  @code{srandom} initializes the random
+number generator to some starting point determined by @var{seed}
+(else, the values returned by @code{random} are always the same for each
+run of the program).  @code{initstate} and @code{setstate} allow fine-grained
+control over the state of the random number generator.
+
+@end deftypefn
+
+*/
+
+#include <errno.h>
+
+#if 0
+
+#include <ansidecl.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+#else
+
+#define        ULONG_MAX  ((unsigned long)(~0L))     /* 0xFFFFFFFF for 32-bits */
+#define        LONG_MAX   ((long)(ULONG_MAX >> 1))   /* 0x7FFFFFFF for 32-bits*/
+
+#ifdef __STDC__
+#  define PTR void *
+#  ifndef NULL
+#    define NULL (void *) 0
+#  endif
+#else
+#  define PTR char *
+#  ifndef NULL
+#    define NULL (void *) 0
+#  endif
+#endif
+
+#endif
+
+long int random (void);
+
+/* An improved random number generation package.  In addition to the standard
+   rand()/srand() like interface, this package also has a special state info
+   interface.  The initstate() routine is called with a seed, an array of
+   bytes, and a count of how many bytes are being passed in; this array is
+   then initialized to contain information for random number generation with
+   that much state information.  Good sizes for the amount of state
+   information are 32, 64, 128, and 256 bytes.  The state can be switched by
+   calling the setstate() function with the same array as was initiallized
+   with initstate().  By default, the package runs with 128 bytes of state
+   information and generates far better random numbers than a linear
+   congruential generator.  If the amount of state information is less than
+   32 bytes, a simple linear congruential R.N.G. is used.  Internally, the
+   state information is treated as an array of longs; the zeroeth element of
+   the array is the type of R.N.G. being used (small integer); the remainder
+   of the array is the state information for the R.N.G.  Thus, 32 bytes of
+   state information will give 7 longs worth of state information, which will
+   allow a degree seven polynomial.  (Note: The zeroeth word of state
+   information also has some other information stored in it; see setstate
+   for details).  The random number generation technique is a linear feedback
+   shift register approach, employing trinomials (since there are fewer terms
+   to sum up that way).  In this approach, the least significant bit of all
+   the numbers in the state table will act as a linear feedback shift register,
+   and will have period 2^deg - 1 (where deg is the degree of the polynomial
+   being used, assuming that the polynomial is irreducible and primitive).
+   The higher order bits will have longer periods, since their values are
+   also influenced by pseudo-random carries out of the lower bits.  The
+   total period of the generator is approximately deg*(2**deg - 1); thus
+   doubling the amount of state information has a vast influence on the
+   period of the generator.  Note: The deg*(2**deg - 1) is an approximation
+   only good for large deg, when the period of the shift register is the
+   dominant factor.  With deg equal to seven, the period is actually much
+   longer than the 7*(2**7 - 1) predicted by this formula.  */
+
+
+
+/* For each of the currently supported random number generators, we have a
+   break value on the amount of state information (you need at least thi
+   bytes of state info to support this random number generator), a degree for
+   the polynomial (actually a trinomial) that the R.N.G. is based on, and
+   separation between the two lower order coefficients of the trinomial.  */
+
+/* Linear congruential.  */
+#define        TYPE_0          0
+#define        BREAK_0         8
+#define        DEG_0           0
+#define        SEP_0           0
+
+/* x**7 + x**3 + 1.  */
+#define        TYPE_1          1
+#define        BREAK_1         32
+#define        DEG_1           7
+#define        SEP_1           3
+
+/* x**15 + x + 1.  */
+#define        TYPE_2          2
+#define        BREAK_2         64
+#define        DEG_2           15
+#define        SEP_2           1
+
+/* x**31 + x**3 + 1.  */
+#define        TYPE_3          3
+#define        BREAK_3         128
+#define        DEG_3           31
+#define        SEP_3           3
+
+/* x**63 + x + 1.  */
+#define        TYPE_4          4
+#define        BREAK_4         256
+#define        DEG_4           63
+#define        SEP_4           1
+
+
+/* Array versions of the above information to make code run faster.
+   Relies on fact that TYPE_i == i.  */
+
+#define        MAX_TYPES       5       /* Max number of types above.  */
+
+static int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 };
+static int seps[MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 };
+
+
+
+/* Initially, everything is set up as if from:
+       initstate(1, randtbl, 128);
+   Note that this initialization takes advantage of the fact that srandom
+   advances the front and rear pointers 10*rand_deg times, and hence the
+   rear pointer which starts at 0 will also end up at zero; thus the zeroeth
+   element of the state information, which contains info about the current
+   position of the rear pointer is just
+       (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3.  */
+
+static long int randtbl[DEG_3 + 1] =
+  { TYPE_3,
+      0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 
+      0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 
+      0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 
+      0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 
+      0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 
+      0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 
+      0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 
+      0xf5ad9d0e, 0x8999220b, 0x27fb47b9
+    };
+
+/* FPTR and RPTR are two pointers into the state info, a front and a rear
+   pointer.  These two pointers are always rand_sep places aparts, as they
+   cycle through the state information.  (Yes, this does mean we could get
+   away with just one pointer, but the code for random is more efficient
+   this way).  The pointers are left positioned as they would be from the call:
+       initstate(1, randtbl, 128);
+   (The position of the rear pointer, rptr, is really 0 (as explained above
+   in the initialization of randtbl) because the state table pointer is set
+   to point to randtbl[1] (as explained below).)  */
+
+static long int *fptr = &randtbl[SEP_3 + 1];
+static long int *rptr = &randtbl[1];
+
+
+
+/* The following things are the pointer to the state information table,
+   the type of the current generator, the degree of the current polynomial
+   being used, and the separation between the two pointers.
+   Note that for efficiency of random, we remember the first location of
+   the state information, not the zeroeth.  Hence it is valid to access
+   state[-1], which is used to store the type of the R.N.G.
+   Also, we remember the last location, since this is more efficient than
+   indexing every time to find the address of the last element to see if
+   the front and rear pointers have wrapped.  */
+
+static long int *state = &randtbl[1];
+
+static int rand_type = TYPE_3;
+static int rand_deg = DEG_3;
+static int rand_sep = SEP_3;
+
+static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])];
+\f
+/* Initialize the random number generator based on the given seed.  If the
+   type is the trivial no-state-information type, just remember the seed.
+   Otherwise, initializes state[] based on the given "seed" via a linear
+   congruential generator.  Then, the pointers are set to known locations
+   that are exactly rand_sep places apart.  Lastly, it cycles the state
+   information a given number of times to get rid of any initial dependencies
+   introduced by the L.C.R.N.G.  Note that the initialization of randtbl[]
+   for default usage relies on values produced by this routine.  */
+void
+srandom (unsigned int x)
+{
+  state[0] = x;
+  if (rand_type != TYPE_0)
+    {
+      register long int i;
+      for (i = 1; i < rand_deg; ++i)
+       state[i] = (1103515145 * state[i - 1]) + 12345;
+      fptr = &state[rand_sep];
+      rptr = &state[0];
+      for (i = 0; i < 10 * rand_deg; ++i)
+       random();
+    }
+}
+\f
+/* Initialize the state information in the given array of N bytes for
+   future random number generation.  Based on the number of bytes we
+   are given, and the break values for the different R.N.G.'s, we choose
+   the best (largest) one we can and set things up for it.  srandom is
+   then called to initialize the state information.  Note that on return
+   from srandom, we set state[-1] to be the type multiplexed with the current
+   value of the rear pointer; this is so successive calls to initstate won't
+   lose this information and will be able to restart with setstate.
+   Note: The first thing we do is save the current state, if any, just like
+   setstate so that it doesn't matter when initstate is called.
+   Returns a pointer to the old state.  */
+PTR
+initstate (unsigned int seed, PTR arg_state, unsigned long n)
+{
+  PTR ostate = (PTR) &state[-1];
+
+  if (rand_type == TYPE_0)
+    state[-1] = rand_type;
+  else
+    state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
+  if (n < BREAK_1)
+    {
+      if (n < BREAK_0)
+       {
+         errno = EINVAL;
+         return NULL;
+       }
+      rand_type = TYPE_0;
+      rand_deg = DEG_0;
+      rand_sep = SEP_0;
+    }
+  else if (n < BREAK_2)
+    {
+      rand_type = TYPE_1;
+      rand_deg = DEG_1;
+      rand_sep = SEP_1;
+    }
+  else if (n < BREAK_3)
+    {
+      rand_type = TYPE_2;
+      rand_deg = DEG_2;
+      rand_sep = SEP_2;
+    }
+  else if (n < BREAK_4)
+    {
+      rand_type = TYPE_3;
+      rand_deg = DEG_3;
+      rand_sep = SEP_3;
+    }
+  else
+    {
+      rand_type = TYPE_4;
+      rand_deg = DEG_4;
+      rand_sep = SEP_4;
+    }
+
+  state = &((long int *) arg_state)[1];        /* First location.  */
+  /* Must set END_PTR before srandom.  */
+  end_ptr = &state[rand_deg];
+  srandom(seed);
+  if (rand_type == TYPE_0)
+    state[-1] = rand_type;
+  else
+    state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
+
+  return ostate;
+}
+\f
+/* Restore the state from the given state array.
+   Note: It is important that we also remember the locations of the pointers
+   in the current state information, and restore the locations of the pointers
+   from the old state information.  This is done by multiplexing the pointer
+   location into the zeroeth word of the state information. Note that due
+   to the order in which things are done, it is OK to call setstate with the
+   same state as the current state
+   Returns a pointer to the old state information.  */
+
+PTR
+setstate (PTR arg_state)
+{
+  register long int *new_state = (long int *) arg_state;
+  register int type = new_state[0] % MAX_TYPES;
+  register int rear = new_state[0] / MAX_TYPES;
+  PTR ostate = (PTR) &state[-1];
+
+  if (rand_type == TYPE_0)
+    state[-1] = rand_type;
+  else
+    state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
+
+  switch (type)
+    {
+    case TYPE_0:
+    case TYPE_1:
+    case TYPE_2:
+    case TYPE_3:
+    case TYPE_4:
+      rand_type = type;
+      rand_deg = degrees[type];
+      rand_sep = seps[type];
+      break;
+    default:
+      /* State info munged.  */
+      errno = EINVAL;
+      return NULL;
+    }
+
+  state = &new_state[1];
+  if (rand_type != TYPE_0)
+    {
+      rptr = &state[rear];
+      fptr = &state[(rear + rand_sep) % rand_deg];
+    }
+  /* Set end_ptr too.  */
+  end_ptr = &state[rand_deg];
+
+  return ostate;
+}
+\f
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+   congruential bit.  Otherwise, we do our fancy trinomial stuff, which is the
+   same in all ther other cases due to all the global variables that have been
+   set up.  The basic operation is to add the number at the rear pointer into
+   the one at the front pointer.  Then both pointers are advanced to the next
+   location cyclically in the table.  The value returned is the sum generated,
+   reduced to 31 bits by throwing away the "least random" low bit.
+   Note: The code takes advantage of the fact that both the front and
+   rear pointers can't wrap on the same call by not testing the rear
+   pointer if the front one has wrapped.  Returns a 31-bit random number.  */
+
+long int
+random (void)
+{
+  if (rand_type == TYPE_0)
+    {
+      state[0] = ((state[0] * 1103515245) + 12345) & LONG_MAX;
+      return state[0];
+    }
+  else
+    {
+      long int i;
+      *fptr += *rptr;
+      /* Chucking least random bit.  */
+      i = (*fptr >> 1) & LONG_MAX;
+      ++fptr;
+      if (fptr >= end_ptr)
+       {
+         fptr = state;
+         ++rptr;
+       }
+      else
+       {
+         ++rptr;
+         if (rptr >= end_ptr)
+           rptr = state;
+       }
+      return i;
+    }
+}
diff --git a/libiberty/regex.c b/libiberty/regex.c
new file mode 100644 (file)
index 0000000..fa1df19
--- /dev/null
@@ -0,0 +1,8202 @@
+/* Extended regular expression matching and search library,
+   version 0.12.
+   (Implements POSIX draft P1003.2/D11.2, except for some of the
+   internationalization features.)
+
+   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+   2002, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.  */
+
+/* This file has been modified for usage in libiberty.  It includes "xregex.h"
+   instead of <regex.h>.  The "xregex.h" header file renames all external
+   routines with an "x" prefix so they do not collide with the native regex
+   routines or with other components regex routines. */
+/* AIX requires this to be the first thing in the file. */
+#if defined _AIX && !defined __GNUC__ && !defined REGEX_MALLOC
+  #pragma alloca
+#endif
+
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+
+#ifndef INSIDE_RECURSION
+# ifdef HAVE_CONFIG_H
+#  include <config.h>
+# endif
+#endif
+
+#include <ansidecl.h>
+
+#ifndef INSIDE_RECURSION
+
+# if defined STDC_HEADERS && !defined emacs
+#  include <stddef.h>
+# else
+/* We need this for `regex.h', and perhaps for the Emacs include files.  */
+#  include <sys/types.h>
+# endif
+
+# define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
+
+/* For platform which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+# if defined _LIBC || WIDE_CHAR_SUPPORT
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
+#  include <wchar.h>
+#  include <wctype.h>
+# endif
+
+# ifdef _LIBC
+/* We have to keep the namespace clean.  */
+#  define regfree(preg) __regfree (preg)
+#  define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
+#  define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
+#  define regerror(errcode, preg, errbuf, errbuf_size) \
+       __regerror(errcode, preg, errbuf, errbuf_size)
+#  define re_set_registers(bu, re, nu, st, en) \
+       __re_set_registers (bu, re, nu, st, en)
+#  define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
+       __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+#  define re_match(bufp, string, size, pos, regs) \
+       __re_match (bufp, string, size, pos, regs)
+#  define re_search(bufp, string, size, startpos, range, regs) \
+       __re_search (bufp, string, size, startpos, range, regs)
+#  define re_compile_pattern(pattern, length, bufp) \
+       __re_compile_pattern (pattern, length, bufp)
+#  define re_set_syntax(syntax) __re_set_syntax (syntax)
+#  define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
+       __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
+#  define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
+
+#  define btowc __btowc
+
+/* We are also using some library internals.  */
+#  include <locale/localeinfo.h>
+#  include <locale/elem-hash.h>
+#  include <langinfo.h>
+#  include <locale/coll-lookup.h>
+# endif
+
+/* This is for other GNU distributions with internationalized messages.  */
+# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+#  include <libintl.h>
+#  ifdef _LIBC
+#   undef gettext
+#   define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES)
+#  endif
+# else
+#  define gettext(msgid) (msgid)
+# endif
+
+# ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+#  define gettext_noop(String) String
+# endif
+
+/* The `emacs' switch turns on certain matching commands
+   that make sense only in Emacs. */
+# ifdef emacs
+
+#  include "lisp.h"
+#  include "buffer.h"
+#  include "syntax.h"
+
+# else  /* not emacs */
+
+/* If we are not linking with Emacs proper,
+   we can't use the relocating allocator
+   even if config.h says that we can.  */
+#  undef REL_ALLOC
+
+#  if defined STDC_HEADERS || defined _LIBC
+#   include <stdlib.h>
+#  else
+char *malloc ();
+char *realloc ();
+#  endif
+
+/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
+   If nothing else has been done, use the method below.  */
+#  ifdef INHIBIT_STRING_HEADER
+#   if !(defined HAVE_BZERO && defined HAVE_BCOPY)
+#    if !defined bzero && !defined bcopy
+#     undef INHIBIT_STRING_HEADER
+#    endif
+#   endif
+#  endif
+
+/* This is the normal way of making sure we have a bcopy and a bzero.
+   This is used in most programs--a few other programs avoid this
+   by defining INHIBIT_STRING_HEADER.  */
+#  ifndef INHIBIT_STRING_HEADER
+#   if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
+#    include <string.h>
+#    ifndef bzero
+#     ifndef _LIBC
+#      define bzero(s, n)      (memset (s, '\0', n), (s))
+#     else
+#      define bzero(s, n)      __bzero (s, n)
+#     endif
+#    endif
+#   else
+#    include <strings.h>
+#    ifndef memcmp
+#     define memcmp(s1, s2, n) bcmp (s1, s2, n)
+#    endif
+#    ifndef memcpy
+#     define memcpy(d, s, n)   (bcopy (s, d, n), (d))
+#    endif
+#   endif
+#  endif
+
+/* Define the syntax stuff for \<, \>, etc.  */
+
+/* This must be nonzero for the wordchar and notwordchar pattern
+   commands in re_match_2.  */
+#  ifndef Sword
+#   define Sword 1
+#  endif
+
+#  ifdef SWITCH_ENUM_BUG
+#   define SWITCH_ENUM_CAST(x) ((int)(x))
+#  else
+#   define SWITCH_ENUM_CAST(x) (x)
+#  endif
+
+# endif /* not emacs */
+
+# if defined _LIBC || HAVE_LIMITS_H
+#  include <limits.h>
+# endif
+
+# ifndef MB_LEN_MAX
+#  define MB_LEN_MAX 1
+# endif
+\f
+/* Get the interface, including the syntax bits.  */
+# include "xregex.h"  /* change for libiberty */
+
+/* isalpha etc. are used for the character classes.  */
+# include <ctype.h>
+
+/* Jim Meyering writes:
+
+   "... Some ctype macros are valid only for character codes that
+   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
+   using /bin/cc or gcc but without giving an ansi option).  So, all
+   ctype uses should be through macros like ISPRINT...  If
+   STDC_HEADERS is defined, then autoconf has verified that the ctype
+   macros don't need to be guarded with references to isascii. ...
+   Defining isascii to 1 should let any compiler worth its salt
+   eliminate the && through constant folding."
+   Solaris defines some of these symbols so we must undefine them first.  */
+
+# undef ISASCII
+# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+#  define ISASCII(c) 1
+# else
+#  define ISASCII(c) isascii(c)
+# endif
+
+# ifdef isblank
+#  define ISBLANK(c) (ISASCII (c) && isblank (c))
+# else
+#  define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+# endif
+# ifdef isgraph
+#  define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+# else
+#  define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+# endif
+
+# undef ISPRINT
+# define ISPRINT(c) (ISASCII (c) && isprint (c))
+# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
+# define ISALNUM(c) (ISASCII (c) && isalnum (c))
+# define ISALPHA(c) (ISASCII (c) && isalpha (c))
+# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
+# define ISLOWER(c) (ISASCII (c) && islower (c))
+# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
+# define ISSPACE(c) (ISASCII (c) && isspace (c))
+# define ISUPPER(c) (ISASCII (c) && isupper (c))
+# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
+
+# ifdef _tolower
+#  define TOLOWER(c) _tolower(c)
+# else
+#  define TOLOWER(c) tolower(c)
+# endif
+
+# ifndef NULL
+#  define NULL (void *)0
+# endif
+
+/* We remove any previous definition of `SIGN_EXTEND_CHAR',
+   since ours (we hope) works properly with all combinations of
+   machines, compilers, `char' and `unsigned char' argument types.
+   (Per Bothner suggested the basic approach.)  */
+# undef SIGN_EXTEND_CHAR
+# if __STDC__
+#  define SIGN_EXTEND_CHAR(c) ((signed char) (c))
+# else  /* not __STDC__ */
+/* As in Harbison and Steele.  */
+#  define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
+# endif
+\f
+# ifndef emacs
+/* How many characters in the character set.  */
+#  define CHAR_SET_SIZE 256
+
+#  ifdef SYNTAX_TABLE
+
+extern char *re_syntax_table;
+
+#  else /* not SYNTAX_TABLE */
+
+static char re_syntax_table[CHAR_SET_SIZE];
+
+static void init_syntax_once (void);
+
+static void
+init_syntax_once (void)
+{
+   register int c;
+   static int done = 0;
+
+   if (done)
+     return;
+   bzero (re_syntax_table, sizeof re_syntax_table);
+
+   for (c = 0; c < CHAR_SET_SIZE; ++c)
+     if (ISALNUM (c))
+       re_syntax_table[c] = Sword;
+
+   re_syntax_table['_'] = Sword;
+
+   done = 1;
+}
+
+#  endif /* not SYNTAX_TABLE */
+
+#  define SYNTAX(c) re_syntax_table[(unsigned char) (c)]
+
+# endif /* emacs */
+\f
+/* Integer type for pointers.  */
+# if !defined _LIBC && !defined HAVE_UINTPTR_T
+typedef unsigned long int uintptr_t;
+# endif
+
+/* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
+   use `alloca' instead of `malloc'.  This is because using malloc in
+   re_search* or re_match* could cause memory leaks when C-g is used in
+   Emacs; also, malloc is slower and causes storage fragmentation.  On
+   the other hand, malloc is more portable, and easier to debug.
+
+   Because we sometimes use alloca, some routines have to be macros,
+   not functions -- `alloca'-allocated space disappears at the end of the
+   function it is called in.  */
+
+# ifdef REGEX_MALLOC
+
+#  define REGEX_ALLOCATE malloc
+#  define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
+#  define REGEX_FREE free
+
+# else /* not REGEX_MALLOC  */
+
+/* Emacs already defines alloca, sometimes.  */
+#  ifndef alloca
+
+/* Make alloca work the best possible way.  */
+#   ifdef __GNUC__
+#    define alloca __builtin_alloca
+#   else /* not __GNUC__ */
+#    if HAVE_ALLOCA_H
+#     include <alloca.h>
+#    endif /* HAVE_ALLOCA_H */
+#   endif /* not __GNUC__ */
+
+#  endif /* not alloca */
+
+#  define REGEX_ALLOCATE alloca
+
+/* Assumes a `char *destination' variable.  */
+#  define REGEX_REALLOCATE(source, osize, nsize)                       \
+  (destination = (char *) alloca (nsize),                              \
+   memcpy (destination, source, osize))
+
+/* No need to do anything to free, after alloca.  */
+#  define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+
+# endif /* not REGEX_MALLOC */
+
+/* Define how to allocate the failure stack.  */
+
+# if defined REL_ALLOC && defined REGEX_MALLOC
+
+#  define REGEX_ALLOCATE_STACK(size)                           \
+  r_alloc (&failure_stack_ptr, (size))
+#  define REGEX_REALLOCATE_STACK(source, osize, nsize)         \
+  r_re_alloc (&failure_stack_ptr, (nsize))
+#  define REGEX_FREE_STACK(ptr)                                        \
+  r_alloc_free (&failure_stack_ptr)
+
+# else /* not using relocating allocator */
+
+#  ifdef REGEX_MALLOC
+
+#   define REGEX_ALLOCATE_STACK malloc
+#   define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
+#   define REGEX_FREE_STACK free
+
+#  else /* not REGEX_MALLOC */
+
+#   define REGEX_ALLOCATE_STACK alloca
+
+#   define REGEX_REALLOCATE_STACK(source, osize, nsize)                        \
+   REGEX_REALLOCATE (source, osize, nsize)
+/* No need to explicitly free anything.  */
+#   define REGEX_FREE_STACK(arg)
+
+#  endif /* not REGEX_MALLOC */
+# endif /* not using relocating allocator */
+
+
+/* True if `size1' is non-NULL and PTR is pointing anywhere inside
+   `string1' or just past its end.  This works if PTR is NULL, which is
+   a good thing.  */
+# define FIRST_STRING_P(ptr)                                   \
+  (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
+
+/* (Re)Allocate N items of type T using malloc, or fail.  */
+# define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
+# define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
+# define RETALLOC_IF(addr, n, t) \
+  if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
+# define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
+
+# define BYTEWIDTH 8 /* In bits.  */
+
+# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
+
+# undef MAX
+# undef MIN
+# define MAX(a, b) ((a) > (b) ? (a) : (b))
+# define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+typedef char boolean;
+# define false 0
+# define true 1
+
+static reg_errcode_t byte_regex_compile (const char *pattern, size_t size,
+                                         reg_syntax_t syntax,
+                                         struct re_pattern_buffer *bufp);
+
+static int byte_re_match_2_internal (struct re_pattern_buffer *bufp,
+                                     const char *string1, int size1,
+                                     const char *string2, int size2,
+                                     int pos,
+                                     struct re_registers *regs,
+                                     int stop);
+static int byte_re_search_2 (struct re_pattern_buffer *bufp,
+                             const char *string1, int size1,
+                             const char *string2, int size2,
+                             int startpos, int range,
+                             struct re_registers *regs, int stop);
+static int byte_re_compile_fastmap (struct re_pattern_buffer *bufp);
+
+#ifdef MBS_SUPPORT
+static reg_errcode_t wcs_regex_compile (const char *pattern, size_t size,
+                                        reg_syntax_t syntax,
+                                        struct re_pattern_buffer *bufp);
+
+
+static int wcs_re_match_2_internal (struct re_pattern_buffer *bufp,
+                                    const char *cstring1, int csize1,
+                                    const char *cstring2, int csize2,
+                                    int pos,
+                                    struct re_registers *regs,
+                                    int stop,
+                                    wchar_t *string1, int size1,
+                                    wchar_t *string2, int size2,
+                                    int *mbs_offset1, int *mbs_offset2);
+static int wcs_re_search_2 (struct re_pattern_buffer *bufp,
+                            const char *string1, int size1,
+                            const char *string2, int size2,
+                            int startpos, int range,
+                            struct re_registers *regs, int stop);
+static int wcs_re_compile_fastmap (struct re_pattern_buffer *bufp);
+#endif
+\f
+/* These are the command codes that appear in compiled regular
+   expressions.  Some opcodes are followed by argument bytes.  A
+   command code can specify any interpretation whatsoever for its
+   arguments.  Zero bytes may appear in the compiled regular expression.  */
+
+typedef enum
+{
+  no_op = 0,
+
+  /* Succeed right away--no more backtracking.  */
+  succeed,
+
+        /* Followed by one byte giving n, then by n literal bytes.  */
+  exactn,
+
+# ifdef MBS_SUPPORT
+       /* Same as exactn, but contains binary data.  */
+  exactn_bin,
+# endif
+
+        /* Matches any (more or less) character.  */
+  anychar,
+
+        /* Matches any one char belonging to specified set.  First
+           following byte is number of bitmap bytes.  Then come bytes
+           for a bitmap saying which chars are in.  Bits in each byte
+           are ordered low-bit-first.  A character is in the set if its
+           bit is 1.  A character too large to have a bit in the map is
+           automatically not in the set.  */
+        /* ifdef MBS_SUPPORT, following element is length of character
+          classes, length of collating symbols, length of equivalence
+          classes, length of character ranges, and length of characters.
+          Next, character class element, collating symbols elements,
+          equivalence class elements, range elements, and character
+          elements follow.
+          See regex_compile function.  */
+  charset,
+
+        /* Same parameters as charset, but match any character that is
+           not one of those specified.  */
+  charset_not,
+
+        /* Start remembering the text that is matched, for storing in a
+           register.  Followed by one byte with the register number, in
+           the range 0 to one less than the pattern buffer's re_nsub
+           field.  Then followed by one byte with the number of groups
+           inner to this one.  (This last has to be part of the
+           start_memory only because we need it in the on_failure_jump
+           of re_match_2.)  */
+  start_memory,
+
+        /* Stop remembering the text that is matched and store it in a
+           memory register.  Followed by one byte with the register
+           number, in the range 0 to one less than `re_nsub' in the
+           pattern buffer, and one byte with the number of inner groups,
+           just like `start_memory'.  (We need the number of inner
+           groups here because we don't have any easy way of finding the
+           corresponding start_memory when we're at a stop_memory.)  */
+  stop_memory,
+
+        /* Match a duplicate of something remembered. Followed by one
+           byte containing the register number.  */
+  duplicate,
+
+        /* Fail unless at beginning of line.  */
+  begline,
+
+        /* Fail unless at end of line.  */
+  endline,
+
+        /* Succeeds if at beginning of buffer (if emacs) or at beginning
+           of string to be matched (if not).  */
+  begbuf,
+
+        /* Analogously, for end of buffer/string.  */
+  endbuf,
+
+        /* Followed by two byte relative address to which to jump.  */
+  jump,
+
+       /* Same as jump, but marks the end of an alternative.  */
+  jump_past_alt,
+
+        /* Followed by two-byte relative address of place to resume at
+           in case of failure.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  on_failure_jump,
+
+        /* Like on_failure_jump, but pushes a placeholder instead of the
+           current string position when executed.  */
+  on_failure_keep_string_jump,
+
+        /* Throw away latest failure point and then jump to following
+           two-byte relative address.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  pop_failure_jump,
+
+        /* Change to pop_failure_jump if know won't have to backtrack to
+           match; otherwise change to jump.  This is used to jump
+           back to the beginning of a repeat.  If what follows this jump
+           clearly won't match what the repeat does, such that we can be
+           sure that there is no use backtracking out of repetitions
+           already matched, then we change it to a pop_failure_jump.
+           Followed by two-byte address.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  maybe_pop_jump,
+
+        /* Jump to following two-byte address, and push a dummy failure
+           point. This failure point will be thrown away if an attempt
+           is made to use it for a failure.  A `+' construct makes this
+           before the first repeat.  Also used as an intermediary kind
+           of jump when compiling an alternative.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  dummy_failure_jump,
+
+       /* Push a dummy failure point and continue.  Used at the end of
+          alternatives.  */
+  push_dummy_failure,
+
+        /* Followed by two-byte relative address and two-byte number n.
+           After matching N times, jump to the address upon failure.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  succeed_n,
+
+        /* Followed by two-byte relative address, and two-byte number n.
+           Jump to the address N times, then fail.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  jump_n,
+
+        /* Set the following two-byte relative address to the
+           subsequent two-byte number.  The address *includes* the two
+           bytes of number.  */
+        /* ifdef MBS_SUPPORT, the size of address is 1.  */
+  set_number_at,
+
+  wordchar,    /* Matches any word-constituent character.  */
+  notwordchar, /* Matches any char that is not a word-constituent.  */
+
+  wordbeg,     /* Succeeds if at word beginning.  */
+  wordend,     /* Succeeds if at word end.  */
+
+  wordbound,   /* Succeeds if at a word boundary.  */
+  notwordbound /* Succeeds if not at a word boundary.  */
+
+# ifdef emacs
+  ,before_dot, /* Succeeds if before point.  */
+  at_dot,      /* Succeeds if at point.  */
+  after_dot,   /* Succeeds if after point.  */
+
+       /* Matches any character whose syntax is specified.  Followed by
+           a byte which contains a syntax code, e.g., Sword.  */
+  syntaxspec,
+
+       /* Matches any character whose syntax is not that specified.  */
+  notsyntaxspec
+# endif /* emacs */
+} re_opcode_t;
+#endif /* not INSIDE_RECURSION */
+\f
+
+#ifdef BYTE
+# define CHAR_T char
+# define UCHAR_T unsigned char
+# define COMPILED_BUFFER_VAR bufp->buffer
+# define OFFSET_ADDRESS_SIZE 2
+# define PREFIX(name) byte_##name
+# define ARG_PREFIX(name) name
+# define PUT_CHAR(c) putchar (c)
+#else
+# ifdef WCHAR
+#  define CHAR_T wchar_t
+#  define UCHAR_T wchar_t
+#  define COMPILED_BUFFER_VAR wc_buffer
+#  define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */
+#  define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_T)+1)
+#  define PREFIX(name) wcs_##name
+#  define ARG_PREFIX(name) c##name
+/* Should we use wide stream??  */
+#  define PUT_CHAR(c) printf ("%C", c);
+#  define TRUE 1
+#  define FALSE 0
+# else
+#  ifdef MBS_SUPPORT
+#   define WCHAR
+#   define INSIDE_RECURSION
+#   include "regex.c"
+#   undef INSIDE_RECURSION
+#  endif
+#  define BYTE
+#  define INSIDE_RECURSION
+#  include "regex.c"
+#  undef INSIDE_RECURSION
+# endif
+#endif
+
+#ifdef INSIDE_RECURSION
+/* Common operations on the compiled pattern.  */
+
+/* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
+/* ifdef MBS_SUPPORT, we store NUMBER in 1 element.  */
+
+# ifdef WCHAR
+#  define STORE_NUMBER(destination, number)                            \
+  do {                                                                 \
+    *(destination) = (UCHAR_T)(number);                                \
+  } while (0)
+# else /* BYTE */
+#  define STORE_NUMBER(destination, number)                            \
+  do {                                                                 \
+    (destination)[0] = (number) & 0377;                                        \
+    (destination)[1] = (number) >> 8;                                  \
+  } while (0)
+# endif /* WCHAR */
+
+/* Same as STORE_NUMBER, except increment DESTINATION to
+   the byte after where the number is stored.  Therefore, DESTINATION
+   must be an lvalue.  */
+/* ifdef MBS_SUPPORT, we store NUMBER in 1 element.  */
+
+# define STORE_NUMBER_AND_INCR(destination, number)                    \
+  do {                                                                 \
+    STORE_NUMBER (destination, number);                                        \
+    (destination) += OFFSET_ADDRESS_SIZE;                              \
+  } while (0)
+
+/* Put into DESTINATION a number stored in two contiguous bytes starting
+   at SOURCE.  */
+/* ifdef MBS_SUPPORT, we store NUMBER in 1 element.  */
+
+# ifdef WCHAR
+#  define EXTRACT_NUMBER(destination, source)                          \
+  do {                                                                 \
+    (destination) = *(source);                                         \
+  } while (0)
+# else /* BYTE */
+#  define EXTRACT_NUMBER(destination, source)                          \
+  do {                                                                 \
+    (destination) = *(source) & 0377;                                  \
+    (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8;          \
+  } while (0)
+# endif
+
+# ifdef DEBUG
+static void PREFIX(extract_number) (int *dest, UCHAR_T *source);
+static void
+PREFIX(extract_number) (int *dest, UCHAR_T *source)
+{
+#  ifdef WCHAR
+  *dest = *source;
+#  else /* BYTE */
+  int temp = SIGN_EXTEND_CHAR (*(source + 1));
+  *dest = *source & 0377;
+  *dest += temp << 8;
+#  endif
+}
+
+#  ifndef EXTRACT_MACROS /* To debug the macros.  */
+#   undef EXTRACT_NUMBER
+#   define EXTRACT_NUMBER(dest, src) PREFIX(extract_number) (&dest, src)
+#  endif /* not EXTRACT_MACROS */
+
+# endif /* DEBUG */
+
+/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
+   SOURCE must be an lvalue.  */
+
+# define EXTRACT_NUMBER_AND_INCR(destination, source)                  \
+  do {                                                                 \
+    EXTRACT_NUMBER (destination, source);                              \
+    (source) += OFFSET_ADDRESS_SIZE;                                   \
+  } while (0)
+
+# ifdef DEBUG
+static void PREFIX(extract_number_and_incr) (int *destination,
+                                             UCHAR_T **source);
+static void
+PREFIX(extract_number_and_incr) (int *destination, UCHAR_T **source)
+{
+  PREFIX(extract_number) (destination, *source);
+  *source += OFFSET_ADDRESS_SIZE;
+}
+
+#  ifndef EXTRACT_MACROS
+#   undef EXTRACT_NUMBER_AND_INCR
+#   define EXTRACT_NUMBER_AND_INCR(dest, src) \
+  PREFIX(extract_number_and_incr) (&dest, &src)
+#  endif /* not EXTRACT_MACROS */
+
+# endif /* DEBUG */
+
+\f
+
+/* If DEBUG is defined, Regex prints many voluminous messages about what
+   it is doing (if the variable `debug' is nonzero).  If linked with the
+   main program in `iregex.c', you can enter patterns and strings
+   interactively.  And if linked with the main program in `main.c' and
+   the other test files, you can run the already-written tests.  */
+
+# ifdef DEBUG
+
+#  ifndef DEFINED_ONCE
+
+/* We use standard I/O for debugging.  */
+#   include <stdio.h>
+
+/* It is useful to test things that ``must'' be true when debugging.  */
+#   include <assert.h>
+
+static int debug;
+
+#   define DEBUG_STATEMENT(e) e
+#   define DEBUG_PRINT1(x) if (debug) printf (x)
+#   define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
+#   define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
+#   define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
+#  endif /* not DEFINED_ONCE */
+
+#  define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)                        \
+  if (debug) PREFIX(print_partial_compiled_pattern) (s, e)
+#  define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)               \
+  if (debug) PREFIX(print_double_string) (w, s1, sz1, s2, sz2)
+
+
+/* Print the fastmap in human-readable form.  */
+
+#  ifndef DEFINED_ONCE
+void
+print_fastmap (char *fastmap)
+{
+  unsigned was_a_range = 0;
+  unsigned i = 0;
+
+  while (i < (1 << BYTEWIDTH))
+    {
+      if (fastmap[i++])
+       {
+         was_a_range = 0;
+          putchar (i - 1);
+          while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
+            {
+              was_a_range = 1;
+              i++;
+            }
+         if (was_a_range)
+            {
+              printf ("-");
+              putchar (i - 1);
+            }
+        }
+    }
+  putchar ('\n');
+}
+#  endif /* not DEFINED_ONCE */
+
+
+/* Print a compiled pattern string in human-readable form, starting at
+   the START pointer into it and ending just before the pointer END.  */
+
+void
+PREFIX(print_partial_compiled_pattern) (UCHAR_T *start, UCHAR_T *end)
+{
+  int mcnt, mcnt2;
+  UCHAR_T *p1;
+  UCHAR_T *p = start;
+  UCHAR_T *pend = end;
+
+  if (start == NULL)
+    {
+      printf ("(null)\n");
+      return;
+    }
+
+  /* Loop over pattern commands.  */
+  while (p < pend)
+    {
+#  ifdef _LIBC
+      printf ("%td:\t", p - start);
+#  else
+      printf ("%ld:\t", (long int) (p - start));
+#  endif
+
+      switch ((re_opcode_t) *p++)
+       {
+        case no_op:
+          printf ("/no_op");
+          break;
+
+       case exactn:
+         mcnt = *p++;
+          printf ("/exactn/%d", mcnt);
+          do
+           {
+              putchar ('/');
+             PUT_CHAR (*p++);
+            }
+          while (--mcnt);
+          break;
+
+#  ifdef MBS_SUPPORT
+       case exactn_bin:
+         mcnt = *p++;
+         printf ("/exactn_bin/%d", mcnt);
+          do
+           {
+             printf("/%lx", (long int) *p++);
+            }
+          while (--mcnt);
+          break;
+#  endif /* MBS_SUPPORT */
+
+       case start_memory:
+          mcnt = *p++;
+          printf ("/start_memory/%d/%ld", mcnt, (long int) *p++);
+          break;
+
+       case stop_memory:
+          mcnt = *p++;
+         printf ("/stop_memory/%d/%ld", mcnt, (long int) *p++);
+          break;
+
+       case duplicate:
+         printf ("/duplicate/%ld", (long int) *p++);
+         break;
+
+       case anychar:
+         printf ("/anychar");
+         break;
+
+       case charset:
+        case charset_not:
+          {
+#  ifdef WCHAR
+           int i, length;
+           wchar_t *workp = p;
+           printf ("/charset [%s",
+                   (re_opcode_t) *(workp - 1) == charset_not ? "^" : "");
+           p += 5;
+           length = *workp++; /* the length of char_classes */
+           for (i=0 ; i<length ; i++)
+             printf("[:%lx:]", (long int) *p++);
+           length = *workp++; /* the length of collating_symbol */
+           for (i=0 ; i<length ;)
+             {
+               printf("[.");
+               while(*p != 0)
+                 PUT_CHAR((i++,*p++));
+               i++,p++;
+               printf(".]");
+             }
+           length = *workp++; /* the length of equivalence_class */
+           for (i=0 ; i<length ;)
+             {
+               printf("[=");
+               while(*p != 0)
+                 PUT_CHAR((i++,*p++));
+               i++,p++;
+               printf("=]");
+             }
+           length = *workp++; /* the length of char_range */
+           for (i=0 ; i<length ; i++)
+             {
+               wchar_t range_start = *p++;
+               wchar_t range_end = *p++;
+               printf("%C-%C", range_start, range_end);
+             }
+           length = *workp++; /* the length of char */
+           for (i=0 ; i<length ; i++)
+             printf("%C", *p++);
+           putchar (']');
+#  else
+            register int c, last = -100;
+           register int in_range = 0;
+
+           printf ("/charset [%s",
+                   (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
+
+            assert (p + *p < pend);
+
+            for (c = 0; c < 256; c++)
+             if (c / 8 < *p
+                 && (p[1 + (c/8)] & (1 << (c % 8))))
+               {
+                 /* Are we starting a range?  */
+                 if (last + 1 == c && ! in_range)
+                   {
+                     putchar ('-');
+                     in_range = 1;
+                   }
+                 /* Have we broken a range?  */
+                 else if (last + 1 != c && in_range)
+              {
+                     putchar (last);
+                     in_range = 0;
+                   }
+
+                 if (! in_range)
+                   putchar (c);
+
+                 last = c;
+              }
+
+           if (in_range)
+             putchar (last);
+
+           putchar (']');
+
+           p += 1 + *p;
+#  endif /* WCHAR */
+         }
+         break;
+
+       case begline:
+         printf ("/begline");
+          break;
+
+       case endline:
+          printf ("/endline");
+          break;
+
+       case on_failure_jump:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/on_failure_jump to %td", p + mcnt - start);
+#  else
+         printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start));
+#  endif
+          break;
+
+       case on_failure_keep_string_jump:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/on_failure_keep_string_jump to %td", p + mcnt - start);
+#  else
+         printf ("/on_failure_keep_string_jump to %ld",
+                 (long int) (p + mcnt - start));
+#  endif
+          break;
+
+       case dummy_failure_jump:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/dummy_failure_jump to %td", p + mcnt - start);
+#  else
+         printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start));
+#  endif
+          break;
+
+       case push_dummy_failure:
+          printf ("/push_dummy_failure");
+          break;
+
+        case maybe_pop_jump:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/maybe_pop_jump to %td", p + mcnt - start);
+#  else
+         printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start));
+#  endif
+         break;
+
+        case pop_failure_jump:
+         PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/pop_failure_jump to %td", p + mcnt - start);
+#  else
+         printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start));
+#  endif
+         break;
+
+        case jump_past_alt:
+         PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/jump_past_alt to %td", p + mcnt - start);
+#  else
+         printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start));
+#  endif
+         break;
+
+        case jump:
+         PREFIX(extract_number_and_incr) (&mcnt, &p);
+#  ifdef _LIBC
+         printf ("/jump to %td", p + mcnt - start);
+#  else
+         printf ("/jump to %ld", (long int) (p + mcnt - start));
+#  endif
+         break;
+
+        case succeed_n:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+         p1 = p + mcnt;
+          PREFIX(extract_number_and_incr) (&mcnt2, &p);
+#  ifdef _LIBC
+         printf ("/succeed_n to %td, %d times", p1 - start, mcnt2);
+#  else
+         printf ("/succeed_n to %ld, %d times",
+                 (long int) (p1 - start), mcnt2);
+#  endif
+          break;
+
+        case jump_n:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+         p1 = p + mcnt;
+          PREFIX(extract_number_and_incr) (&mcnt2, &p);
+         printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
+          break;
+
+        case set_number_at:
+          PREFIX(extract_number_and_incr) (&mcnt, &p);
+         p1 = p + mcnt;
+          PREFIX(extract_number_and_incr) (&mcnt2, &p);
+#  ifdef _LIBC
+         printf ("/set_number_at location %td to %d", p1 - start, mcnt2);
+#  else
+         printf ("/set_number_at location %ld to %d",
+                 (long int) (p1 - start), mcnt2);
+#  endif
+          break;
+
+        case wordbound:
+         printf ("/wordbound");
+         break;
+
+       case notwordbound:
+         printf ("/notwordbound");
+          break;
+
+       case wordbeg:
+         printf ("/wordbeg");
+         break;
+
+       case wordend:
+         printf ("/wordend");
+         break;
+
+#  ifdef emacs
+       case before_dot:
+         printf ("/before_dot");
+          break;
+
+       case at_dot:
+         printf ("/at_dot");
+          break;
+
+       case after_dot:
+         printf ("/after_dot");
+          break;
+
+       case syntaxspec:
+          printf ("/syntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+          break;
+
+       case notsyntaxspec:
+          printf ("/notsyntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+         break;
+#  endif /* emacs */
+
+       case wordchar:
+         printf ("/wordchar");
+          break;
+
+       case notwordchar:
+         printf ("/notwordchar");
+          break;
+
+       case begbuf:
+         printf ("/begbuf");
+          break;
+
+       case endbuf:
+         printf ("/endbuf");
+          break;
+
+        default:
+          printf ("?%ld", (long int) *(p-1));
+       }
+
+      putchar ('\n');
+    }
+
+#  ifdef _LIBC
+  printf ("%td:\tend of pattern.\n", p - start);
+#  else
+  printf ("%ld:\tend of pattern.\n", (long int) (p - start));
+#  endif
+}
+
+
+void
+PREFIX(print_compiled_pattern) (struct re_pattern_buffer *bufp)
+{
+  UCHAR_T *buffer = (UCHAR_T*) bufp->buffer;
+
+  PREFIX(print_partial_compiled_pattern) (buffer, buffer
+                                 + bufp->used / sizeof(UCHAR_T));
+  printf ("%ld bytes used/%ld bytes allocated.\n",
+         bufp->used, bufp->allocated);
+
+  if (bufp->fastmap_accurate && bufp->fastmap)
+    {
+      printf ("fastmap: ");
+      print_fastmap (bufp->fastmap);
+    }
+
+#  ifdef _LIBC
+  printf ("re_nsub: %Zd\t", bufp->re_nsub);
+#  else
+  printf ("re_nsub: %ld\t", (long int) bufp->re_nsub);
+#  endif
+  printf ("regs_alloc: %d\t", bufp->regs_allocated);
+  printf ("can_be_null: %d\t", bufp->can_be_null);
+  printf ("newline_anchor: %d\n", bufp->newline_anchor);
+  printf ("no_sub: %d\t", bufp->no_sub);
+  printf ("not_bol: %d\t", bufp->not_bol);
+  printf ("not_eol: %d\t", bufp->not_eol);
+  printf ("syntax: %lx\n", bufp->syntax);
+  /* Perhaps we should print the translate table?  */
+}
+
+
+void
+PREFIX(print_double_string) (const CHAR_T *where, const CHAR_T *string1,
+                             int size1, const CHAR_T *string2, int size2)
+{
+  int this_char;
+
+  if (where == NULL)
+    printf ("(null)");
+  else
+    {
+      int cnt;
+
+      if (FIRST_STRING_P (where))
+        {
+          for (this_char = where - string1; this_char < size1; this_char++)
+           PUT_CHAR (string1[this_char]);
+
+          where = string2;
+        }
+
+      cnt = 0;
+      for (this_char = where - string2; this_char < size2; this_char++)
+       {
+         PUT_CHAR (string2[this_char]);
+         if (++cnt > 100)
+           {
+             fputs ("...", stdout);
+             break;
+           }
+       }
+    }
+}
+
+#  ifndef DEFINED_ONCE
+void
+printchar (int c)
+{
+  putc (c, stderr);
+}
+#  endif
+
+# else /* not DEBUG */
+
+#  ifndef DEFINED_ONCE
+#   undef assert
+#   define assert(e)
+
+#   define DEBUG_STATEMENT(e)
+#   define DEBUG_PRINT1(x)
+#   define DEBUG_PRINT2(x1, x2)
+#   define DEBUG_PRINT3(x1, x2, x3)
+#   define DEBUG_PRINT4(x1, x2, x3, x4)
+#  endif /* not DEFINED_ONCE */
+#  define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
+#  define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
+
+# endif /* not DEBUG */
+
+\f
+
+# ifdef WCHAR
+/* This  convert a multibyte string to a wide character string.
+   And write their correspondances to offset_buffer(see below)
+   and write whether each wchar_t is binary data to is_binary.
+   This assume invalid multibyte sequences as binary data.
+   We assume offset_buffer and is_binary is already allocated
+   enough space.  */
+
+static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src,
+                                 size_t len, int *offset_buffer,
+                                 char *is_binary);
+static size_t
+convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len,
+                    int *offset_buffer, char *is_binary)
+     /* It hold correspondances between src(char string) and
+       dest(wchar_t string) for optimization.
+       e.g. src  = "xxxyzz"
+             dest = {'X', 'Y', 'Z'}
+             (each "xxx", "y" and "zz" represent one multibyte character
+              corresponding to 'X', 'Y' and 'Z'.)
+         offset_buffer = {0, 0+3("xxx"), 0+3+1("y"), 0+3+1+2("zz")}
+                       = {0, 3, 4, 6}
+     */
+{
+  wchar_t *pdest = dest;
+  const unsigned char *psrc = src;
+  size_t wc_count = 0;
+
+  mbstate_t mbs;
+  int i, consumed;
+  size_t mb_remain = len;
+  size_t mb_count = 0;
+
+  /* Initialize the conversion state.  */
+  memset (&mbs, 0, sizeof (mbstate_t));
+
+  offset_buffer[0] = 0;
+  for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed,
+        psrc += consumed)
+    {
+#ifdef _LIBC
+      consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs);
+#else
+      consumed = mbrtowc (pdest, psrc, mb_remain, &mbs);
+#endif
+
+      if (consumed <= 0)
+       /* failed to convert. maybe src contains binary data.
+          So we consume 1 byte manualy.  */
+       {
+         *pdest = *psrc;
+         consumed = 1;
+         is_binary[wc_count] = TRUE;
+       }
+      else
+       is_binary[wc_count] = FALSE;
+      /* In sjis encoding, we use yen sign as escape character in
+        place of reverse solidus. So we convert 0x5c(yen sign in
+        sjis) to not 0xa5(yen sign in UCS2) but 0x5c(reverse
+        solidus in UCS2).  */
+      if (consumed == 1 && (int) *psrc == 0x5c && (int) *pdest == 0xa5)
+       *pdest = (wchar_t) *psrc;
+
+      offset_buffer[wc_count + 1] = mb_count += consumed;
+    }
+
+  /* Fill remain of the buffer with sentinel.  */
+  for (i = wc_count + 1 ; i <= len ; i++)
+    offset_buffer[i] = mb_count + 1;
+
+  return wc_count;
+}
+
+# endif /* WCHAR */
+
+#else /* not INSIDE_RECURSION */
+
+/* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
+   also be assigned to arbitrarily: each pattern buffer stores its own
+   syntax, so it can be changed between regex compilations.  */
+/* This has no initializer because initialized variables in Emacs
+   become read-only after dumping.  */
+reg_syntax_t re_syntax_options;
+
+
+/* Specify the precise syntax of regexps for compilation.  This provides
+   for compatibility for various utilities which historically have
+   different, incompatible syntaxes.
+
+   The argument SYNTAX is a bit mask comprised of the various bits
+   defined in regex.h.  We return the old syntax.  */
+
+reg_syntax_t
+re_set_syntax (reg_syntax_t syntax)
+{
+  reg_syntax_t ret = re_syntax_options;
+
+  re_syntax_options = syntax;
+# ifdef DEBUG
+  if (syntax & RE_DEBUG)
+    debug = 1;
+  else if (debug) /* was on but now is not */
+    debug = 0;
+# endif /* DEBUG */
+  return ret;
+}
+# ifdef _LIBC
+weak_alias (__re_set_syntax, re_set_syntax)
+# endif
+\f
+/* This table gives an error message for each of the error codes listed
+   in regex.h.  Obviously the order here has to be same as there.
+   POSIX doesn't require that we do anything for REG_NOERROR,
+   but why not be nice?  */
+
+static const char *re_error_msgid[] =
+  {
+    gettext_noop ("Success"),  /* REG_NOERROR */
+    gettext_noop ("No match"), /* REG_NOMATCH */
+    gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
+    gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
+    gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
+    gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
+    gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
+    gettext_noop ("Unmatched [ or [^"),        /* REG_EBRACK */
+    gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
+    gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
+    gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
+    gettext_noop ("Invalid range end"),        /* REG_ERANGE */
+    gettext_noop ("Memory exhausted"), /* REG_ESPACE */
+    gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
+    gettext_noop ("Premature end of regular expression"), /* REG_EEND */
+    gettext_noop ("Regular expression too big"), /* REG_ESIZE */
+    gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
+  };
+\f
+#endif /* INSIDE_RECURSION */
+
+#ifndef DEFINED_ONCE
+/* Avoiding alloca during matching, to placate r_alloc.  */
+
+/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
+   searching and matching functions should not call alloca.  On some
+   systems, alloca is implemented in terms of malloc, and if we're
+   using the relocating allocator routines, then malloc could cause a
+   relocation, which might (if the strings being searched are in the
+   ralloc heap) shift the data out from underneath the regexp
+   routines.
+
+   Here's another reason to avoid allocation: Emacs
+   processes input from X in a signal handler; processing X input may
+   call malloc; if input arrives while a matching routine is calling
+   malloc, then we're scrod.  But Emacs can't just block input while
+   calling matching routines; then we don't notice interrupts when
+   they come in.  So, Emacs blocks input around all regexp calls
+   except the matching calls, which it leaves unprotected, in the
+   faith that they will not malloc.  */
+
+/* Normally, this is fine.  */
+# define MATCH_MAY_ALLOCATE
+
+/* When using GNU C, we are not REALLY using the C alloca, no matter
+   what config.h may say.  So don't take precautions for it.  */
+# ifdef __GNUC__
+#  undef C_ALLOCA
+# endif
+
+/* The match routines may not allocate if (1) they would do it with malloc
+   and (2) it's not safe for them to use malloc.
+   Note that if REL_ALLOC is defined, matching would not use malloc for the
+   failure stack, but we would still use it for the register vectors;
+   so REL_ALLOC should not affect this.  */
+# if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
+#  undef MATCH_MAY_ALLOCATE
+# endif
+#endif /* not DEFINED_ONCE */
+\f
+#ifdef INSIDE_RECURSION
+/* Failure stack declarations and macros; both re_compile_fastmap and
+   re_match_2 use a failure stack.  These have to be macros because of
+   REGEX_ALLOCATE_STACK.  */
+
+
+/* Number of failure points for which to initially allocate space
+   when matching.  If this number is exceeded, we allocate more
+   space, so it is not a hard limit.  */
+# ifndef INIT_FAILURE_ALLOC
+#  define INIT_FAILURE_ALLOC 5
+# endif
+
+/* Roughly the maximum number of failure points on the stack.  Would be
+   exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
+   This is a variable only so users of regex can assign to it; we never
+   change it ourselves.  */
+
+# ifdef INT_IS_16BIT
+
+#  ifndef DEFINED_ONCE
+#   if defined MATCH_MAY_ALLOCATE
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+long int re_max_failures = 4000;
+#   else
+long int re_max_failures = 2000;
+#   endif
+#  endif
+
+union PREFIX(fail_stack_elt)
+{
+  UCHAR_T *pointer;
+  long int integer;
+};
+
+typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t);
+
+typedef struct
+{
+  PREFIX(fail_stack_elt_t) *stack;
+  unsigned long int size;
+  unsigned long int avail;             /* Offset of next open position.  */
+} PREFIX(fail_stack_type);
+
+# else /* not INT_IS_16BIT */
+
+#  ifndef DEFINED_ONCE
+#   if defined MATCH_MAY_ALLOCATE
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+int re_max_failures = 4000;
+#   else
+int re_max_failures = 2000;
+#   endif
+#  endif
+
+union PREFIX(fail_stack_elt)
+{
+  UCHAR_T *pointer;
+  int integer;
+};
+
+typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t);
+
+typedef struct
+{
+  PREFIX(fail_stack_elt_t) *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} PREFIX(fail_stack_type);
+
+# endif /* INT_IS_16BIT */
+
+# ifndef DEFINED_ONCE
+#  define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
+#  define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
+#  define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
+# endif
+
+
+/* Define macros to initialize and free the failure stack.
+   Do `return -2' if the alloc fails.  */
+
+# ifdef MATCH_MAY_ALLOCATE
+#  define INIT_FAIL_STACK()                                            \
+  do {                                                                 \
+    fail_stack.stack = (PREFIX(fail_stack_elt_t) *)            \
+      REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (PREFIX(fail_stack_elt_t))); \
+                                                                       \
+    if (fail_stack.stack == NULL)                              \
+      return -2;                                                       \
+                                                                       \
+    fail_stack.size = INIT_FAILURE_ALLOC;                      \
+    fail_stack.avail = 0;                                      \
+  } while (0)
+
+#  define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
+# else
+#  define INIT_FAIL_STACK()                                            \
+  do {                                                                 \
+    fail_stack.avail = 0;                                      \
+  } while (0)
+
+#  define RESET_FAIL_STACK()
+# endif
+
+
+/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
+
+   Return 1 if succeeds, and 0 if either ran out of memory
+   allocating space for it or it was already too large.
+
+   REGEX_REALLOCATE_STACK requires `destination' be declared.   */
+
+# define DOUBLE_FAIL_STACK(fail_stack)                                 \
+  ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS)        \
+   ? 0                                                                 \
+   : ((fail_stack).stack = (PREFIX(fail_stack_elt_t) *)                        \
+        REGEX_REALLOCATE_STACK ((fail_stack).stack,                    \
+          (fail_stack).size * sizeof (PREFIX(fail_stack_elt_t)),       \
+          ((fail_stack).size << 1) * sizeof (PREFIX(fail_stack_elt_t))),\
+                                                                       \
+      (fail_stack).stack == NULL                                       \
+      ? 0                                                              \
+      : ((fail_stack).size <<= 1,                                      \
+         1)))
+
+
+/* Push pointer POINTER on FAIL_STACK.
+   Return 1 if was able to do so and 0 if ran out of memory allocating
+   space to do so.  */
+# define PUSH_PATTERN_OP(POINTER, FAIL_STACK)                          \
+  ((FAIL_STACK_FULL ()                                                 \
+    && !DOUBLE_FAIL_STACK (FAIL_STACK))                                        \
+   ? 0                                                                 \
+   : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,      \
+      1))
+
+/* Push a pointer value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+# define PUSH_FAILURE_POINTER(item)                                    \
+  fail_stack.stack[fail_stack.avail++].pointer = (UCHAR_T *) (item)
+
+/* This pushes an integer-valued item onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+# define PUSH_FAILURE_INT(item)                                        \
+  fail_stack.stack[fail_stack.avail++].integer = (item)
+
+/* Push a fail_stack_elt_t value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+# define PUSH_FAILURE_ELT(item)                                        \
+  fail_stack.stack[fail_stack.avail++] =  (item)
+
+/* These three POP... operations complement the three PUSH... operations.
+   All assume that `fail_stack' is nonempty.  */
+# define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
+# define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
+# define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
+
+/* Used to omit pushing failure point id's when we're not debugging.  */
+# ifdef DEBUG
+#  define DEBUG_PUSH PUSH_FAILURE_INT
+#  define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
+# else
+#  define DEBUG_PUSH(item)
+#  define DEBUG_POP(item_addr)
+# endif
+
+
+/* Push the information about the state we will need
+   if we ever fail back to it.
+
+   Requires variables fail_stack, regstart, regend, reg_info, and
+   num_regs_pushed be declared.  DOUBLE_FAIL_STACK requires `destination'
+   be declared.
+
+   Does `return FAILURE_CODE' if runs out of memory.  */
+
+# define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \
+  do {                                                                 \
+    char *destination;                                                 \
+    /* Must be int, so when we don't save any registers, the arithmetic        \
+       of 0 + -1 isn't done as unsigned.  */                           \
+    /* Can't be int, since there is not a shred of a guarantee that int        \
+       is wide enough to hold a value of something to which pointer can        \
+       be assigned */                                                  \
+    active_reg_t this_reg;                                             \
+                                                                       \
+    DEBUG_STATEMENT (failure_id++);                                    \
+    DEBUG_STATEMENT (nfailure_points_pushed++);                                \
+    DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);          \
+    DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
+    DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
+                                                                       \
+    DEBUG_PRINT2 ("  slots needed: %ld\n", NUM_FAILURE_ITEMS);         \
+    DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);      \
+                                                                       \
+    /* Ensure we have enough space allocated for what we will push.  */        \
+    while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)                  \
+      {                                                                        \
+        if (!DOUBLE_FAIL_STACK (fail_stack))                           \
+          return failure_code;                                         \
+                                                                       \
+        DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",             \
+                      (fail_stack).size);                              \
+        DEBUG_PRINT2 ("  slots available: %d\n", REMAINING_AVAIL_SLOTS);\
+      }                                                                        \
+                                                                       \
+    /* Push the info, starting with the registers.  */                 \
+    DEBUG_PRINT1 ("\n");                                               \
+                                                                       \
+    if (1)                                                             \
+      for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
+          this_reg++)                                                  \
+       {                                                               \
+         DEBUG_PRINT2 ("  Pushing reg: %lu\n", this_reg);              \
+         DEBUG_STATEMENT (num_regs_pushed++);                          \
+                                                                       \
+         DEBUG_PRINT2 ("    start: %p\n", regstart[this_reg]);         \
+         PUSH_FAILURE_POINTER (regstart[this_reg]);                    \
+                                                                       \
+         DEBUG_PRINT2 ("    end: %p\n", regend[this_reg]);             \
+         PUSH_FAILURE_POINTER (regend[this_reg]);                      \
+                                                                       \
+         DEBUG_PRINT2 ("    info: %p\n      ",                         \
+                       reg_info[this_reg].word.pointer);               \
+         DEBUG_PRINT2 (" match_null=%d",                               \
+                       REG_MATCH_NULL_STRING_P (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" matched_something=%d",                        \
+                       MATCHED_SOMETHING (reg_info[this_reg]));        \
+         DEBUG_PRINT2 (" ever_matched=%d",                             \
+                       EVER_MATCHED_SOMETHING (reg_info[this_reg]));   \
+         DEBUG_PRINT1 ("\n");                                          \
+         PUSH_FAILURE_ELT (reg_info[this_reg].word);                   \
+       }                                                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing  low active reg: %ld\n", lowest_active_reg);\
+    PUSH_FAILURE_INT (lowest_active_reg);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing high active reg: %ld\n", highest_active_reg);\
+    PUSH_FAILURE_INT (highest_active_reg);                             \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing pattern %p:\n", pattern_place);           \
+    DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);          \
+    PUSH_FAILURE_POINTER (pattern_place);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing string %p: `", string_place);             \
+    DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
+                                size2);                                \
+    DEBUG_PRINT1 ("'\n");                                              \
+    PUSH_FAILURE_POINTER (string_place);                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);           \
+    DEBUG_PUSH (failure_id);                                           \
+  } while (0)
+
+# ifndef DEFINED_ONCE
+/* This is the number of items that are pushed and popped on the stack
+   for each register.  */
+#  define NUM_REG_ITEMS  3
+
+/* Individual items aside from the registers.  */
+#  ifdef DEBUG
+#   define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
+#  else
+#   define NUM_NONREG_ITEMS 4
+#  endif
+
+/* We push at most this many items on the stack.  */
+/* We used to use (num_regs - 1), which is the number of registers
+   this regexp will save; but that was changed to 5
+   to avoid stack overflow for a regexp with lots of parens.  */
+#  define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
+
+/* We actually push this many items.  */
+#  define NUM_FAILURE_ITEMS                            \
+  (((0                                                 \
+     ? 0 : highest_active_reg - lowest_active_reg + 1) \
+    * NUM_REG_ITEMS)                                   \
+   + NUM_NONREG_ITEMS)
+
+/* How many items can still be added to the stack without overflowing it.  */
+#  define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
+# endif /* not DEFINED_ONCE */
+
+
+/* Pops what PUSH_FAIL_STACK pushes.
+
+   We restore into the parameters, all of which should be lvalues:
+     STR -- the saved data position.
+     PAT -- the saved pattern position.
+     LOW_REG, HIGH_REG -- the highest and lowest active registers.
+     REGSTART, REGEND -- arrays of string positions.
+     REG_INFO -- array of information about each subexpression.
+
+   Also assumes the variables `fail_stack' and (if debugging), `bufp',
+   `pend', `string1', `size1', `string2', and `size2'.  */
+# define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
+{                                                                      \
+  DEBUG_STATEMENT (unsigned failure_id;)                               \
+  active_reg_t this_reg;                                               \
+  const UCHAR_T *string_temp;                                          \
+                                                                       \
+  assert (!FAIL_STACK_EMPTY ());                                       \
+                                                                       \
+  /* Remove failure points and point to how many regs pushed.  */      \
+  DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");                               \
+  DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);   \
+  DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);    \
+                                                                       \
+  assert (fail_stack.avail >= NUM_NONREG_ITEMS);                       \
+                                                                       \
+  DEBUG_POP (&failure_id);                                             \
+  DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);             \
+                                                                       \
+  /* If the saved string location is NULL, it came from an             \
+     on_failure_keep_string_jump opcode, and we want to throw away the \
+     saved NULL, thus retaining our current position in the string.  */        \
+  string_temp = POP_FAILURE_POINTER ();                                        \
+  if (string_temp != NULL)                                             \
+    str = (const CHAR_T *) string_temp;                                        \
+                                                                       \
+  DEBUG_PRINT2 ("  Popping string %p: `", str);                                \
+  DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);     \
+  DEBUG_PRINT1 ("'\n");                                                        \
+                                                                       \
+  pat = (UCHAR_T *) POP_FAILURE_POINTER ();                            \
+  DEBUG_PRINT2 ("  Popping pattern %p:\n", pat);                       \
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);                      \
+                                                                       \
+  /* Restore register info.  */                                                \
+  high_reg = (active_reg_t) POP_FAILURE_INT ();                                \
+  DEBUG_PRINT2 ("  Popping high active reg: %ld\n", high_reg);         \
+                                                                       \
+  low_reg = (active_reg_t) POP_FAILURE_INT ();                         \
+  DEBUG_PRINT2 ("  Popping  low active reg: %ld\n", low_reg);          \
+                                                                       \
+  if (1)                                                               \
+    for (this_reg = high_reg; this_reg >= low_reg; this_reg--)         \
+      {                                                                        \
+       DEBUG_PRINT2 ("    Popping reg: %ld\n", this_reg);              \
+                                                                       \
+       reg_info[this_reg].word = POP_FAILURE_ELT ();                   \
+       DEBUG_PRINT2 ("      info: %p\n",                               \
+                     reg_info[this_reg].word.pointer);                 \
+                                                                       \
+       regend[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER ();     \
+       DEBUG_PRINT2 ("      end: %p\n", regend[this_reg]);             \
+                                                                       \
+       regstart[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER ();   \
+       DEBUG_PRINT2 ("      start: %p\n", regstart[this_reg]);         \
+      }                                                                        \
+  else                                                                 \
+    {                                                                  \
+      for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
+       {                                                               \
+         reg_info[this_reg].word.integer = 0;                          \
+         regend[this_reg] = 0;                                         \
+         regstart[this_reg] = 0;                                       \
+       }                                                               \
+      highest_active_reg = high_reg;                                   \
+    }                                                                  \
+                                                                       \
+  set_regs_matched_done = 0;                                           \
+  DEBUG_STATEMENT (nfailure_points_popped++);                          \
+} /* POP_FAILURE_POINT */
+\f
+/* Structure for per-register (a.k.a. per-group) information.
+   Other register information, such as the
+   starting and ending positions (which are addresses), and the list of
+   inner groups (which is a bits list) are maintained in separate
+   variables.
+
+   We are making a (strictly speaking) nonportable assumption here: that
+   the compiler will pack our bit fields into something that fits into
+   the type of `word', i.e., is something that fits into one item on the
+   failure stack.  */
+
+
+/* Declarations and macros for re_match_2.  */
+
+typedef union
+{
+  PREFIX(fail_stack_elt_t) word;
+  struct
+  {
+      /* This field is one if this group can match the empty string,
+         zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
+# define MATCH_NULL_UNSET_VALUE 3
+    unsigned match_null_string_p : 2;
+    unsigned is_active : 1;
+    unsigned matched_something : 1;
+    unsigned ever_matched_something : 1;
+  } bits;
+} PREFIX(register_info_type);
+
+# ifndef DEFINED_ONCE
+#  define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
+#  define IS_ACTIVE(R)  ((R).bits.is_active)
+#  define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
+#  define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
+
+
+/* Call this when have matched a real character; it sets `matched' flags
+   for the subexpressions which we are currently inside.  Also records
+   that those subexprs have matched.  */
+#  define SET_REGS_MATCHED()                                           \
+  do                                                                   \
+    {                                                                  \
+      if (!set_regs_matched_done)                                      \
+       {                                                               \
+         active_reg_t r;                                               \
+         set_regs_matched_done = 1;                                    \
+         for (r = lowest_active_reg; r <= highest_active_reg; r++)     \
+           {                                                           \
+             MATCHED_SOMETHING (reg_info[r])                           \
+               = EVER_MATCHED_SOMETHING (reg_info[r])                  \
+               = 1;                                                    \
+           }                                                           \
+       }                                                               \
+    }                                                                  \
+  while (0)
+# endif /* not DEFINED_ONCE */
+
+/* Registers are set to a sentinel when they haven't yet matched.  */
+static CHAR_T PREFIX(reg_unset_dummy);
+# define REG_UNSET_VALUE (&PREFIX(reg_unset_dummy))
+# define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
+
+/* Subroutine declarations and macros for regex_compile.  */
+static void PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg);
+static void PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc,
+                               int arg1, int arg2);
+static void PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc,
+                                int arg, UCHAR_T *end);
+static void PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc,
+                                int arg1, int arg2, UCHAR_T *end);
+static boolean PREFIX(at_begline_loc_p) (const CHAR_T *pattern,
+                                         const CHAR_T *p,
+                                         reg_syntax_t syntax);
+static boolean PREFIX(at_endline_loc_p) (const CHAR_T *p,
+                                         const CHAR_T *pend,
+                                         reg_syntax_t syntax);
+# ifdef WCHAR
+static reg_errcode_t wcs_compile_range (CHAR_T range_start,
+                                        const CHAR_T **p_ptr,
+                                        const CHAR_T *pend,
+                                        char *translate,
+                                        reg_syntax_t syntax,
+                                        UCHAR_T *b,
+                                        CHAR_T *char_set);
+static void insert_space (int num, CHAR_T *loc, CHAR_T *end);
+# else /* BYTE */
+static reg_errcode_t byte_compile_range (unsigned int range_start,
+                                         const char **p_ptr,
+                                         const char *pend,
+                                         char *translate,
+                                         reg_syntax_t syntax,
+                                         unsigned char *b);
+# endif /* WCHAR */
+
+/* Fetch the next character in the uncompiled pattern---translating it
+   if necessary.  Also cast from a signed character in the constant
+   string passed to us by the user to an unsigned char that we can use
+   as an array index (in, e.g., `translate').  */
+/* ifdef MBS_SUPPORT, we translate only if character <= 0xff,
+   because it is impossible to allocate 4GB array for some encodings
+   which have 4 byte character_set like UCS4.  */
+# ifndef PATFETCH
+#  ifdef WCHAR
+#   define PATFETCH(c)                                                 \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (UCHAR_T) *p++;                                                        \
+    if (translate && (c <= 0xff)) c = (UCHAR_T) translate[c];          \
+  } while (0)
+#  else /* BYTE */
+#   define PATFETCH(c)                                                 \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (unsigned char) *p++;                                          \
+    if (translate) c = (unsigned char) translate[c];                   \
+  } while (0)
+#  endif /* WCHAR */
+# endif
+
+/* Fetch the next character in the uncompiled pattern, with no
+   translation.  */
+# define PATFETCH_RAW(c)                                               \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (UCHAR_T) *p++;                                                \
+  } while (0)
+
+/* Go backwards one character in the pattern.  */
+# define PATUNFETCH p--
+
+
+/* If `translate' is non-null, return translate[D], else just D.  We
+   cast the subscript to translate because some data is declared as
+   `char *', to avoid warnings when a string constant is passed.  But
+   when we use a character as a subscript we must make it unsigned.  */
+/* ifdef MBS_SUPPORT, we translate only if character <= 0xff,
+   because it is impossible to allocate 4GB array for some encodings
+   which have 4 byte character_set like UCS4.  */
+
+# ifndef TRANSLATE
+#  ifdef WCHAR
+#   define TRANSLATE(d) \
+  ((translate && ((UCHAR_T) (d)) <= 0xff) \
+   ? (char) translate[(unsigned char) (d)] : (d))
+# else /* BYTE */
+#   define TRANSLATE(d) \
+  (translate ? (char) translate[(unsigned char) (d)] : (char) (d))
+#  endif /* WCHAR */
+# endif
+
+
+/* Macros for outputting the compiled pattern into `buffer'.  */
+
+/* If the buffer isn't allocated when it comes in, use this.  */
+# define INIT_BUF_SIZE  (32 * sizeof(UCHAR_T))
+
+/* Make sure we have at least N more bytes of space in buffer.  */
+# ifdef WCHAR
+#  define GET_BUFFER_SPACE(n)                                          \
+    while (((unsigned long)b - (unsigned long)COMPILED_BUFFER_VAR      \
+            + (n)*sizeof(CHAR_T)) > bufp->allocated)                   \
+      EXTEND_BUFFER ()
+# else /* BYTE */
+#  define GET_BUFFER_SPACE(n)                                          \
+    while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \
+      EXTEND_BUFFER ()
+# endif /* WCHAR */
+
+/* Make sure we have one more byte of buffer space and then add C to it.  */
+# define BUF_PUSH(c)                                                   \
+  do {                                                                 \
+    GET_BUFFER_SPACE (1);                                              \
+    *b++ = (UCHAR_T) (c);                                              \
+  } while (0)
+
+
+/* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
+# define BUF_PUSH_2(c1, c2)                                            \
+  do {                                                                 \
+    GET_BUFFER_SPACE (2);                                              \
+    *b++ = (UCHAR_T) (c1);                                             \
+    *b++ = (UCHAR_T) (c2);                                             \
+  } while (0)
+
+
+/* As with BUF_PUSH_2, except for three bytes.  */
+# define BUF_PUSH_3(c1, c2, c3)                                                \
+  do {                                                                 \
+    GET_BUFFER_SPACE (3);                                              \
+    *b++ = (UCHAR_T) (c1);                                             \
+    *b++ = (UCHAR_T) (c2);                                             \
+    *b++ = (UCHAR_T) (c3);                                             \
+  } while (0)
+
+/* Store a jump with opcode OP at LOC to location TO.  We store a
+   relative address offset by the three bytes the jump itself occupies.  */
+# define STORE_JUMP(op, loc, to) \
+ PREFIX(store_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)))
+
+/* Likewise, for a two-argument jump.  */
+# define STORE_JUMP2(op, loc, to, arg) \
+  PREFIX(store_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), arg)
+
+/* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
+# define INSERT_JUMP(op, loc, to) \
+  PREFIX(insert_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), b)
+
+/* Like `STORE_JUMP2', but for inserting.  Assume `b' is the buffer end.  */
+# define INSERT_JUMP2(op, loc, to, arg) \
+  PREFIX(insert_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)),\
+             arg, b)
+
+/* This is not an arbitrary limit: the arguments which represent offsets
+   into the pattern are two bytes long.  So if 2^16 bytes turns out to
+   be too small, many things would have to change.  */
+/* Any other compiler which, like MSC, has allocation limit below 2^16
+   bytes will have to use approach similar to what was done below for
+   MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
+   reallocating to 0 bytes.  Such thing is not going to work too well.
+   You have been warned!!  */
+# ifndef DEFINED_ONCE
+#  if defined _MSC_VER  && !defined WIN32
+/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
+   The REALLOC define eliminates a flurry of conversion warnings,
+   but is not required. */
+#   define MAX_BUF_SIZE  65500L
+#   define REALLOC(p,s) realloc ((p), (size_t) (s))
+#  else
+#   define MAX_BUF_SIZE (1L << 16)
+#   define REALLOC(p,s) realloc ((p), (s))
+#  endif
+
+/* Extend the buffer by twice its current size via realloc and
+   reset the pointers that pointed into the old block to point to the
+   correct places in the new one.  If extending the buffer results in it
+   being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
+#  if __BOUNDED_POINTERS__
+#   define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
+#   define MOVE_BUFFER_POINTER(P) \
+  (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
+#   define ELSE_EXTEND_BUFFER_HIGH_BOUND       \
+  else                                         \
+    {                                          \
+      SET_HIGH_BOUND (b);                      \
+      SET_HIGH_BOUND (begalt);                 \
+      if (fixup_alt_jump)                      \
+       SET_HIGH_BOUND (fixup_alt_jump);        \
+      if (laststart)                           \
+       SET_HIGH_BOUND (laststart);             \
+      if (pending_exact)                       \
+       SET_HIGH_BOUND (pending_exact);         \
+    }
+#  else
+#   define MOVE_BUFFER_POINTER(P) (P) += incr
+#   define ELSE_EXTEND_BUFFER_HIGH_BOUND
+#  endif
+# endif /* not DEFINED_ONCE */
+
+# ifdef WCHAR
+#  define EXTEND_BUFFER()                                              \
+  do {                                                                 \
+    UCHAR_T *old_buffer = COMPILED_BUFFER_VAR;                         \
+    int wchar_count;                                                   \
+    if (bufp->allocated + sizeof(UCHAR_T) > MAX_BUF_SIZE)              \
+      return REG_ESIZE;                                                        \
+    bufp->allocated <<= 1;                                             \
+    if (bufp->allocated > MAX_BUF_SIZE)                                        \
+      bufp->allocated = MAX_BUF_SIZE;                                  \
+    /* How many characters the new buffer can have?  */                        \
+    wchar_count = bufp->allocated / sizeof(UCHAR_T);                   \
+    if (wchar_count == 0) wchar_count = 1;                             \
+    /* Truncate the buffer to CHAR_T align.  */                        \
+    bufp->allocated = wchar_count * sizeof(UCHAR_T);                   \
+    RETALLOC (COMPILED_BUFFER_VAR, wchar_count, UCHAR_T);              \
+    bufp->buffer = (char*)COMPILED_BUFFER_VAR;                         \
+    if (COMPILED_BUFFER_VAR == NULL)                                   \
+      return REG_ESPACE;                                               \
+    /* If the buffer moved, move all the pointers into it.  */         \
+    if (old_buffer != COMPILED_BUFFER_VAR)                             \
+      {                                                                        \
+       int incr = COMPILED_BUFFER_VAR - old_buffer;                    \
+       MOVE_BUFFER_POINTER (b);                                        \
+       MOVE_BUFFER_POINTER (begalt);                                   \
+       if (fixup_alt_jump)                                             \
+         MOVE_BUFFER_POINTER (fixup_alt_jump);                         \
+       if (laststart)                                                  \
+         MOVE_BUFFER_POINTER (laststart);                              \
+       if (pending_exact)                                              \
+         MOVE_BUFFER_POINTER (pending_exact);                          \
+      }                                                                        \
+    ELSE_EXTEND_BUFFER_HIGH_BOUND                                      \
+  } while (0)
+# else /* BYTE */
+#  define EXTEND_BUFFER()                                              \
+  do {                                                                 \
+    UCHAR_T *old_buffer = COMPILED_BUFFER_VAR;                         \
+    if (bufp->allocated == MAX_BUF_SIZE)                               \
+      return REG_ESIZE;                                                        \
+    bufp->allocated <<= 1;                                             \
+    if (bufp->allocated > MAX_BUF_SIZE)                                        \
+      bufp->allocated = MAX_BUF_SIZE;                                  \
+    bufp->buffer = (UCHAR_T *) REALLOC (COMPILED_BUFFER_VAR,           \
+                                               bufp->allocated);       \
+    if (COMPILED_BUFFER_VAR == NULL)                                   \
+      return REG_ESPACE;                                               \
+    /* If the buffer moved, move all the pointers into it.  */         \
+    if (old_buffer != COMPILED_BUFFER_VAR)                             \
+      {                                                                        \
+       int incr = COMPILED_BUFFER_VAR - old_buffer;                    \
+       MOVE_BUFFER_POINTER (b);                                        \
+       MOVE_BUFFER_POINTER (begalt);                                   \
+       if (fixup_alt_jump)                                             \
+         MOVE_BUFFER_POINTER (fixup_alt_jump);                         \
+       if (laststart)                                                  \
+         MOVE_BUFFER_POINTER (laststart);                              \
+       if (pending_exact)                                              \
+         MOVE_BUFFER_POINTER (pending_exact);                          \
+      }                                                                        \
+    ELSE_EXTEND_BUFFER_HIGH_BOUND                                      \
+  } while (0)
+# endif /* WCHAR */
+
+# ifndef DEFINED_ONCE
+/* Since we have one byte reserved for the register number argument to
+   {start,stop}_memory, the maximum number of groups we can report
+   things about is what fits in that byte.  */
+#  define MAX_REGNUM 255
+
+/* But patterns can have more than `MAX_REGNUM' registers.  We just
+   ignore the excess.  */
+typedef unsigned regnum_t;
+
+
+/* Macros for the compile stack.  */
+
+/* Since offsets can go either forwards or backwards, this type needs to
+   be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
+/* int may be not enough when sizeof(int) == 2.  */
+typedef long pattern_offset_t;
+
+typedef struct
+{
+  pattern_offset_t begalt_offset;
+  pattern_offset_t fixup_alt_jump;
+  pattern_offset_t inner_group_offset;
+  pattern_offset_t laststart_offset;
+  regnum_t regnum;
+} compile_stack_elt_t;
+
+
+typedef struct
+{
+  compile_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} compile_stack_type;
+
+
+#  define INIT_COMPILE_STACK_SIZE 32
+
+#  define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
+#  define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
+
+/* The next available element.  */
+#  define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
+
+# endif /* not DEFINED_ONCE */
+
+/* Set the bit for character C in a list.  */
+# ifndef DEFINED_ONCE
+#  define SET_LIST_BIT(c)                               \
+  (b[((unsigned char) (c)) / BYTEWIDTH]               \
+   |= 1 << (((unsigned char) c) % BYTEWIDTH))
+# endif /* DEFINED_ONCE */
+
+/* Get the next unsigned number in the uncompiled pattern.  */
+# define GET_UNSIGNED_NUMBER(num) \
+  {                                                                    \
+    while (p != pend)                                                  \
+      {                                                                        \
+       PATFETCH (c);                                                   \
+       if (c < '0' || c > '9')                                         \
+         break;                                                        \
+       if (num <= RE_DUP_MAX)                                          \
+         {                                                             \
+           if (num < 0)                                                \
+             num = 0;                                                  \
+           num = num * 10 + c - '0';                                   \
+         }                                                             \
+      }                                                                        \
+  }
+
+# ifndef DEFINED_ONCE
+#  if defined _LIBC || WIDE_CHAR_SUPPORT
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendement 1.  */
+#   ifdef CHARCLASS_NAME_MAX
+#    define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+#   else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#    define CHAR_CLASS_MAX_LENGTH 256
+#   endif
+
+#   ifdef _LIBC
+#    define IS_CHAR_CLASS(string) __wctype (string)
+#   else
+#    define IS_CHAR_CLASS(string) wctype (string)
+#   endif
+#  else
+#   define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+
+#   define IS_CHAR_CLASS(string)                                       \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                 \
+    || STREQ (string, "lower") || STREQ (string, "digit")              \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")             \
+    || STREQ (string, "space") || STREQ (string, "print")              \
+    || STREQ (string, "punct") || STREQ (string, "graph")              \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+#  endif
+# endif /* DEFINED_ONCE */
+\f
+# ifndef MATCH_MAY_ALLOCATE
+
+/* If we cannot allocate large objects within re_match_2_internal,
+   we make the fail stack and register vectors global.
+   The fail stack, we grow to the maximum size when a regexp
+   is compiled.
+   The register vectors, we adjust in size each time we
+   compile a regexp, according to the number of registers it needs.  */
+
+static PREFIX(fail_stack_type) fail_stack;
+
+/* Size with which the following vectors are currently allocated.
+   That is so we can make them bigger as needed,
+   but never make them smaller.  */
+#  ifdef DEFINED_ONCE
+static int regs_allocated_size;
+
+static const char **     regstart, **     regend;
+static const char ** old_regstart, ** old_regend;
+static const char **best_regstart, **best_regend;
+static const char **reg_dummy;
+#  endif /* DEFINED_ONCE */
+
+static PREFIX(register_info_type) *PREFIX(reg_info);
+static PREFIX(register_info_type) *PREFIX(reg_info_dummy);
+
+/* Make the register vectors big enough for NUM_REGS registers,
+   but don't make them smaller.  */
+
+static void
+PREFIX(regex_grow_registers) (int num_regs)
+{
+  if (num_regs > regs_allocated_size)
+    {
+      RETALLOC_IF (regstart,    num_regs, const char *);
+      RETALLOC_IF (regend,      num_regs, const char *);
+      RETALLOC_IF (old_regstart, num_regs, const char *);
+      RETALLOC_IF (old_regend,  num_regs, const char *);
+      RETALLOC_IF (best_regstart, num_regs, const char *);
+      RETALLOC_IF (best_regend,         num_regs, const char *);
+      RETALLOC_IF (PREFIX(reg_info), num_regs, PREFIX(register_info_type));
+      RETALLOC_IF (reg_dummy,   num_regs, const char *);
+      RETALLOC_IF (PREFIX(reg_info_dummy), num_regs, PREFIX(register_info_type));
+
+      regs_allocated_size = num_regs;
+    }
+}
+
+# endif /* not MATCH_MAY_ALLOCATE */
+\f
+# ifndef DEFINED_ONCE
+static boolean group_in_compile_stack (compile_stack_type compile_stack,
+                                       regnum_t regnum);
+# endif /* not DEFINED_ONCE */
+
+/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
+   Returns one of error codes defined in `regex.h', or zero for success.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate'
+   fields are set in BUFP on entry.
+
+   If it succeeds, results are put in BUFP (if it returns an error, the
+   contents of BUFP are undefined):
+     `buffer' is the compiled pattern;
+     `syntax' is set to SYNTAX;
+     `used' is set to the length of the compiled pattern;
+     `fastmap_accurate' is zero;
+     `re_nsub' is the number of subexpressions in PATTERN;
+     `not_bol' and `not_eol' are zero;
+
+   The `fastmap' and `newline_anchor' fields are neither
+   examined nor set.  */
+
+/* Return, freeing storage we allocated.  */
+# ifdef WCHAR
+#  define FREE_STACK_RETURN(value)             \
+  return (free(pattern), free(mbs_offset), free(is_binary), free (compile_stack.stack), value)
+# else
+#  define FREE_STACK_RETURN(value)             \
+  return (free (compile_stack.stack), value)
+# endif /* WCHAR */
+
+static reg_errcode_t
+PREFIX(regex_compile) (const char *ARG_PREFIX(pattern),
+                       size_t ARG_PREFIX(size), reg_syntax_t syntax,
+                       struct re_pattern_buffer *bufp)
+{
+  /* We fetch characters from PATTERN here.  Even though PATTERN is
+     `char *' (i.e., signed), we declare these variables as unsigned, so
+     they can be reliably used as array indices.  */
+  register UCHAR_T c, c1;
+
+#ifdef WCHAR
+  /* A temporary space to keep wchar_t pattern and compiled pattern.  */
+  CHAR_T *pattern, *COMPILED_BUFFER_VAR;
+  size_t size;
+  /* offset buffer for optimization. See convert_mbs_to_wc.  */
+  int *mbs_offset = NULL;
+  /* It hold whether each wchar_t is binary data or not.  */
+  char *is_binary = NULL;
+  /* A flag whether exactn is handling binary data or not.  */
+  char is_exactn_bin = FALSE;
+#endif /* WCHAR */
+
+  /* A random temporary spot in PATTERN.  */
+  const CHAR_T *p1;
+
+  /* Points to the end of the buffer, where we should append.  */
+  register UCHAR_T *b;
+
+  /* Keeps track of unclosed groups.  */
+  compile_stack_type compile_stack;
+
+  /* Points to the current (ending) position in the pattern.  */
+#ifdef WCHAR
+  const CHAR_T *p;
+  const CHAR_T *pend;
+#else /* BYTE */
+  const CHAR_T *p = pattern;
+  const CHAR_T *pend = pattern + size;
+#endif /* WCHAR */
+
+  /* How to translate the characters in the pattern.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Address of the count-byte of the most recently inserted `exactn'
+     command.  This makes it possible to tell if a new exact-match
+     character can be added to that command or if the character requires
+     a new `exactn' command.  */
+  UCHAR_T *pending_exact = 0;
+
+  /* Address of start of the most recently finished expression.
+     This tells, e.g., postfix * where to find the start of its
+     operand.  Reset at the beginning of groups and alternatives.  */
+  UCHAR_T *laststart = 0;
+
+  /* Address of beginning of regexp, or inside of last group.  */
+  UCHAR_T *begalt;
+
+  /* Address of the place where a forward jump should go to the end of
+     the containing expression.  Each alternative of an `or' -- except the
+     last -- ends with a forward jump of this sort.  */
+  UCHAR_T *fixup_alt_jump = 0;
+
+  /* Counts open-groups as they are encountered.  Remembered for the
+     matching close-group on the compile stack, so the same register
+     number is put in the stop_memory as the start_memory.  */
+  regnum_t regnum = 0;
+
+#ifdef WCHAR
+  /* Initialize the wchar_t PATTERN and offset_buffer.  */
+  p = pend = pattern = TALLOC(csize + 1, CHAR_T);
+  mbs_offset = TALLOC(csize + 1, int);
+  is_binary = TALLOC(csize + 1, char);
+  if (pattern == NULL || mbs_offset == NULL || is_binary == NULL)
+    {
+      free(pattern);
+      free(mbs_offset);
+      free(is_binary);
+      return REG_ESPACE;
+    }
+  pattern[csize] = L'\0';      /* sentinel */
+  size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary);
+  pend = p + size;
+  if (size < 0)
+    {
+      free(pattern);
+      free(mbs_offset);
+      free(is_binary);
+      return REG_BADPAT;
+    }
+#endif
+
+#ifdef DEBUG
+  DEBUG_PRINT1 ("\nCompiling pattern: ");
+  if (debug)
+    {
+      unsigned debug_count;
+
+      for (debug_count = 0; debug_count < size; debug_count++)
+        PUT_CHAR (pattern[debug_count]);
+      putchar ('\n');
+    }
+#endif /* DEBUG */
+
+  /* Initialize the compile stack.  */
+  compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
+  if (compile_stack.stack == NULL)
+    {
+#ifdef WCHAR
+      free(pattern);
+      free(mbs_offset);
+      free(is_binary);
+#endif
+      return REG_ESPACE;
+    }
+
+  compile_stack.size = INIT_COMPILE_STACK_SIZE;
+  compile_stack.avail = 0;
+
+  /* Initialize the pattern buffer.  */
+  bufp->syntax = syntax;
+  bufp->fastmap_accurate = 0;
+  bufp->not_bol = bufp->not_eol = 0;
+
+  /* Set `used' to zero, so that if we return an error, the pattern
+     printer (for debugging) will think there's no pattern.  We reset it
+     at the end.  */
+  bufp->used = 0;
+
+  /* Always count groups, whether or not bufp->no_sub is set.  */
+  bufp->re_nsub = 0;
+
+#if !defined emacs && !defined SYNTAX_TABLE
+  /* Initialize the syntax table.  */
+   init_syntax_once ();
+#endif
+
+  if (bufp->allocated == 0)
+    {
+      if (bufp->buffer)
+       { /* If zero allocated, but buffer is non-null, try to realloc
+             enough space.  This loses if buffer's address is bogus, but
+             that is the user's responsibility.  */
+#ifdef WCHAR
+         /* Free bufp->buffer and allocate an array for wchar_t pattern
+            buffer.  */
+          free(bufp->buffer);
+          COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE/sizeof(UCHAR_T),
+                                       UCHAR_T);
+#else
+          RETALLOC (COMPILED_BUFFER_VAR, INIT_BUF_SIZE, UCHAR_T);
+#endif /* WCHAR */
+        }
+      else
+        { /* Caller did not allocate a buffer.  Do it for them.  */
+          COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE / sizeof(UCHAR_T),
+                                       UCHAR_T);
+        }
+
+      if (!COMPILED_BUFFER_VAR) FREE_STACK_RETURN (REG_ESPACE);
+#ifdef WCHAR
+      bufp->buffer = (char*)COMPILED_BUFFER_VAR;
+#endif /* WCHAR */
+      bufp->allocated = INIT_BUF_SIZE;
+    }
+#ifdef WCHAR
+  else
+    COMPILED_BUFFER_VAR = (UCHAR_T*) bufp->buffer;
+#endif
+
+  begalt = b = COMPILED_BUFFER_VAR;
+
+  /* Loop through the uncompiled pattern until we're at the end.  */
+  while (p != pend)
+    {
+      PATFETCH (c);
+
+      switch (c)
+        {
+        case '^':
+          {
+            if (   /* If at start of pattern, it's an operator.  */
+                   p == pattern + 1
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's come before.  */
+                || PREFIX(at_begline_loc_p) (pattern, p, syntax))
+              BUF_PUSH (begline);
+            else
+              goto normal_char;
+          }
+          break;
+
+
+        case '$':
+          {
+            if (   /* If at end of pattern, it's an operator.  */
+                   p == pend
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's next.  */
+                || PREFIX(at_endline_loc_p) (p, pend, syntax))
+               BUF_PUSH (endline);
+             else
+               goto normal_char;
+           }
+           break;
+
+
+       case '+':
+        case '?':
+          if ((syntax & RE_BK_PLUS_QM)
+              || (syntax & RE_LIMITED_OPS))
+            goto normal_char;
+        handle_plus:
+        case '*':
+          /* If there is no previous pattern... */
+          if (!laststart)
+            {
+              if (syntax & RE_CONTEXT_INVALID_OPS)
+                FREE_STACK_RETURN (REG_BADRPT);
+              else if (!(syntax & RE_CONTEXT_INDEP_OPS))
+                goto normal_char;
+            }
+
+          {
+            /* Are we optimizing this jump?  */
+            boolean keep_string_p = false;
+
+            /* 1 means zero (many) matches is allowed.  */
+            char zero_times_ok = 0, many_times_ok = 0;
+
+            /* If there is a sequence of repetition chars, collapse it
+               down to just one (the right one).  We can't combine
+               interval operators with these because of, e.g., `a{2}*',
+               which should only match an even number of `a's.  */
+
+            for (;;)
+              {
+                zero_times_ok |= c != '+';
+                many_times_ok |= c != '?';
+
+                if (p == pend)
+                  break;
+
+                PATFETCH (c);
+
+                if (c == '*'
+                    || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
+                  ;
+
+                else if (syntax & RE_BK_PLUS_QM  &&  c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    if (!(c1 == '+' || c1 == '?'))
+                      {
+                        PATUNFETCH;
+                        PATUNFETCH;
+                        break;
+                      }
+
+                    c = c1;
+                  }
+                else
+                  {
+                    PATUNFETCH;
+                    break;
+                  }
+
+                /* If we get here, we found another repeat character.  */
+               }
+
+            /* Star, etc. applied to an empty pattern is equivalent
+               to an empty pattern.  */
+            if (!laststart)
+              break;
+
+            /* Now we know whether or not zero matches is allowed
+               and also whether or not two or more matches is allowed.  */
+            if (many_times_ok)
+              { /* More than one repetition is allowed, so put in at the
+                   end a backward relative jump from `b' to before the next
+                   jump we're going to put in below (which jumps from
+                   laststart to after this jump).
+
+                   But if we are at the `*' in the exact sequence `.*\n',
+                   insert an unconditional jump backwards to the .,
+                   instead of the beginning of the loop.  This way we only
+                   push a failure point once, instead of every time
+                   through the loop.  */
+                assert (p - 1 > pattern);
+
+                /* Allocate the space for the jump.  */
+                GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+
+                /* We know we are not at the first character of the pattern,
+                   because laststart was nonzero.  And we've already
+                   incremented `p', by the way, to be the character after
+                   the `*'.  Do we have to do something analogous here
+                   for null bytes, because of RE_DOT_NOT_NULL?  */
+                if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
+                   && zero_times_ok
+                    && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
+                    && !(syntax & RE_DOT_NEWLINE))
+                  { /* We have .*\n.  */
+                    STORE_JUMP (jump, b, laststart);
+                    keep_string_p = true;
+                  }
+                else
+                  /* Anything else.  */
+                  STORE_JUMP (maybe_pop_jump, b, laststart -
+                             (1 + OFFSET_ADDRESS_SIZE));
+
+                /* We've added more stuff to the buffer.  */
+                b += 1 + OFFSET_ADDRESS_SIZE;
+              }
+
+            /* On failure, jump from laststart to b + 3, which will be the
+               end of the buffer after this jump is inserted.  */
+           /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of
+              'b + 3'.  */
+            GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+            INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
+                                       : on_failure_jump,
+                         laststart, b + 1 + OFFSET_ADDRESS_SIZE);
+            pending_exact = 0;
+            b += 1 + OFFSET_ADDRESS_SIZE;
+
+            if (!zero_times_ok)
+              {
+                /* At least one repetition is required, so insert a
+                   `dummy_failure_jump' before the initial
+                   `on_failure_jump' instruction of the loop. This
+                   effects a skip over that instruction the first time
+                   we hit that loop.  */
+                GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+                INSERT_JUMP (dummy_failure_jump, laststart, laststart +
+                            2 + 2 * OFFSET_ADDRESS_SIZE);
+                b += 1 + OFFSET_ADDRESS_SIZE;
+              }
+            }
+         break;
+
+
+       case '.':
+          laststart = b;
+          BUF_PUSH (anychar);
+          break;
+
+
+        case '[':
+          {
+            boolean had_char_class = false;
+#ifdef WCHAR
+           CHAR_T range_start = 0xffffffff;
+#else
+           unsigned int range_start = 0xffffffff;
+#endif
+            if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+#ifdef WCHAR
+           /* We assume a charset(_not) structure as a wchar_t array.
+              charset[0] = (re_opcode_t) charset(_not)
+               charset[1] = l (= length of char_classes)
+               charset[2] = m (= length of collating_symbols)
+               charset[3] = n (= length of equivalence_classes)
+              charset[4] = o (= length of char_ranges)
+              charset[5] = p (= length of chars)
+
+               charset[6] = char_class (wctype_t)
+               charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t)
+                         ...
+               charset[l+5]  = char_class (wctype_t)
+
+               charset[l+6]  = collating_symbol (wchar_t)
+                            ...
+               charset[l+m+5]  = collating_symbol (wchar_t)
+                                       ifdef _LIBC we use the index if
+                                       _NL_COLLATE_SYMB_EXTRAMB instead of
+                                       wchar_t string.
+
+               charset[l+m+6]  = equivalence_classes (wchar_t)
+                              ...
+               charset[l+m+n+5]  = equivalence_classes (wchar_t)
+                                       ifdef _LIBC we use the index in
+                                       _NL_COLLATE_WEIGHT instead of
+                                       wchar_t string.
+
+              charset[l+m+n+6] = range_start
+              charset[l+m+n+7] = range_end
+                              ...
+              charset[l+m+n+2o+4] = range_start
+              charset[l+m+n+2o+5] = range_end
+                                       ifdef _LIBC we use the value looked up
+                                       in _NL_COLLATE_COLLSEQ instead of
+                                       wchar_t character.
+
+              charset[l+m+n+2o+6] = char
+                                 ...
+              charset[l+m+n+2o+p+5] = char
+
+            */
+
+           /* We need at least 6 spaces: the opcode, the length of
+               char_classes, the length of collating_symbols, the length of
+               equivalence_classes, the length of char_ranges, the length of
+               chars.  */
+           GET_BUFFER_SPACE (6);
+
+           /* Save b as laststart. And We use laststart as the pointer
+              to the first element of the charset here.
+              In other words, laststart[i] indicates charset[i].  */
+            laststart = b;
+
+            /* We test `*p == '^' twice, instead of using an if
+               statement, so we only need one BUF_PUSH.  */
+            BUF_PUSH (*p == '^' ? charset_not : charset);
+            if (*p == '^')
+              p++;
+
+            /* Push the length of char_classes, the length of
+               collating_symbols, the length of equivalence_classes, the
+               length of char_ranges and the length of chars.  */
+            BUF_PUSH_3 (0, 0, 0);
+            BUF_PUSH_2 (0, 0);
+
+            /* Remember the first position in the bracket expression.  */
+            p1 = p;
+
+            /* charset_not matches newline according to a syntax bit.  */
+            if ((re_opcode_t) b[-6] == charset_not
+                && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
+             {
+               BUF_PUSH('\n');
+               laststart[5]++; /* Update the length of characters  */
+             }
+
+            /* Read in characters and ranges, setting map bits.  */
+            for (;;)
+              {
+                if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                PATFETCH (c);
+
+                /* \ might escape characters inside [...] and [^...].  */
+                if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                   BUF_PUSH(c1);
+                   laststart[5]++; /* Update the length of chars  */
+                   range_start = c1;
+                    continue;
+                  }
+
+                /* Could be the end of the bracket expression.  If it's
+                   not (i.e., when the bracket expression is `[]' so
+                   far), the ']' character bit gets set way below.  */
+                if (c == ']' && p != p1 + 1)
+                  break;
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character class.  */
+                if (had_char_class && c == '-' && *p != ']')
+                  FREE_STACK_RETURN (REG_ERANGE);
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character: if this is a hyphen not at the
+                   beginning or the end of a list, then it's the range
+                   operator.  */
+                if (c == '-'
+                    && !(p - 2 >= pattern && p[-2] == '[')
+                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
+                    && *p != ']')
+                  {
+                    reg_errcode_t ret;
+                   /* Allocate the space for range_start and range_end.  */
+                   GET_BUFFER_SPACE (2);
+                   /* Update the pointer to indicate end of buffer.  */
+                    b += 2;
+                    ret = wcs_compile_range (range_start, &p, pend, translate,
+                                         syntax, b, laststart);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                    range_start = 0xffffffff;
+                  }
+                else if (p[0] == '-' && p[1] != ']')
+                  { /* This handles ranges made up of characters only.  */
+                    reg_errcode_t ret;
+
+                   /* Move past the `-'.  */
+                    PATFETCH (c1);
+                   /* Allocate the space for range_start and range_end.  */
+                   GET_BUFFER_SPACE (2);
+                   /* Update the pointer to indicate end of buffer.  */
+                    b += 2;
+                    ret = wcs_compile_range (c, &p, pend, translate, syntax, b,
+                                         laststart);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                   range_start = 0xffffffff;
+                  }
+
+                /* See if we're at the beginning of a possible character
+                   class.  */
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
+                  { /* Leave room for the null.  */
+                    char str[CHAR_CLASS_MAX_LENGTH + 1];
+
+                    PATFETCH (c);
+                    c1 = 0;
+
+                    /* If pattern is `[[:'.  */
+                    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                    for (;;)
+                      {
+                        PATFETCH (c);
+                        if ((c == ':' && *p == ']') || p == pend)
+                          break;
+                       if (c1 < CHAR_CLASS_MAX_LENGTH)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                    str[c1] = '\0';
+
+                    /* If isn't a word bracketed by `[:' and `:]':
+                       undo the ending character, the letters, and leave
+                       the leading `:' and `[' (but store them as character).  */
+                    if (c == ':' && *p == ']')
+                      {
+                       wctype_t wt;
+                       uintptr_t alignedp;
+
+                       /* Query the character class as wctype_t.  */
+                       wt = IS_CHAR_CLASS (str);
+                       if (wt == 0)
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                       /* Allocate the space for character class.  */
+                        GET_BUFFER_SPACE(CHAR_CLASS_SIZE);
+                       /* Update the pointer to indicate end of buffer.  */
+                        b += CHAR_CLASS_SIZE;
+                       /* Move data which follow character classes
+                           not to violate the data.  */
+                        insert_space(CHAR_CLASS_SIZE,
+                                    laststart + 6 + laststart[1],
+                                    b - 1);
+                       alignedp = ((uintptr_t)(laststart + 6 + laststart[1])
+                                   + __alignof__(wctype_t) - 1)
+                                   & ~(uintptr_t)(__alignof__(wctype_t) - 1);
+                       /* Store the character class.  */
+                        *((wctype_t*)alignedp) = wt;
+                        /* Update length of char_classes */
+                        laststart[1] += CHAR_CLASS_SIZE;
+
+                        had_char_class = true;
+                      }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        BUF_PUSH ('[');
+                        BUF_PUSH (':');
+                        laststart[5] += 2; /* Update the length of characters  */
+                       range_start = ':';
+                        had_char_class = false;
+                      }
+                  }
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && (*p == '='
+                                                         || *p == '.'))
+                 {
+                   CHAR_T str[128];    /* Should be large enough.  */
+                   CHAR_T delim = *p; /* '=' or '.'  */
+# ifdef _LIBC
+                   uint32_t nrules =
+                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+# endif
+                   PATFETCH (c);
+                   c1 = 0;
+
+                   /* If pattern is `[[=' or '[[.'.  */
+                   if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                   for (;;)
+                     {
+                       PATFETCH (c);
+                       if ((c == delim && *p == ']') || p == pend)
+                         break;
+                       if (c1 < sizeof (str) - 1)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                   str[c1] = '\0';
+
+                   if (c == delim && *p == ']' && str[0] != '\0')
+                     {
+                        unsigned int i, offset;
+                       /* If we have no collation data we use the default
+                          collation in which each character is in a class
+                          by itself.  It also means that ASCII is the
+                          character set and therefore we cannot have character
+                          with more than one byte in the multibyte
+                          representation.  */
+
+                        /* If not defined _LIBC, we push the name and
+                          `\0' for the sake of matching performance.  */
+                       int datasize = c1 + 1;
+
+# ifdef _LIBC
+                       int32_t idx = 0;
+                       if (nrules == 0)
+# endif
+                         {
+                           if (c1 != 1)
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+                         }
+# ifdef _LIBC
+                       else
+                         {
+                           const int32_t *table;
+                           const int32_t *weights;
+                           const int32_t *extra;
+                           const int32_t *indirect;
+                           wint_t *cp;
+
+                           /* This #include defines a local function!  */
+#  include <locale/weightwc.h>
+
+                           if(delim == '=')
+                             {
+                               /* We push the index for equivalence class.  */
+                               cp = (wint_t*)str;
+
+                               table = (const int32_t *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_TABLEWC);
+                               weights = (const int32_t *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_WEIGHTWC);
+                               extra = (const int32_t *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_EXTRAWC);
+                               indirect = (const int32_t *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_INDIRECTWC);
+
+                               idx = findidx ((const wint_t**)&cp);
+                               if (idx == 0 || cp < (wint_t*) str + c1)
+                                 /* This is no valid character.  */
+                                 FREE_STACK_RETURN (REG_ECOLLATE);
+
+                               str[0] = (wchar_t)idx;
+                             }
+                           else /* delim == '.' */
+                             {
+                               /* We push collation sequence value
+                                  for collating symbol.  */
+                               int32_t table_size;
+                               const int32_t *symb_table;
+                               const unsigned char *extra;
+                               int32_t idx;
+                               int32_t elem;
+                               int32_t second;
+                               int32_t hash;
+                               char char_str[c1];
+
+                               /* We have to convert the name to a single-byte
+                                  string.  This is possible since the names
+                                  consist of ASCII characters and the internal
+                                  representation is UCS4.  */
+                               for (i = 0; i < c1; ++i)
+                                 char_str[i] = str[i];
+
+                               table_size =
+                                 _NL_CURRENT_WORD (LC_COLLATE,
+                                                   _NL_COLLATE_SYMB_HASH_SIZEMB);
+                               symb_table = (const int32_t *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_SYMB_TABLEMB);
+                               extra = (const unsigned char *)
+                                 _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_SYMB_EXTRAMB);
+
+                               /* Locate the character in the hashing table.  */
+                               hash = elem_hash (char_str, c1);
+
+                               idx = 0;
+                               elem = hash % table_size;
+                               second = hash % (table_size - 2);
+                               while (symb_table[2 * elem] != 0)
+                                 {
+                                   /* First compare the hashing value.  */
+                                   if (symb_table[2 * elem] == hash
+                                       && c1 == extra[symb_table[2 * elem + 1]]
+                                       && memcmp (char_str,
+                                                  &extra[symb_table[2 * elem + 1]
+                                                        + 1], c1) == 0)
+                                     {
+                                       /* Yep, this is the entry.  */
+                                       idx = symb_table[2 * elem + 1];
+                                       idx += 1 + extra[idx];
+                                       break;
+                                     }
+
+                                   /* Next entry.  */
+                                   elem += second;
+                                 }
+
+                               if (symb_table[2 * elem] != 0)
+                                 {
+                                   /* Compute the index of the byte sequence
+                                      in the table.  */
+                                   idx += 1 + extra[idx];
+                                   /* Adjust for the alignment.  */
+                                   idx = (idx + 3) & ~3;
+
+                                   str[0] = (wchar_t) idx + 4;
+                                 }
+                               else if (symb_table[2 * elem] == 0 && c1 == 1)
+                                 {
+                                   /* No valid character.  Match it as a
+                                      single byte character.  */
+                                   had_char_class = false;
+                                   BUF_PUSH(str[0]);
+                                   /* Update the length of characters  */
+                                   laststart[5]++;
+                                   range_start = str[0];
+
+                                   /* Throw away the ] at the end of the
+                                      collating symbol.  */
+                                   PATFETCH (c);
+                                   /* exit from the switch block.  */
+                                   continue;
+                                 }
+                               else
+                                 FREE_STACK_RETURN (REG_ECOLLATE);
+                             }
+                           datasize = 1;
+                         }
+# endif
+                        /* Throw away the ] at the end of the equivalence
+                           class (or collating symbol).  */
+                        PATFETCH (c);
+
+                       /* Allocate the space for the equivalence class
+                          (or collating symbol) (and '\0' if needed).  */
+                        GET_BUFFER_SPACE(datasize);
+                       /* Update the pointer to indicate end of buffer.  */
+                        b += datasize;
+
+                       if (delim == '=')
+                         { /* equivalence class  */
+                           /* Calculate the offset of char_ranges,
+                              which is next to equivalence_classes.  */
+                           offset = laststart[1] + laststart[2]
+                             + laststart[3] +6;
+                           /* Insert space.  */
+                           insert_space(datasize, laststart + offset, b - 1);
+
+                           /* Write the equivalence_class and \0.  */
+                           for (i = 0 ; i < datasize ; i++)
+                             laststart[offset + i] = str[i];
+
+                           /* Update the length of equivalence_classes.  */
+                           laststart[3] += datasize;
+                           had_char_class = true;
+                         }
+                       else /* delim == '.' */
+                         { /* collating symbol  */
+                           /* Calculate the offset of the equivalence_classes,
+                              which is next to collating_symbols.  */
+                           offset = laststart[1] + laststart[2] + 6;
+                           /* Insert space and write the collationg_symbol
+                              and \0.  */
+                           insert_space(datasize, laststart + offset, b-1);
+                           for (i = 0 ; i < datasize ; i++)
+                             laststart[offset + i] = str[i];
+
+                           /* In re_match_2_internal if range_start < -1, we
+                              assume -range_start is the offset of the
+                              collating symbol which is specified as
+                              the character of the range start.  So we assign
+                              -(laststart[1] + laststart[2] + 6) to
+                              range_start.  */
+                           range_start = -(laststart[1] + laststart[2] + 6);
+                           /* Update the length of collating_symbol.  */
+                           laststart[2] += datasize;
+                           had_char_class = false;
+                         }
+                     }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        BUF_PUSH ('[');
+                        BUF_PUSH (delim);
+                        laststart[5] += 2; /* Update the length of characters  */
+                       range_start = delim;
+                        had_char_class = false;
+                      }
+                 }
+                else
+                  {
+                    had_char_class = false;
+                   BUF_PUSH(c);
+                   laststart[5]++;  /* Update the length of characters  */
+                   range_start = c;
+                  }
+             }
+
+#else /* BYTE */
+            /* Ensure that we have enough space to push a charset: the
+               opcode, the length count, and the bitset; 34 bytes in all.  */
+           GET_BUFFER_SPACE (34);
+
+            laststart = b;
+
+            /* We test `*p == '^' twice, instead of using an if
+               statement, so we only need one BUF_PUSH.  */
+            BUF_PUSH (*p == '^' ? charset_not : charset);
+            if (*p == '^')
+              p++;
+
+            /* Remember the first position in the bracket expression.  */
+            p1 = p;
+
+            /* Push the number of bytes in the bitmap.  */
+            BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* Clear the whole map.  */
+            bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* charset_not matches newline according to a syntax bit.  */
+            if ((re_opcode_t) b[-2] == charset_not
+                && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
+              SET_LIST_BIT ('\n');
+
+            /* Read in characters and ranges, setting map bits.  */
+            for (;;)
+              {
+                if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                PATFETCH (c);
+
+                /* \ might escape characters inside [...] and [^...].  */
+                if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    SET_LIST_BIT (c1);
+                   range_start = c1;
+                    continue;
+                  }
+
+                /* Could be the end of the bracket expression.  If it's
+                   not (i.e., when the bracket expression is `[]' so
+                   far), the ']' character bit gets set way below.  */
+                if (c == ']' && p != p1 + 1)
+                  break;
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character class.  */
+                if (had_char_class && c == '-' && *p != ']')
+                  FREE_STACK_RETURN (REG_ERANGE);
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character: if this is a hyphen not at the
+                   beginning or the end of a list, then it's the range
+                   operator.  */
+                if (c == '-'
+                    && !(p - 2 >= pattern && p[-2] == '[')
+                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
+                    && *p != ']')
+                  {
+                    reg_errcode_t ret
+                      = byte_compile_range (range_start, &p, pend, translate,
+                                           syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                   range_start = 0xffffffff;
+                  }
+
+                else if (p[0] == '-' && p[1] != ']')
+                  { /* This handles ranges made up of characters only.  */
+                    reg_errcode_t ret;
+
+                   /* Move past the `-'.  */
+                    PATFETCH (c1);
+
+                    ret = byte_compile_range (c, &p, pend, translate, syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                   range_start = 0xffffffff;
+                  }
+
+                /* See if we're at the beginning of a possible character
+                   class.  */
+
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
+                  { /* Leave room for the null.  */
+                    char str[CHAR_CLASS_MAX_LENGTH + 1];
+
+                    PATFETCH (c);
+                    c1 = 0;
+
+                    /* If pattern is `[[:'.  */
+                    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                    for (;;)
+                      {
+                        PATFETCH (c);
+                        if ((c == ':' && *p == ']') || p == pend)
+                          break;
+                       if (c1 < CHAR_CLASS_MAX_LENGTH)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                    str[c1] = '\0';
+
+                    /* If isn't a word bracketed by `[:' and `:]':
+                       undo the ending character, the letters, and leave
+                       the leading `:' and `[' (but set bits for them).  */
+                    if (c == ':' && *p == ']')
+                      {
+# if defined _LIBC || WIDE_CHAR_SUPPORT
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_upper = STREQ (str, "upper");
+                       wctype_t wt;
+                        int ch;
+
+                       wt = IS_CHAR_CLASS (str);
+                       if (wt == 0)
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
+                         {
+#  ifdef _LIBC
+                           if (__iswctype (__btowc (ch), wt))
+                             SET_LIST_BIT (ch);
+#  else
+                           if (iswctype (btowc (ch), wt))
+                             SET_LIST_BIT (ch);
+#  endif
+
+                           if (translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                         }
+
+                        had_char_class = true;
+# else
+                        int ch;
+                        boolean is_alnum = STREQ (str, "alnum");
+                        boolean is_alpha = STREQ (str, "alpha");
+                        boolean is_blank = STREQ (str, "blank");
+                        boolean is_cntrl = STREQ (str, "cntrl");
+                        boolean is_digit = STREQ (str, "digit");
+                        boolean is_graph = STREQ (str, "graph");
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_print = STREQ (str, "print");
+                        boolean is_punct = STREQ (str, "punct");
+                        boolean is_space = STREQ (str, "space");
+                        boolean is_upper = STREQ (str, "upper");
+                        boolean is_xdigit = STREQ (str, "xdigit");
+
+                        if (!IS_CHAR_CLASS (str))
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
+                          {
+                           /* This was split into 3 if's to
+                              avoid an arbitrary limit in some compiler.  */
+                            if (   (is_alnum  && ISALNUM (ch))
+                                || (is_alpha  && ISALPHA (ch))
+                                || (is_blank  && ISBLANK (ch))
+                                || (is_cntrl  && ISCNTRL (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_digit  && ISDIGIT (ch))
+                                || (is_graph  && ISGRAPH (ch))
+                                || (is_lower  && ISLOWER (ch))
+                                || (is_print  && ISPRINT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_punct  && ISPUNCT (ch))
+                                || (is_space  && ISSPACE (ch))
+                                || (is_upper  && ISUPPER (ch))
+                                || (is_xdigit && ISXDIGIT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                          }
+                        had_char_class = true;
+# endif        /* libc || wctype.h */
+                      }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT (':');
+                       range_start = ':';
+                        had_char_class = false;
+                      }
+                  }
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=')
+                 {
+                   unsigned char str[MB_LEN_MAX + 1];
+# ifdef _LIBC
+                   uint32_t nrules =
+                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+# endif
+
+                   PATFETCH (c);
+                   c1 = 0;
+
+                   /* If pattern is `[[='.  */
+                   if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                   for (;;)
+                     {
+                       PATFETCH (c);
+                       if ((c == '=' && *p == ']') || p == pend)
+                         break;
+                       if (c1 < MB_LEN_MAX)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                   str[c1] = '\0';
+
+                   if (c == '=' && *p == ']' && str[0] != '\0')
+                     {
+                       /* If we have no collation data we use the default
+                          collation in which each character is in a class
+                          by itself.  It also means that ASCII is the
+                          character set and therefore we cannot have character
+                          with more than one byte in the multibyte
+                          representation.  */
+# ifdef _LIBC
+                       if (nrules == 0)
+# endif
+                         {
+                           if (c1 != 1)
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Set the bit for the character.  */
+                           SET_LIST_BIT (str[0]);
+                         }
+# ifdef _LIBC
+                       else
+                         {
+                           /* Try to match the byte sequence in `str' against
+                              those known to the collate implementation.
+                              First find out whether the bytes in `str' are
+                              actually from exactly one character.  */
+                           const int32_t *table;
+                           const unsigned char *weights;
+                           const unsigned char *extra;
+                           const int32_t *indirect;
+                           int32_t idx;
+                           const unsigned char *cp = str;
+                           int ch;
+
+                           /* This #include defines a local function!  */
+#  include <locale/weight.h>
+
+                           table = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+                           weights = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+                           extra = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+                           indirect = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+
+                           idx = findidx (&cp);
+                           if (idx == 0 || cp < str + c1)
+                             /* This is no valid character.  */
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Now we have to go throught the whole table
+                              and find all characters which have the same
+                              first level weight.
+
+                              XXX Note that this is not entirely correct.
+                              we would have to match multibyte sequences
+                              but this is not possible with the current
+                              implementation.  */
+                           for (ch = 1; ch < 256; ++ch)
+                             /* XXX This test would have to be changed if we
+                                would allow matching multibyte sequences.  */
+                             if (table[ch] > 0)
+                               {
+                                 int32_t idx2 = table[ch];
+                                 size_t len = weights[idx2];
+
+                                 /* Test whether the lenghts match.  */
+                                 if (weights[idx] == len)
+                                   {
+                                     /* They do.  New compare the bytes of
+                                        the weight.  */
+                                     size_t cnt = 0;
+
+                                     while (cnt < len
+                                            && (weights[idx + 1 + cnt]
+                                                == weights[idx2 + 1 + cnt]))
+                                       ++cnt;
+
+                                     if (cnt == len)
+                                       /* They match.  Mark the character as
+                                          acceptable.  */
+                                       SET_LIST_BIT (ch);
+                                   }
+                               }
+                         }
+# endif
+                       had_char_class = true;
+                     }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT ('=');
+                       range_start = '=';
+                        had_char_class = false;
+                      }
+                 }
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.')
+                 {
+                   unsigned char str[128];     /* Should be large enough.  */
+# ifdef _LIBC
+                   uint32_t nrules =
+                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+# endif
+
+                   PATFETCH (c);
+                   c1 = 0;
+
+                   /* If pattern is `[[.'.  */
+                   if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                   for (;;)
+                     {
+                       PATFETCH (c);
+                       if ((c == '.' && *p == ']') || p == pend)
+                         break;
+                       if (c1 < sizeof (str))
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                   str[c1] = '\0';
+
+                   if (c == '.' && *p == ']' && str[0] != '\0')
+                     {
+                       /* If we have no collation data we use the default
+                          collation in which each character is the name
+                          for its own class which contains only the one
+                          character.  It also means that ASCII is the
+                          character set and therefore we cannot have character
+                          with more than one byte in the multibyte
+                          representation.  */
+# ifdef _LIBC
+                       if (nrules == 0)
+# endif
+                         {
+                           if (c1 != 1)
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Set the bit for the character.  */
+                           SET_LIST_BIT (str[0]);
+                           range_start = ((const unsigned char *) str)[0];
+                         }
+# ifdef _LIBC
+                       else
+                         {
+                           /* Try to match the byte sequence in `str' against
+                              those known to the collate implementation.
+                              First find out whether the bytes in `str' are
+                              actually from exactly one character.  */
+                           int32_t table_size;
+                           const int32_t *symb_table;
+                           const unsigned char *extra;
+                           int32_t idx;
+                           int32_t elem;
+                           int32_t second;
+                           int32_t hash;
+
+                           table_size =
+                             _NL_CURRENT_WORD (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_HASH_SIZEMB);
+                           symb_table = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE,
+                                          _NL_COLLATE_SYMB_TABLEMB);
+                           extra = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE,
+                                          _NL_COLLATE_SYMB_EXTRAMB);
+
+                           /* Locate the character in the hashing table.  */
+                           hash = elem_hash (str, c1);
+
+                           idx = 0;
+                           elem = hash % table_size;
+                           second = hash % (table_size - 2);
+                           while (symb_table[2 * elem] != 0)
+                             {
+                               /* First compare the hashing value.  */
+                               if (symb_table[2 * elem] == hash
+                                   && c1 == extra[symb_table[2 * elem + 1]]
+                                   && memcmp (str,
+                                              &extra[symb_table[2 * elem + 1]
+                                                    + 1],
+                                              c1) == 0)
+                                 {
+                                   /* Yep, this is the entry.  */
+                                   idx = symb_table[2 * elem + 1];
+                                   idx += 1 + extra[idx];
+                                   break;
+                                 }
+
+                               /* Next entry.  */
+                               elem += second;
+                             }
+
+                           if (symb_table[2 * elem] == 0)
+                             /* This is no valid character.  */
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Now add the multibyte character(s) we found
+                              to the accept list.
+
+                              XXX Note that this is not entirely correct.
+                              we would have to match multibyte sequences
+                              but this is not possible with the current
+                              implementation.  Also, we have to match
+                              collating symbols, which expand to more than
+                              one file, as a whole and not allow the
+                              individual bytes.  */
+                           c1 = extra[idx++];
+                           if (c1 == 1)
+                             range_start = extra[idx];
+                           while (c1-- > 0)
+                             {
+                               SET_LIST_BIT (extra[idx]);
+                               ++idx;
+                             }
+                         }
+# endif
+                       had_char_class = false;
+                     }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT ('.');
+                       range_start = '.';
+                        had_char_class = false;
+                      }
+                 }
+                else
+                  {
+                    had_char_class = false;
+                    SET_LIST_BIT (c);
+                   range_start = c;
+                  }
+              }
+
+            /* Discard any (non)matching list bytes that are all 0 at the
+               end of the map.  Decrease the map-length byte too.  */
+            while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
+              b[-1]--;
+            b += b[-1];
+#endif /* WCHAR */
+          }
+          break;
+
+
+       case '(':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_open;
+          else
+            goto normal_char;
+
+
+        case ')':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_close;
+          else
+            goto normal_char;
+
+
+        case '\n':
+          if (syntax & RE_NEWLINE_ALT)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+       case '|':
+          if (syntax & RE_NO_BK_VBAR)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+        case '{':
+           if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
+             goto handle_interval;
+           else
+             goto normal_char;
+
+
+        case '\\':
+          if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+          /* Do not translate the character after the \, so that we can
+             distinguish, e.g., \B from \b, even if we normally would
+             translate, e.g., B to b.  */
+          PATFETCH_RAW (c);
+
+          switch (c)
+            {
+            case '(':
+              if (syntax & RE_NO_BK_PARENS)
+                goto normal_backslash;
+
+            handle_open:
+              bufp->re_nsub++;
+              regnum++;
+
+              if (COMPILE_STACK_FULL)
+                {
+                  RETALLOC (compile_stack.stack, compile_stack.size << 1,
+                            compile_stack_elt_t);
+                  if (compile_stack.stack == NULL) return REG_ESPACE;
+
+                  compile_stack.size <<= 1;
+                }
+
+              /* These are the values to restore when we hit end of this
+                 group.  They are all relative offsets, so that if the
+                 whole pattern moves because of realloc, they will still
+                 be valid.  */
+              COMPILE_STACK_TOP.begalt_offset = begalt - COMPILED_BUFFER_VAR;
+              COMPILE_STACK_TOP.fixup_alt_jump
+                = fixup_alt_jump ? fixup_alt_jump - COMPILED_BUFFER_VAR + 1 : 0;
+              COMPILE_STACK_TOP.laststart_offset = b - COMPILED_BUFFER_VAR;
+              COMPILE_STACK_TOP.regnum = regnum;
+
+              /* We will eventually replace the 0 with the number of
+                 groups inner to this one.  But do not push a
+                 start_memory for groups beyond the last one we can
+                 represent in the compiled pattern.  */
+              if (regnum <= MAX_REGNUM)
+                {
+                  COMPILE_STACK_TOP.inner_group_offset = b
+                   - COMPILED_BUFFER_VAR + 2;
+                  BUF_PUSH_3 (start_memory, regnum, 0);
+                }
+
+              compile_stack.avail++;
+
+              fixup_alt_jump = 0;
+              laststart = 0;
+              begalt = b;
+             /* If we've reached MAX_REGNUM groups, then this open
+                won't actually generate any code, so we'll have to
+                clear pending_exact explicitly.  */
+             pending_exact = 0;
+              break;
+
+
+            case ')':
+              if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
+
+              if (COMPILE_STACK_EMPTY)
+               {
+                 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                   goto normal_backslash;
+                 else
+                   FREE_STACK_RETURN (REG_ERPAREN);
+               }
+
+            handle_close:
+              if (fixup_alt_jump)
+                { /* Push a dummy failure point at the end of the
+                     alternative for a possible future
+                     `pop_failure_jump' to pop.  See comments at
+                     `push_dummy_failure' in `re_match_2'.  */
+                  BUF_PUSH (push_dummy_failure);
+
+                  /* We allocated space for this jump when we assigned
+                     to `fixup_alt_jump', in the `handle_alt' case below.  */
+                  STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
+                }
+
+              /* See similar code for backslashed left paren above.  */
+              if (COMPILE_STACK_EMPTY)
+               {
+                 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                   goto normal_char;
+                 else
+                   FREE_STACK_RETURN (REG_ERPAREN);
+               }
+
+              /* Since we just checked for an empty stack above, this
+                 ``can't happen''.  */
+              assert (compile_stack.avail != 0);
+              {
+                /* We don't just want to restore into `regnum', because
+                   later groups should continue to be numbered higher,
+                   as in `(ab)c(de)' -- the second group is #2.  */
+                regnum_t this_group_regnum;
+
+                compile_stack.avail--;
+                begalt = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.begalt_offset;
+                fixup_alt_jump
+                  = COMPILE_STACK_TOP.fixup_alt_jump
+                    ? COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.fixup_alt_jump - 1
+                    : 0;
+                laststart = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.laststart_offset;
+                this_group_regnum = COMPILE_STACK_TOP.regnum;
+               /* If we've reached MAX_REGNUM groups, then this open
+                  won't actually generate any code, so we'll have to
+                  clear pending_exact explicitly.  */
+               pending_exact = 0;
+
+                /* We're at the end of the group, so now we know how many
+                   groups were inside this one.  */
+                if (this_group_regnum <= MAX_REGNUM)
+                  {
+                   UCHAR_T *inner_group_loc
+                      = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.inner_group_offset;
+
+                    *inner_group_loc = regnum - this_group_regnum;
+                    BUF_PUSH_3 (stop_memory, this_group_regnum,
+                                regnum - this_group_regnum);
+                  }
+              }
+              break;
+
+
+            case '|':                                  /* `\|'.  */
+              if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
+                goto normal_backslash;
+            handle_alt:
+              if (syntax & RE_LIMITED_OPS)
+                goto normal_char;
+
+              /* Insert before the previous alternative a jump which
+                 jumps to this alternative if the former fails.  */
+              GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+              INSERT_JUMP (on_failure_jump, begalt,
+                          b + 2 + 2 * OFFSET_ADDRESS_SIZE);
+              pending_exact = 0;
+              b += 1 + OFFSET_ADDRESS_SIZE;
+
+              /* The alternative before this one has a jump after it
+                 which gets executed if it gets matched.  Adjust that
+                 jump so it will jump to this alternative's analogous
+                 jump (put in below, which in turn will jump to the next
+                 (if any) alternative's such jump, etc.).  The last such
+                 jump jumps to the correct final destination.  A picture:
+                          _____ _____
+                          |   | |   |
+                          |   v |   v
+                         a | b   | c
+
+                 If we are at `b', then fixup_alt_jump right now points to a
+                 three-byte space after `a'.  We'll put in the jump, set
+                 fixup_alt_jump to right after `b', and leave behind three
+                 bytes which we'll fill in when we get to after `c'.  */
+
+              if (fixup_alt_jump)
+                STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+              /* Mark and leave space for a jump after this alternative,
+                 to be filled in later either by next alternative or
+                 when know we're at the end of a series of alternatives.  */
+              fixup_alt_jump = b;
+              GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+              b += 1 + OFFSET_ADDRESS_SIZE;
+
+              laststart = 0;
+              begalt = b;
+              break;
+
+
+            case '{':
+              /* If \{ is a literal.  */
+              if (!(syntax & RE_INTERVALS)
+                     /* If we're at `\{' and it's not the open-interval
+                        operator.  */
+                 || (syntax & RE_NO_BK_BRACES))
+                goto normal_backslash;
+
+            handle_interval:
+              {
+                /* If got here, then the syntax allows intervals.  */
+
+                /* At least (most) this many matches must be made.  */
+                int lower_bound = -1, upper_bound = -1;
+
+               /* Place in the uncompiled pattern (i.e., just after
+                  the '{') to go back to if the interval is invalid.  */
+               const CHAR_T *beg_interval = p;
+
+                if (p == pend)
+                 goto invalid_interval;
+
+                GET_UNSIGNED_NUMBER (lower_bound);
+
+                if (c == ',')
+                  {
+                    GET_UNSIGNED_NUMBER (upper_bound);
+                   if (upper_bound < 0)
+                     upper_bound = RE_DUP_MAX;
+                  }
+                else
+                  /* Interval such as `{1}' => match exactly once. */
+                  upper_bound = lower_bound;
+
+                if (! (0 <= lower_bound && lower_bound <= upper_bound))
+                 goto invalid_interval;
+
+                if (!(syntax & RE_NO_BK_BRACES))
+                  {
+                   if (c != '\\' || p == pend)
+                     goto invalid_interval;
+                    PATFETCH (c);
+                  }
+
+                if (c != '}')
+                 goto invalid_interval;
+
+                /* If it's invalid to have no preceding re.  */
+                if (!laststart)
+                  {
+                   if (syntax & RE_CONTEXT_INVALID_OPS
+                       && !(syntax & RE_INVALID_INTERVAL_ORD))
+                      FREE_STACK_RETURN (REG_BADRPT);
+                    else if (syntax & RE_CONTEXT_INDEP_OPS)
+                      laststart = b;
+                    else
+                      goto unfetch_interval;
+                  }
+
+                /* We just parsed a valid interval.  */
+
+                if (RE_DUP_MAX < upper_bound)
+                 FREE_STACK_RETURN (REG_BADBR);
+
+                /* If the upper bound is zero, don't want to succeed at
+                   all; jump from `laststart' to `b + 3', which will be
+                  the end of the buffer after we insert the jump.  */
+               /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE'
+                  instead of 'b + 3'.  */
+                 if (upper_bound == 0)
+                   {
+                     GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
+                     INSERT_JUMP (jump, laststart, b + 1
+                                 + OFFSET_ADDRESS_SIZE);
+                     b += 1 + OFFSET_ADDRESS_SIZE;
+                   }
+
+                 /* Otherwise, we have a nontrivial interval.  When
+                    we're all done, the pattern will look like:
+                      set_number_at <jump count> <upper bound>
+                      set_number_at <succeed_n count> <lower bound>
+                      succeed_n <after jump addr> <succeed_n count>
+                      <body of loop>
+                      jump_n <succeed_n addr> <jump count>
+                    (The upper bound and `jump_n' are omitted if
+                    `upper_bound' is 1, though.)  */
+                 else
+                   { /* If the upper bound is > 1, we need to insert
+                        more at the end of the loop.  */
+                     unsigned nbytes = 2 + 4 * OFFSET_ADDRESS_SIZE +
+                      (upper_bound > 1) * (2 + 4 * OFFSET_ADDRESS_SIZE);
+
+                     GET_BUFFER_SPACE (nbytes);
+
+                     /* Initialize lower bound of the `succeed_n', even
+                        though it will be set during matching by its
+                        attendant `set_number_at' (inserted next),
+                        because `re_compile_fastmap' needs to know.
+                        Jump to the `jump_n' we might insert below.  */
+                     INSERT_JUMP2 (succeed_n, laststart,
+                                   b + 1 + 2 * OFFSET_ADDRESS_SIZE
+                                  + (upper_bound > 1) * (1 + 2 * OFFSET_ADDRESS_SIZE)
+                                  , lower_bound);
+                     b += 1 + 2 * OFFSET_ADDRESS_SIZE;
+
+                     /* Code to initialize the lower bound.  Insert
+                        before the `succeed_n'.  The `5' is the last two
+                        bytes of this `set_number_at', plus 3 bytes of
+                        the following `succeed_n'.  */
+                    /* ifdef WCHAR, The '1+2*OFFSET_ADDRESS_SIZE'
+                       is the 'set_number_at', plus '1+OFFSET_ADDRESS_SIZE'
+                       of the following `succeed_n'.  */
+                     PREFIX(insert_op2) (set_number_at, laststart, 1
+                                + 2 * OFFSET_ADDRESS_SIZE, lower_bound, b);
+                     b += 1 + 2 * OFFSET_ADDRESS_SIZE;
+
+                     if (upper_bound > 1)
+                       { /* More than one repetition is allowed, so
+                            append a backward jump to the `succeed_n'
+                            that starts this interval.
+
+                            When we've reached this during matching,
+                            we'll have matched the interval once, so
+                            jump back only `upper_bound - 1' times.  */
+                         STORE_JUMP2 (jump_n, b, laststart
+                                     + 2 * OFFSET_ADDRESS_SIZE + 1,
+                                      upper_bound - 1);
+                         b += 1 + 2 * OFFSET_ADDRESS_SIZE;
+
+                         /* The location we want to set is the second
+                            parameter of the `jump_n'; that is `b-2' as
+                            an absolute address.  `laststart' will be
+                            the `set_number_at' we're about to insert;
+                            `laststart+3' the number to set, the source
+                            for the relative address.  But we are
+                            inserting into the middle of the pattern --
+                            so everything is getting moved up by 5.
+                            Conclusion: (b - 2) - (laststart + 3) + 5,
+                            i.e., b - laststart.
+
+                            We insert this at the beginning of the loop
+                            so that if we fail during matching, we'll
+                            reinitialize the bounds.  */
+                         PREFIX(insert_op2) (set_number_at, laststart,
+                                            b - laststart,
+                                            upper_bound - 1, b);
+                         b += 1 + 2 * OFFSET_ADDRESS_SIZE;
+                       }
+                   }
+                pending_exact = 0;
+               break;
+
+             invalid_interval:
+               if (!(syntax & RE_INVALID_INTERVAL_ORD))
+                 FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR);
+             unfetch_interval:
+               /* Match the characters as literals.  */
+               p = beg_interval;
+               c = '{';
+               if (syntax & RE_NO_BK_BRACES)
+                 goto normal_char;
+               else
+                 goto normal_backslash;
+             }
+
+#ifdef emacs
+            /* There is no way to specify the before_dot and after_dot
+               operators.  rms says this is ok.  --karl  */
+            case '=':
+              BUF_PUSH (at_dot);
+              break;
+
+            case 's':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
+              break;
+
+            case 'S':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
+              break;
+#endif /* emacs */
+
+
+            case 'w':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (wordchar);
+              break;
+
+
+            case 'W':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (notwordchar);
+              break;
+
+
+            case '<':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbeg);
+              break;
+
+            case '>':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordend);
+              break;
+
+            case 'b':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbound);
+              break;
+
+            case 'B':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (notwordbound);
+              break;
+
+            case '`':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (begbuf);
+              break;
+
+            case '\'':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (endbuf);
+              break;
+
+            case '1': case '2': case '3': case '4': case '5':
+            case '6': case '7': case '8': case '9':
+              if (syntax & RE_NO_BK_REFS)
+                goto normal_char;
+
+              c1 = c - '0';
+
+              if (c1 > regnum)
+                FREE_STACK_RETURN (REG_ESUBREG);
+
+              /* Can't back reference to a subexpression if inside of it.  */
+              if (group_in_compile_stack (compile_stack, (regnum_t) c1))
+                goto normal_char;
+
+              laststart = b;
+              BUF_PUSH_2 (duplicate, c1);
+              break;
+
+
+            case '+':
+            case '?':
+              if (syntax & RE_BK_PLUS_QM)
+                goto handle_plus;
+              else
+                goto normal_backslash;
+
+            default:
+            normal_backslash:
+              /* You might think it would be useful for \ to mean
+                 not to translate; but if we don't translate it
+                 it will never match anything.  */
+              c = TRANSLATE (c);
+              goto normal_char;
+            }
+          break;
+
+
+       default:
+        /* Expects the character in `c'.  */
+       normal_char:
+             /* If no exactn currently being built.  */
+          if (!pending_exact
+#ifdef WCHAR
+             /* If last exactn handle binary(or character) and
+                new exactn handle character(or binary).  */
+             || is_exactn_bin != is_binary[p - 1 - pattern]
+#endif /* WCHAR */
+
+              /* If last exactn not at current position.  */
+              || pending_exact + *pending_exact + 1 != b
+
+              /* We have only one byte following the exactn for the count.  */
+             || *pending_exact == (1 << BYTEWIDTH) - 1
+
+              /* If followed by a repetition operator.  */
+              || *p == '*' || *p == '^'
+             || ((syntax & RE_BK_PLUS_QM)
+                 ? *p == '\\' && (p[1] == '+' || p[1] == '?')
+                 : (*p == '+' || *p == '?'))
+             || ((syntax & RE_INTERVALS)
+                  && ((syntax & RE_NO_BK_BRACES)
+                     ? *p == '{'
+                      : (p[0] == '\\' && p[1] == '{'))))
+           {
+             /* Start building a new exactn.  */
+
+              laststart = b;
+
+#ifdef WCHAR
+             /* Is this exactn binary data or character? */
+             is_exactn_bin = is_binary[p - 1 - pattern];
+             if (is_exactn_bin)
+                 BUF_PUSH_2 (exactn_bin, 0);
+             else
+                 BUF_PUSH_2 (exactn, 0);
+#else
+             BUF_PUSH_2 (exactn, 0);
+#endif /* WCHAR */
+             pending_exact = b - 1;
+            }
+
+         BUF_PUSH (c);
+          (*pending_exact)++;
+         break;
+        } /* switch (c) */
+    } /* while p != pend */
+
+
+  /* Through the pattern now.  */
+
+  if (fixup_alt_jump)
+    STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+  if (!COMPILE_STACK_EMPTY)
+    FREE_STACK_RETURN (REG_EPAREN);
+
+  /* If we don't want backtracking, force success
+     the first time we reach the end of the compiled pattern.  */
+  if (syntax & RE_NO_POSIX_BACKTRACKING)
+    BUF_PUSH (succeed);
+
+#ifdef WCHAR
+  free (pattern);
+  free (mbs_offset);
+  free (is_binary);
+#endif
+  free (compile_stack.stack);
+
+  /* We have succeeded; set the length of the buffer.  */
+#ifdef WCHAR
+  bufp->used = (uintptr_t) b - (uintptr_t) COMPILED_BUFFER_VAR;
+#else
+  bufp->used = b - bufp->buffer;
+#endif
+
+#ifdef DEBUG
+  if (debug)
+    {
+      DEBUG_PRINT1 ("\nCompiled pattern: \n");
+      PREFIX(print_compiled_pattern) (bufp);
+    }
+#endif /* DEBUG */
+
+#ifndef MATCH_MAY_ALLOCATE
+  /* Initialize the failure stack to the largest possible stack.  This
+     isn't necessary unless we're trying to avoid calling alloca in
+     the search and match routines.  */
+  {
+    int num_regs = bufp->re_nsub + 1;
+
+    /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
+       is strictly greater than re_max_failures, the largest possible stack
+       is 2 * re_max_failures failure points.  */
+    if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
+      {
+       fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
+
+# ifdef emacs
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (PREFIX(fail_stack_elt_t) *) xmalloc (fail_stack.size
+                                   * sizeof (PREFIX(fail_stack_elt_t)));
+       else
+         fail_stack.stack
+           = (PREFIX(fail_stack_elt_t) *) xrealloc (fail_stack.stack,
+                                    (fail_stack.size
+                                     * sizeof (PREFIX(fail_stack_elt_t))));
+# else /* not emacs */
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (PREFIX(fail_stack_elt_t) *) malloc (fail_stack.size
+                                  * sizeof (PREFIX(fail_stack_elt_t)));
+       else
+         fail_stack.stack
+           = (PREFIX(fail_stack_elt_t) *) realloc (fail_stack.stack,
+                                           (fail_stack.size
+                                    * sizeof (PREFIX(fail_stack_elt_t))));
+# endif /* not emacs */
+      }
+
+   PREFIX(regex_grow_registers) (num_regs);
+  }
+#endif /* not MATCH_MAY_ALLOCATE */
+
+  return REG_NOERROR;
+} /* regex_compile */
+
+/* Subroutines for `regex_compile'.  */
+
+/* Store OP at LOC followed by two-byte integer parameter ARG.  */
+/* ifdef WCHAR, integer parameter is 1 wchar_t.  */
+
+static void
+PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg)
+{
+  *loc = (UCHAR_T) op;
+  STORE_NUMBER (loc + 1, arg);
+}
+
+
+/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
+/* ifdef WCHAR, integer parameter is 1 wchar_t.  */
+
+static void
+PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2)
+{
+  *loc = (UCHAR_T) op;
+  STORE_NUMBER (loc + 1, arg1);
+  STORE_NUMBER (loc + 1 + OFFSET_ADDRESS_SIZE, arg2);
+}
+
+
+/* Copy the bytes from LOC to END to open up three bytes of space at LOC
+   for OP followed by two-byte integer parameter ARG.  */
+/* ifdef WCHAR, integer parameter is 1 wchar_t.  */
+
+static void
+PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, int arg, UCHAR_T *end)
+{
+  register UCHAR_T *pfrom = end;
+  register UCHAR_T *pto = end + 1 + OFFSET_ADDRESS_SIZE;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  PREFIX(store_op1) (op, loc, arg);
+}
+
+
+/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
+/* ifdef WCHAR, integer parameter is 1 wchar_t.  */
+
+static void
+PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, int arg1,
+                    int arg2, UCHAR_T *end)
+{
+  register UCHAR_T *pfrom = end;
+  register UCHAR_T *pto = end + 1 + 2 * OFFSET_ADDRESS_SIZE;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  PREFIX(store_op2) (op, loc, arg1, arg2);
+}
+
+
+/* P points to just after a ^ in PATTERN.  Return true if that ^ comes
+   after an alternative or a begin-subexpression.  We assume there is at
+   least one character before the ^.  */
+
+static boolean
+PREFIX(at_begline_loc_p) (const CHAR_T *pattern, const CHAR_T *p,
+                          reg_syntax_t syntax)
+{
+  const CHAR_T *prev = p - 2;
+  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
+
+  return
+       /* After a subexpression?  */
+       (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
+       /* After an alternative?  */
+    || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
+}
+
+
+/* The dual of at_begline_loc_p.  This one is for $.  We assume there is
+   at least one character after the $, i.e., `P < PEND'.  */
+
+static boolean
+PREFIX(at_endline_loc_p) (const CHAR_T *p, const CHAR_T *pend,
+                          reg_syntax_t syntax)
+{
+  const CHAR_T *next = p;
+  boolean next_backslash = *next == '\\';
+  const CHAR_T *next_next = p + 1 < pend ? p + 1 : 0;
+
+  return
+       /* Before a subexpression?  */
+       (syntax & RE_NO_BK_PARENS ? *next == ')'
+        : next_backslash && next_next && *next_next == ')')
+       /* Before an alternative?  */
+    || (syntax & RE_NO_BK_VBAR ? *next == '|'
+        : next_backslash && next_next && *next_next == '|');
+}
+
+#else /* not INSIDE_RECURSION */
+
+/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
+   false if it's not.  */
+
+static boolean
+group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum)
+{
+  int this_element;
+
+  for (this_element = compile_stack.avail - 1;
+       this_element >= 0;
+       this_element--)
+    if (compile_stack.stack[this_element].regnum == regnum)
+      return true;
+
+  return false;
+}
+#endif /* not INSIDE_RECURSION */
+
+#ifdef INSIDE_RECURSION
+
+#ifdef WCHAR
+/* This insert space, which size is "num", into the pattern at "loc".
+   "end" must point the end of the allocated buffer.  */
+static void
+insert_space (int num, CHAR_T *loc, CHAR_T *end)
+{
+  register CHAR_T *pto = end;
+  register CHAR_T *pfrom = end - num;
+
+  while (pfrom >= loc)
+    *pto-- = *pfrom--;
+}
+#endif /* WCHAR */
+
+#ifdef WCHAR
+static reg_errcode_t
+wcs_compile_range (CHAR_T range_start_char, const CHAR_T **p_ptr,
+                   const CHAR_T *pend, RE_TRANSLATE_TYPE translate,
+                   reg_syntax_t syntax, CHAR_T *b, CHAR_T *char_set)
+{
+  const CHAR_T *p = *p_ptr;
+  CHAR_T range_start, range_end;
+  reg_errcode_t ret;
+# ifdef _LIBC
+  uint32_t nrules;
+  uint32_t start_val, end_val;
+# endif
+  if (p == pend)
+    return REG_ERANGE;
+
+# ifdef _LIBC
+  nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+  if (nrules != 0)
+    {
+      const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE,
+                                                      _NL_COLLATE_COLLSEQWC);
+      const unsigned char *extra = (const unsigned char *)
+       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+
+      if (range_start_char < -1)
+       {
+         /* range_start is a collating symbol.  */
+         int32_t *wextra;
+         /* Retreive the index and get collation sequence value.  */
+         wextra = (int32_t*)(extra + char_set[-range_start_char]);
+         start_val = wextra[1 + *wextra];
+       }
+      else
+       start_val = collseq_table_lookup(collseq, TRANSLATE(range_start_char));
+
+      end_val = collseq_table_lookup (collseq, TRANSLATE (p[0]));
+
+      /* Report an error if the range is empty and the syntax prohibits
+        this.  */
+      ret = ((syntax & RE_NO_EMPTY_RANGES)
+            && (start_val > end_val))? REG_ERANGE : REG_NOERROR;
+
+      /* Insert space to the end of the char_ranges.  */
+      insert_space(2, b - char_set[5] - 2, b - 1);
+      *(b - char_set[5] - 2) = (wchar_t)start_val;
+      *(b - char_set[5] - 1) = (wchar_t)end_val;
+      char_set[4]++; /* ranges_index */
+    }
+  else
+# endif
+    {
+      range_start = (range_start_char >= 0)? TRANSLATE (range_start_char):
+       range_start_char;
+      range_end = TRANSLATE (p[0]);
+      /* Report an error if the range is empty and the syntax prohibits
+        this.  */
+      ret = ((syntax & RE_NO_EMPTY_RANGES)
+            && (range_start > range_end))? REG_ERANGE : REG_NOERROR;
+
+      /* Insert space to the end of the char_ranges.  */
+      insert_space(2, b - char_set[5] - 2, b - 1);
+      *(b - char_set[5] - 2) = range_start;
+      *(b - char_set[5] - 1) = range_end;
+      char_set[4]++; /* ranges_index */
+    }
+  /* Have to increment the pointer into the pattern string, so the
+     caller isn't still at the ending character.  */
+  (*p_ptr)++;
+
+  return ret;
+}
+#else /* BYTE */
+/* Read the ending character of a range (in a bracket expression) from the
+   uncompiled pattern *P_PTR (which ends at PEND).  We assume the
+   starting character is in `P[-2]'.  (`P[-1]' is the character `-'.)
+   Then we set the translation of all bits between the starting and
+   ending characters (inclusive) in the compiled pattern B.
+
+   Return an error code.
+
+   We use these short variable names so we can use the same macros as
+   `regex_compile' itself.  */
+
+static reg_errcode_t
+byte_compile_range (unsigned int range_start_char, const char **p_ptr,
+                    const char *pend, RE_TRANSLATE_TYPE translate,
+                    reg_syntax_t syntax, unsigned char *b)
+{
+  unsigned this_char;
+  const char *p = *p_ptr;
+  reg_errcode_t ret;
+# if _LIBC
+  const unsigned char *collseq;
+  unsigned int start_colseq;
+  unsigned int end_colseq;
+# else
+  unsigned end_char;
+# endif
+
+  if (p == pend)
+    return REG_ERANGE;
+
+  /* Have to increment the pointer into the pattern string, so the
+     caller isn't still at the ending character.  */
+  (*p_ptr)++;
+
+  /* Report an error if the range is empty and the syntax prohibits this.  */
+  ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
+
+# if _LIBC
+  collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+                                                _NL_COLLATE_COLLSEQMB);
+
+  start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)];
+  end_colseq = collseq[(unsigned char) TRANSLATE (p[0])];
+  for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
+    {
+      unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)];
+
+      if (start_colseq <= this_colseq && this_colseq <= end_colseq)
+       {
+         SET_LIST_BIT (TRANSLATE (this_char));
+         ret = REG_NOERROR;
+       }
+    }
+# else
+  /* Here we see why `this_char' has to be larger than an `unsigned
+     char' -- we would otherwise go into an infinite loop, since all
+     characters <= 0xff.  */
+  range_start_char = TRANSLATE (range_start_char);
+  /* TRANSLATE(p[0]) is casted to char (not unsigned char) in TRANSLATE,
+     and some compilers cast it to int implicitly, so following for_loop
+     may fall to (almost) infinite loop.
+     e.g. If translate[p[0]] = 0xff, end_char may equals to 0xffffffff.
+     To avoid this, we cast p[0] to unsigned int and truncate it.  */
+  end_char = ((unsigned)TRANSLATE(p[0]) & ((1 << BYTEWIDTH) - 1));
+
+  for (this_char = range_start_char; this_char <= end_char; ++this_char)
+    {
+      SET_LIST_BIT (TRANSLATE (this_char));
+      ret = REG_NOERROR;
+    }
+# endif
+
+  return ret;
+}
+#endif /* WCHAR */
+\f
+/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
+   BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
+   characters can start a string that matches the pattern.  This fastmap
+   is used by re_search to skip quickly over impossible starting points.
+
+   The caller must supply the address of a (1 << BYTEWIDTH)-byte data
+   area as BUFP->fastmap.
+
+   We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
+   the pattern buffer.
+
+   Returns 0 if we succeed, -2 if an internal error.   */
+
+#ifdef WCHAR
+/* local function for re_compile_fastmap.
+   truncate wchar_t character to char.  */
+static unsigned char truncate_wchar (CHAR_T c);
+
+static unsigned char
+truncate_wchar (CHAR_T c)
+{
+  unsigned char buf[MB_CUR_MAX];
+  mbstate_t state;
+  int retval;
+  memset (&state, '\0', sizeof (state));
+# ifdef _LIBC
+  retval = __wcrtomb (buf, c, &state);
+# else
+  retval = wcrtomb (buf, c, &state);
+# endif
+  return retval > 0 ? buf[0] : (unsigned char) c;
+}
+#endif /* WCHAR */
+
+static int
+PREFIX(re_compile_fastmap) (struct re_pattern_buffer *bufp)
+{
+  int j, k;
+#ifdef MATCH_MAY_ALLOCATE
+  PREFIX(fail_stack_type) fail_stack;
+#endif
+#ifndef REGEX_MALLOC
+  char *destination;
+#endif
+
+  register char *fastmap = bufp->fastmap;
+
+#ifdef WCHAR
+  /* We need to cast pattern to (wchar_t*), because we casted this compiled
+     pattern to (char*) in regex_compile.  */
+  UCHAR_T *pattern = (UCHAR_T*)bufp->buffer;
+  register UCHAR_T *pend = (UCHAR_T*) (bufp->buffer + bufp->used);
+#else /* BYTE */
+  UCHAR_T *pattern = bufp->buffer;
+  register UCHAR_T *pend = pattern + bufp->used;
+#endif /* WCHAR */
+  UCHAR_T *p = pattern;
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* Assume that each path through the pattern can be null until
+     proven otherwise.  We set this false at the bottom of switch
+     statement, to which we get only if a particular path doesn't
+     match the empty string.  */
+  boolean path_can_be_null = true;
+
+  /* We aren't doing a `succeed_n' to begin with.  */
+  boolean succeed_n_p = false;
+
+  assert (fastmap != NULL && p != NULL);
+
+  INIT_FAIL_STACK ();
+  bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
+  bufp->fastmap_accurate = 1;      /* It will be when we're done.  */
+  bufp->can_be_null = 0;
+
+  while (1)
+    {
+      if (p == pend || *p == (UCHAR_T) succeed)
+       {
+         /* We have reached the (effective) end of pattern.  */
+         if (!FAIL_STACK_EMPTY ())
+           {
+             bufp->can_be_null |= path_can_be_null;
+
+             /* Reset for next path.  */
+             path_can_be_null = true;
+
+             p = fail_stack.stack[--fail_stack.avail].pointer;
+
+             continue;
+           }
+         else
+           break;
+       }
+
+      /* We should never be about to go beyond the end of the pattern.  */
+      assert (p < pend);
+
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+
+        /* I guess the idea here is to simply not bother with a fastmap
+           if a backreference is used, since it's too hard to figure out
+           the fastmap for the corresponding group.  Setting
+           `can_be_null' stops `re_search_2' from using the fastmap, so
+           that is all we do.  */
+       case duplicate:
+         bufp->can_be_null = 1;
+          goto done;
+
+
+      /* Following are the cases which match a character.  These end
+         with `break'.  */
+
+#ifdef WCHAR
+       case exactn:
+          fastmap[truncate_wchar(p[1])] = 1;
+         break;
+#else /* BYTE */
+       case exactn:
+          fastmap[p[1]] = 1;
+         break;
+#endif /* WCHAR */
+#ifdef MBS_SUPPORT
+       case exactn_bin:
+         fastmap[p[1]] = 1;
+         break;
+#endif
+
+#ifdef WCHAR
+        /* It is hard to distinguish fastmap from (multi byte) characters
+           which depends on current locale.  */
+        case charset:
+       case charset_not:
+       case wordchar:
+       case notwordchar:
+          bufp->can_be_null = 1;
+          goto done;
+#else /* BYTE */
+        case charset:
+          for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
+              fastmap[j] = 1;
+         break;
+
+
+       case charset_not:
+         /* Chars beyond end of map must be allowed.  */
+         for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
+            fastmap[j] = 1;
+
+         for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
+              fastmap[j] = 1;
+          break;
+
+
+       case wordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == Sword)
+             fastmap[j] = 1;
+         break;
+
+
+       case notwordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != Sword)
+             fastmap[j] = 1;
+         break;
+#endif /* WCHAR */
+
+        case anychar:
+         {
+           int fastmap_newline = fastmap['\n'];
+
+           /* `.' matches anything ...  */
+           for (j = 0; j < (1 << BYTEWIDTH); j++)
+             fastmap[j] = 1;
+
+           /* ... except perhaps newline.  */
+           if (!(bufp->syntax & RE_DOT_NEWLINE))
+             fastmap['\n'] = fastmap_newline;
+
+           /* Return if we have already set `can_be_null'; if we have,
+              then the fastmap is irrelevant.  Something's wrong here.  */
+           else if (bufp->can_be_null)
+             goto done;
+
+           /* Otherwise, have to check alternative paths.  */
+           break;
+         }
+
+#ifdef emacs
+        case syntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+       case notsyntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+      /* All cases after this match the empty string.  These end with
+         `continue'.  */
+
+
+       case before_dot:
+       case at_dot:
+       case after_dot:
+          continue;
+#endif /* emacs */
+
+
+        case no_op:
+        case begline:
+        case endline:
+       case begbuf:
+       case endbuf:
+       case wordbound:
+       case notwordbound:
+       case wordbeg:
+       case wordend:
+        case push_dummy_failure:
+          continue;
+
+
+       case jump_n:
+        case pop_failure_jump:
+       case maybe_pop_jump:
+       case jump:
+        case jump_past_alt:
+       case dummy_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+         p += j;
+         if (j > 0)
+           continue;
+
+          /* Jump backward implies we just went through the body of a
+             loop and matched nothing.  Opcode jumped to should be
+             `on_failure_jump' or `succeed_n'.  Just treat it like an
+             ordinary jump.  For a * loop, it has pushed its failure
+             point already; if so, discard that as redundant.  */
+          if ((re_opcode_t) *p != on_failure_jump
+             && (re_opcode_t) *p != succeed_n)
+           continue;
+
+          p++;
+          EXTRACT_NUMBER_AND_INCR (j, p);
+          p += j;
+
+          /* If what's on the stack is where we are now, pop it.  */
+          if (!FAIL_STACK_EMPTY ()
+             && fail_stack.stack[fail_stack.avail - 1].pointer == p)
+            fail_stack.avail--;
+
+          continue;
+
+
+        case on_failure_jump:
+        case on_failure_keep_string_jump:
+       handle_on_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+
+          /* For some patterns, e.g., `(a?)?', `p+j' here points to the
+             end of the pattern.  We don't want to push such a point,
+             since when we restore it above, entering the switch will
+             increment `p' past the end of the pattern.  We don't need
+             to push such a point since we obviously won't find any more
+             fastmap entries beyond `pend'.  Such a pattern can match
+             the null string, though.  */
+          if (p + j < pend)
+            {
+              if (!PUSH_PATTERN_OP (p + j, fail_stack))
+               {
+                 RESET_FAIL_STACK ();
+                 return -2;
+               }
+            }
+          else
+            bufp->can_be_null = 1;
+
+          if (succeed_n_p)
+            {
+              EXTRACT_NUMBER_AND_INCR (k, p);  /* Skip the n.  */
+              succeed_n_p = false;
+           }
+
+          continue;
+
+
+       case succeed_n:
+          /* Get to the number of times to succeed.  */
+          p += OFFSET_ADDRESS_SIZE;
+
+          /* Increment p past the n for when k != 0.  */
+          EXTRACT_NUMBER_AND_INCR (k, p);
+          if (k == 0)
+           {
+              p -= 2 * OFFSET_ADDRESS_SIZE;
+             succeed_n_p = true;  /* Spaghetti code alert.  */
+              goto handle_on_failure_jump;
+            }
+          continue;
+
+
+       case set_number_at:
+          p += 2 * OFFSET_ADDRESS_SIZE;
+          continue;
+
+
+       case start_memory:
+        case stop_memory:
+         p += 2;
+         continue;
+
+
+       default:
+          abort (); /* We have listed all the cases.  */
+        } /* switch *p++ */
+
+      /* Getting here means we have found the possible starting
+         characters for one path of the pattern -- and that the empty
+         string does not match.  We need not follow this path further.
+         Instead, look at the next alternative (remembered on the
+         stack), or quit if no more.  The test at the top of the loop
+         does these things.  */
+      path_can_be_null = false;
+      p = pend;
+    } /* while p */
+
+  /* Set `can_be_null' for the last path (also the first path, if the
+     pattern is empty).  */
+  bufp->can_be_null |= path_can_be_null;
+
+ done:
+  RESET_FAIL_STACK ();
+  return 0;
+}
+
+#else /* not INSIDE_RECURSION */
+
+int
+re_compile_fastmap (struct re_pattern_buffer *bufp)
+{
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    return wcs_re_compile_fastmap(bufp);
+  else
+# endif
+    return byte_re_compile_fastmap(bufp);
+} /* re_compile_fastmap */
+#ifdef _LIBC
+weak_alias (__re_compile_fastmap, re_compile_fastmap)
+#endif
+\f
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
+   this memory for recording register information.  STARTS and ENDS
+   must be allocated using the malloc library routine, and must each
+   be at least NUM_REGS * sizeof (regoff_t) bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+
+void
+re_set_registers (struct re_pattern_buffer *bufp,
+                  struct re_registers *regs, unsigned num_regs,
+                  regoff_t *starts, regoff_t *ends)
+{
+  if (num_regs)
+    {
+      bufp->regs_allocated = REGS_REALLOCATE;
+      regs->num_regs = num_regs;
+      regs->start = starts;
+      regs->end = ends;
+    }
+  else
+    {
+      bufp->regs_allocated = REGS_UNALLOCATED;
+      regs->num_regs = 0;
+      regs->start = regs->end = (regoff_t *) 0;
+    }
+}
+#ifdef _LIBC
+weak_alias (__re_set_registers, re_set_registers)
+#endif
+\f
+/* Searching routines.  */
+
+/* Like re_search_2, below, but only one string is specified, and
+   doesn't let you say where to stop matching.  */
+
+int
+re_search (struct re_pattern_buffer *bufp, const char *string, int size,
+           int startpos, int range, struct re_registers *regs)
+{
+  return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
+                     regs, size);
+}
+#ifdef _LIBC
+weak_alias (__re_search, re_search)
+#endif
+
+
+/* Using the compiled pattern in BUFP->buffer, first tries to match the
+   virtual concatenation of STRING1 and STRING2, starting first at index
+   STARTPOS, then at STARTPOS + 1, and so on.
+
+   STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
+
+   RANGE is how far to scan while trying to match.  RANGE = 0 means try
+   only at STARTPOS; in general, the last start tried is STARTPOS +
+   RANGE.
+
+   In REGS, return the indices of the virtual concatenation of STRING1
+   and STRING2 that matched the entire BUFP->buffer and its contained
+   subexpressions.
+
+   Do not consider matching one past the index STOP in the virtual
+   concatenation of STRING1 and STRING2.
+
+   We return either the position in the strings at which the match was
+   found, -1 if no match, or -2 if error (such as failure
+   stack overflow).  */
+
+int
+re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1,
+             const char *string2, int size2, int startpos, int range,
+             struct re_registers *regs, int stop)
+{
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    return wcs_re_search_2 (bufp, string1, size1, string2, size2, startpos,
+                           range, regs, stop);
+  else
+# endif
+    return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos,
+                            range, regs, stop);
+} /* re_search_2 */
+#ifdef _LIBC
+weak_alias (__re_search_2, re_search_2)
+#endif
+
+#endif /* not INSIDE_RECURSION */
+
+#ifdef INSIDE_RECURSION
+
+#ifdef MATCH_MAY_ALLOCATE
+# define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
+#else
+# define FREE_VAR(var) if (var) free (var); var = NULL
+#endif
+
+#ifdef WCHAR
+# define MAX_ALLOCA_SIZE       2000
+
+# define FREE_WCS_BUFFERS() \
+  do {                                                                       \
+    if (size1 > MAX_ALLOCA_SIZE)                                             \
+      {                                                                              \
+       free (wcs_string1);                                                   \
+       free (mbs_offset1);                                                   \
+      }                                                                              \
+    else                                                                     \
+      {                                                                              \
+       FREE_VAR (wcs_string1);                                               \
+       FREE_VAR (mbs_offset1);                                               \
+      }                                                                              \
+    if (size2 > MAX_ALLOCA_SIZE)                                             \
+      {                                                                              \
+       free (wcs_string2);                                                   \
+       free (mbs_offset2);                                                   \
+      }                                                                              \
+    else                                                                     \
+      {                                                                              \
+       FREE_VAR (wcs_string2);                                               \
+       FREE_VAR (mbs_offset2);                                               \
+      }                                                                              \
+  } while (0)
+
+#endif
+
+
+static int
+PREFIX(re_search_2) (struct re_pattern_buffer *bufp, const char *string1,
+                     int size1, const char *string2, int size2,
+                     int startpos, int range,
+                     struct re_registers *regs, int stop)
+{
+  int val;
+  register char *fastmap = bufp->fastmap;
+  register RE_TRANSLATE_TYPE translate = bufp->translate;
+  int total_size = size1 + size2;
+  int endpos = startpos + range;
+#ifdef WCHAR
+  /* We need wchar_t* buffers correspond to cstring1, cstring2.  */
+  wchar_t *wcs_string1 = NULL, *wcs_string2 = NULL;
+  /* We need the size of wchar_t buffers correspond to csize1, csize2.  */
+  int wcs_size1 = 0, wcs_size2 = 0;
+  /* offset buffer for optimizatoin. See convert_mbs_to_wc.  */
+  int *mbs_offset1 = NULL, *mbs_offset2 = NULL;
+  /* They hold whether each wchar_t is binary data or not.  */
+  char *is_binary = NULL;
+#endif /* WCHAR */
+
+  /* Check for out-of-range STARTPOS.  */
+  if (startpos < 0 || startpos > total_size)
+    return -1;
+
+  /* Fix up RANGE if it might eventually take us outside
+     the virtual concatenation of STRING1 and STRING2.
+     Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
+  if (endpos < 0)
+    range = 0 - startpos;
+  else if (endpos > total_size)
+    range = total_size - startpos;
+
+  /* If the search isn't to be a backwards one, don't waste time in a
+     search for a pattern that must be anchored.  */
+  if (bufp->used > 0 && range > 0
+      && ((re_opcode_t) bufp->buffer[0] == begbuf
+         /* `begline' is like `begbuf' if it cannot match at newlines.  */
+         || ((re_opcode_t) bufp->buffer[0] == begline
+             && !bufp->newline_anchor)))
+    {
+      if (startpos > 0)
+       return -1;
+      else
+       range = 1;
+    }
+
+#ifdef emacs
+  /* In a forward search for something that starts with \=.
+     don't keep searching past point.  */
+  if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
+    {
+      range = PT - startpos;
+      if (range <= 0)
+       return -1;
+    }
+#endif /* emacs */
+
+  /* Update the fastmap now if not correct already.  */
+  if (fastmap && !bufp->fastmap_accurate)
+    if (re_compile_fastmap (bufp) == -2)
+      return -2;
+
+#ifdef WCHAR
+  /* Allocate wchar_t array for wcs_string1 and wcs_string2 and
+     fill them with converted string.  */
+  if (size1 != 0)
+    {
+      if (size1 > MAX_ALLOCA_SIZE)
+       {
+         wcs_string1 = TALLOC (size1 + 1, CHAR_T);
+         mbs_offset1 = TALLOC (size1 + 1, int);
+         is_binary = TALLOC (size1 + 1, char);
+       }
+      else
+       {
+         wcs_string1 = REGEX_TALLOC (size1 + 1, CHAR_T);
+         mbs_offset1 = REGEX_TALLOC (size1 + 1, int);
+         is_binary = REGEX_TALLOC (size1 + 1, char);
+       }
+      if (!wcs_string1 || !mbs_offset1 || !is_binary)
+       {
+         if (size1 > MAX_ALLOCA_SIZE)
+           {
+             free (wcs_string1);
+             free (mbs_offset1);
+             free (is_binary);
+           }
+         else
+           {
+             FREE_VAR (wcs_string1);
+             FREE_VAR (mbs_offset1);
+             FREE_VAR (is_binary);
+           }
+         return -2;
+       }
+      wcs_size1 = convert_mbs_to_wcs(wcs_string1, string1, size1,
+                                    mbs_offset1, is_binary);
+      wcs_string1[wcs_size1] = L'\0'; /* for a sentinel  */
+      if (size1 > MAX_ALLOCA_SIZE)
+       free (is_binary);
+      else
+       FREE_VAR (is_binary);
+    }
+  if (size2 != 0)
+    {
+      if (size2 > MAX_ALLOCA_SIZE)
+       {
+         wcs_string2 = TALLOC (size2 + 1, CHAR_T);
+         mbs_offset2 = TALLOC (size2 + 1, int);
+         is_binary = TALLOC (size2 + 1, char);
+       }
+      else
+       {
+         wcs_string2 = REGEX_TALLOC (size2 + 1, CHAR_T);
+         mbs_offset2 = REGEX_TALLOC (size2 + 1, int);
+         is_binary = REGEX_TALLOC (size2 + 1, char);
+       }
+      if (!wcs_string2 || !mbs_offset2 || !is_binary)
+       {
+         FREE_WCS_BUFFERS ();
+         if (size2 > MAX_ALLOCA_SIZE)
+           free (is_binary);
+         else
+           FREE_VAR (is_binary);
+         return -2;
+       }
+      wcs_size2 = convert_mbs_to_wcs(wcs_string2, string2, size2,
+                                    mbs_offset2, is_binary);
+      wcs_string2[wcs_size2] = L'\0'; /* for a sentinel  */
+      if (size2 > MAX_ALLOCA_SIZE)
+       free (is_binary);
+      else
+       FREE_VAR (is_binary);
+    }
+#endif /* WCHAR */
+
+
+  /* Loop through the string, looking for a place to start matching.  */
+  for (;;)
+    {
+      /* If a fastmap is supplied, skip quickly over characters that
+         cannot be the start of a match.  If the pattern can match the
+         null string, however, we don't need to skip characters; we want
+         the first null string.  */
+      if (fastmap && startpos < total_size && !bufp->can_be_null)
+       {
+         if (range > 0)        /* Searching forwards.  */
+           {
+             register const char *d;
+             register int lim = 0;
+             int irange = range;
+
+              if (startpos < size1 && startpos + range >= size1)
+                lim = range - (size1 - startpos);
+
+             d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
+
+              /* Written out as an if-else to avoid testing `translate'
+                 inside the loop.  */
+             if (translate)
+                while (range > lim
+                       && !fastmap[(unsigned char)
+                                  translate[(unsigned char) *d++]])
+                  range--;
+             else
+                while (range > lim && !fastmap[(unsigned char) *d++])
+                  range--;
+
+             startpos += irange - range;
+           }
+         else                          /* Searching backwards.  */
+           {
+             register CHAR_T c = (size1 == 0 || startpos >= size1
+                                     ? string2[startpos - size1]
+                                     : string1[startpos]);
+
+             if (!fastmap[(unsigned char) TRANSLATE (c)])
+               goto advance;
+           }
+       }
+
+      /* If can't match the null string, and that's all we have left, fail.  */
+      if (range >= 0 && startpos == total_size && fastmap
+          && !bufp->can_be_null)
+       {
+#ifdef WCHAR
+         FREE_WCS_BUFFERS ();
+#endif
+         return -1;
+       }
+
+#ifdef WCHAR
+      val = wcs_re_match_2_internal (bufp, string1, size1, string2,
+                                    size2, startpos, regs, stop,
+                                    wcs_string1, wcs_size1,
+                                    wcs_string2, wcs_size2,
+                                    mbs_offset1, mbs_offset2);
+#else /* BYTE */
+      val = byte_re_match_2_internal (bufp, string1, size1, string2,
+                                     size2, startpos, regs, stop);
+#endif /* BYTE */
+
+#ifndef REGEX_MALLOC
+# ifdef C_ALLOCA
+      alloca (0);
+# endif
+#endif
+
+      if (val >= 0)
+       {
+#ifdef WCHAR
+         FREE_WCS_BUFFERS ();
+#endif
+         return startpos;
+       }
+
+      if (val == -2)
+       {
+#ifdef WCHAR
+         FREE_WCS_BUFFERS ();
+#endif
+         return -2;
+       }
+
+    advance:
+      if (!range)
+        break;
+      else if (range > 0)
+        {
+          range--;
+          startpos++;
+        }
+      else
+        {
+          range++;
+          startpos--;
+        }
+    }
+#ifdef WCHAR
+  FREE_WCS_BUFFERS ();
+#endif
+  return -1;
+}
+
+#ifdef WCHAR
+/* This converts PTR, a pointer into one of the search wchar_t strings
+   `string1' and `string2' into an multibyte string offset from the
+   beginning of that string. We use mbs_offset to optimize.
+   See convert_mbs_to_wcs.  */
+# define POINTER_TO_OFFSET(ptr)                                                \
+  (FIRST_STRING_P (ptr)                                                        \
+   ? ((regoff_t)(mbs_offset1 != NULL? mbs_offset1[(ptr)-string1] : 0)) \
+   : ((regoff_t)((mbs_offset2 != NULL? mbs_offset2[(ptr)-string2] : 0) \
+                + csize1)))
+#else /* BYTE */
+/* This converts PTR, a pointer into one of the search strings `string1'
+   and `string2' into an offset from the beginning of that string.  */
+# define POINTER_TO_OFFSET(ptr)                        \
+  (FIRST_STRING_P (ptr)                                \
+   ? ((regoff_t) ((ptr) - string1))            \
+   : ((regoff_t) ((ptr) - string2 + size1)))
+#endif /* WCHAR */
+
+/* Macros for dealing with the split strings in re_match_2.  */
+
+#define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
+
+/* Call before fetching a character with *d.  This switches over to
+   string2 if necessary.  */
+#define PREFETCH()                                                     \
+  while (d == dend)                                                    \
+    {                                                                  \
+      /* End of string2 => fail.  */                                   \
+      if (dend == end_match_2)                                                 \
+        goto fail;                                                     \
+      /* End of string1 => advance to string2.  */                     \
+      d = string2;                                                     \
+      dend = end_match_2;                                              \
+    }
+
+/* Test if at very beginning or at very end of the virtual concatenation
+   of `string1' and `string2'.  If only one string, it's `string2'.  */
+#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
+#define AT_STRINGS_END(d) ((d) == end2)
+
+
+/* Test if D points to a character which is word-constituent.  We have
+   two special cases to check for: if past the end of string1, look at
+   the first character in string2; and if before the beginning of
+   string2, look at the last character in string1.  */
+#ifdef WCHAR
+/* Use internationalized API instead of SYNTAX.  */
+# define WORDCHAR_P(d)                                                 \
+  (iswalnum ((wint_t)((d) == end1 ? *string2                           \
+           : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0            \
+   || ((d) == end1 ? *string2                                          \
+       : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_')
+#else /* BYTE */
+# define WORDCHAR_P(d)                                                 \
+  (SYNTAX ((d) == end1 ? *string2                                      \
+           : (d) == string2 - 1 ? *(end1 - 1) : *(d))                  \
+   == Sword)
+#endif /* WCHAR */
+
+/* Disabled due to a compiler bug -- see comment at case wordbound */
+#if 0
+/* Test if the character before D and the one at D differ with respect
+   to being word-constituent.  */
+#define AT_WORD_BOUNDARY(d)                                            \
+  (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                            \
+   || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
+#endif
+
+/* Free everything we malloc.  */
+#ifdef MATCH_MAY_ALLOCATE
+# ifdef WCHAR
+#  define FREE_VARIABLES()                                             \
+  do {                                                                 \
+    REGEX_FREE_STACK (fail_stack.stack);                               \
+    FREE_VAR (regstart);                                               \
+    FREE_VAR (regend);                                                 \
+    FREE_VAR (old_regstart);                                           \
+    FREE_VAR (old_regend);                                             \
+    FREE_VAR (best_regstart);                                          \
+    FREE_VAR (best_regend);                                            \
+    FREE_VAR (reg_info);                                               \
+    FREE_VAR (reg_dummy);                                              \
+    FREE_VAR (reg_info_dummy);                                         \
+    if (!cant_free_wcs_buf)                                            \
+      {                                                                        \
+        FREE_VAR (string1);                                            \
+        FREE_VAR (string2);                                            \
+        FREE_VAR (mbs_offset1);                                                \
+        FREE_VAR (mbs_offset2);                                                \
+      }                                                                        \
+  } while (0)
+# else /* BYTE */
+#  define FREE_VARIABLES()                                             \
+  do {                                                                 \
+    REGEX_FREE_STACK (fail_stack.stack);                               \
+    FREE_VAR (regstart);                                               \
+    FREE_VAR (regend);                                                 \
+    FREE_VAR (old_regstart);                                           \
+    FREE_VAR (old_regend);                                             \
+    FREE_VAR (best_regstart);                                          \
+    FREE_VAR (best_regend);                                            \
+    FREE_VAR (reg_info);                                               \
+    FREE_VAR (reg_dummy);                                              \
+    FREE_VAR (reg_info_dummy);                                         \
+  } while (0)
+# endif /* WCHAR */
+#else
+# ifdef WCHAR
+#  define FREE_VARIABLES()                                             \
+  do {                                                                 \
+    if (!cant_free_wcs_buf)                                            \
+      {                                                                        \
+        FREE_VAR (string1);                                            \
+        FREE_VAR (string2);                                            \
+        FREE_VAR (mbs_offset1);                                                \
+        FREE_VAR (mbs_offset2);                                                \
+      }                                                                        \
+  } while (0)
+# else /* BYTE */
+#  define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning. */
+# endif /* WCHAR */
+#endif /* not MATCH_MAY_ALLOCATE */
+
+/* These values must meet several constraints.  They must not be valid
+   register values; since we have a limit of 255 registers (because
+   we use only one byte in the pattern for the register number), we can
+   use numbers larger than 255.  They must differ by 1, because of
+   NUM_FAILURE_ITEMS above.  And the value for the lowest register must
+   be larger than the value for the highest register, so we do not try
+   to actually save any registers when none are active.  */
+#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
+#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
+\f
+#else /* not INSIDE_RECURSION */
+/* Matching routines.  */
+
+#ifndef emacs   /* Emacs never uses this.  */
+/* re_match is like re_match_2 except it takes only a single string.  */
+
+int
+re_match (struct re_pattern_buffer *bufp, const char *string,
+          int size, int pos, struct re_registers *regs)
+{
+  int result;
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    result = wcs_re_match_2_internal (bufp, NULL, 0, string, size,
+                                     pos, regs, size,
+                                     NULL, 0, NULL, 0, NULL, NULL);
+  else
+# endif
+    result = byte_re_match_2_internal (bufp, NULL, 0, string, size,
+                                 pos, regs, size);
+# ifndef REGEX_MALLOC
+#  ifdef C_ALLOCA
+  alloca (0);
+#  endif
+# endif
+  return result;
+}
+# ifdef _LIBC
+weak_alias (__re_match, re_match)
+# endif
+#endif /* not emacs */
+
+#endif /* not INSIDE_RECURSION */
+
+#ifdef INSIDE_RECURSION
+static boolean PREFIX(group_match_null_string_p) (UCHAR_T **p,
+                                                  UCHAR_T *end,
+                                       PREFIX(register_info_type) *reg_info);
+static boolean PREFIX(alt_match_null_string_p) (UCHAR_T *p,
+                                                UCHAR_T *end,
+                                       PREFIX(register_info_type) *reg_info);
+static boolean PREFIX(common_op_match_null_string_p) (UCHAR_T **p,
+                                                      UCHAR_T *end,
+                                       PREFIX(register_info_type) *reg_info);
+static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2,
+                                   int len, char *translate);
+#else /* not INSIDE_RECURSION */
+
+/* re_match_2 matches the compiled pattern in BUFP against the
+   the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
+   and SIZE2, respectively).  We start matching at POS, and stop
+   matching at STOP.
+
+   If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
+   store offsets for the substring each group matched in REGS.  See the
+   documentation for exactly how many groups we fill.
+
+   We return -1 if no match, -2 if an internal error (such as the
+   failure stack overflowing).  Otherwise, we return the length of the
+   matched substring.  */
+
+int
+re_match_2 (struct re_pattern_buffer *bufp, const char *string1, int size1,
+            const char *string2, int size2, int pos,
+            struct re_registers *regs, int stop)
+{
+  int result;
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    result = wcs_re_match_2_internal (bufp, string1, size1, string2, size2,
+                                     pos, regs, stop,
+                                     NULL, 0, NULL, 0, NULL, NULL);
+  else
+# endif
+    result = byte_re_match_2_internal (bufp, string1, size1, string2, size2,
+                                 pos, regs, stop);
+
+#ifndef REGEX_MALLOC
+# ifdef C_ALLOCA
+  alloca (0);
+# endif
+#endif
+  return result;
+}
+#ifdef _LIBC
+weak_alias (__re_match_2, re_match_2)
+#endif
+
+#endif /* not INSIDE_RECURSION */
+
+#ifdef INSIDE_RECURSION
+
+#ifdef WCHAR
+static int count_mbs_length (int *, int);
+
+/* This check the substring (from 0, to length) of the multibyte string,
+   to which offset_buffer correspond. And count how many wchar_t_characters
+   the substring occupy. We use offset_buffer to optimization.
+   See convert_mbs_to_wcs.  */
+
+static int
+count_mbs_length(int *offset_buffer, int length)
+{
+  int upper, lower;
+
+  /* Check whether the size is valid.  */
+  if (length < 0)
+    return -1;
+
+  if (offset_buffer == NULL)
+    return 0;
+
+  /* If there are no multibyte character, offset_buffer[i] == i.
+   Optmize for this case.  */
+  if (offset_buffer[length] == length)
+    return length;
+
+  /* Set up upper with length. (because for all i, offset_buffer[i] >= i)  */
+  upper = length;
+  lower = 0;
+
+  while (true)
+    {
+      int middle = (lower + upper) / 2;
+      if (middle == lower || middle == upper)
+       break;
+      if (offset_buffer[middle] > length)
+       upper = middle;
+      else if (offset_buffer[middle] < length)
+       lower = middle;
+      else
+       return middle;
+    }
+
+  return -1;
+}
+#endif /* WCHAR */
+
+/* This is a separate function so that we can force an alloca cleanup
+   afterwards.  */
+#ifdef WCHAR
+static int
+wcs_re_match_2_internal (struct re_pattern_buffer *bufp,
+                         const char *cstring1, int csize1,
+                         const char *cstring2, int csize2,
+                         int pos,
+                        struct re_registers *regs,
+                         int stop,
+     /* string1 == string2 == NULL means string1/2, size1/2 and
+       mbs_offset1/2 need seting up in this function.  */
+     /* We need wchar_t* buffers correspond to cstring1, cstring2.  */
+                         wchar_t *string1, int size1,
+                         wchar_t *string2, int size2,
+     /* offset buffer for optimizatoin. See convert_mbs_to_wc.  */
+                        int *mbs_offset1, int *mbs_offset2)
+#else /* BYTE */
+static int
+byte_re_match_2_internal (struct re_pattern_buffer *bufp,
+                          const char *string1, int size1,
+                          const char *string2, int size2,
+                          int pos,
+                         struct re_registers *regs, int stop)
+#endif /* BYTE */
+{
+  /* General temporaries.  */
+  int mcnt;
+  UCHAR_T *p1;
+#ifdef WCHAR
+  /* They hold whether each wchar_t is binary data or not.  */
+  char *is_binary = NULL;
+  /* If true, we can't free string1/2, mbs_offset1/2.  */
+  int cant_free_wcs_buf = 1;
+#endif /* WCHAR */
+
+  /* Just past the end of the corresponding string.  */
+  const CHAR_T *end1, *end2;
+
+  /* Pointers into string1 and string2, just past the last characters in
+     each to consider matching.  */
+  const CHAR_T *end_match_1, *end_match_2;
+
+  /* Where we are in the data, and the end of the current string.  */
+  const CHAR_T *d, *dend;
+
+  /* Where we are in the pattern, and the end of the pattern.  */
+#ifdef WCHAR
+  UCHAR_T *pattern, *p;
+  register UCHAR_T *pend;
+#else /* BYTE */
+  UCHAR_T *p = bufp->buffer;
+  register UCHAR_T *pend = p + bufp->used;
+#endif /* WCHAR */
+
+  /* Mark the opcode just after a start_memory, so we can test for an
+     empty subpattern when we get to the stop_memory.  */
+  UCHAR_T *just_past_start_mem = 0;
+
+  /* We use this to map every character in the string.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Failure point stack.  Each place that can handle a failure further
+     down the line pushes a failure point on this stack.  It consists of
+     restart, regend, and reg_info for all registers corresponding to
+     the subexpressions we're currently inside, plus the number of such
+     registers, and, finally, two char *'s.  The first char * is where
+     to resume scanning the pattern; the second one is where to resume
+     scanning the strings.  If the latter is zero, the failure point is
+     a ``dummy''; if a failure happens and the failure point is a dummy,
+     it gets discarded and the next next one is tried.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  PREFIX(fail_stack_type) fail_stack;
+#endif
+#ifdef DEBUG
+  static unsigned failure_id;
+  unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
+#endif
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* We fill all the registers internally, independent of what we
+     return, for use in backreferences.  The number here includes
+     an element for register zero.  */
+  size_t num_regs = bufp->re_nsub + 1;
+
+  /* The currently active registers.  */
+  active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+  active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+
+  /* Information on the contents of registers. These are pointers into
+     the input strings; they record just what was matched (on this
+     attempt) by a subexpression part of the pattern, that is, the
+     regnum-th regstart pointer points to where in the pattern we began
+     matching and the regnum-th regend points to right after where we
+     stopped matching the regnum-th subexpression.  (The zeroth register
+     keeps track of what the whole pattern matches.)  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const CHAR_T **regstart, **regend;
+#endif
+
+  /* If a group that's operated upon by a repetition operator fails to
+     match anything, then the register for its start will need to be
+     restored because it will have been set to wherever in the string we
+     are when we last see its open-group operator.  Similarly for a
+     register's end.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const CHAR_T **old_regstart, **old_regend;
+#endif
+
+  /* The is_active field of reg_info helps us keep track of which (possibly
+     nested) subexpressions we are currently in. The matched_something
+     field of reg_info[reg_num] helps us tell whether or not we have
+     matched any of the pattern so far this time through the reg_num-th
+     subexpression.  These two fields get reset each time through any
+     loop their register is in.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  PREFIX(register_info_type) *reg_info;
+#endif
+
+  /* The following record the register info as found in the above
+     variables when we find a match better than any we've seen before.
+     This happens as we backtrack through the failure points, which in
+     turn happens only if we have not yet matched the entire string. */
+  unsigned best_regs_set = false;
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const CHAR_T **best_regstart, **best_regend;
+#endif
+
+  /* Logically, this is `best_regend[0]'.  But we don't want to have to
+     allocate space for that if we're not allocating space for anything
+     else (see below).  Also, we never need info about register 0 for
+     any of the other register vectors, and it seems rather a kludge to
+     treat `best_regend' differently than the rest.  So we keep track of
+     the end of the best match so far in a separate variable.  We
+     initialize this to NULL so that when we backtrack the first time
+     and need to test it, it's not garbage.  */
+  const CHAR_T *match_end = NULL;
+
+  /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
+  int set_regs_matched_done = 0;
+
+  /* Used when we pop values we don't care about.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const CHAR_T **reg_dummy;
+  PREFIX(register_info_type) *reg_info_dummy;
+#endif
+
+#ifdef DEBUG
+  /* Counts the total number of registers pushed.  */
+  unsigned num_regs_pushed = 0;
+#endif
+
+  DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
+
+  INIT_FAIL_STACK ();
+
+#ifdef MATCH_MAY_ALLOCATE
+  /* Do not bother to initialize all the register variables if there are
+     no groups in the pattern, as it takes a fair amount of time.  If
+     there are groups, we include space for register 0 (the whole
+     pattern), even though we never use it, since it simplifies the
+     array indexing.  We should fix this.  */
+  if (bufp->re_nsub)
+    {
+      regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
+      regend = REGEX_TALLOC (num_regs, const CHAR_T *);
+      old_regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
+      old_regend = REGEX_TALLOC (num_regs, const CHAR_T *);
+      best_regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
+      best_regend = REGEX_TALLOC (num_regs, const CHAR_T *);
+      reg_info = REGEX_TALLOC (num_regs, PREFIX(register_info_type));
+      reg_dummy = REGEX_TALLOC (num_regs, const CHAR_T *);
+      reg_info_dummy = REGEX_TALLOC (num_regs, PREFIX(register_info_type));
+
+      if (!(regstart && regend && old_regstart && old_regend && reg_info
+            && best_regstart && best_regend && reg_dummy && reg_info_dummy))
+        {
+          FREE_VARIABLES ();
+          return -2;
+        }
+    }
+  else
+    {
+      /* We must initialize all our variables to NULL, so that
+         `FREE_VARIABLES' doesn't try to free them.  */
+      regstart = regend = old_regstart = old_regend = best_regstart
+        = best_regend = reg_dummy = NULL;
+      reg_info = reg_info_dummy = (PREFIX(register_info_type) *) NULL;
+    }
+#endif /* MATCH_MAY_ALLOCATE */
+
+  /* The starting position is bogus.  */
+#ifdef WCHAR
+  if (pos < 0 || pos > csize1 + csize2)
+#else /* BYTE */
+  if (pos < 0 || pos > size1 + size2)
+#endif
+    {
+      FREE_VARIABLES ();
+      return -1;
+    }
+
+#ifdef WCHAR
+  /* Allocate wchar_t array for string1 and string2 and
+     fill them with converted string.  */
+  if (string1 == NULL && string2 == NULL)
+    {
+      /* We need seting up buffers here.  */
+
+      /* We must free wcs buffers in this function.  */
+      cant_free_wcs_buf = 0;
+
+      if (csize1 != 0)
+       {
+         string1 = REGEX_TALLOC (csize1 + 1, CHAR_T);
+         mbs_offset1 = REGEX_TALLOC (csize1 + 1, int);
+         is_binary = REGEX_TALLOC (csize1 + 1, char);
+         if (!string1 || !mbs_offset1 || !is_binary)
+           {
+             FREE_VAR (string1);
+             FREE_VAR (mbs_offset1);
+             FREE_VAR (is_binary);
+             return -2;
+           }
+       }
+      if (csize2 != 0)
+       {
+         string2 = REGEX_TALLOC (csize2 + 1, CHAR_T);
+         mbs_offset2 = REGEX_TALLOC (csize2 + 1, int);
+         is_binary = REGEX_TALLOC (csize2 + 1, char);
+         if (!string2 || !mbs_offset2 || !is_binary)
+           {
+             FREE_VAR (string1);
+             FREE_VAR (mbs_offset1);
+             FREE_VAR (string2);
+             FREE_VAR (mbs_offset2);
+             FREE_VAR (is_binary);
+             return -2;
+           }
+         size2 = convert_mbs_to_wcs(string2, cstring2, csize2,
+                                    mbs_offset2, is_binary);
+         string2[size2] = L'\0'; /* for a sentinel  */
+         FREE_VAR (is_binary);
+       }
+    }
+
+  /* We need to cast pattern to (wchar_t*), because we casted this compiled
+     pattern to (char*) in regex_compile.  */
+  p = pattern = (CHAR_T*)bufp->buffer;
+  pend = (CHAR_T*)(bufp->buffer + bufp->used);
+
+#endif /* WCHAR */
+
+  /* Initialize subexpression text positions to -1 to mark ones that no
+     start_memory/stop_memory has been seen for. Also initialize the
+     register information struct.  */
+  for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+    {
+      regstart[mcnt] = regend[mcnt]
+        = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
+
+      REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
+      IS_ACTIVE (reg_info[mcnt]) = 0;
+      MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+      EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+    }
+
+  /* We move `string1' into `string2' if the latter's empty -- but not if
+     `string1' is null.  */
+  if (size2 == 0 && string1 != NULL)
+    {
+      string2 = string1;
+      size2 = size1;
+      string1 = 0;
+      size1 = 0;
+#ifdef WCHAR
+      mbs_offset2 = mbs_offset1;
+      csize2 = csize1;
+      mbs_offset1 = NULL;
+      csize1 = 0;
+#endif
+    }
+  end1 = string1 + size1;
+  end2 = string2 + size2;
+
+  /* Compute where to stop matching, within the two strings.  */
+#ifdef WCHAR
+  if (stop <= csize1)
+    {
+      mcnt = count_mbs_length(mbs_offset1, stop);
+      end_match_1 = string1 + mcnt;
+      end_match_2 = string2;
+    }
+  else
+    {
+      if (stop > csize1 + csize2)
+       stop = csize1 + csize2;
+      end_match_1 = end1;
+      mcnt = count_mbs_length(mbs_offset2, stop-csize1);
+      end_match_2 = string2 + mcnt;
+    }
+  if (mcnt < 0)
+    { /* count_mbs_length return error.  */
+      FREE_VARIABLES ();
+      return -1;
+    }
+#else
+  if (stop <= size1)
+    {
+      end_match_1 = string1 + stop;
+      end_match_2 = string2;
+    }
+  else
+    {
+      end_match_1 = end1;
+      end_match_2 = string2 + stop - size1;
+    }
+#endif /* WCHAR */
+
+  /* `p' scans through the pattern as `d' scans through the data.
+     `dend' is the end of the input string that `d' points within.  `d'
+     is advanced into the following input string whenever necessary, but
+     this happens before fetching; therefore, at the beginning of the
+     loop, `d' can be pointing at the end of a string, but it cannot
+     equal `string2'.  */
+#ifdef WCHAR
+  if (size1 > 0 && pos <= csize1)
+    {
+      mcnt = count_mbs_length(mbs_offset1, pos);
+      d = string1 + mcnt;
+      dend = end_match_1;
+    }
+  else
+    {
+      mcnt = count_mbs_length(mbs_offset2, pos-csize1);
+      d = string2 + mcnt;
+      dend = end_match_2;
+    }
+
+  if (mcnt < 0)
+    { /* count_mbs_length return error.  */
+      FREE_VARIABLES ();
+      return -1;
+    }
+#else
+  if (size1 > 0 && pos <= size1)
+    {
+      d = string1 + pos;
+      dend = end_match_1;
+    }
+  else
+    {
+      d = string2 + pos - size1;
+      dend = end_match_2;
+    }
+#endif /* WCHAR */
+
+  DEBUG_PRINT1 ("The compiled pattern is:\n");
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
+  DEBUG_PRINT1 ("The string to match is: `");
+  DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
+  DEBUG_PRINT1 ("'\n");
+
+  /* This loops over pattern commands.  It exits by returning from the
+     function if the match is complete, or it drops through if the match
+     fails at this starting point in the input data.  */
+  for (;;)
+    {
+#ifdef _LIBC
+      DEBUG_PRINT2 ("\n%p: ", p);
+#else
+      DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+
+      if (p == pend)
+       { /* End of pattern means we might have succeeded.  */
+          DEBUG_PRINT1 ("end of pattern ... ");
+
+         /* If we haven't matched the entire string, and we want the
+             longest match, try backtracking.  */
+          if (d != end_match_2)
+           {
+             /* 1 if this match ends in the same string (string1 or string2)
+                as the best previous match.  */
+             boolean same_str_p = (FIRST_STRING_P (match_end)
+                                   == MATCHING_IN_FIRST_STRING);
+             /* 1 if this match is the best seen so far.  */
+             boolean best_match_p;
+
+             /* AIX compiler got confused when this was combined
+                with the previous declaration.  */
+             if (same_str_p)
+               best_match_p = d > match_end;
+             else
+               best_match_p = !MATCHING_IN_FIRST_STRING;
+
+              DEBUG_PRINT1 ("backtracking.\n");
+
+              if (!FAIL_STACK_EMPTY ())
+                { /* More failure points to try.  */
+
+                  /* If exceeds best match so far, save it.  */
+                  if (!best_regs_set || best_match_p)
+                    {
+                      best_regs_set = true;
+                      match_end = d;
+
+                      DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
+
+                      for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                        {
+                          best_regstart[mcnt] = regstart[mcnt];
+                          best_regend[mcnt] = regend[mcnt];
+                        }
+                    }
+                  goto fail;
+                }
+
+              /* If no failure points, don't restore garbage.  And if
+                 last match is real best match, don't restore second
+                 best one. */
+              else if (best_regs_set && !best_match_p)
+                {
+               restore_best_regs:
+                  /* Restore best match.  It may happen that `dend ==
+                     end_match_1' while the restored d is in string2.
+                     For example, the pattern `x.*y.*z' against the
+                     strings `x-' and `y-z-', if the two strings are
+                     not consecutive in memory.  */
+                  DEBUG_PRINT1 ("Restoring best registers.\n");
+
+                  d = match_end;
+                  dend = ((d >= string1 && d <= end1)
+                          ? end_match_1 : end_match_2);
+
+                 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                   {
+                     regstart[mcnt] = best_regstart[mcnt];
+                     regend[mcnt] = best_regend[mcnt];
+                   }
+                }
+            } /* d != end_match_2 */
+
+       succeed_label:
+          DEBUG_PRINT1 ("Accepting match.\n");
+          /* If caller wants register contents data back, do it.  */
+          if (regs && !bufp->no_sub)
+           {
+             /* Have the register data arrays been allocated?  */
+              if (bufp->regs_allocated == REGS_UNALLOCATED)
+                { /* No.  So allocate them with malloc.  We need one
+                     extra element beyond `num_regs' for the `-1' marker
+                     GNU code uses.  */
+                  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
+                  regs->start = TALLOC (regs->num_regs, regoff_t);
+                  regs->end = TALLOC (regs->num_regs, regoff_t);
+                  if (regs->start == NULL || regs->end == NULL)
+                   {
+                     FREE_VARIABLES ();
+                     return -2;
+                   }
+                  bufp->regs_allocated = REGS_REALLOCATE;
+                }
+              else if (bufp->regs_allocated == REGS_REALLOCATE)
+                { /* Yes.  If we need more elements than were already
+                     allocated, reallocate them.  If we need fewer, just
+                     leave it alone.  */
+                  if (regs->num_regs < num_regs + 1)
+                    {
+                      regs->num_regs = num_regs + 1;
+                      RETALLOC (regs->start, regs->num_regs, regoff_t);
+                      RETALLOC (regs->end, regs->num_regs, regoff_t);
+                      if (regs->start == NULL || regs->end == NULL)
+                       {
+                         FREE_VARIABLES ();
+                         return -2;
+                       }
+                    }
+                }
+              else
+               {
+                 /* These braces fend off a "empty body in an else-statement"
+                    warning under GCC when assert expands to nothing.  */
+                 assert (bufp->regs_allocated == REGS_FIXED);
+               }
+
+              /* Convert the pointer data in `regstart' and `regend' to
+                 indices.  Register zero has to be set differently,
+                 since we haven't kept track of any info for it.  */
+              if (regs->num_regs > 0)
+                {
+                  regs->start[0] = pos;
+#ifdef WCHAR
+                 if (MATCHING_IN_FIRST_STRING)
+                   regs->end[0] = mbs_offset1 != NULL ?
+                                       mbs_offset1[d-string1] : 0;
+                 else
+                   regs->end[0] = csize1 + (mbs_offset2 != NULL ?
+                                            mbs_offset2[d-string2] : 0);
+#else
+                  regs->end[0] = (MATCHING_IN_FIRST_STRING
+                                 ? ((regoff_t) (d - string1))
+                                 : ((regoff_t) (d - string2 + size1)));
+#endif /* WCHAR */
+                }
+
+              /* Go through the first `min (num_regs, regs->num_regs)'
+                 registers, since that is all we initialized.  */
+             for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
+                  mcnt++)
+               {
+                  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
+                    regs->start[mcnt] = regs->end[mcnt] = -1;
+                  else
+                    {
+                     regs->start[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
+                      regs->end[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
+                    }
+               }
+
+              /* If the regs structure we return has more elements than
+                 were in the pattern, set the extra elements to -1.  If
+                 we (re)allocated the registers, this is the case,
+                 because we always allocate enough to have at least one
+                 -1 at the end.  */
+              for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
+                regs->start[mcnt] = regs->end[mcnt] = -1;
+           } /* regs && !bufp->no_sub */
+
+          DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
+                        nfailure_points_pushed, nfailure_points_popped,
+                        nfailure_points_pushed - nfailure_points_popped);
+          DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
+
+#ifdef WCHAR
+         if (MATCHING_IN_FIRST_STRING)
+           mcnt = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0;
+         else
+           mcnt = (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0) +
+                       csize1;
+          mcnt -= pos;
+#else
+          mcnt = d - pos - (MATCHING_IN_FIRST_STRING
+                           ? string1
+                           : string2 - size1);
+#endif /* WCHAR */
+
+          DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
+
+          FREE_VARIABLES ();
+          return mcnt;
+        }
+
+      /* Otherwise match next pattern command.  */
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+        /* Ignore these.  Used to ignore the n of succeed_n's which
+           currently have n == 0.  */
+        case no_op:
+          DEBUG_PRINT1 ("EXECUTING no_op.\n");
+          break;
+
+       case succeed:
+          DEBUG_PRINT1 ("EXECUTING succeed.\n");
+         goto succeed_label;
+
+        /* Match the next n pattern characters exactly.  The following
+           byte in the pattern defines n, and the n bytes after that
+           are the characters to match.  */
+       case exactn:
+#ifdef MBS_SUPPORT
+       case exactn_bin:
+#endif
+         mcnt = *p++;
+          DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
+
+          /* This is written out as an if-else so we don't waste time
+             testing `translate' inside the loop.  */
+          if (translate)
+           {
+             do
+               {
+                 PREFETCH ();
+#ifdef WCHAR
+                 if (*d <= 0xff)
+                   {
+                     if ((UCHAR_T) translate[(unsigned char) *d++]
+                         != (UCHAR_T) *p++)
+                       goto fail;
+                   }
+                 else
+                   {
+                     if (*d++ != (CHAR_T) *p++)
+                       goto fail;
+                   }
+#else
+                 if ((UCHAR_T) translate[(unsigned char) *d++]
+                     != (UCHAR_T) *p++)
+                    goto fail;
+#endif /* WCHAR */
+               }
+             while (--mcnt);
+           }
+         else
+           {
+             do
+               {
+                 PREFETCH ();
+                 if (*d++ != (CHAR_T) *p++) goto fail;
+               }
+             while (--mcnt);
+           }
+         SET_REGS_MATCHED ();
+          break;
+
+
+        /* Match any character except possibly a newline or a null.  */
+       case anychar:
+          DEBUG_PRINT1 ("EXECUTING anychar.\n");
+
+          PREFETCH ();
+
+          if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
+              || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
+           goto fail;
+
+          SET_REGS_MATCHED ();
+          DEBUG_PRINT2 ("  Matched `%ld'.\n", (long int) *d);
+          d++;
+         break;
+
+
+       case charset:
+       case charset_not:
+         {
+           register UCHAR_T c;
+#ifdef WCHAR
+           unsigned int i, char_class_length, coll_symbol_length,
+              equiv_class_length, ranges_length, chars_length, length;
+           CHAR_T *workp, *workp2, *charset_top;
+#define WORK_BUFFER_SIZE 128
+            CHAR_T str_buf[WORK_BUFFER_SIZE];
+# ifdef _LIBC
+           uint32_t nrules;
+# endif /* _LIBC */
+#endif /* WCHAR */
+           boolean negate = (re_opcode_t) *(p - 1) == charset_not;
+
+            DEBUG_PRINT2 ("EXECUTING charset%s.\n", negate ? "_not" : "");
+           PREFETCH ();
+           c = TRANSLATE (*d); /* The character to match.  */
+#ifdef WCHAR
+# ifdef _LIBC
+           nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+# endif /* _LIBC */
+           charset_top = p - 1;
+           char_class_length = *p++;
+           coll_symbol_length = *p++;
+           equiv_class_length = *p++;
+           ranges_length = *p++;
+           chars_length = *p++;
+           /* p points charset[6], so the address of the next instruction
+              (charset[l+m+n+2o+k+p']) equals p[l+m+n+2*o+p'],
+              where l=length of char_classes, m=length of collating_symbol,
+              n=equivalence_class, o=length of char_range,
+              p'=length of character.  */
+           workp = p;
+           /* Update p to indicate the next instruction.  */
+           p += char_class_length + coll_symbol_length+ equiv_class_length +
+              2*ranges_length + chars_length;
+
+            /* match with char_class?  */
+           for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE)
+             {
+               wctype_t wctype;
+               uintptr_t alignedp = ((uintptr_t)workp
+                                     + __alignof__(wctype_t) - 1)
+                                     & ~(uintptr_t)(__alignof__(wctype_t) - 1);
+               wctype = *((wctype_t*)alignedp);
+               workp += CHAR_CLASS_SIZE;
+# ifdef _LIBC
+               if (__iswctype((wint_t)c, wctype))
+                 goto char_set_matched;
+# else
+               if (iswctype((wint_t)c, wctype))
+                 goto char_set_matched;
+# endif
+             }
+
+            /* match with collating_symbol?  */
+# ifdef _LIBC
+           if (nrules != 0)
+             {
+               const unsigned char *extra = (const unsigned char *)
+                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+
+               for (workp2 = workp + coll_symbol_length ; workp < workp2 ;
+                    workp++)
+                 {
+                   int32_t *wextra;
+                   wextra = (int32_t*)(extra + *workp++);
+                   for (i = 0; i < *wextra; ++i)
+                     if (TRANSLATE(d[i]) != wextra[1 + i])
+                       break;
+
+                   if (i == *wextra)
+                     {
+                       /* Update d, however d will be incremented at
+                          char_set_matched:, we decrement d here.  */
+                       d += i - 1;
+                       goto char_set_matched;
+                     }
+                 }
+             }
+           else /* (nrules == 0) */
+# endif
+             /* If we can't look up collation data, we use wcscoll
+                instead.  */
+             {
+               for (workp2 = workp + coll_symbol_length ; workp < workp2 ;)
+                 {
+                   const CHAR_T *backup_d = d, *backup_dend = dend;
+# ifdef _LIBC
+                   length = __wcslen (workp);
+# else
+                   length = wcslen (workp);
+# endif
+
+                   /* If wcscoll(the collating symbol, whole string) > 0,
+                      any substring of the string never match with the
+                      collating symbol.  */
+# ifdef _LIBC
+                   if (__wcscoll (workp, d) > 0)
+# else
+                   if (wcscoll (workp, d) > 0)
+# endif
+                     {
+                       workp += length + 1;
+                       continue;
+                     }
+
+                   /* First, we compare the collating symbol with
+                      the first character of the string.
+                      If it don't match, we add the next character to
+                      the compare buffer in turn.  */
+                   for (i = 0 ; i < WORK_BUFFER_SIZE-1 ; i++, d++)
+                     {
+                       int match;
+                       if (d == dend)
+                         {
+                           if (dend == end_match_2)
+                             break;
+                           d = string2;
+                           dend = end_match_2;
+                         }
+
+                       /* add next character to the compare buffer.  */
+                       str_buf[i] = TRANSLATE(*d);
+                       str_buf[i+1] = '\0';
+
+# ifdef _LIBC
+                       match = __wcscoll (workp, str_buf);
+# else
+                       match = wcscoll (workp, str_buf);
+# endif
+                       if (match == 0)
+                         goto char_set_matched;
+
+                       if (match < 0)
+                         /* (str_buf > workp) indicate (str_buf + X > workp),
+                            because for all X (str_buf + X > str_buf).
+                            So we don't need continue this loop.  */
+                         break;
+
+                       /* Otherwise(str_buf < workp),
+                          (str_buf+next_character) may equals (workp).
+                          So we continue this loop.  */
+                     }
+                   /* not matched */
+                   d = backup_d;
+                   dend = backup_dend;
+                   workp += length + 1;
+                 }
+              }
+            /* match with equivalence_class?  */
+# ifdef _LIBC
+           if (nrules != 0)
+             {
+                const CHAR_T *backup_d = d, *backup_dend = dend;
+               /* Try to match the equivalence class against
+                  those known to the collate implementation.  */
+               const int32_t *table;
+               const int32_t *weights;
+               const int32_t *extra;
+               const int32_t *indirect;
+               int32_t idx, idx2;
+               wint_t *cp;
+               size_t len;
+
+               /* This #include defines a local function!  */
+#  include <locale/weightwc.h>
+
+               table = (const int32_t *)
+                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
+               weights = (const wint_t *)
+                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
+               extra = (const wint_t *)
+                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
+               indirect = (const int32_t *)
+                 _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
+
+               /* Write 1 collating element to str_buf, and
+                  get its index.  */
+               idx2 = 0;
+
+               for (i = 0 ; idx2 == 0 && i < WORK_BUFFER_SIZE - 1; i++)
+                 {
+                   cp = (wint_t*)str_buf;
+                   if (d == dend)
+                     {
+                       if (dend == end_match_2)
+                         break;
+                       d = string2;
+                       dend = end_match_2;
+                     }
+                   str_buf[i] = TRANSLATE(*(d+i));
+                   str_buf[i+1] = '\0'; /* sentinel */
+                   idx2 = findidx ((const wint_t**)&cp);
+                 }
+
+               /* Update d, however d will be incremented at
+                  char_set_matched:, we decrement d here.  */
+               d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1);
+               if (d >= dend)
+                 {
+                   if (dend == end_match_2)
+                       d = dend;
+                   else
+                     {
+                       d = string2;
+                       dend = end_match_2;
+                     }
+                 }
+
+               len = weights[idx2];
+
+               for (workp2 = workp + equiv_class_length ; workp < workp2 ;
+                    workp++)
+                 {
+                   idx = (int32_t)*workp;
+                   /* We already checked idx != 0 in regex_compile. */
+
+                   if (idx2 != 0 && len == weights[idx])
+                     {
+                       int cnt = 0;
+                       while (cnt < len && (weights[idx + 1 + cnt]
+                                            == weights[idx2 + 1 + cnt]))
+                         ++cnt;
+
+                       if (cnt == len)
+                         goto char_set_matched;
+                     }
+                 }
+               /* not matched */
+                d = backup_d;
+                dend = backup_dend;
+             }
+           else /* (nrules == 0) */
+# endif
+             /* If we can't look up collation data, we use wcscoll
+                instead.  */
+             {
+               for (workp2 = workp + equiv_class_length ; workp < workp2 ;)
+                 {
+                   const CHAR_T *backup_d = d, *backup_dend = dend;
+# ifdef _LIBC
+                   length = __wcslen (workp);
+# else
+                   length = wcslen (workp);
+# endif
+
+                   /* If wcscoll(the collating symbol, whole string) > 0,
+                      any substring of the string never match with the
+                      collating symbol.  */
+# ifdef _LIBC
+                   if (__wcscoll (workp, d) > 0)
+# else
+                   if (wcscoll (workp, d) > 0)
+# endif
+                     {
+                       workp += length + 1;
+                       break;
+                     }
+
+                   /* First, we compare the equivalence class with
+                      the first character of the string.
+                      If it don't match, we add the next character to
+                      the compare buffer in turn.  */
+                   for (i = 0 ; i < WORK_BUFFER_SIZE - 1 ; i++, d++)
+                     {
+                       int match;
+                       if (d == dend)
+                         {
+                           if (dend == end_match_2)
+                             break;
+                           d = string2;
+                           dend = end_match_2;
+                         }
+
+                       /* add next character to the compare buffer.  */
+                       str_buf[i] = TRANSLATE(*d);
+                       str_buf[i+1] = '\0';
+
+# ifdef _LIBC
+                       match = __wcscoll (workp, str_buf);
+# else
+                       match = wcscoll (workp, str_buf);
+# endif
+
+                       if (match == 0)
+                         goto char_set_matched;
+
+                       if (match < 0)
+                       /* (str_buf > workp) indicate (str_buf + X > workp),
+                          because for all X (str_buf + X > str_buf).
+                          So we don't need continue this loop.  */
+                         break;
+
+                       /* Otherwise(str_buf < workp),
+                          (str_buf+next_character) may equals (workp).
+                          So we continue this loop.  */
+                     }
+                   /* not matched */
+                   d = backup_d;
+                   dend = backup_dend;
+                   workp += length + 1;
+                 }
+             }
+
+            /* match with char_range?  */
+# ifdef _LIBC
+           if (nrules != 0)
+             {
+               uint32_t collseqval;
+               const char *collseq = (const char *)
+                 _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+
+               collseqval = collseq_table_lookup (collseq, c);
+
+               for (; workp < p - chars_length ;)
+                 {
+                   uint32_t start_val, end_val;
+
+                   /* We already compute the collation sequence value
+                      of the characters (or collating symbols).  */
+                   start_val = (uint32_t) *workp++; /* range_start */
+                   end_val = (uint32_t) *workp++; /* range_end */
+
+                   if (start_val <= collseqval && collseqval <= end_val)
+                     goto char_set_matched;
+                 }
+             }
+           else
+# endif
+             {
+               /* We set range_start_char at str_buf[0], range_end_char
+                  at str_buf[4], and compared char at str_buf[2].  */
+               str_buf[1] = 0;
+               str_buf[2] = c;
+               str_buf[3] = 0;
+               str_buf[5] = 0;
+               for (; workp < p - chars_length ;)
+                 {
+                   wchar_t *range_start_char, *range_end_char;
+
+                   /* match if (range_start_char <= c <= range_end_char).  */
+
+                   /* If range_start(or end) < 0, we assume -range_start(end)
+                      is the offset of the collating symbol which is specified
+                      as the character of the range start(end).  */
+
+                   /* range_start */
+                   if (*workp < 0)
+                     range_start_char = charset_top - (*workp++);
+                   else
+                     {
+                       str_buf[0] = *workp++;
+                       range_start_char = str_buf;
+                     }
+
+                   /* range_end */
+                   if (*workp < 0)
+                     range_end_char = charset_top - (*workp++);
+                   else
+                     {
+                       str_buf[4] = *workp++;
+                       range_end_char = str_buf + 4;
+                     }
+
+# ifdef _LIBC
+                   if (__wcscoll (range_start_char, str_buf+2) <= 0
+                       && __wcscoll (str_buf+2, range_end_char) <= 0)
+# else
+                   if (wcscoll (range_start_char, str_buf+2) <= 0
+                       && wcscoll (str_buf+2, range_end_char) <= 0)
+# endif
+                     goto char_set_matched;
+                 }
+             }
+
+            /* match with char?  */
+           for (; workp < p ; workp++)
+             if (c == *workp)
+               goto char_set_matched;
+
+           negate = !negate;
+
+         char_set_matched:
+           if (negate) goto fail;
+#else
+            /* Cast to `unsigned' instead of `unsigned char' in case the
+               bit list is a full 32 bytes long.  */
+           if (c < (unsigned) (*p * BYTEWIDTH)
+               && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+             negate = !negate;
+
+           p += 1 + *p;
+
+           if (!negate) goto fail;
+#undef WORK_BUFFER_SIZE
+#endif /* WCHAR */
+           SET_REGS_MATCHED ();
+            d++;
+           break;
+         }
+
+
+        /* The beginning of a group is represented by start_memory.
+           The arguments are the register number in the next byte, and the
+           number of groups inner to this one in the next.  The text
+           matched within the group is recorded (in the internal
+           registers data structure) under the register number.  */
+        case start_memory:
+         DEBUG_PRINT3 ("EXECUTING start_memory %ld (%ld):\n",
+                       (long int) *p, (long int) p[1]);
+
+          /* Find out if this group can match the empty string.  */
+         p1 = p;               /* To send to group_match_null_string_p.  */
+
+          if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
+            REG_MATCH_NULL_STRING_P (reg_info[*p])
+              = PREFIX(group_match_null_string_p) (&p1, pend, reg_info);
+
+          /* Save the position in the string where we were the last time
+             we were at this open-group operator in case the group is
+             operated upon by a repetition operator, e.g., with `(a*)*b'
+             against `ab'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                             ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
+                             : regstart[*p];
+         DEBUG_PRINT2 ("  old_regstart: %d\n",
+                        POINTER_TO_OFFSET (old_regstart[*p]));
+
+          regstart[*p] = d;
+         DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
+
+          IS_ACTIVE (reg_info[*p]) = 1;
+          MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* This is the new highest active register.  */
+          highest_active_reg = *p;
+
+          /* If nothing was active before, this is the new lowest active
+             register.  */
+          if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+            lowest_active_reg = *p;
+
+          /* Move past the register number and inner group count.  */
+          p += 2;
+         just_past_start_mem = p;
+
+          break;
+
+
+        /* The stop_memory opcode represents the end of a group.  Its
+           arguments are the same as start_memory's: the register
+           number, and the number of inner groups.  */
+       case stop_memory:
+         DEBUG_PRINT3 ("EXECUTING stop_memory %ld (%ld):\n",
+                       (long int) *p, (long int) p[1]);
+
+          /* We need to save the string position the last time we were at
+             this close-group operator in case the group is operated
+             upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
+             against `aba'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                           ? REG_UNSET (regend[*p]) ? d : regend[*p]
+                          : regend[*p];
+         DEBUG_PRINT2 ("      old_regend: %d\n",
+                        POINTER_TO_OFFSET (old_regend[*p]));
+
+          regend[*p] = d;
+         DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
+
+          /* This register isn't active anymore.  */
+          IS_ACTIVE (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* If this was the only register active, nothing is active
+             anymore.  */
+          if (lowest_active_reg == highest_active_reg)
+            {
+              lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+              highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+            }
+          else
+            { /* We must scan for the new highest active register, since
+                 it isn't necessarily one less than now: consider
+                 (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
+                 new highest active register is 1.  */
+              UCHAR_T r = *p - 1;
+              while (r > 0 && !IS_ACTIVE (reg_info[r]))
+                r--;
+
+              /* If we end up at register zero, that means that we saved
+                 the registers as the result of an `on_failure_jump', not
+                 a `start_memory', and we jumped to past the innermost
+                 `stop_memory'.  For example, in ((.)*) we save
+                 registers 1 and 2 as a result of the *, but when we pop
+                 back to the second ), we are at the stop_memory 1.
+                 Thus, nothing is active.  */
+             if (r == 0)
+                {
+                  lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+                  highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+                }
+              else
+                highest_active_reg = r;
+            }
+
+          /* If just failed to match something this time around with a
+             group that's operated on by a repetition operator, try to
+             force exit from the ``loop'', and restore the register
+             information for this group that we had before trying this
+             last match.  */
+          if ((!MATCHED_SOMETHING (reg_info[*p])
+               || just_past_start_mem == p - 1)
+             && (p + 2) < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              p1 = p + 2;
+              mcnt = 0;
+              switch ((re_opcode_t) *p1++)
+                {
+                  case jump_n:
+                   is_a_jump_n = true;
+                  case pop_failure_jump:
+                 case maybe_pop_jump:
+                 case jump:
+                 case dummy_failure_jump:
+                    EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                   if (is_a_jump_n)
+                     p1 += OFFSET_ADDRESS_SIZE;
+                    break;
+
+                  default:
+                    /* do nothing */ ;
+                }
+             p1 += mcnt;
+
+              /* If the next operation is a jump backwards in the pattern
+                to an on_failure_jump right before the start_memory
+                 corresponding to this stop_memory, exit from the loop
+                 by forcing a failure after pushing on the stack the
+                 on_failure_jump's jump in the pattern, and d.  */
+              if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
+                  && (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == start_memory
+                 && p1[2+OFFSET_ADDRESS_SIZE] == *p)
+               {
+                  /* If this group ever matched anything, then restore
+                     what its registers were before trying this last
+                     failed match, e.g., with `(a*)*b' against `ab' for
+                     regstart[1], and, e.g., with `((a*)*(b*)*)*'
+                     against `aba' for regend[3].
+
+                     Also restore the registers for inner groups for,
+                     e.g., `((a*)(b*))*' against `aba' (register 3 would
+                     otherwise get trashed).  */
+
+                  if (EVER_MATCHED_SOMETHING (reg_info[*p]))
+                   {
+                     unsigned r;
+
+                      EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+                     /* Restore this and inner groups' (if any) registers.  */
+                      for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
+                          r++)
+                        {
+                          regstart[r] = old_regstart[r];
+
+                          /* xx why this test?  */
+                          if (old_regend[r] >= regstart[r])
+                            regend[r] = old_regend[r];
+                        }
+                    }
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
+
+                  goto fail;
+                }
+            }
+
+          /* Move past the register number and the inner group count.  */
+          p += 2;
+          break;
+
+
+       /* \<digit> has been turned into a `duplicate' command which is
+           followed by the numeric value of <digit> as the register number.  */
+        case duplicate:
+         {
+           register const CHAR_T *d2, *dend2;
+           int regno = *p++;   /* Get which register to match against.  */
+           DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
+
+           /* Can't back reference a group which we've never matched.  */
+            if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+              goto fail;
+
+            /* Where in input to try to start matching.  */
+            d2 = regstart[regno];
+
+            /* Where to stop matching; if both the place to start and
+               the place to stop matching are in the same string, then
+               set to the place to stop, otherwise, for now have to use
+               the end of the first string.  */
+
+            dend2 = ((FIRST_STRING_P (regstart[regno])
+                     == FIRST_STRING_P (regend[regno]))
+                    ? regend[regno] : end_match_1);
+           for (;;)
+             {
+               /* If necessary, advance to next segment in register
+                   contents.  */
+               while (d2 == dend2)
+                 {
+                   if (dend2 == end_match_2) break;
+                   if (dend2 == regend[regno]) break;
+
+                    /* End of string1 => advance to string2. */
+                    d2 = string2;
+                    dend2 = regend[regno];
+                 }
+               /* At end of register contents => success */
+               if (d2 == dend2) break;
+
+               /* If necessary, advance to next segment in data.  */
+               PREFETCH ();
+
+               /* How many characters left in this segment to match.  */
+               mcnt = dend - d;
+
+               /* Want how many consecutive characters we can match in
+                   one shot, so, if necessary, adjust the count.  */
+                if (mcnt > dend2 - d2)
+                 mcnt = dend2 - d2;
+
+               /* Compare that many; failure if mismatch, else move
+                   past them.  */
+               if (translate
+                    ? PREFIX(bcmp_translate) (d, d2, mcnt, translate)
+                    : memcmp (d, d2, mcnt*sizeof(UCHAR_T)))
+                 goto fail;
+               d += mcnt, d2 += mcnt;
+
+               /* Do this because we've match some characters.  */
+               SET_REGS_MATCHED ();
+             }
+         }
+         break;
+
+
+        /* begline matches the empty string at the beginning of the string
+           (unless `not_bol' is set in `bufp'), and, if
+           `newline_anchor' is set, after newlines.  */
+       case begline:
+          DEBUG_PRINT1 ("EXECUTING begline.\n");
+
+          if (AT_STRINGS_BEG (d))
+            {
+              if (!bufp->not_bol) break;
+            }
+          else if (d[-1] == '\n' && bufp->newline_anchor)
+            {
+              break;
+            }
+          /* In all other cases, we fail.  */
+          goto fail;
+
+
+        /* endline is the dual of begline.  */
+       case endline:
+          DEBUG_PRINT1 ("EXECUTING endline.\n");
+
+          if (AT_STRINGS_END (d))
+            {
+              if (!bufp->not_eol) break;
+            }
+
+          /* We have to ``prefetch'' the next character.  */
+          else if ((d == end1 ? *string2 : *d) == '\n'
+                   && bufp->newline_anchor)
+            {
+              break;
+            }
+          goto fail;
+
+
+       /* Match at the very beginning of the data.  */
+        case begbuf:
+          DEBUG_PRINT1 ("EXECUTING begbuf.\n");
+          if (AT_STRINGS_BEG (d))
+            break;
+          goto fail;
+
+
+       /* Match at the very end of the data.  */
+        case endbuf:
+          DEBUG_PRINT1 ("EXECUTING endbuf.\n");
+         if (AT_STRINGS_END (d))
+           break;
+          goto fail;
+
+
+        /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
+           pushes NULL as the value for the string on the stack.  Then
+           `pop_failure_point' will keep the current value for the
+           string, instead of restoring it.  To see why, consider
+           matching `foo\nbar' against `.*\n'.  The .* matches the foo;
+           then the . fails against the \n.  But the next thing we want
+           to do is match the \n against the \n; if we restored the
+           string value, we would be back at the foo.
+
+           Because this is used only in specific cases, we don't need to
+           check all the things that `on_failure_jump' does, to make
+           sure the right things get saved on the stack.  Hence we don't
+           share its code.  The only reason to push anything on the
+           stack at all is that otherwise we would have to change
+           `anychar's code to do something besides goto fail in this
+           case; that seems worse than this.  */
+        case on_failure_keep_string_jump:
+          DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
+#endif
+
+          PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
+          break;
+
+
+       /* Uses of on_failure_jump:
+
+           Each alternative starts with an on_failure_jump that points
+           to the beginning of the next alternative.  Each alternative
+           except the last ends with a jump that in effect jumps past
+           the rest of the alternatives.  (They really jump to the
+           ending jump of the following alternative, because tensioning
+           these jumps is a hassle.)
+
+           Repeats start with an on_failure_jump that points past both
+           the repetition text and either the following jump or
+           pop_failure_jump back to this on_failure_jump.  */
+       case on_failure_jump:
+        on_failure:
+          DEBUG_PRINT1 ("EXECUTING on_failure_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
+#endif
+
+          /* If this on_failure_jump comes right before a group (i.e.,
+             the original * applied to a group), save the information
+             for that group and all inner ones, so that if we fail back
+             to this point, the group's information will be correct.
+             For example, in \(a*\)*\1, we need the preceding group,
+             and in \(zz\(a*\)b*\)\2, we need the inner group.  */
+
+          /* We can't use `p' to check ahead because we push
+             a failure point to `p + mcnt' after we do this.  */
+          p1 = p;
+
+          /* We need to skip no_op's before we look for the
+             start_memory in case this on_failure_jump is happening as
+             the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
+             against aba.  */
+          while (p1 < pend && (re_opcode_t) *p1 == no_op)
+            p1++;
+
+          if (p1 < pend && (re_opcode_t) *p1 == start_memory)
+            {
+              /* We have a new highest active register now.  This will
+                 get reset at the start_memory we are about to get to,
+                 but we will have saved all the registers relevant to
+                 this repetition op, as described above.  */
+              highest_active_reg = *(p1 + 1) + *(p1 + 2);
+              if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+                lowest_active_reg = *(p1 + 1);
+            }
+
+          DEBUG_PRINT1 (":\n");
+          PUSH_FAILURE_POINT (p + mcnt, d, -2);
+          break;
+
+
+        /* A smart repeat ends with `maybe_pop_jump'.
+          We change it to either `pop_failure_jump' or `jump'.  */
+        case maybe_pop_jump:
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+          DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
+          {
+           register UCHAR_T *p2 = p;
+
+            /* Compare the beginning of the repeat with what in the
+               pattern follows its end. If we can establish that there
+               is nothing that they would both match, i.e., that we
+               would have to backtrack because of (as in, e.g., `a*a')
+               then we can change to pop_failure_jump, because we'll
+               never have to backtrack.
+
+               This is not true in the case of alternatives: in
+               `(a|ab)*' we do need to backtrack to the `ab' alternative
+               (e.g., if the string was `ab').  But instead of trying to
+               detect that here, the alternative has put on a dummy
+               failure point which is what we will end up popping.  */
+
+           /* Skip over open/close-group commands.
+              If what follows this loop is a ...+ construct,
+              look at what begins its body, since we will have to
+              match at least one of that.  */
+           while (1)
+             {
+               if (p2 + 2 < pend
+                   && ((re_opcode_t) *p2 == stop_memory
+                       || (re_opcode_t) *p2 == start_memory))
+                 p2 += 3;
+               else if (p2 + 2 + 2 * OFFSET_ADDRESS_SIZE < pend
+                        && (re_opcode_t) *p2 == dummy_failure_jump)
+                 p2 += 2 + 2 * OFFSET_ADDRESS_SIZE;
+               else
+                 break;
+             }
+
+           p1 = p + mcnt;
+           /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
+              to the `maybe_finalize_jump' of this case.  Examine what
+              follows.  */
+
+            /* If we're at the end of the pattern, we can change.  */
+            if (p2 == pend)
+             {
+               /* Consider what happens when matching ":\(.*\)"
+                  against ":/".  I don't really understand this code
+                  yet.  */
+               p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T)
+                 pop_failure_jump;
+                DEBUG_PRINT1
+                  ("  End of pattern: change to `pop_failure_jump'.\n");
+              }
+
+            else if ((re_opcode_t) *p2 == exactn
+#ifdef MBS_SUPPORT
+                    || (re_opcode_t) *p2 == exactn_bin
+#endif
+                    || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
+             {
+               register UCHAR_T c
+                  = *p2 == (UCHAR_T) endline ? '\n' : p2[2];
+
+                if (((re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn
+#ifdef MBS_SUPPORT
+                    || (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn_bin
+#endif
+                   ) && p1[3+OFFSET_ADDRESS_SIZE] != c)
+                  {
+                   p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T)
+                     pop_failure_jump;
+#ifdef WCHAR
+                     DEBUG_PRINT3 ("  %C != %C => pop_failure_jump.\n",
+                                   (wint_t) c,
+                                   (wint_t) p1[3+OFFSET_ADDRESS_SIZE]);
+#else
+                     DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
+                                   (char) c,
+                                   (char) p1[3+OFFSET_ADDRESS_SIZE]);
+#endif
+                  }
+
+#ifndef WCHAR
+               else if ((re_opcode_t) p1[3] == charset
+                        || (re_opcode_t) p1[3] == charset_not)
+                 {
+                   int negate = (re_opcode_t) p1[3] == charset_not;
+
+                   if (c < (unsigned) (p1[4] * BYTEWIDTH)
+                       && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+                     negate = !negate;
+
+                    /* `negate' is equal to 1 if c would match, which means
+                        that we can't change to pop_failure_jump.  */
+                   if (!negate)
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+#endif /* not WCHAR */
+             }
+#ifndef WCHAR
+            else if ((re_opcode_t) *p2 == charset)
+             {
+               /* We win if the first character of the loop is not part
+                   of the charset.  */
+                if ((re_opcode_t) p1[3] == exactn
+                   && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
+                         && (p2[2 + p1[5] / BYTEWIDTH]
+                             & (1 << (p1[5] % BYTEWIDTH)))))
+                 {
+                   p[-3] = (unsigned char) pop_failure_jump;
+                   DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                  }
+
+               else if ((re_opcode_t) p1[3] == charset_not)
+                 {
+                   int idx;
+                   /* We win if the charset_not inside the loop
+                      lists every character listed in the charset after.  */
+                   for (idx = 0; idx < (int) p2[1]; idx++)
+                     if (! (p2[2 + idx] == 0
+                            || (idx < (int) p1[4]
+                                && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
+                       break;
+
+                   if (idx == p2[1])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+               else if ((re_opcode_t) p1[3] == charset)
+                 {
+                   int idx;
+                   /* We win if the charset inside the loop
+                      has no overlap with the one after the loop.  */
+                   for (idx = 0;
+                        idx < (int) p2[1] && idx < (int) p1[4];
+                        idx++)
+                     if ((p2[2 + idx] & p1[5 + idx]) != 0)
+                       break;
+
+                   if (idx == p2[1] || idx == p1[4])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+             }
+#endif /* not WCHAR */
+         }
+         p -= OFFSET_ADDRESS_SIZE;     /* Point at relative address again.  */
+         if ((re_opcode_t) p[-1] != pop_failure_jump)
+           {
+             p[-1] = (UCHAR_T) jump;
+              DEBUG_PRINT1 ("  Match => jump.\n");
+             goto unconditional_jump;
+           }
+        /* Note fall through.  */
+
+
+       /* The end of a simple repeat has a pop_failure_jump back to
+           its matching on_failure_jump, where the latter will push a
+           failure point.  The pop_failure_jump takes off failure
+           points put on by this pop_failure_jump's matching
+           on_failure_jump; we got through the pattern to here from the
+           matching on_failure_jump, so didn't fail.  */
+        case pop_failure_jump:
+          {
+            /* We need to pass separate storage for the lowest and
+               highest registers, even though we don't care about the
+               actual values.  Otherwise, we will restore only one
+               register from the stack, since lowest will == highest in
+               `pop_failure_point'.  */
+            active_reg_t dummy_low_reg, dummy_high_reg;
+            UCHAR_T *pdummy = NULL;
+            const CHAR_T *sdummy = NULL;
+
+            DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
+            POP_FAILURE_POINT (sdummy, pdummy,
+                               dummy_low_reg, dummy_high_reg,
+                               reg_dummy, reg_dummy, reg_info_dummy);
+          }
+         /* Note fall through.  */
+
+       unconditional_jump:
+#ifdef _LIBC
+         DEBUG_PRINT2 ("\n%p: ", p);
+#else
+         DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+          /* Note fall through.  */
+
+        /* Unconditionally jump (without popping any failure points).  */
+        case jump:
+         EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
+          DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
+         p += mcnt;                            /* Do the jump.  */
+#ifdef _LIBC
+          DEBUG_PRINT2 ("(to %p).\n", p);
+#else
+          DEBUG_PRINT2 ("(to 0x%x).\n", p);
+#endif
+         break;
+
+
+        /* We need this opcode so we can detect where alternatives end
+           in `group_match_null_string_p' et al.  */
+        case jump_past_alt:
+          DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
+          goto unconditional_jump;
+
+
+        /* Normally, the on_failure_jump pushes a failure point, which
+           then gets popped at pop_failure_jump.  We will end up at
+           pop_failure_jump, also, and with a pattern of, say, `a+', we
+           are skipping over the on_failure_jump, so we have to push
+           something meaningless for pop_failure_jump to pop.  */
+        case dummy_failure_jump:
+          DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
+          /* It doesn't matter what we push for the string here.  What
+             the code at `fail' tests is the value for the pattern.  */
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
+          goto unconditional_jump;
+
+
+        /* At the end of an alternative, we need to push a dummy failure
+           point in case we are followed by a `pop_failure_jump', because
+           we don't want the failure point for the alternative to be
+           popped.  For example, matching `(a|ab)*' against `aab'
+           requires that we match the `ab' alternative.  */
+        case push_dummy_failure:
+          DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
+          /* See comments just above at `dummy_failure_jump' about the
+             two zeroes.  */
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
+          break;
+
+        /* Have to succeed matching what follows at least n times.
+           After that, handle like `on_failure_jump'.  */
+        case succeed_n:
+          EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE);
+          DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
+
+          assert (mcnt >= 0);
+          /* Originally, this is how many times we HAVE to succeed.  */
+          if (mcnt > 0)
+            {
+               mcnt--;
+              p += OFFSET_ADDRESS_SIZE;
+               STORE_NUMBER_AND_INCR (p, mcnt);
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p - OFFSET_ADDRESS_SIZE
+                            , mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p - OFFSET_ADDRESS_SIZE
+                            , mcnt);
+#endif
+            }
+         else if (mcnt == 0)
+            {
+#ifdef _LIBC
+              DEBUG_PRINT2 ("  Setting two bytes from %p to no_op.\n",
+                           p + OFFSET_ADDRESS_SIZE);
+#else
+              DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n",
+                           p + OFFSET_ADDRESS_SIZE);
+#endif /* _LIBC */
+
+#ifdef WCHAR
+             p[1] = (UCHAR_T) no_op;
+#else
+             p[2] = (UCHAR_T) no_op;
+              p[3] = (UCHAR_T) no_op;
+#endif /* WCHAR */
+              goto on_failure;
+            }
+          break;
+
+        case jump_n:
+          EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE);
+          DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
+
+          /* Originally, this is how many times we CAN jump.  */
+          if (mcnt)
+            {
+               mcnt--;
+               STORE_NUMBER (p + OFFSET_ADDRESS_SIZE, mcnt);
+
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p + OFFSET_ADDRESS_SIZE,
+                            mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p + OFFSET_ADDRESS_SIZE,
+                            mcnt);
+#endif /* _LIBC */
+              goto unconditional_jump;
+            }
+          /* If don't have to jump any more, skip over the rest of command.  */
+         else
+           p += 2 * OFFSET_ADDRESS_SIZE;
+          break;
+
+       case set_number_at:
+         {
+            DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
+
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+            p1 = p + mcnt;
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+            DEBUG_PRINT3 ("  Setting %p to %d.\n", p1, mcnt);
+#else
+            DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
+#endif
+           STORE_NUMBER (p1, mcnt);
+            break;
+          }
+
+#if 0
+       /* The DEC Alpha C compiler 3.x generates incorrect code for the
+          test  WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
+          AT_WORD_BOUNDARY, so this code is disabled.  Expanding the
+          macro and introducing temporary variables works around the bug.  */
+
+       case wordbound:
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           break;
+         goto fail;
+
+       case notwordbound:
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           goto fail;
+         break;
+#else
+       case wordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           break;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           break;
+         goto fail;
+       }
+
+      case notwordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           goto fail;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           goto fail;
+         break;
+       }
+#endif
+
+       case wordbeg:
+          DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
+         if (!AT_STRINGS_END (d) && WORDCHAR_P (d)
+             && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
+           break;
+          goto fail;
+
+       case wordend:
+          DEBUG_PRINT1 ("EXECUTING wordend.\n");
+         if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
+              && (AT_STRINGS_END (d) || !WORDCHAR_P (d)))
+           break;
+          goto fail;
+
+#ifdef emacs
+       case before_dot:
+          DEBUG_PRINT1 ("EXECUTING before_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) >= point)
+           goto fail;
+         break;
+
+       case at_dot:
+          DEBUG_PRINT1 ("EXECUTING at_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) != point)
+           goto fail;
+         break;
+
+       case after_dot:
+          DEBUG_PRINT1 ("EXECUTING after_dot.\n");
+          if (PTR_CHAR_POS ((unsigned char *) d) <= point)
+           goto fail;
+         break;
+
+       case syntaxspec:
+          DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchsyntax;
+
+        case wordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
+         mcnt = (int) Sword;
+        matchsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
+           goto fail;
+          SET_REGS_MATCHED ();
+         break;
+
+       case notsyntaxspec:
+          DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchnotsyntax;
+
+        case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
+         mcnt = (int) Sword;
+        matchnotsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
+           goto fail;
+         SET_REGS_MATCHED ();
+          break;
+
+#else /* not emacs */
+       case wordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
+         PREFETCH ();
+          if (!WORDCHAR_P (d))
+            goto fail;
+         SET_REGS_MATCHED ();
+          d++;
+         break;
+
+       case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
+         PREFETCH ();
+         if (WORDCHAR_P (d))
+            goto fail;
+          SET_REGS_MATCHED ();
+          d++;
+         break;
+#endif /* not emacs */
+
+        default:
+          abort ();
+       }
+      continue;  /* Successfully executed one pattern command; keep going.  */
+
+
+    /* We goto here if a matching operation fails. */
+    fail:
+      if (!FAIL_STACK_EMPTY ())
+       { /* A restart point is known.  Restore to that state.  */
+          DEBUG_PRINT1 ("\nFAIL:\n");
+          POP_FAILURE_POINT (d, p,
+                             lowest_active_reg, highest_active_reg,
+                             regstart, regend, reg_info);
+
+          /* If this failure point is a dummy, try the next one.  */
+          if (!p)
+           goto fail;
+
+          /* If we failed to the end of the pattern, don't examine *p.  */
+         assert (p <= pend);
+          if (p < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              /* If failed to a backwards jump that's part of a repetition
+                 loop, need to pop this failure point and use the next one.  */
+              switch ((re_opcode_t) *p)
+                {
+                case jump_n:
+                  is_a_jump_n = true;
+                case maybe_pop_jump:
+                case pop_failure_jump:
+                case jump:
+                  p1 = p + 1;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  p1 += mcnt;
+
+                  if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
+                      || (!is_a_jump_n
+                          && (re_opcode_t) *p1 == on_failure_jump))
+                    goto fail;
+                  break;
+                default:
+                  /* do nothing */ ;
+                }
+            }
+
+          if (d >= string1 && d <= end1)
+           dend = end_match_1;
+        }
+      else
+        break;   /* Matching at this starting point really fails.  */
+    } /* for (;;) */
+
+  if (best_regs_set)
+    goto restore_best_regs;
+
+  FREE_VARIABLES ();
+
+  return -1;                           /* Failure to match.  */
+} /* re_match_2 */
+\f
+/* Subroutine definitions for re_match_2.  */
+
+
+/* We are passed P pointing to a register number after a start_memory.
+
+   Return true if the pattern up to the corresponding stop_memory can
+   match the empty string, and false otherwise.
+
+   If we find the matching stop_memory, sets P to point to one past its number.
+   Otherwise, sets P to an undefined byte less than or equal to END.
+
+   We don't handle duplicates properly (yet).  */
+
+static boolean
+PREFIX(group_match_null_string_p) (UCHAR_T **p, UCHAR_T *end,
+                                   PREFIX(register_info_type) *reg_info)
+{
+  int mcnt;
+  /* Point to after the args to the start_memory.  */
+  UCHAR_T *p1 = *p + 2;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and return true or
+        false, as appropriate, when we get to one that can't, or to the
+         matching stop_memory.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+        /* Could be either a loop or a series of alternatives.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+          /* If the next operation is not a jump backwards in the
+            pattern.  */
+
+         if (mcnt >= 0)
+           {
+              /* Go through the on_failure_jumps of the alternatives,
+                 seeing if any of the alternatives cannot match nothing.
+                 The last alternative starts with only a jump,
+                 whereas the rest start with on_failure_jump and end
+                 with a jump, e.g., here is the pattern for `a|b|c':
+
+                 /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
+                 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
+                 /exactn/1/c
+
+                 So, we have to first go through the first (n-1)
+                 alternatives and then deal with the last one separately.  */
+
+
+              /* Deal with the first (n-1) alternatives, which start
+                 with an on_failure_jump (see above) that jumps to right
+                 past a jump_past_alt.  */
+
+              while ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] ==
+                    jump_past_alt)
+                {
+                  /* `mcnt' holds how many bytes long the alternative
+                     is, including the ending `jump_past_alt' and
+                     its number.  */
+
+                  if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt -
+                                               (1 + OFFSET_ADDRESS_SIZE),
+                                               reg_info))
+                    return false;
+
+                  /* Move to right after this alternative, including the
+                    jump_past_alt.  */
+                  p1 += mcnt;
+
+                  /* Break if it's the beginning of an n-th alternative
+                     that doesn't begin with an on_failure_jump.  */
+                  if ((re_opcode_t) *p1 != on_failure_jump)
+                    break;
+
+                 /* Still have to check that it's not an n-th
+                    alternative that starts with an on_failure_jump.  */
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  if ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] !=
+                     jump_past_alt)
+                    {
+                     /* Get to the beginning of the n-th alternative.  */
+                      p1 -= 1 + OFFSET_ADDRESS_SIZE;
+                      break;
+                    }
+                }
+
+              /* Deal with the last alternative: go back and get number
+                 of the `jump_past_alt' just before it.  `mcnt' contains
+                 the length of the alternative.  */
+              EXTRACT_NUMBER (mcnt, p1 - OFFSET_ADDRESS_SIZE);
+
+              if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt, reg_info))
+                return false;
+
+              p1 += mcnt;      /* Get past the n-th alternative.  */
+            } /* if mcnt > 0 */
+          break;
+
+
+        case stop_memory:
+         assert (p1[1] == **p);
+          *p = p1 + 2;
+          return true;
+
+
+        default:
+          if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info))
+            return false;
+        }
+    } /* while p1 < end */
+
+  return false;
+} /* group_match_null_string_p */
+
+
+/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
+   It expects P to be the first byte of a single alternative and END one
+   byte past the last. The alternative can contain groups.  */
+
+static boolean
+PREFIX(alt_match_null_string_p) (UCHAR_T *p, UCHAR_T *end,
+                                 PREFIX(register_info_type) *reg_info)
+{
+  int mcnt;
+  UCHAR_T *p1 = p;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and break when we get
+         to one that can't.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+       /* It's a loop.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+          break;
+
+       default:
+          if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info))
+            return false;
+        }
+    }  /* while p1 < end */
+
+  return true;
+} /* alt_match_null_string_p */
+
+
+/* Deals with the ops common to group_match_null_string_p and
+   alt_match_null_string_p.
+
+   Sets P to one after the op and its arguments, if any.  */
+
+static boolean
+PREFIX(common_op_match_null_string_p) (UCHAR_T **p, UCHAR_T *end,
+                                       PREFIX(register_info_type) *reg_info)
+{
+  int mcnt;
+  boolean ret;
+  int reg_no;
+  UCHAR_T *p1 = *p;
+
+  switch ((re_opcode_t) *p1++)
+    {
+    case no_op:
+    case begline:
+    case endline:
+    case begbuf:
+    case endbuf:
+    case wordbeg:
+    case wordend:
+    case wordbound:
+    case notwordbound:
+#ifdef emacs
+    case before_dot:
+    case at_dot:
+    case after_dot:
+#endif
+      break;
+
+    case start_memory:
+      reg_no = *p1;
+      assert (reg_no > 0 && reg_no <= MAX_REGNUM);
+      ret = PREFIX(group_match_null_string_p) (&p1, end, reg_info);
+
+      /* Have to set this here in case we're checking a group which
+         contains a group and a back reference to it.  */
+
+      if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
+        REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
+
+      if (!ret)
+        return false;
+      break;
+
+    /* If this is an optimized succeed_n for zero times, make the jump.  */
+    case jump:
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+      if (mcnt >= 0)
+        p1 += mcnt;
+      else
+        return false;
+      break;
+
+    case succeed_n:
+      /* Get to the number of times to succeed.  */
+      p1 += OFFSET_ADDRESS_SIZE;
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+      if (mcnt == 0)
+        {
+          p1 -= 2 * OFFSET_ADDRESS_SIZE;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+        }
+      else
+        return false;
+      break;
+
+    case duplicate:
+      if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
+        return false;
+      break;
+
+    case set_number_at:
+      p1 += 2 * OFFSET_ADDRESS_SIZE;
+
+    default:
+      /* All other opcodes mean we cannot match the empty string.  */
+      return false;
+  }
+
+  *p = p1;
+  return true;
+} /* common_op_match_null_string_p */
+
+
+/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
+   bytes; nonzero otherwise.  */
+
+static int
+PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, register int len,
+                        RE_TRANSLATE_TYPE translate)
+{
+  register const UCHAR_T *p1 = (const UCHAR_T *) s1;
+  register const UCHAR_T *p2 = (const UCHAR_T *) s2;
+  while (len)
+    {
+#ifdef WCHAR
+      if (((*p1<=0xff)?translate[*p1++]:*p1++)
+         != ((*p2<=0xff)?translate[*p2++]:*p2++))
+       return 1;
+#else /* BYTE */
+      if (translate[*p1++] != translate[*p2++]) return 1;
+#endif /* WCHAR */
+      len--;
+    }
+  return 0;
+}
+\f
+
+#else /* not INSIDE_RECURSION */
+
+/* Entry points for GNU code.  */
+
+/* re_compile_pattern is the GNU regular expression compiler: it
+   compiles PATTERN (of length SIZE) and puts the result in BUFP.
+   Returns 0 if the pattern was valid, otherwise an error string.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate' fields
+   are set in BUFP on entry.
+
+   We call regex_compile to do the actual compilation.  */
+
+const char *
+re_compile_pattern (const char *pattern, size_t length,
+                    struct re_pattern_buffer *bufp)
+{
+  reg_errcode_t ret;
+
+  /* GNU code is written to assume at least RE_NREGS registers will be set
+     (and at least one extra will be -1).  */
+  bufp->regs_allocated = REGS_UNALLOCATED;
+
+  /* And GNU code determines whether or not to get register information
+     by passing null for the REGS argument to re_match, etc., not by
+     setting no_sub.  */
+  bufp->no_sub = 0;
+
+  /* Match anchors at newline.  */
+  bufp->newline_anchor = 1;
+
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    ret = wcs_regex_compile (pattern, length, re_syntax_options, bufp);
+  else
+# endif
+    ret = byte_regex_compile (pattern, length, re_syntax_options, bufp);
+
+  if (!ret)
+    return NULL;
+  return gettext (re_error_msgid[(int) ret]);
+}
+#ifdef _LIBC
+weak_alias (__re_compile_pattern, re_compile_pattern)
+#endif
+\f
+/* Entry points compatible with 4.2 BSD regex library.  We don't define
+   them unless specifically requested.  */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+
+/* BSD has one and only one pattern buffer.  */
+static struct re_pattern_buffer re_comp_buf;
+
+char *
+#ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+   these names if they don't use our functions, and still use
+   regcomp/regexec below without link errors.  */
+weak_function
+#endif
+re_comp (const char *s)
+{
+  reg_errcode_t ret;
+
+  if (!s)
+    {
+      if (!re_comp_buf.buffer)
+       return (char *) gettext ("No previous regular expression");
+      return 0;
+    }
+
+  if (!re_comp_buf.buffer)
+    {
+      re_comp_buf.buffer = (unsigned char *) malloc (200);
+      if (re_comp_buf.buffer == NULL)
+        return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
+      re_comp_buf.allocated = 200;
+
+      re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
+      if (re_comp_buf.fastmap == NULL)
+       return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
+    }
+
+  /* Since `re_exec' always passes NULL for the `regs' argument, we
+     don't need to initialize the pattern buffer fields which affect it.  */
+
+  /* Match anchors at newlines.  */
+  re_comp_buf.newline_anchor = 1;
+
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    ret = wcs_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
+  else
+# endif
+    ret = byte_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
+
+  if (!ret)
+    return NULL;
+
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+  return (char *) gettext (re_error_msgid[(int) ret]);
+}
+
+
+int
+#ifdef _LIBC
+weak_function
+#endif
+re_exec (const char *s)
+{
+  const int len = strlen (s);
+  return
+    0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
+}
+
+#endif /* _REGEX_RE_COMP */
+\f
+/* POSIX.2 functions.  Don't define these for Emacs.  */
+
+#ifndef emacs
+
+/* regcomp takes a regular expression as a string and compiles it.
+
+   PREG is a regex_t *.  We do not expect any fields to be initialized,
+   since POSIX says we shouldn't.  Thus, we set
+
+     `buffer' to the compiled pattern;
+     `used' to the length of the compiled pattern;
+     `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
+       REG_EXTENDED bit in CFLAGS is set; otherwise, to
+       RE_SYNTAX_POSIX_BASIC;
+     `newline_anchor' to REG_NEWLINE being set in CFLAGS;
+     `fastmap' to an allocated space for the fastmap;
+     `fastmap_accurate' to zero;
+     `re_nsub' to the number of subexpressions in PATTERN.
+
+   PATTERN is the address of the pattern string.
+
+   CFLAGS is a series of bits which affect compilation.
+
+     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
+     use POSIX basic syntax.
+
+     If REG_NEWLINE is set, then . and [^...] don't match newline.
+     Also, regexec will try a match beginning after every newline.
+
+     If REG_ICASE is set, then we considers upper- and lowercase
+     versions of letters to be equivalent when matching.
+
+     If REG_NOSUB is set, then when PREG is passed to regexec, that
+     routine will report only success or failure, and nothing about the
+     registers.
+
+   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
+   the return codes and their meanings.)  */
+
+int
+regcomp (regex_t *preg, const char *pattern, int cflags)
+{
+  reg_errcode_t ret;
+  reg_syntax_t syntax
+    = (cflags & REG_EXTENDED) ?
+      RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
+
+  /* regex_compile will allocate the space for the compiled pattern.  */
+  preg->buffer = 0;
+  preg->allocated = 0;
+  preg->used = 0;
+
+  /* Try to allocate space for the fastmap.  */
+  preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
+
+  if (cflags & REG_ICASE)
+    {
+      int i;
+
+      preg->translate
+       = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
+                                     * sizeof (*(RE_TRANSLATE_TYPE)0));
+      if (preg->translate == NULL)
+        return (int) REG_ESPACE;
+
+      /* Map uppercase characters to corresponding lowercase ones.  */
+      for (i = 0; i < CHAR_SET_SIZE; i++)
+        preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
+    }
+  else
+    preg->translate = NULL;
+
+  /* If REG_NEWLINE is set, newlines are treated differently.  */
+  if (cflags & REG_NEWLINE)
+    { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
+      syntax &= ~RE_DOT_NEWLINE;
+      syntax |= RE_HAT_LISTS_NOT_NEWLINE;
+      /* It also changes the matching behavior.  */
+      preg->newline_anchor = 1;
+    }
+  else
+    preg->newline_anchor = 0;
+
+  preg->no_sub = !!(cflags & REG_NOSUB);
+
+  /* POSIX says a null character in the pattern terminates it, so we
+     can use strlen here in compiling the pattern.  */
+# ifdef MBS_SUPPORT
+  if (MB_CUR_MAX != 1)
+    ret = wcs_regex_compile (pattern, strlen (pattern), syntax, preg);
+  else
+# endif
+    ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg);
+
+  /* POSIX doesn't distinguish between an unmatched open-group and an
+     unmatched close-group: both are REG_EPAREN.  */
+  if (ret == REG_ERPAREN) ret = REG_EPAREN;
+
+  if (ret == REG_NOERROR && preg->fastmap)
+    {
+      /* Compute the fastmap now, since regexec cannot modify the pattern
+        buffer.  */
+      if (re_compile_fastmap (preg) == -2)
+       {
+         /* Some error occurred while computing the fastmap, just forget
+            about it.  */
+         free (preg->fastmap);
+         preg->fastmap = NULL;
+       }
+    }
+
+  return (int) ret;
+}
+#ifdef _LIBC
+weak_alias (__regcomp, regcomp)
+#endif
+
+
+/* regexec searches for a given pattern, specified by PREG, in the
+   string STRING.
+
+   If NMATCH is zero or REG_NOSUB was set in the cflags argument to
+   `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
+   least NMATCH elements, and we set them to the offsets of the
+   corresponding matched substrings.
+
+   EFLAGS specifies `execution flags' which affect matching: if
+   REG_NOTBOL is set, then ^ does not match at the beginning of the
+   string; if REG_NOTEOL is set, then $ does not match at the end.
+
+   We return 0 if we find a match and REG_NOMATCH if not.  */
+
+int
+regexec (const regex_t *preg, const char *string, size_t nmatch,
+         regmatch_t pmatch[], int eflags)
+{
+  int ret;
+  struct re_registers regs;
+  regex_t private_preg;
+  int len = strlen (string);
+  boolean want_reg_info = !preg->no_sub && nmatch > 0;
+
+  private_preg = *preg;
+
+  private_preg.not_bol = !!(eflags & REG_NOTBOL);
+  private_preg.not_eol = !!(eflags & REG_NOTEOL);
+
+  /* The user has told us exactly how many registers to return
+     information about, via `nmatch'.  We have to pass that on to the
+     matching routines.  */
+  private_preg.regs_allocated = REGS_FIXED;
+
+  if (want_reg_info)
+    {
+      regs.num_regs = nmatch;
+      regs.start = TALLOC (nmatch * 2, regoff_t);
+      if (regs.start == NULL)
+        return (int) REG_NOMATCH;
+      regs.end = regs.start + nmatch;
+    }
+
+  /* Perform the searching operation.  */
+  ret = re_search (&private_preg, string, len,
+                   /* start: */ 0, /* range: */ len,
+                   want_reg_info ? &regs : (struct re_registers *) 0);
+
+  /* Copy the register information to the POSIX structure.  */
+  if (want_reg_info)
+    {
+      if (ret >= 0)
+        {
+          unsigned r;
+
+          for (r = 0; r < nmatch; r++)
+            {
+              pmatch[r].rm_so = regs.start[r];
+              pmatch[r].rm_eo = regs.end[r];
+            }
+        }
+
+      /* If we needed the temporary register info, free the space now.  */
+      free (regs.start);
+    }
+
+  /* We want zero return to mean success, unlike `re_search'.  */
+  return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
+}
+#ifdef _LIBC
+weak_alias (__regexec, regexec)
+#endif
+
+
+/* Returns a message corresponding to an error code, ERRCODE, returned
+   from either regcomp or regexec.   We don't use PREG here.  */
+
+size_t
+regerror (int errcode, const regex_t *preg ATTRIBUTE_UNUSED,
+          char *errbuf, size_t errbuf_size)
+{
+  const char *msg;
+  size_t msg_size;
+
+  if (errcode < 0
+      || errcode >= (int) (sizeof (re_error_msgid)
+                          / sizeof (re_error_msgid[0])))
+    /* Only error codes returned by the rest of the code should be passed
+       to this routine.  If we are given anything else, or if other regex
+       code generates an invalid error code, then the program has a bug.
+       Dump core so we can fix it.  */
+    abort ();
+
+  msg = gettext (re_error_msgid[errcode]);
+
+  msg_size = strlen (msg) + 1; /* Includes the null.  */
+
+  if (errbuf_size != 0)
+    {
+      if (msg_size > errbuf_size)
+        {
+#if defined HAVE_MEMPCPY || defined _LIBC
+         *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
+#else
+          memcpy (errbuf, msg, errbuf_size - 1);
+          errbuf[errbuf_size - 1] = 0;
+#endif
+        }
+      else
+        memcpy (errbuf, msg, msg_size);
+    }
+
+  return msg_size;
+}
+#ifdef _LIBC
+weak_alias (__regerror, regerror)
+#endif
+
+
+/* Free dynamically allocated space used by PREG.  */
+
+void
+regfree (regex_t *preg)
+{
+  if (preg->buffer != NULL)
+    free (preg->buffer);
+  preg->buffer = NULL;
+
+  preg->allocated = 0;
+  preg->used = 0;
+
+  if (preg->fastmap != NULL)
+    free (preg->fastmap);
+  preg->fastmap = NULL;
+  preg->fastmap_accurate = 0;
+
+  if (preg->translate != NULL)
+    free (preg->translate);
+  preg->translate = NULL;
+}
+#ifdef _LIBC
+weak_alias (__regfree, regfree)
+#endif
+
+#endif /* not emacs  */
+
+#endif /* not INSIDE_RECURSION */
+
+\f
+#undef STORE_NUMBER
+#undef STORE_NUMBER_AND_INCR
+#undef EXTRACT_NUMBER
+#undef EXTRACT_NUMBER_AND_INCR
+
+#undef DEBUG_PRINT_COMPILED_PATTERN
+#undef DEBUG_PRINT_DOUBLE_STRING
+
+#undef INIT_FAIL_STACK
+#undef RESET_FAIL_STACK
+#undef DOUBLE_FAIL_STACK
+#undef PUSH_PATTERN_OP
+#undef PUSH_FAILURE_POINTER
+#undef PUSH_FAILURE_INT
+#undef PUSH_FAILURE_ELT
+#undef POP_FAILURE_POINTER
+#undef POP_FAILURE_INT
+#undef POP_FAILURE_ELT
+#undef DEBUG_PUSH
+#undef DEBUG_POP
+#undef PUSH_FAILURE_POINT
+#undef POP_FAILURE_POINT
+
+#undef REG_UNSET_VALUE
+#undef REG_UNSET
+
+#undef PATFETCH
+#undef PATFETCH_RAW
+#undef PATUNFETCH
+#undef TRANSLATE
+
+#undef INIT_BUF_SIZE
+#undef GET_BUFFER_SPACE
+#undef BUF_PUSH
+#undef BUF_PUSH_2
+#undef BUF_PUSH_3
+#undef STORE_JUMP
+#undef STORE_JUMP2
+#undef INSERT_JUMP
+#undef INSERT_JUMP2
+#undef EXTEND_BUFFER
+#undef GET_UNSIGNED_NUMBER
+#undef FREE_STACK_RETURN
+
+# undef POINTER_TO_OFFSET
+# undef MATCHING_IN_FRST_STRING
+# undef PREFETCH
+# undef AT_STRINGS_BEG
+# undef AT_STRINGS_END
+# undef WORDCHAR_P
+# undef FREE_VAR
+# undef FREE_VARIABLES
+# undef NO_HIGHEST_ACTIVE_REG
+# undef NO_LOWEST_ACTIVE_REG
+
+# undef CHAR_T
+# undef UCHAR_T
+# undef COMPILED_BUFFER_VAR
+# undef OFFSET_ADDRESS_SIZE
+# undef CHAR_CLASS_SIZE
+# undef PREFIX
+# undef ARG_PREFIX
+# undef PUT_CHAR
+# undef BYTE
+# undef WCHAR
+
+# define DEFINED_ONCE
diff --git a/libiberty/rename.c b/libiberty/rename.c
new file mode 100644 (file)
index 0000000..ad342ff
--- /dev/null
@@ -0,0 +1,36 @@
+/* rename -- rename a file
+   This function is in the public domain. */
+
+/*
+
+@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
+
+Renames a file from @var{old} to @var{new}.  If @var{new} already
+exists, it is removed.
+
+@end deftypefn
+
+*/
+
+#include "ansidecl.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <errno.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+rename (const char *zfrom, const char *zto)
+{
+  if (link (zfrom, zto) < 0)
+    {
+      if (errno != EEXIST)
+       return -1;
+      if (unlink (zto) < 0
+         || link (zfrom, zto) < 0)
+       return -1;
+    }
+  return unlink (zfrom);
+}
diff --git a/libiberty/rindex.c b/libiberty/rindex.c
new file mode 100644 (file)
index 0000000..194ef9f
--- /dev/null
@@ -0,0 +1,21 @@
+/* Stub implementation of (obsolete) rindex(). */
+
+/*
+
+@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{rindex} is
+deprecated in new programs in favor of @code{strrchr}.
+
+@end deftypefn
+
+*/
+
+extern char *strrchr (const char *, int);
+
+char *
+rindex (const char *s, int c)
+{
+  return strrchr (s, c);
+}
diff --git a/libiberty/safe-ctype.c b/libiberty/safe-ctype.c
new file mode 100644 (file)
index 0000000..0972b4b
--- /dev/null
@@ -0,0 +1,255 @@
+/* <ctype.h> replacement macros.
+
+   Copyright (C) 2000, 2001, 2002, 2003, 2004,
+   2005 Free Software Foundation, Inc.
+   Contributed by Zack Weinberg <zackw@stanford.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@defvr Extension HOST_CHARSET
+This macro indicates the basic character set and encoding used by the
+host: more precisely, the encoding used for character constants in
+preprocessor @samp{#if} statements (the C "execution character set").
+It is defined by @file{safe-ctype.h}, and will be an integer constant
+with one of the following values:
+
+@ftable @code
+@item HOST_CHARSET_UNKNOWN
+The host character set is unknown - that is, not one of the next two
+possibilities.
+
+@item HOST_CHARSET_ASCII
+The host character set is ASCII.
+
+@item HOST_CHARSET_EBCDIC
+The host character set is some variant of EBCDIC.  (Only one of the
+nineteen EBCDIC varying characters is tested; exercise caution.)
+@end ftable
+@end defvr
+
+@deffn  Extension ISALPHA  (@var{c})
+@deffnx Extension ISALNUM  (@var{c})
+@deffnx Extension ISBLANK  (@var{c})
+@deffnx Extension ISCNTRL  (@var{c})
+@deffnx Extension ISDIGIT  (@var{c})
+@deffnx Extension ISGRAPH  (@var{c})
+@deffnx Extension ISLOWER  (@var{c})
+@deffnx Extension ISPRINT  (@var{c})
+@deffnx Extension ISPUNCT  (@var{c})
+@deffnx Extension ISSPACE  (@var{c})
+@deffnx Extension ISUPPER  (@var{c})
+@deffnx Extension ISXDIGIT (@var{c})
+
+These twelve macros are defined by @file{safe-ctype.h}.  Each has the
+same meaning as the corresponding macro (with name in lowercase)
+defined by the standard header @file{ctype.h}.  For example,
+@code{ISALPHA} returns true for alphabetic characters and false for
+others.  However, there are two differences between these macros and
+those provided by @file{ctype.h}:
+
+@itemize @bullet
+@item These macros are guaranteed to have well-defined behavior for all 
+values representable by @code{signed char} and @code{unsigned char}, and
+for @code{EOF}.
+
+@item These macros ignore the current locale; they are true for these
+fixed sets of characters:
+@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
+@item @code{ALPHA}  @tab @kbd{A-Za-z}
+@item @code{ALNUM}  @tab @kbd{A-Za-z0-9}
+@item @code{BLANK}  @tab @kbd{space tab}
+@item @code{CNTRL}  @tab @code{!PRINT}
+@item @code{DIGIT}  @tab @kbd{0-9}
+@item @code{GRAPH}  @tab @code{ALNUM || PUNCT}
+@item @code{LOWER}  @tab @kbd{a-z}
+@item @code{PRINT}  @tab @code{GRAPH ||} @kbd{space}
+@item @code{PUNCT}  @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
+@item @code{SPACE}  @tab @kbd{space tab \n \r \f \v}
+@item @code{UPPER}  @tab @kbd{A-Z}
+@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
+@end multitable
+
+Note that, if the host character set is ASCII or a superset thereof,
+all these macros will return false for all values of @code{char} outside
+the range of 7-bit ASCII.  In particular, both ISPRINT and ISCNTRL return
+false for characters with numeric values from 128 to 255.
+@end itemize
+@end deffn
+
+@deffn  Extension ISIDNUM         (@var{c})
+@deffnx Extension ISIDST          (@var{c})
+@deffnx Extension IS_VSPACE       (@var{c})
+@deffnx Extension IS_NVSPACE      (@var{c})
+@deffnx Extension IS_SPACE_OR_NUL (@var{c})
+@deffnx Extension IS_ISOBASIC     (@var{c})
+These six macros are defined by @file{safe-ctype.h} and provide
+additional character classes which are useful when doing lexical
+analysis of C or similar languages.  They are true for the following
+sets of characters:
+
+@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
+@item @code{IDNUM}        @tab @kbd{A-Za-z0-9_}
+@item @code{IDST}         @tab @kbd{A-Za-z_}
+@item @code{VSPACE}       @tab @kbd{\r \n}
+@item @code{NVSPACE}      @tab @kbd{space tab \f \v \0}
+@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
+@item @code{ISOBASIC}     @tab @code{VSPACE || NVSPACE || PRINT}
+@end multitable
+@end deffn
+
+*/
+
+#include "ansidecl.h"
+#include <safe-ctype.h>
+#include <stdio.h>  /* for EOF */
+
+#if EOF != -1
+ #error "<safe-ctype.h> requires EOF == -1"
+#endif
+
+/* Shorthand */
+#define bl _sch_isblank
+#define cn _sch_iscntrl
+#define di _sch_isdigit
+#define is _sch_isidst
+#define lo _sch_islower
+#define nv _sch_isnvsp
+#define pn _sch_ispunct
+#define pr _sch_isprint
+#define sp _sch_isspace
+#define up _sch_isupper
+#define vs _sch_isvsp
+#define xd _sch_isxdigit
+
+/* Masks.  */
+#define L  (const unsigned short) (lo|is   |pr)        /* lower case letter */
+#define XL (const unsigned short) (lo|is|xd|pr)        /* lowercase hex digit */
+#define U  (const unsigned short) (up|is   |pr)        /* upper case letter */
+#define XU (const unsigned short) (up|is|xd|pr)        /* uppercase hex digit */
+#define D  (const unsigned short) (di   |xd|pr)        /* decimal digit */
+#define P  (const unsigned short) (pn      |pr)        /* punctuation */
+#define _  (const unsigned short) (pn|is   |pr)        /* underscore */
+
+#define C  (const unsigned short) (         cn)        /* control character */
+#define Z  (const unsigned short) (nv      |cn)        /* NUL */
+#define M  (const unsigned short) (nv|sp   |cn)        /* cursor movement: \f \v */
+#define V  (const unsigned short) (vs|sp   |cn)        /* vertical space: \r \n */
+#define T  (const unsigned short) (nv|sp|bl|cn)        /* tab */
+#define S  (const unsigned short) (nv|sp|bl|pr)        /* space */
+
+/* Are we ASCII? */
+#if HOST_CHARSET == HOST_CHARSET_ASCII
+
+const unsigned short _sch_istable[256] =
+{
+  Z,  C,  C,  C,   C,  C,  C,  C,   /* NUL SOH STX ETX  EOT ENQ ACK BEL */
+  C,  T,  V,  M,   M,  V,  C,  C,   /* BS  HT  LF  VT   FF  CR  SO  SI  */
+  C,  C,  C,  C,   C,  C,  C,  C,   /* DLE DC1 DC2 DC3  DC4 NAK SYN ETB */
+  C,  C,  C,  C,   C,  C,  C,  C,   /* CAN EM  SUB ESC  FS  GS  RS  US  */
+  S,  P,  P,  P,   P,  P,  P,  P,   /* SP  !   "   #    $   %   &   '   */
+  P,  P,  P,  P,   P,  P,  P,  P,   /* (   )   *   +    ,   -   .   /   */
+  D,  D,  D,  D,   D,  D,  D,  D,   /* 0   1   2   3    4   5   6   7   */
+  D,  D,  P,  P,   P,  P,  P,  P,   /* 8   9   :   ;    <   =   >   ?   */
+  P, XU, XU, XU,  XU, XU, XU,  U,   /* @   A   B   C    D   E   F   G   */
+  U,  U,  U,  U,   U,  U,  U,  U,   /* H   I   J   K    L   M   N   O   */
+  U,  U,  U,  U,   U,  U,  U,  U,   /* P   Q   R   S    T   U   V   W   */
+  U,  U,  U,  P,   P,  P,  P,  _,   /* X   Y   Z   [    \   ]   ^   _   */
+  P, XL, XL, XL,  XL, XL, XL,  L,   /* `   a   b   c    d   e   f   g   */
+  L,  L,  L,  L,   L,  L,  L,  L,   /* h   i   j   k    l   m   n   o   */
+  L,  L,  L,  L,   L,  L,  L,  L,   /* p   q   r   s    t   u   v   w   */
+  L,  L,  L,  P,   P,  P,  P,  C,   /* x   y   z   {    |   }   ~   DEL */
+
+  /* high half of unsigned char is locale-specific, so all tests are
+     false in "C" locale */
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,  0, 0, 0, 0,
+};
+
+const unsigned char _sch_tolower[256] =
+{
+   0,  1,  2,  3,   4,  5,  6,  7,   8,  9, 10, 11,  12, 13, 14, 15,
+  16, 17, 18, 19,  20, 21, 22, 23,  24, 25, 26, 27,  28, 29, 30, 31,
+  32, 33, 34, 35,  36, 37, 38, 39,  40, 41, 42, 43,  44, 45, 46, 47,
+  48, 49, 50, 51,  52, 53, 54, 55,  56, 57, 58, 59,  60, 61, 62, 63,
+  64,
+
+  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+
+  91, 92, 93, 94, 95, 96,
+
+  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+
+ 123,124,125,126,127,
+
+ 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
+ 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
+ 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
+ 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
+
+ 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
+ 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
+ 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
+ 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
+};
+
+const unsigned char _sch_toupper[256] =
+{
+   0,  1,  2,  3,   4,  5,  6,  7,   8,  9, 10, 11,  12, 13, 14, 15,
+  16, 17, 18, 19,  20, 21, 22, 23,  24, 25, 26, 27,  28, 29, 30, 31,
+  32, 33, 34, 35,  36, 37, 38, 39,  40, 41, 42, 43,  44, 45, 46, 47,
+  48, 49, 50, 51,  52, 53, 54, 55,  56, 57, 58, 59,  60, 61, 62, 63,
+  64,
+
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+
+  91, 92, 93, 94, 95, 96,
+
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+
+ 123,124,125,126,127,
+
+ 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
+ 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
+ 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
+ 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
+
+ 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
+ 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
+ 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
+ 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
+};
+
+#else
+# if HOST_CHARSET == HOST_CHARSET_EBCDIC
+  #error "FIXME: write tables for EBCDIC"
+# else
+  #error "Unrecognized host character set"
+# endif
+#endif
diff --git a/libiberty/setenv.c b/libiberty/setenv.c
new file mode 100644 (file)
index 0000000..355af5a
--- /dev/null
@@ -0,0 +1,183 @@
+/* Copyright (C) 1992, 1995, 1996, 1997, 2002 Free Software Foundation, Inc.
+   This file based on setenv.c in the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+
+/*
+
+@deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite})
+@deftypefnx Supplemental void unsetenv (const char *@var{name})
+
+@code{setenv} adds @var{name} to the environment with value
+@var{value}.  If the name was already present in the environment,
+the new value will be stored only if @var{overwrite} is nonzero.
+The companion @code{unsetenv} function removes @var{name} from the
+environment.  This implementation is not safe for multithreaded code.
+
+@end deftypefn
+
+*/
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define setenv libiberty_setenv
+#define unsetenv libiberty_unsetenv
+
+#include "ansidecl.h"
+#include <sys/types.h> /* For `size_t' */
+#include <stdio.h>     /* For `NULL' */
+
+#include <errno.h>
+#if !defined(errno) && !defined(HAVE_ERRNO_DECL)
+extern int errno;
+#endif
+#define __set_errno(ev) ((errno) = (ev))
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+# include <string.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#define __environ      environ
+#ifndef HAVE_ENVIRON_DECL
+extern char **environ;
+#endif
+
+#undef setenv
+#undef unsetenv
+
+/* LOCK and UNLOCK are defined as no-ops.  This makes the libiberty
+ * implementation MT-Unsafe. */
+#define LOCK
+#define UNLOCK
+
+/* Below this point, it's verbatim code from the glibc-2.0 implementation */
+
+/* If this variable is not a null pointer we allocated the current
+   environment.  */
+static char **last_environ;
+
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+  register char **ep = 0;
+  register size_t size;
+  const size_t namelen = strlen (name);
+  const size_t vallen = strlen (value) + 1;
+
+  LOCK;
+
+  size = 0;
+  if (__environ != NULL)
+    {
+      for (ep = __environ; *ep != NULL; ++ep)
+       if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+         break;
+       else
+         ++size;
+    }
+
+  if (__environ == NULL || *ep == NULL)
+    {
+      char **new_environ;
+      if (__environ == last_environ && __environ != NULL)
+       /* We allocated this space; we can extend it.  */
+       new_environ = (char **) realloc (last_environ,
+                                        (size + 2) * sizeof (char *));
+      else
+       new_environ = (char **) malloc ((size + 2) * sizeof (char *));
+
+      if (new_environ == NULL)
+       {
+         UNLOCK;
+         return -1;
+       }
+
+      new_environ[size] = (char *) malloc (namelen + 1 + vallen);
+      if (new_environ[size] == NULL)
+       {
+         free ((char *) new_environ);
+         __set_errno (ENOMEM);
+         UNLOCK;
+         return -1;
+       }
+
+      if (__environ != last_environ)
+       memcpy ((char *) new_environ, (char *) __environ,
+               size * sizeof (char *));
+
+      memcpy (new_environ[size], name, namelen);
+      new_environ[size][namelen] = '=';
+      memcpy (&new_environ[size][namelen + 1], value, vallen);
+
+      new_environ[size + 1] = NULL;
+
+      last_environ = __environ = new_environ;
+    }
+  else if (replace)
+    {
+      size_t len = strlen (*ep);
+      if (len + 1 < namelen + 1 + vallen)
+       {
+         /* The existing string is too short; malloc a new one.  */
+         char *new_string = (char *) malloc (namelen + 1 + vallen);
+         if (new_string == NULL)
+           {
+             UNLOCK;
+             return -1;
+           }
+         *ep = new_string;
+       }
+      memcpy (*ep, name, namelen);
+      (*ep)[namelen] = '=';
+      memcpy (&(*ep)[namelen + 1], value, vallen);
+    }
+
+  UNLOCK;
+
+  return 0;
+}
+
+void
+unsetenv (const char *name)
+{
+  const size_t len = strlen (name);
+  char **ep;
+
+  LOCK;
+
+  for (ep = __environ; *ep; ++ep)
+    if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+      {
+       /* Found it.  Remove this pointer by moving later ones back.  */
+       char **dp = ep;
+       do
+         dp[0] = dp[1];
+       while (*dp++);
+       /* Continue the loop in case NAME appears again.  */
+      }
+
+  UNLOCK;
+}
diff --git a/libiberty/sigsetmask.c b/libiberty/sigsetmask.c
new file mode 100644 (file)
index 0000000..3b708b1
--- /dev/null
@@ -0,0 +1,40 @@
+/* Version of sigsetmask.c
+   Written by Steve Chamberlain (sac@cygnus.com).
+   Contributed by Cygnus Support.
+   This file is in the public doamin. */
+
+/*
+
+@deftypefn Supplemental int sigsetmask (int @var{set})
+
+Sets the signal mask to the one provided in @var{set} and returns
+the old mask (which, for libiberty's implementation, will always
+be the value @code{1}).
+
+@end deftypefn
+
+*/
+
+#define _POSIX_SOURCE
+#include <ansidecl.h>
+/* Including <sys/types.h> seems to be needed by ISC. */
+#include <sys/types.h>
+#include <signal.h>
+
+extern void abort (void) ATTRIBUTE_NORETURN;
+
+#ifdef SIG_SETMASK
+int
+sigsetmask (int set)
+{
+    sigset_t new_sig;
+    sigset_t old_sig;
+    
+    sigemptyset (&new_sig);
+    if (set != 0) {
+      abort(); /* FIXME, we don't know how to translate old mask to new */
+    }
+    sigprocmask(SIG_SETMASK, &new_sig, &old_sig);
+    return 1;  /* FIXME, we always return 1 as old value.  */
+}
+#endif
diff --git a/libiberty/snprintf.c b/libiberty/snprintf.c
new file mode 100644 (file)
index 0000000..f1ba49f
--- /dev/null
@@ -0,0 +1,60 @@
+/* Implement the snprintf function.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/*
+
+@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...)
+
+This function is similar to sprintf, but it will print at most @var{n}
+characters.  On error the return value is -1, otherwise it returns the
+number of characters that would have been printed had @var{n} been
+sufficiently large, regardless of the actual value of @var{n}.  Note
+some pre-C99 system libraries do not implement this correctly so users
+cannot generally rely on the return value if the system version of
+this function is used.
+
+@end deftypefn
+
+*/
+
+#include "ansidecl.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+
+int vsnprintf (char *, size_t, const char *, va_list);
+
+int
+snprintf (char *s, size_t n, const char *format, ...)
+{
+  int result;
+  VA_OPEN (ap, format);
+  VA_FIXEDARG (ap, char *, s);
+  VA_FIXEDARG (ap, size_t, n);
+  VA_FIXEDARG (ap, const char *, format);
+  result = vsnprintf (s, n, format, ap);
+  VA_CLOSE (ap);
+  return result;
+}
diff --git a/libiberty/sort.c b/libiberty/sort.c
new file mode 100644 (file)
index 0000000..3738dd7
--- /dev/null
@@ -0,0 +1,186 @@
+/* Sorting algorithms.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell <mark@codesourcery.com>.
+
+This file is part of GNU CC.
+   
+GNU CC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "libiberty.h"
+#include "sort.h"
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifndef UCHAR_MAX
+#define UCHAR_MAX ((unsigned char)(-1))
+#endif
+
+/* POINTERS and WORK are both arrays of N pointers.  When this
+   function returns POINTERS will be sorted in ascending order.  */
+
+void sort_pointers (size_t n, void **pointers, void **work)
+{
+  /* The type of a single digit.  This can be any unsigned integral
+     type.  When changing this, DIGIT_MAX should be changed as 
+     well.  */
+  typedef unsigned char digit_t;
+
+  /* The maximum value a single digit can have.  */
+#define DIGIT_MAX (UCHAR_MAX + 1)
+
+  /* The Ith entry is the number of elements in *POINTERSP that have I
+     in the digit on which we are currently sorting.  */
+  unsigned int count[DIGIT_MAX];
+  /* Nonzero if we are running on a big-endian machine.  */
+  int big_endian_p;
+  size_t i;
+  size_t j;
+
+  /* The algorithm used here is radix sort which takes time linear in
+     the number of elements in the array.  */
+
+  /* The algorithm here depends on being able to swap the two arrays
+     an even number of times.  */
+  if ((sizeof (void *) / sizeof (digit_t)) % 2 != 0)
+    abort ();
+
+  /* Figure out the endianness of the machine.  */
+  for (i = 0, j = 0; i < sizeof (size_t); ++i)
+    {
+      j *= (UCHAR_MAX + 1);
+      j += i;
+    }
+  big_endian_p = (((char *)&j)[0] == 0);
+
+  /* Move through the pointer values from least significant to most
+     significant digits.  */
+  for (i = 0; i < sizeof (void *) / sizeof (digit_t); ++i)
+    {
+      digit_t *digit;
+      digit_t *bias;
+      digit_t *top;
+      unsigned int *countp;
+      void **pointerp;
+
+      /* The offset from the start of the pointer will depend on the
+        endianness of the machine.  */
+      if (big_endian_p)
+       j = sizeof (void *) / sizeof (digit_t) - i;
+      else
+       j = i;
+       
+      /* Now, perform a stable sort on this digit.  We use counting
+        sort.  */
+      memset (count, 0, DIGIT_MAX * sizeof (unsigned int));
+
+      /* Compute the address of the appropriate digit in the first and
+        one-past-the-end elements of the array.  On a little-endian
+        machine, the least-significant digit is closest to the front.  */
+      bias = ((digit_t *) pointers) + j;
+      top = ((digit_t *) (pointers + n)) + j;
+
+      /* Count how many there are of each value.  At the end of this
+        loop, COUNT[K] will contain the number of pointers whose Ith
+        digit is K.  */
+      for (digit = bias; 
+          digit < top; 
+          digit += sizeof (void *) / sizeof (digit_t))
+       ++count[*digit];
+
+      /* Now, make COUNT[K] contain the number of pointers whose Ith
+        digit is less than or equal to K.  */
+      for (countp = count + 1; countp < count + DIGIT_MAX; ++countp)
+       *countp += countp[-1];
+
+      /* Now, drop the pointers into their correct locations.  */
+      for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp)
+       work[--count[((digit_t *) pointerp)[j]]] = *pointerp;
+
+      /* Swap WORK and POINTERS so that POINTERS contains the sorted
+        array.  */
+      pointerp = pointers;
+      pointers = work;
+      work = pointerp;
+    }
+}
+
+/* Everything below here is a unit test for the routines in this
+   file.  */
+
+#ifdef UNIT_TEST
+
+#include <stdio.h>
+
+void *xmalloc (size_t n)
+{
+  return malloc (n);
+}
+
+int main (int argc, char **argv)
+{
+  int k;
+  int result;
+  size_t i;
+  void **pointers;
+  void **work;
+
+  if (argc > 1)
+    k = atoi (argv[1]);
+  else
+    k = 10;
+
+  pointers = XNEWVEC (void*, k);
+  work = XNEWVEC (void*, k);
+
+  for (i = 0; i < k; ++i)
+    {
+      pointers[i] = (void *) random ();
+      printf ("%x\n", pointers[i]);
+    }
+
+  sort_pointers (k, pointers, work);
+
+  printf ("\nSorted\n\n");
+
+  result = 0;
+
+  for (i = 0; i < k; ++i)
+    {
+      printf ("%x\n", pointers[i]);
+      if (i > 0 && (char*) pointers[i] < (char*) pointers[i - 1])
+       result = 1;
+    }
+
+  free (pointers);
+  free (work);
+
+  return result;
+}
+
+#endif
diff --git a/libiberty/spaces.c b/libiberty/spaces.c
new file mode 100644 (file)
index 0000000..67481c9
--- /dev/null
@@ -0,0 +1,72 @@
+/* Allocate memory region filled with spaces.
+   Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Extension char* spaces (int @var{count})
+
+Returns a pointer to a memory region filled with the specified
+number of spaces and null terminated.  The returned pointer is
+valid until at least the next call.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#if VMS
+#include <stdlib.h>
+#include <unixlib.h>
+#else
+/* For systems with larger pointers than ints, these must be declared.  */
+extern PTR malloc (size_t);
+extern void free (PTR);
+#endif
+
+const char *
+spaces (int count)
+{
+  register char *t;
+  static char *buf;
+  static int maxsize;
+
+  if (count > maxsize)
+    {
+      if (buf)
+       {
+         free (buf);
+       }
+      buf = (char *) malloc (count + 1);
+      if (buf == (char *) 0)
+       return 0;
+      for (t = buf + count ; t != buf ; )
+       {
+         *--t = ' ';
+       }
+      maxsize = count;
+      buf[count] = '\0';
+    }
+  return (const char *) (buf + maxsize - count);
+}
+
diff --git a/libiberty/splay-tree.c b/libiberty/splay-tree.c
new file mode 100644 (file)
index 0000000..060f900
--- /dev/null
@@ -0,0 +1,526 @@
+/* A splay-tree datatype.  
+   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+This file is part of GNU CC.
+   
+GNU CC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* For an easily readable description of splay-trees, see:
+
+     Lewis, Harry R. and Denenberg, Larry.  Data Structures and Their
+     Algorithms.  Harper-Collins, Inc.  1991.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <stdio.h>
+
+#include "libiberty.h"
+#include "splay-tree.h"
+
+static void splay_tree_delete_helper (splay_tree, splay_tree_node);
+static inline void rotate_left (splay_tree_node *,
+                               splay_tree_node, splay_tree_node);
+static inline void rotate_right (splay_tree_node *,
+                               splay_tree_node, splay_tree_node);
+static void splay_tree_splay (splay_tree, splay_tree_key);
+static int splay_tree_foreach_helper (splay_tree, splay_tree_node,
+                                      splay_tree_foreach_fn, void*);
+
+/* Deallocate NODE (a member of SP), and all its sub-trees.  */
+
+static void 
+splay_tree_delete_helper (splay_tree sp, splay_tree_node node)
+{
+  splay_tree_node pending = 0;
+  splay_tree_node active = 0;
+
+  if (!node)
+    return;
+
+#define KDEL(x)  if (sp->delete_key) (*sp->delete_key)(x);
+#define VDEL(x)  if (sp->delete_value) (*sp->delete_value)(x);
+
+  KDEL (node->key);
+  VDEL (node->value);
+
+  /* We use the "key" field to hold the "next" pointer.  */
+  node->key = (splay_tree_key)pending;
+  pending = (splay_tree_node)node;
+
+  /* Now, keep processing the pending list until there aren't any
+     more.  This is a little more complicated than just recursing, but
+     it doesn't toast the stack for large trees.  */
+
+  while (pending)
+    {
+      active = pending;
+      pending = 0;
+      while (active)
+       {
+         splay_tree_node temp;
+
+         /* active points to a node which has its key and value
+            deallocated, we just need to process left and right.  */
+
+         if (active->left)
+           {
+             KDEL (active->left->key);
+             VDEL (active->left->value);
+             active->left->key = (splay_tree_key)pending;
+             pending = (splay_tree_node)(active->left);
+           }
+         if (active->right)
+           {
+             KDEL (active->right->key);
+             VDEL (active->right->value);
+             active->right->key = (splay_tree_key)pending;
+             pending = (splay_tree_node)(active->right);
+           }
+
+         temp = active;
+         active = (splay_tree_node)(temp->key);
+         (*sp->deallocate) ((char*) temp, sp->allocate_data);
+       }
+    }
+#undef KDEL
+#undef VDEL
+}
+
+/* Rotate the edge joining the left child N with its parent P.  PP is the
+   grandparents pointer to P.  */
+
+static inline void
+rotate_left (splay_tree_node *pp, splay_tree_node p, splay_tree_node n)
+{
+  splay_tree_node tmp;
+  tmp = n->right;
+  n->right = p;
+  p->left = tmp;
+  *pp = n;
+}
+
+/* Rotate the edge joining the right child N with its parent P.  PP is the
+   grandparents pointer to P.  */
+
+static inline void
+rotate_right (splay_tree_node *pp, splay_tree_node p, splay_tree_node n)
+{
+  splay_tree_node tmp;
+  tmp = n->left;
+  n->left = p;
+  p->right = tmp;
+  *pp = n;
+}
+
+/* Bottom up splay of key.  */
+
+static void
+splay_tree_splay (splay_tree sp, splay_tree_key key)
+{
+  if (sp->root == 0)
+    return;
+
+  do {
+    int cmp1, cmp2;
+    splay_tree_node n, c;
+
+    n = sp->root;
+    cmp1 = (*sp->comp) (key, n->key);
+
+    /* Found.  */
+    if (cmp1 == 0)
+      return;
+
+    /* Left or right?  If no child, then we're done.  */
+    if (cmp1 < 0)
+      c = n->left;
+    else
+      c = n->right;
+    if (!c)
+      return;
+
+    /* Next one left or right?  If found or no child, we're done
+       after one rotation.  */
+    cmp2 = (*sp->comp) (key, c->key);
+    if (cmp2 == 0
+        || (cmp2 < 0 && !c->left)
+        || (cmp2 > 0 && !c->right))
+      {
+       if (cmp1 < 0)
+         rotate_left (&sp->root, n, c);
+       else
+         rotate_right (&sp->root, n, c);
+        return;
+      }
+
+    /* Now we have the four cases of double-rotation.  */
+    if (cmp1 < 0 && cmp2 < 0)
+      {
+       rotate_left (&n->left, c, c->left);
+       rotate_left (&sp->root, n, n->left);
+      }
+    else if (cmp1 > 0 && cmp2 > 0)
+      {
+       rotate_right (&n->right, c, c->right);
+       rotate_right (&sp->root, n, n->right);
+      }
+    else if (cmp1 < 0 && cmp2 > 0)
+      {
+       rotate_right (&n->left, c, c->right);
+       rotate_left (&sp->root, n, n->left);
+      }
+    else if (cmp1 > 0 && cmp2 < 0)
+      {
+       rotate_left (&n->right, c, c->left);
+       rotate_right (&sp->root, n, n->right);
+      }
+  } while (1);
+}
+
+/* Call FN, passing it the DATA, for every node below NODE, all of
+   which are from SP, following an in-order traversal.  If FN every
+   returns a non-zero value, the iteration ceases immediately, and the
+   value is returned.  Otherwise, this function returns 0.  */
+
+static int
+splay_tree_foreach_helper (splay_tree sp, splay_tree_node node,
+                           splay_tree_foreach_fn fn, void *data)
+{
+  int val;
+
+  if (!node)
+    return 0;
+
+  val = splay_tree_foreach_helper (sp, node->left, fn, data);
+  if (val)
+    return val;
+
+  val = (*fn)(node, data);
+  if (val)
+    return val;
+
+  return splay_tree_foreach_helper (sp, node->right, fn, data);
+}
+
+
+/* An allocator and deallocator based on xmalloc.  */
+static void *
+splay_tree_xmalloc_allocate (int size, void *data ATTRIBUTE_UNUSED)
+{
+  return (void *) xmalloc (size);
+}
+
+static void
+splay_tree_xmalloc_deallocate (void *object, void *data ATTRIBUTE_UNUSED)
+{
+  free (object);
+}
+
+
+/* Allocate a new splay tree, using COMPARE_FN to compare nodes,
+   DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate
+   values.  Use xmalloc to allocate the splay tree structure, and any
+   nodes added.  */
+
+splay_tree 
+splay_tree_new (splay_tree_compare_fn compare_fn,
+                splay_tree_delete_key_fn delete_key_fn,
+                splay_tree_delete_value_fn delete_value_fn)
+{
+  return (splay_tree_new_with_allocator
+          (compare_fn, delete_key_fn, delete_value_fn,
+           splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0));
+}
+
+
+/* Allocate a new splay tree, using COMPARE_FN to compare nodes,
+   DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate
+   values.  */
+
+splay_tree 
+splay_tree_new_with_allocator (splay_tree_compare_fn compare_fn,
+                               splay_tree_delete_key_fn delete_key_fn,
+                               splay_tree_delete_value_fn delete_value_fn,
+                               splay_tree_allocate_fn allocate_fn,
+                               splay_tree_deallocate_fn deallocate_fn,
+                               void *allocate_data)
+{
+  splay_tree sp = (splay_tree) (*allocate_fn) (sizeof (struct splay_tree_s),
+                                               allocate_data);
+  sp->root = 0;
+  sp->comp = compare_fn;
+  sp->delete_key = delete_key_fn;
+  sp->delete_value = delete_value_fn;
+  sp->allocate = allocate_fn;
+  sp->deallocate = deallocate_fn;
+  sp->allocate_data = allocate_data;
+
+  return sp;
+}
+
+/* Deallocate SP.  */
+
+void 
+splay_tree_delete (splay_tree sp)
+{
+  splay_tree_delete_helper (sp, sp->root);
+  (*sp->deallocate) ((char*) sp, sp->allocate_data);
+}
+
+/* Insert a new node (associating KEY with DATA) into SP.  If a
+   previous node with the indicated KEY exists, its data is replaced
+   with the new value.  Returns the new node.  */
+
+splay_tree_node
+splay_tree_insert (splay_tree sp, splay_tree_key key, splay_tree_value value)
+{
+  int comparison = 0;
+
+  splay_tree_splay (sp, key);
+
+  if (sp->root)
+    comparison = (*sp->comp)(sp->root->key, key);
+
+  if (sp->root && comparison == 0)
+    {
+      /* If the root of the tree already has the indicated KEY, just
+        replace the value with VALUE.  */
+      if (sp->delete_value)
+       (*sp->delete_value)(sp->root->value);
+      sp->root->value = value;
+    } 
+  else 
+    {
+      /* Create a new node, and insert it at the root.  */
+      splay_tree_node node;
+      
+      node = ((splay_tree_node)
+              (*sp->allocate) (sizeof (struct splay_tree_node_s),
+                               sp->allocate_data));
+      node->key = key;
+      node->value = value;
+      
+      if (!sp->root)
+       node->left = node->right = 0;
+      else if (comparison < 0)
+       {
+         node->left = sp->root;
+         node->right = node->left->right;
+         node->left->right = 0;
+       }
+      else
+       {
+         node->right = sp->root;
+         node->left = node->right->left;
+         node->right->left = 0;
+       }
+
+      sp->root = node;
+    }
+
+  return sp->root;
+}
+
+/* Remove KEY from SP.  It is not an error if it did not exist.  */
+
+void
+splay_tree_remove (splay_tree sp, splay_tree_key key)
+{
+  splay_tree_splay (sp, key);
+
+  if (sp->root && (*sp->comp) (sp->root->key, key) == 0)
+    {
+      splay_tree_node left, right;
+
+      left = sp->root->left;
+      right = sp->root->right;
+
+      /* Delete the root node itself.  */
+      if (sp->delete_value)
+       (*sp->delete_value) (sp->root->value);
+      (*sp->deallocate) (sp->root, sp->allocate_data);
+
+      /* One of the children is now the root.  Doesn't matter much
+        which, so long as we preserve the properties of the tree.  */
+      if (left)
+       {
+         sp->root = left;
+
+         /* If there was a right child as well, hang it off the 
+            right-most leaf of the left child.  */
+         if (right)
+           {
+             while (left->right)
+               left = left->right;
+             left->right = right;
+           }
+       }
+      else
+       sp->root = right;
+    }
+}
+
+/* Lookup KEY in SP, returning VALUE if present, and NULL 
+   otherwise.  */
+
+splay_tree_node
+splay_tree_lookup (splay_tree sp, splay_tree_key key)
+{
+  splay_tree_splay (sp, key);
+
+  if (sp->root && (*sp->comp)(sp->root->key, key) == 0)
+    return sp->root;
+  else
+    return 0;
+}
+
+/* Return the node in SP with the greatest key.  */
+
+splay_tree_node
+splay_tree_max (splay_tree sp)
+{
+  splay_tree_node n = sp->root;
+
+  if (!n)
+    return NULL;
+
+  while (n->right)
+    n = n->right;
+
+  return n;
+}
+
+/* Return the node in SP with the smallest key.  */
+
+splay_tree_node
+splay_tree_min (splay_tree sp)
+{
+  splay_tree_node n = sp->root;
+
+  if (!n)
+    return NULL;
+
+  while (n->left)
+    n = n->left;
+
+  return n;
+}
+
+/* Return the immediate predecessor KEY, or NULL if there is no
+   predecessor.  KEY need not be present in the tree.  */
+
+splay_tree_node
+splay_tree_predecessor (splay_tree sp, splay_tree_key key)
+{
+  int comparison;
+  splay_tree_node node;
+
+  /* If the tree is empty, there is certainly no predecessor.  */
+  if (!sp->root)
+    return NULL;
+
+  /* Splay the tree around KEY.  That will leave either the KEY
+     itself, its predecessor, or its successor at the root.  */
+  splay_tree_splay (sp, key);
+  comparison = (*sp->comp)(sp->root->key, key);
+
+  /* If the predecessor is at the root, just return it.  */
+  if (comparison < 0)
+    return sp->root;
+
+  /* Otherwise, find the rightmost element of the left subtree.  */
+  node = sp->root->left;
+  if (node)
+    while (node->right)
+      node = node->right;
+
+  return node;
+}
+
+/* Return the immediate successor KEY, or NULL if there is no
+   successor.  KEY need not be present in the tree.  */
+
+splay_tree_node
+splay_tree_successor (splay_tree sp, splay_tree_key key)
+{
+  int comparison;
+  splay_tree_node node;
+
+  /* If the tree is empty, there is certainly no successor.  */
+  if (!sp->root)
+    return NULL;
+
+  /* Splay the tree around KEY.  That will leave either the KEY
+     itself, its predecessor, or its successor at the root.  */
+  splay_tree_splay (sp, key);
+  comparison = (*sp->comp)(sp->root->key, key);
+
+  /* If the successor is at the root, just return it.  */
+  if (comparison > 0)
+    return sp->root;
+
+  /* Otherwise, find the leftmost element of the right subtree.  */
+  node = sp->root->right;
+  if (node)
+    while (node->left)
+      node = node->left;
+
+  return node;
+}
+
+/* Call FN, passing it the DATA, for every node in SP, following an
+   in-order traversal.  If FN every returns a non-zero value, the
+   iteration ceases immediately, and the value is returned.
+   Otherwise, this function returns 0.  */
+
+int
+splay_tree_foreach (splay_tree sp, splay_tree_foreach_fn fn, void *data)
+{
+  return splay_tree_foreach_helper (sp, sp->root, fn, data);
+}
+
+/* Splay-tree comparison function, treating the keys as ints.  */
+
+int
+splay_tree_compare_ints (splay_tree_key k1, splay_tree_key k2)
+{
+  if ((int) k1 < (int) k2)
+    return -1;
+  else if ((int) k1 > (int) k2)
+    return 1;
+  else 
+    return 0;
+}
+
+/* Splay-tree comparison function, treating the keys as pointers.  */
+
+int
+splay_tree_compare_pointers (splay_tree_key k1, splay_tree_key k2)
+{
+  if ((char*) k1 < (char*) k2)
+    return -1;
+  else if ((char*) k1 > (char*) k2)
+    return 1;
+  else 
+    return 0;
+}
diff --git a/libiberty/stpcpy.c b/libiberty/stpcpy.c
new file mode 100644 (file)
index 0000000..57b32d1
--- /dev/null
@@ -0,0 +1,43 @@
+/* Implement the stpcpy function.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src})
+
+Copies the string @var{src} into @var{dst}.  Returns a pointer to
+@var{dst} + strlen(@var{src}).
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+extern size_t strlen (const char *);
+extern PTR memcpy (PTR, const PTR, size_t);
+
+char *
+stpcpy (char *dst, const char *src)
+{
+  const size_t len = strlen (src);
+  return (char *) memcpy (dst, src, len + 1) + len;
+}
diff --git a/libiberty/stpncpy.c b/libiberty/stpncpy.c
new file mode 100644 (file)
index 0000000..f97206a
--- /dev/null
@@ -0,0 +1,47 @@
+/* Implement the stpncpy function.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len})
+
+Copies the string @var{src} into @var{dst}, copying exactly @var{len}
+and padding with zeros if necessary.  If @var{len} < strlen(@var{src})
+then return @var{dst} + @var{len}, otherwise returns @var{dst} +
+strlen(@var{src}).
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+extern size_t strlen (const char *);
+extern char *strncpy (char *, const char *, size_t);
+
+char *
+stpncpy (char *dst, const char *src, size_t len)
+{
+  size_t n = strlen (src);
+  if (n > len)
+    n = len;
+  return strncpy (dst, src, len) + n;
+}
diff --git a/libiberty/strcasecmp.c b/libiberty/strcasecmp.c
new file mode 100644 (file)
index 0000000..131d81c
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific written prior permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+/*
+  
+@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strcmp}.
+
+@end deftypefn
+
+*/
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)strcasecmp.c       5.5 (Berkeley) 11/24/87";
+#endif /* LIBC_SCCS and not lint */
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+/*
+ * This array is designed for mapping upper and lower case letter
+ * together for a case independent comparison.  The mappings are
+ * based upon ascii character sequences.
+ */
+typedef unsigned char uc;
+static const unsigned char charmap[] = {
+       (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007',
+       (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017',
+       (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027',
+       (uc)'\030',(uc)'\031',(uc)'\032',(uc)'\033',(uc)'\034',(uc)'\035',(uc)'\036',(uc)'\037',
+       (uc)'\040',(uc)'\041',(uc)'\042',(uc)'\043',(uc)'\044',(uc)'\045',(uc)'\046',(uc)'\047',
+       (uc)'\050',(uc)'\051',(uc)'\052',(uc)'\053',(uc)'\054',(uc)'\055',(uc)'\056',(uc)'\057',
+       (uc)'\060',(uc)'\061',(uc)'\062',(uc)'\063',(uc)'\064',(uc)'\065',(uc)'\066',(uc)'\067',
+       (uc)'\070',(uc)'\071',(uc)'\072',(uc)'\073',(uc)'\074',(uc)'\075',(uc)'\076',(uc)'\077',
+       (uc)'\100',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147',
+       (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157',
+       (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167',
+       (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\133',(uc)'\134',(uc)'\135',(uc)'\136',(uc)'\137',
+       (uc)'\140',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147',
+       (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157',
+       (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167',
+       (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\173',(uc)'\174',(uc)'\175',(uc)'\176',(uc)'\177',
+       (uc)'\200',(uc)'\201',(uc)'\202',(uc)'\203',(uc)'\204',(uc)'\205',(uc)'\206',(uc)'\207',
+       (uc)'\210',(uc)'\211',(uc)'\212',(uc)'\213',(uc)'\214',(uc)'\215',(uc)'\216',(uc)'\217',
+       (uc)'\220',(uc)'\221',(uc)'\222',(uc)'\223',(uc)'\224',(uc)'\225',(uc)'\226',(uc)'\227',
+       (uc)'\230',(uc)'\231',(uc)'\232',(uc)'\233',(uc)'\234',(uc)'\235',(uc)'\236',(uc)'\237',
+       (uc)'\240',(uc)'\241',(uc)'\242',(uc)'\243',(uc)'\244',(uc)'\245',(uc)'\246',(uc)'\247',
+       (uc)'\250',(uc)'\251',(uc)'\252',(uc)'\253',(uc)'\254',(uc)'\255',(uc)'\256',(uc)'\257',
+       (uc)'\260',(uc)'\261',(uc)'\262',(uc)'\263',(uc)'\264',(uc)'\265',(uc)'\266',(uc)'\267',
+       (uc)'\270',(uc)'\271',(uc)'\272',(uc)'\273',(uc)'\274',(uc)'\275',(uc)'\276',(uc)'\277',
+       (uc)'\300',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347',
+       (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357',
+       (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367',
+       (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\333',(uc)'\334',(uc)'\335',(uc)'\336',(uc)'\337',
+       (uc)'\340',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347',
+       (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357',
+       (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367',
+       (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\373',(uc)'\374',(uc)'\375',(uc)'\376',(uc)'\377',
+};
+
+int
+strcasecmp(const char *s1, const char *s2)
+{
+    register unsigned char u1, u2;
+
+    for (;;) {
+       u1 = (unsigned char) *s1++;
+       u2 = (unsigned char) *s2++;
+       if (charmap[u1] != charmap[u2]) {
+           return charmap[u1] - charmap[u2];
+       }
+       if (u1 == '\0') {
+           return 0;
+       }
+    }
+}
+
diff --git a/libiberty/strchr.c b/libiberty/strchr.c
new file mode 100644 (file)
index 0000000..935805e
--- /dev/null
@@ -0,0 +1,28 @@
+/* Portable version of strchr()
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+
+char *
+strchr (register const char *s, int c)
+{
+  do {
+    if (*s == c)
+      {
+       return (char*)s;
+      }
+  } while (*s++);
+  return (0);
+}
diff --git a/libiberty/strdup.c b/libiberty/strdup.c
new file mode 100644 (file)
index 0000000..78c2093
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+
+@deftypefn Supplemental char* strdup (const char *@var{s})
+
+Returns a pointer to a copy of @var{s} in memory obtained from
+@code{malloc}, or @code{NULL} if insufficient memory was available.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+extern size_t  strlen (const char*);
+extern PTR     malloc (size_t);
+extern PTR     memcpy (PTR, const PTR, size_t);
+
+char *
+strdup(const char *s)
+{
+  size_t len = strlen (s) + 1;
+  char *result = (char*) malloc (len);
+  if (result == (char*) 0)
+    return (char*) 0;
+  return (char*) memcpy (result, s, len);
+}
diff --git a/libiberty/strerror.c b/libiberty/strerror.c
new file mode 100644 (file)
index 0000000..0efadc3
--- /dev/null
@@ -0,0 +1,809 @@
+/* Extended support for using errno values.
+   Written by Fred Fish.  fnf@cygnus.com
+   This file is in the public domain.  --Per Bothner.  */
+
+#include "config.h"
+
+#ifdef HAVE_SYS_ERRLIST
+/* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least)
+   might declare sys_errlist in a way that the compiler might consider
+   incompatible with our later declaration, perhaps by using const
+   attributes.  So we hide the declaration in errno.h (if any) using a
+   macro. */
+#define sys_nerr sys_nerr__
+#define sys_errlist sys_errlist__
+#endif
+
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+#ifdef HAVE_SYS_ERRLIST
+#undef sys_nerr
+#undef sys_errlist
+#endif
+
+/*  Routines imported from standard C runtime libraries. */
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+extern PTR malloc ();
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+extern PTR memset ();
+#endif
+
+#ifndef MAX
+#  define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+static void init_error_tables (void);
+
+/* Translation table for errno values.  See intro(2) in most UNIX systems
+   Programmers Reference Manuals.
+
+   Note that this table is generally only accessed when it is used at runtime
+   to initialize errno name and message tables that are indexed by errno
+   value.
+
+   Not all of these errnos will exist on all systems.  This table is the only
+   thing that should have to be updated as new error numbers are introduced.
+   It's sort of ugly, but at least its portable. */
+
+struct error_info
+{
+  const int value;             /* The numeric value from <errno.h> */
+  const char *const name;      /* The equivalent symbolic value */
+#ifndef HAVE_SYS_ERRLIST
+  const char *const msg;       /* Short message about this value */
+#endif
+};
+
+#ifndef HAVE_SYS_ERRLIST
+#   define ENTRY(value, name, msg)     {value, name, msg}
+#else
+#   define ENTRY(value, name, msg)     {value, name}
+#endif
+
+static const struct error_info error_table[] =
+{
+#if defined (EPERM)
+  ENTRY(EPERM, "EPERM", "Not owner"),
+#endif
+#if defined (ENOENT)
+  ENTRY(ENOENT, "ENOENT", "No such file or directory"),
+#endif
+#if defined (ESRCH)
+  ENTRY(ESRCH, "ESRCH", "No such process"),
+#endif
+#if defined (EINTR)
+  ENTRY(EINTR, "EINTR", "Interrupted system call"),
+#endif
+#if defined (EIO)
+  ENTRY(EIO, "EIO", "I/O error"),
+#endif
+#if defined (ENXIO)
+  ENTRY(ENXIO, "ENXIO", "No such device or address"),
+#endif
+#if defined (E2BIG)
+  ENTRY(E2BIG, "E2BIG", "Arg list too long"),
+#endif
+#if defined (ENOEXEC)
+  ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"),
+#endif
+#if defined (EBADF)
+  ENTRY(EBADF, "EBADF", "Bad file number"),
+#endif
+#if defined (ECHILD)
+  ENTRY(ECHILD, "ECHILD", "No child processes"),
+#endif
+#if defined (EWOULDBLOCK)      /* Put before EAGAIN, sometimes aliased */
+  ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"),
+#endif
+#if defined (EAGAIN)
+  ENTRY(EAGAIN, "EAGAIN", "No more processes"),
+#endif
+#if defined (ENOMEM)
+  ENTRY(ENOMEM, "ENOMEM", "Not enough space"),
+#endif
+#if defined (EACCES)
+  ENTRY(EACCES, "EACCES", "Permission denied"),
+#endif
+#if defined (EFAULT)
+  ENTRY(EFAULT, "EFAULT", "Bad address"),
+#endif
+#if defined (ENOTBLK)
+  ENTRY(ENOTBLK, "ENOTBLK", "Block device required"),
+#endif
+#if defined (EBUSY)
+  ENTRY(EBUSY, "EBUSY", "Device busy"),
+#endif
+#if defined (EEXIST)
+  ENTRY(EEXIST, "EEXIST", "File exists"),
+#endif
+#if defined (EXDEV)
+  ENTRY(EXDEV, "EXDEV", "Cross-device link"),
+#endif
+#if defined (ENODEV)
+  ENTRY(ENODEV, "ENODEV", "No such device"),
+#endif
+#if defined (ENOTDIR)
+  ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"),
+#endif
+#if defined (EISDIR)
+  ENTRY(EISDIR, "EISDIR", "Is a directory"),
+#endif
+#if defined (EINVAL)
+  ENTRY(EINVAL, "EINVAL", "Invalid argument"),
+#endif
+#if defined (ENFILE)
+  ENTRY(ENFILE, "ENFILE", "File table overflow"),
+#endif
+#if defined (EMFILE)
+  ENTRY(EMFILE, "EMFILE", "Too many open files"),
+#endif
+#if defined (ENOTTY)
+  ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"),
+#endif
+#if defined (ETXTBSY)
+  ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"),
+#endif
+#if defined (EFBIG)
+  ENTRY(EFBIG, "EFBIG", "File too large"),
+#endif
+#if defined (ENOSPC)
+  ENTRY(ENOSPC, "ENOSPC", "No space left on device"),
+#endif
+#if defined (ESPIPE)
+  ENTRY(ESPIPE, "ESPIPE", "Illegal seek"),
+#endif
+#if defined (EROFS)
+  ENTRY(EROFS, "EROFS", "Read-only file system"),
+#endif
+#if defined (EMLINK)
+  ENTRY(EMLINK, "EMLINK", "Too many links"),
+#endif
+#if defined (EPIPE)
+  ENTRY(EPIPE, "EPIPE", "Broken pipe"),
+#endif
+#if defined (EDOM)
+  ENTRY(EDOM, "EDOM", "Math argument out of domain of func"),
+#endif
+#if defined (ERANGE)
+  ENTRY(ERANGE, "ERANGE", "Math result not representable"),
+#endif
+#if defined (ENOMSG)
+  ENTRY(ENOMSG, "ENOMSG", "No message of desired type"),
+#endif
+#if defined (EIDRM)
+  ENTRY(EIDRM, "EIDRM", "Identifier removed"),
+#endif
+#if defined (ECHRNG)
+  ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"),
+#endif
+#if defined (EL2NSYNC)
+  ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"),
+#endif
+#if defined (EL3HLT)
+  ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"),
+#endif
+#if defined (EL3RST)
+  ENTRY(EL3RST, "EL3RST", "Level 3 reset"),
+#endif
+#if defined (ELNRNG)
+  ENTRY(ELNRNG, "ELNRNG", "Link number out of range"),
+#endif
+#if defined (EUNATCH)
+  ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"),
+#endif
+#if defined (ENOCSI)
+  ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"),
+#endif
+#if defined (EL2HLT)
+  ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"),
+#endif
+#if defined (EDEADLK)
+  ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"),
+#endif
+#if defined (ENOLCK)
+  ENTRY(ENOLCK, "ENOLCK", "No record locks available"),
+#endif
+#if defined (EBADE)
+  ENTRY(EBADE, "EBADE", "Invalid exchange"),
+#endif
+#if defined (EBADR)
+  ENTRY(EBADR, "EBADR", "Invalid request descriptor"),
+#endif
+#if defined (EXFULL)
+  ENTRY(EXFULL, "EXFULL", "Exchange full"),
+#endif
+#if defined (ENOANO)
+  ENTRY(ENOANO, "ENOANO", "No anode"),
+#endif
+#if defined (EBADRQC)
+  ENTRY(EBADRQC, "EBADRQC", "Invalid request code"),
+#endif
+#if defined (EBADSLT)
+  ENTRY(EBADSLT, "EBADSLT", "Invalid slot"),
+#endif
+#if defined (EDEADLOCK)
+  ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"),
+#endif
+#if defined (EBFONT)
+  ENTRY(EBFONT, "EBFONT", "Bad font file format"),
+#endif
+#if defined (ENOSTR)
+  ENTRY(ENOSTR, "ENOSTR", "Device not a stream"),
+#endif
+#if defined (ENODATA)
+  ENTRY(ENODATA, "ENODATA", "No data available"),
+#endif
+#if defined (ETIME)
+  ENTRY(ETIME, "ETIME", "Timer expired"),
+#endif
+#if defined (ENOSR)
+  ENTRY(ENOSR, "ENOSR", "Out of streams resources"),
+#endif
+#if defined (ENONET)
+  ENTRY(ENONET, "ENONET", "Machine is not on the network"),
+#endif
+#if defined (ENOPKG)
+  ENTRY(ENOPKG, "ENOPKG", "Package not installed"),
+#endif
+#if defined (EREMOTE)
+  ENTRY(EREMOTE, "EREMOTE", "Object is remote"),
+#endif
+#if defined (ENOLINK)
+  ENTRY(ENOLINK, "ENOLINK", "Link has been severed"),
+#endif
+#if defined (EADV)
+  ENTRY(EADV, "EADV", "Advertise error"),
+#endif
+#if defined (ESRMNT)
+  ENTRY(ESRMNT, "ESRMNT", "Srmount error"),
+#endif
+#if defined (ECOMM)
+  ENTRY(ECOMM, "ECOMM", "Communication error on send"),
+#endif
+#if defined (EPROTO)
+  ENTRY(EPROTO, "EPROTO", "Protocol error"),
+#endif
+#if defined (EMULTIHOP)
+  ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"),
+#endif
+#if defined (EDOTDOT)
+  ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"),
+#endif
+#if defined (EBADMSG)
+  ENTRY(EBADMSG, "EBADMSG", "Not a data message"),
+#endif
+#if defined (ENAMETOOLONG)
+  ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"),
+#endif
+#if defined (EOVERFLOW)
+  ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"),
+#endif
+#if defined (ENOTUNIQ)
+  ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"),
+#endif
+#if defined (EBADFD)
+  ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"),
+#endif
+#if defined (EREMCHG)
+  ENTRY(EREMCHG, "EREMCHG", "Remote address changed"),
+#endif
+#if defined (ELIBACC)
+  ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"),
+#endif
+#if defined (ELIBBAD)
+  ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"),
+#endif
+#if defined (ELIBSCN)
+  ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"),
+#endif
+#if defined (ELIBMAX)
+  ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"),
+#endif
+#if defined (ELIBEXEC)
+  ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"),
+#endif
+#if defined (EILSEQ)
+  ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"),
+#endif
+#if defined (ENOSYS)
+  ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"),
+#endif
+#if defined (ELOOP)
+  ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"),
+#endif
+#if defined (ERESTART)
+  ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"),
+#endif
+#if defined (ESTRPIPE)
+  ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"),
+#endif
+#if defined (ENOTEMPTY)
+  ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"),
+#endif
+#if defined (EUSERS)
+  ENTRY(EUSERS, "EUSERS", "Too many users"),
+#endif
+#if defined (ENOTSOCK)
+  ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"),
+#endif
+#if defined (EDESTADDRREQ)
+  ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"),
+#endif
+#if defined (EMSGSIZE)
+  ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"),
+#endif
+#if defined (EPROTOTYPE)
+  ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"),
+#endif
+#if defined (ENOPROTOOPT)
+  ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"),
+#endif
+#if defined (EPROTONOSUPPORT)
+  ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"),
+#endif
+#if defined (ESOCKTNOSUPPORT)
+  ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"),
+#endif
+#if defined (EOPNOTSUPP)
+  ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"),
+#endif
+#if defined (EPFNOSUPPORT)
+  ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"),
+#endif
+#if defined (EAFNOSUPPORT)
+  ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"),
+#endif
+#if defined (EADDRINUSE)
+  ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"),
+#endif
+#if defined (EADDRNOTAVAIL)
+  ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"),
+#endif
+#if defined (ENETDOWN)
+  ENTRY(ENETDOWN, "ENETDOWN", "Network is down"),
+#endif
+#if defined (ENETUNREACH)
+  ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"),
+#endif
+#if defined (ENETRESET)
+  ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"),
+#endif
+#if defined (ECONNABORTED)
+  ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"),
+#endif
+#if defined (ECONNRESET)
+  ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"),
+#endif
+#if defined (ENOBUFS)
+  ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"),
+#endif
+#if defined (EISCONN)
+  ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"),
+#endif
+#if defined (ENOTCONN)
+  ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"),
+#endif
+#if defined (ESHUTDOWN)
+  ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"),
+#endif
+#if defined (ETOOMANYREFS)
+  ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"),
+#endif
+#if defined (ETIMEDOUT)
+  ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"),
+#endif
+#if defined (ECONNREFUSED)
+  ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"),
+#endif
+#if defined (EHOSTDOWN)
+  ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"),
+#endif
+#if defined (EHOSTUNREACH)
+  ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"),
+#endif
+#if defined (EALREADY)
+  ENTRY(EALREADY, "EALREADY", "Operation already in progress"),
+#endif
+#if defined (EINPROGRESS)
+  ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"),
+#endif
+#if defined (ESTALE)
+  ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"),
+#endif
+#if defined (EUCLEAN)
+  ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"),
+#endif
+#if defined (ENOTNAM)
+  ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"),
+#endif
+#if defined (ENAVAIL)
+  ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"),
+#endif
+#if defined (EISNAM)
+  ENTRY(EISNAM, "EISNAM", "Is a named type file"),
+#endif
+#if defined (EREMOTEIO)
+  ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"),
+#endif
+  ENTRY(0, NULL, NULL)
+};
+
+#ifdef EVMSERR
+/* This is not in the table, because the numeric value of EVMSERR (32767)
+   lies outside the range of sys_errlist[].  */
+static struct { int value; const char *name, *msg; }
+  evmserr = { EVMSERR, "EVMSERR", "VMS-specific error" };
+#endif
+
+/* Translation table allocated and initialized at runtime.  Indexed by the
+   errno value to find the equivalent symbolic value. */
+
+static const char **error_names;
+static int num_error_names = 0;
+
+/* Translation table allocated and initialized at runtime, if it does not
+   already exist in the host environment.  Indexed by the errno value to find
+   the descriptive string.
+
+   We don't export it for use in other modules because even though it has the
+   same name, it differs from other implementations in that it is dynamically
+   initialized rather than statically initialized. */
+
+#ifndef HAVE_SYS_ERRLIST
+
+#define sys_nerr sys_nerr__
+#define sys_errlist sys_errlist__
+static int sys_nerr;
+static const char **sys_errlist;
+
+#else
+
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+#endif
+
+/*
+
+NAME
+
+       init_error_tables -- initialize the name and message tables
+
+SYNOPSIS
+
+       static void init_error_tables ();
+
+DESCRIPTION
+
+       Using the error_table, which is initialized at compile time, generate
+       the error_names and the sys_errlist (if needed) tables, which are
+       indexed at runtime by a specific errno value.
+
+BUGS
+
+       The initialization of the tables may fail under low memory conditions,
+       in which case we don't do anything particularly useful, but we don't
+       bomb either.  Who knows, it might succeed at a later point if we free
+       some memory in the meantime.  In any case, the other routines know
+       how to deal with lack of a table after trying to initialize it.  This
+       may or may not be considered to be a bug, that we don't specifically
+       warn about this particular failure mode.
+
+*/
+
+static void
+init_error_tables (void)
+{
+  const struct error_info *eip;
+  int nbytes;
+
+  /* If we haven't already scanned the error_table once to find the maximum
+     errno value, then go find it now. */
+
+  if (num_error_names == 0)
+    {
+      for (eip = error_table; eip -> name != NULL; eip++)
+       {
+         if (eip -> value >= num_error_names)
+           {
+             num_error_names = eip -> value + 1;
+           }
+       }
+    }
+
+  /* Now attempt to allocate the error_names table, zero it out, and then
+     initialize it from the statically initialized error_table. */
+
+  if (error_names == NULL)
+    {
+      nbytes = num_error_names * sizeof (char *);
+      if ((error_names = (const char **) malloc (nbytes)) != NULL)
+       {
+         memset (error_names, 0, nbytes);
+         for (eip = error_table; eip -> name != NULL; eip++)
+           {
+             error_names[eip -> value] = eip -> name;
+           }
+       }
+    }
+
+#ifndef HAVE_SYS_ERRLIST
+
+  /* Now attempt to allocate the sys_errlist table, zero it out, and then
+     initialize it from the statically initialized error_table. */
+
+  if (sys_errlist == NULL)
+    {
+      nbytes = num_error_names * sizeof (char *);
+      if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
+       {
+         memset (sys_errlist, 0, nbytes);
+         sys_nerr = num_error_names;
+         for (eip = error_table; eip -> name != NULL; eip++)
+           {
+             sys_errlist[eip -> value] = eip -> msg;
+           }
+       }
+    }
+
+#endif
+
+}
+
+/*
+
+
+@deftypefn Extension int errno_max (void)
+
+Returns the maximum @code{errno} value for which a corresponding
+symbolic name or message is available.  Note that in the case where we
+use the @code{sys_errlist} supplied by the system, it is possible for
+there to be more symbolic names than messages, or vice versa.  In
+fact, the manual page for @code{perror(3C)} explicitly warns that one
+should check the size of the table (@code{sys_nerr}) before indexing
+it, since new error codes may be added to the system before they are
+added to the table.  Thus @code{sys_nerr} might be smaller than value
+implied by the largest @code{errno} value defined in @code{<errno.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+@end deftypefn
+
+*/
+
+int
+errno_max (void)
+{
+  int maxsize;
+
+  if (error_names == NULL)
+    {
+      init_error_tables ();
+    }
+  maxsize = MAX (sys_nerr, num_error_names);
+  return (maxsize - 1);
+}
+
+#ifndef HAVE_STRERROR
+
+/*
+
+@deftypefn Supplemental char* strerror (int @var{errnoval})
+
+Maps an @code{errno} number to an error message string, the contents
+of which are implementation defined.  On systems which have the
+external variables @code{sys_nerr} and @code{sys_errlist}, these
+strings will be the same as the ones used by @code{perror}.
+
+If the supplied error number is within the valid range of indices for
+the @code{sys_errlist}, but no message is available for the particular
+error number, then returns the string @samp{Error @var{num}}, where
+@var{num} is the error number.
+
+If the supplied error number is not a valid index into
+@code{sys_errlist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the
+next call to @code{strerror}.
+
+@end deftypefn
+
+*/
+
+char *
+strerror (int errnoval)
+{
+  const char *msg;
+  static char buf[32];
+
+#ifndef HAVE_SYS_ERRLIST
+
+  if (error_names == NULL)
+    {
+      init_error_tables ();
+    }
+
+#endif
+
+  if ((errnoval < 0) || (errnoval >= sys_nerr))
+    {
+#ifdef EVMSERR
+      if (errnoval == evmserr.value)
+       msg = evmserr.msg;
+      else
+#endif
+      /* Out of range, just return NULL */
+      msg = NULL;
+    }
+  else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL))
+    {
+      /* In range, but no sys_errlist or no entry at this index. */
+      sprintf (buf, "Error %d", errnoval);
+      msg = buf;
+    }
+  else
+    {
+      /* In range, and a valid message.  Just return the message. */
+      msg = (char *) sys_errlist[errnoval];
+    }
+  
+  return (msg);
+}
+
+#endif /* ! HAVE_STRERROR */
+
+
+/*
+
+@deftypefn Replacement {const char*} strerrno (int @var{errnum})
+
+Given an error number returned from a system call (typically returned
+in @code{errno}), returns a pointer to a string containing the
+symbolic name of that error number, as found in @code{<errno.h>}.
+
+If the supplied error number is within the valid range of indices for
+symbolic names, but no name is available for the particular error
+number, then returns the string @samp{Error @var{num}}, where @var{num}
+is the error number.
+
+If the supplied error number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strerrno}.
+
+@end deftypefn
+
+*/
+
+const char *
+strerrno (int errnoval)
+{
+  const char *name;
+  static char buf[32];
+
+  if (error_names == NULL)
+    {
+      init_error_tables ();
+    }
+
+  if ((errnoval < 0) || (errnoval >= num_error_names))
+    {
+#ifdef EVMSERR
+      if (errnoval == evmserr.value)
+       name = evmserr.name;
+      else
+#endif
+      /* Out of range, just return NULL */
+      name = NULL;
+    }
+  else if ((error_names == NULL) || (error_names[errnoval] == NULL))
+    {
+      /* In range, but no error_names or no entry at this index. */
+      sprintf (buf, "Error %d", errnoval);
+      name = (const char *) buf;
+    }
+  else
+    {
+      /* In range, and a valid name.  Just return the name. */
+      name = error_names[errnoval];
+    }
+
+  return (name);
+}
+
+/*
+
+@deftypefn Extension int strtoerrno (const char *@var{name})
+
+Given the symbolic name of a error number (e.g., @code{EACCES}), map it
+to an errno value.  If no translation is found, returns 0.
+
+@end deftypefn
+
+*/
+
+int
+strtoerrno (const char *name)
+{
+  int errnoval = 0;
+
+  if (name != NULL)
+    {
+      if (error_names == NULL)
+       {
+         init_error_tables ();
+       }
+      for (errnoval = 0; errnoval < num_error_names; errnoval++)
+       {
+         if ((error_names[errnoval] != NULL) &&
+             (strcmp (name, error_names[errnoval]) == 0))
+           {
+             break;
+           }
+       }
+      if (errnoval == num_error_names)
+       {
+#ifdef EVMSERR
+         if (strcmp (name, evmserr.name) == 0)
+           errnoval = evmserr.value;
+         else
+#endif
+         errnoval = 0;
+       }
+    }
+  return (errnoval);
+}
+
+
+/* A simple little main that does nothing but print all the errno translations
+   if MAIN is defined and this file is compiled and linked. */
+
+#ifdef MAIN
+
+#include <stdio.h>
+
+int
+main (void)
+{
+  int errn;
+  int errnmax;
+  const char *name;
+  const char *msg;
+  char *strerror ();
+
+  errnmax = errno_max ();
+  printf ("%d entries in names table.\n", num_error_names);
+  printf ("%d entries in messages table.\n", sys_nerr);
+  printf ("%d is max useful index.\n", errnmax);
+
+  /* Keep printing values until we get to the end of *both* tables, not
+     *either* table.  Note that knowing the maximum useful index does *not*
+     relieve us of the responsibility of testing the return pointer for
+     NULL. */
+
+  for (errn = 0; errn <= errnmax; errn++)
+    {
+      name = strerrno (errn);
+      name = (name == NULL) ? "<NULL>" : name;
+      msg = strerror (errn);
+      msg = (msg == NULL) ? "<NULL>" : msg;
+      printf ("%-4d%-18s%s\n", errn, name, msg);
+    }
+
+  return 0;
+}
+
+#endif
diff --git a/libiberty/strncasecmp.c b/libiberty/strncasecmp.c
new file mode 100644 (file)
index 0000000..47700dd
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific written prior permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+/*
+  
+@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strncmp}.
+
+@end deftypefn
+
+*/
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)strcasecmp.c       5.5 (Berkeley) 11/24/87";
+#endif /* LIBC_SCCS and not lint */
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+/*
+ * This array is designed for mapping upper and lower case letter
+ * together for a case independent comparison.  The mappings are
+ * based upon ascii character sequences.
+ */
+static const unsigned char charmap[] = {
+       '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+       '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+       '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+       '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+       '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+       '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+       '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+       '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+       '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+       '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+       '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+       '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+       '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+       '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+       '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+       '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+       '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+       '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+       '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+       '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+       '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+       '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+       '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+       '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+       '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+       '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+       '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+       '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
+       '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+       '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+       '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+       '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+};
+
+int
+strncasecmp(const char *s1, const char *s2, register size_t n)
+{
+    register unsigned char u1, u2;
+
+    for (; n != 0; --n) {
+       u1 = (unsigned char) *s1++;
+       u2 = (unsigned char) *s2++;
+       if (charmap[u1] != charmap[u2]) {
+           return charmap[u1] - charmap[u2];
+       }
+       if (u1 == '\0') {
+           return 0;
+       }
+    }
+    return 0;
+}
diff --git a/libiberty/strncmp.c b/libiberty/strncmp.c
new file mode 100644 (file)
index 0000000..916c2f0
--- /dev/null
@@ -0,0 +1,33 @@
+/* strncmp -- compare two strings, stop after n bytes.
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+
+Compares the first @var{n} bytes of two strings, returning a value as
+@code{strcmp}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stddef.h>
+
+int
+strncmp(const char *s1, const char *s2, register size_t n)
+{
+  register unsigned char u1, u2;
+
+  while (n-- > 0)
+    {
+      u1 = (unsigned char) *s1++;
+      u2 = (unsigned char) *s2++;
+      if (u1 != u2)
+       return u1 - u2;
+      if (u1 == '\0')
+       return 0;
+    }
+  return 0;
+}
diff --git a/libiberty/strndup.c b/libiberty/strndup.c
new file mode 100644 (file)
index 0000000..9e9b4e2
--- /dev/null
@@ -0,0 +1,55 @@
+/* Implement the strndup function.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+in memory obtained from @code{malloc}, or @code{NULL} if insufficient
+memory was available.  The result is always NUL terminated.
+
+@end deftypefn
+
+*/
+
+#include "ansidecl.h"
+#include <stddef.h>
+
+extern size_t  strlen (const char*);
+extern PTR     malloc (size_t);
+extern PTR     memcpy (PTR, const PTR, size_t);
+
+char *
+strndup (const char *s, size_t n)
+{
+  char *result;
+  size_t len = strlen (s);
+
+  if (n < len)
+    len = n;
+
+  result = (char *) malloc (len + 1);
+  if (!result)
+    return 0;
+
+  result[len] = '\0';
+  return (char *) memcpy (result, s, len);
+}
diff --git a/libiberty/strrchr.c b/libiberty/strrchr.c
new file mode 100644 (file)
index 0000000..5cf7c14
--- /dev/null
@@ -0,0 +1,28 @@
+/* Portable version of strrchr().
+   This function is in the public domain. */
+
+/*
+
+@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+
+char *
+strrchr (register const char *s, int c)
+{
+  char *rtnval = 0;
+
+  do {
+    if (*s == c)
+      rtnval = (char*) s;
+  } while (*s++);
+  return (rtnval);
+}
diff --git a/libiberty/strsignal.c b/libiberty/strsignal.c
new file mode 100644 (file)
index 0000000..4ca9e21
--- /dev/null
@@ -0,0 +1,608 @@
+/* Extended support for using signal values.
+   Written by Fred Fish.  fnf@cygnus.com
+   This file is in the public domain.  */
+
+#include "config.h"
+#include "ansidecl.h"
+#include "libiberty.h"
+
+/* We need to declare sys_siglist, because even if the system provides
+   it we can't assume that it is declared in <signal.h> (for example,
+   SunOS provides sys_siglist, but it does not declare it in any
+   header file).  However, we can't declare sys_siglist portably,
+   because on some systems it is declared with const and on some
+   systems it is declared without const.  If we were using autoconf,
+   we could work out the right declaration.  Until, then we just
+   ignore any declaration in the system header files, and always
+   declare it ourselves.  With luck, this will always work.  */
+#define sys_siglist no_such_symbol
+#define sys_nsig sys_nsig__no_such_symbol
+
+#include <stdio.h>
+#include <signal.h>
+
+/*  Routines imported from standard C runtime libraries. */
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+extern PTR malloc ();
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+extern PTR memset ();
+#endif
+
+/* Undefine the macro we used to hide the definition of sys_siglist
+   found in the system header files.  */
+#undef sys_siglist
+#undef sys_nsig
+
+#ifndef NULL
+#  define NULL (void *) 0
+#endif
+
+#ifndef MAX
+#  define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+static void init_signal_tables (void);
+
+/* Translation table for signal values.
+
+   Note that this table is generally only accessed when it is used at runtime
+   to initialize signal name and message tables that are indexed by signal
+   value.
+
+   Not all of these signals will exist on all systems.  This table is the only
+   thing that should have to be updated as new signal numbers are introduced.
+   It's sort of ugly, but at least its portable. */
+
+struct signal_info
+{
+  const int value;             /* The numeric value from <signal.h> */
+  const char *const name;      /* The equivalent symbolic value */
+#ifndef HAVE_SYS_SIGLIST
+  const char *const msg;       /* Short message about this value */
+#endif
+};
+
+#ifndef HAVE_SYS_SIGLIST
+#   define ENTRY(value, name, msg)     {value, name, msg}
+#else
+#   define ENTRY(value, name, msg)     {value, name}
+#endif
+
+static const struct signal_info signal_table[] =
+{
+#if defined (SIGHUP)
+  ENTRY(SIGHUP, "SIGHUP", "Hangup"),
+#endif
+#if defined (SIGINT)
+  ENTRY(SIGINT, "SIGINT", "Interrupt"),
+#endif
+#if defined (SIGQUIT)
+  ENTRY(SIGQUIT, "SIGQUIT", "Quit"),
+#endif
+#if defined (SIGILL)
+  ENTRY(SIGILL, "SIGILL", "Illegal instruction"),
+#endif
+#if defined (SIGTRAP)
+  ENTRY(SIGTRAP, "SIGTRAP", "Trace/breakpoint trap"),
+#endif
+/* Put SIGIOT before SIGABRT, so that if SIGIOT==SIGABRT then SIGABRT
+   overrides SIGIOT.  SIGABRT is in ANSI and POSIX.1, and SIGIOT isn't. */
+#if defined (SIGIOT)
+  ENTRY(SIGIOT, "SIGIOT", "IOT trap"),
+#endif
+#if defined (SIGABRT)
+  ENTRY(SIGABRT, "SIGABRT", "Aborted"),
+#endif
+#if defined (SIGEMT)
+  ENTRY(SIGEMT, "SIGEMT", "Emulation trap"),
+#endif
+#if defined (SIGFPE)
+  ENTRY(SIGFPE, "SIGFPE", "Arithmetic exception"),
+#endif
+#if defined (SIGKILL)
+  ENTRY(SIGKILL, "SIGKILL", "Killed"),
+#endif
+#if defined (SIGBUS)
+  ENTRY(SIGBUS, "SIGBUS", "Bus error"),
+#endif
+#if defined (SIGSEGV)
+  ENTRY(SIGSEGV, "SIGSEGV", "Segmentation fault"),
+#endif
+#if defined (SIGSYS)
+  ENTRY(SIGSYS, "SIGSYS", "Bad system call"),
+#endif
+#if defined (SIGPIPE)
+  ENTRY(SIGPIPE, "SIGPIPE", "Broken pipe"),
+#endif
+#if defined (SIGALRM)
+  ENTRY(SIGALRM, "SIGALRM", "Alarm clock"),
+#endif
+#if defined (SIGTERM)
+  ENTRY(SIGTERM, "SIGTERM", "Terminated"),
+#endif
+#if defined (SIGUSR1)
+  ENTRY(SIGUSR1, "SIGUSR1", "User defined signal 1"),
+#endif
+#if defined (SIGUSR2)
+  ENTRY(SIGUSR2, "SIGUSR2", "User defined signal 2"),
+#endif
+/* Put SIGCLD before SIGCHLD, so that if SIGCLD==SIGCHLD then SIGCHLD
+   overrides SIGCLD.  SIGCHLD is in POXIX.1 */
+#if defined (SIGCLD)
+  ENTRY(SIGCLD, "SIGCLD", "Child status changed"),
+#endif
+#if defined (SIGCHLD)
+  ENTRY(SIGCHLD, "SIGCHLD", "Child status changed"),
+#endif
+#if defined (SIGPWR)
+  ENTRY(SIGPWR, "SIGPWR", "Power fail/restart"),
+#endif
+#if defined (SIGWINCH)
+  ENTRY(SIGWINCH, "SIGWINCH", "Window size changed"),
+#endif
+#if defined (SIGURG)
+  ENTRY(SIGURG, "SIGURG", "Urgent I/O condition"),
+#endif
+#if defined (SIGIO)
+  /* "I/O pending" has also been suggested, but is misleading since the
+     signal only happens when the process has asked for it, not everytime
+     I/O is pending. */
+  ENTRY(SIGIO, "SIGIO", "I/O possible"),
+#endif
+#if defined (SIGPOLL)
+  ENTRY(SIGPOLL, "SIGPOLL", "Pollable event occurred"),
+#endif
+#if defined (SIGSTOP)
+  ENTRY(SIGSTOP, "SIGSTOP", "Stopped (signal)"),
+#endif
+#if defined (SIGTSTP)
+  ENTRY(SIGTSTP, "SIGTSTP", "Stopped (user)"),
+#endif
+#if defined (SIGCONT)
+  ENTRY(SIGCONT, "SIGCONT", "Continued"),
+#endif
+#if defined (SIGTTIN)
+  ENTRY(SIGTTIN, "SIGTTIN", "Stopped (tty input)"),
+#endif
+#if defined (SIGTTOU)
+  ENTRY(SIGTTOU, "SIGTTOU", "Stopped (tty output)"),
+#endif
+#if defined (SIGVTALRM)
+  ENTRY(SIGVTALRM, "SIGVTALRM", "Virtual timer expired"),
+#endif
+#if defined (SIGPROF)
+  ENTRY(SIGPROF, "SIGPROF", "Profiling timer expired"),
+#endif
+#if defined (SIGXCPU)
+  ENTRY(SIGXCPU, "SIGXCPU", "CPU time limit exceeded"),
+#endif
+#if defined (SIGXFSZ)
+  ENTRY(SIGXFSZ, "SIGXFSZ", "File size limit exceeded"),
+#endif
+#if defined (SIGWIND)
+  ENTRY(SIGWIND, "SIGWIND", "SIGWIND"),
+#endif
+#if defined (SIGPHONE)
+  ENTRY(SIGPHONE, "SIGPHONE", "SIGPHONE"),
+#endif
+#if defined (SIGLOST)
+  ENTRY(SIGLOST, "SIGLOST", "Resource lost"),
+#endif
+#if defined (SIGWAITING)
+  ENTRY(SIGWAITING, "SIGWAITING", "Process's LWPs are blocked"),
+#endif
+#if defined (SIGLWP)
+  ENTRY(SIGLWP, "SIGLWP", "Signal LWP"),
+#endif
+#if defined (SIGDANGER)
+  ENTRY(SIGDANGER, "SIGDANGER", "Swap space dangerously low"),
+#endif
+#if defined (SIGGRANT)
+  ENTRY(SIGGRANT, "SIGGRANT", "Monitor mode granted"),
+#endif
+#if defined (SIGRETRACT)
+  ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinguish monitor mode"),
+#endif
+#if defined (SIGMSG)
+  ENTRY(SIGMSG, "SIGMSG", "Monitor mode data available"),
+#endif
+#if defined (SIGSOUND)
+  ENTRY(SIGSOUND, "SIGSOUND", "Sound completed"),
+#endif
+#if defined (SIGSAK)
+  ENTRY(SIGSAK, "SIGSAK", "Secure attention"),
+#endif
+  ENTRY(0, NULL, NULL)
+};
+
+/* Translation table allocated and initialized at runtime.  Indexed by the
+   signal value to find the equivalent symbolic value. */
+
+static const char **signal_names;
+static int num_signal_names = 0;
+
+/* Translation table allocated and initialized at runtime, if it does not
+   already exist in the host environment.  Indexed by the signal value to find
+   the descriptive string.
+
+   We don't export it for use in other modules because even though it has the
+   same name, it differs from other implementations in that it is dynamically
+   initialized rather than statically initialized. */
+
+#ifndef HAVE_SYS_SIGLIST
+
+static int sys_nsig;
+static const char **sys_siglist;
+
+#else
+
+#ifdef NSIG
+static int sys_nsig = NSIG;
+#else
+#ifdef _NSIG
+static int sys_nsig = _NSIG;
+#endif
+#endif
+extern const char * const sys_siglist[];
+
+#endif
+
+
+/*
+
+NAME
+
+       init_signal_tables -- initialize the name and message tables
+
+SYNOPSIS
+
+       static void init_signal_tables ();
+
+DESCRIPTION
+
+       Using the signal_table, which is initialized at compile time, generate
+       the signal_names and the sys_siglist (if needed) tables, which are
+       indexed at runtime by a specific signal value.
+
+BUGS
+
+       The initialization of the tables may fail under low memory conditions,
+       in which case we don't do anything particularly useful, but we don't
+       bomb either.  Who knows, it might succeed at a later point if we free
+       some memory in the meantime.  In any case, the other routines know
+       how to deal with lack of a table after trying to initialize it.  This
+       may or may not be considered to be a bug, that we don't specifically
+       warn about this particular failure mode.
+
+*/
+
+static void
+init_signal_tables (void)
+{
+  const struct signal_info *eip;
+  int nbytes;
+
+  /* If we haven't already scanned the signal_table once to find the maximum
+     signal value, then go find it now. */
+
+  if (num_signal_names == 0)
+    {
+      for (eip = signal_table; eip -> name != NULL; eip++)
+       {
+         if (eip -> value >= num_signal_names)
+           {
+             num_signal_names = eip -> value + 1;
+           }
+       }
+    }
+
+  /* Now attempt to allocate the signal_names table, zero it out, and then
+     initialize it from the statically initialized signal_table. */
+
+  if (signal_names == NULL)
+    {
+      nbytes = num_signal_names * sizeof (char *);
+      if ((signal_names = (const char **) malloc (nbytes)) != NULL)
+       {
+         memset (signal_names, 0, nbytes);
+         for (eip = signal_table; eip -> name != NULL; eip++)
+           {
+             signal_names[eip -> value] = eip -> name;
+           }
+       }
+    }
+
+#ifndef HAVE_SYS_SIGLIST
+
+  /* Now attempt to allocate the sys_siglist table, zero it out, and then
+     initialize it from the statically initialized signal_table. */
+
+  if (sys_siglist == NULL)
+    {
+      nbytes = num_signal_names * sizeof (char *);
+      if ((sys_siglist = (const char **) malloc (nbytes)) != NULL)
+       {
+         memset (sys_siglist, 0, nbytes);
+         sys_nsig = num_signal_names;
+         for (eip = signal_table; eip -> name != NULL; eip++)
+           {
+             sys_siglist[eip -> value] = eip -> msg;
+           }
+       }
+    }
+
+#endif
+
+}
+
+
+/*
+
+@deftypefn Extension int signo_max (void)
+
+Returns the maximum signal value for which a corresponding symbolic
+name or message is available.  Note that in the case where we use the
+@code{sys_siglist} supplied by the system, it is possible for there to
+be more symbolic names than messages, or vice versa.  In fact, the
+manual page for @code{psignal(3b)} explicitly warns that one should
+check the size of the table (@code{NSIG}) before indexing it, since
+new signal codes may be added to the system before they are added to
+the table.  Thus @code{NSIG} might be smaller than value implied by
+the largest signo value defined in @code{<signal.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+@end deftypefn
+
+*/
+
+int
+signo_max (void)
+{
+  int maxsize;
+
+  if (signal_names == NULL)
+    {
+      init_signal_tables ();
+    }
+  maxsize = MAX (sys_nsig, num_signal_names);
+  return (maxsize - 1);
+}
+
+
+/*
+
+@deftypefn Supplemental {const char *} strsignal (int @var{signo})
+
+Maps an signal number to an signal message string, the contents of
+which are implementation defined.  On systems which have the external
+variable @code{sys_siglist}, these strings will be the same as the
+ones used by @code{psignal()}.
+
+If the supplied signal number is within the valid range of indices for
+the @code{sys_siglist}, but no message is available for the particular
+signal number, then returns the string @samp{Signal @var{num}}, where
+@var{num} is the signal number.
+
+If the supplied signal number is not a valid index into
+@code{sys_siglist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the next
+call to @code{strsignal}.
+
+@end deftypefn
+
+*/
+
+#ifndef HAVE_STRSIGNAL
+
+const char *
+strsignal (int signo)
+{
+  const char *msg;
+  static char buf[32];
+
+#ifndef HAVE_SYS_SIGLIST
+
+  if (signal_names == NULL)
+    {
+      init_signal_tables ();
+    }
+
+#endif
+
+  if ((signo < 0) || (signo >= sys_nsig))
+    {
+      /* Out of range, just return NULL */
+      msg = NULL;
+    }
+  else if ((sys_siglist == NULL) || (sys_siglist[signo] == NULL))
+    {
+      /* In range, but no sys_siglist or no entry at this index. */
+      sprintf (buf, "Signal %d", signo);
+      msg = (const char *) buf;
+    }
+  else
+    {
+      /* In range, and a valid message.  Just return the message. */
+      msg = (const char *) sys_siglist[signo];
+    }
+  
+  return (msg);
+}
+
+#endif /* ! HAVE_STRSIGNAL */
+
+/*
+
+@deftypefn Extension {const char*} strsigno (int @var{signo})
+
+Given an signal number, returns a pointer to a string containing the
+symbolic name of that signal number, as found in @code{<signal.h>}.
+
+If the supplied signal number is within the valid range of indices for
+symbolic names, but no name is available for the particular signal
+number, then returns the string @samp{Signal @var{num}}, where
+@var{num} is the signal number.
+
+If the supplied signal number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strsigno}.
+
+@end deftypefn
+
+*/
+
+const char *
+strsigno (int signo)
+{
+  const char *name;
+  static char buf[32];
+
+  if (signal_names == NULL)
+    {
+      init_signal_tables ();
+    }
+
+  if ((signo < 0) || (signo >= num_signal_names))
+    {
+      /* Out of range, just return NULL */
+      name = NULL;
+    }
+  else if ((signal_names == NULL) || (signal_names[signo] == NULL))
+    {
+      /* In range, but no signal_names or no entry at this index. */
+      sprintf (buf, "Signal %d", signo);
+      name = (const char *) buf;
+    }
+  else
+    {
+      /* In range, and a valid name.  Just return the name. */
+      name = signal_names[signo];
+    }
+
+  return (name);
+}
+
+
+/*
+
+@deftypefn Extension int strtosigno (const char *@var{name})
+
+Given the symbolic name of a signal, map it to a signal number.  If no
+translation is found, returns 0.
+
+@end deftypefn
+
+*/
+
+int
+strtosigno (const char *name)
+{
+  int signo = 0;
+
+  if (name != NULL)
+    {
+      if (signal_names == NULL)
+       {
+         init_signal_tables ();
+       }
+      for (signo = 0; signo < num_signal_names; signo++)
+       {
+         if ((signal_names[signo] != NULL) &&
+             (strcmp (name, signal_names[signo]) == 0))
+           {
+             break;
+           }
+       }
+      if (signo == num_signal_names)
+       {
+         signo = 0;
+       }
+    }
+  return (signo);
+}
+
+
+/*
+
+@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
+
+Print @var{message} to the standard error, followed by a colon,
+followed by the description of the signal specified by @var{signo},
+followed by a newline.
+
+@end deftypefn
+
+*/
+
+#ifndef HAVE_PSIGNAL
+
+void
+psignal (int signo, char *message)
+{
+  if (signal_names == NULL)
+    {
+      init_signal_tables ();
+    }
+  if ((signo <= 0) || (signo >= sys_nsig))
+    {
+      fprintf (stderr, "%s: unknown signal\n", message);
+    }
+  else
+    {
+      fprintf (stderr, "%s: %s\n", message, sys_siglist[signo]);
+    }
+}
+
+#endif /* ! HAVE_PSIGNAL */
+
+
+/* A simple little main that does nothing but print all the signal translations
+   if MAIN is defined and this file is compiled and linked. */
+
+#ifdef MAIN
+
+#include <stdio.h>
+
+int
+main (void)
+{
+  int signo;
+  int maxsigno;
+  const char *name;
+  const char *msg;
+
+  maxsigno = signo_max ();
+  printf ("%d entries in names table.\n", num_signal_names);
+  printf ("%d entries in messages table.\n", sys_nsig);
+  printf ("%d is max useful index.\n", maxsigno);
+
+  /* Keep printing values until we get to the end of *both* tables, not
+     *either* table.  Note that knowing the maximum useful index does *not*
+     relieve us of the responsibility of testing the return pointer for
+     NULL. */
+
+  for (signo = 0; signo <= maxsigno; signo++)
+    {
+      name = strsigno (signo);
+      name = (name == NULL) ? "<NULL>" : name;
+      msg = strsignal (signo);
+      msg = (msg == NULL) ? "<NULL>" : msg;
+      printf ("%-4d%-18s%s\n", signo, name, msg);
+    }
+
+  return 0;
+}
+
+#endif
diff --git a/libiberty/strstr.c b/libiberty/strstr.c
new file mode 100644 (file)
index 0000000..60902ea
--- /dev/null
@@ -0,0 +1,41 @@
+/* Simple implementation of strstr for systems without it.
+   This function is in the public domain.  */
+
+/*
+
+@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
+
+This function searches for the substring @var{sub} in the string
+@var{string}, not including the terminating null characters.  A pointer
+to the first occurrence of @var{sub} is returned, or @code{NULL} if the
+substring is absent.  If @var{sub} points to a string with zero
+length, the function returns @var{string}.
+
+@end deftypefn
+
+
+*/
+
+
+/* FIXME:  The above description is ANSI compiliant.  This routine has not
+   been validated to comply with it.  -fnf */
+
+#include <stddef.h>
+
+extern char *strchr (const char *, int);
+extern int strncmp (const void *, const void *, size_t);
+extern size_t strlen (const char *);
+
+char *
+strstr (const char *s1, const char *s2)
+{
+  const char *p = s1;
+  const size_t len = strlen (s2);
+
+  for (; (p = strchr (p, *s2)) != 0; p++)
+    {
+      if (strncmp (p, s2, len) == 0)
+       return (char *)p;
+    }
+  return (0);
+}
diff --git a/libiberty/strtod.c b/libiberty/strtod.c
new file mode 100644 (file)
index 0000000..adbc33b
--- /dev/null
@@ -0,0 +1,136 @@
+/* Implementation of strtod for systems with atof.
+   Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/*
+
+@deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr})
+
+This ISO C function converts the initial portion of @var{string} to a
+@code{double}.  If @var{endptr} is not @code{NULL}, a pointer to the
+character after the last character used in the conversion is stored in
+the location referenced by @var{endptr}.  If no conversion is
+performed, zero is returned and the value of @var{string} is stored in
+the location referenced by @var{endptr}.
+
+@end deftypefn
+
+*/
+
+#include "ansidecl.h"
+#include "safe-ctype.h"
+
+extern double atof (const char *);
+
+/* Disclaimer: this is currently just used by CHILL in GDB and therefore
+   has not been tested well.  It may have been tested for nothing except
+   that it compiles.  */
+
+double
+strtod (char *str, char **ptr)
+{
+  char *p;
+
+  if (ptr == (char **)0)
+    return atof (str);
+  
+  p = str;
+  
+  while (ISSPACE (*p))
+    ++p;
+  
+  if (*p == '+' || *p == '-')
+    ++p;
+
+  /* INF or INFINITY.  */
+  if ((p[0] == 'i' || p[0] == 'I')
+      && (p[1] == 'n' || p[1] == 'N')
+      && (p[2] == 'f' || p[2] == 'F'))
+    {
+      if ((p[3] == 'i' || p[3] == 'I')
+         && (p[4] == 'n' || p[4] == 'N')
+         && (p[5] == 'i' || p[5] == 'I')
+         && (p[6] == 't' || p[6] == 'T')
+         && (p[7] == 'y' || p[7] == 'Y'))
+       {
+         *ptr = p + 8;
+         return atof (str);
+       }
+      else
+       {
+         *ptr = p + 3;
+         return atof (str);
+       }
+    }
+
+  /* NAN or NAN(foo).  */
+  if ((p[0] == 'n' || p[0] == 'N')
+      && (p[1] == 'a' || p[1] == 'A')
+      && (p[2] == 'n' || p[2] == 'N'))
+    {
+      p += 3;
+      if (*p == '(')
+       {
+         ++p;
+         while (*p != '\0' && *p != ')')
+           ++p;
+         if (*p == ')')
+           ++p;
+       }
+      *ptr = p;
+      return atof (str);
+    }
+
+  /* digits, with 0 or 1 periods in it.  */
+  if (ISDIGIT (*p) || *p == '.')
+    {
+      int got_dot = 0;
+      while (ISDIGIT (*p) || (!got_dot && *p == '.'))
+       {
+         if (*p == '.')
+           got_dot = 1;
+         ++p;
+       }
+
+      /* Exponent.  */
+      if (*p == 'e' || *p == 'E')
+       {
+         int i;
+         i = 1;
+         if (p[i] == '+' || p[i] == '-')
+           ++i;
+         if (ISDIGIT (p[i]))
+           {
+             while (ISDIGIT (p[i]))
+               ++i;
+             *ptr = p + i;
+             return atof (str);
+           }
+       }
+      *ptr = p;
+      return atof (str);
+    }
+  /* Didn't find any digits.  Doesn't look like a number.  */
+  *ptr = str;
+  return 0.0;
+}
diff --git a/libiberty/strtol.c b/libiberty/strtol.c
new file mode 100644 (file)
index 0000000..acc7882
--- /dev/null
@@ -0,0 +1,163 @@
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. [rescinded 22 July 1999]
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+
+@deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base})
+@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base})
+
+The @code{strtol} function converts the string in @var{string} to a
+long integer value according to the given @var{base}, which must be
+between 2 and 36 inclusive, or be the special value 0.  If @var{base}
+is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
+to indicate bases 8 and 16, respectively, else default to base 10.
+When the base is 16 (either explicitly or implicitly), a prefix of
+@code{0x} is allowed.  The handling of @var{endptr} is as that of
+@code{strtod} above.  The @code{strtoul} function is the same, except
+that the converted value is unsigned.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#include "safe-ctype.h"
+
+/* FIXME: It'd be nice to configure around these, but the include files are too
+   painful.  These macros should at least be more portable than hardwired hex
+   constants. */
+
+#ifndef ULONG_MAX
+#define        ULONG_MAX       ((unsigned long)(~0L))          /* 0xFFFFFFFF */
+#endif
+
+#ifndef LONG_MAX
+#define        LONG_MAX        ((long)(ULONG_MAX >> 1))        /* 0x7FFFFFFF */
+#endif
+
+#ifndef LONG_MIN
+#define        LONG_MIN        ((long)(~LONG_MAX))             /* 0x80000000 */
+#endif
+
+/*
+ * Convert a string to a long integer.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+long
+strtol(const char *nptr, char **endptr, register int base)
+{
+       register const char *s = nptr;
+       register unsigned long acc;
+       register int c;
+       register unsigned long cutoff;
+       register int neg = 0, any, cutlim;
+
+       /*
+        * Skip white space and pick up leading +/- sign if any.
+        * If base is 0, allow 0x for hex and 0 for octal, else
+        * assume decimal; if base is already 16, allow 0x.
+        */
+       do {
+               c = *s++;
+       } while (ISSPACE(c));
+       if (c == '-') {
+               neg = 1;
+               c = *s++;
+       } else if (c == '+')
+               c = *s++;
+       if ((base == 0 || base == 16) &&
+           c == '0' && (*s == 'x' || *s == 'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       }
+       if (base == 0)
+               base = c == '0' ? 8 : 10;
+
+       /*
+        * Compute the cutoff value between legal numbers and illegal
+        * numbers.  That is the largest legal value, divided by the
+        * base.  An input number that is greater than this value, if
+        * followed by a legal input character, is too big.  One that
+        * is equal to this value may be valid or not; the limit
+        * between valid and invalid numbers is then based on the last
+        * digit.  For instance, if the range for longs is
+        * [-2147483648..2147483647] and the input base is 10,
+        * cutoff will be set to 214748364 and cutlim to either
+        * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
+        * a value > 214748364, or equal but the next digit is > 7 (or 8),
+        * the number is too big, and we will return a range error.
+        *
+        * Set any if any `digits' consumed; make it negative to indicate
+        * overflow.
+        */
+       cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX;
+       cutlim = cutoff % (unsigned long)base;
+       cutoff /= (unsigned long)base;
+       for (acc = 0, any = 0;; c = *s++) {
+               if (ISDIGIT(c))
+                       c -= '0';
+               else if (ISALPHA(c))
+                       c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+                       any = -1;
+               else {
+                       any = 1;
+                       acc *= base;
+                       acc += c;
+               }
+       }
+       if (any < 0) {
+               acc = neg ? LONG_MIN : LONG_MAX;
+               errno = ERANGE;
+       } else if (neg)
+               acc = -acc;
+       if (endptr != 0)
+               *endptr = (char *) (any ? s - 1 : nptr);
+       return (acc);
+}
diff --git a/libiberty/strtoul.c b/libiberty/strtoul.c
new file mode 100644 (file)
index 0000000..ba80063
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. [rescinded 22 July 1999]
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <errno.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
+#endif
+#if 0
+#include <stdlib.h>
+#endif
+#include "ansidecl.h"
+#include "safe-ctype.h"
+
+#ifndef ULONG_MAX
+#define        ULONG_MAX       ((unsigned long)(~0L))          /* 0xFFFFFFFF */
+#endif
+
+/*
+ * Convert a string to an unsigned long integer.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+unsigned long
+strtoul(const char *nptr, char **endptr, register int base)
+{
+       register const char *s = nptr;
+       register unsigned long acc;
+       register int c;
+       register unsigned long cutoff;
+       register int neg = 0, any, cutlim;
+
+       /*
+        * See strtol for comments as to the logic used.
+        */
+       do {
+               c = *s++;
+       } while (ISSPACE(c));
+       if (c == '-') {
+               neg = 1;
+               c = *s++;
+       } else if (c == '+')
+               c = *s++;
+       if ((base == 0 || base == 16) &&
+           c == '0' && (*s == 'x' || *s == 'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       }
+       if (base == 0)
+               base = c == '0' ? 8 : 10;
+       cutoff = (unsigned long)ULONG_MAX / (unsigned long)base;
+       cutlim = (unsigned long)ULONG_MAX % (unsigned long)base;
+       for (acc = 0, any = 0;; c = *s++) {
+               if (ISDIGIT(c))
+                       c -= '0';
+               else if (ISALPHA(c))
+                       c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+                       any = -1;
+               else {
+                       any = 1;
+                       acc *= base;
+                       acc += c;
+               }
+       }
+       if (any < 0) {
+               acc = ULONG_MAX;
+               errno = ERANGE;
+       } else if (neg)
+               acc = -acc;
+       if (endptr != 0)
+               *endptr = (char *) (any ? s - 1 : nptr);
+       return (acc);
+}
diff --git a/libiberty/strverscmp.c b/libiberty/strverscmp.c
new file mode 100644 (file)
index 0000000..04e1e4a
--- /dev/null
@@ -0,0 +1,157 @@
+/* Compare strings while treating digits characters numerically.
+   Copyright (C) 1997, 2002, 2005 Free Software Foundation, Inc.
+   This file is part of the libiberty library.
+   Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
+
+   Libiberty is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   Libiberty is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301 USA.  */
+
+#include "libiberty.h"
+#include "safe-ctype.h"
+
+/* 
+@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
+The @code{strverscmp} function compares the string @var{s1} against
+@var{s2}, considering them as holding indices/version numbers.  Return
+value follows the same conventions as found in the @code{strverscmp}
+function.  In fact, if @var{s1} and @var{s2} contain no digits,
+@code{strverscmp} behaves like @code{strcmp}.
+
+Basically, we compare strings normally (character by character), until
+we find a digit in each string - then we enter a special comparison
+mode, where each sequence of digits is taken as a whole.  If we reach the
+end of these two parts without noticing a difference, we return to the
+standard comparison mode.  There are two types of numeric parts:
+"integral" and "fractional" (those  begin with a '0'). The types
+of the numeric parts affect the way we sort them:
+
+@itemize @bullet
+@item
+integral/integral: we compare values as you would expect.
+
+@item
+fractional/integral: the fractional part is less than the integral one.
+Again, no surprise.
+
+@item
+fractional/fractional: the things become a bit more complex.
+If the common prefix contains only leading zeroes, the longest part is less
+than the other one; else the comparison behaves normally.
+@end itemize
+
+@smallexample
+strverscmp ("no digit", "no digit")
+    @result{} 0    // @r{same behavior as strcmp.}
+strverscmp ("item#99", "item#100")
+    @result{} <0   // @r{same prefix, but 99 < 100.}
+strverscmp ("alpha1", "alpha001")
+    @result{} >0   // @r{fractional part inferior to integral one.}
+strverscmp ("part1_f012", "part1_f01")
+    @result{} >0   // @r{two fractional parts.}
+strverscmp ("foo.009", "foo.0")
+    @result{} <0   // @r{idem, but with leading zeroes only.}
+@end smallexample
+
+This function is especially useful when dealing with filename sorting,
+because filenames frequently hold indices/version numbers.
+@end deftypefun
+
+*/
+
+/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
+           fractional parts, S_Z: idem but with leading Zeroes only */
+#define  S_N    0x0
+#define  S_I    0x4
+#define  S_F    0x8
+#define  S_Z    0xC
+
+/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
+#define  CMP    2
+#define  LEN    3
+
+
+/* Compare S1 and S2 as strings holding indices/version numbers,
+   returning less than, equal to or greater than zero if S1 is less than,
+   equal to or greater than S2 (for more info, see the Glibc texinfo doc).  */
+
+int
+strverscmp (const char *s1, const char *s2)
+{
+  const unsigned char *p1 = (const unsigned char *) s1;
+  const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+  int state;
+  int diff;
+
+  /* Symbol(s)    0       [1-9]   others  (padding)
+     Transition   (10) 0  (01) d  (00) x  (11) -   */
+  static const unsigned int next_state[] =
+    {
+      /* state    x    d    0    - */
+      /* S_N */  S_N, S_I, S_Z, S_N,
+      /* S_I */  S_N, S_I, S_I, S_I,
+      /* S_F */  S_N, S_F, S_F, S_F,
+      /* S_Z */  S_N, S_F, S_Z, S_Z
+    };
+
+  static const int result_type[] =
+    {
+      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/-
+                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */
+
+      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_I */  CMP, -1,  -1,  CMP, +1,  LEN, LEN, CMP,
+                 +1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP,
+      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_Z */  CMP, +1,  +1,  CMP, -1,  CMP, CMP, CMP,
+                 -1,  CMP, CMP, CMP
+    };
+
+  if (p1 == p2)
+    return 0;
+
+  c1 = *p1++;
+  c2 = *p2++;
+  /* Hint: '0' is a digit too.  */
+  state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
+
+  while ((diff = c1 - c2) == 0 && c1 != '\0')
+    {
+      state = next_state[state];
+      c1 = *p1++;
+      c2 = *p2++;
+      state |= (c1 == '0') + (ISDIGIT (c1) != 0);
+    }
+
+  state = result_type[state << 2 | (((c2 == '0') + (ISDIGIT (c2) != 0)))];
+
+  switch (state)
+    {
+    case CMP:
+      return diff;
+      
+    case LEN:
+      while (ISDIGIT (*p1++))
+       if (!ISDIGIT (*p2++))
+         return 1;
+      
+      return ISDIGIT (*p2) ? -1 : diff;
+      
+    default:
+      return state;
+    }
+}
diff --git a/libiberty/tmpnam.c b/libiberty/tmpnam.c
new file mode 100644 (file)
index 0000000..cc34333
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+
+@deftypefn Supplemental char* tmpnam (char *@var{s})
+
+This function attempts to create a name for a temporary file, which
+will be a valid file name yet not exist when @code{tmpnam} checks for
+it.  @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
+or be @code{NULL}.  Use of this function creates a security risk, and it must
+not be used in new projects.  Use @code{mkstemp} instead.
+
+@end deftypefn
+
+*/
+
+#include <stdio.h>
+
+#ifndef L_tmpnam
+#define L_tmpnam 100
+#endif
+#ifndef P_tmpdir
+#define P_tmpdir "/usr/tmp"
+#endif
+
+static char tmpnam_buffer[L_tmpnam];
+static int tmpnam_counter;
+
+extern int getpid (void);
+
+char *
+tmpnam (char *s)
+{
+  int pid = getpid ();
+
+  if (s == NULL)
+    s = tmpnam_buffer;
+
+  /*  Generate the filename and make sure that there isn't one called
+      it already.  */
+
+  while (1)
+    {
+      FILE *f;
+      sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter);
+      f = fopen (s, "r");
+      if (f == NULL)
+       break;
+      tmpnam_counter++;
+      fclose (f);
+    }
+
+  return s;
+}
diff --git a/libiberty/unlink-if-ordinary.c b/libiberty/unlink-if-ordinary.c
new file mode 100644 (file)
index 0000000..c03b4dd
--- /dev/null
@@ -0,0 +1,72 @@
+/* unlink-if-ordinary.c - remove link to a file unless it is special
+   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/*
+
+@deftypefn Supplemental int unlink_if_ordinary (const char*)
+
+Unlinks the named file, unless it is special (e.g. a device file).
+Returns 0 when the file was unlinked, a negative value (and errno set) when
+there was an error deleting the file, and a positive value if no attempt
+was made to unlink the file because it is special.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#include "libiberty.h"
+
+#ifndef S_ISLNK
+#ifdef S_IFLNK
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#else
+#define S_ISLNK(m) 0
+#define lstat stat
+#endif
+#endif
+
+int
+unlink_if_ordinary (const char *name)
+{
+  struct stat st;
+
+  if (lstat (name, &st) == 0
+      && (S_ISREG (st.st_mode) || S_ISLNK (st.st_mode)))
+    return unlink (name);
+
+  return 1;
+}
diff --git a/libiberty/vasprintf.c b/libiberty/vasprintf.c
new file mode 100644 (file)
index 0000000..b6cb94e
--- /dev/null
@@ -0,0 +1,196 @@
+/* Like vsprintf but provides a pointer to malloc'd storage, which must
+   be freed by the caller.
+   Copyright (C) 1994, 2003 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <ansidecl.h>
+#include <stdarg.h>
+#if !defined (va_copy) && defined (__va_copy)
+# define va_copy(d,s)  __va_copy((d),(s))
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
+extern unsigned long strtoul ();
+extern PTR malloc ();
+#endif
+#include "libiberty.h"
+
+#ifdef TEST
+int global_total_width;
+#endif
+
+/*
+
+@deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args})
+
+Like @code{vsprintf}, but instead of passing a pointer to a buffer,
+you pass a pointer to a pointer.  This function will compute the size
+of the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{vsprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+@code{*@var{resptr}}.
+
+@end deftypefn
+
+*/
+
+static int int_vasprintf (char **, const char *, va_list);
+
+static int
+int_vasprintf (char **result, const char *format, va_list args)
+{
+  const char *p = format;
+  /* Add one to make sure that it is never zero, which might cause malloc
+     to return NULL.  */
+  int total_width = strlen (format) + 1;
+  va_list ap;
+
+#ifdef va_copy
+  va_copy (ap, args);
+#else
+  memcpy ((PTR) &ap, (PTR) &args, sizeof (va_list));
+#endif
+
+  while (*p != '\0')
+    {
+      if (*p++ == '%')
+       {
+         while (strchr ("-+ #0", *p))
+           ++p;
+         if (*p == '*')
+           {
+             ++p;
+             total_width += abs (va_arg (ap, int));
+           }
+         else
+           total_width += strtoul (p, (char **) &p, 10);
+         if (*p == '.')
+           {
+             ++p;
+             if (*p == '*')
+               {
+                 ++p;
+                 total_width += abs (va_arg (ap, int));
+               }
+             else
+             total_width += strtoul (p, (char **) &p, 10);
+           }
+         while (strchr ("hlL", *p))
+           ++p;
+         /* Should be big enough for any format specifier except %s and floats.  */
+         total_width += 30;
+         switch (*p)
+           {
+           case 'd':
+           case 'i':
+           case 'o':
+           case 'u':
+           case 'x':
+           case 'X':
+           case 'c':
+             (void) va_arg (ap, int);
+             break;
+           case 'f':
+           case 'e':
+           case 'E':
+           case 'g':
+           case 'G':
+             (void) va_arg (ap, double);
+             /* Since an ieee double can have an exponent of 307, we'll
+                make the buffer wide enough to cover the gross case. */
+             total_width += 307;
+             break;
+           case 's':
+             total_width += strlen (va_arg (ap, char *));
+             break;
+           case 'p':
+           case 'n':
+             (void) va_arg (ap, char *);
+             break;
+           }
+         p++;
+       }
+    }
+#ifdef va_copy
+  va_end (ap);
+#endif
+#ifdef TEST
+  global_total_width = total_width;
+#endif
+  *result = (char *) malloc (total_width);
+  if (*result != NULL)
+    return vsprintf (*result, format, args);
+  else
+    return -1;
+}
+
+int
+vasprintf (char **result, const char *format,
+#if defined (_BSD_VA_LIST_) && defined (__FreeBSD__)
+           _BSD_VA_LIST_ args)
+#else
+           va_list args)
+#endif
+{
+  return int_vasprintf (result, format, args);
+}
+
+#ifdef TEST
+static void ATTRIBUTE_PRINTF_1
+checkit (const char *format, ...)
+{
+  char *result;
+  VA_OPEN (args, format);
+  VA_FIXEDARG (args, const char *, format);
+  vasprintf (&result, format, args);
+  VA_CLOSE (args);
+
+  if (strlen (result) < (size_t) global_total_width)
+    printf ("PASS: ");
+  else
+    printf ("FAIL: ");
+  printf ("%d %s\n", global_total_width, result);
+
+  free (result);
+}
+
+extern int main (void);
+
+int
+main (void)
+{
+  checkit ("%d", 0x12345678);
+  checkit ("%200d", 5);
+  checkit ("%.300d", 6);
+  checkit ("%100.150d", 7);
+  checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
+777777777777777777333333333333366666666666622222222222777777777777733333");
+  checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx");
+
+  return 0;
+}
+#endif /* TEST */
diff --git a/libiberty/vfork.c b/libiberty/vfork.c
new file mode 100644 (file)
index 0000000..eb4ff62
--- /dev/null
@@ -0,0 +1,22 @@
+/* Emulate vfork using just plain fork, for systems without a real vfork.
+   This function is in the public domain. */
+
+/*
+
+@deftypefn Supplemental int vfork (void)
+
+Emulates @code{vfork} by calling @code{fork} and returning its value.
+
+@end deftypefn
+
+*/
+
+#include "ansidecl.h"
+
+extern int fork (void);
+
+int
+vfork (void)
+{
+  return (fork ());
+}
diff --git a/libiberty/vfprintf.c b/libiberty/vfprintf.c
new file mode 100644 (file)
index 0000000..9bd3ed5
--- /dev/null
@@ -0,0 +1,15 @@
+/* Provide a version vfprintf in terms of _doprnt.
+   By Kaveh Ghazi  (ghazi@caip.rutgers.edu)  3/29/98
+   Copyright (C) 1998 Free Software Foundation, Inc.
+ */
+
+#include "ansidecl.h"
+#include <stdarg.h>
+#include <stdio.h>
+#undef vfprintf
+
+int
+vfprintf (FILE *stream, const char *format, va_list ap)
+{
+  return _doprnt (format, ap, stream);
+}
diff --git a/libiberty/vmsbuild.com b/libiberty/vmsbuild.com
new file mode 100644 (file)
index 0000000..497ea89
--- /dev/null
@@ -0,0 +1,165 @@
+$! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
+$!
+$ CC   = "gcc /noVerbose/Debug/Incl=([],[-.include])"
+$ LIBR = "library /Obj"
+$ LINK = "link"
+$ DELETE= "delete /noConfirm"
+$ SEARCH= "search /Exact"
+$ ECHO = "write sys$output"
+$ ABORT        = "exit %x002C"
+$!
+$ LIB_NAME = "liberty.olb"     !this is what we're going to construct
+$ WORK_LIB = "new-lib.olb"     !used to guard against an incomplete build
+$
+$! manually copied from Makefile.in
+$ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
+       + "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
+       + "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
+       + "xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o"
+$! anything not caught by link+search of dummy.* should be added here
+$ EXTRA_OFILES = ""
+$!
+$! move to the directory which contains this command procedure
+$ old_dir = f$environ("DEFAULT")
+$ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
+$ set default 'new_dir'
+$
+$ ECHO "Starting libiberty build..."
+$ create config.h
+/* libiberty config.h for VMS */
+#define NEED_sys_siglist
+#define NEED_strsignal
+#define NEED_psignal
+#define NEED_basename
+$ LIBR 'WORK_LIB' /Create
+$
+$! first pass: compile "required" modules
+$ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
+$ pass = 1
+$ gosub do_ofiles
+$
+$! second pass: process dummy.c, using the first pass' results
+$ ECHO " now checking run-time library for missing functionality"
+$ if f$search("dummy.obj").nes."" then  DELETE dummy.obj;*
+$ define/noLog sys$error _NL:  !can't use /User_Mode here due to gcc
+$ define/noLog sys$output _NL: ! driver's use of multiple image activation
+$ on error then continue
+$ 'CC' dummy.c
+$ deassign sys$error   !restore, more or less
+$ deassign sys$output
+$ if f$search("dummy.obj").eqs."" then  goto pass2_failure1
+$! link dummy.obj, capturing full linker feedback in dummy.map
+$ oldmsg = f$environ("MESSAGE")
+$ set message /Facility/Severity/Identification/Text
+$ define/User sys$output _NL:
+$ define/User sys$error _NL:
+$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
+       gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
+$ set message 'oldmsg'
+$ if f$search("dummy.map").eqs."" then  goto pass2_failure2
+$ DELETE dummy.obj;*
+$ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
+$ DELETE dummy.map;*
+$ ECHO " check completed"
+$! we now have a file with one entry per line of unresolvable symbols
+$ ofiles = ""
+$ if f$trnlnm("IFILE$").nes."" then  close/noLog ifile$
+$      open/Read ifile$ dummy.list
+$iloop: read/End=idone ifile$ iline
+$      iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
+$      ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
+$      goto iloop
+$idone: close ifile$
+$ DELETE dummy.list;*
+$ on error then ABORT
+$
+$! third pass: compile "missing" modules collected in pass 2
+$ pass = 3
+$ gosub do_ofiles
+$
+$! finish up
+$ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
+$ DELETE 'WORK_LIB';*
+$
+$! all done
+$ ECHO "Completed libiberty build."
+$ type sys$input:
+
+  You many wish to do
+  $ COPY LIBERTY.OLB GNU_CC:[000000]
+  so that this run-time library resides in the same location as gcc's
+  support library.  When building gas, be sure to leave the original
+  copy of liberty.olb here so that gas's build procedure can find it.
+
+$ set default 'old_dir'
+$ exit
+$
+$!
+$! compile each element of the space-delimited list 'ofiles'
+$!
+$do_ofiles:
+$ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
+$ i = 0
+$oloop:
+$ f = f$element(i," ",ofiles)
+$ if f.eqs." " then  goto odone
+$ f = f - ".o" !strip dummy suffix
+$ ECHO "  ''f'"
+$ skip_f = 0
+$ if pass.eq.3 .and. f$search("''f'.c").eqs."" then  gosub chk_deffunc
+$ if .not.skip_f
+$ then
+$   'CC' 'f'.c
+$   LIBR 'WORK_LIB' 'f'.obj /Insert
+$   DELETE 'f'.obj;*
+$ endif
+$ i = i + 1
+$ goto oloop
+$odone:
+$ return
+$
+$!
+$! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
+$!
+$chk_deffunc:
+$ define/User sys$output _NL:
+$ define/User sys$error _NL:
+$ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
+$ if (($status.and.%x7FFFFFFF) .eq. 1)
+$ then
+$   skip_f = 1
+$   open/Append config_h config.h
+$   write config_h "#define NEED_''f'"
+$   close config_h
+$ endif
+$ return
+$
+$!
+$pass2_failure1:
+$! if we reach here, dummy.c failed to compile and we're really stuck
+$ type sys$input:
+
+  Cannot compile the library contents checker (dummy.c + functions.def),
+  so cannot continue!
+
+$! attempt the compile again, without suppressing diagnostic messages this time
+$ on error then ABORT +0*f$verify(v)
+$ v = f$verify(1)
+$ 'CC' dummy.c
+$ ABORT +0*f$verify(v) !'f$verify(0)'
+$!
+$pass2_failure2:
+$! should never reach here..
+$ type sys$input:
+
+  Cannot link the library contents checker (dummy.obj), so cannot continue!
+
+$! attempt the link again, without suppressing diagnostic messages this time
+$ on error then ABORT +0*f$verify(v)
+$ v = f$verify(1)
+$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
+       gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
+$ ABORT +0*f$verify(v) !'f$verify(0)'
+$
+$! not reached
+$ exit
diff --git a/libiberty/vprintf.c b/libiberty/vprintf.c
new file mode 100644 (file)
index 0000000..c255316
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+
+@deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap})
+@deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap})
+@deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap})
+
+These functions are the same as @code{printf}, @code{fprintf}, and
+@code{sprintf}, respectively, except that they are called with a
+@code{va_list} instead of a variable number of arguments.  Note that
+they do not call @code{va_end}; this is the application's
+responsibility.  In @libib{} they are implemented in terms of the
+nonstandard but common function @code{_doprnt}.
+
+@end deftypefn
+
+*/
+
+#include <ansidecl.h>
+#include <stdarg.h>
+#include <stdio.h>
+#undef vprintf
+int
+vprintf (const char *format, va_list ap)
+{
+  return vfprintf (stdout, format, ap);
+}
diff --git a/libiberty/vsnprintf.c b/libiberty/vsnprintf.c
new file mode 100644 (file)
index 0000000..7df5bd8
--- /dev/null
@@ -0,0 +1,145 @@
+/* Implement the vsnprintf function.
+   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+/*
+
+@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap})
+
+This function is similar to vsprintf, but it will print at most
+@var{n} characters.  On error the return value is -1, otherwise it
+returns the number of characters that would have been printed had
+@var{n} been sufficiently large, regardless of the actual value of
+@var{n}.  Note some pre-C99 system libraries do not implement this
+correctly so users cannot generally rely on the return value if the
+system version of this function is used.
+
+@end deftypefn
+
+*/
+
+#include "config.h"
+#include "ansidecl.h"
+
+#include <stdarg.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include "libiberty.h"
+
+/* This implementation relies on a working vasprintf.  */
+int
+vsnprintf (char *s, size_t n, const char *format, va_list ap)
+{
+  char *buf = 0;
+  int result = vasprintf (&buf, format, ap);
+
+  if (!buf)
+    return -1;
+  if (result < 0)
+    {
+      free (buf);
+      return -1;
+    }
+
+  result = strlen (buf);
+  if (n > 0)
+    {
+      if ((long) n > result)
+       memcpy (s, buf, result+1);
+      else
+        {
+         memcpy (s, buf, n-1);
+         s[n - 1] = 0;
+       }
+    }
+  free (buf);
+  return result;
+}
+
+#ifdef TEST
+/* Set the buffer to a known state.  */
+#define CLEAR(BUF) do { memset ((BUF), 'X', sizeof (BUF)); (BUF)[14] = '\0'; } while (0)
+/* For assertions.  */
+#define VERIFY(P) do { if (!(P)) abort(); } while (0)
+
+static int ATTRIBUTE_PRINTF_3
+checkit (char *s, size_t n, const char *format, ...)
+{
+  int result;
+  VA_OPEN (ap, format);
+  VA_FIXEDARG (ap, char *, s);
+  VA_FIXEDARG (ap, size_t, n);
+  VA_FIXEDARG (ap, const char *, format);
+  result = vsnprintf (s, n, format, ap);
+  VA_CLOSE (ap);
+  return result;
+}
+
+extern int main (void);
+int
+main (void)
+{
+  char buf[128];
+  int status;
+  
+  CLEAR (buf);
+  status = checkit (buf, 10, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 9, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 8, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "foobar:\0XXXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 7, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "foobar\0XXXXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 6, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "fooba\0XXXXXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 2, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "f\0XXXXXXXXXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 1, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "\0XXXXXXXXXXXXX\0", 15) == 0);
+
+  CLEAR (buf);
+  status = checkit (buf, 0, "%s:%d", "foobar", 9);
+  VERIFY (status==8 && memcmp (buf, "XXXXXXXXXXXXXX\0", 15) == 0);
+
+  return 0;
+}
+#endif /* TEST */
diff --git a/libiberty/vsprintf.c b/libiberty/vsprintf.c
new file mode 100644 (file)
index 0000000..99e7044
--- /dev/null
@@ -0,0 +1,56 @@
+/* Simple implementation of vsprintf for systems without it.
+   Highly system-dependent, but should work on most "traditional"
+   implementations of stdio; newer ones should already have vsprintf.
+   Written by Per Bothner of Cygnus Support.
+   Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu).
+   Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License. */
+
+#include <ansidecl.h>
+#include <stdarg.h>
+#include <stdio.h>
+#undef vsprintf
+
+#if defined _IOSTRG && defined _IOWRT
+
+int
+vsprintf (char *buf, const char *format, va_list ap)
+{
+  FILE b;
+  int ret;
+#ifdef VMS
+  b->_flag = _IOWRT|_IOSTRG;
+  b->_ptr = buf;
+  b->_cnt = 12000;
+#else
+  b._flag = _IOWRT|_IOSTRG;
+  b._ptr = buf;
+  b._cnt = 12000;
+#endif
+  ret = _doprnt(format, ap, &b);
+  putc('\0', &b);
+  return ret;
+
+}
+
+#endif
diff --git a/libiberty/waitpid.c b/libiberty/waitpid.c
new file mode 100644 (file)
index 0000000..fd519d7
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+
+@deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int)
+
+This is a wrapper around the @code{wait} function.  Any ``special''
+values of @var{pid} depend on your implementation of @code{wait}, as
+does the return value.  The third argument is unused in @libib{}.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+
+/* On some systems (such as WindISS), you must include <sys/types.h>
+   to get the definition of "pid_t" before you include <sys/wait.h>.  */
+#include <sys/types.h>
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+pid_t
+waitpid (pid_t pid, int *stat_loc, int options ATTRIBUTE_UNUSED)
+{
+  for (;;)
+    {
+      int wpid = wait(stat_loc);
+      if (wpid == pid || wpid == -1)
+       return wpid;
+    }
+}
diff --git a/libiberty/xatexit.c b/libiberty/xatexit.c
new file mode 100644 (file)
index 0000000..6fdad9e
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ */
+
+
+/*
+
+@deftypefun int xatexit (void (*@var{fn}) (void))
+
+Behaves as the standard @code{atexit} function, but with no limit on
+the number of registered functions.  Returns 0 on success, or @minus{}1 on
+failure.  If you use @code{xatexit} to register functions, you must use
+@code{xexit} to terminate your program.
+
+@end deftypefun
+
+*/
+
+/* Adapted from newlib/libc/stdlib/{,at}exit.[ch].
+   If you use xatexit, you must call xexit instead of exit.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <stdio.h>
+
+#include <stddef.h>
+
+#if VMS
+#include <stdlib.h>
+#include <unixlib.h>
+#else
+/* For systems with larger pointers than ints, this must be declared.  */
+PTR malloc (size_t);
+#endif
+
+static void xatexit_cleanup (void);
+
+/* Pointer to function run by xexit.  */
+extern void (*_xexit_cleanup) (void);
+
+#define        XATEXIT_SIZE 32
+
+struct xatexit {
+       struct  xatexit *next;          /* next in list */
+       int     ind;                    /* next index in this table */
+       void    (*fns[XATEXIT_SIZE]) (void);    /* the table itself */
+};
+
+/* Allocate one struct statically to guarantee that we can register
+   at least a few handlers.  */
+static struct xatexit xatexit_first;
+
+/* Points to head of LIFO stack.  */
+static struct xatexit *xatexit_head = &xatexit_first;
+
+/* Register function FN to be run by xexit.
+   Return 0 if successful, -1 if not.  */
+
+int
+xatexit (void (*fn) (void))
+{
+  register struct xatexit *p;
+
+  /* Tell xexit to call xatexit_cleanup.  */
+  if (!_xexit_cleanup)
+    _xexit_cleanup = xatexit_cleanup;
+
+  p = xatexit_head;
+  if (p->ind >= XATEXIT_SIZE)
+    {
+      if ((p = (struct xatexit *) malloc (sizeof *p)) == NULL)
+       return -1;
+      p->ind = 0;
+      p->next = xatexit_head;
+      xatexit_head = p;
+    }
+  p->fns[p->ind++] = fn;
+  return 0;
+}
+
+/* Call any cleanup functions.  */
+
+static void
+xatexit_cleanup (void)
+{
+  register struct xatexit *p;
+  register int n;
+
+  for (p = xatexit_head; p; p = p->next)
+    for (n = p->ind; --n >= 0;)
+      (*p->fns[n]) ();
+}
diff --git a/libiberty/xexit.c b/libiberty/xexit.c
new file mode 100644 (file)
index 0000000..421e5e2
--- /dev/null
@@ -0,0 +1,52 @@
+/* xexit.c -- Run any exit handlers, then exit.
+   Copyright (C) 1994, 95, 1997 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not, write
+to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Replacement void xexit (int @var{code})
+
+Terminates the program.  If any functions have been registered with
+the @code{xatexit} replacement function, they will be called first.
+Termination is handled via the system's normal @code{exit} call.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include "libiberty.h"
+
+
+/* This variable is set by xatexit if it is called.  This way, xmalloc
+   doesn't drag xatexit into the link.  */
+void (*_xexit_cleanup) (void);
+
+void
+xexit (int code)
+{
+  if (_xexit_cleanup != NULL)
+    (*_xexit_cleanup) ();
+  exit (code);
+}
diff --git a/libiberty/xmalloc.c b/libiberty/xmalloc.c
new file mode 100644 (file)
index 0000000..3e97aab
--- /dev/null
@@ -0,0 +1,184 @@
+/* memory allocation routines with error checking.
+   Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
+   
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Replacement void* xmalloc (size_t)
+
+Allocate memory without fail.  If @code{malloc} fails, this will print
+a message to @code{stderr} (using the name set by
+@code{xmalloc_set_program_name},
+if any) and then call @code{xexit}.  Note that it is therefore safe for
+a program to contain @code{#define malloc xmalloc} in its source.
+
+@end deftypefn
+
+@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
+Reallocate memory without fail.  This routine functions like @code{realloc},
+but will behave the same as @code{xmalloc} if memory cannot be found.
+
+@end deftypefn
+
+@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
+
+Allocate memory without fail, and set it to zero.  This routine functions
+like @code{calloc}, but will behave the same as @code{xmalloc} if memory
+cannot be found.
+
+@end deftypefn
+
+@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
+
+You can use this to set the name of the program used by
+@code{xmalloc_failed} when printing a failure message.
+
+@end deftypefn
+
+@deftypefn Replacement void xmalloc_failed (size_t)
+
+This function is not meant to be called by client code, and is listed
+here for completeness only.  If any of the allocation routines fail, this
+function will be called to print an error message and terminate execution.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <stdio.h>
+
+#include <stddef.h>
+
+#if VMS
+#include <stdlib.h>
+#include <unixlib.h>
+#else
+/* For systems with larger pointers than ints, these must be declared.  */
+#  if HAVE_STDLIB_H && HAVE_UNISTD_H && HAVE_DECL_MALLOC \
+      && HAVE_DECL_REALLOC && HAVE_DECL_CALLOC && HAVE_DECL_SBRK
+#    include <stdlib.h>
+#    include <unistd.h>
+#  else
+#    ifdef __cplusplus
+extern "C" {
+#    endif /* __cplusplus */
+void *malloc (size_t);
+void *realloc (void *, size_t);
+void *calloc (size_t, size_t);
+void *sbrk (ptrdiff_t);
+#    ifdef __cplusplus
+}
+#    endif /* __cplusplus */
+#  endif /* HAVE_STDLIB_H ...  */
+#endif /* VMS */
+
+/* The program name if set.  */
+static const char *name = "";
+
+#ifdef HAVE_SBRK
+/* The initial sbrk, set when the program name is set. Not used for win32
+   ports other than cygwin32.  */
+static char *first_break = NULL;
+#endif /* HAVE_SBRK */
+
+void
+xmalloc_set_program_name (const char *s)
+{
+  name = s;
+#ifdef HAVE_SBRK
+  /* Win32 ports other than cygwin32 don't have brk() */
+  if (first_break == NULL)
+    first_break = (char *) sbrk (0);
+#endif /* HAVE_SBRK */
+}
+
+void
+xmalloc_failed (size_t size)
+{
+#ifdef HAVE_SBRK
+  extern char **environ;
+  size_t allocated;
+
+  if (first_break != NULL)
+    allocated = (char *) sbrk (0) - first_break;
+  else
+    allocated = (char *) sbrk (0) - (char *) &environ;
+  fprintf (stderr,
+          "\n%s%sout of memory allocating %lu bytes after a total of %lu bytes\n",
+          name, *name ? ": " : "",
+          (unsigned long) size, (unsigned long) allocated);
+#else /* HAVE_SBRK */
+  fprintf (stderr,
+          "\n%s%sout of memory allocating %lu bytes\n",
+          name, *name ? ": " : "",
+          (unsigned long) size);
+#endif /* HAVE_SBRK */
+  xexit (1);
+}  
+
+PTR
+xmalloc (size_t size)
+{
+  PTR newmem;
+
+  if (size == 0)
+    size = 1;
+  newmem = malloc (size);
+  if (!newmem)
+    xmalloc_failed (size);
+
+  return (newmem);
+}
+
+PTR
+xcalloc (size_t nelem, size_t elsize)
+{
+  PTR newmem;
+
+  if (nelem == 0 || elsize == 0)
+    nelem = elsize = 1;
+
+  newmem = calloc (nelem, elsize);
+  if (!newmem)
+    xmalloc_failed (nelem * elsize);
+
+  return (newmem);
+}
+
+PTR
+xrealloc (PTR oldmem, size_t size)
+{
+  PTR newmem;
+
+  if (size == 0)
+    size = 1;
+  if (!oldmem)
+    newmem = malloc (size);
+  else
+    newmem = realloc (oldmem, size);
+  if (!newmem)
+    xmalloc_failed (size);
+
+  return (newmem);
+}
diff --git a/libiberty/xmemdup.c b/libiberty/xmemdup.c
new file mode 100644 (file)
index 0000000..d483116
--- /dev/null
@@ -0,0 +1,38 @@
+/* xmemdup.c -- Duplicate a memory buffer, using xcalloc.
+   This trivial function is in the public domain.
+   Jeff Garzik, September 1999.  */
+
+/*
+
+@deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size})
+
+Duplicates a region of memory without fail.  First, @var{alloc_size} bytes
+are allocated, then @var{copy_size} bytes from @var{input} are copied into
+it, and the new memory is returned.  If fewer bytes are copied than were
+allocated, the remaining memory is zeroed.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+#include <sys/types.h> /* For size_t. */
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+# ifdef HAVE_STRINGS_H
+#  include <strings.h>
+# endif
+#endif
+
+PTR
+xmemdup (const PTR input, size_t copy_size, size_t alloc_size)
+{
+  PTR output = xcalloc (1, alloc_size);
+  return (PTR) memcpy (output, input, copy_size);
+}
diff --git a/libiberty/xstrdup.c b/libiberty/xstrdup.c
new file mode 100644 (file)
index 0000000..9ac2ea0
--- /dev/null
@@ -0,0 +1,36 @@
+/* xstrdup.c -- Duplicate a string in memory, using xmalloc.
+   This trivial function is in the public domain.
+   Ian Lance Taylor, Cygnus Support, December 1995.  */
+
+/*
+
+@deftypefn Replacement char* xstrdup (const char *@var{s})
+
+Duplicates a character string without fail, using @code{xmalloc} to
+obtain memory.
+
+@end deftypefn
+
+*/
+
+#include <sys/types.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+# ifdef HAVE_STRINGS_H
+#  include <strings.h>
+# endif
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+char *
+xstrdup (const char *s)
+{
+  register size_t len = strlen (s) + 1;
+  register char *ret = XNEWVEC (char, len);
+  return (char *) memcpy (ret, s, len);
+}
diff --git a/libiberty/xstrerror.c b/libiberty/xstrerror.c
new file mode 100644 (file)
index 0000000..2ea2200
--- /dev/null
@@ -0,0 +1,79 @@
+/* xstrerror.c -- jacket routine for more robust strerror() usage.
+   Fri Jun 16 18:30:00 1995  Pat Rankin  <rankin@eql.caltech.edu>
+   This code is in the public domain.  */
+
+/*
+
+@deftypefn Replacement char* xstrerror (int @var{errnum})
+
+Behaves exactly like the standard @code{strerror} function, but
+will never return a @code{NULL} pointer.
+
+@end deftypefn
+
+*/
+
+#include <stdio.h>
+
+#include "config.h"
+#include "libiberty.h"
+
+#ifdef VMS
+#  include <errno.h>
+#  if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES)
+#    ifdef __cplusplus
+extern "C" {
+#    endif /* __cplusplus */
+extern char *strerror (int,...);
+#    define DONT_DECLARE_STRERROR
+#    ifdef __cplusplus
+}
+#    endif /* __cplusplus */
+#  endif
+#endif  /* VMS */
+
+
+#ifndef DONT_DECLARE_STRERROR
+#  ifdef __cplusplus
+extern "C" {
+#  endif /* __cplusplus */
+extern char *strerror (int);
+#  ifdef __cplusplus
+}
+#  endif /* __cplusplus */
+#endif
+
+/* If strerror returns NULL, we'll format the number into a static buffer.  */
+
+#define ERRSTR_FMT "undocumented error #%d"
+static char xstrerror_buf[sizeof ERRSTR_FMT + 20];
+
+/* Like strerror, but result is never a null pointer.  */
+
+char *
+xstrerror (int errnum)
+{
+  char *errstr;
+#ifdef VMS
+  char *(*vmslib_strerror) (int,...);
+
+  /* Override any possibly-conflicting declaration from system header.  */
+  vmslib_strerror = (char *(*) (int,...)) strerror;
+  /* Second argument matters iff first is EVMSERR, but it's simpler to
+     pass it unconditionally.  `vaxc$errno' is declared in <errno.h>
+     and maintained by the run-time library in parallel to `errno'.
+     We assume that `errnum' corresponds to the last value assigned to
+     errno by the run-time library, hence vaxc$errno will be relevant.  */
+  errstr = (*vmslib_strerror) (errnum, vaxc$errno);
+#else
+  errstr = strerror (errnum);
+#endif
+
+  /* If `errnum' is out of range, result might be NULL.  We'll fix that.  */
+  if (!errstr)
+    {
+      sprintf (xstrerror_buf, ERRSTR_FMT, errnum);
+      errstr = xstrerror_buf;
+    }
+  return errstr;
+}
diff --git a/libiberty/xstrndup.c b/libiberty/xstrndup.c
new file mode 100644 (file)
index 0000000..0a41f60
--- /dev/null
@@ -0,0 +1,60 @@
+/* Implement the xstrndup function.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/*
+
+@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+without fail, using @code{xmalloc} to obtain memory.  The result is
+always NUL terminated.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <sys/types.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+# ifdef HAVE_STRINGS_H
+#  include <strings.h>
+# endif
+#endif
+#include "ansidecl.h"
+#include "libiberty.h"
+
+char *
+xstrndup (const char *s, size_t n)
+{
+  char *result;
+  size_t len = strlen (s);
+
+  if (n < len)
+    len = n;
+
+  result = XNEWVEC (char, len + 1);
+
+  result[len] = '\0';
+  return (char *) memcpy (result, s, len);
+}
diff --git a/src/.gdbinit b/src/.gdbinit
new file mode 100644 (file)
index 0000000..74807fc
--- /dev/null
@@ -0,0 +1,25 @@
+define pname
+  if $arg0->container
+    printf "%s$", $arg0->container->name
+  end
+  if $arg0->interface
+    printf "%s$", $arg0->interface->name
+  end
+  printf "%s\n", $arg0->name
+end
+
+define regress
+  cd ../nregress/$arg0
+end
+
+define app
+  cd /home/dgay/motes/tinyos-1.x/apps/$arg0
+end
+
+define app2
+  cd /home/dgay/motes/2.x/apps/$arg0
+end
+
+define mrun
+  run -_fnesc-include=tos -_fnesc-target=avr -_fnesc-no-debug -mmcu=atmega103 -DPLATFORM_MICA -DNESC=110 -I\/home/dgay/motes/tinyos-1.x/tos/platform/mica -I\/home/dgay/motes/tinyos-1.x/tos/platform/avrmote -I\/home/dgay/motes/tinyos-1.x/tos/interfaces -I\/home/dgay/motes/tinyos-1.x/tos/types -I\/home/dgay/motes/tinyos-1.x/tos/system -v $arg0
+end
diff --git a/src/AST.c b/src/AST.c
new file mode 100644 (file)
index 0000000..3a6800d
--- /dev/null
+++ b/src/AST.c
@@ -0,0 +1,249 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "semantics.h"
+
+#include "AST_types.c"
+#include "AST_list_node.c"
+
+void insert_before(node sameregion *list, node before, node n)
+{
+  while (*list != before)
+    list = &(*list)->next;
+  *list = n;
+  n->next = before;
+}
+
+
+unary newkind_unary(region r, AST_kind kind, location location, expression arg1)
+{
+  unary obj = new_unary(r, location, arg1);
+
+  obj->kind = kind;
+
+  return obj;
+}
+
+binary newkind_binary(region r, AST_kind kind, location location,
+                     expression arg1, expression arg2)
+{
+  binary obj;
+
+  if (kind >= kind_assignment && kind <= postkind_assignment) /* XXX: Yuck */
+    obj = CAST(binary, new_assign(r, location, arg1, arg2));
+  else
+    obj = new_binary(r, location, arg1, arg2);
+
+  obj->kind = kind;
+
+  return obj;
+}
+
+tag_ref newkind_tag_ref(region r, AST_kind kind, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  tag_ref obj = new_tag_ref(r, location, word1, attributes, fields, defined);
+
+  obj->kind = kind;
+
+  return obj;
+}
+
+/* The separate static version of AST_set_parent allows the qualifier
+   check optimiser to figure out a useful signature for this function */
+static void AST_set_parent(node sameregion *nptr, node parent)
+{
+  (*nptr)->parent = parent;
+  (*nptr)->parent_ptr = nptr;
+}
+
+void set_parent(node sameregion *nptr, node parent)
+{
+  (*nptr)->parent = parent;
+  (*nptr)->parent_ptr = nptr;
+}
+
+void set_parent_list(node sameregion *list, node parent)
+{
+  while (*list)
+    {
+      set_parent(list, parent);
+      list = &(*list)->next;
+    }
+}
+
+static void AST_set_parent_list(void *vnptr, node parent);
+
+static void AST_set_parent1(node sameregion *nptr, node parent)
+{
+  node n = *nptr;
+
+  if (parent)
+    AST_set_parent(nptr, parent);
+
+  switch (n->kind)
+    {
+/* Template:
+    case kind_foo: {
+      foo x = CAST(foo, n);
+
+      AST_set_parent_list(&x->field1, n);
+      AST_set_parent_list(&x->field2, n);
+      break;
+    }
+*/
+#include "AST_parent.c"
+    default:
+      assert(0);
+    }
+}
+
+static void AST_set_parent_list(void *vnptr, node parent)
+{
+  node sameregion *nptr = CASTSRPTR(node, vnptr);
+
+  while (*nptr)
+    {
+      AST_set_parent1(nptr, parent);
+      nptr = &(*nptr)->next;
+    }
+}
+
+void AST_set_parents(node n)
+{
+  
+  AST_set_parent_list(&n, NULL);
+}
+
+node AST_clone(region r, node n)
+{
+  int k = n->kind - kind_node;
+  node copy;
+
+  /* Copy all of n's field except parent, parent_ptr */
+  copy = typed_ralloc(r, AST_sizeof[k], AST_typeof[k]);
+  typed_rarraycopy(copy, n, 1, AST_sizeof[k], AST_typeof[k]);
+  copy->parent = NULL;
+  copy->parent_ptr = NULL;
+
+  return copy;
+}
+
+static void AST_print_list(int indent, void *vn);
+
+static void pindent(int by)
+{
+  int i;
+
+  for (i = 0; i < by; i++)
+    putchar(' ');
+}
+
+static void AST_print1(int indent, node n)
+{
+  pindent(indent);
+  indent += 1;
+
+  /* Special cases */
+  switch (n->kind)
+    {
+    case kind_identifier: {
+      identifier x = CAST(identifier, n);
+
+      printf("identifier %s\n", x->ddecl->name);
+      return;
+    }
+    case kind_lexical_cst: {
+      lexical_cst x = CAST(lexical_cst, n);
+
+      printf("lexical_cst %s\n", x->cstring.data);
+      return;
+    }
+    case kind_string_cst: {
+      string_cst x = CAST(string_cst, n);
+
+      printf("string_cst %s\n", x->cstring.data);
+      return;
+    }
+    case kind_id_label: {
+      id_label x = CAST(id_label, n);
+
+      printf("id_label %s\n", x->cstring.data);
+      return;
+    }
+    case kind_identifier_declarator: {
+      identifier_declarator x = CAST(identifier_declarator, n);
+
+      printf("identifier_declarator %s\n", x->cstring.data);
+      return;
+    }
+    case kind_word: {
+      word x = CAST(word, n);
+
+      printf("word %s\n", x->cstring.data);
+      return;
+    }
+    case kind_rid: {
+      rid x = CAST(rid, n);
+
+      printf("rid %s\n", rid_name(x));
+      return;
+    }
+    default:
+      break;
+    }
+
+  switch (n->kind)
+    {
+/* Template:
+    case kind_foo: {
+      foo x = CAST(foo, n);
+
+      puts("foo\n");
+      pindent(indent); puts("field1:\n"); AST_print_list(indent, x->field1);
+      pindent(indent); puts("field2:\n"); AST_print_list(indent, x->field2);
+      break;
+    }
+*/
+#include "AST_print.c"
+    default:
+      assert(0);
+    }
+}
+
+static void AST_print_list(int indent, void *vn)
+{
+  node n = CAST(node, vn);
+
+  while (n)
+    {
+      AST_print1(indent, n);
+      n = n->next;
+    }
+}
+
+void AST_print(node n)
+{
+  fflush(stdout);
+  AST_print_list(0, n);
+  fflush(stdout);
+}
+
diff --git a/src/AST.h b/src/AST.h
new file mode 100644 (file)
index 0000000..af74c06
--- /dev/null
+++ b/src/AST.h
@@ -0,0 +1,96 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef AST_H
+#define AST_H
+
+typedef int id_declaration_list;
+typedef struct typelist *typelist;
+typedef struct type *type;
+typedef struct known_cst *known_cst;
+typedef struct ivalue *ivalue;
+typedef struct edge *edge;
+
+#ifdef NODEREFINT
+typedef unsigned short noderef;
+#else
+struct node;
+typedef struct AST_node *noderef;
+#endif
+
+#include "sd_list.h"
+#include "dd_list.h"
+#include "graph.h"
+#include "dhash.h"
+
+#include "c-lex.h"
+#include "nesc-ndoc.h"
+#include "AST_types.h"
+#include "AST_list_node.h"
+#include "decls.h"
+#include "env.h"
+#include "types.h"
+#include "cval.h"
+#include "utils.h"
+
+enum { struct_type, union_type, enum_type };
+
+typedef enum { command_call, event_signal, post_task, normal_call } nesc_call_kind;
+
+typedef enum {
+  ATOMIC_ANY,    /* atomic come what may */
+  ATOMIC_SINGLE, /* atomic as long as the only such operation */
+  NOT_ATOMIC
+} atomic_t;
+
+#include "AST_defs.h"
+
+#define CAST AST_CAST
+#define CASTPTR AST_CASTPTR
+#define CASTSRPTR AST_CASTSRPTR
+
+unary newkind_unary(region r, AST_kind kind, location location, expression arg1);
+binary newkind_binary(region r, AST_kind kind, location location,
+                     expression arg1, expression arg2);
+tag_ref newkind_tag_ref(region r, AST_kind kind, location location, word word1, attribute attributes, declaration fields, bool defined);
+void insert_before(node sameregion *list, node before, node n);
+
+void AST_set_parents(node n);
+void set_parent(node sameregion *nptr, node parent);
+void set_parent_list(node sameregion *list, node parent);
+
+node AST_clone(region r, node n);
+
+void AST_print(node n);
+
+#define AST_SET(parent, ptr, value) \
+  (*(ptr) = (value), (value) ? (set_parent(CASTSRPTR(node, (ptr)), CAST(node, (parent))), 0) : 0)
+
+#define AST_SET_FIELD(parent, field, value) \
+  AST_SET((parent), &(parent)->field, (value))
+
+#define AST_SET_NEXT(previous, value) \
+  AST_SET((previous)->parent, &(previous)->next, (value))
+
+#define AST_REPLACE(n, value) \
+  AST_SET((n)->parent_ptr, (n)->parent, (value))
+
+#endif
diff --git a/src/AST_defs.h b/src/AST_defs.h
new file mode 100644 (file)
index 0000000..1d8daad
--- /dev/null
@@ -0,0 +1,1910 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+/* The common supertype of all AST nodes */
+struct AST_node { /* extends nil */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* The common type of all definitions */
+struct AST_declaration { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* The common type of all statements
+PARENT_LOOP: 
+  - for break and continue: the containing for/while/do-while/switch
+    statement they escape from
+  - for for/while/do-while: the containing for/while/do-while/switch
+    statement
+CONTAINING_ATOMIC
+  - for return statement: their containing atomic statement
+  - for labels and looping statements, their containing atomic statement
+(or NULL for none). Used to check that break, continue and goto do not
+break in or out of an atomic statement.
+(Note: for nested atomic statements, CONTAINING_ATOMIC will point to a
+dangling node as we drop these nested statements from the AST)
+ISATOMIC is 
+  ATOMIC_ANY if the statement does not involve any shared variable accesses
+  ATOMIC_SINGLE if the statement involves a single access to a shared 
+    variable, and that access is guaranteed to be atomic (e.g., a single byte)
+  NOT_ATOMIC otherwise */
+struct AST_statement { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+};
+
+/* Expression nodes are subtypes of this type.
+LVALUE is true if this expression can be used in a context requiring an lvalue.
+BITFIELD is true if this lvalue is a bitfield.
+ISREGISTER is true if this lvalue is (declared to be) in a register.
+SIDE_EFFECTS is true if the expression has side effects.
+CST is non-null (and points to an appropriate constant) if this expression is
+constant.
+STATIC_ADDRESS is true for lvalues whose address is a constant expression
+CONVERTED_TO_POINTER is true for expressions which default_conversion
+indicates need converting to pointer type (note that these nodes did not have
+their type changed)
+CST_CHECKED is set to true once we've successfully checked this expression's
+constantness, and associated constant value (used to avoid duplicate error
+messages in repeated constant folding passes)
+SPELLING saves the `spelling' (a user-friendly name) of expressions used
+in initialisers.
+PARENS is TRUE if the expression is in parentheses
+IVALUE is a pointer to an ivalue (see init.h) holding the value of an
+  initialiser expression. On an init_list or in an expression used as
+  a simple initialiser (e.g., '3 + 2' in 'int x = 3 + 2'), this is the
+  value of the initialiser. Inside these initialisers, ivalue points into
+  the ivalue structure of the containing initialiser.
+CONTEXT is the usage context for this expression (see nesc-uses.h)
+ISATOMIC is 
+  ATOMIC_ANY if the statement does not involve any shared variable accesses
+  ATOMIC_SINGLE if the statement involves a single access to a shared 
+    variable, and that access is guaranteed to be atomic (e.g., a single byte)
+  NOT_ATOMIC otherwise */
+struct AST_expression { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+};
+
+/* A common super-type for all type-building elements (qualifiers, etc) */
+struct AST_type_element { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* A common super-type for all declarator elements */
+struct AST_declarator { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* A common super-type for all labels.
+NEXT_LABEL points to the next case or default label of a switch 
+(for case or default labels only) */
+struct AST_label { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  label next_label;
+};
+
+/* Asm statement STMT at the top level of a file (GCC) */
+struct AST_asm_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  asm_stmt sameregion asm_stmt;
+};
+
+/* The declaration MODIFIERS DECLS;
+DECLS is a list */
+struct AST_data_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  type_element sameregion modifiers;
+  declaration sameregion decls;
+};
+
+/* __extension__ DECL; (GCC) */
+struct AST_extension_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declaration sameregion decl;
+};
+
+/* A pseudo-declaration to represent ... in a function argument list */
+struct AST_ellipsis_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* The enumeration element CSTRING = ARG1. CSTRING is optional */
+struct AST_enumerator { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+  expression sameregion arg1;
+  data_declaration ddecl;
+};
+
+/* CSTRING in an old-style parameter list */
+struct AST_oldidentifier_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+  data_declaration ddecl;
+};
+
+/* A function declaration with body STMT
+OLD_PARMS is the old-style parameter declaration list. */
+struct AST_function_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  type_element sameregion modifiers;
+  attribute sameregion attributes;
+  declaration old_parms;
+  statement sameregion stmt;
+  function_decl parent_function;
+  data_declaration ddecl;
+  function_declarator fdeclarator;
+  type declared_type;
+  env undeclared_variables;
+  env base_labels;
+  env scoped_labels;
+  statement current_loop;
+  int nlocals;
+};
+
+/* Used as the AST node for implicit declarations. IDENT points to the
+identifier node that implicitly declared the function */
+struct AST_implicit_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  identifier ident;
+};
+
+/* Declaration of DECLARATOR ASM_STMT ATTRIBUTES = ARG1.
+ATTRIBUTES is a list. ASM_STMT is optional (GCC specific).
+ARG1 is an optional initialiser.
+DDECL points to the declaration for this item.
+DECLARED_TYPE is the type in this declaration (which may be different than that
+in DDECL->TYPE)
+FORWARD is true for parameters that are forward declarations */
+struct AST_variable_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  attribute sameregion attributes;
+  expression sameregion arg1;
+  asm_stmt sameregion asm_stmt;
+  data_declaration ddecl;
+  type declared_type;
+  bool forward;
+};
+
+/* Declaration of field DECLARATOR ATTRIBUTES : ARG1.
+QUALIFIERS and ATTRIBUTEES are lists. ARG1 is an optional bitfield specifier
+TYPE_CHECKED is set to true once it has been checked that this field is of
+  network type (inside network structures)
+FDECL is this field's declaration */
+struct AST_field_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  attribute sameregion attributes;
+  expression sameregion arg1;
+  bool type_checked;
+  field_declaration fdecl;
+};
+
+/* The source-level type QUALIFIERS DECLARATOR */
+struct AST_asttype { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  type_element sameregion qualifiers;
+  type type;
+};
+
+/* typedef-type with declaration DDECL. The name is ddecl->name */
+struct AST_typename { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  data_declaration ddecl;
+};
+
+/* typeof ARG1 */
+struct AST_typeof_expr { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  expression sameregion arg1;
+};
+
+/* typeof(ASTTYPE) */
+struct AST_typeof_type { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  asttype sameregion asttype;
+};
+
+/* base type for gcc and nesc attributes */
+struct AST_attribute { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+};
+
+/* The (gcc) attribute WORD1(ARGS). args can be empty, and may not be
+semantically valid */
+struct AST_gcc_attribute { /* extends attribute */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  expression sameregion args;
+};
+
+/* Storage class specifier, type specifier or type qualifier ID (see RID_xxx) */
+struct AST_rid { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  enum rid id;
+};
+
+/* Type or function qualifier ID (see qualifiers.h and type_quals in types.h) */
+struct AST_qualifier { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  enum rid id;
+};
+
+/* struct/union/enum WORD1 { FIELDS; }  ATTRIBUTES
+ATTRIBUTES and FIELDS are lists.
+ATTRIBUTES is GCC specific. WORD1 is optional.
+DEFINED is TRUE if this declaration defines the struct/union/enum.
+DEFINED == FALSE => FIELDS == NULL
+
+TDECL points to the internal declaration node for this type */
+struct AST_tag_ref { /* extends type_element */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  declaration sameregion fields;
+  bool defined;
+  tag_declaration tdecl;
+};
+
+/* A struct */
+struct AST_struct_ref { /* extends tag_ref */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  declaration sameregion fields;
+  bool defined;
+  tag_declaration tdecl;
+};
+
+/* A union */
+struct AST_union_ref { /* extends tag_ref */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  declaration sameregion fields;
+  bool defined;
+  tag_declaration tdecl;
+};
+
+/* A common supertype for function/pointer/array declarator which includes
+the nested DECLARATOR */
+struct AST_nested_declarator { /* extends declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+};
+
+/* Function declarator DECLARATOR(PARMS). PARMS is a list of declarations.
+ENV is the environment for parms
+GPARMS is the list of declarations of generic parameters (commands, events only)
+RETURN_TYPE (optional) contains an overridden return type from nesdoc */
+struct AST_function_declarator { /* extends nested_declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  declaration sameregion parms;
+  declaration sameregion gparms;
+  type_element sameregion qualifiers;
+  environment env;
+  asttype sameregion return_type;
+};
+
+/* Pointer declarator *DECLARATOR */
+struct AST_pointer_declarator { /* extends nested_declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+};
+
+/* Declarator MODIFIERS DECLARATOR. The MODIFIERS are qualifiers
+or attributes.
+Note: MODIFIERS is never NULL */
+struct AST_qualified_declarator { /* extends nested_declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  type_element sameregion modifiers;
+};
+
+/* Array declarator DECLARATOR[ARG1]. ARG1 is optional */
+struct AST_array_declarator { /* extends nested_declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  expression sameregion arg1;
+};
+
+/* Declaration of CSTRING */
+struct AST_identifier_declarator { /* extends declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+};
+
+/* The statement asm QUALIFIERS (ARG1 : ASM_OPERANDS1 : ASM_OPERANDS2 : ASM_CLOBBERS) 
+where ASM_OPERANDS1, ASM_OPERANDS2, QUALIFIERS are optional, ASM_CLOBBERS is a list (GCC) */
+struct AST_asm_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  asm_operand sameregion asm_operands1;
+  asm_operand sameregion asm_operands2;
+  string sameregion asm_clobbers;
+  type_element sameregion qualifiers;
+};
+
+/* { ID_LABELS DECLS STMTS }. The ID_LABELS are GCC-specific. ID_LABELS, DECLS,
+STMTS are lists
+ENV is the environment for the block */
+struct AST_compound_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  id_label sameregion id_labels;
+  declaration sameregion decls;
+  statement sameregion stmts;
+  environment env;
+};
+
+/* IF (CONDITION) STMT1 ELSE STMT2. STMT2 is optional */
+struct AST_if_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion condition;
+  statement sameregion stmt1;
+  statement sameregion stmt2;
+};
+
+/* LABEL: STMT */
+struct AST_labeled_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  label sameregion label;
+  statement sameregion stmt;
+};
+
+/* EXPR; */
+struct AST_expression_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion arg1;
+};
+
+/* Basic type for all conditional statements */
+struct AST_conditional_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion condition;
+  statement sameregion stmt;
+};
+
+/* SWITCH (CONDITION) STMT.
+NEXT_LABEL points to the switches first label */
+struct AST_switch_stmt { /* extends conditional_stmt */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion condition;
+  statement sameregion stmt;
+  label next_label;
+};
+
+/* FOR (ARG1; ARG2; ARG3) STMT. ARG1, ARG2, ARG3 are optional */
+struct AST_for_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion arg2;
+  expression sameregion arg3;
+  statement sameregion stmt;
+};
+
+/* BREAK; */
+struct AST_break_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+};
+
+/* CONTINUE; */
+struct AST_continue_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+};
+
+/* RETURN ARG1. ARG1 is optional */
+struct AST_return_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion arg1;
+};
+
+/* GOTO ID_LABEL */
+struct AST_goto_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  id_label sameregion id_label;
+};
+
+/* GOTO *ARG1 (GCC) */
+struct AST_computed_goto_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  expression sameregion arg1;
+};
+
+/* ; */
+struct AST_empty_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+};
+
+/* Unary expression nodes, kind defines operator */
+struct AST_unary { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+};
+
+/* Binary expression nodes, kind defines operator */
+struct AST_binary { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion arg2;
+};
+
+/* A comma separated list of expressions ARG1 */
+struct AST_comma { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+};
+
+/* sizeof (ASTTYPE) */
+struct AST_sizeof_type { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  asttype sameregion asttype;
+};
+
+/* __alignof (ASTTYPE) (GCC) */
+struct AST_alignof_type { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  asttype sameregion asttype;
+};
+
+/* &&ID_LABEL (GCC) */
+struct AST_label_address { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  id_label sameregion id_label;
+};
+
+/* (ASTTYPE)ARG1 */
+struct AST_cast { /* extends unary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  asttype sameregion asttype;
+};
+
+/* (ASTTYPE){INIT_EXPR} (GCC) */
+struct AST_cast_list { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  asttype sameregion asttype;
+  expression sameregion init_expr;
+};
+
+/* CONDITION ? ARG1 : ARG2
+   GCC specific: ARG1 is optional */
+struct AST_conditional { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion condition;
+  expression sameregion arg1;
+  expression sameregion arg2;
+};
+
+/* The identrifier CSTRING
+DEAD_USE is true for identifiers used as the target of a regular assignment */
+struct AST_identifier { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  cstring cstring;
+  data_declaration ddecl;
+};
+
+/* ({stmt}) (GCC) */
+struct AST_compound_expr { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  statement sameregion stmt;
+};
+
+/* ARG1(ARGS). ARGS is a list of expressions
+If VA_ARG_CALL is non-null, this is actually a call to the pseudo-function
+__builtin_va_arg(args, va_arg_call) (where va_arg_call is a type). In 
+this case arg1 is a dummy identifier.
+CALL_KIND is one of normal_call, post_task, command_call or event_signal. */
+struct AST_function_call { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion args;
+  asttype va_arg_call;
+  nesc_call_kind call_kind;
+};
+
+/* ARG1.CSTRING
+The field_declaration is saved in FDECL */
+struct AST_field_ref { /* extends unary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  cstring cstring;
+  field_declaration fdecl;
+};
+
+/* parent for increment nodes */
+struct AST_increment { /* extends unary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  data_declaration temp1;
+  data_declaration temp2;
+};
+
+/* binary comparison ops */
+struct AST_comparison { /* extends binary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion arg2;
+};
+
+/* ARG1 <assignop> ARG2 */
+struct AST_assignment { /* extends binary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion arg2;
+  data_declaration temp1;
+};
+
+/* { ARGS }. ARGS is a list of expressions
+The type of the init_list is the type of the initialised entity.
+If this entity is an incomplete array type, the type of the init_list
+is the actual array size deduced from the initialiser. */
+struct AST_init_list { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion args;
+};
+
+/* DESIGNATOR = INIT_EXPR in an init_list.
+DESIGNATOR is a list
+The type is not set in init_specific nodes */
+struct AST_init_specific { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  designator sameregion designator;
+  expression sameregion init_expr;
+};
+
+/* Base type for designators */
+struct AST_designator { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+};
+
+/* . CSTRING in an initialisation designator */
+struct AST_designate_field { /* extends designator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+};
+
+/* [ARG1] or [ARG1 ... ARG2] in a designator. ARG2 is optional.
+ARG2 is a GCC extension */
+struct AST_designate_index { /* extends designator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  expression sameregion arg1;
+  expression sameregion arg2;
+};
+
+/* A constant represented as in its unparsed lexical form CSTRING. These
+appear in the AST. */
+struct AST_lexical_cst { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  cstring cstring;
+};
+
+/* A single lexical string - a sequence of these gets concatenated to
+form a string. The source form of the constant can be found in
+CSTRING. */
+struct AST_string_cst { /* extends lexical_cst */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  cstring cstring;
+};
+
+/* A list of STRINGS forming a single string constant.
+DDECL is the magic_string declaration for this string. */
+struct AST_string { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  string_cst sameregion strings;
+  data_declaration ddecl;
+};
+
+/* The label CSTRING: */
+struct AST_id_label { /* extends label */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  label next_label;
+  cstring cstring;
+  label_declaration ldecl;
+};
+
+/* CASE ARG1 ... ARG2: ARG2 is optional, it's presence is GCC-specific */
+struct AST_case_label { /* extends label */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  label next_label;
+  expression sameregion arg1;
+  expression sameregion arg2;
+};
+
+/* DEFAULT: */
+struct AST_default_label { /* extends label */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  label next_label;
+};
+
+/* The identifier CSTRING used uninterpreted */
+struct AST_word { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+};
+
+/* STRING(EXPR) or [WORD1] STRING(EXPR) (GCC) */
+struct AST_asm_operand { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  string sameregion string;
+  expression sameregion arg1;
+};
+
+/* a supertype for interface/component declarations of WORD1
+CDECL is the declaration for this interface/component
+ATTRIBUTES are its attributes */
+struct AST_nesc_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  nesc_declaration cdecl;
+};
+
+/* interface WORD1 { DECLS } */
+struct AST_interface { /* extends nesc_decl */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  nesc_declaration cdecl;
+  declaration sameregion decls;
+};
+
+/* ABSTRACT configuration/module WORD1 PARMS { DECLS } IMPLEMENTATION
+If ABSTRACT is true, this is a generic component, and PARMS is its
+parameters. */
+struct AST_component { /* extends nesc_decl */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  attribute sameregion attributes;
+  nesc_declaration cdecl;
+  bool abstract;
+  declaration sameregion parms;
+  declaration sameregion decls;
+  implementation sameregion implementation;
+};
+
+/* a base type for module and configuration implementations
+IENV is the implementation's environment
+CDECL is the declaration for this component */
+struct AST_implementation { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  environment ienv;
+  nesc_declaration cdecl;
+};
+
+/* configuration implementation { DECLS }
+where DECLS include regular declarations, component_refs and connections */
+struct AST_configuration { /* extends implementation */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  environment ienv;
+  nesc_declaration cdecl;
+  declaration sameregion decls;
+};
+
+/* module implementation { DECLS }' */
+struct AST_module { /* extends implementation */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  environment ienv;
+  nesc_declaration cdecl;
+  declaration sameregion decls;
+};
+
+/* binary component implementation placeholder */
+struct AST_binary_component { /* extends implementation */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  environment ienv;
+  nesc_declaration cdecl;
+};
+
+/* a required or provided function or interface declaration (DECL is
+either a data_decl or an interface_ref). REQUIRED is true for 'requires',
+false for 'provides' clauses */
+struct AST_rp_interface { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool required;
+  declaration sameregion decls;
+};
+
+/* an interface which is required or provided by a component:
+interface WORD1 < ARGS > WORD2 [ GPARMS ] ATTRIBUTES
+ARGS is a list of type_arguments for template interfaces
+WORD2 is optional, GPARMS, ARGS, ATTRIBUTES are optional */
+struct AST_interface_ref { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  expression sameregion args;
+  word sameregion word2;
+  declaration sameregion gparms;
+  attribute sameregion attributes;
+  data_declaration ddecl;
+};
+
+/* a reference to component WORD1 'as' WORD2
+WORD2 is optional
+ABSTRACT is true for abstract component instantiations, false otherwise
+ARGS is the argument list for abstract component instantiations
+CDECL is filled in to point to the loaded component */
+struct AST_component_ref { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  word sameregion word2;
+  bool abstract;
+  expression sameregion args;
+  nesc_declaration cdecl;
+};
+
+/* A connection between interfaces EP1 and EP2 */
+struct AST_connection { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  endpoint sameregion ep1;
+  endpoint sameregion ep2;
+};
+
+/* a list of parameterised_identifier in IDS */
+struct AST_endpoint { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  parameterised_identifier sameregion ids;
+};
+
+/* WORD1[ARGS] if ARGS != null, just WORD1 otherwise */
+struct AST_parameterised_identifier { /* extends node */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  expression sameregion args;
+};
+
+/* parameterised declaration DECLARATOR [ PARMS ] */
+struct AST_generic_declarator { /* extends declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  declaration sameregion parms;
+};
+
+/* ARG1[ARGS]. ARGS is a list of expressions, ARG1 is a generic function */
+struct AST_generic_call { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  expression sameregion args;
+};
+
+/* WORD1 . DECLARATOR in a declarator (for defining commands, events in component
+implementations
+For now at least, DECLARATOR is always an identifier_declarator */
+struct AST_interface_ref_declarator { /* extends nested_declarator */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  declarator sameregion declarator;
+  word sameregion word1;
+};
+
+/* ARG1.CSTRING where ARG1 is an interface_ref.
+DDECL is the command or event's declaration */
+struct AST_interface_deref { /* extends unary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  cstring cstring;
+  data_declaration ddecl;
+};
+
+/* ARG1.CSTRING where ARG1 is a component_ref.
+component_deref is *not* used for references to typedefed types in components.
+DDECL is the specification element's declaration */
+struct AST_component_deref { /* extends unary */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  expression sameregion arg1;
+  cstring cstring;
+  data_declaration ddecl;
+};
+
+/* CSTRING . typedef-name, a typedef-from-component-type 
+with declaration DDECL. The typedef-name is in ddecl->name */
+struct AST_component_typeref { /* extends typename */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  data_declaration ddecl;
+  cstring cstring;
+};
+
+/* ATOMIC stmt
+An atomic_stmt is not made for lexically nested atomic statements */
+struct AST_atomic_stmt { /* extends statement */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  statement parent_loop;
+  atomic_stmt containing_atomic;
+  atomic_t isatomic;
+  statement sameregion stmt;
+};
+
+/* @WORD1(ARG1), a nesC attribute. ARG1 is an init_list.
+TDECL is the reference to the declaration of attribute WORD1 */
+struct AST_nesc_attribute { /* extends attribute */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  word sameregion word1;
+  expression sameregion arg1;
+  tag_declaration tdecl;
+};
+
+/* A declaration of type parameter CSTRING */
+struct AST_type_parm_decl { /* extends declaration */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  cstring cstring;
+  data_declaration ddecl;
+};
+
+/* ASTTYPE used as a template argument */
+struct AST_type_argument { /* extends expression */
+  AST_kind kind;
+  location location;
+  node sameregion next;
+  node sameregion parent;
+  node sameregion *sameregion parent_ptr;
+  node instantiation;
+  bool lvalue;
+  bool side_effects;
+  known_cst cst;
+  bool bitfield;
+  bool isregister;
+  type type;
+  known_cst static_address;
+  bool converted_to_pointer;
+  bool cst_checked;
+  const char * spelling;
+  bool parens;
+  ivalue ivalue;
+  context context;
+  atomic_t isatomic;
+  asttype sameregion asttype;
+};
+
+
+
+node new_node(region r, location location);
+declaration new_declaration(region r, location location);
+statement new_statement(region r, location location);
+expression new_expression(region r, location location);
+type_element new_type_element(region r, location location);
+declarator new_declarator(region r, location location);
+label new_label(region r, location location);
+asm_decl new_asm_decl(region r, location location, asm_stmt asm_stmt);
+data_decl new_data_decl(region r, location location, type_element modifiers, declaration decls);
+extension_decl new_extension_decl(region r, location location, declaration decl);
+ellipsis_decl new_ellipsis_decl(region r, location location);
+enumerator new_enumerator(region r, location location, cstring cstring, expression arg1, data_declaration ddecl);
+oldidentifier_decl new_oldidentifier_decl(region r, location location, cstring cstring, data_declaration ddecl);
+function_decl new_function_decl(region r, location location, declarator declarator, type_element modifiers, attribute attributes, declaration old_parms, statement stmt, function_decl parent_function, data_declaration ddecl);
+implicit_decl new_implicit_decl(region r, location location, identifier ident);
+variable_decl new_variable_decl(region r, location location, declarator declarator, attribute attributes, expression arg1, asm_stmt asm_stmt, data_declaration ddecl);
+field_decl new_field_decl(region r, location location, declarator declarator, attribute attributes, expression arg1);
+asttype new_asttype(region r, location location, declarator declarator, type_element qualifiers);
+typename new_typename(region r, location location, data_declaration ddecl);
+typeof_expr new_typeof_expr(region r, location location, expression arg1);
+typeof_type new_typeof_type(region r, location location, asttype asttype);
+attribute new_attribute(region r, location location, word word1);
+gcc_attribute new_gcc_attribute(region r, location location, word word1, expression args);
+rid new_rid(region r, location location, enum rid id);
+qualifier new_qualifier(region r, location location, enum rid id);
+tag_ref new_tag_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+struct_ref new_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+union_ref new_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+nested_declarator new_nested_declarator(region r, location location, declarator declarator);
+function_declarator new_function_declarator(region r, location location, declarator declarator, declaration parms, declaration gparms, type_element qualifiers, environment env);
+pointer_declarator new_pointer_declarator(region r, location location, declarator declarator);
+qualified_declarator new_qualified_declarator(region r, location location, declarator declarator, type_element modifiers);
+array_declarator new_array_declarator(region r, location location, declarator declarator, expression arg1);
+identifier_declarator new_identifier_declarator(region r, location location, cstring cstring);
+asm_stmt new_asm_stmt(region r, location location, expression arg1, asm_operand asm_operands1, asm_operand asm_operands2, string asm_clobbers, type_element qualifiers);
+compound_stmt new_compound_stmt(region r, location location, id_label id_labels, declaration decls, statement stmts, environment env);
+if_stmt new_if_stmt(region r, location location, expression condition, statement stmt1, statement stmt2);
+labeled_stmt new_labeled_stmt(region r, location location, label label, statement stmt);
+expression_stmt new_expression_stmt(region r, location location, expression arg1);
+conditional_stmt new_conditional_stmt(region r, location location, expression condition, statement stmt);
+switch_stmt new_switch_stmt(region r, location location, expression condition, statement stmt);
+for_stmt new_for_stmt(region r, location location, expression arg1, expression arg2, expression arg3, statement stmt);
+break_stmt new_break_stmt(region r, location location);
+continue_stmt new_continue_stmt(region r, location location);
+return_stmt new_return_stmt(region r, location location, expression arg1);
+goto_stmt new_goto_stmt(region r, location location, id_label id_label);
+computed_goto_stmt new_computed_goto_stmt(region r, location location, expression arg1);
+empty_stmt new_empty_stmt(region r, location location);
+unary new_unary(region r, location location, expression arg1);
+binary new_binary(region r, location location, expression arg1, expression arg2);
+comma new_comma(region r, location location, expression arg1);
+sizeof_type new_sizeof_type(region r, location location, asttype asttype);
+alignof_type new_alignof_type(region r, location location, asttype asttype);
+label_address new_label_address(region r, location location, id_label id_label);
+cast new_cast(region r, location location, expression arg1, asttype asttype);
+cast_list new_cast_list(region r, location location, asttype asttype, expression init_expr);
+conditional new_conditional(region r, location location, expression condition, expression arg1, expression arg2);
+identifier new_identifier(region r, location location, cstring cstring, data_declaration ddecl);
+compound_expr new_compound_expr(region r, location location, statement stmt);
+function_call new_function_call(region r, location location, expression arg1, expression args, asttype va_arg_call, nesc_call_kind call_kind);
+field_ref new_field_ref(region r, location location, expression arg1, cstring cstring);
+increment new_increment(region r, location location, expression arg1);
+comparison new_comparison(region r, location location, expression arg1, expression arg2);
+assignment new_assignment(region r, location location, expression arg1, expression arg2);
+init_list new_init_list(region r, location location, expression args);
+init_specific new_init_specific(region r, location location, designator designator, expression init_expr);
+designator new_designator(region r, location location);
+designate_field new_designate_field(region r, location location, cstring cstring);
+designate_index new_designate_index(region r, location location, expression arg1, expression arg2);
+lexical_cst new_lexical_cst(region r, location location, cstring cstring);
+string_cst new_string_cst(region r, location location, cstring cstring);
+string new_string(region r, location location, string_cst strings, data_declaration ddecl);
+id_label new_id_label(region r, location location, cstring cstring);
+case_label new_case_label(region r, location location, expression arg1, expression arg2);
+default_label new_default_label(region r, location location);
+word new_word(region r, location location, cstring cstring);
+asm_operand new_asm_operand(region r, location location, word word1, string string, expression arg1);
+nesc_decl new_nesc_decl(region r, location location, word word1, attribute attributes);
+interface new_interface(region r, location location, word word1, attribute attributes, declaration decls);
+component new_component(region r, location location, word word1, attribute attributes, bool abstract, declaration parms, declaration decls, implementation implementation);
+implementation new_implementation(region r, location location, environment ienv);
+configuration new_configuration(region r, location location, environment ienv, declaration decls);
+module new_module(region r, location location, environment ienv, declaration decls);
+binary_component new_binary_component(region r, location location, environment ienv);
+rp_interface new_rp_interface(region r, location location, bool required, declaration decls);
+interface_ref new_interface_ref(region r, location location, word word1, expression args, word word2, declaration gparms, attribute attributes, data_declaration ddecl);
+component_ref new_component_ref(region r, location location, word word1, word word2, bool abstract, expression args);
+connection new_connection(region r, location location, endpoint ep1, endpoint ep2);
+endpoint new_endpoint(region r, location location, parameterised_identifier ids);
+parameterised_identifier new_parameterised_identifier(region r, location location, word word1, expression args);
+generic_declarator new_generic_declarator(region r, location location, declarator declarator, declaration parms);
+generic_call new_generic_call(region r, location location, expression arg1, expression args);
+interface_ref_declarator new_interface_ref_declarator(region r, location location, declarator declarator, word word1);
+interface_deref new_interface_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl);
+component_deref new_component_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl);
+component_typeref new_component_typeref(region r, location location, data_declaration ddecl, cstring cstring);
+atomic_stmt new_atomic_stmt(region r, location location, statement stmt);
+nesc_attribute new_nesc_attribute(region r, location location, word word1, expression arg1);
+type_parm_decl new_type_parm_decl(region r, location location, cstring cstring, data_declaration ddecl);
+type_argument new_type_argument(region r, location location, asttype asttype);
+error_decl new_error_decl(region r, location location);
+attribute_ref new_attribute_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+enum_ref new_enum_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+error_stmt new_error_stmt(region r, location location);
+while_stmt new_while_stmt(region r, location location, expression condition, statement stmt);
+dowhile_stmt new_dowhile_stmt(region r, location location, expression condition, statement stmt);
+error_expr new_error_expr(region r, location location);
+array_ref new_array_ref(region r, location location, expression arg1, expression arg2);
+dereference new_dereference(region r, location location, expression arg1);
+extension_expr new_extension_expr(region r, location location, expression arg1);
+sizeof_expr new_sizeof_expr(region r, location location, expression arg1);
+alignof_expr new_alignof_expr(region r, location location, expression arg1);
+realpart new_realpart(region r, location location, expression arg1);
+imagpart new_imagpart(region r, location location, expression arg1);
+address_of new_address_of(region r, location location, expression arg1);
+unary_minus new_unary_minus(region r, location location, expression arg1);
+unary_plus new_unary_plus(region r, location location, expression arg1);
+conjugate new_conjugate(region r, location location, expression arg1);
+bitnot new_bitnot(region r, location location, expression arg1);
+not new_not(region r, location location, expression arg1);
+preincrement new_preincrement(region r, location location, expression arg1);
+predecrement new_predecrement(region r, location location, expression arg1);
+postincrement new_postincrement(region r, location location, expression arg1);
+postdecrement new_postdecrement(region r, location location, expression arg1);
+plus new_plus(region r, location location, expression arg1, expression arg2);
+minus new_minus(region r, location location, expression arg1, expression arg2);
+times new_times(region r, location location, expression arg1, expression arg2);
+divide new_divide(region r, location location, expression arg1, expression arg2);
+modulo new_modulo(region r, location location, expression arg1, expression arg2);
+lshift new_lshift(region r, location location, expression arg1, expression arg2);
+rshift new_rshift(region r, location location, expression arg1, expression arg2);
+leq new_leq(region r, location location, expression arg1, expression arg2);
+geq new_geq(region r, location location, expression arg1, expression arg2);
+lt new_lt(region r, location location, expression arg1, expression arg2);
+gt new_gt(region r, location location, expression arg1, expression arg2);
+eq new_eq(region r, location location, expression arg1, expression arg2);
+ne new_ne(region r, location location, expression arg1, expression arg2);
+bitand new_bitand(region r, location location, expression arg1, expression arg2);
+bitor new_bitor(region r, location location, expression arg1, expression arg2);
+bitxor new_bitxor(region r, location location, expression arg1, expression arg2);
+andand new_andand(region r, location location, expression arg1, expression arg2);
+oror new_oror(region r, location location, expression arg1, expression arg2);
+assign new_assign(region r, location location, expression arg1, expression arg2);
+plus_assign new_plus_assign(region r, location location, expression arg1, expression arg2);
+minus_assign new_minus_assign(region r, location location, expression arg1, expression arg2);
+times_assign new_times_assign(region r, location location, expression arg1, expression arg2);
+divide_assign new_divide_assign(region r, location location, expression arg1, expression arg2);
+modulo_assign new_modulo_assign(region r, location location, expression arg1, expression arg2);
+lshift_assign new_lshift_assign(region r, location location, expression arg1, expression arg2);
+rshift_assign new_rshift_assign(region r, location location, expression arg1, expression arg2);
+bitand_assign new_bitand_assign(region r, location location, expression arg1, expression arg2);
+bitor_assign new_bitor_assign(region r, location location, expression arg1, expression arg2);
+bitxor_assign new_bitxor_assign(region r, location location, expression arg1, expression arg2);
+rp_connection new_rp_connection(region r, location location, endpoint ep1, endpoint ep2);
+eq_connection new_eq_connection(region r, location location, endpoint ep1, endpoint ep2);
+nx_struct_ref new_nx_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
+nx_union_ref new_nx_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined);
diff --git a/src/AST_list_node.c b/src/AST_list_node.c
new file mode 100644 (file)
index 0000000..4c26b41
--- /dev/null
@@ -0,0 +1,511 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+node AST_node_last(node l){
+  if (!l) return NULL;
+  while (l->next) l = l->next;
+  return l;
+}
+
+node AST_node_chain(node l1, node l2){
+  if (!l1) return l2;
+  AST_node_last(l1)->next = l2;
+  return l1;
+}
+
+int AST_node_length(node l){
+  int len = 0;
+
+  while (l) 
+    {
+      l = l->next;
+      len++;
+    }
+  return len;
+}
+
+node AST_node_reverse(node l){
+  node last = NULL, next;
+
+  for (;;)
+    {
+      if (!l)
+        return last;
+      next = l->next;
+      l->next = last;
+      last = l;
+      l = next;
+    }
+}
+
+node node_chain(node l1, node l2)
+{ return CAST(node, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+declaration declaration_chain(declaration l1, declaration l2)
+{ return CAST(declaration, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+statement statement_chain(statement l1, statement l2)
+{ return CAST(statement, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+expression expression_chain(expression l1, expression l2)
+{ return CAST(expression, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+type_element type_element_chain(type_element l1, type_element l2)
+{ return CAST(type_element, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+declarator declarator_chain(declarator l1, declarator l2)
+{ return CAST(declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+label label_chain(label l1, label l2)
+{ return CAST(label, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+asm_decl asm_decl_chain(asm_decl l1, asm_decl l2)
+{ return CAST(asm_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+data_decl data_decl_chain(data_decl l1, data_decl l2)
+{ return CAST(data_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+extension_decl extension_decl_chain(extension_decl l1, extension_decl l2)
+{ return CAST(extension_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+ellipsis_decl ellipsis_decl_chain(ellipsis_decl l1, ellipsis_decl l2)
+{ return CAST(ellipsis_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+enumerator enumerator_chain(enumerator l1, enumerator l2)
+{ return CAST(enumerator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+oldidentifier_decl oldidentifier_decl_chain(oldidentifier_decl l1, oldidentifier_decl l2)
+{ return CAST(oldidentifier_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+function_decl function_decl_chain(function_decl l1, function_decl l2)
+{ return CAST(function_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+implicit_decl implicit_decl_chain(implicit_decl l1, implicit_decl l2)
+{ return CAST(implicit_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+variable_decl variable_decl_chain(variable_decl l1, variable_decl l2)
+{ return CAST(variable_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+field_decl field_decl_chain(field_decl l1, field_decl l2)
+{ return CAST(field_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+asttype asttype_chain(asttype l1, asttype l2)
+{ return CAST(asttype, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+typename typename_chain(typename l1, typename l2)
+{ return CAST(typename, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+typeof_expr typeof_expr_chain(typeof_expr l1, typeof_expr l2)
+{ return CAST(typeof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+typeof_type typeof_type_chain(typeof_type l1, typeof_type l2)
+{ return CAST(typeof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+attribute attribute_chain(attribute l1, attribute l2)
+{ return CAST(attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+gcc_attribute gcc_attribute_chain(gcc_attribute l1, gcc_attribute l2)
+{ return CAST(gcc_attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+rid rid_chain(rid l1, rid l2)
+{ return CAST(rid, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+qualifier qualifier_chain(qualifier l1, qualifier l2)
+{ return CAST(qualifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+tag_ref tag_ref_chain(tag_ref l1, tag_ref l2)
+{ return CAST(tag_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+struct_ref struct_ref_chain(struct_ref l1, struct_ref l2)
+{ return CAST(struct_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+union_ref union_ref_chain(union_ref l1, union_ref l2)
+{ return CAST(union_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+nested_declarator nested_declarator_chain(nested_declarator l1, nested_declarator l2)
+{ return CAST(nested_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+function_declarator function_declarator_chain(function_declarator l1, function_declarator l2)
+{ return CAST(function_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+pointer_declarator pointer_declarator_chain(pointer_declarator l1, pointer_declarator l2)
+{ return CAST(pointer_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+qualified_declarator qualified_declarator_chain(qualified_declarator l1, qualified_declarator l2)
+{ return CAST(qualified_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+array_declarator array_declarator_chain(array_declarator l1, array_declarator l2)
+{ return CAST(array_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+identifier_declarator identifier_declarator_chain(identifier_declarator l1, identifier_declarator l2)
+{ return CAST(identifier_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+asm_stmt asm_stmt_chain(asm_stmt l1, asm_stmt l2)
+{ return CAST(asm_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+compound_stmt compound_stmt_chain(compound_stmt l1, compound_stmt l2)
+{ return CAST(compound_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+if_stmt if_stmt_chain(if_stmt l1, if_stmt l2)
+{ return CAST(if_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+labeled_stmt labeled_stmt_chain(labeled_stmt l1, labeled_stmt l2)
+{ return CAST(labeled_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+expression_stmt expression_stmt_chain(expression_stmt l1, expression_stmt l2)
+{ return CAST(expression_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+conditional_stmt conditional_stmt_chain(conditional_stmt l1, conditional_stmt l2)
+{ return CAST(conditional_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+switch_stmt switch_stmt_chain(switch_stmt l1, switch_stmt l2)
+{ return CAST(switch_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+for_stmt for_stmt_chain(for_stmt l1, for_stmt l2)
+{ return CAST(for_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+break_stmt break_stmt_chain(break_stmt l1, break_stmt l2)
+{ return CAST(break_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+continue_stmt continue_stmt_chain(continue_stmt l1, continue_stmt l2)
+{ return CAST(continue_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+return_stmt return_stmt_chain(return_stmt l1, return_stmt l2)
+{ return CAST(return_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+goto_stmt goto_stmt_chain(goto_stmt l1, goto_stmt l2)
+{ return CAST(goto_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+computed_goto_stmt computed_goto_stmt_chain(computed_goto_stmt l1, computed_goto_stmt l2)
+{ return CAST(computed_goto_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+empty_stmt empty_stmt_chain(empty_stmt l1, empty_stmt l2)
+{ return CAST(empty_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+unary unary_chain(unary l1, unary l2)
+{ return CAST(unary, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+binary binary_chain(binary l1, binary l2)
+{ return CAST(binary, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+comma comma_chain(comma l1, comma l2)
+{ return CAST(comma, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+sizeof_type sizeof_type_chain(sizeof_type l1, sizeof_type l2)
+{ return CAST(sizeof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+alignof_type alignof_type_chain(alignof_type l1, alignof_type l2)
+{ return CAST(alignof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+label_address label_address_chain(label_address l1, label_address l2)
+{ return CAST(label_address, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+cast cast_chain(cast l1, cast l2)
+{ return CAST(cast, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+cast_list cast_list_chain(cast_list l1, cast_list l2)
+{ return CAST(cast_list, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+conditional conditional_chain(conditional l1, conditional l2)
+{ return CAST(conditional, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+identifier identifier_chain(identifier l1, identifier l2)
+{ return CAST(identifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+compound_expr compound_expr_chain(compound_expr l1, compound_expr l2)
+{ return CAST(compound_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+function_call function_call_chain(function_call l1, function_call l2)
+{ return CAST(function_call, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+field_ref field_ref_chain(field_ref l1, field_ref l2)
+{ return CAST(field_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+increment increment_chain(increment l1, increment l2)
+{ return CAST(increment, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+comparison comparison_chain(comparison l1, comparison l2)
+{ return CAST(comparison, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+assignment assignment_chain(assignment l1, assignment l2)
+{ return CAST(assignment, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+init_list init_list_chain(init_list l1, init_list l2)
+{ return CAST(init_list, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+init_specific init_specific_chain(init_specific l1, init_specific l2)
+{ return CAST(init_specific, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+designator designator_chain(designator l1, designator l2)
+{ return CAST(designator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+designate_field designate_field_chain(designate_field l1, designate_field l2)
+{ return CAST(designate_field, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+designate_index designate_index_chain(designate_index l1, designate_index l2)
+{ return CAST(designate_index, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+lexical_cst lexical_cst_chain(lexical_cst l1, lexical_cst l2)
+{ return CAST(lexical_cst, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+string_cst string_cst_chain(string_cst l1, string_cst l2)
+{ return CAST(string_cst, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+string string_chain(string l1, string l2)
+{ return CAST(string, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+id_label id_label_chain(id_label l1, id_label l2)
+{ return CAST(id_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+case_label case_label_chain(case_label l1, case_label l2)
+{ return CAST(case_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+default_label default_label_chain(default_label l1, default_label l2)
+{ return CAST(default_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+word word_chain(word l1, word l2)
+{ return CAST(word, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+asm_operand asm_operand_chain(asm_operand l1, asm_operand l2)
+{ return CAST(asm_operand, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+nesc_decl nesc_decl_chain(nesc_decl l1, nesc_decl l2)
+{ return CAST(nesc_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+interface interface_chain(interface l1, interface l2)
+{ return CAST(interface, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+component component_chain(component l1, component l2)
+{ return CAST(component, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+implementation implementation_chain(implementation l1, implementation l2)
+{ return CAST(implementation, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+configuration configuration_chain(configuration l1, configuration l2)
+{ return CAST(configuration, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+module module_chain(module l1, module l2)
+{ return CAST(module, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+binary_component binary_component_chain(binary_component l1, binary_component l2)
+{ return CAST(binary_component, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+rp_interface rp_interface_chain(rp_interface l1, rp_interface l2)
+{ return CAST(rp_interface, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+interface_ref interface_ref_chain(interface_ref l1, interface_ref l2)
+{ return CAST(interface_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+component_ref component_ref_chain(component_ref l1, component_ref l2)
+{ return CAST(component_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+connection connection_chain(connection l1, connection l2)
+{ return CAST(connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+endpoint endpoint_chain(endpoint l1, endpoint l2)
+{ return CAST(endpoint, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+parameterised_identifier parameterised_identifier_chain(parameterised_identifier l1, parameterised_identifier l2)
+{ return CAST(parameterised_identifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+generic_declarator generic_declarator_chain(generic_declarator l1, generic_declarator l2)
+{ return CAST(generic_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+generic_call generic_call_chain(generic_call l1, generic_call l2)
+{ return CAST(generic_call, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+interface_ref_declarator interface_ref_declarator_chain(interface_ref_declarator l1, interface_ref_declarator l2)
+{ return CAST(interface_ref_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+interface_deref interface_deref_chain(interface_deref l1, interface_deref l2)
+{ return CAST(interface_deref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+component_deref component_deref_chain(component_deref l1, component_deref l2)
+{ return CAST(component_deref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+component_typeref component_typeref_chain(component_typeref l1, component_typeref l2)
+{ return CAST(component_typeref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+atomic_stmt atomic_stmt_chain(atomic_stmt l1, atomic_stmt l2)
+{ return CAST(atomic_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+nesc_attribute nesc_attribute_chain(nesc_attribute l1, nesc_attribute l2)
+{ return CAST(nesc_attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+type_parm_decl type_parm_decl_chain(type_parm_decl l1, type_parm_decl l2)
+{ return CAST(type_parm_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+type_argument type_argument_chain(type_argument l1, type_argument l2)
+{ return CAST(type_argument, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+error_decl error_decl_chain(error_decl l1, error_decl l2)
+{ return CAST(error_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+attribute_ref attribute_ref_chain(attribute_ref l1, attribute_ref l2)
+{ return CAST(attribute_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+enum_ref enum_ref_chain(enum_ref l1, enum_ref l2)
+{ return CAST(enum_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+error_stmt error_stmt_chain(error_stmt l1, error_stmt l2)
+{ return CAST(error_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+while_stmt while_stmt_chain(while_stmt l1, while_stmt l2)
+{ return CAST(while_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+dowhile_stmt dowhile_stmt_chain(dowhile_stmt l1, dowhile_stmt l2)
+{ return CAST(dowhile_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+error_expr error_expr_chain(error_expr l1, error_expr l2)
+{ return CAST(error_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+array_ref array_ref_chain(array_ref l1, array_ref l2)
+{ return CAST(array_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+dereference dereference_chain(dereference l1, dereference l2)
+{ return CAST(dereference, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+extension_expr extension_expr_chain(extension_expr l1, extension_expr l2)
+{ return CAST(extension_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+sizeof_expr sizeof_expr_chain(sizeof_expr l1, sizeof_expr l2)
+{ return CAST(sizeof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+alignof_expr alignof_expr_chain(alignof_expr l1, alignof_expr l2)
+{ return CAST(alignof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+realpart realpart_chain(realpart l1, realpart l2)
+{ return CAST(realpart, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+imagpart imagpart_chain(imagpart l1, imagpart l2)
+{ return CAST(imagpart, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+address_of address_of_chain(address_of l1, address_of l2)
+{ return CAST(address_of, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+unary_minus unary_minus_chain(unary_minus l1, unary_minus l2)
+{ return CAST(unary_minus, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+unary_plus unary_plus_chain(unary_plus l1, unary_plus l2)
+{ return CAST(unary_plus, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+conjugate conjugate_chain(conjugate l1, conjugate l2)
+{ return CAST(conjugate, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitnot bitnot_chain(bitnot l1, bitnot l2)
+{ return CAST(bitnot, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+not not_chain(not l1, not l2)
+{ return CAST(not, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+preincrement preincrement_chain(preincrement l1, preincrement l2)
+{ return CAST(preincrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+predecrement predecrement_chain(predecrement l1, predecrement l2)
+{ return CAST(predecrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+postincrement postincrement_chain(postincrement l1, postincrement l2)
+{ return CAST(postincrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+postdecrement postdecrement_chain(postdecrement l1, postdecrement l2)
+{ return CAST(postdecrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+plus plus_chain(plus l1, plus l2)
+{ return CAST(plus, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+minus minus_chain(minus l1, minus l2)
+{ return CAST(minus, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+times times_chain(times l1, times l2)
+{ return CAST(times, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+divide divide_chain(divide l1, divide l2)
+{ return CAST(divide, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+modulo modulo_chain(modulo l1, modulo l2)
+{ return CAST(modulo, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+lshift lshift_chain(lshift l1, lshift l2)
+{ return CAST(lshift, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+rshift rshift_chain(rshift l1, rshift l2)
+{ return CAST(rshift, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+leq leq_chain(leq l1, leq l2)
+{ return CAST(leq, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+geq geq_chain(geq l1, geq l2)
+{ return CAST(geq, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+lt lt_chain(lt l1, lt l2)
+{ return CAST(lt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+gt gt_chain(gt l1, gt l2)
+{ return CAST(gt, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+eq eq_chain(eq l1, eq l2)
+{ return CAST(eq, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+ne ne_chain(ne l1, ne l2)
+{ return CAST(ne, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitand bitand_chain(bitand l1, bitand l2)
+{ return CAST(bitand, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitor bitor_chain(bitor l1, bitor l2)
+{ return CAST(bitor, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitxor bitxor_chain(bitxor l1, bitxor l2)
+{ return CAST(bitxor, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+andand andand_chain(andand l1, andand l2)
+{ return CAST(andand, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+oror oror_chain(oror l1, oror l2)
+{ return CAST(oror, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+assign assign_chain(assign l1, assign l2)
+{ return CAST(assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+plus_assign plus_assign_chain(plus_assign l1, plus_assign l2)
+{ return CAST(plus_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+minus_assign minus_assign_chain(minus_assign l1, minus_assign l2)
+{ return CAST(minus_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+times_assign times_assign_chain(times_assign l1, times_assign l2)
+{ return CAST(times_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+divide_assign divide_assign_chain(divide_assign l1, divide_assign l2)
+{ return CAST(divide_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+modulo_assign modulo_assign_chain(modulo_assign l1, modulo_assign l2)
+{ return CAST(modulo_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+lshift_assign lshift_assign_chain(lshift_assign l1, lshift_assign l2)
+{ return CAST(lshift_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+rshift_assign rshift_assign_chain(rshift_assign l1, rshift_assign l2)
+{ return CAST(rshift_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitand_assign bitand_assign_chain(bitand_assign l1, bitand_assign l2)
+{ return CAST(bitand_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitor_assign bitor_assign_chain(bitor_assign l1, bitor_assign l2)
+{ return CAST(bitor_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+bitxor_assign bitxor_assign_chain(bitxor_assign l1, bitxor_assign l2)
+{ return CAST(bitxor_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+rp_connection rp_connection_chain(rp_connection l1, rp_connection l2)
+{ return CAST(rp_connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+eq_connection eq_connection_chain(eq_connection l1, eq_connection l2)
+{ return CAST(eq_connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+nx_struct_ref nx_struct_ref_chain(nx_struct_ref l1, nx_struct_ref l2)
+{ return CAST(nx_struct_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
+nx_union_ref nx_union_ref_chain(nx_union_ref l1, nx_union_ref l2)
+{ return CAST(nx_union_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); }
+
diff --git a/src/AST_list_node.h b/src/AST_list_node.h
new file mode 100644 (file)
index 0000000..bcf6b9b
--- /dev/null
@@ -0,0 +1,792 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+node AST_node_last(node l);
+node AST_node_chain(node l1, node l2);
+int AST_node_length(node l);
+node AST_node_reverse(node l);
+#define node_reverse(x) CAST(node, AST_node_reverse(CAST(node, (x))))
+#define node_length(x) AST_node_length(CAST(node, (x)))
+#define last_node(x) CAST(node, AST_node_last(CAST(node, (x))))
+#define scan_node(var, list) for (var = (list); var; var = CAST(node, var->next))
+#define declaration_reverse(x) CAST(declaration, AST_node_reverse(CAST(node, (x))))
+#define declaration_length(x) AST_node_length(CAST(node, (x)))
+#define last_declaration(x) CAST(declaration, AST_node_last(CAST(node, (x))))
+#define scan_declaration(var, list) for (var = (list); var; var = CAST(declaration, var->next))
+#define statement_reverse(x) CAST(statement, AST_node_reverse(CAST(node, (x))))
+#define statement_length(x) AST_node_length(CAST(node, (x)))
+#define last_statement(x) CAST(statement, AST_node_last(CAST(node, (x))))
+#define scan_statement(var, list) for (var = (list); var; var = CAST(statement, var->next))
+#define expression_reverse(x) CAST(expression, AST_node_reverse(CAST(node, (x))))
+#define expression_length(x) AST_node_length(CAST(node, (x)))
+#define last_expression(x) CAST(expression, AST_node_last(CAST(node, (x))))
+#define scan_expression(var, list) for (var = (list); var; var = CAST(expression, var->next))
+#define type_element_reverse(x) CAST(type_element, AST_node_reverse(CAST(node, (x))))
+#define type_element_length(x) AST_node_length(CAST(node, (x)))
+#define last_type_element(x) CAST(type_element, AST_node_last(CAST(node, (x))))
+#define scan_type_element(var, list) for (var = (list); var; var = CAST(type_element, var->next))
+#define declarator_reverse(x) CAST(declarator, AST_node_reverse(CAST(node, (x))))
+#define declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_declarator(x) CAST(declarator, AST_node_last(CAST(node, (x))))
+#define scan_declarator(var, list) for (var = (list); var; var = CAST(declarator, var->next))
+#define label_reverse(x) CAST(label, AST_node_reverse(CAST(node, (x))))
+#define label_length(x) AST_node_length(CAST(node, (x)))
+#define last_label(x) CAST(label, AST_node_last(CAST(node, (x))))
+#define scan_label(var, list) for (var = (list); var; var = CAST(label, var->next))
+#define asm_decl_reverse(x) CAST(asm_decl, AST_node_reverse(CAST(node, (x))))
+#define asm_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_asm_decl(x) CAST(asm_decl, AST_node_last(CAST(node, (x))))
+#define scan_asm_decl(var, list) for (var = (list); var; var = CAST(asm_decl, var->next))
+#define data_decl_reverse(x) CAST(data_decl, AST_node_reverse(CAST(node, (x))))
+#define data_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_data_decl(x) CAST(data_decl, AST_node_last(CAST(node, (x))))
+#define scan_data_decl(var, list) for (var = (list); var; var = CAST(data_decl, var->next))
+#define extension_decl_reverse(x) CAST(extension_decl, AST_node_reverse(CAST(node, (x))))
+#define extension_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_extension_decl(x) CAST(extension_decl, AST_node_last(CAST(node, (x))))
+#define scan_extension_decl(var, list) for (var = (list); var; var = CAST(extension_decl, var->next))
+#define ellipsis_decl_reverse(x) CAST(ellipsis_decl, AST_node_reverse(CAST(node, (x))))
+#define ellipsis_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_ellipsis_decl(x) CAST(ellipsis_decl, AST_node_last(CAST(node, (x))))
+#define scan_ellipsis_decl(var, list) for (var = (list); var; var = CAST(ellipsis_decl, var->next))
+#define enumerator_reverse(x) CAST(enumerator, AST_node_reverse(CAST(node, (x))))
+#define enumerator_length(x) AST_node_length(CAST(node, (x)))
+#define last_enumerator(x) CAST(enumerator, AST_node_last(CAST(node, (x))))
+#define scan_enumerator(var, list) for (var = (list); var; var = CAST(enumerator, var->next))
+#define oldidentifier_decl_reverse(x) CAST(oldidentifier_decl, AST_node_reverse(CAST(node, (x))))
+#define oldidentifier_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_oldidentifier_decl(x) CAST(oldidentifier_decl, AST_node_last(CAST(node, (x))))
+#define scan_oldidentifier_decl(var, list) for (var = (list); var; var = CAST(oldidentifier_decl, var->next))
+#define function_decl_reverse(x) CAST(function_decl, AST_node_reverse(CAST(node, (x))))
+#define function_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_function_decl(x) CAST(function_decl, AST_node_last(CAST(node, (x))))
+#define scan_function_decl(var, list) for (var = (list); var; var = CAST(function_decl, var->next))
+#define implicit_decl_reverse(x) CAST(implicit_decl, AST_node_reverse(CAST(node, (x))))
+#define implicit_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_implicit_decl(x) CAST(implicit_decl, AST_node_last(CAST(node, (x))))
+#define scan_implicit_decl(var, list) for (var = (list); var; var = CAST(implicit_decl, var->next))
+#define variable_decl_reverse(x) CAST(variable_decl, AST_node_reverse(CAST(node, (x))))
+#define variable_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_variable_decl(x) CAST(variable_decl, AST_node_last(CAST(node, (x))))
+#define scan_variable_decl(var, list) for (var = (list); var; var = CAST(variable_decl, var->next))
+#define field_decl_reverse(x) CAST(field_decl, AST_node_reverse(CAST(node, (x))))
+#define field_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_field_decl(x) CAST(field_decl, AST_node_last(CAST(node, (x))))
+#define scan_field_decl(var, list) for (var = (list); var; var = CAST(field_decl, var->next))
+#define asttype_reverse(x) CAST(asttype, AST_node_reverse(CAST(node, (x))))
+#define asttype_length(x) AST_node_length(CAST(node, (x)))
+#define last_asttype(x) CAST(asttype, AST_node_last(CAST(node, (x))))
+#define scan_asttype(var, list) for (var = (list); var; var = CAST(asttype, var->next))
+#define typename_reverse(x) CAST(typename, AST_node_reverse(CAST(node, (x))))
+#define typename_length(x) AST_node_length(CAST(node, (x)))
+#define last_typename(x) CAST(typename, AST_node_last(CAST(node, (x))))
+#define scan_typename(var, list) for (var = (list); var; var = CAST(typename, var->next))
+#define typeof_expr_reverse(x) CAST(typeof_expr, AST_node_reverse(CAST(node, (x))))
+#define typeof_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_typeof_expr(x) CAST(typeof_expr, AST_node_last(CAST(node, (x))))
+#define scan_typeof_expr(var, list) for (var = (list); var; var = CAST(typeof_expr, var->next))
+#define typeof_type_reverse(x) CAST(typeof_type, AST_node_reverse(CAST(node, (x))))
+#define typeof_type_length(x) AST_node_length(CAST(node, (x)))
+#define last_typeof_type(x) CAST(typeof_type, AST_node_last(CAST(node, (x))))
+#define scan_typeof_type(var, list) for (var = (list); var; var = CAST(typeof_type, var->next))
+#define attribute_reverse(x) CAST(attribute, AST_node_reverse(CAST(node, (x))))
+#define attribute_length(x) AST_node_length(CAST(node, (x)))
+#define last_attribute(x) CAST(attribute, AST_node_last(CAST(node, (x))))
+#define scan_attribute(var, list) for (var = (list); var; var = CAST(attribute, var->next))
+#define gcc_attribute_reverse(x) CAST(gcc_attribute, AST_node_reverse(CAST(node, (x))))
+#define gcc_attribute_length(x) AST_node_length(CAST(node, (x)))
+#define last_gcc_attribute(x) CAST(gcc_attribute, AST_node_last(CAST(node, (x))))
+#define scan_gcc_attribute(var, list) for (var = (list); var; var = CAST(gcc_attribute, var->next))
+#define rid_reverse(x) CAST(rid, AST_node_reverse(CAST(node, (x))))
+#define rid_length(x) AST_node_length(CAST(node, (x)))
+#define last_rid(x) CAST(rid, AST_node_last(CAST(node, (x))))
+#define scan_rid(var, list) for (var = (list); var; var = CAST(rid, var->next))
+#define qualifier_reverse(x) CAST(qualifier, AST_node_reverse(CAST(node, (x))))
+#define qualifier_length(x) AST_node_length(CAST(node, (x)))
+#define last_qualifier(x) CAST(qualifier, AST_node_last(CAST(node, (x))))
+#define scan_qualifier(var, list) for (var = (list); var; var = CAST(qualifier, var->next))
+#define tag_ref_reverse(x) CAST(tag_ref, AST_node_reverse(CAST(node, (x))))
+#define tag_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_tag_ref(x) CAST(tag_ref, AST_node_last(CAST(node, (x))))
+#define scan_tag_ref(var, list) for (var = (list); var; var = CAST(tag_ref, var->next))
+#define struct_ref_reverse(x) CAST(struct_ref, AST_node_reverse(CAST(node, (x))))
+#define struct_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_struct_ref(x) CAST(struct_ref, AST_node_last(CAST(node, (x))))
+#define scan_struct_ref(var, list) for (var = (list); var; var = CAST(struct_ref, var->next))
+#define union_ref_reverse(x) CAST(union_ref, AST_node_reverse(CAST(node, (x))))
+#define union_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_union_ref(x) CAST(union_ref, AST_node_last(CAST(node, (x))))
+#define scan_union_ref(var, list) for (var = (list); var; var = CAST(union_ref, var->next))
+#define nested_declarator_reverse(x) CAST(nested_declarator, AST_node_reverse(CAST(node, (x))))
+#define nested_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_nested_declarator(x) CAST(nested_declarator, AST_node_last(CAST(node, (x))))
+#define scan_nested_declarator(var, list) for (var = (list); var; var = CAST(nested_declarator, var->next))
+#define function_declarator_reverse(x) CAST(function_declarator, AST_node_reverse(CAST(node, (x))))
+#define function_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_function_declarator(x) CAST(function_declarator, AST_node_last(CAST(node, (x))))
+#define scan_function_declarator(var, list) for (var = (list); var; var = CAST(function_declarator, var->next))
+#define pointer_declarator_reverse(x) CAST(pointer_declarator, AST_node_reverse(CAST(node, (x))))
+#define pointer_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_pointer_declarator(x) CAST(pointer_declarator, AST_node_last(CAST(node, (x))))
+#define scan_pointer_declarator(var, list) for (var = (list); var; var = CAST(pointer_declarator, var->next))
+#define qualified_declarator_reverse(x) CAST(qualified_declarator, AST_node_reverse(CAST(node, (x))))
+#define qualified_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_qualified_declarator(x) CAST(qualified_declarator, AST_node_last(CAST(node, (x))))
+#define scan_qualified_declarator(var, list) for (var = (list); var; var = CAST(qualified_declarator, var->next))
+#define array_declarator_reverse(x) CAST(array_declarator, AST_node_reverse(CAST(node, (x))))
+#define array_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_array_declarator(x) CAST(array_declarator, AST_node_last(CAST(node, (x))))
+#define scan_array_declarator(var, list) for (var = (list); var; var = CAST(array_declarator, var->next))
+#define identifier_declarator_reverse(x) CAST(identifier_declarator, AST_node_reverse(CAST(node, (x))))
+#define identifier_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_identifier_declarator(x) CAST(identifier_declarator, AST_node_last(CAST(node, (x))))
+#define scan_identifier_declarator(var, list) for (var = (list); var; var = CAST(identifier_declarator, var->next))
+#define asm_stmt_reverse(x) CAST(asm_stmt, AST_node_reverse(CAST(node, (x))))
+#define asm_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_asm_stmt(x) CAST(asm_stmt, AST_node_last(CAST(node, (x))))
+#define scan_asm_stmt(var, list) for (var = (list); var; var = CAST(asm_stmt, var->next))
+#define compound_stmt_reverse(x) CAST(compound_stmt, AST_node_reverse(CAST(node, (x))))
+#define compound_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_compound_stmt(x) CAST(compound_stmt, AST_node_last(CAST(node, (x))))
+#define scan_compound_stmt(var, list) for (var = (list); var; var = CAST(compound_stmt, var->next))
+#define if_stmt_reverse(x) CAST(if_stmt, AST_node_reverse(CAST(node, (x))))
+#define if_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_if_stmt(x) CAST(if_stmt, AST_node_last(CAST(node, (x))))
+#define scan_if_stmt(var, list) for (var = (list); var; var = CAST(if_stmt, var->next))
+#define labeled_stmt_reverse(x) CAST(labeled_stmt, AST_node_reverse(CAST(node, (x))))
+#define labeled_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_labeled_stmt(x) CAST(labeled_stmt, AST_node_last(CAST(node, (x))))
+#define scan_labeled_stmt(var, list) for (var = (list); var; var = CAST(labeled_stmt, var->next))
+#define expression_stmt_reverse(x) CAST(expression_stmt, AST_node_reverse(CAST(node, (x))))
+#define expression_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_expression_stmt(x) CAST(expression_stmt, AST_node_last(CAST(node, (x))))
+#define scan_expression_stmt(var, list) for (var = (list); var; var = CAST(expression_stmt, var->next))
+#define conditional_stmt_reverse(x) CAST(conditional_stmt, AST_node_reverse(CAST(node, (x))))
+#define conditional_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_conditional_stmt(x) CAST(conditional_stmt, AST_node_last(CAST(node, (x))))
+#define scan_conditional_stmt(var, list) for (var = (list); var; var = CAST(conditional_stmt, var->next))
+#define switch_stmt_reverse(x) CAST(switch_stmt, AST_node_reverse(CAST(node, (x))))
+#define switch_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_switch_stmt(x) CAST(switch_stmt, AST_node_last(CAST(node, (x))))
+#define scan_switch_stmt(var, list) for (var = (list); var; var = CAST(switch_stmt, var->next))
+#define for_stmt_reverse(x) CAST(for_stmt, AST_node_reverse(CAST(node, (x))))
+#define for_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_for_stmt(x) CAST(for_stmt, AST_node_last(CAST(node, (x))))
+#define scan_for_stmt(var, list) for (var = (list); var; var = CAST(for_stmt, var->next))
+#define break_stmt_reverse(x) CAST(break_stmt, AST_node_reverse(CAST(node, (x))))
+#define break_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_break_stmt(x) CAST(break_stmt, AST_node_last(CAST(node, (x))))
+#define scan_break_stmt(var, list) for (var = (list); var; var = CAST(break_stmt, var->next))
+#define continue_stmt_reverse(x) CAST(continue_stmt, AST_node_reverse(CAST(node, (x))))
+#define continue_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_continue_stmt(x) CAST(continue_stmt, AST_node_last(CAST(node, (x))))
+#define scan_continue_stmt(var, list) for (var = (list); var; var = CAST(continue_stmt, var->next))
+#define return_stmt_reverse(x) CAST(return_stmt, AST_node_reverse(CAST(node, (x))))
+#define return_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_return_stmt(x) CAST(return_stmt, AST_node_last(CAST(node, (x))))
+#define scan_return_stmt(var, list) for (var = (list); var; var = CAST(return_stmt, var->next))
+#define goto_stmt_reverse(x) CAST(goto_stmt, AST_node_reverse(CAST(node, (x))))
+#define goto_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_goto_stmt(x) CAST(goto_stmt, AST_node_last(CAST(node, (x))))
+#define scan_goto_stmt(var, list) for (var = (list); var; var = CAST(goto_stmt, var->next))
+#define computed_goto_stmt_reverse(x) CAST(computed_goto_stmt, AST_node_reverse(CAST(node, (x))))
+#define computed_goto_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_computed_goto_stmt(x) CAST(computed_goto_stmt, AST_node_last(CAST(node, (x))))
+#define scan_computed_goto_stmt(var, list) for (var = (list); var; var = CAST(computed_goto_stmt, var->next))
+#define empty_stmt_reverse(x) CAST(empty_stmt, AST_node_reverse(CAST(node, (x))))
+#define empty_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_empty_stmt(x) CAST(empty_stmt, AST_node_last(CAST(node, (x))))
+#define scan_empty_stmt(var, list) for (var = (list); var; var = CAST(empty_stmt, var->next))
+#define unary_reverse(x) CAST(unary, AST_node_reverse(CAST(node, (x))))
+#define unary_length(x) AST_node_length(CAST(node, (x)))
+#define last_unary(x) CAST(unary, AST_node_last(CAST(node, (x))))
+#define scan_unary(var, list) for (var = (list); var; var = CAST(unary, var->next))
+#define binary_reverse(x) CAST(binary, AST_node_reverse(CAST(node, (x))))
+#define binary_length(x) AST_node_length(CAST(node, (x)))
+#define last_binary(x) CAST(binary, AST_node_last(CAST(node, (x))))
+#define scan_binary(var, list) for (var = (list); var; var = CAST(binary, var->next))
+#define comma_reverse(x) CAST(comma, AST_node_reverse(CAST(node, (x))))
+#define comma_length(x) AST_node_length(CAST(node, (x)))
+#define last_comma(x) CAST(comma, AST_node_last(CAST(node, (x))))
+#define scan_comma(var, list) for (var = (list); var; var = CAST(comma, var->next))
+#define sizeof_type_reverse(x) CAST(sizeof_type, AST_node_reverse(CAST(node, (x))))
+#define sizeof_type_length(x) AST_node_length(CAST(node, (x)))
+#define last_sizeof_type(x) CAST(sizeof_type, AST_node_last(CAST(node, (x))))
+#define scan_sizeof_type(var, list) for (var = (list); var; var = CAST(sizeof_type, var->next))
+#define alignof_type_reverse(x) CAST(alignof_type, AST_node_reverse(CAST(node, (x))))
+#define alignof_type_length(x) AST_node_length(CAST(node, (x)))
+#define last_alignof_type(x) CAST(alignof_type, AST_node_last(CAST(node, (x))))
+#define scan_alignof_type(var, list) for (var = (list); var; var = CAST(alignof_type, var->next))
+#define label_address_reverse(x) CAST(label_address, AST_node_reverse(CAST(node, (x))))
+#define label_address_length(x) AST_node_length(CAST(node, (x)))
+#define last_label_address(x) CAST(label_address, AST_node_last(CAST(node, (x))))
+#define scan_label_address(var, list) for (var = (list); var; var = CAST(label_address, var->next))
+#define cast_reverse(x) CAST(cast, AST_node_reverse(CAST(node, (x))))
+#define cast_length(x) AST_node_length(CAST(node, (x)))
+#define last_cast(x) CAST(cast, AST_node_last(CAST(node, (x))))
+#define scan_cast(var, list) for (var = (list); var; var = CAST(cast, var->next))
+#define cast_list_reverse(x) CAST(cast_list, AST_node_reverse(CAST(node, (x))))
+#define cast_list_length(x) AST_node_length(CAST(node, (x)))
+#define last_cast_list(x) CAST(cast_list, AST_node_last(CAST(node, (x))))
+#define scan_cast_list(var, list) for (var = (list); var; var = CAST(cast_list, var->next))
+#define conditional_reverse(x) CAST(conditional, AST_node_reverse(CAST(node, (x))))
+#define conditional_length(x) AST_node_length(CAST(node, (x)))
+#define last_conditional(x) CAST(conditional, AST_node_last(CAST(node, (x))))
+#define scan_conditional(var, list) for (var = (list); var; var = CAST(conditional, var->next))
+#define identifier_reverse(x) CAST(identifier, AST_node_reverse(CAST(node, (x))))
+#define identifier_length(x) AST_node_length(CAST(node, (x)))
+#define last_identifier(x) CAST(identifier, AST_node_last(CAST(node, (x))))
+#define scan_identifier(var, list) for (var = (list); var; var = CAST(identifier, var->next))
+#define compound_expr_reverse(x) CAST(compound_expr, AST_node_reverse(CAST(node, (x))))
+#define compound_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_compound_expr(x) CAST(compound_expr, AST_node_last(CAST(node, (x))))
+#define scan_compound_expr(var, list) for (var = (list); var; var = CAST(compound_expr, var->next))
+#define function_call_reverse(x) CAST(function_call, AST_node_reverse(CAST(node, (x))))
+#define function_call_length(x) AST_node_length(CAST(node, (x)))
+#define last_function_call(x) CAST(function_call, AST_node_last(CAST(node, (x))))
+#define scan_function_call(var, list) for (var = (list); var; var = CAST(function_call, var->next))
+#define field_ref_reverse(x) CAST(field_ref, AST_node_reverse(CAST(node, (x))))
+#define field_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_field_ref(x) CAST(field_ref, AST_node_last(CAST(node, (x))))
+#define scan_field_ref(var, list) for (var = (list); var; var = CAST(field_ref, var->next))
+#define increment_reverse(x) CAST(increment, AST_node_reverse(CAST(node, (x))))
+#define increment_length(x) AST_node_length(CAST(node, (x)))
+#define last_increment(x) CAST(increment, AST_node_last(CAST(node, (x))))
+#define scan_increment(var, list) for (var = (list); var; var = CAST(increment, var->next))
+#define comparison_reverse(x) CAST(comparison, AST_node_reverse(CAST(node, (x))))
+#define comparison_length(x) AST_node_length(CAST(node, (x)))
+#define last_comparison(x) CAST(comparison, AST_node_last(CAST(node, (x))))
+#define scan_comparison(var, list) for (var = (list); var; var = CAST(comparison, var->next))
+#define assignment_reverse(x) CAST(assignment, AST_node_reverse(CAST(node, (x))))
+#define assignment_length(x) AST_node_length(CAST(node, (x)))
+#define last_assignment(x) CAST(assignment, AST_node_last(CAST(node, (x))))
+#define scan_assignment(var, list) for (var = (list); var; var = CAST(assignment, var->next))
+#define init_list_reverse(x) CAST(init_list, AST_node_reverse(CAST(node, (x))))
+#define init_list_length(x) AST_node_length(CAST(node, (x)))
+#define last_init_list(x) CAST(init_list, AST_node_last(CAST(node, (x))))
+#define scan_init_list(var, list) for (var = (list); var; var = CAST(init_list, var->next))
+#define init_specific_reverse(x) CAST(init_specific, AST_node_reverse(CAST(node, (x))))
+#define init_specific_length(x) AST_node_length(CAST(node, (x)))
+#define last_init_specific(x) CAST(init_specific, AST_node_last(CAST(node, (x))))
+#define scan_init_specific(var, list) for (var = (list); var; var = CAST(init_specific, var->next))
+#define designator_reverse(x) CAST(designator, AST_node_reverse(CAST(node, (x))))
+#define designator_length(x) AST_node_length(CAST(node, (x)))
+#define last_designator(x) CAST(designator, AST_node_last(CAST(node, (x))))
+#define scan_designator(var, list) for (var = (list); var; var = CAST(designator, var->next))
+#define designate_field_reverse(x) CAST(designate_field, AST_node_reverse(CAST(node, (x))))
+#define designate_field_length(x) AST_node_length(CAST(node, (x)))
+#define last_designate_field(x) CAST(designate_field, AST_node_last(CAST(node, (x))))
+#define scan_designate_field(var, list) for (var = (list); var; var = CAST(designate_field, var->next))
+#define designate_index_reverse(x) CAST(designate_index, AST_node_reverse(CAST(node, (x))))
+#define designate_index_length(x) AST_node_length(CAST(node, (x)))
+#define last_designate_index(x) CAST(designate_index, AST_node_last(CAST(node, (x))))
+#define scan_designate_index(var, list) for (var = (list); var; var = CAST(designate_index, var->next))
+#define lexical_cst_reverse(x) CAST(lexical_cst, AST_node_reverse(CAST(node, (x))))
+#define lexical_cst_length(x) AST_node_length(CAST(node, (x)))
+#define last_lexical_cst(x) CAST(lexical_cst, AST_node_last(CAST(node, (x))))
+#define scan_lexical_cst(var, list) for (var = (list); var; var = CAST(lexical_cst, var->next))
+#define string_cst_reverse(x) CAST(string_cst, AST_node_reverse(CAST(node, (x))))
+#define string_cst_length(x) AST_node_length(CAST(node, (x)))
+#define last_string_cst(x) CAST(string_cst, AST_node_last(CAST(node, (x))))
+#define scan_string_cst(var, list) for (var = (list); var; var = CAST(string_cst, var->next))
+#define string_reverse(x) CAST(string, AST_node_reverse(CAST(node, (x))))
+#define string_length(x) AST_node_length(CAST(node, (x)))
+#define last_string(x) CAST(string, AST_node_last(CAST(node, (x))))
+#define scan_string(var, list) for (var = (list); var; var = CAST(string, var->next))
+#define id_label_reverse(x) CAST(id_label, AST_node_reverse(CAST(node, (x))))
+#define id_label_length(x) AST_node_length(CAST(node, (x)))
+#define last_id_label(x) CAST(id_label, AST_node_last(CAST(node, (x))))
+#define scan_id_label(var, list) for (var = (list); var; var = CAST(id_label, var->next))
+#define case_label_reverse(x) CAST(case_label, AST_node_reverse(CAST(node, (x))))
+#define case_label_length(x) AST_node_length(CAST(node, (x)))
+#define last_case_label(x) CAST(case_label, AST_node_last(CAST(node, (x))))
+#define scan_case_label(var, list) for (var = (list); var; var = CAST(case_label, var->next))
+#define default_label_reverse(x) CAST(default_label, AST_node_reverse(CAST(node, (x))))
+#define default_label_length(x) AST_node_length(CAST(node, (x)))
+#define last_default_label(x) CAST(default_label, AST_node_last(CAST(node, (x))))
+#define scan_default_label(var, list) for (var = (list); var; var = CAST(default_label, var->next))
+#define word_reverse(x) CAST(word, AST_node_reverse(CAST(node, (x))))
+#define word_length(x) AST_node_length(CAST(node, (x)))
+#define last_word(x) CAST(word, AST_node_last(CAST(node, (x))))
+#define scan_word(var, list) for (var = (list); var; var = CAST(word, var->next))
+#define asm_operand_reverse(x) CAST(asm_operand, AST_node_reverse(CAST(node, (x))))
+#define asm_operand_length(x) AST_node_length(CAST(node, (x)))
+#define last_asm_operand(x) CAST(asm_operand, AST_node_last(CAST(node, (x))))
+#define scan_asm_operand(var, list) for (var = (list); var; var = CAST(asm_operand, var->next))
+#define nesc_decl_reverse(x) CAST(nesc_decl, AST_node_reverse(CAST(node, (x))))
+#define nesc_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_nesc_decl(x) CAST(nesc_decl, AST_node_last(CAST(node, (x))))
+#define scan_nesc_decl(var, list) for (var = (list); var; var = CAST(nesc_decl, var->next))
+#define interface_reverse(x) CAST(interface, AST_node_reverse(CAST(node, (x))))
+#define interface_length(x) AST_node_length(CAST(node, (x)))
+#define last_interface(x) CAST(interface, AST_node_last(CAST(node, (x))))
+#define scan_interface(var, list) for (var = (list); var; var = CAST(interface, var->next))
+#define component_reverse(x) CAST(component, AST_node_reverse(CAST(node, (x))))
+#define component_length(x) AST_node_length(CAST(node, (x)))
+#define last_component(x) CAST(component, AST_node_last(CAST(node, (x))))
+#define scan_component(var, list) for (var = (list); var; var = CAST(component, var->next))
+#define implementation_reverse(x) CAST(implementation, AST_node_reverse(CAST(node, (x))))
+#define implementation_length(x) AST_node_length(CAST(node, (x)))
+#define last_implementation(x) CAST(implementation, AST_node_last(CAST(node, (x))))
+#define scan_implementation(var, list) for (var = (list); var; var = CAST(implementation, var->next))
+#define configuration_reverse(x) CAST(configuration, AST_node_reverse(CAST(node, (x))))
+#define configuration_length(x) AST_node_length(CAST(node, (x)))
+#define last_configuration(x) CAST(configuration, AST_node_last(CAST(node, (x))))
+#define scan_configuration(var, list) for (var = (list); var; var = CAST(configuration, var->next))
+#define module_reverse(x) CAST(module, AST_node_reverse(CAST(node, (x))))
+#define module_length(x) AST_node_length(CAST(node, (x)))
+#define last_module(x) CAST(module, AST_node_last(CAST(node, (x))))
+#define scan_module(var, list) for (var = (list); var; var = CAST(module, var->next))
+#define binary_component_reverse(x) CAST(binary_component, AST_node_reverse(CAST(node, (x))))
+#define binary_component_length(x) AST_node_length(CAST(node, (x)))
+#define last_binary_component(x) CAST(binary_component, AST_node_last(CAST(node, (x))))
+#define scan_binary_component(var, list) for (var = (list); var; var = CAST(binary_component, var->next))
+#define rp_interface_reverse(x) CAST(rp_interface, AST_node_reverse(CAST(node, (x))))
+#define rp_interface_length(x) AST_node_length(CAST(node, (x)))
+#define last_rp_interface(x) CAST(rp_interface, AST_node_last(CAST(node, (x))))
+#define scan_rp_interface(var, list) for (var = (list); var; var = CAST(rp_interface, var->next))
+#define interface_ref_reverse(x) CAST(interface_ref, AST_node_reverse(CAST(node, (x))))
+#define interface_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_interface_ref(x) CAST(interface_ref, AST_node_last(CAST(node, (x))))
+#define scan_interface_ref(var, list) for (var = (list); var; var = CAST(interface_ref, var->next))
+#define component_ref_reverse(x) CAST(component_ref, AST_node_reverse(CAST(node, (x))))
+#define component_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_component_ref(x) CAST(component_ref, AST_node_last(CAST(node, (x))))
+#define scan_component_ref(var, list) for (var = (list); var; var = CAST(component_ref, var->next))
+#define connection_reverse(x) CAST(connection, AST_node_reverse(CAST(node, (x))))
+#define connection_length(x) AST_node_length(CAST(node, (x)))
+#define last_connection(x) CAST(connection, AST_node_last(CAST(node, (x))))
+#define scan_connection(var, list) for (var = (list); var; var = CAST(connection, var->next))
+#define endpoint_reverse(x) CAST(endpoint, AST_node_reverse(CAST(node, (x))))
+#define endpoint_length(x) AST_node_length(CAST(node, (x)))
+#define last_endpoint(x) CAST(endpoint, AST_node_last(CAST(node, (x))))
+#define scan_endpoint(var, list) for (var = (list); var; var = CAST(endpoint, var->next))
+#define parameterised_identifier_reverse(x) CAST(parameterised_identifier, AST_node_reverse(CAST(node, (x))))
+#define parameterised_identifier_length(x) AST_node_length(CAST(node, (x)))
+#define last_parameterised_identifier(x) CAST(parameterised_identifier, AST_node_last(CAST(node, (x))))
+#define scan_parameterised_identifier(var, list) for (var = (list); var; var = CAST(parameterised_identifier, var->next))
+#define generic_declarator_reverse(x) CAST(generic_declarator, AST_node_reverse(CAST(node, (x))))
+#define generic_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_generic_declarator(x) CAST(generic_declarator, AST_node_last(CAST(node, (x))))
+#define scan_generic_declarator(var, list) for (var = (list); var; var = CAST(generic_declarator, var->next))
+#define generic_call_reverse(x) CAST(generic_call, AST_node_reverse(CAST(node, (x))))
+#define generic_call_length(x) AST_node_length(CAST(node, (x)))
+#define last_generic_call(x) CAST(generic_call, AST_node_last(CAST(node, (x))))
+#define scan_generic_call(var, list) for (var = (list); var; var = CAST(generic_call, var->next))
+#define interface_ref_declarator_reverse(x) CAST(interface_ref_declarator, AST_node_reverse(CAST(node, (x))))
+#define interface_ref_declarator_length(x) AST_node_length(CAST(node, (x)))
+#define last_interface_ref_declarator(x) CAST(interface_ref_declarator, AST_node_last(CAST(node, (x))))
+#define scan_interface_ref_declarator(var, list) for (var = (list); var; var = CAST(interface_ref_declarator, var->next))
+#define interface_deref_reverse(x) CAST(interface_deref, AST_node_reverse(CAST(node, (x))))
+#define interface_deref_length(x) AST_node_length(CAST(node, (x)))
+#define last_interface_deref(x) CAST(interface_deref, AST_node_last(CAST(node, (x))))
+#define scan_interface_deref(var, list) for (var = (list); var; var = CAST(interface_deref, var->next))
+#define component_deref_reverse(x) CAST(component_deref, AST_node_reverse(CAST(node, (x))))
+#define component_deref_length(x) AST_node_length(CAST(node, (x)))
+#define last_component_deref(x) CAST(component_deref, AST_node_last(CAST(node, (x))))
+#define scan_component_deref(var, list) for (var = (list); var; var = CAST(component_deref, var->next))
+#define component_typeref_reverse(x) CAST(component_typeref, AST_node_reverse(CAST(node, (x))))
+#define component_typeref_length(x) AST_node_length(CAST(node, (x)))
+#define last_component_typeref(x) CAST(component_typeref, AST_node_last(CAST(node, (x))))
+#define scan_component_typeref(var, list) for (var = (list); var; var = CAST(component_typeref, var->next))
+#define atomic_stmt_reverse(x) CAST(atomic_stmt, AST_node_reverse(CAST(node, (x))))
+#define atomic_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_atomic_stmt(x) CAST(atomic_stmt, AST_node_last(CAST(node, (x))))
+#define scan_atomic_stmt(var, list) for (var = (list); var; var = CAST(atomic_stmt, var->next))
+#define nesc_attribute_reverse(x) CAST(nesc_attribute, AST_node_reverse(CAST(node, (x))))
+#define nesc_attribute_length(x) AST_node_length(CAST(node, (x)))
+#define last_nesc_attribute(x) CAST(nesc_attribute, AST_node_last(CAST(node, (x))))
+#define scan_nesc_attribute(var, list) for (var = (list); var; var = CAST(nesc_attribute, var->next))
+#define type_parm_decl_reverse(x) CAST(type_parm_decl, AST_node_reverse(CAST(node, (x))))
+#define type_parm_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_type_parm_decl(x) CAST(type_parm_decl, AST_node_last(CAST(node, (x))))
+#define scan_type_parm_decl(var, list) for (var = (list); var; var = CAST(type_parm_decl, var->next))
+#define type_argument_reverse(x) CAST(type_argument, AST_node_reverse(CAST(node, (x))))
+#define type_argument_length(x) AST_node_length(CAST(node, (x)))
+#define last_type_argument(x) CAST(type_argument, AST_node_last(CAST(node, (x))))
+#define scan_type_argument(var, list) for (var = (list); var; var = CAST(type_argument, var->next))
+#define error_decl_reverse(x) CAST(error_decl, AST_node_reverse(CAST(node, (x))))
+#define error_decl_length(x) AST_node_length(CAST(node, (x)))
+#define last_error_decl(x) CAST(error_decl, AST_node_last(CAST(node, (x))))
+#define scan_error_decl(var, list) for (var = (list); var; var = CAST(error_decl, var->next))
+#define attribute_ref_reverse(x) CAST(attribute_ref, AST_node_reverse(CAST(node, (x))))
+#define attribute_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_attribute_ref(x) CAST(attribute_ref, AST_node_last(CAST(node, (x))))
+#define scan_attribute_ref(var, list) for (var = (list); var; var = CAST(attribute_ref, var->next))
+#define enum_ref_reverse(x) CAST(enum_ref, AST_node_reverse(CAST(node, (x))))
+#define enum_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_enum_ref(x) CAST(enum_ref, AST_node_last(CAST(node, (x))))
+#define scan_enum_ref(var, list) for (var = (list); var; var = CAST(enum_ref, var->next))
+#define error_stmt_reverse(x) CAST(error_stmt, AST_node_reverse(CAST(node, (x))))
+#define error_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_error_stmt(x) CAST(error_stmt, AST_node_last(CAST(node, (x))))
+#define scan_error_stmt(var, list) for (var = (list); var; var = CAST(error_stmt, var->next))
+#define while_stmt_reverse(x) CAST(while_stmt, AST_node_reverse(CAST(node, (x))))
+#define while_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_while_stmt(x) CAST(while_stmt, AST_node_last(CAST(node, (x))))
+#define scan_while_stmt(var, list) for (var = (list); var; var = CAST(while_stmt, var->next))
+#define dowhile_stmt_reverse(x) CAST(dowhile_stmt, AST_node_reverse(CAST(node, (x))))
+#define dowhile_stmt_length(x) AST_node_length(CAST(node, (x)))
+#define last_dowhile_stmt(x) CAST(dowhile_stmt, AST_node_last(CAST(node, (x))))
+#define scan_dowhile_stmt(var, list) for (var = (list); var; var = CAST(dowhile_stmt, var->next))
+#define error_expr_reverse(x) CAST(error_expr, AST_node_reverse(CAST(node, (x))))
+#define error_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_error_expr(x) CAST(error_expr, AST_node_last(CAST(node, (x))))
+#define scan_error_expr(var, list) for (var = (list); var; var = CAST(error_expr, var->next))
+#define array_ref_reverse(x) CAST(array_ref, AST_node_reverse(CAST(node, (x))))
+#define array_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_array_ref(x) CAST(array_ref, AST_node_last(CAST(node, (x))))
+#define scan_array_ref(var, list) for (var = (list); var; var = CAST(array_ref, var->next))
+#define dereference_reverse(x) CAST(dereference, AST_node_reverse(CAST(node, (x))))
+#define dereference_length(x) AST_node_length(CAST(node, (x)))
+#define last_dereference(x) CAST(dereference, AST_node_last(CAST(node, (x))))
+#define scan_dereference(var, list) for (var = (list); var; var = CAST(dereference, var->next))
+#define extension_expr_reverse(x) CAST(extension_expr, AST_node_reverse(CAST(node, (x))))
+#define extension_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_extension_expr(x) CAST(extension_expr, AST_node_last(CAST(node, (x))))
+#define scan_extension_expr(var, list) for (var = (list); var; var = CAST(extension_expr, var->next))
+#define sizeof_expr_reverse(x) CAST(sizeof_expr, AST_node_reverse(CAST(node, (x))))
+#define sizeof_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_sizeof_expr(x) CAST(sizeof_expr, AST_node_last(CAST(node, (x))))
+#define scan_sizeof_expr(var, list) for (var = (list); var; var = CAST(sizeof_expr, var->next))
+#define alignof_expr_reverse(x) CAST(alignof_expr, AST_node_reverse(CAST(node, (x))))
+#define alignof_expr_length(x) AST_node_length(CAST(node, (x)))
+#define last_alignof_expr(x) CAST(alignof_expr, AST_node_last(CAST(node, (x))))
+#define scan_alignof_expr(var, list) for (var = (list); var; var = CAST(alignof_expr, var->next))
+#define realpart_reverse(x) CAST(realpart, AST_node_reverse(CAST(node, (x))))
+#define realpart_length(x) AST_node_length(CAST(node, (x)))
+#define last_realpart(x) CAST(realpart, AST_node_last(CAST(node, (x))))
+#define scan_realpart(var, list) for (var = (list); var; var = CAST(realpart, var->next))
+#define imagpart_reverse(x) CAST(imagpart, AST_node_reverse(CAST(node, (x))))
+#define imagpart_length(x) AST_node_length(CAST(node, (x)))
+#define last_imagpart(x) CAST(imagpart, AST_node_last(CAST(node, (x))))
+#define scan_imagpart(var, list) for (var = (list); var; var = CAST(imagpart, var->next))
+#define address_of_reverse(x) CAST(address_of, AST_node_reverse(CAST(node, (x))))
+#define address_of_length(x) AST_node_length(CAST(node, (x)))
+#define last_address_of(x) CAST(address_of, AST_node_last(CAST(node, (x))))
+#define scan_address_of(var, list) for (var = (list); var; var = CAST(address_of, var->next))
+#define unary_minus_reverse(x) CAST(unary_minus, AST_node_reverse(CAST(node, (x))))
+#define unary_minus_length(x) AST_node_length(CAST(node, (x)))
+#define last_unary_minus(x) CAST(unary_minus, AST_node_last(CAST(node, (x))))
+#define scan_unary_minus(var, list) for (var = (list); var; var = CAST(unary_minus, var->next))
+#define unary_plus_reverse(x) CAST(unary_plus, AST_node_reverse(CAST(node, (x))))
+#define unary_plus_length(x) AST_node_length(CAST(node, (x)))
+#define last_unary_plus(x) CAST(unary_plus, AST_node_last(CAST(node, (x))))
+#define scan_unary_plus(var, list) for (var = (list); var; var = CAST(unary_plus, var->next))
+#define conjugate_reverse(x) CAST(conjugate, AST_node_reverse(CAST(node, (x))))
+#define conjugate_length(x) AST_node_length(CAST(node, (x)))
+#define last_conjugate(x) CAST(conjugate, AST_node_last(CAST(node, (x))))
+#define scan_conjugate(var, list) for (var = (list); var; var = CAST(conjugate, var->next))
+#define bitnot_reverse(x) CAST(bitnot, AST_node_reverse(CAST(node, (x))))
+#define bitnot_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitnot(x) CAST(bitnot, AST_node_last(CAST(node, (x))))
+#define scan_bitnot(var, list) for (var = (list); var; var = CAST(bitnot, var->next))
+#define not_reverse(x) CAST(not, AST_node_reverse(CAST(node, (x))))
+#define not_length(x) AST_node_length(CAST(node, (x)))
+#define last_not(x) CAST(not, AST_node_last(CAST(node, (x))))
+#define scan_not(var, list) for (var = (list); var; var = CAST(not, var->next))
+#define preincrement_reverse(x) CAST(preincrement, AST_node_reverse(CAST(node, (x))))
+#define preincrement_length(x) AST_node_length(CAST(node, (x)))
+#define last_preincrement(x) CAST(preincrement, AST_node_last(CAST(node, (x))))
+#define scan_preincrement(var, list) for (var = (list); var; var = CAST(preincrement, var->next))
+#define predecrement_reverse(x) CAST(predecrement, AST_node_reverse(CAST(node, (x))))
+#define predecrement_length(x) AST_node_length(CAST(node, (x)))
+#define last_predecrement(x) CAST(predecrement, AST_node_last(CAST(node, (x))))
+#define scan_predecrement(var, list) for (var = (list); var; var = CAST(predecrement, var->next))
+#define postincrement_reverse(x) CAST(postincrement, AST_node_reverse(CAST(node, (x))))
+#define postincrement_length(x) AST_node_length(CAST(node, (x)))
+#define last_postincrement(x) CAST(postincrement, AST_node_last(CAST(node, (x))))
+#define scan_postincrement(var, list) for (var = (list); var; var = CAST(postincrement, var->next))
+#define postdecrement_reverse(x) CAST(postdecrement, AST_node_reverse(CAST(node, (x))))
+#define postdecrement_length(x) AST_node_length(CAST(node, (x)))
+#define last_postdecrement(x) CAST(postdecrement, AST_node_last(CAST(node, (x))))
+#define scan_postdecrement(var, list) for (var = (list); var; var = CAST(postdecrement, var->next))
+#define plus_reverse(x) CAST(plus, AST_node_reverse(CAST(node, (x))))
+#define plus_length(x) AST_node_length(CAST(node, (x)))
+#define last_plus(x) CAST(plus, AST_node_last(CAST(node, (x))))
+#define scan_plus(var, list) for (var = (list); var; var = CAST(plus, var->next))
+#define minus_reverse(x) CAST(minus, AST_node_reverse(CAST(node, (x))))
+#define minus_length(x) AST_node_length(CAST(node, (x)))
+#define last_minus(x) CAST(minus, AST_node_last(CAST(node, (x))))
+#define scan_minus(var, list) for (var = (list); var; var = CAST(minus, var->next))
+#define times_reverse(x) CAST(times, AST_node_reverse(CAST(node, (x))))
+#define times_length(x) AST_node_length(CAST(node, (x)))
+#define last_times(x) CAST(times, AST_node_last(CAST(node, (x))))
+#define scan_times(var, list) for (var = (list); var; var = CAST(times, var->next))
+#define divide_reverse(x) CAST(divide, AST_node_reverse(CAST(node, (x))))
+#define divide_length(x) AST_node_length(CAST(node, (x)))
+#define last_divide(x) CAST(divide, AST_node_last(CAST(node, (x))))
+#define scan_divide(var, list) for (var = (list); var; var = CAST(divide, var->next))
+#define modulo_reverse(x) CAST(modulo, AST_node_reverse(CAST(node, (x))))
+#define modulo_length(x) AST_node_length(CAST(node, (x)))
+#define last_modulo(x) CAST(modulo, AST_node_last(CAST(node, (x))))
+#define scan_modulo(var, list) for (var = (list); var; var = CAST(modulo, var->next))
+#define lshift_reverse(x) CAST(lshift, AST_node_reverse(CAST(node, (x))))
+#define lshift_length(x) AST_node_length(CAST(node, (x)))
+#define last_lshift(x) CAST(lshift, AST_node_last(CAST(node, (x))))
+#define scan_lshift(var, list) for (var = (list); var; var = CAST(lshift, var->next))
+#define rshift_reverse(x) CAST(rshift, AST_node_reverse(CAST(node, (x))))
+#define rshift_length(x) AST_node_length(CAST(node, (x)))
+#define last_rshift(x) CAST(rshift, AST_node_last(CAST(node, (x))))
+#define scan_rshift(var, list) for (var = (list); var; var = CAST(rshift, var->next))
+#define leq_reverse(x) CAST(leq, AST_node_reverse(CAST(node, (x))))
+#define leq_length(x) AST_node_length(CAST(node, (x)))
+#define last_leq(x) CAST(leq, AST_node_last(CAST(node, (x))))
+#define scan_leq(var, list) for (var = (list); var; var = CAST(leq, var->next))
+#define geq_reverse(x) CAST(geq, AST_node_reverse(CAST(node, (x))))
+#define geq_length(x) AST_node_length(CAST(node, (x)))
+#define last_geq(x) CAST(geq, AST_node_last(CAST(node, (x))))
+#define scan_geq(var, list) for (var = (list); var; var = CAST(geq, var->next))
+#define lt_reverse(x) CAST(lt, AST_node_reverse(CAST(node, (x))))
+#define lt_length(x) AST_node_length(CAST(node, (x)))
+#define last_lt(x) CAST(lt, AST_node_last(CAST(node, (x))))
+#define scan_lt(var, list) for (var = (list); var; var = CAST(lt, var->next))
+#define gt_reverse(x) CAST(gt, AST_node_reverse(CAST(node, (x))))
+#define gt_length(x) AST_node_length(CAST(node, (x)))
+#define last_gt(x) CAST(gt, AST_node_last(CAST(node, (x))))
+#define scan_gt(var, list) for (var = (list); var; var = CAST(gt, var->next))
+#define eq_reverse(x) CAST(eq, AST_node_reverse(CAST(node, (x))))
+#define eq_length(x) AST_node_length(CAST(node, (x)))
+#define last_eq(x) CAST(eq, AST_node_last(CAST(node, (x))))
+#define scan_eq(var, list) for (var = (list); var; var = CAST(eq, var->next))
+#define ne_reverse(x) CAST(ne, AST_node_reverse(CAST(node, (x))))
+#define ne_length(x) AST_node_length(CAST(node, (x)))
+#define last_ne(x) CAST(ne, AST_node_last(CAST(node, (x))))
+#define scan_ne(var, list) for (var = (list); var; var = CAST(ne, var->next))
+#define bitand_reverse(x) CAST(bitand, AST_node_reverse(CAST(node, (x))))
+#define bitand_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitand(x) CAST(bitand, AST_node_last(CAST(node, (x))))
+#define scan_bitand(var, list) for (var = (list); var; var = CAST(bitand, var->next))
+#define bitor_reverse(x) CAST(bitor, AST_node_reverse(CAST(node, (x))))
+#define bitor_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitor(x) CAST(bitor, AST_node_last(CAST(node, (x))))
+#define scan_bitor(var, list) for (var = (list); var; var = CAST(bitor, var->next))
+#define bitxor_reverse(x) CAST(bitxor, AST_node_reverse(CAST(node, (x))))
+#define bitxor_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitxor(x) CAST(bitxor, AST_node_last(CAST(node, (x))))
+#define scan_bitxor(var, list) for (var = (list); var; var = CAST(bitxor, var->next))
+#define andand_reverse(x) CAST(andand, AST_node_reverse(CAST(node, (x))))
+#define andand_length(x) AST_node_length(CAST(node, (x)))
+#define last_andand(x) CAST(andand, AST_node_last(CAST(node, (x))))
+#define scan_andand(var, list) for (var = (list); var; var = CAST(andand, var->next))
+#define oror_reverse(x) CAST(oror, AST_node_reverse(CAST(node, (x))))
+#define oror_length(x) AST_node_length(CAST(node, (x)))
+#define last_oror(x) CAST(oror, AST_node_last(CAST(node, (x))))
+#define scan_oror(var, list) for (var = (list); var; var = CAST(oror, var->next))
+#define assign_reverse(x) CAST(assign, AST_node_reverse(CAST(node, (x))))
+#define assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_assign(x) CAST(assign, AST_node_last(CAST(node, (x))))
+#define scan_assign(var, list) for (var = (list); var; var = CAST(assign, var->next))
+#define plus_assign_reverse(x) CAST(plus_assign, AST_node_reverse(CAST(node, (x))))
+#define plus_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_plus_assign(x) CAST(plus_assign, AST_node_last(CAST(node, (x))))
+#define scan_plus_assign(var, list) for (var = (list); var; var = CAST(plus_assign, var->next))
+#define minus_assign_reverse(x) CAST(minus_assign, AST_node_reverse(CAST(node, (x))))
+#define minus_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_minus_assign(x) CAST(minus_assign, AST_node_last(CAST(node, (x))))
+#define scan_minus_assign(var, list) for (var = (list); var; var = CAST(minus_assign, var->next))
+#define times_assign_reverse(x) CAST(times_assign, AST_node_reverse(CAST(node, (x))))
+#define times_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_times_assign(x) CAST(times_assign, AST_node_last(CAST(node, (x))))
+#define scan_times_assign(var, list) for (var = (list); var; var = CAST(times_assign, var->next))
+#define divide_assign_reverse(x) CAST(divide_assign, AST_node_reverse(CAST(node, (x))))
+#define divide_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_divide_assign(x) CAST(divide_assign, AST_node_last(CAST(node, (x))))
+#define scan_divide_assign(var, list) for (var = (list); var; var = CAST(divide_assign, var->next))
+#define modulo_assign_reverse(x) CAST(modulo_assign, AST_node_reverse(CAST(node, (x))))
+#define modulo_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_modulo_assign(x) CAST(modulo_assign, AST_node_last(CAST(node, (x))))
+#define scan_modulo_assign(var, list) for (var = (list); var; var = CAST(modulo_assign, var->next))
+#define lshift_assign_reverse(x) CAST(lshift_assign, AST_node_reverse(CAST(node, (x))))
+#define lshift_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_lshift_assign(x) CAST(lshift_assign, AST_node_last(CAST(node, (x))))
+#define scan_lshift_assign(var, list) for (var = (list); var; var = CAST(lshift_assign, var->next))
+#define rshift_assign_reverse(x) CAST(rshift_assign, AST_node_reverse(CAST(node, (x))))
+#define rshift_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_rshift_assign(x) CAST(rshift_assign, AST_node_last(CAST(node, (x))))
+#define scan_rshift_assign(var, list) for (var = (list); var; var = CAST(rshift_assign, var->next))
+#define bitand_assign_reverse(x) CAST(bitand_assign, AST_node_reverse(CAST(node, (x))))
+#define bitand_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitand_assign(x) CAST(bitand_assign, AST_node_last(CAST(node, (x))))
+#define scan_bitand_assign(var, list) for (var = (list); var; var = CAST(bitand_assign, var->next))
+#define bitor_assign_reverse(x) CAST(bitor_assign, AST_node_reverse(CAST(node, (x))))
+#define bitor_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitor_assign(x) CAST(bitor_assign, AST_node_last(CAST(node, (x))))
+#define scan_bitor_assign(var, list) for (var = (list); var; var = CAST(bitor_assign, var->next))
+#define bitxor_assign_reverse(x) CAST(bitxor_assign, AST_node_reverse(CAST(node, (x))))
+#define bitxor_assign_length(x) AST_node_length(CAST(node, (x)))
+#define last_bitxor_assign(x) CAST(bitxor_assign, AST_node_last(CAST(node, (x))))
+#define scan_bitxor_assign(var, list) for (var = (list); var; var = CAST(bitxor_assign, var->next))
+#define rp_connection_reverse(x) CAST(rp_connection, AST_node_reverse(CAST(node, (x))))
+#define rp_connection_length(x) AST_node_length(CAST(node, (x)))
+#define last_rp_connection(x) CAST(rp_connection, AST_node_last(CAST(node, (x))))
+#define scan_rp_connection(var, list) for (var = (list); var; var = CAST(rp_connection, var->next))
+#define eq_connection_reverse(x) CAST(eq_connection, AST_node_reverse(CAST(node, (x))))
+#define eq_connection_length(x) AST_node_length(CAST(node, (x)))
+#define last_eq_connection(x) CAST(eq_connection, AST_node_last(CAST(node, (x))))
+#define scan_eq_connection(var, list) for (var = (list); var; var = CAST(eq_connection, var->next))
+#define nx_struct_ref_reverse(x) CAST(nx_struct_ref, AST_node_reverse(CAST(node, (x))))
+#define nx_struct_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_nx_struct_ref(x) CAST(nx_struct_ref, AST_node_last(CAST(node, (x))))
+#define scan_nx_struct_ref(var, list) for (var = (list); var; var = CAST(nx_struct_ref, var->next))
+#define nx_union_ref_reverse(x) CAST(nx_union_ref, AST_node_reverse(CAST(node, (x))))
+#define nx_union_ref_length(x) AST_node_length(CAST(node, (x)))
+#define last_nx_union_ref(x) CAST(nx_union_ref, AST_node_last(CAST(node, (x))))
+#define scan_nx_union_ref(var, list) for (var = (list); var; var = CAST(nx_union_ref, var->next))
+node node_chain(node l1, node l2);
+declaration declaration_chain(declaration l1, declaration l2);
+statement statement_chain(statement l1, statement l2);
+expression expression_chain(expression l1, expression l2);
+type_element type_element_chain(type_element l1, type_element l2);
+declarator declarator_chain(declarator l1, declarator l2);
+label label_chain(label l1, label l2);
+asm_decl asm_decl_chain(asm_decl l1, asm_decl l2);
+data_decl data_decl_chain(data_decl l1, data_decl l2);
+extension_decl extension_decl_chain(extension_decl l1, extension_decl l2);
+ellipsis_decl ellipsis_decl_chain(ellipsis_decl l1, ellipsis_decl l2);
+enumerator enumerator_chain(enumerator l1, enumerator l2);
+oldidentifier_decl oldidentifier_decl_chain(oldidentifier_decl l1, oldidentifier_decl l2);
+function_decl function_decl_chain(function_decl l1, function_decl l2);
+implicit_decl implicit_decl_chain(implicit_decl l1, implicit_decl l2);
+variable_decl variable_decl_chain(variable_decl l1, variable_decl l2);
+field_decl field_decl_chain(field_decl l1, field_decl l2);
+asttype asttype_chain(asttype l1, asttype l2);
+typename typename_chain(typename l1, typename l2);
+typeof_expr typeof_expr_chain(typeof_expr l1, typeof_expr l2);
+typeof_type typeof_type_chain(typeof_type l1, typeof_type l2);
+attribute attribute_chain(attribute l1, attribute l2);
+gcc_attribute gcc_attribute_chain(gcc_attribute l1, gcc_attribute l2);
+rid rid_chain(rid l1, rid l2);
+qualifier qualifier_chain(qualifier l1, qualifier l2);
+tag_ref tag_ref_chain(tag_ref l1, tag_ref l2);
+struct_ref struct_ref_chain(struct_ref l1, struct_ref l2);
+union_ref union_ref_chain(union_ref l1, union_ref l2);
+nested_declarator nested_declarator_chain(nested_declarator l1, nested_declarator l2);
+function_declarator function_declarator_chain(function_declarator l1, function_declarator l2);
+pointer_declarator pointer_declarator_chain(pointer_declarator l1, pointer_declarator l2);
+qualified_declarator qualified_declarator_chain(qualified_declarator l1, qualified_declarator l2);
+array_declarator array_declarator_chain(array_declarator l1, array_declarator l2);
+identifier_declarator identifier_declarator_chain(identifier_declarator l1, identifier_declarator l2);
+asm_stmt asm_stmt_chain(asm_stmt l1, asm_stmt l2);
+compound_stmt compound_stmt_chain(compound_stmt l1, compound_stmt l2);
+if_stmt if_stmt_chain(if_stmt l1, if_stmt l2);
+labeled_stmt labeled_stmt_chain(labeled_stmt l1, labeled_stmt l2);
+expression_stmt expression_stmt_chain(expression_stmt l1, expression_stmt l2);
+conditional_stmt conditional_stmt_chain(conditional_stmt l1, conditional_stmt l2);
+switch_stmt switch_stmt_chain(switch_stmt l1, switch_stmt l2);
+for_stmt for_stmt_chain(for_stmt l1, for_stmt l2);
+break_stmt break_stmt_chain(break_stmt l1, break_stmt l2);
+continue_stmt continue_stmt_chain(continue_stmt l1, continue_stmt l2);
+return_stmt return_stmt_chain(return_stmt l1, return_stmt l2);
+goto_stmt goto_stmt_chain(goto_stmt l1, goto_stmt l2);
+computed_goto_stmt computed_goto_stmt_chain(computed_goto_stmt l1, computed_goto_stmt l2);
+empty_stmt empty_stmt_chain(empty_stmt l1, empty_stmt l2);
+unary unary_chain(unary l1, unary l2);
+binary binary_chain(binary l1, binary l2);
+comma comma_chain(comma l1, comma l2);
+sizeof_type sizeof_type_chain(sizeof_type l1, sizeof_type l2);
+alignof_type alignof_type_chain(alignof_type l1, alignof_type l2);
+label_address label_address_chain(label_address l1, label_address l2);
+cast cast_chain(cast l1, cast l2);
+cast_list cast_list_chain(cast_list l1, cast_list l2);
+conditional conditional_chain(conditional l1, conditional l2);
+identifier identifier_chain(identifier l1, identifier l2);
+compound_expr compound_expr_chain(compound_expr l1, compound_expr l2);
+function_call function_call_chain(function_call l1, function_call l2);
+field_ref field_ref_chain(field_ref l1, field_ref l2);
+increment increment_chain(increment l1, increment l2);
+comparison comparison_chain(comparison l1, comparison l2);
+assignment assignment_chain(assignment l1, assignment l2);
+init_list init_list_chain(init_list l1, init_list l2);
+init_specific init_specific_chain(init_specific l1, init_specific l2);
+designator designator_chain(designator l1, designator l2);
+designate_field designate_field_chain(designate_field l1, designate_field l2);
+designate_index designate_index_chain(designate_index l1, designate_index l2);
+lexical_cst lexical_cst_chain(lexical_cst l1, lexical_cst l2);
+string_cst string_cst_chain(string_cst l1, string_cst l2);
+string string_chain(string l1, string l2);
+id_label id_label_chain(id_label l1, id_label l2);
+case_label case_label_chain(case_label l1, case_label l2);
+default_label default_label_chain(default_label l1, default_label l2);
+word word_chain(word l1, word l2);
+asm_operand asm_operand_chain(asm_operand l1, asm_operand l2);
+nesc_decl nesc_decl_chain(nesc_decl l1, nesc_decl l2);
+interface interface_chain(interface l1, interface l2);
+component component_chain(component l1, component l2);
+implementation implementation_chain(implementation l1, implementation l2);
+configuration configuration_chain(configuration l1, configuration l2);
+module module_chain(module l1, module l2);
+binary_component binary_component_chain(binary_component l1, binary_component l2);
+rp_interface rp_interface_chain(rp_interface l1, rp_interface l2);
+interface_ref interface_ref_chain(interface_ref l1, interface_ref l2);
+component_ref component_ref_chain(component_ref l1, component_ref l2);
+connection connection_chain(connection l1, connection l2);
+endpoint endpoint_chain(endpoint l1, endpoint l2);
+parameterised_identifier parameterised_identifier_chain(parameterised_identifier l1, parameterised_identifier l2);
+generic_declarator generic_declarator_chain(generic_declarator l1, generic_declarator l2);
+generic_call generic_call_chain(generic_call l1, generic_call l2);
+interface_ref_declarator interface_ref_declarator_chain(interface_ref_declarator l1, interface_ref_declarator l2);
+interface_deref interface_deref_chain(interface_deref l1, interface_deref l2);
+component_deref component_deref_chain(component_deref l1, component_deref l2);
+component_typeref component_typeref_chain(component_typeref l1, component_typeref l2);
+atomic_stmt atomic_stmt_chain(atomic_stmt l1, atomic_stmt l2);
+nesc_attribute nesc_attribute_chain(nesc_attribute l1, nesc_attribute l2);
+type_parm_decl type_parm_decl_chain(type_parm_decl l1, type_parm_decl l2);
+type_argument type_argument_chain(type_argument l1, type_argument l2);
+error_decl error_decl_chain(error_decl l1, error_decl l2);
+attribute_ref attribute_ref_chain(attribute_ref l1, attribute_ref l2);
+enum_ref enum_ref_chain(enum_ref l1, enum_ref l2);
+error_stmt error_stmt_chain(error_stmt l1, error_stmt l2);
+while_stmt while_stmt_chain(while_stmt l1, while_stmt l2);
+dowhile_stmt dowhile_stmt_chain(dowhile_stmt l1, dowhile_stmt l2);
+error_expr error_expr_chain(error_expr l1, error_expr l2);
+array_ref array_ref_chain(array_ref l1, array_ref l2);
+dereference dereference_chain(dereference l1, dereference l2);
+extension_expr extension_expr_chain(extension_expr l1, extension_expr l2);
+sizeof_expr sizeof_expr_chain(sizeof_expr l1, sizeof_expr l2);
+alignof_expr alignof_expr_chain(alignof_expr l1, alignof_expr l2);
+realpart realpart_chain(realpart l1, realpart l2);
+imagpart imagpart_chain(imagpart l1, imagpart l2);
+address_of address_of_chain(address_of l1, address_of l2);
+unary_minus unary_minus_chain(unary_minus l1, unary_minus l2);
+unary_plus unary_plus_chain(unary_plus l1, unary_plus l2);
+conjugate conjugate_chain(conjugate l1, conjugate l2);
+bitnot bitnot_chain(bitnot l1, bitnot l2);
+not not_chain(not l1, not l2);
+preincrement preincrement_chain(preincrement l1, preincrement l2);
+predecrement predecrement_chain(predecrement l1, predecrement l2);
+postincrement postincrement_chain(postincrement l1, postincrement l2);
+postdecrement postdecrement_chain(postdecrement l1, postdecrement l2);
+plus plus_chain(plus l1, plus l2);
+minus minus_chain(minus l1, minus l2);
+times times_chain(times l1, times l2);
+divide divide_chain(divide l1, divide l2);
+modulo modulo_chain(modulo l1, modulo l2);
+lshift lshift_chain(lshift l1, lshift l2);
+rshift rshift_chain(rshift l1, rshift l2);
+leq leq_chain(leq l1, leq l2);
+geq geq_chain(geq l1, geq l2);
+lt lt_chain(lt l1, lt l2);
+gt gt_chain(gt l1, gt l2);
+eq eq_chain(eq l1, eq l2);
+ne ne_chain(ne l1, ne l2);
+bitand bitand_chain(bitand l1, bitand l2);
+bitor bitor_chain(bitor l1, bitor l2);
+bitxor bitxor_chain(bitxor l1, bitxor l2);
+andand andand_chain(andand l1, andand l2);
+oror oror_chain(oror l1, oror l2);
+assign assign_chain(assign l1, assign l2);
+plus_assign plus_assign_chain(plus_assign l1, plus_assign l2);
+minus_assign minus_assign_chain(minus_assign l1, minus_assign l2);
+times_assign times_assign_chain(times_assign l1, times_assign l2);
+divide_assign divide_assign_chain(divide_assign l1, divide_assign l2);
+modulo_assign modulo_assign_chain(modulo_assign l1, modulo_assign l2);
+lshift_assign lshift_assign_chain(lshift_assign l1, lshift_assign l2);
+rshift_assign rshift_assign_chain(rshift_assign l1, rshift_assign l2);
+bitand_assign bitand_assign_chain(bitand_assign l1, bitand_assign l2);
+bitor_assign bitor_assign_chain(bitor_assign l1, bitor_assign l2);
+bitxor_assign bitxor_assign_chain(bitxor_assign l1, bitxor_assign l2);
+rp_connection rp_connection_chain(rp_connection l1, rp_connection l2);
+eq_connection eq_connection_chain(eq_connection l1, eq_connection l2);
+nx_struct_ref nx_struct_ref_chain(nx_struct_ref l1, nx_struct_ref l2);
+nx_union_ref nx_union_ref_chain(nx_union_ref l1, nx_union_ref l2);
diff --git a/src/AST_parent.c b/src/AST_parent.c
new file mode 100644 (file)
index 0000000..63c7cc5
--- /dev/null
@@ -0,0 +1,527 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+case kind_node: break;
+case kind_declaration: case kind_error_decl: break;
+case kind_statement: case kind_error_stmt: break;
+case kind_expression: case kind_error_expr: break;
+case kind_type_element: break;
+case kind_declarator: break;
+case kind_label: break;
+case kind_asm_decl: {
+  asm_decl x = CAST(asm_decl, n);
+
+  AST_set_parent_list(&x->asm_stmt, n);
+  break;
+}
+case kind_data_decl: {
+  data_decl x = CAST(data_decl, n);
+
+  AST_set_parent_list(&x->modifiers, n);
+  AST_set_parent_list(&x->decls, n);
+  break;
+}
+case kind_extension_decl: {
+  extension_decl x = CAST(extension_decl, n);
+
+  AST_set_parent_list(&x->decl, n);
+  break;
+}
+case kind_ellipsis_decl: break;
+case kind_enumerator: {
+  enumerator x = CAST(enumerator, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_oldidentifier_decl: break;
+case kind_function_decl: {
+  function_decl x = CAST(function_decl, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->modifiers, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_implicit_decl: break;
+case kind_variable_decl: {
+  variable_decl x = CAST(variable_decl, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->asm_stmt, n);
+  break;
+}
+case kind_field_decl: {
+  field_decl x = CAST(field_decl, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_asttype: {
+  asttype x = CAST(asttype, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->qualifiers, n);
+  break;
+}
+case kind_typename: break;
+case kind_typeof_expr: {
+  typeof_expr x = CAST(typeof_expr, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_typeof_type: {
+  typeof_type x = CAST(typeof_type, n);
+
+  AST_set_parent_list(&x->asttype, n);
+  break;
+}
+case kind_attribute: {
+  attribute x = CAST(attribute, n);
+
+  AST_set_parent_list(&x->word1, n);
+  break;
+}
+case kind_gcc_attribute: {
+  gcc_attribute x = CAST(gcc_attribute, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_rid: break;
+case kind_qualifier: break;
+case kind_tag_ref: case kind_enum_ref: case kind_attribute_ref: {
+  tag_ref x = CAST(tag_ref, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->fields, n);
+  break;
+}
+case kind_struct_ref: case kind_nx_struct_ref: {
+  struct_ref x = CAST(struct_ref, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->fields, n);
+  break;
+}
+case kind_union_ref: case kind_nx_union_ref: {
+  union_ref x = CAST(union_ref, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->fields, n);
+  break;
+}
+case kind_nested_declarator: {
+  nested_declarator x = CAST(nested_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  break;
+}
+case kind_function_declarator: {
+  function_declarator x = CAST(function_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->parms, n);
+  AST_set_parent_list(&x->gparms, n);
+  AST_set_parent_list(&x->qualifiers, n);
+  AST_set_parent_list(&x->return_type, n);
+  break;
+}
+case kind_pointer_declarator: {
+  pointer_declarator x = CAST(pointer_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  break;
+}
+case kind_qualified_declarator: {
+  qualified_declarator x = CAST(qualified_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->modifiers, n);
+  break;
+}
+case kind_array_declarator: {
+  array_declarator x = CAST(array_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_identifier_declarator: break;
+case kind_asm_stmt: {
+  asm_stmt x = CAST(asm_stmt, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->asm_operands1, n);
+  AST_set_parent_list(&x->asm_operands2, n);
+  AST_set_parent_list(&x->asm_clobbers, n);
+  AST_set_parent_list(&x->qualifiers, n);
+  break;
+}
+case kind_compound_stmt: {
+  compound_stmt x = CAST(compound_stmt, n);
+
+  AST_set_parent_list(&x->id_labels, n);
+  AST_set_parent_list(&x->decls, n);
+  AST_set_parent_list(&x->stmts, n);
+  break;
+}
+case kind_if_stmt: {
+  if_stmt x = CAST(if_stmt, n);
+
+  AST_set_parent_list(&x->condition, n);
+  AST_set_parent_list(&x->stmt1, n);
+  AST_set_parent_list(&x->stmt2, n);
+  break;
+}
+case kind_labeled_stmt: {
+  labeled_stmt x = CAST(labeled_stmt, n);
+
+  AST_set_parent_list(&x->label, n);
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_expression_stmt: {
+  expression_stmt x = CAST(expression_stmt, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_conditional_stmt: case kind_dowhile_stmt: case kind_while_stmt: {
+  conditional_stmt x = CAST(conditional_stmt, n);
+
+  AST_set_parent_list(&x->condition, n);
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_switch_stmt: {
+  switch_stmt x = CAST(switch_stmt, n);
+
+  AST_set_parent_list(&x->condition, n);
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_for_stmt: {
+  for_stmt x = CAST(for_stmt, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  AST_set_parent_list(&x->arg3, n);
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_break_stmt: break;
+case kind_continue_stmt: break;
+case kind_return_stmt: {
+  return_stmt x = CAST(return_stmt, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_goto_stmt: {
+  goto_stmt x = CAST(goto_stmt, n);
+
+  AST_set_parent_list(&x->id_label, n);
+  break;
+}
+case kind_computed_goto_stmt: {
+  computed_goto_stmt x = CAST(computed_goto_stmt, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_empty_stmt: break;
+case kind_unary: case kind_not: case kind_bitnot: case kind_conjugate: case kind_unary_plus: case kind_unary_minus: case kind_address_of: case kind_imagpart: case kind_realpart: case kind_alignof_expr: case kind_sizeof_expr: case kind_extension_expr: case kind_dereference: {
+  unary x = CAST(unary, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_binary: case kind_oror: case kind_andand: case kind_bitxor: case kind_bitor: case kind_bitand: case kind_rshift: case kind_lshift: case kind_modulo: case kind_divide: case kind_times: case kind_minus: case kind_plus: case kind_array_ref: {
+  binary x = CAST(binary, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_comma: {
+  comma x = CAST(comma, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_sizeof_type: {
+  sizeof_type x = CAST(sizeof_type, n);
+
+  AST_set_parent_list(&x->asttype, n);
+  break;
+}
+case kind_alignof_type: {
+  alignof_type x = CAST(alignof_type, n);
+
+  AST_set_parent_list(&x->asttype, n);
+  break;
+}
+case kind_label_address: {
+  label_address x = CAST(label_address, n);
+
+  AST_set_parent_list(&x->id_label, n);
+  break;
+}
+case kind_cast: {
+  cast x = CAST(cast, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->asttype, n);
+  break;
+}
+case kind_cast_list: {
+  cast_list x = CAST(cast_list, n);
+
+  AST_set_parent_list(&x->asttype, n);
+  AST_set_parent_list(&x->init_expr, n);
+  break;
+}
+case kind_conditional: {
+  conditional x = CAST(conditional, n);
+
+  AST_set_parent_list(&x->condition, n);
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_identifier: break;
+case kind_compound_expr: {
+  compound_expr x = CAST(compound_expr, n);
+
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_function_call: {
+  function_call x = CAST(function_call, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_field_ref: {
+  field_ref x = CAST(field_ref, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_increment: case kind_postdecrement: case kind_postincrement: case kind_predecrement: case kind_preincrement: {
+  increment x = CAST(increment, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_comparison: case kind_ne: case kind_eq: case kind_gt: case kind_lt: case kind_geq: case kind_leq: {
+  comparison x = CAST(comparison, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_assignment: case kind_bitxor_assign: case kind_bitor_assign: case kind_bitand_assign: case kind_rshift_assign: case kind_lshift_assign: case kind_modulo_assign: case kind_divide_assign: case kind_times_assign: case kind_minus_assign: case kind_plus_assign: case kind_assign: {
+  assignment x = CAST(assignment, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_init_list: {
+  init_list x = CAST(init_list, n);
+
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_init_specific: {
+  init_specific x = CAST(init_specific, n);
+
+  AST_set_parent_list(&x->designator, n);
+  AST_set_parent_list(&x->init_expr, n);
+  break;
+}
+case kind_designator: break;
+case kind_designate_field: break;
+case kind_designate_index: {
+  designate_index x = CAST(designate_index, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_lexical_cst: break;
+case kind_string_cst: break;
+case kind_string: {
+  string x = CAST(string, n);
+
+  AST_set_parent_list(&x->strings, n);
+  break;
+}
+case kind_id_label: break;
+case kind_case_label: {
+  case_label x = CAST(case_label, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->arg2, n);
+  break;
+}
+case kind_default_label: break;
+case kind_word: break;
+case kind_asm_operand: {
+  asm_operand x = CAST(asm_operand, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->string, n);
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_nesc_decl: {
+  nesc_decl x = CAST(nesc_decl, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  break;
+}
+case kind_interface: {
+  interface x = CAST(interface, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->decls, n);
+  break;
+}
+case kind_component: {
+  component x = CAST(component, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->attributes, n);
+  AST_set_parent_list(&x->parms, n);
+  AST_set_parent_list(&x->decls, n);
+  AST_set_parent_list(&x->implementation, n);
+  break;
+}
+case kind_implementation: break;
+case kind_configuration: {
+  configuration x = CAST(configuration, n);
+
+  AST_set_parent_list(&x->decls, n);
+  break;
+}
+case kind_module: {
+  module x = CAST(module, n);
+
+  AST_set_parent_list(&x->decls, n);
+  break;
+}
+case kind_binary_component: break;
+case kind_rp_interface: {
+  rp_interface x = CAST(rp_interface, n);
+
+  AST_set_parent_list(&x->decls, n);
+  break;
+}
+case kind_interface_ref: {
+  interface_ref x = CAST(interface_ref, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->args, n);
+  AST_set_parent_list(&x->word2, n);
+  AST_set_parent_list(&x->gparms, n);
+  AST_set_parent_list(&x->attributes, n);
+  break;
+}
+case kind_component_ref: {
+  component_ref x = CAST(component_ref, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->word2, n);
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_connection: case kind_eq_connection: case kind_rp_connection: {
+  connection x = CAST(connection, n);
+
+  AST_set_parent_list(&x->ep1, n);
+  AST_set_parent_list(&x->ep2, n);
+  break;
+}
+case kind_endpoint: {
+  endpoint x = CAST(endpoint, n);
+
+  AST_set_parent_list(&x->ids, n);
+  break;
+}
+case kind_parameterised_identifier: {
+  parameterised_identifier x = CAST(parameterised_identifier, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_generic_declarator: {
+  generic_declarator x = CAST(generic_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->parms, n);
+  break;
+}
+case kind_generic_call: {
+  generic_call x = CAST(generic_call, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  AST_set_parent_list(&x->args, n);
+  break;
+}
+case kind_interface_ref_declarator: {
+  interface_ref_declarator x = CAST(interface_ref_declarator, n);
+
+  AST_set_parent_list(&x->declarator, n);
+  AST_set_parent_list(&x->word1, n);
+  break;
+}
+case kind_interface_deref: {
+  interface_deref x = CAST(interface_deref, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_component_deref: {
+  component_deref x = CAST(component_deref, n);
+
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_component_typeref: break;
+case kind_atomic_stmt: {
+  atomic_stmt x = CAST(atomic_stmt, n);
+
+  AST_set_parent_list(&x->stmt, n);
+  break;
+}
+case kind_nesc_attribute: {
+  nesc_attribute x = CAST(nesc_attribute, n);
+
+  AST_set_parent_list(&x->word1, n);
+  AST_set_parent_list(&x->arg1, n);
+  break;
+}
+case kind_type_parm_decl: break;
+case kind_type_argument: {
+  type_argument x = CAST(type_argument, n);
+
+  AST_set_parent_list(&x->asttype, n);
+  break;
+}
diff --git a/src/AST_print.c b/src/AST_print.c
new file mode 100644 (file)
index 0000000..9ef73b0
--- /dev/null
@@ -0,0 +1,1021 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+case kind_node: puts("node"); break;
+case kind_declaration: puts("declaration"); break;
+case kind_statement: puts("statement"); break;
+case kind_expression: puts("expression"); break;
+case kind_type_element: puts("type_element"); break;
+case kind_declarator: puts("declarator"); break;
+case kind_label: puts("label"); break;
+case kind_asm_decl: {
+  asm_decl x = CAST(asm_decl, n);
+
+  puts("asm_decl");
+  pindent(indent); puts("asm_stmt:"); AST_print_list(indent + 1, x->asm_stmt);
+  break;
+}
+case kind_data_decl: {
+  data_decl x = CAST(data_decl, n);
+
+  puts("data_decl");
+  pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers);
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  break;
+}
+case kind_extension_decl: {
+  extension_decl x = CAST(extension_decl, n);
+
+  puts("extension_decl");
+  pindent(indent); puts("decl:"); AST_print_list(indent + 1, x->decl);
+  break;
+}
+case kind_ellipsis_decl: puts("ellipsis_decl"); break;
+case kind_enumerator: {
+  enumerator x = CAST(enumerator, n);
+
+  puts("enumerator");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_oldidentifier_decl: puts("oldidentifier_decl"); break;
+case kind_function_decl: {
+  function_decl x = CAST(function_decl, n);
+
+  puts("function_decl");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_implicit_decl: puts("implicit_decl"); break;
+case kind_variable_decl: {
+  variable_decl x = CAST(variable_decl, n);
+
+  puts("variable_decl");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("asm_stmt:"); AST_print_list(indent + 1, x->asm_stmt);
+  break;
+}
+case kind_field_decl: {
+  field_decl x = CAST(field_decl, n);
+
+  puts("field_decl");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_asttype: {
+  asttype x = CAST(asttype, n);
+
+  puts("asttype");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers);
+  break;
+}
+case kind_typename: puts("typename"); break;
+case kind_typeof_expr: {
+  typeof_expr x = CAST(typeof_expr, n);
+
+  puts("typeof_expr");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_typeof_type: {
+  typeof_type x = CAST(typeof_type, n);
+
+  puts("typeof_type");
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  break;
+}
+case kind_attribute: {
+  attribute x = CAST(attribute, n);
+
+  puts("attribute");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  break;
+}
+case kind_gcc_attribute: {
+  gcc_attribute x = CAST(gcc_attribute, n);
+
+  puts("gcc_attribute");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_rid: puts("rid"); break;
+case kind_qualifier: puts("qualifier"); break;
+case kind_tag_ref: {
+  tag_ref x = CAST(tag_ref, n);
+
+  puts("tag_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_struct_ref: {
+  struct_ref x = CAST(struct_ref, n);
+
+  puts("struct_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_union_ref: {
+  union_ref x = CAST(union_ref, n);
+
+  puts("union_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_nested_declarator: {
+  nested_declarator x = CAST(nested_declarator, n);
+
+  puts("nested_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  break;
+}
+case kind_function_declarator: {
+  function_declarator x = CAST(function_declarator, n);
+
+  puts("function_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms);
+  pindent(indent); puts("gparms:"); AST_print_list(indent + 1, x->gparms);
+  pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers);
+  pindent(indent); puts("return_type:"); AST_print_list(indent + 1, x->return_type);
+  break;
+}
+case kind_pointer_declarator: {
+  pointer_declarator x = CAST(pointer_declarator, n);
+
+  puts("pointer_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  break;
+}
+case kind_qualified_declarator: {
+  qualified_declarator x = CAST(qualified_declarator, n);
+
+  puts("qualified_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers);
+  break;
+}
+case kind_array_declarator: {
+  array_declarator x = CAST(array_declarator, n);
+
+  puts("array_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_identifier_declarator: puts("identifier_declarator"); break;
+case kind_asm_stmt: {
+  asm_stmt x = CAST(asm_stmt, n);
+
+  puts("asm_stmt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("asm_operands1:"); AST_print_list(indent + 1, x->asm_operands1);
+  pindent(indent); puts("asm_operands2:"); AST_print_list(indent + 1, x->asm_operands2);
+  pindent(indent); puts("asm_clobbers:"); AST_print_list(indent + 1, x->asm_clobbers);
+  pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers);
+  break;
+}
+case kind_compound_stmt: {
+  compound_stmt x = CAST(compound_stmt, n);
+
+  puts("compound_stmt");
+  pindent(indent); puts("id_labels:"); AST_print_list(indent + 1, x->id_labels);
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  pindent(indent); puts("stmts:"); AST_print_list(indent + 1, x->stmts);
+  break;
+}
+case kind_if_stmt: {
+  if_stmt x = CAST(if_stmt, n);
+
+  puts("if_stmt");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("stmt1:"); AST_print_list(indent + 1, x->stmt1);
+  pindent(indent); puts("stmt2:"); AST_print_list(indent + 1, x->stmt2);
+  break;
+}
+case kind_labeled_stmt: {
+  labeled_stmt x = CAST(labeled_stmt, n);
+
+  puts("labeled_stmt");
+  pindent(indent); puts("label:"); AST_print_list(indent + 1, x->label);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_expression_stmt: {
+  expression_stmt x = CAST(expression_stmt, n);
+
+  puts("expression_stmt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_conditional_stmt: {
+  conditional_stmt x = CAST(conditional_stmt, n);
+
+  puts("conditional_stmt");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_switch_stmt: {
+  switch_stmt x = CAST(switch_stmt, n);
+
+  puts("switch_stmt");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_for_stmt: {
+  for_stmt x = CAST(for_stmt, n);
+
+  puts("for_stmt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  pindent(indent); puts("arg3:"); AST_print_list(indent + 1, x->arg3);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_break_stmt: puts("break_stmt"); break;
+case kind_continue_stmt: puts("continue_stmt"); break;
+case kind_return_stmt: {
+  return_stmt x = CAST(return_stmt, n);
+
+  puts("return_stmt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_goto_stmt: {
+  goto_stmt x = CAST(goto_stmt, n);
+
+  puts("goto_stmt");
+  pindent(indent); puts("id_label:"); AST_print_list(indent + 1, x->id_label);
+  break;
+}
+case kind_computed_goto_stmt: {
+  computed_goto_stmt x = CAST(computed_goto_stmt, n);
+
+  puts("computed_goto_stmt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_empty_stmt: puts("empty_stmt"); break;
+case kind_unary: {
+  unary x = CAST(unary, n);
+
+  puts("unary");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_binary: {
+  binary x = CAST(binary, n);
+
+  puts("binary");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_comma: {
+  comma x = CAST(comma, n);
+
+  puts("comma");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_sizeof_type: {
+  sizeof_type x = CAST(sizeof_type, n);
+
+  puts("sizeof_type");
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  break;
+}
+case kind_alignof_type: {
+  alignof_type x = CAST(alignof_type, n);
+
+  puts("alignof_type");
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  break;
+}
+case kind_label_address: {
+  label_address x = CAST(label_address, n);
+
+  puts("label_address");
+  pindent(indent); puts("id_label:"); AST_print_list(indent + 1, x->id_label);
+  break;
+}
+case kind_cast: {
+  cast x = CAST(cast, n);
+
+  puts("cast");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  break;
+}
+case kind_cast_list: {
+  cast_list x = CAST(cast_list, n);
+
+  puts("cast_list");
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  pindent(indent); puts("init_expr:"); AST_print_list(indent + 1, x->init_expr);
+  break;
+}
+case kind_conditional: {
+  conditional x = CAST(conditional, n);
+
+  puts("conditional");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_identifier: puts("identifier"); break;
+case kind_compound_expr: {
+  compound_expr x = CAST(compound_expr, n);
+
+  puts("compound_expr");
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_function_call: {
+  function_call x = CAST(function_call, n);
+
+  puts("function_call");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_field_ref: {
+  field_ref x = CAST(field_ref, n);
+
+  puts("field_ref");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_increment: {
+  increment x = CAST(increment, n);
+
+  puts("increment");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_comparison: {
+  comparison x = CAST(comparison, n);
+
+  puts("comparison");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_assignment: {
+  assignment x = CAST(assignment, n);
+
+  puts("assignment");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_init_list: {
+  init_list x = CAST(init_list, n);
+
+  puts("init_list");
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_init_specific: {
+  init_specific x = CAST(init_specific, n);
+
+  puts("init_specific");
+  pindent(indent); puts("designator:"); AST_print_list(indent + 1, x->designator);
+  pindent(indent); puts("init_expr:"); AST_print_list(indent + 1, x->init_expr);
+  break;
+}
+case kind_designator: puts("designator"); break;
+case kind_designate_field: puts("designate_field"); break;
+case kind_designate_index: {
+  designate_index x = CAST(designate_index, n);
+
+  puts("designate_index");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_lexical_cst: puts("lexical_cst"); break;
+case kind_string_cst: puts("string_cst"); break;
+case kind_string: {
+  string x = CAST(string, n);
+
+  puts("string");
+  pindent(indent); puts("strings:"); AST_print_list(indent + 1, x->strings);
+  break;
+}
+case kind_id_label: puts("id_label"); break;
+case kind_case_label: {
+  case_label x = CAST(case_label, n);
+
+  puts("case_label");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_default_label: puts("default_label"); break;
+case kind_word: puts("word"); break;
+case kind_asm_operand: {
+  asm_operand x = CAST(asm_operand, n);
+
+  puts("asm_operand");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("string:"); AST_print_list(indent + 1, x->string);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_nesc_decl: {
+  nesc_decl x = CAST(nesc_decl, n);
+
+  puts("nesc_decl");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  break;
+}
+case kind_interface: {
+  interface x = CAST(interface, n);
+
+  puts("interface");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  break;
+}
+case kind_component: {
+  component x = CAST(component, n);
+
+  puts("component");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms);
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  pindent(indent); puts("implementation:"); AST_print_list(indent + 1, x->implementation);
+  break;
+}
+case kind_implementation: puts("implementation"); break;
+case kind_configuration: {
+  configuration x = CAST(configuration, n);
+
+  puts("configuration");
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  break;
+}
+case kind_module: {
+  module x = CAST(module, n);
+
+  puts("module");
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  break;
+}
+case kind_binary_component: puts("binary_component"); break;
+case kind_rp_interface: {
+  rp_interface x = CAST(rp_interface, n);
+
+  puts("rp_interface");
+  pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls);
+  break;
+}
+case kind_interface_ref: {
+  interface_ref x = CAST(interface_ref, n);
+
+  puts("interface_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  pindent(indent); puts("word2:"); AST_print_list(indent + 1, x->word2);
+  pindent(indent); puts("gparms:"); AST_print_list(indent + 1, x->gparms);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  break;
+}
+case kind_component_ref: {
+  component_ref x = CAST(component_ref, n);
+
+  puts("component_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("word2:"); AST_print_list(indent + 1, x->word2);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_connection: {
+  connection x = CAST(connection, n);
+
+  puts("connection");
+  pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1);
+  pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2);
+  break;
+}
+case kind_endpoint: {
+  endpoint x = CAST(endpoint, n);
+
+  puts("endpoint");
+  pindent(indent); puts("ids:"); AST_print_list(indent + 1, x->ids);
+  break;
+}
+case kind_parameterised_identifier: {
+  parameterised_identifier x = CAST(parameterised_identifier, n);
+
+  puts("parameterised_identifier");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_generic_declarator: {
+  generic_declarator x = CAST(generic_declarator, n);
+
+  puts("generic_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms);
+  break;
+}
+case kind_generic_call: {
+  generic_call x = CAST(generic_call, n);
+
+  puts("generic_call");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args);
+  break;
+}
+case kind_interface_ref_declarator: {
+  interface_ref_declarator x = CAST(interface_ref_declarator, n);
+
+  puts("interface_ref_declarator");
+  pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator);
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  break;
+}
+case kind_interface_deref: {
+  interface_deref x = CAST(interface_deref, n);
+
+  puts("interface_deref");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_component_deref: {
+  component_deref x = CAST(component_deref, n);
+
+  puts("component_deref");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_component_typeref: puts("component_typeref"); break;
+case kind_atomic_stmt: {
+  atomic_stmt x = CAST(atomic_stmt, n);
+
+  puts("atomic_stmt");
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_nesc_attribute: {
+  nesc_attribute x = CAST(nesc_attribute, n);
+
+  puts("nesc_attribute");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_type_parm_decl: puts("type_parm_decl"); break;
+case kind_type_argument: {
+  type_argument x = CAST(type_argument, n);
+
+  puts("type_argument");
+  pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype);
+  break;
+}
+case kind_error_decl: puts("error_decl"); break;
+case kind_attribute_ref: {
+  attribute_ref x = CAST(attribute_ref, n);
+
+  puts("attribute_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_enum_ref: {
+  enum_ref x = CAST(enum_ref, n);
+
+  puts("enum_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_error_stmt: puts("error_stmt"); break;
+case kind_while_stmt: {
+  while_stmt x = CAST(while_stmt, n);
+
+  puts("while_stmt");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_dowhile_stmt: {
+  dowhile_stmt x = CAST(dowhile_stmt, n);
+
+  puts("dowhile_stmt");
+  pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition);
+  pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt);
+  break;
+}
+case kind_error_expr: puts("error_expr"); break;
+case kind_array_ref: {
+  array_ref x = CAST(array_ref, n);
+
+  puts("array_ref");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_dereference: {
+  dereference x = CAST(dereference, n);
+
+  puts("dereference");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_extension_expr: {
+  extension_expr x = CAST(extension_expr, n);
+
+  puts("extension_expr");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_sizeof_expr: {
+  sizeof_expr x = CAST(sizeof_expr, n);
+
+  puts("sizeof_expr");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_alignof_expr: {
+  alignof_expr x = CAST(alignof_expr, n);
+
+  puts("alignof_expr");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_realpart: {
+  realpart x = CAST(realpart, n);
+
+  puts("realpart");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_imagpart: {
+  imagpart x = CAST(imagpart, n);
+
+  puts("imagpart");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_address_of: {
+  address_of x = CAST(address_of, n);
+
+  puts("address_of");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_unary_minus: {
+  unary_minus x = CAST(unary_minus, n);
+
+  puts("unary_minus");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_unary_plus: {
+  unary_plus x = CAST(unary_plus, n);
+
+  puts("unary_plus");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_conjugate: {
+  conjugate x = CAST(conjugate, n);
+
+  puts("conjugate");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_bitnot: {
+  bitnot x = CAST(bitnot, n);
+
+  puts("bitnot");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_not: {
+  not x = CAST(not, n);
+
+  puts("not");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_preincrement: {
+  preincrement x = CAST(preincrement, n);
+
+  puts("preincrement");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_predecrement: {
+  predecrement x = CAST(predecrement, n);
+
+  puts("predecrement");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_postincrement: {
+  postincrement x = CAST(postincrement, n);
+
+  puts("postincrement");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_postdecrement: {
+  postdecrement x = CAST(postdecrement, n);
+
+  puts("postdecrement");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  break;
+}
+case kind_plus: {
+  plus x = CAST(plus, n);
+
+  puts("plus");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_minus: {
+  minus x = CAST(minus, n);
+
+  puts("minus");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_times: {
+  times x = CAST(times, n);
+
+  puts("times");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_divide: {
+  divide x = CAST(divide, n);
+
+  puts("divide");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_modulo: {
+  modulo x = CAST(modulo, n);
+
+  puts("modulo");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_lshift: {
+  lshift x = CAST(lshift, n);
+
+  puts("lshift");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_rshift: {
+  rshift x = CAST(rshift, n);
+
+  puts("rshift");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_leq: {
+  leq x = CAST(leq, n);
+
+  puts("leq");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_geq: {
+  geq x = CAST(geq, n);
+
+  puts("geq");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_lt: {
+  lt x = CAST(lt, n);
+
+  puts("lt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_gt: {
+  gt x = CAST(gt, n);
+
+  puts("gt");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_eq: {
+  eq x = CAST(eq, n);
+
+  puts("eq");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_ne: {
+  ne x = CAST(ne, n);
+
+  puts("ne");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitand: {
+  bitand x = CAST(bitand, n);
+
+  puts("bitand");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitor: {
+  bitor x = CAST(bitor, n);
+
+  puts("bitor");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitxor: {
+  bitxor x = CAST(bitxor, n);
+
+  puts("bitxor");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_andand: {
+  andand x = CAST(andand, n);
+
+  puts("andand");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_oror: {
+  oror x = CAST(oror, n);
+
+  puts("oror");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_assign: {
+  assign x = CAST(assign, n);
+
+  puts("assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_plus_assign: {
+  plus_assign x = CAST(plus_assign, n);
+
+  puts("plus_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_minus_assign: {
+  minus_assign x = CAST(minus_assign, n);
+
+  puts("minus_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_times_assign: {
+  times_assign x = CAST(times_assign, n);
+
+  puts("times_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_divide_assign: {
+  divide_assign x = CAST(divide_assign, n);
+
+  puts("divide_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_modulo_assign: {
+  modulo_assign x = CAST(modulo_assign, n);
+
+  puts("modulo_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_lshift_assign: {
+  lshift_assign x = CAST(lshift_assign, n);
+
+  puts("lshift_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_rshift_assign: {
+  rshift_assign x = CAST(rshift_assign, n);
+
+  puts("rshift_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitand_assign: {
+  bitand_assign x = CAST(bitand_assign, n);
+
+  puts("bitand_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitor_assign: {
+  bitor_assign x = CAST(bitor_assign, n);
+
+  puts("bitor_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_bitxor_assign: {
+  bitxor_assign x = CAST(bitxor_assign, n);
+
+  puts("bitxor_assign");
+  pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1);
+  pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2);
+  break;
+}
+case kind_rp_connection: {
+  rp_connection x = CAST(rp_connection, n);
+
+  puts("rp_connection");
+  pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1);
+  pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2);
+  break;
+}
+case kind_eq_connection: {
+  eq_connection x = CAST(eq_connection, n);
+
+  puts("eq_connection");
+  pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1);
+  pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2);
+  break;
+}
+case kind_nx_struct_ref: {
+  nx_struct_ref x = CAST(nx_struct_ref, n);
+
+  puts("nx_struct_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
+case kind_nx_union_ref: {
+  nx_union_ref x = CAST(nx_union_ref, n);
+
+  puts("nx_union_ref");
+  pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1);
+  pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes);
+  pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields);
+  break;
+}
diff --git a/src/AST_types.c b/src/AST_types.c
new file mode 100644 (file)
index 0000000..1e07059
--- /dev/null
@@ -0,0 +1,2591 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+node new_node(region r, location location)
+{
+  node obj = ralloc(r, struct AST_node);
+
+  obj->kind = kind_node;
+  obj->location = location;
+
+  return obj;
+}
+
+declaration new_declaration(region r, location location)
+{
+  declaration obj = ralloc(r, struct AST_declaration);
+
+  obj->kind = kind_declaration;
+  obj->location = location;
+
+  return obj;
+}
+
+statement new_statement(region r, location location)
+{
+  statement obj = ralloc(r, struct AST_statement);
+
+  obj->kind = kind_statement;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+expression new_expression(region r, location location)
+{
+  expression obj = ralloc(r, struct AST_expression);
+
+  obj->kind = kind_expression;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+type_element new_type_element(region r, location location)
+{
+  type_element obj = ralloc(r, struct AST_type_element);
+
+  obj->kind = kind_type_element;
+  obj->location = location;
+
+  return obj;
+}
+
+declarator new_declarator(region r, location location)
+{
+  declarator obj = ralloc(r, struct AST_declarator);
+
+  obj->kind = kind_declarator;
+  obj->location = location;
+
+  return obj;
+}
+
+label new_label(region r, location location)
+{
+  label obj = ralloc(r, struct AST_label);
+
+  obj->kind = kind_label;
+  obj->location = location;
+
+  return obj;
+}
+
+asm_decl new_asm_decl(region r, location location, asm_stmt asm_stmt)
+{
+  asm_decl obj = ralloc(r, struct AST_asm_decl);
+
+  obj->kind = kind_asm_decl;
+  obj->location = location;
+  obj->asm_stmt = asm_stmt;
+
+  return obj;
+}
+
+data_decl new_data_decl(region r, location location, type_element modifiers, declaration decls)
+{
+  data_decl obj = ralloc(r, struct AST_data_decl);
+
+  obj->kind = kind_data_decl;
+  obj->location = location;
+  obj->modifiers = modifiers;
+  obj->decls = decls;
+
+  return obj;
+}
+
+extension_decl new_extension_decl(region r, location location, declaration decl)
+{
+  extension_decl obj = ralloc(r, struct AST_extension_decl);
+
+  obj->kind = kind_extension_decl;
+  obj->location = location;
+  obj->decl = decl;
+
+  return obj;
+}
+
+ellipsis_decl new_ellipsis_decl(region r, location location)
+{
+  ellipsis_decl obj = ralloc(r, struct AST_ellipsis_decl);
+
+  obj->kind = kind_ellipsis_decl;
+  obj->location = location;
+
+  return obj;
+}
+
+enumerator new_enumerator(region r, location location, cstring cstring, expression arg1, data_declaration ddecl)
+{
+  enumerator obj = ralloc(r, struct AST_enumerator);
+
+  obj->kind = kind_enumerator;
+  obj->location = location;
+  obj->cstring = cstring;
+  obj->arg1 = arg1;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+oldidentifier_decl new_oldidentifier_decl(region r, location location, cstring cstring, data_declaration ddecl)
+{
+  oldidentifier_decl obj = ralloc(r, struct AST_oldidentifier_decl);
+
+  obj->kind = kind_oldidentifier_decl;
+  obj->location = location;
+  obj->cstring = cstring;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+function_decl new_function_decl(region r, location location, declarator declarator, type_element modifiers, attribute attributes, declaration old_parms, statement stmt, function_decl parent_function, data_declaration ddecl)
+{
+  function_decl obj = ralloc(r, struct AST_function_decl);
+
+  obj->kind = kind_function_decl;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->modifiers = modifiers;
+  obj->attributes = attributes;
+  obj->old_parms = old_parms;
+  obj->stmt = stmt;
+  obj->parent_function = parent_function;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+implicit_decl new_implicit_decl(region r, location location, identifier ident)
+{
+  implicit_decl obj = ralloc(r, struct AST_implicit_decl);
+
+  obj->kind = kind_implicit_decl;
+  obj->location = location;
+  obj->ident = ident;
+
+  return obj;
+}
+
+variable_decl new_variable_decl(region r, location location, declarator declarator, attribute attributes, expression arg1, asm_stmt asm_stmt, data_declaration ddecl)
+{
+  variable_decl obj = ralloc(r, struct AST_variable_decl);
+
+  obj->kind = kind_variable_decl;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->attributes = attributes;
+  obj->arg1 = arg1;
+  obj->asm_stmt = asm_stmt;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+field_decl new_field_decl(region r, location location, declarator declarator, attribute attributes, expression arg1)
+{
+  field_decl obj = ralloc(r, struct AST_field_decl);
+
+  obj->kind = kind_field_decl;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->attributes = attributes;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+asttype new_asttype(region r, location location, declarator declarator, type_element qualifiers)
+{
+  asttype obj = ralloc(r, struct AST_asttype);
+
+  obj->kind = kind_asttype;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->qualifiers = qualifiers;
+
+  return obj;
+}
+
+typename new_typename(region r, location location, data_declaration ddecl)
+{
+  typename obj = ralloc(r, struct AST_typename);
+
+  obj->kind = kind_typename;
+  obj->location = location;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+typeof_expr new_typeof_expr(region r, location location, expression arg1)
+{
+  typeof_expr obj = ralloc(r, struct AST_typeof_expr);
+
+  obj->kind = kind_typeof_expr;
+  obj->location = location;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+typeof_type new_typeof_type(region r, location location, asttype asttype)
+{
+  typeof_type obj = ralloc(r, struct AST_typeof_type);
+
+  obj->kind = kind_typeof_type;
+  obj->location = location;
+  obj->asttype = asttype;
+
+  return obj;
+}
+
+attribute new_attribute(region r, location location, word word1)
+{
+  attribute obj = ralloc(r, struct AST_attribute);
+
+  obj->kind = kind_attribute;
+  obj->location = location;
+  obj->word1 = word1;
+
+  return obj;
+}
+
+gcc_attribute new_gcc_attribute(region r, location location, word word1, expression args)
+{
+  gcc_attribute obj = ralloc(r, struct AST_gcc_attribute);
+
+  obj->kind = kind_gcc_attribute;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->args = args;
+
+  return obj;
+}
+
+rid new_rid(region r, location location, enum rid id)
+{
+  rid obj = ralloc(r, struct AST_rid);
+
+  obj->kind = kind_rid;
+  obj->location = location;
+  obj->id = id;
+
+  return obj;
+}
+
+qualifier new_qualifier(region r, location location, enum rid id)
+{
+  qualifier obj = ralloc(r, struct AST_qualifier);
+
+  obj->kind = kind_qualifier;
+  obj->location = location;
+  obj->id = id;
+
+  return obj;
+}
+
+tag_ref new_tag_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  tag_ref obj = ralloc(r, struct AST_tag_ref);
+
+  obj->kind = kind_tag_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+struct_ref new_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  struct_ref obj = ralloc(r, struct AST_struct_ref);
+
+  obj->kind = kind_struct_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+union_ref new_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  union_ref obj = ralloc(r, struct AST_union_ref);
+
+  obj->kind = kind_union_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+nested_declarator new_nested_declarator(region r, location location, declarator declarator)
+{
+  nested_declarator obj = ralloc(r, struct AST_nested_declarator);
+
+  obj->kind = kind_nested_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+
+  return obj;
+}
+
+function_declarator new_function_declarator(region r, location location, declarator declarator, declaration parms, declaration gparms, type_element qualifiers, environment env)
+{
+  function_declarator obj = ralloc(r, struct AST_function_declarator);
+
+  obj->kind = kind_function_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->parms = parms;
+  obj->gparms = gparms;
+  obj->qualifiers = qualifiers;
+  obj->env = env;
+
+  return obj;
+}
+
+pointer_declarator new_pointer_declarator(region r, location location, declarator declarator)
+{
+  pointer_declarator obj = ralloc(r, struct AST_pointer_declarator);
+
+  obj->kind = kind_pointer_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+
+  return obj;
+}
+
+qualified_declarator new_qualified_declarator(region r, location location, declarator declarator, type_element modifiers)
+{
+  qualified_declarator obj = ralloc(r, struct AST_qualified_declarator);
+
+  obj->kind = kind_qualified_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->modifiers = modifiers;
+
+  return obj;
+}
+
+array_declarator new_array_declarator(region r, location location, declarator declarator, expression arg1)
+{
+  array_declarator obj = ralloc(r, struct AST_array_declarator);
+
+  obj->kind = kind_array_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+identifier_declarator new_identifier_declarator(region r, location location, cstring cstring)
+{
+  identifier_declarator obj = ralloc(r, struct AST_identifier_declarator);
+
+  obj->kind = kind_identifier_declarator;
+  obj->location = location;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+asm_stmt new_asm_stmt(region r, location location, expression arg1, asm_operand asm_operands1, asm_operand asm_operands2, string asm_clobbers, type_element qualifiers)
+{
+  asm_stmt obj = ralloc(r, struct AST_asm_stmt);
+
+  obj->kind = kind_asm_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->asm_operands1 = asm_operands1;
+  obj->asm_operands2 = asm_operands2;
+  obj->asm_clobbers = asm_clobbers;
+  obj->qualifiers = qualifiers;
+
+  return obj;
+}
+
+compound_stmt new_compound_stmt(region r, location location, id_label id_labels, declaration decls, statement stmts, environment env)
+{
+  compound_stmt obj = ralloc(r, struct AST_compound_stmt);
+
+  obj->kind = kind_compound_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->id_labels = id_labels;
+  obj->decls = decls;
+  obj->stmts = stmts;
+  obj->env = env;
+
+  return obj;
+}
+
+if_stmt new_if_stmt(region r, location location, expression condition, statement stmt1, statement stmt2)
+{
+  if_stmt obj = ralloc(r, struct AST_if_stmt);
+
+  obj->kind = kind_if_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->stmt1 = stmt1;
+  obj->stmt2 = stmt2;
+
+  return obj;
+}
+
+labeled_stmt new_labeled_stmt(region r, location location, label label, statement stmt)
+{
+  labeled_stmt obj = ralloc(r, struct AST_labeled_stmt);
+
+  obj->kind = kind_labeled_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->label = label;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+expression_stmt new_expression_stmt(region r, location location, expression arg1)
+{
+  expression_stmt obj = ralloc(r, struct AST_expression_stmt);
+
+  obj->kind = kind_expression_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+conditional_stmt new_conditional_stmt(region r, location location, expression condition, statement stmt)
+{
+  conditional_stmt obj = ralloc(r, struct AST_conditional_stmt);
+
+  obj->kind = kind_conditional_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+switch_stmt new_switch_stmt(region r, location location, expression condition, statement stmt)
+{
+  switch_stmt obj = ralloc(r, struct AST_switch_stmt);
+
+  obj->kind = kind_switch_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+for_stmt new_for_stmt(region r, location location, expression arg1, expression arg2, expression arg3, statement stmt)
+{
+  for_stmt obj = ralloc(r, struct AST_for_stmt);
+
+  obj->kind = kind_for_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+  obj->arg3 = arg3;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+break_stmt new_break_stmt(region r, location location)
+{
+  break_stmt obj = ralloc(r, struct AST_break_stmt);
+
+  obj->kind = kind_break_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+continue_stmt new_continue_stmt(region r, location location)
+{
+  continue_stmt obj = ralloc(r, struct AST_continue_stmt);
+
+  obj->kind = kind_continue_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+return_stmt new_return_stmt(region r, location location, expression arg1)
+{
+  return_stmt obj = ralloc(r, struct AST_return_stmt);
+
+  obj->kind = kind_return_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+goto_stmt new_goto_stmt(region r, location location, id_label id_label)
+{
+  goto_stmt obj = ralloc(r, struct AST_goto_stmt);
+
+  obj->kind = kind_goto_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->id_label = id_label;
+
+  return obj;
+}
+
+computed_goto_stmt new_computed_goto_stmt(region r, location location, expression arg1)
+{
+  computed_goto_stmt obj = ralloc(r, struct AST_computed_goto_stmt);
+
+  obj->kind = kind_computed_goto_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+empty_stmt new_empty_stmt(region r, location location)
+{
+  empty_stmt obj = ralloc(r, struct AST_empty_stmt);
+
+  obj->kind = kind_empty_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+unary new_unary(region r, location location, expression arg1)
+{
+  unary obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_unary;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+binary new_binary(region r, location location, expression arg1, expression arg2)
+{
+  binary obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_binary;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+comma new_comma(region r, location location, expression arg1)
+{
+  comma obj = ralloc(r, struct AST_comma);
+
+  obj->kind = kind_comma;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+sizeof_type new_sizeof_type(region r, location location, asttype asttype)
+{
+  sizeof_type obj = ralloc(r, struct AST_sizeof_type);
+
+  obj->kind = kind_sizeof_type;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->asttype = asttype;
+
+  return obj;
+}
+
+alignof_type new_alignof_type(region r, location location, asttype asttype)
+{
+  alignof_type obj = ralloc(r, struct AST_alignof_type);
+
+  obj->kind = kind_alignof_type;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->asttype = asttype;
+
+  return obj;
+}
+
+label_address new_label_address(region r, location location, id_label id_label)
+{
+  label_address obj = ralloc(r, struct AST_label_address);
+
+  obj->kind = kind_label_address;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->id_label = id_label;
+
+  return obj;
+}
+
+cast new_cast(region r, location location, expression arg1, asttype asttype)
+{
+  cast obj = ralloc(r, struct AST_cast);
+
+  obj->kind = kind_cast;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->asttype = asttype;
+
+  return obj;
+}
+
+cast_list new_cast_list(region r, location location, asttype asttype, expression init_expr)
+{
+  cast_list obj = ralloc(r, struct AST_cast_list);
+
+  obj->kind = kind_cast_list;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->asttype = asttype;
+  obj->init_expr = init_expr;
+
+  return obj;
+}
+
+conditional new_conditional(region r, location location, expression condition, expression arg1, expression arg2)
+{
+  conditional obj = ralloc(r, struct AST_conditional);
+
+  obj->kind = kind_conditional;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+identifier new_identifier(region r, location location, cstring cstring, data_declaration ddecl)
+{
+  identifier obj = ralloc(r, struct AST_identifier);
+
+  obj->kind = kind_identifier;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->cstring = cstring;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+compound_expr new_compound_expr(region r, location location, statement stmt)
+{
+  compound_expr obj = ralloc(r, struct AST_compound_expr);
+
+  obj->kind = kind_compound_expr;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+function_call new_function_call(region r, location location, expression arg1, expression args, asttype va_arg_call, nesc_call_kind call_kind)
+{
+  function_call obj = ralloc(r, struct AST_function_call);
+
+  obj->kind = kind_function_call;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->args = args;
+  obj->va_arg_call = va_arg_call;
+  obj->call_kind = call_kind;
+
+  return obj;
+}
+
+field_ref new_field_ref(region r, location location, expression arg1, cstring cstring)
+{
+  field_ref obj = ralloc(r, struct AST_field_ref);
+
+  obj->kind = kind_field_ref;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+increment new_increment(region r, location location, expression arg1)
+{
+  increment obj = ralloc(r, struct AST_increment);
+
+  obj->kind = kind_increment;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+comparison new_comparison(region r, location location, expression arg1, expression arg2)
+{
+  comparison obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_comparison;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+assignment new_assignment(region r, location location, expression arg1, expression arg2)
+{
+  assignment obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_assignment;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+init_list new_init_list(region r, location location, expression args)
+{
+  init_list obj = ralloc(r, struct AST_init_list);
+
+  obj->kind = kind_init_list;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->args = args;
+
+  return obj;
+}
+
+init_specific new_init_specific(region r, location location, designator designator, expression init_expr)
+{
+  init_specific obj = ralloc(r, struct AST_init_specific);
+
+  obj->kind = kind_init_specific;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->designator = designator;
+  obj->init_expr = init_expr;
+
+  return obj;
+}
+
+designator new_designator(region r, location location)
+{
+  designator obj = ralloc(r, struct AST_designator);
+
+  obj->kind = kind_designator;
+  obj->location = location;
+
+  return obj;
+}
+
+designate_field new_designate_field(region r, location location, cstring cstring)
+{
+  designate_field obj = ralloc(r, struct AST_designate_field);
+
+  obj->kind = kind_designate_field;
+  obj->location = location;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+designate_index new_designate_index(region r, location location, expression arg1, expression arg2)
+{
+  designate_index obj = ralloc(r, struct AST_designate_index);
+
+  obj->kind = kind_designate_index;
+  obj->location = location;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+lexical_cst new_lexical_cst(region r, location location, cstring cstring)
+{
+  lexical_cst obj = ralloc(r, struct AST_lexical_cst);
+
+  obj->kind = kind_lexical_cst;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+string_cst new_string_cst(region r, location location, cstring cstring)
+{
+  string_cst obj = ralloc(r, struct AST_string_cst);
+
+  obj->kind = kind_string_cst;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+string new_string(region r, location location, string_cst strings, data_declaration ddecl)
+{
+  string obj = ralloc(r, struct AST_string);
+
+  obj->kind = kind_string;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->strings = strings;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+id_label new_id_label(region r, location location, cstring cstring)
+{
+  id_label obj = ralloc(r, struct AST_id_label);
+
+  obj->kind = kind_id_label;
+  obj->location = location;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+case_label new_case_label(region r, location location, expression arg1, expression arg2)
+{
+  case_label obj = ralloc(r, struct AST_case_label);
+
+  obj->kind = kind_case_label;
+  obj->location = location;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+default_label new_default_label(region r, location location)
+{
+  default_label obj = ralloc(r, struct AST_default_label);
+
+  obj->kind = kind_default_label;
+  obj->location = location;
+
+  return obj;
+}
+
+word new_word(region r, location location, cstring cstring)
+{
+  word obj = ralloc(r, struct AST_word);
+
+  obj->kind = kind_word;
+  obj->location = location;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+asm_operand new_asm_operand(region r, location location, word word1, string string, expression arg1)
+{
+  asm_operand obj = ralloc(r, struct AST_asm_operand);
+
+  obj->kind = kind_asm_operand;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->string = string;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+nesc_decl new_nesc_decl(region r, location location, word word1, attribute attributes)
+{
+  nesc_decl obj = ralloc(r, struct AST_nesc_decl);
+
+  obj->kind = kind_nesc_decl;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+
+  return obj;
+}
+
+interface new_interface(region r, location location, word word1, attribute attributes, declaration decls)
+{
+  interface obj = ralloc(r, struct AST_interface);
+
+  obj->kind = kind_interface;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->decls = decls;
+
+  return obj;
+}
+
+component new_component(region r, location location, word word1, attribute attributes, bool abstract, declaration parms, declaration decls, implementation implementation)
+{
+  component obj = ralloc(r, struct AST_component);
+
+  obj->kind = kind_component;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->abstract = abstract;
+  obj->parms = parms;
+  obj->decls = decls;
+  obj->implementation = implementation;
+
+  return obj;
+}
+
+implementation new_implementation(region r, location location, environment ienv)
+{
+  implementation obj = ralloc(r, struct AST_implementation);
+
+  obj->kind = kind_implementation;
+  obj->location = location;
+  obj->ienv = ienv;
+
+  return obj;
+}
+
+configuration new_configuration(region r, location location, environment ienv, declaration decls)
+{
+  configuration obj = ralloc(r, struct AST_configuration);
+
+  obj->kind = kind_configuration;
+  obj->location = location;
+  obj->ienv = ienv;
+  obj->decls = decls;
+
+  return obj;
+}
+
+module new_module(region r, location location, environment ienv, declaration decls)
+{
+  module obj = ralloc(r, struct AST_module);
+
+  obj->kind = kind_module;
+  obj->location = location;
+  obj->ienv = ienv;
+  obj->decls = decls;
+
+  return obj;
+}
+
+binary_component new_binary_component(region r, location location, environment ienv)
+{
+  binary_component obj = ralloc(r, struct AST_binary_component);
+
+  obj->kind = kind_binary_component;
+  obj->location = location;
+  obj->ienv = ienv;
+
+  return obj;
+}
+
+rp_interface new_rp_interface(region r, location location, bool required, declaration decls)
+{
+  rp_interface obj = ralloc(r, struct AST_rp_interface);
+
+  obj->kind = kind_rp_interface;
+  obj->location = location;
+  obj->required = required;
+  obj->decls = decls;
+
+  return obj;
+}
+
+interface_ref new_interface_ref(region r, location location, word word1, expression args, word word2, declaration gparms, attribute attributes, data_declaration ddecl)
+{
+  interface_ref obj = ralloc(r, struct AST_interface_ref);
+
+  obj->kind = kind_interface_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->args = args;
+  obj->word2 = word2;
+  obj->gparms = gparms;
+  obj->attributes = attributes;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+component_ref new_component_ref(region r, location location, word word1, word word2, bool abstract, expression args)
+{
+  component_ref obj = ralloc(r, struct AST_component_ref);
+
+  obj->kind = kind_component_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->word2 = word2;
+  obj->abstract = abstract;
+  obj->args = args;
+
+  return obj;
+}
+
+connection new_connection(region r, location location, endpoint ep1, endpoint ep2)
+{
+  connection obj = ralloc(r, struct AST_connection);
+
+  obj->kind = kind_connection;
+  obj->location = location;
+  obj->ep1 = ep1;
+  obj->ep2 = ep2;
+
+  return obj;
+}
+
+endpoint new_endpoint(region r, location location, parameterised_identifier ids)
+{
+  endpoint obj = ralloc(r, struct AST_endpoint);
+
+  obj->kind = kind_endpoint;
+  obj->location = location;
+  obj->ids = ids;
+
+  return obj;
+}
+
+parameterised_identifier new_parameterised_identifier(region r, location location, word word1, expression args)
+{
+  parameterised_identifier obj = ralloc(r, struct AST_parameterised_identifier);
+
+  obj->kind = kind_parameterised_identifier;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->args = args;
+
+  return obj;
+}
+
+generic_declarator new_generic_declarator(region r, location location, declarator declarator, declaration parms)
+{
+  generic_declarator obj = ralloc(r, struct AST_generic_declarator);
+
+  obj->kind = kind_generic_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->parms = parms;
+
+  return obj;
+}
+
+generic_call new_generic_call(region r, location location, expression arg1, expression args)
+{
+  generic_call obj = ralloc(r, struct AST_generic_call);
+
+  obj->kind = kind_generic_call;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->args = args;
+
+  return obj;
+}
+
+interface_ref_declarator new_interface_ref_declarator(region r, location location, declarator declarator, word word1)
+{
+  interface_ref_declarator obj = ralloc(r, struct AST_interface_ref_declarator);
+
+  obj->kind = kind_interface_ref_declarator;
+  obj->location = location;
+  obj->declarator = declarator;
+  obj->word1 = word1;
+
+  return obj;
+}
+
+interface_deref new_interface_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl)
+{
+  interface_deref obj = ralloc(r, struct AST_interface_deref);
+
+  obj->kind = kind_interface_deref;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->cstring = cstring;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+component_deref new_component_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl)
+{
+  component_deref obj = ralloc(r, struct AST_component_deref);
+
+  obj->kind = kind_component_deref;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->cstring = cstring;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+component_typeref new_component_typeref(region r, location location, data_declaration ddecl, cstring cstring)
+{
+  component_typeref obj = ralloc(r, struct AST_component_typeref);
+
+  obj->kind = kind_component_typeref;
+  obj->location = location;
+  obj->ddecl = ddecl;
+  obj->cstring = cstring;
+
+  return obj;
+}
+
+atomic_stmt new_atomic_stmt(region r, location location, statement stmt)
+{
+  atomic_stmt obj = ralloc(r, struct AST_atomic_stmt);
+
+  obj->kind = kind_atomic_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+nesc_attribute new_nesc_attribute(region r, location location, word word1, expression arg1)
+{
+  nesc_attribute obj = ralloc(r, struct AST_nesc_attribute);
+
+  obj->kind = kind_nesc_attribute;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+type_parm_decl new_type_parm_decl(region r, location location, cstring cstring, data_declaration ddecl)
+{
+  type_parm_decl obj = ralloc(r, struct AST_type_parm_decl);
+
+  obj->kind = kind_type_parm_decl;
+  obj->location = location;
+  obj->cstring = cstring;
+  obj->ddecl = ddecl;
+
+  return obj;
+}
+
+type_argument new_type_argument(region r, location location, asttype asttype)
+{
+  type_argument obj = ralloc(r, struct AST_type_argument);
+
+  obj->kind = kind_type_argument;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->asttype = asttype;
+
+  return obj;
+}
+
+error_decl new_error_decl(region r, location location)
+{
+  error_decl obj = ralloc(r, struct AST_declaration);
+
+  obj->kind = kind_error_decl;
+  obj->location = location;
+
+  return obj;
+}
+
+attribute_ref new_attribute_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  attribute_ref obj = ralloc(r, struct AST_tag_ref);
+
+  obj->kind = kind_attribute_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+enum_ref new_enum_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  enum_ref obj = ralloc(r, struct AST_tag_ref);
+
+  obj->kind = kind_enum_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+error_stmt new_error_stmt(region r, location location)
+{
+  error_stmt obj = ralloc(r, struct AST_statement);
+
+  obj->kind = kind_error_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+while_stmt new_while_stmt(region r, location location, expression condition, statement stmt)
+{
+  while_stmt obj = ralloc(r, struct AST_conditional_stmt);
+
+  obj->kind = kind_while_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+dowhile_stmt new_dowhile_stmt(region r, location location, expression condition, statement stmt)
+{
+  dowhile_stmt obj = ralloc(r, struct AST_conditional_stmt);
+
+  obj->kind = kind_dowhile_stmt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->condition = condition;
+  obj->stmt = stmt;
+
+  return obj;
+}
+
+error_expr new_error_expr(region r, location location)
+{
+  error_expr obj = ralloc(r, struct AST_expression);
+
+  obj->kind = kind_error_expr;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+
+  return obj;
+}
+
+array_ref new_array_ref(region r, location location, expression arg1, expression arg2)
+{
+  array_ref obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_array_ref;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+dereference new_dereference(region r, location location, expression arg1)
+{
+  dereference obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_dereference;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+extension_expr new_extension_expr(region r, location location, expression arg1)
+{
+  extension_expr obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_extension_expr;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+sizeof_expr new_sizeof_expr(region r, location location, expression arg1)
+{
+  sizeof_expr obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_sizeof_expr;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+alignof_expr new_alignof_expr(region r, location location, expression arg1)
+{
+  alignof_expr obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_alignof_expr;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+realpart new_realpart(region r, location location, expression arg1)
+{
+  realpart obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_realpart;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+imagpart new_imagpart(region r, location location, expression arg1)
+{
+  imagpart obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_imagpart;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+address_of new_address_of(region r, location location, expression arg1)
+{
+  address_of obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_address_of;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+unary_minus new_unary_minus(region r, location location, expression arg1)
+{
+  unary_minus obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_unary_minus;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+unary_plus new_unary_plus(region r, location location, expression arg1)
+{
+  unary_plus obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_unary_plus;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+conjugate new_conjugate(region r, location location, expression arg1)
+{
+  conjugate obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_conjugate;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+bitnot new_bitnot(region r, location location, expression arg1)
+{
+  bitnot obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_bitnot;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+not new_not(region r, location location, expression arg1)
+{
+  not obj = ralloc(r, struct AST_unary);
+
+  obj->kind = kind_not;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+preincrement new_preincrement(region r, location location, expression arg1)
+{
+  preincrement obj = ralloc(r, struct AST_increment);
+
+  obj->kind = kind_preincrement;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+predecrement new_predecrement(region r, location location, expression arg1)
+{
+  predecrement obj = ralloc(r, struct AST_increment);
+
+  obj->kind = kind_predecrement;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+postincrement new_postincrement(region r, location location, expression arg1)
+{
+  postincrement obj = ralloc(r, struct AST_increment);
+
+  obj->kind = kind_postincrement;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+postdecrement new_postdecrement(region r, location location, expression arg1)
+{
+  postdecrement obj = ralloc(r, struct AST_increment);
+
+  obj->kind = kind_postdecrement;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+
+  return obj;
+}
+
+plus new_plus(region r, location location, expression arg1, expression arg2)
+{
+  plus obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_plus;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+minus new_minus(region r, location location, expression arg1, expression arg2)
+{
+  minus obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_minus;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+times new_times(region r, location location, expression arg1, expression arg2)
+{
+  times obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_times;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+divide new_divide(region r, location location, expression arg1, expression arg2)
+{
+  divide obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_divide;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+modulo new_modulo(region r, location location, expression arg1, expression arg2)
+{
+  modulo obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_modulo;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+lshift new_lshift(region r, location location, expression arg1, expression arg2)
+{
+  lshift obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_lshift;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+rshift new_rshift(region r, location location, expression arg1, expression arg2)
+{
+  rshift obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_rshift;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+leq new_leq(region r, location location, expression arg1, expression arg2)
+{
+  leq obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_leq;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+geq new_geq(region r, location location, expression arg1, expression arg2)
+{
+  geq obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_geq;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+lt new_lt(region r, location location, expression arg1, expression arg2)
+{
+  lt obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_lt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+gt new_gt(region r, location location, expression arg1, expression arg2)
+{
+  gt obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_gt;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+eq new_eq(region r, location location, expression arg1, expression arg2)
+{
+  eq obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_eq;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+ne new_ne(region r, location location, expression arg1, expression arg2)
+{
+  ne obj = ralloc(r, struct AST_comparison);
+
+  obj->kind = kind_ne;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitand new_bitand(region r, location location, expression arg1, expression arg2)
+{
+  bitand obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_bitand;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitor new_bitor(region r, location location, expression arg1, expression arg2)
+{
+  bitor obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_bitor;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitxor new_bitxor(region r, location location, expression arg1, expression arg2)
+{
+  bitxor obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_bitxor;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+andand new_andand(region r, location location, expression arg1, expression arg2)
+{
+  andand obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_andand;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+oror new_oror(region r, location location, expression arg1, expression arg2)
+{
+  oror obj = ralloc(r, struct AST_binary);
+
+  obj->kind = kind_oror;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+assign new_assign(region r, location location, expression arg1, expression arg2)
+{
+  assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+plus_assign new_plus_assign(region r, location location, expression arg1, expression arg2)
+{
+  plus_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_plus_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+minus_assign new_minus_assign(region r, location location, expression arg1, expression arg2)
+{
+  minus_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_minus_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+times_assign new_times_assign(region r, location location, expression arg1, expression arg2)
+{
+  times_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_times_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+divide_assign new_divide_assign(region r, location location, expression arg1, expression arg2)
+{
+  divide_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_divide_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+modulo_assign new_modulo_assign(region r, location location, expression arg1, expression arg2)
+{
+  modulo_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_modulo_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+lshift_assign new_lshift_assign(region r, location location, expression arg1, expression arg2)
+{
+  lshift_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_lshift_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+rshift_assign new_rshift_assign(region r, location location, expression arg1, expression arg2)
+{
+  rshift_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_rshift_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitand_assign new_bitand_assign(region r, location location, expression arg1, expression arg2)
+{
+  bitand_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_bitand_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitor_assign new_bitor_assign(region r, location location, expression arg1, expression arg2)
+{
+  bitor_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_bitor_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+bitxor_assign new_bitxor_assign(region r, location location, expression arg1, expression arg2)
+{
+  bitxor_assign obj = ralloc(r, struct AST_assignment);
+
+  obj->kind = kind_bitxor_assign;
+  obj->location = location;
+  obj->isatomic = NOT_ATOMIC;
+  obj->arg1 = arg1;
+  obj->arg2 = arg2;
+
+  return obj;
+}
+
+rp_connection new_rp_connection(region r, location location, endpoint ep1, endpoint ep2)
+{
+  rp_connection obj = ralloc(r, struct AST_connection);
+
+  obj->kind = kind_rp_connection;
+  obj->location = location;
+  obj->ep1 = ep1;
+  obj->ep2 = ep2;
+
+  return obj;
+}
+
+eq_connection new_eq_connection(region r, location location, endpoint ep1, endpoint ep2)
+{
+  eq_connection obj = ralloc(r, struct AST_connection);
+
+  obj->kind = kind_eq_connection;
+  obj->location = location;
+  obj->ep1 = ep1;
+  obj->ep2 = ep2;
+
+  return obj;
+}
+
+nx_struct_ref new_nx_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  nx_struct_ref obj = ralloc(r, struct AST_struct_ref);
+
+  obj->kind = kind_nx_struct_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+nx_union_ref new_nx_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined)
+{
+  nx_union_ref obj = ralloc(r, struct AST_union_ref);
+
+  obj->kind = kind_nx_union_ref;
+  obj->location = location;
+  obj->word1 = word1;
+  obj->attributes = attributes;
+  obj->fields = fields;
+  obj->defined = defined;
+
+  return obj;
+}
+
+
+
+AST_kind AST_parent_kind[] = {
+  0,
+  kind_node,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_nesc_decl,
+  kind_nesc_decl,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_declaration,
+  kind_connection,
+  kind_connection,
+  kind_declaration,
+  kind_declaration,
+  kind_node,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_conditional_stmt,
+  kind_conditional_stmt,
+  kind_conditional_stmt,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_statement,
+  kind_node,
+  kind_expression,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_increment,
+  kind_increment,
+  kind_increment,
+  kind_increment,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_unary,
+  kind_expression,
+  kind_binary,
+  kind_comparison,
+  kind_comparison,
+  kind_comparison,
+  kind_comparison,
+  kind_comparison,
+  kind_comparison,
+  kind_binary,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_assignment,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_binary,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_lexical_cst,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_expression,
+  kind_node,
+  kind_type_element,
+  kind_typename,
+  kind_type_element,
+  kind_type_element,
+  kind_type_element,
+  kind_attribute,
+  kind_attribute,
+  kind_type_element,
+  kind_type_element,
+  kind_type_element,
+  kind_tag_ref,
+  kind_struct_ref,
+  kind_tag_ref,
+  kind_union_ref,
+  kind_tag_ref,
+  kind_tag_ref,
+  kind_node,
+  kind_declarator,
+  kind_nested_declarator,
+  kind_nested_declarator,
+  kind_nested_declarator,
+  kind_nested_declarator,
+  kind_nested_declarator,
+  kind_declarator,
+  kind_declarator,
+  kind_node,
+  kind_label,
+  kind_label,
+  kind_label,
+  kind_node,
+  kind_node,
+  kind_designator,
+  kind_designator,
+  kind_node,
+  kind_node,
+  kind_node,
+  kind_implementation,
+  kind_implementation,
+  kind_implementation,
+  kind_node,
+  kind_node,
+};
+
+AST_kind AST_post_kind[] = {
+  postkind_node,
+  postkind_declaration,
+  postkind_asm_decl,
+  postkind_data_decl,
+  postkind_extension_decl,
+  postkind_ellipsis_decl,
+  postkind_enumerator,
+  postkind_oldidentifier_decl,
+  postkind_function_decl,
+  postkind_implicit_decl,
+  postkind_variable_decl,
+  postkind_field_decl,
+  postkind_nesc_decl,
+  postkind_interface,
+  postkind_component,
+  postkind_rp_interface,
+  postkind_interface_ref,
+  postkind_component_ref,
+  postkind_connection,
+  postkind_rp_connection,
+  postkind_eq_connection,
+  postkind_type_parm_decl,
+  postkind_error_decl,
+  postkind_statement,
+  postkind_asm_stmt,
+  postkind_compound_stmt,
+  postkind_if_stmt,
+  postkind_labeled_stmt,
+  postkind_expression_stmt,
+  postkind_conditional_stmt,
+  postkind_switch_stmt,
+  postkind_while_stmt,
+  postkind_dowhile_stmt,
+  postkind_for_stmt,
+  postkind_break_stmt,
+  postkind_continue_stmt,
+  postkind_return_stmt,
+  postkind_goto_stmt,
+  postkind_computed_goto_stmt,
+  postkind_empty_stmt,
+  postkind_atomic_stmt,
+  postkind_error_stmt,
+  postkind_expression,
+  postkind_unary,
+  postkind_cast,
+  postkind_field_ref,
+  postkind_increment,
+  postkind_preincrement,
+  postkind_predecrement,
+  postkind_postincrement,
+  postkind_postdecrement,
+  postkind_interface_deref,
+  postkind_component_deref,
+  postkind_dereference,
+  postkind_extension_expr,
+  postkind_sizeof_expr,
+  postkind_alignof_expr,
+  postkind_realpart,
+  postkind_imagpart,
+  postkind_address_of,
+  postkind_unary_minus,
+  postkind_unary_plus,
+  postkind_conjugate,
+  postkind_bitnot,
+  postkind_not,
+  postkind_binary,
+  postkind_comparison,
+  postkind_leq,
+  postkind_geq,
+  postkind_lt,
+  postkind_gt,
+  postkind_eq,
+  postkind_ne,
+  postkind_assignment,
+  postkind_assign,
+  postkind_plus_assign,
+  postkind_minus_assign,
+  postkind_times_assign,
+  postkind_divide_assign,
+  postkind_modulo_assign,
+  postkind_lshift_assign,
+  postkind_rshift_assign,
+  postkind_bitand_assign,
+  postkind_bitor_assign,
+  postkind_bitxor_assign,
+  postkind_array_ref,
+  postkind_plus,
+  postkind_minus,
+  postkind_times,
+  postkind_divide,
+  postkind_modulo,
+  postkind_lshift,
+  postkind_rshift,
+  postkind_bitand,
+  postkind_bitor,
+  postkind_bitxor,
+  postkind_andand,
+  postkind_oror,
+  postkind_comma,
+  postkind_sizeof_type,
+  postkind_alignof_type,
+  postkind_label_address,
+  postkind_cast_list,
+  postkind_conditional,
+  postkind_identifier,
+  postkind_compound_expr,
+  postkind_function_call,
+  postkind_init_list,
+  postkind_init_specific,
+  postkind_lexical_cst,
+  postkind_string_cst,
+  postkind_string,
+  postkind_generic_call,
+  postkind_type_argument,
+  postkind_error_expr,
+  postkind_type_element,
+  postkind_typename,
+  postkind_component_typeref,
+  postkind_typeof_expr,
+  postkind_typeof_type,
+  postkind_attribute,
+  postkind_gcc_attribute,
+  postkind_nesc_attribute,
+  postkind_rid,
+  postkind_qualifier,
+  postkind_tag_ref,
+  postkind_struct_ref,
+  postkind_nx_struct_ref,
+  postkind_union_ref,
+  postkind_nx_union_ref,
+  postkind_attribute_ref,
+  postkind_enum_ref,
+  postkind_declarator,
+  postkind_nested_declarator,
+  postkind_function_declarator,
+  postkind_pointer_declarator,
+  postkind_qualified_declarator,
+  postkind_array_declarator,
+  postkind_interface_ref_declarator,
+  postkind_identifier_declarator,
+  postkind_generic_declarator,
+  postkind_label,
+  postkind_id_label,
+  postkind_case_label,
+  postkind_default_label,
+  postkind_asttype,
+  postkind_designator,
+  postkind_designate_field,
+  postkind_designate_index,
+  postkind_word,
+  postkind_asm_operand,
+  postkind_implementation,
+  postkind_configuration,
+  postkind_module,
+  postkind_binary_component,
+  postkind_endpoint,
+  postkind_parameterised_identifier,
+};
+
+size_t AST_sizeof[] = {
+  sizeof(struct AST_node),
+  sizeof(struct AST_declaration),
+  sizeof(struct AST_asm_decl),
+  sizeof(struct AST_data_decl),
+  sizeof(struct AST_extension_decl),
+  sizeof(struct AST_ellipsis_decl),
+  sizeof(struct AST_enumerator),
+  sizeof(struct AST_oldidentifier_decl),
+  sizeof(struct AST_function_decl),
+  sizeof(struct AST_implicit_decl),
+  sizeof(struct AST_variable_decl),
+  sizeof(struct AST_field_decl),
+  sizeof(struct AST_nesc_decl),
+  sizeof(struct AST_interface),
+  sizeof(struct AST_component),
+  sizeof(struct AST_rp_interface),
+  sizeof(struct AST_interface_ref),
+  sizeof(struct AST_component_ref),
+  sizeof(struct AST_connection),
+  sizeof(struct AST_connection),
+  sizeof(struct AST_connection),
+  sizeof(struct AST_type_parm_decl),
+  sizeof(struct AST_declaration),
+  sizeof(struct AST_statement),
+  sizeof(struct AST_asm_stmt),
+  sizeof(struct AST_compound_stmt),
+  sizeof(struct AST_if_stmt),
+  sizeof(struct AST_labeled_stmt),
+  sizeof(struct AST_expression_stmt),
+  sizeof(struct AST_conditional_stmt),
+  sizeof(struct AST_switch_stmt),
+  sizeof(struct AST_conditional_stmt),
+  sizeof(struct AST_conditional_stmt),
+  sizeof(struct AST_for_stmt),
+  sizeof(struct AST_break_stmt),
+  sizeof(struct AST_continue_stmt),
+  sizeof(struct AST_return_stmt),
+  sizeof(struct AST_goto_stmt),
+  sizeof(struct AST_computed_goto_stmt),
+  sizeof(struct AST_empty_stmt),
+  sizeof(struct AST_atomic_stmt),
+  sizeof(struct AST_statement),
+  sizeof(struct AST_expression),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_cast),
+  sizeof(struct AST_field_ref),
+  sizeof(struct AST_increment),
+  sizeof(struct AST_increment),
+  sizeof(struct AST_increment),
+  sizeof(struct AST_increment),
+  sizeof(struct AST_increment),
+  sizeof(struct AST_interface_deref),
+  sizeof(struct AST_component_deref),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_unary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_comparison),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_assignment),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_binary),
+  sizeof(struct AST_comma),
+  sizeof(struct AST_sizeof_type),
+  sizeof(struct AST_alignof_type),
+  sizeof(struct AST_label_address),
+  sizeof(struct AST_cast_list),
+  sizeof(struct AST_conditional),
+  sizeof(struct AST_identifier),
+  sizeof(struct AST_compound_expr),
+  sizeof(struct AST_function_call),
+  sizeof(struct AST_init_list),
+  sizeof(struct AST_init_specific),
+  sizeof(struct AST_lexical_cst),
+  sizeof(struct AST_string_cst),
+  sizeof(struct AST_string),
+  sizeof(struct AST_generic_call),
+  sizeof(struct AST_type_argument),
+  sizeof(struct AST_expression),
+  sizeof(struct AST_type_element),
+  sizeof(struct AST_typename),
+  sizeof(struct AST_component_typeref),
+  sizeof(struct AST_typeof_expr),
+  sizeof(struct AST_typeof_type),
+  sizeof(struct AST_attribute),
+  sizeof(struct AST_gcc_attribute),
+  sizeof(struct AST_nesc_attribute),
+  sizeof(struct AST_rid),
+  sizeof(struct AST_qualifier),
+  sizeof(struct AST_tag_ref),
+  sizeof(struct AST_struct_ref),
+  sizeof(struct AST_struct_ref),
+  sizeof(struct AST_union_ref),
+  sizeof(struct AST_union_ref),
+  sizeof(struct AST_tag_ref),
+  sizeof(struct AST_tag_ref),
+  sizeof(struct AST_declarator),
+  sizeof(struct AST_nested_declarator),
+  sizeof(struct AST_function_declarator),
+  sizeof(struct AST_pointer_declarator),
+  sizeof(struct AST_qualified_declarator),
+  sizeof(struct AST_array_declarator),
+  sizeof(struct AST_interface_ref_declarator),
+  sizeof(struct AST_identifier_declarator),
+  sizeof(struct AST_generic_declarator),
+  sizeof(struct AST_label),
+  sizeof(struct AST_id_label),
+  sizeof(struct AST_case_label),
+  sizeof(struct AST_default_label),
+  sizeof(struct AST_asttype),
+  sizeof(struct AST_designator),
+  sizeof(struct AST_designate_field),
+  sizeof(struct AST_designate_index),
+  sizeof(struct AST_word),
+  sizeof(struct AST_asm_operand),
+  sizeof(struct AST_implementation),
+  sizeof(struct AST_configuration),
+  sizeof(struct AST_module),
+  sizeof(struct AST_binary_component),
+  sizeof(struct AST_endpoint),
+  sizeof(struct AST_parameterised_identifier),
+};
+
+type_t AST_typeof[] = {
+  rctypeof(struct AST_node),
+  rctypeof(struct AST_declaration),
+  rctypeof(struct AST_asm_decl),
+  rctypeof(struct AST_data_decl),
+  rctypeof(struct AST_extension_decl),
+  rctypeof(struct AST_ellipsis_decl),
+  rctypeof(struct AST_enumerator),
+  rctypeof(struct AST_oldidentifier_decl),
+  rctypeof(struct AST_function_decl),
+  rctypeof(struct AST_implicit_decl),
+  rctypeof(struct AST_variable_decl),
+  rctypeof(struct AST_field_decl),
+  rctypeof(struct AST_nesc_decl),
+  rctypeof(struct AST_interface),
+  rctypeof(struct AST_component),
+  rctypeof(struct AST_rp_interface),
+  rctypeof(struct AST_interface_ref),
+  rctypeof(struct AST_component_ref),
+  rctypeof(struct AST_connection),
+  rctypeof(struct AST_connection),
+  rctypeof(struct AST_connection),
+  rctypeof(struct AST_type_parm_decl),
+  rctypeof(struct AST_declaration),
+  rctypeof(struct AST_statement),
+  rctypeof(struct AST_asm_stmt),
+  rctypeof(struct AST_compound_stmt),
+  rctypeof(struct AST_if_stmt),
+  rctypeof(struct AST_labeled_stmt),
+  rctypeof(struct AST_expression_stmt),
+  rctypeof(struct AST_conditional_stmt),
+  rctypeof(struct AST_switch_stmt),
+  rctypeof(struct AST_conditional_stmt),
+  rctypeof(struct AST_conditional_stmt),
+  rctypeof(struct AST_for_stmt),
+  rctypeof(struct AST_break_stmt),
+  rctypeof(struct AST_continue_stmt),
+  rctypeof(struct AST_return_stmt),
+  rctypeof(struct AST_goto_stmt),
+  rctypeof(struct AST_computed_goto_stmt),
+  rctypeof(struct AST_empty_stmt),
+  rctypeof(struct AST_atomic_stmt),
+  rctypeof(struct AST_statement),
+  rctypeof(struct AST_expression),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_cast),
+  rctypeof(struct AST_field_ref),
+  rctypeof(struct AST_increment),
+  rctypeof(struct AST_increment),
+  rctypeof(struct AST_increment),
+  rctypeof(struct AST_increment),
+  rctypeof(struct AST_increment),
+  rctypeof(struct AST_interface_deref),
+  rctypeof(struct AST_component_deref),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_unary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_comparison),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_assignment),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_binary),
+  rctypeof(struct AST_comma),
+  rctypeof(struct AST_sizeof_type),
+  rctypeof(struct AST_alignof_type),
+  rctypeof(struct AST_label_address),
+  rctypeof(struct AST_cast_list),
+  rctypeof(struct AST_conditional),
+  rctypeof(struct AST_identifier),
+  rctypeof(struct AST_compound_expr),
+  rctypeof(struct AST_function_call),
+  rctypeof(struct AST_init_list),
+  rctypeof(struct AST_init_specific),
+  rctypeof(struct AST_lexical_cst),
+  rctypeof(struct AST_string_cst),
+  rctypeof(struct AST_string),
+  rctypeof(struct AST_generic_call),
+  rctypeof(struct AST_type_argument),
+  rctypeof(struct AST_expression),
+  rctypeof(struct AST_type_element),
+  rctypeof(struct AST_typename),
+  rctypeof(struct AST_component_typeref),
+  rctypeof(struct AST_typeof_expr),
+  rctypeof(struct AST_typeof_type),
+  rctypeof(struct AST_attribute),
+  rctypeof(struct AST_gcc_attribute),
+  rctypeof(struct AST_nesc_attribute),
+  rctypeof(struct AST_rid),
+  rctypeof(struct AST_qualifier),
+  rctypeof(struct AST_tag_ref),
+  rctypeof(struct AST_struct_ref),
+  rctypeof(struct AST_struct_ref),
+  rctypeof(struct AST_union_ref),
+  rctypeof(struct AST_union_ref),
+  rctypeof(struct AST_tag_ref),
+  rctypeof(struct AST_tag_ref),
+  rctypeof(struct AST_declarator),
+  rctypeof(struct AST_nested_declarator),
+  rctypeof(struct AST_function_declarator),
+  rctypeof(struct AST_pointer_declarator),
+  rctypeof(struct AST_qualified_declarator),
+  rctypeof(struct AST_array_declarator),
+  rctypeof(struct AST_interface_ref_declarator),
+  rctypeof(struct AST_identifier_declarator),
+  rctypeof(struct AST_generic_declarator),
+  rctypeof(struct AST_label),
+  rctypeof(struct AST_id_label),
+  rctypeof(struct AST_case_label),
+  rctypeof(struct AST_default_label),
+  rctypeof(struct AST_asttype),
+  rctypeof(struct AST_designator),
+  rctypeof(struct AST_designate_field),
+  rctypeof(struct AST_designate_index),
+  rctypeof(struct AST_word),
+  rctypeof(struct AST_asm_operand),
+  rctypeof(struct AST_implementation),
+  rctypeof(struct AST_configuration),
+  rctypeof(struct AST_module),
+  rctypeof(struct AST_binary_component),
+  rctypeof(struct AST_endpoint),
+  rctypeof(struct AST_parameterised_identifier),
+};
+
diff --git a/src/AST_types.h b/src/AST_types.h
new file mode 100644 (file)
index 0000000..6e0c7c0
--- /dev/null
@@ -0,0 +1,656 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+typedef struct AST_node *node;
+typedef struct AST_declaration *declaration;
+typedef struct AST_statement *statement;
+typedef struct AST_expression *expression;
+typedef struct AST_type_element *type_element;
+typedef struct AST_declarator *declarator;
+typedef struct AST_label *label;
+typedef struct AST_asm_decl *asm_decl;
+typedef struct AST_data_decl *data_decl;
+typedef struct AST_extension_decl *extension_decl;
+typedef struct AST_ellipsis_decl *ellipsis_decl;
+typedef struct AST_enumerator *enumerator;
+typedef struct AST_oldidentifier_decl *oldidentifier_decl;
+typedef struct AST_function_decl *function_decl;
+typedef struct AST_implicit_decl *implicit_decl;
+typedef struct AST_variable_decl *variable_decl;
+typedef struct AST_field_decl *field_decl;
+typedef struct AST_asttype *asttype;
+typedef struct AST_typename *typename;
+typedef struct AST_typeof_expr *typeof_expr;
+typedef struct AST_typeof_type *typeof_type;
+typedef struct AST_attribute *attribute;
+typedef struct AST_gcc_attribute *gcc_attribute;
+typedef struct AST_rid *rid;
+typedef struct AST_qualifier *qualifier;
+typedef struct AST_tag_ref *tag_ref;
+typedef struct AST_struct_ref *struct_ref;
+typedef struct AST_union_ref *union_ref;
+typedef struct AST_nested_declarator *nested_declarator;
+typedef struct AST_function_declarator *function_declarator;
+typedef struct AST_pointer_declarator *pointer_declarator;
+typedef struct AST_qualified_declarator *qualified_declarator;
+typedef struct AST_array_declarator *array_declarator;
+typedef struct AST_identifier_declarator *identifier_declarator;
+typedef struct AST_asm_stmt *asm_stmt;
+typedef struct AST_compound_stmt *compound_stmt;
+typedef struct AST_if_stmt *if_stmt;
+typedef struct AST_labeled_stmt *labeled_stmt;
+typedef struct AST_expression_stmt *expression_stmt;
+typedef struct AST_conditional_stmt *conditional_stmt;
+typedef struct AST_switch_stmt *switch_stmt;
+typedef struct AST_for_stmt *for_stmt;
+typedef struct AST_break_stmt *break_stmt;
+typedef struct AST_continue_stmt *continue_stmt;
+typedef struct AST_return_stmt *return_stmt;
+typedef struct AST_goto_stmt *goto_stmt;
+typedef struct AST_computed_goto_stmt *computed_goto_stmt;
+typedef struct AST_empty_stmt *empty_stmt;
+typedef struct AST_unary *unary;
+typedef struct AST_binary *binary;
+typedef struct AST_comma *comma;
+typedef struct AST_sizeof_type *sizeof_type;
+typedef struct AST_alignof_type *alignof_type;
+typedef struct AST_label_address *label_address;
+typedef struct AST_cast *cast;
+typedef struct AST_cast_list *cast_list;
+typedef struct AST_conditional *conditional;
+typedef struct AST_identifier *identifier;
+typedef struct AST_compound_expr *compound_expr;
+typedef struct AST_function_call *function_call;
+typedef struct AST_field_ref *field_ref;
+typedef struct AST_increment *increment;
+typedef struct AST_comparison *comparison;
+typedef struct AST_assignment *assignment;
+typedef struct AST_init_list *init_list;
+typedef struct AST_init_specific *init_specific;
+typedef struct AST_designator *designator;
+typedef struct AST_designate_field *designate_field;
+typedef struct AST_designate_index *designate_index;
+typedef struct AST_lexical_cst *lexical_cst;
+typedef struct AST_string_cst *string_cst;
+typedef struct AST_string *string;
+typedef struct AST_id_label *id_label;
+typedef struct AST_case_label *case_label;
+typedef struct AST_default_label *default_label;
+typedef struct AST_word *word;
+typedef struct AST_asm_operand *asm_operand;
+typedef struct AST_nesc_decl *nesc_decl;
+typedef struct AST_interface *interface;
+typedef struct AST_component *component;
+typedef struct AST_implementation *implementation;
+typedef struct AST_configuration *configuration;
+typedef struct AST_module *module;
+typedef struct AST_binary_component *binary_component;
+typedef struct AST_rp_interface *rp_interface;
+typedef struct AST_interface_ref *interface_ref;
+typedef struct AST_component_ref *component_ref;
+typedef struct AST_connection *connection;
+typedef struct AST_endpoint *endpoint;
+typedef struct AST_parameterised_identifier *parameterised_identifier;
+typedef struct AST_generic_declarator *generic_declarator;
+typedef struct AST_generic_call *generic_call;
+typedef struct AST_interface_ref_declarator *interface_ref_declarator;
+typedef struct AST_interface_deref *interface_deref;
+typedef struct AST_component_deref *component_deref;
+typedef struct AST_component_typeref *component_typeref;
+typedef struct AST_atomic_stmt *atomic_stmt;
+typedef struct AST_nesc_attribute *nesc_attribute;
+typedef struct AST_type_parm_decl *type_parm_decl;
+typedef struct AST_type_argument *type_argument;
+typedef struct AST_declaration *error_decl;
+typedef struct AST_tag_ref *attribute_ref;
+typedef struct AST_tag_ref *enum_ref;
+typedef struct AST_statement *error_stmt;
+typedef struct AST_conditional_stmt *while_stmt;
+typedef struct AST_conditional_stmt *dowhile_stmt;
+typedef struct AST_expression *error_expr;
+typedef struct AST_binary *array_ref;
+typedef struct AST_unary *dereference;
+typedef struct AST_unary *extension_expr;
+typedef struct AST_unary *sizeof_expr;
+typedef struct AST_unary *alignof_expr;
+typedef struct AST_unary *realpart;
+typedef struct AST_unary *imagpart;
+typedef struct AST_unary *address_of;
+typedef struct AST_unary *unary_minus;
+typedef struct AST_unary *unary_plus;
+typedef struct AST_unary *conjugate;
+typedef struct AST_unary *bitnot;
+typedef struct AST_unary *not;
+typedef struct AST_increment *preincrement;
+typedef struct AST_increment *predecrement;
+typedef struct AST_increment *postincrement;
+typedef struct AST_increment *postdecrement;
+typedef struct AST_binary *plus;
+typedef struct AST_binary *minus;
+typedef struct AST_binary *times;
+typedef struct AST_binary *divide;
+typedef struct AST_binary *modulo;
+typedef struct AST_binary *lshift;
+typedef struct AST_binary *rshift;
+typedef struct AST_comparison *leq;
+typedef struct AST_comparison *geq;
+typedef struct AST_comparison *lt;
+typedef struct AST_comparison *gt;
+typedef struct AST_comparison *eq;
+typedef struct AST_comparison *ne;
+typedef struct AST_binary *bitand;
+typedef struct AST_binary *bitor;
+typedef struct AST_binary *bitxor;
+typedef struct AST_binary *andand;
+typedef struct AST_binary *oror;
+typedef struct AST_assignment *assign;
+typedef struct AST_assignment *plus_assign;
+typedef struct AST_assignment *minus_assign;
+typedef struct AST_assignment *times_assign;
+typedef struct AST_assignment *divide_assign;
+typedef struct AST_assignment *modulo_assign;
+typedef struct AST_assignment *lshift_assign;
+typedef struct AST_assignment *rshift_assign;
+typedef struct AST_assignment *bitand_assign;
+typedef struct AST_assignment *bitor_assign;
+typedef struct AST_assignment *bitxor_assign;
+typedef struct AST_connection *rp_connection;
+typedef struct AST_connection *eq_connection;
+typedef struct AST_struct_ref *nx_struct_ref;
+typedef struct AST_union_ref *nx_union_ref;
+typedef enum {
+  kind_node = 42,
+  postkind_node = 198,
+  kind_declaration = 43,
+  postkind_declaration = 64,
+  kind_statement = 65,
+  postkind_statement = 83,
+  kind_expression = 84,
+  postkind_expression = 156,
+  kind_type_element = 157,
+  postkind_type_element = 173,
+  kind_declarator = 174,
+  postkind_declarator = 182,
+  kind_label = 183,
+  postkind_label = 186,
+  kind_asm_decl = 44,
+  postkind_asm_decl = 44,
+  kind_data_decl = 45,
+  postkind_data_decl = 45,
+  kind_extension_decl = 46,
+  postkind_extension_decl = 46,
+  kind_ellipsis_decl = 47,
+  postkind_ellipsis_decl = 47,
+  kind_enumerator = 48,
+  postkind_enumerator = 48,
+  kind_oldidentifier_decl = 49,
+  postkind_oldidentifier_decl = 49,
+  kind_function_decl = 50,
+  postkind_function_decl = 50,
+  kind_implicit_decl = 51,
+  postkind_implicit_decl = 51,
+  kind_variable_decl = 52,
+  postkind_variable_decl = 52,
+  kind_field_decl = 53,
+  postkind_field_decl = 53,
+  kind_asttype = 187,
+  postkind_asttype = 187,
+  kind_typename = 158,
+  postkind_typename = 159,
+  kind_typeof_expr = 160,
+  postkind_typeof_expr = 160,
+  kind_typeof_type = 161,
+  postkind_typeof_type = 161,
+  kind_attribute = 162,
+  postkind_attribute = 164,
+  kind_gcc_attribute = 163,
+  postkind_gcc_attribute = 163,
+  kind_rid = 165,
+  postkind_rid = 165,
+  kind_qualifier = 166,
+  postkind_qualifier = 166,
+  kind_tag_ref = 167,
+  postkind_tag_ref = 173,
+  kind_struct_ref = 168,
+  postkind_struct_ref = 169,
+  kind_union_ref = 170,
+  postkind_union_ref = 171,
+  kind_nested_declarator = 175,
+  postkind_nested_declarator = 180,
+  kind_function_declarator = 176,
+  postkind_function_declarator = 176,
+  kind_pointer_declarator = 177,
+  postkind_pointer_declarator = 177,
+  kind_qualified_declarator = 178,
+  postkind_qualified_declarator = 178,
+  kind_array_declarator = 179,
+  postkind_array_declarator = 179,
+  kind_identifier_declarator = 181,
+  postkind_identifier_declarator = 181,
+  kind_asm_stmt = 66,
+  postkind_asm_stmt = 66,
+  kind_compound_stmt = 67,
+  postkind_compound_stmt = 67,
+  kind_if_stmt = 68,
+  postkind_if_stmt = 68,
+  kind_labeled_stmt = 69,
+  postkind_labeled_stmt = 69,
+  kind_expression_stmt = 70,
+  postkind_expression_stmt = 70,
+  kind_conditional_stmt = 71,
+  postkind_conditional_stmt = 74,
+  kind_switch_stmt = 72,
+  postkind_switch_stmt = 72,
+  kind_for_stmt = 75,
+  postkind_for_stmt = 75,
+  kind_break_stmt = 76,
+  postkind_break_stmt = 76,
+  kind_continue_stmt = 77,
+  postkind_continue_stmt = 77,
+  kind_return_stmt = 78,
+  postkind_return_stmt = 78,
+  kind_goto_stmt = 79,
+  postkind_goto_stmt = 79,
+  kind_computed_goto_stmt = 80,
+  postkind_computed_goto_stmt = 80,
+  kind_empty_stmt = 81,
+  postkind_empty_stmt = 81,
+  kind_unary = 85,
+  postkind_unary = 106,
+  kind_binary = 107,
+  postkind_binary = 139,
+  kind_comma = 140,
+  postkind_comma = 140,
+  kind_sizeof_type = 141,
+  postkind_sizeof_type = 141,
+  kind_alignof_type = 142,
+  postkind_alignof_type = 142,
+  kind_label_address = 143,
+  postkind_label_address = 143,
+  kind_cast = 86,
+  postkind_cast = 86,
+  kind_cast_list = 144,
+  postkind_cast_list = 144,
+  kind_conditional = 145,
+  postkind_conditional = 145,
+  kind_identifier = 146,
+  postkind_identifier = 146,
+  kind_compound_expr = 147,
+  postkind_compound_expr = 147,
+  kind_function_call = 148,
+  postkind_function_call = 148,
+  kind_field_ref = 87,
+  postkind_field_ref = 87,
+  kind_increment = 88,
+  postkind_increment = 92,
+  kind_comparison = 108,
+  postkind_comparison = 114,
+  kind_assignment = 115,
+  postkind_assignment = 126,
+  kind_init_list = 149,
+  postkind_init_list = 149,
+  kind_init_specific = 150,
+  postkind_init_specific = 150,
+  kind_designator = 188,
+  postkind_designator = 190,
+  kind_designate_field = 189,
+  postkind_designate_field = 189,
+  kind_designate_index = 190,
+  postkind_designate_index = 190,
+  kind_lexical_cst = 151,
+  postkind_lexical_cst = 152,
+  kind_string_cst = 152,
+  postkind_string_cst = 152,
+  kind_string = 153,
+  postkind_string = 153,
+  kind_id_label = 184,
+  postkind_id_label = 184,
+  kind_case_label = 185,
+  postkind_case_label = 185,
+  kind_default_label = 186,
+  postkind_default_label = 186,
+  kind_word = 191,
+  postkind_word = 191,
+  kind_asm_operand = 192,
+  postkind_asm_operand = 192,
+  kind_nesc_decl = 54,
+  postkind_nesc_decl = 56,
+  kind_interface = 55,
+  postkind_interface = 55,
+  kind_component = 56,
+  postkind_component = 56,
+  kind_implementation = 193,
+  postkind_implementation = 196,
+  kind_configuration = 194,
+  postkind_configuration = 194,
+  kind_module = 195,
+  postkind_module = 195,
+  kind_binary_component = 196,
+  postkind_binary_component = 196,
+  kind_rp_interface = 57,
+  postkind_rp_interface = 57,
+  kind_interface_ref = 58,
+  postkind_interface_ref = 58,
+  kind_component_ref = 59,
+  postkind_component_ref = 59,
+  kind_connection = 60,
+  postkind_connection = 62,
+  kind_endpoint = 197,
+  postkind_endpoint = 197,
+  kind_parameterised_identifier = 198,
+  postkind_parameterised_identifier = 198,
+  kind_generic_declarator = 182,
+  postkind_generic_declarator = 182,
+  kind_generic_call = 154,
+  postkind_generic_call = 154,
+  kind_interface_ref_declarator = 180,
+  postkind_interface_ref_declarator = 180,
+  kind_interface_deref = 93,
+  postkind_interface_deref = 93,
+  kind_component_deref = 94,
+  postkind_component_deref = 94,
+  kind_component_typeref = 159,
+  postkind_component_typeref = 159,
+  kind_atomic_stmt = 82,
+  postkind_atomic_stmt = 82,
+  kind_nesc_attribute = 164,
+  postkind_nesc_attribute = 164,
+  kind_type_parm_decl = 63,
+  postkind_type_parm_decl = 63,
+  kind_type_argument = 155,
+  postkind_type_argument = 155,
+  kind_error_decl = 64,
+  postkind_error_decl = 64,
+  kind_attribute_ref = 172,
+  postkind_attribute_ref = 172,
+  kind_enum_ref = 173,
+  postkind_enum_ref = 173,
+  kind_error_stmt = 83,
+  postkind_error_stmt = 83,
+  kind_while_stmt = 73,
+  postkind_while_stmt = 73,
+  kind_dowhile_stmt = 74,
+  postkind_dowhile_stmt = 74,
+  kind_error_expr = 156,
+  postkind_error_expr = 156,
+  kind_array_ref = 127,
+  postkind_array_ref = 127,
+  kind_dereference = 95,
+  postkind_dereference = 95,
+  kind_extension_expr = 96,
+  postkind_extension_expr = 96,
+  kind_sizeof_expr = 97,
+  postkind_sizeof_expr = 97,
+  kind_alignof_expr = 98,
+  postkind_alignof_expr = 98,
+  kind_realpart = 99,
+  postkind_realpart = 99,
+  kind_imagpart = 100,
+  postkind_imagpart = 100,
+  kind_address_of = 101,
+  postkind_address_of = 101,
+  kind_unary_minus = 102,
+  postkind_unary_minus = 102,
+  kind_unary_plus = 103,
+  postkind_unary_plus = 103,
+  kind_conjugate = 104,
+  postkind_conjugate = 104,
+  kind_bitnot = 105,
+  postkind_bitnot = 105,
+  kind_not = 106,
+  postkind_not = 106,
+  kind_preincrement = 89,
+  postkind_preincrement = 89,
+  kind_predecrement = 90,
+  postkind_predecrement = 90,
+  kind_postincrement = 91,
+  postkind_postincrement = 91,
+  kind_postdecrement = 92,
+  postkind_postdecrement = 92,
+  kind_plus = 128,
+  postkind_plus = 128,
+  kind_minus = 129,
+  postkind_minus = 129,
+  kind_times = 130,
+  postkind_times = 130,
+  kind_divide = 131,
+  postkind_divide = 131,
+  kind_modulo = 132,
+  postkind_modulo = 132,
+  kind_lshift = 133,
+  postkind_lshift = 133,
+  kind_rshift = 134,
+  postkind_rshift = 134,
+  kind_leq = 109,
+  postkind_leq = 109,
+  kind_geq = 110,
+  postkind_geq = 110,
+  kind_lt = 111,
+  postkind_lt = 111,
+  kind_gt = 112,
+  postkind_gt = 112,
+  kind_eq = 113,
+  postkind_eq = 113,
+  kind_ne = 114,
+  postkind_ne = 114,
+  kind_bitand = 135,
+  postkind_bitand = 135,
+  kind_bitor = 136,
+  postkind_bitor = 136,
+  kind_bitxor = 137,
+  postkind_bitxor = 137,
+  kind_andand = 138,
+  postkind_andand = 138,
+  kind_oror = 139,
+  postkind_oror = 139,
+  kind_assign = 116,
+  postkind_assign = 116,
+  kind_plus_assign = 117,
+  postkind_plus_assign = 117,
+  kind_minus_assign = 118,
+  postkind_minus_assign = 118,
+  kind_times_assign = 119,
+  postkind_times_assign = 119,
+  kind_divide_assign = 120,
+  postkind_divide_assign = 120,
+  kind_modulo_assign = 121,
+  postkind_modulo_assign = 121,
+  kind_lshift_assign = 122,
+  postkind_lshift_assign = 122,
+  kind_rshift_assign = 123,
+  postkind_rshift_assign = 123,
+  kind_bitand_assign = 124,
+  postkind_bitand_assign = 124,
+  kind_bitor_assign = 125,
+  postkind_bitor_assign = 125,
+  kind_bitxor_assign = 126,
+  postkind_bitxor_assign = 126,
+  kind_rp_connection = 61,
+  postkind_rp_connection = 61,
+  kind_eq_connection = 62,
+  postkind_eq_connection = 62,
+  kind_nx_struct_ref = 169,
+  postkind_nx_struct_ref = 169,
+  kind_nx_union_ref = 171,
+  postkind_nx_union_ref = 171
+} AST_kind;
+
+extern AST_kind AST_parent_kind[]; /* indexed by kind - kind_node */
+
+extern AST_kind AST_post_kind[]; /* indexed by kind - kind_node */
+
+extern size_t AST_sizeof[]; /* indexed by kind - kind_node */
+
+extern type_t AST_typeof[]; /* indexed by kind - kind_node */
+#define is_node(x) ((x)->kind >= kind_node && (x)->kind <= postkind_node)
+#define is_declaration(x) ((x)->kind >= kind_declaration && (x)->kind <= postkind_declaration)
+#define is_statement(x) ((x)->kind >= kind_statement && (x)->kind <= postkind_statement)
+#define is_expression(x) ((x)->kind >= kind_expression && (x)->kind <= postkind_expression)
+#define is_type_element(x) ((x)->kind >= kind_type_element && (x)->kind <= postkind_type_element)
+#define is_declarator(x) ((x)->kind >= kind_declarator && (x)->kind <= postkind_declarator)
+#define is_label(x) ((x)->kind >= kind_label && (x)->kind <= postkind_label)
+#define is_asm_decl(x) ((x)->kind >= kind_asm_decl && (x)->kind <= postkind_asm_decl)
+#define is_data_decl(x) ((x)->kind >= kind_data_decl && (x)->kind <= postkind_data_decl)
+#define is_extension_decl(x) ((x)->kind >= kind_extension_decl && (x)->kind <= postkind_extension_decl)
+#define is_ellipsis_decl(x) ((x)->kind >= kind_ellipsis_decl && (x)->kind <= postkind_ellipsis_decl)
+#define is_enumerator(x) ((x)->kind >= kind_enumerator && (x)->kind <= postkind_enumerator)
+#define is_oldidentifier_decl(x) ((x)->kind >= kind_oldidentifier_decl && (x)->kind <= postkind_oldidentifier_decl)
+#define is_function_decl(x) ((x)->kind >= kind_function_decl && (x)->kind <= postkind_function_decl)
+#define is_implicit_decl(x) ((x)->kind >= kind_implicit_decl && (x)->kind <= postkind_implicit_decl)
+#define is_variable_decl(x) ((x)->kind >= kind_variable_decl && (x)->kind <= postkind_variable_decl)
+#define is_field_decl(x) ((x)->kind >= kind_field_decl && (x)->kind <= postkind_field_decl)
+#define is_asttype(x) ((x)->kind >= kind_asttype && (x)->kind <= postkind_asttype)
+#define is_typename(x) ((x)->kind >= kind_typename && (x)->kind <= postkind_typename)
+#define is_typeof_expr(x) ((x)->kind >= kind_typeof_expr && (x)->kind <= postkind_typeof_expr)
+#define is_typeof_type(x) ((x)->kind >= kind_typeof_type && (x)->kind <= postkind_typeof_type)
+#define is_attribute(x) ((x)->kind >= kind_attribute && (x)->kind <= postkind_attribute)
+#define is_gcc_attribute(x) ((x)->kind >= kind_gcc_attribute && (x)->kind <= postkind_gcc_attribute)
+#define is_rid(x) ((x)->kind >= kind_rid && (x)->kind <= postkind_rid)
+#define is_qualifier(x) ((x)->kind >= kind_qualifier && (x)->kind <= postkind_qualifier)
+#define is_tag_ref(x) ((x)->kind >= kind_tag_ref && (x)->kind <= postkind_tag_ref)
+#define is_struct_ref(x) ((x)->kind >= kind_struct_ref && (x)->kind <= postkind_struct_ref)
+#define is_union_ref(x) ((x)->kind >= kind_union_ref && (x)->kind <= postkind_union_ref)
+#define is_nested_declarator(x) ((x)->kind >= kind_nested_declarator && (x)->kind <= postkind_nested_declarator)
+#define is_function_declarator(x) ((x)->kind >= kind_function_declarator && (x)->kind <= postkind_function_declarator)
+#define is_pointer_declarator(x) ((x)->kind >= kind_pointer_declarator && (x)->kind <= postkind_pointer_declarator)
+#define is_qualified_declarator(x) ((x)->kind >= kind_qualified_declarator && (x)->kind <= postkind_qualified_declarator)
+#define is_array_declarator(x) ((x)->kind >= kind_array_declarator && (x)->kind <= postkind_array_declarator)
+#define is_identifier_declarator(x) ((x)->kind >= kind_identifier_declarator && (x)->kind <= postkind_identifier_declarator)
+#define is_asm_stmt(x) ((x)->kind >= kind_asm_stmt && (x)->kind <= postkind_asm_stmt)
+#define is_compound_stmt(x) ((x)->kind >= kind_compound_stmt && (x)->kind <= postkind_compound_stmt)
+#define is_if_stmt(x) ((x)->kind >= kind_if_stmt && (x)->kind <= postkind_if_stmt)
+#define is_labeled_stmt(x) ((x)->kind >= kind_labeled_stmt && (x)->kind <= postkind_labeled_stmt)
+#define is_expression_stmt(x) ((x)->kind >= kind_expression_stmt && (x)->kind <= postkind_expression_stmt)
+#define is_conditional_stmt(x) ((x)->kind >= kind_conditional_stmt && (x)->kind <= postkind_conditional_stmt)
+#define is_switch_stmt(x) ((x)->kind >= kind_switch_stmt && (x)->kind <= postkind_switch_stmt)
+#define is_for_stmt(x) ((x)->kind >= kind_for_stmt && (x)->kind <= postkind_for_stmt)
+#define is_break_stmt(x) ((x)->kind >= kind_break_stmt && (x)->kind <= postkind_break_stmt)
+#define is_continue_stmt(x) ((x)->kind >= kind_continue_stmt && (x)->kind <= postkind_continue_stmt)
+#define is_return_stmt(x) ((x)->kind >= kind_return_stmt && (x)->kind <= postkind_return_stmt)
+#define is_goto_stmt(x) ((x)->kind >= kind_goto_stmt && (x)->kind <= postkind_goto_stmt)
+#define is_computed_goto_stmt(x) ((x)->kind >= kind_computed_goto_stmt && (x)->kind <= postkind_computed_goto_stmt)
+#define is_empty_stmt(x) ((x)->kind >= kind_empty_stmt && (x)->kind <= postkind_empty_stmt)
+#define is_unary(x) ((x)->kind >= kind_unary && (x)->kind <= postkind_unary)
+#define is_binary(x) ((x)->kind >= kind_binary && (x)->kind <= postkind_binary)
+#define is_comma(x) ((x)->kind >= kind_comma && (x)->kind <= postkind_comma)
+#define is_sizeof_type(x) ((x)->kind >= kind_sizeof_type && (x)->kind <= postkind_sizeof_type)
+#define is_alignof_type(x) ((x)->kind >= kind_alignof_type && (x)->kind <= postkind_alignof_type)
+#define is_label_address(x) ((x)->kind >= kind_label_address && (x)->kind <= postkind_label_address)
+#define is_cast(x) ((x)->kind >= kind_cast && (x)->kind <= postkind_cast)
+#define is_cast_list(x) ((x)->kind >= kind_cast_list && (x)->kind <= postkind_cast_list)
+#define is_conditional(x) ((x)->kind >= kind_conditional && (x)->kind <= postkind_conditional)
+#define is_identifier(x) ((x)->kind >= kind_identifier && (x)->kind <= postkind_identifier)
+#define is_compound_expr(x) ((x)->kind >= kind_compound_expr && (x)->kind <= postkind_compound_expr)
+#define is_function_call(x) ((x)->kind >= kind_function_call && (x)->kind <= postkind_function_call)
+#define is_field_ref(x) ((x)->kind >= kind_field_ref && (x)->kind <= postkind_field_ref)
+#define is_increment(x) ((x)->kind >= kind_increment && (x)->kind <= postkind_increment)
+#define is_comparison(x) ((x)->kind >= kind_comparison && (x)->kind <= postkind_comparison)
+#define is_assignment(x) ((x)->kind >= kind_assignment && (x)->kind <= postkind_assignment)
+#define is_init_list(x) ((x)->kind >= kind_init_list && (x)->kind <= postkind_init_list)
+#define is_init_specific(x) ((x)->kind >= kind_init_specific && (x)->kind <= postkind_init_specific)
+#define is_designator(x) ((x)->kind >= kind_designator && (x)->kind <= postkind_designator)
+#define is_designate_field(x) ((x)->kind >= kind_designate_field && (x)->kind <= postkind_designate_field)
+#define is_designate_index(x) ((x)->kind >= kind_designate_index && (x)->kind <= postkind_designate_index)
+#define is_lexical_cst(x) ((x)->kind >= kind_lexical_cst && (x)->kind <= postkind_lexical_cst)
+#define is_string_cst(x) ((x)->kind >= kind_string_cst && (x)->kind <= postkind_string_cst)
+#define is_string(x) ((x)->kind >= kind_string && (x)->kind <= postkind_string)
+#define is_id_label(x) ((x)->kind >= kind_id_label && (x)->kind <= postkind_id_label)
+#define is_case_label(x) ((x)->kind >= kind_case_label && (x)->kind <= postkind_case_label)
+#define is_default_label(x) ((x)->kind >= kind_default_label && (x)->kind <= postkind_default_label)
+#define is_word(x) ((x)->kind >= kind_word && (x)->kind <= postkind_word)
+#define is_asm_operand(x) ((x)->kind >= kind_asm_operand && (x)->kind <= postkind_asm_operand)
+#define is_nesc_decl(x) ((x)->kind >= kind_nesc_decl && (x)->kind <= postkind_nesc_decl)
+#define is_interface(x) ((x)->kind >= kind_interface && (x)->kind <= postkind_interface)
+#define is_component(x) ((x)->kind >= kind_component && (x)->kind <= postkind_component)
+#define is_implementation(x) ((x)->kind >= kind_implementation && (x)->kind <= postkind_implementation)
+#define is_configuration(x) ((x)->kind >= kind_configuration && (x)->kind <= postkind_configuration)
+#define is_module(x) ((x)->kind >= kind_module && (x)->kind <= postkind_module)
+#define is_binary_component(x) ((x)->kind >= kind_binary_component && (x)->kind <= postkind_binary_component)
+#define is_rp_interface(x) ((x)->kind >= kind_rp_interface && (x)->kind <= postkind_rp_interface)
+#define is_interface_ref(x) ((x)->kind >= kind_interface_ref && (x)->kind <= postkind_interface_ref)
+#define is_component_ref(x) ((x)->kind >= kind_component_ref && (x)->kind <= postkind_component_ref)
+#define is_connection(x) ((x)->kind >= kind_connection && (x)->kind <= postkind_connection)
+#define is_endpoint(x) ((x)->kind >= kind_endpoint && (x)->kind <= postkind_endpoint)
+#define is_parameterised_identifier(x) ((x)->kind >= kind_parameterised_identifier && (x)->kind <= postkind_parameterised_identifier)
+#define is_generic_declarator(x) ((x)->kind >= kind_generic_declarator && (x)->kind <= postkind_generic_declarator)
+#define is_generic_call(x) ((x)->kind >= kind_generic_call && (x)->kind <= postkind_generic_call)
+#define is_interface_ref_declarator(x) ((x)->kind >= kind_interface_ref_declarator && (x)->kind <= postkind_interface_ref_declarator)
+#define is_interface_deref(x) ((x)->kind >= kind_interface_deref && (x)->kind <= postkind_interface_deref)
+#define is_component_deref(x) ((x)->kind >= kind_component_deref && (x)->kind <= postkind_component_deref)
+#define is_component_typeref(x) ((x)->kind >= kind_component_typeref && (x)->kind <= postkind_component_typeref)
+#define is_atomic_stmt(x) ((x)->kind >= kind_atomic_stmt && (x)->kind <= postkind_atomic_stmt)
+#define is_nesc_attribute(x) ((x)->kind >= kind_nesc_attribute && (x)->kind <= postkind_nesc_attribute)
+#define is_type_parm_decl(x) ((x)->kind >= kind_type_parm_decl && (x)->kind <= postkind_type_parm_decl)
+#define is_type_argument(x) ((x)->kind >= kind_type_argument && (x)->kind <= postkind_type_argument)
+#define is_error_decl(x) ((x)->kind >= kind_error_decl && (x)->kind <= postkind_error_decl)
+#define is_attribute_ref(x) ((x)->kind >= kind_attribute_ref && (x)->kind <= postkind_attribute_ref)
+#define is_enum_ref(x) ((x)->kind >= kind_enum_ref && (x)->kind <= postkind_enum_ref)
+#define is_error_stmt(x) ((x)->kind >= kind_error_stmt && (x)->kind <= postkind_error_stmt)
+#define is_while_stmt(x) ((x)->kind >= kind_while_stmt && (x)->kind <= postkind_while_stmt)
+#define is_dowhile_stmt(x) ((x)->kind >= kind_dowhile_stmt && (x)->kind <= postkind_dowhile_stmt)
+#define is_error_expr(x) ((x)->kind >= kind_error_expr && (x)->kind <= postkind_error_expr)
+#define is_array_ref(x) ((x)->kind >= kind_array_ref && (x)->kind <= postkind_array_ref)
+#define is_dereference(x) ((x)->kind >= kind_dereference && (x)->kind <= postkind_dereference)
+#define is_extension_expr(x) ((x)->kind >= kind_extension_expr && (x)->kind <= postkind_extension_expr)
+#define is_sizeof_expr(x) ((x)->kind >= kind_sizeof_expr && (x)->kind <= postkind_sizeof_expr)
+#define is_alignof_expr(x) ((x)->kind >= kind_alignof_expr && (x)->kind <= postkind_alignof_expr)
+#define is_realpart(x) ((x)->kind >= kind_realpart && (x)->kind <= postkind_realpart)
+#define is_imagpart(x) ((x)->kind >= kind_imagpart && (x)->kind <= postkind_imagpart)
+#define is_address_of(x) ((x)->kind >= kind_address_of && (x)->kind <= postkind_address_of)
+#define is_unary_minus(x) ((x)->kind >= kind_unary_minus && (x)->kind <= postkind_unary_minus)
+#define is_unary_plus(x) ((x)->kind >= kind_unary_plus && (x)->kind <= postkind_unary_plus)
+#define is_conjugate(x) ((x)->kind >= kind_conjugate && (x)->kind <= postkind_conjugate)
+#define is_bitnot(x) ((x)->kind >= kind_bitnot && (x)->kind <= postkind_bitnot)
+#define is_not(x) ((x)->kind >= kind_not && (x)->kind <= postkind_not)
+#define is_preincrement(x) ((x)->kind >= kind_preincrement && (x)->kind <= postkind_preincrement)
+#define is_predecrement(x) ((x)->kind >= kind_predecrement && (x)->kind <= postkind_predecrement)
+#define is_postincrement(x) ((x)->kind >= kind_postincrement && (x)->kind <= postkind_postincrement)
+#define is_postdecrement(x) ((x)->kind >= kind_postdecrement && (x)->kind <= postkind_postdecrement)
+#define is_plus(x) ((x)->kind >= kind_plus && (x)->kind <= postkind_plus)
+#define is_minus(x) ((x)->kind >= kind_minus && (x)->kind <= postkind_minus)
+#define is_times(x) ((x)->kind >= kind_times && (x)->kind <= postkind_times)
+#define is_divide(x) ((x)->kind >= kind_divide && (x)->kind <= postkind_divide)
+#define is_modulo(x) ((x)->kind >= kind_modulo && (x)->kind <= postkind_modulo)
+#define is_lshift(x) ((x)->kind >= kind_lshift && (x)->kind <= postkind_lshift)
+#define is_rshift(x) ((x)->kind >= kind_rshift && (x)->kind <= postkind_rshift)
+#define is_leq(x) ((x)->kind >= kind_leq && (x)->kind <= postkind_leq)
+#define is_geq(x) ((x)->kind >= kind_geq && (x)->kind <= postkind_geq)
+#define is_lt(x) ((x)->kind >= kind_lt && (x)->kind <= postkind_lt)
+#define is_gt(x) ((x)->kind >= kind_gt && (x)->kind <= postkind_gt)
+#define is_eq(x) ((x)->kind >= kind_eq && (x)->kind <= postkind_eq)
+#define is_ne(x) ((x)->kind >= kind_ne && (x)->kind <= postkind_ne)
+#define is_bitand(x) ((x)->kind >= kind_bitand && (x)->kind <= postkind_bitand)
+#define is_bitor(x) ((x)->kind >= kind_bitor && (x)->kind <= postkind_bitor)
+#define is_bitxor(x) ((x)->kind >= kind_bitxor && (x)->kind <= postkind_bitxor)
+#define is_andand(x) ((x)->kind >= kind_andand && (x)->kind <= postkind_andand)
+#define is_oror(x) ((x)->kind >= kind_oror && (x)->kind <= postkind_oror)
+#define is_assign(x) ((x)->kind >= kind_assign && (x)->kind <= postkind_assign)
+#define is_plus_assign(x) ((x)->kind >= kind_plus_assign && (x)->kind <= postkind_plus_assign)
+#define is_minus_assign(x) ((x)->kind >= kind_minus_assign && (x)->kind <= postkind_minus_assign)
+#define is_times_assign(x) ((x)->kind >= kind_times_assign && (x)->kind <= postkind_times_assign)
+#define is_divide_assign(x) ((x)->kind >= kind_divide_assign && (x)->kind <= postkind_divide_assign)
+#define is_modulo_assign(x) ((x)->kind >= kind_modulo_assign && (x)->kind <= postkind_modulo_assign)
+#define is_lshift_assign(x) ((x)->kind >= kind_lshift_assign && (x)->kind <= postkind_lshift_assign)
+#define is_rshift_assign(x) ((x)->kind >= kind_rshift_assign && (x)->kind <= postkind_rshift_assign)
+#define is_bitand_assign(x) ((x)->kind >= kind_bitand_assign && (x)->kind <= postkind_bitand_assign)
+#define is_bitor_assign(x) ((x)->kind >= kind_bitor_assign && (x)->kind <= postkind_bitor_assign)
+#define is_bitxor_assign(x) ((x)->kind >= kind_bitxor_assign && (x)->kind <= postkind_bitxor_assign)
+#define is_rp_connection(x) ((x)->kind >= kind_rp_connection && (x)->kind <= postkind_rp_connection)
+#define is_eq_connection(x) ((x)->kind >= kind_eq_connection && (x)->kind <= postkind_eq_connection)
+#define is_nx_struct_ref(x) ((x)->kind >= kind_nx_struct_ref && (x)->kind <= postkind_nx_struct_ref)
+#define is_nx_union_ref(x) ((x)->kind >= kind_nx_union_ref && (x)->kind <= postkind_nx_union_ref)
+typedef struct
+{
+  AST_kind kind;
+} *AST_generic;
+
+#ifdef __GNUC__
+#define AST_CAST(type, x) ({AST_generic tEmPcast = (AST_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); })
+#define AST_CASTPTR(type, x) ({AST_generic *tEmPcast = (AST_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); })
+#define AST_CASTSRPTR(type, x) ({AST_generic *tEmPcast = (AST_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); })
+#else
+/* Could also generate some code to make this safe */
+#define AST_CAST(type, x) ((type)(x))
+#define AST_CASTPTR(type, x) ((type *)(x))
+#define AST_CASTSRPTR(type, x) ((type sameregion *)(x))
+#endif
diff --git a/src/AST_utils.c b/src/AST_utils.c
new file mode 100644 (file)
index 0000000..320c3fb
--- /dev/null
@@ -0,0 +1,373 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "AST_utils.h"
+#include "constants.h"
+
+bool oldstyle_function(function_decl fn)
+{
+  return !fn->fdeclarator->parms || is_oldidentifier_decl(fn->fdeclarator->parms);
+}
+
+/* True if the parameters is just the parameter list '(void)' */
+bool is_void_parms(declaration parms)
+{
+  data_decl dd;
+  variable_decl vd;
+
+  if (!parms || parms->next || !is_data_decl(parms))
+    return FALSE;
+
+  dd = CAST(data_decl, parms);
+  vd = CAST(variable_decl, dd->decls);
+  assert(!vd->next);
+
+  return !vd->declarator && dd->modifiers && !dd->modifiers->next &&
+    is_rid(dd->modifiers) && CAST(rid, dd->modifiers)->id == RID_VOID;
+}
+
+function_declarator get_fdeclarator(declarator d)
+{
+  function_declarator fd = NULL;
+
+  while (d)
+    switch (d->kind)
+      {
+      case kind_identifier_declarator:
+       return fd;
+      case kind_function_declarator:
+       fd = CAST(function_declarator, d);
+       /* fallthrough */
+      default:
+       d = CAST(nested_declarator, d)->declarator;
+       break;
+      }
+
+  return fd;
+}
+
+data_declaration get_parameter(declaration d)
+{
+  switch (d->kind)
+    {
+    case kind_ellipsis_decl:
+      return NULL;
+    case kind_oldidentifier_decl:
+      return CAST(oldidentifier_decl, d)->ddecl;
+    case kind_data_decl:
+      return CAST(variable_decl, CAST(data_decl, d)->decls)->ddecl;
+    default:
+      assert(0); return NULL;
+    }
+}
+
+data_declaration base_identifier(data_declaration d)
+{
+  while (d->isfilescoperef && d->shadowed)
+    d = d->shadowed;
+
+  return d;
+}
+
+bool same_function(data_declaration d1, data_declaration d2)
+{
+  d1 = base_identifier(d1);
+  d2 = base_identifier(d2);
+  return d1->kind == decl_function && d1 == d2;
+}
+
+bool call_to(data_declaration fnd, function_call fce)
+{
+  return is_identifier(fce->arg1) &&
+    fnd && same_function(CAST(identifier, fce->arg1)->ddecl, fnd);
+}
+
+bool is_localvar(expression e)
+{
+  data_declaration decl;
+
+  if (!is_identifier(e))
+    return FALSE;
+
+  decl = CAST(identifier, e)->ddecl;
+  return decl->kind == decl_variable && decl->islocal;
+}
+
+compound_stmt parent_block(node n)
+{
+  /* Don't consider statement expressions as parent blocks - the last statement
+     is special (value of the block) which confuses code that assumes arbitrary
+     statements can be added to the end of a block */
+  while (!is_compound_stmt(n) || is_compound_expr(n->parent))
+    n = n->parent;
+
+  return CAST(compound_stmt, n);
+}
+
+function_decl parent_function(node n)
+{
+  while (!is_function_decl(n))
+    n = n->parent;
+
+  return CAST(function_decl, n);
+}
+
+expression ignore_fields(expression e)
+{
+  while (e->kind == kind_field_ref)
+    e = CAST(field_ref, e)->arg1;
+
+  return e;
+}
+
+expression expression_of_stmt(compound_expr ce)
+{
+  compound_stmt blk = CAST(compound_stmt, ce->stmt);
+  statement last_stmt = last_statement(blk->stmts);
+
+  if (last_stmt && is_expression_stmt(last_stmt))
+    {
+      expression_stmt es = CAST(expression_stmt, last_stmt);
+
+      return es->arg1;
+    }
+  return NULL;
+}
+
+bool expression_used(expression e)
+{
+  node p1 = e->parent, n1 = e->next;
+
+  /* Figure out if result of assignment is used. Logic:
+     used(e): case parent(e) of
+     expression_stmt: false
+     comma: false if e not last, used(parent(e)) otherwise
+     everything else: true */
+  for (;;)
+    {
+      if (is_expression_stmt(p1))
+       return FALSE;
+      if (!is_comma(p1))
+       return TRUE;
+      if (n1)
+       return FALSE; /* Not last in a comma */
+      n1 = p1->next;
+      p1 = p1->parent;
+    }
+}
+
+bool zero_expression(expression e)
+{
+  /* a = 0 is not a constant expression but it's value is known to be 0,
+     and other similar cases */
+  for (;;)
+    {
+      if (is_assign(e))
+       {
+         e = CAST(assign, e)->arg2;
+         continue;
+       }
+      if (is_cast(e))
+       {
+         e = CAST(cast, e)->arg1;
+         continue;
+       }
+      if (is_comma(e))
+       {
+         e = CAST(expression, last_node(CAST(node, CAST(comma, e)->arg1)));
+         continue;
+       }
+      break;
+    }
+
+  return definite_zero(e);
+}
+
+expression build_int_constant(region r, location loc, type t, largest_int c)
+{
+  char cstbuf[64];
+  cstring csts;
+  lexical_cst cst;
+
+  snprintf(cstbuf, sizeof cstbuf, "%lld", c);
+  csts.data = rstrdup(r, cstbuf);
+  csts.length = strlen(cstbuf);
+  cst = new_lexical_cst(r, loc, csts);
+  cst->type = t;
+  cst->cst = make_cst(make_cval_signed(c, t), t);
+
+  return CAST(expression, cst);
+}
+
+expression build_uint_constant(region r, location loc, type t, largest_uint c)
+{
+  char cstbuf[64];
+  cstring csts;
+  lexical_cst cst;
+
+  snprintf(cstbuf, sizeof cstbuf, "%llu", c);
+  csts.data = rstrdup(r, cstbuf);
+  csts.length = strlen(cstbuf);
+  cst = new_lexical_cst(r, loc, csts);
+  cst->type = t;
+  cst->cst = make_cst(make_cval_unsigned(c, t), t);
+
+  return CAST(expression, cst);
+}
+
+cval value_of_enumerator(enumerator e)
+{
+  return e->ddecl->value->cval;
+}
+
+expression build_identifier(region r, location loc, data_declaration id)
+{
+  identifier e = new_identifier(r, loc, str2cstring(r, id->name), id);
+
+  assert(id->kind == decl_variable || id->kind == decl_function ||
+        id->kind == decl_constant || id->kind == decl_magic_function);
+  e->type = id->type;
+  e->cst = fold_identifier(CAST(expression, e), id, 0);
+
+  return CAST(expression, e);
+}
+
+int asm_rwmode(string s)
+{
+  if (s->ddecl->schars.length > 0)
+    return s->ddecl->schars.data[0];
+  else
+    return -1;
+}
+
+declaration ignore_extensions(declaration d)
+{
+  while (is_extension_decl(d))
+    d = CAST(extension_decl, d)->decl;
+
+  return d;
+}
+
+tag_declaration get_unnamed_tag_decl(data_decl decl)
+{
+  /* decl has no actual declarations. Check to see if it is a struct or
+     union, and if so return that struct or union's declaration */
+  type_element elem;
+
+  scan_type_element (elem, decl->modifiers)
+    if (is_struct_ref(elem) || is_union_ref(elem))
+      return CAST(tag_ref, elem)->tdecl;
+
+  return NULL;
+}
+
+const char *nice_field_name(const char *s)
+/* Returns: "(anonymous)" if s == NULL, s otherwise
+     This helps printing the name of potentially unnamed entities
+ */
+{
+  if (s)
+    return s;
+  return "(anonymous)";
+}
+
+const char *tagkind_name(int tagkind)
+{
+  switch (tagkind)
+    {
+    case kind_attribute_ref: return "attribute";
+    case kind_struct_ref: return "struct";
+    case kind_union_ref: return "union";
+    case kind_nx_struct_ref: return "nx_struct";
+    case kind_nx_union_ref: return "nx_union";
+    case kind_enum_ref: return "enum";
+    default: assert(0); return NULL;
+    }
+}
+
+conditional conditional_lvalue(expression e)
+{
+  /* a = 0 is not a constant expression but it's value is known to be 0,
+     and other similar cases */
+  for (;;)
+    {
+      if (is_cast(e))
+       {
+         e = CAST(cast, e)->arg1;
+         continue;
+       }
+      if (is_comma(e))
+       {
+         e = CAST(expression, last_node(CAST(node, CAST(comma, e)->arg1)));
+         continue;
+       }
+      break;
+    }
+
+  if (is_conditional(e))
+    return CAST(conditional, e);
+  else
+    return NULL;
+}
+
+data_declaration string_ddecl(expression s)
+{
+  if (s->cst && constant_address(s->cst))
+    {
+      data_declaration sdecl = cval_ddecl(s->cst->cval);
+
+      /* Must be an offsetless string */
+      if (sdecl && sdecl->kind == decl_magic_string &&
+         cval_knownbool(s->cst->cval))
+       return sdecl;
+    }
+  return NULL;
+}
+
+char *ddecl2str(region r, data_declaration ddecl)
+/* Returns: a newly allocated string (in region r) for the string
+     specified by ddecl, or NULL if str contains wide characters
+   Requires: ddecl->kind == decl_magic_string
+*/
+{
+  assert(ddecl->kind == decl_magic_string);
+
+  if (!type_char(type_array_of(ddecl->type)))
+    return NULL; /* Wide string */
+  else
+    return cstring2str(r, ddecl->schars);
+}
+
+/* True if arg is name or __name__ */
+bool is_attr_name(const char *arg, const char *name)
+{
+  int l;
+
+  if (!strcmp(arg, name))
+    return TRUE;
+
+  if (strncmp(arg, "__", 2))
+    return FALSE;
+
+  l = strlen(name);
+  return !strncmp(arg + 2, name, l) && !strcmp(arg + 2 + l, "__");
+}
diff --git a/src/AST_utils.h b/src/AST_utils.h
new file mode 100644 (file)
index 0000000..7bf4fe2
--- /dev/null
@@ -0,0 +1,88 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef AST_UTILS_H
+#define AST_UTILS_H
+
+#define IS_A(n, k) \
+  ((n)->kind >= (k) && (n)->kind <= AST_post_kind[(k) - kind_node])
+
+data_declaration get_parameter(declaration d);
+function_declarator get_fdeclarator(declarator d);
+bool oldstyle_function(function_decl fn);
+bool is_void_parms(declaration parms);
+bool is_localvar(expression e);
+compound_stmt parent_block(node n);
+function_decl parent_function(node n);
+expression expression_of_stmt(compound_expr ce); /* Return expression which is value of compound statement expression, or NULL of node ("void" compound expression) */
+bool expression_used(expression e);
+
+data_declaration base_identifier(data_declaration d);
+bool same_function(data_declaration d1, data_declaration d2);
+bool call_to(data_declaration fnd, function_call fce);
+expression ignore_fields(expression e);
+
+/* True for expressions whose value is known to be 0 (but which
+   may not be constant expressions) */
+bool zero_expression(expression e);
+
+expression build_int_constant(region r, location loc, type t, largest_int c);
+expression build_uint_constant(region r, location loc, type t, largest_uint c);
+#define build_zero(r, loc) build_int_constant(r, loc, int_type, 0)
+
+expression build_identifier(region r, location loc, data_declaration id);
+
+cval value_of_enumerator(enumerator e);
+
+int asm_rwmode(string s);
+/* Return: The first char of asm operand mode specifier s, this indicates
+     the r/w mode for the operand (see gcc docs)
+     The result is -1 if s is the empty string.
+*/
+
+declaration ignore_extensions(declaration d);
+/* Ignore extension_decls at d, returning the "real" declaration */
+
+tag_declaration get_unnamed_tag_decl(data_decl decl);
+/* Returns:. Check to see if it is a struct or
+     union, and if so return that struct or union's declaration */
+
+const char *nice_field_name(const char *s);
+/* Returns: "(anonymous)" if s == NULL, s otherwise
+     This helps printing the name of potentially unnamed entities
+ */
+
+const char *tagkind_name(int tagkind);
+
+conditional conditional_lvalue(expression e);
+
+data_declaration string_ddecl(expression s);
+
+char *ddecl2str(region r, data_declaration str);
+/* Returns: a newly allocated string (in region r) for the string
+     specified by str, or NULL if str contains wide characters
+   Requires: str->kind == decl_magic_string
+*/
+
+bool is_attr_name(const char *arg, const char *name);
+/* Returns: True if arg is name or __name__ */
+
+#endif
diff --git a/src/AST_walk.c b/src/AST_walk.c
new file mode 100644 (file)
index 0000000..9af490e
--- /dev/null
@@ -0,0 +1,102 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "AST_walk.h"
+#include "AST_utils.h"
+
+struct AST_walker
+{
+  AST_walker_fn walkers[postkind_node + 1 - kind_node];
+};
+
+static AST_walker_result default_walker(AST_walker spec, void *data,
+                                       node *n)
+{
+  return aw_walk;
+}
+
+AST_walker new_AST_walker(region r)
+/* Effcts: creates a new AST walker in region r. Default behaviour
+     is to assert(0); */
+{
+  AST_walker walker = ralloc(r, struct AST_walker);
+
+  AST_walker_handle(walker, kind_node, default_walker);
+
+  return walker;
+}
+
+void AST_walker_handle(AST_walker spec, AST_kind kind, AST_walker_fn fn)
+/* Effects: Sets walker function for node kind and all its children to
+     fn
+*/
+{
+  AST_kind k;
+
+  assert(kind >= kind_node && kind <= postkind_node);
+  for (k = kind; k <= AST_post_kind[kind - kind_node]; k++)
+    spec->walkers[k - kind_node] = fn;
+}
+
+/* Just execute the walker function for node-type 'kind' */
+AST_walker_result AST_walker_call(AST_walker spec, AST_kind kind, void *data, node *n)
+{
+  assert(kind >= kind_node && kind <= postkind_node && IS_A(*n, kind));
+  return spec->walkers[kind - kind_node](spec, data, n);
+}
+
+void AST_walk_list(AST_walker s, void *d, node *n)
+{
+  while (*n)
+    {
+      AST_walk(s, d, n);
+      n = &(*n)->next;
+    }
+}
+
+void AST_walk_children(AST_walker s, void *d, node n)
+{
+  switch (n->kind)
+    {
+#include "AST_walk_children.c"
+    default:
+      break;
+    }
+}
+
+/* Recursive walk from n */
+void AST_walk(AST_walker spec, void *data, node *n)
+{
+  for (;;)
+    {
+      AST_kind k = (*n)->kind;
+
+      switch (AST_walker_call(spec, k, data, n))
+       {
+       case aw_done: return;
+       case aw_call_parent:
+         k = AST_parent_kind[k - kind_node];
+         if (!k)
+           return;
+         break;
+       case aw_walk:
+         AST_walk_children(spec, data, *n);
+         return;
+       }
+    }
+}
diff --git a/src/AST_walk.h b/src/AST_walk.h
new file mode 100644 (file)
index 0000000..9b4df38
--- /dev/null
@@ -0,0 +1,69 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef AST_WALK_H
+#define AST_WALK_H
+
+/* A generic, OO-ish AST walker.
+   This is probably a visitor, for those into that kind of thing. 
+   The walker functions receive a node * rather than a node, 
+   so can modify the tree during the walk. This allows, e.g., 
+   cloning the AST.
+*/
+
+/* Untyped to make declaration easier. Actual signature is
+     AST_walker_result AST_walker_fn(AST_walker spec, void *data,
+                                    <your node type> *n);
+   Note: the aw_walk and aw_call_parent results will be applied to
+   *n after the walker function returns, not to the orignal node.
+*/
+typedef enum {
+  aw_walk, /* walk children */
+  aw_call_parent, /* call parent function */
+  aw_done  /* don't walk children */
+} AST_walker_result;
+
+typedef AST_walker_result (*AST_walker_fn)();
+typedef struct AST_walker *AST_walker;
+
+AST_walker new_AST_walker(region r);
+/* Effcts: creates a new AST walker in region r. Default behaviour
+     is to just walk through the children (i.e., a function returning
+     aw_walk) */
+
+void AST_walker_handle(AST_walker spec, AST_kind kind, AST_walker_fn fn);
+/* Effects: Sets walker function for node kind and all its children to
+     fn
+*/
+
+/* Recursive walk from n */
+void AST_walk(AST_walker spec, void *data, node *n);
+
+void AST_walk_list(AST_walker spec, void *data, node *n);
+/* Effects: Walks through the list starting at *n
+     The walkers "divert" AST_walk_list if they modify the
+     node or node pointer they receive.
+*/
+
+/* Walk children of n */
+void AST_walk_children(AST_walker spec, void *data, node n);
+
+/* Just execute the walker function for node-type 'kind' */
+AST_walker_result AST_walker_call(AST_walker spec, AST_kind kind,
+                                 void *data, node *n);
+
+#endif
diff --git a/src/AST_walk_children.c b/src/AST_walk_children.c
new file mode 100644 (file)
index 0000000..8e86b80
--- /dev/null
@@ -0,0 +1,864 @@
+/* Automatically generated from nodetypes.def, do not edit. */
+
+/* See the copyright notice in nodetypes.def */
+case kind_asm_decl: {
+  asm_decl x = CAST(asm_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->asm_stmt);
+  break;
+}
+case kind_data_decl: {
+  data_decl x = CAST(data_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->modifiers);
+  AST_walk_list(s, d, (node *)&x->decls);
+  break;
+}
+case kind_extension_decl: {
+  extension_decl x = CAST(extension_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->decl);
+  break;
+}
+case kind_enumerator: {
+  enumerator x = CAST(enumerator, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_function_decl: {
+  function_decl x = CAST(function_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->modifiers);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_variable_decl: {
+  variable_decl x = CAST(variable_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->asm_stmt);
+  break;
+}
+case kind_field_decl: {
+  field_decl x = CAST(field_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_asttype: {
+  asttype x = CAST(asttype, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->qualifiers);
+  break;
+}
+case kind_typeof_expr: {
+  typeof_expr x = CAST(typeof_expr, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_typeof_type: {
+  typeof_type x = CAST(typeof_type, n);
+
+  AST_walk_list(s, d, (node *)&x->asttype);
+  break;
+}
+case kind_attribute: {
+  attribute x = CAST(attribute, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  break;
+}
+case kind_gcc_attribute: {
+  gcc_attribute x = CAST(gcc_attribute, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_tag_ref: {
+  tag_ref x = CAST(tag_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_struct_ref: {
+  struct_ref x = CAST(struct_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_union_ref: {
+  union_ref x = CAST(union_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_nested_declarator: {
+  nested_declarator x = CAST(nested_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  break;
+}
+case kind_function_declarator: {
+  function_declarator x = CAST(function_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->parms);
+  AST_walk_list(s, d, (node *)&x->gparms);
+  AST_walk_list(s, d, (node *)&x->qualifiers);
+  AST_walk_list(s, d, (node *)&x->return_type);
+  break;
+}
+case kind_pointer_declarator: {
+  pointer_declarator x = CAST(pointer_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  break;
+}
+case kind_qualified_declarator: {
+  qualified_declarator x = CAST(qualified_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->modifiers);
+  break;
+}
+case kind_array_declarator: {
+  array_declarator x = CAST(array_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_asm_stmt: {
+  asm_stmt x = CAST(asm_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->asm_operands1);
+  AST_walk_list(s, d, (node *)&x->asm_operands2);
+  AST_walk_list(s, d, (node *)&x->asm_clobbers);
+  AST_walk_list(s, d, (node *)&x->qualifiers);
+  break;
+}
+case kind_compound_stmt: {
+  compound_stmt x = CAST(compound_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->id_labels);
+  AST_walk_list(s, d, (node *)&x->decls);
+  AST_walk_list(s, d, (node *)&x->stmts);
+  break;
+}
+case kind_if_stmt: {
+  if_stmt x = CAST(if_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->stmt1);
+  AST_walk_list(s, d, (node *)&x->stmt2);
+  break;
+}
+case kind_labeled_stmt: {
+  labeled_stmt x = CAST(labeled_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->label);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_expression_stmt: {
+  expression_stmt x = CAST(expression_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_conditional_stmt: {
+  conditional_stmt x = CAST(conditional_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_switch_stmt: {
+  switch_stmt x = CAST(switch_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_for_stmt: {
+  for_stmt x = CAST(for_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  AST_walk_list(s, d, (node *)&x->arg3);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_return_stmt: {
+  return_stmt x = CAST(return_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_goto_stmt: {
+  goto_stmt x = CAST(goto_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->id_label);
+  break;
+}
+case kind_computed_goto_stmt: {
+  computed_goto_stmt x = CAST(computed_goto_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_unary: {
+  unary x = CAST(unary, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_binary: {
+  binary x = CAST(binary, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_comma: {
+  comma x = CAST(comma, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_sizeof_type: {
+  sizeof_type x = CAST(sizeof_type, n);
+
+  AST_walk_list(s, d, (node *)&x->asttype);
+  break;
+}
+case kind_alignof_type: {
+  alignof_type x = CAST(alignof_type, n);
+
+  AST_walk_list(s, d, (node *)&x->asttype);
+  break;
+}
+case kind_label_address: {
+  label_address x = CAST(label_address, n);
+
+  AST_walk_list(s, d, (node *)&x->id_label);
+  break;
+}
+case kind_cast: {
+  cast x = CAST(cast, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->asttype);
+  break;
+}
+case kind_cast_list: {
+  cast_list x = CAST(cast_list, n);
+
+  AST_walk_list(s, d, (node *)&x->asttype);
+  AST_walk_list(s, d, (node *)&x->init_expr);
+  break;
+}
+case kind_conditional: {
+  conditional x = CAST(conditional, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_compound_expr: {
+  compound_expr x = CAST(compound_expr, n);
+
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_function_call: {
+  function_call x = CAST(function_call, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_field_ref: {
+  field_ref x = CAST(field_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_increment: {
+  increment x = CAST(increment, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_comparison: {
+  comparison x = CAST(comparison, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_assignment: {
+  assignment x = CAST(assignment, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_init_list: {
+  init_list x = CAST(init_list, n);
+
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_init_specific: {
+  init_specific x = CAST(init_specific, n);
+
+  AST_walk_list(s, d, (node *)&x->designator);
+  AST_walk_list(s, d, (node *)&x->init_expr);
+  break;
+}
+case kind_designate_index: {
+  designate_index x = CAST(designate_index, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_string: {
+  string x = CAST(string, n);
+
+  AST_walk_list(s, d, (node *)&x->strings);
+  break;
+}
+case kind_case_label: {
+  case_label x = CAST(case_label, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_asm_operand: {
+  asm_operand x = CAST(asm_operand, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->string);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_nesc_decl: {
+  nesc_decl x = CAST(nesc_decl, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  break;
+}
+case kind_interface: {
+  interface x = CAST(interface, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->decls);
+  break;
+}
+case kind_component: {
+  component x = CAST(component, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->parms);
+  AST_walk_list(s, d, (node *)&x->decls);
+  AST_walk_list(s, d, (node *)&x->implementation);
+  break;
+}
+case kind_configuration: {
+  configuration x = CAST(configuration, n);
+
+  AST_walk_list(s, d, (node *)&x->decls);
+  break;
+}
+case kind_module: {
+  module x = CAST(module, n);
+
+  AST_walk_list(s, d, (node *)&x->decls);
+  break;
+}
+case kind_rp_interface: {
+  rp_interface x = CAST(rp_interface, n);
+
+  AST_walk_list(s, d, (node *)&x->decls);
+  break;
+}
+case kind_interface_ref: {
+  interface_ref x = CAST(interface_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->args);
+  AST_walk_list(s, d, (node *)&x->word2);
+  AST_walk_list(s, d, (node *)&x->gparms);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  break;
+}
+case kind_component_ref: {
+  component_ref x = CAST(component_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->word2);
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_connection: {
+  connection x = CAST(connection, n);
+
+  AST_walk_list(s, d, (node *)&x->ep1);
+  AST_walk_list(s, d, (node *)&x->ep2);
+  break;
+}
+case kind_endpoint: {
+  endpoint x = CAST(endpoint, n);
+
+  AST_walk_list(s, d, (node *)&x->ids);
+  break;
+}
+case kind_parameterised_identifier: {
+  parameterised_identifier x = CAST(parameterised_identifier, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_generic_declarator: {
+  generic_declarator x = CAST(generic_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->parms);
+  break;
+}
+case kind_generic_call: {
+  generic_call x = CAST(generic_call, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->args);
+  break;
+}
+case kind_interface_ref_declarator: {
+  interface_ref_declarator x = CAST(interface_ref_declarator, n);
+
+  AST_walk_list(s, d, (node *)&x->declarator);
+  AST_walk_list(s, d, (node *)&x->word1);
+  break;
+}
+case kind_interface_deref: {
+  interface_deref x = CAST(interface_deref, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_component_deref: {
+  component_deref x = CAST(component_deref, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_atomic_stmt: {
+  atomic_stmt x = CAST(atomic_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_nesc_attribute: {
+  nesc_attribute x = CAST(nesc_attribute, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_type_argument: {
+  type_argument x = CAST(type_argument, n);
+
+  AST_walk_list(s, d, (node *)&x->asttype);
+  break;
+}
+case kind_attribute_ref: {
+  attribute_ref x = CAST(attribute_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_enum_ref: {
+  enum_ref x = CAST(enum_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_while_stmt: {
+  while_stmt x = CAST(while_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_dowhile_stmt: {
+  dowhile_stmt x = CAST(dowhile_stmt, n);
+
+  AST_walk_list(s, d, (node *)&x->condition);
+  AST_walk_list(s, d, (node *)&x->stmt);
+  break;
+}
+case kind_array_ref: {
+  array_ref x = CAST(array_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_dereference: {
+  dereference x = CAST(dereference, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_extension_expr: {
+  extension_expr x = CAST(extension_expr, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_sizeof_expr: {
+  sizeof_expr x = CAST(sizeof_expr, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_alignof_expr: {
+  alignof_expr x = CAST(alignof_expr, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_realpart: {
+  realpart x = CAST(realpart, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_imagpart: {
+  imagpart x = CAST(imagpart, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_address_of: {
+  address_of x = CAST(address_of, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_unary_minus: {
+  unary_minus x = CAST(unary_minus, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_unary_plus: {
+  unary_plus x = CAST(unary_plus, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_conjugate: {
+  conjugate x = CAST(conjugate, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_bitnot: {
+  bitnot x = CAST(bitnot, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_not: {
+  not x = CAST(not, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_preincrement: {
+  preincrement x = CAST(preincrement, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_predecrement: {
+  predecrement x = CAST(predecrement, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_postincrement: {
+  postincrement x = CAST(postincrement, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_postdecrement: {
+  postdecrement x = CAST(postdecrement, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  break;
+}
+case kind_plus: {
+  plus x = CAST(plus, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_minus: {
+  minus x = CAST(minus, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_times: {
+  times x = CAST(times, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_divide: {
+  divide x = CAST(divide, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_modulo: {
+  modulo x = CAST(modulo, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_lshift: {
+  lshift x = CAST(lshift, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_rshift: {
+  rshift x = CAST(rshift, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_leq: {
+  leq x = CAST(leq, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_geq: {
+  geq x = CAST(geq, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_lt: {
+  lt x = CAST(lt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_gt: {
+  gt x = CAST(gt, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_eq: {
+  eq x = CAST(eq, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_ne: {
+  ne x = CAST(ne, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitand: {
+  bitand x = CAST(bitand, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitor: {
+  bitor x = CAST(bitor, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitxor: {
+  bitxor x = CAST(bitxor, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_andand: {
+  andand x = CAST(andand, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_oror: {
+  oror x = CAST(oror, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_assign: {
+  assign x = CAST(assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_plus_assign: {
+  plus_assign x = CAST(plus_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_minus_assign: {
+  minus_assign x = CAST(minus_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_times_assign: {
+  times_assign x = CAST(times_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_divide_assign: {
+  divide_assign x = CAST(divide_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_modulo_assign: {
+  modulo_assign x = CAST(modulo_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_lshift_assign: {
+  lshift_assign x = CAST(lshift_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_rshift_assign: {
+  rshift_assign x = CAST(rshift_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitand_assign: {
+  bitand_assign x = CAST(bitand_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitor_assign: {
+  bitor_assign x = CAST(bitor_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_bitxor_assign: {
+  bitxor_assign x = CAST(bitxor_assign, n);
+
+  AST_walk_list(s, d, (node *)&x->arg1);
+  AST_walk_list(s, d, (node *)&x->arg2);
+  break;
+}
+case kind_rp_connection: {
+  rp_connection x = CAST(rp_connection, n);
+
+  AST_walk_list(s, d, (node *)&x->ep1);
+  AST_walk_list(s, d, (node *)&x->ep2);
+  break;
+}
+case kind_eq_connection: {
+  eq_connection x = CAST(eq_connection, n);
+
+  AST_walk_list(s, d, (node *)&x->ep1);
+  AST_walk_list(s, d, (node *)&x->ep2);
+  break;
+}
+case kind_nx_struct_ref: {
+  nx_struct_ref x = CAST(nx_struct_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
+case kind_nx_union_ref: {
+  nx_union_ref x = CAST(nx_union_ref, n);
+
+  AST_walk_list(s, d, (node *)&x->word1);
+  AST_walk_list(s, d, (node *)&x->attributes);
+  AST_walk_list(s, d, (node *)&x->fields);
+  break;
+}
diff --git a/src/COPYING b/src/COPYING
new file mode 100644 (file)
index 0000000..60549be
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/src/COPYRIGHT b/src/COPYRIGHT
new file mode 100644 (file)
index 0000000..27d2aa0
--- /dev/null
@@ -0,0 +1,18 @@
+The nesC compiler is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..34b4281
--- /dev/null
@@ -0,0 +1,318 @@
+## Process this file with automake to produce Makefile.in    -*- makefile -*-
+
+# This file is part of the nesC compiler.
+# 
+# This file is derived from the RC Compiler. It is thus
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# Changes for nesC are
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+AUTOMAKE_OPTIONS = foreign
+
+if USING_RCC
+regiondir = lib
+else
+SUBDIRS = libcompat
+regiondir = libcompat
+endif
+
+extra_inc :=
+
+if NEED_REGEX
+extra_inc += -Ilibcompat/regex
+endif
+
+if NEED_FNMATCH
+extra_inc += -Ilibcompat/fnmatch
+endif
+
+ncclibdir=$(libdir)/ncc
+
+INCLUDES = $(regionflags) -I$(srcdir)/$(regiondir) -I$(srcdir)/../libcpp/include -I$(srcdir)/../libcpp -I$(srcdir)/../include $(extra_inc)
+
+noinst_LIBRARIES = libparser.a
+ncclib_PROGRAMS = nesc1
+ncclib_DATA = tdspecs
+ncclib_SCRIPTS = nesc-compile
+
+libregions = $(regiondir)/libregions.a
+
+libparser_a_SOURCES =                          \
+       AST.c                                   \
+       AST.h                                   \
+       AST_list_node.h                         \
+       AST_types.h                             \
+       AST_utils.c                             \
+       AST_utils.h                             \
+       AST_walk.c                              \
+       AST_walk.h                              \
+       ND_list_nd_arg.h                        \
+       ND_types.h                              \
+       array.h                                 \
+       array.c                                 \
+       attributes.h                            \
+       attributes.c                            \
+       c-gperf.h                               \
+       c-lex.c                                 \
+       c-lex.h                                 \
+       c-lex-int.h                             \
+       c-lex-state.h                           \
+       c-parse.h                               \
+       c-parse.tab.h                           \
+       c-parse.tab.c                           \
+       constants.c                             \
+       constants.h                             \
+       cstring.h                               \
+       cval.h                                  \
+       cval.c                                  \
+       decls.h                                 \
+       dd_list.c                               \
+       dd_list.h                               \
+       dhash.c                                 \
+       dhash.h                                 \
+       edit.c                                  \
+       edit.h                                  \
+       env.c                                   \
+       env.h                                   \
+       errors.c                                \
+       errors.h                                \
+       expr.c                                  \
+       expr.h                                  \
+       flags.c                                 \
+       flags.h                                 \
+       gcc-cpp.h                               \
+       graph.c                                 \
+       graph.h                                 \
+       init.c                                  \
+       init.h                                  \
+       lex.nd.c                                \
+       machine.c                               \
+       machine.h                               \
+       nconfig.h                               \
+       nesc-abstract.c                         \
+       nesc-abstract.h                         \
+       nesc-atomic.c                           \
+       nesc-atomic.h                           \
+       nesc-attributes.c                       \
+       nesc-attributes.h                       \
+       nesc-c.c                                \
+       nesc-c.h                                \
+       nesc-cg.c                               \
+       nesc-cg.h                               \
+       nesc-component.c                        \
+       nesc-component.h                        \
+       nesc-concurrency.c                      \
+       nesc-concurrency.h                      \
+       nesc-configuration.c                    \
+       nesc-configuration.h                    \
+       nesc-constants.c                        \
+       nesc-constants.h                        \
+       nesc-cpp.c                              \
+       nesc-cpp.h                              \
+       nesc-decls.h                            \
+       nesc-deputy.c                           \
+       nesc-deputy.h                           \
+       nesc-dfilter.c                          \
+       nesc-dfilter.h                          \
+       nesc-doc.c                              \
+       nesc-doc.h                              \
+       nesc-dspec.h                            \
+       nesc-dspec-int.h                        \
+       nesc-dspec.tab.c                        \
+       nesc-dspec.tab.h                        \
+       nesc-dump.c                             \
+       nesc-dump.h                             \
+       nesc-env.c                              \
+       nesc-env.h                              \
+       nesc-gcc.c                              \
+       nesc-gcc.h                              \
+       nesc-generate.c                         \
+       nesc-generate.h                         \
+       nesc-inline.c                           \
+       nesc-inline.h                           \
+       nesc-interface.c                        \
+       nesc-interface.h                        \
+       nesc-keywords.h                         \
+       nesc-magic.c                            \
+       nesc-magic.h                            \
+       nesc-main.c                             \
+       nesc-main.h                             \
+       nesc-module.c                           \
+       nesc-module.h                           \
+       nesc-msg.c                              \
+       nesc-msg.h                              \
+       nesc-ndoc.c                             \
+       nesc-ndoc.h                             \
+       nesc-network.c                          \
+       nesc-network.h                          \
+       nesc-paths.c                            \
+       nesc-paths.h                            \
+       nesc-semantics.c                        \
+       nesc-semantics.h                        \
+       nesc-task.c                             \
+       nesc-task.h                             \
+       nesc-uses.c                             \
+       nesc-uses.h                             \
+       nesc-xml.c                              \
+       nesc-xml.h                              \
+       parser.h                                \
+       qualifiers.h                            \
+       sd_list.c                               \
+       sd_list.h                               \
+       semantics.c                             \
+       semantics.h                             \
+       stmt.c                                  \
+       stmt.h                                  \
+       types.c                                 \
+       types.h                                 \
+       unparse.c                               \
+       unparse.h                               \
+       utils.c                                 \
+       utils.h                                 \
+       machine/keil-gperf.h                    \
+       machine/sdcc-gperf.h
+
+# Character encoding conversion library.
+LIBICONV = @LIBICONV@
+LIBICONV_DEP = @LIBICONV_DEP@
+
+nesc1_SOURCES = toplev.c
+nesc1_LDADD =  libparser.a                     \
+               $(libregions)                   \
+               ../libcpp/libcpp.a              \
+               ../libiberty/libiberty.a        \
+               -lm                             \
+               $(LIBICONV)
+
+BUILT_SOURCES =                                        \
+       AST_defs.h                              \
+       AST_list_node.c                         \
+       AST_list_node.h                         \
+       AST_parent.c                            \
+       AST_print.c                             \
+       AST_types.c                             \
+       AST_types.h                             \
+       AST_walk_children.c                     \
+       ND_defs.h                               \
+       ND_list_nd_arg.c                        \
+       ND_list_nd_arg.h                        \
+       ND_types.c                              \
+       ND_types.h                              \
+       c-gperf.h                               \
+       c-parse.tab.c                           \
+       c-parse.tab.h                           \
+       lex.nd.c                                \
+       nesc-dspec.tab.c                        \
+       nesc-dspec.tab.h                        \
+       machine/keil-gperf.h                    \
+       machine/sdcc-gperf.h
+
+EXTRA_DIST =                                   \
+       build-basics.el                         \
+       build-list.el                           \
+       build-parent.el                         \
+       build-print.el                          \
+       build-types.el                          \
+       build-walk.el                           \
+       c-parse.gperf                           \
+       c-parse.y                               \
+       cg_help.c                               \
+       cg_help.fig                             \
+       nodetypes.def                           \
+       AST_defs.h                              \
+       AST_list_node.c                         \
+       AST_parent.c                            \
+       AST_print.c                             \
+       AST_types.c                             \
+       AST_walk_children.c                     \
+       ND_defs.h                               \
+       ND_list_nd_arg.c                        \
+       ND_types.c                              \
+       machine/self.c                          \
+       machine/avr.c                           \
+       machine/env_machine.c                   \
+       machine/msp430.c                        \
+       machine/keil.c                          \
+       machine/keil.gperf                      \
+       machine/sdcc.c                          \
+       machine/sdcc.gperf                      \
+       nesc-dspec.def                          \
+       nesc-dspec.l                            \
+       nesc-dspec.y                            \
+       tdspecs                                 \
+       nesc-compile                            \
+       COPYING                                 \
+       COPYRIGHT                               \
+       .gdbinit
+
+BISON = bison
+FLEX = flex
+EMACS = emacs
+M4 = m4
+GPERF = gperf
+
+$(srcdir)/c-parse.tab.c $(srcdir)/c-parse.tab.h: c-parse.y
+       $(BISON) $(BISONFLAGS) -dv $<
+
+$(srcdir)/nesc-dspec.tab.c $(srcdir)/nesc-dspec.tab.h: nesc-dspec.y
+       $(BISON) $(BISONFLAGS) -p nd -dv $<
+
+$(srcdir)/lex.nd.c: nesc-dspec.l
+       $(FLEX) -Pnd -s $<
+
+$(srcdir)/ND_types.c $(srcdir)/ND_types.h $(srcdir)/ND_defs.h: build-types.el nesc-dspec.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el ND nesc-dspec.def 10000
+
+$(srcdir)/ND_list_nd_arg.c $(srcdir)/ND_list_nd_arg.h: build-list.el nesc-dspec.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el ND nesc-dspec.def nd_arg
+
+$(srcdir)/AST_types.c $(srcdir)/AST_types.h $(srcdir)/AST_defs.h: build-types.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el AST nodetypes.def 42
+
+$(srcdir)/AST_list_node.c $(srcdir)/AST_list_node.h: build-list.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el AST nodetypes.def node
+
+$(srcdir)/AST_parent.c: build-parent.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-parent.el AST nodetypes.def
+
+$(srcdir)/AST_print.c: build-print.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-print.el AST nodetypes.def
+
+$(srcdir)/AST_walk_children.c: build-walk.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-walk.el AST nodetypes.def
+
+$(srcdir)/c-gperf.h: c-parse.gperf qualifiers.h nesc-keywords.h
+       cd $(srcdir) && $(M4) $(M4FLAGS) c-parse.gperf | grep -v '^$$' | \
+       $(GPERF) $(GPERFFLAGS) -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,8,$$ >$@-
+       mv $@- $@
+
+$(srcdir)/machine/sdcc-gperf.h: machine/sdcc.gperf
+       $(GPERF) $(GPERFFLAGS) -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf >$@-
+       mv $@- $@
+
+$(srcdir)/machine/keil-gperf.h: machine/keil.gperf
+       $(GPERF) $(GPERFFLAGS) -j1 -t -E -H keil_hash -N is_keil_word -k1,3,$$ machine/keil.gperf >$@-
+       mv $@- $@
+
+# Regression testing stuff
+
+testdoc: nesc-ndoc.c nesc-ndoc.h dd_list.c $(libregions)
+        $(COMPILE) -o $@ -DTESTING nesc-ndoc.c dd_list.c $(libregions)
+
+regress: nesc1 testdoc
+        (cd ../nregress && ./runtest)
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..be8f38e
--- /dev/null
@@ -0,0 +1,1135 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of the nesC compiler.
+# 
+# This file is derived from the RC Compiler. It is thus
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# Changes for nesC are
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@NEED_REGEX_TRUE@am__append_1 = -Ilibcompat/regex
+@NEED_FNMATCH_TRUE@am__append_2 = -Ilibcompat/fnmatch
+ncclib_PROGRAMS = nesc1$(EXEEXT)
+subdir = .
+DIST_COMMON = $(am__configure_deps) \
+       $(srcdir)/../config-aux/config.guess \
+       $(srcdir)/../config-aux/config.rpath \
+       $(srcdir)/../config-aux/config.sub \
+       $(srcdir)/../config-aux/depcomp \
+       $(srcdir)/../config-aux/install-sh \
+       $(srcdir)/../config-aux/missing \
+       $(srcdir)/../config-aux/mkinstalldirs $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/autoconf.h.in \
+       $(top_srcdir)/configure ../config-aux/config.guess \
+       ../config-aux/config.rpath ../config-aux/config.sub \
+       ../config-aux/depcomp ../config-aux/install-sh \
+       ../config-aux/missing ../config-aux/mkinstalldirs COPYING
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../config-aux/mkinstalldirs
+CONFIG_HEADER = autoconf.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libparser_a_AR = $(AR) $(ARFLAGS)
+libparser_a_LIBADD =
+am_libparser_a_OBJECTS = AST.$(OBJEXT) AST_utils.$(OBJEXT) \
+       AST_walk.$(OBJEXT) array.$(OBJEXT) attributes.$(OBJEXT) \
+       c-lex.$(OBJEXT) c-parse.tab.$(OBJEXT) constants.$(OBJEXT) \
+       cval.$(OBJEXT) dd_list.$(OBJEXT) dhash.$(OBJEXT) \
+       edit.$(OBJEXT) env.$(OBJEXT) errors.$(OBJEXT) expr.$(OBJEXT) \
+       flags.$(OBJEXT) graph.$(OBJEXT) init.$(OBJEXT) \
+       lex.nd.$(OBJEXT) machine.$(OBJEXT) nesc-abstract.$(OBJEXT) \
+       nesc-atomic.$(OBJEXT) nesc-attributes.$(OBJEXT) \
+       nesc-c.$(OBJEXT) nesc-cg.$(OBJEXT) nesc-component.$(OBJEXT) \
+       nesc-concurrency.$(OBJEXT) nesc-configuration.$(OBJEXT) \
+       nesc-constants.$(OBJEXT) nesc-cpp.$(OBJEXT) \
+       nesc-deputy.$(OBJEXT) nesc-dfilter.$(OBJEXT) \
+       nesc-doc.$(OBJEXT) nesc-dspec.tab.$(OBJEXT) \
+       nesc-dump.$(OBJEXT) nesc-env.$(OBJEXT) nesc-gcc.$(OBJEXT) \
+       nesc-generate.$(OBJEXT) nesc-inline.$(OBJEXT) \
+       nesc-interface.$(OBJEXT) nesc-magic.$(OBJEXT) \
+       nesc-main.$(OBJEXT) nesc-module.$(OBJEXT) nesc-msg.$(OBJEXT) \
+       nesc-ndoc.$(OBJEXT) nesc-network.$(OBJEXT) \
+       nesc-paths.$(OBJEXT) nesc-semantics.$(OBJEXT) \
+       nesc-task.$(OBJEXT) nesc-uses.$(OBJEXT) nesc-xml.$(OBJEXT) \
+       sd_list.$(OBJEXT) semantics.$(OBJEXT) stmt.$(OBJEXT) \
+       types.$(OBJEXT) unparse.$(OBJEXT) utils.$(OBJEXT)
+libparser_a_OBJECTS = $(am_libparser_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" \
+       "$(DESTDIR)$(ncclibdir)"
+ncclibPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(ncclib_PROGRAMS)
+am_nesc1_OBJECTS = toplev.$(OBJEXT)
+nesc1_OBJECTS = $(am_nesc1_OBJECTS)
+am__DEPENDENCIES_1 =
+nesc1_DEPENDENCIES = libparser.a $(libregions) ../libcpp/libcpp.a \
+       ../libiberty/libiberty.a $(am__DEPENDENCIES_1)
+ncclibSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(ncclib_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/../config-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libparser_a_SOURCES) $(nesc1_SOURCES)
+DIST_SOURCES = $(libparser_a_SOURCES) $(nesc1_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ncclibDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(ncclib_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = libcompat
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+
+# Character encoding conversion library.
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+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@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+@USING_RCC_FALSE@regiondir = libcompat
+@USING_RCC_TRUE@regiondir = lib
+@USING_RCC_FALSE@SUBDIRS = libcompat
+extra_inc := $(am__append_1) $(am__append_2)
+ncclibdir = $(libdir)/ncc
+INCLUDES = $(regionflags) -I$(srcdir)/$(regiondir) -I$(srcdir)/../libcpp/include -I$(srcdir)/../libcpp -I$(srcdir)/../include $(extra_inc)
+noinst_LIBRARIES = libparser.a
+ncclib_DATA = tdspecs
+ncclib_SCRIPTS = nesc-compile
+libregions = $(regiondir)/libregions.a
+libparser_a_SOURCES = \
+       AST.c                                   \
+       AST.h                                   \
+       AST_list_node.h                         \
+       AST_types.h                             \
+       AST_utils.c                             \
+       AST_utils.h                             \
+       AST_walk.c                              \
+       AST_walk.h                              \
+       ND_list_nd_arg.h                        \
+       ND_types.h                              \
+       array.h                                 \
+       array.c                                 \
+       attributes.h                            \
+       attributes.c                            \
+       c-gperf.h                               \
+       c-lex.c                                 \
+       c-lex.h                                 \
+       c-lex-int.h                             \
+       c-lex-state.h                           \
+       c-parse.h                               \
+       c-parse.tab.h                           \
+       c-parse.tab.c                           \
+       constants.c                             \
+       constants.h                             \
+       cstring.h                               \
+       cval.h                                  \
+       cval.c                                  \
+       decls.h                                 \
+       dd_list.c                               \
+       dd_list.h                               \
+       dhash.c                                 \
+       dhash.h                                 \
+       edit.c                                  \
+       edit.h                                  \
+       env.c                                   \
+       env.h                                   \
+       errors.c                                \
+       errors.h                                \
+       expr.c                                  \
+       expr.h                                  \
+       flags.c                                 \
+       flags.h                                 \
+       gcc-cpp.h                               \
+       graph.c                                 \
+       graph.h                                 \
+       init.c                                  \
+       init.h                                  \
+       lex.nd.c                                \
+       machine.c                               \
+       machine.h                               \
+       nconfig.h                               \
+       nesc-abstract.c                         \
+       nesc-abstract.h                         \
+       nesc-atomic.c                           \
+       nesc-atomic.h                           \
+       nesc-attributes.c                       \
+       nesc-attributes.h                       \
+       nesc-c.c                                \
+       nesc-c.h                                \
+       nesc-cg.c                               \
+       nesc-cg.h                               \
+       nesc-component.c                        \
+       nesc-component.h                        \
+       nesc-concurrency.c                      \
+       nesc-concurrency.h                      \
+       nesc-configuration.c                    \
+       nesc-configuration.h                    \
+       nesc-constants.c                        \
+       nesc-constants.h                        \
+       nesc-cpp.c                              \
+       nesc-cpp.h                              \
+       nesc-decls.h                            \
+       nesc-deputy.c                           \
+       nesc-deputy.h                           \
+       nesc-dfilter.c                          \
+       nesc-dfilter.h                          \
+       nesc-doc.c                              \
+       nesc-doc.h                              \
+       nesc-dspec.h                            \
+       nesc-dspec-int.h                        \
+       nesc-dspec.tab.c                        \
+       nesc-dspec.tab.h                        \
+       nesc-dump.c                             \
+       nesc-dump.h                             \
+       nesc-env.c                              \
+       nesc-env.h                              \
+       nesc-gcc.c                              \
+       nesc-gcc.h                              \
+       nesc-generate.c                         \
+       nesc-generate.h                         \
+       nesc-inline.c                           \
+       nesc-inline.h                           \
+       nesc-interface.c                        \
+       nesc-interface.h                        \
+       nesc-keywords.h                         \
+       nesc-magic.c                            \
+       nesc-magic.h                            \
+       nesc-main.c                             \
+       nesc-main.h                             \
+       nesc-module.c                           \
+       nesc-module.h                           \
+       nesc-msg.c                              \
+       nesc-msg.h                              \
+       nesc-ndoc.c                             \
+       nesc-ndoc.h                             \
+       nesc-network.c                          \
+       nesc-network.h                          \
+       nesc-paths.c                            \
+       nesc-paths.h                            \
+       nesc-semantics.c                        \
+       nesc-semantics.h                        \
+       nesc-task.c                             \
+       nesc-task.h                             \
+       nesc-uses.c                             \
+       nesc-uses.h                             \
+       nesc-xml.c                              \
+       nesc-xml.h                              \
+       parser.h                                \
+       qualifiers.h                            \
+       sd_list.c                               \
+       sd_list.h                               \
+       semantics.c                             \
+       semantics.h                             \
+       stmt.c                                  \
+       stmt.h                                  \
+       types.c                                 \
+       types.h                                 \
+       unparse.c                               \
+       unparse.h                               \
+       utils.c                                 \
+       utils.h                                 \
+       machine/keil-gperf.h                    \
+       machine/sdcc-gperf.h
+
+LIBICONV_DEP = @LIBICONV_DEP@
+nesc1_SOURCES = toplev.c
+nesc1_LDADD = libparser.a                      \
+               $(libregions)                   \
+               ../libcpp/libcpp.a              \
+               ../libiberty/libiberty.a        \
+               -lm                             \
+               $(LIBICONV)
+
+BUILT_SOURCES = \
+       AST_defs.h                              \
+       AST_list_node.c                         \
+       AST_list_node.h                         \
+       AST_parent.c                            \
+       AST_print.c                             \
+       AST_types.c                             \
+       AST_types.h                             \
+       AST_walk_children.c                     \
+       ND_defs.h                               \
+       ND_list_nd_arg.c                        \
+       ND_list_nd_arg.h                        \
+       ND_types.c                              \
+       ND_types.h                              \
+       c-gperf.h                               \
+       c-parse.tab.c                           \
+       c-parse.tab.h                           \
+       lex.nd.c                                \
+       nesc-dspec.tab.c                        \
+       nesc-dspec.tab.h                        \
+       machine/keil-gperf.h                    \
+       machine/sdcc-gperf.h
+
+EXTRA_DIST = \
+       build-basics.el                         \
+       build-list.el                           \
+       build-parent.el                         \
+       build-print.el                          \
+       build-types.el                          \
+       build-walk.el                           \
+       c-parse.gperf                           \
+       c-parse.y                               \
+       cg_help.c                               \
+       cg_help.fig                             \
+       nodetypes.def                           \
+       AST_defs.h                              \
+       AST_list_node.c                         \
+       AST_parent.c                            \
+       AST_print.c                             \
+       AST_types.c                             \
+       AST_walk_children.c                     \
+       ND_defs.h                               \
+       ND_list_nd_arg.c                        \
+       ND_types.c                              \
+       machine/self.c                          \
+       machine/avr.c                           \
+       machine/env_machine.c                   \
+       machine/msp430.c                        \
+       machine/keil.c                          \
+       machine/keil.gperf                      \
+       machine/sdcc.c                          \
+       machine/sdcc.gperf                      \
+       nesc-dspec.def                          \
+       nesc-dspec.l                            \
+       nesc-dspec.y                            \
+       tdspecs                                 \
+       nesc-compile                            \
+       COPYING                                 \
+       COPYRIGHT                               \
+       .gdbinit
+
+BISON = bison
+FLEX = flex
+EMACS = emacs
+M4 = m4
+GPERF = gperf
+all: $(BUILT_SOURCES) autoconf.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+             cd $(srcdir) && $(AUTOMAKE) --foreign  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+autoconf.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/autoconf.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status autoconf.h
+$(srcdir)/autoconf.h.in:  $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f autoconf.h stamp-h1
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libparser.a: $(libparser_a_OBJECTS) $(libparser_a_DEPENDENCIES) 
+       -rm -f libparser.a
+       $(libparser_a_AR) libparser.a $(libparser_a_OBJECTS) $(libparser_a_LIBADD)
+       $(RANLIB) libparser.a
+install-ncclibPROGRAMS: $(ncclib_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)"
+       @list='$(ncclib_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(ncclibPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(ncclibdir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(ncclibPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(ncclibdir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-ncclibPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(ncclib_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+clean-ncclibPROGRAMS:
+       -test -z "$(ncclib_PROGRAMS)" || rm -f $(ncclib_PROGRAMS)
+nesc1$(EXEEXT): $(nesc1_OBJECTS) $(nesc1_DEPENDENCIES) 
+       @rm -f nesc1$(EXEEXT)
+       $(LINK) $(nesc1_OBJECTS) $(nesc1_LDADD) $(LIBS)
+install-ncclibSCRIPTS: $(ncclib_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)"
+       @list='$(ncclib_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(ncclibSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ncclibdir)/$$f'"; \
+           $(ncclibSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ncclibdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-ncclibSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(ncclib_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST_utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST_walk.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attributes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-lex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-parse.tab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constants.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cval.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dd_list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graph.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lex.nd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/machine.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-abstract.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-atomic.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-attributes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-cg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-component.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-concurrency.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-configuration.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-constants.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-cpp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-deputy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dfilter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-doc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dspec.tab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-env.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-gcc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-generate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-inline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-interface.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-magic.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-module.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-ndoc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-network.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-paths.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-semantics.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-task.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-uses.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-xml.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semantics.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stmt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/toplev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unparse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+install-ncclibDATA: $(ncclib_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)"
+       @list='$(ncclib_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(ncclibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         $(ncclibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+uninstall-ncclibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(ncclib_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) autoconf.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) autoconf.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) autoconf.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS) autoconf.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d $(distdir) || mkdir $(distdir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \
+               autoconf.h
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-ncclibPROGRAMS clean-noinstLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-ncclibDATA install-ncclibPROGRAMS \
+       install-ncclibSCRIPTS
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-ncclibDATA uninstall-ncclibPROGRAMS \
+       uninstall-ncclibSCRIPTS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       clean-ncclibPROGRAMS clean-noinstLIBRARIES ctags \
+       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
+       dist-tarZ dist-zip distcheck distclean distclean-compile \
+       distclean-generic distclean-hdr distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-data install-data-am \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-ncclibDATA install-ncclibPROGRAMS \
+       install-ncclibSCRIPTS install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-ncclibDATA \
+       uninstall-ncclibPROGRAMS uninstall-ncclibSCRIPTS
+
+
+$(srcdir)/c-parse.tab.c $(srcdir)/c-parse.tab.h: c-parse.y
+       $(BISON) $(BISONFLAGS) -dv $<
+
+$(srcdir)/nesc-dspec.tab.c $(srcdir)/nesc-dspec.tab.h: nesc-dspec.y
+       $(BISON) $(BISONFLAGS) -p nd -dv $<
+
+$(srcdir)/lex.nd.c: nesc-dspec.l
+       $(FLEX) -Pnd -s $<
+
+$(srcdir)/ND_types.c $(srcdir)/ND_types.h $(srcdir)/ND_defs.h: build-types.el nesc-dspec.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el ND nesc-dspec.def 10000
+
+$(srcdir)/ND_list_nd_arg.c $(srcdir)/ND_list_nd_arg.h: build-list.el nesc-dspec.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el ND nesc-dspec.def nd_arg
+
+$(srcdir)/AST_types.c $(srcdir)/AST_types.h $(srcdir)/AST_defs.h: build-types.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el AST nodetypes.def 42
+
+$(srcdir)/AST_list_node.c $(srcdir)/AST_list_node.h: build-list.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el AST nodetypes.def node
+
+$(srcdir)/AST_parent.c: build-parent.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-parent.el AST nodetypes.def
+
+$(srcdir)/AST_print.c: build-print.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-print.el AST nodetypes.def
+
+$(srcdir)/AST_walk_children.c: build-walk.el nodetypes.def build-basics.el
+       cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-walk.el AST nodetypes.def
+
+$(srcdir)/c-gperf.h: c-parse.gperf qualifiers.h nesc-keywords.h
+       cd $(srcdir) && $(M4) $(M4FLAGS) c-parse.gperf | grep -v '^$$' | \
+       $(GPERF) $(GPERFFLAGS) -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,8,$$ >$@-
+       mv $@- $@
+
+$(srcdir)/machine/sdcc-gperf.h: machine/sdcc.gperf
+       $(GPERF) $(GPERFFLAGS) -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf >$@-
+       mv $@- $@
+
+$(srcdir)/machine/keil-gperf.h: machine/keil.gperf
+       $(GPERF) $(GPERFFLAGS) -j1 -t -E -H keil_hash -N is_keil_word -k1,3,$$ machine/keil.gperf >$@-
+       mv $@- $@
+
+# Regression testing stuff
+
+testdoc: nesc-ndoc.c nesc-ndoc.h dd_list.c $(libregions)
+        $(COMPILE) -o $@ -DTESTING nesc-ndoc.c dd_list.c $(libregions)
+
+regress: nesc1 testdoc
+        (cd ../nregress && ./runtest)
+# 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/src/ND_defs.h b/src/ND_defs.h
new file mode 100644 (file)
index 0000000..b170945
--- /dev/null
@@ -0,0 +1,86 @@
+/* Automatically generated from nesc-dspec.def, do not edit. */
+
+/* See the copyright notice in nesc-dspec.def */
+/* the dump option NAME(ARGS).
+ARGS may be NULL
+COUNT is the number of elements in ARGS */
+struct ND_nd_option { /* extends nil */
+  ND_kind kind;
+  const char * name;
+  nd_arg sameregion args;
+  int count;
+};
+
+/* supertype for arguments */
+struct ND_nd_arg { /* extends nil */
+  ND_kind kind;
+  nd_arg next;
+};
+
+/* an integer argument VAL */
+struct ND_nd_int { /* extends nd_arg */
+  ND_kind kind;
+  nd_arg next;
+  largest_int val;
+};
+
+/* some token argument STR */
+struct ND_nd_token { /* extends nd_arg */
+  ND_kind kind;
+  nd_arg next;
+  const char * str;
+};
+
+/* a filter */
+struct ND_nd_filter { /* extends nd_arg */
+  ND_kind kind;
+  nd_arg next;
+};
+
+/* FILTER1 & FILTER2 */
+struct ND_ndf_and { /* extends nd_filter */
+  ND_kind kind;
+  nd_arg next;
+  nd_filter sameregion filter1;
+  nd_filter sameregion filter2;
+};
+
+/* FILTER1 | FILTER2 */
+struct ND_ndf_or { /* extends nd_filter */
+  ND_kind kind;
+  nd_arg next;
+  nd_filter sameregion filter1;
+  nd_filter sameregion filter2;
+};
+
+/* !FILTER1 */
+struct ND_ndf_not { /* extends nd_filter */
+  ND_kind kind;
+  nd_arg next;
+  nd_filter sameregion filter1;
+};
+
+/* the basic filter NAME(ARGS).
+COUNT is the number of elements in ARGS (>= 1)
+INFO can be used to save extra information (e.g., compiled regexp info) */
+struct ND_ndf_op { /* extends nd_filter */
+  ND_kind kind;
+  nd_arg next;
+  const char * name;
+  nd_arg sameregion args;
+  int count;
+  void * info;
+  int filter_index;
+};
+
+
+
+nd_option new_nd_option(region r, const char * name, nd_arg args, int count);
+nd_arg new_nd_arg(region r);
+nd_int new_nd_int(region r, largest_int val);
+nd_token new_nd_token(region r, const char * str);
+nd_filter new_nd_filter(region r);
+ndf_and new_ndf_and(region r, nd_filter filter1, nd_filter filter2);
+ndf_or new_ndf_or(region r, nd_filter filter1, nd_filter filter2);
+ndf_not new_ndf_not(region r, nd_filter filter1);
+ndf_op new_ndf_op(region r, const char * name, nd_arg args, int count);
diff --git a/src/ND_list_nd_arg.c b/src/ND_list_nd_arg.c
new file mode 100644 (file)
index 0000000..e8ca998
--- /dev/null
@@ -0,0 +1,67 @@
+/* Automatically generated from nesc-dspec.def, do not edit. */
+
+/* See the copyright notice in nesc-dspec.def */
+nd_arg ND_nd_arg_last(nd_arg l){
+  if (!l) return NULL;
+  while (l->next) l = l->next;
+  return l;
+}
+
+nd_arg ND_nd_arg_chain(nd_arg l1, nd_arg l2){
+  if (!l1) return l2;
+  ND_nd_arg_last(l1)->next = l2;
+  return l1;
+}
+
+int ND_nd_arg_length(nd_arg l){
+  int len = 0;
+
+  while (l) 
+    {
+      l = l->next;
+      len++;
+    }
+  return len;
+}
+
+nd_arg ND_nd_arg_reverse(nd_arg l){
+  nd_arg last = NULL, next;
+
+  for (;;)
+    {
+      if (!l)
+        return last;
+      next = l->next;
+      l->next = last;
+      last = l;
+      l = next;
+    }
+}
+
+nd_option nd_option_chain(nd_option l1, nd_option l2)
+{ return CAST(nd_option, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+nd_arg nd_arg_chain(nd_arg l1, nd_arg l2)
+{ return CAST(nd_arg, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+nd_int nd_int_chain(nd_int l1, nd_int l2)
+{ return CAST(nd_int, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+nd_token nd_token_chain(nd_token l1, nd_token l2)
+{ return CAST(nd_token, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+nd_filter nd_filter_chain(nd_filter l1, nd_filter l2)
+{ return CAST(nd_filter, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+ndf_and ndf_and_chain(ndf_and l1, ndf_and l2)
+{ return CAST(ndf_and, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+ndf_or ndf_or_chain(ndf_or l1, ndf_or l2)
+{ return CAST(ndf_or, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+ndf_not ndf_not_chain(ndf_not l1, ndf_not l2)
+{ return CAST(ndf_not, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
+ndf_op ndf_op_chain(ndf_op l1, ndf_op l2)
+{ return CAST(ndf_op, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); }
+
diff --git a/src/ND_list_nd_arg.h b/src/ND_list_nd_arg.h
new file mode 100644 (file)
index 0000000..6f731d5
--- /dev/null
@@ -0,0 +1,52 @@
+/* Automatically generated from nesc-dspec.def, do not edit. */
+
+/* See the copyright notice in nesc-dspec.def */
+nd_arg ND_nd_arg_last(nd_arg l);
+nd_arg ND_nd_arg_chain(nd_arg l1, nd_arg l2);
+int ND_nd_arg_length(nd_arg l);
+nd_arg ND_nd_arg_reverse(nd_arg l);
+#define nd_option_reverse(x) CAST(nd_option, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define nd_option_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_nd_option(x) CAST(nd_option, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_nd_option(var, list) for (var = (list); var; var = CAST(nd_option, var->next))
+#define nd_arg_reverse(x) CAST(nd_arg, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define nd_arg_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_nd_arg(x) CAST(nd_arg, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_nd_arg(var, list) for (var = (list); var; var = CAST(nd_arg, var->next))
+#define nd_int_reverse(x) CAST(nd_int, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define nd_int_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_nd_int(x) CAST(nd_int, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_nd_int(var, list) for (var = (list); var; var = CAST(nd_int, var->next))
+#define nd_token_reverse(x) CAST(nd_token, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define nd_token_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_nd_token(x) CAST(nd_token, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_nd_token(var, list) for (var = (list); var; var = CAST(nd_token, var->next))
+#define nd_filter_reverse(x) CAST(nd_filter, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define nd_filter_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_nd_filter(x) CAST(nd_filter, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_nd_filter(var, list) for (var = (list); var; var = CAST(nd_filter, var->next))
+#define ndf_and_reverse(x) CAST(ndf_and, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define ndf_and_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_ndf_and(x) CAST(ndf_and, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_ndf_and(var, list) for (var = (list); var; var = CAST(ndf_and, var->next))
+#define ndf_or_reverse(x) CAST(ndf_or, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define ndf_or_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_ndf_or(x) CAST(ndf_or, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_ndf_or(var, list) for (var = (list); var; var = CAST(ndf_or, var->next))
+#define ndf_not_reverse(x) CAST(ndf_not, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define ndf_not_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_ndf_not(x) CAST(ndf_not, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_ndf_not(var, list) for (var = (list); var; var = CAST(ndf_not, var->next))
+#define ndf_op_reverse(x) CAST(ndf_op, ND_nd_arg_reverse(CAST(nd_arg, (x))))
+#define ndf_op_length(x) ND_nd_arg_length(CAST(nd_arg, (x)))
+#define last_ndf_op(x) CAST(ndf_op, ND_nd_arg_last(CAST(nd_arg, (x))))
+#define scan_ndf_op(var, list) for (var = (list); var; var = CAST(ndf_op, var->next))
+nd_option nd_option_chain(nd_option l1, nd_option l2);
+nd_arg nd_arg_chain(nd_arg l1, nd_arg l2);
+nd_int nd_int_chain(nd_int l1, nd_int l2);
+nd_token nd_token_chain(nd_token l1, nd_token l2);
+nd_filter nd_filter_chain(nd_filter l1, nd_filter l2);
+ndf_and ndf_and_chain(ndf_and l1, ndf_and l2);
+ndf_or ndf_or_chain(ndf_or l1, ndf_or l2);
+ndf_not ndf_not_chain(ndf_not l1, ndf_not l2);
+ndf_op ndf_op_chain(ndf_op l1, ndf_op l2);
diff --git a/src/ND_types.c b/src/ND_types.c
new file mode 100644 (file)
index 0000000..102c173
--- /dev/null
@@ -0,0 +1,147 @@
+/* Automatically generated from nesc-dspec.def, do not edit. */
+
+/* See the copyright notice in nesc-dspec.def */
+nd_option new_nd_option(region r, const char * name, nd_arg args, int count)
+{
+  nd_option obj = ralloc(r, struct ND_nd_option);
+
+  obj->kind = kind_nd_option;
+  obj->name = name;
+  obj->args = args;
+  obj->count = count;
+
+  return obj;
+}
+
+nd_arg new_nd_arg(region r)
+{
+  nd_arg obj = ralloc(r, struct ND_nd_arg);
+
+  obj->kind = kind_nd_arg;
+
+  return obj;
+}
+
+nd_int new_nd_int(region r, largest_int val)
+{
+  nd_int obj = ralloc(r, struct ND_nd_int);
+
+  obj->kind = kind_nd_int;
+  obj->val = val;
+
+  return obj;
+}
+
+nd_token new_nd_token(region r, const char * str)
+{
+  nd_token obj = ralloc(r, struct ND_nd_token);
+
+  obj->kind = kind_nd_token;
+  obj->str = str;
+
+  return obj;
+}
+
+nd_filter new_nd_filter(region r)
+{
+  nd_filter obj = ralloc(r, struct ND_nd_filter);
+
+  obj->kind = kind_nd_filter;
+
+  return obj;
+}
+
+ndf_and new_ndf_and(region r, nd_filter filter1, nd_filter filter2)
+{
+  ndf_and obj = ralloc(r, struct ND_ndf_and);
+
+  obj->kind = kind_ndf_and;
+  obj->filter1 = filter1;
+  obj->filter2 = filter2;
+
+  return obj;
+}
+
+ndf_or new_ndf_or(region r, nd_filter filter1, nd_filter filter2)
+{
+  ndf_or obj = ralloc(r, struct ND_ndf_or);
+
+  obj->kind = kind_ndf_or;
+  obj->filter1 = filter1;
+  obj->filter2 = filter2;
+
+  return obj;
+}
+
+ndf_not new_ndf_not(region r, nd_filter filter1)
+{
+  ndf_not obj = ralloc(r, struct ND_ndf_not);
+
+  obj->kind = kind_ndf_not;
+  obj->filter1 = filter1;
+
+  return obj;
+}
+
+ndf_op new_ndf_op(region r, const char * name, nd_arg args, int count)
+{
+  ndf_op obj = ralloc(r, struct ND_ndf_op);
+
+  obj->kind = kind_ndf_op;
+  obj->name = name;
+  obj->args = args;
+  obj->count = count;
+
+  return obj;
+}
+
+
+
+ND_kind ND_parent_kind[] = {
+  0,
+  0,
+  kind_nd_arg,
+  kind_nd_arg,
+  kind_nd_arg,
+  kind_nd_filter,
+  kind_nd_filter,
+  kind_nd_filter,
+  kind_nd_filter,
+};
+
+ND_kind ND_post_kind[] = {
+  postkind_nd_option,
+  postkind_nd_arg,
+  postkind_nd_int,
+  postkind_nd_token,
+  postkind_nd_filter,
+  postkind_ndf_and,
+  postkind_ndf_or,
+  postkind_ndf_not,
+  postkind_ndf_op,
+};
+
+size_t ND_sizeof[] = {
+  sizeof(struct ND_nd_option),
+  sizeof(struct ND_nd_arg),
+  sizeof(struct ND_nd_int),
+  sizeof(struct ND_nd_token),
+  sizeof(struct ND_nd_filter),
+  sizeof(struct ND_ndf_and),
+  sizeof(struct ND_ndf_or),
+  sizeof(struct ND_ndf_not),
+  sizeof(struct ND_ndf_op),
+};
+
+type_t ND_typeof[] = {
+  rctypeof(struct ND_nd_option),
+  rctypeof(struct ND_nd_arg),
+  rctypeof(struct ND_nd_int),
+  rctypeof(struct ND_nd_token),
+  rctypeof(struct ND_nd_filter),
+  rctypeof(struct ND_ndf_and),
+  rctypeof(struct ND_ndf_or),
+  rctypeof(struct ND_ndf_not),
+  rctypeof(struct ND_ndf_op),
+};
+
diff --git a/src/ND_types.h b/src/ND_types.h
new file mode 100644 (file)
index 0000000..2c2c5b4
--- /dev/null
@@ -0,0 +1,64 @@
+/* Automatically generated from nesc-dspec.def, do not edit. */
+
+/* See the copyright notice in nesc-dspec.def */
+typedef struct ND_nd_option *nd_option;
+typedef struct ND_nd_arg *nd_arg;
+typedef struct ND_nd_int *nd_int;
+typedef struct ND_nd_token *nd_token;
+typedef struct ND_nd_filter *nd_filter;
+typedef struct ND_ndf_and *ndf_and;
+typedef struct ND_ndf_or *ndf_or;
+typedef struct ND_ndf_not *ndf_not;
+typedef struct ND_ndf_op *ndf_op;
+typedef enum {
+  kind_nd_option = 10000,
+  postkind_nd_option = 10000,
+  kind_nd_arg = 10001,
+  postkind_nd_arg = 10008,
+  kind_nd_int = 10002,
+  postkind_nd_int = 10002,
+  kind_nd_token = 10003,
+  postkind_nd_token = 10003,
+  kind_nd_filter = 10004,
+  postkind_nd_filter = 10008,
+  kind_ndf_and = 10005,
+  postkind_ndf_and = 10005,
+  kind_ndf_or = 10006,
+  postkind_ndf_or = 10006,
+  kind_ndf_not = 10007,
+  postkind_ndf_not = 10007,
+  kind_ndf_op = 10008,
+  postkind_ndf_op = 10008
+} ND_kind;
+
+extern ND_kind ND_parent_kind[]; /* indexed by kind - kind_node */
+
+extern ND_kind ND_post_kind[]; /* indexed by kind - kind_node */
+
+extern size_t ND_sizeof[]; /* indexed by kind - kind_node */
+
+extern type_t ND_typeof[]; /* indexed by kind - kind_node */
+#define is_nd_option(x) ((x)->kind >= kind_nd_option && (x)->kind <= postkind_nd_option)
+#define is_nd_arg(x) ((x)->kind >= kind_nd_arg && (x)->kind <= postkind_nd_arg)
+#define is_nd_int(x) ((x)->kind >= kind_nd_int && (x)->kind <= postkind_nd_int)
+#define is_nd_token(x) ((x)->kind >= kind_nd_token && (x)->kind <= postkind_nd_token)
+#define is_nd_filter(x) ((x)->kind >= kind_nd_filter && (x)->kind <= postkind_nd_filter)
+#define is_ndf_and(x) ((x)->kind >= kind_ndf_and && (x)->kind <= postkind_ndf_and)
+#define is_ndf_or(x) ((x)->kind >= kind_ndf_or && (x)->kind <= postkind_ndf_or)
+#define is_ndf_not(x) ((x)->kind >= kind_ndf_not && (x)->kind <= postkind_ndf_not)
+#define is_ndf_op(x) ((x)->kind >= kind_ndf_op && (x)->kind <= postkind_ndf_op)
+typedef struct
+{
+  AST_kind kind;
+} *ND_generic;
+
+#ifdef __GNUC__
+#define ND_CAST(type, x) ({ND_generic tEmPcast = (ND_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); })
+#define ND_CASTPTR(type, x) ({ND_generic *tEmPcast = (ND_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); })
+#define ND_CASTSRPTR(type, x) ({ND_generic *tEmPcast = (ND_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); })
+#else
+/* Could also generate some code to make this safe */
+#define ND_CAST(type, x) ((type)(x))
+#define ND_CASTPTR(type, x) ((type *)(x))
+#define ND_CASTSRPTR(type, x) ((type sameregion *)(x))
+#endif
diff --git a/src/acinclude.m4 b/src/acinclude.m4
new file mode 100644 (file)
index 0000000..828b732
--- /dev/null
@@ -0,0 +1,80 @@
+dnl CPARSE_TRY_CFLAGS(FLAGS)
+dnl
+dnl   Try running the C compiler with FLAGS appended to $CFLAGS.  If
+dnl   it completes without error, retain the additional flags.
+dnl
+AC_DEFUN([CPARSE_TRY_CFLAGS],[
+AC_REQUIRE([AC_PROG_CC])
+AC_MSG_CHECKING(whether ${CC-cc} accepts $1)
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $1"
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE([], [],
+  AC_MSG_RESULT(yes),
+  AC_MSG_RESULT(no)
+  CFLAGS="$save_CFLAGS")])
+
+
+dnl CPARSE_GCCDIR
+dnl
+dnl   If the C compiler is gcc, set $GCCDIR to the directory
+dnl   containing gcc's suite of supporting files and also define
+dnl   GCCDIR macro to a string representation of the same.
+dnl
+AC_DEFUN([CPARSE_GCCDIR],[
+AC_REQUIRE([AC_PROG_CC])
+AC_MSG_CHECKING(for gcc support directory)
+if test "$GCC" = yes; then
+  GCCDIR="`$CC -v 2>&1 | sed -n 's:^Reading specs from \(.*\)/specs$:\1:p'`"
+  if test -z "$GCCDIR"; then
+    AC_MSG_ERROR(cannot find gcc support directory)
+  else
+    AC_MSG_RESULT($GCCDIR)
+  fi
+  AC_DEFINE_UNQUOTED(GCCDIR, "$GCCDIR", directory containing gcc support files)
+else
+  AC_MSG_RESULT(no)
+fi
+])
+
+dnl RC_TRY_CPPFLAGS(FLAGS)
+dnl
+dnl   Try running the C preprocessor with FLAGS appended to $CPPFLAGS.
+dnl   If it completes without error, retain the additional flags.
+dnl
+AC_DEFUN([RC_TRY_CPPFLAGS],[
+AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING(whether $CPP accepts $1)
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $1"
+AC_TRY_CPP([],
+  AC_MSG_RESULT(yes)
+,
+  CPPFLAGS="$save_CPPFLAGS"
+  AC_MSG_RESULT(no))])
+
+
+dnl RC_CHECK_DECL(FUNCTION, HEADER-FILE)
+dnl
+dnl   Search for a declaration of FUNCTION in HEADER-FILE, and define
+dnl   HAVE_FUNCTION_DECLARED if found.
+dnl
+AC_DEFUN([RC_CHECK_DECL],[
+AC_CACHE_CHECK(for $1 declaration in <$2>, rc_cv_$1_declared, [
+  AC_EGREP_HEADER(\<$1\>, $2, rc_cv_$1_declared=yes, rc_cv_$1_declared=no)])
+if test "$rc_cv_$1_declared" = yes; then
+  AC_DEFINE(HAVE_[]translit($1, a-z, A-Z)_DECLARED, 1, $1 is declared in <$2>)
+fi])
+
+
+dnl RC_FIX_EXEC(FILE)
+dnl
+dnl   If FILE is on the list of generated config files, turn on its
+dnl   user execute bit.  Intended for use in the EXTRA-CMDS argument
+dnl   to AC_OUTPUT or AC_OUTPUT_COMMANDS.
+dnl
+AC_DEFUN([RC_FIX_EXEC],[[
+case "$CONFIG_FILES" in
+  *$1*) chmod +x $1 ;;
+esac]])
diff --git a/src/aclocal.m4 b/src/aclocal.m4
new file mode 100644 (file)
index 0000000..d8739ed
--- /dev/null
@@ -0,0 +1,1919 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_if(m4_PACKAGE_VERSION, [2.61],,
+[m4_fatal([this file was generated for autoconf 2.61.
+You have another version of autoconf.  If you want to use that,
+you should regenerate the build system entirely.], [63])])
+
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
+
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# 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
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# lib-link.m4 serial 9 (gettext-0.16)
+dnl Copyright (C) 2001-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
+
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
+
+# Copyright (C) 2002, 2003, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10])dnl
+_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[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.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[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.
+AC_MSG_CHECKING([for style of include used by $am_make])
+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
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/src/array.c b/src/array.c
new file mode 100644 (file)
index 0000000..e0f2f77
--- /dev/null
@@ -0,0 +1,87 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <regions.h>
+#include <assert.h>
+#include <limits.h>
+#include "array.h"
+
+struct array {
+  region sameregion r;
+  void *sameregion data;
+  size_t elemsize;
+  type_t elemtype;
+  size_t nelems, nalloc;
+};
+
+struct array *new_array(region r, size_t initialsize,
+                       size_t typesize, type_t typeinfo)
+{
+  struct array *a = ralloc(r, struct array);
+
+  a->r = r;
+  a->data = typed_rarrayalloc(r, initialsize, typesize, typeinfo);
+  a->elemsize = typesize;
+  a->elemtype = typeinfo;
+  a->nelems = 0;
+  a->nalloc = initialsize;
+
+  return a;
+}
+
+void *array_extend(struct array *a, int by)
+{
+  size_t oldelems = a->nelems;
+
+  if (by < 0)
+    assert(-by <= a->nelems && by != INT_MIN);
+  else if (a->nelems + by > a->nalloc)
+    {
+      size_t newsize = a->nalloc * 2 + by;
+      void *newdata = typed_rarrayalloc(a->r, newsize, a->elemsize, a->elemtype);
+
+      /* XXX: could work harder to support really large array sizes
+        (this code will fail for a->nalloc >= (max(size_t)-by)/2) */
+      assert(newsize > a->nalloc); /* die when we get really big */
+      typed_rarraycopy(newdata, a->data, a->nelems, a->elemsize, a->elemtype);
+      a->data = newdata;
+      a->nalloc = newsize;
+    }
+  a->nelems += by;
+
+  return (char *)a->data + a->elemsize * oldelems;
+}
+
+void array_reset(struct array *a)
+{
+  a->nelems = 0;
+}
+
+size_t array_length(struct array *a)
+{
+  return a->nelems;
+}
+
+void *array_data(struct array *a)
+{
+  return a->data;
+}
+
diff --git a/src/array.h b/src/array.h
new file mode 100644 (file)
index 0000000..b849f51
--- /dev/null
@@ -0,0 +1,69 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef ARRAY_H
+#define ARRAY_H
+
+/* A region-based growable array type */
+
+#include <regions.h>
+
+struct array;
+
+struct array *new_array(region r, size_t initialsize,
+                       size_t typesize, type_t typeinfo);
+void *array_extend(struct array *a, int by);
+void array_reset(struct array *a);
+size_t array_length(struct array *a);
+void *array_data(struct array *a);
+
+
+#define DECLARE_ARRAY(name, type) \
+typedef struct name ## _a *name; \
+name new_ ## name(region r, size_t initialsize); \
+type *name ## _extend(name a, int by); \
+void name ## _reset(name a); \
+size_t name ## _length(name a); \
+type *name ## _data(name a);
+
+#define DEFINE_ARRAY(name, type) \
+name new_ ## name(region r, size_t initialsize) \
+{ \
+  return (name)new_array(r, initialsize, sizeof(type), rctypeof(type)); \
+} \
+type *name ## _extend(name a, int by) \
+{ \
+  return array_extend((struct array *)a, by); \
+} \
+void name ## _reset(name a) \
+{ \
+  return array_reset((struct array *)a); \
+} \
+size_t name ## _length(name a) \
+{ \
+  return array_length((struct array *)a); \
+} \
+type *name ## _data(name a) \
+{ \
+  return array_data((struct array *)a); \
+}
+
+#endif
diff --git a/src/attributes.c b/src/attributes.c
new file mode 100644 (file)
index 0000000..c00199c
--- /dev/null
@@ -0,0 +1,396 @@
+#include "parser.h"
+#include "attributes.h"
+#include "semantics.h"
+#include "nesc-semantics.h"
+#include "nesc-attributes.h"
+#include "machine.h"
+#include "c-parse.h"
+#include "constants.h"
+#include "AST_utils.h"
+
+/* Provide warnings about ignored attributes and attribute lists */
+
+void ignored_attribute(attribute attr)
+{
+  warning_with_location(attr->location, "`%s' attribute directive ignored",
+                       attr->word1->cstring.data);
+}
+
+void ignored_gcc_attribute(gcc_attribute attr)
+{
+  ignored_attribute(CAST(attribute, attr));
+}
+
+void ignored_nesc_attribute(nesc_attribute attr)
+{
+  ignored_attribute(CAST(attribute, attr));
+}
+
+void ignored_attributes(attribute alist)
+{
+  scan_attribute (alist, alist)
+    ignored_attribute(alist);
+}
+
+void ignored_dd_attributes(dd_list alist)
+{
+  dd_list_pos attr;
+
+  if (alist)
+    dd_scan (attr, alist)
+      ignored_attribute(DD_GET(attribute, attr));
+}
+
+cval gcc_attr_get_constant(gcc_attribute attr)
+{
+  if (!attr->args || attr->args->next || !attr->args->cst)
+    return cval_top;
+  else
+    return attr->args->cst->cval;
+}
+
+const char *gcc_attr_get_word(gcc_attribute attr)
+{
+  if (attr->args && !attr->args->next && is_identifier(attr->args))
+    return CAST(identifier, attr->args)->cstring.data;
+
+  error_with_location(attr->location, "wrong number of arguments specified for `%s' attribute",
+                     attr->word1->cstring.data);
+
+  return NULL;
+}
+
+static size_t max_useful_alignment(void)
+{
+  size_t max_align = 0;
+
+  /* Of current machine. Returns max of long double, long long, int8 and ptr
+  alignment (ok, this is a slight hack, but it seems unlikely that other
+  smaller types will have worse restrictions) */
+#define IMAX(a) if (max_align < a) max_align = a
+  IMAX(target->int8_align);
+  IMAX(target->tptr.align);
+  IMAX(target->tlong_double.align);
+  IMAX(target->tlong_long.align);
+#undef IMAX
+
+  return max_align;
+}
+
+static cval get_alignment(gcc_attribute attr)
+{
+  cval arg;
+
+  if (!attr->args)
+    return make_cval_unsigned(max_useful_alignment(), size_t_type);
+
+  arg = gcc_attr_get_constant(attr);
+  if (cval_isinteger(arg))
+    if (ilog2(cval_uint_value(arg)) != -1)
+      return cval_cast(arg, size_t_type);
+    else
+      error("requested alignment is not a power of 2");
+  else
+    error("requested alignment is not a constant");
+
+  return cval_top;
+}
+
+/* handle_X_attribute(attr, obj):
+   Attempt to apply attribute attr to obj of kind X (decl, field, tag, type),
+   modifying obj.
+
+   For decls, fields, tags:
+     If attr is not applicable: issue a warning with ignored_attributes
+   For types:
+     Return TRUE if applicable, FALSE if not
+   (this difference is due to the funky rules of attributes used as type qualifiers)
+*/
+
+static void transparent_union_argument(data_declaration ddecl)
+{
+  ddecl->type = make_qualified_type
+    (ddecl->type, type_qualifiers(ddecl->type) | transparent_qualifier);
+}
+
+static bool require_function(gcc_attribute attr, data_declaration ddecl)
+{
+  if (ddecl->kind == decl_function && ddecl->ftype == function_normal)
+    return TRUE;
+
+  error_with_location(attr->location, "`%s' attribute is for external functions only", attr->word1->cstring.data);
+  return FALSE;
+}
+
+bool handle_gcc_type_attribute(gcc_attribute attr, type *t)
+{
+  const char *name = attr->word1->cstring.data;
+
+  if (is_attr_name(name, "combine"))
+    {
+      const char *word = gcc_attr_get_word(attr);
+
+      if (word)
+       handle_combine_attribute(attr->location, word, t);
+      return TRUE;
+    }
+  else if (is_attr_name(name, "aligned"))
+    {
+      cval arg = get_alignment(attr);
+
+      if (cval_isinteger(arg))
+       *t = align_type(*t, arg);
+      return TRUE;
+    }
+  else 
+    return target->type_attribute && target->type_attribute(attr, t);
+}
+
+void handle_gcc_decl_attribute(gcc_attribute attr, data_declaration ddecl)
+{
+  const char *name = attr->word1->cstring.data;
+
+  if (is_attr_name(name, "transparent_union"))
+    {
+      if (attr->args)
+       error_with_location(attr->location, "wrong number of arguments specified for `transparent_union' attribute");
+
+      if (ddecl->kind == decl_variable && ddecl->isparameter &&
+         type_union(ddecl->type))
+       transparent_union_argument(ddecl);
+      else if (ddecl->kind == decl_typedef && type_union(ddecl->type))
+       transparent_union_argument(ddecl);
+      else
+       ignored_gcc_attribute(attr);
+    }
+  else if (is_attr_name(name, "aligned"))
+    {
+      cval arg = get_alignment(attr);
+
+      if (cval_isinteger(arg))
+       {
+         if (ddecl->kind == decl_variable || ddecl->kind == decl_typedef)
+           ddecl->type = align_type(ddecl->type, arg);
+         else
+           ignored_gcc_attribute(attr);
+       }
+    }
+  else if (is_attr_name(name, "mode"))
+    {
+      const char *word = gcc_attr_get_word(attr);
+
+      if (word)
+       if (!handle_mode_attribute(attr->location, ddecl, word))
+         ignored_gcc_attribute(attr);
+    }
+  else if (is_attr_name(name, "C"))
+    {
+      if (!ddecl->isexternalscope)
+       error_with_location(attr->location, "`C' attribute is for symbols with external scope only");
+      else
+       ddecl->Cname = TRUE;
+    }
+  else if (is_attr_name(name, "spontaneous"))
+    {
+      if (require_function(attr, ddecl))
+       {
+         /* The test avoids overriding the effect of atomic_hwevent */
+         if (!ddecl->spontaneous)
+           ddecl->spontaneous = c_call_nonatomic;
+       }
+    }
+  else if (is_attr_name(name, "atomic_hwevent"))
+    {
+      if (require_function(attr, ddecl))
+       {
+         ddecl->async = TRUE;
+         ddecl->spontaneous = c_call_atomic;
+       }
+    }
+  else if (is_attr_name(name, "hwevent"))
+    {
+      if (require_function(attr, ddecl))
+       {
+         ddecl->async = TRUE;
+         ddecl->spontaneous = c_call_nonatomic;
+       }
+    }
+  else if (is_attr_name(name, "noinline"))
+    {
+      ddecl->noinlinep = TRUE;
+    }
+  else if (is_attr_name(name, "nx_base_le") || is_attr_name(name, "nx_base_be") || is_attr_name(name, "nx_base"))
+    {
+      const char *word = gcc_attr_get_word(attr);
+
+      if (ddecl->kind != decl_typedef)
+       error_with_location(attr->location, "`%s' attribute can only be applied to typedefs", name);
+      else if (word)
+       handle_nxbase_attribute(attr->location, is_attr_name(name, "nx_base_be"), TRUE, word, ddecl);
+    }
+  else if (!(target->decl_attribute &&
+            target->decl_attribute(attr, ddecl)) &&
+          !handle_gcc_type_attribute(attr, &ddecl->type))
+    /*ignored_gcc_attribute(attr)*/;
+}
+
+/* Note: fdecl->bitwidth is not yet set when this is called */
+void handle_gcc_field_attribute(gcc_attribute attr, field_declaration fdecl)
+{
+  const char *name = attr->word1->cstring.data;
+
+  if (is_attr_name(name, "packed"))
+    fdecl->packed = TRUE;
+  else if (is_attr_name(name, "aligned"))
+    {
+      cval arg = get_alignment(attr);
+
+      if (cval_isinteger(arg))
+       fdecl->type = align_type(fdecl->type, arg);
+    }
+  else if (!(target->field_attribute &&
+            target->field_attribute(attr, fdecl)))
+    /*ignored_gcc_attribute(attr)*/;
+}
+
+void handle_gcc_tag_attribute(gcc_attribute attr, tag_declaration tdecl)
+{
+  const char *name = attr->word1->cstring.data;
+
+  if (is_attr_name(name, "transparent_union"))
+    {
+      if (attr->args)
+       error_with_location(attr->location, "wrong number of arguments specified for `transparent_union' attribute");
+
+      if (tdecl->kind == kind_union_ref)
+       {
+         tdecl->transparent_union = TRUE;
+         /* XXX: Missing validity checks (need cst folding I think) */
+       }
+      else
+       ignored_gcc_attribute(attr);
+    }
+  else if (is_attr_name(name, "packed"))
+    tdecl->packed = TRUE;
+  else if (is_attr_name(name, "aligned"))
+    {
+      cval arg = get_alignment(attr);
+
+      if (cval_isinteger(arg))
+       tdecl->user_alignment = arg;
+    }
+  else if (is_attr_name(name, "C"))
+    {
+      if (tdecl->container_function)
+       error_with_location(attr->location, "`C' attribute is for symbols with external scope only");
+      else
+       tdecl->Cname = TRUE;
+    }
+  else if (!(target->tag_attribute &&
+            target->tag_attribute(attr, tdecl)))
+    /*ignored_gcc_attribute(attr)*/;
+}
+
+void handle_nescdecl_attribute(attribute attr, nesc_declaration ndecl)
+{
+  handle_nesc_nescdecl_attribute(CAST(nesc_attribute, attr), ndecl);
+}
+
+void handle_decl_attribute(attribute attr, data_declaration ddecl)
+{
+  if (is_gcc_attribute(attr))
+    handle_gcc_decl_attribute(CAST(gcc_attribute, attr), ddecl);
+  else
+    handle_nesc_decl_attribute(CAST(nesc_attribute, attr), ddecl);
+}
+
+void handle_field_attribute(attribute attr, field_declaration fdecl)
+{
+  if (is_gcc_attribute(attr))
+    handle_gcc_field_attribute(CAST(gcc_attribute, attr), fdecl);
+  else
+    handle_nesc_field_attribute(CAST(nesc_attribute, attr), fdecl);
+}
+
+void handle_tag_attribute(attribute attr, tag_declaration tdecl)
+{
+  if (is_gcc_attribute(attr))
+    handle_gcc_tag_attribute(CAST(gcc_attribute, attr), tdecl);
+  else
+    handle_nesc_tag_attribute(CAST(nesc_attribute, attr), tdecl);
+}
+
+bool handle_type_attribute(attribute attr, type *t)
+{
+  if (is_gcc_attribute(attr))
+    return handle_gcc_type_attribute(CAST(gcc_attribute, attr), t);
+  else
+    {
+      /* nesC attributes don't have a broken syntax, so don't need
+        to flow up to the declaration */
+      handle_nesc_type_attribute(CAST(nesc_attribute, attr), t);
+      return TRUE;
+    }
+}
+
+/* Functions to handle regular and dd list of attributes */
+
+void handle_nescdecl_attributes(attribute alist, nesc_declaration ndecl)
+{
+  scan_attribute (alist, alist)
+    handle_nescdecl_attribute(alist, ndecl);
+}
+
+void handle_decl_attributes(attribute alist, data_declaration ddecl)
+{
+  scan_attribute (alist, alist)
+    handle_decl_attribute(alist, ddecl);
+}
+
+void handle_field_attributes(attribute alist, field_declaration fdecl)
+{
+  scan_attribute (alist, alist)
+    handle_field_attribute(alist, fdecl);
+}
+
+void handle_tag_attributes(attribute alist, tag_declaration tdecl)
+{
+  scan_attribute (alist, alist)
+    handle_tag_attribute(alist, tdecl);
+}
+
+void handle_nescdecl_dd_attributes(dd_list alist, nesc_declaration ndecl)
+{
+  dd_list_pos attr;
+
+  if (alist)
+    dd_scan (attr, alist)
+      handle_nescdecl_attribute(DD_GET(attribute, attr), ndecl);
+}
+
+void handle_decl_dd_attributes(dd_list alist, data_declaration ddecl)
+{
+  dd_list_pos attr;
+
+  if (alist)
+    dd_scan (attr, alist)
+      handle_decl_attribute(DD_GET(attribute, attr), ddecl);
+}
+
+void handle_field_dd_attributes(dd_list alist, field_declaration fdecl)
+{
+  dd_list_pos attr;
+
+  if (alist)
+    dd_scan (attr, alist)
+      handle_field_attribute(DD_GET(attribute, attr), fdecl);
+}
+
+void handle_tag_dd_attributes(dd_list alist, tag_declaration tdecl)
+{
+  dd_list_pos attr;
+
+  if (alist)
+    dd_scan (attr, alist)
+      handle_tag_attribute(DD_GET(attribute, attr), tdecl);
+}
diff --git a/src/attributes.h b/src/attributes.h
new file mode 100644 (file)
index 0000000..944efc8
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef ATTRIBUTES_H
+#define ATTRIBUTES_H
+
+/* Provide warnings about ignored attributes and attribute lists */
+
+void ignored_attribute(attribute attr);
+void ignored_attributes(attribute alist);
+void ignored_dd_attributes(dd_list alist);
+void ignored_gcc_attribute(gcc_attribute attr);
+void ignored_nesc_attribute(nesc_attribute attr);
+
+/* handle_X_attribute(attr, obj):
+   Attempt to apply attribute attr to obj of kind X (decl, field, tag, type),
+   modifying obj.
+
+   For decls, fields, tags:
+     If attr is not applicable: issue a warning with ignored_attributes
+   For types:
+     Return TRUE if applicable, FALSE if not
+   (this difference is due to the funky rules of attributes used as type qualifiers)
+*/
+
+void handle_nescdecl_attribute(attribute attr, nesc_declaration ndecl);
+void handle_decl_attribute(attribute attr, data_declaration ddecl);
+void handle_field_attribute(attribute attr, field_declaration fdecl);
+void handle_tag_attribute(attribute attr, tag_declaration tdecl);
+bool handle_type_attribute(attribute attr, type *t);
+
+/* Functions to handle regular and dd list of attributes */
+void handle_nescdecl_attributes(attribute alist, nesc_declaration ndecl);
+void handle_decl_attributes(attribute alist, data_declaration ddecl);
+void handle_field_attributes(attribute alist, field_declaration fdecl);
+void handle_tag_attributes(attribute alist, tag_declaration tdecl);
+void handle_nescdecl_dd_attributes(dd_list alist, nesc_declaration ndecl);
+void handle_decl_dd_attributes(dd_list alist, data_declaration ddecl);
+void handle_field_dd_attributes(dd_list alist, field_declaration fdecl);
+void handle_tag_dd_attributes(dd_list alist, tag_declaration tdecl);
+
+#endif
diff --git a/src/autoconf.h.in b/src/autoconf.h.in
new file mode 100644 (file)
index 0000000..e06784d
--- /dev/null
@@ -0,0 +1,108 @@
+/* autoconf.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `fnmatch' function. */
+#undef HAVE_FNMATCH
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* 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 `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `poll' function. */
+#undef HAVE_POLL
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `regcomp' function. */
+#undef HAVE_REGCOMP
+
+/* 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 <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 `strtold' function. */
+#undef HAVE_STRTOLD
+
+/* strtold is declared in <stdlib.h> */
+#undef HAVE_STRTOLD_DECLARED
+
+/* 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
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+       STACK_DIRECTION > 0 => grows toward higher addresses
+       STACK_DIRECTION < 0 => grows toward lower addresses
+       STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
diff --git a/src/build-basics.el b/src/build-basics.el
new file mode 100644 (file)
index 0000000..9ef1c01
--- /dev/null
@@ -0,0 +1,153 @@
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+; Utility functions
+(defun ins (&rest args)
+  (insert (apply #'format args)))
+
+(setq basename (car command-line-args-left))
+(setq nodedefs (cadr command-line-args-left))
+(setq command-line-args-left (cddr command-line-args-left))
+
+(defmacro deffield (field-name c-type attributes)
+  `(deffield* ',field-name ',c-type ',attributes))
+
+(defmacro deftype (type-name super-type fields documentation)
+  `(deftype* ',type-name ',super-type ',fields ',documentation))
+
+(defmacro defnode (node-name type-name documentation)
+  `(defnode* ',node-name ',type-name ',documentation))
+
+
+
+(setq fields nil)
+(setq types nil)
+(setq nodes nil)
+
+(defun deffield* (field-name c-type attributes)
+  (setq attributes (attributes-ok field-name attributes))
+  (if (assoc field-name fields)
+      (message (format "Field %s already defined" field-name))
+    (setq fields (cons (list field-name c-type attributes) fields))))
+
+(defun deftype* (type-name super-type fields documentation)
+    (if (or (assoc type-name types) (assoc type-name nodes))
+      (message (format "Name %s already used for a type or node" type-name))
+    (setq types (cons (list type-name super-type fields documentation) types))))
+
+
+(defun defnode* (node-name type-name documentation)
+    (if (or (assoc node-name types) (assoc node-name nodes))
+      (message (format "Name %s already used for a type or node" node-name))
+    (setq nodes (cons (list node-name type-name documentation) nodes))))
+
+
+(setq legal-attributes '(init tree nodump noprint default dump-special print-special format))
+
+(defun attributes-ok (field-name attrs)
+  (mapcar '(lambda (attr)
+            (let* ((realattr (if (listp attr) attr (list attr)))
+                   (aname (car realattr)))
+              (if (not (member aname legal-attributes))
+                  (message (format "Unknown attribute %s in field %s"
+                                 aname field-name)))
+              realattr)) attrs))
+
+(defun check-defs ()
+  (setq types (reverse types))
+  (setq nodes (reverse nodes))
+  (check-types)
+  (check-nodes))
+
+(defun check-types ()
+  (mapcar #'check-type types))
+
+(defun check-type (type)
+  (mapcar '(lambda (field-name)
+            (if (not (assoc field-name fields))
+                (message (format "Unknown field %s in %s" field-name (car type)))))
+         (type-fields type))
+  (if (and (type-super-type type)
+          (not (assoc (type-super-type type) types)))
+      (message (format "Unknown super-type %s in %s"
+                      (type-super-type type) (type-name type)))))
+
+
+(defun check-nodes ()
+  (mapcar #'check-node nodes))
+
+(defun check-node (node)
+  (if (not (assoc (node-type node) types))
+      (message (format "Unknown type %s in node %s"
+                      (node-type node) (node-name node)))))
+
+(defun build-file (name)
+  (setq name (concat basename "_" name))
+  (let ((buffer (create-file-buffer name))
+       (debug-on-error (or debug-on-error
+                           (interactive-p))))
+    (if debug-on-error
+       (switch-to-buffer buffer)
+      (set-buffer buffer))
+    (fill-buffer)
+    (write-file name)
+    (unless debug-on-error
+      (kill-buffer buffer))))
+
+
+(require 'cl)
+
+(defun nodes-of (typename)
+  (reduce #'(lambda (l x)
+             (if (equal (node-type x) typename)
+                 (cons (node-name x) l)
+               l))
+         nodes :initial-value nil))
+
+(defun all-type-fields (type)
+  (if (type-super-type type)
+      (append (all-type-fields (assoc (type-super-type type) types))
+             (type-fields type))
+    (type-fields type)))
+
+(defun caddr (x) (car (cddr x)))
+(defun cadddr (x) (car (cddr (cdr x))))
+
+(defalias 'type-name #'car)
+(defalias 'type-super-type #'cadr)
+(defalias 'type-fields #'caddr)
+(defalias 'type-documentation #'cadddr)
+
+(defalias 'field-name #'car)
+(defalias 'field-c-type #'cadr)
+(defalias 'field-attributes #'caddr)
+
+(defalias 'node-name #'car)
+(defalias 'node-type #'cadr)
+(defalias 'node-documentation #'caddr)
+
+(defun copyright-notice ()
+  (insert "/* Automatically generated from " nodedefs ", do not edit. */\n\n")
+  (insert "/* See the copyright notice in " nodedefs " */\n"))
+
+;; go ahead and check defs
+(load-file nodedefs)
+(check-defs)
diff --git a/src/build-list.el b/src/build-list.el
new file mode 100644 (file)
index 0000000..f8b22e8
--- /dev/null
@@ -0,0 +1,114 @@
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+(load-file "build-basics.el")
+
+(setq list-base-type (car command-line-args-left))
+
+(setq all-type-names (append (mapcar #'type-name types)
+                            (mapcar #'node-name nodes)))
+(defun fill-buffer ()
+  (copyright-notice)
+  (write-base-function-headers)
+  (mapc #'write-macros all-type-names)
+  (mapc #'write-function-headers all-type-names)
+  )
+
+(defun write-base1 (fname result)
+  (ins "%s %s_%s_%s(%s l)"
+       result basename list-base-type fname
+       list-base-type))
+
+(defun write-base2 (fname result)
+  (ins "%s %s_%s_%s(%s l1, %s l2)"
+       result basename list-base-type fname
+       list-base-type list-base-type))
+
+(defun write-base-function-headers ()
+  (write-base1 "last" list-base-type) (ins ";\n")
+  (write-base2 "chain" list-base-type) (ins ";\n")
+  (write-base1 "length" "int") (ins ";\n")
+  (write-base1 "reverse" list-base-type) (ins ";\n"))
+
+(defun write-macros (name)
+  (ins "#define %s_reverse(x) CAST(%s, %s_%s_reverse(CAST(%s, (x))))\n"
+       name name basename list-base-type list-base-type)
+  (ins "#define %s_length(x) %s_%s_length(CAST(%s, (x)))\n"
+       name basename list-base-type list-base-type)
+  (ins "#define last_%s(x) CAST(%s, %s_%s_last(CAST(%s, (x))))\n"
+       name name basename list-base-type list-base-type)
+  (ins "#define scan_%s(var, list) for (var = (list); var; var = CAST(%s, var->next))\n" name name))
+
+(defun write-function-headers (name)
+  (ins "%s %s_chain(%s l1, %s l2);\n" name name name name))
+
+(build-file (format "list_%s.h" list-base-type))
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (write-base-function-source)
+  (mapc #'write-function-source all-type-names))
+
+(defun write-base-function-source ()
+  (write-base1 "last" list-base-type)
+  (ins "{\n")
+  (ins "  if (!l) return NULL;\n")
+  (ins "  while (l->next) l = l->next;\n")
+  (ins "  return l;\n")
+  (ins "}\n\n")
+  
+  (write-base2 "chain" list-base-type)
+  (ins "{\n")
+  (ins "  if (!l1) return l2;\n")
+  (ins "  %s_%s_last(l1)->next = l2;\n" basename list-base-type)
+  (ins "  return l1;\n")
+  (ins "}\n\n")
+
+  (write-base1 "length" "int")
+  (ins "{\n")
+  (ins "  int len = 0;\n\n")
+  (ins "  while (l) \n")
+  (ins "    {\n")
+  (ins "      l = l->next;\n")
+  (ins "      len++;\n")
+  (ins "    }\n")
+  (ins "  return len;\n")
+  (ins "}\n\n")
+
+  (write-base1 "reverse" list-base-type)
+  (ins "{\n")
+  (ins "  %s last = NULL, next;\n\n" list-base-type)
+  (ins "  for (;;)\n")
+  (ins "    {\n")
+  (ins "      if (!l)\n")
+  (ins "        return last;\n")
+  (ins "      next = l->next;\n")
+  (ins "      l->next = last;\n")
+  (ins "      last = l;\n")
+  (ins "      l = next;\n")
+  (ins "    }\n")
+  (ins "}\n\n"))
+
+(defun write-function-source (name)
+  (ins "%s %s_chain(%s l1, %s l2)\n" name name name name)
+  (ins "{ return CAST(%s, %s_%s_chain(CAST(%s, l1), CAST(%s, l2))); }\n\n" name basename list-base-type list-base-type list-base-type))
+
+(build-file (format "list_%s.c" list-base-type))
diff --git a/src/build-parent.el b/src/build-parent.el
new file mode 100644 (file)
index 0000000..85ec050
--- /dev/null
@@ -0,0 +1,52 @@
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+;; Build a function to set the parent and parent_ptr nodes in a tree
+
+(load-file "build-basics.el")
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapcar #'write-parent-type types))
+
+(defun write-parent-type (type)
+  (let* ((name (type-name type))
+        (synonyms (nodes-of name)))
+    (mapcar #'write-parent-case (cons name synonyms))
+    (let ((tree-fields 
+          (remove-if-not
+           #'(lambda (field)
+               (assoc 'tree (field-attributes (assoc field fields))))
+           (all-type-fields type))))
+      (if tree-fields
+         (progn
+           (insert (format "{\n  %s x = CAST(%s, n);\n\n" name name))
+           (mapcar #'write-parent-field tree-fields)
+           (insert "  break;\n}\n"))
+       (insert "break;\n")))))
+
+(defun write-parent-case (name)
+  (insert (format "case kind_%s: " name)))
+
+(defun write-parent-field (field)
+  (insert (format "  AST_set_parent_list(&x->%s, n);\n" field)))
+
+(build-file "parent.c")
diff --git a/src/build-print.el b/src/build-print.el
new file mode 100644 (file)
index 0000000..48c6138
--- /dev/null
@@ -0,0 +1,53 @@
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+;; Build a function to set the parent and parent_ptr nodes in a tree
+
+(load-file "build-basics.el")
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapc #'(lambda (type) (write-print (type-name type) type)) types)
+  (mapc #'(lambda (node) (write-print (node-name node)
+                                     (assoc (node-type node) types))) nodes))
+
+(defun write-print (name type)
+  (write-print-case name)
+  (let ((tree-fields 
+        (remove-if-not
+         #'(lambda (field)
+             (assoc 'tree (field-attributes (assoc field fields))))
+         (all-type-fields type))))
+    (if tree-fields
+       (progn
+         (insert (format "{\n  %s x = CAST(%s, n);\n\n" name name))
+         (insert (format "  puts(\"%s\");\n" name))
+         (mapcar #'write-print-field tree-fields)
+         (insert "  break;\n}\n"))
+      (insert (format "puts(\"%s\"); break;\n" name)))))
+
+(defun write-print-case (name)
+  (insert (format "case kind_%s: " name)))
+
+(defun write-print-field (field)
+  (insert (format "  pindent(indent); puts(\"%s:\"); AST_print_list(indent + 1, x->%s);\n" field field)))
+
+(build-file "print.c")
diff --git a/src/build-types.el b/src/build-types.el
new file mode 100644 (file)
index 0000000..8bf1ff9
--- /dev/null
@@ -0,0 +1,242 @@
+                                       ; This file is part of the nesC compiler.
+                                       ; 
+                                       ; This file is derived from the RC Compiler. It is thus
+                                       ;    Copyright (C) 2000-2001 The Regents of the University of California.
+                                       ; Changes for nesC are
+                                       ;    Copyright (C) 2002 Intel Corporation
+                                       ; 
+                                       ; The attached "nesC" software is provided to you under the terms and
+                                       ; conditions of the GNU General Public License Version 2 as published by the
+                                       ; Free Software Foundation.
+                                       ; 
+                                       ; nesC is distributed in the hope that it will be useful,
+                                       ; but WITHOUT ANY WARRANTY; without even the implied warranty of
+                                       ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+                                       ; GNU General Public License for more details.
+                                       ; 
+                                       ; You should have received a copy of the GNU General Public License
+                                       ; along with nesC; see the file COPYING.  If not, write to
+                                       ; the Free Software Foundation, 59 Temple Place - Suite 330,
+                                       ; Boston, MA 02111-1307, USA.
+
+(load-file "build-basics.el")
+
+(setq kind_type (concat basename "_kind"))
+
+(setq all-type-names (append (mapcar #'type-name types)
+                            (mapcar #'node-name nodes)))
+(setq parent-types
+      (append
+       (mapcar #'(lambda (type) (cons (type-name type) (type-super-type type)))
+              types)
+       (mapcar #'(lambda (node) (cons (node-name node) (node-type node)))
+              nodes)))
+
+(defun parentof (name)
+  (cdr (assoc name parent-types)))
+
+(setq dfsnumbering nil)
+
+                                       ; This is not winning any complexity prizes
+(defun dfsnumber (name nextid)
+  (let ((myid nextid))
+    (mapc #'(lambda (child)
+             (if (equal (parentof child) name)
+                 (setq nextid (dfsnumber child (1+ nextid)))))
+         all-type-names)
+    (setq dfsnumbering (acons name (cons myid nextid) dfsnumbering))
+    nextid))
+
+(reduce 
+ #'(lambda (nextid type)
+     (if (eq (type-super-type type) '())
+        (1+ (dfsnumber (type-name type) nextid))
+       nextid))
+ types :initial-value (string-to-number (car command-line-args-left)))
+
+(setq dfsnumbering (sort dfsnumbering #'(lambda (entry1 entry2) (< (cadr entry1) (cadr entry2)))))
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapc #'write-typedefs types)
+  (mapc #'write-node-typedefs nodes)
+  (ins "typedef enum {\n")             ;
+  (mapc #'write-kinds all-type-names)
+  (backward-delete-char 2)
+  (ins "\n} %s;\n" kind_type)
+  (ins "\nextern %s %s_parent_kind[]; /* indexed by kind - kind_node */\n"
+       kind_type basename)
+  (ins "\nextern %s %s_post_kind[]; /* indexed by kind - kind_node */\n"
+       kind_type basename)
+  (ins "\nextern size_t %s_sizeof[]; /* indexed by kind - kind_node */\n"
+       basename)
+  (ins "\nextern type_t %s_typeof[]; /* indexed by kind - kind_node */\n"
+       basename)
+  (mapc #'write-is-test all-type-names)
+  (write-cast))
+
+(defun write-typedefs (type)
+  (ins "typedef struct %s_%s *%s;\n"
+       basename (type-name type) (type-name type)))
+
+(defun write-node-typedefs (node)
+  (ins "typedef struct %s_%s *%s;\n"
+       basename (node-type node) (node-name node)))
+
+(defun write-kinds (name)
+  (ins "  kind_%s = %s,\n" name (cadr (assoc name dfsnumbering)))
+  (ins "  postkind_%s = %s,\n" name (cddr (assoc name dfsnumbering))))
+
+                                       ; We should use this one, but I don't feel like changing every is_xxx just now.
+(defun write-is-test2 (name)
+  (ins "#define IS_%s(x) ((x)->kind >= kind_%s && (x)->kind <= postkind_%s)\n"
+       (upcase (format "%s" name)) name name))
+
+(defun write-is-test (name)
+  (ins "#define is_%s(x) ((x)->kind >= kind_%s && (x)->kind <= postkind_%s)\n"
+       name name name))
+
+(defun write-cast ()
+  (ins "typedef struct\n")
+  (ins "{\n")
+  (ins "  AST_kind kind;\n")
+  (ins "} *%s_generic;\n\n" basename)
+  (ins "#ifdef __GNUC__\n")
+  (ins "#define %s_CAST(type, x) ({%s_generic tEmPcast = (%s_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); })\n" basename basename basename)
+  (ins "#define %s_CASTPTR(type, x) ({%s_generic *tEmPcast = (%s_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); })\n" basename basename basename)
+  (ins "#define %s_CASTSRPTR(type, x) ({%s_generic *tEmPcast = (%s_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); })\n" basename basename basename)
+  (ins "#else\n")
+  (ins "/* Could also generate some code to make this safe */\n")
+  (ins "#define %s_CAST(type, x) ((type)(x))\n" basename)
+  (ins "#define %s_CASTPTR(type, x) ((type *)(x))\n" basename)
+  (ins "#define %s_CASTSRPTR(type, x) ((type sameregion *)(x))\n" basename)
+  (ins "#endif\n"))  
+
+(build-file "types.h")
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapc #'write-type types)
+  (ins "\n\n")
+  (mapc #'(lambda (type) (write-creator (type-name type) type)) types)
+  (mapc #'(lambda (node) (write-creator (node-name node) (assoc (node-type node) types))) nodes))
+
+(defun write-type (type)
+  (ins "/* %s */\n" (type-documentation type))
+  (ins "struct %s_%s { /* extends %s */\n"
+       basename (type-name type) (type-super-type type))
+  (write-fields type)
+  (ins "};\n\n"))
+
+(defun write-fields (type)
+  (if (type-super-type type)
+      (write-fields (assoc (type-super-type type) types))
+    (ins "  %s kind;\n" kind_type))
+  (mapc '(lambda (field-name)
+          (let ((field (assoc field-name fields)))
+            (insert "  "
+                    (if (assoc 'format (field-attributes field))
+                        (format (field-c-type field) field-name)
+                      (format "%s %s%s" (field-c-type field)
+                              (if (assoc 'tree (field-attributes field))
+                                  "sameregion " "")
+                              field-name))
+                    ";\n")))
+       (type-fields type)))
+
+(defun write-creator (name type)
+  (write-creator-header name type)
+  (ins ";\n"))
+
+(defun write-creator-header (name type)
+  (ins "%s new_%s(region r" name name)
+  (let ((write-creator-fields
+        #'(lambda (type)
+            (if (type-super-type type)
+                (funcall write-creator-fields
+                         (assoc (type-super-type type) types)))
+            (mapcar #'(lambda (field-name)
+                        (let ((field (assoc field-name fields)))
+                          (if (assoc 'init (field-attributes field))
+                              (ins ", %s %s"
+                                   (field-c-type field)
+                                   field-name))))
+                    (type-fields type)))))
+    (funcall write-creator-fields type))
+  (ins ")"))
+
+(build-file "defs.h")
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapc #'(lambda (type) (write-creator-source (type-name type) type)) types)
+  (mapc #'(lambda (node) (write-creator-source (node-name node) (assoc (node-type node) types))) nodes)
+  (ins "\n\n")
+  (write-parent-kinds)
+  (write-post-kinds)
+  (write-sizes)
+  (write-types))
+
+(defun write-creator-source (name type)
+  (write-creator-header name type)
+  (ins "\n{\n")
+  (ins "  %s obj = ralloc(r, struct %s_%s);\n\n"
+       name basename (type-name type))
+  (ins "  obj->kind = kind_%s;\n" name)
+  (let ((write-creator-fields
+        #'(lambda (type)
+            (if (type-super-type type)
+                (funcall write-creator-fields
+                         (assoc (type-super-type type) types)))
+            (mapcar #'(lambda (field-name)
+                        (let ((field (assoc field-name fields)))
+                          (cond ((assoc 'init (field-attributes field))
+                                 (ins "  obj->%s = %s;\n" field-name field-name))
+                                ((assoc 'default (field-attributes field))
+                                 (ins "  obj->%s = %s;\n"
+                                      field-name
+                                      (cadr (assoc 'default (field-attributes field))))))))
+                    (type-fields type)))))
+    (funcall write-creator-fields type))
+  (ins "\n  return obj;\n}\n\n"))
+
+(defun write-parent-kinds ()
+  (ins "%s %s_parent_kind[] = {\n" kind_type basename)
+  (mapc #'(lambda (dfs_entry)
+           (let ((parent (parentof (car dfs_entry))))
+             (if parent
+                 (ins "  kind_%s,\n" parent)
+               (ins "  0,\n"))))
+       dfsnumbering)
+  (ins "};\n\n"))
+
+(defun write-post-kinds ()
+  (ins "%s %s_post_kind[] = {\n" kind_type basename)
+  (mapc #'(lambda (dfs_entry)
+           (ins "  postkind_%s,\n" (car dfs_entry)))
+       dfsnumbering)
+  (ins "};\n\n"))
+
+(defun struct-name (name)
+  (let ((node-entry (assoc name nodes)))
+    (if node-entry (node-type node-entry)
+      name)))
+
+(defun write-sizes ()
+  (ins "size_t %s_sizeof[] = {\n" basename)
+  (mapc #'(lambda (dfs_entry)
+           (ins "  sizeof(struct %s_%s),\n"
+                basename (struct-name (car dfs_entry))))
+       dfsnumbering)
+  (ins "};\n\n"))
+
+(defun write-types ()
+  (ins "type_t %s_typeof[] = {\n" basename)
+  (mapc #'(lambda (dfs_entry)
+           (ins "  rctypeof(struct %s_%s),\n"
+                basename (struct-name (car dfs_entry))))
+       dfsnumbering)
+  (ins "};\n\n"))
+
+(build-file "types.c")
+
diff --git a/src/build-walk.el b/src/build-walk.el
new file mode 100644 (file)
index 0000000..dca5a89
--- /dev/null
@@ -0,0 +1,51 @@
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+;; Build a function to set the parent and parent_ptr nodes in a tree
+
+(load-file "build-basics.el")
+
+(defun fill-buffer ()
+  (copyright-notice)
+  (mapc #'(lambda (type) (write-walk (type-name type) type)) types)
+  (mapc #'(lambda (node) (write-walk (node-name node)
+                                     (assoc (node-type node) types))) nodes))
+
+(defun write-walk (name type)
+  (let ((tree-fields 
+        (remove-if-not
+         #'(lambda (field)
+             (assoc 'tree (field-attributes (assoc field fields))))
+         (all-type-fields type))))
+    (if tree-fields
+       (progn
+         (write-walk-case name)
+         (insert (format "{\n  %s x = CAST(%s, n);\n\n" name name))
+         (mapcar #'write-walk-field tree-fields)
+         (insert "  break;\n}\n")))))
+
+(defun write-walk-case (name)
+  (insert (format "case kind_%s: " name)))
+
+(defun write-walk-field (field)
+  (insert (format "  AST_walk_list(s, d, (node *)&x->%s);\n" field field)))
+
+(build-file "walk_children.c")
diff --git a/src/c-gperf.h b/src/c-gperf.h
new file mode 100644 (file)
index 0000000..5728730
--- /dev/null
@@ -0,0 +1,258 @@
+/* C code produced by gperf version 3.0.1 */
+/* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k'1,3,8,$'  */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646.  */
+error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#endif
+
+
+/* This file is part of the nesC compiler.
+This file is derived from the RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
+struct resword { char *name; short token; enum rid rid; };
+
+#define TOTAL_KEYWORDS 88
+#define MIN_WORD_LENGTH 2
+#define MAX_WORD_LENGTH 18
+#define MIN_HASH_VALUE 10
+#define MAX_HASH_VALUE 151
+/* maximum key range = 142, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+hash (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  static unsigned char asso_values[] =
+    {
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152,   1, 152,  34,  53,   5,
+       34,   2,  19,  41,   2,  16, 152,  54,  50,  23,
+        2,  31,  66, 152,  25,  14,   1,  61,  50,  22,
+        6,   8,   2, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
+      152, 152, 152, 152, 152, 152
+    };
+  register int hval = len;
+
+  switch (hval)
+    {
+      default:
+        hval += asso_values[(unsigned char)str[7]];
+      /*FALLTHROUGH*/
+      case 7:
+      case 6:
+      case 5:
+      case 4:
+      case 3:
+        hval += asso_values[(unsigned char)str[2]];
+      /*FALLTHROUGH*/
+      case 2:
+      case 1:
+        hval += asso_values[(unsigned char)str[0]];
+        break;
+    }
+  return hval + asso_values[(unsigned char)str[len - 1]];
+}
+
+static struct resword wordlist[] =
+  {
+    {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+    {""},
+    {"event", SCSPEC, RID_EVENT | RID_NESC},
+    {"extern", SCSPEC, RID_EXTERN},
+    {""},
+    {"const", TYPE_QUAL, const_qualifier},
+    {"__const", TYPE_QUAL, const_qualifier},
+    {"nx_union", NX_UNION, NORID},
+    {""},
+    {"__const__", TYPE_QUAL, const_qualifier},
+    {"nx_struct", NX_STRUCT, NORID},
+    {"continue", CONTINUE, NORID},
+    {"__complex__", TYPESPEC, RID_COMPLEX},
+    {"int", TYPESPEC, RID_INT},
+    {"else", ELSE, NORID},
+    {"__complex", TYPESPEC, RID_COMPLEX},
+    {"extends", EXTENDS, RID_NESC},
+    {"case", CASE, NORID},
+    {""},
+    {"__imag__", IMAGPART, NORID},
+    {""},
+    {"__inline", SCSPEC, RID_INLINE},
+    {"__inline__", SCSPEC, RID_INLINE},
+    {"__extension__", EXTENSION, NORID},
+    {"__typeof__", TYPEOF, NORID},
+    {"interface", INTERFACE, NORID},
+    {"return", RETURN, NORID},
+    {"norace", SCSPEC, RID_NORACE},
+    {"__real__", REALPART, NORID},
+    {"if", IF, NORID},
+    {"switch", SWITCH, NORID},
+    {""},
+    {"component", COMPONENT, NORID},
+    {"sizeof", SIZEOF, NORID},
+    {""},
+    {"__asm__", ASM_KEYWORD, NORID},
+    {""},
+    {"while", WHILE, NORID},
+    {"struct", STRUCT, NORID},
+    {"configuration", CONFIGURATION, NORID},
+    {"__typeof", TYPEOF, NORID},
+    {"new", NEW, RID_NESC},
+    {"as", AS, RID_NESC},
+    {"short", TYPESPEC, RID_SHORT},
+    {"async", SCSPEC, RID_ASYNC | RID_NESC},
+    {"__restrict", TYPE_QUAL, restrict_qualifier},
+    {"components", COMPONENTS, RID_NESC},
+    {"generic", GENERIC, NORID},
+    {"float", TYPESPEC, RID_FLOAT},
+    {"includes", INCLUDES, NORID},
+    {"abstract", ABSTRACT, RID_NESC},
+    {"static", SCSPEC, RID_STATIC},
+    {"__signed__", TYPESPEC, RID_SIGNED},
+    {"default", DEFAULT, NORID},
+    {"__label__", LABEL, NORID},
+    {"__asm", ASM_KEYWORD, NORID},
+    {"__imag", IMAGPART, NORID},
+    {"module", MODULE, NORID},
+    {""},
+    {"do", DO, NORID},
+    {"char", TYPESPEC, RID_CHAR},
+    {"command", SCSPEC, RID_COMMAND | RID_NESC},
+    {"auto", SCSPEC, RID_AUTO},
+    {""},
+    {"for", FOR, NORID},
+    {"task", SCSPEC, RID_TASK | RID_NESC},
+    {"inline", SCSPEC, RID_INLINE},
+    {""},
+    {"atomic", ATOMIC, NORID},
+    {"goto", GOTO, NORID},
+    {"__alignof__", ALIGNOF, NORID},
+    {"__volatile", TYPE_QUAL, volatile_qualifier},
+    {"__volatile__", TYPE_QUAL, volatile_qualifier},
+    {"uses", USES, RID_NESC},
+    {"__real", REALPART, NORID},
+    {"asm", ASM_KEYWORD, NORID},
+    {"union", UNION, NORID},
+    {"post", POST, RID_NESC},
+    {""}, {""}, {""}, {""},
+    {"enum", ENUM, NORID},
+    {"__signed", TYPESPEC, RID_SIGNED},
+    {"typeof", TYPEOF, NORID},
+    {"typedef", SCSPEC, RID_TYPEDEF},
+    {"__alignof", ALIGNOF, NORID},
+    {"signed", TYPESPEC, RID_SIGNED},
+    {"offsetof", OFFSETOF, NORID},
+    {"long", TYPESPEC, RID_LONG},
+    {""}, {""},
+    {"implementation", IMPLEMENTATION, RID_NESC},
+    {"__attribute", ATTRIBUTE, NORID},
+    {"__attribute__", ATTRIBUTE, NORID},
+    {"double", TYPESPEC, RID_DOUBLE},
+    {"void", TYPESPEC, RID_VOID},
+    {""}, {""},
+    {"__builtin_offsetof", OFFSETOF, NORID},
+    {""},
+    {"call", CALL, RID_NESC},
+    {""},
+    {"signal", SIGNAL, RID_NESC},
+    {"volatile", TYPE_QUAL, volatile_qualifier},
+    {""},
+    {"break", BREAK, NORID},
+    {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+    {"register", SCSPEC, RID_REGISTER},
+    {""}, {""},
+    {"__builtin_va_arg", VA_ARG, NORID},
+    {""}, {""}, {""}, {""}, {""},
+    {"provides", PROVIDES, RID_NESC},
+    {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+    {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+    {"unsigned", TYPESPEC, RID_UNSIGNED}
+  };
+
+#ifdef __GNUC__
+__inline
+#endif
+struct resword *
+is_reserved_word (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+    {
+      register int key = hash (str, len);
+
+      if (key <= MAX_HASH_VALUE && key >= 0)
+        {
+          register const char *s = wordlist[key].name;
+
+          if (*str == *s && !strcmp (str + 1, s + 1))
+            return &wordlist[key];
+        }
+    }
+  return 0;
+}
diff --git a/src/c-lex-int.h b/src/c-lex-int.h
new file mode 100644 (file)
index 0000000..b2d345a
--- /dev/null
@@ -0,0 +1,31 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef C_LEX_INT_H
+#define C_LEX_INT_H
+
+/* Private parser-lexer interface */
+
+struct yystype;
+int yylex(struct yystype *lvalp);
+
+#endif
diff --git a/src/c-lex-state.h b/src/c-lex-state.h
new file mode 100644 (file)
index 0000000..2ffa8ee
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef C_LEX_STATE_H
+#define C_LEX_STATE_H
+
+#include "c-parse.h"
+
+extern int input_file_stack_tick;
+
+struct file_stack
+{
+  struct file_stack *next;
+  struct location l;
+};
+
+struct cpp_print
+{
+  FILE *outf;                  /* Stream to write to.  */
+  const struct cpp_token *prev;        /* Previous token.  */
+  const struct cpp_token *source;      /* Source token for spacing.  */
+  int src_line;                        /* Line number currently being written.  */
+  unsigned char printed;       /* Nonzero if something output at line.  */
+  bool first_time;             /* pp_file_change hasn't been called yet.  */
+  bool avoid_paste;
+};
+
+struct lex_state
+{
+  struct cpp_reader *finput;
+  struct line_maps *line_map;
+  struct file_stack *input;
+  int token_s1, token_s2;
+  struct yystype token_l1, token_l2;
+  struct cpp_print pp;
+};
+
+
+#endif
diff --git a/src/c-lex.c b/src/c-lex.c
new file mode 100644 (file)
index 0000000..5ed5150
--- /dev/null
@@ -0,0 +1,840 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include <stdio.h>
+#include <setjmp.h>
+
+#include "c-lex.h"
+#include "c-lex-int.h"
+#include "c-parse.h"
+#include "c-parse.tab.h"
+#include "semantics.h"
+#include "constants.h"
+#include "nesc-cpp.h"
+#include "machine.h"
+#include "nesc-paths.h"
+
+#include "gcc-cpp.h"
+
+
+static char_array doc_string;
+static location doc_location;
+
+DECLARE_ARRAY(string_array, cpp_string)
+DEFINE_ARRAY(string_array, cpp_string)
+static string_array string_sequence;
+
+/* Last token read. Used in syntax error reports. */
+static const cpp_token *last_token;
+
+location dummy_location, toplevel_location;
+
+int input_file_stack_tick;
+
+/* Location cache handling */
+static location last_allocated_location;
+
+location make_location(struct location l)
+{
+  if (l.lineno == last_allocated_location->lineno &&
+      l.filename == last_allocated_location->filename &&
+      l.container == last_allocated_location->container &&
+      l.in_system_header == last_allocated_location->in_system_header)
+    return last_allocated_location;
+
+  last_allocated_location = ralloc(parse_region, struct location);
+  *last_allocated_location = l;
+
+  return last_allocated_location;
+}
+
+location new_location(const char *filename, int lineno)
+{
+  location l = ralloc(parse_region, struct location);
+
+  l->filename = filename;
+  l->lineno = lineno;
+  l->in_system_header = FALSE;
+
+  return l;
+}
+
+void set_lex_location(location loc)
+{
+  const struct line_map *new_line;
+
+  new_line = linemap_add(current.lex.line_map, LC_RENAME, 0,
+                        loc->filename, loc->lineno);
+  current.lex.input->l = *loc;
+}
+
+static location last_location(void)
+{
+  return make_location(current.lex.input->l);
+}
+
+\f
+static void push_input(void)
+{
+  /* Pushing to a new file.  */
+  struct file_stack *p = ralloc(current.fileregion, struct file_stack);
+
+  p->next = current.lex.input;
+  p->l.filename = NULL;
+  p->l.lineno = 0;
+  p->l.in_system_header = FALSE;
+  p->l.container = NULL;
+  current.lex.input = p;
+
+  input_file_stack_tick++;
+}
+
+static void pop_input(void)
+{
+  current.lex.input = current.lex.input->next;
+  input_file_stack_tick++;
+}
+
+static void cb_file_change(cpp_reader *reader, const struct line_map *new_map)
+{
+  if (new_map == NULL)
+    return;
+
+  if (new_map->reason == LC_ENTER)
+    {
+      if (!MAIN_FILE_P(new_map))
+       {
+         int included_at = LAST_SOURCE_LINE(new_map - 1);
+         current.lex.input->l.lineno = included_at;
+       }
+      push_input();
+    }
+  else if (new_map->reason == LC_LEAVE)
+    pop_input();
+
+  current.lex.input->l.in_system_header = new_map->sysp != 0;
+  /* The filename must last till the end of compilation */
+  current.lex.input->l.filename = rstrdup(permanent, new_map->to_file);
+  current.lex.input->l.lineno = new_map->to_line;
+}
+
+static void cb_line_change(cpp_reader *reader, const cpp_token *token,
+                          int parsing_args)
+{
+  if (token->type != CPP_EOF && !parsing_args)
+    {
+      source_location loc = token->src_loc;
+      const struct line_map *map = linemap_lookup(current.lex.line_map, loc);
+
+      current.lex.input->l.lineno = SOURCE_LINE(map, loc);
+
+      save_pp_line_change(reader, token);
+    }
+}
+
+/* Do not insert generated code into the source, instead, include it.
+   This allows us to build gcc automatically even for targets that
+   need to add or modify the reserved keyword lists.  */
+#include "c-gperf.h"
+\f
+void init_lex(void)
+{
+  static struct location dummy, toplevel;
+
+  dummy.lineno = 0;
+  dummy.filename = "<dummy>";
+  dummy.in_system_header = FALSE;
+  dummy_location = last_allocated_location = &dummy;
+
+  toplevel.filename = "<commandline>";
+  toplevel.lineno = 0;
+  toplevel.in_system_header = FALSE;
+  toplevel_location = &toplevel;
+
+  string_sequence = new_string_array(parse_region, 16);
+  doc_string = new_char_array(parse_region, 2048);
+}
+
+static cpp_reader *current_reader(void)
+{
+  return current.lex.finput;
+}
+
+static void start_lex_common(source_language l)
+{
+  cpp_options *cpp_opts;
+  cpp_callbacks *cpp_cbacks;
+
+  switch (l)
+    {
+    case l_interface: case l_component:
+      current.lex.token_s1 = DISPATCH_NESC;
+      break;
+    case l_c:
+      current.lex.token_s1 = DISPATCH_C;
+      break;
+    case l_parameter:
+      current.lex.token_s1 = DISPATCH_PARM;
+      break;
+    case l_type:
+      current.lex.token_s1 = DISPATCH_TYPE;
+      break;
+    default:
+      assert(0); 
+      break;
+    }
+  current.lex.token_s2 = -1;
+
+  current.lex.line_map = ralloc(current.fileregion, struct line_maps);
+  linemap_init(current.lex.line_map);
+  current.lex.finput = cpp_create_reader(CLK_GNUC89, NULL, current.lex.line_map);
+  current.lex.pp.outf = NULL;
+  cpp_opts = cpp_get_options(current_reader());
+  cpp_opts->discard_comments = 0;
+  cpp_opts->dollars_in_ident = 0;
+  cpp_opts->warn_long_long = 0;
+  cpp_opts->wchar_precision = CHAR_BIT * target->wchar_t_size;
+  cpp_opts->int_precision = CHAR_BIT * target->tint.size;
+  cpp_opts->precision = CHAR_BIT * target->tlong_long.size;
+  cpp_opts->unsigned_char = !flag_signed_char;
+  cpp_opts->unsigned_wchar = !target->wchar_t_signed;
+  cpp_opts->cplusplus_comments = 1;
+  cpp_opts->bytes_big_endian = target->big_endian;
+
+  cpp_opts->warnings_are_errors = warnings_are_errors;
+  cpp_opts->inhibit_warnings = inhibit_warnings;
+  cpp_opts->trigraphs = flag_trigraphs;
+  cpp_opts->warn_comments = warn_comments;
+  cpp_opts->warn_trigraphs = warn_trigraphs;
+  cpp_opts->warn_unused_macros = warn_unused_macros;
+  cpp_opts->warn_endif_labels = warn_endif_labels || pedantic;
+  cpp_opts->warn_system_headers = warn_system_headers;
+  cpp_opts->warn_undef = warn_undef;
+  cpp_opts->warn_missing_include_dirs = warn_missing_include_dirs;
+  cpp_opts->warn_multichar = warn_multichar;
+  cpp_opts->warn_traditional = warn_traditional;
+  cpp_opts->pedantic_errors = flag_pedantic_errors;
+  cpp_opts->pedantic = pedantic;
+
+  cpp_init_iconv(current_reader());
+  cpp_init_special_builtins(current_reader());
+
+  cpp_cbacks = cpp_get_callbacks(current_reader());
+  cpp_cbacks->file_change = cb_file_change;
+  cpp_cbacks->line_change = cb_line_change;
+
+  set_cpp_include_path();
+}
+
+static void setup_macros(void)
+{
+  cb_file_change(current_reader(),
+                linemap_add(current.lex.line_map, LC_ENTER, 0, "<built-in>", 0));
+
+  start_macro_saving();
+  cb_file_change(current_reader(),
+                linemap_add(current.lex.line_map, LC_LEAVE, 0, NULL, 0));
+}
+
+bool start_lex(source_language l, const char *path)
+{
+  start_lex_common(l);
+  path = cpp_read_main_file(current_reader(), path);
+  setup_macros();
+
+  return path != NULL;
+}
+
+void start_lex_string(source_language l, const char *string)
+{
+  int slen = strlen(string);
+  char *scopy = rstralloc(current.fileregion, slen + 2);
+
+  /* lex input must be \n terminated */
+  memcpy(scopy, string, slen);
+  scopy[slen] = '\n';
+  scopy[slen + 1] = '\0';
+
+  start_lex_common(l);
+  cpp_push_buffer(current_reader(), (const unsigned char *)scopy, slen + 1, TRUE);
+
+  setup_macros();
+}
+
+void end_lex(void)
+{
+  errorcount += cpp_finish(current_reader(), NULL);
+  cpp_destroy(current_reader());
+  current.lex.finput = NULL;
+}
+
+static cstring make_token_cstring(const cpp_token *token)
+{
+  unsigned int len = cpp_token_len(token) + 1;
+  cstring tokcs = alloc_cstring(parse_region, len);
+  unsigned char *end;
+
+  end = cpp_spell_token(current_reader(), token,
+                       (unsigned char *)tokcs.data, FALSE);
+  end[0] = '\0';
+  tokcs.length = (char *)end - tokcs.data;
+
+  return tokcs;
+}
+\f
+static void handle_comment(const cpp_token *token)
+{
+  const cpp_string *comment = &token->val.str;
+  bool new_docstring = FALSE;
+  
+  if (!strncmp((char *)comment->text, "/**", 3))
+    new_docstring = TRUE;
+  else if (!strncmp((char *)comment->text, "///", 3))
+    {
+      if (doc_location && last_location()->filename == doc_location->filename &&
+         last_location()->lineno + 1 == doc_location->lineno)
+       memcpy(char_array_extend(doc_string, comment->len), comment->text,
+              comment->len);
+      else
+       new_docstring = TRUE;
+    }
+
+  if (new_docstring)
+    {
+      if (warn_unexpected_docstring && char_array_length(doc_string))
+       warning_with_location(doc_location, "discarding unexpected docstring");
+
+      char_array_reset(doc_string);
+      memcpy(char_array_extend(doc_string, comment->len), comment->text,
+            comment->len);
+      doc_location = last_location();
+    }
+}
+
+bool get_raw_docstring(const char **docs, location *docl)
+{
+  if (char_array_length(doc_string))
+    {
+      *char_array_extend(doc_string, 1) = '\0';
+      *docs = char_array_data(doc_string);
+      *docl = doc_location;
+      char_array_reset(doc_string);
+
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+\f
+/* Convert a series of STRING and/or WSTRING tokens into a string,
+   performing string constant concatenation.  TOK is the first of
+   these.  VALP is the location to write the string into.  
+
+   This is unfortunately more work than it should be.  If any of the
+   strings in the series has an L prefix, the result is a wide string
+   (6.4.5p4).  Whether or not the result is a wide string affects the
+   meaning of octal and hexadecimal escapes (6.4.4.4p6,9).  But escape
+   sequences do not continue across the boundary between two strings in
+   a series (6.4.5p7), so we must not lose the boundaries.  Therefore
+   cpp_interpret_string takes a vector of cpp_string structures, which
+   we must arrange to provide.  */
+
+static void lex_string(const cpp_token *tok, struct yystype *lvalp)
+{
+  const cpp_token *first = tok;
+  bool wide = FALSE;
+  location first_loc = last_location();
+  cpp_string istr;
+  cstring cstr;
+  string_cst string_components = NULL, *next_sc = &string_components;
+
+  /* Collect all consecutive string tokens */
+  string_array_reset(string_sequence);
+  do
+    {
+      string_cst one_string =
+       new_string_cst(parse_region, last_location(), make_token_cstring(tok));
+
+      *next_sc = one_string;
+      next_sc = CASTPTR(string_cst, &one_string->next);
+
+      *string_array_extend(string_sequence, 1) = tok->val.str;
+
+      if (tok->type == CPP_WSTRING)
+       wide = true;
+
+    retry:
+      if (tok != first)
+       save_pp_token(tok);
+      tok = cpp_get_token(current_reader());
+      if (tok->type == CPP_PADDING)
+       goto retry;
+      if (tok->type == CPP_COMMENT)
+       {
+         handle_comment(tok);
+         goto retry;
+       }
+    }
+  while (tok->type == CPP_STRING || tok->type == CPP_WSTRING);
+
+  /* We have read one more token than we want.  */
+  _cpp_backup_tokens(current_reader(), 1);
+
+  if (cpp_interpret_string(current_reader(),
+                          string_array_data(string_sequence),
+                          string_array_length(string_sequence),
+                          &istr, wide))
+    {
+      cstr = make_cstring(parse_region, (char *)istr.text, istr.len - 1);
+      free((char *)istr.text);
+    }
+  else
+    {
+      /* Use empty string as the value in case of error. Assumes the
+        widest supported wchar_t is 32 bits */
+      cstr = make_cstring(parse_region, "\0\0\0",
+                         wide ? type_size_int(wchar_type) : 1);
+    }
+
+  lvalp->u.string = fold_lexical_string(first_loc, string_components, cstr, wide);
+}
+
+static void lex_charconst(const cpp_token *token, struct yystype *lvalp)
+{
+  cppchar_t result;
+  unsigned int chars_seen;
+  int unsignedp;
+
+  result = cpp_interpret_charconst(current_reader(), token,
+                                  &chars_seen, &unsignedp);
+  lvalp->u.constant = fold_lexical_char(last_location(), make_token_cstring(token),
+                                       token->type == CPP_WCHAR, result);
+}
+
+/* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
+static lexical_cst interpret_integer(const cpp_token *token, unsigned int flags)
+{
+  type t;
+  cpp_num integer;
+  cpp_options *options = cpp_get_options(current_reader());
+
+  integer = cpp_interpret_integer(current_reader(), token, flags);
+  integer = cpp_num_sign_extend(integer, options->precision);
+
+  if (flags & CPP_N_UNSIGNED ||
+      /* what earlier nesC versions did, not correct as per C89/C99:
+        In both C89 and C99, octal and hex constants may be signed or
+        unsigned, whichever fits tighter.  */
+      (flags & CPP_N_RADIX) != CPP_N_DECIMAL) 
+    if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
+      t = unsigned_int_type;
+    else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
+      t = unsigned_long_type;
+    else
+      t = unsigned_long_long_type;
+  else
+    if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
+      t = int_type;
+    else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
+      t = long_type;
+    else
+      t = long_long_type;
+
+  /* We're assuming that the our largest int type is the same as cpp's
+     HOST_WIDE_INT, and then ignoring the high field as we only handle
+     values that fit in largest_uint anyway */
+  assert(sizeof(HOST_WIDE_INT) == sizeof(largest_uint));
+  return fold_lexical_int(t, last_location(), make_token_cstring(token),
+                         (flags & CPP_N_IMAGINARY) != 0,
+                         integer.low,
+                         integer.overflow);
+}
+
+/* Interpret TOKEN, a floating point number with FLAGS as classified
+   by cpplib.  This is a very hacky, partial implementation. */
+static lexical_cst interpret_float(const cpp_token *token, unsigned int flags)
+{
+  type t;
+
+  /* Give up on _Fract and _Accum.  */
+  if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
+    return NULL;
+  /* Give up on decimal and machine dependent values */
+  if (flags & CPP_N_DFLOAT || flags & CPP_N_WIDTH_MD)
+    return NULL;
+
+  /* Decode type based on width and properties. */
+  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
+    t = long_double_type;
+  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL/* || flag_single_precision_constant*/)
+    t = float_type;
+  else
+    t = double_type;
+
+  if (flags & CPP_N_IMAGINARY)
+    t = make_complex_type(t);
+
+  return fold_lexical_real(t, last_location(), make_token_cstring(token));
+}
+
+static bool is_nesc_keyword(struct resword *word)
+{
+  return word->token != TYPE_QUAL && (word->rid & RID_NESC);
+}
+
+static int interpret_name(const cpp_token *token, struct yystype *lvalp)
+{
+  ht_identifier *id = HT_NODE(token->val.node);
+  struct resword *ptr;
+  data_declaration decl;
+  int kind = IDENTIFIER;
+
+  /* Try to recognize a keyword.  Uses minimum-perfect hash function */
+  if ((ptr = is_reserved_word(id->str, id->len)) &&
+      !(is_nesc_keyword(ptr) && current.language == l_c))
+    {
+      if (ptr->token == TYPE_QUAL)
+       lvalp->u.itoken.i = ptr->rid;
+      else
+       lvalp->u.itoken.i = ptr->rid & ~RID_NESC;
+
+      /* Even if we decided to recognize asm, still perhaps warn.  */
+      if (pedantic &&
+         (ptr->token == ASM_KEYWORD || ptr->token == TYPEOF ||
+          ptr->rid == RID_INLINE) &&
+         id->str[0] != '_')
+       pedwarn ("ANSI does not permit the keyword `%s'", id->str);
+
+      return ptr->token;
+    }
+
+  /* If we did not find a keyword, look for a typename  */
+  if (target->token)
+    kind = target->token((char *)id->str, id->len, lvalp);
+
+  if (kind == IDENTIFIER)
+    {
+      lvalp->idtoken.location = last_location();
+      lvalp->idtoken.id = make_token_cstring(token);
+      decl = lookup_id(lvalp->idtoken.id.data, FALSE);
+      lvalp->idtoken.decl = decl;
+
+      if (decl)
+       switch (decl->kind)
+         {
+         case decl_typedef: kind = TYPENAME; break;
+         case decl_magic_string: kind = MAGIC_STRING; break;
+         case decl_component_ref: kind = COMPONENTREF; break;
+         default: break;
+         }
+    }
+  return kind;
+}
+
+static int lex_token(struct yystype *lvalp)
+{
+  const cpp_token *tok;
+  enum cpp_ttype type;
+
+ retry:
+  last_token = tok = cpp_get_token(current_reader());
+  save_pp_token(tok);
+  type = tok->type;
+  lvalp->u.itoken.location = last_location();
+  lvalp->u.itoken.i = 0;
+
+  switch (type)
+    {
+    case CPP_EOF:
+      return -1;
+
+    case CPP_PADDING:
+      goto retry;
+
+    case CPP_COMMENT:
+      handle_comment(tok);
+      goto retry;
+
+    case CPP_NAME:
+      return interpret_name(tok, lvalp);
+
+    case CPP_NUMBER:
+      {
+       unsigned int flags = cpp_classify_number(current_reader(), tok);
+       lexical_cst num = NULL;
+
+       switch (flags & CPP_N_CATEGORY)
+         {
+         case CPP_N_INTEGER:
+           num = interpret_integer(tok, flags);
+           break;
+         case CPP_N_FLOATING:
+           num = interpret_float (tok, flags);
+           break;
+         }
+       /* cpplib has issued an error or we ran into something we don't
+          support (e.g. fixed point), pretend the constant was 0  */
+       if (num == NULL)
+           num = fold_lexical_int(int_type, last_location(),
+                                  make_token_cstring(tok),
+                                  FALSE, 0, FALSE);
+
+       lvalp->u.constant = num;
+       return CONSTANT;
+      }
+
+    case CPP_HASH:
+    case CPP_PASTE:
+    case CPP_SCOPE:
+    case CPP_DEREF_STAR:
+    case CPP_DOT_STAR:
+      {
+       unsigned char name[4];
+
+       *cpp_spell_token(current_reader(), tok, name, true) = 0;
+
+       error("stray %qs in program", name);
+      }
+      goto retry;
+
+    case CPP_OTHER:
+      {
+       cppchar_t c = tok->val.str.text[0];
+
+       if (c == '"' || c == '\'')
+         error("missing terminating %c character", (int) c);
+       else if (ISGRAPH (c))
+         error("stray %qc in program", (int) c);
+       else
+         error("stray %<\\%o%> in program", (int) c);
+      }
+      goto retry;
+
+    case CPP_CHAR:
+    case CPP_WCHAR:
+      lex_charconst(tok, lvalp);
+      return CONSTANT;
+
+    case CPP_STRING:
+    case CPP_WSTRING:
+      lex_string(tok, lvalp);
+      return STRING;
+      
+    case CPP_PRAGMA:
+      goto retry;
+
+      /* Translate to the parser's symbols - somewhat of a legacy effect,
+        but having the characters does make the parser more readable... */
+    case CPP_EQ: return '=';
+    case CPP_NOT: return '!';
+    case CPP_GREATER: return '>';
+    case CPP_LESS: return '<';
+    case CPP_PLUS: return '+';
+    case CPP_MINUS: return '-';
+    case CPP_MULT: return '*';
+    case CPP_DIV: return '/';
+    case CPP_MOD: return '%';
+    case CPP_AND: return '&';
+    case CPP_OR: return '|';
+    case CPP_XOR: return '^';
+    case CPP_RSHIFT: return RSHIFT;
+    case CPP_LSHIFT: return LSHIFT;
+    case CPP_COMPL: return '~';
+    case CPP_AND_AND: return ANDAND;
+    case CPP_OR_OR: return OROR;
+    case CPP_QUERY: return '?';
+    case CPP_COLON: return ':';
+    case CPP_COMMA: return ',';
+    case CPP_OPEN_PAREN: return '(';
+    case CPP_CLOSE_PAREN: return ')';
+    case CPP_EQ_EQ: lvalp->u.itoken.i = kind_eq; return EQCOMPARE;
+    case CPP_NOT_EQ: lvalp->u.itoken.i = kind_ne; return EQCOMPARE;
+    case CPP_GREATER_EQ: lvalp->u.itoken.i = kind_geq; return ARITHCOMPARE;
+    case CPP_LESS_EQ: lvalp->u.itoken.i = kind_leq; return ARITHCOMPARE;
+    case CPP_PLUS_EQ: lvalp->u.itoken.i = kind_plus_assign; return ASSIGN;
+    case CPP_MINUS_EQ: lvalp->u.itoken.i = kind_minus_assign; return ASSIGN;
+    case CPP_MULT_EQ: lvalp->u.itoken.i = kind_times_assign; return ASSIGN;
+    case CPP_DIV_EQ: lvalp->u.itoken.i = kind_divide_assign; return ASSIGN;
+    case CPP_MOD_EQ: lvalp->u.itoken.i = kind_modulo_assign; return ASSIGN;
+    case CPP_AND_EQ: lvalp->u.itoken.i = kind_bitand_assign; return ASSIGN;
+    case CPP_OR_EQ: lvalp->u.itoken.i = kind_bitor_assign; return ASSIGN;
+    case CPP_XOR_EQ: lvalp->u.itoken.i = kind_bitxor_assign; return ASSIGN;
+    case CPP_RSHIFT_EQ: lvalp->u.itoken.i = kind_rshift_assign; return ASSIGN;
+    case CPP_LSHIFT_EQ: lvalp->u.itoken.i = kind_lshift_assign; return ASSIGN;
+    case CPP_OPEN_SQUARE: return '[';
+    case CPP_CLOSE_SQUARE: return ']';
+    case CPP_OPEN_BRACE: return '{';
+    case CPP_CLOSE_BRACE: return '}';
+    case CPP_SEMICOLON: return ';';
+    case CPP_ELLIPSIS: return ELLIPSIS;
+    case CPP_PLUS_PLUS: return PLUSPLUS;
+    case CPP_MINUS_MINUS: return MINUSMINUS;
+    case CPP_DEREF: return POINTSAT;
+    case CPP_FERED: return TASTNIOP;
+    case CPP_DOT: return '.';
+    case CPP_ATSIGN: return '@';
+
+      /* These tokens should not be visible outside cpplib.  */
+    case CPP_HEADER_NAME:
+    case CPP_MACRO_ARG:
+    default:
+      assert(0);
+    }
+}
+
+/* We keep a 2-element queue of pre-read tokens to deal with the 
+   lookahead of checking for typedef references in components,
+   stored in token_s1/l1, token_s2/l2.
+   - gettoken returns the next token from the queue, or reads the
+   next token if the queue is empty.
+   - pushtoken pushes a token onto the queue
+   - yylex does the special component.typedef processing. 
+
+   This code could be optimised to use token_[sl][12] directly in
+   yylex, but then it would be even more confusing.
+
+   It would be nicer to just use _cpp_backup_tokens, but the comments
+   about pushing back more than one token when a macro is involed,
+   and the corresponding abort in the implementation are too worrying...
+*/
+
+static int poptoken(struct yystype *lvalp)
+{
+  /* Check the queue first */
+  if (current.lex.token_s1 != -1)
+    {
+      int token = current.lex.token_s1;
+      *lvalp = current.lex.token_l1;
+
+      current.lex.token_s1 = current.lex.token_s2;
+      current.lex.token_l1 = current.lex.token_l2;
+      current.lex.token_s2 = -1;
+
+      return token;
+    }
+  else
+    return lex_token(lvalp);
+}
+
+static void pushtoken(int t, struct yystype *lvalp)
+{
+  /* Save token on our 2-element queue */
+  if (current.lex.token_s1 == -1)
+    {
+      current.lex.token_s1 = t;
+      current.lex.token_l1 = *lvalp;
+    }
+  else
+    {
+      current.lex.token_s2 = t;
+      current.lex.token_l2 = *lvalp;
+    }
+}
+
+int
+yylex(struct yystype *lvalp)
+{
+  int token = poptoken(lvalp);
+
+  /* Detect component-ref '.' identifier, where the
+     identifier denotes a typedef in the referenced component --
+     we can't do this in the parser as the resulting grammer is not
+     context-free. So instead we detect it here, and mark the 
+     component-ref as special. */
+  if (token == COMPONENTREF)
+    {
+      struct yystype val1;
+      int token1 = poptoken(&val1);
+
+      token = IDENTIFIER; /* default to regular identifier */
+      if (token1 == '.')
+       {
+         struct yystype val2;
+         int token2 = poptoken(&val2);
+
+         if (token2 == IDENTIFIER || token2 == TYPENAME ||
+             token2 == MAGIC_STRING)
+           {
+             data_declaration cref = lvalp->idtoken.decl;
+             data_declaration fdecl = env_lookup(cref->ctype->env->id_env, val2.idtoken.id.data, TRUE);
+
+             if (fdecl && fdecl->kind == decl_typedef)
+               {
+                 /* The special typedef reference case. Fix the tokens */
+                 token = COMPONENTREF;
+                 token2 = IDENTIFIER;
+                 val2.idtoken.decl = fdecl;
+               }
+           }
+         pushtoken(token1, &val1);
+         pushtoken(token2, &val2);
+       }
+      else
+       pushtoken(token1, &val1);
+    }
+
+  return token;
+}
+
+void yyerror(char *string)
+{
+  char buf[200];
+  enum cpp_ttype ttype;
+  unsigned char *ttext;
+
+  if (!last_token)
+    {
+      error(string);
+      return;
+    }
+
+  ttype = last_token->type;
+  if (ttype != CPP_EOF)
+    ttext = cpp_token_as_text(current_reader(), last_token);
+
+  strcpy (buf, string);
+
+  if ((ttype = last_token->type) == CPP_EOF)
+    strcat(buf, " at end of input");
+  else if (ttype == CPP_STRING || ttype == CPP_WSTRING)
+    strcat(buf, " before string constant");
+  else if (ttype == CPP_CHAR || ttype == CPP_WCHAR)
+    strcat(buf, " before character constant");
+  else if (ttext[0] < 040 || ttext[0] >= 0177)
+    sprintf(buf + strlen (buf), " before character 0%o", ttext[0]);
+  else
+    strcat (buf, " before `%s'");
+
+  error(buf, ttext);
+}
+
+/* Function used when yydebug is set, to print a token in more detail.  */
+void yyprint (FILE *file, int yychar, YYSTYPE yylval)
+{
+  switch (yychar)
+    {
+    case IDENTIFIER:
+      fprintf(file, " '%s'", yylval.idtoken.id.data);
+      break;
+    }
+}
diff --git a/src/c-lex.h b/src/c-lex.h
new file mode 100644 (file)
index 0000000..df97e97
--- /dev/null
@@ -0,0 +1,96 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef C_LEX_H
+#define C_LEX_H
+
+typedef enum { l_c, l_interface, l_component, l_implementation,
+              l_parameter, l_type, l_any } source_language;
+
+typedef struct location
+{ 
+  const char *filename;
+  struct nesc_declaration *container; /* for instantiated code only */
+  unsigned long lineno;
+  bool in_system_header;
+} *location;
+
+extern location dummy_location, toplevel_location;
+
+location new_location(const char *filename, int lineno);
+location make_location(struct location l);
+void set_lex_location(location l);
+
+enum rid
+{
+  RID_UNUSED,
+
+  RID_INT,
+  RID_CHAR,
+  RID_FLOAT,
+  RID_DOUBLE,
+  RID_VOID,
+
+  RID_UNSIGNED,
+  RID_SHORT,
+  RID_LONG,
+  RID_SIGNED,
+  RID_COMPLEX,
+  RID_LASTTYPE,
+
+  RID_INLINE = RID_LASTTYPE,
+  RID_DEFAULT,
+  RID_NORACE,
+
+  RID_AUTO,
+  RID_STATIC,
+  RID_EXTERN,
+  RID_REGISTER,
+  RID_TYPEDEF,
+  RID_COMMAND,
+  RID_EVENT,
+  RID_TASK,
+  RID_ASYNC,
+
+  RID_MAX,
+
+  RID_NESC = 256
+};
+
+#define NORID RID_UNUSED
+
+void init_lex(void);
+bool start_lex(source_language l, const char *path);
+void start_lex_string(source_language l, const char *string);
+void end_lex(void);
+int lex_getc(void);
+void lex_ungetc(int c);
+void skip_c_comment(void);
+void skip_cpp_comment(void);
+
+/**
+ * Retrieve the latest code documentation string.  This is used to
+ * place the documentation into the appropriate data_declaration.
+ **/
+bool get_raw_docstring(const char **docs, location *docl);
+
+#endif
diff --git a/src/c-parse.gperf b/src/c-parse.gperf
new file mode 100644 (file)
index 0000000..8a8a69f
--- /dev/null
@@ -0,0 +1,95 @@
+%{
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
+%}
+struct resword { char *name; short token; enum rid rid; };
+%%
+__alignof, ALIGNOF, NORID
+__alignof__, ALIGNOF, NORID
+__asm, ASM_KEYWORD, NORID
+__asm__, ASM_KEYWORD, NORID
+__attribute, ATTRIBUTE, NORID
+__attribute__, ATTRIBUTE, NORID
+__complex, TYPESPEC, RID_COMPLEX
+__complex__, TYPESPEC, RID_COMPLEX
+__const, TYPE_QUAL, const_qualifier
+__const__, TYPE_QUAL, const_qualifier
+__extension__, EXTENSION, NORID
+__imag, IMAGPART, NORID
+__imag__, IMAGPART, NORID
+__inline, SCSPEC, RID_INLINE
+__inline__, SCSPEC, RID_INLINE
+__label__, LABEL, NORID
+__real, REALPART, NORID
+__real__, REALPART, NORID
+__signed, TYPESPEC, RID_SIGNED
+__signed__, TYPESPEC, RID_SIGNED
+__typeof, TYPEOF, NORID
+__typeof__, TYPEOF, NORID
+__volatile, TYPE_QUAL, volatile_qualifier
+__volatile__, TYPE_QUAL, volatile_qualifier
+__builtin_va_arg, VA_ARG, NORID
+asm, ASM_KEYWORD, NORID
+auto, SCSPEC, RID_AUTO
+break, BREAK, NORID
+case, CASE, NORID
+char, TYPESPEC, RID_CHAR
+continue, CONTINUE, NORID
+default, DEFAULT, NORID
+do, DO, NORID
+double, TYPESPEC, RID_DOUBLE
+else, ELSE, NORID
+enum, ENUM, NORID
+extern, SCSPEC, RID_EXTERN
+float, TYPESPEC, RID_FLOAT
+for, FOR, NORID
+goto, GOTO, NORID
+if, IF, NORID
+inline, SCSPEC, RID_INLINE
+int, TYPESPEC, RID_INT
+long, TYPESPEC, RID_LONG
+offsetof, OFFSETOF, NORID
+__builtin_offsetof, OFFSETOF, NORID
+register, SCSPEC, RID_REGISTER
+return, RETURN, NORID
+short, TYPESPEC, RID_SHORT
+signed, TYPESPEC, RID_SIGNED
+sizeof, SIZEOF, NORID
+static, SCSPEC, RID_STATIC
+struct, STRUCT, NORID
+switch, SWITCH, NORID
+typedef, SCSPEC, RID_TYPEDEF
+typeof, TYPEOF, NORID
+union, UNION, NORID
+unsigned, TYPESPEC, RID_UNSIGNED
+void, TYPESPEC, RID_VOID
+while, WHILE, NORID
+nx_union, NX_UNION, NORID
+nx_struct, NX_STRUCT, NORID
+
+define(K, `$1, $2, $3')
+include(nesc-keywords.h)
+
+define(Q, `$1, $2, $3')
+include(qualifiers.h)
diff --git a/src/c-parse.h b/src/c-parse.h
new file mode 100644 (file)
index 0000000..68dbfd7
--- /dev/null
@@ -0,0 +1,107 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef C_PARSE_H
+#define C_PARSE_H
+
+#include "AST.h"
+
+struct yystype {
+  union {
+    void *ptr;
+    asm_operand asm_operand;
+    asm_stmt asm_stmt;
+    attribute attribute;
+    gcc_attribute gcc_attribute;
+    nesc_attribute nesc_attribute;
+    lexical_cst constant;
+    declaration decl;
+    declarator declarator;
+    nested_declarator nested;
+    expression expr;
+    id_label id_label;
+    label label;
+    node node;
+    statement stmt;
+    conditional_stmt cstmt;
+    for_stmt for_stmt;
+    string string;
+    type_element telement;
+    asttype type;
+    word word;
+    designator designator;
+    interface_ref iref;
+    component_ref cref;
+    connection conn;
+    endpoint ep;
+    parameterised_identifier pid;
+    implementation impl;
+    environment env;
+    dd_list fields;
+    char *docstring;
+    tag_declaration tdecl;
+    
+    struct {
+      location location;
+      int i;
+    } itoken;
+
+    struct {
+      expression expr;
+      int i;
+    } iexpr;
+
+    struct {
+      statement stmt;
+      int i;
+    } istmt;
+  } u;
+
+  struct {
+    location location;
+    cstring id;
+    data_declaration decl;
+  } idtoken;
+
+  bool abstract;
+};
+
+#define YYSTYPE struct yystype
+
+/* Region in which to allocate parse structures. Idea: the AST user can set
+   this to different regions at appropriate junctures depending on what's
+   being done with the AST */
+extern region parse_region;
+
+/* TRUE if currently parsing an expression that will not be evaluated (argument
+   to alignof, sizeof. Currently not typeof though that could be considered
+   a bug) */
+bool unevaluated_expression(void);
+
+node parse(void) deletes;
+/* Effects: parses the file set up via set_input/start_lex
+   Returns: the file's parse tree (may be NULL in some error cases)
+*/
+
+declaration make_error_decl(void);
+declarator make_identifier_declarator(location l, cstring id);
+
+#endif
diff --git a/src/c-parse.tab.c b/src/c-parse.tab.c
new file mode 100644 (file)
index 0000000..5475b3d
--- /dev/null
@@ -0,0 +1,6634 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     IDENTIFIER = 258,
+     TYPENAME = 259,
+     COMPONENTREF = 260,
+     SCSPEC = 261,
+     TYPESPEC = 262,
+     TYPE_QUAL = 263,
+     FN_QUAL = 264,
+     CONSTANT = 265,
+     STRING = 266,
+     MAGIC_STRING = 267,
+     ELLIPSIS = 268,
+     SIZEOF = 269,
+     ENUM = 270,
+     STRUCT = 271,
+     UNION = 272,
+     IF = 273,
+     ELSE = 274,
+     WHILE = 275,
+     DO = 276,
+     FOR = 277,
+     SWITCH = 278,
+     CASE = 279,
+     DEFAULT = 280,
+     BREAK = 281,
+     CONTINUE = 282,
+     RETURN = 283,
+     GOTO = 284,
+     ASM_KEYWORD = 285,
+     TYPEOF = 286,
+     ALIGNOF = 287,
+     ATTRIBUTE = 288,
+     EXTENSION = 289,
+     LABEL = 290,
+     REALPART = 291,
+     IMAGPART = 292,
+     VA_ARG = 293,
+     OFFSETOF = 294,
+     ASSIGN = 295,
+     OROR = 296,
+     ANDAND = 297,
+     EQCOMPARE = 298,
+     ARITHCOMPARE = 299,
+     RSHIFT = 300,
+     LSHIFT = 301,
+     MINUSMINUS = 302,
+     PLUSPLUS = 303,
+     POINTSAT = 304,
+     DISPATCH_C = 305,
+     DISPATCH_NESC = 306,
+     DISPATCH_PARM = 307,
+     DISPATCH_TYPE = 308,
+     ATOMIC = 309,
+     USES = 310,
+     INTERFACE = 311,
+     COMPONENTS = 312,
+     PROVIDES = 313,
+     MODULE = 314,
+     INCLUDES = 315,
+     CONFIGURATION = 316,
+     AS = 317,
+     TASTNIOP = 318,
+     IMPLEMENTATION = 319,
+     CALL = 320,
+     SIGNAL = 321,
+     POST = 322,
+     GENERIC = 323,
+     NEW = 324,
+     NX_STRUCT = 325,
+     NX_UNION = 326,
+     ABSTRACT = 327,
+     COMPONENT = 328,
+     EXTENDS = 329,
+     TARGET_ATTRIBUTE0 = 330,
+     TARGET_ATTRIBUTE1 = 331,
+     TARGET_DEF = 332
+   };
+#endif
+/* Tokens.  */
+#define IDENTIFIER 258
+#define TYPENAME 259
+#define COMPONENTREF 260
+#define SCSPEC 261
+#define TYPESPEC 262
+#define TYPE_QUAL 263
+#define FN_QUAL 264
+#define CONSTANT 265
+#define STRING 266
+#define MAGIC_STRING 267
+#define ELLIPSIS 268
+#define SIZEOF 269
+#define ENUM 270
+#define STRUCT 271
+#define UNION 272
+#define IF 273
+#define ELSE 274
+#define WHILE 275
+#define DO 276
+#define FOR 277
+#define SWITCH 278
+#define CASE 279
+#define DEFAULT 280
+#define BREAK 281
+#define CONTINUE 282
+#define RETURN 283
+#define GOTO 284
+#define ASM_KEYWORD 285
+#define TYPEOF 286
+#define ALIGNOF 287
+#define ATTRIBUTE 288
+#define EXTENSION 289
+#define LABEL 290
+#define REALPART 291
+#define IMAGPART 292
+#define VA_ARG 293
+#define OFFSETOF 294
+#define ASSIGN 295
+#define OROR 296
+#define ANDAND 297
+#define EQCOMPARE 298
+#define ARITHCOMPARE 299
+#define RSHIFT 300
+#define LSHIFT 301
+#define MINUSMINUS 302
+#define PLUSPLUS 303
+#define POINTSAT 304
+#define DISPATCH_C 305
+#define DISPATCH_NESC 306
+#define DISPATCH_PARM 307
+#define DISPATCH_TYPE 308
+#define ATOMIC 309
+#define USES 310
+#define INTERFACE 311
+#define COMPONENTS 312
+#define PROVIDES 313
+#define MODULE 314
+#define INCLUDES 315
+#define CONFIGURATION 316
+#define AS 317
+#define TASTNIOP 318
+#define IMPLEMENTATION 319
+#define CALL 320
+#define SIGNAL 321
+#define POST 322
+#define GENERIC 323
+#define NEW 324
+#define NX_STRUCT 325
+#define NX_UNION 326
+#define ABSTRACT 327
+#define COMPONENT 328
+#define EXTENDS 329
+#define TARGET_ATTRIBUTE0 330
+#define TARGET_ATTRIBUTE1 331
+#define TARGET_DEF 332
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 33 "c-parse.y"
+
+#include <stdio.h>
+#include <errno.h>
+#include <setjmp.h>
+
+#include "parser.h"
+#include "c-parse.h"
+#include "c-lex.h"
+#include "c-lex-int.h"
+#include "semantics.h"
+#include "expr.h"
+#include "stmt.h"
+#include "init.h"
+#include "nesc-semantics.h"
+#include "nesc-interface.h"
+#include "nesc-component.h"
+#include "nesc-configuration.h"
+#include "nesc-module.h"
+#include "nesc-env.h"
+#include "nesc-c.h"
+#include "nesc-attributes.h"
+#include "nesc-task.h"
+#include "nesc-cpp.h"
+#include "attributes.h"
+#include "machine.h"
+
+int yyparse(void) deletes;
+
+void yyerror();
+
+/* Like YYERROR but do call yyerror.  */
+#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
+
+/* Cause the `yydebug' variable to be defined.  */
+#define YYDEBUG 1
+#line 248 "c-parse.y"
+
+/* Region in which to allocate parse structures. Idea: the AST user can set
+   this to different regions at appropriate junctures depending on what's
+   being done with the AST */
+region parse_region;
+/* We'll see this a LOT below */
+#define pr parse_region
+
+/* Number of statements (loosely speaking) and compound statements 
+   seen so far.  */
+static int stmt_count;
+static int compstmt_count;
+  
+#ifdef RC_ADJUST
+static size_t rc_adjust_yystype(void *x, int by) 
+{
+  struct yystype *p = x;
+  RC_ADJUST_PREAMBLE;
+
+  RC_ADJUST(p->u.ptr, by);
+  RC_ADJUST(p->idtoken.location.filename, by);
+  RC_ADJUST(p->idtoken.id.data, by);
+  RC_ADJUST(p->idtoken.decl, by);
+
+  return sizeof *p;
+}
+
+static void rc_update_yystype(struct yystype *old, struct yystype *new)
+{
+  regionid base = regionidof(old);
+
+  RC_UPDATE(base, old->u.ptr, new->u.ptr);
+  RC_UPDATE(base, old->idtoken.location.filename, new->idtoken.location.filename);
+  RC_UPDATE(base, old->idtoken.id.data, new->idtoken.id.data);
+  RC_UPDATE(base, old->idtoken.decl, new->idtoken.decl);
+}
+#endif
+
+/* A stack of declspecs and attributes for use during parsing */
+typedef struct spec_stack *spec_stack;
+struct spec_stack { 
+  type_element parentptr declspecs;
+  attribute parentptr attributes;
+  spec_stack sameregion next;
+};
+
+struct parse_state 
+{
+  /* Stack of saved values of current_declspecs and prefix_attributes.  */
+  /* In an ideal world, we would be able to eliminate most rc ops for
+     declspec_stack and ds_region assignments. Seems tricky though. */
+  spec_stack declspec_stack;
+  region ds_region;
+
+  /* List of types and structure classes of the current declaration.  */
+  type_element declspecs;
+  attribute attributes;
+
+  /* >0 if currently parsing an expression that will not be evaluated (argument
+     to alignof, sizeof. Currently not typeof though that could be considered
+     a bug) */
+  int unevaluated_expression;
+} pstate;
+
+bool unevaluated_expression(void)
+{
+  return pstate.unevaluated_expression != 0;
+}
+
+/* Pop top entry of declspec_stack back into current_declspecs,
+   prefix_attributes */
+static void pop_declspec_stack(void) deletes
+{
+  pstate.declspecs = pstate.declspec_stack->declspecs;
+  pstate.attributes = pstate.declspec_stack->attributes;
+  pstate.declspec_stack = pstate.declspec_stack->next;
+}
+
+static void push_declspec_stack(void)
+{
+  spec_stack news;
+
+  news = ralloc(pstate.ds_region, struct spec_stack);
+  news->declspecs = pstate.declspecs;
+  news->attributes = pstate.attributes;
+  news->next = pstate.declspec_stack;
+  pstate.declspec_stack = news;
+}
+
+static node parse_tree;
+
+node parse(void) deletes
+{
+  int result, old_errorcount = errorcount;
+  struct parse_state old_pstate = pstate;
+
+  pstate.declspecs = NULL;
+  pstate.attributes = NULL;
+  pstate.unevaluated_expression = 0;
+  pstate.declspec_stack = NULL;
+  pstate.ds_region = newsubregion(parse_region);
+  parse_tree = NULL;
+  result = yyparse();
+  if (result)
+    parse_tree = NULL;
+  deleteregion_ptr(&pstate.ds_region);
+
+  if (result != 0 && errorcount == old_errorcount)
+    fprintf(stderr, "Errors detected in input file (your bison.simple is out of date)");
+
+  pstate = old_pstate;
+
+  return parse_tree;
+}
+
+static void set_nesc_ast(void *tree)
+{
+  nesc_declaration cdecl = current.container;
+  nesc_decl nd = CAST(nesc_decl, tree);
+
+  nd->cdecl = cdecl;
+  cdecl->ast = nd;
+}
+
+static void set_nesc_parse_tree(void *tree)
+{
+  set_nesc_ast(tree);
+  parse_tree = CAST(node, tree);
+}
+
+static void set_nesc_impl(implementation impl)
+{
+  nesc_declaration cdecl = current.container;
+
+  CAST(component, cdecl->ast)->implementation = impl;
+  parse_tree = CAST(node, cdecl->ast);
+}
+
+void refuse_asm(asm_stmt s)
+{
+  if (s)
+    error_with_location(s->location, "unexpected asm statement");
+}
+
+/* Merge the attributes in front of a declaration (but which aren't part
+   of the declspecs) with the attributes after the declaration.
+   We're pretending they all came after */
+attribute prefix_attr(attribute post_attr)
+{
+  return attribute_chain(pstate.attributes, post_attr);
+}
+
+/* Simple build functions */
+declaration make_data_decl(type_element modifiers, declaration decls)
+{
+  location l = modifiers ? modifiers->location : decls->location;
+
+  data_decl dd = new_data_decl(parse_region, l, modifiers, decls);
+
+  pop_declspec_stack();
+
+  if (decls == NULL && current.spec_section != spec_normal)
+    error("provides/uses must be followed by a command, event or interface");
+
+  return CAST(declaration, dd);
+}
+
+declaration make_error_decl(void)
+{
+  return new_error_decl(pr, dummy_location);
+}
+
+declaration make_extension_decl(int old_pedantic, location l, declaration d)
+{ 
+  pedantic = old_pedantic; 
+  return CAST(declaration, new_extension_decl(pr, l, d));
+}
+
+word make_cword(location l, const char *s)
+{
+  return new_word(pr, l, str2cstring(pr, s));
+}
+
+declarator make_qualified_declarator(location l, declarator d, type_element quals)
+{
+  if (quals)
+    return CAST(declarator, new_qualified_declarator(pr, l, d, quals));
+  else
+    return d;
+}
+
+declarator make_pointer_declarator(location l, declarator d, type_element quals)
+{
+  d = make_qualified_declarator(l, d, quals);
+
+  return CAST(declarator, new_pointer_declarator(pr, l, d));
+}
+
+declarator make_identifier_declarator(location l, cstring id)
+{
+  return CAST(declarator, new_identifier_declarator(pr, l, id));
+}
+
+statement make_error_stmt(void)
+{
+  return new_error_stmt(pr, dummy_location);
+}
+
+/* Tell yyparse how to print a token's value, if yydebug is set.  */
+
+#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
+void yyprint();
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 510 "c-parse.tab.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  78
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   4209
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  103
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  262
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  633
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  1038
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   332
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    67,     2,     2,     2,    59,    48,     2,
+      63,   101,    57,    55,    98,    56,    62,    58,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    43,    69,
+      50,    40,    51,    42,   102,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    64,     2,   100,    47,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    68,    46,    99,    66,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    41,    44,    45,    49,    52,
+      53,    54,    60,    61,    65,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     6,     9,    12,    14,    17,    20,    23,
+      26,    27,    30,    32,    35,    36,    40,    42,    46,    47,
+      48,    59,    60,    64,    66,    70,    73,    75,    78,    80,
+      81,    85,    88,    91,    94,    97,   100,   101,   102,   114,
+     115,   116,   117,   130,   131,   132,   141,   143,   144,   145,
+     149,   150,   152,   154,   158,   163,   168,   173,   176,   178,
+     181,   182,   184,   186,   187,   190,   191,   195,   196,   200,
+     202,   206,   209,   211,   213,   217,   222,   224,   228,   231,
+     232,   239,   241,   245,   246,   252,   256,   260,   262,   264,
+     268,   270,   276,   277,   279,   281,   285,   287,   289,   291,
+     294,   295,   297,   299,   301,   306,   311,   316,   320,   322,
+     324,   329,   330,   336,   337,   340,   341,   345,   347,   349,
+     355,   358,   362,   364,   369,   374,   378,   381,   384,   386,
+     388,   394,   399,   404,   408,   409,   410,   417,   419,   421,
+     423,   425,   427,   429,   431,   433,   435,   437,   439,   441,
+     443,   445,   446,   448,   450,   452,   456,   458,   460,   462,
+     464,   467,   470,   473,   476,   479,   482,   487,   490,   495,
+     497,   499,   501,   506,   507,   515,   517,   521,   525,   529,
+     533,   537,   541,   545,   549,   553,   557,   561,   565,   569,
+     573,   577,   581,   587,   588,   594,   598,   602,   604,   606,
+     608,   612,   616,   617,   622,   624,   631,   638,   643,   647,
+     651,   654,   657,   659,   663,   668,   670,   672,   673,   675,
+     678,   680,   683,   688,   693,   697,   700,   702,   704,   707,
+     710,   711,   713,   718,   723,   727,   731,   735,   738,   740,
+     743,   746,   749,   752,   755,   757,   760,   762,   765,   768,
+     771,   774,   777,   780,   782,   785,   788,   791,   794,   797,
+     800,   803,   806,   809,   812,   815,   818,   821,   824,   827,
+     830,   832,   835,   838,   841,   844,   847,   850,   853,   856,
+     859,   862,   865,   868,   871,   874,   877,   880,   883,   886,
+     889,   892,   895,   898,   901,   904,   907,   910,   913,   916,
+     919,   922,   925,   928,   931,   934,   937,   940,   943,   946,
+     949,   952,   955,   958,   961,   964,   966,   968,   970,   972,
+     974,   976,   978,   980,   982,   984,   986,   988,   990,   992,
+     994,   996,   998,  1000,  1002,  1004,  1006,  1008,  1010,  1012,
+    1014,  1016,  1018,  1020,  1022,  1024,  1026,  1028,  1030,  1032,
+    1034,  1036,  1037,  1039,  1041,  1043,  1045,  1047,  1049,  1051,
+    1053,  1057,  1062,  1067,  1069,  1071,  1073,  1078,  1080,  1085,
+    1086,  1091,  1092,  1099,  1103,  1104,  1111,  1115,  1116,  1118,
+    1120,  1121,  1124,  1126,  1129,  1136,  1138,  1140,  1142,  1145,
+    1148,  1150,  1152,  1156,  1158,  1162,  1163,  1165,  1170,  1177,
+    1182,  1188,  1193,  1195,  1197,  1199,  1201,  1203,  1205,  1207,
+    1208,  1213,  1215,  1216,  1219,  1221,  1225,  1229,  1232,  1233,
+    1238,  1240,  1241,  1246,  1248,  1250,  1252,  1255,  1258,  1264,
+    1268,  1269,  1270,  1278,  1279,  1280,  1288,  1290,  1292,  1295,
+    1299,  1304,  1306,  1310,  1313,  1317,  1319,  1322,  1326,  1331,
+    1333,  1337,  1339,  1343,  1347,  1348,  1357,  1358,  1368,  1374,
+    1375,  1385,  1386,  1394,  1396,  1398,  1400,  1402,  1403,  1405,
+    1406,  1408,  1410,  1413,  1414,  1418,  1421,  1425,  1428,  1432,
+    1435,  1437,  1440,  1442,  1447,  1449,  1454,  1457,  1462,  1466,
+    1469,  1474,  1478,  1480,  1484,  1486,  1488,  1492,  1493,  1497,
+    1498,  1500,  1502,  1504,  1506,  1510,  1513,  1517,  1522,  1525,
+    1527,  1529,  1531,  1533,  1535,  1540,  1544,  1548,  1552,  1555,
+    1557,  1559,  1562,  1565,  1566,  1568,  1571,  1572,  1573,  1575,
+    1577,  1580,  1584,  1586,  1589,  1591,  1595,  1602,  1608,  1614,
+    1617,  1620,  1625,  1626,  1631,  1633,  1636,  1638,  1640,  1641,
+    1645,  1647,  1649,  1651,  1654,  1655,  1660,  1662,  1666,  1667,
+    1668,  1676,  1682,  1685,  1686,  1687,  1688,  1701,  1702,  1709,
+    1712,  1715,  1718,  1722,  1729,  1738,  1749,  1762,  1766,  1771,
+    1773,  1775,  1779,  1785,  1788,  1791,  1792,  1794,  1795,  1797,
+    1798,  1800,  1802,  1806,  1811,  1819,  1821,  1825,  1826,  1829,
+    1832,  1833,  1838,  1841,  1842,  1844,  1846,  1850,  1852,  1856,
+    1861,  1866,  1870,  1875,  1880,  1884,  1889,  1890,  1891,  1894,
+    1896,  1899,  1901,  1905,  1907,  1909,  1913,  1914,  1916,  1918,
+    1920,  1922,  1924,  1926
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     104,     0,    -1,    71,   110,    -1,    71,   121,    -1,    70,
+     169,    -1,    70,    -1,    72,   351,    -1,    72,     1,    -1,
+      73,   298,    -1,    73,     1,    -1,    -1,   106,   107,    -1,
+     169,    -1,   107,   108,    -1,    -1,    80,   109,    69,    -1,
+     180,    -1,   109,    98,   180,    -1,    -1,    -1,   105,    76,
+     182,   111,   113,   249,   112,    68,   117,    99,    -1,    -1,
+      50,   114,    51,    -1,   115,    -1,   114,    98,   115,    -1,
+     116,   249,    -1,     3,    -1,   117,   174,    -1,   174,    -1,
+      -1,    64,   119,   120,    -1,   350,   100,    -1,     1,   100,
+      -1,   105,   122,    -1,   105,   125,    -1,   105,   129,    -1,
+      -1,    -1,   132,    79,   182,   123,   133,   249,   124,    68,
+     137,    99,   167,    -1,    -1,    -1,    -1,   132,    81,   182,
+     126,   133,   249,   127,    68,   137,    99,   128,   152,    -1,
+      -1,    -1,    93,   182,   130,   249,   131,    68,   137,    99,
+      -1,    88,    -1,    -1,    -1,    63,   134,   101,    -1,    -1,
+     135,    -1,   136,    -1,   135,    98,   136,    -1,   224,   352,
+     276,   247,    -1,   224,   352,   278,   247,    -1,   225,   352,
+     278,   247,    -1,   224,   352,    -1,   138,    -1,   138,   139,
+      -1,    -1,   141,    -1,   143,    -1,    -1,   140,   174,    -1,
+      -1,    75,   142,   145,    -1,    -1,    78,   144,   145,    -1,
+     147,    -1,    68,   146,    99,    -1,   146,   147,    -1,   147,
+      -1,   174,    -1,   148,   249,    69,    -1,   148,   118,   249,
+      69,    -1,   149,    -1,   149,    82,   182,    -1,    76,   182,
+      -1,    -1,    76,   182,   150,    50,   151,    51,    -1,   161,
+      -1,   151,    98,   161,    -1,    -1,    84,   153,    68,   162,
+      99,    -1,    77,   155,    69,    -1,   155,    98,   156,    -1,
+     156,    -1,   157,    -1,   157,    82,   182,    -1,   182,    -1,
+      89,   182,    63,   158,   101,    -1,    -1,   159,    -1,   160,
+      -1,   159,    98,   160,    -1,   194,    -1,   161,    -1,   298,
+      -1,   162,   163,    -1,    -1,   164,    -1,   174,    -1,   154,
+      -1,   165,    40,   165,    69,    -1,   165,    65,   165,    69,
+      -1,   165,    83,   165,    69,    -1,   165,    62,   166,    -1,
+     166,    -1,   182,    -1,   182,    64,   186,   100,    -1,    -1,
+      84,   168,    68,   169,    99,    -1,    -1,   170,   172,    -1,
+      -1,   169,   171,   172,    -1,   176,    -1,   173,    -1,    30,
+      63,   184,   101,    69,    -1,   360,   172,    -1,   205,   239,
+      69,    -1,   174,    -1,   225,   205,   239,    69,    -1,   224,
+     205,   238,    69,    -1,   231,   205,    69,    -1,     1,    69,
+      -1,     1,    99,    -1,    69,    -1,   175,    -1,    97,   180,
+      40,   184,    69,    -1,   224,   205,   275,   177,    -1,   225,
+     205,   278,   177,    -1,   205,   278,   177,    -1,    -1,    -1,
+     242,   247,   178,   201,   179,   318,    -1,     3,    -1,     4,
+      -1,   180,    -1,   180,    -1,    48,    -1,    56,    -1,    55,
+      -1,    61,    -1,    60,    -1,    66,    -1,    67,    -1,    36,
+      -1,    37,    -1,   186,    -1,    -1,   186,    -1,   187,    -1,
+     194,    -1,   187,    98,   194,    -1,    85,    -1,    86,    -1,
+      87,    -1,   196,    -1,   188,   199,    -1,    57,   192,    -1,
+     360,   192,    -1,   183,   192,    -1,    45,   181,    -1,   190,
+     189,    -1,   190,    63,   298,   101,    -1,   191,   189,    -1,
+     191,    63,   298,   101,    -1,    14,    -1,    32,    -1,   189,
+      -1,    63,   298,   101,   192,    -1,    -1,    63,   298,   101,
+      68,   193,   261,    99,    -1,   192,    -1,   194,    55,   194,
+      -1,   194,    56,   194,    -1,   194,    57,   194,    -1,   194,
+      58,   194,    -1,   194,    59,   194,    -1,   194,    54,   194,
+      -1,   194,    53,   194,    -1,   194,    52,   194,    -1,   194,
+      50,   194,    -1,   194,    51,   194,    -1,   194,    49,   194,
+      -1,   194,    48,   194,    -1,   194,    46,   194,    -1,   194,
+      47,   194,    -1,   194,    45,   194,    -1,   194,    44,   194,
+      -1,   194,    42,   184,    43,   194,    -1,    -1,   194,    42,
+     195,    43,   194,    -1,   194,    40,   194,    -1,   194,    41,
+     194,    -1,     3,    -1,    10,    -1,   200,    -1,    63,   184,
+     101,    -1,    63,     1,   101,    -1,    -1,    63,   197,   320,
+     101,    -1,   199,    -1,    38,    63,   194,    98,   298,   101,
+      -1,    39,    63,   298,    98,   198,   101,    -1,   196,    64,
+     186,   100,    -1,   196,    62,   180,    -1,   196,    65,   180,
+      -1,   196,    61,    -1,   196,    60,    -1,   180,    -1,   198,
+      62,   180,    -1,   196,    63,   185,   101,    -1,    11,    -1,
+      12,    -1,    -1,   202,    -1,   202,    13,    -1,   203,    -1,
+     202,   203,    -1,   226,   205,   238,    69,    -1,   227,   205,
+     239,    69,    -1,   226,   205,    69,    -1,   227,    69,    -1,
+     207,    -1,   313,    -1,   204,   207,    -1,   207,   313,    -1,
+      -1,   247,    -1,   224,   205,   238,    69,    -1,   225,   205,
+     239,    69,    -1,   224,   205,   269,    -1,   225,   205,   272,
+      -1,   231,   205,    69,    -1,   360,   207,    -1,   362,    -1,
+     208,   362,    -1,   209,   362,    -1,   208,   248,    -1,   210,
+     362,    -1,   211,   362,    -1,   248,    -1,   210,   248,    -1,
+     233,    -1,   212,   362,    -1,   213,   362,    -1,   212,   235,
+      -1,   213,   235,    -1,   208,   233,    -1,   209,   233,    -1,
+     234,    -1,   212,   248,    -1,   212,   236,    -1,   213,   236,
+      -1,   208,   234,    -1,   209,   234,    -1,   214,   362,    -1,
+     215,   362,    -1,   214,   235,    -1,   215,   235,    -1,   210,
+     233,    -1,   211,   233,    -1,   214,   248,    -1,   214,   236,
+      -1,   215,   236,    -1,   210,   234,    -1,   211,   234,    -1,
+     361,    -1,   216,   362,    -1,   217,   362,    -1,   208,   361,
+      -1,   209,   361,    -1,   216,   361,    -1,   217,   361,    -1,
+     216,   248,    -1,   218,   362,    -1,   219,   362,    -1,   210,
+     361,    -1,   211,   361,    -1,   218,   361,    -1,   219,   361,
+      -1,   218,   248,    -1,   220,   362,    -1,   221,   362,    -1,
+     220,   235,    -1,   221,   235,    -1,   216,   233,    -1,   217,
+     233,    -1,   212,   361,    -1,   213,   361,    -1,   220,   361,
+      -1,   221,   361,    -1,   220,   248,    -1,   220,   236,    -1,
+     221,   236,    -1,   216,   234,    -1,   217,   234,    -1,   222,
+     362,    -1,   223,   362,    -1,   222,   235,    -1,   223,   235,
+      -1,   218,   233,    -1,   219,   233,    -1,   214,   361,    -1,
+     215,   361,    -1,   222,   361,    -1,   223,   361,    -1,   222,
+     248,    -1,   222,   236,    -1,   223,   236,    -1,   218,   234,
+      -1,   219,   234,    -1,   212,    -1,   213,    -1,   214,    -1,
+     215,    -1,   220,    -1,   221,    -1,   222,    -1,   223,    -1,
+     208,    -1,   209,    -1,   210,    -1,   211,    -1,   216,    -1,
+     217,    -1,   218,    -1,   219,    -1,   212,    -1,   213,    -1,
+     220,    -1,   221,    -1,   208,    -1,   209,    -1,   216,    -1,
+     217,    -1,   212,    -1,   213,    -1,   214,    -1,   215,    -1,
+     208,    -1,   209,    -1,   210,    -1,   211,    -1,   228,    -1,
+     229,    -1,   224,    -1,   225,    -1,    -1,   229,    -1,   235,
+      -1,   237,    -1,   236,    -1,   364,    -1,   280,    -1,   281,
+      -1,     4,    -1,     5,    62,   180,    -1,    31,    63,   184,
+     101,    -1,    31,    63,   298,   101,    -1,   240,    -1,   241,
+      -1,   243,    -1,   240,    98,   206,   243,    -1,   245,    -1,
+     241,    98,   206,   243,    -1,    -1,    30,    63,    11,   101,
+      -1,    -1,   275,   242,   247,    40,   244,   259,    -1,   275,
+     242,   247,    -1,    -1,   278,   242,   247,    40,   246,   259,
+      -1,   278,   242,   247,    -1,    -1,   250,    -1,   250,    -1,
+      -1,   249,   256,    -1,   251,    -1,   250,   251,    -1,    33,
+      63,    63,   254,   101,   101,    -1,   252,    -1,   256,    -1,
+      95,    -1,    96,   253,    -1,   102,   253,    -1,    10,    -1,
+     200,    -1,    63,   184,   101,    -1,   255,    -1,   254,    98,
+     255,    -1,    -1,   258,    -1,   258,    63,     3,   101,    -1,
+     258,    63,     3,    98,   186,   101,    -1,   258,    63,   185,
+     101,    -1,   102,   257,    63,   261,   101,    -1,   102,   257,
+       1,   101,    -1,   182,    -1,   182,    -1,   361,    -1,   364,
+      -1,   362,    -1,    86,    -1,   194,    -1,    -1,    68,   260,
+     261,    99,    -1,     1,    -1,    -1,   262,   287,    -1,   263,
+      -1,   262,    98,   263,    -1,   267,    40,   265,    -1,   268,
+     265,    -1,    -1,   180,    43,   264,   265,    -1,   265,    -1,
+      -1,    68,   266,   261,    99,    -1,   194,    -1,     1,    -1,
+     268,    -1,   267,   268,    -1,    62,   180,    -1,    64,   194,
+      13,   194,   100,    -1,    64,   194,   100,    -1,    -1,    -1,
+     275,   242,   247,   270,   201,   271,   320,    -1,    -1,    -1,
+     278,   242,   247,   273,   201,   274,   320,    -1,   276,    -1,
+     278,    -1,   276,   305,    -1,    57,   232,   276,    -1,    63,
+     247,   276,   101,    -1,     4,    -1,     4,    62,   180,    -1,
+     277,   305,    -1,    57,   232,   277,    -1,     4,    -1,   278,
+     305,    -1,    57,   232,   278,    -1,    63,   247,   278,   101,
+      -1,     3,    -1,     3,    62,   180,    -1,   180,    -1,   286,
+     279,   249,    -1,    15,   279,   249,    -1,    -1,   286,   279,
+     249,    68,   282,   289,    99,   247,    -1,    -1,    16,   102,
+     279,   249,    68,   283,   289,    99,   247,    -1,   286,    68,
+     289,    99,   247,    -1,    -1,    15,   279,   249,    68,   284,
+     296,   288,    99,   247,    -1,    -1,    15,    68,   285,   296,
+     288,    99,   247,    -1,    16,    -1,    17,    -1,    90,    -1,
+      91,    -1,    -1,    98,    -1,    -1,    98,    -1,   290,    -1,
+     290,   291,    -1,    -1,   290,   291,    69,    -1,   290,    69,
+      -1,   228,   205,   292,    -1,   228,   205,    -1,   229,   205,
+     293,    -1,   229,   205,    -1,     1,    -1,   360,   291,    -1,
+     294,    -1,   292,    98,   206,   294,    -1,   295,    -1,   293,
+      98,   206,   295,    -1,   275,   247,    -1,   275,    43,   194,
+     247,    -1,    43,   194,   247,    -1,   278,   247,    -1,   278,
+      43,   194,   247,    -1,    43,   194,   247,    -1,   297,    -1,
+     296,    98,   297,    -1,     1,    -1,   180,    -1,   180,    40,
+     194,    -1,    -1,   230,   299,   300,    -1,    -1,   301,    -1,
+     303,    -1,   302,    -1,   304,    -1,    57,   232,   302,    -1,
+      57,   232,    -1,    57,   232,   303,    -1,    63,   247,   301,
+     101,    -1,   304,   306,    -1,   306,    -1,   307,    -1,   309,
+      -1,   308,    -1,   309,    -1,   118,    63,   355,   359,    -1,
+      63,   353,   359,    -1,    63,   345,   359,    -1,    64,   184,
+     100,    -1,    64,   100,    -1,   311,    -1,   326,    -1,   311,
+     326,    -1,   311,   313,    -1,    -1,   310,    -1,     1,    69,
+      -1,    -1,    -1,   316,    -1,   317,    -1,   316,   317,    -1,
+      35,   358,    69,    -1,   320,    -1,     1,   320,    -1,    68,
+      -1,   319,   314,    99,    -1,   319,   314,   315,   204,   312,
+      99,    -1,   319,   314,   315,     1,    99,    -1,   319,   314,
+     315,   310,    99,    -1,   322,   325,    -1,   322,     1,    -1,
+      18,    63,   184,   101,    -1,    -1,    21,   324,   325,    20,
+      -1,   330,    -1,   338,   325,    -1,   330,    -1,   338,    -1,
+      -1,    74,   328,   329,    -1,   330,    -1,     1,    -1,   320,
+      -1,   184,    69,    -1,    -1,   321,    19,   331,   325,    -1,
+     321,    -1,   321,    19,     1,    -1,    -1,    -1,    20,   332,
+      63,   184,   101,   333,   325,    -1,   323,    63,   184,   101,
+      69,    -1,   323,     1,    -1,    -1,    -1,    -1,    22,    63,
+     340,    69,   334,   340,    69,   335,   340,   101,   336,   325,
+      -1,    -1,    23,    63,   184,   101,   337,   325,    -1,    26,
+      69,    -1,    27,    69,    -1,    28,    69,    -1,    28,   184,
+      69,    -1,    30,   339,    63,   184,   101,    69,    -1,    30,
+     339,    63,   184,    43,   341,   101,    69,    -1,    30,   339,
+      63,   184,    43,   341,    43,   341,   101,    69,    -1,    30,
+     339,    63,   184,    43,   341,    43,   341,    43,   344,   101,
+      69,    -1,    29,   181,    69,    -1,    29,    57,   184,    69,
+      -1,   327,    -1,    69,    -1,    24,   194,    43,    -1,    24,
+     194,    13,   194,    43,    -1,    25,    43,    -1,   181,    43,
+      -1,    -1,   362,    -1,    -1,   184,    -1,    -1,   342,    -1,
+     343,    -1,   342,    98,   343,    -1,    11,    63,   184,   101,
+      -1,    64,   182,   100,    11,    63,   184,   101,    -1,    11,
+      -1,   344,    98,    11,    -1,    -1,   346,   347,    -1,   349,
+     101,    -1,    -1,   350,    69,   348,   347,    -1,     1,   101,
+      -1,    -1,    13,    -1,   350,    -1,   350,    98,    13,    -1,
+     351,    -1,   350,    98,   351,    -1,   224,   352,   277,   247,
+      -1,   224,   352,   278,   247,    -1,   224,   352,   300,    -1,
+     224,   352,   302,   250,    -1,   225,   352,   278,   247,    -1,
+     225,   352,   300,    -1,   225,   352,   302,   250,    -1,    -1,
+      -1,   354,   355,    -1,   347,    -1,   356,   101,    -1,   357,
+      -1,   356,    98,   357,    -1,     3,    -1,   181,    -1,   358,
+      98,   181,    -1,    -1,   363,    -1,    34,    -1,     6,    -1,
+      25,    -1,     8,    -1,     9,    -1,     7,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   465,   465,   466,   467,   470,   471,   472,   473,   474,
+     478,   478,   479,   487,   488,   492,   496,   498,   505,   509,
+     503,   524,   525,   543,   544,   549,   554,   558,   559,   562,
+     562,   566,   571,   575,   576,   577,   582,   587,   581,   601,
+     607,   611,   600,   622,   626,   621,   637,   638,   643,   651,
+     670,   671,   675,   676,   685,   687,   689,   691,   696,   701,
+     703,   707,   708,   709,   709,   713,   713,   718,   718,   723,
+     724,   728,   730,   734,   735,   740,   750,   751,   755,   761,
+     760,   769,   770,   774,   774,   782,   786,   787,   791,   792,
+     796,   798,   804,   805,   809,   810,   814,   816,   820,   824,
+     825,   829,   830,   831,   835,   837,   839,   844,   848,   853,
+     855,   859,   859,   869,   869,   870,   870,   875,   876,   877,
+     882,   887,   894,   898,   900,   902,   905,   906,   907,   911,
+     915,   920,   921,   922,   926,   937,   925,   944,   945,   949,
+     953,   956,   958,   960,   962,   964,   966,   968,   970,   972,
+     976,   985,   986,   990,   995,   997,  1002,  1003,  1004,  1008,
+    1009,  1041,  1044,  1047,  1054,  1059,  1069,  1072,  1075,  1081,
+    1085,  1089,  1090,  1093,  1092,  1111,  1112,  1114,  1116,  1118,
+    1120,  1122,  1124,  1126,  1128,  1130,  1132,  1134,  1136,  1138,
+    1140,  1142,  1144,  1147,  1146,  1152,  1154,  1159,  1165,  1166,
+    1167,  1169,  1172,  1171,  1186,  1204,  1206,  1208,  1210,  1212,
+    1215,  1217,  1222,  1223,  1227,  1231,  1232,  1236,  1237,  1238,
+    1250,  1251,  1259,  1261,  1263,  1267,  1277,  1278,  1279,  1280,
+    1288,  1299,  1304,  1306,  1308,  1311,  1314,  1317,  1373,  1374,
+    1376,  1381,  1386,  1388,  1393,  1394,  1398,  1399,  1401,  1403,
+    1405,  1407,  1409,  1414,  1415,  1417,  1419,  1421,  1423,  1428,
+    1430,  1432,  1434,  1436,  1438,  1443,  1445,  1447,  1449,  1451,
+    1456,  1457,  1459,  1461,  1463,  1465,  1467,  1472,  1477,  1479,
+    1481,  1483,  1485,  1487,  1492,  1497,  1499,  1501,  1503,  1505,
+    1507,  1509,  1511,  1513,  1515,  1520,  1522,  1524,  1526,  1528,
+    1533,  1535,  1537,  1539,  1541,  1543,  1545,  1547,  1549,  1551,
+    1556,  1558,  1560,  1562,  1564,  1570,  1571,  1572,  1573,  1574,
+    1575,  1576,  1577,  1581,  1582,  1583,  1584,  1585,  1586,  1587,
+    1588,  1592,  1593,  1594,  1595,  1599,  1600,  1601,  1602,  1606,
+    1607,  1608,  1609,  1613,  1614,  1615,  1616,  1620,  1621,  1625,
+    1626,  1632,  1633,  1658,  1659,  1663,  1667,  1668,  1672,  1676,
+    1680,  1685,  1687,  1693,  1697,  1701,  1702,  1707,  1708,  1714,
+    1715,  1722,  1721,  1729,  1737,  1736,  1744,  1752,  1753,  1758,
+    1762,  1763,  1768,  1770,  1775,  1777,  1778,  1782,  1785,  1788,
+    1794,  1795,  1796,  1800,  1802,  1808,  1809,  1811,  1814,  1818,
+    1824,  1826,  1831,  1839,  1840,  1842,  1844,  1846,  1853,  1855,
+    1854,  1858,  1865,  1868,  1872,  1873,  1879,  1883,  1888,  1887,
+    1893,  1898,  1897,  1902,  1904,  1908,  1909,  1913,  1918,  1922,
+    1928,  1938,  1927,  1951,  1961,  1950,  1976,  1977,  1983,  1985,
+    1987,  1989,  1990,  2001,  2003,  2005,  2014,  2016,  2018,  2020,
+    2022,  2029,  2033,  2036,  2043,  2042,  2049,  2048,  2054,  2059,
+    2058,  2063,  2062,  2069,  2070,  2071,  2072,  2075,  2077,  2080,
+    2082,  2087,  2089,  2096,  2097,  2099,  2115,  2117,  2122,  2124,
+    2129,  2131,  2136,  2137,  2144,  2145,  2150,  2153,  2156,  2162,
+    2165,  2168,  2174,  2175,  2177,  2183,  2185,  2191,  2190,  2198,
+    2199,  2203,  2204,  2208,  2209,  2214,  2216,  2221,  2223,  2225,
+    2230,  2231,  2235,  2236,  2240,  2243,  2249,  2255,  2257,  2266,
+    2282,  2283,  2285,  2290,  2291,  2294,  2299,  2305,  2306,  2313,
+    2314,  2318,  2325,  2326,  2330,  2334,  2336,  2339,  2342,  2348,
+    2351,  2355,  2366,  2365,  2377,  2379,  2384,  2386,  2391,  2391,
+    2411,  2412,  2417,  2419,  2423,  2422,  2431,  2440,  2443,  2445,
+    2442,  2454,  2461,  2464,  2465,  2467,  2464,  2474,  2473,  2482,
+    2487,  2492,  2495,  2498,  2503,  2508,  2512,  2516,  2521,  2528,
+    2529,  2536,  2539,  2542,  2545,  2554,  2555,  2560,  2561,  2568,
+    2569,  2573,  2574,  2579,  2581,  2586,  2588,  2595,  2595,  2603,
+    2605,  2604,  2611,  2618,  2619,  2629,  2631,  2636,  2637,  2644,
+    2646,  2648,  2650,  2652,  2654,  2656,  2660,  2666,  2666,  2673,
+    2674,  2679,  2681,  2686,  2691,  2692,  2699,  2700,  2704,  2711,
+    2713,  2718,  2723,  2728
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "COMPONENTREF",
+  "SCSPEC", "TYPESPEC", "TYPE_QUAL", "FN_QUAL", "CONSTANT", "STRING",
+  "MAGIC_STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF",
+  "ELSE", "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK",
+  "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF",
+  "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG",
+  "OFFSETOF", "'='", "ASSIGN", "'?'", "':'", "OROR", "ANDAND", "'|'",
+  "'^'", "'&'", "EQCOMPARE", "'<'", "'>'", "ARITHCOMPARE", "RSHIFT",
+  "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", "MINUSMINUS", "PLUSPLUS",
+  "'.'", "'('", "'['", "POINTSAT", "'~'", "'!'", "'{'", "';'",
+  "DISPATCH_C", "DISPATCH_NESC", "DISPATCH_PARM", "DISPATCH_TYPE",
+  "ATOMIC", "USES", "INTERFACE", "COMPONENTS", "PROVIDES", "MODULE",
+  "INCLUDES", "CONFIGURATION", "AS", "TASTNIOP", "IMPLEMENTATION", "CALL",
+  "SIGNAL", "POST", "GENERIC", "NEW", "NX_STRUCT", "NX_UNION", "ABSTRACT",
+  "COMPONENT", "EXTENDS", "TARGET_ATTRIBUTE0", "TARGET_ATTRIBUTE1",
+  "TARGET_DEF", "','", "'}'", "']'", "')'", "'@'", "$accept", "dispatch",
+  "ncheader", "@1", "includes_list", "includes", "include_list",
+  "interface", "@2", "@3", "interface_parms", "interface_parm_list",
+  "interface_parm", "type_parm", "datadef_list", "parameters", "@4",
+  "parameters1", "component", "module", "@5", "@6", "configuration", "@7",
+  "@8", "@9", "binary_component", "@10", "@11", "generic",
+  "component_parms", "template_parms", "template_parmlist",
+  "template_parm", "requires_or_provides_list",
+  "requires_or_provides_list_", "requires_or_provides", "@12", "requires",
+  "@13", "provides", "@14", "parameterised_interface_list",
+  "parameterised_interfaces", "parameterised_interface", "interface_ref",
+  "interface_type", "@15", "typelist", "iconfiguration", "@16", "cuses",
+  "component_list", "component_ref", "component_ref2", "generic_args",
+  "generic_arglist", "generic_arg", "generic_type", "configuration_decls",
+  "configuration_decl", "connection", "endpoint",
+  "parameterised_identifier", "imodule", "@17", "extdefs", "@18", "@19",
+  "extdef", "datadef", "just_datadef", "target_def", "fndef", "fndef2",
+  "@20", "@21", "identifier", "id_label", "idword", "unop", "expr",
+  "exprlist", "nonnull_exprlist", "nonnull_exprlist_", "callkind",
+  "unary_expr", "sizeof", "alignof", "cast_expr", "@22", "expr_no_commas",
+  "@23", "primary", "@24", "fieldlist", "function_call", "string",
+  "old_style_parm_decls", "datadecls", "datadecl", "decls", "setspecs",
+  "maybe_resetattrs", "decl", "declspecs_nosc_nots_nosa_noea",
+  "declspecs_nosc_nots_nosa_ea", "declspecs_nosc_nots_sa_noea",
+  "declspecs_nosc_nots_sa_ea", "declspecs_nosc_ts_nosa_noea",
+  "declspecs_nosc_ts_nosa_ea", "declspecs_nosc_ts_sa_noea",
+  "declspecs_nosc_ts_sa_ea", "declspecs_sc_nots_nosa_noea",
+  "declspecs_sc_nots_nosa_ea", "declspecs_sc_nots_sa_noea",
+  "declspecs_sc_nots_sa_ea", "declspecs_sc_ts_nosa_noea",
+  "declspecs_sc_ts_nosa_ea", "declspecs_sc_ts_sa_noea",
+  "declspecs_sc_ts_sa_ea", "declspecs_ts", "declspecs_nots",
+  "declspecs_ts_nosa", "declspecs_nots_nosa", "declspecs_nosc_ts",
+  "declspecs_nosc_nots", "declspecs_nosc", "declspecs",
+  "maybe_type_quals_attrs", "type_spec_nonattr", "type_spec_attr",
+  "type_spec_reserved_nonattr", "type_spec_reserved_attr",
+  "type_spec_nonreserved_nonattr", "initdecls", "notype_initdecls",
+  "initdecls_", "notype_initdecls_", "maybeasm", "initdcl", "@25",
+  "notype_initdcl", "@26", "maybe_attribute", "eattributes",
+  "nesc_attributes", "attributes", "attribute", "target_attribute",
+  "restricted_expr", "attribute_list", "attrib", "nattrib", "nastart",
+  "any_word", "init", "@27", "initlist_maybe_comma", "initlist1",
+  "initelt", "@28", "initval", "@29", "designator_list", "designator",
+  "nested_function", "@30", "@31", "notype_nested_function", "@32", "@33",
+  "declarator", "after_type_declarator", "parm_declarator",
+  "notype_declarator", "tag", "structuse", "structdef", "@34", "@35",
+  "@36", "@37", "structkind", "maybecomma", "maybecomma_warn",
+  "component_decl_list", "component_decl_list2", "component_decl",
+  "components", "components_notype", "component_declarator",
+  "component_notype_declarator", "enumlist", "enumerator", "typename",
+  "@38", "absdcl", "absdcl1", "absdcl1_noea", "absdcl1_ea",
+  "direct_absdcl1", "array_or_fn_declarator", "array_or_absfn_declarator",
+  "fn_declarator", "absfn_declarator", "array_declarator", "stmts",
+  "stmt_or_labels", "xstmts", "errstmt", "pushlevel", "maybe_label_decls",
+  "label_decls", "label_decl", "compstmt_or_error", "compstmt_start",
+  "compstmt", "simple_if", "if_prefix", "do_stmt_start", "@39",
+  "labeled_stmt", "stmt_or_label", "atomic_stmt", "@40", "stmt_or_error",
+  "stmt", "@41", "@42", "@43", "@44", "@45", "@46", "@47", "label",
+  "maybe_type_qual", "xexpr", "asm_operands", "nonnull_asm_operands",
+  "asm_operand", "asm_clobbers", "parmlist", "@48", "parmlist_1", "@49",
+  "parmlist_2", "parms", "parm", "xreferror", "parmlist_or_identifiers",
+  "@50", "parmlist_or_identifiers_1", "identifiers", "old_parameter",
+  "identifiers_or_typenames", "fn_quals", "extension", "scspec",
+  "type_qual", "fn_qual", "type_spec", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+      61,   295,    63,    58,   296,   297,   124,    94,    38,   298,
+      60,    62,   299,   300,   301,    43,    45,    42,    47,    37,
+     302,   303,    46,    40,    91,   304,   126,    33,   123,    59,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,    44,   125,
+      93,    41,    64
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint16 yyr1[] =
+{
+       0,   103,   104,   104,   104,   104,   104,   104,   104,   104,
+     106,   105,   105,   107,   107,   108,   109,   109,   111,   112,
+     110,   113,   113,   114,   114,   115,   116,   117,   117,   119,
+     118,   120,   120,   121,   121,   121,   123,   124,   122,   126,
+     127,   128,   125,   130,   131,   129,   132,   132,   133,   133,
+     134,   134,   135,   135,   136,   136,   136,   136,   137,   138,
+     138,   139,   139,   140,   139,   142,   141,   144,   143,   145,
+     145,   146,   146,   147,   147,   147,   148,   148,   149,   150,
+     149,   151,   151,   153,   152,   154,   155,   155,   156,   156,
+     157,   157,   158,   158,   159,   159,   160,   160,   161,   162,
+     162,   163,   163,   163,   164,   164,   164,   165,   165,   166,
+     166,   168,   167,   170,   169,   171,   169,   172,   172,   172,
+     172,   173,   173,   174,   174,   174,   174,   174,   174,   174,
+     175,   176,   176,   176,   178,   179,   177,   180,   180,   181,
+     182,   183,   183,   183,   183,   183,   183,   183,   183,   183,
+     184,   185,   185,   186,   187,   187,   188,   188,   188,   189,
+     189,   189,   189,   189,   189,   189,   189,   189,   189,   190,
+     191,   192,   192,   193,   192,   194,   194,   194,   194,   194,
+     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
+     194,   194,   194,   195,   194,   194,   194,   196,   196,   196,
+     196,   196,   197,   196,   196,   196,   196,   196,   196,   196,
+     196,   196,   198,   198,   199,   200,   200,   201,   201,   201,
+     202,   202,   203,   203,   203,   203,   204,   204,   204,   204,
+     205,   206,   207,   207,   207,   207,   207,   207,   208,   208,
+     208,   209,   210,   210,   211,   211,   212,   212,   212,   212,
+     212,   212,   212,   213,   213,   213,   213,   213,   213,   214,
+     214,   214,   214,   214,   214,   215,   215,   215,   215,   215,
+     216,   216,   216,   216,   216,   216,   216,   217,   218,   218,
+     218,   218,   218,   218,   219,   220,   220,   220,   220,   220,
+     220,   220,   220,   220,   220,   221,   221,   221,   221,   221,
+     222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
+     223,   223,   223,   223,   223,   224,   224,   224,   224,   224,
+     224,   224,   224,   225,   225,   225,   225,   225,   225,   225,
+     225,   226,   226,   226,   226,   227,   227,   227,   227,   228,
+     228,   228,   228,   229,   229,   229,   229,   230,   230,   231,
+     231,   232,   232,   233,   233,   234,   235,   235,   236,   237,
+     237,   237,   237,   238,   239,   240,   240,   241,   241,   242,
+     242,   244,   243,   243,   246,   245,   245,   247,   247,   248,
+     249,   249,   250,   250,   251,   251,   251,   252,   252,   252,
+     253,   253,   253,   254,   254,   255,   255,   255,   255,   255,
+     256,   256,   257,   258,   258,   258,   258,   258,   259,   260,
+     259,   259,   261,   261,   262,   262,   263,   263,   264,   263,
+     263,   266,   265,   265,   265,   267,   267,   268,   268,   268,
+     270,   271,   269,   273,   274,   272,   275,   275,   276,   276,
+     276,   276,   276,   277,   277,   277,   278,   278,   278,   278,
+     278,   279,   280,   280,   282,   281,   283,   281,   281,   284,
+     281,   285,   281,   286,   286,   286,   286,   287,   287,   288,
+     288,   289,   289,   290,   290,   290,   291,   291,   291,   291,
+     291,   291,   292,   292,   293,   293,   294,   294,   294,   295,
+     295,   295,   296,   296,   296,   297,   297,   299,   298,   300,
+     300,   301,   301,   302,   302,   303,   303,   304,   304,   304,
+     305,   305,   306,   306,   307,   307,   308,   309,   309,   310,
+     311,   311,   311,   312,   312,   313,   314,   315,   315,   316,
+     316,   317,   318,   318,   319,   320,   320,   320,   320,   321,
+     321,   322,   324,   323,   325,   325,   326,   326,   328,   327,
+     329,   329,   330,   330,   331,   330,   330,   330,   332,   333,
+     330,   330,   330,   334,   335,   336,   330,   337,   330,   330,
+     330,   330,   330,   330,   330,   330,   330,   330,   330,   330,
+     330,   338,   338,   338,   338,   339,   339,   340,   340,   341,
+     341,   342,   342,   343,   343,   344,   344,   346,   345,   347,
+     348,   347,   347,   349,   349,   349,   349,   350,   350,   351,
+     351,   351,   351,   351,   351,   351,   352,   354,   353,   355,
+     355,   356,   356,   357,   358,   358,   359,   359,   360,   361,
+     361,   362,   363,   364
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     2,     2,     2,     1,     2,     2,     2,     2,
+       0,     2,     1,     2,     0,     3,     1,     3,     0,     0,
+      10,     0,     3,     1,     3,     2,     1,     2,     1,     0,
+       3,     2,     2,     2,     2,     2,     0,     0,    11,     0,
+       0,     0,    12,     0,     0,     8,     1,     0,     0,     3,
+       0,     1,     1,     3,     4,     4,     4,     2,     1,     2,
+       0,     1,     1,     0,     2,     0,     3,     0,     3,     1,
+       3,     2,     1,     1,     3,     4,     1,     3,     2,     0,
+       6,     1,     3,     0,     5,     3,     3,     1,     1,     3,
+       1,     5,     0,     1,     1,     3,     1,     1,     1,     2,
+       0,     1,     1,     1,     4,     4,     4,     3,     1,     1,
+       4,     0,     5,     0,     2,     0,     3,     1,     1,     5,
+       2,     3,     1,     4,     4,     3,     2,     2,     1,     1,
+       5,     4,     4,     3,     0,     0,     6,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     1,     3,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     2,     4,     2,     4,     1,
+       1,     1,     4,     0,     7,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     5,     0,     5,     3,     3,     1,     1,     1,
+       3,     3,     0,     4,     1,     6,     6,     4,     3,     3,
+       2,     2,     1,     3,     4,     1,     1,     0,     1,     2,
+       1,     2,     4,     4,     3,     2,     1,     1,     2,     2,
+       0,     1,     4,     4,     3,     3,     3,     2,     1,     2,
+       2,     2,     2,     2,     1,     2,     1,     2,     2,     2,
+       2,     2,     2,     1,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     4,     4,     1,     1,     1,     4,     1,     4,     0,
+       4,     0,     6,     3,     0,     6,     3,     0,     1,     1,
+       0,     2,     1,     2,     6,     1,     1,     1,     2,     2,
+       1,     1,     3,     1,     3,     0,     1,     4,     6,     4,
+       5,     4,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     1,     0,     2,     1,     3,     3,     2,     0,     4,
+       1,     0,     4,     1,     1,     1,     2,     2,     5,     3,
+       0,     0,     7,     0,     0,     7,     1,     1,     2,     3,
+       4,     1,     3,     2,     3,     1,     2,     3,     4,     1,
+       3,     1,     3,     3,     0,     8,     0,     9,     5,     0,
+       9,     0,     7,     1,     1,     1,     1,     0,     1,     0,
+       1,     1,     2,     0,     3,     2,     3,     2,     3,     2,
+       1,     2,     1,     4,     1,     4,     2,     4,     3,     2,
+       4,     3,     1,     3,     1,     1,     3,     0,     3,     0,
+       1,     1,     1,     1,     3,     2,     3,     4,     2,     1,
+       1,     1,     1,     1,     4,     3,     3,     3,     2,     1,
+       1,     2,     2,     0,     1,     2,     0,     0,     1,     1,
+       2,     3,     1,     2,     1,     3,     6,     5,     5,     2,
+       2,     4,     0,     4,     1,     2,     1,     1,     0,     3,
+       1,     1,     1,     2,     0,     4,     1,     3,     0,     0,
+       7,     5,     2,     0,     0,     0,    12,     0,     6,     2,
+       2,     2,     3,     6,     8,    10,    12,     3,     4,     1,
+       1,     3,     5,     2,     2,     0,     1,     0,     1,     0,
+       1,     1,     3,     4,     7,     1,     3,     0,     2,     2,
+       0,     4,     2,     0,     1,     1,     3,     1,     3,     4,
+       4,     3,     4,     4,     3,     4,     0,     0,     2,     1,
+       2,     1,     3,     1,     1,     3,     0,     1,     1,     1,
+       1,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint16 yydefact[] =
+{
+       0,   113,   113,     0,     0,     0,   115,     0,    47,    14,
+       2,     3,   115,     7,   359,     0,   629,   633,   631,     0,
+     463,   464,   630,     0,     0,   465,   466,   387,     0,     0,
+     323,   324,   325,   326,   315,   316,   317,   318,   327,   328,
+     329,   330,   319,   320,   321,   322,   616,   616,   246,   253,
+     353,   355,   354,   244,   379,   382,   385,   386,   357,   358,
+       0,     6,   270,   238,   356,     9,   343,   344,   345,   346,
+     339,   340,   341,   342,   347,   348,   497,     8,     1,     0,
+       0,     0,   628,   128,     0,   114,   118,   122,   129,   117,
+       0,   230,   230,   230,     0,     0,    46,     0,    33,    34,
+      35,     0,    11,     0,   137,   138,   461,   451,   380,     0,
+       0,     0,   390,   215,   216,     0,   391,   388,   140,   402,
+     389,     0,   251,   257,   241,   273,   239,   252,   258,   274,
+     240,   263,   268,   245,   280,   242,   264,   269,   281,   243,
+     249,   255,   254,   291,   247,   250,   256,   292,   248,   261,
+     266,   265,   306,   259,   262,   267,   307,   260,   289,   298,
+     277,   275,   271,   290,   299,   276,   272,   304,   313,   284,
+     282,   278,   305,   314,   283,   279,   287,   296,   295,   293,
+     285,   288,   297,   294,   286,   302,   311,   310,   308,   300,
+     303,   312,   309,   301,   499,   499,   383,   473,   380,   499,
+     116,   126,   127,     0,     0,   449,   351,   377,     0,   364,
+     367,   369,     0,     0,     0,   120,    18,    43,     0,     0,
+       0,    13,   360,     0,   453,   380,   197,   198,   169,   170,
+     148,   149,     0,     0,     0,   141,   143,   142,     0,   145,
+     144,     0,   146,   147,   156,   157,   158,     0,     0,   150,
+     153,     0,   171,     0,     0,   175,   154,   159,   204,   199,
+       0,     0,   395,     0,     0,     0,   445,   351,   597,     0,
+     377,   377,   611,   500,   502,   501,   503,   509,   512,   513,
+     351,   377,   614,   502,     0,     0,   452,   351,   597,   498,
+     502,     0,     0,     0,   343,   344,   345,   346,   352,     0,
+       0,   378,   121,   377,     0,   617,    29,     0,   133,   377,
+     446,   510,   511,   441,   351,   377,     0,   363,   365,   369,
+     436,   437,     0,   369,   125,    21,   380,    36,    39,     0,
+      16,   494,   495,   469,   492,   459,     0,   381,     0,     0,
+       0,   139,   164,   161,     0,     0,     0,     0,   163,   361,
+       0,     0,     0,   160,     0,   165,     0,   167,     0,     0,
+     193,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   211,   210,     0,
+     151,     0,     0,   362,   162,   407,   403,     0,   393,   396,
+     404,   406,   405,   392,   401,   424,   197,     0,     0,   421,
+       0,   423,     0,   467,   414,   420,     0,     0,   505,     0,
+     626,     0,   518,     0,   609,   443,   610,   612,   597,   508,
+     505,   613,   615,   377,   480,   475,   230,   230,   472,     0,
+     454,   505,     0,     0,     0,   450,   447,     0,     0,   231,
+       0,   626,     0,     0,     0,   134,     0,     0,     0,   124,
+     377,   131,   377,   438,   123,   132,     0,   380,    44,    48,
+      48,    15,     0,     0,   470,     0,     0,   456,     0,     0,
+     201,   200,   534,   526,     0,     0,   155,     0,     0,   195,
+     196,     0,     0,   191,   190,   188,   189,   187,   186,   184,
+     185,   183,   182,   181,   176,   177,   178,   179,   180,   208,
+       0,   152,     0,   209,   395,     0,   151,   427,     0,     0,
+     418,   400,     0,   413,     0,   426,   417,   444,   504,   506,
+       0,   632,   516,   627,     0,   604,   598,     0,   605,   607,
+     517,   458,   477,   479,   474,   481,   473,   119,   130,   448,
+     368,   369,     0,   515,   623,   619,   618,     0,   621,     0,
+      30,     0,   626,   374,   217,   442,   439,     0,     0,   134,
+      26,     0,    23,   380,    19,     0,    50,   380,   380,    17,
+     496,   493,   377,   469,   473,     0,     0,   527,   203,   173,
+     172,   166,   168,     0,     0,   214,   207,   394,   384,   197,
+       0,     0,   429,     0,     0,   415,   416,   507,   602,   599,
+     600,     0,     0,   377,   476,   482,     0,   377,   478,   484,
+       0,   377,   370,     0,   620,    32,     0,    31,   514,     0,
+     135,   218,   220,   335,   336,   331,   332,   337,   338,   333,
+     334,   230,   230,   440,   366,   371,    22,     0,    25,     0,
+      60,     0,    51,    52,   616,   616,    37,    40,   462,     0,
+       0,     0,   212,     0,     0,   535,     0,   528,   529,     0,
+     192,   194,     0,   397,   399,     0,   422,   419,     0,   606,
+     608,   377,     0,   486,   377,   377,     0,   489,   377,   377,
+     373,   622,   411,   409,   408,   375,     0,   219,   221,     0,
+     225,     0,     0,    24,     0,     0,    63,    49,     0,    57,
+       0,     0,     0,   377,   377,   205,     0,   206,   624,     0,
+       0,   359,     0,   558,   542,     0,     0,     0,   630,     0,
+       0,     0,     0,   585,   580,   548,     0,     0,   523,     0,
+     230,   230,   230,     0,     0,   227,   552,   556,     0,     0,
+     520,   579,   546,   547,     0,   530,     0,     0,   428,   601,
+     488,   377,     0,   491,   377,     0,   455,     0,     0,   136,
+     532,   224,     0,     0,   369,   372,     0,    28,   230,   230,
+      45,    65,    67,    59,     0,    61,    62,    53,   377,   377,
+     377,    60,    60,   460,   457,   213,   531,     0,   525,   537,
+       0,     0,     0,   587,     0,     0,   583,   569,   570,   571,
+       0,     0,     0,     0,   586,     0,   584,   553,   228,   524,
+       0,     0,   229,     0,     0,     0,   538,     0,   522,   521,
+       0,   540,   539,   544,     0,   562,     0,   237,   174,   398,
+     487,   483,   490,   485,     0,   533,   222,   223,   377,    20,
+      27,     0,     0,     0,     0,    64,    54,    55,    56,     0,
+       0,   625,     0,     0,     0,   588,     0,     0,     0,   581,
+     572,     0,   577,     0,   551,   549,   550,   536,     0,   234,
+     369,     0,   235,   369,   236,   557,     0,   545,     0,   410,
+     376,     0,     0,    66,    69,   380,    76,    73,    68,     0,
+      41,   541,     0,   543,   563,   567,     0,   578,     0,   232,
+     377,   233,   377,   555,     0,     0,    72,    78,    29,   380,
+       0,     0,   111,    38,     0,   559,   587,     0,   582,   589,
+       0,   430,   433,   561,    70,    71,     0,     0,    74,    77,
+       0,    83,    42,     0,     0,   568,     0,     0,     0,   590,
+     591,   573,   217,   217,     0,    75,   113,     0,   560,   564,
+       0,     0,   589,     0,     0,   431,   434,     0,    81,    98,
+     115,   100,   587,     0,     0,     0,   574,   592,     0,     0,
+      80,     0,   112,     0,     0,   593,     0,     0,     0,   432,
+     435,    82,     0,    84,   103,    99,   101,     0,   108,   102,
+     109,   565,     0,   595,     0,   575,     0,     0,    87,    88,
+      90,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    85,     0,     0,     0,   107,     0,     0,     0,   566,
+     594,   596,   576,    92,    86,    89,   104,   105,   106,   110,
+       0,    93,    94,    97,    96,    91,     0,    95
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     5,     8,     9,   102,   221,   329,    10,   325,   639,
+     457,   561,   562,   563,   766,   307,   443,   550,    11,    98,
+     459,   701,    99,   460,   702,   914,   100,   326,   565,   101,
+     567,   641,   642,   643,   695,   696,   773,   774,   775,   843,
+     776,   844,   883,   905,   884,   885,   886,   926,   957,   932,
+     947,   984,   997,   998,   999,  1030,  1031,  1032,  1033,   973,
+     985,   986,   987,   988,   913,   930,     6,     7,    79,    85,
+      86,   887,    88,    89,   308,   554,   686,   118,   726,   990,
+     247,   727,   500,   249,   250,   251,   252,   253,   254,   255,
+     659,   256,   482,   257,   346,   653,   258,   259,   620,   621,
+     622,   728,    90,   438,   729,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,   631,   632,    74,    75,    76,    93,   299,
+      48,    49,    50,    51,    52,   316,   322,   317,   209,   309,
+     318,   692,   210,   619,   439,    53,   224,    54,    55,    56,
+     117,   387,   388,    57,   121,   389,   685,   757,   402,   403,
+     404,   594,   405,   509,   406,   407,   869,   942,   968,   872,
+     943,   969,   541,   320,   270,   321,   108,    58,    59,   536,
+     574,   466,   223,    60,   513,   465,   284,   285,   428,   604,
+     608,   605,   609,   333,   334,   959,   199,   272,   273,   290,
+     275,   276,   310,   277,   311,   278,   312,   733,   734,   810,
+     735,   577,   656,   657,   658,   759,   473,   736,   737,   738,
+     739,   792,   822,   740,   741,   805,   865,   823,   876,   791,
+     933,   916,   962,  1006,   917,   824,   803,   856,   938,   939,
+     940,   994,   410,   411,   545,   668,   527,   528,   529,   194,
+     441,   442,   546,   547,   548,   709,   522,   261,    62,    63,
+     523,    64
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -729
+static const yytype_int16 yypact[] =
+{
+     560,   204,   583,  2204,  2276,   251,   311,  1317,   536,  -729,
+    -729,  -729,   534,  -729,  -729,   273,  -729,  -729,  -729,    76,
+     215,  -729,  -729,    52,   367,  -729,  -729,  -729,   322,   544,
+    2947,   630,  2947,   630,  1209,   760,  1209,   760,  2947,   630,
+    2947,   630,  1209,   760,  1209,   760,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,   115,  -729,  -729,  -729,  -729,  -729,
+     168,  -729,  -729,  -729,  -729,  -729,  2966,   731,  2966,   731,
+    1093,   386,  1093,   386,  -729,  -729,  -729,  -729,  -729,  1317,
+     323,   407,  -729,  -729,   605,  -729,  -729,  -729,  -729,  -729,
+     343,   352,   389,  -729,  1317,   605,  -729,   605,  -729,  -729,
+    -729,   441,   421,   605,  -729,  -729,  -729,  -729,  -729,   605,
+    2695,   468,  -729,  -729,  -729,  3807,  -729,  -729,  -729,  -729,
+    -729,    69,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,   317,   402,  -729,  -729,  -729,   446,
+    -729,  -729,  -729,  3807,   499,   514,    83,   115,   480,   491,
+    -729,   160,   334,   343,   529,  -729,  -729,  -729,   605,   605,
+     605,  -729,  -729,   565,   123,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,   538,   586,   605,  -729,  -729,  -729,  3807,  -729,
+    -729,  1439,  -729,  -729,  -729,  -729,  -729,  3807,   552,  -729,
+     569,   469,  -729,  3866,  3925,  -729,  1498,   848,  -729,  -729,
+     573,  3807,   589,   576,   579,  2440,  -729,    83,   410,  3041,
+     741,   741,  -729,  -729,   115,  -729,     9,  -729,  -729,  -729,
+      83,   741,  -729,   115,   607,   482,   129,    83,   615,  -729,
+    -729,   608,  3807,   605,    83,   705,    83,   705,  -729,   343,
+     343,   115,  -729,   115,   655,  -729,  3041,   659,  -729,   115,
+    -729,  -729,  -729,   664,    83,   115,   658,   632,  -729,   698,
+     578,   578,   674,   160,  -729,   694,  -729,  -729,  -729,   117,
+    -729,  -729,   693,   651,  -729,  -729,   605,  -729,   145,  3807,
+    2966,  -729,  -729,  -729,   656,   662,   684,   663,  -729,  -729,
+    3807,  3434,   848,   939,  1439,  -729,  1439,  -729,  3807,  3807,
+    3807,  3807,  3807,  3807,  3807,  3807,  3807,  3807,  3807,  3807,
+    3807,  3807,  3807,  3807,  3807,  3807,  3807,  -729,  -729,   605,
+    3807,  3807,   605,  -729,  -729,  -729,  -729,   395,  -729,   696,
+    -729,  -729,  -729,  -729,  -729,  -729,   713,   605,  3807,  -729,
+     717,  1498,   669,   675,  -729,  -729,   350,  3366,   317,   402,
+     763,  1569,  -729,   678,  -729,  -729,  -729,   115,  -729,  -729,
+     402,  -729,   115,   115,  -729,  -729,  -729,  -729,   720,  2256,
+    -729,   446,   446,   721,   723,  -729,   578,   278,   334,  -729,
+     771,   763,  1999,  2237,  1999,     2,   605,   334,   334,  -729,
+     115,  -729,   115,  -729,  -729,  -729,   783,  -729,   691,   733,
+     733,  -729,   605,  3807,   605,   695,   565,  -729,  4091,   699,
+    -729,  -729,  -729,  -729,   702,  3687,  1498,   706,   707,  1498,
+    1498,   772,   775,  2026,  2264,  1149,  1460,  1863,  1380,   878,
+     878,   878,   797,   797,   599,   599,  -729,  -729,  -729,  -729,
+     722,  -729,   724,  -729,   589,   726,  3984,  -729,  3098,  2860,
+    -729,  -729,  2372,  -729,  3495,  -729,  -729,   578,  -729,  -729,
+     729,  -729,  -729,  -729,   730,  -729,  -729,   743,   349,  -729,
+    -729,  -729,   844,    98,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,   698,   744,  -729,  -729,  -729,  -729,   445,  -729,   725,
+    -729,   523,   763,  -729,   630,  -729,   578,   399,   334,   384,
+    -729,     1,  -729,  -729,   691,   774,  2947,  -729,  -729,  -729,
+    1498,  -729,   115,   651,  -729,  2966,   605,    85,  -729,  -729,
+    -729,  -729,  -729,  3807,  3807,  -729,  -729,  -729,  -729,   459,
+     748,  3807,  -729,   761,  3495,  -729,  -729,  -729,  -729,  -729,
+    -729,  2925,  3807,   137,   765,  -729,  3807,   738,   766,  -729,
+     767,   115,  -729,   868,  -729,  -729,  2947,  -729,  -729,  3556,
+    -729,   118,  -729,  2947,   630,  1209,   760,  2947,   630,  1209,
+     760,  -729,   790,  -729,  -729,  -729,  -729,   783,   691,   804,
+    -729,   773,   777,  -729,  -729,  -729,   691,   691,  -729,   780,
+     781,   782,  -729,   244,   605,  -729,  1734,   841,  -729,  2860,
+    1201,  1201,  3807,  -729,  -729,  4052,  -729,  -729,  1569,  -729,
+    -729,  4032,  3807,  -729,   115,  4032,  3807,  -729,   115,   115,
+     845,  -729,  -729,  -729,  1498,  -729,    34,  -729,  -729,   240,
+    -729,   343,  3556,  -729,  2137,   794,   393,  -729,  2947,   334,
+     343,   813,   821,   115,   115,  -729,   605,  -729,  -729,   358,
+     346,   755,   834,  -729,  -729,   836,   840,  3807,   861,   846,
+     847,  3746,   325,   705,  -729,  -729,   862,   849,  2528,  1606,
+     352,   389,  -729,   822,  2791,  -729,  -729,   901,  3157,    87,
+    -729,  -729,  -729,  -729,  2628,  -729,   824,   826,  -729,  -729,
+    -729,  4032,   844,  -729,  4032,    98,  -729,  2860,   684,  -729,
+    -729,  -729,   860,   876,   160,  -729,  2035,  -729,   352,   389,
+    -729,  -729,  -729,  -729,  2137,  -729,  -729,  -729,   741,   741,
+     741,  -729,  -729,  -729,  -729,  -729,  -729,   605,  -729,  -729,
+    3807,   897,  3626,  3807,  3807,  4113,  -729,  -729,  -729,  -729,
+     892,  3807,   899,   903,  -729,  3305,  -729,  -729,  -729,  -729,
+     870,   904,  -729,   334,   343,   905,  -729,   861,  -729,  -729,
+    3235,  -729,  -729,  -729,  3626,  -729,  3807,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,   873,  -729,  -729,  -729,   115,  -729,
+    -729,   334,   343,  1869,  1869,  -729,  -729,  -729,  -729,   881,
+     884,  -729,   883,  3807,   957,  -729,   916,   887,  3807,  -729,
+    -729,   922,  -729,  3807,  -729,  -729,  -729,  -729,   925,  -729,
+     698,   927,  -729,   160,  -729,  -729,  3626,  -729,   896,  -729,
+     885,  2102,   605,  -729,  -729,   941,   924,  -729,  -729,   923,
+    -729,  -729,   908,  -729,  -729,  -729,  4150,  -729,   149,  -729,
+     115,  -729,   115,  -729,   943,  1968,  -729,   963,  -729,  -729,
+     114,   605,  -729,  -729,   930,  -729,  3807,  3626,  -729,    49,
+     946,   384,     2,  -729,  -729,  -729,   967,   255,  -729,  -729,
+     950,  -729,  -729,  3626,   951,  -729,   958,   605,   157,   926,
+    -729,  -729,   630,   630,  2966,  -729,  -729,   960,  -729,  -729,
+    3807,   929,    49,   964,    49,  -729,  -729,   124,  -729,  -729,
+     938,  -729,  3807,   937,  1030,   169,  -729,  -729,   684,   684,
+    -729,  2966,  -729,  1834,   944,  -729,   983,  1037,   980,  -729,
+    -729,  -729,    58,  -729,  -729,  -729,  -729,   369,  -729,  -729,
+     987,  -729,  3807,  -729,   487,  -729,   605,   366,  -729,   970,
+    -729,   605,   605,   605,   605,  3807,  3626,   952,  1043,   988,
+     993,  -729,    58,   605,   246,  -729,   416,   426,   977,  -729,
+    -729,  -729,  -729,  2695,  -729,  -729,  -729,  -729,  -729,  -729,
+     959,   982,  -729,  -729,  1498,  -729,  2695,  -729
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,   444,  -729,  -729,   193,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,  -729,
+     622,  -729,  -729,   385,  -116,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,   241,  -729,  -646,  -729,  -729,  -729,  -729,  -729,
+    -729,  -729,  -729,    75,  -729,  -729,  -729,    54,  -644,  -729,
+    -729,  -729,  -385,    91,  -729,  -729,    12,  -729,  -729,   344,
+    -729,    13,  -729,  -729,    53,  -729,  -729,    78,  -228,   -20,
+    -729,   163,   588,  -355,  -729,  -729,   447,  -729,  -729,  -211,
+    -729,   700,  -729,   851,  -729,  -729,   853,   670,  -227,  -729,
+     474,  -729,   -28,  -413,  -641,    -4,    -1,     0,     8,     4,
+       7,    11,    19,  -547,  -535,  -729,  -729,  -532,  -523,  -729,
+    -729,    14,    25,  -729,  -729,  -275,  -111,  -729,  -616,   224,
+      16,   127,   184,   492,  -729,  -636,   -89,  -729,  -729,  -303,
+    -405,  -729,  -729,  -729,   818,   856,  -180,   558,    22,  -729,
+    1067,  -729,   593,  -196,  -729,  -729,   413,  -729,  -458,  -729,
+     600,  -729,  -341,  -729,  -729,   710,  -729,  -729,  -729,  -729,
+    -729,  -729,  -207,  -409,   703,   -31,    18,  -729,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,   546,  -493,  -729,   728,  -729,
+    -729,   368,   373,   657,   660,    30,  -729,   326,   -83,  -126,
+     110,  -729,  -226,   855,  -729,  -729,   683,   401,  -729,  -729,
+    -280,  -729,  -729,  -729,   475,  -729,  -729,  -317,  -729,  -729,
+    -729,  -729,  -687,   417,  -729,  -729,  -729,  -598,  -729,  -729,
+    -729,  -729,  -729,  -729,  -729,  -589,  -729,  -728,   201,  -729,
+     200,  -729,  -729,  -729,  -394,  -729,  -729,   715,    10,   -45,
+    -729,  -729,   716,  -729,   549,  -729,  -400,    17,   652,  1104,
+    -729,  -232
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -604
+static const yytype_int16 yytable[] =
+{
+      66,   208,   195,    67,    68,   319,   342,   627,    70,   119,
+     426,    71,    69,    61,    12,    72,   452,   526,   286,   628,
+      87,    91,   629,    73,    94,   501,   502,   343,   337,   474,
+     392,   630,    92,   540,    77,   758,   348,   558,   556,   557,
+     732,   543,   553,   610,   415,   338,   122,   127,   131,   136,
+     384,   593,   636,   762,   158,   163,   167,   172,   742,   211,
+     936,   104,   105,   212,   213,   214,   516,   743,   274,   283,
+     264,  -376,   418,   269,   627,   216,   196,   217,   198,   104,
+     105,   650,   122,   127,   131,   136,   628,   808,   825,   629,
+     337,    18,    87,    91,   453,   298,    94,   107,   630,   637,
+    -376,   205,   472,   827,    92,   854,    66,    87,    91,    67,
+      68,    94,   732,   937,    70,   110,    24,    71,    69,    92,
+     654,    72,    14,    15,    16,    17,    18,   225,   732,    73,
+     742,   687,   265,    19,    20,    21,   742,   877,   107,   743,
+     260,   606,   337,    22,   106,   743,   458,   996,    24,    23,
+     826,   501,   618,   634,   426,   206,   298,   123,   128,   132,
+     137,   207,   204,   271,   281,   159,   164,   168,   173,   298,
+      24,   104,   105,   596,   427,   970,   298,   868,    27,    28,
+     672,   222,   323,   928,   655,    29,   461,   107,   934,   903,
+     304,   335,   919,   123,   128,   132,   137,   430,   327,   328,
+     952,   746,   294,   298,    -5,   295,   296,   866,    25,    26,
+      27,    28,   977,   467,   297,   462,   336,    29,   140,   145,
+     149,   154,   971,   305,   306,   336,   176,   181,   185,   190,
+     935,   336,    27,    28,   974,   906,   197,    66,   611,    29,
+      67,    68,   386,   205,   313,    70,   948,   336,    71,    69,
+     920,    78,    72,   667,   140,   145,   149,   154,   953,   925,
+      73,   752,   337,   294,   580,   755,   295,   296,   436,   437,
+     978,   347,   392,   248,   749,   297,   294,   564,   263,   295,
+     296,    66,   518,   294,    67,    68,   295,   296,   297,    70,
+     778,   415,    71,    69,   518,   297,    72,   314,   330,   834,
+     958,   332,   429,   315,    73,   518,   706,   747,  1002,   761,
+     294,    -4,   341,   295,   296,  1026,   119,   109,   427,  1019,
+     205,   266,   297,   196,   945,   603,   520,   981,   104,   105,
+     453,   453,   112,   113,   114,   103,    66,   205,   313,    67,
+      68,   305,   306,   400,    70,   707,   205,    71,    69,   520,
+      66,    72,    66,    67,    68,    67,    68,   336,    70,    73,
+      70,    71,    69,    71,    69,    72,   291,    72,   337,   760,
+     469,   435,   451,    73,   267,    73,   455,   436,   437,   539,
+     268,   269,   801,   638,   477,   115,   478,   646,   647,   436,
+     514,   314,   201,    17,    18,   627,   627,   315,   532,   533,
+     206,    19,    20,    21,   345,   205,   207,   628,   628,  1001,
+     629,   629,   397,  -377,   398,   788,   436,   437,   600,   630,
+     630,  -349,   202,   200,   635,    66,   708,   786,    67,    68,
+     111,  1002,   413,    70,  1003,  1011,    71,    69,   215,   196,
+      72,   835,   337,    24,   196,   789,   429,   601,    73,   812,
+     337,   337,  1004,  -373,   818,   434,   787,   499,  -350,   280,
+     503,   838,   305,   306,  1012,   268,   269,  -377,   771,   413,
+     203,   772,   226,  -377,  -377,   507,    25,    26,  1002,   227,
+     113,   114,  -373,   424,   386,  1027,    14,    15,  1002,    17,
+      18,   408,   -58,   504,   802,  1028,   505,    19,    20,    21,
+     633,   220,   607,   287,   420,    27,    28,   232,   233,   288,
+     269,   431,    29,    23,   345,    24,    82,   345,   519,   345,
+     218,   282,   219,   481,   555,   289,   141,   146,   150,   155,
+     519,   262,   351,   384,   177,   182,   186,   191,   447,   292,
+     569,   519,   332,   613,   332,   603,   614,   104,   105,   302,
+     623,   425,   453,   624,   112,   113,   114,   662,   625,   851,
+     663,   626,   141,   146,   150,   155,   331,   900,   104,   105,
+     902,    66,    25,    26,    67,    68,   293,    27,    28,    70,
+     644,  -471,    71,    69,    29,  1008,    72,   400,  1009,   303,
+     400,   645,   104,   105,    73,    16,    17,    18,   324,   699,
+     700,   339,   763,   689,   691,   651,   870,   115,   104,   105,
+     -12,   670,    95,   -12,    22,   -12,  1014,   623,  1016,  1017,
+     624,   616,   -12,   617,    96,   625,   670,   -12,   626,    97,
+       1,     2,     3,     4,    14,    15,    16,    17,    18,   122,
+     127,   305,   306,   158,   163,    19,    20,    21,    24,   340,
+    1018,   979,   980,   349,   652,    22,   374,   375,   376,   -10,
+     764,    23,   -10,   -10,   -10,   849,   850,   350,   779,   780,
+     730,   -10,  -377,   744,   383,   385,   -10,   393,  -377,  -377,
+     394,   731,   125,   129,   134,   138,   143,   147,   152,   156,
+     161,   165,   170,   174,   179,   183,   188,   192,   116,   116,
+     355,   357,   813,   814,   815,   910,   423,   767,   768,   433,
+      27,    28,   644,    18,   337,   955,   956,    29,   440,   769,
+      25,    26,   444,   645,   607,   871,   446,   449,   304,   927,
+     450,   337,   341,   463,   341,    14,    15,   400,    17,    18,
+     841,   842,   730,   454,   456,   744,    19,    20,    21,   464,
+     123,   128,   472,   731,   159,   164,  -137,   470,   730,   506,
+     510,   744,    23,   471,   475,   301,    16,    17,    18,   731,
+     511,    24,   521,   512,    24,    19,    20,    21,   530,   840,
+     768,   676,   542,   873,   785,    22,   560,   845,   768,   534,
+     537,   769,   538,   336,   572,  -138,   566,   576,  -138,   769,
+     341,   305,   306,   578,   305,   306,   341,   581,   582,   140,
+     145,   764,   341,   176,   181,   583,   341,  -138,   584,  -138,
+    -138,    25,    26,   585,   586,   615,   301,   588,   301,   301,
+     597,   598,   417,    27,    28,   400,    27,    28,  -138,   301,
+      29,   422,   640,    29,   599,   612,   301,   205,   313,   664,
+      25,    26,   372,   373,   374,   375,   376,   768,   768,   690,
+     666,   301,   907,   674,   678,   341,   679,   301,   769,   769,
+     341,   544,   694,   301,   697,   698,   654,   279,   279,   703,
+     704,   781,   279,   705,   800,   635,   124,   602,   133,   782,
+     142,   929,   151,   770,   160,   768,   169,   790,   178,   793,
+     187,   314,   341,   794,   796,   806,   769,   315,   377,   378,
+     379,   380,   381,   382,   390,   797,   798,   951,   807,   768,
+     820,   816,   124,   828,   133,   553,   142,   829,   151,   836,
+     769,   370,   371,   372,   373,   374,   375,   376,   623,   623,
+      66,   624,   624,    67,    68,   837,   625,   625,    70,   626,
+     626,    71,    69,   852,   341,    72,   855,   857,   960,   279,
+     853,   860,  1000,    73,   861,   401,   863,    66,   862,   867,
+      67,    68,   879,   788,   874,    70,  1010,   893,    71,    69,
+     889,   301,    72,   890,   891,   894,   989,   768,   895,   878,
+      73,   897,  1000,  1025,   899,   341,   901,   904,   769,  -204,
+    -204,  -204,  -204,  -204,  -204,   908,   911,   912,   301,   915,
+     301,   341,   923,   -79,   931,   941,   892,   944,   946,    66,
+     949,   950,    67,    68,   954,   300,   898,    70,   961,   964,
+      71,    69,    66,   966,    72,    67,    68,   972,   975,   468,
+      70,   976,    73,    71,    69,   991,   992,    72,   993,   995,
+     476,  1005,  1013,  1020,  1021,    73,  1023,  1022,   479,   480,
+    1035,   483,   484,   485,   486,   487,   488,   489,   490,   491,
+     492,   493,   494,   495,   496,   497,   498,  1029,   909,   855,
+    1036,   693,   568,   777,   341,   888,   409,  1024,   414,   416,
+    1037,   279,   279,  1015,   590,   688,   120,   587,   508,   421,
+      17,    18,   352,   279,   353,   765,   432,   401,    19,    20,
+      21,   517,   595,   963,   279,   279,   515,   141,   146,   649,
+     831,   177,   182,   573,   571,   855,    24,   445,   833,   809,
+     301,   419,   745,   448,   126,   130,   135,   139,   144,   148,
+     153,   157,   162,   166,   171,   175,   180,   184,   189,   193,
+     124,   819,   133,   965,   967,  1007,   390,   535,   551,     0,
+     552,   301,   681,   570,     0,   301,     0,     0,     0,   301,
+     126,   130,   135,   139,   144,   148,   153,   157,     0,     0,
+       0,     0,     0,    25,    26,     0,     0,     0,    27,    28,
+       0,     0,     0,     0,     0,    29,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,   401,
+       0,     0,   401,     0,   401,    16,    17,    18,     0,     0,
+       0,     0,     0,     0,    19,    20,    21,     0,     0,   301,
+       0,     0,   301,   301,    22,     0,   301,   301,     0,     0,
+       0,   531,    24,   360,     0,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   301,   301,     0,     0,     0,     0,     0,     0,     0,
+     559,     0,     0,     0,     0,   125,   129,   143,   147,   161,
+     165,   179,   183,   660,   661,     0,     0,     0,     0,     0,
+       0,   665,     0,     0,   401,     0,     0,     0,     0,    25,
+      26,     0,   671,     0,    27,    28,   675,     0,     0,   301,
+       0,    29,   301,     0,     0,     0,     0,     0,    80,   684,
+    -230,    14,    15,    16,    17,    18,     0,     0,     0,     0,
+       0,     0,    19,    20,    21,     0,   301,   301,   301,     0,
+       0,     0,    22,     0,     0,     0,     0,    81,    23,     0,
+      24,    82,     0,     0,     0,     0,     0,     0,     0,   401,
+       0,     0,     0,     0,     0,     0,   391,     0,     0,     0,
+       0,     0,   751,     0,  -230,     0,   754,     0,     0,     0,
+    -230,     0,     0,     0,     0,     0,    83,     0,     0,     0,
+     648,     0,   684,     0,     0,     0,   301,     0,   126,   130,
+     135,   139,     0,     0,     0,     0,     0,    25,    26,     0,
+       0,     0,    27,    28,    84,     0,     0,   795,     0,    29,
+       0,   673,     0,     0,     0,   677,     0,     0,     0,   680,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     344,     0,   226,    14,    15,     0,    17,    18,     0,   227,
+     113,   114,     0,   228,    19,    20,    21,   401,   301,     0,
+     301,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      23,   229,    24,    82,     0,   230,   231,   232,   233,   124,
+       0,   142,     0,   160,   234,   178,     0,   235,     0,   750,
+       0,     0,     0,   753,   236,   237,   238,   756,     0,   239,
+     240,     0,   241,     0,     0,   242,   243,  -202,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+       0,   783,   784,     0,   244,   245,   246,     0,     0,    25,
+      26,     0,     0,     0,    27,    28,     0,     0,   358,   359,
+     360,    29,   361,   362,   363,   364,   365,   366,   367,   368,
+     369,   370,   371,   372,   373,   374,   375,   376,   896,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   830,
+     524,     0,   832,    14,    15,    16,    17,    18,     0,     0,
+       0,     0,   525,     0,    19,    20,    21,     0,     0,     0,
+       0,     0,     0,     0,    22,     0,   846,   847,   848,     0,
+      23,     0,    24,     0,     0,     0,     0,   811,   391,  -226,
+    -226,  -226,  -226,  -226,  -226,     0,  -226,  -226,  -226,     0,
+    -226,  -226,  -226,  -226,  -226,     0,  -226,  -226,  -226,  -226,
+    -226,  -226,  -226,  -226,  -226,  -226,  -226,  -226,  -226,  -226,
+    -226,     0,  -226,  -226,  -226,  -226,     0,     0,     0,     0,
+       0,  -226,     0,     0,  -226,     0,   880,     0,     0,    25,
+      26,  -226,  -226,  -226,    27,    28,  -226,  -226,     0,  -226,
+    -603,    29,  -226,  -226,  -226,  -226,     0,     0,     0,     0,
+    -226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  -226,  -226,  -226,     0,     0,  -226,  -226,     0,     0,
+       0,  -226,  -226,     0,     0,  -226,     0,     0,  -226,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   921,     0,
+     922,     0,     0,  1034,     0,     0,     0,   126,   130,   144,
+     148,   162,   166,   180,   184,   710,  1034,   396,   711,    15,
+      16,    17,    18,     0,   227,   113,   114,     0,   228,    19,
+      20,    21,   712,     0,   713,   714,   715,   716,   717,   718,
+     719,   720,   721,   722,   723,    23,   229,    24,    82,     0,
+     230,   231,   232,   233,     0,     0,     0,     0,     0,   234,
+       0,     0,   235,     0,     0,     0,     0,     0,     0,   236,
+     237,   238,     0,     0,   239,   240,     0,   241,     0,     0,
+     242,   243,   472,   724,     0,     0,     0,     0,   725,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   244,
+     245,   246,     0,     0,    25,    26,     0,   804,     0,    27,
+      28,     0,     0,     0,     0,    80,    29,   104,   711,    15,
+      16,    17,    18,     0,     0,     0,     0,     0,     0,    19,
+      20,    21,     0,     0,     0,     0,     0,     0,     0,    22,
+       0,     0,     0,     0,     0,    23,     0,    24,     0,     0,
+      80,     0,     0,    14,    15,    16,    17,    18,     0,     0,
+       0,     0,     0,     0,    19,    20,    21,     0,     0,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
+      23,     0,    24,    83,     0,     0,     0,     0,     0,     0,
+       0,   982,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,     0,    25,    26,     0,     0,     0,    27,
+      28,    84,     0,   983,     0,     0,    29,   881,    83,     0,
+       0,     0,     0,     0,     0,   882,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    25,
+      26,     0,     0,     0,    27,    28,    84,     0,     0,    80,
+       0,    29,    14,    15,    16,    17,    18,     0,     0,     0,
+       0,     0,     0,    19,    20,    21,     0,     0,     0,     0,
+       0,     0,     0,    22,     0,     0,     0,     0,     0,    23,
+     524,    24,   544,    14,    15,    16,    17,    18,     0,     0,
+       0,     0,   525,     0,    19,    20,    21,     0,     0,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
+      23,     0,    24,     0,     0,     0,    80,    83,     0,    14,
+      15,    16,    17,    18,   882,     0,     0,     0,     0,     0,
+      19,    20,    21,     0,     0,     0,     0,     0,    25,    26,
+      22,     0,     0,    27,    28,    84,    23,   924,    24,     0,
+      29,   362,   363,   364,   365,   366,   367,   368,   369,   370,
+     371,   372,   373,   374,   375,   376,     0,     0,     0,    25,
+      26,     0,     0,     0,    27,    28,     0,     0,     0,     0,
+    -603,    29,     0,    80,    83,     0,    14,    15,    16,    17,
+      18,     0,     0,     0,     0,     0,     0,    19,    20,    21,
+       0,     0,     0,     0,     0,    25,    26,    22,     0,     0,
+      27,    28,    84,    23,   839,    24,     0,    29,    80,     0,
+       0,    14,    15,    16,    17,    18,     0,     0,     0,     0,
+       0,     0,    19,    20,    21,     0,     0,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,    23,     0,
+      24,    83,     0,     0,     0,     0,     0,     0,   882,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    25,    26,     0,     0,     0,    27,    28,    84,
+       0,     0,     0,     0,    29,    13,    83,     0,    14,    15,
+      16,    17,    18,     0,     0,     0,     0,     0,     0,    19,
+      20,    21,     0,     0,     0,     0,     0,    25,    26,    22,
+       0,     0,    27,    28,    84,    23,     0,    24,   549,    29,
+       0,    14,    15,    16,    17,    18,     0,     0,     0,     0,
+       0,     0,    19,    20,    21,     0,     0,   424,     0,     0,
+      14,    15,    22,    17,    18,     0,     0,     0,    23,     0,
+      24,    19,    20,    21,     0,     0,     0,    65,     0,     0,
+      14,    15,     0,    17,    18,     0,     0,    23,     0,    24,
+      82,    19,    20,    21,    25,    26,     0,     0,     0,    27,
+      28,     0,     0,     0,     0,     0,    29,    23,     0,    24,
+     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,     0,     0,     0,    25,    26,     0,
+       0,     0,    27,    28,     0,     0,     0,     0,     0,    29,
+       0,     0,     0,     0,     0,     0,    25,    26,     0,     0,
+       0,    27,    28,     0,     0,     0,     0,     0,    29,     0,
+       0,     0,     0,     0,     0,     0,    25,    26,     0,     0,
+       0,    27,    28,   395,     0,   396,   105,     0,    29,     0,
+       0,     0,   227,   113,   114,     0,   228,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   229,     0,    82,     0,   230,   231,
+     232,   233,     0,     0,     0,     0,     0,   234,     0,     0,
+     235,     0,     0,     0,     0,     0,     0,   236,   237,   238,
+       0,     0,   239,   240,   397,   241,   398,     0,   242,   243,
+     399,   395,     0,   396,   105,     0,     0,     0,     0,     0,
+     227,   113,   114,     0,   228,     0,     0,   244,   245,   246,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  -468,   229,  -468,    82,     0,   230,   231,   232,   233,
+       0,     0,     0,     0,     0,   234,     0,     0,   235,     0,
+       0,     0,     0,     0,     0,   236,   237,   238,     0,     0,
+     239,   240,   397,   241,   398,     0,   242,   243,   399,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   244,   245,   246,     0,     0,
+       0,   396,   711,    15,    16,    17,    18,     0,   227,   113,
+     114,  -412,   228,    19,    20,    21,   712,     0,   713,   714,
+     715,   716,   717,   718,   719,   720,   721,   722,   723,    23,
+     229,    24,    82,     0,   230,   231,   232,   233,     0,     0,
+       0,     0,     0,   234,     0,     0,   235,     0,     0,     0,
+       0,     0,     0,   236,   237,   238,     0,     0,   239,   240,
+       0,   241,     0,     0,   242,   243,   472,   724,     0,     0,
+       0,     0,   725,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   244,   245,   246,     0,     0,    25,    26,
+       0,     0,     0,    27,    28,     0,     0,     0,     0,     0,
+      29,   226,    14,    15,    16,    17,    18,     0,   227,   113,
+     114,     0,   228,    19,    20,    21,     0,     0,     0,     0,
+       0,     0,     0,    22,     0,     0,     0,     0,     0,    23,
+     229,    24,    82,     0,   230,   231,   232,   233,     0,     0,
+       0,     0,     0,   234,     0,     0,   235,     0,     0,     0,
+       0,     0,     0,   236,   237,   238,     0,     0,   239,   240,
+       0,   241,     0,     0,   242,   243,     0,     0,   226,    14,
+      15,     0,    17,    18,     0,   227,   113,   114,     0,   228,
+      19,    20,    21,   244,   245,   246,     0,     0,    25,    26,
+       0,     0,     0,    27,    28,     0,    23,   229,    24,    82,
+      29,   230,   231,   232,   233,     0,     0,     0,     0,     0,
+     234,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+     236,   237,   238,     0,     0,   239,   240,     0,   241,     0,
+       0,   242,   243,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     244,   245,   246,     0,     0,    25,    26,     0,     0,     0,
+      27,    28,   811,     0,   396,   105,     0,    29,     0,     0,
+       0,   227,   113,   114,     0,   228,     0,     0,     0,   712,
+       0,   713,   714,   715,   716,   717,   817,   719,   720,   721,
+     722,   723,     0,   229,     0,    82,     0,   230,   231,   232,
+     233,     0,     0,     0,     0,     0,   234,     0,     0,   235,
+       0,     0,     0,     0,     0,     0,   236,   237,   238,     0,
+       0,   239,   240,     0,   241,     0,     0,   242,   243,   472,
+     724,   395,     0,   396,   105,   725,     0,     0,     0,     0,
+     227,   113,   114,     0,   228,     0,   244,   245,   246,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    -519,     0,   229,     0,    82,     0,   230,   231,   232,   233,
+       0,     0,     0,     0,     0,   234,     0,     0,   235,     0,
+       0,     0,     0,     0,     0,   236,   237,   238,     0,     0,
+     239,   240,   397,   241,   398,     0,   242,   243,   399,    14,
+      15,    16,    17,    18,     0,     0,     0,     0,   669,     0,
+      19,    20,    21,     0,     0,   244,   245,   246,     0,     0,
+      22,    14,    15,    16,    17,    18,    23,     0,    24,  -412,
+       0,     0,    19,    20,    21,     0,     0,     0,     0,     0,
+      14,    15,    22,    17,    18,     0,     0,     0,    23,     0,
+      24,    19,    20,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    23,     0,    24,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    25,    26,     0,     0,     0,
+      27,    28,     0,     0,     0,     0,     0,    29,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    25,    26,     0,
+       0,     0,    27,    28,   226,     0,     0,     0,     0,    29,
+       0,   227,   113,   114,     0,   228,    25,    26,     0,     0,
+       0,    27,    28,     0,     0,     0,     0,     0,    29,     0,
+       0,     0,     0,   229,     0,    82,     0,   230,   231,   232,
+     233,     0,     0,     0,     0,     0,   234,     0,     0,   235,
+       0,     0,     0,     0,     0,     0,   236,   237,   238,     0,
+       0,   239,   240,     0,   241,     0,     0,   242,   243,     0,
+       0,   591,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   244,   245,   246,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   358,   359,
+     360,   412,   361,   362,   363,   364,   365,   366,   367,   368,
+     369,   370,   371,   372,   373,   374,   375,   376,   821,     0,
+     396,   105,     0,     0,     0,     0,     0,   227,   113,   114,
+       0,   228,     0,     0,     0,   712,     0,   713,   714,   715,
+     716,   717,   817,   719,   720,   721,   722,   723,     0,   229,
+       0,    82,     0,   230,   231,   232,   233,     0,   592,     0,
+       0,     0,   234,     0,     0,   235,     0,     0,     0,     0,
+       0,     0,   236,   237,   238,     0,     0,   239,   240,     0,
+     241,     0,     0,   242,   243,   472,   724,     0,     0,     0,
+       0,   725,     0,     0,     0,     0,   875,     0,  -554,  -554,
+       0,     0,   244,   245,   246,  -554,  -554,  -554,     0,  -554,
+       0,     0,     0,  -554,     0,  -554,  -554,  -554,  -554,  -554,
+    -554,  -554,  -554,  -554,  -554,  -554,     0,  -554,     0,  -554,
+       0,  -554,  -554,  -554,  -554,     0,     0,     0,     0,     0,
+    -554,     0,     0,  -554,     0,     0,     0,     0,     0,     0,
+    -554,  -554,  -554,     0,     0,  -554,  -554,     0,  -554,     0,
+       0,  -554,  -554,  -554,  -554,     0,   864,     0,   226,  -554,
+       0,     0,     0,     0,     0,   227,   113,   114,     0,   228,
+    -554,  -554,  -554,   712,     0,   713,   714,   715,   716,     0,
+       0,   719,   720,   721,   722,   723,     0,   229,     0,    82,
+       0,   230,   231,   232,   233,     0,     0,     0,     0,     0,
+     234,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+     236,   237,   238,     0,     0,   239,   240,   395,   241,   226,
+       0,   242,   243,   472,   724,     0,   227,   113,   114,   725,
+     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     244,   245,   246,     0,     0,     0,     0,     0,   229,     0,
+      82,     0,   230,   231,   232,   233,  -425,     0,     0,     0,
+       0,   234,     0,     0,   235,     0,     0,     0,     0,     0,
+       0,   236,   237,   238,     0,     0,   239,   240,  -425,   241,
+    -425,     0,   242,   243,   399,   344,     0,   226,     0,     0,
+       0,     0,     0,     0,   227,   113,   114,     0,   228,     0,
+       0,   244,   245,   246,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   229,     0,    82,     0,
+     230,   231,   232,   233,     0,     0,     0,     0,     0,   234,
+       0,     0,   235,     0,     0,     0,     0,     0,     0,   236,
+     237,   238,     0,     0,   239,   240,   395,   241,   226,     0,
+     242,   243,  -202,     0,     0,   227,   113,   114,     0,   228,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   244,
+     245,   246,     0,     0,     0,     0,     0,   229,     0,    82,
+       0,   230,   231,   232,   233,     0,     0,     0,     0,     0,
+     234,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+     236,   237,   238,     0,     0,   239,   240,   682,   241,   226,
+       0,   242,   243,   399,     0,     0,   227,   113,   114,     0,
+     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     244,   245,   246,     0,     0,     0,     0,     0,   229,     0,
+      82,     0,   230,   231,   232,   233,     0,     0,     0,     0,
+       0,   234,     0,     0,   235,     0,     0,     0,     0,     0,
+       0,   236,   237,   238,     0,     0,   239,   240,     0,   241,
+       0,     0,   242,   243,   683,     0,     0,     0,     0,   396,
+     105,     0,     0,     0,     0,     0,   227,   113,   114,     0,
+     228,   244,   245,   246,   712,     0,   713,   714,   715,   716,
+     717,   817,   719,   720,   721,   722,   723,     0,   229,     0,
+      82,     0,   230,   231,   232,   233,     0,     0,     0,     0,
+       0,   234,     0,     0,   235,     0,     0,     0,     0,     0,
+       0,   236,   237,   238,     0,     0,   239,   240,     0,   241,
+     226,     0,   242,   243,   472,   724,     0,   227,   113,   114,
+     725,   228,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   244,   245,   246,     0,     0,     0,     0,     0,   229,
+       0,    82,     0,   230,   231,   232,   233,     0,     0,     0,
+       0,     0,   234,     0,     0,   235,     0,     0,     0,     0,
+       0,     0,   236,   237,   238,     0,     0,   239,   240,   226,
+     241,     0,     0,   242,   243,   579,   227,   113,   114,     0,
+     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   244,   245,   246,     0,     0,     0,   229,     0,
+      82,     0,   230,   231,   232,   233,     0,     0,     0,     0,
+       0,   234,     0,     0,   235,     0,     0,     0,     0,     0,
+       0,   236,   237,   238,     0,     0,   239,   240,     0,   241,
+     226,     0,   242,   243,     0,   799,     0,   227,   113,   114,
+       0,   228,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   244,   245,   246,     0,     0,     0,     0,     0,   229,
+       0,    82,     0,   230,   231,   232,   233,     0,     0,     0,
+       0,     0,   234,     0,     0,   235,     0,     0,     0,     0,
+       0,     0,   236,   237,   238,     0,     0,   239,   240,   226,
+     241,     0,     0,   242,   243,     0,   227,   113,   114,     0,
+     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   244,   245,   246,     0,     0,     0,   229,     0,
+      82,     0,   230,   231,   232,   233,     0,     0,     0,     0,
+       0,   234,     0,     0,   235,     0,     0,     0,     0,     0,
+       0,   236,   237,   238,     0,     0,   239,   240,   226,   354,
+       0,     0,   242,   243,     0,   227,   113,   114,     0,   228,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   244,   245,   246,     0,     0,     0,   229,     0,    82,
+       0,   230,   231,   232,   233,     0,     0,     0,     0,     0,
+     234,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+     236,   237,   238,     0,     0,   239,   240,   589,   356,     0,
+       0,   242,   243,     0,   227,   113,   114,     0,   228,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     244,   245,   246,     0,     0,     0,   229,     0,    82,     0,
+     230,   231,   232,   233,     0,     0,     0,     0,     0,   234,
+       0,     0,   235,     0,     0,     0,     0,     0,     0,   236,
+     237,   238,     0,     0,   239,   240,     0,   241,     0,     0,
+     242,   243,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    24,     0,     0,     0,   244,
+     245,   246,   358,   359,   360,     0,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   358,   359,   360,     0,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   858,    27,    28,     0,
+       0,   358,   359,   360,    29,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,     0,   748,   358,   359,   360,   859,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   575,
+     358,   359,   360,   918,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376
+};
+
+static const yytype_int16 yycheck[] =
+{
+       4,    90,    47,     4,     4,   212,   234,   554,     4,    29,
+     285,     4,     4,     3,     2,     4,   319,   411,   198,   554,
+       7,     7,   554,     4,     7,   380,   381,   238,   224,   346,
+     262,   554,     7,   438,     4,     1,   247,   450,   447,   448,
+     656,   441,    40,   536,   270,   225,    30,    31,    32,    33,
+     261,   509,    51,   689,    38,    39,    40,    41,   656,    90,
+      11,     3,     4,    91,    92,    93,   407,   656,   194,   195,
+       1,    69,    63,    64,   621,    95,    54,    97,    60,     3,
+       4,   574,    66,    67,    68,    69,   621,   728,     1,   621,
+     286,     8,    79,    79,   320,   206,    79,    19,   621,    98,
+      98,     3,    68,   744,    79,   792,   110,    94,    94,   110,
+     110,    94,   728,    64,   110,    63,    33,   110,   110,    94,
+      35,   110,     4,     5,     6,     7,     8,   109,   744,   110,
+     728,    13,    63,    15,    16,    17,   734,   824,    60,   728,
+     110,    43,   338,    25,    68,   734,   326,    89,    33,    31,
+      63,   506,   552,   558,   429,    57,   267,    30,    31,    32,
+      33,    63,    84,   194,   195,    38,    39,    40,    41,   280,
+      33,     3,     4,   514,   285,    51,   287,   813,    95,    96,
+      43,   103,   213,    69,    99,   102,    69,   109,   916,   876,
+      30,    68,    43,    66,    67,    68,    69,    68,   218,   219,
+      43,   659,   206,   314,     0,   206,   206,   805,    90,    91,
+      95,    96,    43,    68,   206,    98,   102,   102,    34,    35,
+      36,    37,    98,    63,    64,   102,    42,    43,    44,    45,
+     917,   102,    95,    96,   962,   881,    68,   241,   541,   102,
+     241,   241,   262,     3,     4,   241,   933,   102,   241,   241,
+     101,     0,   241,   594,    70,    71,    72,    73,   101,   905,
+     241,   674,   458,   267,   475,   678,   267,   267,   299,   300,
+     101,   241,   504,   110,   668,   267,   280,   457,   115,   280,
+     280,   285,   408,   287,   285,   285,   287,   287,   280,   285,
+     699,   517,   285,   285,   420,   287,   285,    57,   220,   757,
+     944,   223,   285,    63,   285,   431,    62,   662,    62,    69,
+     314,     0,   234,   314,   314,    69,   336,   102,   429,  1006,
+       3,     4,   314,   301,    69,   532,   409,   971,     3,     4,
+     556,   557,    10,    11,    12,    62,   340,     3,     4,   340,
+     340,    63,    64,   265,   340,   101,     3,   340,   340,   432,
+     354,   340,   356,   354,   354,   356,   356,   102,   354,   340,
+     356,   354,   354,   356,   356,   354,   203,   356,   564,   686,
+     340,   293,   319,   354,    57,   356,   323,   408,   409,   101,
+      63,    64,    57,   563,   354,    63,   356,   567,   568,   420,
+      40,    57,    69,     7,     8,   942,   943,    63,   426,   427,
+      57,    15,    16,    17,   241,     3,    63,   942,   943,    40,
+     942,   943,    62,     3,    64,    69,   447,   448,    69,   942,
+     943,    69,    99,    79,    40,   429,   654,    69,   429,   429,
+      63,    62,   269,   429,    65,    69,   429,   429,    94,   417,
+     429,   758,   638,    33,   422,    99,   429,    98,   429,   729,
+     646,   647,    83,    69,   734,   292,    98,   379,    69,    57,
+     382,   764,    63,    64,    98,    63,    64,    57,    75,   306,
+      63,    78,     3,    63,    64,   397,    90,    91,    62,    10,
+      11,    12,    98,     1,   504,    69,     4,     5,    62,     7,
+       8,   267,    99,    98,   722,    69,   101,    15,    16,    17,
+     101,    80,   533,    57,   280,    95,    96,    38,    39,    63,
+      64,   287,   102,    31,   351,    33,    34,   354,   408,   356,
+      79,   195,    81,   360,   446,   199,    34,    35,    36,    37,
+     420,    63,    63,   744,    42,    43,    44,    45,   314,    40,
+     462,   431,   464,    98,   466,   752,   101,     3,     4,    69,
+     554,    69,   778,   554,    10,    11,    12,    98,   554,   787,
+     101,   554,    70,    71,    72,    73,     1,   870,     3,     4,
+     873,   575,    90,    91,   575,   575,    62,    95,    96,   575,
+     566,    99,   575,   575,   102,    98,   575,   509,   101,    98,
+     512,   566,     3,     4,   575,     6,     7,     8,    69,   644,
+     645,    63,   691,   631,   632,   575,   813,    63,     3,     4,
+      76,   601,    76,    79,    25,    81,  1001,   621,  1003,  1004,
+     621,    98,    88,   100,    88,   621,   616,    93,   621,    93,
+      70,    71,    72,    73,     4,     5,     6,     7,     8,   623,
+     624,    63,    64,   627,   628,    15,    16,    17,    33,    63,
+    1005,   968,   969,   101,   576,    25,    57,    58,    59,    76,
+     691,    31,    79,    80,    81,   781,   782,    98,   699,   700,
+     656,    88,    57,   656,   101,    86,    93,   101,    63,    64,
+     101,   656,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    28,    29,
+     253,   254,   730,   731,   732,   885,    99,   694,   694,   101,
+      95,    96,   698,     8,   910,   942,   943,   102,    63,   694,
+      90,    91,    63,   698,   755,   814,    62,    69,    30,   909,
+      98,   927,   654,    40,   656,     4,     5,   659,     7,     8,
+     768,   769,   728,    69,    50,   728,    15,    16,    17,    98,
+     623,   624,    68,   728,   627,   628,    43,   101,   744,    63,
+      43,   744,    31,   101,   101,   207,     6,     7,     8,   744,
+     101,    33,     9,    98,    33,    15,    16,    17,   100,   766,
+     766,    43,    11,   814,   706,    25,     3,   774,   774,    69,
+      69,   766,    69,   102,    99,    40,    63,    98,    43,   774,
+     722,    63,    64,   101,    63,    64,   728,   101,   101,   625,
+     626,   842,   734,   629,   630,    43,   738,    62,    43,    64,
+      65,    90,    91,   101,   100,   100,   268,   101,   270,   271,
+     101,   101,   274,    95,    96,   757,    95,    96,    83,   281,
+     102,   283,    68,   102,   101,   101,   288,     3,     4,   101,
+      90,    91,    55,    56,    57,    58,    59,   843,   844,    69,
+      99,   303,   882,    98,    98,   787,    99,   309,   843,   844,
+     792,     3,    68,   315,   101,    98,    35,   194,   195,    99,
+      99,    68,   199,   101,   721,    40,    30,    43,    32,    68,
+      34,   911,    36,    99,    38,   881,    40,    63,    42,    63,
+      44,    57,   824,    63,    43,    43,   881,    63,    60,    61,
+      62,    63,    64,    65,   262,    69,    69,   937,    69,   905,
+      19,    99,    66,    99,    68,    40,    70,   101,    72,    69,
+     905,    53,    54,    55,    56,    57,    58,    59,   942,   943,
+     944,   942,   943,   944,   944,    69,   942,   943,   944,   942,
+     943,   944,   944,   790,   876,   944,   793,   794,   946,   276,
+      63,    69,   982,   944,   801,   265,    63,   971,    69,    99,
+     971,   971,    99,    69,    69,   971,   996,    20,   971,   971,
+      99,   423,   971,    99,   101,    69,   973,   973,   101,   826,
+     971,    69,  1012,  1013,    69,   917,    69,   101,   973,    60,
+      61,    62,    63,    64,    65,    64,    82,    84,   450,   101,
+     452,   933,    69,    50,    84,    69,   853,    50,    68,  1023,
+      69,    63,  1023,  1023,    98,   207,   863,  1023,    68,   100,
+    1023,  1023,  1036,    69,  1023,  1036,  1036,    99,   101,   339,
+    1036,    11,  1023,  1036,  1036,   101,    63,  1036,    11,    69,
+     350,    64,    82,   101,    11,  1036,    63,    69,   358,   359,
+     101,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   100,   885,   916,
+      98,   637,   460,   698,  1006,   844,   268,  1012,   270,   271,
+    1036,   408,   409,  1002,   506,   621,    29,   504,   398,   281,
+       7,     8,   251,   420,   251,   692,   288,   407,    15,    16,
+      17,   408,   512,   950,   431,   432,   406,   625,   626,   573,
+     752,   629,   630,   466,   464,   962,    33,   309,   755,   728,
+     572,   276,   657,   315,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+     294,   734,   296,   952,   954,   992,   504,   429,   443,    -1,
+     444,   603,   613,   463,    -1,   607,    -1,    -1,    -1,   611,
+      66,    67,    68,    69,    70,    71,    72,    73,    -1,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    95,    96,
+      -1,    -1,    -1,    -1,    -1,   102,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,   509,
+      -1,    -1,   512,    -1,   514,     6,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    15,    16,    17,    -1,    -1,   671,
+      -1,    -1,   674,   675,    25,    -1,   678,   679,    -1,    -1,
+      -1,   423,    33,    42,    -1,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     452,    -1,    -1,    -1,    -1,   623,   624,   625,   626,   627,
+     628,   629,   630,   583,   584,    -1,    -1,    -1,    -1,    -1,
+      -1,   591,    -1,    -1,   594,    -1,    -1,    -1,    -1,    90,
+      91,    -1,   602,    -1,    95,    96,   606,    -1,    -1,   751,
+      -1,   102,   754,    -1,    -1,    -1,    -1,    -1,     1,   619,
+       3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    15,    16,    17,    -1,   778,   779,   780,    -1,
+      -1,    -1,    25,    -1,    -1,    -1,    -1,    30,    31,    -1,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   659,
+      -1,    -1,    -1,    -1,    -1,    -1,   262,    -1,    -1,    -1,
+      -1,    -1,   672,    -1,    57,    -1,   676,    -1,    -1,    -1,
+      63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
+     572,    -1,   692,    -1,    -1,    -1,   838,    -1,   294,   295,
+     296,   297,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    -1,    95,    96,    97,    -1,    -1,   717,    -1,   102,
+      -1,   603,    -1,    -1,    -1,   607,    -1,    -1,    -1,   611,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       1,    -1,     3,     4,     5,    -1,     7,     8,    -1,    10,
+      11,    12,    -1,    14,    15,    16,    17,   757,   900,    -1,
+     902,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,   623,
+      -1,   625,    -1,   627,    45,   629,    -1,    48,    -1,   671,
+      -1,    -1,    -1,   675,    55,    56,    57,   679,    -1,    60,
+      61,    -1,    63,    -1,    -1,    66,    67,    68,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      -1,   703,   704,    -1,    85,    86,    87,    -1,    -1,    90,
+      91,    -1,    -1,    -1,    95,    96,    -1,    -1,    40,    41,
+      42,   102,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,   858,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   751,
+       1,    -1,   754,     4,     5,     6,     7,     8,    -1,    -1,
+      -1,    -1,    13,    -1,    15,    16,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    -1,   778,   779,   780,    -1,
+      31,    -1,    33,    -1,    -1,    -1,    -1,     1,   504,     3,
+       4,     5,     6,     7,     8,    -1,    10,    11,    12,    -1,
+      14,    15,    16,    17,    18,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,   838,    -1,    -1,    90,
+      91,    55,    56,    57,    95,    96,    60,    61,    -1,    63,
+     101,   102,    66,    67,    68,    69,    -1,    -1,    -1,    -1,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    86,    87,    -1,    -1,    90,    91,    -1,    -1,
+      -1,    95,    96,    -1,    -1,    99,    -1,    -1,   102,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   900,    -1,
+     902,    -1,    -1,  1023,    -1,    -1,    -1,   623,   624,   625,
+     626,   627,   628,   629,   630,     1,  1036,     3,     4,     5,
+       6,     7,     8,    -1,    10,    11,    12,    -1,    14,    15,
+      16,    17,    18,    -1,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      56,    57,    -1,    -1,    60,    61,    -1,    63,    -1,    -1,
+      66,    67,    68,    69,    -1,    -1,    -1,    -1,    74,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
+      86,    87,    -1,    -1,    90,    91,    -1,   723,    -1,    95,
+      96,    -1,    -1,    -1,    -1,     1,   102,     3,     4,     5,
+       6,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    15,
+      16,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      -1,    -1,    -1,    -1,    -1,    31,    -1,    33,    -1,    -1,
+       1,    -1,    -1,     4,     5,     6,     7,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    15,    16,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,
+      31,    -1,    33,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    -1,    90,    91,    -1,    -1,    -1,    95,
+      96,    97,    -1,    99,    -1,    -1,   102,    68,    69,    -1,
+      -1,    -1,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
+      91,    -1,    -1,    -1,    95,    96,    97,    -1,    -1,     1,
+      -1,   102,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,    31,
+       1,    33,     3,     4,     5,     6,     7,     8,    -1,    -1,
+      -1,    -1,    13,    -1,    15,    16,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,
+      31,    -1,    33,    -1,    -1,    -1,     1,    69,    -1,     4,
+       5,     6,     7,     8,    76,    -1,    -1,    -1,    -1,    -1,
+      15,    16,    17,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      25,    -1,    -1,    95,    96,    97,    31,    99,    33,    -1,
+     102,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    -1,    90,
+      91,    -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,
+     101,   102,    -1,     1,    69,    -1,     4,     5,     6,     7,
+       8,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    25,    -1,    -1,
+      95,    96,    97,    31,    99,    33,    -1,   102,     1,    -1,
+      -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,    31,    -1,
+      33,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    -1,    -1,    -1,    95,    96,    97,
+      -1,    -1,    -1,    -1,   102,     1,    69,    -1,     4,     5,
+       6,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    15,
+      16,    17,    -1,    -1,    -1,    -1,    -1,    90,    91,    25,
+      -1,    -1,    95,    96,    97,    31,    -1,    33,     1,   102,
+      -1,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    15,    16,    17,    -1,    -1,     1,    -1,    -1,
+       4,     5,    25,     7,     8,    -1,    -1,    -1,    31,    -1,
+      33,    15,    16,    17,    -1,    -1,    -1,     1,    -1,    -1,
+       4,     5,    -1,     7,     8,    -1,    -1,    31,    -1,    33,
+      34,    15,    16,    17,    90,    91,    -1,    -1,    -1,    95,
+      96,    -1,    -1,    -1,    -1,    -1,   102,    31,    -1,    33,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,   102,
+      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
+      -1,    95,    96,    -1,    -1,    -1,    -1,    -1,   102,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
+      -1,    95,    96,     1,    -1,     3,     4,    -1,   102,    -1,
+      -1,    -1,    10,    11,    12,    -1,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    32,    -1,    34,    -1,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,
+      48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    57,
+      -1,    -1,    60,    61,    62,    63,    64,    -1,    66,    67,
+      68,     1,    -1,     3,     4,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    12,    -1,    14,    -1,    -1,    85,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    99,    32,   101,    34,    -1,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,
+      60,    61,    62,    63,    64,    -1,    66,    67,    68,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    86,    87,    -1,    -1,
+      -1,     3,     4,     5,     6,     7,     8,    -1,    10,    11,
+      12,   101,    14,    15,    16,    17,    18,    -1,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,
+      -1,    63,    -1,    -1,    66,    67,    68,    69,    -1,    -1,
+      -1,    -1,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    85,    86,    87,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
+     102,     3,     4,     5,     6,     7,     8,    -1,    10,    11,
+      12,    -1,    14,    15,    16,    17,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,    31,
+      32,    33,    34,    -1,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,
+      -1,    63,    -1,    -1,    66,    67,    -1,    -1,     3,     4,
+       5,    -1,     7,     8,    -1,    10,    11,    12,    -1,    14,
+      15,    16,    17,    85,    86,    87,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    95,    96,    -1,    31,    32,    33,    34,
+     102,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    -1,    60,    61,    -1,    63,    -1,
+      -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      85,    86,    87,    -1,    -1,    90,    91,    -1,    -1,    -1,
+      95,    96,     1,    -1,     3,     4,    -1,   102,    -1,    -1,
+      -1,    10,    11,    12,    -1,    14,    -1,    -1,    -1,    18,
+      -1,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    -1,    32,    -1,    34,    -1,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    57,    -1,
+      -1,    60,    61,    -1,    63,    -1,    -1,    66,    67,    68,
+      69,     1,    -1,     3,     4,    74,    -1,    -1,    -1,    -1,
+      10,    11,    12,    -1,    14,    -1,    85,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      99,    -1,    32,    -1,    34,    -1,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    55,    56,    57,    -1,    -1,
+      60,    61,    62,    63,    64,    -1,    66,    67,    68,     4,
+       5,     6,     7,     8,    -1,    -1,    -1,    -1,    13,    -1,
+      15,    16,    17,    -1,    -1,    85,    86,    87,    -1,    -1,
+      25,     4,     5,     6,     7,     8,    31,    -1,    33,    99,
+      -1,    -1,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,
+       4,     5,    25,     7,     8,    -1,    -1,    -1,    31,    -1,
+      33,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    33,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,
+      95,    96,    -1,    -1,    -1,    -1,    -1,   102,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    -1,    95,    96,     3,    -1,    -1,    -1,    -1,   102,
+      -1,    10,    11,    12,    -1,    14,    90,    91,    -1,    -1,
+      -1,    95,    96,    -1,    -1,    -1,    -1,    -1,   102,    -1,
+      -1,    -1,    -1,    32,    -1,    34,    -1,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    57,    -1,
+      -1,    60,    61,    -1,    63,    -1,    -1,    66,    67,    -1,
+      -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
+      42,   100,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     1,    -1,
+       3,     4,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+      -1,    14,    -1,    -1,    -1,    18,    -1,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    -1,    32,
+      -1,    34,    -1,    36,    37,    38,    39,    -1,   100,    -1,
+      -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,
+      -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,    -1,
+      63,    -1,    -1,    66,    67,    68,    69,    -1,    -1,    -1,
+      -1,    74,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
+      -1,    -1,    85,    86,    87,    10,    11,    12,    -1,    14,
+      -1,    -1,    -1,    18,    -1,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    -1,    32,    -1,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    -1,    60,    61,    -1,    63,    -1,
+      -1,    66,    67,    68,    69,    -1,     1,    -1,     3,    74,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    -1,    14,
+      85,    86,    87,    18,    -1,    20,    21,    22,    23,    -1,
+      -1,    26,    27,    28,    29,    30,    -1,    32,    -1,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    -1,    60,    61,     1,    63,     3,
+      -1,    66,    67,    68,    69,    -1,    10,    11,    12,    74,
+      14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      85,    86,    87,    -1,    -1,    -1,    -1,    -1,    32,    -1,
+      34,    -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    55,    56,    57,    -1,    -1,    60,    61,    62,    63,
+      64,    -1,    66,    67,    68,     1,    -1,     3,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    -1,    14,    -1,
+      -1,    85,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    32,    -1,    34,    -1,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      56,    57,    -1,    -1,    60,    61,     1,    63,     3,    -1,
+      66,    67,    68,    -1,    -1,    10,    11,    12,    -1,    14,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    32,    -1,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    -1,    60,    61,     1,    63,     3,
+      -1,    66,    67,    68,    -1,    -1,    10,    11,    12,    -1,
+      14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      85,    86,    87,    -1,    -1,    -1,    -1,    -1,    32,    -1,
+      34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    55,    56,    57,    -1,    -1,    60,    61,    -1,    63,
+      -1,    -1,    66,    67,    68,    -1,    -1,    -1,    -1,     3,
+       4,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    -1,
+      14,    85,    86,    87,    18,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    -1,    32,    -1,
+      34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    55,    56,    57,    -1,    -1,    60,    61,    -1,    63,
+       3,    -1,    66,    67,    68,    69,    -1,    10,    11,    12,
+      74,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    86,    87,    -1,    -1,    -1,    -1,    -1,    32,
+      -1,    34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,
+      -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,     3,
+      63,    -1,    -1,    66,    67,    68,    10,    11,    12,    -1,
+      14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    86,    87,    -1,    -1,    -1,    32,    -1,
+      34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    55,    56,    57,    -1,    -1,    60,    61,    -1,    63,
+       3,    -1,    66,    67,    -1,    69,    -1,    10,    11,    12,
+      -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    86,    87,    -1,    -1,    -1,    -1,    -1,    32,
+      -1,    34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,
+      -1,    -1,    55,    56,    57,    -1,    -1,    60,    61,     3,
+      63,    -1,    -1,    66,    67,    -1,    10,    11,    12,    -1,
+      14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    86,    87,    -1,    -1,    -1,    32,    -1,
+      34,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    55,    56,    57,    -1,    -1,    60,    61,     3,    63,
+      -1,    -1,    66,    67,    -1,    10,    11,    12,    -1,    14,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    85,    86,    87,    -1,    -1,    -1,    32,    -1,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    -1,    60,    61,     3,    63,    -1,
+      -1,    66,    67,    -1,    10,    11,    12,    -1,    14,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      85,    86,    87,    -1,    -1,    -1,    32,    -1,    34,    -1,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      56,    57,    -1,    -1,    60,    61,    -1,    63,    -1,    -1,
+      66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,    85,
+      86,    87,    40,    41,    42,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    40,    41,    42,    -1,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    95,    96,    -1,
+      -1,    40,    41,    42,   102,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    -1,   100,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint16 yystos[] =
+{
+       0,    70,    71,    72,    73,   104,   169,   170,   105,   106,
+     110,   121,   169,     1,     4,     5,     6,     7,     8,    15,
+      16,    17,    25,    31,    33,    90,    91,    95,    96,   102,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   233,   234,
+     235,   236,   237,   248,   250,   251,   252,   256,   280,   281,
+     286,   351,   361,   362,   364,     1,   208,   209,   210,   211,
+     212,   213,   214,   215,   228,   229,   230,   298,     0,   171,
+       1,    30,    34,    69,    97,   172,   173,   174,   175,   176,
+     205,   224,   225,   231,   360,    76,    88,    93,   122,   125,
+     129,   132,   107,    62,     3,     4,    68,   180,   279,   102,
+      63,    63,    10,    11,    12,    63,   200,   253,   180,   182,
+     253,   257,   233,   234,   248,   361,   362,   233,   234,   361,
+     362,   233,   234,   248,   361,   362,   233,   234,   361,   362,
+     235,   236,   248,   361,   362,   235,   236,   361,   362,   235,
+     236,   248,   361,   362,   235,   236,   361,   362,   233,   234,
+     248,   361,   362,   233,   234,   361,   362,   233,   234,   248,
+     361,   362,   233,   234,   361,   362,   235,   236,   248,   361,
+     362,   235,   236,   361,   362,   235,   236,   248,   361,   362,
+     235,   236,   361,   362,   352,   352,   251,    68,   279,   299,
+     172,    69,    99,    63,   180,     3,    57,    63,   239,   241,
+     245,   278,   205,   205,   205,   172,   182,   182,    79,    81,
+      80,   108,   180,   285,   249,   279,     3,    10,    14,    32,
+      36,    37,    38,    39,    45,    48,    55,    56,    57,    60,
+      61,    63,    66,    67,    85,    86,    87,   183,   184,   186,
+     187,   188,   189,   190,   191,   192,   194,   196,   199,   200,
+     298,   360,    63,   184,     1,    63,     4,    57,    63,    64,
+     277,   278,   300,   301,   302,   303,   304,   306,   308,   309,
+      57,   278,   300,   302,   289,   290,   249,    57,    63,   300,
+     302,   184,    40,    62,   208,   209,   210,   211,   229,   232,
+     247,   250,    69,    98,    30,    63,    64,   118,   177,   242,
+     305,   307,   309,     4,    57,    63,   238,   240,   243,   275,
+     276,   278,   239,   278,    69,   111,   130,   182,   182,   109,
+     180,     1,   180,   296,   297,    68,   102,   256,   249,    63,
+      63,   180,   181,   192,     1,   184,   197,   298,   192,   101,
+      98,    63,   196,   199,    63,   189,    63,   189,    40,    41,
+      42,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,   101,   192,    86,   182,   254,   255,   258,
+     361,   362,   364,   101,   101,     1,     3,    62,    64,    68,
+     180,   194,   261,   262,   263,   265,   267,   268,   232,   247,
+     345,   346,   100,   184,   247,   305,   247,   250,    63,   306,
+     232,   247,   250,    99,     1,    69,   228,   229,   291,   360,
+      68,   232,   247,   101,   184,   180,   278,   278,   206,   247,
+      63,   353,   354,   119,    63,   247,    62,   232,   247,    69,
+      98,   177,   242,   305,    69,   177,    50,   113,   249,   123,
+     126,    69,    98,    40,    98,   288,   284,    68,   194,   298,
+     101,   101,    68,   319,   320,   101,   194,   298,   298,   194,
+     194,   184,   195,   194,   194,   194,   194,   194,   194,   194,
+     194,   194,   194,   194,   194,   194,   194,   194,   194,   180,
+     185,   186,   186,   180,    98,   101,    63,   180,   194,   266,
+      43,   101,    98,   287,    40,   268,   265,   277,   302,   303,
+     301,     9,   359,   363,     1,    13,   347,   349,   350,   351,
+     100,   247,   205,   205,    69,   291,   282,    69,    69,   101,
+     243,   275,    11,   359,     3,   347,   355,   356,   357,     1,
+     120,   350,   355,    40,   178,   180,   276,   276,   206,   247,
+       3,   114,   115,   116,   249,   131,    63,   133,   133,   180,
+     194,   297,    99,   296,   283,    98,    98,   314,   101,    68,
+     192,   101,   101,    43,    43,   101,   100,   255,   101,     3,
+     185,    13,   100,   261,   264,   263,   265,   101,   101,   101,
+      69,    98,    43,   275,   292,   294,    43,   278,   293,   295,
+     289,   242,   101,    98,   101,   100,    98,   100,   359,   246,
+     201,   202,   203,   208,   209,   212,   213,   216,   217,   220,
+     221,   226,   227,   101,   243,    40,    51,    98,   249,   112,
+      68,   134,   135,   136,   224,   225,   249,   249,   247,   288,
+     289,   298,   180,   198,    35,    99,   315,   316,   317,   193,
+     194,   194,    98,   101,   101,   194,    99,   265,   348,    13,
+     351,   194,    43,   247,    98,   194,    43,   247,    98,    99,
+     247,   357,     1,    68,   194,   259,   179,    13,   203,   205,
+      69,   205,   244,   115,    68,   137,   138,   101,    98,   352,
+     352,   124,   127,    99,    99,   101,    62,   101,   181,   358,
+       1,     4,    18,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    69,    74,   181,   184,   204,   207,
+     224,   225,   231,   310,   311,   313,   320,   321,   322,   323,
+     326,   327,   330,   338,   360,   317,   261,   186,   100,   347,
+     247,   194,   206,   247,   194,   206,   247,   260,     1,   318,
+     320,    69,   238,   239,   278,   259,   117,   174,   224,   225,
+      99,    75,    78,   139,   140,   141,   143,   136,   276,   278,
+     278,    68,    68,   247,   247,   180,    69,    98,    69,    99,
+      63,   332,   324,    63,    63,   194,    43,    69,    69,    69,
+     184,    57,   181,   339,   362,   328,    43,    69,   207,   310,
+     312,     1,   313,   205,   205,   205,    99,    25,   313,   326,
+      19,     1,   325,   330,   338,     1,    63,   207,    99,   101,
+     247,   294,   247,   295,   261,   320,    69,    69,   242,    99,
+     174,   205,   205,   142,   144,   174,   247,   247,   247,   137,
+     137,   181,   184,    63,   325,   184,   340,   184,    13,    43,
+      69,   184,    69,    63,     1,   329,   330,    99,   238,   269,
+     275,   239,   272,   278,    69,     1,   331,   325,   184,    99,
+     247,    68,    76,   145,   147,   148,   149,   174,   145,    99,
+      99,   101,   184,    20,    69,   101,   194,    69,   184,    69,
+     242,    69,   242,   325,   101,   146,   147,   182,    64,   118,
+     249,    82,    84,   167,   128,   101,   334,   337,    43,    43,
+     101,   247,   247,    69,    99,   147,   150,   249,    69,   182,
+     168,    84,   152,   333,   340,   325,    11,    64,   341,   342,
+     343,    69,   270,   273,    50,    69,    68,   153,   325,    69,
+      63,   182,    43,   101,    98,   201,   201,   151,   161,   298,
+     169,    68,   335,   184,   100,   341,    69,   343,   271,   274,
+      51,    98,    99,   162,   340,   101,    11,    43,   101,   320,
+     320,   161,    77,    99,   154,   163,   164,   165,   166,   174,
+     182,   101,    63,    11,   344,    69,    89,   155,   156,   157,
+     182,    40,    62,    65,    83,    64,   336,   184,    98,   101,
+     182,    69,    98,    82,   165,   166,   165,   165,   186,   325,
+     101,    11,    69,    63,   156,   182,    69,    69,    69,   100,
+     158,   159,   160,   161,   194,   101,    98,   160
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+\f
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  /* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+#line 465 "c-parse.y"
+    { ;}
+    break;
+
+  case 3:
+#line 466 "c-parse.y"
+    { ;}
+    break;
+
+  case 4:
+#line 467 "c-parse.y"
+    {
+           declaration cdecls = declaration_reverse((yyvsp[(2) - (2)].u.decl)); 
+           parse_tree = CAST(node, cdecls); ;}
+    break;
+
+  case 5:
+#line 470 "c-parse.y"
+    { parse_tree = NULL; ;}
+    break;
+
+  case 6:
+#line 471 "c-parse.y"
+    { parse_tree = CAST(node, (yyvsp[(2) - (2)].u.decl)); ;}
+    break;
+
+  case 7:
+#line 472 "c-parse.y"
+    { parse_tree = CAST(node, make_error_decl()); ;}
+    break;
+
+  case 8:
+#line 473 "c-parse.y"
+    { parse_tree = CAST(node, (yyvsp[(2) - (2)].u.type)); ;}
+    break;
+
+  case 9:
+#line 474 "c-parse.y"
+    { parse_tree = NULL; ;}
+    break;
+
+  case 10:
+#line 478 "c-parse.y"
+    { end_macro_saving(); ;}
+    break;
+
+  case 12:
+#line 480 "c-parse.y"
+    { 
+                   end_macro_saving(); 
+                   add_cdecls(declaration_reverse((yyvsp[(1) - (1)].u.decl)));
+                 ;}
+    break;
+
+  case 15:
+#line 492 "c-parse.y"
+    { ;}
+    break;
+
+  case 16:
+#line 497 "c-parse.y"
+    { require_c((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id.data); ;}
+    break;
+
+  case 17:
+#line 499 "c-parse.y"
+    { require_c((yyvsp[(3) - (3)].idtoken).location, (yyvsp[(3) - (3)].idtoken).id.data); ;}
+    break;
+
+  case 18:
+#line 505 "c-parse.y"
+    { 
+                 start_nesc_entity(l_interface, (yyvsp[(3) - (3)].u.word));
+               ;}
+    break;
+
+  case 19:
+#line 509 "c-parse.y"
+    {
+                 handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container);
+               ;}
+    break;
+
+  case 20:
+#line 513 "c-parse.y"
+    {
+                 interface intf = new_interface(pr, (yyvsp[(2) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.word), (yyvsp[(6) - (10)].u.attribute), declaration_reverse((yyvsp[(9) - (10)].u.decl)));
+
+                 set_nesc_parse_tree(intf);
+
+                 if (intf->cdecl->abstract)
+                   poplevel();
+               ;}
+    break;
+
+  case 21:
+#line 524 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 22:
+#line 526 "c-parse.y"
+    {
+                 nesc_declaration intf = current.container;
+
+                 intf->parameters = (yyvsp[(2) - (3)].u.decl);
+                 intf->parameter_env = current.env;
+                 (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl);
+
+                 /* Template intfs need a new level for the actual intf */
+                 pushlevel(FALSE);
+                 /* The interface env counts as global */
+                 current.env->global_level = TRUE;
+                 intf->env = current.env;
+                 intf->abstract = TRUE;
+               ;}
+    break;
+
+  case 24:
+#line 545 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;}
+    break;
+
+  case 25:
+#line 550 "c-parse.y"
+    { (yyval.u.decl) = declare_type_parameter((yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id, (yyvsp[(2) - (2)].u.attribute), NULL); ;}
+    break;
+
+  case 26:
+#line 554 "c-parse.y"
+    { (yyval.idtoken) = (yyvsp[(1) - (1)].idtoken); ;}
+    break;
+
+  case 27:
+#line 558 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 29:
+#line 562 "c-parse.y"
+    { pushlevel(TRUE); ;}
+    break;
+
+  case 30:
+#line 563 "c-parse.y"
+    { /* poplevel done in users of parameters */ (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); ;}
+    break;
+
+  case 31:
+#line 567 "c-parse.y"
+    {
+                 (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (2)].u.decl));
+                 check_interface_parameter_types((yyval.u.decl)); 
+               ;}
+    break;
+
+  case 32:
+#line 571 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 36:
+#line 582 "c-parse.y"
+    { 
+                 start_nesc_entity(l_component, (yyvsp[(3) - (3)].u.word));
+                 current.container->abstract = (yyvsp[(1) - (3)].abstract); 
+               ;}
+    break;
+
+  case 37:
+#line 587 "c-parse.y"
+    {
+                 handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container);
+               ;}
+    break;
+
+  case 38:
+#line 592 "c-parse.y"
+    {
+                 declaration intfs = 
+                   declaration_chain(declaration_reverse((yyvsp[(9) - (11)].u.decl)), all_tasks);
+                 set_nesc_parse_tree(new_component(pr, (yyvsp[(2) - (11)].u.itoken).location, (yyvsp[(3) - (11)].u.word), (yyvsp[(6) - (11)].u.attribute), (yyvsp[(1) - (11)].abstract), (yyvsp[(5) - (11)].u.decl), intfs, (yyvsp[(11) - (11)].u.impl)));
+               ;}
+    break;
+
+  case 39:
+#line 601 "c-parse.y"
+    { 
+                 start_nesc_entity(l_component, (yyvsp[(3) - (3)].u.word));
+                 current.container->abstract = (yyvsp[(1) - (3)].abstract); 
+                 current.container->configuration = TRUE;
+               ;}
+    break;
+
+  case 40:
+#line 607 "c-parse.y"
+    {
+                 handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container);
+               ;}
+    break;
+
+  case 41:
+#line 611 "c-parse.y"
+    {
+                 set_nesc_ast(new_component(pr, (yyvsp[(2) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.word), (yyvsp[(6) - (10)].u.attribute), (yyvsp[(1) - (10)].abstract), (yyvsp[(5) - (10)].u.decl), declaration_reverse((yyvsp[(9) - (10)].u.decl)), NULL));
+               ;}
+    break;
+
+  case 42:
+#line 615 "c-parse.y"
+    {
+                 set_nesc_impl((yyvsp[(12) - (12)].u.impl));
+               ;}
+    break;
+
+  case 43:
+#line 622 "c-parse.y"
+    { 
+                 start_nesc_entity(l_component, (yyvsp[(2) - (2)].u.word));
+               ;}
+    break;
+
+  case 44:
+#line 626 "c-parse.y"
+    {
+                 handle_nescdecl_attributes((yyvsp[(4) - (4)].u.attribute), current.container);
+               ;}
+    break;
+
+  case 45:
+#line 630 "c-parse.y"
+    { 
+                 binary_component dummy = new_binary_component(pr, (yyvsp[(1) - (8)].u.itoken).location, start_implementation());
+                 component c = new_component(pr, (yyvsp[(1) - (8)].u.itoken).location, (yyvsp[(2) - (8)].u.word), (yyvsp[(4) - (8)].u.attribute), FALSE, NULL, declaration_reverse((yyvsp[(7) - (8)].u.decl)), CAST(implementation, dummy));
+                 set_nesc_parse_tree(c);
+               ;}
+    break;
+
+  case 46:
+#line 637 "c-parse.y"
+    { (yyval.abstract) = TRUE; ;}
+    break;
+
+  case 47:
+#line 638 "c-parse.y"
+    { (yyval.abstract) = FALSE; ;}
+    break;
+
+  case 48:
+#line 643 "c-parse.y"
+    {
+                 if (current.container->abstract)
+                   error("generic components require a parameter list");
+                   /* We don't create the extra environment level for this
+                      generic component as nothing actually requires its 
+                      existence */
+                 (yyval.u.decl) = NULL;
+               ;}
+    break;
+
+  case 49:
+#line 652 "c-parse.y"
+    {
+                 nesc_declaration comp = current.container;
+
+                 if (!comp->abstract)
+                   error("only generic components can have a parameter list");
+                 comp->parameters = (yyvsp[(2) - (3)].u.decl);
+                 comp->parameter_env = current.env;
+                 (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl);
+
+                 /* generic components need a new level for the 
+                    specification */
+                 pushlevel(FALSE);
+                 current.env->global_level = TRUE;
+                 comp->env = current.env;
+               ;}
+    break;
+
+  case 50:
+#line 670 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 53:
+#line 677 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;}
+    break;
+
+  case 54:
+#line 686 "c-parse.y"
+    { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 55:
+#line 688 "c-parse.y"
+    { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 56:
+#line 690 "c-parse.y"
+    { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 57:
+#line 692 "c-parse.y"
+    { (yyval.u.decl) = declare_template_parameter(NULL, (yyvsp[(1) - (2)].u.telement), NULL); ;}
+    break;
+
+  case 58:
+#line 697 "c-parse.y"
+    { current.spec_section = spec_normal; ;}
+    break;
+
+  case 59:
+#line 702 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 60:
+#line 703 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 63:
+#line 709 "c-parse.y"
+    { current.spec_section = spec_normal; ;}
+    break;
+
+  case 64:
+#line 709 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); ;}
+    break;
+
+  case 65:
+#line 713 "c-parse.y"
+    { current.spec_section = spec_uses; ;}
+    break;
+
+  case 66:
+#line 715 "c-parse.y"
+    { (yyval.u.decl) = CAST(declaration, new_rp_interface(pr, (yyvsp[(1) - (3)].u.itoken).location, TRUE, declaration_reverse((yyvsp[(3) - (3)].u.decl)))); ;}
+    break;
+
+  case 67:
+#line 718 "c-parse.y"
+    { current.spec_section = spec_provides; ;}
+    break;
+
+  case 68:
+#line 720 "c-parse.y"
+    { (yyval.u.decl) = CAST(declaration, new_rp_interface(pr, (yyvsp[(1) - (3)].u.itoken).location, FALSE, declaration_reverse((yyvsp[(3) - (3)].u.decl)))); ;}
+    break;
+
+  case 70:
+#line 724 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl); ;}
+    break;
+
+  case 71:
+#line 729 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 74:
+#line 736 "c-parse.y"
+    {
+                 declare_interface_ref((yyvsp[(1) - (3)].u.iref), NULL, current.env, (yyvsp[(2) - (3)].u.attribute));
+                 (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (3)].u.iref));
+               ;}
+    break;
+
+  case 75:
+#line 741 "c-parse.y"
+    { 
+                 (yyvsp[(1) - (4)].u.iref)->gparms = (yyvsp[(2) - (4)].u.decl);
+                 poplevel();
+                 declare_interface_ref((yyvsp[(1) - (4)].u.iref), (yyvsp[(2) - (4)].u.decl), current.env, (yyvsp[(3) - (4)].u.attribute));
+                 (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (4)].u.iref));
+               ;}
+    break;
+
+  case 77:
+#line 751 "c-parse.y"
+    { (yyval.u.iref) = (yyvsp[(1) - (3)].u.iref); (yyval.u.iref)->word2 = (yyvsp[(3) - (3)].u.word); ;}
+    break;
+
+  case 78:
+#line 756 "c-parse.y"
+    { 
+                 preload(l_interface, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word)->cstring.data);
+                 (yyval.u.iref) = new_interface_ref(pr, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word), NULL, NULL, NULL, NULL, NULL); 
+               ;}
+    break;
+
+  case 79:
+#line 761 "c-parse.y"
+    { 
+                 preload(l_interface, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word)->cstring.data);
+               ;}
+    break;
+
+  case 80:
+#line 765 "c-parse.y"
+    { (yyval.u.iref) = new_interface_ref(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(2) - (6)].u.word), (yyvsp[(5) - (6)].u.expr), NULL, NULL, NULL, NULL); ;}
+    break;
+
+  case 82:
+#line 770 "c-parse.y"
+    { (yyval.u.expr) = expression_chain((yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 83:
+#line 774 "c-parse.y"
+    { (yyval.u.env) = start_implementation(); ;}
+    break;
+
+  case 84:
+#line 778 "c-parse.y"
+    { (yyval.u.impl) = CAST(implementation, new_configuration(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.env), declaration_reverse((yyvsp[(4) - (5)].u.decl))));
+               ;}
+    break;
+
+  case 85:
+#line 782 "c-parse.y"
+    { (yyval.u.cref) = (yyvsp[(2) - (3)].u.cref); ;}
+    break;
+
+  case 86:
+#line 786 "c-parse.y"
+    { (yyval.u.cref) = component_ref_chain((yyvsp[(3) - (3)].u.cref), (yyvsp[(1) - (3)].u.cref)); ;}
+    break;
+
+  case 88:
+#line 791 "c-parse.y"
+    { (yyval.u.cref) = require_component((yyvsp[(1) - (1)].u.cref), NULL); ;}
+    break;
+
+  case 89:
+#line 792 "c-parse.y"
+    { (yyval.u.cref) = require_component((yyvsp[(1) - (3)].u.cref), (yyvsp[(3) - (3)].u.word)); ;}
+    break;
+
+  case 90:
+#line 796 "c-parse.y"
+    { (yyval.u.cref) = new_component_ref(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL,
+                                         FALSE, NULL); ;}
+    break;
+
+  case 91:
+#line 799 "c-parse.y"
+    { (yyval.u.cref) = new_component_ref(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.word), NULL,
+                                         TRUE, (yyvsp[(4) - (5)].u.expr)); ;}
+    break;
+
+  case 92:
+#line 804 "c-parse.y"
+    { (yyval.u.expr) = NULL; ;}
+    break;
+
+  case 95:
+#line 810 "c-parse.y"
+    { (yyval.u.expr) = expression_chain((yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 96:
+#line 815 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); (yyval.u.expr)->type = default_conversion_for_assignment((yyval.u.expr)); ;}
+    break;
+
+  case 98:
+#line 820 "c-parse.y"
+    { (yyval.u.expr) = make_type_argument((yyvsp[(1) - (1)].u.type)); ;}
+    break;
+
+  case 99:
+#line 824 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 100:
+#line 825 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 101:
+#line 829 "c-parse.y"
+    { (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (1)].u.conn)); ;}
+    break;
+
+  case 103:
+#line 831 "c-parse.y"
+    { (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (1)].u.cref)); ;}
+    break;
+
+  case 104:
+#line 836 "c-parse.y"
+    { (yyval.u.conn) = CAST(connection, new_eq_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.ep), (yyvsp[(3) - (4)].u.ep))); ;}
+    break;
+
+  case 105:
+#line 838 "c-parse.y"
+    { (yyval.u.conn) = CAST(connection, new_rp_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.ep), (yyvsp[(1) - (4)].u.ep))); ;}
+    break;
+
+  case 106:
+#line 840 "c-parse.y"
+    { (yyval.u.conn) = CAST(connection, new_rp_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.ep), (yyvsp[(3) - (4)].u.ep))); ;}
+    break;
+
+  case 107:
+#line 845 "c-parse.y"
+    { (yyval.u.ep) = (yyvsp[(1) - (3)].u.ep);
+                 (yyval.u.ep)->ids = parameterised_identifier_chain((yyval.u.ep)->ids, (yyvsp[(3) - (3)].u.pid));
+               ;}
+    break;
+
+  case 108:
+#line 849 "c-parse.y"
+    { (yyval.u.ep) = new_endpoint(parse_region, (yyvsp[(1) - (1)].u.pid)->location, (yyvsp[(1) - (1)].u.pid)); ;}
+    break;
+
+  case 109:
+#line 854 "c-parse.y"
+    { (yyval.u.pid) = new_parameterised_identifier(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL); ;}
+    break;
+
+  case 110:
+#line 856 "c-parse.y"
+    { (yyval.u.pid) = new_parameterised_identifier(pr, (yyvsp[(1) - (4)].u.word)->location, (yyvsp[(1) - (4)].u.word), (yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 111:
+#line 859 "c-parse.y"
+    { (yyval.u.env) = start_implementation(); all_tasks = NULL; ;}
+    break;
+
+  case 112:
+#line 860 "c-parse.y"
+    { 
+                 (yyval.u.impl) = CAST(implementation, new_module(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.env), declaration_reverse((yyvsp[(4) - (5)].u.decl)))); 
+               ;}
+    break;
+
+  case 113:
+#line 869 "c-parse.y"
+    { (yyval.u.telement) = NULL; ;}
+    break;
+
+  case 114:
+#line 869 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); ;}
+    break;
+
+  case 115:
+#line 870 "c-parse.y"
+    { (yyval.u.telement) = NULL; ;}
+    break;
+
+  case 116:
+#line 871 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(3) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;}
+    break;
+
+  case 119:
+#line 878 "c-parse.y"
+    { 
+                 (yyval.u.decl) = CAST(declaration, new_asm_decl
+                   (pr, (yyvsp[(1) - (5)].u.itoken).location,
+                    new_asm_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(3) - (5)].u.expr), NULL, NULL, NULL, NULL))); ;}
+    break;
+
+  case 120:
+#line 883 "c-parse.y"
+    { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;}
+    break;
+
+  case 121:
+#line 888 "c-parse.y"
+    { if (pedantic)
+                   error("ANSI C forbids data definition with no type or storage class");
+                 else if (!flag_traditional)
+                   warning("data definition has no type or storage class"); 
+
+                 (yyval.u.decl) = make_data_decl(NULL, (yyvsp[(2) - (3)].u.decl)); ;}
+    break;
+
+  case 123:
+#line 899 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 124:
+#line 901 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 125:
+#line 903 "c-parse.y"
+    { shadow_tag((yyvsp[(1) - (3)].u.telement)); 
+                 (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL); ;}
+    break;
+
+  case 126:
+#line 905 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 127:
+#line 906 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 128:
+#line 908 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C does not allow extra `;' outside of a function");
+                 (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 130:
+#line 916 "c-parse.y"
+    { (yyval.u.decl) = target->keilc_definition((yyvsp[(1) - (5)].idtoken).location, (yyvsp[(1) - (5)].idtoken).id, (yyvsp[(2) - (5)].idtoken).id, (yyvsp[(4) - (5)].u.expr)); ;}
+    break;
+
+  case 131:
+#line 920 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(4) - (4)].u.decl); ;}
+    break;
+
+  case 132:
+#line 921 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(4) - (4)].u.decl); ;}
+    break;
+
+  case 133:
+#line 922 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); ;}
+    break;
+
+  case 134:
+#line 926 "c-parse.y"
+    { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm((yyvsp[(1) - (2)].u.asm_stmt));
+
+                 /* $0 refers to the declarator that precedes fndef2
+                    in fndef (we can't just save it in an action, as that
+                    causes s/r and r/r conflicts) */
+                 if (!start_function(pstate.declspecs, (yyvsp[(0) - (2)].u.declarator), (yyvsp[(2) - (2)].u.attribute), 0))
+                   YYERROR1; 
+               ;}
+    break;
+
+  case 135:
+#line 937 "c-parse.y"
+    { store_parm_decls(declaration_reverse((yyvsp[(4) - (4)].u.decl))); ;}
+    break;
+
+  case 136:
+#line 939 "c-parse.y"
+    { (yyval.u.decl) = finish_function((yyvsp[(6) - (6)].u.stmt));
+                 pop_declspec_stack(); ;}
+    break;
+
+  case 139:
+#line 949 "c-parse.y"
+    { (yyval.u.id_label) = new_id_label(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 140:
+#line 953 "c-parse.y"
+    { (yyval.u.word) = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 141:
+#line 957 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_address_of; ;}
+    break;
+
+  case 142:
+#line 959 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_unary_minus; ;}
+    break;
+
+  case 143:
+#line 961 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_unary_plus; ;}
+    break;
+
+  case 144:
+#line 963 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_preincrement; ;}
+    break;
+
+  case 145:
+#line 965 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_predecrement; ;}
+    break;
+
+  case 146:
+#line 967 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_bitnot; ;}
+    break;
+
+  case 147:
+#line 969 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_not; ;}
+    break;
+
+  case 148:
+#line 971 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_realpart; ;}
+    break;
+
+  case 149:
+#line 973 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_imagpart; ;}
+    break;
+
+  case 150:
+#line 977 "c-parse.y"
+    { if ((yyvsp[(1) - (1)].u.expr)->next)
+                   (yyval.u.expr) = make_comma((yyvsp[(1) - (1)].u.expr)->location, (yyvsp[(1) - (1)].u.expr));
+                 else
+                   (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;}
+    break;
+
+  case 151:
+#line 985 "c-parse.y"
+    { (yyval.u.expr) = NULL; ;}
+    break;
+
+  case 153:
+#line 991 "c-parse.y"
+    { (yyval.u.expr) = expression_reverse((yyvsp[(1) - (1)].u.expr)); ;}
+    break;
+
+  case 154:
+#line 996 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;}
+    break;
+
+  case 155:
+#line 998 "c-parse.y"
+    { (yyval.u.expr) = expression_chain((yyvsp[(3) - (3)].u.expr), (yyvsp[(1) - (3)].u.expr)); ;}
+    break;
+
+  case 156:
+#line 1002 "c-parse.y"
+    { (yyval.u.itoken).i = command_call; ;}
+    break;
+
+  case 157:
+#line 1003 "c-parse.y"
+    { (yyval.u.itoken).i = event_signal; ;}
+    break;
+
+  case 158:
+#line 1004 "c-parse.y"
+    { (yyval.u.itoken).i = post_task; ;}
+    break;
+
+  case 160:
+#line 1010 "c-parse.y"
+    {
+                 function_call fc = CAST(function_call, (yyvsp[(2) - (2)].u.expr));
+                 type calltype = fc->arg1->type;
+                 bool noerror = fc->type != error_type;
+                 
+                 (yyval.u.expr) = (yyvsp[(2) - (2)].u.expr);
+                 fc->call_kind = (yyvsp[(1) - (2)].u.itoken).i;
+                 switch ((yyvsp[(1) - (2)].u.itoken).i)
+                   {
+                   case command_call:
+                     if (noerror && !type_command(calltype))
+                       error("only commands can be called");
+                     break;
+                   case event_signal:
+                     if (noerror && !type_event(calltype))
+                       error("only events can be signaled");
+                     break;
+                   case post_task:
+                     fc->type = unsigned_char_type;
+                     if (noerror)
+                       {
+                         if (!type_task(calltype))
+                           error("only tasks can be posted");
+                         else if (flag_use_scheduler)
+                           /* If requested, replace post/task by references to
+                              an interface */
+                           handle_post(fc);
+                       }
+                     break;
+                   }
+               ;}
+    break;
+
+  case 161:
+#line 1042 "c-parse.y"
+    { (yyval.u.expr) = make_dereference((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr)); ;}
+    break;
+
+  case 162:
+#line 1045 "c-parse.y"
+    { (yyval.u.expr) = make_extension_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr));
+                 pedantic = (yyvsp[(1) - (2)].u.itoken).i; ;}
+    break;
+
+  case 163:
+#line 1048 "c-parse.y"
+    { (yyval.u.expr) = make_unary((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(2) - (2)].u.expr));
+#if 0
+                 overflow_warning((yyval.u.expr)); 
+#endif
+               ;}
+    break;
+
+  case 164:
+#line 1055 "c-parse.y"
+    {
+                 (yyval.u.expr) = CAST(expression, make_label_address((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.id_label)));
+                 use_label((yyvsp[(2) - (2)].u.id_label));
+               ;}
+    break;
+
+  case 165:
+#line 1060 "c-parse.y"
+    { 
+#if 0
+                 if (TREE_CODE ((yyvsp[(2) - (2)].u.expr)) == COMPONENT_REF
+                     && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[(2) - (2)].u.expr), 1)))
+                   error("`sizeof' applied to a bit-field");
+                 (yyval.u.expr) = c_sizeof (TREE_TYPE ((yyvsp[(2) - (2)].u.expr))); 
+#endif
+                 (yyval.u.expr) = make_sizeof_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr));
+                 pstate.unevaluated_expression--; ;}
+    break;
+
+  case 166:
+#line 1070 "c-parse.y"
+    { (yyval.u.expr) = make_sizeof_type((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type));
+                 pstate.unevaluated_expression--; ;}
+    break;
+
+  case 167:
+#line 1073 "c-parse.y"
+    { (yyval.u.expr) = make_alignof_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr));
+                 pstate.unevaluated_expression--; ;}
+    break;
+
+  case 168:
+#line 1076 "c-parse.y"
+    { (yyval.u.expr) = make_alignof_type((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type)); 
+                 pstate.unevaluated_expression--; ;}
+    break;
+
+  case 169:
+#line 1081 "c-parse.y"
+    { pstate.unevaluated_expression++; (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); ;}
+    break;
+
+  case 170:
+#line 1085 "c-parse.y"
+    { pstate.unevaluated_expression++; (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); ;}
+    break;
+
+  case 172:
+#line 1091 "c-parse.y"
+    { (yyval.u.expr) = make_cast((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(2) - (4)].u.type), (yyvsp[(4) - (4)].u.expr)); ;}
+    break;
+
+  case 173:
+#line 1093 "c-parse.y"
+    { 
+                 start_init(NULL, NULL);
+                 really_start_incremental_init((yyvsp[(2) - (4)].u.type)->type); 
+               ;}
+    break;
+
+  case 174:
+#line 1098 "c-parse.y"
+    { 
+                 expression constructor = make_init_list((yyvsp[(4) - (7)].u.itoken).location, (yyvsp[(6) - (7)].u.expr));
+
+                 finish_init();
+
+                 if (pedantic)
+                   pedwarn("ANSI C forbids constructor expressions");
+
+                 (yyval.u.expr) = make_cast_list((yyvsp[(1) - (7)].u.itoken).location, (yyvsp[(2) - (7)].u.type), constructor);
+               ;}
+    break;
+
+  case 176:
+#line 1113 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_plus, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 177:
+#line 1115 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_minus, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 178:
+#line 1117 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_times, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 179:
+#line 1119 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_divide, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 180:
+#line 1121 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_modulo, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 181:
+#line 1123 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_lshift, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 182:
+#line 1125 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_rshift, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 183:
+#line 1127 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 184:
+#line 1129 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_lt, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 185:
+#line 1131 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_gt, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 186:
+#line 1133 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 187:
+#line 1135 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitand, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 188:
+#line 1137 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitor, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 189:
+#line 1139 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitxor, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 190:
+#line 1141 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_andand, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 191:
+#line 1143 "c-parse.y"
+    { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_oror, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 192:
+#line 1145 "c-parse.y"
+    { (yyval.u.expr) = make_conditional((yyvsp[(2) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.expr), (yyvsp[(3) - (5)].u.expr), (yyvsp[(5) - (5)].u.expr)); ;}
+    break;
+
+  case 193:
+#line 1147 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids omitting the middle term of a ?: expression"); 
+               ;}
+    break;
+
+  case 194:
+#line 1151 "c-parse.y"
+    { (yyval.u.expr) = make_conditional((yyvsp[(2) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.expr), NULL, (yyvsp[(5) - (5)].u.expr)); ;}
+    break;
+
+  case 195:
+#line 1153 "c-parse.y"
+    { (yyval.u.expr) = make_assign((yyvsp[(2) - (3)].u.itoken).location, kind_assign, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 196:
+#line 1155 "c-parse.y"
+    { (yyval.u.expr) = make_assign((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 197:
+#line 1160 "c-parse.y"
+    { 
+                 if (yychar == YYEMPTY)
+                   yychar = YYLEX;
+                 (yyval.u.expr) = make_identifier((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, yychar == '('); 
+               ;}
+    break;
+
+  case 198:
+#line 1165 "c-parse.y"
+    { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.constant)); ;}
+    break;
+
+  case 199:
+#line 1166 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;}
+    break;
+
+  case 200:
+#line 1168 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(2) - (3)].u.expr); (yyval.u.expr)->parens = TRUE; ;}
+    break;
+
+  case 201:
+#line 1170 "c-parse.y"
+    { (yyval.u.expr) = make_error_expr(); ;}
+    break;
+
+  case 202:
+#line 1172 "c-parse.y"
+    { if (current.function_decl == 0)
+                   {
+                     error("braced-group within expression allowed only inside a function");
+                     YYERROR;
+                   }
+                   push_label_level();
+               ;}
+    break;
+
+  case 203:
+#line 1180 "c-parse.y"
+    { 
+                 pop_label_level();
+                 if (pedantic)
+                   pedwarn("ANSI C forbids braced-groups within expressions");
+                 (yyval.u.expr) = make_compound_expr((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.stmt));
+               ;}
+    break;
+
+  case 204:
+#line 1187 "c-parse.y"
+    {
+                 /* Magic functions may rewrite this to something else */
+                 if (is_function_call((yyvsp[(1) - (1)].u.expr)))
+                   {
+                     function_call fc = CAST(function_call, (yyvsp[(1) - (1)].u.expr));
+                     type calltype = fc->arg1->type;
+
+                     if (type_command(calltype))
+                       error("commands must be called with call");
+                     else if (type_event(calltype))
+                       error("events must be signaled with signal");
+                     else if (type_task(calltype))
+                       error("tasks must be posted with post");
+                   }
+
+                 (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr);
+               ;}
+    break;
+
+  case 205:
+#line 1205 "c-parse.y"
+    { (yyval.u.expr) = make_va_arg((yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.expr), (yyvsp[(5) - (6)].u.type)); ;}
+    break;
+
+  case 206:
+#line 1207 "c-parse.y"
+    { (yyval.u.expr) = make_offsetof((yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.type), (yyvsp[(5) - (6)].u.fields)); ;}
+    break;
+
+  case 207:
+#line 1209 "c-parse.y"
+    { (yyval.u.expr) = make_array_ref((yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.expr), (yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 208:
+#line 1211 "c-parse.y"
+    { (yyval.u.expr) = make_field_ref((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].idtoken).id); ;}
+    break;
+
+  case 209:
+#line 1213 "c-parse.y"
+    { (yyval.u.expr) = make_field_ref((yyvsp[(2) - (3)].u.itoken).location, make_dereference((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.expr)),
+                                     (yyvsp[(3) - (3)].idtoken).id); ;}
+    break;
+
+  case 210:
+#line 1216 "c-parse.y"
+    { (yyval.u.expr) = make_postincrement((yyvsp[(2) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.expr)); ;}
+    break;
+
+  case 211:
+#line 1218 "c-parse.y"
+    { (yyval.u.expr) = make_postdecrement((yyvsp[(2) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.expr)); ;}
+    break;
+
+  case 212:
+#line 1222 "c-parse.y"
+    { (yyval.u.fields) = dd_new_list(pr); dd_add_last(pr, (yyval.u.fields), (yyvsp[(1) - (1)].idtoken).id.data); ;}
+    break;
+
+  case 213:
+#line 1223 "c-parse.y"
+    { (yyval.u.fields) = (yyvsp[(1) - (3)].u.fields); dd_add_last(pr, (yyval.u.fields), (yyvsp[(3) - (3)].idtoken).id.data); ;}
+    break;
+
+  case 214:
+#line 1228 "c-parse.y"
+    { (yyval.u.expr) = make_function_call((yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.expr), (yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 215:
+#line 1231 "c-parse.y"
+    { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.string)); ;}
+    break;
+
+  case 216:
+#line 1232 "c-parse.y"
+    { (yyval.u.expr) = make_identifier((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, FALSE); ;}
+    break;
+
+  case 217:
+#line 1236 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 219:
+#line 1240 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C does not permit use of `varargs.h'"); 
+                 (yyval.u.decl) = declaration_chain(CAST(declaration, new_ellipsis_decl(pr, (yyvsp[(2) - (2)].u.itoken).location)), (yyvsp[(1) - (2)].u.decl));
+               ;}
+    break;
+
+  case 221:
+#line 1251 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 222:
+#line 1260 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 223:
+#line 1262 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 224:
+#line 1264 "c-parse.y"
+    { shadow_tag_warned((yyvsp[(1) - (3)].u.telement), 1);
+                 (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL);
+                 pedwarn("empty declaration"); ;}
+    break;
+
+  case 225:
+#line 1268 "c-parse.y"
+    { pedwarn("empty declaration"); 
+                 (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 227:
+#line 1278 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 228:
+#line 1279 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;}
+    break;
+
+  case 229:
+#line 1280 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 230:
+#line 1288 "c-parse.y"
+    { 
+                 push_declspec_stack();
+                 pending_xref_error();
+                 pstate.declspecs = (yyvsp[(0) - (0)].u.telement);
+                 pstate.attributes = NULL;
+               ;}
+    break;
+
+  case 231:
+#line 1300 "c-parse.y"
+    { pstate.attributes = (yyvsp[(1) - (1)].u.attribute); ;}
+    break;
+
+  case 232:
+#line 1305 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 233:
+#line 1307 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;}
+    break;
+
+  case 234:
+#line 1309 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl);
+                 pop_declspec_stack(); ;}
+    break;
+
+  case 235:
+#line 1312 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl);
+                 pop_declspec_stack(); ;}
+    break;
+
+  case 236:
+#line 1315 "c-parse.y"
+    { shadow_tag((yyvsp[(1) - (3)].u.telement));
+                 (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL); ;}
+    break;
+
+  case 237:
+#line 1318 "c-parse.y"
+    { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;}
+    break;
+
+  case 239:
+#line 1375 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 240:
+#line 1377 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 241:
+#line 1382 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 242:
+#line 1387 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 243:
+#line 1389 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 247:
+#line 1400 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 248:
+#line 1402 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 249:
+#line 1404 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 250:
+#line 1406 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 251:
+#line 1408 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 252:
+#line 1410 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 254:
+#line 1416 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 255:
+#line 1418 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 256:
+#line 1420 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 257:
+#line 1422 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 258:
+#line 1424 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 259:
+#line 1429 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 260:
+#line 1431 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 261:
+#line 1433 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 262:
+#line 1435 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 263:
+#line 1437 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 264:
+#line 1439 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 265:
+#line 1444 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 266:
+#line 1446 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 267:
+#line 1448 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 268:
+#line 1450 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 269:
+#line 1452 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 271:
+#line 1458 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 272:
+#line 1460 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 273:
+#line 1462 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 274:
+#line 1464 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 275:
+#line 1466 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 276:
+#line 1468 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 277:
+#line 1473 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 278:
+#line 1478 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 279:
+#line 1480 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 280:
+#line 1482 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 281:
+#line 1484 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 282:
+#line 1486 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 283:
+#line 1488 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 284:
+#line 1493 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 285:
+#line 1498 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 286:
+#line 1500 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 287:
+#line 1502 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 288:
+#line 1504 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 289:
+#line 1506 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 290:
+#line 1508 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 291:
+#line 1510 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 292:
+#line 1512 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 293:
+#line 1514 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 294:
+#line 1516 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 295:
+#line 1521 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 296:
+#line 1523 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 297:
+#line 1525 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 298:
+#line 1527 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 299:
+#line 1529 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 300:
+#line 1534 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 301:
+#line 1536 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 302:
+#line 1538 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 303:
+#line 1540 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 304:
+#line 1542 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 305:
+#line 1544 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 306:
+#line 1546 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 307:
+#line 1548 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 308:
+#line 1550 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 309:
+#line 1552 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 310:
+#line 1557 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 311:
+#line 1559 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 312:
+#line 1561 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 313:
+#line 1563 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 314:
+#line 1565 "c-parse.y"
+    { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 351:
+#line 1632 "c-parse.y"
+    { (yyval.u.telement) = NULL; ;}
+    break;
+
+  case 359:
+#line 1677 "c-parse.y"
+    { /* For a typedef name, record the meaning, not the name.
+                    In case of `foo foo, bar;'.  */
+                 (yyval.u.telement) = CAST(type_element, new_typename(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).decl)); ;}
+    break;
+
+  case 360:
+#line 1681 "c-parse.y"
+    {
+                 /* reference to a typedef from a component. */
+                 (yyval.u.telement) = CAST(type_element, new_component_typeref(pr, (yyvsp[(1) - (3)].idtoken).location, (yyvsp[(3) - (3)].idtoken).decl, (yyvsp[(1) - (3)].idtoken).id)); 
+               ;}
+    break;
+
+  case 361:
+#line 1686 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_typeof_expr(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr))); ;}
+    break;
+
+  case 362:
+#line 1688 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_typeof_type(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type))); ;}
+    break;
+
+  case 363:
+#line 1693 "c-parse.y"
+    { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;}
+    break;
+
+  case 364:
+#line 1697 "c-parse.y"
+    { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;}
+    break;
+
+  case 366:
+#line 1703 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;}
+    break;
+
+  case 367:
+#line 1707 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;}
+    break;
+
+  case 368:
+#line 1709 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;}
+    break;
+
+  case 369:
+#line 1714 "c-parse.y"
+    { (yyval.u.asm_stmt) = NULL; ;}
+    break;
+
+  case 370:
+#line 1716 "c-parse.y"
+    { (yyval.u.asm_stmt) = new_asm_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, CAST(expression, (yyvsp[(3) - (4)].u.string)),
+                                   NULL, NULL, NULL, NULL); ;}
+    break;
+
+  case 371:
+#line 1722 "c-parse.y"
+    { (yyval.u.decl) = start_decl((yyvsp[(1) - (4)].u.declarator), (yyvsp[(2) - (4)].u.asm_stmt), pstate.declspecs, 1,
+                                          prefix_attr((yyvsp[(3) - (4)].u.attribute)));
+                 start_init((yyval.u.decl), NULL); ;}
+    break;
+
+  case 372:
+#line 1727 "c-parse.y"
+    { finish_init();
+                 (yyval.u.decl) = finish_decl((yyvsp[(5) - (6)].u.decl), (yyvsp[(6) - (6)].u.expr)); ;}
+    break;
+
+  case 373:
+#line 1730 "c-parse.y"
+    { declaration d = start_decl((yyvsp[(1) - (3)].u.declarator), (yyvsp[(2) - (3)].u.asm_stmt), pstate.declspecs, 0,
+                                            prefix_attr((yyvsp[(3) - (3)].u.attribute)));
+                 (yyval.u.decl) = finish_decl(d, NULL); ;}
+    break;
+
+  case 374:
+#line 1737 "c-parse.y"
+    { (yyval.u.decl) = start_decl((yyvsp[(1) - (4)].u.declarator), (yyvsp[(2) - (4)].u.asm_stmt), pstate.declspecs, 1,
+                                        prefix_attr((yyvsp[(3) - (4)].u.attribute)));
+                 start_init((yyval.u.decl), NULL); ;}
+    break;
+
+  case 375:
+#line 1742 "c-parse.y"
+    { finish_init();
+                 (yyval.u.decl) = finish_decl((yyvsp[(5) - (6)].u.decl), (yyvsp[(6) - (6)].u.expr)); ;}
+    break;
+
+  case 376:
+#line 1745 "c-parse.y"
+    { declaration d = start_decl((yyvsp[(1) - (3)].u.declarator), (yyvsp[(2) - (3)].u.asm_stmt), pstate.declspecs, 0,
+                                            prefix_attr((yyvsp[(3) - (3)].u.attribute)));
+                 (yyval.u.decl) = finish_decl(d, NULL); ;}
+    break;
+
+  case 377:
+#line 1752 "c-parse.y"
+    { (yyval.u.attribute) = NULL; ;}
+    break;
+
+  case 378:
+#line 1754 "c-parse.y"
+    { (yyval.u.attribute) = attribute_reverse((yyvsp[(1) - (1)].u.attribute)); ;}
+    break;
+
+  case 379:
+#line 1758 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, (yyvsp[(1) - (1)].u.attribute)); ;}
+    break;
+
+  case 380:
+#line 1762 "c-parse.y"
+    { (yyval.u.attribute) = NULL; ;}
+    break;
+
+  case 381:
+#line 1764 "c-parse.y"
+    { (yyval.u.attribute) = attribute_chain((yyvsp[(2) - (2)].u.attribute), (yyvsp[(1) - (2)].u.attribute)); ;}
+    break;
+
+  case 382:
+#line 1769 "c-parse.y"
+    { (yyval.u.attribute) = (yyvsp[(1) - (1)].u.attribute); ;}
+    break;
+
+  case 383:
+#line 1771 "c-parse.y"
+    { (yyval.u.attribute) = attribute_chain((yyvsp[(2) - (2)].u.attribute), (yyvsp[(1) - (2)].u.attribute)); ;}
+    break;
+
+  case 384:
+#line 1776 "c-parse.y"
+    { (yyval.u.attribute) = (yyvsp[(4) - (6)].u.attribute); ;}
+    break;
+
+  case 385:
+#line 1777 "c-parse.y"
+    { (yyval.u.attribute) = CAST(attribute, (yyvsp[(1) - (1)].u.gcc_attribute)); ;}
+    break;
+
+  case 387:
+#line 1783 "c-parse.y"
+    { word w = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id);
+                 (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(1) - (1)].idtoken).location, w, NULL); ;}
+    break;
+
+  case 388:
+#line 1786 "c-parse.y"
+    { word w = new_word(pr, (yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id);
+                 (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(1) - (2)].idtoken).location, w, (yyvsp[(2) - (2)].u.expr)); ;}
+    break;
+
+  case 389:
+#line 1789 "c-parse.y"
+    { word w = new_word(pr, (yyvsp[(2) - (2)].u.expr)->location, str2cstring(pr, "iar_at"));
+                 (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(2) - (2)].u.expr)->location, w, (yyvsp[(2) - (2)].u.expr)); ;}
+    break;
+
+  case 390:
+#line 1794 "c-parse.y"
+    { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.constant)); ;}
+    break;
+
+  case 391:
+#line 1795 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;}
+    break;
+
+  case 392:
+#line 1796 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(2) - (3)].u.expr); ;}
+    break;
+
+  case 393:
+#line 1801 "c-parse.y"
+    { (yyval.u.attribute) = CAST(attribute, (yyvsp[(1) - (1)].u.gcc_attribute)); ;}
+    break;
+
+  case 394:
+#line 1803 "c-parse.y"
+    { (yyval.u.attribute) = attribute_chain((yyvsp[(1) - (3)].u.attribute), CAST(attribute, (yyvsp[(3) - (3)].u.gcc_attribute))); ;}
+    break;
+
+  case 395:
+#line 1808 "c-parse.y"
+    { (yyval.u.gcc_attribute) = NULL; ;}
+    break;
+
+  case 396:
+#line 1810 "c-parse.y"
+    { (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL); ;}
+    break;
+
+  case 397:
+#line 1812 "c-parse.y"
+    { (yyval.u.gcc_attribute) = new_gcc_attribute
+                   (pr, (yyvsp[(1) - (4)].u.word)->location, (yyvsp[(1) - (4)].u.word), make_attr_args((yyvsp[(3) - (4)].idtoken).location, (yyvsp[(3) - (4)].idtoken).id, NULL)); ;}
+    break;
+
+  case 398:
+#line 1815 "c-parse.y"
+    { (yyval.u.gcc_attribute) = new_gcc_attribute
+                   (pr, (yyvsp[(2) - (6)].u.itoken).location, (yyvsp[(1) - (6)].u.word), make_attr_args((yyvsp[(3) - (6)].idtoken).location, (yyvsp[(3) - (6)].idtoken).id, (yyvsp[(5) - (6)].u.expr)));
+               ;}
+    break;
+
+  case 399:
+#line 1819 "c-parse.y"
+    { (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.word), (yyvsp[(3) - (4)].u.expr));
+               ;}
+    break;
+
+  case 400:
+#line 1825 "c-parse.y"
+    { (yyval.u.attribute) = finish_attribute_use((yyvsp[(2) - (5)].u.nesc_attribute), (yyvsp[(4) - (5)].u.expr)); ;}
+    break;
+
+  case 401:
+#line 1827 "c-parse.y"
+    { (yyval.u.attribute) = finish_attribute_use((yyvsp[(2) - (4)].u.nesc_attribute), make_error_expr()); ;}
+    break;
+
+  case 402:
+#line 1832 "c-parse.y"
+    { (yyval.u.nesc_attribute) = start_attribute_use((yyvsp[(1) - (1)].u.word)); ;}
+    break;
+
+  case 404:
+#line 1841 "c-parse.y"
+    { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, rid_name(CAST(rid, (yyvsp[(1) - (1)].u.telement)))); ;}
+    break;
+
+  case 405:
+#line 1843 "c-parse.y"
+    { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, rid_name(CAST(rid, (yyvsp[(1) - (1)].u.telement)))); ;}
+    break;
+
+  case 406:
+#line 1845 "c-parse.y"
+    { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, qualifier_name(CAST(qualifier, (yyvsp[(1) - (1)].u.telement))->id)); ;}
+    break;
+
+  case 407:
+#line 1847 "c-parse.y"
+    { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.itoken).location, "signal"); ;}
+    break;
+
+  case 408:
+#line 1853 "c-parse.y"
+    { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); simple_init((yyval.u.expr)); ;}
+    break;
+
+  case 409:
+#line 1855 "c-parse.y"
+    { really_start_incremental_init(NULL); ;}
+    break;
+
+  case 410:
+#line 1857 "c-parse.y"
+    { (yyval.u.expr) = make_init_list((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 411:
+#line 1859 "c-parse.y"
+    { (yyval.u.expr) = make_error_expr(); ;}
+    break;
+
+  case 412:
+#line 1865 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids empty initializer braces"); 
+                 (yyval.u.expr) = NULL; ;}
+    break;
+
+  case 413:
+#line 1868 "c-parse.y"
+    { (yyval.u.expr) = expression_reverse((yyvsp[(1) - (2)].u.expr)); ;}
+    break;
+
+  case 415:
+#line 1873 "c-parse.y"
+    { (yyval.u.expr) = expression_chain((yyvsp[(3) - (3)].u.expr), (yyvsp[(1) - (3)].u.expr)); ;}
+    break;
+
+  case 416:
+#line 1880 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids specifying subobject to initialize"); 
+                 (yyval.u.expr) = make_init_specific((yyvsp[(1) - (3)].u.designator), (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 417:
+#line 1884 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("obsolete use of designated initializer without `='");
+                 (yyval.u.expr) = make_init_specific((yyvsp[(1) - (2)].u.designator), (yyvsp[(2) - (2)].u.expr)); ;}
+    break;
+
+  case 418:
+#line 1888 "c-parse.y"
+    { (yyval.u.designator) = set_init_label((yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id);
+                 if (pedantic)
+                   pedwarn("obsolete use of designated initializer with `:'"); ;}
+    break;
+
+  case 419:
+#line 1892 "c-parse.y"
+    { (yyval.u.expr) = make_init_specific((yyvsp[(3) - (4)].u.designator), (yyvsp[(4) - (4)].u.expr)); ;}
+    break;
+
+  case 421:
+#line 1898 "c-parse.y"
+    { push_init_level (0); ;}
+    break;
+
+  case 422:
+#line 1900 "c-parse.y"
+    { (yyval.u.expr) = make_init_list((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr)); 
+                 process_init_element(NULL); ;}
+    break;
+
+  case 423:
+#line 1903 "c-parse.y"
+    { process_init_element((yyvsp[(1) - (1)].u.expr)); (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;}
+    break;
+
+  case 424:
+#line 1904 "c-parse.y"
+    { (yyval.u.expr) = make_error_expr(); ;}
+    break;
+
+  case 426:
+#line 1909 "c-parse.y"
+    { (yyval.u.designator) = designator_chain((yyvsp[(1) - (2)].u.designator), (yyvsp[(2) - (2)].u.designator)); ;}
+    break;
+
+  case 427:
+#line 1914 "c-parse.y"
+    { (yyval.u.designator) = set_init_label((yyvsp[(2) - (2)].idtoken).location, (yyvsp[(2) - (2)].idtoken).id); ;}
+    break;
+
+  case 428:
+#line 1919 "c-parse.y"
+    { (yyval.u.designator) = set_init_index((yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.expr), (yyvsp[(4) - (5)].u.expr));
+                 if (pedantic)
+                   pedwarn ("ISO C forbids specifying range of elements to initialize"); ;}
+    break;
+
+  case 429:
+#line 1923 "c-parse.y"
+    { (yyval.u.designator) = set_init_index((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr), NULL); ;}
+    break;
+
+  case 430:
+#line 1928 "c-parse.y"
+    { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm((yyvsp[(2) - (3)].u.asm_stmt));
+
+                 if (!start_function(pstate.declspecs, (yyvsp[(1) - (3)].u.declarator), (yyvsp[(3) - (3)].u.attribute), 1))
+                   {
+                     YYERROR1;
+                   }
+                 ;}
+    break;
+
+  case 431:
+#line 1938 "c-parse.y"
+    { store_parm_decls(declaration_reverse((yyvsp[(3) - (5)].u.attribute))); ;}
+    break;
+
+  case 432:
+#line 1946 "c-parse.y"
+    { (yyval.u.decl) = finish_function((yyvsp[(7) - (7)].u.stmt)); ;}
+    break;
+
+  case 433:
+#line 1951 "c-parse.y"
+    { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm((yyvsp[(2) - (3)].u.asm_stmt));
+
+                 if (!start_function(pstate.declspecs, (yyvsp[(1) - (3)].u.declarator), (yyvsp[(3) - (3)].u.attribute), 1))
+                   {
+                     YYERROR1;
+                   }
+               ;}
+    break;
+
+  case 434:
+#line 1961 "c-parse.y"
+    { store_parm_decls(declaration_reverse((yyvsp[(3) - (5)].u.attribute))); ;}
+    break;
+
+  case 435:
+#line 1969 "c-parse.y"
+    { (yyval.u.decl) = finish_function((yyvsp[(7) - (7)].u.stmt)); ;}
+    break;
+
+  case 438:
+#line 1984 "c-parse.y"
+    { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;}
+    break;
+
+  case 439:
+#line 1986 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;}
+    break;
+
+  case 440:
+#line 1988 "c-parse.y"
+    { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;}
+    break;
+
+  case 441:
+#line 1989 "c-parse.y"
+    { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 442:
+#line 1991 "c-parse.y"
+    {
+                 (yyval.u.declarator) = make_interface_ref_declarator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].idtoken).id);
+               ;}
+    break;
+
+  case 443:
+#line 2002 "c-parse.y"
+    { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;}
+    break;
+
+  case 444:
+#line 2004 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;}
+    break;
+
+  case 445:
+#line 2006 "c-parse.y"
+    { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 446:
+#line 2015 "c-parse.y"
+    { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;}
+    break;
+
+  case 447:
+#line 2017 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;}
+    break;
+
+  case 448:
+#line 2019 "c-parse.y"
+    { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;}
+    break;
+
+  case 449:
+#line 2021 "c-parse.y"
+    { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 450:
+#line 2023 "c-parse.y"
+    {
+                 (yyval.u.declarator) = make_interface_ref_declarator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].idtoken).id);
+               ;}
+    break;
+
+  case 451:
+#line 2029 "c-parse.y"
+    { (yyval.u.word) = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 452:
+#line 2034 "c-parse.y"
+    { (yyval.u.telement) = xref_tag((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.itoken).i, (yyvsp[(2) - (3)].u.word)); 
+                 if ((yyvsp[(3) - (3)].u.attribute)) warning("attributes ignored"); ;}
+    break;
+
+  case 453:
+#line 2037 "c-parse.y"
+    { (yyval.u.telement) = xref_tag((yyvsp[(1) - (3)].u.itoken).location, kind_enum_ref, (yyvsp[(2) - (3)].u.word));
+                 if ((yyvsp[(3) - (3)].u.attribute)) warning("attributes ignored"); ;}
+    break;
+
+  case 454:
+#line 2043 "c-parse.y"
+    { (yyval.u.telement) = start_struct((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.itoken).i, (yyvsp[(2) - (4)].u.word));
+                 /* Start scope of tag before parsing components.  */
+               ;}
+    break;
+
+  case 455:
+#line 2047 "c-parse.y"
+    { (yyval.u.telement) = finish_struct((yyvsp[(5) - (8)].u.telement), (yyvsp[(6) - (8)].u.decl), attribute_chain((yyvsp[(3) - (8)].u.attribute), (yyvsp[(8) - (8)].u.attribute))); ;}
+    break;
+
+  case 456:
+#line 2049 "c-parse.y"
+    { (yyval.u.telement) = start_struct((yyvsp[(1) - (5)].u.itoken).location, kind_attribute_ref, (yyvsp[(3) - (5)].u.word));
+                 /* Start scope of tag before parsing components.  */
+               ;}
+    break;
+
+  case 457:
+#line 2053 "c-parse.y"
+    { (yyval.u.telement) = finish_struct((yyvsp[(6) - (9)].u.telement), (yyvsp[(7) - (9)].u.decl), attribute_chain((yyvsp[(4) - (9)].u.attribute), (yyvsp[(9) - (9)].u.attribute))); ;}
+    break;
+
+  case 458:
+#line 2055 "c-parse.y"
+    { (yyval.u.telement) = finish_struct(start_struct((yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.itoken).i,
+                                                 NULL), (yyvsp[(3) - (5)].u.decl), (yyvsp[(5) - (5)].u.attribute));
+               ;}
+    break;
+
+  case 459:
+#line 2059 "c-parse.y"
+    { (yyval.u.telement) = start_enum((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(2) - (4)].u.word)); ;}
+    break;
+
+  case 460:
+#line 2061 "c-parse.y"
+    { (yyval.u.telement) = finish_enum((yyvsp[(5) - (9)].u.telement), declaration_reverse((yyvsp[(6) - (9)].u.decl)), attribute_chain((yyvsp[(3) - (9)].u.attribute), (yyvsp[(9) - (9)].u.attribute))); ;}
+    break;
+
+  case 461:
+#line 2063 "c-parse.y"
+    { (yyval.u.telement) = start_enum((yyvsp[(1) - (2)].u.itoken).location, NULL); ;}
+    break;
+
+  case 462:
+#line 2065 "c-parse.y"
+    { (yyval.u.telement) = finish_enum((yyvsp[(3) - (7)].u.telement), declaration_reverse((yyvsp[(4) - (7)].u.decl)), (yyvsp[(7) - (7)].u.attribute)); ;}
+    break;
+
+  case 463:
+#line 2069 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_struct_ref; ;}
+    break;
+
+  case 464:
+#line 2070 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_union_ref; ;}
+    break;
+
+  case 465:
+#line 2071 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_nx_struct_ref; ;}
+    break;
+
+  case 466:
+#line 2072 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_nx_union_ref; ;}
+    break;
+
+  case 470:
+#line 2083 "c-parse.y"
+    { if (pedantic) pedwarn("comma at end of enumerator list"); ;}
+    break;
+
+  case 471:
+#line 2088 "c-parse.y"
+    { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;}
+    break;
+
+  case 472:
+#line 2090 "c-parse.y"
+    { (yyval.u.decl) = declaration_reverse(declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)));
+                 pedwarn("no semicolon at end of struct or union"); ;}
+    break;
+
+  case 473:
+#line 2096 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 474:
+#line 2098 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;}
+    break;
+
+  case 475:
+#line 2100 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("extra semicolon in struct or union specified"); 
+                  (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;}
+    break;
+
+  case 476:
+#line 2116 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), declaration_reverse((yyvsp[(3) - (3)].u.decl))); ;}
+    break;
+
+  case 477:
+#line 2118 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ISO C doesn't support unnamed structs/unions");
+
+                 (yyval.u.decl) = make_data_decl((yyvsp[(1) - (2)].u.telement), NULL); ;}
+    break;
+
+  case 478:
+#line 2123 "c-parse.y"
+    { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), declaration_reverse((yyvsp[(3) - (3)].u.decl))); ;}
+    break;
+
+  case 479:
+#line 2125 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids member declarations with no members");
+                 shadow_tag((yyvsp[(1) - (2)].u.telement));
+                 (yyval.u.decl) = make_data_decl((yyvsp[(1) - (2)].u.telement), NULL); ;}
+    break;
+
+  case 480:
+#line 2130 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 481:
+#line 2132 "c-parse.y"
+    { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;}
+    break;
+
+  case 483:
+#line 2138 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;}
+    break;
+
+  case 485:
+#line 2146 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;}
+    break;
+
+  case 486:
+#line 2151 "c-parse.y"
+    { (yyval.u.decl) = make_field((yyvsp[(1) - (2)].u.declarator), NULL, pstate.declspecs,
+                                 prefix_attr((yyvsp[(2) - (2)].u.attribute))); ;}
+    break;
+
+  case 487:
+#line 2154 "c-parse.y"
+    { (yyval.u.decl) = make_field((yyvsp[(1) - (4)].u.declarator), (yyvsp[(3) - (4)].u.expr), pstate.declspecs,
+                                 prefix_attr((yyvsp[(4) - (4)].u.attribute))); ;}
+    break;
+
+  case 488:
+#line 2157 "c-parse.y"
+    { (yyval.u.decl) = make_field(NULL, (yyvsp[(2) - (3)].u.expr), pstate.declspecs,
+                                 prefix_attr((yyvsp[(3) - (3)].u.attribute))); ;}
+    break;
+
+  case 489:
+#line 2163 "c-parse.y"
+    { (yyval.u.decl) = make_field((yyvsp[(1) - (2)].u.declarator), NULL, pstate.declspecs,
+                                 prefix_attr((yyvsp[(2) - (2)].u.attribute))); ;}
+    break;
+
+  case 490:
+#line 2166 "c-parse.y"
+    { (yyval.u.decl) = make_field((yyvsp[(1) - (4)].u.declarator), (yyvsp[(3) - (4)].u.expr), pstate.declspecs,
+                                 prefix_attr((yyvsp[(4) - (4)].u.attribute))); ;}
+    break;
+
+  case 491:
+#line 2169 "c-parse.y"
+    { (yyval.u.decl) = make_field(NULL, (yyvsp[(2) - (3)].u.expr), pstate.declspecs,
+                                 prefix_attr((yyvsp[(3) - (3)].u.attribute))); ;}
+    break;
+
+  case 493:
+#line 2176 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(3) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;}
+    break;
+
+  case 494:
+#line 2178 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 495:
+#line 2184 "c-parse.y"
+    { (yyval.u.decl) = make_enumerator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, NULL); ;}
+    break;
+
+  case 496:
+#line 2186 "c-parse.y"
+    { (yyval.u.decl) = make_enumerator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].u.expr)); ;}
+    break;
+
+  case 497:
+#line 2191 "c-parse.y"
+    { pending_xref_error(); ;}
+    break;
+
+  case 498:
+#line 2193 "c-parse.y"
+    { (yyval.u.type) = make_type((yyvsp[(1) - (3)].u.telement), (yyvsp[(3) - (3)].u.declarator)); ;}
+    break;
+
+  case 499:
+#line 2198 "c-parse.y"
+    { (yyval.u.declarator) = NULL; ;}
+    break;
+
+  case 504:
+#line 2210 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;}
+    break;
+
+  case 505:
+#line 2215 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (2)].u.itoken).location, NULL, (yyvsp[(2) - (2)].u.telement)); ;}
+    break;
+
+  case 506:
+#line 2217 "c-parse.y"
+    { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;}
+    break;
+
+  case 507:
+#line 2222 "c-parse.y"
+    { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;}
+    break;
+
+  case 508:
+#line 2224 "c-parse.y"
+    { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;}
+    break;
+
+  case 509:
+#line 2226 "c-parse.y"
+    { (yyval.u.declarator) = finish_array_or_fn_declarator(NULL, (yyvsp[(1) - (1)].u.nested)); ;}
+    break;
+
+  case 514:
+#line 2241 "c-parse.y"
+    { (yyval.u.nested) = CAST(nested_declarator,
+                   new_function_declarator(pr, (yyvsp[(2) - (4)].u.itoken).location, NULL, (yyvsp[(3) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl), (yyvsp[(4) - (4)].u.telement), NULL)); ;}
+    break;
+
+  case 515:
+#line 2244 "c-parse.y"
+    { (yyval.u.nested) = CAST(nested_declarator,
+                   new_function_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.decl), NULL, (yyvsp[(3) - (3)].u.telement), NULL)); ;}
+    break;
+
+  case 516:
+#line 2250 "c-parse.y"
+    { (yyval.u.nested) = CAST(nested_declarator,
+                   new_function_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.decl), NULL, (yyvsp[(3) - (3)].u.telement), NULL)); ;}
+    break;
+
+  case 517:
+#line 2256 "c-parse.y"
+    { (yyval.u.nested) = CAST(nested_declarator, new_array_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.expr))); ;}
+    break;
+
+  case 518:
+#line 2258 "c-parse.y"
+    { (yyval.u.nested) = CAST(nested_declarator, new_array_declarator(pr, (yyvsp[(1) - (2)].u.itoken).location, NULL, NULL)); ;}
+    break;
+
+  case 519:
+#line 2267 "c-parse.y"
+    {
+                 if (pedantic && (yyvsp[(1) - (1)].u.istmt).i)
+                   pedwarn("ANSI C forbids label at end of compound statement");
+                 /* Add an empty statement to last label if stand-alone */
+                 if ((yyvsp[(1) - (1)].u.istmt).i)
+                   {
+                     statement last_label = last_statement((yyvsp[(1) - (1)].u.istmt).stmt);
+
+                     chain_with_labels(last_label, CAST(statement, new_empty_stmt(pr, last_label->location)));
+                   }
+                 (yyval.u.stmt) = (yyvsp[(1) - (1)].u.istmt).stmt;
+               ;}
+    break;
+
+  case 521:
+#line 2284 "c-parse.y"
+    { (yyval.u.istmt).i = (yyvsp[(2) - (2)].u.istmt).i; (yyval.u.istmt).stmt = chain_with_labels((yyvsp[(1) - (2)].u.istmt).stmt, (yyvsp[(2) - (2)].u.istmt).stmt); ;}
+    break;
+
+  case 522:
+#line 2286 "c-parse.y"
+    { (yyval.u.istmt).i = 0; (yyval.u.istmt).stmt = make_error_stmt(); ;}
+    break;
+
+  case 523:
+#line 2290 "c-parse.y"
+    { (yyval.u.stmt) = NULL; ;}
+    break;
+
+  case 526:
+#line 2299 "c-parse.y"
+    { pushlevel(FALSE); ;}
+    break;
+
+  case 527:
+#line 2305 "c-parse.y"
+    { (yyval.u.id_label) = NULL; ;}
+    break;
+
+  case 528:
+#line 2307 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids label declarations"); 
+                 (yyval.u.id_label) = id_label_reverse((yyvsp[(1) - (1)].u.id_label)); ;}
+    break;
+
+  case 530:
+#line 2314 "c-parse.y"
+    { (yyval.u.id_label) = id_label_chain((yyvsp[(2) - (2)].u.id_label), (yyvsp[(1) - (2)].u.id_label)); ;}
+    break;
+
+  case 531:
+#line 2319 "c-parse.y"
+    { (yyval.u.id_label) = (yyvsp[(2) - (3)].u.id_label); ;}
+    break;
+
+  case 533:
+#line 2326 "c-parse.y"
+    { (yyval.u.stmt) = (yyvsp[(2) - (2)].u.stmt); ;}
+    break;
+
+  case 534:
+#line 2330 "c-parse.y"
+    { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); compstmt_count++; ;}
+    break;
+
+  case 535:
+#line 2335 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, NULL, NULL, poplevel())); ;}
+    break;
+
+  case 536:
+#line 2337 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.id_label),
+                   declaration_reverse((yyvsp[(4) - (6)].u.decl)), (yyvsp[(5) - (6)].u.stmt), poplevel())); ;}
+    break;
+
+  case 537:
+#line 2340 "c-parse.y"
+    { poplevel();
+                 (yyval.u.stmt) = make_error_stmt(); ;}
+    break;
+
+  case 538:
+#line 2343 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(3) - (5)].u.id_label), NULL, (yyvsp[(4) - (5)].u.stmt), poplevel())); ;}
+    break;
+
+  case 539:
+#line 2349 "c-parse.y"
+    { (yyval.u.istmt).stmt = CAST(statement, new_if_stmt(pr, (yyvsp[(1) - (2)].u.iexpr).expr->location, (yyvsp[(1) - (2)].u.iexpr).expr, (yyvsp[(2) - (2)].u.stmt), NULL));
+                 (yyval.u.istmt).i = (yyvsp[(1) - (2)].u.iexpr).i; ;}
+    break;
+
+  case 540:
+#line 2351 "c-parse.y"
+    { (yyval.u.istmt).i = (yyvsp[(1) - (2)].u.iexpr).i; (yyval.u.istmt).stmt = make_error_stmt(); ;}
+    break;
+
+  case 541:
+#line 2356 "c-parse.y"
+    { (yyval.u.iexpr).i = stmt_count;
+                 (yyval.u.iexpr).expr = (yyvsp[(3) - (4)].u.expr);
+                 check_condition("if", (yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 542:
+#line 2366 "c-parse.y"
+    { stmt_count++;
+                 compstmt_count++; 
+                 (yyval.u.cstmt) = CAST(conditional_stmt,
+                                  new_dowhile_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location, NULL, NULL));
+                push_loop(CAST(statement, (yyval.u.cstmt))); ;}
+    break;
+
+  case 543:
+#line 2372 "c-parse.y"
+    { (yyval.u.cstmt) = (yyvsp[(2) - (4)].u.cstmt); 
+                 (yyval.u.cstmt)->stmt = (yyvsp[(3) - (4)].u.stmt); ;}
+    break;
+
+  case 544:
+#line 2378 "c-parse.y"
+    { (yyval.u.stmt) = (yyvsp[(1) - (1)].u.stmt); ;}
+    break;
+
+  case 545:
+#line 2380 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, new_labeled_stmt(pr, (yyvsp[(1) - (2)].u.label)->location, (yyvsp[(1) - (2)].u.label), (yyvsp[(2) - (2)].u.stmt))); ;}
+    break;
+
+  case 546:
+#line 2385 "c-parse.y"
+    { (yyval.u.istmt).i = 0; (yyval.u.istmt).stmt = (yyvsp[(1) - (1)].u.stmt); ;}
+    break;
+
+  case 547:
+#line 2387 "c-parse.y"
+    { (yyval.u.istmt).i = 1; (yyval.u.istmt).stmt = CAST(statement, new_labeled_stmt(pr, (yyvsp[(1) - (1)].u.label)->location, (yyvsp[(1) - (1)].u.label), NULL)); ;}
+    break;
+
+  case 548:
+#line 2391 "c-parse.y"
+    { 
+                  atomic_stmt last_atomic = current.in_atomic;
+
+                  current.in_atomic = new_atomic_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location, NULL);
+                  current.in_atomic->containing_atomic = last_atomic;
+                ;}
+    break;
+
+  case 549:
+#line 2398 "c-parse.y"
+    {
+                 atomic_stmt this_atomic = current.in_atomic;
+
+                 this_atomic->stmt = (yyvsp[(3) - (3)].u.stmt);
+                 current.in_atomic = this_atomic->containing_atomic;
+                 if (current.in_atomic) /* Ignore nested atomics */
+                   (yyval.u.stmt) = (yyvsp[(3) - (3)].u.stmt);
+                 else
+                   (yyval.u.stmt) = CAST(statement, this_atomic);
+               ;}
+    break;
+
+  case 551:
+#line 2412 "c-parse.y"
+    { (yyval.u.stmt) = make_error_stmt(); ;}
+    break;
+
+  case 552:
+#line 2418 "c-parse.y"
+    { stmt_count++; (yyval.u.stmt) = (yyvsp[(1) - (1)].u.stmt); ;}
+    break;
+
+  case 553:
+#line 2420 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_expression_stmt(pr, (yyvsp[(1) - (2)].u.expr)->location, (yyvsp[(1) - (2)].u.expr))); ;}
+    break;
+
+  case 554:
+#line 2423 "c-parse.y"
+    { (yyvsp[(1) - (2)].u.istmt).i = stmt_count; ;}
+    break;
+
+  case 555:
+#line 2425 "c-parse.y"
+    { if (extra_warnings && stmt_count == (yyvsp[(1) - (4)].u.istmt).i)
+                   warning("empty body in an else-statement");
+                 (yyval.u.stmt) = (yyvsp[(1) - (4)].u.istmt).stmt;
+                 if (is_if_stmt((yyval.u.stmt))) /* could be an error_stmt */
+                   CAST(if_stmt, (yyval.u.stmt))->stmt2 = (yyvsp[(4) - (4)].u.stmt);
+               ;}
+    break;
+
+  case 556:
+#line 2432 "c-parse.y"
+    { /* This warning is here instead of in simple_if, because we
+                    do not want a warning if an empty if is followed by an
+                    else statement.  Increment stmt_count so we don't
+                    give a second error if this is a nested `if'.  */
+                 if (extra_warnings && stmt_count++ == (yyvsp[(1) - (1)].u.istmt).i)
+                   warning_with_location ((yyvsp[(1) - (1)].u.istmt).stmt->location,
+                                          "empty body in an if-statement");
+                 (yyval.u.stmt) = (yyvsp[(1) - (1)].u.istmt).stmt; ;}
+    break;
+
+  case 557:
+#line 2441 "c-parse.y"
+    { (yyval.u.stmt) = make_error_stmt(); ;}
+    break;
+
+  case 558:
+#line 2443 "c-parse.y"
+    { stmt_count++; ;}
+    break;
+
+  case 559:
+#line 2445 "c-parse.y"
+    { check_condition("while", (yyvsp[(4) - (5)].u.expr)); 
+                 (yyval.u.cstmt) = CAST(conditional_stmt,
+                                  new_while_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(4) - (5)].u.expr), NULL));
+                 /* The condition is not "in the loop" for break or continue */
+                 push_loop(CAST(statement, (yyval.u.cstmt))); ;}
+    break;
+
+  case 560:
+#line 2451 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, (yyvsp[(6) - (7)].u.cstmt));
+                 (yyvsp[(6) - (7)].u.cstmt)->stmt = (yyvsp[(7) - (7)].u.stmt); 
+                 pop_loop(); ;}
+    break;
+
+  case 561:
+#line 2455 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, (yyvsp[(1) - (5)].u.cstmt));
+                 (yyvsp[(1) - (5)].u.cstmt)->condition = (yyvsp[(3) - (5)].u.expr);
+                 check_condition("do-while", (yyvsp[(3) - (5)].u.expr)); 
+                 /* Note that pop_loop should be before the expr to be consistent
+                    with while, but GCC is inconsistent. See loop1.c */
+                 pop_loop(); ;}
+    break;
+
+  case 562:
+#line 2462 "c-parse.y"
+    { (yyval.u.stmt) = make_error_stmt(); 
+                 pop_loop(); ;}
+    break;
+
+  case 563:
+#line 2464 "c-parse.y"
+    { stmt_count++; ;}
+    break;
+
+  case 564:
+#line 2465 "c-parse.y"
+    { if ((yyvsp[(6) - (7)].u.expr)) check_condition("for", (yyvsp[(6) - (7)].u.expr)); ;}
+    break;
+
+  case 565:
+#line 2467 "c-parse.y"
+    { (yyval.u.for_stmt) = new_for_stmt(pr, (yyvsp[(1) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.expr), (yyvsp[(6) - (10)].u.expr), (yyvsp[(9) - (10)].u.expr), NULL);
+                 push_loop(CAST(statement, (yyval.u.for_stmt))); ;}
+    break;
+
+  case 566:
+#line 2470 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, (yyvsp[(11) - (12)].u.for_stmt));
+                 (yyvsp[(11) - (12)].u.for_stmt)->stmt = (yyvsp[(12) - (12)].u.stmt); 
+                 pop_loop(); ;}
+    break;
+
+  case 567:
+#line 2474 "c-parse.y"
+    { stmt_count++; check_switch((yyvsp[(3) - (4)].u.expr)); 
+                 (yyval.u.cstmt) = CAST(conditional_stmt,
+                                  new_switch_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr), NULL)); 
+                 push_loop(CAST(statement, (yyval.u.cstmt))); ;}
+    break;
+
+  case 568:
+#line 2479 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, (yyvsp[(5) - (6)].u.cstmt)); 
+                 (yyvsp[(5) - (6)].u.cstmt)->stmt = (yyvsp[(6) - (6)].u.stmt);
+                 pop_loop(); ;}
+    break;
+
+  case 569:
+#line 2483 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_break_stmt(pr, (yyvsp[(1) - (2)].u.itoken).location));
+                 check_break((yyval.u.stmt));
+               ;}
+    break;
+
+  case 570:
+#line 2488 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_continue_stmt(pr, (yyvsp[(1) - (2)].u.itoken).location));
+                 check_continue((yyval.u.stmt));
+               ;}
+    break;
+
+  case 571:
+#line 2493 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = make_void_return((yyvsp[(1) - (2)].u.itoken).location); ;}
+    break;
+
+  case 572:
+#line 2496 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = make_return((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr)); ;}
+    break;
+
+  case 573:
+#line 2499 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(4) - (6)].u.expr), NULL,
+                                              NULL, NULL, (yyvsp[(2) - (6)].u.telement))); ;}
+    break;
+
+  case 574:
+#line 2504 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (8)].u.itoken).location, (yyvsp[(4) - (8)].u.expr), (yyvsp[(6) - (8)].u.asm_operand), NULL,
+                                              NULL, (yyvsp[(2) - (8)].u.telement))); ;}
+    break;
+
+  case 575:
+#line 2509 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (10)].u.itoken).location, (yyvsp[(4) - (10)].u.expr), (yyvsp[(6) - (10)].u.asm_operand), (yyvsp[(8) - (10)].u.asm_operand), NULL, (yyvsp[(2) - (10)].u.telement))); ;}
+    break;
+
+  case 576:
+#line 2514 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (12)].u.itoken).location, (yyvsp[(4) - (12)].u.expr), (yyvsp[(6) - (12)].u.asm_operand), (yyvsp[(8) - (12)].u.asm_operand), (yyvsp[(10) - (12)].u.string), (yyvsp[(2) - (12)].u.telement))); ;}
+    break;
+
+  case 577:
+#line 2517 "c-parse.y"
+    { stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_goto_stmt(pr, (yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.id_label)));
+                 use_label((yyvsp[(2) - (3)].u.id_label));
+               ;}
+    break;
+
+  case 578:
+#line 2522 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids `goto *expr;'");
+                 fail_in_atomic("goto *");
+                 stmt_count++;
+                 (yyval.u.stmt) = CAST(statement, new_computed_goto_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr))); 
+                 check_computed_goto((yyvsp[(3) - (4)].u.expr)); ;}
+    break;
+
+  case 580:
+#line 2529 "c-parse.y"
+    { (yyval.u.stmt) = CAST(statement, new_empty_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location)); ;}
+    break;
+
+  case 581:
+#line 2537 "c-parse.y"
+    { (yyval.u.label) = CAST(label, new_case_label(pr, (yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr), NULL)); 
+                 check_case((yyval.u.label)); ;}
+    break;
+
+  case 582:
+#line 2540 "c-parse.y"
+    { (yyval.u.label) = CAST(label, new_case_label(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.expr), (yyvsp[(4) - (5)].u.expr))); 
+                 check_case((yyval.u.label)); ;}
+    break;
+
+  case 583:
+#line 2543 "c-parse.y"
+    { (yyval.u.label) = CAST(label, new_default_label(pr, (yyvsp[(1) - (2)].u.itoken).location)); 
+                 check_default((yyval.u.label)); ;}
+    break;
+
+  case 584:
+#line 2546 "c-parse.y"
+    { (yyval.u.label) = CAST(label, (yyvsp[(1) - (2)].u.id_label)); 
+                 define_label((yyvsp[(1) - (2)].u.id_label)); ;}
+    break;
+
+  case 585:
+#line 2554 "c-parse.y"
+    { (yyval.u.telement) = NULL; ;}
+    break;
+
+  case 587:
+#line 2560 "c-parse.y"
+    { (yyval.u.expr) = NULL; ;}
+    break;
+
+  case 589:
+#line 2568 "c-parse.y"
+    { (yyval.u.asm_operand) = NULL; ;}
+    break;
+
+  case 592:
+#line 2575 "c-parse.y"
+    { (yyval.u.asm_operand) = asm_operand_chain((yyvsp[(1) - (3)].u.asm_operand), (yyvsp[(3) - (3)].u.asm_operand)); ;}
+    break;
+
+  case 593:
+#line 2580 "c-parse.y"
+    { (yyval.u.asm_operand) = new_asm_operand(pr, (yyvsp[(1) - (4)].u.string)->location, NULL, (yyvsp[(1) - (4)].u.string), (yyvsp[(3) - (4)].u.expr));  ;}
+    break;
+
+  case 594:
+#line 2582 "c-parse.y"
+    { (yyval.u.asm_operand) = new_asm_operand(pr, (yyvsp[(1) - (7)].u.itoken).location, (yyvsp[(2) - (7)].u.word), (yyvsp[(4) - (7)].u.string), (yyvsp[(6) - (7)].u.expr));  ;}
+    break;
+
+  case 595:
+#line 2587 "c-parse.y"
+    { (yyval.u.string) = (yyvsp[(1) - (1)].u.string); ;}
+    break;
+
+  case 596:
+#line 2589 "c-parse.y"
+    { (yyval.u.string) = string_chain((yyvsp[(1) - (3)].u.string), (yyvsp[(3) - (3)].u.string)); ;}
+    break;
+
+  case 597:
+#line 2595 "c-parse.y"
+    { pushlevel(TRUE); ;}
+    break;
+
+  case 598:
+#line 2597 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl);
+                 /* poplevel() is done when building the declarator */
+               ;}
+    break;
+
+  case 599:
+#line 2603 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;}
+    break;
+
+  case 600:
+#line 2605 "c-parse.y"
+    { if (pedantic)
+                   pedwarn("ANSI C forbids forward parameter declarations");
+                 allow_parameter_redeclaration((yyvsp[(1) - (2)].u.decl), TRUE);
+               ;}
+    break;
+
+  case 601:
+#line 2610 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (4)].u.decl), (yyvsp[(4) - (4)].u.decl)); ;}
+    break;
+
+  case 602:
+#line 2612 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl(); ;}
+    break;
+
+  case 603:
+#line 2618 "c-parse.y"
+    { (yyval.u.decl) = NULL; ;}
+    break;
+
+  case 604:
+#line 2620 "c-parse.y"
+    { (yyval.u.decl) = make_error_decl();
+                 /* Gcc used to allow this as an extension.  However, it does
+                    not work for all targets, and thus has been disabled.
+                    Also, since func (...) and func () are indistinguishable,
+                    it caused problems with the code in expand_builtin which
+                    tries to verify that BUILT_IN_NEXT_ARG is being used
+                    correctly.  */
+                 error("ANSI C requires a named argument before `...'");
+               ;}
+    break;
+
+  case 605:
+#line 2630 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;}
+    break;
+
+  case 606:
+#line 2632 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), CAST(declaration, new_ellipsis_decl(pr, (yyvsp[(3) - (3)].u.itoken).location))); ;}
+    break;
+
+  case 608:
+#line 2638 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;}
+    break;
+
+  case 609:
+#line 2645 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 610:
+#line 2647 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 611:
+#line 2649 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (3)].u.declarator), (yyvsp[(1) - (3)].u.telement), NULL); ;}
+    break;
+
+  case 612:
+#line 2651 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 613:
+#line 2653 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 614:
+#line 2655 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (3)].u.declarator), (yyvsp[(1) - (3)].u.telement), NULL); ;}
+    break;
+
+  case 615:
+#line 2657 "c-parse.y"
+    { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;}
+    break;
+
+  case 616:
+#line 2660 "c-parse.y"
+    { pending_xref_error(); ;}
+    break;
+
+  case 617:
+#line 2666 "c-parse.y"
+    { pushlevel(TRUE); ;}
+    break;
+
+  case 618:
+#line 2668 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl);
+                 /* poplevel is done when building the declarator */ ;}
+    break;
+
+  case 620:
+#line 2674 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;}
+    break;
+
+  case 621:
+#line 2680 "c-parse.y"
+    { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;}
+    break;
+
+  case 622:
+#line 2682 "c-parse.y"
+    { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;}
+    break;
+
+  case 623:
+#line 2686 "c-parse.y"
+    { (yyval.u.decl) = declare_old_parameter((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;}
+    break;
+
+  case 624:
+#line 2691 "c-parse.y"
+    { (yyval.u.id_label) = (yyvsp[(1) - (1)].u.id_label); declare_label((yyvsp[(1) - (1)].u.id_label)); ;}
+    break;
+
+  case 625:
+#line 2693 "c-parse.y"
+    { (yyval.u.id_label) = id_label_chain((yyvsp[(3) - (3)].u.id_label), (yyvsp[(1) - (3)].u.id_label));
+                 declare_label((yyvsp[(3) - (3)].u.id_label)); ;}
+    break;
+
+  case 626:
+#line 2699 "c-parse.y"
+    { (yyval.u.telement) = NULL; ;}
+    break;
+
+  case 627:
+#line 2700 "c-parse.y"
+    { (yyval.u.telement) = (yyvsp[(1) - (1)].u.telement); ;}
+    break;
+
+  case 628:
+#line 2705 "c-parse.y"
+    { (yyval.u.itoken).location = (yyvsp[(1) - (1)].u.itoken).location;
+                 (yyval.u.itoken).i = pedantic;
+                 pedantic = 0; ;}
+    break;
+
+  case 629:
+#line 2712 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;}
+    break;
+
+  case 630:
+#line 2714 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, RID_DEFAULT)); ;}
+    break;
+
+  case 631:
+#line 2719 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_qualifier(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;}
+    break;
+
+  case 632:
+#line 2724 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_qualifier(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;}
+    break;
+
+  case 633:
+#line 2729 "c-parse.y"
+    { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;}
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 6419 "c-parse.tab.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 2733 "c-parse.y"
+
+
diff --git a/src/c-parse.tab.h b/src/c-parse.tab.h
new file mode 100644 (file)
index 0000000..bb7c3c8
--- /dev/null
@@ -0,0 +1,207 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     IDENTIFIER = 258,
+     TYPENAME = 259,
+     COMPONENTREF = 260,
+     SCSPEC = 261,
+     TYPESPEC = 262,
+     TYPE_QUAL = 263,
+     FN_QUAL = 264,
+     CONSTANT = 265,
+     STRING = 266,
+     MAGIC_STRING = 267,
+     ELLIPSIS = 268,
+     SIZEOF = 269,
+     ENUM = 270,
+     STRUCT = 271,
+     UNION = 272,
+     IF = 273,
+     ELSE = 274,
+     WHILE = 275,
+     DO = 276,
+     FOR = 277,
+     SWITCH = 278,
+     CASE = 279,
+     DEFAULT = 280,
+     BREAK = 281,
+     CONTINUE = 282,
+     RETURN = 283,
+     GOTO = 284,
+     ASM_KEYWORD = 285,
+     TYPEOF = 286,
+     ALIGNOF = 287,
+     ATTRIBUTE = 288,
+     EXTENSION = 289,
+     LABEL = 290,
+     REALPART = 291,
+     IMAGPART = 292,
+     VA_ARG = 293,
+     OFFSETOF = 294,
+     ASSIGN = 295,
+     OROR = 296,
+     ANDAND = 297,
+     EQCOMPARE = 298,
+     ARITHCOMPARE = 299,
+     RSHIFT = 300,
+     LSHIFT = 301,
+     MINUSMINUS = 302,
+     PLUSPLUS = 303,
+     POINTSAT = 304,
+     DISPATCH_C = 305,
+     DISPATCH_NESC = 306,
+     DISPATCH_PARM = 307,
+     DISPATCH_TYPE = 308,
+     ATOMIC = 309,
+     USES = 310,
+     INTERFACE = 311,
+     COMPONENTS = 312,
+     PROVIDES = 313,
+     MODULE = 314,
+     INCLUDES = 315,
+     CONFIGURATION = 316,
+     AS = 317,
+     TASTNIOP = 318,
+     IMPLEMENTATION = 319,
+     CALL = 320,
+     SIGNAL = 321,
+     POST = 322,
+     GENERIC = 323,
+     NEW = 324,
+     NX_STRUCT = 325,
+     NX_UNION = 326,
+     ABSTRACT = 327,
+     COMPONENT = 328,
+     EXTENDS = 329,
+     TARGET_ATTRIBUTE0 = 330,
+     TARGET_ATTRIBUTE1 = 331,
+     TARGET_DEF = 332
+   };
+#endif
+/* Tokens.  */
+#define IDENTIFIER 258
+#define TYPENAME 259
+#define COMPONENTREF 260
+#define SCSPEC 261
+#define TYPESPEC 262
+#define TYPE_QUAL 263
+#define FN_QUAL 264
+#define CONSTANT 265
+#define STRING 266
+#define MAGIC_STRING 267
+#define ELLIPSIS 268
+#define SIZEOF 269
+#define ENUM 270
+#define STRUCT 271
+#define UNION 272
+#define IF 273
+#define ELSE 274
+#define WHILE 275
+#define DO 276
+#define FOR 277
+#define SWITCH 278
+#define CASE 279
+#define DEFAULT 280
+#define BREAK 281
+#define CONTINUE 282
+#define RETURN 283
+#define GOTO 284
+#define ASM_KEYWORD 285
+#define TYPEOF 286
+#define ALIGNOF 287
+#define ATTRIBUTE 288
+#define EXTENSION 289
+#define LABEL 290
+#define REALPART 291
+#define IMAGPART 292
+#define VA_ARG 293
+#define OFFSETOF 294
+#define ASSIGN 295
+#define OROR 296
+#define ANDAND 297
+#define EQCOMPARE 298
+#define ARITHCOMPARE 299
+#define RSHIFT 300
+#define LSHIFT 301
+#define MINUSMINUS 302
+#define PLUSPLUS 303
+#define POINTSAT 304
+#define DISPATCH_C 305
+#define DISPATCH_NESC 306
+#define DISPATCH_PARM 307
+#define DISPATCH_TYPE 308
+#define ATOMIC 309
+#define USES 310
+#define INTERFACE 311
+#define COMPONENTS 312
+#define PROVIDES 313
+#define MODULE 314
+#define INCLUDES 315
+#define CONFIGURATION 316
+#define AS 317
+#define TASTNIOP 318
+#define IMPLEMENTATION 319
+#define CALL 320
+#define SIGNAL 321
+#define POST 322
+#define GENERIC 323
+#define NEW 324
+#define NX_STRUCT 325
+#define NX_UNION 326
+#define ABSTRACT 327
+#define COMPONENT 328
+#define EXTENDS 329
+#define TARGET_ATTRIBUTE0 330
+#define TARGET_ATTRIBUTE1 331
+#define TARGET_DEF 332
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
diff --git a/src/c-parse.y b/src/c-parse.y
new file mode 100644 (file)
index 0000000..febdc40
--- /dev/null
@@ -0,0 +1,2733 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* This is a version of c-parse.y with two conflicts and supporting the gcc3
+   attribute syntax. It is a partial merge of the gcc 3 grammar */
+
+/* This file defines the grammar of C */
+/* To whomever it may concern: I have heard that such a thing was once
+   written by AT&T, but I have never seen it.  */
+
+%pure_parser
+%expect 12
+
+%{
+#include <stdio.h>
+#include <errno.h>
+#include <setjmp.h>
+
+#include "parser.h"
+#include "c-parse.h"
+#include "c-lex.h"
+#include "c-lex-int.h"
+#include "semantics.h"
+#include "expr.h"
+#include "stmt.h"
+#include "init.h"
+#include "nesc-semantics.h"
+#include "nesc-interface.h"
+#include "nesc-component.h"
+#include "nesc-configuration.h"
+#include "nesc-module.h"
+#include "nesc-env.h"
+#include "nesc-c.h"
+#include "nesc-attributes.h"
+#include "nesc-task.h"
+#include "nesc-cpp.h"
+#include "attributes.h"
+#include "machine.h"
+
+int yyparse(void) deletes;
+
+void yyerror();
+
+/* Like YYERROR but do call yyerror.  */
+#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
+
+/* Cause the `yydebug' variable to be defined.  */
+#define YYDEBUG 1
+%}
+
+%start dispatch
+
+/* All identifiers that are not reserved words
+   and are not declared typedefs in the current block */
+%token IDENTIFIER
+
+/* All identifiers that are declared typedefs in the current block.
+   In some contexts, they are treated just like IDENTIFIER,
+   but they can also serve as typespecs in declarations.  */
+%token TYPENAME
+
+/* An identifier that is declared as a component reference in the
+   current block, and which is going to be used to refer to a typedef
+   from the component via the component-ref '.' identifier syntax
+   (detected in the lexer) */
+%token COMPONENTREF
+
+/* Reserved words that specify storage class.
+   yylval contains an IDENTIFIER_NODE which indicates which one.  */
+%token <u.itoken> SCSPEC
+
+/* Reserved words that specify type.
+   yylval contains an IDENTIFIER_NODE which indicates which one.  */
+%token <u.itoken> TYPESPEC
+
+/* Reserved words that qualify types/functions: "const" or "volatile", 
+   "deletes".
+   yylval contains an IDENTIFIER_NODE which indicates which one.  */
+%token <u.itoken> TYPE_QUAL FN_QUAL
+
+/* Character or numeric constants.
+   yylval is the node for the constant.  */
+%token CONSTANT
+
+/* String constants in raw form. */
+%token STRING MAGIC_STRING
+
+/* "...", used for functions with variable arglists.  */
+%token <u.itoken> ELLIPSIS
+
+/* the reserved words */
+/* SCO include files test "ASM", so use something else. */
+%token <u.itoken> SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
+%token <u.itoken> BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
+%token <u.itoken> ATTRIBUTE EXTENSION LABEL
+%token <u.itoken> REALPART IMAGPART VA_ARG OFFSETOF
+
+/* Add precedence rules to solve dangling else s/r conflict */
+%nonassoc IF
+%nonassoc ELSE
+
+/* Define the operator tokens and their precedences.
+   The value is an integer because, if used, it is the tree code
+   to use in the expression made from the operator.  */
+
+%right <u.itoken> ASSIGN '='
+%right <u.itoken> '?' ':'
+%left <u.itoken> OROR
+%left <u.itoken> ANDAND
+%left <u.itoken> '|'
+%left <u.itoken> '^'
+%left <u.itoken> '&'
+%left <u.itoken> EQCOMPARE
+%left <u.itoken> ARITHCOMPARE '<' '>'
+%left <u.itoken> LSHIFT RSHIFT
+%left <u.itoken> '+' '-'
+%left <u.itoken> '*' '/' '%'
+%right <u.itoken> PLUSPLUS MINUSMINUS
+%left <u.itoken> POINTSAT '.' '(' '['
+
+%type <u.asm_operand> asm_operand asm_operands nonnull_asm_operands
+%type <u.asm_stmt> maybeasm
+%type <u.attribute> maybe_attribute attributes attribute attribute_list
+%type <u.attribute> nesc_attributes nattrib 
+%type <u.gcc_attribute> attrib target_attribute
+%type <u.nesc_attribute> nastart
+%type <u.constant> CONSTANT
+%type <u.decl> datadecl datadecls datadef decl decls extdef extdefs fndef
+%type <u.decl> initdecls initdecls_ notype_initdecls notype_initdecls_ fndef2
+%type <u.decl> nested_function notype_nested_function old_style_parm_decls
+%type <u.decl> initdcl component_decl_list component_decl_list2 component_decl
+%type <u.decl> components component_declarator enumerator enumlist
+%type <u.decl> components_notype component_notype_declarator 
+%type <u.decl> parmlist parmlist_1 parmlist_2 parms parm
+%type <u.decl> parmlist_or_identifiers identifiers notype_initdcl
+%type <u.decl> parmlist_or_identifiers_1 old_parameter just_datadef
+%type <u.declarator> declarator after_type_declarator notype_declarator
+%type <u.declarator> absdcl absdcl1 absdcl1_noea absdcl1_ea direct_absdcl1
+%type <u.declarator> parm_declarator 
+%type <u.nested> array_declarator fn_declarator array_or_fn_declarator
+%type <u.nested> absfn_declarator array_or_absfn_declarator
+%type <u.expr> cast_expr expr expr_no_commas exprlist init initlist_maybe_comma
+%type <u.expr> initlist1 initelt nonnull_exprlist primary string
+%type <u.expr> nonnull_exprlist_ initval restricted_expr
+%type <u.designator> designator_list designator
+%type <u.expr> unary_expr xexpr function_call
+%type <u.expr> generic_type typelist
+%type <u.id_label> id_label maybe_label_decls label_decls label_decl
+%type <u.id_label> identifiers_or_typenames
+%type <idtoken> identifier type_parm
+%type <idtoken> IDENTIFIER TYPENAME MAGIC_STRING COMPONENTREF
+%type <u.iexpr> if_prefix
+%type <u.istmt> stmt_or_labels simple_if stmt_or_label
+%type <u.itoken> unop extension '~' '!' compstmt_start '{' ';'
+%type <u.itoken> sizeof alignof
+%type <u.label> label
+%type <u.stmt> stmts xstmts compstmt_or_error compstmt
+%type <u.stmt> labeled_stmt stmt stmt_or_error atomic_stmt
+%type <u.cstmt> do_stmt_start
+%type <u.string> asm_clobbers STRING
+%type <u.telement> declspecs_nosc_nots_nosa_noea
+%type <u.telement> declspecs_nosc_nots_nosa_ea
+%type <u.telement> declspecs_nosc_nots_sa_noea
+%type <u.telement> declspecs_nosc_nots_sa_ea
+%type <u.telement> declspecs_nosc_ts_nosa_noea
+%type <u.telement> declspecs_nosc_ts_nosa_ea
+%type <u.telement> declspecs_nosc_ts_sa_noea
+%type <u.telement> declspecs_nosc_ts_sa_ea
+%type <u.telement> declspecs_sc_nots_nosa_noea
+%type <u.telement> declspecs_sc_nots_nosa_ea
+%type <u.telement> declspecs_sc_nots_sa_noea
+%type <u.telement> declspecs_sc_nots_sa_ea
+%type <u.telement> declspecs_sc_ts_nosa_noea
+%type <u.telement> declspecs_sc_ts_nosa_ea
+%type <u.telement> declspecs_sc_ts_sa_noea
+%type <u.telement> declspecs_sc_ts_sa_ea
+%type <u.telement> declspecs_ts
+%type <u.telement> declspecs_nots
+%type <u.telement> declspecs_ts_nosa
+%type <u.telement> declspecs_nots_nosa
+%type <u.telement> declspecs_nosc_ts
+%type <u.telement> declspecs_nosc_nots
+%type <u.telement> declspecs_nosc
+%type <u.telement> declspecs
+%type <u.telement> scspec type_qual type_spec eattributes
+%type <u.telement> type_spec_attr type_spec_nonattr
+%type <u.telement> type_spec_nonreserved_nonattr type_spec_reserved_attr
+%type <u.telement> type_spec_reserved_nonattr
+%type <u.telement> structdef structuse
+%type <u.telement> maybe_type_qual maybe_type_quals_attrs fn_qual fn_quals
+%type <u.type> typename
+%type <u.word> idword any_word tag
+%type <u.fields> fieldlist
+%type <u.itoken> structkind
+
+/* the dispatching (fake) tokens */
+%token <u.itoken> DISPATCH_C DISPATCH_NESC DISPATCH_PARM DISPATCH_TYPE
+
+/* nesC reserved words */
+%token <u.itoken> ATOMIC USES INTERFACE COMPONENTS PROVIDES MODULE 
+%token <u.itoken> INCLUDES CONFIGURATION AS TASTNIOP IMPLEMENTATION CALL 
+%token <u.itoken> SIGNAL POST GENERIC NEW NX_STRUCT NX_UNION
+/* words reserved for nesC's future. Some may never be used... */
+%token <u.itoken> ABSTRACT COMPONENT EXTENDS
+%token <idtoken> TARGET_ATTRIBUTE0 TARGET_ATTRIBUTE1 TARGET_DEF
+
+%type <u.itoken> callkind
+%type <u.decl> datadef_list 
+%type <u.decl> parameters parameters1
+%type <u.decl> requires provides requires_or_provides requires_or_provides_list
+%type <u.decl> requires_or_provides_list_
+%type <u.decl> parameterised_interface_list parameterised_interface
+%type <u.decl> parameterised_interfaces 
+%type <u.decl> interface_parms interface_parm_list interface_parm
+%type <u.decl> component_parms 
+%type <u.decl> template_parms template_parmlist template_parm
+%type <u.decl> target_def
+%type <u.iref> interface_ref interface_type
+%type <u.cref> component_ref component_ref2 component_list cuses
+%type <u.conn> connection
+%type <u.decl> configuration_decl configuration_decls
+%type <u.ep> endpoint
+%type <u.pid> parameterised_identifier
+%type <u.impl> iconfiguration imodule
+%type <abstract> generic
+%type <u.expr> generic_arglist generic_arg generic_args
+
+\f
+%{
+/* Region in which to allocate parse structures. Idea: the AST user can set
+   this to different regions at appropriate junctures depending on what's
+   being done with the AST */
+region parse_region;
+/* We'll see this a LOT below */
+#define pr parse_region
+
+/* Number of statements (loosely speaking) and compound statements 
+   seen so far.  */
+static int stmt_count;
+static int compstmt_count;
+  
+#ifdef RC_ADJUST
+static size_t rc_adjust_yystype(void *x, int by) 
+{
+  struct yystype *p = x;
+  RC_ADJUST_PREAMBLE;
+
+  RC_ADJUST(p->u.ptr, by);
+  RC_ADJUST(p->idtoken.location.filename, by);
+  RC_ADJUST(p->idtoken.id.data, by);
+  RC_ADJUST(p->idtoken.decl, by);
+
+  return sizeof *p;
+}
+
+static void rc_update_yystype(struct yystype *old, struct yystype *new)
+{
+  regionid base = regionidof(old);
+
+  RC_UPDATE(base, old->u.ptr, new->u.ptr);
+  RC_UPDATE(base, old->idtoken.location.filename, new->idtoken.location.filename);
+  RC_UPDATE(base, old->idtoken.id.data, new->idtoken.id.data);
+  RC_UPDATE(base, old->idtoken.decl, new->idtoken.decl);
+}
+#endif
+
+/* A stack of declspecs and attributes for use during parsing */
+typedef struct spec_stack *spec_stack;
+struct spec_stack { 
+  type_element parentptr declspecs;
+  attribute parentptr attributes;
+  spec_stack sameregion next;
+};
+
+struct parse_state 
+{
+  /* Stack of saved values of current_declspecs and prefix_attributes.  */
+  /* In an ideal world, we would be able to eliminate most rc ops for
+     declspec_stack and ds_region assignments. Seems tricky though. */
+  spec_stack declspec_stack;
+  region ds_region;
+
+  /* List of types and structure classes of the current declaration.  */
+  type_element declspecs;
+  attribute attributes;
+
+  /* >0 if currently parsing an expression that will not be evaluated (argument
+     to alignof, sizeof. Currently not typeof though that could be considered
+     a bug) */
+  int unevaluated_expression;
+} pstate;
+
+bool unevaluated_expression(void)
+{
+  return pstate.unevaluated_expression != 0;
+}
+
+/* Pop top entry of declspec_stack back into current_declspecs,
+   prefix_attributes */
+static void pop_declspec_stack(void) deletes
+{
+  pstate.declspecs = pstate.declspec_stack->declspecs;
+  pstate.attributes = pstate.declspec_stack->attributes;
+  pstate.declspec_stack = pstate.declspec_stack->next;
+}
+
+static void push_declspec_stack(void)
+{
+  spec_stack news;
+
+  news = ralloc(pstate.ds_region, struct spec_stack);
+  news->declspecs = pstate.declspecs;
+  news->attributes = pstate.attributes;
+  news->next = pstate.declspec_stack;
+  pstate.declspec_stack = news;
+}
+
+static node parse_tree;
+
+node parse(void) deletes
+{
+  int result, old_errorcount = errorcount;
+  struct parse_state old_pstate = pstate;
+
+  pstate.declspecs = NULL;
+  pstate.attributes = NULL;
+  pstate.unevaluated_expression = 0;
+  pstate.declspec_stack = NULL;
+  pstate.ds_region = newsubregion(parse_region);
+  parse_tree = NULL;
+  result = yyparse();
+  if (result)
+    parse_tree = NULL;
+  deleteregion_ptr(&pstate.ds_region);
+
+  if (result != 0 && errorcount == old_errorcount)
+    fprintf(stderr, "Errors detected in input file (your bison.simple is out of date)");
+
+  pstate = old_pstate;
+
+  return parse_tree;
+}
+
+static void set_nesc_ast(void *tree)
+{
+  nesc_declaration cdecl = current.container;
+  nesc_decl nd = CAST(nesc_decl, tree);
+
+  nd->cdecl = cdecl;
+  cdecl->ast = nd;
+}
+
+static void set_nesc_parse_tree(void *tree)
+{
+  set_nesc_ast(tree);
+  parse_tree = CAST(node, tree);
+}
+
+static void set_nesc_impl(implementation impl)
+{
+  nesc_declaration cdecl = current.container;
+
+  CAST(component, cdecl->ast)->implementation = impl;
+  parse_tree = CAST(node, cdecl->ast);
+}
+
+void refuse_asm(asm_stmt s)
+{
+  if (s)
+    error_with_location(s->location, "unexpected asm statement");
+}
+
+/* Merge the attributes in front of a declaration (but which aren't part
+   of the declspecs) with the attributes after the declaration.
+   We're pretending they all came after */
+attribute prefix_attr(attribute post_attr)
+{
+  return attribute_chain(pstate.attributes, post_attr);
+}
+
+/* Simple build functions */
+declaration make_data_decl(type_element modifiers, declaration decls)
+{
+  location l = modifiers ? modifiers->location : decls->location;
+
+  data_decl dd = new_data_decl(parse_region, l, modifiers, decls);
+
+  pop_declspec_stack();
+
+  if (decls == NULL && current.spec_section != spec_normal)
+    error("provides/uses must be followed by a command, event or interface");
+
+  return CAST(declaration, dd);
+}
+
+declaration make_error_decl(void)
+{
+  return new_error_decl(pr, dummy_location);
+}
+
+declaration make_extension_decl(int old_pedantic, location l, declaration d)
+{ 
+  pedantic = old_pedantic; 
+  return CAST(declaration, new_extension_decl(pr, l, d));
+}
+
+word make_cword(location l, const char *s)
+{
+  return new_word(pr, l, str2cstring(pr, s));
+}
+
+declarator make_qualified_declarator(location l, declarator d, type_element quals)
+{
+  if (quals)
+    return CAST(declarator, new_qualified_declarator(pr, l, d, quals));
+  else
+    return d;
+}
+
+declarator make_pointer_declarator(location l, declarator d, type_element quals)
+{
+  d = make_qualified_declarator(l, d, quals);
+
+  return CAST(declarator, new_pointer_declarator(pr, l, d));
+}
+
+declarator make_identifier_declarator(location l, cstring id)
+{
+  return CAST(declarator, new_identifier_declarator(pr, l, id));
+}
+
+statement make_error_stmt(void)
+{
+  return new_error_stmt(pr, dummy_location);
+}
+
+/* Tell yyparse how to print a token's value, if yydebug is set.  */
+
+#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
+void yyprint();
+%}
+\f
+%%
+
+dispatch:
+         DISPATCH_NESC interface { }
+       | DISPATCH_NESC component { }
+       | DISPATCH_C extdefs {
+           declaration cdecls = declaration_reverse($2); 
+           parse_tree = CAST(node, cdecls); }
+       | DISPATCH_C { parse_tree = NULL; }
+       | DISPATCH_PARM parm { parse_tree = CAST(node, $2); }
+       | DISPATCH_PARM error { parse_tree = CAST(node, make_error_decl()); }
+       | DISPATCH_TYPE typename { parse_tree = CAST(node, $2); }
+       | DISPATCH_TYPE error { parse_tree = NULL; }
+       ;
+
+ncheader:
+         { end_macro_saving(); } includes_list
+       | extdefs 
+                 { 
+                   end_macro_saving(); 
+                   add_cdecls(declaration_reverse($1));
+                 }
+       ;
+
+includes_list: 
+         includes_list includes 
+       | /* empty */
+       ;
+
+includes:
+         INCLUDES include_list ';' { }
+       ;
+
+include_list:
+         identifier 
+               { require_c($1.location, $1.id.data); }
+       | include_list ',' identifier 
+               { require_c($3.location, $3.id.data); }
+       ;
+
+interface: 
+          ncheader
+         INTERFACE idword
+               { 
+                 start_nesc_entity(l_interface, $3);
+               } 
+         interface_parms nesc_attributes 
+               {
+                 handle_nescdecl_attributes($6, current.container);
+               }
+         '{' datadef_list '}' 
+               {
+                 interface intf = new_interface(pr, $2.location, $3, $6, declaration_reverse($9));
+
+                 set_nesc_parse_tree(intf);
+
+                 if (intf->cdecl->abstract)
+                   poplevel();
+               }
+       ;
+
+interface_parms:
+         /* empty */ { $$ = NULL; }
+       | '<' interface_parm_list '>' 
+               {
+                 nesc_declaration intf = current.container;
+
+                 intf->parameters = $2;
+                 intf->parameter_env = current.env;
+                 $$ = $2;
+
+                 /* Template intfs need a new level for the actual intf */
+                 pushlevel(FALSE);
+                 /* The interface env counts as global */
+                 current.env->global_level = TRUE;
+                 intf->env = current.env;
+                 intf->abstract = TRUE;
+               }
+       ;
+
+interface_parm_list:
+         interface_parm
+       | interface_parm_list ',' interface_parm
+               { $$ = declaration_chain($1, $3); }
+       ;
+
+interface_parm:
+         type_parm nesc_attributes 
+               { $$ = declare_type_parameter($1.location, $1.id, $2, NULL); }
+       ;
+
+type_parm:
+         IDENTIFIER { $$ = $1; }
+       ;
+
+datadef_list: 
+         datadef_list just_datadef { $$ = declaration_chain($2, $1); }
+       | just_datadef ;
+
+parameters: 
+         '[' { pushlevel(TRUE); } parameters1 
+               { /* poplevel done in users of parameters */ $$ = $3; } ;
+
+parameters1: 
+         parms ']'
+               {
+                 $$ = declaration_reverse($1);
+                 check_interface_parameter_types($$); 
+               }
+       | error ']' { $$ = make_error_decl(); }
+       ;
+
+component: 
+         ncheader module
+       | ncheader configuration
+       | ncheader binary_component
+       ;
+
+module: 
+         generic MODULE idword 
+               { 
+                 start_nesc_entity(l_component, $3);
+                 current.container->abstract = $1; 
+               } 
+         component_parms nesc_attributes 
+               {
+                 handle_nescdecl_attributes($6, current.container);
+               }
+         '{' requires_or_provides_list '}'
+         imodule
+               {
+                 declaration intfs = 
+                   declaration_chain(declaration_reverse($9), all_tasks);
+                 set_nesc_parse_tree(new_component(pr, $2.location, $3, $6, $1, $5, intfs, $11));
+               }
+       ;
+
+configuration:
+         generic CONFIGURATION idword
+               { 
+                 start_nesc_entity(l_component, $3);
+                 current.container->abstract = $1; 
+                 current.container->configuration = TRUE;
+               } 
+         component_parms nesc_attributes 
+               {
+                 handle_nescdecl_attributes($6, current.container);
+               }
+         '{' requires_or_provides_list '}'
+               {
+                 set_nesc_ast(new_component(pr, $2.location, $3, $6, $1, $5, declaration_reverse($9), NULL));
+               }
+         iconfiguration
+               {
+                 set_nesc_impl($12);
+               }
+        ;
+
+binary_component: 
+         COMPONENT idword
+               { 
+                 start_nesc_entity(l_component, $2);
+               } 
+         nesc_attributes 
+               {
+                 handle_nescdecl_attributes($4, current.container);
+               }
+         '{' requires_or_provides_list '}'
+               { 
+                 binary_component dummy = new_binary_component(pr, $1.location, start_implementation());
+                 component c = new_component(pr, $1.location, $2, $4, FALSE, NULL, declaration_reverse($7), CAST(implementation, dummy));
+                 set_nesc_parse_tree(c);
+               }
+       ;
+
+generic: GENERIC { $$ = TRUE; }
+       | /* empty */ { $$ = FALSE; }
+       ;
+
+component_parms:
+         /* empty */
+               {
+                 if (current.container->abstract)
+                   error("generic components require a parameter list");
+                   /* We don't create the extra environment level for this
+                      generic component as nothing actually requires its 
+                      existence */
+                 $$ = NULL;
+               }
+       | '(' template_parms ')'
+               {
+                 nesc_declaration comp = current.container;
+
+                 if (!comp->abstract)
+                   error("only generic components can have a parameter list");
+                 comp->parameters = $2;
+                 comp->parameter_env = current.env;
+                 $$ = $2;
+
+                 /* generic components need a new level for the 
+                    specification */
+                 pushlevel(FALSE);
+                 current.env->global_level = TRUE;
+                 comp->env = current.env;
+               }
+       ;
+
+template_parms:
+       /* empty */ { $$ = NULL; }
+      | template_parmlist
+      ;
+
+template_parmlist:
+         template_parm
+       | template_parmlist ',' template_parm
+               { $$ = declaration_chain($1, $3); }
+       ;
+
+/* A declaration of a template parameter, i.e., a regular
+   parameter-like declaration (name required).
+   The 'typedef t' syntax for declaring a type argument is detected
+   inside declare_template_parameter */
+template_parm:
+         declspecs_ts xreferror after_type_declarator maybe_attribute
+               { $$ = declare_template_parameter($3, $1, $4); }
+       | declspecs_ts xreferror notype_declarator maybe_attribute
+               { $$ = declare_template_parameter($3, $1, $4); }
+       | declspecs_nots xreferror notype_declarator maybe_attribute
+               { $$ = declare_template_parameter($3, $1, $4); }
+       | declspecs_ts xreferror
+               { $$ = declare_template_parameter(NULL, $1, NULL); }
+       ;
+
+requires_or_provides_list: 
+         requires_or_provides_list_
+               { current.spec_section = spec_normal; }
+       ;
+
+requires_or_provides_list_: 
+         requires_or_provides_list_ requires_or_provides
+               { $$ = declaration_chain($2, $1); }
+       | /* empty */ { $$ = NULL; }
+       ;
+
+requires_or_provides: 
+         requires 
+       | provides 
+       | { current.spec_section = spec_normal; } just_datadef { $$ = $2; }
+       ;
+
+requires: 
+         USES { current.spec_section = spec_uses; } 
+         parameterised_interface_list 
+               { $$ = CAST(declaration, new_rp_interface(pr, $1.location, TRUE, declaration_reverse($3))); } ;
+
+provides: 
+         PROVIDES { current.spec_section = spec_provides; } 
+         parameterised_interface_list 
+               { $$ = CAST(declaration, new_rp_interface(pr, $1.location, FALSE, declaration_reverse($3))); } ;
+
+parameterised_interface_list:
+         parameterised_interface
+       | '{' parameterised_interfaces '}' { $$ = $2; }
+       ;
+
+parameterised_interfaces: 
+         parameterised_interfaces parameterised_interface 
+               { $$ = declaration_chain($2, $1); }
+       | parameterised_interface
+       ;
+
+parameterised_interface:
+         just_datadef
+       | interface_ref nesc_attributes ';' 
+               {
+                 declare_interface_ref($1, NULL, current.env, $2);
+                 $$ = CAST(declaration, $1);
+               }
+       | interface_ref parameters nesc_attributes ';'
+               { 
+                 $1->gparms = $2;
+                 poplevel();
+                 declare_interface_ref($1, $2, current.env, $3);
+                 $$ = CAST(declaration, $1);
+               }
+       ;
+
+interface_ref: 
+         interface_type
+       | interface_type AS idword { $$ = $1; $$->word2 = $3; }
+       ;
+
+interface_type:
+         INTERFACE idword
+               { 
+                 preload(l_interface, $1.location, $2->cstring.data);
+                 $$ = new_interface_ref(pr, $1.location, $2, NULL, NULL, NULL, NULL, NULL); 
+               }
+       | INTERFACE idword 
+               { 
+                 preload(l_interface, $1.location, $2->cstring.data);
+               }
+         '<' typelist '>'
+               { $$ = new_interface_ref(pr, $1.location, $2, $5, NULL, NULL, NULL, NULL); }
+       ;
+
+typelist:
+         generic_type
+       | typelist ',' generic_type { $$ = expression_chain($1, $3); }
+       ;
+
+iconfiguration:
+         IMPLEMENTATION { $<u.env>$ = start_implementation(); } 
+         '{'
+         configuration_decls
+         '}'
+               { $$ = CAST(implementation, new_configuration(pr, $1.location, $<u.env>2, declaration_reverse($4)));
+               }
+       ;
+
+cuses:    COMPONENTS component_list ';' { $$ = $2; }
+       ;
+
+component_list: 
+         component_list ',' component_ref { $$ = component_ref_chain($3, $1); }
+       | component_ref
+       ;
+
+component_ref: 
+         component_ref2 { $$ = require_component($1, NULL); }
+       | component_ref2 AS idword { $$ = require_component($1, $3); }
+       ;
+
+component_ref2: 
+         idword { $$ = new_component_ref(pr, $1->location, $1, NULL,
+                                         FALSE, NULL); }
+       | NEW idword '(' generic_args ')'
+                { $$ = new_component_ref(pr, $1.location, $2, NULL,
+                                         TRUE, $4); }
+       ;
+
+generic_args:
+         /* empty */ { $$ = NULL; }
+       | generic_arglist
+       ;
+
+generic_arglist:
+         generic_arg
+       | generic_arglist ',' generic_arg { $$ = expression_chain($1, $3); }
+       ;
+
+generic_arg:
+         expr_no_commas 
+               { $$ = $1; $$->type = default_conversion_for_assignment($$); }
+       | generic_type
+       ;
+
+generic_type:
+         typename { $$ = make_type_argument($1); }
+       ;
+
+configuration_decls: 
+         configuration_decls configuration_decl { $$ = declaration_chain($2, $1); }
+       | /* empty */ { $$ = NULL; }
+       ;
+
+configuration_decl:
+         connection { $$ = CAST(declaration, $1); }
+       | just_datadef
+       | cuses { $$ = CAST(declaration, $1); }
+       ;
+
+connection:
+         endpoint '=' endpoint ';' 
+               { $$ = CAST(connection, new_eq_connection(pr, $2.location, $1, $3)); }
+       | endpoint POINTSAT endpoint ';' 
+               { $$ = CAST(connection, new_rp_connection(pr, $2.location, $3, $1)); }
+       | endpoint TASTNIOP endpoint ';'
+               { $$ = CAST(connection, new_rp_connection(pr, $2.location, $1, $3)); }
+       ;
+
+endpoint: 
+         endpoint '.' parameterised_identifier
+               { $$ = $1;
+                 $$->ids = parameterised_identifier_chain($$->ids, $3);
+               }
+       | parameterised_identifier 
+               { $$ = new_endpoint(parse_region, $1->location, $1); }
+       ;
+
+parameterised_identifier:
+         idword 
+         { $$ = new_parameterised_identifier(pr, $1->location, $1, NULL); }
+       | idword '[' nonnull_exprlist ']'
+         { $$ = new_parameterised_identifier(pr, $1->location, $1, $3); }
+       ;
+
+imodule:  IMPLEMENTATION { $<u.env>$ = start_implementation(); all_tasks = NULL; } '{' extdefs '}' 
+               { 
+                 $$ = CAST(implementation, new_module(pr, $1.location, $<u.env>2, declaration_reverse($4))); 
+               } ;
+
+/* the reason for the strange actions in this rule
+ is so that notype_initdecls when reached via datadef
+ can find a valid list of type and sc specs in $0. */
+
+extdefs:
+         { $<u.telement>$ = NULL; } extdef { $$ = $2; }
+       | extdefs { $<u.telement>$ = NULL; } extdef
+               { $$ = declaration_chain($3, $1); }       
+       ;
+
+extdef:
+         fndef
+       | datadef
+       | ASM_KEYWORD '(' expr ')' ';'
+               { 
+                 $$ = CAST(declaration, new_asm_decl
+                   (pr, $1.location,
+                    new_asm_stmt(pr, $1.location, $3, NULL, NULL, NULL, NULL))); }
+       | extension extdef
+               { $$ = make_extension_decl($1.i, $1.location, $2); }
+       ;
+
+datadef:
+         setspecs notype_initdecls ';'
+               { if (pedantic)
+                   error("ANSI C forbids data definition with no type or storage class");
+                 else if (!flag_traditional)
+                   warning("data definition has no type or storage class"); 
+
+                 $$ = make_data_decl(NULL, $2); }
+       | just_datadef
+       ;
+
+just_datadef:
+          declspecs_nots setspecs notype_initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs_ts setspecs initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs setspecs ';'
+               { shadow_tag($1); 
+                 $$ = make_data_decl($1, NULL); }
+       | error ';' { $$ = make_error_decl(); }
+       | error '}' { $$ = make_error_decl(); }
+       | ';'
+               { if (pedantic)
+                   pedwarn("ANSI C does not allow extra `;' outside of a function");
+                 $$ = NULL; }
+       | target_def
+       ;
+
+target_def:
+         TARGET_DEF identifier '=' expr ';'
+                 { $$ = target->keilc_definition($1.location, $1.id, $2.id, $4); }
+       ;
+\f
+fndef:
+         declspecs_ts setspecs declarator fndef2 { $$ = $4; }
+       | declspecs_nots setspecs notype_declarator fndef2 { $$ = $4; }
+       | setspecs notype_declarator fndef2 { $$ = $3; }
+       ;
+
+fndef2:           maybeasm maybe_attribute
+               { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm($1);
+
+                 /* $0 refers to the declarator that precedes fndef2
+                    in fndef (we can't just save it in an action, as that
+                    causes s/r and r/r conflicts) */
+                 if (!start_function(pstate.declspecs, $<u.declarator>0, $2, 0))
+                   YYERROR1; 
+               }
+         old_style_parm_decls
+               { store_parm_decls(declaration_reverse($4)); }
+         compstmt_or_error
+               { $$ = finish_function($6);
+                 pop_declspec_stack(); }
+       ;
+
+identifier:
+         IDENTIFIER
+       | TYPENAME
+       ;
+
+id_label:
+         identifier { $$ = new_id_label(pr, $1.location, $1.id); }
+       ;
+
+idword:
+         identifier { $$ = new_word(pr, $1.location, $1.id); }
+        ;
+
+unop:     '&'
+               { $$ = $1; $$.i = kind_address_of; }
+       | '-'
+               { $$ = $1; $$.i = kind_unary_minus; }
+       | '+'
+               { $$ = $1; $$.i = kind_unary_plus; }
+       | PLUSPLUS
+               { $$ = $1; $$.i = kind_preincrement; }
+       | MINUSMINUS
+               { $$ = $1; $$.i = kind_predecrement; }
+       | '~'
+               { $$ = $1; $$.i = kind_bitnot; }
+       | '!'
+               { $$ = $1; $$.i = kind_not; }
+       | REALPART
+               { $$ = $1; $$.i = kind_realpart; }
+       | IMAGPART
+               { $$ = $1; $$.i = kind_imagpart; }
+       ;
+
+expr:  nonnull_exprlist
+               { if ($1->next)
+                   $$ = make_comma($1->location, $1);
+                 else
+                   $$ = $1; }
+       ;
+
+exprlist:
+         /* empty */
+               { $$ = NULL; }
+       | nonnull_exprlist
+       ;
+
+nonnull_exprlist:
+         nonnull_exprlist_
+               { $$ = expression_reverse($1); }
+       ;
+
+nonnull_exprlist_:
+         expr_no_commas
+               { $$ = $1; }
+       | nonnull_exprlist_ ',' expr_no_commas
+               { $$ = expression_chain($3, $1); }
+       ;
+
+callkind:
+         CALL { $$.i = command_call; }
+       | SIGNAL { $$.i = event_signal; }
+       | POST { $$.i = post_task; }
+       ;
+
+unary_expr:
+         primary
+       | callkind function_call 
+               {
+                 function_call fc = CAST(function_call, $2);
+                 type calltype = fc->arg1->type;
+                 bool noerror = fc->type != error_type;
+                 
+                 $$ = $2;
+                 fc->call_kind = $1.i;
+                 switch ($1.i)
+                   {
+                   case command_call:
+                     if (noerror && !type_command(calltype))
+                       error("only commands can be called");
+                     break;
+                   case event_signal:
+                     if (noerror && !type_event(calltype))
+                       error("only events can be signaled");
+                     break;
+                   case post_task:
+                     fc->type = unsigned_char_type;
+                     if (noerror)
+                       {
+                         if (!type_task(calltype))
+                           error("only tasks can be posted");
+                         else if (flag_use_scheduler)
+                           /* If requested, replace post/task by references to
+                              an interface */
+                           handle_post(fc);
+                       }
+                     break;
+                   }
+               }
+       | '*' cast_expr
+               { $$ = make_dereference($1.location, $2); }
+       /* __extension__ turns off -pedantic for following primary.  */
+       | extension cast_expr   
+               { $$ = make_extension_expr($1.location, $2);
+                 pedantic = $1.i; }
+       | unop cast_expr
+               { $$ = make_unary($1.location, $1.i, $2);
+#if 0
+                 overflow_warning($$); 
+#endif
+               }
+       /* Refer to the address of a label as a pointer.  */
+       | ANDAND id_label
+               {
+                 $$ = CAST(expression, make_label_address($1.location, $2));
+                 use_label($2);
+               }
+       | sizeof unary_expr
+               { 
+#if 0
+                 if (TREE_CODE ($2) == COMPONENT_REF
+                     && DECL_C_BIT_FIELD (TREE_OPERAND ($2, 1)))
+                   error("`sizeof' applied to a bit-field");
+                 $$ = c_sizeof (TREE_TYPE ($2)); 
+#endif
+                 $$ = make_sizeof_expr($1.location, $2);
+                 pstate.unevaluated_expression--; }
+       | sizeof '(' typename ')'
+               { $$ = make_sizeof_type($1.location, $3);
+                 pstate.unevaluated_expression--; }
+       | alignof unary_expr
+               { $$ = make_alignof_expr($1.location, $2);
+                 pstate.unevaluated_expression--; }
+       | alignof '(' typename ')'
+               { $$ = make_alignof_type($1.location, $3); 
+                 pstate.unevaluated_expression--; }
+       ;
+
+sizeof:
+         SIZEOF { pstate.unevaluated_expression++; $$ = $1; }
+       ;
+
+alignof:
+         ALIGNOF { pstate.unevaluated_expression++; $$ = $1; }
+       ;
+
+cast_expr:
+         unary_expr
+       | '(' typename ')' cast_expr
+               { $$ = make_cast($1.location, $2, $4); }
+       | '(' typename ')' '{' 
+               { 
+                 start_init(NULL, NULL);
+                 really_start_incremental_init($2->type); 
+               }
+         initlist_maybe_comma '}'
+               { 
+                 expression constructor = make_init_list($4.location, $6);
+
+                 finish_init();
+
+                 if (pedantic)
+                   pedwarn("ANSI C forbids constructor expressions");
+
+                 $$ = make_cast_list($1.location, $2, constructor);
+               }
+       ;
+
+expr_no_commas:
+         cast_expr
+       | expr_no_commas '+' expr_no_commas
+               { $$ = make_binary($2.location, kind_plus, $1, $3); }
+       | expr_no_commas '-' expr_no_commas
+               { $$ = make_binary($2.location, kind_minus, $1, $3); }
+       | expr_no_commas '*' expr_no_commas
+               { $$ = make_binary($2.location, kind_times, $1, $3); }
+       | expr_no_commas '/' expr_no_commas
+               { $$ = make_binary($2.location, kind_divide, $1, $3); }
+       | expr_no_commas '%' expr_no_commas
+               { $$ = make_binary($2.location, kind_modulo, $1, $3); }
+       | expr_no_commas LSHIFT expr_no_commas
+               { $$ = make_binary($2.location, kind_lshift, $1, $3); }
+       | expr_no_commas RSHIFT expr_no_commas
+               { $$ = make_binary($2.location, kind_rshift, $1, $3); }
+       | expr_no_commas ARITHCOMPARE expr_no_commas
+               { $$ = make_binary($2.location, $2.i, $1, $3); }
+       | expr_no_commas '<' expr_no_commas
+               { $$ = make_binary($2.location, kind_lt, $1, $3); }
+       | expr_no_commas '>' expr_no_commas
+               { $$ = make_binary($2.location, kind_gt, $1, $3); }
+       | expr_no_commas EQCOMPARE expr_no_commas
+               { $$ = make_binary($2.location, $2.i, $1, $3); }
+       | expr_no_commas '&' expr_no_commas
+               { $$ = make_binary($2.location, kind_bitand, $1, $3); }
+       | expr_no_commas '|' expr_no_commas
+               { $$ = make_binary($2.location, kind_bitor, $1, $3); }
+       | expr_no_commas '^' expr_no_commas
+               { $$ = make_binary($2.location, kind_bitxor, $1, $3); }
+       | expr_no_commas ANDAND expr_no_commas
+               { $$ = make_binary($2.location, kind_andand, $1, $3); }
+       | expr_no_commas OROR expr_no_commas
+               { $$ = make_binary($2.location, kind_oror, $1, $3); }
+       | expr_no_commas '?' expr ':' expr_no_commas
+               { $$ = make_conditional($2.location, $1, $3, $5); }
+       | expr_no_commas '?'
+               { if (pedantic)
+                   pedwarn("ANSI C forbids omitting the middle term of a ?: expression"); 
+               }
+         ':' expr_no_commas
+               { $$ = make_conditional($2.location, $1, NULL, $5); }
+       | expr_no_commas '=' expr_no_commas
+               { $$ = make_assign($2.location, kind_assign, $1, $3); }
+       | expr_no_commas ASSIGN expr_no_commas
+               { $$ = make_assign($2.location, $2.i, $1, $3); }
+       ;
+
+primary:
+         IDENTIFIER
+               { 
+                 if (yychar == YYEMPTY)
+                   yychar = YYLEX;
+                 $$ = make_identifier($1.location, $1.id, yychar == '('); 
+               }
+       | CONSTANT { $$ = CAST(expression, $1); }
+       | string { $$ = $1; }
+       | '(' expr ')'
+               { $$ = $2; $$->parens = TRUE; }
+       | '(' error ')'
+               { $$ = make_error_expr(); }
+       | '('
+               { if (current.function_decl == 0)
+                   {
+                     error("braced-group within expression allowed only inside a function");
+                     YYERROR;
+                   }
+                   push_label_level();
+               }
+         compstmt ')'
+               { 
+                 pop_label_level();
+                 if (pedantic)
+                   pedwarn("ANSI C forbids braced-groups within expressions");
+                 $$ = make_compound_expr($1.location, $3);
+               }
+       | function_call
+               {
+                 /* Magic functions may rewrite this to something else */
+                 if (is_function_call($1))
+                   {
+                     function_call fc = CAST(function_call, $1);
+                     type calltype = fc->arg1->type;
+
+                     if (type_command(calltype))
+                       error("commands must be called with call");
+                     else if (type_event(calltype))
+                       error("events must be signaled with signal");
+                     else if (type_task(calltype))
+                       error("tasks must be posted with post");
+                   }
+
+                 $$ = $1;
+               }
+       | VA_ARG '(' expr_no_commas ',' typename ')'
+               { $$ = make_va_arg($1.location, $3, $5); }
+       | OFFSETOF '(' typename ',' fieldlist ')'
+               { $$ = make_offsetof($1.location, $3, $5); }
+       | primary '[' nonnull_exprlist ']' 
+               { $$ = make_array_ref($2.location, $1, $3); }
+       | primary '.' identifier
+               { $$ = make_field_ref($2.location, $1, $3.id); }
+       | primary POINTSAT identifier
+               { $$ = make_field_ref($2.location, make_dereference($2.location, $1),
+                                     $3.id); }
+       | primary PLUSPLUS
+               { $$ = make_postincrement($2.location, $1); }
+       | primary MINUSMINUS
+               { $$ = make_postdecrement($2.location, $1); }
+       ;
+
+fieldlist:
+       identifier { $$ = dd_new_list(pr); dd_add_last(pr, $$, $1.id.data); }
+       | fieldlist '.' identifier { $$ = $1; dd_add_last(pr, $$, $3.id.data); }
+       ;
+
+function_call: 
+         primary '(' exprlist ')'
+               { $$ = make_function_call($2.location, $1, $3); }
+       ;
+
+string:   STRING { $$ = CAST(expression, $1); }
+       | MAGIC_STRING { $$ = make_identifier($1.location, $1.id, FALSE); }
+        ;
+
+old_style_parm_decls:
+         /* empty */ { $$ = NULL; }
+       | datadecls
+       | datadecls ELLIPSIS
+               /* ... is used here to indicate a varargs function.  */
+               { if (pedantic)
+                   pedwarn("ANSI C does not permit use of `varargs.h'"); 
+                 $$ = declaration_chain(CAST(declaration, new_ellipsis_decl(pr, $2.location)), $1);
+               }
+       ;
+
+/* The following are analogous to decls and decl
+   except that they do not allow nested functions.
+   They are used for old-style parm decls.  */
+datadecls:
+         datadecl
+       | datadecls datadecl { $$ = declaration_chain($2, $1); }
+       ;
+
+/* We don't allow prefix attributes here because they cause reduce/reduce
+   conflicts: we can't know whether we're parsing a function decl with
+   attribute suffix, or function defn with attribute prefix on first old
+   style parm.  */
+datadecl:
+         declspecs_ts_nosa setspecs initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs_nots_nosa setspecs notype_initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs_ts_nosa setspecs ';'
+               { shadow_tag_warned($1, 1);
+                 $$ = make_data_decl($1, NULL);
+                 pedwarn("empty declaration"); }
+       | declspecs_nots_nosa ';'
+               { pedwarn("empty declaration"); 
+                 $$ = NULL; }
+       ;
+
+/* This combination which saves a lineno before a decl
+   is the normal thing to use, rather than decl itself.
+   This is to avoid shift/reduce conflicts in contexts
+   where statement labels are allowed.  */
+decls:
+         decl
+       | errstmt { $$ = make_error_decl(); }
+       | decls decl { $$ = declaration_chain($2, $1); }
+       | decl errstmt { $$ = make_error_decl(); }
+       ;
+
+/* records the type and storage class specs to use for processing
+   the declarators that follow.
+   Maintains a stack of outer-level values of pstate.declspecs,
+   for the sake of parm declarations nested in function declarators.  */
+setspecs: /* empty */
+               { 
+                 push_declspec_stack();
+                 pending_xref_error();
+                 pstate.declspecs = $<u.telement>0;
+                 pstate.attributes = NULL;
+               }
+       ;
+
+/* Possibly attributes after a comma, which should be saved in
+   pstate.attributes */
+maybe_resetattrs:
+         maybe_attribute
+               { pstate.attributes = $1; }
+       ;
+
+decl:
+         declspecs_ts setspecs initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs_nots setspecs notype_initdecls ';'
+               { $$ = make_data_decl($1, $3); }
+       | declspecs_ts setspecs nested_function
+               { $$ = $3;
+                 pop_declspec_stack(); }
+       | declspecs_nots setspecs notype_nested_function
+               { $$ = $3;
+                 pop_declspec_stack(); }
+       | declspecs setspecs ';'
+               { shadow_tag($1);
+                 $$ = make_data_decl($1, NULL); }
+       | extension decl
+               { $$ = make_extension_decl($1.i, $1.location, $2); }
+       ;
+
+/* declspecs borrowed from gcc 3. I think it's really ugly, but I guess
+   they (and therefore I) am stuck with this brokenness.
+   The only redeeming feature is that it's cleaner than gcc 2
+*/
+/* A list of declaration specifiers.  These are:
+
+   - Storage class specifiers (SCSPEC), which for GCC currently include
+   function specifiers ("inline").
+
+   - Type specifiers (type_spec_*).
+
+   - Type qualifiers (TYPE_QUAL).
+
+   - Attribute specifier lists (attributes).
+
+   These are stored as a TREE_LIST; the head of the list is the last
+   item in the specifier list.  Each entry in the list has either a
+   TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that
+   is a single other specifier or qualifier; and a TREE_CHAIN that is the
+   rest of the list.  TREE_STATIC is set on the list if something other
+   than a storage class specifier or attribute has been seen; this is used
+   to warn for the obsolescent usage of storage class specifiers other than
+   at the start of the list.  (Doing this properly would require function
+   specifiers to be handled separately from storage class specifiers.)
+
+   The various cases below are classified according to:
+
+   (a) Whether a storage class specifier is included or not; some
+   places in the grammar disallow storage class specifiers (_sc or _nosc).
+
+   (b) Whether a type specifier has been seen; after a type specifier,
+   a typedef name is an identifier to redeclare (_ts or _nots).
+
+   (c) Whether the list starts with an attribute; in certain places,
+   the grammar requires specifiers that don't start with an attribute
+   (_sa or _nosa).
+
+   (d) Whether the list ends with an attribute (or a specifier such that
+   any following attribute would have been parsed as part of that specifier);
+   this avoids shift-reduce conflicts in the parsing of attributes
+   (_ea or _noea).
+
+   TODO:
+
+   (i) Distinguish between function specifiers and storage class specifiers,
+   at least for the purpose of warnings about obsolescent usage.
+
+   (ii) Halve the number of productions here by eliminating the _sc/_nosc
+   distinction and instead checking where required that storage class
+   specifiers aren't present.  */
+
+declspecs_nosc_nots_nosa_noea:
+         type_qual
+       | declspecs_nosc_nots_nosa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_nots_nosa_ea:
+         declspecs_nosc_nots_nosa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_nots_sa_noea:
+         declspecs_nosc_nots_sa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_nots_sa_ea:
+         eattributes
+       | declspecs_nosc_nots_sa_noea eattributes
+       ;
+
+declspecs_nosc_ts_nosa_noea:
+         type_spec_nonattr
+       | declspecs_nosc_ts_nosa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_noea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_ea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_noea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_ea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_ts_nosa_ea:
+         type_spec_attr
+       | declspecs_nosc_ts_nosa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_noea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_ea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_noea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_ea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_ts_sa_noea:
+         declspecs_nosc_ts_sa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_noea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_ea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_noea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_ea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_nosc_ts_sa_ea:
+         declspecs_nosc_ts_sa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_noea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_ea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_noea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_ea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_nots_nosa_noea:
+         scspec
+       | declspecs_sc_nots_nosa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_nosa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_nots_nosa_ea:
+         declspecs_sc_nots_nosa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_nots_sa_noea:
+         declspecs_sc_nots_sa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_nots_sa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_nots_sa_ea:
+         declspecs_sc_nots_sa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_ts_nosa_noea:
+         declspecs_sc_ts_nosa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_noea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_ea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_noea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_ea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_nosa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_ts_nosa_ea:
+         declspecs_sc_ts_nosa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_noea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_nosa_ea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_noea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_nosa_ea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_ts_sa_noea:
+         declspecs_sc_ts_sa_noea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_ea type_qual
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_noea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_ea type_spec_reserved_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_noea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_ea type_spec_nonattr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_nosc_ts_sa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_noea scspec
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_ea scspec
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+declspecs_sc_ts_sa_ea:
+         declspecs_sc_ts_sa_noea eattributes
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_noea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_ts_sa_ea type_spec_reserved_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_noea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       | declspecs_sc_nots_sa_ea type_spec_attr
+               { $$ = type_element_chain($1, $2); }
+       ;
+
+/* Particular useful classes of declspecs.  */
+declspecs_ts:
+         declspecs_nosc_ts_nosa_noea
+       | declspecs_nosc_ts_nosa_ea
+       | declspecs_nosc_ts_sa_noea
+       | declspecs_nosc_ts_sa_ea
+       | declspecs_sc_ts_nosa_noea
+       | declspecs_sc_ts_nosa_ea
+       | declspecs_sc_ts_sa_noea
+       | declspecs_sc_ts_sa_ea
+       ;
+
+declspecs_nots:
+         declspecs_nosc_nots_nosa_noea
+       | declspecs_nosc_nots_nosa_ea
+       | declspecs_nosc_nots_sa_noea
+       | declspecs_nosc_nots_sa_ea
+       | declspecs_sc_nots_nosa_noea
+       | declspecs_sc_nots_nosa_ea
+       | declspecs_sc_nots_sa_noea
+       | declspecs_sc_nots_sa_ea
+       ;
+
+declspecs_ts_nosa:
+         declspecs_nosc_ts_nosa_noea
+       | declspecs_nosc_ts_nosa_ea
+       | declspecs_sc_ts_nosa_noea
+       | declspecs_sc_ts_nosa_ea
+       ;
+
+declspecs_nots_nosa:
+         declspecs_nosc_nots_nosa_noea
+       | declspecs_nosc_nots_nosa_ea
+       | declspecs_sc_nots_nosa_noea
+       | declspecs_sc_nots_nosa_ea
+       ;
+
+declspecs_nosc_ts:
+         declspecs_nosc_ts_nosa_noea
+       | declspecs_nosc_ts_nosa_ea
+       | declspecs_nosc_ts_sa_noea
+       | declspecs_nosc_ts_sa_ea
+       ;
+
+declspecs_nosc_nots:
+         declspecs_nosc_nots_nosa_noea
+       | declspecs_nosc_nots_nosa_ea
+       | declspecs_nosc_nots_sa_noea
+       | declspecs_nosc_nots_sa_ea
+       ;
+
+declspecs_nosc:
+         declspecs_nosc_ts
+       | declspecs_nosc_nots
+       ;
+
+declspecs:
+         declspecs_ts
+       | declspecs_nots
+       ;
+
+/* A (possibly empty) sequence of type qualifiers and attributes.  */
+maybe_type_quals_attrs:
+         /* empty */
+               { $$ = NULL; }
+       | declspecs_nosc_nots
+       ;
+
+/* A type specifier (but not a type qualifier).
+   Once we have seen one of these in a declaration,
+   if a typedef name appears then it is being redeclared.
+
+   The _reserved versions start with a reserved word and may appear anywhere
+   in the declaration specifiers; the _nonreserved versions may only
+   appear before any other type specifiers, and after that are (if names)
+   being redeclared.
+
+   FIXME: should the _nonreserved version be restricted to names being
+   redeclared only?  The other entries there relate only the GNU extensions
+   and Objective C, and are historically parsed thus, and don't make sense
+   after other type specifiers, but it might be cleaner to count them as
+   _reserved.
+
+   _attr means: specifiers that either end with attributes,
+   or are such that any following attributes would
+   be parsed as part of the specifier.
+
+   _nonattr: specifiers.  */
+
+type_spec_nonattr:
+         type_spec_reserved_nonattr
+       | type_spec_nonreserved_nonattr
+       ;
+
+type_spec_attr:
+         type_spec_reserved_attr
+       ;
+
+type_spec_reserved_nonattr:
+         type_spec
+       | structuse
+       ;
+
+type_spec_reserved_attr:
+         structdef
+       ;
+
+type_spec_nonreserved_nonattr:
+         TYPENAME
+               { /* For a typedef name, record the meaning, not the name.
+                    In case of `foo foo, bar;'.  */
+                 $$ = CAST(type_element, new_typename(pr, $1.location, $1.decl)); }
+       | COMPONENTREF '.' identifier
+               {
+                 /* reference to a typedef from a component. */
+                 $$ = CAST(type_element, new_component_typeref(pr, $1.location, $3.decl, $1.id)); 
+               }
+       | TYPEOF '(' expr ')'
+               { $$ = CAST(type_element, new_typeof_expr(pr, $1.location, $3)); }
+       | TYPEOF '(' typename ')'
+               { $$ = CAST(type_element, new_typeof_type(pr, $1.location, $3)); }
+       ;
+/* type_spec_nonreserved_attr does not exist.  */
+
+initdecls:
+         initdecls_ { $$ = declaration_reverse($1); }
+       ;
+
+notype_initdecls:
+         notype_initdecls_ { $$ = declaration_reverse($1); }
+       ;
+
+initdecls_:
+         initdcl
+       | initdecls_ ',' maybe_resetattrs initdcl 
+               { $$ = declaration_chain($4, $1); }
+       ;
+
+notype_initdecls_:
+         notype_initdcl { $$ = $1; }
+       | notype_initdecls_ ',' maybe_resetattrs initdcl 
+               { $$ = declaration_chain($4, $1); }
+       ;
+
+maybeasm:
+         /* empty */
+               { $$ = NULL; }
+       | ASM_KEYWORD '(' STRING ')'
+               { $$ = new_asm_stmt(pr, $1.location, CAST(expression, $3),
+                                   NULL, NULL, NULL, NULL); }
+       ;
+
+initdcl:
+         declarator maybeasm maybe_attribute '='
+               { $<u.decl>$ = start_decl($1, $2, pstate.declspecs, 1,
+                                          prefix_attr($3));
+                 start_init($<u.decl>$, NULL); }
+         init
+/* Note how the declaration of the variable is in effect while its init is parsed! */
+               { finish_init();
+                 $$ = finish_decl($<u.decl>5, $6); }
+       | declarator maybeasm maybe_attribute
+               { declaration d = start_decl($1, $2, pstate.declspecs, 0,
+                                            prefix_attr($3));
+                 $$ = finish_decl(d, NULL); }
+       ;
+
+notype_initdcl:
+         notype_declarator maybeasm maybe_attribute '='
+               { $<u.decl>$ = start_decl($1, $2, pstate.declspecs, 1,
+                                        prefix_attr($3));
+                 start_init($<u.decl>$, NULL); }
+         init
+/* Note how the declaration of the variable is in effect while its init is parsed! */
+               { finish_init();
+                 $$ = finish_decl($<u.decl>5, $6); }
+       | notype_declarator maybeasm maybe_attribute
+               { declaration d = start_decl($1, $2, pstate.declspecs, 0,
+                                            prefix_attr($3));
+                 $$ = finish_decl(d, NULL); }
+       ;
+
+maybe_attribute:
+         /* empty */
+               { $$ = NULL; }
+       | attributes
+               { $$ = attribute_reverse($1); }
+       ;
+eattributes:
+         attributes { $$ = CAST(type_element, $1); }
+       ;
+
+nesc_attributes:
+         /* empty */ { $$ = NULL; }
+       | nesc_attributes nattrib
+               { $$ = attribute_chain($2, $1); }
+       ;
+
+attributes:
+         attribute
+               { $$ = $1; }
+       | attributes attribute
+               { $$ = attribute_chain($2, $1); }
+       ;
+
+attribute:
+         ATTRIBUTE '(' '(' attribute_list ')' ')'
+               { $$ = $4; }
+       | target_attribute { $$ = CAST(attribute, $1); }
+       | nattrib
+       ;
+
+target_attribute:
+         TARGET_ATTRIBUTE0
+               { word w = new_word(pr, $1.location, $1.id);
+                 $$ = new_gcc_attribute(pr, $1.location, w, NULL); }
+       | TARGET_ATTRIBUTE1 restricted_expr
+               { word w = new_word(pr, $1.location, $1.id);
+                 $$ = new_gcc_attribute(pr, $1.location, w, $2); }
+       | '@' restricted_expr
+               { word w = new_word(pr, $2->location, str2cstring(pr, "iar_at"));
+                 $$ = new_gcc_attribute(pr, $2->location, w, $2); }
+       ;
+
+restricted_expr:
+         CONSTANT { $$ = CAST(expression, $1); }
+       | string { $$ = $1; }
+       | '(' expr ')' { $$ = $2; }
+       ;
+
+attribute_list:
+         attrib
+               { $$ = CAST(attribute, $1); }
+       | attribute_list ',' attrib
+               { $$ = attribute_chain($1, CAST(attribute, $3)); }
+       ;
+
+attrib:
+         /* empty */
+               { $$ = NULL; }
+       | any_word
+               { $$ = new_gcc_attribute(pr, $1->location, $1, NULL); }
+       | any_word '(' IDENTIFIER ')'
+               { $$ = new_gcc_attribute
+                   (pr, $1->location, $1, make_attr_args($3.location, $3.id, NULL)); }
+       | any_word '(' IDENTIFIER ',' nonnull_exprlist ')'
+               { $$ = new_gcc_attribute
+                   (pr, $2.location, $1, make_attr_args($3.location, $3.id, $5));
+               }
+       | any_word '(' exprlist ')'
+               { $$ = new_gcc_attribute(pr, $2.location, $1, $3);
+               }
+       ;
+
+nattrib:
+         '@' nastart '(' initlist_maybe_comma ')'
+               { $$ = finish_attribute_use($2, $4); }
+       | '@' nastart error ')'
+               { $$ = finish_attribute_use($2, make_error_expr()); }
+       ;
+
+nastart:
+         idword
+               { $$ = start_attribute_use($1); }
+       ;
+
+/* This still leaves out most reserved keywords,
+   shouldn't we include them?  */
+
+any_word:
+         idword
+       | scspec
+               { $$ = make_cword($1->location, rid_name(CAST(rid, $1))); }
+       | type_spec 
+               { $$ = make_cword($1->location, rid_name(CAST(rid, $1))); }
+       | type_qual 
+               { $$ = make_cword($1->location, qualifier_name(CAST(qualifier, $1)->id)); }
+       | SIGNAL
+               { $$ = make_cword($1.location, "signal"); }
+       ;
+\f
+/* Initializers.  `init' is the entry point.  */
+
+init:
+         expr_no_commas { $$ = $1; simple_init($$); }
+       | '{'
+               { really_start_incremental_init(NULL); }
+         initlist_maybe_comma '}'
+               { $$ = make_init_list($1.location, $3); }
+       | error
+               { $$ = make_error_expr(); }
+       ;
+
+/* `initlist_maybe_comma' is the guts of an initializer in braces.  */
+initlist_maybe_comma:
+         /* empty */
+               { if (pedantic)
+                   pedwarn("ANSI C forbids empty initializer braces"); 
+                 $$ = NULL; }
+       | initlist1 maybecomma { $$ = expression_reverse($1); }
+       ;
+
+initlist1:
+         initelt
+       | initlist1 ',' initelt { $$ = expression_chain($3, $1); }
+       ;
+
+/* `initelt' is a single element of an initializer.
+   It may use braces.  */
+initelt:
+         designator_list '=' initval
+               { if (pedantic)
+                   pedwarn("ANSI C forbids specifying subobject to initialize"); 
+                 $$ = make_init_specific($1, $3); }
+       | designator initval
+               { if (pedantic)
+                   pedwarn("obsolete use of designated initializer without `='");
+                 $$ = make_init_specific($1, $2); }
+       | identifier ':'
+               { $<u.designator>$ = set_init_label($1.location, $1.id);
+                 if (pedantic)
+                   pedwarn("obsolete use of designated initializer with `:'"); }
+         initval
+               { $$ = make_init_specific($<u.designator>3, $4); }
+       | initval
+       ;
+
+initval:
+         '{'
+               { push_init_level (0); }
+         initlist_maybe_comma '}'
+               { $$ = make_init_list($1.location, $3); 
+                 process_init_element(NULL); }
+       | expr_no_commas
+               { process_init_element($1); $$ = $1; }
+       | error { $$ = make_error_expr(); }
+       ;
+
+designator_list:
+         designator 
+       | designator_list designator { $$ = designator_chain($1, $2); }
+       ;
+
+designator:
+         '.' identifier
+               { $$ = set_init_label($2.location, $2.id); }
+       /* These are for labeled elements.  The syntax for an array element
+          initializer conflicts with the syntax for an Objective-C message,
+          so don't include these productions in the Objective-C grammar.  */
+       | '[' expr_no_commas ELLIPSIS expr_no_commas ']'
+               { $$ = set_init_index($1.location, $2, $4);
+                 if (pedantic)
+                   pedwarn ("ISO C forbids specifying range of elements to initialize"); }
+       | '[' expr_no_commas ']'
+               { $$ = set_init_index($1.location, $2, NULL); }
+       ;
+\f
+nested_function:
+         declarator maybeasm maybe_attribute
+               { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm($2);
+
+                 if (!start_function(pstate.declspecs, $1, $3, 1))
+                   {
+                     YYERROR1;
+                   }
+                 }
+          old_style_parm_decls
+               { store_parm_decls(declaration_reverse($3)); }
+/* This used to use compstmt_or_error.
+   That caused a bug with input `f(g) int g {}',
+   where the use of YYERROR1 above caused an error
+   which then was handled by compstmt_or_error.
+   There followed a repeated execution of that same rule,
+   which called YYERROR1 again, and so on.  */
+         compstmt
+               { $$ = finish_function($7); }
+       ;
+
+notype_nested_function:
+         notype_declarator maybeasm maybe_attribute
+               { 
+                 /* maybeasm is only here to avoid a s/r conflict */
+                 refuse_asm($2);
+
+                 if (!start_function(pstate.declspecs, $1, $3, 1))
+                   {
+                     YYERROR1;
+                   }
+               }
+         old_style_parm_decls
+               { store_parm_decls(declaration_reverse($3)); }
+/* This used to use compstmt_or_error.
+   That caused a bug with input `f(g) int g {}',
+   where the use of YYERROR1 above caused an error
+   which then was handled by compstmt_or_error.
+   There followed a repeated execution of that same rule,
+   which called YYERROR1 again, and so on.  */
+         compstmt
+               { $$ = finish_function($7); }
+       ;
+
+/* Any kind of declarator (thus, all declarators allowed
+   after an explicit type_spec).  */
+
+declarator:
+         after_type_declarator
+       | notype_declarator
+       ;
+
+/* A declarator that is allowed only after an explicit type_spec.  */
+
+after_type_declarator:
+         after_type_declarator array_or_fn_declarator 
+               { $$ = finish_array_or_fn_declarator($1, $2); }
+        | '*' maybe_type_quals_attrs after_type_declarator
+               { $$ = make_pointer_declarator($1.location, $3, $2); }
+       | '(' maybe_attribute after_type_declarator ')'
+               { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); }
+       | TYPENAME { $$ = make_identifier_declarator($1.location, $1.id); }
+       | TYPENAME '.' identifier 
+               {
+                 $$ = make_interface_ref_declarator($1.location, $1.id, $3.id);
+               }
+       ;
+
+/* Kinds of declarator that can appear in a parameter list
+   in addition to notype_declarator.  This is like after_type_declarator
+   but does not allow a typedef name in parentheses as an identifier
+   (because it would conflict with a function with that typedef as arg).  */
+parm_declarator:
+         parm_declarator array_or_fn_declarator
+               { $$ = finish_array_or_fn_declarator($1, $2); }
+       | '*' maybe_type_quals_attrs parm_declarator
+               { $$ = make_pointer_declarator($1.location, $3, $2); }
+       | TYPENAME 
+               { $$ = make_identifier_declarator($1.location, $1.id); }
+       ;
+
+
+/* A declarator allowed whether or not there has been
+   an explicit type_spec.  These cannot redeclare a typedef-name.  */
+
+notype_declarator:
+         notype_declarator array_or_fn_declarator
+               { $$ = finish_array_or_fn_declarator($1, $2); }
+       | '*' maybe_type_quals_attrs notype_declarator
+               { $$ = make_pointer_declarator($1.location, $3, $2); }
+       | '(' maybe_attribute notype_declarator ')'
+               { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); }
+       | IDENTIFIER 
+               { $$ = make_identifier_declarator($1.location, $1.id); }
+       | IDENTIFIER '.' identifier
+               {
+                 $$ = make_interface_ref_declarator($1.location, $1.id, $3.id);
+               }
+       ;
+
+tag:
+         identifier { $$ = new_word(pr, $1.location, $1.id); }
+       ;
+
+structuse:
+         structkind tag nesc_attributes
+               { $$ = xref_tag($1.location, $1.i, $2); 
+                 if ($3) warning("attributes ignored"); }
+       | ENUM tag nesc_attributes
+               { $$ = xref_tag($1.location, kind_enum_ref, $2);
+                 if ($3) warning("attributes ignored"); }
+       ;
+
+structdef:
+         structkind tag nesc_attributes '{'
+               { $$ = start_struct($1.location, $1.i, $2);
+                 /* Start scope of tag before parsing components.  */
+               }
+         component_decl_list '}' maybe_attribute 
+               { $$ = finish_struct($<u.telement>5, $6, attribute_chain($3, $8)); }
+       | STRUCT '@' tag nesc_attributes '{'
+               { $$ = start_struct($1.location, kind_attribute_ref, $3);
+                 /* Start scope of tag before parsing components.  */
+               }
+         component_decl_list '}' maybe_attribute 
+               { $$ = finish_struct($<u.telement>6, $7, attribute_chain($4, $9)); }
+       | structkind '{' component_decl_list '}' maybe_attribute
+               { $$ = finish_struct(start_struct($1.location, $1.i,
+                                                 NULL), $3, $5);
+               }
+       | ENUM tag nesc_attributes '{'
+               { $$ = start_enum($1.location, $2); }
+         enumlist maybecomma_warn '}' maybe_attribute
+               { $$ = finish_enum($<u.telement>5, declaration_reverse($6), attribute_chain($3, $9)); }
+       | ENUM '{'
+               { $$ = start_enum($1.location, NULL); }
+         enumlist maybecomma_warn '}' maybe_attribute
+               { $$ = finish_enum($<u.telement>3, declaration_reverse($4), $7); }
+       ;
+
+structkind:
+         STRUCT { $$ = $1; $$.i = kind_struct_ref; }
+       | UNION { $$ = $1; $$.i = kind_union_ref; }
+       | NX_STRUCT { $$ = $1; $$.i = kind_nx_struct_ref; }
+       | NX_UNION { $$ = $1; $$.i = kind_nx_union_ref; }
+       ;
+
+maybecomma:
+         /* empty */
+       | ','
+       ;
+
+maybecomma_warn:
+         /* empty */
+       | ','
+               { if (pedantic) pedwarn("comma at end of enumerator list"); }
+       ;
+
+component_decl_list:
+         component_decl_list2
+               { $$ = declaration_reverse($1); }
+       | component_decl_list2 component_decl
+               { $$ = declaration_reverse(declaration_chain($2, $1));
+                 pedwarn("no semicolon at end of struct or union"); }
+       ;
+
+component_decl_list2:  
+         /* empty */
+               { $$ = NULL; }
+       | component_decl_list2 component_decl ';'
+               { $$ = declaration_chain($2, $1); }
+       | component_decl_list2 ';'
+               { if (pedantic)
+                   pedwarn("extra semicolon in struct or union specified"); 
+                  $$ = $1; }
+       ;
+
+/* There is a shift-reduce conflict here, because `components' may
+   start with a `typename'.  It happens that shifting (the default resolution)
+   does the right thing, because it treats the `typename' as part of
+   a `typed_type_specs'.
+
+   It is possible that this same technique would allow the distinction
+   between `notype_initdecls' and `initdecls' to be eliminated.
+   But I am being cautious and not trying it.  */
+
+component_decl:
+         declspecs_nosc_ts setspecs components
+               { $$ = make_data_decl($1, declaration_reverse($3)); }
+       | declspecs_nosc_ts setspecs
+               { if (pedantic)
+                   pedwarn("ISO C doesn't support unnamed structs/unions");
+
+                 $$ = make_data_decl($1, NULL); }
+       | declspecs_nosc_nots setspecs components_notype
+               { $$ = make_data_decl($1, declaration_reverse($3)); }
+       | declspecs_nosc_nots setspecs
+               { if (pedantic)
+                   pedwarn("ANSI C forbids member declarations with no members");
+                 shadow_tag($1);
+                 $$ = make_data_decl($1, NULL); }
+       | error
+               { $$ = make_error_decl(); }
+       | extension component_decl
+               { $$ = make_extension_decl($1.i, $1.location, $2); }
+       ;
+
+components:
+         component_declarator
+       | components ',' maybe_resetattrs component_declarator
+               { $$ = declaration_chain($4, $1); }
+       ;
+
+/* It should be possible to use components after the ',', but gcc 3
+   isn't doing this */
+components_notype:
+         component_notype_declarator
+       | components_notype ',' maybe_resetattrs component_notype_declarator
+               { $$ = declaration_chain($4, $1); }
+       ;
+
+component_declarator:
+         declarator maybe_attribute
+               { $$ = make_field($1, NULL, pstate.declspecs,
+                                 prefix_attr($2)); }
+       | declarator ':' expr_no_commas maybe_attribute
+               { $$ = make_field($1, $3, pstate.declspecs,
+                                 prefix_attr($4)); }
+       | ':' expr_no_commas maybe_attribute
+               { $$ = make_field(NULL, $2, pstate.declspecs,
+                                 prefix_attr($3)); }
+       ;
+
+component_notype_declarator:
+         notype_declarator maybe_attribute
+               { $$ = make_field($1, NULL, pstate.declspecs,
+                                 prefix_attr($2)); }
+       | notype_declarator ':' expr_no_commas maybe_attribute
+               { $$ = make_field($1, $3, pstate.declspecs,
+                                 prefix_attr($4)); }
+       | ':' expr_no_commas maybe_attribute
+               { $$ = make_field(NULL, $2, pstate.declspecs,
+                                 prefix_attr($3)); }
+       ;
+
+enumlist:
+         enumerator
+       | enumlist ',' enumerator
+               { $$ = declaration_chain($3, $1); }
+       | error
+               { $$ = NULL; }
+       ;
+
+
+enumerator:
+         identifier
+               { $$ = make_enumerator($1.location, $1.id, NULL); }
+       | identifier '=' expr_no_commas
+               { $$ = make_enumerator($1.location, $1.id, $3); }
+       ;
+
+typename:
+         declspecs_nosc 
+               { pending_xref_error(); }
+         absdcl
+               { $$ = make_type($1, $3); }
+       ;
+
+absdcl:   /* an abstract declarator */
+       /* empty */
+               { $$ = NULL; }
+       | absdcl1
+       ;
+
+absdcl1:  /* a nonempty absolute declarator */
+         absdcl1_ea
+       | absdcl1_noea
+       ;
+
+absdcl1_noea:
+         direct_absdcl1
+       | '*' maybe_type_quals_attrs absdcl1_noea
+               { $$ = make_pointer_declarator($1.location, $3, $2); }
+       ;
+
+absdcl1_ea:
+         '*' maybe_type_quals_attrs
+               { $$ = make_pointer_declarator($1.location, NULL, $2); }
+       | '*' maybe_type_quals_attrs absdcl1_ea
+               { $$ = make_pointer_declarator($1.location, $3, $2); }
+       ;
+
+direct_absdcl1:
+         '(' maybe_attribute absdcl1 ')'
+               { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); }
+       | direct_absdcl1 array_or_absfn_declarator
+               { $$ = finish_array_or_fn_declarator($1, $2); }
+       | array_or_absfn_declarator 
+               { $$ = finish_array_or_fn_declarator(NULL, $1); }
+       ;
+
+array_or_fn_declarator:
+         fn_declarator 
+       | array_declarator
+       ;
+
+array_or_absfn_declarator:
+         absfn_declarator 
+       | array_declarator
+       ;
+
+fn_declarator:
+         parameters '(' parmlist_or_identifiers_1 fn_quals
+               { $$ = CAST(nested_declarator,
+                   new_function_declarator(pr, $2.location, NULL, $3, $1, $4, NULL)); }
+       |  '(' parmlist_or_identifiers fn_quals
+               { $$ = CAST(nested_declarator,
+                   new_function_declarator(pr, $1.location, NULL, $2, NULL, $3, NULL)); }
+       ;
+
+absfn_declarator:
+         '(' parmlist fn_quals
+               { $$ = CAST(nested_declarator,
+                   new_function_declarator(pr, $1.location, NULL, $2, NULL, $3, NULL)); }
+       ;
+
+array_declarator:
+         '[' expr ']'
+               { $$ = CAST(nested_declarator, new_array_declarator(pr, $1.location, NULL, $2)); }
+       | '[' ']' 
+               { $$ = CAST(nested_declarator, new_array_declarator(pr, $1.location, NULL, NULL)); }
+       ;
+
+/* at least one statement, the first of which parses without error.  */
+/* stmts is used only after decls, so an invalid first statement
+   is actually regarded as an invalid decl and part of the decls.  */
+
+stmts:
+       stmt_or_labels
+               {
+                 if (pedantic && $1.i)
+                   pedwarn("ANSI C forbids label at end of compound statement");
+                 /* Add an empty statement to last label if stand-alone */
+                 if ($1.i)
+                   {
+                     statement last_label = last_statement($1.stmt);
+
+                     chain_with_labels(last_label, CAST(statement, new_empty_stmt(pr, last_label->location)));
+                   }
+                 $$ = $1.stmt;
+               }
+       ;
+
+stmt_or_labels:
+         stmt_or_label
+       | stmt_or_labels stmt_or_label
+               { $$.i = $2.i; $$.stmt = chain_with_labels($1.stmt, $2.stmt); }
+       | stmt_or_labels errstmt
+               { $$.i = 0; $$.stmt = make_error_stmt(); }
+       ;
+
+xstmts:
+       /* empty */ { $$ = NULL; }
+       | stmts
+       ;
+
+errstmt:  error ';'
+       ;
+
+pushlevel:
+         /* empty */
+               { pushlevel(FALSE); }
+       ;
+
+/* Read zero or more forward-declarations for labels
+   that nested functions can jump to.  */
+maybe_label_decls:
+         /* empty */ { $$ = NULL; }
+       | label_decls
+               { if (pedantic)
+                   pedwarn("ANSI C forbids label declarations"); 
+                 $$ = id_label_reverse($1); }
+       ;
+
+label_decls:
+         label_decl
+       | label_decls label_decl { $$ = id_label_chain($2, $1); }
+       ;
+
+label_decl:
+         LABEL identifiers_or_typenames ';'
+               { $$ = $2; }
+       ;
+
+/* This is the body of a function definition.
+   It causes syntax errors to ignore to the next openbrace.  */
+compstmt_or_error:
+         compstmt
+       | error compstmt { $$ = $2; }
+       ;
+
+compstmt_start: 
+         '{' { $$ = $1; compstmt_count++; }
+        ;
+
+compstmt: 
+         compstmt_start pushlevel '}'
+               { $$ = CAST(statement, new_compound_stmt(pr, $1.location, NULL, NULL, NULL, poplevel())); }
+       | compstmt_start pushlevel maybe_label_decls decls xstmts '}'
+               { $$ = CAST(statement, new_compound_stmt(pr, $1.location, $3,
+                   declaration_reverse($4), $5, poplevel())); }
+       | compstmt_start pushlevel maybe_label_decls error '}'
+               { poplevel();
+                 $$ = make_error_stmt(); }
+       | compstmt_start pushlevel maybe_label_decls stmts '}'
+               { $$ = CAST(statement, new_compound_stmt(pr, $1.location, $3, NULL, $4, poplevel())); }
+       ;
+
+/* Value is number of statements counted as of the closeparen.  */
+simple_if:
+         if_prefix labeled_stmt
+               { $$.stmt = CAST(statement, new_if_stmt(pr, $1.expr->location, $1.expr, $2, NULL));
+                 $$.i = $1.i; }
+       | if_prefix error { $$.i = $1.i; $$.stmt = make_error_stmt(); }
+       ;
+
+if_prefix:
+         IF '(' expr ')'
+               { $$.i = stmt_count;
+                 $$.expr = $3;
+                 check_condition("if", $3); }
+       ;
+
+/* This is a subroutine of stmt.
+   It is used twice, once for valid DO statements
+   and once for catching errors in parsing the end test.  */
+do_stmt_start:
+         DO
+               { stmt_count++;
+                 compstmt_count++; 
+                 $<u.cstmt>$ = CAST(conditional_stmt,
+                                  new_dowhile_stmt(pr, $1.location, NULL, NULL));
+                push_loop(CAST(statement, $<u.cstmt>$)); }
+         labeled_stmt WHILE
+               { $$ = $<u.cstmt>2; 
+                 $$->stmt = $3; }
+       ;
+
+labeled_stmt:
+         stmt
+               { $$ = $1; }
+       | label labeled_stmt
+               { $$ = CAST(statement, new_labeled_stmt(pr, $1->location, $1, $2)); }
+       ;
+
+stmt_or_label:
+         stmt
+               { $$.i = 0; $$.stmt = $1; }
+       | label
+               { $$.i = 1; $$.stmt = CAST(statement, new_labeled_stmt(pr, $1->location, $1, NULL)); }
+       ;
+
+atomic_stmt:
+         ATOMIC { 
+                  atomic_stmt last_atomic = current.in_atomic;
+
+                  current.in_atomic = new_atomic_stmt(pr, $1.location, NULL);
+                  current.in_atomic->containing_atomic = last_atomic;
+                }
+         stmt_or_error
+               {
+                 atomic_stmt this_atomic = current.in_atomic;
+
+                 this_atomic->stmt = $3;
+                 current.in_atomic = this_atomic->containing_atomic;
+                 if (current.in_atomic) /* Ignore nested atomics */
+                   $$ = $3;
+                 else
+                   $$ = CAST(statement, this_atomic);
+               }
+       ;
+
+stmt_or_error:
+         stmt
+       | error { $$ = make_error_stmt(); }
+       ;
+
+/* Parse a single real statement, not including any labels.  */
+stmt:
+         compstmt
+               { stmt_count++; $$ = $1; }
+       | expr ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_expression_stmt(pr, $1->location, $1)); }
+       | simple_if ELSE
+               { $1.i = stmt_count; }
+         labeled_stmt
+               { if (extra_warnings && stmt_count == $1.i)
+                   warning("empty body in an else-statement");
+                 $$ = $1.stmt;
+                 if (is_if_stmt($$)) /* could be an error_stmt */
+                   CAST(if_stmt, $$)->stmt2 = $4;
+               }
+       | simple_if %prec IF
+               { /* This warning is here instead of in simple_if, because we
+                    do not want a warning if an empty if is followed by an
+                    else statement.  Increment stmt_count so we don't
+                    give a second error if this is a nested `if'.  */
+                 if (extra_warnings && stmt_count++ == $1.i)
+                   warning_with_location ($1.stmt->location,
+                                          "empty body in an if-statement");
+                 $$ = $1.stmt; }
+       | simple_if ELSE error
+               { $$ = make_error_stmt(); }
+       | WHILE
+               { stmt_count++; }
+         '(' expr ')' 
+               { check_condition("while", $4); 
+                 $<u.cstmt>$ = CAST(conditional_stmt,
+                                  new_while_stmt(pr, $1.location, $4, NULL));
+                 /* The condition is not "in the loop" for break or continue */
+                 push_loop(CAST(statement, $<u.cstmt>$)); }
+         labeled_stmt
+               { $$ = CAST(statement, $<u.cstmt>6);
+                 $<u.cstmt>6->stmt = $7; 
+                 pop_loop(); }
+       | do_stmt_start '(' expr ')' ';'
+               { $$ = CAST(statement, $1);
+                 $1->condition = $3;
+                 check_condition("do-while", $3); 
+                 /* Note that pop_loop should be before the expr to be consistent
+                    with while, but GCC is inconsistent. See loop1.c */
+                 pop_loop(); }
+       | do_stmt_start error
+               { $$ = make_error_stmt(); 
+                 pop_loop(); }
+       | FOR '(' xexpr ';' { stmt_count++; }
+               xexpr ';' { if ($6) check_condition("for", $6); }
+               xexpr ')' 
+               { $<u.for_stmt>$ = new_for_stmt(pr, $1.location, $3, $6, $9, NULL);
+                 push_loop(CAST(statement, $<u.for_stmt>$)); }
+               labeled_stmt
+               { $$ = CAST(statement, $<u.for_stmt>11);
+                 $<u.for_stmt>11->stmt = $12; 
+                 pop_loop(); }
+       | SWITCH '(' expr ')'
+               { stmt_count++; check_switch($3); 
+                 $<u.cstmt>$ = CAST(conditional_stmt,
+                                  new_switch_stmt(pr, $1.location, $3, NULL)); 
+                 push_loop(CAST(statement, $<u.cstmt>$)); } 
+         labeled_stmt
+               { $$ = CAST(statement, $<u.cstmt>5); 
+                 $<u.cstmt>5->stmt = $6;
+                 pop_loop(); }
+       | BREAK ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_break_stmt(pr, $1.location));
+                 check_break($$);
+               }
+       | CONTINUE ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_continue_stmt(pr, $1.location));
+                 check_continue($$);
+               }
+       | RETURN ';'
+               { stmt_count++;
+                 $$ = make_void_return($1.location); }
+       | RETURN expr ';'
+               { stmt_count++;
+                 $$ = make_return($1.location, $2); }
+       | ASM_KEYWORD maybe_type_qual '(' expr ')' ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, NULL,
+                                              NULL, NULL, $2)); }
+       /* This is the case with just output operands.  */
+       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, NULL,
+                                              NULL, $2)); }
+       /* This is the case with input operands as well.  */
+       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ')' ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, $8, NULL, $2)); }
+       /* This is the case with clobbered registers as well.  */
+       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
+         asm_operands ':' asm_clobbers ')' ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, $8, $10, $2)); }
+       | GOTO id_label ';'
+               { stmt_count++;
+                 $$ = CAST(statement, new_goto_stmt(pr, $1.location, $2));
+                 use_label($2);
+               }
+       | GOTO '*' expr ';'
+               { if (pedantic)
+                   pedwarn("ANSI C forbids `goto *expr;'");
+                 fail_in_atomic("goto *");
+                 stmt_count++;
+                 $$ = CAST(statement, new_computed_goto_stmt(pr, $1.location, $3)); 
+                 check_computed_goto($3); }
+       | atomic_stmt
+       | ';' { $$ = CAST(statement, new_empty_stmt(pr, $1.location)); }
+       ;
+
+/* Any kind of label, including jump labels and case labels.
+   ANSI C accepts labels only before statements, but we allow them
+   also at the end of a compound statement.  */
+
+label:   CASE expr_no_commas ':'
+               { $$ = CAST(label, new_case_label(pr, $1.location, $2, NULL)); 
+                 check_case($$); }
+       | CASE expr_no_commas ELLIPSIS expr_no_commas ':'
+               { $$ = CAST(label, new_case_label(pr, $1.location, $2, $4)); 
+                 check_case($$); }
+       | DEFAULT ':'
+               { $$ = CAST(label, new_default_label(pr, $1.location)); 
+                 check_default($$); }
+       | id_label ':'
+               { $$ = CAST(label, $1); 
+                 define_label($1); }
+       ;
+
+/* Either a type-qualifier or nothing.  First thing in an `asm' statement.  */
+
+maybe_type_qual:
+       /* empty */
+               { $$ = NULL; }
+       | type_qual
+       ;
+
+xexpr:
+       /* empty */
+               { $$ = NULL; }
+       | expr
+       ;
+
+/* These are the operands other than the first string and colon
+   in  asm ("addextend %2,%1": "=dm" (x), "0" (y), "g" (*x))  */
+asm_operands:
+         /* empty */
+               { $$ = NULL; }
+       | nonnull_asm_operands
+       ;
+
+nonnull_asm_operands:
+         asm_operand
+       | nonnull_asm_operands ',' asm_operand
+               { $$ = asm_operand_chain($1, $3); }
+       ;
+
+asm_operand:
+         STRING '(' expr ')'
+               { $$ = new_asm_operand(pr, $1->location, NULL, $1, $3);  }
+       | '[' idword ']' STRING '(' expr ')'
+               { $$ = new_asm_operand(pr, $1.location, $2, $4, $6);  }
+       ;
+
+asm_clobbers:
+         STRING
+               { $$ = $1; }
+       | asm_clobbers ',' STRING
+               { $$ = string_chain($1, $3); }
+       ;
+\f
+/* This is what appears inside the parens in a function declarator.
+   Its value is a list of ..._TYPE nodes.  */
+parmlist:
+               { pushlevel(TRUE); }
+         parmlist_1
+               { $$ = $2;
+                 /* poplevel() is done when building the declarator */
+               }
+       ;
+
+parmlist_1:
+         parmlist_2 ')' { $$ = $1; }
+       | parms ';'
+               { if (pedantic)
+                   pedwarn("ANSI C forbids forward parameter declarations");
+                 allow_parameter_redeclaration($1, TRUE);
+               }
+         parmlist_1
+               { $$ = declaration_chain($1, $4); }
+       | error ')'
+               { $$ = make_error_decl(); }
+       ;
+
+/* This is what appears inside the parens in a function declarator.
+   Is value is represented in the format that grokdeclarator expects.  */
+parmlist_2:  /* empty */
+               { $$ = NULL; }
+       | ELLIPSIS
+               { $$ = make_error_decl();
+                 /* Gcc used to allow this as an extension.  However, it does
+                    not work for all targets, and thus has been disabled.
+                    Also, since func (...) and func () are indistinguishable,
+                    it caused problems with the code in expand_builtin which
+                    tries to verify that BUILT_IN_NEXT_ARG is being used
+                    correctly.  */
+                 error("ANSI C requires a named argument before `...'");
+               }
+       | parms
+               { $$ = $1; }
+       | parms ',' ELLIPSIS
+               { $$ = declaration_chain($1, CAST(declaration, new_ellipsis_decl(pr, $3.location))); }
+       ;
+
+parms:
+         parm
+       | parms ',' parm
+               { $$ = declaration_chain($1, $3); }
+       ;
+
+/* A single parameter declaration or parameter type name,
+   as found in a parmlist.  */
+parm:
+         declspecs_ts xreferror parm_declarator maybe_attribute
+               { $$ = declare_parameter($3, $1, $4); }
+       | declspecs_ts xreferror notype_declarator maybe_attribute
+               { $$ = declare_parameter($3, $1, $4); }
+       | declspecs_ts xreferror absdcl
+               { $$ = declare_parameter($3, $1, NULL); }
+       | declspecs_ts xreferror absdcl1_noea attributes
+               { $$ = declare_parameter($3, $1, $4); }
+       | declspecs_nots xreferror notype_declarator maybe_attribute
+               { $$ = declare_parameter($3, $1, $4); }
+       | declspecs_nots xreferror absdcl
+               { $$ = declare_parameter($3, $1, NULL); }
+       | declspecs_nots xreferror absdcl1_noea attributes 
+               { $$ = declare_parameter($3, $1, $4); }
+       ;
+
+xreferror: { pending_xref_error(); } ;
+
+/* This is used in a function definition
+   where either a parmlist or an identifier list is ok.
+   Its value is a list of ..._TYPE nodes or a list of identifiers.  */
+parmlist_or_identifiers:
+               { pushlevel(TRUE); }
+         parmlist_or_identifiers_1
+               { $$ = $2;
+                 /* poplevel is done when building the declarator */ }
+       ;
+
+parmlist_or_identifiers_1:
+         parmlist_1
+       | identifiers ')' { $$ = $1; }
+       ;
+
+/* A nonempty list of identifiers.  */
+identifiers:
+         old_parameter
+               { $$ = $1; }
+       | identifiers ',' old_parameter
+               { $$ = declaration_chain($1, $3); }
+       ;
+
+old_parameter:
+         IDENTIFIER { $$ = declare_old_parameter($1.location, $1.id); }
+       ;
+
+/* A nonempty list of identifiers, including typenames.  */
+identifiers_or_typenames:
+         id_label { $$ = $1; declare_label($1); }
+       | identifiers_or_typenames ',' id_label
+               { $$ = id_label_chain($3, $1);
+                 declare_label($3); }
+       ;
+
+/* A possibly empty list of function qualifiers (only one exists so far) */
+fn_quals:
+         /* empty */ { $$ = NULL; }
+       | fn_qual { $$ = $1; }
+       ;
+
+extension:
+         EXTENSION
+               { $$.location = $1.location;
+                 $$.i = pedantic;
+                 pedantic = 0; }
+       ;
+
+scspec:
+         SCSPEC
+               { $$ = CAST(type_element, new_rid(pr, $1.location, $1.i)); }
+       | DEFAULT
+               { $$ = CAST(type_element, new_rid(pr, $1.location, RID_DEFAULT)); }
+       ;
+
+type_qual:
+         TYPE_QUAL 
+               { $$ = CAST(type_element, new_qualifier(pr, $1.location, $1.i)); }
+       ;
+
+fn_qual:
+         FN_QUAL 
+               { $$ = CAST(type_element, new_qualifier(pr, $1.location, $1.i)); }
+       ;
+
+type_spec:
+         TYPESPEC
+               { $$ = CAST(type_element, new_rid(pr, $1.location, $1.i)); }
+       ;
+
+\f
+%%
diff --git a/src/cg_help.c b/src/cg_help.c
new file mode 100644 (file)
index 0000000..a104666
--- /dev/null
@@ -0,0 +1,128 @@
+
+// The following was generated from cg_help.fig, by exporting as a
+// gif, and then running hexdump:
+//   hexdump -e '5/4 " 0x%08x," "\n"' cg_help.gif 
+
+int cg_help_gif[] = {
+ 0x38464947, 0x017c6137, 0x00a100de, 0x00000000, 0xdfffffff,
+ 0x0000dfdf, 0x00002cff, 0x017c0000, 0x020000de, 0xa98f8cfe,
+ 0xa30fe08b, 0x8bdab463, 0xfbbcdeb3, 0x58e2860f, 0xa6442649,
+ 0x2e08f9d4, 0x4cf2a93b, 0xcf8df6d7, 0x7b0ae030, 0x86f491de,
+ 0x022fa2c4, 0xcc972a4c, 0x8c685266, 0x44ce24f6, 0x228d8a44,
+ 0xf7aedcab, 0xc766bc0b, 0x42135453, 0xe0cd174e, 0x570dfbb6,
+ 0x63f4d5a0, 0xebaadc2c, 0xffb880ed, 0xb0e7880f, 0x9380f7b7,
+ 0x18689847, 0xa8e8d8c8, 0x78589881, 0x39291327, 0xb9a8f7d9,
+ 0x597968f9, 0xf9e236c7, 0x7a69c989, 0x0a4a36da, 0xbaa2094a,
+ 0x3a899aca, 0xfb082b4b, 0x73cae8b9, 0xfb5adabb, 0xc8321c0b,
+ 0x31cb9a4b, 0x1b2c5c4c, 0x818cdccc, 0x9c697c9c, 0xbd2d1d01,
+ 0xb0324cec, 0x560d9dcd, 0x5be8ad6d, 0xecae1bb2, 0xfe8db32d,
+ 0x384e6e05, 0x8eee52bd, 0xa1febd8b, 0x3ed55f6e, 0xcf2cf93f,
+ 0x085f2d7f, 0xec97027c, 0x5c67a803, 0xc5087f83, 0x81882bd5,
+ 0x0d3c4420, 0x68abc5cf, 0xfe06a271, 0x1c6d1a89, 0x6146a8c4,
+ 0x43208f80, 0x80b8ec3e, 0x0c4aca23, 0x487c264b, 0x911a65d2,
+ 0xaca80d2b, 0xcca62249, 0xee74be2c, 0xe6b342c4, 0x5ac29c4d,
+ 0xe72934fe, 0x0ca234a8, 0xe0f53286, 0x4a11a953, 0x39aea551,
+ 0xd3e9d389, 0x0ead550d, 0x2bd46aa1, 0x0742ac4f, 0x5615156c,
+ 0x5d3b94ac, 0x17980d09, 0xb3d6a3b4, 0x1bf6d4cf, 0x5bd61699,
+ 0x72277177, 0x58f746eb, 0x0b7f3dde, 0xa316b5ef, 0x7c6e1ead,
+ 0x6c7e06c9, 0x6d993141, 0xcb871843, 0xe5949834, 0xa3218ecb,
+ 0x1a30bbec, 0xa3a32265, 0xb7b77661, 0x81cf6234, 0x3c905ca9,
+ 0xd90bb546, 0x4b9b4ebc, 0xeb35787d, 0x585630b3, 0xd6fb4da3,
+ 0x73b8df9c, 0x1bbceb27, 0x99698ee2, 0x2e0f1add, 0xdcaad5fc,
+ 0x4e8161d0, 0x96f96f6e, 0x1b0d84e6, 0x735d2e3f, 0xb4caeae5,
+ 0x3e8f3f9b, 0xecf5fabd, 0xef7fbbdb, 0xbf8f789e, 0xf32786e6,
+ 0xf6171e4e, 0x1bfee7a7, 0x5dff1fc8, 0xf3852374, 0xed4b7e5d,
+ 0x0b0fd447, 0x8158b770, 0x07d75a01, 0xb8047583, 0x21c83119,
+ 0xaf098eb8, 0x7006a849, 0x0062f60f, 0x51461d87, 0xe2188421,
+ 0xa2390f04, 0x88597839, 0x18516622, 0x74662580, 0xc1b07ee2,
+ 0x92819cf8, 0x58a2f660, 0xd4c8d5d7, 0xf7e0528d, 0xda3c2f61,
+ 0x189012f5, 0x5b15e8f6, 0xa3f52a4c, 0x093e0992, 0xce486865,
+ 0x4194a174, 0x2b53f952, 0xa594ee5c, 0x495e5b96, 0x965f9786,
+ 0x3598a514, 0x3d660909, 0xa694ca6c, 0x89bd2b9a, 0x56674c26,
+ 0x9f9ca714, 0x4890d9dd, 0xa619f674, 0x3992539e, 0xf27c9f95,
+ 0x1da0a793, 0x63a3e785, 0xa81a227f, 0x5a1e28a2, 0x568f721f,
+ 0x9789e92a, 0xa6e96672, 0xe99a45e0, 0xc8a684a4, 0x2670a300,
+ 0x949cea1a, 0xa9a81746, 0xea9aa120, 0x0796ab9a, 0xc4f4a795,
+ 0xd7ada52a, 0xae807a80, 0x2b8af0ef, 0x04bebe7f, 0x62c3af6c,
+ 0xb06cfe59, 0x074ace5b, 0x3b32b5a9, 0x2aca2846, 0xb09e1f69,
+ 0xa16c782e, 0x5bcb4ec9, 0x1b6d57b6, 0x707cb78f, 0x88b5692b,
+ 0x1882ab39, 0x2e4b5e9f, 0x0ab2e664, 0x9aae572e, 0xbbbb6ec4,
+ 0xbc6bbbbd, 0x2dfbcecf, 0xab96f6ba, 0x32feb12e, 0x1ab68301,
+ 0x5e308bfe, 0x5aec1826, 0x0c25e920, 0x45fdb631, 0x16c5714c,
+ 0xc6718c5f, 0x71cc6f1a, 0x0c7f1ec7, 0x8f22c872, 0x26c9724c,
+ 0xca728c9f, 0x72ccaf2a, 0x0cbf2ecb, 0xcf32cc73, 0x36cd734c,
+ 0xcddebb07, 0x70ece5c9, 0xab4963c0, 0x32f8acb3, 0x435a2fac,
+ 0xd045bb47, 0xc981411a, 0x4cf837c0, 0xd74ad38f, 0xf5aff472,
+ 0xd36fc352, 0x35036753, 0xfb4082bc, 0x335bd495, 0x1ed7b552,
+ 0xd1761b89, 0x76819f63, 0x08bb5719, 0x736bcff6, 0x5785b592,
+ 0xdce9fdd7, 0x85adb49d, 0x2df2a5d8, 0x0080deb7, 0x78a2540e,
+ 0xe0b6a637, 0xec4dc539, 0xadf976b3, 0x97840e78, 0xe1e519fe,
+ 0x528e4100, 0x0e5a9961, 0x5f9c9669, 0x733a36fe, 0xe779f901,
+ 0x42fa1358, 0x5e8cd9e2, 0x478de4e3, 0xc989b8c6, 0xec64beb1,
+ 0x3a8ec246, 0x433ba111, 0xcbb68dbb, 0x61ee712e, 0xa0966ecf,
+ 0xd278efae, 0xd6efc8f1, 0x0bbfcefb, 0xb5f3c728, 0xf34c0ea9,
+ 0x901f29ac, 0x0f43d215, 0x619ef599, 0xc295bcbf, 0xf79ac54f,
+ 0x3dcf6eee, 0xedf7e35e, 0xa1adf999, 0xd9f83e9f, 0x5d3ee63f,
+ 0x3ea81ff2, 0x4699de81, 0x14f829bd, 0x1143a6af, 0xd11648a9,
+ 0x74668555, 0x45fcadbb, 0x0d52b64f, 0xa2e7f87d, 0x82085115,
+ 0x8adb3b91, 0x1040808a, 0x4682e80d, 0x2a8ee020, 0x35308fe8,
+ 0x541e4290, 0x88248844, 0x286e1027, 0x20e1be69, 0x88547469,
+ 0x84a7de13, 0xec215216, 0xffaa5058, 0x02869060, 0x76422173,
+ 0xc989b327, 0xe2248670, 0x05562c61, 0x10b1e9c3, 0x983b406e,
+ 0xb0a896b1, 0x89d14226, 0xfe16944f, 0x8f089915, 0x8b315586,
+ 0x17228c5a, 0xf54608a7, 0xfc85f0e8, 0x8046211b, 0x6cf53318,
+ 0x341d8890, 0x574ab362, 0xc3163744, 0x8e58e486, 0x9f38c615,
+ 0x8d62b224, 0x8b60c8bc, 0x13b7f8e8, 0x648d90b4, 0xa0ace084,
+ 0x0090c723, 0x334e9032, 0x39130be3, 0x30ce2193, 0xa45c1447,
+ 0x43e304f6, 0x8e71f801, 0x03e093f9, 0xa2c9692b, 0x7c30d24c,
+ 0xd8fae089, 0xdc114a17, 0xfcab7b2f, 0x71452a60, 0x3276544a,
+ 0x257ba996, 0x3c39685a, 0x0cb2e163, 0xfc2554b6, 0x58c92780,
+ 0xad8e91a2, 0x76f4484c, 0x161b4c39, 0xfbd18df3, 0x47faf225,
+ 0x4f86674c, 0x664cb47b, 0x9589ab34, 0x97a58e65, 0x4d25392c,
+ 0x6843f8e0, 0x6b9b5286, 0x99349471, 0x0a6ecdc9, 0xd4e42faf,
+ 0xd953389d, 0x63fa5cce, 0x657cef54, 0x49808f3c, 0x9b935924,
+ 0x36938ced, 0x7fce99f7, 0x0098ab02, 0xa12ce74d, 0xd2702c94,
+ 0x504aa0ca, 0x16fed468, 0x31cc4d27, 0x93ca28b4, 0x54eab868,
+ 0x133689cf, 0x9b2835a3, 0xd1aa3312, 0xa2cf3e66, 0xd016cb58,
+ 0x9336ca42, 0xba305492, 0xf54a293a, 0x167750e1, 0x850a2174,
+ 0xe1d94be2, 0x94cd6451, 0xe2e98a91, 0xb4c0e34d, 0x0bb4ba37,
+ 0x2083e1cb, 0xf809ba7f, 0x483b4dec, 0x9b108605, 0x4aa8d50a,
+ 0xad54aa75, 0x8aaf55aa, 0x756aacd5, 0xaaed5cab, 0xd60abf57,
+ 0xac758ab0, 0x596b2d64, 0x37d66a87, 0xec1bf4ac, 0xd54a6b49,
+ 0xe98587f8, 0x0d6ead74, 0xba8d4e57, 0xc90abb53, 0xd7dd75a7,
+ 0x84fa6d5e, 0xaf2ea698, 0x50abbd55, 0xb335da41, 0xd0a4b5f5,
+ 0xdaba6c02, 0x1aaf5746, 0x9d1da1f6, 0x3ab3645c, 0x4da90859,
+ 0xac58b1b0, 0x59797ef6, 0xb3cd5ace, 0x2fa32d99, 0xbeb6e9cf,
+ 0xba21d68a, 0xdcda6d40, 0xc9f9daba, 0x5d32b5cb, 0x084365d4,
+ 0xf6c44d52, 0xd2bdb356, 0xa3c11b6d, 0x31e8ba86, 0x0dd1a5bb,
+ 0x5b99fee9, 0xb095e42e, 0x3b1d454b, 0xecb81b69, 0x8eb99724,
+ 0x712f27b8, 0x3ae4ceb7, 0xa2d73ae1, 0xbba0d92e, 0xcfad154d,
+ 0x61c392bb, 0x2668b114, 0xaf862436, 0x3666f2b2, 0xe9258bc1,
+ 0xc3be642e, 0x8c5e2fad, 0xbefcdf85, 0x83c9984f, 0xabe4e52f,
+ 0x97dafbdf, 0x0788562d, 0x348bfd71, 0xbb53216c, 0x58065d0d,
+ 0x485ebbf4, 0x08707830, 0x71352ffe, 0x3843de49, 0x0e10c378,
+ 0x8bf6d62e, 0x182f0bcc, 0x70ee0f1d, 0x6196a57e, 0xbe385438,
+ 0x3e25dcba, 0x01e251bd, 0x4ebd62cb, 0x56fd9bfa, 0x6260e16c,
+ 0xe61bc493, 0xbc7f8cd1, 0x78071ac5, 0xb17e2e4c, 0x47a806a7,
+ 0x69233674, 0x93443028, 0x2742c173, 0x471516fd, 0x0d053246,
+ 0x58f022c8, 0xbc3bcb15, 0x6cb321f2, 0xb97f2db7, 0xf1d1a6cb,
+ 0x9fac922d, 0xc455a25e, 0x81f340c4, 0x5766e598, 0x83a8f2da,
+ 0xcca22424, 0xd4e797ac, 0xba0a9f87, 0x49211e23, 0xe3382ffe,
+ 0x166a3387, 0xc949a0a2, 0xb2174129, 0xb469f08c, 0xe90d1fa3,
+ 0xd25a4b48, 0xa54d23fa, 0x389b257c, 0xe89ed8b3, 0xf474f3c1,
+ 0xff4ae89c, 0xee7dcf90, 0xc741a895, 0xfa0336c7, 0xaf66a41d,
+ 0xeab335a7, 0x831a287e, 0x9af399ba, 0xb8676c5b, 0x1e13fabc,
+ 0x833c2502, 0x1f51e630, 0xf244cf34, 0xb8475475, 0xb298dac9,
+ 0x99a629c8, 0xe38c7375, 0xd9f55e48, 0x7bb61de1, 0x72ed4ab1,
+ 0x13c30f8a, 0xabb45a9e, 0x6afe6cbd, 0x63e4db35, 0xfb31b5f3,
+ 0x7b6e596d, 0x1a0ecd7c, 0x4c7b53b9, 0xb8b56f71, 0x7675c6c6,
+ 0xebee9b25, 0x5fdee45e, 0xfcbfb6cd, 0xd1c16ddd, 0xa6fb981b,
+ 0xce0758a7, 0xb6fa79db, 0xb8437add, 0x96a9f238, 0xe1d48729,
+ 0x78360249, 0x8a528e25, 0x1a03e523, 0x3b5a6e8f, 0xca84b85e,
+ 0x053fe30f, 0x6052b6b9, 0x967ac1f2, 0x9b7aa7a6, 0xd52e49c9,
+ 0xe291a397, 0x642c2f30, 0x35589e6b, 0xa0dc32cd, 0x41b9d739,
+ 0x95eb7b38, 0x8e52967f, 0x8b1c30d5, 0x963af42e, 0xed81e90e,
+ 0x0e92d139, 0x315ec351, 0xfa81ed15, 0x374adad9, 0x609d5b3a,
+ 0x0141b75a, 0x003b0000
+};
+
diff --git a/src/cg_help.fig b/src/cg_help.fig
new file mode 100644 (file)
index 0000000..0c0eba3
--- /dev/null
@@ -0,0 +1,34 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #bebebe
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 3375 563 450 1800 3825 675 2925
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 2250 563 450 1800 2700 675 1800
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 1125 563 450 1800 1575 675 675
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 1125 563 450 6075 1575 4950 675
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 2250 563 450 6075 2700 4950 1800
+1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 3375 563 450 6075 3825 4950 2925
+2 1 1 2 0 7 50 0 -1 6.000 0 0 -1 1 0 2
+       1 1 2.00 120.00 240.00
+        1800 2250 4950 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       1 1 2.00 120.00 240.00
+        1800 1125 4950 1125
+2 1 0 2 0 7 50 0 -1 6.000 0 0 7 1 0 2
+       1 1 2.00 120.00 240.00
+        1800 3375 4950 3375
+4 1 0 50 0 0 20 0.0000 4 195 675 3240 3285 func:f\001
+4 1 1 50 0 0 20 0.0000 4 195 180 1233 3469 E\001
+4 1 1 50 0 0 20 0.0000 4 195 195 1233 2344 C\001
+4 1 1 50 0 0 20 0.0000 4 195 210 1236 1212 A\001
+4 1 1 50 0 0 20 0.0000 4 195 90 3240 1035 I\001
+4 1 1 50 0 0 20 0.0000 4 195 105 3240 2160 J\001
+4 1 1 50 0 0 20 0.0000 4 195 210 5504 2340 D\001
+4 1 1 50 0 0 20 0.0000 4 195 195 5509 1219 B\001
+4 1 1 50 0 0 20 0.0000 4 195 165 5504 3465 F\001
diff --git a/src/configure b/src/configure
new file mode 100755 (executable)
index 0000000..f5c8568
--- /dev/null
@@ -0,0 +1,8136 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for nesc 1.3.0.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 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 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  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
+
+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
+  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=.
+  case $as_dir in
+        /*)
+          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=:
+  # Zsh 3.x and 4.x performs 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=:
+  # Zsh 3.x and 4.x performs 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
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  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 autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+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`
+
+#
+# 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}
+
+# Identity of this package.
+PACKAGE_NAME='nesc'
+PACKAGE_TARNAME='nesc'
+PACKAGE_VERSION='1.3.0'
+PACKAGE_STRING='nesc 1.3.0'
+PACKAGE_BUGREPORT=''
+
+ac_unique_file="c-parse.y"
+# 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
+am__isrc
+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
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+CPPFLAGS
+CFLAGS
+CC
+LDFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+RANLIB
+USING_RCC_TRUE
+USING_RCC_FALSE
+CPP
+GREP
+EGREP
+ALLOCA
+LIBOBJS
+NEED_FNMATCH_TRUE
+NEED_FNMATCH_FALSE
+NEED_REGEX_TRUE
+NEED_REGEX_FALSE
+LIBICONV
+LTLIBICONV
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# 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'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+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
+    ac_prev=
+    continue
+  fi
+
+  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_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -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-\(.*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=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-\([^=]*\)'`
+    # 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
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -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 ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --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)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --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 ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`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
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    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
+   { (exit 1); exit 1; }; }
+    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
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+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
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+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=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { 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'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+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.
+    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
+  fi
+fi
+
+ac_tool_prefix=
+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 .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { 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 the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$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'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       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.
+#
+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 nesc 1.3.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+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]
+  --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/nesc]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of nesc 1.3.0:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-rpath         do not hardcode runtime library paths
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+
+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>
+  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
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+    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 || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+nesc configure 1.3.0
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 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
+fi
+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 nesc $as_me 1.3.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 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`
+/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`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# 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: 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.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    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"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 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 -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  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;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+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;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 $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
+  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;}
+      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;}
+      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=:
+      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=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  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;}
+   { (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
+
+
+ac_aux_dir=
+for ac_dir in ../config-aux "$srcdir"/../config-aux; 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
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  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 ../config-aux \"$srcdir\"/../config-aux" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ../config-aux \"$srcdir\"/../config-aux" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# 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.
+
+
+
+ac_config_headers="$ac_config_headers autoconf.h"
+
+am__api_version='1.10'
+
+# 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
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+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 { 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.
+           :
+         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
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+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.  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 value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# 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}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  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.
+# 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 -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+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;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+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; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # 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_AWK="$ac_prog"
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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 x ${MAKE-make}; ac_make=`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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+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 \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if 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;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='nesc'
+ VERSION='1.3.0'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+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; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_ac_ct_STRIP="strip"
+    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_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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+: ${CFLAGS=-g}
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/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_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 &&
+  { { 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=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_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; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+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
+
+
+{ 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
+  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` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+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
+
+
+{ echo "$as_me:$LINENO: checking for darwin" >&5
+echo $ECHO_N "checking for darwin... $ECHO_C" >&6; }
+case $host in
+  *-*-darwin*)
+    CFLAGS="$CFLAGS -Wno-long-double"
+    { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+    ;;
+  *)
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&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
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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.
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+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
+    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
+    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.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  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; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  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; }
+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 { 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
+    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; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+See \`config.log' for more details." >&5
+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`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+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
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out 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[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # 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 | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        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
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { 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
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# 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; }
+# 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'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  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.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+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; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# 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 { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+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 | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { 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
+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; }
+
+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; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  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 | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  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
+See \`config.log' for more details." >&5
+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; }
+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; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+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`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+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 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; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=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 <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* 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 -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 -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);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+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 { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $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); } && {
+        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
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&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
+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 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; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_ac_ct_RANLIB="ranlib"
+    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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ 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
+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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+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 \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking whether ${CC-cc} accepts -Wall" >&5
+echo $ECHO_N "checking whether ${CC-cc} accepts -Wall... $ECHO_C" >&6; }
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Wall"
+
+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
+
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  CFLAGS="$save_CFLAGS"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ echo "$as_me:$LINENO: checking whether we are using rcc" >&5
+echo $ECHO_N "checking whether we are using rcc... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+void * traditional pointer;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  RCC=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       RCC=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$RCC" = yes; then
+  USING_RCC_TRUE=
+  USING_RCC_FALSE='#'
+else
+  USING_RCC_TRUE='#'
+  USING_RCC_FALSE=
+fi
+
+{ echo "$as_me:$LINENO: result: $RCC" >&5
+echo "${ECHO_T}$RCC" >&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
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # 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
+  # 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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$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 "echo \"\$as_me:$LINENO: $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
+  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: 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 "echo \"\$as_me:$LINENO: $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
+  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
+  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
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&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
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  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
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    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
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name 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
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+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
+rm -f conftest*
+
+fi
+
+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>
+
+_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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  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 echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
+if test "${ac_cv_type_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef long long ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_long_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of long long" >&5
+echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+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
+   typedef long long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    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
+   typedef long long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       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
+   typedef long long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    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
+   typedef long long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  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
+   typedef long long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long_long=$ac_lo;;
+'') if test "$ac_cv_type_long_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi ;;
+esac
+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
+   typedef long long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for void *" >&5
+echo $ECHO_N "checking for void *... $ECHO_C" >&6; }
+if test "${ac_cv_type_void_p+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+typedef void * ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_void_p=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_void_p=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
+echo "${ECHO_T}$ac_cv_type_void_p" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of void *" >&5
+echo $ECHO_N "checking size of void *... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_void_p+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+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
+   typedef void * ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    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
+   typedef void * ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       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
+   typedef void * ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    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
+   typedef void * ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  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
+   typedef void * ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_void_p=$ac_lo;;
+'') if test "$ac_cv_type_void_p" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi ;;
+esac
+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
+   typedef void * ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+       return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_void_p=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_void_p" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (void *)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
+echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+                         if (p) return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_working_alloca_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_working_alloca_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+                                   if (p) return 0;
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_alloca_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_alloca_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+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
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+  return find_stack_direction () < 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_stack_direction=1
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+
+for ac_func in strtold
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+
+
+for ac_func in poll realpath mmap
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in regcomp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+  REGCOMP=yes
+fi
+done
+
+
+for ac_func in fnmatch
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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
+
+#undef $ac_func
+
+/* 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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+  FNMATCH=yes
+fi
+done
+
+
+ if test "$FNMATCH" != yes; then
+  NEED_FNMATCH_TRUE=
+  NEED_FNMATCH_FALSE='#'
+else
+  NEED_FNMATCH_TRUE='#'
+  NEED_FNMATCH_FALSE=
+fi
+
+ if test "$REGCOMP" != yes; then
+  NEED_REGEX_TRUE=
+  NEED_REGEX_FALSE='#'
+else
+  NEED_REGEX_TRUE='#'
+  NEED_REGEX_FALSE=
+fi
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# 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
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      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 <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  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 "echo \"\$as_me:$LINENO: $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
+  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 &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
+    if test "${am_cv_proto_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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 <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+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 "echo \"\$as_me:$LINENO: $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); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  am_cv_proto_iconv_arg1=""
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_proto_iconv_arg1="const"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { echo "$as_me:$LINENO: result: ${ac_t:-
+         }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+         }$am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
+
+
+
+{ echo "$as_me:$LINENO: checking for strtold declaration in <stdlib.h>" >&5
+echo $ECHO_N "checking for strtold declaration in <stdlib.h>... $ECHO_C" >&6; }
+if test "${rc_cv_strtold_declared+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&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>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "\<strtold\>" >/dev/null 2>&1; then
+  rc_cv_strtold_declared=yes
+else
+  rc_cv_strtold_declared=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $rc_cv_strtold_declared" >&5
+echo "${ECHO_T}$rc_cv_strtold_declared" >&6; }
+if test "$rc_cv_strtold_declared" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRTOLD_DECLARED 1
+_ACEOF
+
+fi
+
+ac_config_files="$ac_config_files Makefile libcompat/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
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_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, 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     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 "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+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_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`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
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { 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.
+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.
+Usually this means the macro was only invoked conditionally." >&5
+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
+if test -z "${USING_RCC_TRUE}" && test -z "${USING_RCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"USING_RCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"USING_RCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${NEED_FNMATCH_TRUE}" && test -z "${NEED_FNMATCH_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"NEED_FNMATCH\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"NEED_FNMATCH\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${NEED_REGEX_TRUE}" && test -z "${NEED_REGEX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"NEED_REGEX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"NEED_REGEX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+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
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# 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
+  # 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
+
+
+
+
+# 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
+
+# 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
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+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.)
+as_nl='
+'
+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
+  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.
+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) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+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
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+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'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  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 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
+  # 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
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      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
+   { (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 sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+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
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+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
+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=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+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'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# 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.
+ac_log="
+This file was extended by nesc $as_me 1.3.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, 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
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+nesc config.status 1.3.0
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_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.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { 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 ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { 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_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "autoconf.h") CONFIG_HEADERS="$CONFIG_HEADERS autoconf.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "libcompat/Makefile") CONFIG_FILES="$CONFIG_FILES libcompat/Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+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
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# 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 ||
+{
+  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 "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# 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
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+CC!$CC$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+RANLIB!$RANLIB$ac_delim
+USING_RCC_TRUE!$USING_RCC_TRUE$ac_delim
+USING_RCC_FALSE!$USING_RCC_FALSE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+ALLOCA!$ALLOCA$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+NEED_FNMATCH_TRUE!$NEED_FNMATCH_TRUE$ac_delim
+NEED_FNMATCH_FALSE!$NEED_FNMATCH_FALSE$ac_delim
+NEED_REGEX_TRUE!$NEED_REGEX_TRUE$ac_delim
+NEED_REGEX_FALSE!$NEED_REGEX_FALSE$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+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
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 1; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+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
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_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
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+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
+
+  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 ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      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 "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    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'`
+  { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`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
+  .)  # We are building in place.
+    ac_srcdir=.
+    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
+    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
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# 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=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  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
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;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
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+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"; } &&
+  { 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
+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;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
+ac_dB='\\)[     (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+       t rset
+       :rset
+       s/^[     ]*#[    ]*define[       ][      ]*//
+       t ok
+       d
+       :ok
+       s/[\\&,]/\\&/g
+       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then 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.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[    #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
+/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    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;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+# 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:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+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 ||
+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
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  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.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    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'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    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'`
+    { 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 :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`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'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+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 # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/src/configure.in b/src/configure.in
new file mode 100644 (file)
index 0000000..1ab8bed
--- /dev/null
@@ -0,0 +1,79 @@
+# This file is part of the nesC compiler.
+# 
+# This file is derived from the RC Compiler. It is thus
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# Changes for nesC are
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+dnl -*- m4 -*-
+
+# force autoconf 2.5 on Debian systems
+AC_PREREQ(2.50)
+
+AC_INIT(nesc, 1.3.0)
+AC_CONFIG_AUX_DIR(../config-aux)
+AC_CONFIG_SRCDIR(c-parse.y)
+AM_CONFIG_HEADER(autoconf.h)
+AM_INIT_AUTOMAKE
+
+: ${CFLAGS=-g}
+
+AC_CANONICAL_HOST
+AC_MSG_CHECKING(for darwin)
+case $host in
+  *-*-darwin*)
+    CFLAGS="$CFLAGS -Wno-long-double"
+    AC_MSG_RESULT(yes)
+    ;;
+  *)
+    AC_MSG_RESULT(no)
+esac
+AC_SUBST(CPPFLAGS)
+AC_SUBST(CFLAGS)
+
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_MAKE_SET
+
+CPARSE_TRY_CFLAGS(-Wall)
+
+AC_MSG_CHECKING(whether we are using rcc)
+AC_TRY_COMPILE([], [void * traditional pointer;], RCC=yes, RCC=no)
+AM_CONDITIONAL(USING_RCC, test "$RCC" = yes)
+AC_MSG_RESULT($RCC)
+
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(void *)
+
+AC_FUNC_ALLOCA
+
+AC_REPLACE_FUNCS(strtold)
+AC_CHECK_FUNCS(poll realpath mmap)
+AC_CHECK_FUNCS(regcomp, [ REGCOMP=yes ])
+AC_CHECK_FUNCS(fnmatch, [ FNMATCH=yes ])
+
+AM_CONDITIONAL(NEED_FNMATCH, test "$FNMATCH" != yes)
+AM_CONDITIONAL(NEED_REGEX, test "$REGCOMP" != yes)
+
+AM_ICONV
+
+RC_CHECK_DECL(strtold, stdlib.h)
+
+AC_OUTPUT(
+       Makefile
+       libcompat/Makefile
+       )
diff --git a/src/constants.c b/src/constants.c
new file mode 100644 (file)
index 0000000..c7fd8f6
--- /dev/null
@@ -0,0 +1,589 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* ASSUME: (float)(long double)f == f
+           (double)(long double)d == d
+*/
+/* XXX: overflow detection (signed ints only, gcc doesn't do reals)
+       initialised arrays are missing their size
+*/
+
+/* Note: legal ops on complex are:
+   +, -, *, /, ==, !=, &&, ||, __real__, __imag__, ~ (conjugate)
+*/
+
+#define _ISOC99_SOURCE
+#include "parser.h"
+#include "constants.h"
+#include "c-parse.h"
+#include "semantics.h"
+#include "cval.h"
+#include "nesc-magic.h"
+#include <stdlib.h>
+#include "AST_utils.h"
+
+static known_cst new_known_cst(region r, type t, cval c)
+{
+  known_cst kc = ralloc(parse_region, struct known_cst);
+
+  kc->type = t;
+  kc->cval = c;
+
+  return kc;
+}
+  
+known_cst make_unknown_cst(cval c, type t)
+{
+  cval cst;
+
+  if (cval_isaddress(c))
+    cst = cval_unknown_address;
+  else
+    cst = cval_unknown_number;
+
+  return new_known_cst(parse_region, t, cst);
+}
+
+known_cst make_cst(cval c, type t)
+{
+  if (cval_istop(c))
+    return NULL;
+
+  return new_known_cst(parse_region, t, cval_cast(c, t));
+}
+
+known_cst make_address_cst(data_declaration ddecl, label_declaration ldecl,
+                          largest_int offset, type t)
+{
+  return make_cst(make_cval_address(ddecl, ldecl, offset), t);
+}
+
+known_cst make_unsigned_cst(largest_uint x, type t)
+{
+  return make_cst(make_cval_unsigned(x, t), t);
+}
+
+known_cst make_signed_cst(largest_int x, type t)
+{
+  return make_cst(make_cval_signed(x, t), t);
+}
+
+known_cst cast_constant(known_cst c, type to)
+{
+  if (type_equal(c->type, to))
+    return c;
+
+  return make_cst(cval_cast(c->cval, to), to);
+}
+
+known_cst fold_label_address(expression e)
+{
+  return make_address_cst(NULL, CAST(label_address, e)->id_label->ldecl, 0, e->type);
+}
+
+known_cst fold_sizeof(expression e, type stype)
+{
+  if (type_size_cc(stype))
+    return make_cst(type_size(stype), e->type);
+  else
+    return NULL;
+}
+
+known_cst fold_alignof(expression e, type atype)
+{
+  if (type_has_size(atype))
+    return make_cst(type_alignment(atype), e->type);
+  else
+    /* compile-time error, alignof incomplete type */
+    return make_unsigned_cst(1, e->type); 
+}
+
+known_cst fold_cast(expression e)
+{
+  cast cc = CAST(cast, e);
+
+  if (cc->arg1->cst && !type_void(e->type))
+    return cast_constant(cc->arg1->cst, e->type);
+  else
+    return NULL;
+}
+
+/* +, -, ! and ~ only */
+known_cst fold_unary(expression e)
+{
+  unary u = CAST(unary, e);
+  known_cst arg = u->arg1->cst;
+  type t = u->type;
+
+  if (arg)
+    {
+      switch (u->kind)
+       {
+       case kind_unary_plus:
+         /* Note that this allows +(int)&x to be a constant... 
+            This is consistent with gcc */
+         return cast_constant(arg, t); /* essentially a no-op */
+
+       case kind_unary_minus:
+         return make_cst(cval_negate(cval_cast(arg->cval, t)), t);
+
+       case kind_not:
+         return make_cst(cval_not(cval_cast(arg->cval, t)), t);
+
+       case kind_bitnot:
+         return make_cst(cval_bitnot(cval_cast(arg->cval, t)), t);
+
+       case kind_conjugate:
+         return make_cst(cval_conjugate(cval_cast(arg->cval, t)), t);
+
+       case kind_realpart:
+         if (!type_complex(u->arg1->type))
+           return cast_constant(arg, t);
+         else
+           return make_cst(cval_realpart(cval_cast(arg->cval, t)), t);
+
+       case kind_imagpart:
+         if (!type_complex(u->arg1->type))
+           return make_cst(cval_cast(cval_zero, t), t);
+         else
+           return make_cst(cval_imagpart(cval_cast(arg->cval, t)), t);
+
+       default:
+         assert(0);
+         break;
+       }
+    }
+  return NULL;
+}
+
+/* XXX: overflow */
+static known_cst fold_sub(type restype, known_cst c1, known_cst c2)
+{
+  type t1 = c1->type, t2 = c2->type, basetype, ct;
+  cval s = make_cval_unsigned(1, size_t_type), res;
+
+  basetype = type_pointer(t1) ? t1 : type_pointer(t2) ? t2 : NULL;
+  if (basetype)
+    {
+      basetype = type_points_to(basetype);
+
+      if (!type_size_cc(basetype))
+       return NULL;
+
+      s = cval_cast(type_size(basetype), size_t_type);
+      ct = intptr_type;
+    }
+  else
+    ct = restype;
+
+  s = cval_cast(s, ct);
+  if (type_pointer(t1) && type_pointer(t2))
+    res = cval_divide(cval_cast(cval_sub(cval_cast(c1->cval, ct), cval_cast(c2->cval, ct)), ct),
+                     s);
+  else
+    res = cval_sub(cval_cast(c1->cval, ct),
+                  cval_divide(cval_cast(c2->cval, ct), s));
+
+  return make_cst(res, restype);
+}
+
+/* XXX: overflow */
+known_cst fold_add(type restype, known_cst c1, known_cst c2)
+{
+  type t1 = c1->type, t2 = c2->type, ct;
+  cval s = make_cval_unsigned(1, size_t_type);
+
+  if (type_pointer(t2))
+    {
+      known_cst ctmp;
+      type ttmp;
+
+      ctmp = c1; c1 = c2; c2 = ctmp;
+      ttmp = t1; t1 = t2; t2 = ttmp;
+    }
+
+  if (type_pointer(t1))
+    {
+      type basetype = type_points_to(t1);
+
+      if (!type_size_cc(basetype))
+       return NULL;
+
+      s = cval_cast(type_size(basetype), size_t_type);
+      ct = intptr_type;
+    }
+  else
+    ct = restype;
+
+  return make_cst(cval_add(cval_cast(c1->cval, ct),
+                          cval_times(cval_cast(c2->cval, ct), cval_cast(s, ct))),
+                 restype);
+}
+
+known_cst fold_binary(type t, expression e)
+{
+  binary b = CAST(binary, e);
+  known_cst c1 = b->arg1->cst, c2 = b->arg2->cst;
+  type t1 = type_default_conversion(b->arg1->type),
+    t2 = type_default_conversion(b->arg2->type);
+  
+  if (b->kind == kind_andand || b->kind == kind_oror)
+    {
+      if (c1)
+       {
+         if (constant_knownbool(c1))
+           {
+             bool c1val = constant_boolvalue(c1);
+
+             if (b->kind == kind_andand ? !c1val : c1val)
+               return make_signed_cst(c1val, t);
+           }
+         if (constant_unknown_number(c1))
+           return make_unknown_cst(cval_unknown_number, t);
+       }
+
+      if (c1 && c2)
+       {
+         if (constant_knownbool(c2))
+           {
+             bool c2val = constant_boolvalue(c2);
+             if (b->kind == kind_andand ? !c2val : c2val)
+               return make_signed_cst(c2val, t);
+           }
+
+         if (constant_unknown_number(c2))
+           return make_unknown_cst(cval_unknown_number, t);
+       }
+    }
+  else if (c1 && c2)
+    {
+      cval cv1 = c1->cval, cv2 = c2->cval;
+
+      switch (b->kind)
+       {
+       case kind_plus: case kind_array_ref:
+         return fold_add(t, c1, c2);
+
+       case kind_minus:
+         return fold_sub(t, c1, c2);
+
+       case kind_times: case kind_divide: case kind_modulo:
+       case kind_lshift: case kind_rshift:
+       case kind_bitand: case kind_bitor: case kind_bitxor: {
+         cval res;
+
+         cv1 = cval_cast(cv1, t);
+         cv2 = cval_cast(cv2, t);
+
+         switch (b->kind) {
+         case kind_times: res = cval_times(cv1, cv2); break;
+         case kind_divide: res = cval_divide(cv1, cv2); break;
+         case kind_modulo: res = cval_modulo(cv1, cv2); break;
+         case kind_lshift: res = cval_lshift(cv1, cv2); break;
+         case kind_rshift: res = cval_rshift(cv1, cv2); break;
+         case kind_bitand: res = cval_bitand(cv1, cv2); break;
+         case kind_bitor: res = cval_bitor(cv1, cv2); break;
+         case kind_bitxor: res = cval_bitxor(cv1, cv2); break;
+         default: abort(); return NULL;
+         }
+         return make_cst(res, t);
+       }
+       case kind_eq: case kind_ne:
+       case kind_leq: case kind_geq: case kind_lt: case kind_gt: {
+         cval res;
+         type ct;
+
+         /* Pointers win. */
+         if (type_pointer(t1) || type_pointer(t2))
+           ct = intptr_type; 
+         else
+           ct = common_type(t1, t2);
+
+         cv1 = cval_cast(cv1, ct);
+         cv2 = cval_cast(cv2, ct);
+
+         switch (b->kind) {
+         case kind_eq: res = cval_eq(cv1, cv2); break;
+         case kind_ne: res = cval_ne(cv1, cv2); break;
+         case kind_leq: res = cval_leq(cv1, cv2); break;
+         case kind_geq: res = cval_geq(cv1, cv2); break;
+         case kind_lt: res = cval_lt(cv1, cv2); break;
+         case kind_gt: res = cval_gt(cv1, cv2); break;
+         default: abort(); return NULL;
+         }
+         return make_cst(res, t);
+       }
+       default:
+         assert(0); return NULL;
+       }
+      }
+
+  return NULL;
+}
+
+known_cst fold_conditional(expression e)
+{
+  conditional c = CAST(conditional, e);
+  known_cst cond = c->condition->cst;
+
+  if (cond)
+    {
+      expression arg1 = c->arg1 ? c->arg1 : c->condition;
+      known_cst kc1 = arg1->cst, kc2 = c->arg2->cst;
+
+      if (constant_knownbool(cond))
+       {
+         expression value = constant_boolvalue(cond) ? arg1 : c->arg2;
+
+         e->static_address = value->static_address;
+         if (value->cst)
+           return cast_constant(value->cst, e->type);
+         else
+           return NULL;
+       }
+      else if (constant_unknown_number(cond) && kc1 && kc2)
+       /* Faced with an unknown condition and two constant arguments, we
+          return an unknown constant. Unknown number if both arg1 and arg2
+          are unknown numbers, an unknown address otherwise */
+       return make_unknown_cst(cval_isaddress(kc1->cval) ?
+                               kc1->cval : kc2->cval, e->type);
+    }
+
+  return NULL;
+}
+
+known_cst fold_function_call(expression e, int pass)
+{
+  function_call fce = CAST(function_call, e);
+
+  if (call_to(builtin_constant_p, fce) && fce->args)
+    return make_signed_cst(fce->args->cst != NULL, int_type);
+
+  return fold_magic(fce, pass);
+}
+
+known_cst fold_identifier(expression e, data_declaration decl, int pass)
+{
+  if (decl->kind == decl_constant)
+    // We don't know template arg values at parse time
+    return pass == 0 && decl->substitute ?
+      make_unknown_cst(type_real(e->type) ? cval_unknown_number :
+                      cval_unknown_address, e->type) :
+      decl->value;
+  else
+    return NULL;
+}
+
+known_cst foldaddress_identifier(expression e, data_declaration decl)
+{
+  if ((decl->kind == decl_function && decl->ftype != function_nested) ||
+      (decl->kind == decl_variable && !decl->islocal) ||
+      decl->kind == decl_magic_string)
+    return make_address_cst(decl, NULL, 0, make_pointer_type(e->type));
+  else
+    return NULL;
+}
+
+known_cst foldaddress_string(string s)
+{
+  return make_address_cst(s->ddecl, NULL, 0, s->type);
+}
+
+known_cst foldaddress_field_ref(expression e)
+{
+  field_ref fref = CAST(field_ref, e);
+  field_declaration fdecl = fref->fdecl;
+  known_cst object = fref->arg1->static_address;
+  cval field_offset;
+  type pftype;
+
+  if (!object || cval_istop(fdecl->offset) || !cval_istop(fdecl->bitwidth))
+    return NULL;
+
+  if (constant_unknown(object))
+    return make_unknown_cst(object->cval, object->type);
+
+  pftype = make_pointer_type(fdecl->type);
+  field_offset = cval_divide(fdecl->offset, cval_bitsperbyte);
+
+  /* Conceivably, size_t could be smaller than pointers. So we cast
+     the offset to the pointer-to-field type (we are assuming that is
+     the same size as the pointer to base-struct type) */
+  return make_cst(cval_add(object->cval, cval_cast(field_offset, pftype)),
+                 pftype);
+}
+
+#ifndef HAVE_STRTOLD
+#define strtold strtod
+#endif
+
+lexical_cst fold_lexical_real(type realtype, location loc, cstring tok)
+{
+  lexical_cst c = new_lexical_cst(parse_region, loc, tok);
+  cval realvalue = make_cval_float(strtold(tok.data, NULL));
+
+  if (type_complex(realtype))
+    realvalue = make_cval_complex(cval_cast(cval_zero, make_base_type(realtype)), realvalue);
+  c->cst = make_cst(realvalue, realtype);
+  c->type = realtype;
+  return c;
+}
+
+lexical_cst fold_lexical_char(location loc, cstring tok,
+                             bool wide_flag, int charvalue)
+{
+  lexical_cst c = new_lexical_cst(parse_region, loc, tok);
+  type ctype = wide_flag ? wchar_type : int_type;
+
+  c->type = ctype;
+  c->cst = make_cst(type_unsigned(ctype) ?
+                   make_cval_unsigned(charvalue, ctype) :
+                   make_cval_signed(charvalue, ctype),
+                   ctype);
+  return c;
+}
+
+string fold_lexical_string(location loc, string_cst components, cstring value,
+                          bool wide_flag)
+{
+  data_declaration sdecl = declare_string(NULL, value, wide_flag);
+  string s = new_string(parse_region, loc, components, sdecl);
+
+  s->type = sdecl->type;
+  s->static_address = foldaddress_string(s);
+  s->lvalue = TRUE;
+
+  return s;
+}
+
+lexical_cst fold_lexical_int(type itype, location loc, cstring tok,
+                            bool iscomplex, largest_uint intvalue, bool overflow)
+{
+  lexical_cst c = new_lexical_cst(parse_region, loc, tok);
+  cval cv;
+
+  if (overflow)
+    {
+      warning_with_location(loc, "integer constant out of range");
+      itype = unsigned_long_long_type;
+    }
+  else
+    {
+      /* Do some range checks */
+      if (!uint_inrange(intvalue, itype))
+       {
+         if (uint_inrange(intvalue, unsigned_int_type))
+           {
+             warning_with_location(loc, "decimal constant is so large that it is unsigned");
+             itype = unsigned_int_type;
+           }
+         /* These other cases cause no warnings */
+         else if (uint_inrange(intvalue, long_type))
+           itype = long_type;
+         else if (uint_inrange(intvalue, unsigned_long_type))
+           itype = unsigned_long_type;
+         else if (uint_inrange(intvalue, long_long_type))
+           itype = long_long_type;
+         else if (uint_inrange(intvalue, unsigned_long_long_type))
+           itype = unsigned_long_long_type;
+       }
+    }
+
+  cv = type_unsigned(itype) ? make_cval_unsigned(intvalue, itype) :
+    make_cval_signed(intvalue, itype);
+  if (iscomplex)
+    {
+      cv = make_cval_complex(cval_cast(cval_zero, itype), cv);
+      itype = make_complex_type(itype);
+    }
+
+  c->type = itype;
+  c->cst = make_cst(cv, itype);
+
+  return c;
+}
+
+
+bool definite_null(expression e)
+{
+  return
+    (type_integer(e->type) ||
+     (type_pointer(e->type) && type_void(type_points_to(e->type)))) &&
+    definite_zero(e);
+}
+
+bool definite_zero(expression e)
+{
+  return e->cst && is_zero_constant(e->cst);
+}
+
+bool is_zero_constant(known_cst c)
+{
+  return cval_knownbool(c->cval) && !constant_boolvalue(c);
+}
+
+/* Print a warning if a constant expression had overflow in folding.
+   Invoke this function on every expression that the language
+   requires to be a constant expression. */
+void constant_overflow_warning(known_cst c)
+{
+}
+
+bool check_constant_once(expression e, cst_kind k)
+/* Effects: We want to check whether e is a constant, and possibly for
+     valid constant values, exactly once (to avoid repeated errors and
+     warnings) over our multiple constant folding passes. Additionally,
+     we can't check unknown constants until their value is known. We can
+     rely on the following:
+     - a non-constant will not become constant
+     - we assume, for checking purposes, that a constant's kind (numerical
+       vs address) will not change (this in some sense untrue, as in:
+         <unknown> ? <numerical> : <address>
+       but we treat that as <address> for checking purposes)
+     - a known constant will maintain its value
+     - an unknown constant will become either non-constant or a known constant
+
+     Additionally, if the constant kind does not match k, we can check it
+     immediately (presumably to report some error).
+     
+     check_constant_once supports this by returning TRUE exactly once, when
+     its possible to check e's value
+
+   Returns: TRUE the first time !e->cst || e->cst && !constant_unkown(e) ||
+     e->cst && e->cst does not match k
+*/
+{
+  if (e->cst_checked)
+    return FALSE;
+
+  if (e->cst && constant_unknown(e->cst))
+    /* Unknown constant. We can't check yet it if matches k */
+    if (k == cst_any ||
+       (k == cst_numerical && constant_unknown_number(e->cst)) ||
+       (k == cst_address && constant_address(e->cst)))
+      return FALSE;
+
+  e->cst_checked = TRUE;
+
+  return TRUE;
+}
+
+
diff --git a/src/constants.h b/src/constants.h
new file mode 100644 (file)
index 0000000..fe130cf
--- /dev/null
@@ -0,0 +1,166 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* Constants come in three kinds:
+   - "unknown": value is completely unknown (constant_unknown)
+   - "address": value is the address of some global symbol and an offset 
+                (constant_address)
+   - "value": known value (integer, floating point)
+*/
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+struct known_cst {
+  type type;
+  cval cval;
+};
+
+known_cst make_unknown_cst(cval c, type t);
+known_cst make_cst(cval c, type t);
+known_cst make_address_cst(data_declaration ddecl, label_declaration ldecl,
+                          largest_int offset, type t);
+known_cst make_signed_cst(largest_int x, type t);
+known_cst make_unsigned_cst(largest_uint x, type t);
+
+known_cst cast_constant(known_cst c, type to);
+
+lexical_cst fold_lexical_int(type itype, location loc, cstring tok,
+                            bool iscomplex, largest_uint intvalue, bool overflow);
+lexical_cst fold_lexical_real(type realtype, location loc, cstring tok);
+/* XXX: What's the right type for charvalue ? (must hold wchar_t or int) */
+lexical_cst fold_lexical_char(location loc, cstring tok,
+                             bool wide_flag, int charvalue);
+string fold_lexical_string(location loc, string_cst components, cstring value,
+                          bool wide_flag);
+
+known_cst fold_label_address(expression e);
+known_cst fold_sizeof(expression e, type stype);
+known_cst fold_alignof(expression e, type atype);
+known_cst fold_cast(expression e);
+known_cst fold_unary(expression e);
+known_cst fold_binary(type restype, expression e);
+known_cst fold_conditional(expression e);
+known_cst fold_function_call(expression e, int pass);
+known_cst fold_identifier(expression e, data_declaration decl, int pass);
+
+known_cst fold_add(type restype, known_cst c1, known_cst c2);
+
+known_cst foldaddress_identifier(expression e, data_declaration decl);
+known_cst foldaddress_string(string s);
+known_cst foldaddress_field_ref(expression e);
+
+bool definite_null(expression e);
+bool definite_zero(expression e);
+bool is_zero_constant(known_cst c);
+
+/* Print a warning if a constant expression had overflow in folding.
+   Invoke this function on every expression that the language
+   requires to be a constant expression.
+   Note the ANSI C standard says it is erroneous for a
+   constant expression to overflow.  */
+void constant_overflow_warning(known_cst c);
+
+/*bool constant_address(known_cst c);*/
+#define constant_address(c) cval_isaddress((c)->cval)
+/* Returns: TRUE if c is an address constant
+ */
+
+/*bool constant_unknown(known_cst c);*/
+#define constant_unknown(c) cval_isunknown((c)->cval)
+/* Returns: TRUE if c is a constant whose value is not yet known
+ */
+
+/*bool constant_unknown_number(known_cst c);*/
+#define constant_unknown_number(c) cval_isunknown_number((c)->cval)
+/* Returns: TRUE if c is a numeric constant whose value is not yet known
+ */
+
+/*bool constant_integral(known_cst c);*/
+#define constant_integral(c) cval_isinteger((c)->cval)
+/* Returns: TRUE if c is an integer constant (signed or unsigned)
+*/
+
+/*bool constant_float(known_cst c);*/
+#define constant_float(c) (cval_isfloating((c)->cval))
+/* Returns: TRUE if c is a floating-point constant
+*/
+
+/*largest_uint constant_uint_value(known_cst c);*/
+#define constant_uint_value(c) cval_uint_value((c)->cval)
+/* Returns: Value of c as an unsigned integer.
+   Requires: see cval_uint_value
+*/
+
+/*largest_int constant_sint_value(known_cst c);*/
+#define constant_sint_value(c) cval_sint_value((c)->cval)
+/* Returns: Value of c as an unsigned integer.
+   Requires: see cval_sint_value
+*/
+
+/*long double constant_float_value(known_cst c);*/
+#define constant_float_value(c) cval_float_value((c)->cval)
+/* Returns: Value of c as an unsigned integer.
+   Requires: see cval_float_value
+*/
+
+/*bool constant_knownbool(known_cst c);*/
+/* Returns: TRUE if the truth-value of c can be determined (use 
+   constant_boolvalue to get that value)
+*/
+#define constant_knownbool(c) cval_knownbool((c)->cval)
+
+/*bool cval_boolvalue(cval c);*/
+/* Returns: TRUE if c is a non-zero constant
+   Requires: cval_knownbool(c)
+ */
+#define constant_boolvalue(c) cval_boolvalue((c)->cval)
+
+typedef enum {
+  cst_any,
+  cst_numerical,
+  cst_address
+} cst_kind;
+
+bool check_constant_once(expression e, cst_kind k);
+/* Effects: We want to check whether e is a constant, and possibly for
+     valid constant values, exactly once (to avoid repeated errors and
+     warnings) over our multiple constant folding passes. Additionally,
+     we can't check unknown constants until their value is known. We can
+     rely on the following:
+     - a non-constant will not become constant
+     - we assume, for checking purposes, that a constant's kind (numerical
+       vs address) will not change (this in some sense untrue, as in:
+         <unknown> ? <numerical> : <address>
+       but we treat that as <address> for checking purposes)
+     - a known constant will maintain its value
+     - an unknown constant will become either non-constant or a known constant
+
+     Additionally, if the constant kind does not match k, we can check it
+     immediately (presumably to report some error).
+     
+     check_constant_once supports this by returning TRUE exactly once, when
+     its possible to check e's value
+
+   Returns: TRUE the first time !e->cst || e->cst && !constant_unkown(e) ||
+     e->cst && e->cst does not match k
+*/
+
+#endif
diff --git a/src/cstring.h b/src/cstring.h
new file mode 100644 (file)
index 0000000..67a5f6d
--- /dev/null
@@ -0,0 +1,49 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef CSTRING_H
+#define CSTRING_H
+
+#include <regions.h>
+
+#include "regions.h"
+
+/* A C string is like a regular C string, but with a length. A null byte is
+   added AFTER the string for convenience */
+typedef struct {
+  char *data;
+  int length;
+} cstring;
+
+/* Make a new cstring with a copy of s, length l */
+cstring make_cstring(region r, const char *s, int l);
+
+/* Make a new unintialised cstring of length l */
+cstring alloc_cstring(region r, int l);
+
+
+/* Make a new cstring with a copy of regular C string s */
+cstring str2cstring(region r, const char *s);
+
+/* Make a new C string with a copy of cstring s */
+char *cstring2str(region r, cstring s);
+
+#endif
diff --git a/src/cval.c b/src/cval.c
new file mode 100644 (file)
index 0000000..784c31a
--- /dev/null
@@ -0,0 +1,1161 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* SAME: There's a lot of assumptions about floating point here, and behaviour
+   of operations when performed on wider types. I believe them to be valid for
+   IEEE with round-to-nearest. XXX: check.
+   XXX: overflow.
+*/
+/* Note: this code is not particularly aiming for efficiency (in particular,
+   complex constants will be inefficient) */
+#include "parser.h"
+#include "cval.h"
+#include "machine.h"
+
+cval cval_top; /* The non-constant value */
+cval cval_unknown_number; /* The unknown number value */
+cval cval_unknown_address; /* The unknown address value */
+cval cval_zero; /* A zero value. Use cval_cast to make the desired kind of
+                  constant */
+cval cval_one; /* A one value. Use cval_cast to make the desired kind of
+                  constant */
+cval cval_bitsperbyte; /* BITSPERBYTE, unsigned */
+
+/* We use cval_invalid_address to mark those places where a constant
+   is computed which is "not computable at load time"
+   (these used to be cval_unknown_number, but we're reusing that for constants
+   built from abstract component args. Knowing that something is a
+   constant "not computable at load time" seems to have no use, except
+   in producing a slightly nicer error message) 
+*/
+#define cval_invalid_address cval_top
+
+void cval_init(void)
+{
+  /* Code will be unhappy if this is not true. */
+  assert(sizeof(largest_int) == sizeof(largest_uint));
+  /* assert(This is a 2's complement machine); */
+
+  cval_top.kind = cval_variable;
+  cval_unknown_number.kind = cval_unk_number;
+  cval_unknown_address.kind = cval_unk_address;
+  cval_zero.kind = cval_sint;
+  cval_zero.si = 0;
+  cval_zero.isize = target->tint.size;
+  cval_one.kind = cval_sint;
+  cval_one.si = 1;
+  cval_one.isize = target->tint.size;
+  cval_bitsperbyte.kind = cval_uint;
+  cval_bitsperbyte.ui = BITSPERBYTE;
+  cval_bitsperbyte.isize = target->size_t_size;
+}
+
+cval make_cval_unsigned(largest_uint i, type t)
+{
+  cval c;
+
+  assert(type_integral(t) && type_unsigned(t));
+  c.kind = cval_uint;
+  c.ui = i;
+  c.isize = type_size_int(t);
+  return c;
+}
+
+cval make_cval_signed(largest_int i, type t)
+{
+  cval c;
+
+  assert(type_integral(t) && !type_unsigned(t));
+  c.kind = cval_sint;
+  c.si = i;
+  c.isize = type_size_int(t);
+  return c;
+}
+
+cval make_type_cval(size_t s)
+/* Effects: Make a cval representing a type size. This is special-cased
+     because we need to make these for type sizes before any types are
+     available
+   Returns: A cval representing s, with size set to the target's size_t size
+*/
+{
+  cval c;
+
+  c.kind = cval_uint;
+  c.ui = s;
+  c.isize = target->size_t_size;
+
+  return c;
+}
+
+cval make_cval_float(long double d)
+{
+  cval c;
+  c.kind = cval_float;
+  c.d = d;
+  return c;
+}
+
+cval make_cval_complex(cval r, cval i)
+{
+  assert(r.kind == i.kind);
+
+  switch (r.kind)
+    {
+    case cval_float:
+      r.d_i = i.d;
+      r.kind = cval_float_complex;
+      return r;
+    case cval_uint:
+      assert(r.isize == i.isize);
+      r.kind = cval_uint_complex;
+      r.ui_i = i.ui;
+      return r;
+    case cval_sint:
+      assert(r.isize == i.isize);
+      r.kind = cval_sint_complex;
+      r.si_i = i.si;
+      return r;
+
+    default: abort(); return r;
+    }
+}
+
+cval make_cval_address(data_declaration ddecl, label_declaration ldecl,
+                      largest_int offset)
+{
+  cval c = make_cval_signed(offset, ptrdiff_t_type);
+
+  assert(!(ldecl && ddecl));
+  c.kind = cval_address;
+  c.ddecl = ddecl;
+  c.ldecl = ldecl;
+
+  return c;
+}
+
+cval make_cval_address_unknown_offset(cval c)
+/* Requires: cval_isaddress(c)
+   Returns: a constant identical to c except that the offset is now unknowjn
+*/
+{
+  assert(cval_isaddress(c));
+  if (c.kind == cval_address)
+    c.kind = cval_address_unk_offset;
+
+  return c;
+}
+
+bool cval_isunknown(cval c)
+/* Return: TRUE if c is an unknown constant */
+{
+  return c.kind == cval_unk_number || c.kind == cval_unk_address;
+}
+
+bool cval_isaddress(cval c)
+{
+  return c.kind == cval_unk_address || c.kind == cval_address ||
+    c.kind == cval_address_unk_offset;
+}
+
+bool cval_isinteger(cval c)
+{
+  return c.kind == cval_sint || c.kind == cval_uint;
+}
+
+bool cval_isunsigned(cval c)
+{
+  return c.kind == cval_uint;
+}
+
+bool cval_isfloating(cval c)
+{
+  return c.kind == cval_float;
+}
+
+bool cval_iscomplex(cval c)
+{
+  return c.kind == cval_sint_complex || c.kind == cval_uint_complex ||
+    c.kind == cval_float_complex;
+}
+
+bool cval_knownbool(cval c)
+/* Returns: TRUE if the truth-value of c can be determined (use cval_boolvalue
+   to get that value)
+*/
+{
+  switch (c.kind) {
+  default: case cval_variable: assert(0);
+  case cval_unk_number: case cval_unk_address: case cval_address_unk_offset:
+    return FALSE;
+  case cval_address: return c.si == 0;
+  case cval_uint: case cval_sint: case cval_float:
+  case cval_uint_complex: case cval_sint_complex: case cval_float_complex:
+    return TRUE;
+  }
+}
+
+bool cval_boolvalue(cval c)
+/* Returns: TRUE if c is a non-zero constant
+   Requires: cval_knownbool(c)
+ */
+{
+  switch (c.kind) {
+  default: assert(0);
+  case cval_address: assert(c.si == 0); return TRUE;
+  case cval_uint: return c.ui != 0;
+  case cval_sint: return c.si != 0;
+  case cval_float: return c.d != 0;
+  case cval_uint_complex: return c.ui && c.ui_i;
+  case cval_sint_complex: return c.si && c.si_i;
+  case cval_float_complex: return c.d && c.d_i;
+  }
+}
+
+bool cval_knownvalue(cval c)
+/* Returns: TRUE if the value of c can be determined (this is false for
+   address constants, while cval_knownbool is true for address constants
+   with offset 0)
+*/
+{
+  switch (c.kind) {
+  default: case cval_variable: assert(0);
+  case cval_unk_number: case cval_unk_address: case cval_address_unk_offset:
+  case cval_address: return FALSE;
+  case cval_uint: case cval_sint: case cval_float:
+  case cval_uint_complex: case cval_sint_complex: case cval_float_complex:
+    return TRUE;
+  }
+}
+
+largest_uint cval_uint_value(cval c)
+/* Returns: The value of c as an unsigned int
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+{
+  switch (c.kind) {
+  default: assert(0); return 0;
+  case cval_uint: return c.ui;
+  case cval_sint: return c.si;
+  case cval_float: return c.d;
+  }
+}
+
+largest_int cval_sint_value(cval c)
+/* Returns: The value of c as a signed int
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+{
+  switch (c.kind) {
+  default: assert(0); return 0;
+  case cval_uint: return c.ui;    
+  case cval_sint: return c.si;
+  case cval_float: return c.d;
+  }
+}
+
+long double cval_float_value(cval c)
+/* Returns: The value of c as a long double
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+{
+  switch (c.kind) {
+  default: assert(0); return 0;
+  case cval_uint: return c.ui;    
+  case cval_sint: return c.si;
+  case cval_float: return c.d;
+  }
+}
+
+bool cval_isone(cval c)
+/* Returns: TRUE if c is 1 (FALSE for unknown constants)
+   Requires: c not be cval_top
+ */
+{
+  switch (c.kind) {
+  default: case cval_variable: assert(0);
+  case cval_unk_number: case cval_unk_address: case cval_address_unk_offset:
+  case cval_address: return FALSE;
+  case cval_uint: return c.ui == 1;
+  case cval_sint: return c.si == 1;
+  case cval_float: return c.d == 1;
+  case cval_uint_complex: return c.ui == 1 && c.ui_i == 0;
+  case cval_sint_complex: return c.si == 1 && c.si_i == 0;
+  case cval_float_complex: return c.d == 1 && c.d_i == 0;
+  }
+}
+
+static largest_uint truncate_unsigned(largest_uint x, size_t tsize)
+{
+  /* The shift is undefined for the size of largest_uint (and the masking is then
+     a no-op) */
+  assert(tsize <= sizeof(largest_uint));
+
+  if (tsize == sizeof(largest_uint))
+    return x;
+  else
+    return x & (((largest_uint)1 << BITSPERBYTE * tsize) - 1);
+}
+
+/* SAME: 2's complement */
+static largest_int truncate_signed(largest_int x, size_t tsize)
+{
+  largest_uint umask, uval;
+
+  assert(tsize <= sizeof(largest_int));
+
+  if (tsize == sizeof(largest_int))
+    return x;
+
+  /* masking */
+  umask = (((largest_uint)1 << BITSPERBYTE * tsize) - 1);
+  uval = x & umask;
+  /* sign extension */
+  if (uval & ((largest_uint)1 << (BITSPERBYTE * tsize - 1)))
+    return (largest_int)(((largest_uint)-1 & ~umask) | uval);
+  else
+    return uval;
+}
+
+/* All of these functions will return cval_top if the result is not a
+   constant expression */
+
+cval cval_cast(cval c, type to)
+/* Returns: c cast to type to
+   Requires: type_scalar(to)
+*/
+{
+  if (cval_istop(c))
+    return cval_top;
+
+  if (cval_isunknown_number(c))
+    return cval_unknown_number;
+
+  if (type_complex(to))
+    {
+      type base = make_base_type(to);
+
+      switch (c.kind)
+       {
+       case cval_unk_address: case cval_address_unk_offset: case cval_address:
+         return cval_top;
+       case cval_sint: case cval_uint: case cval_float:
+         return make_cval_complex(cval_cast(c, base),
+                                  cval_cast(cval_zero, base));
+         return c;
+       case cval_sint_complex: case cval_uint_complex: case cval_float_complex:
+         return make_cval_complex(cval_cast(cval_realpart(c), base),
+                                  cval_cast(cval_imagpart(c), base));
+       default:assert(0); return c;
+       }
+    }
+
+  if (cval_iscomplex(c))
+    return cval_cast(cval_realpart(c), to);
+
+  if (type_floating(to))
+    {
+      switch (c.kind)
+       {
+       case cval_unk_address: case cval_address_unk_offset: case cval_address:
+         return cval_top; /* And not cval_invalid_address for some reason */
+       case cval_sint: case cval_uint:
+         c.kind = cval_float;
+         /* Note that the cast is necessary otherwise it would cast to the common
+            type of largest_int/largest_uint (largest_uint), so c.si would be
+            cast to unsigned. */
+         c.d = c.kind == cval_sint ? (long double)c.si : (long double)c.ui;
+         return c;
+       case cval_float:
+         if (type_float(to))
+           c.d = (float)c.d;
+         else if (type_double(to))
+           c.d = (double)c.d;
+         return c;
+       default:assert(0); return c;
+       }
+    }
+  else
+    {
+      cval tosize_cval = type_size(to);
+      size_t tosize;
+
+      // Cast to int of unknown size produces unknown value
+      if (cval_isunknown_number(tosize_cval))
+       switch (c.kind)
+         {
+         case cval_unk_address: case cval_address_unk_offset:
+         case cval_address:
+           return cval_unknown_address;
+         default:
+           return cval_unknown_number;
+         }
+
+      tosize = cval_uint_value(tosize_cval);
+      switch (c.kind)
+       {
+       case cval_float:
+         /* If it's floating, make it an integer */
+         /* Note: can't cast floating point number to a pointer */
+         assert(!type_pointer(to));
+         if (type_unsigned(to))
+           {
+             c.kind = cval_uint;
+             c.ui = c.d;
+             c.isize = tosize;
+           }
+         else
+           {
+             c.kind = cval_sint;
+             c.si = c.d;
+             c.isize = tosize;
+           }
+         return c;
+
+       case cval_unk_address: case cval_address_unk_offset: case cval_address:
+         /* Lose value if cast address of symbol to too-narrow a type */
+         if (!type_array(to) && tosize < type_size_int(intptr_type))
+           return cval_invalid_address;
+         /* Otherwise nothing happens (the offset is already restricted to
+            the range of intptr_type). */
+         return c;
+
+       case cval_uint: case cval_sint:
+         c.isize = tosize;
+         if (type_unsigned(to) || type_pointer(to))
+           {
+             if (c.kind == cval_sint)
+               c.ui = c.si;
+             c.ui = truncate_unsigned(c.ui, tosize);
+             c.kind = cval_uint;
+           }
+         else
+           {
+             if (c.kind == cval_uint)
+               c.si = c.ui;
+             c.si = truncate_signed(c.si, tosize);
+             c.kind = cval_sint;
+           }
+         return c;
+
+       default: assert(0); return c;
+       }
+    }
+}
+
+cval cval_not(cval c)
+{
+  if (cval_istop(c))
+    return cval_top;
+  else if (cval_isunknown(c))
+    return cval_unknown_number;
+  else if (!cval_knownbool(c))
+    return cval_invalid_address;
+  else
+    return make_cval_signed(!cval_boolvalue(c), int_type);
+}
+
+cval cval_negate(cval c)
+{
+  switch (c.kind)
+    {
+    case cval_variable: return cval_top;
+    case cval_unk_number: return cval_unknown_number;
+    case cval_address: case cval_unk_address: case cval_address_unk_offset:
+      return cval_invalid_address;
+    case cval_sint: c.si = -c.si; return c; /* XXX: overflow */
+    case cval_uint: c.ui = truncate_unsigned(-c.ui, c.isize); return c;
+    case cval_float: c.d = -c.d; return c;
+    case cval_sint_complex:
+      c.si = -c.si;
+      c.si_i = -c.si_i; 
+      return c; /* XXX: overflow */
+    case cval_uint_complex:
+      c.ui = truncate_unsigned(-c.ui, c.isize);
+      c.ui_i = truncate_unsigned(-c.ui_i, c.isize);
+      return c;
+    case cval_float_complex: c.d = -c.d; c.d_i = -c.d_i; return c;
+    default: abort(); return cval_top;
+    }
+}
+
+cval cval_bitnot(cval c)
+{
+  switch (c.kind)
+    {
+    case cval_variable: return cval_top;
+    case cval_unk_number: return cval_unknown_number;
+    case cval_address: case cval_unk_address: case cval_address_unk_offset:
+      return cval_invalid_address;
+    case cval_sint: c.si = truncate_signed(~c.si, c.isize); return c;
+    case cval_uint: c.ui = truncate_unsigned(~c.ui, c.isize); return c;
+    default: abort(); return cval_top;
+    }
+}
+
+cval cval_conjugate(cval c)
+{
+  switch (c.kind)
+    {
+    case cval_variable: return cval_top;
+    case cval_unk_number: return cval_unknown_number;
+    case cval_sint_complex:
+      c.si_i = -c.si_i; 
+      return c; /* XXX: overflow */
+    case cval_uint_complex:
+      c.ui_i = truncate_unsigned(-c.ui_i, c.isize);
+      return c;
+    case cval_float_complex: c.d_i = -c.d_i; return c;
+    default: abort(); return cval_top;
+    }
+}
+
+cval cval_realpart(cval c)
+{
+  switch (c.kind)
+    {
+    case cval_variable: return cval_top;
+    case cval_unk_number: return cval_unknown_number;
+    case cval_sint_complex: c.kind = cval_sint; return c;
+    case cval_uint_complex: c.kind = cval_uint; return c;
+    case cval_float_complex: c.kind = cval_float; return c;
+    case cval_sint: case cval_uint: case cval_float: return c;
+    default: abort(); return cval_top;
+    }
+}
+
+cval cval_imagpart(cval c)
+{
+  switch (c.kind)
+    {
+    case cval_variable: return cval_top;
+    case cval_unk_number: return cval_unknown_number;
+    case cval_sint_complex: c.kind = cval_sint; c.si = c.si_i; return c;
+    case cval_uint_complex: c.kind = cval_uint; c.ui = c.ui_i; return c;
+    case cval_float_complex: c.kind = cval_float; c.d = c.d_i; return c;
+    case cval_sint: c.si = 0; return c;
+    case cval_uint: c.ui = 0; return c;
+    case cval_float: c.d = 0; return c;
+    default: abort(); return cval_top;
+    }
+}
+
+/* The binary operators require that both arguments have been cast to a common
+   type. */
+cval cval_add(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  if (cval_isaddress(c2))
+    {
+      cval tmp = c1; c1 = c2; c2 = tmp;
+    }
+
+  if (cval_isaddress(c1))
+    switch (c2.kind)
+      {
+      case cval_unk_number: return make_cval_address_unknown_offset(c1);
+      case cval_address: case cval_unk_address: case cval_address_unk_offset:
+       return cval_invalid_address;
+      case cval_sint: c1.si = truncate_signed(c1.si + c2.si, c1.isize); return c1;
+      case cval_uint: c1.si = truncate_signed(c1.si + c2.ui, c1.isize); return c1;
+      default: assert(0); return c1;
+      }
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  switch (c1.kind)
+    {
+    case cval_float:
+      assert(c2.kind == cval_float);
+      c1.d += c2.d;
+      return c1;
+
+    case cval_sint:
+      assert(c2.kind == cval_sint && c1.isize == c2.isize);
+      c1.si = truncate_signed(c1.si + c2.si, c1.isize);
+      return c1;
+      
+    case cval_uint:
+      assert(c2.kind == cval_uint && c1.isize == c2.isize);
+      c1.ui = truncate_unsigned(c1.ui + c2.ui, c1.isize);
+      return c1;
+      
+    case cval_float_complex:
+      assert(c2.kind == cval_float_complex);
+      c1.d += c2.d;
+      c1.d_i += c2.d_i;
+      return c1;
+
+    case cval_sint_complex:
+      assert(c2.kind == cval_sint_complex && c1.isize == c2.isize);
+      c1.si = truncate_signed(c1.si + c2.si, c1.isize);
+      c1.si_i = truncate_signed(c1.si_i + c2.si_i, c1.isize);
+      return c1;
+      
+    case cval_uint_complex:
+      assert(c2.kind == cval_uint_complex && c1.isize == c2.isize);
+      c1.ui = truncate_unsigned(c1.ui + c2.ui, c1.isize);
+      c1.ui_i = truncate_unsigned(c1.ui_i + c2.ui_i, c1.isize);
+      return c1;
+      
+    default:
+      assert(0);
+      return c1;
+    }
+}
+
+cval cval_sub(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  // <x> - <address> is cst iff x is an address from the same symbol
+  // (in particular, x cannot be unknown)
+  if (cval_isaddress(c2))
+    {
+      if (cval_isaddress(c1) &&
+         !cval_isunknown_address(c1) && !cval_isunknown_address(c2) &&
+         c1.ddecl == c2.ddecl && c1.ldecl == c2.ldecl)
+       {
+         if (c1.kind == cval_address_unk_offset ||
+             c2.kind == cval_address_unk_offset)
+           return cval_unknown_number;
+
+         c1.kind = cval_sint;
+         c1.si = truncate_signed(c1.si - c2.si, c1.isize);
+         return c1;
+       }
+      return cval_invalid_address;
+    }
+  // <address> - <x>
+  if (cval_isaddress(c1))
+    switch (c2.kind)
+      {
+      case cval_unk_number: return make_cval_address_unknown_offset(c1);
+      case cval_sint: c1.si = truncate_signed(c1.si - c2.si, c1.isize); return c1;
+      case cval_uint: c1.si = truncate_signed(c1.si - c2.ui, c1.isize); return c1;
+      default: assert(0); return c1;
+      }
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  switch (c1.kind)
+    {
+    case cval_float:
+      assert(c2.kind == cval_float);
+      c1.d -= c2.d;
+      return c1;
+
+    case cval_sint:
+      assert(c2.kind == cval_sint && c1.isize == c2.isize);
+      c1.si = truncate_signed(c1.si - c2.si, c1.isize);
+      return c1;
+      
+    case cval_uint:
+      assert(c2.kind == cval_uint && c1.isize == c2.isize);
+      c1.ui = truncate_unsigned(c1.ui - c2.ui, c1.isize);
+      return c1;
+      
+    case cval_float_complex:
+      assert(c2.kind == cval_float_complex);
+      c1.d -= c2.d;
+      c1.d_i -= c2.d_i;
+      return c1;
+
+    case cval_sint_complex:
+      assert(c2.kind == cval_sint_complex && c1.isize == c2.isize);
+      c1.si = truncate_signed(c1.si - c2.si, c1.isize);
+      c1.si_i = truncate_signed(c1.si_i - c2.si_i, c1.isize);
+      return c1;
+      
+    case cval_uint_complex:
+      assert(c2.kind == cval_uint_complex && c1.isize == c2.isize);
+      c1.ui = truncate_unsigned(c1.ui - c2.ui, c1.isize);
+      c1.ui_i = truncate_unsigned(c1.ui_i - c2.ui_i, c1.isize);
+      return c1;
+      
+    default:
+      assert(0);
+      return c1;
+    }
+}
+
+cval cval_times(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  // <address> * 1 and 1 * <address> are csts, everything else involving 
+  // addresses isn't
+  if (cval_isaddress(c1) || cval_isaddress(c2))
+    {
+      if (cval_isone(c1))
+       return c2;
+      if (cval_isone(c2))
+       return c1;
+      return cval_invalid_address;
+    }
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  if (cval_iscomplex(c1))
+    {
+      cval c1r = cval_realpart(c1), c1i = cval_imagpart(c1),
+       c2r = cval_realpart(c2), c2i = cval_imagpart(c2);
+
+      assert(cval_iscomplex(c2));
+      /* Note: this is what gcc does. The C99 standard appears to
+        require something rather more complicated (aka "do the right
+        thing") */
+      return make_cval_complex(cval_sub(cval_times(c1r, c2r),
+                                       cval_times(c1i, c2i)),
+                              cval_add(cval_times(c1r, c2i),
+                                       cval_times(c1i, c2r)));
+    }
+
+  switch (c1.kind)
+    {
+    case cval_float:
+      assert(c2.kind == cval_float);
+      c1.d *= c2.d;
+      return c1;
+
+    case cval_sint:
+      assert(c2.kind == cval_sint && c1.isize == c2.isize);
+      c1.si = truncate_signed(c1.si * c2.si, c1.isize);
+      return c1;
+      
+    case cval_uint:
+      assert(c2.kind == cval_uint && c1.isize == c2.isize);
+      c1.ui = truncate_unsigned(c1.ui * c2.ui, c1.isize);
+      return c1;
+      
+    default:
+      assert(0);
+      return c1;
+    }
+}
+
+cval cval_divide(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  // <address> / 1 is a cst, everything else involving addresses isn't
+  if (cval_isaddress(c1) || cval_isaddress(c2))
+    return cval_isone(c2) ? c1 : cval_invalid_address;
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  if (cval_iscomplex(c1))
+    {
+      cval c1r = cval_realpart(c1), c1i = cval_imagpart(c1),
+       c2r = cval_realpart(c2), c2i = cval_imagpart(c2);
+      cval mag = cval_add(cval_times(c1r, c2r), cval_times(c1i, c2i));
+
+      assert(cval_iscomplex(c2));
+      /* Note: this is what gcc does. The C99 standard appears to
+        require something rather more complicated (aka "do the right
+        thing") */
+      return make_cval_complex(cval_divide(cval_add(cval_times(c1r, c2r),
+                                                   cval_times(c1i, c2i)),
+                                          mag),
+                              cval_divide(cval_sub(cval_times(c1i, c2r),
+                                                   cval_times(c1r, c2i)),
+                                          mag));
+    }
+
+  switch (c1.kind)
+    {
+    case cval_float:
+      assert(c2.kind == cval_float);
+      c1.d /= c2.d;
+      return c1;
+
+    case cval_sint:
+      assert(c2.kind == cval_sint && c1.isize == c2.isize);
+      if (c2.si == 0)
+       return cval_top;
+      /* Note that signed division can overflow (MININT / -1). */
+      c1.si = truncate_signed(c1.si / c2.si, c1.isize);
+      return c1;
+      
+    case cval_uint:
+      assert(c2.kind == cval_uint && c1.isize == c2.isize);
+      if (c2.ui == 0)
+       return cval_top;
+      c1.ui /= c2.ui;
+      return c1;
+      
+    default:
+      assert(0);
+      return c1;
+    }
+}
+
+cval cval_modulo(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  if (cval_isone(c2))
+    return make_cval_signed(0, int_type);
+
+  if (cval_isaddress(c1) || cval_isaddress(c2))
+    return cval_invalid_address;
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  switch (c1.kind)
+    {
+    case cval_float:
+      assert(c2.kind == cval_float);
+      c1.d /= c2.d;
+      return c1;
+
+    case cval_sint:
+      assert(c2.kind == cval_sint && c1.isize == c2.isize);
+      if (c2.si == 0)
+       return cval_top;
+      c1.si = truncate_signed(c1.si % c2.si, c1.isize);
+      return c1;
+      
+    case cval_uint:
+      assert(c2.kind == cval_uint && c1.isize == c2.isize);
+      if (c2.ui == 0)
+       return cval_top;
+      c1.ui %= c2.ui;
+      return c1;
+      
+    default:
+      assert(0);
+      return c1;
+    }
+}
+
+#define CVAL_BITOP(OP) \
+{ \
+  if (cval_istop(c1) || cval_istop(c2)) \
+    return cval_top; \
+ \
+  if (cval_isaddress(c1) || cval_isaddress(c2)) \
+    return cval_invalid_address; \
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) \
+    return cval_unknown_number; \
+ \
+  assert(c1.kind == c2.kind && c1.isize == c2.isize); \
+  switch (c1.kind) \
+    { \
+    case cval_sint: \
+      c1.si = truncate_signed(c1.si OP c2.si, c1.isize); \
+      return c1; \
+       \
+    case cval_uint: \
+      c1.ui = truncate_signed(c1.ui OP c2.ui, c1.isize); \
+      return c1; \
+       \
+    default: \
+      assert(0); \
+      return c1; \
+    } \
+}
+
+cval cval_lshift(cval c1, cval c2) CVAL_BITOP(<<)
+cval cval_rshift(cval c1, cval c2) CVAL_BITOP(>>)
+cval cval_bitand(cval c1, cval c2) CVAL_BITOP(&)
+cval cval_bitor(cval c1, cval c2)  CVAL_BITOP(|)
+cval cval_bitxor(cval c1, cval c2) CVAL_BITOP(^)
+
+#define CVAL_RELOP(OP) \
+{ \
+  bool res; \
+ \
+  if (cval_istop(c1) || cval_istop(c2)) \
+    return cval_top; \
+ \
+  if (cval_isaddress(c1) || cval_isaddress(c2)) \
+    return cval_invalid_address; \
+  /* Surprisingly (?) &x == &x is not a constant expression */ \
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) \
+    return cval_unknown_number; \
+ \
+  switch (c1.kind) \
+    { \
+    case cval_float: \
+      assert(c2.kind == cval_float); \
+      res = c1.d OP c2.d; \
+      break; \
+ \
+    case cval_sint: \
+      assert(c2.kind == cval_sint && c1.isize == c2.isize); \
+      res = c1.si OP c2.si; \
+      break; \
+       \
+    case cval_uint: \
+      assert(c2.kind == cval_uint && c1.isize == c2.isize); \
+      res = c1.ui OP c2.ui; \
+      break; \
+       \
+    default: \
+      assert(0); \
+      res = FALSE; \
+      break; \
+    } \
+  return make_cval_signed(res, int_type); \
+}
+
+static cval cval_simpleeq(cval c1, cval c2) CVAL_RELOP(==)
+cval cval_leq(cval c1, cval c2) CVAL_RELOP(<=)
+
+cval cval_eq(cval c1, cval c2)
+{
+  if (cval_iscomplex(c1) && cval_iscomplex(c2))
+    {
+      cval req = cval_simpleeq(cval_realpart(c1), cval_realpart(c2));
+      cval ieq = cval_simpleeq(cval_imagpart(c1), cval_imagpart(c2));
+
+      return make_cval_signed(cval_isone(req) && cval_isone(ieq), int_type);
+    }
+  else
+    return cval_simpleeq(c1, c2);
+}
+
+/* True if x fits in the range of type t */
+bool uint_inrange(largest_uint x, type t)
+{
+  size_t tsize = type_size_int(t);
+  largest_uint max;
+
+  assert(tsize <= sizeof(largest_uint));
+
+  if (tsize == sizeof(largest_uint) && type_unsigned(t))
+    return TRUE;
+
+  max = (largest_uint)1 << (BITSPERBYTE * tsize - !type_unsigned(t));
+
+  return x < max;
+}
+
+bool sint_inrange(largest_int x, type t)
+{
+  size_t tsize = type_size_int(t);
+  largest_int max;
+
+  assert(tsize <= sizeof(largest_uint));
+
+  if (x < 0 && type_unsigned(t))
+    return FALSE;
+
+  if (tsize == sizeof(largest_uint))
+    return TRUE;
+
+  max = (largest_int)1 << (BITSPERBYTE * tsize - !type_unsigned(t));
+
+  /* The x<0&&unsigned and largest_int cases have been handled above. */
+  return x >= -max && x < max;
+}
+
+bool cval_inrange(cval c, type t)
+/* Requires: constant_integral(c)
+   Returns: TRUE if c is in range of type t. */
+{
+  switch (c.kind)
+    {
+    case cval_sint: return sint_inrange(c.si, t);
+    case cval_uint: return uint_inrange(c.ui, t);
+    default: abort(); return FALSE;
+    }
+}
+
+largest_int cval_intcompare(cval c1, cval c2)
+/* Requires: cval_isinteger(c1) && cval_isinteger(c2)
+   Returns: x, x<0 if c1 < c2, x = 0 if c1 = c2 and x > 0 if c1 > c2
+*/
+{
+  /* beware of overflow of difference w/ respect to largest_int */
+  switch (c1.kind)
+    {
+    case cval_sint:
+      switch (c2.kind)
+       {
+       case cval_sint:
+         return c1.si - c2.si;
+       case cval_uint:
+         /* can't use c1.si < c2.ui because of implicit conversion */
+         if (c1.si < 0 || c1.si < c2.ui)
+           return -1;
+         return c1.si - c2.ui; /* common type is largest_uint */
+       default: abort(); return 0;
+       }
+    case cval_uint:
+      switch (c2.kind)
+       {
+       case cval_sint:
+         if (c2.si < 0 || c1.ui < c2.si)
+           return 1;
+         /* result might overflow so compare with 0 */
+         return (c1.ui - c2.si) > 0; /* common type is largest_uint */
+       case cval_uint:
+         /* We do the cases because the result might overflow
+            largest_int */
+         if (c1.ui < c2.ui)
+           return -1;
+         if (c1.ui > c2.ui)
+           return 1;
+         return 0;
+       default: abort(); return 0;
+       }
+    default: abort(); return 0;
+    }
+}
+
+void cval_print(FILE *f, cval c)
+/* Effects: prints a parsable representable of c to f
+ */
+{
+  switch (c.kind)
+    {
+    case cval_float:
+    case cval_float_complex:
+      break;
+    case cval_uint: fprintf(f, "%llu", c.ui); break;
+    case cval_uint_complex: fprintf(f, "%llu %llu", c.ui, c.ui_i); break;
+    case cval_sint: fprintf(f, "%lld", c.si); break;
+    case cval_sint_complex: fprintf(f, "%lld %lld", c.si, c.si_i); break;
+    default: assert(0); break;
+    }
+}
+
+void cval_debug(cval c)
+/* For use while debugging. gdb doesn't print cvals right */
+{
+  switch (c.kind)
+    {
+    case cval_variable: printf("<top>"); break;
+    case cval_unk_number: printf("<number>"); break;
+    case cval_unk_address: printf("<address>"); break;
+    case cval_address: case cval_address_unk_offset:
+      if (c.ldecl)
+       printf("<address label=%s(%p)", c.ldecl->name, c.ldecl);
+      else
+       printf("<address sym=%s(%p)", c.ddecl->name, c.ddecl);
+      if (c.kind == cval_address_unk_offset)
+       printf(" + <number>");
+      else if (c.si > 0)
+       printf(" + %lld", c.si);
+      else
+       printf(" - %lld", -c.si);
+      printf(">");
+    default:
+      printf("[size: %u]", (unsigned)c.isize);
+      cval_print(stdout, c);
+    }
+  printf("\n");
+}
+
+cval cval_align_to(cval n, cval alignment)
+{
+  cval count = cval_divide(cval_sub(cval_add(n, alignment),
+                                   make_type_cval(1)),
+                          alignment);
+
+  return cval_times(count, alignment);
+}
+
+cval cval_gcd(cval x, cval y)
+{
+  cval z;
+
+  if (cval_istop(x) || cval_istop(y))
+    return cval_top;
+
+  if (cval_isunknown_number(x) || cval_isunknown_number(y))
+    return cval_unknown_number;
+
+  for (;;)
+    {
+      if (!cval_boolvalue(y)) /* ie 0 */
+       return x;
+      
+      z = cval_modulo(x, y); x = y; y = z;
+    }
+}
+
+cval cval_lcm(cval x, cval y)
+{
+  /* ignoring risk of overflow (used for alignments which are typically <= 16) */
+  return cval_divide(cval_times(x, y), cval_gcd(x, y)); 
+}
+
+cval cval_max(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  // Not used for anything else yet. Fix later if need to.
+  assert(cval_isinteger(c1) && cval_isinteger(c2));
+
+  return cval_intcompare(c1, c2) > 0 ? c1 : c2;
+}
+
+cval cval_min(cval c1, cval c2)
+{
+  if (cval_istop(c1) || cval_istop(c2))
+    return cval_top;
+
+  if (cval_isunknown_number(c1) || cval_isunknown_number(c2))
+    return cval_unknown_number;
+
+  // Not used for anything else yet. Fix later if need to.
+  assert(cval_isinteger(c1) && cval_isinteger(c2));
+
+  return cval_intcompare(c1, c2) < 0 ? c1 : c2;
+}
+
+data_declaration cval_ddecl(cval c)
+/* Returns: c's declaration
+   Requires: cval_isaddress(c)  && !cval_isunknown_address(c) && 
+     c doesn't denote a label
+*/
+{
+  assert(cval_isaddress(c) && !cval_isunknown_address(c));
+  return c.ddecl;
+}
+
+label_declaration cval_ldecl(cval c)
+/* Returns: c's declaration, or NULL if c denotes a variable
+   Requires: cval_isaddress(c)  && !cval_isunknown_address(c)
+*/
+{
+  assert(cval_isaddress(c) && !cval_isunknown_address(c));
+  return c.ldecl;
+}
+
diff --git a/src/cval.h b/src/cval.h
new file mode 100644 (file)
index 0000000..1a97e51
--- /dev/null
@@ -0,0 +1,238 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef CVAL_H
+#define CVAL_H
+
+/* Note: legal ops on complex are:
+   add, sub, times, divide, realpart, imagpart, conjugate
+*/
+typedef struct {
+  enum {
+    cval_variable,                 /* not a constant */
+    cval_unk_number,               /* some unknown number */
+    cval_unk_address,              /* an unknown symbol with unknown offset */
+    cval_address_unk_offset,        /* known symbol with unknown offset */
+    cval_address,                  /* symbol with offset */
+    cval_float, cval_float_complex, /* a (complex) floating point number */
+    cval_uint, cval_uint_complex,   /* a (complex) unsigned number */
+    cval_sint, cval_sint_complex    /* a (complex) signed number */
+  } kind;
+#ifdef USE_UNNAMED_UNION
+  union {
+    struct {
+      long double d, d_i; /* for cval_float */
+    };
+    struct {
+      size_t isize;
+      union {
+       largest_int si;
+       largest_uint ui;
+      };
+      union {
+       largest_int si_i;
+       largest_uint ui_i;
+       struct { /* for cval_address, cval_address_unk_offset */
+         struct data_declaration *ddecl;
+         struct label_declaration *ldecl;
+       };
+      };
+    };
+  };
+#else
+  long double d, d_i; /* for cval_float */
+  struct data_declaration *ddecl; /* for cval_address */
+  struct label_declaration *ldecl;  /* for cval_address */
+  largest_int si, si_i;
+  largest_uint ui, ui_i;
+  size_t isize;
+#endif
+} cval;
+
+extern cval cval_top; /* The non-constant value */
+extern cval cval_unknown_number; /* The unknown number value */
+extern cval cval_unknown_address; /* The unknown address value */
+extern cval cval_zero; /* A zero value. Use cval_cast to make the desired 
+                         kind of constant */
+extern cval cval_one; /* A one value. Use cval_cast to make the desired 
+                         kind of constant */
+extern cval cval_bitsperbyte; /* BITSPERBYTE, unsigned */
+
+void cval_init(void);
+
+cval make_cval_signed(largest_int i, type t);
+cval make_cval_unsigned(largest_uint i, type t);
+
+cval make_type_cval(size_t s);
+/* Effects: Make a cval representing a type size. This is special-cased
+     because we need to make these for type sizes before any types are
+     available
+   Returns: A cval representing s, with size set to the target's size_t size
+*/
+
+cval make_cval_float(long double d);
+cval make_cval_complex(cval r, cval i);
+cval make_cval_address(data_declaration ddecl, label_declaration ldecl,
+                      largest_int offset);
+
+cval make_cval_address_unknown_offset(cval c);
+/* Requires: cval_isaddress(c)
+   Returns: a constant identical to c except that the offset is now unknown
+*/
+
+bool cval_isunknown(cval c);
+/* Return: TRUE if c is an unknown constant
+   (one of unknown_number, unknown_address, address_unknown_offset) */
+
+/*bool cval_isunknown_number(cval c);*/
+#define cval_isunknown_number(c) ((c).kind == cval_unk_number)
+/* Return: TRUE if c is an unknown constant */
+
+/*bool cval_isunknown_address(cval c);*/
+#define cval_isunknown_address(c) ((c).kind == cval_unk_address)
+/* Return: TRUE if c is an unknown constant */
+
+/*bool cval_istop(cval c);*/
+#define cval_istop(c) ((c).kind == cval_variable)
+/* Return: TRUE if c is not a constant */
+
+bool cval_isaddress(cval c);
+/* Return: TRUE if c is an address constant (known or unknown) */
+
+bool cval_isinteger(cval c);
+/* Return: TRUE if c is an integer constant */
+
+bool cval_isunsigned(cval c);
+/* Return: TRUE if c is an unsigned integer constant */
+
+bool cval_isfloating(cval c);
+/* Return: TRUE if c is a floating-point constant */
+
+bool cval_iscomplex(cval c);
+/* Return: TRUE if c is a complex constant */
+
+bool cval_knownbool(cval c);
+/* Returns: TRUE if the truth-value of c can be determined (use cval_boolvalue
+     to get that value). Note that address values with offset 0 are known to
+     be true...
+*/
+
+bool cval_boolvalue(cval c);
+/* Returns: TRUE if c is a non-zero constant
+   Requires: cval_knownbool(c)
+ */
+
+bool cval_knownvalue(cval c);
+/* Returns: TRUE if the value of c can be determined (this is false for
+   address constants, while cval_knownbool is true for address constants
+   with offset 0)
+*/
+
+largest_uint cval_uint_value(cval c);
+/* Returns: The value of c as an unsigned int
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+
+largest_int cval_sint_value(cval c);
+/* Returns: The value of c as a signed int
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+
+long double cval_float_value(cval c);
+/* Returns: The value of c as a long double
+   Requires: cval_knownvalue(c) && !cval_iscomplex(c)
+*/
+
+bool cval_isone(cval c);
+/* Returns: TRUE if c is 1 (FALSE for unknown constants)
+   Requires: c not be cval_top
+ */
+
+data_declaration cval_ddecl(cval c);
+/* Returns: c's declaration, or NULL if c denotes a label
+   Requires: cval_isaddress(c)  && !cval_isunknown_address(c)
+*/
+
+label_declaration cval_ldecl(cval c);
+/* Returns: c's declaration, or NULL if c denotes a variable
+   Requires: cval_isaddress(c)  && !cval_isunknown_address(c)
+*/
+
+/* All of these functions will return cval_top if the result is not a
+   constant expression */
+
+cval cval_cast(cval c, type to); /* Cast c to type to */
+cval cval_not(cval c); /* !c */
+cval cval_negate(cval c); /* -c */
+cval cval_bitnot(cval c); /* ~c */
+cval cval_conjugate(cval c); /* ~c */
+cval cval_realpart(cval c); /* __real__ c */
+cval cval_imagpart(cval c); /* __imag__ c */
+
+/* The binary operators require that both arguments have been cast to a common
+   type. */
+cval cval_add(cval c1, cval c2);
+cval cval_sub(cval c1, cval c2);
+cval cval_times(cval c1, cval c2);
+cval cval_divide(cval c1, cval c2);
+cval cval_modulo(cval c1, cval c2);
+cval cval_lshift(cval c1, cval c2);
+cval cval_rshift(cval c1, cval c2);
+cval cval_bitand(cval c1, cval c2);
+cval cval_bitor(cval c1, cval c2);
+cval cval_bitxor(cval c1, cval c2);
+cval cval_eq(cval c1, cval c2);
+/*cval cval_ne(cval c1, cval c2);*/
+cval cval_leq(cval c1, cval c2);
+/*cval cval_lt(cval c1, cval c2);*/
+/*cval cval_geq(cval c1, cval c2);*/
+/*cval cval_gt(cval c1, cval c2);*/
+#define cval_gt(c1, c2) (cval_not(cval_leq((c1), (c2))))
+#define cval_lt(c1, c2) (cval_gt((c2), (c1)))
+#define cval_geq(c1, c2) (cval_leq((c2), (c1)))
+#define cval_ne(c1, c2) (cval_not(cval_eq((c1), (c2))))
+
+/* True if x fits in the range of type t */
+bool uint_inrange(largest_uint x, type t);
+bool sint_inrange(largest_int x, type t);
+
+bool cval_inrange(cval c, type t);
+/* Requires: constant_integral(c)
+   Returns: TRUE if c is in range of type t. */
+
+largest_int cval_intcompare(cval c1, cval c2);
+/* Requires: cval_isinteger(c1) && cval_isinteger(c2)
+   Returns: x, x<0 if c1 < c2, x = 0 if c1 = c2 and x > 0 if c1 > c2
+*/
+
+void cval_print(FILE *f, cval c);
+/* Requires: cval_knownvalue(c)
+   Effects: prints a parsable representable of c to f
+ */
+
+/* Utility functions (used for struct layout) */
+cval cval_lcm(cval x, cval y);
+cval cval_gcd(cval x, cval y);
+cval cval_align_to(cval n, cval alignment);
+cval cval_max(cval c1, cval c2);
+cval cval_min(cval c1, cval c2);
+
+#endif
diff --git a/src/dd_list.c b/src/dd_list.c
new file mode 100644 (file)
index 0000000..9162f28
--- /dev/null
@@ -0,0 +1,207 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <regions.h>
+#include "dd_list.h"
+
+/* This is a hack: the list header holds the two pseudo-elements for the
+   beginning & end of a list: the `beginning' pseudo element has:
+     next = first element
+     previous = NULL
+     data = xxx
+   the `end' pseudo element has:
+     next = NULL
+     previous = last element
+     data = xxx
+
+   if l is a dd_list, the `beginning' element is (dd_list_pos *)l
+   and the `end' is (dd_list_pos *)&l->null
+
+   l is initialised to make all this work ...
+   Source: AmigaOS Exec kernel
+*/
+struct dd_list
+{
+  struct dd_list_pos *first;
+  struct dd_list_pos *null;
+  struct dd_list_pos *last;
+};
+
+static dd_list_pos new_hdr(region r, void *data, dd_list_pos previous, dd_list_pos next)
+/* Returns: A new list element containing `data', with previous & next
+    initialised
+*/
+{
+  dd_list_pos new = ralloc(r, struct dd_list_pos);
+
+  new->data = data;
+  new->previous = previous;
+  new->next = next;
+
+  return new;
+}
+
+dd_list dd_new_list(region r)
+/* Returns: A new empty list
+*/
+{
+  dd_list new = ralloc(r, struct dd_list);
+
+  /* Initialise `beginning' and `end' elements (see comment at top) */
+  new->first = (dd_list_pos)&new->null;
+  new->null = NULL;
+  new->last = (dd_list_pos)new;
+
+  return new;
+}
+
+void dd_add_first(region r, dd_list l, void *data)
+/* Effects: Adds a new element containing `data' to the beginning of l.
+   Modifies: l
+*/
+{
+  dd_insert_after(r, (dd_list_pos)l, data);
+}
+
+void dd_add_last(region r, dd_list l, void *data)
+{
+  dd_insert_before(r, (dd_list_pos)&l->null, data);
+}
+
+void dd_insert_before(region r, dd_list_pos where, void *data)
+/* Effects: Adds a new element containg `data' after element `where'.
+   Modifies: the list containing `where'
+*/
+{
+  dd_list_pos new = new_hdr(r, data, where->previous, where);
+
+  where->previous->next = new;
+  where->previous = new;
+}
+
+void dd_insert_after(region r, dd_list_pos where, void *data)
+/* Effects: Adds a new element containg `data' before element `where'.
+   Modifies: the list containing `where'
+*/
+{
+  dd_list_pos new = new_hdr(r, data, where, where->next);
+
+  where->next->previous = new;
+  where->next = new;
+}
+
+void dd_remove(dd_list_pos what)
+/* Effects: Removes element `what' from its list.
+     No operations on what are valid after the call to dd_remove.
+   Modifies: the list containing `what'.
+*/
+{
+  what->previous->next = what->next;
+  what->next->previous = what->previous;
+
+  what->next = what->previous = NULL;
+  what->data = NULL;
+}
+
+dd_list_pos dd_first(dd_list l)
+/* Returns: The first element of list l
+*/
+{
+  return l->first;
+}
+
+dd_list_pos dd_last(dd_list l)
+/* Returns: The last element of list l
+*/
+{
+  return l->last;
+}
+
+unsigned long dd_length(dd_list l)
+/* Returns: length of list l
+*/
+{
+  dd_list_pos scan;
+  unsigned long len = 0;
+
+  dd_scan (scan, l) len++;
+
+  return len;
+}
+
+void dd_append(dd_list l1, dd_list l2)
+/* Effects: Appends list l2 to the end of list l1.
+     List l2 is destroyed
+   Modifies: l1, l2
+*/
+{
+  l1->last->next = l2->first;
+  l2->first->previous = l1->last;
+  l2->last->next = (dd_list_pos)&l1->null;
+  l1->last = l2->last;
+
+  l2->first = l2->last = NULL;
+}
+
+dd_list dd_copy(region r, dd_list l)
+/* Returns: A new list with the same elements as l
+*/
+{
+  dd_list new = dd_new_list(r);
+  dd_list_pos scan;
+  
+  dd_scan (scan, l) dd_add_last(r, new, scan->data);
+
+  return new;
+}
+
+void dd_free_list(dd_list l, void (*delete)(dd_list_pos p))
+/* Effects: Destroys list l and all its elements.
+     If delete is not NULL, calls it before deleting each element.
+*/
+{
+  dd_list_pos scan, next;
+
+  scan = dd_first(l);
+  while (!dd_is_end(scan))
+    {
+      next = dd_next(scan);
+      if (delete) delete(next);
+
+      scan->next = scan->previous = NULL;
+      scan->data = NULL;
+
+      scan = next;
+    }
+  l->first = l->last = NULL;
+}
+
+dd_list_pos dd_find(dd_list l, void *find)
+/* Returns: The element of l whose data is 'find', or NULL if it isn't found
+*/
+{
+  dd_list_pos scan;
+
+  dd_scan (scan, l)
+    if (DD_GET(void *, scan) == find) return scan;
+
+  return NULL;
+}
diff --git a/src/dd_list.h b/src/dd_list.h
new file mode 100644 (file)
index 0000000..b045b5c
--- /dev/null
@@ -0,0 +1,141 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef DD_LIST_H
+#define DD_LIST_H
+
+/* 
+ * Doubly-linked list storing arbitrary pointers.
+ * The lists may homogeneous or heterogeneous at the discretion of
+ * the user (the list stores no type indications)
+ *
+ * dd_list is the type of all lists
+ * dd_list_pos is the type that represents a particular element of a list
+ */
+
+typedef struct dd_list *dd_list; /* A list */
+typedef struct dd_list_pos      /* A position in a list */
+{
+  /* PRIVATE! Do not use the fields directly */
+  struct dd_list_pos *next;
+  struct dd_list_pos *previous;
+  void *data;
+} *dd_list_pos;
+
+dd_list dd_new_list(region r);
+/* Returns: A new empty list
+*/
+
+void dd_add_first(region r, dd_list l, void *data);
+/* Effects: Adds a new element containing `data' to the beginning of l.
+   Modifies: l
+*/
+void dd_add_last(region r, dd_list l, void *data);
+/* Effects: Adds a new element containing `data' to the end of l.
+   Modifies: l
+*/
+void dd_insert_before(region r, dd_list_pos where, void *data);
+/* Effects: Adds a new element containg `data' after element `where'.
+   Modifies: the list containing `where'
+*/
+void dd_insert_after(region r, dd_list_pos where, void *data);
+/* Effects: Adds a new element containg `data' before element `where'.
+   Modifies: the list containing `where'
+*/
+void dd_remove(dd_list_pos what);
+/* Effects: Removes element `what' from its list.
+     No operations on what are valid after the call to dd_remove.
+   Modifies: the list containing `what'.
+*/
+
+dd_list_pos dd_first(dd_list l);
+/* Returns: The first element of list l
+*/
+dd_list_pos dd_last(dd_list l);
+/* Returns: The last element of list l
+*/
+#define dd_is_beginning(l) (!(l)->previous)
+/* Returns: TRUE if l is the pseudo-element at the beginning of a list.
+   Note: dd_is_beginning(dd_previous(dd_first(l))) == TRUE
+*/
+#define dd_is_end(l) (!(l)->next)
+/* Returns: TRUE if l is the pseudo-element at the end of a list.
+   Note: dd_is_end(dd_next(dd_last(l))) == TRUE
+*/
+#define dd_next(l) ((l)->next)
+/* Returns: The element after l, or the pseudo-element indicating the
+     end of the list if none remain (see dd_is_end)
+*/
+#define dd_previous(l) ((l)->previous)
+/* Returns: The element before l, or the pseudo-element indicating the
+     beginning of the list if none remain (see dd_is_beginning)
+*/
+
+#define dd_is_empty(l) (dd_is_end(dd_first((l))))
+/* Returns: TRUE if l is the empty list
+*/
+
+#define DD_GET(type, l) ((type)((l)->data))
+/* Returns: The contents of element l, cast to type `type'
+     This operation is obviously invalid on the pseudo-elements at
+     the beginning and end of lists
+*/
+#define DD_SET(l, to) ((l)->data = (to))
+/* Effects: Sets the contents of element l to `to'
+     This operation is obviously invalid on the pseudo-elements at
+     the beginning and end of lists
+   Modifies: l
+*/
+
+#define dd_scan(var, list) for (var = dd_first((list)); !dd_is_end(var); var = dd_next(var))
+/* Effects: Iterates variable `scan' over the contents of the list.
+   Requires: list not ne modified during iteration.
+   Example:
+     length = 0;
+     dd_scan (element, l)
+       length++;
+*/
+
+unsigned long dd_length(dd_list l);
+/* Returns: length of list l
+*/
+
+void dd_append(dd_list l1, dd_list l2);
+/* Effects: Appends list l2 to the end of list l1.
+     List l2 is destroyed
+   Modifies: l1, l2
+*/
+
+dd_list dd_copy(region r, dd_list l);
+/* Returns: A new list with the same elements as l
+*/
+
+void dd_free_list(dd_list l, void (*delete)(dd_list_pos p));
+/* Effects: Destroys list l and all its elements.
+     If delete is not NULL, calls it before deleting each element.
+   Modifies: l
+*/
+
+dd_list_pos dd_find(dd_list l, void *find);
+/* Returns: The element of l whose data is 'find', or NULL if it isn't found
+*/
+
+#endif
diff --git a/src/decls.h b/src/decls.h
new file mode 100644 (file)
index 0000000..ebbe94a
--- /dev/null
@@ -0,0 +1,269 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef DECLS_H
+#define DECLS_H
+
+#include "AST.h"
+#include "env.h"
+#include "c-lex.h"
+
+typedef struct environment *environment;
+typedef struct data_declaration *data_declaration;
+typedef struct label_declaration *label_declaration;
+
+#include "nesc-decls.h"
+#include "nesc-uses.h"
+#include "cval.h"
+
+/* Types representing declarations */
+
+typedef struct field_declaration {
+  struct tag_declaration *containing_tag;
+  struct field_declaration *next; /* Next field in struct/union */
+  const char *name;            /* May be NULL for bitfields (if NULL, bitwidth == 0) */
+  type type;
+
+  /* All '@'-style attributes attached to this declaration */
+  dd_list/*nesc_attribute*/ attributes;
+
+  field_decl ast;              /* May be null if copied from anonymous 
+                                  struct/union */
+  cval bitwidth;               /* for bitfields, cval_top otherwise */
+  cval offset;                 /* in bits, not bytes. Can be cval_top if
+                                  offset is not a compile-time constant */
+  bool packed;                 /* if packed attribute specified */
+
+  /* In abstract configurations or modules: The latest instantiation
+     of this declaration */
+  struct field_declaration *instantiation;
+} *field_declaration;
+
+/* A struct, union or enum */
+typedef struct tag_declaration {
+  int kind; /* One of kind_{struct/union/enum/attribute}_ref */
+  const char *name; /* NULL for anonynous struct/union/enum */
+  type reptype; /* The type used to represent an enum, NULL for struct
+                  and unions */
+  /* All '@'-style attributes attached to this declaration */
+  dd_list/*nesc_attribute*/ attributes;
+
+  /* fields and fieldlist are only defined for structs/unions */
+  env fields;
+  field_declaration fieldlist;
+  tag_ref definition;
+  struct tag_declaration *shadowed; /* Any struct with the same tag defined in enclosing scope */
+  bool defined, being_defined;
+  bool fields_const, fields_volatile;
+  bool transparent_union;      /* transparent_union attribute is present */
+  bool collapsed;              /* TRUE if this struct/union was collapsed
+                                  into its parent. */
+
+  cval size;                   /* Can be cval_top if not compile-time constant
+                                  (due to variable-size arrays in struct) */
+  cval alignment, user_alignment;
+  bool packed;                 /* if packed attribute specified */
+  bool dumped;                 /* TRUE if already added to dump list */
+  bool Cname;                  /* TRUE if has @C() attribute */
+
+  nesc_declaration container;  /* as in data_declarations */
+
+  /* Function this declaration occurs in (NULL if outside a function) */
+  struct data_declaration *container_function;
+
+  /* In abstract configurations or modules: The latest instantiation
+     of this declaration */
+  struct tag_declaration *instantiation;
+  struct tag_declaration *instanceof; /* Inside instantiated components: what this tag is an instance of */
+
+  /* Name of a macro to use in nesC's output for instances of this attribute - 
+     if this is NULL, attributes are not printed */
+  const char *macro_name;
+  bool deputy_scope;           /* TRUE for deputy attributes (@deputy_scope()) */
+} *tag_declaration;
+
+typedef enum { decl_variable, decl_constant, decl_function,
+              decl_typedef, decl_error, decl_magic_string,     
+              decl_magic_function,
+              decl_interface_ref, decl_component_ref } data_kind;
+
+typedef enum  {
+  c_call_atomic = 1,           /* bit set if atomic calls to this fn */
+  c_call_nonatomic = 2 /* bit set if non-atomic calls to this fn */
+} call_contexts;
+
+struct data_declaration {
+  data_kind kind;
+  const char *name;
+  type type;
+  /* For declaration numbering purposes. At this point, it has:
+     a per-function numbering for local variables
+     a per-module numbering for commands/events */
+  long id;
+  context use_summary;
+  /* All '@'-style attributes attached to this declaration */
+  dd_list/*nesc_attribute*/ attributes;
+  /* Regular C: For extern's shadowing globals in inner scopes */
+  /* nesC commands/events: point to original interface declaration */
+  struct data_declaration *shadowed;
+
+  /* In abstract configurations or modules: The latest instantiation
+     of this declaration */
+  struct data_declaration *instantiation;
+  struct data_declaration *instanceof; /* Inside instantiated components: what this decl is an instance of */
+
+  /* interface/module/configuration this declaration belongs to.
+     NULL for declarations from C files */
+  nesc_declaration container;
+
+  /* Function this declaration occurs in (NULL if outside a function) */
+  struct data_declaration *container_function;
+
+  declaration definition; /* Pointer to actual definition, if any */
+  declaration ast; /* Last declaration */
+  expression initialiser; /* NULL if none. For type arguments, this gets set
+                            to the argument type (type_argument node) */
+
+  bool printed;                        /* symbol info already printed */
+  bool dumped;                 /* TRUE if already added to dump list */
+  bool islimbo; /* TRUE if comes from an extern declaration in an inner scope
+                  (also true for implicit function declarations) */
+  bool isexternalscope; /* == TREE_PUBLIC   */
+  bool isfilescoperef; /* == DECL_EXTERNAL */
+  bool needsmemory;   /* == TREE_STATIC   */
+
+  /* isused is TRUE if declaration used. For parameters, there is a special
+     use during parameter list declaration to support forward parameters:
+       - a duplicate parameter declaration is allowed if isused is FALSE
+         once a duplicate is seen, isused is set to TRUE
+       - parameters are created with isused == TRUE
+       - after the forward parameters are seen, they have their isused field
+         set to FALSE */
+  bool isused;
+  bool in_system_header;
+  bool Cname;                  /* name is in C name space (don't rename!)
+                                  Set by the `C' attribute. */
+  bool safe;                   /* True if deputy safety checks should
+                                  be enabled */
+  call_contexts spontaneous;   /* Call contexts for environmental calls
+                                  (main, interrupt handlers, e.g.). Set by
+                                  the `spontaneous', `interrupt' and
+                                  `signal' attributes */
+
+  dd_list/*use*/ nuses;                /* List of uses of this identifier */
+
+  /* For functions */
+  enum { function_implicit, function_normal, function_static, function_nested,
+         function_event, function_command }
+    ftype;
+  bool isinline;
+  bool noinlinep;
+  bool isexterninline;
+  bool defined;                        /* nesC: true if defined, false if used */
+  bool suppress_definition;    /* Prevent code generation */
+  bool uncallable;             /* Error if called */
+  bool async;                  /* True if async declared (cmd/event) or
+                                  inferred (C function) */
+  bool actual_async;           /* Inferred value for async */
+  /* The call_contexts summarise the runtime contexts in which this fn
+     might be called. So if all calls to f are in atomic statements,
+     and f calls g outside an atomic statement, then 
+      g->call_contexts == c_call_atomic
+  */
+  call_contexts call_contexts;
+  call_contexts extra_contexts;        /* Some extra, hidden call contexts (used to
+                                  support __nesc_enable_interrupt) */
+  bool makeinline;             /* Mark this function inline when generating code */
+  gnode ig_node;               /* inline-graph node for this function */
+  struct data_declaration *interface;  /* nesC: interface this cmd/event belongs to */
+  typelist oldstyle_args; /* Type of arguments from old-style declaration */
+  dd_list/*iduse*/ fn_uses;    /* list of uses of identifiers in this fn */
+  struct connections *connections; /* See nesc-generate.c: what this command
+                                     or event is connected to. */
+  /* folding function for magic functions. pass is 0 when constant
+     folding during parsing, and goes from 1 to n for each final
+     constant folding pass (after all components loaded) */
+  known_cst (*magic_fold)(function_call fcall, int pass);
+
+  /* For variables */
+  enum { variable_register, variable_static, variable_normal } vtype;
+  bool islocal;                        /* True for non-static local vars */
+  bool isparameter;            /* implies islocal */
+  bool async_access;           /* Some kind of access in an async context */
+  bool async_write;            /* A write in async context */
+  bool norace;
+
+  /* For constants */
+  known_cst value;
+  bool substitute;             /* Substitute value when unparsing */
+
+  /* For magic_strings */
+  cstring schars;
+
+  /* For interface_ref */
+  nesc_declaration itype;
+  environment functions;
+  bool required;
+  typelist gparms;
+
+  /* For component_ref */
+  nesc_declaration ctype;
+
+  /* For documentation comments */
+  struct docstring doc;
+
+  /* For typedefs of network base types */
+  data_declaration encoder, decoder; /* encoder and decoder functions */
+  data_declaration bf_encoder, bf_decoder; /* bitfield encoder and decoder functions */
+  bool isbe;                              /* TRUE for big-endian types */
+  type basetype;               /* underlying non-network type (e.g., uint8_t) */
+
+  /* For type variables (some decl_typedefs). Regular typedefs (not type
+     variables) have typevar_none here. */
+  enum { typevar_none,
+        typevar_normal, typevar_integer, typevar_number } typevar_kind;
+};
+
+struct label_declaration {
+  const char *name;
+  bool explicitly_declared;
+  bool used;
+  id_label firstuse; /* Never NULL */
+  id_label definition; /* NULL until actually defined */
+  function_decl containing_function;
+  atomic_stmt containing_atomic;
+};
+
+struct environment
+{
+  struct environment *sameregion parent;
+  function_decl fdecl;
+  bool parm_level : 1;
+  bool global_level : 1;       /* Both system and component */
+  bool deputy_scope : 1;
+  env sameregion id_env;
+  env sameregion tag_env;
+};
+
+extern data_declaration bad_decl;
+
+#endif
diff --git a/src/dhash.c b/src/dhash.c
new file mode 100644 (file)
index 0000000..1b3c563
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+/* A (growable) hash table */
+
+#include <regions.h>
+#include "dhash.h"
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+#else
+/* let's be gcc-specific as a fallback */
+#include <limits.h>
+typedef unsigned int __attribute__ ((mode(__SI__))) uint32;
+typedef unsigned int __attribute__ ((mode(__DI__))) uint64;
+#endif
+
+struct dhash_table
+{
+  region sameregion r;
+  void **sameregion elements;
+  unsigned long size, used, log2size;
+  int (*compare)(void *key, void *y);
+  unsigned long (*hash)(void *x);
+};
+
+dhash_table new_dhash_table(region r, unsigned long initial_size,
+                           int (*compare)(void *key, void *y),
+                           unsigned long (*hash)(void *x))
+{
+  dhash_table h = ralloc(r, struct dhash_table);
+
+  h->r = r;
+  h->elements = rarrayalloc(r, initial_size, void *);
+  h->size = initial_size;
+  h->log2size = 0;
+  while (initial_size > 1)
+    {
+      h->log2size++;
+      initial_size >>= 1;
+    }
+  h->used = 0;
+  h->compare = compare;
+  h->hash = hash;
+
+  return h;
+}
+
+unsigned long dhash_used(dhash_table h)
+{
+  return h->used;
+}
+
+#define MAGIC 0.6180339987
+
+#define LLMAGIC ((uint64)(MAGIC * ((uint64)1 << 8 * sizeof(uint32))))
+
+static unsigned long dhash(dhash_table h, void *x)
+{
+  uint32 hval = h->hash(x);
+  uint32 hash = hval * LLMAGIC;
+
+  return hash >> (8 * sizeof(uint32) - h->log2size);
+}
+
+void *dhlookup(dhash_table h, void *x)
+{
+  unsigned long i = dhash(h, x);
+
+  for (;;)
+    {
+      void *bucket = h->elements[i];
+
+      if (!bucket)
+       return NULL;
+      if (h->compare(x, bucket))
+       return bucket;
+
+      if (++i >= h->size)
+       i = 0;
+    }
+}
+
+void dhadd(dhash_table h, void *x)
+{
+  unsigned long i;
+
+  h->used++;
+  if (h->used > 3 * h->size / 4)
+    {
+      void **oldelements = h->elements;
+      unsigned long j, oldsize = h->size;
+
+      /* Grow hashtable */
+      h->size *= 2;
+      h->log2size++;
+      h->elements = rarrayalloc(h->r, h->size, void *);
+
+      /* Rehash old entries */
+      for (j = 0; j < oldsize; j++)
+       if (oldelements[j])
+         {
+           unsigned long newi = dhash(h, oldelements[j]);
+                   
+           while (h->elements[newi])
+             {
+               newi++;
+               if (newi >= h->size)
+                 newi = 0;
+             }
+           h->elements[newi] = oldelements[j];
+           if (j == i)
+             i = newi;
+         }
+    }
+
+  i = dhash(h, x);
+
+  for (;;)
+    {
+      if (!h->elements[i])
+       {
+         h->elements[i] = x;
+         return;
+       }
+
+      if (++i >= h->size)
+       i = 0;
+    }
+}
+
+void *dhaddif(dhash_table h, void *entry)
+{
+  void *existing = dhlookup(h, entry);
+
+  if (existing)
+    return existing;
+
+  dhadd(h, entry);
+  return NULL;
+}
+
+
+dhash_scan dhscan(dhash_table h)
+{
+  dhash_scan iterator;
+
+  iterator.h = h;
+  iterator.index = 0;
+
+  return iterator;
+}
+
+void *dhnext(dhash_scan *iterator)
+{
+  dhash_table h = iterator->h;
+
+  for (;;)
+    {
+      void *x;
+
+      if (iterator->index >= h->size)
+       return NULL;
+      x = h->elements[iterator->index++];
+      if (x)
+       return x;
+    }
+}
+
+static int ptr_compare(void *key, void *y)
+{
+  return key == y;
+}
+
+static unsigned long ptr_hash(void *x)
+{
+  return (unsigned long)x >> 3;
+}
+
+dhash_table new_dhash_ptr_table(region r, unsigned long initial_size)
+{
+  return new_dhash_table(r, initial_size, ptr_compare, ptr_hash);
+}
diff --git a/src/dhash.h b/src/dhash.h
new file mode 100644 (file)
index 0000000..f352132
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#ifndef DHASH_H
+#define DHASH_H
+
+#include "regions.h"
+
+typedef struct dhash_table *dhash_table;
+
+dhash_table new_dhash_table(region r, unsigned long initial_size,
+                           int (*compare)(void *entry1, void *entry2),
+                           unsigned long (*hash)(void *entry));
+/* Returns: new hash table created in region r, with specified initial size,
+     comparison and hashing functions
+*/
+
+void *dhlookup(dhash_table h, void *entry);
+/* Returns: An entry x in hash table h such that compare(x, entry) is true,
+     or NULL if no entry found.
+*/
+
+void dhadd(dhash_table h, void *entry);
+/* Effects: Unconditionally adds entry to hash table h (may create
+     duplicates)
+   Modifies: h
+*/
+
+void *dhaddif(dhash_table h, void *entry);
+/* Effects: Adds entry to hash table h if it's not already there
+     (as determined by dhlookup)
+   Returns: dhlookup's result if entry not added, NULL otherwise
+   Modifies: h
+*/
+
+unsigned long dhash_used(dhash_table h);
+/* Returns: number of elements in hash table h
+ */
+
+typedef struct
+{
+  dhash_table h;
+  int index;
+} dhash_scan;
+
+dhash_scan dhscan(dhash_table h);
+/* Returns: new iterator for hash table h
+ */
+void *dhnext(dhash_scan *iterator);
+/* Requires: no changes to hash table have been made since dhscan returned
+    *iterator
+   Effects: Returns next element of hash table iterated by *iterator, or
+     NULL if no elements remain
+   Modifies: iterator
+*/
+
+/* Some predefined hash tables */
+
+dhash_table new_dhash_ptr_table(region r, unsigned long initial_size);
+/* Returns: A new hash table which hashes pointers, with specified initial size
+ */
+
+#endif
diff --git a/src/edit.c b/src/edit.c
new file mode 100644 (file)
index 0000000..1552fc1
--- /dev/null
@@ -0,0 +1,155 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "edit.h"
+#include "semantics.h"
+#include "stmt.h"
+#include "constants.h"
+#include "AST_utils.h"
+#include "unparse.h"
+
+/* Declare a new temporary that can be assigned a value of type t.
+   Place the declaration at the start of block. 
+   XXX: See discussion in types.c:tag2ast about the (lack of) correctness of
+   this approach.
+   Return it's declaration */
+data_decl build_declaration(region r, struct environment *e,
+                           type t, const char *name, expression init,
+                           data_declaration *oddecl)
+{
+  struct data_declaration tempdecl;
+  identifier_declarator id;
+  variable_decl vd;
+  data_decl dd;
+  declarator tdeclarator;
+  type_element tmodifiers;
+
+  /* Compute real type, name */
+  if (type_array(t))
+    t = make_pointer_type(type_array_of(t));
+  else if (type_function(t))
+    t = make_pointer_type(t);
+  /* Qualifiers must not be present on the temp (the qualifiers of t apply
+     to the original location we are building a temp) */
+  t = make_qualified_type(t, no_qualifiers);
+
+  /* Build AST for the declaration */
+  id = new_identifier_declarator(r, dummy_location, str2cstring(r, name));
+  type2ast(r, dummy_location, t, CAST(declarator, id), &tdeclarator, &tmodifiers);
+  vd = new_variable_decl(r, dummy_location, tdeclarator, NULL, init, NULL, NULL);
+  vd->declared_type = t;
+  dd = new_data_decl(r, dummy_location, tmodifiers, CAST(declaration, vd));
+
+  if (e) /* Declare the variable */
+    {
+      init_data_declaration(&tempdecl, CAST(declaration, vd), id->cstring.data, t);
+      tempdecl.kind = decl_variable;
+      tempdecl.vtype = variable_normal;
+      tempdecl.islocal = TRUE;
+      *oddecl = vd->ddecl = declare(e, &tempdecl, FALSE);
+    }
+
+  return dd;
+}
+
+#define TEMP_PREFIX "__nesc_temp"
+
+char *next_temporary(void)
+{
+  static long nextid = 42;
+  static char idname[sizeof(TEMP_PREFIX) + 20];
+
+  sprintf(idname, TEMP_PREFIX "%ld", nextid++);
+
+  return idname;
+}
+
+/* Declare a new temporary that can be assigned a value of type t.
+   Place the declaration at the start of block. 
+   Return it's declaration */
+data_declaration add_temporary(region r, compound_stmt block, type t)
+{
+  const char *name = next_temporary();
+  data_decl dd = build_declaration(r, NULL, t, name, NULL, NULL);
+  struct data_declaration tempdecl;
+  data_declaration ddecl;
+
+  /* Add to the function's declarations */
+  dd->next = CAST(node, block->decls);
+  block->decls = CAST(declaration, dd);
+
+#if 0
+  /* Set parent pointers */
+  AST_set_parents(CAST(node, dd));
+  dd->parent = CAST(node, block);
+  dd->parent_ptr = CASTSRPTR(node, &block->decls);
+  if (dd->next)
+    dd->next->parent_ptr = &dd->next;
+#endif
+
+  /* Declare the variable */
+  init_data_declaration(&tempdecl, dd->decls, rstrdup(r, name), t);
+  tempdecl.kind = decl_variable;
+  tempdecl.vtype = variable_normal;
+  tempdecl.islocal = TRUE;
+  ddecl = declare(block->env, &tempdecl, FALSE);
+  CAST(variable_decl, dd->decls)->ddecl = ddecl;
+
+  return ddecl;
+}
+
+word build_word(region r, const char *cword)
+{
+  return new_word(r, dummy_location, str2cstring(r, cword));
+}
+
+expression build_string(region r, location loc, const char *str)
+{
+  string_cst elems = new_string_cst(r, loc, str2cstring(r, "oops"));
+  data_declaration sdecl = declare_string(NULL, str2cstring(r, str), FALSE);
+  string s = new_string(r, loc, elems, sdecl);
+
+  s->type = sdecl->type;
+  s->static_address = foldaddress_string(s);
+  s->lvalue = TRUE;
+
+  return CAST(expression, s);
+}
+
+expression build_function_call(region r, location loc,
+                              expression fn, expression arglist)
+{
+  expression result = CAST(expression, new_function_call(r, loc, fn, arglist, NULL, normal_call));
+  type fntype = type_default_conversion(fn->type), rettype;
+
+  if (type_pointer(fntype))
+    /* All function types come this way because default_conversion makes
+       them into pointers to functions... */
+    fntype = type_points_to(fntype);
+
+  rettype = type_function_return_type(fntype);
+  result->type = rettype;
+  result->cst = fold_function_call(result, 0);
+
+  return result;
+}
+
diff --git a/src/edit.h b/src/edit.h
new file mode 100644 (file)
index 0000000..383fa19
--- /dev/null
@@ -0,0 +1,45 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef EDIT_H
+#define EDIT_H
+
+/* Declare a new variable that can be assigned a value of type t.
+   Place the declaration at the start of block. 
+   XXX: See discussion in types.c:tag2ast about the (lack of) correctness of
+   this approach.
+   Return it's declaration */
+data_decl build_declaration(region r, struct environment *e,
+                           type t, const char *name, expression init,
+                           data_declaration *oddecl);
+
+/* Declare a new temporary that can be assigned a value of type t.
+   Place the declaration at the start of block. 
+   Return it's declaration */
+data_declaration add_temporary(region r, compound_stmt block, type t);
+
+word build_word(region r, const char *cword);
+
+expression build_string(region r, location loc, const char *s);
+expression build_function_call(region r, location loc,
+                              expression fn, expression arglist);
+
+#endif
diff --git a/src/env.c b/src/env.c
new file mode 100644 (file)
index 0000000..e2bf9c2
--- /dev/null
+++ b/src/env.c
@@ -0,0 +1,130 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "env.h"
+#include "dhash.h"
+#include "utils.h"
+
+#define DEFAULT_ENV_SIZE 16
+
+struct entry
+{
+  const char *name;
+  void *value;
+};
+
+struct env 
+{
+  env parent;
+  region sameregion r;
+  dhash_table table;
+};
+
+static int env_compare(void *entry1, void *entry2)
+{
+  struct entry *e1 = entry1, *e2 = entry2;
+
+  return e1->name && e2->name && strcmp(e1->name, e2->name) == 0;
+}
+
+static unsigned long env_hash(void *entry)
+{
+  struct entry *e = entry;
+
+  if (e->name) 
+    return hash_str(e->name);
+  else /* unnamed (distinct from all other entries), hash on address */
+    return hash_ptr(e);
+}
+
+/* Create a new, empty environment with ancestor 'parent'.
+   The environment, and any future contents, are allocated in r */
+env new_env(region r, env parent)
+{
+  env e = ralloc(r, struct env);
+
+  e->r = r;
+  e->parent = parent;
+  e->table = new_dhash_table(r, DEFAULT_ENV_SIZE, env_compare, env_hash);
+
+  return e;
+}
+
+/* Return parent environment of e */
+env env_parent(env e)
+{
+  return e->parent;
+}
+
+/* Return region of e */
+region env_region(env e)
+{
+  return e->r;
+}
+
+/* Find entry s in in environment e. If not found, check ancestors
+   except if this_level_only is true.
+   Returns entry's value if s is found, NULL otherwise */
+void *env_lookup(env e, const char *s, bool this_level_only)
+{
+  struct entry lookup, *found;
+
+  lookup.name = s;
+  for (;;)
+    {
+      found = dhlookup(e->table, &lookup);
+      if (found)
+       return found->value;
+      if (this_level_only || !e->parent) 
+       return NULL;
+      e = e->parent;
+    }
+}
+
+/* Add an entry for s, with value 'value' to environment e.
+   Behaviour is undefined if e already contains an entry for s.
+   Does not copy s. */
+void env_add(env e, const char *s, void *value)
+{
+  struct entry *newe = ralloc(e->r, struct entry);
+
+  newe->name = s;
+  newe->value = value;
+  dhadd(e->table, newe);
+}
+
+void env_scan(env e, env_scanner *scanner)
+{
+  *scanner = dhscan(e->table);
+}
+
+bool env_next(env_scanner *scanner, const char **name, void **value)
+{
+  struct entry *next = dhnext(scanner);
+  if (!next)
+    return FALSE;
+
+  *name = next->name;
+  *value = next->value;
+
+  return TRUE;
+}
diff --git a/src/env.h b/src/env.h
new file mode 100644 (file)
index 0000000..1449e8e
--- /dev/null
+++ b/src/env.h
@@ -0,0 +1,61 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef ENV_H
+#define ENV_H
+
+#include "dhash.h"
+
+#include "regions.h"
+
+typedef struct env *env;
+
+/* Create a new, empty environment with ancestor 'parent'.
+   The environment, and any future contents, are allocated in r */
+env new_env(region r, env parent);
+
+/* An environment can be deleted by deleting its region */
+
+/* Return parent environment of e */
+env env_parent(env e);
+
+/* Return region of e */
+region env_region(env e);
+
+/* Find entry s in in environment e. If not found, check ancestors
+   except if this_level_only is true.
+   Returns entry's value if s is found, NULL otherwise */
+void *env_lookup(env e, const char *s, bool this_level_only);
+
+/* Add an entry for s, with value 'value' to environment e.
+   If e already contains an entry for s, then the old entry is
+   hidden (but will still be found by env_scan).
+   s can be NULL (this allows registering of untagged structs/etc
+   in environments). Such entries cannot be found by env_lookup.
+   Does not copy s. */
+void env_add(env e, const char *s, void *value);
+
+/* Scanning */
+typedef dhash_scan env_scanner;
+void env_scan(env e, env_scanner *scanner);
+bool env_next(env_scanner *scanner, const char **name, void **value);
+
+#endif
diff --git a/src/errors.c b/src/errors.c
new file mode 100644 (file)
index 0000000..f838a2b
--- /dev/null
@@ -0,0 +1,396 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <stdarg.h>
+
+#include "parser.h"
+#include "errors.h"
+#include "semantics.h"
+#include "nesc-semantics.h"
+#include "flags.h"
+
+/* Name of program invoked (from argv[0]).  */
+const char *progname;
+
+int errorcount;
+int warningcount;
+
+static location error_location;
+
+/* Set and clear the error/warning location to use when there is
+   no input file stack */
+void set_error_location(location l)
+{
+  error_location = l;
+}
+
+void clear_error_location(void)
+{
+  error_location = NULL;
+}
+
+location current_location(void)
+{
+  if (current.lex.input)
+    return &current.lex.input->l;
+  else if (error_location)
+    return error_location;
+  else
+    return dummy_location;
+}
+
+/* Count an error or warning.  Return 1 if the message should be printed.  */
+int count_error(int warningp)
+{
+  if (warningp && inhibit_warnings)
+    return 0;
+
+  if (warningp && !warnings_are_errors)
+    warningcount++;
+  else
+    {
+      static int warning_message = 0;
+
+      if (warningp && !warning_message)
+       {
+         fprintf (stderr, "%s: warnings being treated as errors\n", progname);
+         warning_message = 1;
+       }
+      errorcount++;
+    }
+
+  return 1;
+}
+
+/* Function of last error message;
+   more generally, function such that if next error message is in it
+   then we don't have to mention the function name.  */
+static function_decl last_error_function = NULL;
+
+/* Used to detect when current.lex.input has changed since last described.  */
+static int last_error_tick;
+
+/* The default function to print out name of current function that caused
+   an error.  */
+
+/* Called by report_error_function to print out function name. */
+void print_error_function(const char *file)
+{
+  if (last_error_function != current.function_decl)
+    {
+      if (file)
+       fprintf (stderr, "%s: ", file);
+
+      if (current.function_decl == NULL)
+       fprintf (stderr, "At top level:\n");
+      else
+       {
+         const char *name, *iname;
+
+         declarator_name(current.function_decl->declarator, &name, &iname);
+         fprintf (stderr, "In function `%s%s%s':\n",
+                  iname ? iname : "", iname ? "." : "", name);
+       }
+
+      last_error_function = current.function_decl;
+    }
+}
+
+/* Print the current component if it's changed */
+void print_current_nesc_instance(void)
+{
+  static nesc_declaration last_container;
+
+  if (last_container != current.container)
+    {
+      if (current.container)
+       fprintf(stderr, "In %s `%s':\n", 
+               language_name(current.container->kind),
+               current.container->instance_name);
+      else
+       fprintf(stderr, "In C file:\n");
+      last_container = current.container;
+    }
+}
+
+
+/* Prints out, if necessary, the name of the current function
+  that caused an error.  Called from all error and warning functions.  */
+
+void report_error_function(const char *file)
+{
+  struct file_stack *p;
+
+  if (current.lex.input && current.lex.input->next != 0
+      && input_file_stack_tick != last_error_tick
+      && file == current.lex.input->l.filename)
+    {
+      fprintf (stderr, "In file included");
+      for (p = current.lex.input->next; p; p = p->next)
+       {
+         fprintf (stderr, " from %s:%lu", p->l.filename, p->l.lineno);
+         if (p->next)
+           fprintf (stderr, ",\n                ");
+       }
+      fprintf (stderr, ":\n");
+      last_error_tick = input_file_stack_tick;
+    }
+  print_current_nesc_instance();
+
+  print_error_function(file);
+}
+\f
+
+static void pfile_and_line(FILE *f, location l)
+{
+  if (l->container)
+    fprintf(f, "%s(%s):%lu: ", l->filename, l->container->instance_name, l->lineno);
+  else if (l->lineno)
+    fprintf(f, "%s:%lu: ", l->filename, l->lineno);
+  else
+    fprintf(f, "%s: ", l->filename);
+}
+
+/* Report error msg at l */
+void verror_with_location(location l, const char *format, va_list args)
+{
+  count_error(FALSE);
+  report_error_function(l->filename);
+  pfile_and_line(stderr, l);
+  vfprintf(stderr, format, args);
+  putc('\n', stderr);
+}
+
+/* Report error msg at decl */
+void verror_with_decl(declaration d, const char *format, va_list args)
+{
+  verror_with_location(d->location, format, args);
+}
+
+/* Report error msg at current filename, lineno */
+void verror(const char *format, va_list args)
+{
+  if (current.lex.input)
+    verror_with_location(&current.lex.input->l, format, args);
+  else if (error_location)
+    verror_with_location(error_location, format, args);
+  else
+    {
+      count_error(FALSE);
+      fprintf(stderr, "%s: ", progname);
+      vfprintf(stderr, format, args);
+      putc('\n', stderr); 
+   }
+}
+
+/* Report error msg at current filename, lineno */
+void error(const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  verror(format, args);
+  va_end(args);
+}
+
+/* Report error msg at decl */
+void error_with_decl(declaration d, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  verror_with_decl(d, format, args);
+  va_end(args);
+}
+
+/* Report error msg at l */
+void error_with_location(location l, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  verror_with_location(l, format, args);
+  va_end(args);
+}
+
+/* Report a fatal error at the current line number.  */
+void vfatal(const char *format, va_list args)
+{
+  verror(format, args);
+  exit(FATAL_EXIT_CODE);
+}
+
+void fatal(const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  vfatal(format, args);
+  va_end(args);
+}
+
+/* Report warning msg at l */
+void vwarning_with_location(location l, const char *format, va_list args)
+{
+  if (count_error(TRUE))
+    {
+      report_error_function(l->filename);
+      pfile_and_line(stderr, l);
+      fprintf(stderr, "warning: ");
+      vfprintf(stderr, format, args);
+      putc('\n', stderr);
+    }
+}
+
+/* Report warning msg at decl */
+void vwarning_with_decl(declaration d, const char *format, va_list args)
+{
+  vwarning_with_location(d->location, format, args);
+}
+
+/* Report warning msg at current filename, lineno */
+void vwarning(const char *format, va_list args)
+{
+  if (current.lex.input)
+    vwarning_with_location(&current.lex.input->l, format, args);
+  else if (error_location)
+    vwarning_with_location(error_location, format, args);
+  else if (count_error(TRUE))
+    {
+      fprintf(stderr, "%s: warning: ", progname);
+      vfprintf(stderr, format, args);
+      putc('\n', stderr); 
+   }
+}
+
+/* Report warning msg at current filename, lineno */
+void warning(const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  vwarning(format, args);
+  va_end(args);
+}
+
+
+/* Report warning msg at decl */
+void warning_with_decl(declaration d, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  vwarning_with_decl(d, format, args);
+  va_end(args);
+}
+
+/* Report warning msg at l */
+void warning_with_location(location l, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  vwarning_with_location(l, format, args);
+  va_end(args);
+}
+
+/* Report warning msg at current filename, lineno */
+void warning_or_error(bool iswarning, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (iswarning)
+    vwarning(format, args);
+  else
+    verror(format, args);
+  va_end(args);
+}
+
+
+/* Report warning msg at decl */
+void warning_or_error_with_decl(bool iswarning, declaration d,
+                               const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (iswarning)
+    vwarning_with_decl(d, format, args);
+  else
+    verror_with_decl(d, format, args);
+  va_end(args);
+}
+
+/* Report warning msg at l */
+void warning_or_error_with_location(bool iswarning, location l,
+                                   const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (iswarning)
+    vwarning_with_location(l, format, args);
+  else
+    verror_with_location(l, format, args);
+  va_end(args);
+}
+
+/* Report pedantic warning or error msg at current filename, lineno */
+void pedwarn(const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (flag_pedantic_errors)
+    verror(format, args);
+  else
+    vwarning(format, args);
+  va_end(args);
+}
+
+/* Report pedantic warning or error msg at d */
+void pedwarn_with_decl(declaration d, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (flag_pedantic_errors)
+    verror_with_decl(d, format, args);
+  else
+    vwarning_with_decl(d, format, args);
+  va_end(args);
+}
+
+/* Report pedantic warning or error msg at l */
+void pedwarn_with_location(location l, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  if (flag_pedantic_errors)
+    verror_with_location(l, format, args);
+  else
+    vwarning_with_location(l, format, args);
+  va_end(args);
+}
+
diff --git a/src/errors.h b/src/errors.h
new file mode 100644 (file)
index 0000000..1261edf
--- /dev/null
@@ -0,0 +1,101 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef ERRORS_H
+#define ERRORS_H
+
+/* Name of program invoked, sans directories.  */
+extern const char *progname;
+
+extern int errorcount;
+extern int warningcount;
+
+/* Set and clear the error/warning location to use when there is
+   no input file stack */
+void set_error_location(location l);
+void clear_error_location(void);
+
+location current_location(void);
+
+/* Report error msg at l */
+void verror_with_location(location l, const char *format, va_list args);
+
+/* Report error msg at decl */
+void verror_with_decl(declaration d, const char *format, va_list args);
+
+/* Report error msg at current filename, lineno */
+void verror(const char *format, va_list args);
+
+/* Report error msg at current filename, lineno */
+void error(const char *format, ...);
+
+/* Report error msg at decl */
+void error_with_decl(declaration d, const char *format, ...);
+
+/* Report error msg at l */
+void error_with_location(location l, const char *format, ...);
+
+/* Report a fatal error at the current line number.  */
+void vfatal(const char *format, va_list args);
+
+void fatal(const char *format, ...);
+
+/* Report warning msg at l */
+void vwarning_with_location(location l, const char *format, va_list args);
+
+/* Report warning msg at decl */
+void vwarning_with_decl(declaration d, const char *format, va_list args);
+
+/* Report warning msg at current filename, lineno */
+void vwarning(const char *format, va_list args);
+
+/* Report warning msg at current filename, lineno */
+void warning(const char *format, ...);
+
+
+/* Report warning msg at decl */
+void warning_with_decl(declaration d, const char *format, ...);
+
+/* Report warning msg at l */
+void warning_with_location(location l, const char *format, ...);
+
+/* Report warning msg at current filename, lineno */
+void warning_or_error(bool iswarning, const char *format, ...);
+
+/* Report warning msg at decl */
+void warning_or_error_with_decl(bool iswarning, declaration d,
+                               const char *format, ...);
+
+/* Report warning msg at l */
+void warning_or_error_with_location(bool iswarning, location l,
+                                   const char *format, ...);
+
+/* Report pedantic warning or error msg at current filename, lineno */
+void pedwarn(const char *format, ...);
+
+/* Report pedantic warning or error msg at d */
+void pedwarn_with_decl(declaration d, const char *format, ...);
+
+/* Report pedantic warning or error msg at l */
+void pedwarn_with_location(location l, const char *format, ...);
+
+#endif
diff --git a/src/expr.c b/src/expr.c
new file mode 100644 (file)
index 0000000..de94563
--- /dev/null
@@ -0,0 +1,1723 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "expr.h"
+#include "types.h"
+#include "c-parse.h"
+#include "constants.h"
+#include "unparse.h"
+#include "semantics.h"
+#include "stmt.h"
+#include "AST_utils.h"
+#include "nesc-module.h"
+#include "nesc-configuration.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+
+/* Return TRUE if TTL and TTR are pointers to types that are equivalent,
+   ignoring their qualifiers.  */
+static bool compatible_pointer_targets(type ttl, type ttr, bool pedantic)
+{
+  int val;
+
+  val = type_compatible_unqualified(ttl, ttr);
+
+  if (val == 2 && pedantic)
+    pedwarn("types are not quite compatible");
+  return val != 0;
+}
+
+static bool compatible_pointer_types(type tl, type tr)
+{
+  return compatible_pointer_targets(type_points_to(tl), type_points_to(tr),
+                                   pedantic);
+}
+
+/* Function arguments are positive, interface parameters are negative.
+   Return appropriate string for messages for *parmnum, and set
+   *parmnum to its absolute value
+   */
+static const char *argtype(int *parmnum)
+{
+  if (*parmnum >= 0)
+    return "argument";
+  *parmnum = -*parmnum;
+  return "parameter";
+}
+
+static void warn_for_assignment(const char *msg, const char *opname,
+                               data_declaration fdecl, int argnum)
+{
+  static char argstring[] = "passing %s %d of `%s'";
+  static char argnofun[] =  "passing %s %d";
+
+  if (opname == 0)
+    {
+      char *tmpname;
+      const char *argname = argtype(&argnum);
+
+      if (fdecl)
+       {
+         const char *function = decl_printname(fdecl);
+
+         /* Function name is known; supply it.  */
+         tmpname = (char *)alloca(strlen(function) + sizeof(argstring) + 25 /*%d*/ + 1);
+         sprintf(tmpname, argstring, argname, argnum, function);
+       }
+      else
+       {
+         /* Function name unknown (call through ptr); just give arg number.  */
+         tmpname = (char *)alloca(sizeof(argnofun) + 25 /*%d*/ + 1);
+         sprintf(tmpname, argnofun, argname, argnum);
+       }
+      opname = tmpname;
+    }
+  pedwarn(msg, opname);
+}
+
+static void incomplete_type_error(expression e, type t)
+{
+  /* Avoid duplicate error message.  */
+  if (t == error_type)
+    return;
+
+  if (e && is_identifier(e))
+    error("`%s' has an incomplete type", CAST(identifier, e)->cstring.data);
+  else
+    {
+      while (type_array(t) && type_array_size(t))
+       t = type_array_of(t);
+
+      if (type_tagged(t))
+       {
+         tag_declaration tag = type_tag(t);
+
+         error("invalid use of undefined type `%s %s'",
+               tagkind_name(tag->kind), tag->name);
+       }
+      else if (type_void(t))
+       error("invalid use of void expression");
+      else if (type_array(t))
+       error("invalid use of array with unspecified bounds");
+      else
+       assert(0);
+      /* XXX: Missing special message for typedef's */
+    }
+}
+
+static type require_complete_type(expression e, type etype)
+{
+  if (!type_incomplete(etype))
+    return e->type;
+
+  incomplete_type_error(e, etype);
+
+  return error_type;
+}
+
+type default_conversion(expression e)
+{
+  type from = e->type;
+
+  if (type_enum(from))
+    from = type_tag(from)->reptype;
+
+  if (type_smallerthanint(from))
+    {
+      /* Traditionally, unsignedness is preserved in default promotions. */
+      if (flag_traditional && type_unsigned(from))
+       return unsigned_int_type;
+      else
+       return int_type;
+    }
+
+  if (flag_traditional && !flag_allow_single_precision && type_float(from))
+    return double_type;
+
+  if (type_void(from))
+    {
+      error("void value not ignored as it ought to be");
+      return error_type;
+    }
+
+  /* Note that the (future) type variables cannot represent function or
+     array types, so we need not worry about what default_conversion
+     does to them for the function and array type cases. */
+
+  if (type_function(from))
+    {
+      assert(!e->cst);
+      e->cst = e->static_address;
+      e->converted_to_pointer = TRUE;
+      return make_pointer_type(from);
+    }
+
+  if (type_array(from))
+    {
+      if (!e->lvalue)
+       {
+         error("invalid use of non-lvalue array");
+         return error_type;
+       }
+      assert(!e->cst);
+      e->cst = e->static_address;
+      e->converted_to_pointer = TRUE;
+      /* It's being used as a pointer, so is not an lvalue */
+      e->lvalue = FALSE;
+      return make_pointer_type(type_array_of(from));
+    }
+
+  if (type_variable(from))
+    {
+      data_declaration vdecl = type_variable_decl(from);
+
+      switch (vdecl->typevar_kind)
+       {
+       case typevar_integer: return unknown_int_type;
+       case typevar_number: return unknown_number_type;
+       default: break;
+       }
+    }
+
+  return from;
+}
+
+/* called default_function_array_conversion in gcc 3.x */
+type default_conversion_for_assignment(expression e)
+{
+  if (type_array(e->type) || type_function(e->type))
+    return default_conversion(e);
+  else
+    return e->type;
+}
+
+static void readonly_warning(expression e, char *context)
+{
+  char buf[80];
+
+  strcpy(buf, context);
+
+  if (is_field_ref(e))
+    {
+      field_ref field = CAST(field_ref, e);
+
+      if (type_readonly(field->arg1->type))
+       readonly_warning(field->arg1, context);
+      else
+       {
+         strcat(buf, " of read-only member `%s'");
+         pedwarn(buf, field->cstring.data);
+       }
+    }
+  else if (is_identifier(e))
+    {
+      strcat(buf, " of read-only variable `%s'");
+      pedwarn(buf, CAST(identifier, e)->cstring.data);
+    }
+  else
+    pedwarn ("%s of read-only location", buf);
+}
+
+static bool check_writable_lvalue(expression e, char *context)
+{
+  if (!e->lvalue || type_array(e->type))
+    {
+      error("invalid lvalue in %s", context);
+      return FALSE;
+    }
+  if (type_readonly(e->type))
+    readonly_warning(e, context);
+  return TRUE;
+}
+
+bool check_conversion(type to, type from)
+{
+  if (type_equal_unqualified(to, from))
+    return TRUE;
+
+  if (to == error_type || from == error_type)
+    return FALSE;
+
+  if (type_void(from))
+    {
+      error("void value not ignored as it ought to be");
+      return FALSE;
+    }
+
+  if (type_void(to))
+    return TRUE;
+
+  if (type_integer(to))
+    {
+      if (!type_scalar(from))
+       {
+         error("aggregate value used where an integer was expected");
+         return FALSE;
+       }
+    }
+  else if (type_pointer(to))
+    {
+      if (!(type_integer(from) || type_pointer(from)))
+       {
+         error("cannot convert to a pointer type");
+         return FALSE;
+       }
+    }
+  else if (type_floating(to))
+    {
+      if (type_pointer(from))
+       {
+         error("pointer value used where a floating point value was expected");
+         return FALSE;
+       }
+      else if (!type_arithmetic(from))
+       {
+         error("aggregate value used where a float was expected");
+         return FALSE;
+       }
+    }
+  else if (type_complex(to))
+    {
+      if (type_pointer(from))
+       {
+         error("pointer value used where a complex was expected");
+         return FALSE;
+       }
+      else if (!type_arithmetic(from))
+       {
+         error("aggregate value used where a complex was expected");
+         return FALSE;
+       }
+    }
+  else
+    {
+      error("conversion to non-scalar type requested");
+      return FALSE;
+    }
+  return TRUE;
+}
+
+static bool assignable_pointer_targets(type tt1, type tt2, bool pedantic)
+{
+  return type_void(tt1) || type_void(tt2)
+    || compatible_pointer_targets(tt1, tt2, pedantic);
+}
+
+static void ptrconversion_warnings(type ttl, type ttr, expression rhs,
+                                  const char *context,
+                                  data_declaration fdecl, int parmnum,
+                                  bool pedantic)
+{
+  if (pedantic
+      && ((type_void(ttl) && type_function(ttr)) ||
+         (type_function(ttl) && type_void(ttr) &&
+          !(rhs && definite_null(rhs)))))
+    warn_for_assignment("ANSI forbids %s between function pointer and `void *'",
+                       context, fdecl, parmnum);
+
+  /* Const and volatile mean something different for function
+     types, so the usual warnings are not appropriate.  */
+  else if (type_function(ttl) && type_function(ttr))
+    {
+      /* Because const and volatile on functions are
+        restrictions that say the function will not do
+        certain things, it is okay to use a const or volatile
+        function where an ordinary one is wanted, but not
+        vice-versa.  */
+      if (type_const(ttl) && !type_const(ttr))
+       warn_for_assignment("%s makes `const *' function pointer from non-const",
+                           context, fdecl, parmnum);
+      if (type_volatile(ttl) && !type_volatile(ttr))
+       warn_for_assignment("%s makes `volatile *' function pointer from non-volatile",
+                           context, fdecl, parmnum);
+    }
+  else if (!type_function(ttl) && !type_function(ttr))
+    {
+      if (!type_const(ttl) && type_const(ttr))
+       warn_for_assignment("%s discards `const' from pointer target type",
+                           context, fdecl, parmnum);
+      if (!type_volatile(ttl) && type_volatile(ttr))
+       warn_for_assignment("%s discards `volatile' from pointer target type",
+                           context, fdecl, parmnum);
+
+      /* If this is not a case of ignoring a mismatch in signedness,
+        no warning.  */
+      if (!assignable_pointer_targets(ttl, ttr, FALSE) && pedantic)
+       warn_for_assignment("pointer targets in %s differ in signedness",
+                           context, fdecl, parmnum);
+    }
+}
+
+/* Return TRUE if no error and lhstype and rhstype are not error_type */
+bool check_assignment(type lhstype, type rhstype, expression rhs,
+                     const char *context, data_declaration fundecl,
+                     int parmnum)
+{
+  bool zerorhs = rhs && definite_zero(rhs);
+
+  if (lhstype == error_type || rhstype == error_type)
+    return FALSE;
+
+  if (type_void(rhstype))
+    {
+      error("void value not ignored as it ought to be");
+      return FALSE;
+    }
+
+  if (type_equal_unqualified(lhstype, rhstype))
+    return TRUE;
+
+  if (type_arithmetic(lhstype) && type_arithmetic(rhstype))
+    {
+      if (rhs)
+       constant_overflow_warning(rhs->cst);
+      return check_conversion(lhstype, rhstype);
+    }
+  if (parmnum && (type_qualifiers(lhstype) & transparent_qualifier))
+    {
+      /* See if we can match any field of lhstype */
+      tag_declaration tag = type_tag(lhstype);
+      field_declaration fields, marginal_field = NULL;
+
+      /* I blame gcc for this horrible mess (and it's minor inconsistencies
+        with the regular rules) */
+      /* pedantic warnings are skipped in here because we're already
+        issuing a warning for the use of this construct */
+      for (fields = tag->fieldlist; fields; fields = fields->next)
+       {
+         type ft = fields->type;
+
+         if (type_compatible(ft, rhstype))
+           break;
+
+         if (!type_pointer(ft))
+           continue;
+
+         if (type_pointer(rhstype))
+           {
+             type ttl = type_points_to(ft), ttr = type_points_to(rhstype);
+             bool goodmatch = assignable_pointer_targets(ttl, ttr, FALSE);
+
+             /* Any non-function converts to a [const][volatile] void *
+                and vice versa; otherwise, targets must be the same.
+                Meanwhile, the lhs target must have all the qualifiers of
+                the rhs.  */
+             if (goodmatch)
+               {
+                 /* If this type won't generate any warnings, use it.  */
+                 if ((type_function(ttr) && type_function(ttl))
+                     ? ((!type_const(ttl) | type_const(ttr))
+                        & (!type_volatile(ttl) | type_volatile(ttr)))
+                     : ((type_const(ttl) | !type_const(ttr))
+                        & (type_volatile(ttl) | !type_volatile(ttr))))
+                   break;
+
+                 /* Keep looking for a better type, but remember this one.  */
+                 if (!marginal_field)
+                   marginal_field = fields;
+               }
+           }
+
+         /* Can convert integer zero to any pointer type.  */
+         /* Note that this allows passing *any* null pointer (gcc bug?) */
+         if (zerorhs)
+           break;
+       }
+
+      if (fields || marginal_field)
+       {
+         if (!fields)
+           {
+             /* We have only a marginally acceptable member type;
+                it needs a warning.  */
+             type ttl = type_points_to(marginal_field->type),
+               ttr = type_points_to(rhstype);
+
+             ptrconversion_warnings(ttl, ttr, rhs, context, fundecl, parmnum,
+                                    FALSE);
+           }
+         
+         if (pedantic && !(fundecl && fundecl->in_system_header))
+           pedwarn("ANSI C prohibits argument conversion to union type");
+
+         return TRUE;
+       }
+    }
+
+  if (type_pointer(lhstype) && type_pointer(rhstype))
+    {
+      type ttl = type_points_to(lhstype), ttr = type_points_to(rhstype);
+      bool goodmatch = assignable_pointer_targets(ttl, ttr, pedantic);
+
+      /* Any non-function converts to a [const][volatile] void *
+        and vice versa; otherwise, targets must be the same.
+        Meanwhile, the lhs target must have all the qualifiers of the rhs.  */
+      if (goodmatch || (type_equal_unqualified(make_unsigned_type(ttl),
+                                              make_unsigned_type(ttr))))
+       ptrconversion_warnings(ttl, ttr, rhs, context, fundecl, parmnum,
+                              pedantic);
+      else
+       warn_for_assignment("%s from incompatible pointer type",
+                           context, fundecl, parmnum);
+
+      return check_conversion(lhstype, rhstype);
+    }
+  /* enum = ptr and ptr = enum counts as an error, so use type_integral */
+  else if (type_pointer(lhstype) && type_integral(rhstype))
+    {
+      if (!zerorhs)
+       warn_for_assignment("%s makes pointer from integer without a cast",
+                           context, fundecl, parmnum);
+      return check_conversion(lhstype, rhstype);
+    }
+  else if (type_integral(lhstype) && type_pointer(rhstype))
+    {
+      warn_for_assignment("%s makes integer from pointer without a cast",
+                         context, fundecl, parmnum);
+      return check_conversion(lhstype, rhstype);
+    }
+
+  if (!context)
+    {
+      const char *argname = argtype(&parmnum);
+
+      if (fundecl)
+       error("incompatible type for %s %d of `%s'", argname, parmnum,
+             decl_printname(fundecl));
+      else
+       error("incompatible type for %s %d of indirect function call",
+             argname, parmnum);
+    }
+  else
+    error("incompatible types in %s", context);
+
+  return FALSE;
+}
+
+expression make_error_expr(void)
+{
+  expression result = CAST(expression, new_error_expr(parse_region, dummy_location));
+
+  result->type = error_type;
+
+  return result;
+}
+
+expression make_comma(location loc, expression elist)
+{
+  expression result = CAST(expression, new_comma(parse_region, loc, elist));
+  expression e;
+  bool all_cst = TRUE;
+
+  scan_expression (e, elist)
+    if (e->next) /* Not last */
+      {
+       if (!e->cst)
+         all_cst = FALSE;
+#if 0
+       if (!e->side_effects)
+         {
+           /* The left-hand operand of a comma expression is like an expression
+              statement: with -W or -Wunused, we should warn if it doesn't have
+              any side-effects, unless it was explicitly cast to (void).  */
+           if ((extra_warnings || warn_unused)
+               && !(TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
+                     && TREE_TYPE (TREE_VALUE (list)) == void_type_node))
+             warning ("left-hand operand of comma expression has no effect");
+         }
+       else if (warn_unused)
+         warn_if_unused_value(e);
+#endif
+      }
+    else
+      {
+       if (type_array(e->type))
+         result->type = default_conversion(e);
+       else
+         result->type = e->type;
+
+       if (!pedantic)
+         {
+           /* (e1, ..., en) is a constant expression if all ei are constant
+              expressions. Weird? (see cst10.c) */
+           if (all_cst)
+             result->cst = e->cst;
+           result->lvalue = e->lvalue;
+           result->isregister = e->isregister;
+           result->bitfield = e->bitfield;
+         }
+      }
+
+  return result;
+}
+
+static void check_dereference(expression result, type dereferenced,
+                             const char *errorstring)
+{
+  if (type_pointer(dereferenced))
+    {
+      type t = type_points_to(dereferenced);
+
+      result->type = t;
+#if 0
+      if (TYPE_SIZE (t) == 0 && TREE_CODE (t) != ARRAY_TYPE)
+       {
+         error ("dereferencing pointer to incomplete type");
+         return error_mark_node;
+       }
+#endif
+      if (type_void(t) && !unevaluated_expression())
+       warning("dereferencing `void *' pointer");
+      result->side_effects |= type_volatile(t) /*|| flag_volatile*/;
+    }
+  else
+    {
+      result->type = error_type;
+      if (dereferenced != error_type)
+       error("invalid type argument of `%s'", errorstring);
+    }
+  result->lvalue = TRUE;
+}
+
+expression make_dereference(location loc, expression e)
+{
+  expression result = CAST(expression, new_dereference(parse_region, loc, e));
+
+  result->side_effects = e->side_effects;
+  check_dereference(result, default_conversion(e), "unary *");
+  result->static_address = e->cst;
+
+  return result;
+}
+
+expression make_extension_expr(location loc, expression e)
+{
+  expression result = CAST(expression, new_extension_expr(parse_region, loc, e));
+
+  result->type = e->type;
+  result->lvalue = e->lvalue;
+  result->side_effects = e->side_effects;
+  result->cst = e->cst;
+  result->bitfield = e->bitfield;
+  result->isregister = e->isregister;
+  result->static_address = e->static_address;
+  
+  return result;
+}
+
+expression make_address_of(location loc, expression e)
+{
+  expression result = CAST(expression, new_address_of(parse_region, loc, e));
+
+  result->type = error_type;
+
+  if (e->type == error_type)
+    ;
+  else if (e->bitfield)
+    error("attempt to take address of a bit-field structure member");
+  else
+    {
+      if (e->isregister)
+       pedwarn("address of a register variable requested");
+
+      if (!(type_function(e->type) || e->lvalue))
+       error("invalid lvalue in unary `&'");
+
+      result->type = make_pointer_type(e->type);
+      result->cst = e->static_address;
+    }
+  return result;
+}
+
+expression make_unary(location loc, int unop, expression e)
+{
+  switch (unop)
+    {
+    case kind_address_of:
+      return make_address_of(loc, e);
+    case kind_preincrement:
+      return make_preincrement(loc, e);
+    case kind_predecrement:
+      return make_predecrement(loc, e);
+    default:
+      {
+       expression result = CAST(expression, newkind_unary(parse_region, unop, loc, e));
+       type etype = default_conversion(e);
+       const char *errstring = NULL;
+
+       if (etype == error_type)
+         result->type = error_type;
+       else
+         {
+           switch (unop)
+             {
+             case kind_unary_plus:
+               if (!type_arithmetic(etype))
+                 errstring = "wrong type argument to unary plus";
+               break;
+             case kind_unary_minus:
+               if (!type_arithmetic(etype))
+                 errstring = "wrong type argument to unary minus";
+               break;
+             case kind_bitnot:
+               if (type_complex(etype))
+                 result->kind = kind_conjugate;
+               else if (!type_integer(etype))
+                 errstring = "wrong type argument to bit-complement";
+               break;
+             case kind_not:
+               if (!type_scalar(etype))
+                 errstring = "wrong type argument to unary exclamation mark";
+               else
+                 etype = int_type;
+               break;
+             case kind_realpart: case kind_imagpart:
+               if (!type_arithmetic(etype))
+                 if (unop == kind_realpart)
+                   errstring = "wrong type argument to __real__";
+                 else
+                   errstring = "wrong type argument to __imag__";
+               else
+                 etype = type_complex(etype) ? make_base_type(etype) : etype;
+               break;
+             default:
+               assert(0);
+             }
+           if (errstring)
+             {
+               error(errstring);
+               result->type = error_type;
+             }
+           else
+             {
+               result->type = etype;
+               result->cst = fold_unary(result);
+             }
+         }
+       return result;
+      }
+    }
+}
+
+expression make_label_address(location loc, id_label label)
+{
+  expression result = CAST(expression, new_label_address(parse_region, loc, label));
+
+  use_label(label);
+
+  result->type = ptr_void_type;
+  result->cst = fold_label_address(result);
+
+  if (pedantic)
+    pedwarn("ANSI C forbids `&&'");
+
+  return result;
+}
+
+static void check_sizealign(const char *kind, type stype)
+{
+  if (type_command(stype) || type_event(stype) ||
+      type_interface(stype) || type_component(stype))
+    error("%s applied to a command, event, interface or component", kind);
+  else if (type_incomplete(stype))
+    error("%s applied to an incomplete type", kind);
+}
+
+void check_sizeof(expression result, type stype)
+{
+  if (type_function(stype))
+    {
+      if (pedantic || warn_pointer_arith)
+       pedwarn("sizeof applied to a function type");
+    }
+  else if (type_void(stype))
+    {
+      if (pedantic || warn_pointer_arith)
+       pedwarn("sizeof applied to a void type");
+    }
+  else
+    check_sizealign("sizeof", stype);
+
+  result->type = size_t_type;
+  result->cst = fold_sizeof(result, stype);
+}
+
+expression make_sizeof_expr(location loc, expression e)
+{
+  expression result = CAST(expression, new_sizeof_expr(parse_region, loc, e));
+  check_sizeof(result, e->type);
+  return result;
+}
+
+expression make_sizeof_type(location loc, asttype t)
+{
+  expression result = CAST(expression, new_sizeof_type(parse_region, loc, t));
+  check_sizeof(result, t->type);
+  return result;
+}
+
+void check_alignof(expression result, type stype)
+{
+  check_sizealign("__alignof__", stype);
+
+  result->type = size_t_type;
+  result->cst = fold_sizeof(result, stype);
+}
+
+expression make_alignof_expr(location loc, expression e)
+{
+  expression result = CAST(expression, new_alignof_expr(parse_region, loc, e));
+  check_alignof(result, e->type);
+  return result;
+}
+
+expression make_alignof_type(location loc, asttype t)
+{
+  expression result = CAST(expression, new_alignof_type(parse_region, loc, t));
+  check_alignof(result, t->type);
+  return result;
+}
+
+expression make_cast(location loc, asttype t, expression e)
+{
+  expression result = CAST(expression, new_cast(parse_region, loc, e, t));
+  type castto = t->type;
+  
+  if (castto == error_type || type_void(castto))
+    ; /* Do nothing */
+  else if (type_array(castto))
+    {
+      error("cast specifies array type");
+      castto = error_type;
+    }
+  else if (type_function(castto))
+    {
+      error("cast specifies function type");
+      castto = error_type;
+    }
+  else if (type_equal_unqualified(castto, e->type))
+    {
+      if (pedantic && type_aggregate(castto))
+       pedwarn("ANSI C forbids casting nonscalar to the same type");
+    }
+  else
+    {
+      type etype = e->type;
+
+      /* Convert functions and arrays to pointers,
+        but don't convert any other types.  */
+      if (type_function(etype) || type_array(etype))
+       etype = default_conversion(e);
+
+      if (type_union(castto))
+       {
+         tag_declaration utag = type_tag(castto);
+         field_declaration ufield;
+
+         /* Look for etype as a field of the union */
+         for (ufield = utag->fieldlist; ufield; ufield = ufield->next)
+           if (ufield->name && type_equal_unqualified(ufield->type, etype))
+             {
+               if (pedantic)
+                 pedwarn("ANSI C forbids casts to union type");
+               break;
+             }
+         if (!ufield)
+           error("cast to union type from type not present in union");
+       }
+      else 
+       {
+         /* Optionally warn about potentially worrisome casts.  */
+
+         if (warn_cast_qual && type_pointer(etype) && type_pointer(castto))
+           {
+             type ep = type_points_to(etype), cp = type_points_to(castto);
+
+             if (type_volatile(ep) && !type_volatile(cp))
+               pedwarn("cast discards `volatile' from pointer target type");
+             if (type_const(ep) && !type_const(cp))
+               pedwarn("cast discards `const' from pointer target type");
+           }
+
+         /* This warning is weird */
+         if (warn_bad_function_cast && is_function_call(e) &&
+             !type_equal_unqualified(castto, etype))
+           warning ("cast does not match function type");
+
+#if 0
+         /* Warn about possible alignment problems.  */
+         if (STRICT_ALIGNMENT && warn_cast_align
+             && TREE_CODE (type) == POINTER_TYPE
+             && TREE_CODE (otype) == POINTER_TYPE
+             && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
+             && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
+             /* Don't warn about opaque types, where the actual alignment
+                restriction is unknown.  */
+             && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
+                   || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
+                  && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
+             && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
+           warning ("cast increases required alignment of target type");
+
+         if (TREE_CODE (type) == INTEGER_TYPE
+             && TREE_CODE (otype) == POINTER_TYPE
+             && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
+             && !TREE_CONSTANT (value))
+           warning ("cast from pointer to integer of different size");
+
+         if (TREE_CODE (type) == POINTER_TYPE
+             && TREE_CODE (otype) == INTEGER_TYPE
+             && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
+#if 0
+             /* Don't warn about converting 0 to pointer,
+                provided the 0 was explicit--not cast or made by folding.  */
+             && !(TREE_CODE (value) == INTEGER_CST && integer_zerop (value))
+#endif
+             /* Don't warn about converting any constant.  */
+             && !TREE_CONSTANT (value))
+           warning ("cast to pointer from integer of different size");
+#endif
+
+         if (!check_conversion(castto, etype))
+           castto = error_type;
+       }
+    }
+
+  result->lvalue = !pedantic && e->lvalue;
+  result->isregister = e->isregister;
+  result->bitfield = e->bitfield;
+  result->static_address = e->static_address;
+  result->type = castto;
+  if (castto != error_type)
+    result->cst = fold_cast(result);
+
+  return result;
+}
+
+type pointer_int_sum(type ptype, type itype)
+{
+  type pointed = type_points_to(ptype);
+
+  if (type_void(pointed))
+    {
+      if (pedantic || warn_pointer_arith)
+       pedwarn("pointer of type `void *' used in arithmetic");
+    }
+  else if (type_function(pointed))
+    {
+      if (pedantic || warn_pointer_arith)
+       pedwarn("pointer to a function used in arithmetic");
+    }
+  else if (type_incomplete(pointed))
+    error("arithmetic on pointer to an incomplete type");
+
+  return ptype;
+}
+
+bool valid_compare(type t1, type t2, expression e1)
+{
+  if (type_void(type_points_to(t1)))
+    {
+      if (pedantic && type_function(type_points_to(t2)) && !definite_null(e1))
+       pedwarn("ANSI C forbids comparison of `void *' with function pointer");
+      return TRUE;
+    }
+  return FALSE;
+}
+
+type check_binary(int binop, expression e1, expression e2)
+{
+  type t1 = default_conversion(e1), t2 = default_conversion(e2);
+  type rtype = NULL;
+  bool common = FALSE;
+
+  /* XXX: Misc warnings (see build_binary_op) */
+  if (t1 == error_type || t2 == error_type)
+    rtype = error_type;
+  else switch(binop)
+    {
+    case kind_plus:
+      if (type_pointer(t1) && type_integer(t2))
+       rtype = pointer_int_sum(t1, t2);
+      else if (type_pointer(t2) && type_integer(t1))
+       rtype = pointer_int_sum(t2, t1);
+      else
+       common = TRUE;
+      break;
+
+    case kind_minus: 
+      if (type_pointer(t1) && type_integer(t2))
+       rtype = pointer_int_sum(t1, t2);
+      else if (type_pointer(t1) && type_pointer(t2) &&
+              compatible_pointer_types(t1, t2))
+       rtype = ptrdiff_t_type;
+      else
+       common = TRUE;
+      break;
+
+    case kind_plus_assign: case kind_minus_assign:
+      if (type_pointer(t1) && type_integer(t2))
+       rtype = pointer_int_sum(t1, t2);
+      else
+       common = TRUE;
+      break;
+
+    case kind_times: case kind_divide:
+    case kind_times_assign: case kind_divide_assign:
+      common = TRUE;
+      break;
+
+    case kind_modulo: case kind_bitand: case kind_bitor: case kind_bitxor:
+    case kind_lshift: case kind_rshift:
+    case kind_modulo_assign: case kind_bitand_assign: case kind_bitor_assign:
+    case kind_bitxor_assign: case kind_lshift_assign: case kind_rshift_assign:
+      if (type_integer(t1) && type_integer(t2))
+       rtype = common_type(t1, t2);
+      break;
+
+    case kind_leq: case kind_geq: case kind_lt: case kind_gt:
+      rtype = int_type; /* Default to assuming success */
+      if (type_real(t1) && type_real(t2))
+       ;
+      else if (type_pointer(t1) && type_pointer(t2))
+       {
+         if (compatible_pointer_types(t1, t2))
+           {
+             /* XXX: how can this happen ? */
+             if (type_incomplete(t1) != type_incomplete(t2))
+               pedwarn("comparison of complete and incomplete pointers");
+             else if (pedantic && type_function(type_points_to(t1)))
+               pedwarn("ANSI C forbids ordered comparisons of pointers to functions");
+           }
+         else
+           pedwarn("comparison of distinct pointer types lacks a cast");
+       }
+      /* XXX: Use of definite_zero may lead to extra warnings when !extra_warnings */
+      else if ((type_pointer(t1) && definite_zero(e2)) ||
+              (type_pointer(t2) && definite_zero(e1)))
+       {
+         if (pedantic || extra_warnings)
+           pedwarn("ordered comparison of pointer with integer zero");
+       }
+      else if ((type_pointer(t1) && type_integer(t2)) ||
+              (type_pointer(t2) && type_integer(t1)))
+       {
+         if (!flag_traditional)
+           pedwarn("comparison between pointer and integer");
+       }
+      else
+       rtype = NULL; /* Force error */
+      break;
+
+    case kind_eq: case kind_ne:
+      rtype = int_type; /* Default to assuming success */
+      if (type_arithmetic(t1) && type_arithmetic(t2))
+       ;
+      else if (type_pointer(t1) && type_pointer(t2))
+       {
+         if (!compatible_pointer_types(t1, t2) &&
+             !valid_compare(t1, t2, e1) &&
+             !valid_compare(t2, t1, e2))
+           pedwarn("comparison of distinct pointer types lacks a cast");
+       }
+      else if ((type_pointer(t1) && definite_null(e2)) ||
+              (type_pointer(t2) && definite_null(e1)))
+       ;
+      else if ((type_pointer(t1) && type_integer(t2)) ||
+              (type_pointer(t2) && type_integer(t1)))
+       {
+         if (!flag_traditional)
+           pedwarn("comparison between pointer and integer");
+       }
+      else
+       rtype = NULL; /* Force error */
+      break;
+
+    case kind_andand: case kind_oror:
+      if (type_scalar(t1) && type_scalar(t2))
+       rtype = int_type;
+      break;
+
+    default: assert(0); break;
+    }
+
+  if (common && type_arithmetic(t1) && type_arithmetic(t2))
+    rtype = common_type(t1, t2);
+
+  if (!rtype)
+    {
+      error("invalid operands to binary %s", binary_op_name(binop));
+      rtype = error_type;
+    }
+
+  return rtype;
+}
+
+static bool unsafe_comparison(expression e)
+{
+  return !e->parens && is_comparison(e);
+}
+
+expression make_binary(location loc, int binop, expression e1, expression e2)
+{
+  expression result = CAST(expression, newkind_binary(parse_region, binop, loc, e1, e2));
+
+  result->type = check_binary(binop, e1, e2);
+  if (result->type != error_type)
+    {
+      result->cst = fold_binary(result->type, result);
+    }
+
+  /* Check for cases such as x+y<<z which users are likely
+     to misinterpret.  If parens are used, C_EXP_ORIGINAL_CODE
+     is cleared to prevent these warnings.  */
+  if (warn_parentheses)
+    {
+      int code1 = e1->parens ? 0 : e1->kind, code2 = e2->parens ? 0 : e2->kind;
+
+      if (binop == kind_lshift || binop == kind_rshift)
+       {
+         if (code1 == kind_plus || code1 == kind_minus
+             || code2 == kind_plus || code2 == kind_minus)
+           warning("suggest parentheses around + or - inside shift");
+       }
+
+      if (binop == kind_oror)
+       {
+         if (code1 == kind_andand || code2 == kind_andand)
+           warning("suggest parentheses around && within ||");
+       }
+
+      if (binop == kind_bitor)
+       {
+         if (code1 == kind_bitand || code1 == kind_bitxor
+             || code1 == kind_plus || code1 == kind_minus
+             || code2 == kind_bitand || code2 == kind_bitxor
+             || code2 == kind_plus || code2 == kind_minus)
+           warning("suggest parentheses around arithmetic in operand of |");
+         /* Check cases like x|y==z */
+         if (unsafe_comparison(e1) || unsafe_comparison(e2))
+           warning("suggest parentheses around comparison in operand of |");
+       }
+
+      if (binop == kind_bitxor)
+       {
+         if (code1 == kind_bitand
+             || code1 == kind_plus || code1 == kind_minus
+             || code2 == kind_bitand
+             || code2 == kind_plus || code2 == kind_minus)
+           warning ("suggest parentheses around arithmetic in operand of ^");
+         /* Check cases like x^y==z */
+         if (unsafe_comparison(e1) || unsafe_comparison(e2))
+           warning("suggest parentheses around comparison in operand of ^");
+       }
+
+      if (binop == kind_bitand)
+       {
+         if (code1 == kind_plus || code1 == kind_minus
+             || code2 == kind_plus || code2 == kind_minus)
+           warning ("suggest parentheses around + or - in operand of &");
+         /* Check cases like x&y==z */
+         if (unsafe_comparison(e1) || unsafe_comparison(e2))
+           warning("suggest parentheses around comparison in operand of &");
+       }
+    }
+
+  /* Similarly, check for cases like 1<=i<=10 that are probably errors.  */
+  if (unsafe_comparison(result) && extra_warnings
+      && (unsafe_comparison(e1) || unsafe_comparison(e2)))
+    warning("comparisons like X<=Y<=Z do not have their mathematical meaning");
+
+#if 0
+  unsigned_conversion_warning (result, arg1);
+  unsigned_conversion_warning (result, arg2);
+  overflow_warning (result);
+#endif
+
+  return result;
+}
+
+static bool voidstar_conditional(type t1, type t2)
+{
+  if (type_void(t1))
+    {
+      if (pedantic && type_function(t2))
+       pedwarn("ANSI C forbids conditional expr between `void *' and function pointer");
+      return TRUE;
+    }
+  return FALSE;
+}
+
+static bool pointerint_conditional(type t1, type t2, expression e2)
+{
+  if (type_pointer(t1) && type_integer(t2))
+    {
+      if (!definite_zero(e2))
+       pedwarn("pointer/integer type mismatch in conditional expression");
+      return TRUE;
+    }
+  return FALSE;
+}
+
+expression make_conditional(location loc, expression cond,
+                           expression true, expression false)
+{
+  expression result =
+    CAST(expression, new_conditional(parse_region, loc, cond, true, false));
+  type ctype, ttype, ftype, rtype = NULL;
+  bool truelvalue = true ? true->lvalue : FALSE;
+
+  ctype = default_conversion(cond);
+
+  if (!true)
+    {
+      true = cond;
+      truelvalue = FALSE; /* Not an lvalue in gcc ! */
+    }
+
+  if (type_void(true->type))
+    ttype = true->type;
+  else
+    ttype = default_conversion(true);
+  
+  if (type_void(false->type))
+    ftype = false->type;
+  else
+    ftype = default_conversion(false);
+
+  if (ctype == error_type || ttype == error_type || ftype == error_type)
+    rtype = error_type;
+  else if (type_equal(ttype, ftype))
+    rtype = ttype;
+  else if (type_equal_unqualified(ttype, ftype))
+    rtype = make_qualified_type(ttype, no_qualifiers);
+  else if (type_real(ttype) && type_real(ftype))
+    /* This should probably be type_arithmetic. See complex3.c/C9X */
+    rtype = common_type(ttype, ftype);
+  else if (type_void(ttype) || type_void(ftype))
+    {
+      if (pedantic && (!type_void(ttype) || !type_void(ftype)))
+       pedwarn("ANSI C forbids conditional expr with only one void side");
+      rtype = void_type;
+    }
+  else if (type_pointer(ttype) && type_pointer(ftype))
+    {
+      type tpointsto = type_points_to(ttype), fpointsto = type_points_to(ftype);
+
+      if (compatible_pointer_types(ttype, ftype))
+       rtype = common_type(tpointsto, fpointsto);
+      else if (definite_null(true) && type_void(tpointsto))
+       rtype = fpointsto;
+      else if (definite_null(false) && type_void(fpointsto))
+       rtype = tpointsto;
+      else if (voidstar_conditional(tpointsto, fpointsto))
+       rtype = tpointsto; /* void * result */
+      else if (voidstar_conditional(fpointsto, tpointsto))
+       rtype = fpointsto; /* void * result */
+      else
+       {
+         pedwarn("pointer type mismatch in conditional expression");
+         /* Slight difference from GCC: I qualify the result type with
+            the appropriate qualifiers */
+         rtype = void_type;
+       }
+
+      /* Qualifiers depend on both types */
+      rtype = make_pointer_type(qualify_type2(rtype, tpointsto, fpointsto));
+    }
+  else if (pointerint_conditional(ttype, ftype, false))
+    rtype = ttype;
+  else if (pointerint_conditional(ftype, ttype, true))
+    rtype = ftype;
+  else if (flag_cond_mismatch)
+    rtype = void_type;
+  else
+    {
+      error("type mismatch in conditional expression");
+      rtype = error_type;
+    }
+  
+  /* Qualifiers depend on both types */
+  if (rtype != error_type)
+    rtype = qualify_type2(rtype, ttype, ftype);
+
+  result->type = rtype;
+  result->lvalue = !pedantic && truelvalue && false->lvalue;
+  result->isregister = true->isregister || false->isregister;
+  result->bitfield = true->bitfield || false->bitfield;
+  result->cst = fold_conditional(result);
+
+  return result;
+}
+
+expression make_assign(location loc, int binop, expression e1, expression e2)
+{
+  expression result = CAST(expression, newkind_binary(parse_region, binop,
+                                                     loc, e1, e2));
+  type t1 = require_complete_type(e1, e1->type), t2;
+
+  result->type = error_type;
+  if (t1 != error_type && e2->type != error_type)
+    {
+      expression rhs;
+
+      if (binop == kind_assign)
+       {
+         t2 = default_conversion_for_assignment(e2);
+         rhs = e2;
+       }
+      else
+       {
+         t2 = check_binary(binop, e1, e2);
+         rhs = NULL;
+       }
+
+      if (check_writable_lvalue(e1, "assignment") &&
+         check_assignment(e1->type, t2, rhs, "assignment", NULL, 0))
+       result->type = make_qualified_type(e1->type, no_qualifiers);
+    }
+
+  return result;
+}
+
+expression make_identifier(location loc, cstring id, bool maybe_implicit)
+{
+  /* XXX: Should pass decl as argument (lexer looked it up already) */
+  data_declaration decl = lookup_id(id.data, FALSE);
+  identifier result = new_identifier(parse_region, loc, id, NULL);
+
+  if (decl && decl->islimbo) /* Limbo declarations don't really exist */
+    decl = NULL;
+
+  if (!decl && maybe_implicit) /* An implicit function declaration */
+    decl = implicitly_declare(result);
+
+  if (!decl)
+    {
+      /* Suppress undeclare identifier errors in deputy scopes - they
+        will be reprocessed later under deputy scoping rules (see
+        nesc-deputy.c) */
+      if (!current.env->deputy_scope)
+       {
+         if (!current.function_decl)
+           error("`%s' undeclared here (not in a function)", id.data);
+         else if (!env_lookup(current.function_decl->undeclared_variables, id.data, FALSE))
+           {
+             static bool undeclared_variable_notice;
+
+             error("`%s' undeclared (first use in this function)", id.data);
+             env_add(current.function_decl->undeclared_variables, id.data, (void *)1);
+             if (!undeclared_variable_notice)
+               {
+                 error("(Each undeclared identifier is reported only once");
+                 error("for each function it appears in.)");
+                 undeclared_variable_notice = TRUE;
+               }
+           }
+       }
+      decl = bad_decl;
+    }
+
+  /* XXX: check for register variables of containing function */
+  result->type = decl->type;
+  result->lvalue = decl->kind == decl_variable ||
+    decl->kind == decl_magic_string;
+  result->cst = fold_identifier(CAST(expression, result), decl, 0);
+  result->isregister = decl->kind == decl_variable &&
+    decl->vtype == variable_register;
+  result->static_address = foldaddress_identifier(CAST(expression, result), decl);
+  result->ddecl = decl;
+
+  return CAST(expression, result);
+}
+
+expression make_compound_expr(location loc, statement block)
+{
+  if (is_error_stmt(block))
+    return make_error_expr();
+  else
+    {
+      expression result = CAST(expression, new_compound_expr(parse_region, loc, block));
+      compound_stmt bs = CAST(compound_stmt, block);
+      statement last_stmt = last_statement(bs->stmts);
+
+      if (last_stmt && is_expression_stmt(last_stmt))
+       result->type = CAST(expression_stmt, last_stmt)->arg1->type;
+      else
+       result->type = void_type;
+
+      return result;
+    }
+}
+
+bool check_arguments(type fntype, expression arglist,
+                    data_declaration fundecl, bool generic_call)
+{
+  typelist_scanner parmtypes;
+  int parmstep = generic_call ? -1 : 1, parmnum = parmstep;
+  type parmtype;
+  const char *argname;
+  int old_errorcount = errorcount;
+
+  if (!type_function_oldstyle(fntype))
+    {
+      typelist_scan(type_function_arguments(fntype), &parmtypes);
+
+      while ((parmtype = typelist_next(&parmtypes)) && arglist)
+       {
+         type argtype = arglist->type;
+
+         if (type_incomplete(parmtype))
+           error("type of formal parameter %d is incomplete", parmnum);
+         else
+           {
+             if (warn_conversion)
+               {
+                 if (type_integer(parmtype) && type_floating(argtype))
+                   warn_for_assignment("%s as integer rather than floating due to prototype",
+                                       NULL, fundecl, parmnum);
+                 else if (type_floating(parmtype) && type_integer(argtype))
+                   warn_for_assignment ("%s as floating rather than integer due to prototype",
+                                        NULL, fundecl, parmnum);
+                 else if (type_complex(parmtype) && type_floating(argtype))
+                   warn_for_assignment ("%s as complex rather than floating due to prototype",
+                                       NULL, fundecl, parmnum);
+                 else if (type_floating(parmtype) && type_complex(argtype))
+                   warn_for_assignment ("%s as floating rather than complex due to prototype",
+                                       NULL, fundecl, parmnum);
+                 /* Warn if any argument is passed as `float',
+                    since without a prototype it would be `double'.  */
+                 else if (type_float(parmtype) && type_floating(argtype))
+                   warn_for_assignment ("%s as `float' rather than `double' due to prototype",
+                                       NULL, fundecl, parmnum);
+#if 0
+                 else
+                   {
+                     /* Type that would have been passed w/o proto */
+                     type type1 = default_conversion(arglist);
+
+                     /* No warning if function asks for enum
+                        and the actual arg is that enum type.  */
+                     if (type_enum(parmtype) && type_equal_unqualified(parmtype, argtype))
+                       ;
+                     /* XXX: else messy stuff that cannot easily be done w/o constant
+                        folding and type size info */
+                   }
+#endif
+               }
+             check_assignment(parmtype, default_conversion_for_assignment(arglist),
+                              arglist, NULL, fundecl, parmnum);
+           }
+         parmnum += parmstep;
+         arglist = CAST(expression, arglist->next);
+       }
+      argname = argtype(&parmstep);
+      if (parmtype)
+       {
+         if (fundecl)
+           error("too few %ss to function `%s'", argname, 
+                 decl_printname(fundecl));
+         else
+           error("too few %ss to function", argname);
+       }
+      else if (arglist && !type_function_varargs(fntype))
+       {
+         if (fundecl)
+           error("too many %ss to function `%s'", argname,
+                 decl_printname(fundecl));
+         else
+           error("too many %ss to function", argname);
+       }
+    }
+
+  /* Checks for arguments with no corresponding argument type */
+  while (arglist)
+    {
+      require_complete_type(arglist, default_conversion(arglist));
+      arglist = CAST(expression, arglist->next);
+    }
+
+  return errorcount == old_errorcount;
+}
+
+expression make_function_call(location loc, expression fn, expression arglist)
+{
+  expression result = CAST(expression, new_function_call(parse_region, loc, fn, arglist, NULL, normal_call));
+  type fntype = default_conversion(fn), rettype;
+  bool argumentsok;
+
+  result->type = error_type;
+  if (fntype == error_type)
+    return result;
+
+  /* Hack for __nesc_enable_interrupt (see nesc-uses.h) */
+  if (is_identifier(fn) && CAST(identifier, fn)->ddecl == enable_interrupt)
+    {
+      current.function_decl->ddecl->extra_contexts |= c_call_nonatomic;
+      if (current.in_atomic)
+       warning("call to __nesc_enable_interrupt within an atomic statement");
+    }
+
+  if (type_pointer(fntype))
+    /* All function types come this way because default_conversion makes
+       them into pointers to functions... */
+    fntype = type_points_to(fntype);
+
+  if (!type_functional(fntype))
+    {
+      if (type_generic(fntype))
+       error("parameters missing in call to parameterised command or event");
+      else
+       error("called object is not a function, command, event or task");
+      return result;
+    }
+
+  argumentsok = check_arguments(fntype, arglist, get_function_ddecl(fn), FALSE);
+
+  rettype = type_function_return_type(fntype);
+  result->type = rettype;
+  if (!type_void(rettype))
+    result->type = require_complete_type(result, rettype);
+
+  if (argumentsok)
+    result->cst = fold_function_call(result, 0);
+
+  return result;
+}
+
+expression make_va_arg(location loc, expression arg, asttype type)
+{
+  expression va_arg_id = build_identifier(parse_region, loc, builtin_va_arg_decl);
+  expression result = CAST(expression, new_function_call(parse_region, loc, va_arg_id, arg, type, normal_call));
+
+  if (!type_equal_unqualified(arg->type, builtin_va_list_type))
+    error("first argument to `va_arg' not of type `va_list'");
+
+  if (!type_self_promoting(type->type))
+    {
+      static bool gave_help;
+
+      error("char, short and float are automatically promoted when passed through `...'");
+      if (!gave_help)
+       {
+         gave_help = TRUE;
+         error("(so you should pass `int', `unsigned' or `double' to `va_arg')");
+       }
+    }
+  result->type = type->type;
+
+  return result;
+}
+
+expression make_offsetof(location loc, asttype t, dd_list fields)
+{
+  expression zero;
+
+  zero = CAST(expression,
+    fold_lexical_int(size_t_type, loc, str2cstring(parse_region, "0"), FALSE, 0, FALSE));
+
+  if (!(t->type == error_type || type_struct(t->type) || type_union(t->type)))
+    {
+      error("offsetof is only valid for structs or unions");
+      return zero; /* a reasonable value ;-) */
+    }
+  else
+    {
+      declarator ptr_to_t_d;
+      expression cast, fieldref, addrof;
+      declarator size_t_d;
+      type_element size_t_m;
+      asttype size_t_ast;
+      dd_list_pos field;
+
+      /* Build ((size_t)&((t *)0)->fields) */
+      ptr_to_t_d = CAST(declarator,
+       new_pointer_declarator(parse_region, loc, t->declarator));
+      t = make_type(t->qualifiers, ptr_to_t_d);
+      cast = make_cast(loc, t, zero);
+      fieldref = make_dereference(loc, cast);
+      dd_scan (field, fields)
+       {
+         cstring f;
+
+         f.data = DD_GET(char *, field);
+         f.length = strlen(f.data);
+         fieldref = make_field_ref(loc, fieldref, f);
+       }
+      addrof = make_unary(loc, kind_address_of, fieldref);
+
+      type2ast(parse_region, loc, size_t_type, NULL, &size_t_d, &size_t_m);
+      size_t_ast = make_type(size_t_m, size_t_d);
+
+      return make_cast(loc, size_t_ast, addrof);
+    }
+}
+
+expression make_array_ref(location loc, expression array, expression index)
+{
+  expression result = CAST(expression, new_array_ref(parse_region, loc, array, index));
+  type atype, itype;
+
+  if (type_generic(array->type))
+    return make_generic_call(loc, array, index);
+
+  itype = default_conversion(index);
+  if (index->next)
+    index = make_comma(index->location, index);
+
+  if (warn_char_subscripts && type_plain_char(index->type))
+    warning("subscript has type `char'");
+
+  if (type_array(array->type) && !array->lvalue)
+    {
+      /* Some special GCC extensions */
+      /* XXX: Ignoring the weird register stuff, going for a simple version
+        which seems essentially identical for our purposes */
+      if (pedantic)
+       pedwarn("ANSI C forbids subscripting non-lvalue array");
+      atype = make_pointer_type(type_array_of(array->type));
+
+       /* this should not be possible (non-lvalue arrays come from
+         array fields of non-lvalue struct expressions) */
+      assert(!array->static_address);
+    }
+  else
+    atype = default_conversion(array);
+
+  /* Put the integer in ITYPE to simplify error checking.  */
+  if (type_integer(atype))
+    {
+      type temp = atype;
+      atype = itype; 
+      itype = temp;
+    }
+
+  if (!type_pointer(atype) || type_function(type_points_to(atype)))
+    {
+      error("subscripted value is neither array nor pointer");
+      result->type = error_type;
+      result->lvalue = TRUE;
+    }
+  else
+    {
+      check_dereference(result, atype, "array indexing");
+      result->static_address = fold_binary(atype, result);
+    }
+
+  if (!type_integer(itype) && itype != error_type)
+    error("array subscript is not an integer");
+
+  return result;
+}
+
+expression make_field_ref(location loc, expression object, cstring field)
+{
+  type otype = object->type;
+  field_ref result;
+
+  if (type_interface(otype))
+    return make_interface_deref(loc, object, field);
+  if (type_component(otype))
+    return make_component_deref(loc, object, field);
+
+  result = new_field_ref(parse_region, loc, object, field);
+  result->type = error_type;
+
+  if (type_aggregate(otype))
+    {
+      tag_declaration tag = type_tag(otype);
+
+      if (!tag->defined)
+       incomplete_type_error(NULL, otype);
+      else
+       {
+         field_declaration fdecl = env_lookup(tag->fields, field.data, FALSE);
+
+         if (!fdecl)
+           error("%s has no member named `%s'", tagkind_name(tag->kind),
+                 field.data);
+         else
+           {
+             result->fdecl = fdecl;
+             result->type = qualify_type2(fdecl->type, fdecl->type, object->type);
+             result->bitfield = !cval_istop(fdecl->bitwidth);
+             result->static_address = foldaddress_field_ref(CAST(expression, result));
+           }
+       }
+    }
+  else if (otype != error_type)
+    error("request for member `%s' in something not a structure or union",
+         field.data);
+
+  result->lvalue = object->lvalue;
+
+  return CAST(expression, result);
+}
+
+static expression finish_increment(unary result, char *name)
+{
+  expression e = result->arg1;
+  type etype = e->type;
+
+  result->type = error_type;
+
+  if (!type_scalar(etype))
+    error("wrong type argument to %s", name);
+  else 
+    {
+      if (type_incomplete(etype))
+       error("%s of pointer to unknown structure or union", name);
+      else if (type_pointer(etype) && (pedantic || warn_pointer_arith) &&
+              (type_void(type_points_to(etype)) ||
+               type_function(type_points_to(etype))))
+       pedwarn("wrong type argument to %s", name);
+
+      if (check_writable_lvalue(e, name))
+       result->type = etype;
+    }
+  return CAST(expression, result);
+}
+
+expression make_postincrement(location loc, expression e)
+{
+  return finish_increment(CAST(unary, new_postincrement(parse_region, loc, e)),
+                         "increment");
+}
+
+expression make_preincrement(location loc, expression e)
+{
+  return finish_increment(CAST(unary, new_preincrement(parse_region, loc, e)),
+                         "increment");
+}
+
+expression make_postdecrement(location loc, expression e)
+{
+  return finish_increment(CAST(unary, new_postdecrement(parse_region, loc, e)),
+                         "decrement");
+}
+
+expression make_predecrement(location loc, expression e)
+{
+  return finish_increment(CAST(unary, new_predecrement(parse_region, loc, e)),
+                         "decrement");
+}
diff --git a/src/expr.h b/src/expr.h
new file mode 100644 (file)
index 0000000..940dce1
--- /dev/null
@@ -0,0 +1,71 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef EXPR_H
+#define EXPR_H
+
+expression make_error_expr(void);
+
+expression make_comma(location loc, expression elist);
+expression make_dereference(location loc, expression e);
+expression make_extension_expr(location loc, expression e);
+expression make_unary(location loc, int unop, expression e);
+expression make_label_address(location loc, id_label label);
+expression make_sizeof_expr(location loc, expression e);
+expression make_sizeof_type(location loc, asttype t);
+expression make_alignof_expr(location loc, expression e);
+expression make_alignof_type(location loc, asttype t);
+expression make_cast(location loc, asttype t, expression e);
+expression make_binary(location loc, int binop, expression e1, expression e2);
+expression make_conditional(location loc, expression cond,
+                           expression true, expression false);
+expression make_assign(location loc, int assignop, expression left, expression right);
+expression make_identifier(location loc, cstring id, bool maybe_implicit);
+expression make_compound_expr(location loc, statement block);
+expression make_function_call(location loc, expression fn, expression arglist);
+expression make_va_arg(location loc, expression arg, asttype type);
+expression make_offsetof(location loc, asttype t, dd_list fields);
+expression make_array_ref(location loc, expression array, expression index);
+expression make_field_ref(location loc, expression object, cstring field);
+expression make_field_indirectref(location loc, expression object,
+                                 cstring field);
+expression make_postincrement(location loc, expression e);
+expression make_preincrement(location loc, expression e);
+expression make_postdecrement(location loc, expression e);
+expression make_predecrement(location loc, expression e);
+
+/* Return TRUE if no error and lhstype and rhstype are not error_type */
+bool check_assignment(type lhstype, type rhstype, expression rhs,
+                     const char *context, data_declaration fundecl,
+                     int parmnum);
+
+bool check_conversion(type to, type from);
+bool check_arguments(type fntype, expression arglist,
+                    data_declaration fundecl, bool generic_call);
+
+type default_conversion(expression e);
+type default_function_array_conversion(expression e);
+
+/* called default_function_array_conversion in gcc 3.x */
+type default_conversion_for_assignment(expression e);
+
+#endif
diff --git a/src/flags.c b/src/flags.c
new file mode 100644 (file)
index 0000000..03d1ff7
--- /dev/null
@@ -0,0 +1,308 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+
+/* -f flags.  */
+
+/* Nonzero means just do syntax checking; don't output anything.  */
+int flag_syntax_only;
+
+/* Nonzero means change certain warnings into errors.
+   Usually these are warnings about failure to conform to some standard.  */
+int flag_pedantic_errors;
+
+/* Tag all structures with __attribute__(packed) */
+int flag_pack_struct;
+
+/* Options controlling warnings */
+
+/* Don't print warning messages.  -w.  */
+int inhibit_warnings;
+
+/* Print various extra warnings.  -W.  */
+int extra_warnings;
+
+/* Treat warnings as errors.  -Werror.  */
+int warnings_are_errors;
+
+/* Nonzero to warn about unused local variables.  */
+int warn_unused;
+
+/* Nonzero to warn about variables used before they are initialized.  */
+int warn_uninitialized;
+
+/* Nonzero means warn about all declarations which shadow others.   */
+int warn_shadow;
+int error_shadow; /* Make shadow an error */
+
+/* Warn if a switch on an enum fails to have a case for every enum value.  */
+int warn_switch;
+
+/* Nonzero means warn about function definitions that default the return type
+   or that use a null return and have a return-type other than void.  */
+int warn_return_type;
+
+/* Nonzero means warn about pointer casts that increase the required
+   alignment of the target type (and might therefore lead to a crash
+   due to a misaligned access).  */
+int warn_cast_align;
+
+/* Nonzero means warn about any identifiers that match in the first N
+   characters.  The value N is in `id_clash_len'.  */
+int warn_id_clash;
+unsigned id_clash_len;
+
+/* Nonzero means warn about any objects definitions whose size is larger
+   than N bytes.  Also want about function definitions whose returned
+   values are larger than N bytes. The value N is in `larger_than_size'.  */
+int warn_larger_than;
+unsigned larger_than_size;
+
+/* Nonzero means warn if inline function is too large.  */
+int warn_inline;
+
+/* Warn if a function returns an aggregate,
+   since there are often incompatible calling conventions for doing this.  */
+int warn_aggregate_return;
+
+/* Nonzero means `$' can be in an identifier.  */
+int dollars_in_ident;
+
+/* Nonzero means allow type mismatches in conditional expressions;
+   just make their values `void'.   */
+int flag_cond_mismatch;
+
+/* Nonzero means don't recognize the keyword `asm'.  */
+int flag_no_asm;
+
+/* Nonzero means environment is hosted (i.e., not freestanding) */
+int flag_hosted;
+
+/* Nonzero means warn about implicit declarations.  */
+int warn_implicit;
+
+/* Nonzero means give string constants the type `const char *'
+   to get extra warnings from them.  These warnings will be too numerous
+   to be useful, except in thoroughly ANSIfied programs.  */
+int warn_write_strings;
+
+/* Nonzero means warn about sizeof (function) or addition/subtraction
+   of function pointers.  */
+int warn_pointer_arith;
+
+/* Nonzero means warn for all old-style non-prototype function decls.  */
+int warn_strict_prototypes;
+
+/* Nonzero means warn about multiple (redundant) decls for the same single
+   variable or function.  */
+int warn_redundant_decls;
+
+/* Nonzero means warn about extern declarations of objects not at
+   file-scope level and about *all* declarations of functions (whether
+   extern or static) not at file-scope level.  Note that we exclude
+   implicit function declarations.  To get warnings about those, use
+   -Wimplicit.  */
+int warn_nested_externs;
+
+/* Nonzero means warn about pointer casts that can drop a type qualifier
+   from the pointer target type.  */
+int warn_cast_qual;
+
+/* Nonzero means warn when casting a function call to a type that does
+   not match the return type (e.g. (float)sqrt() or (anything*)malloc()
+   when there is no previous declaration of sqrt or malloc.  */
+int warn_bad_function_cast;
+
+/* Warn about traditional constructs whose meanings changed in ANSI C.  */
+int warn_traditional;
+
+/* Warn about *printf or *scanf format/argument anomalies. */
+int warn_format;
+
+/* Warn about a subscript that has type char.  */
+int warn_char_subscripts;
+
+/* Warn if a type conversion is done that might have confusing results.  */
+int warn_conversion;
+
+/* Warn if main is suspicious. */
+int warn_main;
+
+/* Nonzero means warn about use of multicharacter literals.  */
+int warn_multichar = 1;
+
+/* Nonzero means do some things the same way PCC does.  */
+int flag_traditional;
+
+/* Nonzero means to allow single precision math even if we're generally
+   being traditional. */
+int flag_allow_single_precision;
+
+/* Nonzero means warn about suggesting putting in ()'s.  */
+int warn_parentheses;
+
+/* Warn if initializer is not completely bracketed.  */
+int warn_missing_braces;
+
+/* Warn about comparison of signed and unsigned values.  */
+int warn_sign_compare;
+
+/* Nonzero means message about use of implicit function declarations;
+ 1 means warning; 2 means error. */
+int mesg_implicit_function_declaration;
+
+/* Report pedantic warnings if true */
+bool pedantic;
+
+/* Nonzero means warn about use of implicit int. */
+int warn_implicit_int;
+
+/* Nonzero means warn for any global function def
+   without separate previous prototype decl.  */
+int warn_missing_prototypes;
+
+/* Nonzero means warn for any global function def
+   without separate previous decl.  */
+int warn_missing_declarations;
+
+/* Nonzero means `char' should be signed.  */
+int flag_signed_char;
+
+/* Nonzero means give an enum type only as many bytes as it needs.  */
+int flag_short_enums;
+
+/* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
+int flag_signed_bitfields = 1;
+
+/* Nonzero means don't run real cc1 afterwards */
+int flag_parse_only;
+
+/* The value of the -nesc-path option */
+char *cmdline_nesc_path;
+
+/* Nonzero means suppress the dbg and dbg_clear functions (replace them
+   by macros in output). This is necessary because gcc won't inline
+   varargs functions */
+int flag_no_debug;
+
+/* Nonzero to suppress automatic addition of inline keywords 
+   (but the "wiring" functions are still marked inline) */
+int flag_no_inline;
+
+/* Nonzero means to output macro defs in the generated C file */
+int flag_save_macros;
+
+/* Nonzero means modify identifier and declaration output during code
+   generation to accomodate nido */
+bool use_nido;
+
+/* specifies the maximum number of nodes that can be simulated at one time */
+char* nido_num_nodes = "1000";
+
+/* the expression that gives the current mote number */
+char *nido_mote_number = "tos_state.current_node";
+
+/* Nonzero for -v */
+int flag_verbose;
+
+/* Warn if there are unexpected documentation strings in the code */
+int warn_unexpected_docstring;
+
+/* Warn when function pointers are used */
+int warn_fnptr;
+
+/* Warn when data races are detected */
+int warn_data_race;
+
+/* Warn when async keyword is violated */
+int warn_async;
+
+/* Warn when no combiner function and multiple fns called */
+int warn_no_combiner;
+
+/* If true, warn_fnptr, warn_data_race, warn_async and warn_no_combiner
+   are treated as errors */
+int nesc_error;
+
+/* diff processing enabled if diff_output is not NULL 
+   (diff_input is NULL for orignal program, non-NULL to reduce diff size) */\
+char *diff_input, *diff_output;
+
+/* If true, rewrite post/task to use interfaces+wiring rather than calls to
+   a TOS_post function. */
+int flag_use_scheduler;
+
+/* If true, we're using a mingw based gcc from a cygwin environment. We
+   should fix filenames before invoking gcc. */
+int flag_mingw_gcc;
+
+/* If true, check for atomic statements whose body is guaranteed to be
+   atomic (e.g., one single-byte read) */
+int nesc_optimise_atomic;
+
+/* Warn about possibly nested block comments, and C++ comments
+   spanning more than one physical line */
+int warn_comments;
+
+/* Warn if trigraphs are encountered that might affect the meaning of
+   the program */
+int warn_trigraphs;
+
+/* Warn about macros defined in the main file that are not used */
+int warn_unused_macros;
+
+/* Warn about stray tokens after #elif and #endif */
+int warn_endif_labels;
+
+/* Do not suppress warnings from system headers */
+int warn_system_headers;
+
+/* Warn if an undefined macro is used in an #if directive */
+int warn_undef;
+
+/* Warn about user-specified include directories that do not exist */
+int warn_missing_include_dirs;
+
+/* Warn about use of multi-character character constants */
+int warn_multichar;
+
+/* Support ISO C trigraphs */
+int flag_trigraphs;
+
+/* Do not search standard system include directories */
+int flag_nostdinc;
+
+/* Do not predefine system-specific and GCC-specific macros */
+int flag_undef;
+
+/* True if compiling for deputy */
+int flag_deputy;
+
+/* True if a module lacking a @safe() or @unsafe() attribute defaults
+   to safe; has no effect if flag_deputy is not true; this default can
+   be overridden by -fnesc-default-safe or -fnesc-default-unsafe */
+int flag_default_safe;
+
+/* True if transforming plain C code */
+int flag_c;
+
diff --git a/src/flags.h b/src/flags.h
new file mode 100644 (file)
index 0000000..dba1d11
--- /dev/null
@@ -0,0 +1,306 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef FLAGS_H
+#define FLAGS_H
+
+/* -f flags.  */
+
+/* Nonzero means just do syntax checking; don't output anything.  */
+extern int flag_syntax_only;
+
+/* Nonzero means change certain warnings into errors.
+   Usually these are warnings about failure to conform to some standard.  */
+extern int flag_pedantic_errors;
+
+/* Tag all structures with __attribute__(packed) */
+extern int flag_pack_struct;
+
+/* Options controlling warnings */
+
+/* Don't print warning messages.  -w.  */
+extern int inhibit_warnings;
+
+/* Print various extra warnings.  -W.  */
+extern int extra_warnings;
+
+/* Treat warnings as errors.  -Werror.  */
+extern int warnings_are_errors;
+
+/* Nonzero to warn about unused local variables.  */
+extern int warn_unused;
+
+/* Nonzero to warn about variables used before they are initialized.  */
+extern int warn_uninitialized;
+
+/* Nonzero means warn about all declarations which shadow others.   */
+extern int warn_shadow;
+extern int error_shadow; /* Make shadow an error */
+
+/* Warn if a switch on an enum fails to have a case for every enum value.  */
+extern int warn_switch;
+
+/* Nonzero means warn about function definitions that default the return type
+   or that use a null return and have a return-type other than void.  */
+extern int warn_return_type;
+
+/* Nonzero means warn about pointer casts that increase the required
+   alignment of the target type (and might therefore lead to a crash
+   due to a misaligned access).  */
+extern int warn_cast_align;
+
+/* Nonzero means warn about any identifiers that match in the first N
+   characters.  The value N is in `id_clash_len'.  */
+extern int warn_id_clash;
+extern unsigned id_clash_len;
+
+/* Nonzero means warn about any objects definitions whose size is larger
+   than N bytes.  Also want about function definitions whose returned
+   values are larger than N bytes. The value N is in `larger_than_size'.  */
+extern int warn_larger_than;
+extern unsigned larger_than_size;
+
+/* Nonzero means warn if inline function is too large.  */
+extern int warn_inline;
+
+/* Warn if a function returns an aggregate,
+   since there are often incompatible calling conventions for doing this.  */
+extern int warn_aggregate_return;
+
+/* Nonzero means `$' can be in an identifier.  */
+extern int dollars_in_ident;
+
+/* Nonzero means allow type mismatches in conditional expressions;
+   just make their values `void'.   */
+extern int flag_cond_mismatch;
+
+/* Nonzero means don't recognize the keyword `asm'.  */
+extern int flag_no_asm;
+
+/* Nonzero means environment is hosted (i.e., not freestanding) */
+extern int flag_hosted;
+
+/* Nonzero means warn about implicit declarations.  */
+extern int warn_implicit;
+
+/* Nonzero means give string constants the type `const char *'
+   to get extra warnings from them.  These warnings will be too numerous
+   to be useful, except in thoroughly ANSIfied programs.  */
+extern int warn_write_strings;
+
+/* Nonzero means warn about sizeof (function) or addition/subtraction
+   of function pointers.  */
+extern int warn_pointer_arith;
+
+/* Nonzero means warn for all old-style non-prototype function decls.  */
+extern int warn_strict_prototypes;
+
+/* Nonzero means warn about multiple (redundant) decls for the same single
+   variable or function.  */
+extern int warn_redundant_decls;
+
+/* Nonzero means warn about extern declarations of objects not at
+   file-scope level and about *all* declarations of functions (whether
+   extern or static) not at file-scope level.  Note that we exclude
+   implicit function declarations.  To get warnings about those, use
+   -Wimplicit.  */
+extern int warn_nested_externs;
+
+/* Nonzero means warn about pointer casts that can drop a type qualifier
+   from the pointer target type.  */
+extern int warn_cast_qual;
+
+/* Nonzero means warn when casting a function call to a type that does
+   not match the return type (e.g. (float)sqrt() or (anything*)malloc()
+   when there is no previous declaration of sqrt or malloc.  */
+extern int warn_bad_function_cast;
+
+/* Warn about traditional constructs whose meanings changed in ANSI C.  */
+extern int warn_traditional;
+
+/* Warn about *printf or *scanf format/argument anomalies. */
+extern int warn_format;
+
+/* Warn about a subscript that has type char.  */
+extern int warn_char_subscripts;
+
+/* Warn if a type conversion is done that might have confusing results.  */
+extern int warn_conversion;
+
+/* Warn if main is suspicious. */
+extern int warn_main;
+
+/* Nonzero means warn about use of multicharacter literals.  */
+extern int warn_multichar;
+
+/* Nonzero means do some things the same way PCC does.  */
+extern int flag_traditional;
+
+/* Nonzero means to allow single precision math even if we're generally
+   being traditional. */
+extern int flag_allow_single_precision;
+
+/* Nonzero means warn about suggesting putting in ()'s.  */
+extern int warn_parentheses;
+
+/* Warn if initializer is not completely bracketed.  */
+extern int warn_missing_braces;
+
+/* Warn about comparison of signed and unsigned values.  */
+extern int warn_sign_compare;
+
+/* Nonzero means message about use of implicit function declarations;
+ 1 means warning; 2 means error. */
+extern int mesg_implicit_function_declaration;
+
+extern bool pedantic; /* Report pedantic warnings if true */
+
+/* Nonzero means warn about use of implicit int. */
+extern int warn_implicit_int;
+
+/* Nonzero means warn for any global function def
+   without separate previous prototype decl.  */
+extern int warn_missing_prototypes;
+
+/* Nonzero means warn for any global function def
+   without separate previous decl.  */
+extern int warn_missing_declarations;
+
+/* Nonzero means `char' should be signed.  */
+extern int flag_signed_char;
+
+/* Nonzero means give an enum type only as many bytes as it needs.  */
+extern int flag_short_enums;
+
+/* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
+extern int flag_signed_bitfields;
+
+/* Nonzero means don't run real cc1 afterwards */
+extern int flag_parse_only;
+
+/* Nonzero means suppress the dbg and dbg_clear functions (replace them
+   by macros in output). This is necessary because gcc won't inline
+   varargs functions */
+extern int flag_no_debug;
+
+/* Nonzero to suppress automatic addition of inline keywords 
+   (but the "wiring" functions are still marked inline) */
+extern int flag_no_inline;
+
+/* Nonzero means to output macro defs in the generated C file (a la -dD) */
+extern int flag_save_macros;
+
+/* Nonzero means modify identifier and declaration output during code
+   generation to accomodate nido */
+extern bool use_nido;
+
+/* specifies the maximum number of nodes that can be simulated at one time */
+extern char *nido_num_nodes;
+
+/* the expression that gives the current mote number */
+extern char *nido_mote_number;
+
+/* Nonzero for -v */
+extern int flag_verbose;
+
+/* Warn if there are unexpected documentation strings in the code */
+extern int warn_unexpected_docstring;
+
+/* Warn when function pointers are used */
+extern int warn_fnptr;
+
+/* Warn when data races are detected */
+extern int warn_data_race;
+
+/* Warn when async keyword is violated */
+extern int warn_async;
+
+/* Warn when no combiner function and multiple fns called */
+extern int warn_no_combiner;
+
+/* If true, warn_fnptr, warn_data_race, warn_async and warn_no_combiner
+   are treated as errors */
+extern int nesc_error;
+
+/* diff processing enabled if diff_output is not NULL 
+   (diff_input is NULL for orignal program, non-NULL to reduce diff size) */\
+extern char *diff_input, *diff_output;
+
+/* If true, rewrite post/task to use interfaces+wiring rather than calls to
+   a TOS_post function. */
+extern int flag_use_scheduler;
+
+/* If true, we're using a mingw based gcc from a cygwin environment. We
+   should use windows filenames when invoking gcc. */
+extern int flag_mingw_gcc;
+
+/* If true, check for atomic statements whose body is guaranteed to be
+   atomic (e.g., one single-byte read) */
+extern int nesc_optimise_atomic;
+
+/* Warn about possibly nested block comments, and C++ comments
+   spanning more than one physical line */
+extern int warn_comments;
+
+/* Warn if trigraphs are encountered that might affect the meaning of
+   the program */
+extern int warn_trigraphs;
+
+/* Warn about macros defined in the main file that are not used */
+extern int warn_unused_macros;
+
+/* Warn about stray tokens after #elif and #endif */
+extern int warn_endif_labels;
+
+/* Do not suppress warnings from system headers */
+extern int warn_system_headers;
+
+/* Warn if an undefined macro is used in an #if directive */
+extern int warn_undef;
+
+/* Warn about user-specified include directories that do not exist */
+extern int warn_missing_include_dirs;
+
+/* Warn about use of multi-character character constants */
+extern int warn_multichar;
+
+/* Support ISO C trigraphs */
+extern int flag_trigraphs;
+
+/* Do not search standard system include directories */
+extern int flag_nostdinc;
+
+/* Do not predefine system-specific and GCC-specific macros */
+extern int flag_undef;
+
+/* True if compiling for deputy */
+extern int flag_deputy;
+
+/* True if a module lacking a @safe() or @unsafe() attribute defaults
+   to safe; has no effect if flag_deputy is not true; this default can
+   be overridden by -fnesc-default-safe or -fnesc-default-unsafe */
+extern int flag_default_safe;
+
+/* True if transforming plain C code */
+extern int flag_c;
+
+#endif
diff --git a/src/gcc-cpp.h b/src/gcc-cpp.h
new file mode 100644 (file)
index 0000000..f534636
--- /dev/null
@@ -0,0 +1,8 @@
+/* load libcpp */
+#include "system.h"
+#include "config.h"
+#include "cpplib.h"
+#include "line-map.h"
+#undef bool
+#define TRUE 1
+#define FALSE 0
diff --git a/src/graph.c b/src/graph.c
new file mode 100644 (file)
index 0000000..3149332
--- /dev/null
@@ -0,0 +1,475 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <regions.h>
+#include "parser.h"
+#include "graph.h"
+#include "dd_list.h"
+#include "sd_list.h"
+
+#undef new
+
+/* A generic directed graph type, with support for typical graph algos.
+*/
+
+/* A graph is a mutable data structure composed of nodes linked 
+   by edges.
+
+   Edges can be added and removed between existing nodes, nodes can
+   be added at will but only removed if they have no ingoing and no
+   outgoing edges.
+
+   Each edge & node has associated user data (stored as a (void *))
+   and a mark. Marks can be cleared individually or over the
+   whole graph (this last op remains O(1)).
+
+   The order of edges within a node is not preserved.
+*/
+
+struct ggraph 
+{
+  region sameregion r;
+  sd_list sameregion nodes;
+  long mark_count;             /* Value used to mark nodes/edges */
+};
+
+struct gnode
+{
+  struct sd_list_pos node;
+  ggraph sameregion graph;
+  gedge sameregion in;         /* Ingoing edges */
+  gedge sameregion out;                /* Outgoing edges */
+  void *data;
+  long mark;                   /* Mark count for this node */
+};
+
+struct gedge
+{
+  gnode sameregion in_node, out_node;  /* Extremities */
+  gedge sameregion next_in, next_out;  /* Edge in in/outgoing lists */
+  void *data;
+  long mark;
+};
+
+/* Update functions */
+/* ---------------- */
+
+ggraph new_graph(region r)
+/* Returns: A new empty graph.
+*/
+{
+  ggraph new = ralloc(r, struct ggraph);
+
+  new->r = r;
+  new->nodes = sd_new_list(r);
+  new->mark_count = 1;
+
+  return new;
+}
+
+void delete_graph(ggraph g,
+                 void (*delete_node)(gnode n),
+                 void (*delete_edge)(gedge e))
+/* Effects: Deletes graph g. Calls functions delete_node & delete_edge
+     on nodes and edges before deleting them. All edges of a node
+     are deleted before it is.
+
+     If a delete_node/edge function is NULL it is not called.
+   Modifies: g
+*/
+{
+  /* Delete all edges */
+  sd_list_pos node, next;
+
+  sd_scan (node, g->nodes)
+    {
+      gnode n = SD_GET(gnode, node);
+      gedge e, next;
+      
+      for (e = n->in; e; e = next)
+       {
+         next = e->next_in;
+         if (delete_edge) delete_edge(e);
+       }
+    }
+  for (node = sd_first(g->nodes); !sd_is_end(node); node = next)
+    {
+      gnode n = SD_GET(gnode, node);
+
+      next = sd_next(node);
+      if (delete_node) delete_node(n);
+    }
+  sd_del_list(g->nodes);
+}
+
+ggraph copy_graph(region r, ggraph g)
+/* Effects: Returns a graph that is a copy of g (i.e. with the same
+     number of nodes, and the same connections between them, the same
+     marks, the same data, etc).
+     Modifications to g won't modify the copy, and vice-versa.
+*/
+{
+  ggraph copy = new_graph(r);
+  gnode onode, nnode;
+  gedge oedge, nedge;
+
+  copy->mark_count = g->mark_count;
+
+  /* Make nodes in copy */
+  graph_scan_nodes (onode, g) onode->data = graph_add_node(copy, onode->data);
+
+  /* Then make edges */
+  graph_scan_nodes (onode, g)
+    {
+      nnode = onode->data;
+
+      graph_scan_in (oedge, onode)
+       {
+         nedge = graph_add_edge(graph_edge_from(oedge)->data, nnode, oedge->data);
+         nedge->mark = oedge->mark;
+       }
+    }
+
+  /* Finally restore original graph */
+  graph_scan_nodes (onode, g)
+    {
+      nnode = onode->data;
+      nnode->mark = onode->mark;
+      onode->data = nnode->data;
+    }
+
+  return copy;
+}
+
+gnode graph_add_node(ggraph g, void *data)
+/* Effects: Adds a new node to graph g, with user data `data'.
+     The new node has no edges and is not marked.
+   Returns: The new node.
+   Modifies: g
+*/
+{
+  gnode new = ralloc(g->r, struct gnode);
+
+  new->graph = g;
+  /*new->in = new->out = NULL;*/
+  new->data = data;
+  new->mark = g->mark_count - 1; /* Unmarked */
+  sd_add_last(g->nodes, &new->node);
+
+  return new;
+}
+
+bool graph_remove_node(gnode n)
+/* Effects: Removes node n from its graph if it has no in/outgoing edges.
+   Returns: TRUE if n could be removed.
+   Modifies: n
+*/
+{
+  if (n->in || n->out) return FALSE;
+  sd_remove(&n->node);
+
+  return TRUE;
+}
+
+gedge graph_add_edge(gnode from, gnode to, void *data)
+/* Effects: Adds an edge between nodes `from' & `to', with user data
+     `data'. The new edge is not marked.
+   Returns: The new edge.
+   Modifies: from, to
+*/
+{
+  gedge new = ralloc(from->graph->r, struct gedge);
+
+  new->out_node = from;
+  new->in_node = to;
+  new->data = data;
+  new->mark = from->graph->mark_count - 1;
+  
+  /* Add to nodes */
+  new->next_out = from->out;
+  from->out = new;
+  new->next_in = to->in;
+  to->in = new;
+
+  return new;
+}
+
+void graph_remove_edge(gedge e)
+/* Effects: Removes edge e from its graph.
+   Modifies: e
+*/
+{
+  gedge sameregion *scan;
+
+  /* Remove edge from nodes */
+  for (scan = &e->in_node->in; *scan != e; scan = &(*scan)->next_in) ;
+  *scan = e->next_in;
+
+  for (scan = &e->out_node->out; *scan != e; scan = &(*scan)->next_out) ;
+  *scan = e->next_out;
+}
+
+/* Accessor operations */
+/* ------------------- */
+
+dd_list graph_nodes(region r, ggraph g)
+/* Returns: A list of all the nodes of g, each element of the list has
+     type gnode.
+*/
+{
+  dd_list nodes = dd_new_list(r);
+  sd_list_pos node;
+
+  sd_scan (node, g->nodes)
+    dd_add_last(r, nodes, SD_GET(gnode, node));
+
+  return nodes;
+}
+
+gnode graph_first_node(ggraph g)
+/* Returns: The first node of g, or NULL if none
+     The order of nodes is arbitrary
+*/
+{
+  sd_list_pos first = sd_first(g->nodes);
+
+  return sd_is_end(first) ? NULL : SD_GET(gnode, first);
+}
+
+gnode graph_next_node(gnode n)
+/* Returns: The node after n, or NULL if no more
+     The order of nodes is arbitrary
+*/
+{
+  sd_list_pos next = sd_next(&n->node);
+
+  return sd_is_end(next) ? NULL : SD_GET(gnode, next);
+}
+
+ggraph graph_node_graph(gnode n)
+/* Returns: The graph n is a node of
+*/
+{
+  return n->graph;
+}
+
+void *_graph_node_data(gnode n)
+/* Returns: the data of node n
+*/
+{
+  return n->data;
+}
+
+void _graph_node_set(gnode n, void *data)
+/* Effects: Sets the data of node n to `data'.
+   Modifies: n
+*/
+{
+  n->data = data;
+}
+
+dd_list graph_edges_in(region r, gnode n)
+/* Returns: The list of ingoing edges for n.
+     Each element of the list has type gedge.
+     It is up to the caller to free the list with
+       dd_free_list(l, NULL)
+*/
+{
+  dd_list edges = dd_new_list(r);
+  gedge in;
+
+  for (in = n->in; in; in = in->next_in) dd_add_last(r, edges, in);
+
+  return edges;
+}
+
+dd_list graph_edges_out(region r, gnode n)
+/* Returns: The list of outgoing edges for n.
+     Each element of the list has type gedge.
+     It is up to the caller to free the list with
+       dd_free_list(l, NULL)
+*/
+{
+  dd_list edges = dd_new_list(r);
+  gedge out;
+
+  for (out = n->out; out; out = out->next_out) dd_add_last(r, edges, out);
+
+  return edges;
+}
+
+gedge graph_first_edge_in(gnode n)
+/* Returns: The first ingoing edge of n, or NULL if none
+     The order of edges is arbitrary
+*/
+{
+  return n->in;
+}
+
+gedge graph_next_edge_in(gedge e)
+/* Returns: The ingoing edge after e, or NULL if no more
+     The order of edges is arbitrary
+*/
+{
+  return e->next_in;
+}
+
+gedge graph_first_edge_out(gnode n)
+/* Returns: The first outgoing edge of n, ore NULL if none
+     The order of edges is arbitrary
+*/
+{
+  return n->out;
+}
+
+gedge graph_next_edge_out(gedge e)
+/* Returns: The outgoing edge after e, or NULL if no more
+     The order of edges is arbitrary
+*/
+{
+  return e->next_out;
+}
+
+gnode graph_edge_from(gedge e)
+/* Returns: The node this edge comes from.
+*/
+{
+  return e->out_node;
+}
+
+gnode graph_edge_to(gedge e)
+/* Returns: The node this edge goes to.
+*/
+{
+  return e->in_node;
+}
+
+void *_graph_edge_data(gedge n)
+/* Returns: the data of edge n
+*/
+{
+  return n->data;
+}
+
+void _graph_edge_set(gedge n, void *data)
+/* Effects: Sets the data of edge n to `data'.
+   Modifies: n
+*/
+{
+  n->data = data;
+}
+
+
+/* Marks */
+/* ----- */
+
+void graph_clear_all_marks(ggraph g)
+/* Effects: Clears all marks on edges and nodes of g.
+   Modifies: g
+*/
+{
+  g->mark_count++;
+  /* A wrap around of this 32 bit counter is rather unlikely. */
+  assert(g->mark_count != 0);
+}
+
+void graph_mark_node(gnode n)
+/* Effects: Marks node n.
+   Modifies: n
+*/
+{
+  n->mark = n->graph->mark_count;
+}
+
+void graph_unmark_node(gnode n)
+/* Effects: Removed mark from node n.
+   Modifies: n
+*/
+{
+  n->mark = n->graph->mark_count - 1;
+}
+
+bool graph_node_markedp(gnode n)
+/* Returns: TRUE if n is marked
+*/
+{
+  return n->mark == n->graph->mark_count;
+}
+
+void graph_mark_edge(gedge n)
+/* Effects: Marks edge n.
+   Modifies: n
+*/
+{
+  n->mark = n->in_node->graph->mark_count;
+}
+
+void graph_unmark_edge(gedge n)
+/* Effects: Removed mark from edge n.
+   Modifies: n
+*/
+{
+  n->mark = n->in_node->graph->mark_count - 1;
+}
+
+bool graph_edge_markedp(gedge n)
+/* Returns: TRUE if n is marked
+*/
+{
+  return n->mark == n->in_node->graph->mark_count;
+}
+
+void dbg_graph(ggraph g, void (*pnode)(gnode g)) deletes
+{
+  region temp = newregion();
+  dd_list allnodes = graph_nodes(temp, g);
+  dd_list_pos anode;
+  int i = 0;
+
+  dd_scan (anode, allnodes)
+    {
+      gnode node = DD_GET(gnode, anode);
+      gedge out;
+
+      fprintf(stderr, "%d(0x%p):", i++, node);
+
+      graph_scan_out (out, node)
+       {
+         gnode to = graph_edge_to(out);
+         int j = 0;
+         dd_list_pos anode2;
+
+         dd_scan (anode2, allnodes)
+           {
+             if (DD_GET(gnode, anode2) == to)
+               {
+                 fprintf(stderr, " %d", j);
+                 break;
+               }
+             j++;
+           }
+       }
+      if (pnode)
+       pnode(node);
+      fprintf(stderr, "\n");
+    }
+  deleteregion(temp);
+}
diff --git a/src/graph.h b/src/graph.h
new file mode 100644 (file)
index 0000000..9769820
--- /dev/null
@@ -0,0 +1,250 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef GRAPH_H
+#define GRAPH_H
+
+/* A generic directed graph type, with support for typical graph algos.
+*/
+
+/* A graph is a mutable data structure composed of nodes linked 
+   by edges.
+
+   Edges can be added and removed between existing nodes, nodes can
+   be added at will but only removed if they have no ingoing and no
+   outgoing edges.
+
+   Each edge & node has associated user data (stored as a (void *))
+   and a mark. Marks can be cleared individually or over the
+   whole graph (this last op remains O(1)).
+
+   The order of edges within a node is not preserved.
+*/
+
+typedef struct ggraph *ggraph;
+typedef struct gnode *gnode;
+typedef struct gedge *gedge;
+
+/* Update functions */
+/* ---------------- */
+
+ggraph new_graph(region r);
+/* Returns: A new empty graph. All allocations are performed in region r.
+*/
+
+void delete_graph(ggraph g,
+                 void (*delete_node)(gnode n),
+                 void (*delete_edge)(gedge e));
+/* Effects: Deletes graph g. Calls functions delete_node & delete_edge
+     on nodes and edges before deleting them. All edges of a node
+     are deleted before it is.
+
+     If a delete_node/edge function is NULL it is not called.
+   Modifies: g
+*/
+
+ggraph copy_graph(region r, ggraph g);
+/* Effects: Returns a graph that is a copy of g (i.e. with the same
+     number of nodes, and the same connections between them).
+     Modifications to g won't modify the copy, and vice-versa.
+*/
+
+gnode graph_add_node(ggraph g, void *data);
+/* Effects: Adds a new node to graph g, with user data `data'.
+     The new node has no edges and is not marked.
+   Returns: The new node.
+   Modifies: g
+*/
+
+bool graph_remove_node(gnode n);
+/* Effects: Removes node n from its graph if it has no in/outgoing edges.
+   Returns: TRUE if n could be removed.
+   Modifies: n
+*/
+
+gedge graph_add_edge(gnode from, gnode to, void *data);
+/* Effects: Adds an edge between nodes `from' & `to', with user data
+     `data'. The new edge is not marked.
+   Returns: The new edge.
+   Modifies: from, to
+*/
+
+void graph_remove_edge(gedge e);
+/* Effects: Removes edge e from its graph.
+   Modifies: e
+*/
+
+/* Accessor operations */
+/* ------------------- */
+
+dd_list graph_nodes(region r, ggraph g);
+/* Returns: A list of all the nodes of g, each element of the list has
+     type gnode.
+     The list is allocated in region r.
+*/
+
+gnode graph_first_node(ggraph g);
+/* Returns: The first node of g, or NULL if none
+     The order of nodes is arbitrary
+*/
+
+gnode graph_next_node(gnode n);
+/* Returns: The node after n, or NULL if no more
+     The order of nodes is arbitrary
+*/
+
+#define graph_scan_nodes(node, g) \
+  for (node = graph_first_node((g)); node; node = graph_next_node(node))
+/* Effects: Iterates variable node over the nodes of graph g
+   Requires: No nodes are added or removed from the graph during
+     the iteration.
+   Example:
+     count = 0;
+     graph_scan_nodes (node, g) count++;
+*/
+
+
+ggraph graph_node_graph(gnode n);
+/* Returns: The graph n is a node of
+*/
+
+void *_graph_node_data(gnode n);
+#define NODE_GET(type, n) ((type)_graph_node_data((n)))
+/* Returns: the data of node n, cast to `type'
+*/
+
+void _graph_node_set(gnode n, void *data);
+#define NODE_SET(n, data) (_graph_node_set((n), (void *)(data)))
+/* Effects: Sets the data of node n to `data'.
+   Modifies: n
+*/
+
+dd_list graph_edges_in(region r, gnode n);
+/* Returns: The list of ingoing edges for n.
+     Each element of the list has type gedge.
+     It is up to the caller to free the list with
+       dd_free_list(l, NULL)
+*/
+
+dd_list graph_edges_out(region r, gnode n);
+/* Returns: The list of outgoing edges for n.
+     Each element of the list has type gedge.
+     It is up to the caller to free the list with
+       dd_free_list(l, NULL)
+*/
+
+gedge graph_first_edge_in(gnode n);
+/* Returns: The first ingoing edge of n, or NULL if none
+     The order of edges is arbitrary
+*/
+
+gedge graph_next_edge_in(gedge e);
+/* Returns: The ingoing edge after e, or NULL if no more
+     The order of edges is arbitrary
+*/
+
+gedge graph_first_edge_out(gnode n);
+/* Returns: The first outgoing edge of n, ore NULL if none
+     The order of edges is arbitrary
+*/
+
+gedge graph_next_edge_out(gedge e);
+/* Returns: The outgoing edge after e, or NULL if no more
+     The order of edges is arbitrary
+*/
+
+#define graph_scan_in(edge, n) \
+  for (edge = graph_first_edge_in((n)); edge; edge = graph_next_edge_in(edge))
+/* Effects: Iterates variable edge over the ingoing edges of node n
+   Requires: The node and its ingoing edges not be modified during
+     the iteration.
+   Example:
+     in = 0;
+     graph_scan_in (e, n) in++;
+*/
+
+#define graph_scan_out(edge, n) \
+  for (edge = graph_first_edge_out((n)); edge; edge = graph_next_edge_out(edge))
+/* Effects: Iterates variable edge over the outgoing edges of node n
+   Requires: The node and its outgoing edges not be modified during
+     the iteration.
+   Example:
+     out = 0;
+     graph_scan_out (e, n) out++;
+*/
+
+gnode graph_edge_from(gedge e);
+/* Returns: The node this edge comes from.
+*/
+
+gnode graph_edge_to(gedge e);
+/* Returns: The node this edge goes to.
+*/
+
+void *_graph_edge_data(gedge n);
+#define EDGE_GET(type, n) ((type)_graph_edge_data((n)))
+/* Returns: the data of edge n, cast to `type'
+*/
+
+void _graph_edge_set(gedge n, void *data);
+#define EDGE_SET(n, data) (_graph_edge_set((n), (void *)(data)))
+/* Effects: Sets the data of edge n to `data'.
+   Modifies: n
+*/
+
+
+/* Marks */
+/* ----- */
+
+void graph_clear_all_marks(ggraph g);
+/* Effects: Clears all marks on edges and nodes of g.
+   Modifies: g
+*/
+
+void graph_mark_node(gnode n);
+/* Effects: Marks node n.
+   Modifies: n
+*/
+
+void graph_unmark_node(gnode n);
+/* Effects: Removed mark from node n.
+   Modifies: n
+*/
+
+bool graph_node_markedp(gnode n);
+/* Returns: TRUE if n is marked
+*/
+
+void graph_mark_edge(gedge n);
+/* Effects: Marks edge n.
+   Modifies: n
+*/
+
+void graph_unmark_edge(gedge n);
+/* Effects: Removed mark from edge n.
+   Modifies: n
+*/
+
+bool graph_edge_markedp(gedge n);
+/* Returns: TRUE if n is marked
+*/
+
+#endif
diff --git a/src/init.c b/src/init.c
new file mode 100644 (file)
index 0000000..2bc1871
--- /dev/null
@@ -0,0 +1,1427 @@
+/* XXX: figure out when an init_list is constant (so that we can allow
+   a cast_list inside an init_list that requires constants) 
+*/
+
+/* Initialiser handling.
+   This file is part of the nesC compiler.
+
+This file is derived from the GNU C Compiler. It is thus
+   Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+   1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+Changes for nesC are
+   Copyright (C) 2002, 2003 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "c-parse.h"
+#include "init.h"
+#include "expr.h"
+#include "constants.h"
+#include "AST_utils.h"
+#include "semantics.h"
+
+static type set_array_length(type t, largest_int length)
+{
+  return make_array_type(type_array_of(t),
+                        build_uint_constant(parse_region, dummy_location,
+                                            size_t_type, length));
+}
+
+static largest_int string_constant_length(expression e)
+{
+  return CAST(string, e)->ddecl->schars.length + 1;
+}
+
+/* Make a version of tdecl (an array type) with its length set to the 
+   length of the e (a string constant) */
+static type set_string_length(type tdecl, expression e)
+{
+  return set_array_length(tdecl, string_constant_length(e));
+}
+
+field_declaration type_fields(type t)
+/* Requires: type_aggregate(t)
+   Returns: first field_declaration of t
+*/
+{
+  return type_tag(t)->fieldlist;
+}
+
+field_declaration skip_unnamed_bitfields(field_declaration flist)
+/* Returns: return first field which is not an unnamed bit field */
+{
+  while (flist && !cval_istop(flist->bitwidth) && !flist->name)
+    flist = flist->next;
+
+  return flist;
+}
+
+\f
+/* Methods for storing and printing names for error messages.  */
+
+/* Implement a spelling stack that allows components of a name to be pushed
+   and popped.  Each element on the stack is this structure.  */
+
+struct spelling
+{
+  int kind;
+  union
+    {
+      largest_int i;
+      const char *s;
+    } u;
+};
+
+#define SPELLING_STRING 1
+#define SPELLING_MEMBER 2
+#define SPELLING_BOUNDS 3
+
+static struct spelling *spelling;      /* Next stack element (unused).  */
+static struct spelling *spelling_base; /* Spelling stack base.  */
+static int spelling_size;              /* Size of the spelling stack.  */
+
+/* Macros to save and restore the spelling stack around push_... functions.
+   Alternative to SAVE_SPELLING_STACK.  */
+
+#define SPELLING_DEPTH() (spelling - spelling_base)
+#define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
+
+/* Save and restore the spelling stack around arbitrary C code.  */
+
+#define SAVE_SPELLING_DEPTH(code)              \
+{                                              \
+  int __depth = SPELLING_DEPTH ();             \
+  code;                                                \
+  RESTORE_SPELLING_DEPTH (__depth);            \
+}
+
+/* Push an element on the spelling stack with type KIND and assign VALUE
+   to MEMBER.  */
+
+#define PUSH_SPELLING(KIND, VALUE, MEMBER)                             \
+{                                                                      \
+  int depth = SPELLING_DEPTH ();                                       \
+                                                                       \
+  if (depth >= spelling_size)                                          \
+    {                                                                  \
+      spelling_size += 10;                                             \
+      if (spelling_base == 0)                                          \
+       spelling_base                                                   \
+         = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling));     \
+      else                                                             \
+        spelling_base                                                  \
+         = (struct spelling *) xrealloc (spelling_base,                \
+                                         spelling_size * sizeof (struct spelling));    \
+      RESTORE_SPELLING_DEPTH (depth);                                  \
+    }                                                                  \
+                                                                       \
+  spelling->kind = (KIND);                                             \
+  spelling->MEMBER = (VALUE);                                          \
+  spelling++;                                                          \
+}
+
+/* Push STRING on the stack.  Printed literally.  */
+
+static void push_string(const char *string)
+{
+  PUSH_SPELLING (SPELLING_STRING, string, u.s);
+}
+
+/* Push a member name on the stack.  Printed as '.' STRING.  */
+static void push_member_name(field_declaration fdecl)
+{
+  const char *const string = nice_field_name(fdecl->name);
+  PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
+}
+
+/* Push an array bounds on the stack.  Printed as [BOUNDS].  */
+
+static void push_array_bounds (largest_int bounds)
+{
+  PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
+}
+
+/* Compute the maximum size in bytes of the printed spelling.  */
+
+static int spelling_length(void)
+{
+  int size = 0;
+  struct spelling *p;
+
+  for (p = spelling_base; p < spelling; p++)
+    {
+      if (p->kind == SPELLING_BOUNDS)
+       size += 25;
+      else
+       size += strlen (p->u.s) + 1;
+    }
+
+  return size;
+}
+
+/* Print the spelling to BUFFER and return it.  */
+
+static char *
+print_spelling (buffer)
+     char *buffer;
+{
+  char *d = buffer;
+  struct spelling *p;
+
+  for (p = spelling_base; p < spelling; p++)
+    if (p->kind == SPELLING_BOUNDS)
+      {
+       sprintf (d, "[%ld]", (long)p->u.i);
+       d += strlen (d);
+      }
+    else
+      {
+       const char *s;
+       if (p->kind == SPELLING_MEMBER)
+         *d++ = '.';
+       for (s = p->u.s; (*d = *s++); d++)
+         ;
+      }
+  *d++ = '\0';
+  return buffer;
+}
+
+static void save_expression_spelling(expression e)
+{
+  if (spelling_base)
+    e->spelling = print_spelling(rstralloc(regionof(e), spelling_length() + 1));
+}
+
+/* Issue an error message for a bad initializer component.
+   MSGID identifies the message.
+   The component name is taken from the spelling stack.  */
+
+void error_init (const char *msgid)
+{
+  char *ofwhat;
+
+  error ("%s", msgid);
+  ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
+  if (*ofwhat)
+    error ("(near initialization for `%s')", ofwhat);
+}
+
+void error_init_expr(expression e, const char *msgid)
+{
+  const char *ofwhat;
+
+  error_with_location(e->location, "%s", msgid);
+  if (e->spelling)
+    ofwhat = e->spelling;
+  else
+    ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
+  if (*ofwhat)
+    error_with_location(e->location, "(near initialization for `%s')", ofwhat);
+}
+
+/* Issue a pedantic warning for a bad initializer component.
+   MSGID identifies the message.
+   The component name is taken from the spelling stack.  */
+
+void pedwarn_init (const char *msgid)
+{
+  char *ofwhat;
+
+  pedwarn ("%s", msgid);
+  ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
+  if (*ofwhat)
+    pedwarn ("(near initialization for `%s')", ofwhat);
+}
+
+/* Issue a warning for a bad initializer component.
+   MSGID identifies the message.
+   The component name is taken from the spelling stack.  */
+
+static void warning_init (const char *msgid)
+{
+  char *ofwhat;
+
+  warning ("%s", msgid);
+  ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
+  if (*ofwhat)
+    warning ("(near initialization for `%s')", ofwhat);
+}
+\f
+/* Digest the parser output INIT as an initializer for type TYPE.
+   Return FALSE if the initialisation is erroneous
+*/
+static bool digest_init(type t, expression init)
+{
+  type itype = init->type;
+
+  if (t == error_type || itype == error_type)
+    return FALSE;
+
+  /* Initialization of an array of chars from a string constant
+     optionally enclosed in braces.  */
+
+  if (type_array(t))
+    {
+      type typ1 = type_array_of(t);
+
+      if ((type_char(typ1) || type_equal_unqualified(typ1, wchar_type))
+         && is_string(init))
+       {
+         type init_chartype = type_array_of(itype);
+         cval tcsize;
+
+         if (type_compatible_unqualified(t, itype))
+           return TRUE;
+
+         if (!type_char(init_chartype) && type_char(typ1))
+           {
+             error_init ("char-array initialized from wide string");
+             return FALSE;
+           }
+         if (type_char(init_chartype) && !type_char(typ1))
+           {
+             error_init ("int-array initialized from non-wide string");
+             return FALSE;
+           }
+
+         tcsize = type_array_size_cval(t);
+         if (!cval_istop(tcsize))
+           {
+             largest_uint tsize = cval_uint_value(tcsize);
+             data_declaration sdecl = CAST(string, init)->ddecl;
+
+             /* Don't count the null char (char x[1] = "a" is ok) */
+             if (tsize && tsize < sdecl->schars.length / type_size_int(type_array_of(sdecl->type)))
+               pedwarn_init ("initializer-string for array of chars is too long");
+           }
+
+         return TRUE;
+       }
+    }
+
+  /* Any type can be initialized
+     from an expression of the same type, optionally with braces. 
+     Initialisations of pointers from arrays and functions allow the
+     usual default conversions */
+
+  if (type_compatible_unqualified(itype, t) ||
+      type_compatible(t, type_default_conversion_for_assignment(itype)))
+    {
+      if (type_pointer(t))
+       itype = default_conversion_for_assignment(init);
+
+#if 0
+      if (require_constant /*&& !flag_isoc99*/ && is_cast_list(init))
+       {
+         /* As an extension, allow initializing objects with static storage
+            duration with compound literals (which are then treated just as
+            the brace enclosed list they contain).  */
+         init = CAST(cast_list, init)->init_expr;
+         itype = init->type;
+       }
+#endif
+
+      if (type_array(t) && !(is_string(init) || is_init_list(init)))
+       {
+         error_init ("array initialized from non-constant array expression");
+         return FALSE;
+       }
+
+      /* Note: gcc allows "static int a = (1,2)" if -pedantic is
+        specified even though it doesn't allow case (1,2) when
+        -pedantic is specified. For the sake of consistency,
+        I'm not allowing either when -pedantic is specified. */
+
+      return TRUE;
+    }
+
+  /* Handle scalar types, including conversions.  */
+
+  if (type_scalar(t))
+    return check_assignment(t, default_conversion_for_assignment(init), init, "initialization", NULL, 0);
+
+  /* Come here only for records and arrays.  */
+
+  /* Traditionally, you can write  struct foo x = 0;
+     and it initializes the first element of x to 0.  */
+  if (flag_traditional)
+    {
+      bool changed = FALSE;
+
+      while (type_array(t) || type_aggregate(t))
+       {
+         changed = TRUE;
+         if (type_array(t))
+           t = type_array_of(t);
+         else
+           {
+             tag_declaration tdecl = type_tag(t);
+
+             if (tdecl->fieldlist)
+               t = tdecl->fieldlist->type;
+             else
+               {
+                 error_init ("invalid initializer");
+                 return FALSE;
+               }
+           }
+       }
+
+      if (changed)
+       return digest_init(t, init);
+    }
+  error_init("invalid initializer");
+  return FALSE;
+}
+\f
+/* Handle initializers that use braces.  */
+
+typedef enum { c_none, c_aggregate, c_array, c_scalar } c_kind;
+
+/* The kind of object we're constructing at this level of the
+   initialiser */
+static c_kind constructor_kind;
+
+/* Type of object we are accumulating a constructor for.
+   This type is always a type_struct, type_union or type_array */
+static type constructor_type;
+
+/* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
+   left to fill.  */
+static field_declaration constructor_fields;
+
+/* For an ARRAY_TYPE, this is the specified index
+   at which to store the next element we get.  */
+static largest_int constructor_index;
+
+/* Largest array index seen+1 (used to determine size of int x[] = { ... } */
+static largest_int constructor_array_size;
+
+/* For an ARRAY_TYPE, this is the maximum index.  */
+static largest_int constructor_max_index;
+
+/* The count of elements specified at this depth */
+static size_t constructor_count;
+
+/* The SPELLING_DEPTH of this constructor.  */
+static int constructor_depth;
+
+/* The value currently being initialised */
+ivalue constructor_value;
+
+static int require_constant_value;
+
+/* DECL node for which an initializer is being read.
+   0 means we are reading a constructor expression
+   such as (struct foo) {...}.  */
+static data_declaration constructor_decl;
+
+/* Nonzero if there were any member designators in this initializer.  */
+static int constructor_designated;
+
+/* Nesting depth of designator list.  */
+static int designator_depth;
+
+/* Nonzero if there were diagnosed errors in this designator list.  */
+static int designator_erroneous;
+
+/* Nonzero if we've already printed a "missing braces around initializer"
+   message within this initializer.  */
+static int missing_braces_mentioned;
+
+\f
+/* This stack has a level for each implicit or explicit level of
+   structuring in the initializer, including the outermost one.  It
+   saves the values of most of the variables above.  */
+
+struct constructor_range_stack;
+
+struct constructor_stack
+{
+  struct constructor_stack *next;
+  c_kind kind;
+  type type;
+  field_declaration fields;
+  largest_int index;
+  largest_int array_size;
+  largest_int max_index;
+  ivalue value;
+  size_t count;
+  int offset;
+  int depth;
+  struct constructor_range_stack *range_stack;
+  char constant;
+  char simple;
+  char implicit;
+  char erroneous;
+  char outer;
+  char incremental;
+  char designated;
+};
+
+struct constructor_stack *constructor_stack;
+
+/* This stack represents designators from some range designator up to
+   the last designator in the list.  */
+
+struct constructor_range_stack
+{
+  struct constructor_range_stack *next, *prev;
+  struct constructor_stack *stack;
+  largest_int range_start;
+  largest_int index;
+  largest_int range_end;
+  bool has_end;
+  field_declaration fields;
+};
+
+struct constructor_range_stack *constructor_range_stack;
+
+/* This stack records separate initializers that are nested.
+   Nested initializers can't happen in ANSI C, but GNU C allows them
+   in cases like { ... (struct foo) { ... } ... }.  */
+
+struct initializer_stack
+{
+  struct initializer_stack *next;
+  data_declaration decl;
+  struct constructor_stack *constructor_stack;
+  struct constructor_range_stack *constructor_range_stack;
+  struct spelling *spelling;
+  struct spelling *spelling_base;
+  int spelling_size;
+  char require_constant_value;
+};
+
+struct initializer_stack *initializer_stack;
+\f
+static type pop_init_level(void);
+
+static void pop_implicit_level(void)
+{
+  assert(constructor_stack->implicit);
+  pop_init_level();
+  process_init_element(NULL);
+}
+
+static void pop_all_implicit_levels(void)
+{
+  while (constructor_stack->implicit)
+    pop_implicit_level();
+}
+
+static void pop_exhausted_levels(void)
+{
+  /* If we've exhausted any levels that didn't have braces,
+     pop them now.  */
+  while (constructor_stack->implicit &&
+        ((constructor_kind == c_aggregate && constructor_fields == 0) ||
+         (constructor_kind == c_array && constructor_max_index < constructor_index)))
+    pop_implicit_level();
+}
+
+/* Prepare to parse and output the initializer for variable DECL.  */
+
+void start_init(declaration decl, nesc_attribute attr)
+/* decl is really a variable_decl */
+{
+  const char *locus;
+  struct initializer_stack *p
+    = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
+
+  p->decl = constructor_decl;
+  p->require_constant_value = require_constant_value;
+  p->constructor_stack = constructor_stack;
+  p->constructor_range_stack = constructor_range_stack;
+  p->spelling = spelling;
+  p->spelling_base = spelling_base;
+  p->spelling_size = spelling_size;
+  p->next = initializer_stack;
+  initializer_stack = p;
+
+  constructor_designated = 0;
+
+  if (decl != 0)
+    {
+      data_declaration ddecl = CAST(variable_decl, decl)->ddecl;
+
+      constructor_decl = ddecl;
+      require_constant_value = ddecl->needsmemory;
+      locus = ddecl->name;
+    }
+  else if (attr)
+    {
+      cstring aname = attr->word1->cstring;
+
+      constructor_decl = NULL;
+      require_constant_value = !(attr->tdecl && attr->tdecl->deputy_scope);
+      locus = rstralloc(current.fileregion, aname.length + 2);
+      sprintf((char *)locus, "@%s", aname.data);
+    }
+  else
+    {
+      constructor_decl = NULL;
+      require_constant_value = 0;
+      locus = "(anonymous)";
+    }
+
+  constructor_stack = 0;
+  constructor_range_stack = 0;
+
+  missing_braces_mentioned = 0;
+
+  spelling_base = 0;
+  spelling_size = 0;
+  RESTORE_SPELLING_DEPTH (0);
+
+  if (locus)
+    push_string(locus);
+}
+
+void finish_init(void)
+{
+  struct initializer_stack *p = initializer_stack;
+
+  /* Free the whole constructor stack of this initializer.  */
+  while (constructor_stack)
+    {
+      struct constructor_stack *q = constructor_stack;
+      constructor_stack = q->next;
+      free (q);
+    }
+
+  if (constructor_range_stack)
+    abort ();
+
+  /* Pop back to the data of the outer initializer (if any).  */
+  constructor_decl = p->decl;
+  require_constant_value = p->require_constant_value;
+  constructor_stack = p->constructor_stack;
+  constructor_range_stack = p->constructor_range_stack;
+  spelling = p->spelling;
+  spelling_base = p->spelling_base;
+  spelling_size = p->spelling_size;
+  initializer_stack = p->next;
+  free (p);
+}
+\f
+/* ivalue constructors */
+ivalue new_ivalue(region r, int kind, type t)
+{
+  ivalue newp = ralloc(r, struct ivalue);
+
+  newp->kind = kind;
+  newp->type = t;
+
+  if (newp->kind == iv_base)
+    newp->u.base.value = cval_top;
+
+  return newp;
+}
+
+static void add_ivalue_array(ivalue to, largest_int index, ivalue element)
+{
+  largest_int end = index;
+  struct ivalue_array *newp;
+
+  assert(to->kind == iv_array);
+
+  /* Detect when pushing a range initialiser */
+  if (constructor_range_stack && constructor_range_stack->has_end)
+    end = constructor_range_stack->range_end;
+
+  newp = ralloc(parse_region, struct ivalue_array);
+  newp->next = to->u.array;
+  to->u.array = newp;
+  newp->from = index;
+  newp->to = end;
+  newp->value = element;
+}
+
+static void add_ivalue_field(ivalue to, field_declaration field, ivalue element)
+{
+  struct ivalue_field *newp;
+
+  assert(to->kind == iv_structured);
+
+  newp = ralloc(parse_region, struct ivalue_field);
+  newp->next = to->u.structured;
+  to->u.structured = newp;
+  newp->field = field;
+  newp->value = element;
+}
+\f
+static struct constructor_stack *push_constructor_stack(int implicit)
+{
+  struct constructor_stack *p
+    = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
+
+  p->kind = constructor_kind;
+  p->type = constructor_type;
+  p->fields = constructor_fields;
+  p->index = constructor_index;
+  p->array_size = constructor_array_size;
+  p->max_index = constructor_max_index;
+  p->value = constructor_value;
+  p->count = constructor_count;
+  p->depth = constructor_depth;
+  p->implicit = implicit;
+  p->range_stack = 0;
+  p->outer = 0;
+  p->designated = constructor_designated;
+  p->next = constructor_stack;
+  constructor_stack = p;
+
+  constructor_depth = SPELLING_DEPTH ();
+  constructor_designated = 0;
+  constructor_count = 0;
+
+  if (!implicit)
+    {
+      p->range_stack = constructor_range_stack;
+      constructor_range_stack = 0;
+      designator_depth = 0;
+      designator_erroneous = 0;
+    }
+
+  return p;
+}
+
+static bool new_constructor_type(void);
+
+/* Call here when we see the initializer is surrounded by braces.
+   This is instead of a call to push_init_level;
+   it is matched by a call to pop_init_level.
+
+   TYPE is the type to initialize, for a constructor expression.
+   For an initializer for a decl, TYPE is zero.  */
+
+void really_start_incremental_init(type t)
+{
+  if (t == 0)
+    t = constructor_decl->type;
+
+  assert(constructor_stack == 0);
+  push_constructor_stack(0);
+
+  constructor_type = t;
+  new_constructor_type();
+}
+\f
+/* Push down into a subobject, for initialization.
+   If this is for an explicit set of braces, IMPLICIT is 0.
+   If it is because the next element belongs at a lower level,
+   IMPLICIT is 1 (or 2 if the push is because of designator list).  */
+
+void push_init_level(int implicit)
+{
+  struct constructor_stack *p;
+
+  pop_exhausted_levels();
+
+  p = push_constructor_stack(implicit);
+
+  /* Don't die if an entire brace-pair level is superfluous
+     in the containing level.  */
+  if (constructor_type == 0)
+    ;
+  else if (constructor_kind == c_aggregate)
+    {
+      /* Don't die if there are extra init elts at the end.  */
+      if (constructor_fields == 0)
+       constructor_type = 0;
+      else
+       {
+         constructor_type = constructor_fields->type;
+         push_member_name(constructor_fields);
+         constructor_depth++;
+       }
+    }
+  else if (constructor_kind == c_array)
+    {
+      constructor_type = type_array_of(constructor_type);
+      push_array_bounds(constructor_index);
+      constructor_depth++;
+    }
+
+  if (constructor_type == 0)
+    {
+      error_init("extra brace group at end of initializer");
+    }
+  else if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
+    {
+      missing_braces_mentioned = 1;
+      warning_init ("missing braces around initializer");
+    }
+
+  if (!new_constructor_type())
+    warning_init ("braces around scalar initializer");
+
+  switch (p->kind)
+    {
+    case c_aggregate:
+      add_ivalue_field(p->value, p->fields, constructor_value);
+      break;
+    case c_array:
+      add_ivalue_array(p->value, p->index, constructor_value);
+      break;
+    case c_scalar:
+      break;
+    default: assert(0); break;
+    }
+}
+
+/* Set state for new constructor type (constructor_kind and associated state)
+   Return FALSE if the constructor_type is a scalar type */
+static bool new_constructor_type(void)
+{
+  if (!constructor_type)
+    {
+      constructor_kind = c_none;
+      constructor_value = NULL;
+    }
+  else if (type_aggregate(constructor_type))
+    {
+      constructor_kind = c_aggregate;
+      constructor_fields = skip_unnamed_bitfields(type_fields(constructor_type));
+      constructor_value = new_ivalue(parse_region, iv_structured, constructor_type);
+    }
+  else if (type_array(constructor_type))
+    {
+      cval max = type_array_size_cval(constructor_type);
+
+      constructor_kind = c_array;
+      if (cval_istop(max))
+       constructor_max_index = -1;
+      else
+       constructor_max_index = cval_sint_value(max) - 1;
+      constructor_index = constructor_array_size = 0;
+      constructor_value = new_ivalue(parse_region, iv_array, constructor_type);
+    }
+  else
+    {
+      /* Handle the case of int x = {5}; */
+      constructor_kind = c_scalar;
+      constructor_index = 0;
+      constructor_value = new_ivalue(parse_region, iv_base, constructor_type);
+
+      return FALSE;
+    }
+  return TRUE;
+}
+
+/* At the end of an implicit or explicit brace level, 
+   finish up that level of constructor.
+   Return the type that this level was for */
+
+static type pop_init_level(void)
+{
+  struct constructor_stack *p;
+  type ctype;
+
+  ctype = constructor_type ? constructor_type : error_type;
+
+  p = constructor_stack;
+
+  /* Error for initializing a flexible array member, or a zero-length
+     array member in an inappropriate context.  */
+  if (constructor_type && constructor_fields && constructor_depth
+      && type_array(constructor_type)
+      && !type_array_size(constructor_type))
+    {
+      /* Silently discard empty initializations.  The parser will
+        already have pedwarned for empty brackets.  */
+      if (constructor_count > 0)
+       {
+         if (constructor_depth > 2)
+           error_init("initialization of flexible array member in a nested context");
+         else if (pedantic)
+           pedwarn_init("initialization of a flexible array member");
+
+         /* We have already issued an error message for the existence
+            of a flexible array member not at the end of the structure.
+            Discard the initializer so that we do not abort later.  */
+         if (constructor_fields->next)
+           constructor_type = NULL;
+       }
+    }
+
+#if 0
+  /* Warn when some struct elements are implicitly initialized to zero.  */
+  if (extra_warnings
+      && constructor_type
+      && TREE_CODE (constructor_type) == RECORD_TYPE
+      && constructor_unfilled_fields)
+    {
+       /* Do not warn for flexible array members or zero-length arrays.  */
+       while (constructor_unfilled_fields
+              && (! DECL_SIZE (constructor_unfilled_fields)
+                  || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
+         constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
+
+       /* Do not warn if this level of the initializer uses member
+          designators; it is likely to be deliberate.  */
+       if (constructor_unfilled_fields && !constructor_designated)
+         {
+           push_member_name (constructor_unfilled_fields);
+           warning_init ("missing initializer");
+           RESTORE_SPELLING_DEPTH (constructor_depth);
+         }
+    }
+#endif
+
+  if (constructor_kind == c_scalar && constructor_count == 0)
+    error_init("empty scalar initializer");
+
+  constructor_kind = p->kind;
+  constructor_type = p->type;
+  constructor_fields = p->fields;
+  constructor_index = p->index;
+  constructor_array_size = p->array_size;
+  constructor_max_index = p->max_index;
+  constructor_value = p->value;
+  constructor_count = p->count;
+  constructor_designated = p->designated;
+  constructor_depth = p->depth;
+  if (!p->implicit)
+    constructor_range_stack = p->range_stack;
+  RESTORE_SPELLING_DEPTH (constructor_depth);
+
+  constructor_stack = p->next;
+  free (p);
+
+  return ctype;
+}
+
+/* Common handling for both array range and field name designators.
+   ARRAY argument is non-zero for array ranges.  Returns zero for success.  */
+
+static bool set_designator(bool array)
+{
+  type subtype;
+
+  /* Don't die if an entire brace-pair level is superfluous
+     in the containing level.  */
+  if (constructor_kind == c_none)
+    return TRUE;
+
+  /* If there were errors in this designator list already, bail out silently.  */
+  if (designator_erroneous)
+    return TRUE;
+
+  if (!designator_depth)
+    {
+      if (constructor_range_stack)
+       abort ();
+
+      /* Designator list starts at the level of closest explicit
+        braces.  */
+      pop_all_implicit_levels();
+      constructor_designated = 1;
+      return FALSE;
+    }
+
+  if (constructor_kind == c_aggregate)
+    {
+      subtype = constructor_fields->type;
+    }
+  else if (constructor_kind == c_array)
+    {
+      subtype = type_array_of(constructor_type);
+    }
+  else
+    abort();
+
+  if (array && !type_array(subtype))
+    {
+      error_init ("array index in non-array initializer");
+      return TRUE;
+    }
+  else if (!array && !type_aggregate(subtype))
+    {
+      error_init ("field name not in record or union initializer");
+      return TRUE;
+    }
+
+  constructor_designated = 1;
+  push_init_level(2);
+  return FALSE;
+}
+
+/* If there are range designators in designator list, push a new designator
+   to constructor_range_stack.  RANGE_END is end of such stack range or
+   NULL if there is no range designator at this level.  */
+
+static void push_range_stack(expression range_end)
+{
+  struct constructor_range_stack *p;
+
+  p = (struct constructor_range_stack *)
+      xmalloc(sizeof (struct constructor_range_stack));
+  p->prev = constructor_range_stack;
+  p->next = 0;
+  p->fields = constructor_fields;
+  p->range_start = constructor_index;
+  p->index = constructor_index;
+  p->stack = constructor_stack;
+  if (range_end)
+    {
+      p->range_end = constant_sint_value(range_end->cst);
+      p->has_end = TRUE;
+    }
+  else
+    p->has_end = FALSE;
+  if (constructor_range_stack)
+    constructor_range_stack->next = p;
+  constructor_range_stack = p;
+}
+
+/* Within an array initializer, specify the next index to be initialized.
+   FIRST is that index.  If LAST is nonzero, then initialize a range
+   of indices, running from FIRST through LAST.  */
+
+designator set_init_index(location loc, expression first, expression last)
+{
+  designator d = CAST(designator,
+                     new_designate_index(parse_region, loc, first, last));
+
+  if (set_designator(TRUE))
+    return d;
+
+  designator_erroneous = 1;
+
+  if (!(first->cst && constant_integral(first->cst)))
+    error_init("nonconstant array index in initializer");
+  else if (last != 0 && !(last->cst && constant_integral(last->cst)))
+    error_init("nonconstant array index in initializer");
+  else if (constructor_kind != c_array)
+    error_init("array index in non-array initializer");
+  else if (constructor_max_index >= 0
+          && constructor_max_index < constant_sint_value(first->cst))
+    error_init("array index in initializer exceeds array bounds");
+  else
+    {
+      largest_int fval = constant_sint_value(first->cst);
+
+      constructor_index = fval;
+
+      if (last)
+       {
+         largest_int lval = constant_sint_value(last->cst);
+
+         if (fval == lval)
+           last = 0;
+         else if (lval < fval)
+           {
+             error_init("empty index range in initializer");
+             last = 0;
+           }
+         else
+           {
+             if (constructor_max_index >= 0 && constructor_max_index < lval)
+               {
+                 error_init("array index range in initializer exceeds array bounds");
+                 last = 0;
+               }
+           }
+       }
+
+      designator_depth++;
+      designator_erroneous = 0;
+      if (constructor_range_stack || last)
+       push_range_stack(last);
+    }
+
+  return d;
+}
+
+/* Within a struct initializer, specify the next field to be initialized.  */
+
+designator set_init_label(location loc, cstring fieldname)
+{
+  designator d = CAST(designator,
+                     new_designate_field(parse_region, loc, fieldname));
+  field_declaration tail;
+  tag_declaration tdecl;
+
+  if (set_designator(FALSE))
+    return d;
+
+  designator_erroneous = 1;
+
+  if (constructor_kind != c_aggregate)
+    {
+      error_init("field name not in record or union initializer");
+      return d;
+    }
+    
+  tdecl = type_tag(constructor_type);
+  tail = env_lookup(tdecl->fields, fieldname.data, TRUE);
+  if (tail == 0)
+    error("unknown field `%s' specified in initializer", fieldname.data);
+  else
+    {
+      constructor_fields = tail;
+      designator_depth++;
+      designator_erroneous = 0;
+      if (constructor_range_stack)
+       push_range_stack(NULL);
+    }
+
+  return d;
+}
+
+void check_init_element(expression init)
+{
+  known_cst c;
+
+  if (!check_constant_once(init, cst_any))
+    return;
+
+  /* XXX: process_init_element set the ivalue to iv_base for strings used
+     to initialise arrays. So we need to special case here too. We don't
+     need to do anything, as this only happened for string constants, which
+     are clearly constant ;-)
+
+     See string_flag test in that function. */
+  if (is_init_list(init))
+    return;
+
+  /* Arrays are "constant" if they have a static address 
+     (see default_conversion on arrays) - this essentially handles the
+     case of string constants */
+  c = type_array(init->type) ? init->static_address : init->cst;
+
+  if (!c)
+    {
+      error_init_expr(init, "initializer element is not constant");
+      return;
+    }
+#if 0
+  /* This is no longer detected as constant_unknown has been recycled
+     for use with abstract component arguments. It could be resurrected
+     if we made cval more complicated, but it doesn't seem worth the
+     effort. */
+  else if (constant_uncomputable(c))
+    {
+      error_init_expr(init, "initializer element is not computable at load time");
+      return;
+    }
+#endif
+  else
+    {
+      constant_overflow_warning(c);
+      if (init->ivalue)
+       {
+         assert(init->ivalue->kind == iv_base);
+         init->ivalue->u.base.value = cval_cast(c->cval, init->ivalue->type);
+       }
+    }
+}
+
+/* "Output" the next constructor element.
+   At top level, really output it to assembler code now.
+   Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
+   TYPE is the data type that the containing data type wants here.
+   FIELD is the field (a FIELD_DECL) or the index that this element fills.
+
+   PENDING if non-nil means output pending elements that belong
+   right after this element.  (PENDING is normally 1;
+   it is 0 while outputting pending elements, to avoid recursion.)  */
+
+static void output_init_element(expression init, type t)
+{
+  assert(init->ivalue->kind == iv_base);
+  init->ivalue->u.base.expr = init;
+  init->ivalue->u.base.require_constant_value = require_constant_value;
+
+  if (digest_init(t, init) && require_constant_value)
+    {
+      check_init_element(init);
+      /* If we haven't checked it yet then we'll need the spelling later
+        (see nesc-constants.c) */
+      if (!init->cst_checked)
+       save_expression_spelling(init);
+    }
+}
+
+\f
+/* Add one non-braced element to the current constructor level.
+   This adjusts the current position within the constructor's type.
+   This may also start or terminate implicit levels
+   to handle a partly-braced initializer.
+
+   Once this has found the correct level for the new element,
+   it calls output_init_element.  
+
+   If VALUE is NULL, just advance to the next element without 
+   any error messages
+*/
+
+void process_init_element(expression value)
+{
+  bool string_flag = value && is_string(value);
+
+  designator_depth = 0;
+  designator_erroneous = 0;
+
+  /* Handle superfluous braces around string cst as in
+     char x[] = {"foo"}; */
+  if (string_flag
+      && constructor_kind == c_array
+      && type_integer(type_array_of(constructor_type))
+      && constructor_count == 0)
+    {
+      constructor_kind = c_scalar;
+      constructor_index = 0;
+      if (!type_array_size(constructor_type))
+       constructor_type = constructor_value->type =
+         set_string_length(constructor_type, value);
+      /* XXX: maybe this should stay as a iv_array, and the string should
+        be broken down into characters? */
+      constructor_value->kind = iv_base;
+      constructor_value->u.base.expr = NULL;
+      constructor_value->u.base.value = cval_top;
+    }
+
+  /* Ignore elements of a brace group if it is entirely superfluous
+     and has already been diagnosed.  */
+  if (constructor_kind == c_none)
+    return;
+
+  /* If we've exhausted any levels that didn't have braces,
+     pop them now.  */
+  pop_exhausted_levels();
+
+ tryagain:
+  if (value)
+    {
+      type elttype = error_type;
+
+      switch (constructor_kind)
+       {
+       case c_aggregate:
+         if (constructor_fields == 0)
+           {
+             pedwarn_init("excess elements in struct or union initializer");
+             break;
+           }
+         elttype = constructor_fields->type;
+
+         /* Error for non-static initialization of a flexible array member.  */
+         if (type_array(elttype)
+             && !require_constant_value
+             && (type_array_size(elttype) && definite_zero(type_array_size(elttype)))
+             && !constructor_fields->next)
+           {
+             error_init("non-static initialization of a flexible array member");
+             break;
+           }
+         push_member_name (constructor_fields);
+
+         break;
+       case c_array:
+         if (constructor_max_index >= 0
+             && constructor_max_index < constructor_index)
+           {
+             pedwarn_init("excess elements in array initializer");
+             break;
+           }
+
+         elttype = type_array_of(constructor_type);
+         push_array_bounds(constructor_index);
+         if (type_array(elttype) && !type_array_size(elttype))
+           {
+             elttype = error_type;
+             error_init("array type has incomplete element type");
+           }
+         break;
+       case c_scalar:
+         if (constructor_count == 0)
+           elttype = constructor_type;
+         else if (constructor_count == 1) /* Only warn once */
+           pedwarn_init("excess elements in scalar initializer");
+         break;
+       default: assert(0); break;
+       }
+
+      /* Accept a string constant to initialize a subarray.  */
+      if (type_array(elttype) && type_integer(type_array_of(elttype))
+         && string_flag)
+       ;
+      /* Otherwise, if we have come to a subaggregate,
+        and we don't have an element of its type, push into it.  */
+      else if ((constructor_kind == c_array || constructor_kind == c_aggregate) &&
+              value->type != error_type
+              && !type_equal_unqualified(value->type, elttype)
+              && (type_aggregate(elttype) || type_array(elttype)))
+       {
+         push_init_level(1);
+         goto tryagain;
+       }
+
+      /* This is here rather than in the previous switch because of
+        the tryagain ("walk-into-array-or-aggregate") case */
+      if (elttype != error_type)
+       {
+         ivalue valueholder = NULL;
+
+         switch (constructor_kind)
+           {
+           case c_aggregate:
+             valueholder = new_ivalue(parse_region, iv_base, elttype);
+             add_ivalue_field(constructor_value, constructor_fields, valueholder);
+             break;
+           case c_array:
+             valueholder = new_ivalue(parse_region, iv_base, elttype);
+             add_ivalue_array(constructor_value, constructor_index, valueholder);
+             break;
+           case c_scalar:
+             valueholder = constructor_value;
+             break;
+           default: assert(0); break;
+           }
+         value->ivalue = valueholder;
+       }
+      else
+       value->ivalue = new_ivalue(parse_region, iv_base, error_type);
+
+      output_init_element (value, elttype);
+    }
+
+  constructor_count++;
+
+  switch (constructor_kind)
+    {
+    case c_aggregate:
+      if (value)
+       RESTORE_SPELLING_DEPTH (constructor_depth);
+
+      if (!type_union(constructor_type))
+       {
+         if (constructor_fields)
+           constructor_fields = skip_unnamed_bitfields(constructor_fields->next);
+       }
+      else
+       {
+         /* Warn that traditional C rejects initialization of unions.
+            We skip the warning if the value is zero.  This is done
+            under the assumption that the zero initializer in user
+            code appears conditioned on e.g. __STDC__ to avoid
+            "missing initializer" warnings and relies on default
+            initialization to zero in the traditional C case.
+            We also skip the warning if the initializer is designated,
+            again on the assumption that this must be conditional on
+            __STDC__ anyway (and we've already complained about the
+            member-designator already).  */
+         if (value && warn_traditional &&
+             !value->location->in_system_header &&
+             !constructor_designated && !definite_zero(value))
+           warning("traditional C rejects initialization of unions");
+
+         constructor_fields = 0;
+       }
+      break;
+    case c_array:
+      if (value)
+       RESTORE_SPELLING_DEPTH (constructor_depth);
+      constructor_index++;
+      if (constructor_index > constructor_array_size)
+       constructor_array_size = constructor_index;
+      break;
+    case c_scalar: /* the weird {"foo"} case above */
+      break;
+    default: assert(0); break;
+    }
+
+  /* Pop back to the level before the designator */
+  if (constructor_range_stack)
+    {
+      struct constructor_range_stack *p, *range_stack;
+
+      range_stack = constructor_range_stack;
+      constructor_range_stack = 0;
+
+      /* First pop back to the level at which the designator ended */
+      while (constructor_stack != range_stack->stack)
+       pop_implicit_level();
+
+      /* Then pop back up all the designators (note that the topmost one
+        does not have an implicit level) */
+      for (p = range_stack; p->prev; p = p->prev)
+       pop_implicit_level();
+    }
+
+  // XXX: mem dealloc for range stack
+  constructor_range_stack = 0;
+}
+
+expression make_init_specific(designator dlist, expression initval)
+{
+  return CAST(expression,
+    new_init_specific(parse_region, dlist->location, dlist, initval));
+}
+
+expression make_init_list(location loc, expression elist)
+{
+  expression ilist;
+  type itype;
+  largest_int array_size;
+
+  /* Explicit close brace:
+     pop any inner levels that didn't have explicit braces.  */
+  pop_all_implicit_levels();
+  /* Save array size (if any) */
+  array_size = constructor_array_size; 
+
+  assert(!constructor_range_stack);
+
+  ilist = CAST(expression, new_init_list(parse_region, loc, elist));
+  ilist->ivalue = constructor_value;
+  itype = pop_init_level();
+
+  /* Complete array types based on the initialiser */
+  if (type_array(itype) && !type_array_size(itype))
+    itype = set_array_length(itype, array_size);
+  ilist->type = itype;
+
+  return ilist;
+}
+
+expression make_cast_list(location loc, asttype t, expression init)
+{
+  cast_list result;
+
+  result = new_cast_list(parse_region, loc, t, init);
+  result->type = t->type;
+  /* gcc 2.x only considers this an lvalue if it's defined from constant
+     expressions. But 3.x always considers it an lvalue... */
+  result->lvalue = TRUE;
+
+  return CAST(expression, result);
+}
+
+/* Code to handle simple initialisers like 'int x = <expr>'.
+   The variable being initialised is constructor_decl */
+void simple_init(expression expr)
+{
+  type tdecl = constructor_decl->type;
+
+  if (is_string(expr) && type_array(tdecl) && !type_array_size(tdecl))
+    tdecl = set_string_length(tdecl, expr);
+  expr->ivalue = new_ivalue(parse_region, iv_base, tdecl);
+  output_init_element(expr, tdecl);
+}
diff --git a/src/init.h b/src/init.h
new file mode 100644 (file)
index 0000000..5e0ff2f
--- /dev/null
@@ -0,0 +1,76 @@
+/* Initialiser handling.
+   This file is part of the nesC compiler.
+
+This file is derived from the GNU C Compiler. It is thus
+   Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+   1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+Changes for nesC are
+   Copyright (C) 2002, 2003 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef INIT_H
+#define INIT_H
+
+/* Types representing a parsed initialiser. Unspecified fields and
+   array elements were unspecified in the initialiser. */
+struct ivalue {
+  enum { iv_base, iv_array, iv_structured } kind;
+
+  type type;
+
+  ivalue instantiation;
+
+  union {
+    struct {                   /* for iv_base */
+      expression expr;         /* not an init_list */
+      bool require_constant_value;
+      cval value;              /* value if constant, cval_top otherwise */
+    } base;
+    struct ivalue_array *array; /* for iv_array */
+    struct ivalue_field *structured; /* for iv_structured */
+  } u;
+};
+
+typedef struct ivalue_array {
+  struct ivalue_array *next;
+  largest_int from, to;
+  ivalue value;
+} *ivalue_array;
+
+typedef struct ivalue_field {
+  struct ivalue_field *next;
+  field_declaration field;
+  ivalue value;
+} *ivalue_field;
+
+ivalue new_ivalue(region r, int kind, type t);
+
+void start_init(declaration decl, nesc_attribute attr);
+void finish_init(void);
+void simple_init(expression expr);
+void really_start_incremental_init(type t);
+void push_init_level(int implicit);
+designator set_init_index(location loc, expression first, expression last);
+designator set_init_label(location loc, cstring fieldname);
+void process_init_element(expression value);
+
+expression make_init_specific(designator dlist, expression initval);
+expression make_init_list(location loc, expression elist);
+expression make_cast_list(location loc, asttype t, expression init);
+
+void check_init_element(expression init);
+
+#endif
diff --git a/src/lex.nd.c b/src/lex.nd.c
new file mode 100644 (file)
index 0000000..acc12eb
--- /dev/null
@@ -0,0 +1,1655 @@
+#define yy_create_buffer nd_create_buffer
+#define yy_delete_buffer nd_delete_buffer
+#define yy_scan_buffer nd_scan_buffer
+#define yy_scan_string nd_scan_string
+#define yy_scan_bytes nd_scan_bytes
+#define yy_flex_debug nd_flex_debug
+#define yy_init_buffer nd_init_buffer
+#define yy_flush_buffer nd_flush_buffer
+#define yy_load_buffer_state nd_load_buffer_state
+#define yy_switch_to_buffer nd_switch_to_buffer
+#define yyin ndin
+#define yyleng ndleng
+#define yylex ndlex
+#define yyout ndout
+#define yyrestart ndrestart
+#define yytext ndtext
+#define yywrap ndwrap
+
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /cvs/root/flex/flex/skel.c,v 1.2 2004/05/07 00:28:17 jkh Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ *     if ( condition_holds )
+ *             yyless( 5 );
+ *     else
+ *             do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+               *yy_cp = yy_hold_char; \
+               YY_RESTORE_YY_MORE_OFFSET \
+               yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via yyrestart()), so that the user can continue scanning by
+        * just pointing yyin at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+       };
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;                /* whether we need to initialize */
+static int yy_start = 0;       /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! yy_current_buffer ) \
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+       yy_current_buffer->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! yy_current_buffer ) \
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+       yy_current_buffer->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+       yytext_ptr = yy_bp; \
+       yyleng = (int) (yy_cp - yy_bp); \
+       yy_hold_char = *yy_cp; \
+       *yy_cp = '\0'; \
+       yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 6
+#define YY_END_OF_BUFFER 7
+static yyconst short int yy_accept[25] =
+    {   0,
+        0,    0,    7,    5,    1,    2,    5,    5,    3,    3,
+        5,    5,    0,    4,    5,    3,    3,    5,    4,    0,
+        5,    0,    3,    0
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    4,    5,    1,    1,    1,    4,    1,    4,
+        4,    1,    1,    4,    6,    1,    1,    7,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    1,    1,    1,
+        1,    1,    1,    1,    9,    9,    9,    9,    9,    9,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,   10,    1,    1,
+        1,   11,    1,    1,    1,    1,    9,    9,    9,    9,
+
+        9,    9,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,   10,
+        1,    1,    1,    4,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[12] =
+    {   0,
+        1,    2,    3,    2,    1,    1,    1,    1,    1,    1,
+        1
+    } ;
+
+static yyconst short int yy_base[30] =
+    {   0,
+        0,    0,   17,    0,   72,   72,   10,   15,   17,    9,
+        0,   26,   33,    0,   43,    0,    3,   41,   72,    0,
+        0,   46,    0,   72,   57,   60,   63,   66,   69
+    } ;
+
+static yyconst short int yy_def[30] =
+    {   0,
+       24,    1,   24,   25,   24,   24,   26,   25,    8,    8,
+       25,   26,   27,   25,   28,    9,    9,   25,   24,   29,
+       12,   27,   18,    0,   24,   24,   24,   24,   24
+    } ;
+
+static yyconst short int yy_nxt[84] =
+    {   0,
+        4,    5,    4,    6,    7,    8,    9,   10,    4,    4,
+        4,   13,   11,   13,   14,   17,   24,   24,   24,   24,
+       15,   16,   17,   17,   24,   24,   18,   13,   24,   13,
+       14,   24,   24,   24,   24,   24,   15,   19,   24,   24,
+       24,   24,   24,   20,   22,   11,   22,   23,   23,   23,
+       19,   24,   24,   24,   24,   24,   20,   11,   24,   11,
+       12,   12,   12,   13,   13,   13,   21,   21,   21,   22,
+       22,    3,   24,   24,   24,   24,   24,   24,   24,   24,
+       24,   24,   24
+    } ;
+
+static yyconst short int yy_chk[84] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    7,   17,    7,    7,   10,    3,    0,    0,    0,
+        7,    8,    8,    9,    0,    0,    9,   12,    0,   12,
+       12,    0,    0,    0,    0,    0,   12,   13,    0,    0,
+        0,    0,    0,   13,   15,   15,   15,   18,   18,   18,
+       22,    0,    0,    0,    0,    0,   22,   25,    0,   25,
+       26,   26,   26,   27,   27,   27,   28,   28,   28,   29,
+       29,   24,   24,   24,   24,   24,   24,   24,   24,   24,
+       24,   24,   24
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "nesc-dspec.l"
+#define INITIAL 0
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+/* Lexer for -fnesc-dump arguments (tokens are numbers, names (can be
+   arbitrary strings in "") and boolean operators */
+#define YY_NO_UNPUT 1
+#line 24 "nesc-dspec.l"
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-dspec.h"
+#include "nesc-dspec-int.h"
+
+/* We never wrap into another file */
+#define YY_SKIP_YYWRAP
+#define ndwrap() (1)
+
+#define YY_USE_PROTOS
+
+#undef YY_INPUT
+#define YY_INPUT(buf, result, max_size) \
+  { (result) = string_read((buf), (max_size)); }
+static int string_read(char *buf, int max_size);
+void nderror(char *err);
+
+#line 444 "lex.nd.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+       if ( yy_current_buffer->yy_is_interactive ) \
+               { \
+               int c = '*', n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( yyin ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+                 && ferror( yyin ) ) \
+               YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+       YY_USER_ACTION
+
+YY_DECL
+       {
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
+
+#line 49 "nesc-dspec.l"
+
+
+#line 598 "lex.nd.c"
+
+       if ( yy_init )
+               {
+               yy_init = 0;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! yy_start )
+                       yy_start = 1;   /* first start state */
+
+               if ( ! yyin )
+                       yyin = stdin;
+
+               if ( ! yyout )
+                       yyout = stdout;
+
+               if ( ! yy_current_buffer )
+                       yy_current_buffer =
+                               yy_create_buffer( yyin, YY_BUF_SIZE );
+
+               yy_load_buffer_state();
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+               yy_cp = yy_c_buf_p;
+
+               /* Support of yytext. */
+               *yy_cp = yy_hold_char;
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+               yy_current_state = yy_start;
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       if ( yy_accept[yy_current_state] )
+                               {
+                               yy_last_accepting_state = yy_current_state;
+                               yy_last_accepting_cpos = yy_cp;
+                               }
+                       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                               {
+                               yy_current_state = (int) yy_def[yy_current_state];
+                               if ( yy_current_state >= 25 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
+                               }
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       ++yy_cp;
+                       }
+               while ( yy_base[yy_current_state] != 72 );
+
+yy_find_action:
+               yy_act = yy_accept[yy_current_state];
+               if ( yy_act == 0 )
+                       { /* have to back up */
+                       yy_cp = yy_last_accepting_cpos;
+                       yy_current_state = yy_last_accepting_state;
+                       yy_act = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+
+do_action:     /* This label is used only to access EOF actions. */
+
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+                       case 0: /* must back up */
+                       /* undo the effects of YY_DO_BEFORE_ACTION */
+                       *yy_cp = yy_hold_char;
+                       yy_cp = yy_last_accepting_cpos;
+                       yy_current_state = yy_last_accepting_state;
+                       goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 51 "nesc-dspec.l"
+{ }
+       YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 52 "nesc-dspec.l"
+{ return ndtext[0]; }
+       YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 53 "nesc-dspec.l"
+{
+                 errno = 0;
+                 ndlval.integer = strtoll(ndtext, NULL, 0);
+                 if (errno)
+                   nderror("integer constant out of bounds.");
+                 return ND_INTEGER; 
+               }
+       YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 60 "nesc-dspec.l"
+{
+                 char *str = rstralloc(dump_region, strlen(ndtext));
+                 const char *text = ndtext + 1;
+
+                 ndlval.token = str;
+                 while (*text)
+                   {
+                     /* Shell-like \-processing: \ is preserved except
+                        in front of " and \ */
+                     if (*text == '\\' && (text[1] == '"' || text[1] == '\\'))
+                       text++;
+                     *str++ = *text++;
+                   }
+                 str[-1] = '\0';
+                 return ND_TOKEN;
+               }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 76 "nesc-dspec.l"
+{
+                 ndlval.token = rstrdup(dump_region, ndtext);
+                 return ND_TOKEN;
+               }
+       YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 81 "nesc-dspec.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+       YY_BREAK
+#line 735 "lex.nd.c"
+case YY_STATE_EOF(INITIAL):
+       yyterminate();
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = yy_hold_char;
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed yyin at a new source and called
+                        * yylex().  If so, then we have to assure
+                        * consistency between yy_current_buffer and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       yy_n_chars = yy_current_buffer->yy_n_chars;
+                       yy_current_buffer->yy_input_file = yyin;
+                       yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state();
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+                       yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++yy_c_buf_p;
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+                               yy_cp = yy_c_buf_p;
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer() )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               yy_did_buffer_switch_on_eof = 0;
+
+                               if ( yywrap() )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * yytext, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               yy_c_buf_p =
+                                       yytext_ptr + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state();
+
+                               yy_cp = yy_c_buf_p;
+                               yy_bp = yytext_ptr + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               yy_c_buf_p =
+                               &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+                               yy_current_state = yy_get_previous_state();
+
+                               yy_cp = yy_c_buf_p;
+                               yy_bp = yytext_ptr + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+       } /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+       {
+       register char *dest = yy_current_buffer->yy_ch_buf;
+       register char *source = yytext_ptr;
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( yy_current_buffer->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+       else
+               {
+               int num_to_read =
+                       yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+                       YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+                       /* just a shorter name for the current buffer */
+                       YY_BUFFER_STATE b = yy_current_buffer;
+
+                       int yy_c_buf_p_offset =
+                               (int) (yy_c_buf_p - b->yy_ch_buf);
+
+                       if ( b->yy_is_our_buffer )
+                               {
+                               int new_size = b->yy_buf_size * 2;
+
+                               if ( new_size <= 0 )
+                                       b->yy_buf_size += b->yy_buf_size / 8;
+                               else
+                                       b->yy_buf_size *= 2;
+
+                               b->yy_ch_buf = (char *)
+                                       /* Include room in for 2 EOB chars. */
+                                       yy_flex_realloc( (void *) b->yy_ch_buf,
+                                                        b->yy_buf_size + 2 );
+                               }
+                       else
+                               /* Can't grow it, we don't own it. */
+                               b->yy_ch_buf = 0;
+
+                       if ( ! b->yy_ch_buf )
+                               YY_FATAL_ERROR(
+                               "fatal error - scanner input buffer overflow" );
+
+                       yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+                       num_to_read = yy_current_buffer->yy_buf_size -
+                                               number_to_move - 1;
+#endif
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+                       yy_n_chars, num_to_read );
+
+               yy_current_buffer->yy_n_chars = yy_n_chars;
+               }
+
+       if ( yy_n_chars == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       yyrestart( yyin );
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       yy_current_buffer->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       yy_n_chars += number_to_move;
+       yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+       yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+       yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+       return ret_val;
+       }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+       {
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+
+       yy_current_state = yy_start;
+
+       for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+               {
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               if ( yy_accept[yy_current_state] )
+                       {
+                       yy_last_accepting_state = yy_current_state;
+                       yy_last_accepting_cpos = yy_cp;
+                       }
+               while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                       {
+                       yy_current_state = (int) yy_def[yy_current_state];
+                       if ( yy_current_state >= 25 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               }
+
+       return yy_current_state;
+       }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+       {
+       register int yy_is_jam;
+       register char *yy_cp = yy_c_buf_p;
+
+       register YY_CHAR yy_c = 1;
+       if ( yy_accept[yy_current_state] )
+               {
+               yy_last_accepting_state = yy_current_state;
+               yy_last_accepting_cpos = yy_cp;
+               }
+       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+               {
+               yy_current_state = (int) yy_def[yy_current_state];
+               if ( yy_current_state >= 25 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
+               }
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 24);
+
+       return yy_is_jam ? 0 : yy_current_state;
+       }
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+       {
+       register char *yy_cp = yy_c_buf_p;
+
+       /* undo effects of setting up yytext */
+       *yy_cp = yy_hold_char;
+
+       if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register int number_to_move = yy_n_chars + 2;
+               register char *dest = &yy_current_buffer->yy_ch_buf[
+                                       yy_current_buffer->yy_buf_size + 2];
+               register char *source =
+                               &yy_current_buffer->yy_ch_buf[number_to_move];
+
+               while ( source > yy_current_buffer->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               yy_current_buffer->yy_n_chars =
+                       yy_n_chars = yy_current_buffer->yy_buf_size;
+
+               if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+
+       yytext_ptr = yy_bp;
+       yy_hold_char = *yy_cp;
+       yy_c_buf_p = yy_cp;
+       }
+#endif /* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+       {
+       int c;
+
+       *yy_c_buf_p = yy_hold_char;
+
+       if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+                       /* This was really a NUL. */
+                       *yy_c_buf_p = '\0';
+
+               else
+                       { /* need more input */
+                       int offset = yy_c_buf_p - yytext_ptr;
+                       ++yy_c_buf_p;
+
+                       switch ( yy_get_next_buffer() )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       yyrestart( yyin );
+
+                                       /* fall through */
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( yywrap() )
+                                               return EOF;
+
+                                       if ( ! yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput();
+#else
+                                       return input();
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       yy_c_buf_p = yytext_ptr + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
+       *yy_c_buf_p = '\0';     /* preserve yytext */
+       yy_hold_char = *++yy_c_buf_p;
+
+
+       return c;
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+       {
+       if ( ! yy_current_buffer )
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+       yy_init_buffer( yy_current_buffer, input_file );
+       yy_load_buffer_state();
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+       {
+       if ( yy_current_buffer == new_buffer )
+               return;
+
+       if ( yy_current_buffer )
+               {
+               /* Flush out information for old buffer. */
+               *yy_c_buf_p = yy_hold_char;
+               yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+               yy_current_buffer->yy_n_chars = yy_n_chars;
+               }
+
+       yy_current_buffer = new_buffer;
+       yy_load_buffer_state();
+
+       /* We don't actually know whether we did this switch during
+        * EOF (yywrap()) processing, but the only time this flag
+        * is looked at is after yywrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       yy_did_buffer_switch_on_eof = 1;
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+       {
+       yy_n_chars = yy_current_buffer->yy_n_chars;
+       yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+       yyin = yy_current_buffer->yy_input_file;
+       yy_hold_char = *yy_c_buf_p;
+       }
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+       {
+       YY_BUFFER_STATE b;
+
+       b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       yy_init_buffer( b, file );
+
+       return b;
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+       {
+       if ( ! b )
+               return;
+
+       if ( b == yy_current_buffer )
+               yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               yy_flex_free( (void *) b->yy_ch_buf );
+
+       yy_flex_free( (void *) b );
+       }
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+       {
+       yy_flush_buffer( b );
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+       b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+       b->yy_is_interactive = 0;
+#else
+       b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+       {
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == yy_current_buffer )
+               yy_load_buffer_state();
+       }
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+       {
+       YY_BUFFER_STATE b;
+
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       yy_switch_to_buffer( b );
+
+       return b;
+       }
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+       {
+       int len;
+       for ( len = 0; yy_str[len]; ++len )
+               ;
+
+       return yy_scan_bytes( yy_str, len );
+       }
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+       {
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n;
+       int i;
+
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = len + 2;
+       buf = (char *) yy_flex_alloc( n );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+       for ( i = 0; i < len; ++i )
+               buf[i] = bytes[i];
+
+       buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = yy_scan_buffer( buf, n );
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+       }
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+       {
+       if ( yy_start_stack_ptr >= yy_start_stack_depth )
+               {
+               yy_size_t new_size;
+
+               yy_start_stack_depth += YY_START_STACK_INCR;
+               new_size = yy_start_stack_depth * sizeof( int );
+
+               if ( ! yy_start_stack )
+                       yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+               else
+                       yy_start_stack = (int *) yy_flex_realloc(
+                                       (void *) yy_start_stack, new_size );
+
+               if ( ! yy_start_stack )
+                       YY_FATAL_ERROR(
+                       "out of memory expanding start-condition stack" );
+               }
+
+       yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+       BEGIN(new_state);
+       }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+       {
+       if ( --yy_start_stack_ptr < 0 )
+               YY_FATAL_ERROR( "start-condition stack underflow" );
+
+       BEGIN(yy_start_stack[yy_start_stack_ptr]);
+       }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+       {
+       return yy_start_stack[yy_start_stack_ptr - 1];
+       }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+       {
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+       }
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+               yytext[yyleng] = yy_hold_char; \
+               yy_c_buf_p = yytext + n; \
+               yy_hold_char = *yy_c_buf_p; \
+               *yy_c_buf_p = '\0'; \
+               yyleng = n; \
+               } \
+       while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+       {
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+       }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+       {
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+       }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+       {
+       return (void *) malloc( size );
+       }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+       {
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) realloc( (char *) ptr, size );
+       }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+       {
+       free( ptr );
+       }
+
+#if YY_MAIN
+int main()
+       {
+       yylex();
+       return 0;
+       }
+#endif
+#line 81 "nesc-dspec.l"
+
+
+static YY_BUFFER_STATE mbuf;
+static const char *line;
+static int length, offset;
+
+void nd_read(const char *str)
+{
+  if (mbuf) 
+    nd_delete_buffer(mbuf);
+  mbuf = nd_create_buffer(stdin, YY_BUF_SIZE);
+  
+  nd_switch_to_buffer(mbuf);
+  line = str;
+  offset = 0;
+  length = strlen(line);
+}
+
+static int string_read(char *abuf, int max_size)
+{
+  int cnt;
+
+  cnt = max_size;
+  if (cnt > length - offset) cnt = length - offset;
+
+  memcpy(abuf, line + offset, cnt);
+  offset += cnt;
+
+  return cnt;
+}
+
+void nderror(char *err)
+{
+  error("dump option `%s': %s", line, err);
+}
diff --git a/src/libcompat/Makefile.am b/src/libcompat/Makefile.am
new file mode 100644 (file)
index 0000000..eea43d5
--- /dev/null
@@ -0,0 +1,45 @@
+## Process this file with automake to produce Makefile.in      -*- makefile -*-
+
+#    This file is part of the RC compiler.
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# 
+# RC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+# 
+# RC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with RC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+INCLUDES := -DNMEMDEBUG -DNDEBUG -O9
+
+noinst_LIBRARIES = libregions.a
+
+noinst_HEADERS =                               \
+       alloc.c                                 \
+       pages.c                                 \
+       stats.c
+
+if NEED_FNMATCH
+INCLUDES += -Ifnmatch
+FNMATCH = fnmatch.c fnmatch/fnmatch.h
+endif
+
+if NEED_REGEX
+INCLUDES += -Iregex
+REGEX = regex.c regex/regex.h
+endif
+
+libregions_a_SOURCES =                         \
+    regions.c                                  \
+    regions.h                                  \
+    $(FNMATCH)                                 \
+    $(REGEX)
+
diff --git a/src/libcompat/Makefile.in b/src/libcompat/Makefile.in
new file mode 100644 (file)
index 0000000..8a0134a
--- /dev/null
@@ -0,0 +1,444 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#    This file is part of the RC compiler.
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# 
+# RC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+# 
+# RC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with RC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@NEED_FNMATCH_TRUE@am__append_1 = -Ifnmatch
+@NEED_REGEX_TRUE@am__append_2 = -Iregex
+subdir = libcompat
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../config-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/autoconf.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libregions_a_AR = $(AR) $(ARFLAGS)
+libregions_a_LIBADD =
+am__libregions_a_SOURCES_DIST = regions.c regions.h fnmatch.c \
+       fnmatch/fnmatch.h regex.c regex/regex.h
+@NEED_FNMATCH_TRUE@am__objects_1 = fnmatch.$(OBJEXT)
+@NEED_REGEX_TRUE@am__objects_2 = regex.$(OBJEXT)
+am_libregions_a_OBJECTS = regions.$(OBJEXT) $(am__objects_1) \
+       $(am__objects_2)
+libregions_a_OBJECTS = $(am_libregions_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/../config-aux/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libregions_a_SOURCES)
+DIST_SOURCES = $(am__libregions_a_SOURCES_DIST)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+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@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES := -DNMEMDEBUG -DNDEBUG -O9 $(am__append_1) $(am__append_2)
+noinst_LIBRARIES = libregions.a
+noinst_HEADERS = \
+       alloc.c                                 \
+       pages.c                                 \
+       stats.c
+
+@NEED_FNMATCH_TRUE@FNMATCH = fnmatch.c fnmatch/fnmatch.h
+@NEED_REGEX_TRUE@REGEX = regex.c regex/regex.h
+libregions_a_SOURCES = \
+    regions.c                                  \
+    regions.h                                  \
+    $(FNMATCH)                                 \
+    $(REGEX)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  libcompat/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  libcompat/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libregions.a: $(libregions_a_OBJECTS) $(libregions_a_DEPENDENCIES) 
+       -rm -f libregions.a
+       $(libregions_a_AR) libregions.a $(libregions_a_OBJECTS) $(libregions_a_LIBADD)
+       $(RANLIB) libregions.a
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regions.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-noinstLIBRARIES ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am
+
+# 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/src/libcompat/alloc.c b/src/libcompat/alloc.c
new file mode 100644 (file)
index 0000000..8556c45
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+/* TBD: recover unusued portions of pages for use as individual pages */
+
+#include <stddef.h>
+#include "regions.h"
+
+static
+void alloc_block(region r, struct allocator *a, struct ablock *blk,
+                void **p1, int s1, int a1, void **p2, int s2, int a2,
+                size_t blksize, int needsclear)
+{
+  struct page *newp;
+  char *mem1, *mem2;
+  
+  mem1 = PALIGN(blk->allocfrom, a1);
+  mem2 = PALIGN(mem1 + s1, a2);
+
+  /* Can't use last byte of page (pointers to the byte after an object are
+     valid) */
+  if (mem2 + s2 >= blk->end)
+    {
+      if (blksize == RPAGESIZE)
+       {
+         newp = alloc_single_page(a->pages);
+         a->pages = newp;
+         blk->allocfrom = (char *)newp + offsetof(struct page, previous);
+         set_region(newp, 1, r);
+       }
+      else
+       {
+         newp = alloc_pages(blksize >> RPAGELOG, a->bigpages);
+         a->bigpages = newp;
+         blk->allocfrom = (char *)newp + offsetof(struct page, previous);
+         set_region(newp, blksize >> RPAGELOG, r);
+       }
+      blk->end = (char *)newp + blksize;
+
+      if (needsclear)
+       preclear(blk->allocfrom, blksize - (blk->allocfrom - (char *)newp));
+      mem1 = PALIGN(blk->allocfrom, a1);
+      mem2 = PALIGN(mem1 + s1, a2);
+    }
+
+  ASSERT_INUSE(blk->end - blksize, r);
+  blk->allocfrom = mem2 + s2;
+
+  *p1 = mem1;
+  *p2 = mem2;
+}
+
+static inline 
+void qalloc(region r, struct allocator *a, void **p1, int s1, int a1,
+           void **p2, int s2, int a2, int needsclear)
+{
+  struct page *p;
+  char *mem;
+  int npages;
+  int n = ALIGN(s1, a2) + s2; /* Yes, this is correct (see alloc_block) */
+
+  /* We optimise the check for the first block */
+  {
+    char *mem1, *mem2;
+
+    mem1 = PALIGN(a->page.allocfrom, a1);
+    mem2 = PALIGN(mem1 + s1, a2);
+
+    /* Can't use last byte of page (pointers to the byte after an object are
+       valid) */
+    if (mem2 + s2 < a->page.end)
+      {
+       ASSERT_INUSE(blk->end - blksize, r);
+       a->page.allocfrom = mem2 + s2;
+
+       *p1 = mem1;
+       *p2 = mem2;
+       return;
+      }
+  }
+
+  if (n <= RPAGESIZE / K)
+    {
+      alloc_block(r, a, &a->page, p1, s1, a1, p2, s2, a2, RPAGESIZE,
+                 needsclear);
+      return;
+    }
+#if K >= 2
+  if (n <= RPAGESIZE)
+    {
+      alloc_block(r, a, &a->superpage, p1, s1, a1, p2, s2, a2,
+                 K * RPAGESIZE, needsclear);
+      return;
+    }
+#endif
+#if K >= 4
+  if (n <= RPAGESIZE * K)
+    {
+      alloc_block(r, a, &a->hyperpage, p1, s1, a1, p2, s2, a2,
+                 K * K * RPAGESIZE, needsclear);
+      return;
+    }
+#endif
+
+  /* We would have - 1 after RPAGESIZE, but we need to add 1 to make the
+     last byte of the object live in the same region */
+  npages = (n + ALIGN(offsetof(struct page, previous), a1) + RPAGESIZE)
+    >> RPAGELOG;
+  p = alloc_pages(npages, a->bigpages);
+  a->bigpages = p;
+  set_region(p, npages, r);
+
+  mem = (char *)p + offsetof(struct page, previous);
+  *p1 = PALIGN(mem, a1);
+  *p2 = PALIGN((char *)*p1 + s1, a2);
+  if (needsclear)
+    preclear(*p2, s2);
+}
+
+void free_all_pages(region r, struct allocator *a)
+/* Assumes freepages_lock held */
+{
+  struct page *p, *next;
+
+  for (p = a->pages; p; p = next)
+    {
+      next = p->next;
+      free_single_page(r, p);
+    }
+  for (p = a->bigpages; p; p = next)
+    {
+      next = p->next;
+      free_pages(r, p);
+    }
+}
diff --git a/src/libcompat/fnmatch.c b/src/libcompat/fnmatch.c
new file mode 100644 (file)
index 0000000..d0d7002
--- /dev/null
@@ -0,0 +1,344 @@
+/* Copyright (C) 1991-1993, 1996-1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Enable GNU extensions in fnmatch.h.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE   1
+#endif
+
+#include <assert.h>
+#include <errno.h>
+#include <fnmatch.h>
+#include <ctype.h>
+
+#if HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+/* For platform which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+/* We need some of the locale data (the collation sequence information)
+   but there is no interface to get this information in general.  Therefore
+   we support a correct implementation only in glibc.  */
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# include "../locale/elem-hash.h"
+# include "../locale/coll-lookup.h"
+
+# define CONCAT(a,b) __CONCAT(a,b)
+# define mbsinit __mbsinit
+# define mbsrtowcs __mbsrtowcs
+#endif
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined _LIBC || !defined __GNU_LIBRARY__
+
+
+# if defined STDC_HEADERS || !defined isascii
+#  define ISASCII(c) 1
+# else
+#  define ISASCII(c) isascii(c)
+# endif
+
+# ifdef isblank
+#  define ISBLANK(c) (ISASCII (c) && isblank (c))
+# else
+#  define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+# endif
+# ifdef isgraph
+#  define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+# else
+#  define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+# endif
+
+# define ISPRINT(c) (ISASCII (c) && isprint (c))
+# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
+# define ISALNUM(c) (ISASCII (c) && isalnum (c))
+# define ISALPHA(c) (ISASCII (c) && isalpha (c))
+# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
+# define ISLOWER(c) (ISASCII (c) && islower (c))
+# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
+# define ISSPACE(c) (ISASCII (c) && isspace (c))
+# define ISUPPER(c) (ISASCII (c) && isupper (c))
+# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
+
+# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
+
+# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendement 1.  */
+#  ifdef CHARCLASS_NAME_MAX
+#   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+#  else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#   define CHAR_CLASS_MAX_LENGTH 256
+#  endif
+
+#  ifdef _LIBC
+#   define IS_CHAR_CLASS(string) __wctype (string)
+#  else
+#   define IS_CHAR_CLASS(string) wctype (string)
+#  endif
+
+#  ifdef _LIBC
+#   define ISWCTYPE(WC, WT)    __iswctype (WC, WT)
+#  else
+#   define ISWCTYPE(WC, WT)    iswctype (WC, WT)
+#  endif
+
+#  if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC
+/* In this case we are implementing the multibyte character handling.  */
+#   define HANDLE_MULTIBYTE    1
+#  endif
+
+# else
+#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+
+#  define IS_CHAR_CLASS(string)                                                      \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                       \
+    || STREQ (string, "lower") || STREQ (string, "digit")                    \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")                   \
+    || STREQ (string, "space") || STREQ (string, "print")                    \
+    || STREQ (string, "punct") || STREQ (string, "graph")                    \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+# endif
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+# if !defined _LIBC && !defined getenv
+extern char *getenv ();
+# endif
+
+# ifndef errno
+extern int errno;
+# endif
+
+/* This function doesn't exist on most systems.  */
+
+# if !defined HAVE___STRCHRNUL && !defined _LIBC
+static char *
+__strchrnul (s, c)
+     const char *s;
+     int c;
+{
+  char *result = strchr (s, c);
+  if (result == NULL)
+    result = strchr (s, '\0');
+  return result;
+}
+# endif
+
+# if HANDLE_MULTIBYTE && !defined HAVE___STRCHRNUL && !defined _LIBC
+static wchar_t *
+__wcschrnul (s, c)
+     const wchar_t *s;
+     wint_t c;
+{
+  wchar_t *result = wcschr (s, c);
+  if (result == NULL)
+    result = wcschr (s, '\0');
+  return result;
+}
+# endif
+
+# ifndef internal_function
+/* Inside GNU libc we mark some function in a special way.  In other
+   environments simply ignore the marking.  */
+#  define internal_function
+# endif
+
+/* Note that this evaluates C many times.  */
+# ifdef _LIBC
+#  define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
+# else
+#  define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
+# endif
+# define CHAR  char
+# define UCHAR unsigned char
+# define FCT   internal_fnmatch
+# define L(CS) CS
+# ifdef _LIBC
+#  define BTOWC(C)     __btowc (C)
+# else
+#  define BTOWC(C)     btowc (C)
+# endif
+# define STRCHR(S, C)  strchr (S, C)
+# define STRCHRNUL(S, C) __strchrnul (S, C)
+# define STRCOLL(S1, S2) strcoll (S1, S2)
+# include "fnmatch_loop.c"
+
+
+# if HANDLE_MULTIBYTE
+/* Note that this evaluates C many times.  */
+#  ifdef _LIBC
+#   define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c))
+#  else
+#   define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? towlower (c) : (c))
+#  endif
+#  define CHAR wchar_t
+#  define UCHAR        wint_t
+#  define FCT  internal_fnwmatch
+#  define L(CS)        L##CS
+#  define BTOWC(C)     (C)
+#  define STRCHR(S, C) wcschr (S, C)
+#  define STRCHRNUL(S, C) __wcschrnul (S, C)
+#  define STRCOLL(S1, S2) wcscoll (S1, S2)
+#  define WIDE_CHAR_VERSION 1
+
+#  undef IS_CHAR_CLASS
+/* We have to convert the wide character string in a multibyte string.  But
+   we know that the character class names consist of alphanumeric characters
+   from the portable character set, and since the wide character encoding
+   for a member of the portable character set is the same code point as
+   its single-byte encoding, we can use a simplified method to convert the
+   string to a multibyte character string.  */
+static wctype_t
+is_char_class (const wchar_t *wcs)
+{
+  char s[CHAR_CLASS_MAX_LENGTH + 1];
+  char *cp = s;
+
+  do
+    {
+      /* Test for a printable character from the portable character set.  */
+#  ifdef _LIBC
+      if (*wcs < 0x20 || *wcs > 0x7e
+         || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60)
+       return (wctype_t) 0;
+#  else
+      switch (*wcs)
+       {
+       case L' ': case L'!': case L'"': case L'#': case L'%':
+       case L'&': case L'\'': case L'(': case L')': case L'*':
+       case L'+': case L',': case L'-': case L'.': case L'/':
+       case L'0': case L'1': case L'2': case L'3': case L'4':
+       case L'5': case L'6': case L'7': case L'8': case L'9':
+       case L':': case L';': case L'<': case L'=': case L'>':
+       case L'?':
+       case L'A': case L'B': case L'C': case L'D': case L'E':
+       case L'F': case L'G': case L'H': case L'I': case L'J':
+       case L'K': case L'L': case L'M': case L'N': case L'O':
+       case L'P': case L'Q': case L'R': case L'S': case L'T':
+       case L'U': case L'V': case L'W': case L'X': case L'Y':
+       case L'Z':
+       case L'[': case L'\\': case L']': case L'^': case L'_':
+       case L'a': case L'b': case L'c': case L'd': case L'e':
+       case L'f': case L'g': case L'h': case L'i': case L'j':
+       case L'k': case L'l': case L'm': case L'n': case L'o':
+       case L'p': case L'q': case L'r': case L's': case L't':
+       case L'u': case L'v': case L'w': case L'x': case L'y':
+       case L'z': case L'{': case L'|': case L'}': case L'~':
+         break;
+       default:
+         return (wctype_t) 0;
+       }
+#  endif
+
+      /* Avoid overrunning the buffer.  */
+      if (cp == s + CHAR_CLASS_MAX_LENGTH)
+       return (wctype_t) 0;
+
+      *cp++ = (char) *wcs++;
+    }
+  while (*wcs != L'\0');
+
+  *cp = '\0';
+
+#  ifdef _LIBC
+  return __wctype (s);
+#  else
+  return wctype (s);
+#  endif
+}
+#  define IS_CHAR_CLASS(string) is_char_class (string)
+
+#  include "fnmatch_loop.c"
+# endif
+
+
+int
+fnmatch (pattern, string, flags)
+     const char *pattern;
+     const char *string;
+     int flags;
+{
+# if HANDLE_MULTIBYTE
+  mbstate_t ps;
+  size_t n;
+  wchar_t *wpattern;
+  wchar_t *wstring;
+
+  if (MB_CUR_MAX == 1)
+    /* This is an optimization for 8-bit character set.  */
+    return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
+
+  /* Convert the strings into wide characters.  */
+  memset (&ps, '\0', sizeof (ps));
+  n = mbsrtowcs (NULL, &pattern, 0, &ps);
+  if (n == (size_t) -1)
+    /* Something wrong.
+       XXX Do we have to set `errno' to something which mbsrtows hasn't
+       already done?  */
+    return -1;
+  wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
+  assert (mbsinit (&ps));
+  (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps);
+
+  assert (mbsinit (&ps));
+  n = mbsrtowcs (NULL, &string, 0, &ps);
+  if (n == (size_t) -1)
+    /* Something wrong.
+       XXX Do we have to set `errno' to something which mbsrtows hasn't
+       already done?  */
+    return -1;
+  wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
+  assert (mbsinit (&ps));
+  (void) mbsrtowcs (wstring, &string, n + 1, &ps);
+
+  return internal_fnwmatch (wpattern, wstring, flags & FNM_PERIOD, flags);
+# else
+  return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
+# endif  /* mbstate_t and mbsrtowcs or _LIBC.  */
+}
+
+#endif /* _LIBC or not __GNU_LIBRARY__.  */
diff --git a/src/libcompat/fnmatch/fnmatch.h b/src/libcompat/fnmatch/fnmatch.h
new file mode 100644 (file)
index 0000000..cc3ec37
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef        _FNMATCH_H
+#define        _FNMATCH_H      1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
+# if !defined __GLIBC__ || !defined __P
+#  undef       __P
+#  define __P(protos)  protos
+# endif
+#else /* Not C++ or ANSI C.  */
+# undef        __P
+# define __P(protos)   ()
+/* We can get away without defining `const' here only because in this file
+   it is used only inside the prototype for `fnmatch', which is elided in
+   non-ANSI C where `const' is problematical.  */
+#endif /* C++ or ANSI C.  */
+
+#ifndef const
+# if (defined __STDC__ && __STDC__) || defined __cplusplus
+#  define __const      const
+# else
+#  define __const
+# endif
+#endif
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef FNM_PATHNAME
+#undef FNM_NOESCAPE
+#undef FNM_PERIOD
+
+/* Bits set in the FLAGS argument to `fnmatch'.  */
+#define        FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
+#define        FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define        FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
+
+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
+# define FNM_FILE_NAME  FNM_PATHNAME   /* Preferred GNU name.  */
+# define FNM_LEADING_DIR (1 << 3)      /* Ignore `/...' after a match.  */
+# define FNM_CASEFOLD   (1 << 4)       /* Compare without regard to case.  */
+#endif
+
+/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
+#define        FNM_NOMATCH     1
+
+/* This value is returned if the implementation does not support
+   `fnmatch'.  Since this is not the case here it will never be
+   returned but the conformance test suites still require the symbol
+   to be defined.  */
+#ifdef _XOPEN_SOURCE
+# define FNM_NOSYS     (-1)
+#endif
+
+/* Match NAME against the filename pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch __P ((__const char *__pattern, __const char *__name,
+                        int __flags));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/src/libcompat/pages.c b/src/libcompat/pages.c
new file mode 100644 (file)
index 0000000..531c47c
--- /dev/null
@@ -0,0 +1,620 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#include <limits.h>
+
+typedef __rcintptr pageid;
+
+static size_t total_page_count; /* total pages allocated */
+#define PAGE_GROUP_SIZE (1 + (total_page_count >> 7))
+
+#if 0
+#define FREEPAGE ((region)-1) /* Id of a free page */
+#else
+#define FREEPAGE (&zeroregion)
+#endif
+#ifdef NMEMDEBUG
+#define ASSERT_FREE(p) 
+#define ASSERT_INUSE(p, r) 
+#else
+#define ASSERT_FREE(p) assert(regionof(p) == FREEPAGE)
+#ifdef DUPLICATES
+#define ASSERT_INUSE(p, r) assert(regionof(p) == r->base)
+#else
+#define ASSERT_INUSE(p, r) assert(regionof(p) == r)
+#endif
+#endif
+
+/* Page allocator for region-based memory management */
+/* TBD: special free list for size == K ?? */
+
+#define PAGECOUNTBITS (CHAR_BIT * sizeof(pageid) - 1)
+
+struct page
+{
+  /* Next page in region or in free list */
+  struct page *next;
+
+  /* Doubly linked list of pages sorted by address */
+  struct page *next_address, *prev_address;
+
+  /* number of pages in this allocation unit. Negative for free pages. */
+  pageid pagecount : PAGECOUNTBITS;
+
+  unsigned int free : 1;
+
+  /* Only in free pages not in the single_pages list */
+  struct page *previous;
+};
+
+/* The pages are kept in a single list sorted by address via the
+   next_address and prev_address fields. The first page's prev_address and
+   the last page's next_address fields points to pages_byaddress.
+   page_byaddress.next_address is the first page
+   page_byaddress.prev_address is the last page
+
+   This list is used for coalescing operations.
+*/
+static struct page pages_byaddress;
+
+struct page *alloc_single_page(struct page *next);
+void free_single_page(region r, struct page *p);
+
+struct page *alloc_pages(int n, struct page *next);
+void free_pages(region r, struct page *p);
+
+
+/* a list of free individual pages */
+struct page *single_pages;
+
+/* free pages (not including those in single_pages) */
+struct page *unused_pages;
+
+static void init_pages(void)
+{
+  pages_byaddress.next_address = &pages_byaddress;
+  pages_byaddress.prev_address = &pages_byaddress;
+}
+
+static void insertbefore_address(struct page *p, struct page *before)
+{
+  p->prev_address = before->prev_address;
+  p->next_address = before;
+  before->prev_address = p;
+  p->prev_address->next_address = p;
+}
+
+static void insertafter_address(struct page *p, struct page *after)
+{
+  insertbefore_address(p, after->next_address);
+}
+
+static void unlink_address(struct page *p)
+{
+  p->prev_address->next_address = p->next_address;
+  p->next_address->prev_address = p->prev_address;
+}
+
+static void addbyaddress(struct page *p)
+{
+  struct page *address_scan;
+  static struct page *last_add;
+
+  /* Weird performance hack: we try and guess what direction the 
+     underlying malloc gets memory by comparing the address of p
+     with the previous address passed to addbyaddress. If it's greater,
+     we try and add from the end of the list, walking backwards. Otherwise 
+     we try and add from the start of the list, walking forwards. */
+
+  if (p > last_add)
+    {
+      for (address_scan = pages_byaddress.prev_address; ;
+          address_scan = address_scan->prev_address)
+       if (p > address_scan || address_scan == &pages_byaddress)
+         {
+           last_add = p;
+           insertafter_address(p, address_scan);
+           return;
+         }
+    }
+  else
+    {
+      for (address_scan = pages_byaddress.next_address; ;
+          address_scan = address_scan->next_address)
+       if (p < address_scan || address_scan == &pages_byaddress)
+         {
+           last_add = p;
+           insertbefore_address(p, address_scan);
+           return;
+         }
+    }
+}
+
+/* Doubly linked page list management */
+void addfront(struct page **list, struct page *p)
+/* Effects: Adds p to the front of doubly-linked list list */
+{
+  p->previous = NULL;
+  p->next = *list;
+  if (*list) (*list)->previous = p;
+  *list = p;
+}
+
+void unlink_page(struct page **list, struct page *p)
+/* Effects: Remove p from its doubly linked list */
+{
+  if (p->previous)
+    p->previous->next = p->next;
+  else
+    *list = p->next;
+  if (p->next)
+    p->next->previous = p->previous;
+}
+
+#ifdef USE_MMAP
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#ifndef __APPLE__
+#undef MAP_ANONYMOUS
+#endif
+
+#ifndef MAP_ANONYMOUS
+
+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
+
+#define MMAP(addr, size, prot, flags) \
+ ((dev_zero_fd < 0 ? dev_zero_fd = open("/dev/zero", O_RDWR) : 0),  \
+  mmap((addr), (size), (prot), (flags), dev_zero_fd, 0))
+
+#else
+
+#define MMAP(addr, size, prot, flags) \
+ (mmap((addr), (size), (prot), (flags)|MAP_ANONYMOUS, -1, 0))
+
+#endif
+
+struct page *region_get_mem(size_t s)
+{
+  struct page *newp;
+
+#if 0
+  s = ALIGN(s, 65536);
+#endif
+
+  newp = (struct page *)MMAP(0, s, PROT_READ|PROT_WRITE, MAP_PRIVATE);
+
+  if (!newp)
+    return NULL;
+
+  if (PALIGN(newp, RPAGESIZE) != newp)
+    abort();
+
+  addbyaddress(newp);
+
+  /* Add the new memory to unused_pages */
+#ifndef NMEMDEBUG
+  set_region_range(newp, (char *)newp + s, FREEPAGE);
+#endif
+  total_page_count += s >> RPAGELOG;
+  newp->pagecount = s >> RPAGELOG;
+  newp->free = 1;
+  addfront(&unused_pages, newp);
+
+  return newp;
+}
+
+#else
+
+/* region_get_mem will never allocate less than MINIMUM_MEM_REQUEST bytes.
+   It wastes RPAGESIZE bytes, so there is an overhead of
+   RPAGESIZE / MINIMUM_MEM_REQUEST
+*/
+#define MINIMUM_MEM_REQUEST (PAGE_GROUP_SIZE * K * RPAGESIZE)
+
+struct page *region_get_mem(size_t s)
+{
+  size_t request_bytes;
+  void *mem;
+  struct page *newp;
+
+  /* Don't get less than K * RPAGESIZE extra memory (K * RPAGESIZE
+     is the minimum useful size for something on unused_pages) */
+  if (s + K * RPAGESIZE < MINIMUM_MEM_REQUEST) 
+    request_bytes = MINIMUM_MEM_REQUEST;
+  else
+    request_bytes = s;
+
+  mem = malloc(request_bytes + RPAGESIZE);
+  if (!mem)
+    return NULL;
+  newp = PALIGN(mem, RPAGESIZE);
+  if (mem == newp) /* Maybe we were lucky! */
+    request_bytes += RPAGESIZE;
+
+  addbyaddress(newp);
+
+  /* Add the new memory to unused_pages */
+#ifndef NMEMDEBUG
+  set_region_range(newp, (char *)newp + request_bytes, FREEPAGE);
+#endif
+  total_page_count += request_bytes >> RPAGELOG;
+  newp->pagecount = request_bytes >> RPAGELOG;
+  newp->free = 1;
+  addfront(&unused_pages, newp);
+
+  return newp;
+}
+#endif
+
+/* Page to region map management */
+/* ----------------------------- */
+
+#ifndef LARGE_ADDRESSES
+/* 32-bit platforms */
+region __rcregionmap[MAXPAGE];
+
+static void set_page_region(pageid pagenb, region r)
+{
+  __rcregionmap[pagenb] = r;
+}
+
+#define page_region(pagenb) (__rcregionmap[(pagenb)])
+
+#else
+/* 64-bit platforms */
+
+/* This is a page table implemented as a table of indirect tables. */
+region *__regiontable[1 << MEMSLICE2];
+
+void set_page_region(pageid pagenb, region r)
+{
+  __rcintptr offset2 = (pagenb >> MEMSLICE3) & ((1 << MEMSLICE2) - 1);
+  __rcintptr offset3 = pagenb & ((1 << MEMSLICE3) - 1);
+  region *rmap;
+
+  rmap = __regiontable[offset2];
+  if (!rmap)
+    {
+      int i;
+
+      rmap = (region *)malloc(sizeof(region) * (1 << MEMSLICE3));
+      if (!rmap)
+       {
+         if (nomem_h)
+           nomem_h();
+         abort();
+       }
+      __regiontable[offset2] = rmap;
+      for (i = 0; i < (1 << MEMSLICE3); i++) {
+       rmap[i] = NULL;
+      }
+    }
+  rmap[offset3] = r;
+}
+
+region page_region(pageid pnb)
+{
+  __rcintptr offset2 = (pnb >> MEMSLICE3) & ((1 << MEMSLICE2) - 1);
+  __rcintptr offset3 = pnb & ((1 << MEMSLICE3) - 1);
+
+  /* Check if indirect table is present */
+  if (__regiontable[offset2])
+    return __regiontable[offset2][offset3];
+  else
+    /* If the indirect table is not there, the value is assumed to be ... */
+    return NULL;
+}
+
+#endif
+
+void set_region(struct page *p, int npages, region r)
+{
+  pageid pnb = PAGENB(p);
+
+  while (npages-- > 0) 
+    set_page_region(pnb++, r);
+}
+
+/* Mark the memory range from 'from' (inclusive) to 'to' (exclusive)
+   as belonging to region with id 'rid' */
+void set_region_range(void *from, void *to, region r)
+{
+  pageid first = PAGENB(from), last = PAGENB((pageid)to - 1);
+
+  while (first <= last)
+    set_page_region(first++, r);
+}
+
+/* Multi-page allocation management */
+/* -------------------------------- */
+
+struct page *alloc_split(struct page *split, int n, struct page *next)
+/* Assumes freepages_lock held */
+{
+#ifndef NMEMDEBUG
+  /* These pages had better be free */
+  pageid i, pnb = PAGENB(split);
+
+  assert(split->pagecount >= n);
+  for (i = pnb; i < pnb + split->pagecount; i++)
+    assert(page_region(i) == FREEPAGE);
+#endif
+  if (split->pagecount > n)
+    {
+      struct page *splitoff;
+
+      /* Keep first part of block */
+      split->pagecount -= n;
+      /* Return latter part of block */
+      splitoff = split;
+      split = (struct page *)((char *)split + (split->pagecount << RPAGELOG));
+
+      /* Update the by adress list */
+      insertbefore_address(split, splitoff->next_address);
+    }
+  else
+    {
+      /* remove split from list */
+      unlink_page(&unused_pages, split);
+    }
+  split->next = next;
+  split->pagecount = n;
+  split->free = 0;
+
+  return split;
+}
+
+struct page *alloc_new(int n, struct page *next)
+/* Assumes freepages_lock held */
+{
+  struct page *newp = region_get_mem(n << RPAGELOG);
+
+  if (!newp)
+    {
+      if (nomem_h)
+       nomem_h();
+      abort();
+    }
+  assert(!((long)newp & (RPAGESIZE - 1)));
+
+  /* region_get_mem may get us more memory than we asked for */
+  return alloc_split(newp, n, next);
+}
+
+struct page *alloc_pages(int n, struct page *next)
+{
+  struct page *best;
+  int bestn;
+  struct page *scan;
+
+  assert(n >= K);
+
+  scan = unused_pages;
+  /* Find first fit */
+  for (;;)
+    {
+      if (!scan)
+       return alloc_new(n, next);
+
+      if (scan->pagecount >= n) break;
+      scan = scan->next;
+    }
+
+  /* Now find best fit */
+  best = scan;
+  bestn = scan->pagecount;
+  for (;;)
+    {
+      scan = scan->next;
+      if (!scan)
+       return alloc_split(best, n, next);
+
+      if (scan->pagecount >=n && scan->pagecount < bestn)
+       {
+         best = scan;
+         bestn = scan->pagecount;
+       }
+    }
+}
+
+static void coalesce(struct page *p)
+{
+  struct page *prev = p->prev_address, *next;
+
+  p->free = 1;
+
+  /* Coalesce with predecessor ? */
+  if (prev->free && (char *)prev + (prev->pagecount << RPAGELOG) == (char *)p)
+    {
+      prev->pagecount += p->pagecount;
+      unlink_address(p);
+      p = prev;
+    }
+  else /* No, add to free pages list */
+    addfront(&unused_pages, p);
+
+  next = p->next_address;
+  /* Coalesce with successor ? */
+  if (next->free && (char *)p + (p->pagecount << RPAGELOG) == (char *)next)
+    {
+      unlink_page(&unused_pages, next);
+      p->pagecount += next->pagecount;
+      unlink_address(next);
+    }
+}
+
+void free_pages(region r, struct page *p)
+/* Assumes freepages_lock held */
+{
+#ifndef NMEMDEBUG
+  pageid i, pnb = PAGENB(p);
+
+  for (i = pnb; i < pnb + p->pagecount; i++)
+    {
+      assert(page_region(i) == r);
+      set_page_region(i, FREEPAGE);
+    }
+#endif
+
+  coalesce(p);
+}
+
+
+/* Single page management */
+/* ---------------------- */
+
+static int single_page_count;
+
+static void add_single_pages(struct page *base)
+/* Effects: Adds pages at base to the single_pages list */
+{
+  pageid n = base->pagecount;
+  struct page *prev = base->prev_address, *basenext = base->next_address,
+    *next;
+
+  single_page_count += n;
+
+  for (;;)
+    {
+      ASSERT_FREE(base);
+      base->free = 0; /* Not free so that coalesce won't steal these back */
+      base->prev_address = prev;
+      prev = base;
+      base->next = single_pages;
+      single_pages = base;
+      if (--n == 0)
+       break;
+      next = (struct page *)((char *)base + RPAGESIZE);
+      base->next_address = next;
+      base = next;
+    }
+  base->next_address = basenext;
+  basenext->prev_address = base;
+}
+
+void scavenge_single_pages(int n)
+{
+  /* Add n pages to the single_pages list */
+  struct page *scan, *best;
+  __rcintptr bestn;
+
+  /* Take any group in unused_pages that is <= n or < K.
+     Remember smallest entry > n too. This is sortof equivalent to
+     a best fit where we allow partial allocations to make up a whole */
+  best = NULL;
+  bestn = (__rcintptr)1 << (sizeof(__rcintptr) * CHAR_BIT - 2);
+  scan = unused_pages;
+  while (scan)
+    {
+      /* The pages < K can't be used for anything but single pages so we
+        might as well grab them even if they are a little too big */
+      if (scan->pagecount <= n || scan->pagecount < K)
+       {
+         struct page *adding = scan;
+
+         scan = scan->next;
+         n -= adding->pagecount;
+         unlink_page(&unused_pages, adding);
+         add_single_pages(adding);
+         if (n <= 0) return;
+       }
+      else
+       {
+         if (scan->pagecount < bestn)
+           {
+             bestn = scan->pagecount;
+             best = scan;
+           }
+         scan = scan->next;
+       }
+    }
+  /* Still not enough. Split the best block if there is one, allocate
+     new pages otherwise */
+  if (!best)
+    add_single_pages(alloc_new(n, NULL));
+  else if (best->pagecount - n < K)
+    {
+      unlink_page(&unused_pages, best);
+      add_single_pages(best);
+    }
+  else
+    add_single_pages(alloc_split(best, n, NULL));
+}
+
+
+struct page *alloc_single_page(struct page *next)
+{
+  struct page *p;
+
+  if (!single_pages)
+    {
+      scavenge_single_pages(PAGE_GROUP_SIZE);
+    }
+  ASSERT_FREE(single_pages);
+  p = single_pages;
+  single_pages = p->next;
+  p->next = next;
+
+  single_page_count--;
+
+  return p;
+}
+
+void free_single_page(region r, struct page *p)
+/* Assumes freepages_lock held */
+{
+#ifndef NMEMDEBUG
+  ASSERT_INUSE(p, r);
+  set_page_region(PAGENB(p), FREEPAGE);
+#endif
+
+  /* Don't keep too many single pages (a small fraction of total
+     allocated pages) */
+  if (single_page_count > PAGE_GROUP_SIZE * 2)
+    {
+      p->pagecount = 1;
+      coalesce(p);
+    }
+  else
+    {
+      p->next = single_pages;
+      single_pages = p;
+      single_page_count++;
+    }
+}
diff --git a/src/libcompat/regex.c b/src/libcompat/regex.c
new file mode 100644 (file)
index 0000000..440194a
--- /dev/null
@@ -0,0 +1,6271 @@
+/* Extended regular expression matching and search library,
+   version 0.12.
+   (Implements POSIX draft P1003.2/D11.2, except for some of the
+   internationalization features.)
+   Copyright (C) 1993-1999, 2000 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* AIX requires this to be the first thing in the file. */
+#if defined _AIX && !defined REGEX_MALLOC
+  #pragma alloca
+#endif
+
+#undef _GNU_SOURCE
+#define _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifndef PARAMS
+# if defined __GNUC__ || (defined __STDC__ && __STDC__)
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif  /* GCC.  */
+#endif  /* Not PARAMS.  */
+
+#if defined STDC_HEADERS && !defined emacs
+# include <stddef.h>
+#else
+/* We need this for `regex.h', and perhaps for the Emacs include files.  */
+# include <sys/types.h>
+#endif
+
+#define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
+
+/* For platform which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+#ifdef _LIBC
+/* We have to keep the namespace clean.  */
+# define regfree(preg) __regfree (preg)
+# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
+# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
+# define regerror(errcode, preg, errbuf, errbuf_size) \
+       __regerror(errcode, preg, errbuf, errbuf_size)
+# define re_set_registers(bu, re, nu, st, en) \
+       __re_set_registers (bu, re, nu, st, en)
+# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
+       __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+# define re_match(bufp, string, size, pos, regs) \
+       __re_match (bufp, string, size, pos, regs)
+# define re_search(bufp, string, size, startpos, range, regs) \
+       __re_search (bufp, string, size, startpos, range, regs)
+# define re_compile_pattern(pattern, length, bufp) \
+       __re_compile_pattern (pattern, length, bufp)
+# define re_set_syntax(syntax) __re_set_syntax (syntax)
+# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
+       __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
+# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
+
+# define btowc __btowc
+
+/* We are also using some library internals.  */
+# include <locale/localeinfo.h>
+# include <locale/elem-hash.h>
+# include <langinfo.h>
+#endif
+
+/* This is for other GNU distributions with internationalized messages.  */
+#if HAVE_LIBINTL_H || defined _LIBC
+# include <libintl.h>
+# ifdef _LIBC
+#  undef gettext
+#  define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES)
+# endif
+#else
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+# define gettext_noop(String) String
+#endif
+
+/* The `emacs' switch turns on certain matching commands
+   that make sense only in Emacs. */
+#ifdef emacs
+
+# include "lisp.h"
+# include "buffer.h"
+# include "syntax.h"
+
+#else  /* not emacs */
+
+/* If we are not linking with Emacs proper,
+   we can't use the relocating allocator
+   even if config.h says that we can.  */
+# undef REL_ALLOC
+
+# if defined STDC_HEADERS || defined _LIBC
+#  include <stdlib.h>
+# else
+char *malloc ();
+char *realloc ();
+# endif
+
+/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
+   If nothing else has been done, use the method below.  */
+# ifdef INHIBIT_STRING_HEADER
+#  if !(defined HAVE_BZERO && defined HAVE_BCOPY)
+#   if !defined bzero && !defined bcopy
+#    undef INHIBIT_STRING_HEADER
+#   endif
+#  endif
+# endif
+
+/* This is the normal way of making sure we have a bcopy and a bzero.
+   This is used in most programs--a few other programs avoid this
+   by defining INHIBIT_STRING_HEADER.  */
+# ifndef INHIBIT_STRING_HEADER
+#  if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
+#   include <string.h>
+#   ifndef bzero
+#    ifndef _LIBC
+#     define bzero(s, n)       (memset (s, '\0', n), (s))
+#    else
+#     define bzero(s, n)       __bzero (s, n)
+#    endif
+#   endif
+#  else
+#   include <strings.h>
+#   ifndef memcmp
+#    define memcmp(s1, s2, n)  bcmp (s1, s2, n)
+#   endif
+#   ifndef memcpy
+#    define memcpy(d, s, n)    (bcopy (s, d, n), (d))
+#   endif
+#  endif
+# endif
+
+/* Define the syntax stuff for \<, \>, etc.  */
+
+/* This must be nonzero for the wordchar and notwordchar pattern
+   commands in re_match_2.  */
+# ifndef Sword
+#  define Sword 1
+# endif
+
+# ifdef SWITCH_ENUM_BUG
+#  define SWITCH_ENUM_CAST(x) ((int)(x))
+# else
+#  define SWITCH_ENUM_CAST(x) (x)
+# endif
+
+#endif /* not emacs */
+
+#if defined _LIBC || HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#ifndef MB_LEN_MAX
+# define MB_LEN_MAX 1
+#endif
+\f
+/* Get the interface, including the syntax bits.  */
+#include <regex.h>
+
+/* isalpha etc. are used for the character classes.  */
+#include <ctype.h>
+
+/* Jim Meyering writes:
+
+   "... Some ctype macros are valid only for character codes that
+   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
+   using /bin/cc or gcc but without giving an ansi option).  So, all
+   ctype uses should be through macros like ISPRINT...  If
+   STDC_HEADERS is defined, then autoconf has verified that the ctype
+   macros don't need to be guarded with references to isascii. ...
+   Defining isascii to 1 should let any compiler worth its salt
+   eliminate the && through constant folding."
+   Solaris defines some of these symbols so we must undefine them first.  */
+
+#undef ISASCII
+#if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+# define ISASCII(c) 1
+#else
+# define ISASCII(c) isascii(c)
+#endif
+
+#ifdef isblank
+# define ISBLANK(c) (ISASCII (c) && isblank (c))
+#else
+# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+#endif
+#ifdef isgraph
+# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+#else
+# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+#endif
+
+#undef ISPRINT
+#define ISPRINT(c) (ISASCII (c) && isprint (c))
+#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
+#define ISALNUM(c) (ISASCII (c) && isalnum (c))
+#define ISALPHA(c) (ISASCII (c) && isalpha (c))
+#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
+#define ISLOWER(c) (ISASCII (c) && islower (c))
+#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
+#define ISSPACE(c) (ISASCII (c) && isspace (c))
+#define ISUPPER(c) (ISASCII (c) && isupper (c))
+#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
+
+#ifdef _tolower
+# define TOLOWER(c) _tolower(c)
+#else
+# define TOLOWER(c) tolower(c)
+#endif
+
+#ifndef NULL
+# define NULL (void *)0
+#endif
+
+/* We remove any previous definition of `SIGN_EXTEND_CHAR',
+   since ours (we hope) works properly with all combinations of
+   machines, compilers, `char' and `unsigned char' argument types.
+   (Per Bothner suggested the basic approach.)  */
+#undef SIGN_EXTEND_CHAR
+#if __STDC__
+# define SIGN_EXTEND_CHAR(c) ((signed char) (c))
+#else  /* not __STDC__ */
+/* As in Harbison and Steele.  */
+# define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
+#endif
+\f
+#ifndef emacs
+/* How many characters in the character set.  */
+# define CHAR_SET_SIZE 256
+
+# ifdef SYNTAX_TABLE
+
+extern char *re_syntax_table;
+
+# else /* not SYNTAX_TABLE */
+
+static char re_syntax_table[CHAR_SET_SIZE];
+
+static void
+init_syntax_once ()
+{
+   register int c;
+   static int done = 0;
+
+   if (done)
+     return;
+   bzero (re_syntax_table, sizeof re_syntax_table);
+
+   for (c = 0; c < CHAR_SET_SIZE; ++c)
+     if (ISALNUM (c))
+       re_syntax_table[c] = Sword;
+
+   re_syntax_table['_'] = Sword;
+
+   done = 1;
+}
+
+# endif /* not SYNTAX_TABLE */
+
+# define SYNTAX(c) re_syntax_table[(unsigned char) (c)]
+
+#endif /* emacs */
+\f
+/* Should we use malloc or alloca?  If REGEX_MALLOC is not defined, we
+   use `alloca' instead of `malloc'.  This is because using malloc in
+   re_search* or re_match* could cause memory leaks when C-g is used in
+   Emacs; also, malloc is slower and causes storage fragmentation.  On
+   the other hand, malloc is more portable, and easier to debug.
+
+   Because we sometimes use alloca, some routines have to be macros,
+   not functions -- `alloca'-allocated space disappears at the end of the
+   function it is called in.  */
+
+#ifdef REGEX_MALLOC
+
+# define REGEX_ALLOCATE malloc
+# define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
+# define REGEX_FREE free
+
+#else /* not REGEX_MALLOC  */
+
+/* Emacs already defines alloca, sometimes.  */
+# ifndef alloca
+
+/* Make alloca work the best possible way.  */
+#  ifdef __GNUC__
+#   define alloca __builtin_alloca
+#  else /* not __GNUC__ */
+#   if HAVE_ALLOCA_H
+#    include <alloca.h>
+#   endif /* HAVE_ALLOCA_H */
+#  endif /* not __GNUC__ */
+
+# endif /* not alloca */
+
+# define REGEX_ALLOCATE alloca
+
+/* Assumes a `char *destination' variable.  */
+# define REGEX_REALLOCATE(source, osize, nsize)                                \
+  (destination = (char *) alloca (nsize),                              \
+   memcpy (destination, source, osize))
+
+/* No need to do anything to free, after alloca.  */
+# define REGEX_FREE(arg) ((void)0) /* Do nothing!  But inhibit gcc warning.  */
+
+#endif /* not REGEX_MALLOC */
+
+/* Define how to allocate the failure stack.  */
+
+#if defined REL_ALLOC && defined REGEX_MALLOC
+
+# define REGEX_ALLOCATE_STACK(size)                            \
+  r_alloc (&failure_stack_ptr, (size))
+# define REGEX_REALLOCATE_STACK(source, osize, nsize)          \
+  r_re_alloc (&failure_stack_ptr, (nsize))
+# define REGEX_FREE_STACK(ptr)                                 \
+  r_alloc_free (&failure_stack_ptr)
+
+#else /* not using relocating allocator */
+
+# ifdef REGEX_MALLOC
+
+#  define REGEX_ALLOCATE_STACK malloc
+#  define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
+#  define REGEX_FREE_STACK free
+
+# else /* not REGEX_MALLOC */
+
+#  define REGEX_ALLOCATE_STACK alloca
+
+#  define REGEX_REALLOCATE_STACK(source, osize, nsize)                 \
+   REGEX_REALLOCATE (source, osize, nsize)
+/* No need to explicitly free anything.  */
+#  define REGEX_FREE_STACK(arg)
+
+# endif /* not REGEX_MALLOC */
+#endif /* not using relocating allocator */
+
+
+/* True if `size1' is non-NULL and PTR is pointing anywhere inside
+   `string1' or just past its end.  This works if PTR is NULL, which is
+   a good thing.  */
+#define FIRST_STRING_P(ptr)                                    \
+  (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
+
+/* (Re)Allocate N items of type T using malloc, or fail.  */
+#define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
+#define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
+#define RETALLOC_IF(addr, n, t) \
+  if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
+#define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
+
+#define BYTEWIDTH 8 /* In bits.  */
+
+#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
+
+#undef MAX
+#undef MIN
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+typedef char boolean;
+#define false 0
+#define true 1
+
+static int re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp,
+                                       const char *string1, int size1,
+                                       const char *string2, int size2,
+                                       int pos,
+                                       struct re_registers *regs,
+                                       int stop));
+\f
+/* These are the command codes that appear in compiled regular
+   expressions.  Some opcodes are followed by argument bytes.  A
+   command code can specify any interpretation whatsoever for its
+   arguments.  Zero bytes may appear in the compiled regular expression.  */
+
+typedef enum
+{
+  no_op = 0,
+
+  /* Succeed right away--no more backtracking.  */
+  succeed,
+
+        /* Followed by one byte giving n, then by n literal bytes.  */
+  exactn,
+
+        /* Matches any (more or less) character.  */
+  anychar,
+
+        /* Matches any one char belonging to specified set.  First
+           following byte is number of bitmap bytes.  Then come bytes
+           for a bitmap saying which chars are in.  Bits in each byte
+           are ordered low-bit-first.  A character is in the set if its
+           bit is 1.  A character too large to have a bit in the map is
+           automatically not in the set.  */
+  charset,
+
+        /* Same parameters as charset, but match any character that is
+           not one of those specified.  */
+  charset_not,
+
+        /* Start remembering the text that is matched, for storing in a
+           register.  Followed by one byte with the register number, in
+           the range 0 to one less than the pattern buffer's re_nsub
+           field.  Then followed by one byte with the number of groups
+           inner to this one.  (This last has to be part of the
+           start_memory only because we need it in the on_failure_jump
+           of re_match_2.)  */
+  start_memory,
+
+        /* Stop remembering the text that is matched and store it in a
+           memory register.  Followed by one byte with the register
+           number, in the range 0 to one less than `re_nsub' in the
+           pattern buffer, and one byte with the number of inner groups,
+           just like `start_memory'.  (We need the number of inner
+           groups here because we don't have any easy way of finding the
+           corresponding start_memory when we're at a stop_memory.)  */
+  stop_memory,
+
+        /* Match a duplicate of something remembered. Followed by one
+           byte containing the register number.  */
+  duplicate,
+
+        /* Fail unless at beginning of line.  */
+  begline,
+
+        /* Fail unless at end of line.  */
+  endline,
+
+        /* Succeeds if at beginning of buffer (if emacs) or at beginning
+           of string to be matched (if not).  */
+  begbuf,
+
+        /* Analogously, for end of buffer/string.  */
+  endbuf,
+
+        /* Followed by two byte relative address to which to jump.  */
+  jump,
+
+       /* Same as jump, but marks the end of an alternative.  */
+  jump_past_alt,
+
+        /* Followed by two-byte relative address of place to resume at
+           in case of failure.  */
+  on_failure_jump,
+
+        /* Like on_failure_jump, but pushes a placeholder instead of the
+           current string position when executed.  */
+  on_failure_keep_string_jump,
+
+        /* Throw away latest failure point and then jump to following
+           two-byte relative address.  */
+  pop_failure_jump,
+
+        /* Change to pop_failure_jump if know won't have to backtrack to
+           match; otherwise change to jump.  This is used to jump
+           back to the beginning of a repeat.  If what follows this jump
+           clearly won't match what the repeat does, such that we can be
+           sure that there is no use backtracking out of repetitions
+           already matched, then we change it to a pop_failure_jump.
+           Followed by two-byte address.  */
+  maybe_pop_jump,
+
+        /* Jump to following two-byte address, and push a dummy failure
+           point. This failure point will be thrown away if an attempt
+           is made to use it for a failure.  A `+' construct makes this
+           before the first repeat.  Also used as an intermediary kind
+           of jump when compiling an alternative.  */
+  dummy_failure_jump,
+
+       /* Push a dummy failure point and continue.  Used at the end of
+          alternatives.  */
+  push_dummy_failure,
+
+        /* Followed by two-byte relative address and two-byte number n.
+           After matching N times, jump to the address upon failure.  */
+  succeed_n,
+
+        /* Followed by two-byte relative address, and two-byte number n.
+           Jump to the address N times, then fail.  */
+  jump_n,
+
+        /* Set the following two-byte relative address to the
+           subsequent two-byte number.  The address *includes* the two
+           bytes of number.  */
+  set_number_at,
+
+  wordchar,    /* Matches any word-constituent character.  */
+  notwordchar, /* Matches any char that is not a word-constituent.  */
+
+  wordbeg,     /* Succeeds if at word beginning.  */
+  wordend,     /* Succeeds if at word end.  */
+
+  wordbound,   /* Succeeds if at a word boundary.  */
+  notwordbound /* Succeeds if not at a word boundary.  */
+
+#ifdef emacs
+  ,before_dot, /* Succeeds if before point.  */
+  at_dot,      /* Succeeds if at point.  */
+  after_dot,   /* Succeeds if after point.  */
+
+       /* Matches any character whose syntax is specified.  Followed by
+           a byte which contains a syntax code, e.g., Sword.  */
+  syntaxspec,
+
+       /* Matches any character whose syntax is not that specified.  */
+  notsyntaxspec
+#endif /* emacs */
+} re_opcode_t;
+\f
+/* Common operations on the compiled pattern.  */
+
+/* Store NUMBER in two contiguous bytes starting at DESTINATION.  */
+
+#define STORE_NUMBER(destination, number)                              \
+  do {                                                                 \
+    (destination)[0] = (number) & 0377;                                        \
+    (destination)[1] = (number) >> 8;                                  \
+  } while (0)
+
+/* Same as STORE_NUMBER, except increment DESTINATION to
+   the byte after where the number is stored.  Therefore, DESTINATION
+   must be an lvalue.  */
+
+#define STORE_NUMBER_AND_INCR(destination, number)                     \
+  do {                                                                 \
+    STORE_NUMBER (destination, number);                                        \
+    (destination) += 2;                                                        \
+  } while (0)
+
+/* Put into DESTINATION a number stored in two contiguous bytes starting
+   at SOURCE.  */
+
+#define EXTRACT_NUMBER(destination, source)                            \
+  do {                                                                 \
+    (destination) = *(source) & 0377;                                  \
+    (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8;          \
+  } while (0)
+
+#ifdef DEBUG
+static void extract_number _RE_ARGS ((int *dest, unsigned char *source));
+static void
+extract_number (dest, source)
+    int *dest;
+    unsigned char *source;
+{
+  int temp = SIGN_EXTEND_CHAR (*(source + 1));
+  *dest = *source & 0377;
+  *dest += temp << 8;
+}
+
+# ifndef EXTRACT_MACROS /* To debug the macros.  */
+#  undef EXTRACT_NUMBER
+#  define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
+# endif /* not EXTRACT_MACROS */
+
+#endif /* DEBUG */
+
+/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
+   SOURCE must be an lvalue.  */
+
+#define EXTRACT_NUMBER_AND_INCR(destination, source)                   \
+  do {                                                                 \
+    EXTRACT_NUMBER (destination, source);                              \
+    (source) += 2;                                                     \
+  } while (0)
+
+#ifdef DEBUG
+static void extract_number_and_incr _RE_ARGS ((int *destination,
+                                              unsigned char **source));
+static void
+extract_number_and_incr (destination, source)
+    int *destination;
+    unsigned char **source;
+{
+  extract_number (destination, *source);
+  *source += 2;
+}
+
+# ifndef EXTRACT_MACROS
+#  undef EXTRACT_NUMBER_AND_INCR
+#  define EXTRACT_NUMBER_AND_INCR(dest, src) \
+  extract_number_and_incr (&dest, &src)
+# endif /* not EXTRACT_MACROS */
+
+#endif /* DEBUG */
+\f
+/* If DEBUG is defined, Regex prints many voluminous messages about what
+   it is doing (if the variable `debug' is nonzero).  If linked with the
+   main program in `iregex.c', you can enter patterns and strings
+   interactively.  And if linked with the main program in `main.c' and
+   the other test files, you can run the already-written tests.  */
+
+#ifdef DEBUG
+
+/* We use standard I/O for debugging.  */
+# include <stdio.h>
+
+/* It is useful to test things that ``must'' be true when debugging.  */
+# include <assert.h>
+
+static int debug;
+
+# define DEBUG_STATEMENT(e) e
+# define DEBUG_PRINT1(x) if (debug) printf (x)
+# define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
+# define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
+# define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
+# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)                                 \
+  if (debug) print_partial_compiled_pattern (s, e)
+# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)                        \
+  if (debug) print_double_string (w, s1, sz1, s2, sz2)
+
+
+/* Print the fastmap in human-readable form.  */
+
+void
+print_fastmap (fastmap)
+    char *fastmap;
+{
+  unsigned was_a_range = 0;
+  unsigned i = 0;
+
+  while (i < (1 << BYTEWIDTH))
+    {
+      if (fastmap[i++])
+       {
+         was_a_range = 0;
+          putchar (i - 1);
+          while (i < (1 << BYTEWIDTH)  &&  fastmap[i])
+            {
+              was_a_range = 1;
+              i++;
+            }
+         if (was_a_range)
+            {
+              printf ("-");
+              putchar (i - 1);
+            }
+        }
+    }
+  putchar ('\n');
+}
+
+
+/* Print a compiled pattern string in human-readable form, starting at
+   the START pointer into it and ending just before the pointer END.  */
+
+void
+print_partial_compiled_pattern (start, end)
+    unsigned char *start;
+    unsigned char *end;
+{
+  int mcnt, mcnt2;
+  unsigned char *p1;
+  unsigned char *p = start;
+  unsigned char *pend = end;
+
+  if (start == NULL)
+    {
+      printf ("(null)\n");
+      return;
+    }
+
+  /* Loop over pattern commands.  */
+  while (p < pend)
+    {
+#ifdef _LIBC
+      printf ("%t:\t", p - start);
+#else
+      printf ("%ld:\t", (long int) (p - start));
+#endif
+
+      switch ((re_opcode_t) *p++)
+       {
+        case no_op:
+          printf ("/no_op");
+          break;
+
+       case exactn:
+         mcnt = *p++;
+          printf ("/exactn/%d", mcnt);
+          do
+           {
+              putchar ('/');
+             putchar (*p++);
+            }
+          while (--mcnt);
+          break;
+
+       case start_memory:
+          mcnt = *p++;
+          printf ("/start_memory/%d/%d", mcnt, *p++);
+          break;
+
+       case stop_memory:
+          mcnt = *p++;
+         printf ("/stop_memory/%d/%d", mcnt, *p++);
+          break;
+
+       case duplicate:
+         printf ("/duplicate/%d", *p++);
+         break;
+
+       case anychar:
+         printf ("/anychar");
+         break;
+
+       case charset:
+        case charset_not:
+          {
+            register int c, last = -100;
+           register int in_range = 0;
+
+           printf ("/charset [%s",
+                   (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
+
+            assert (p + *p < pend);
+
+            for (c = 0; c < 256; c++)
+             if (c / 8 < *p
+                 && (p[1 + (c/8)] & (1 << (c % 8))))
+               {
+                 /* Are we starting a range?  */
+                 if (last + 1 == c && ! in_range)
+                   {
+                     putchar ('-');
+                     in_range = 1;
+                   }
+                 /* Have we broken a range?  */
+                 else if (last + 1 != c && in_range)
+              {
+                     putchar (last);
+                     in_range = 0;
+                   }
+
+                 if (! in_range)
+                   putchar (c);
+
+                 last = c;
+              }
+
+           if (in_range)
+             putchar (last);
+
+           putchar (']');
+
+           p += 1 + *p;
+         }
+         break;
+
+       case begline:
+         printf ("/begline");
+          break;
+
+       case endline:
+          printf ("/endline");
+          break;
+
+       case on_failure_jump:
+          extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/on_failure_jump to %t", p + mcnt - start);
+#else
+         printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start));
+#endif
+          break;
+
+       case on_failure_keep_string_jump:
+          extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/on_failure_keep_string_jump to %t", p + mcnt - start);
+#else
+         printf ("/on_failure_keep_string_jump to %ld",
+                 (long int) (p + mcnt - start));
+#endif
+          break;
+
+       case dummy_failure_jump:
+          extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/dummy_failure_jump to %t", p + mcnt - start);
+#else
+         printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start));
+#endif
+          break;
+
+       case push_dummy_failure:
+          printf ("/push_dummy_failure");
+          break;
+
+        case maybe_pop_jump:
+          extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/maybe_pop_jump to %t", p + mcnt - start);
+#else
+         printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start));
+#endif
+         break;
+
+        case pop_failure_jump:
+         extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/pop_failure_jump to %t", p + mcnt - start);
+#else
+         printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start));
+#endif
+         break;
+
+        case jump_past_alt:
+         extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/jump_past_alt to %t", p + mcnt - start);
+#else
+         printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start));
+#endif
+         break;
+
+        case jump:
+         extract_number_and_incr (&mcnt, &p);
+#ifdef _LIBC
+         printf ("/jump to %t", p + mcnt - start);
+#else
+         printf ("/jump to %ld", (long int) (p + mcnt - start));
+#endif
+         break;
+
+        case succeed_n:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+#ifdef _LIBC
+         printf ("/succeed_n to %t, %d times", p1 - start, mcnt2);
+#else
+         printf ("/succeed_n to %ld, %d times",
+                 (long int) (p1 - start), mcnt2);
+#endif
+          break;
+
+        case jump_n:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+         printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
+          break;
+
+        case set_number_at:
+          extract_number_and_incr (&mcnt, &p);
+         p1 = p + mcnt;
+          extract_number_and_incr (&mcnt2, &p);
+#ifdef _LIBC
+         printf ("/set_number_at location %t to %d", p1 - start, mcnt2);
+#else
+         printf ("/set_number_at location %ld to %d",
+                 (long int) (p1 - start), mcnt2);
+#endif
+          break;
+
+        case wordbound:
+         printf ("/wordbound");
+         break;
+
+       case notwordbound:
+         printf ("/notwordbound");
+          break;
+
+       case wordbeg:
+         printf ("/wordbeg");
+         break;
+
+       case wordend:
+         printf ("/wordend");
+
+# ifdef emacs
+       case before_dot:
+         printf ("/before_dot");
+          break;
+
+       case at_dot:
+         printf ("/at_dot");
+          break;
+
+       case after_dot:
+         printf ("/after_dot");
+          break;
+
+       case syntaxspec:
+          printf ("/syntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+          break;
+
+       case notsyntaxspec:
+          printf ("/notsyntaxspec");
+         mcnt = *p++;
+         printf ("/%d", mcnt);
+         break;
+# endif /* emacs */
+
+       case wordchar:
+         printf ("/wordchar");
+          break;
+
+       case notwordchar:
+         printf ("/notwordchar");
+          break;
+
+       case begbuf:
+         printf ("/begbuf");
+          break;
+
+       case endbuf:
+         printf ("/endbuf");
+          break;
+
+        default:
+          printf ("?%d", *(p-1));
+       }
+
+      putchar ('\n');
+    }
+
+#ifdef _LIBC
+  printf ("%t:\tend of pattern.\n", p - start);
+#else
+  printf ("%ld:\tend of pattern.\n", (long int) (p - start));
+#endif
+}
+
+
+void
+print_compiled_pattern (bufp)
+    struct re_pattern_buffer *bufp;
+{
+  unsigned char *buffer = bufp->buffer;
+
+  print_partial_compiled_pattern (buffer, buffer + bufp->used);
+  printf ("%ld bytes used/%ld bytes allocated.\n",
+         bufp->used, bufp->allocated);
+
+  if (bufp->fastmap_accurate && bufp->fastmap)
+    {
+      printf ("fastmap: ");
+      print_fastmap (bufp->fastmap);
+    }
+
+#ifdef _LIBC
+  printf ("re_nsub: %Zd\t", bufp->re_nsub);
+#else
+  printf ("re_nsub: %ld\t", (long int) bufp->re_nsub);
+#endif
+  printf ("regs_alloc: %d\t", bufp->regs_allocated);
+  printf ("can_be_null: %d\t", bufp->can_be_null);
+  printf ("newline_anchor: %d\n", bufp->newline_anchor);
+  printf ("no_sub: %d\t", bufp->no_sub);
+  printf ("not_bol: %d\t", bufp->not_bol);
+  printf ("not_eol: %d\t", bufp->not_eol);
+  printf ("syntax: %lx\n", bufp->syntax);
+  /* Perhaps we should print the translate table?  */
+}
+
+
+void
+print_double_string (where, string1, size1, string2, size2)
+    const char *where;
+    const char *string1;
+    const char *string2;
+    int size1;
+    int size2;
+{
+  int this_char;
+
+  if (where == NULL)
+    printf ("(null)");
+  else
+    {
+      if (FIRST_STRING_P (where))
+        {
+          for (this_char = where - string1; this_char < size1; this_char++)
+            putchar (string1[this_char]);
+
+          where = string2;
+        }
+
+      for (this_char = where - string2; this_char < size2; this_char++)
+        putchar (string2[this_char]);
+    }
+}
+
+void
+printchar (c)
+     int c;
+{
+  putc (c, stderr);
+}
+
+#else /* not DEBUG */
+
+# undef assert
+# define assert(e)
+
+# define DEBUG_STATEMENT(e)
+# define DEBUG_PRINT1(x)
+# define DEBUG_PRINT2(x1, x2)
+# define DEBUG_PRINT3(x1, x2, x3)
+# define DEBUG_PRINT4(x1, x2, x3, x4)
+# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
+# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
+
+#endif /* not DEBUG */
+\f
+/* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
+   also be assigned to arbitrarily: each pattern buffer stores its own
+   syntax, so it can be changed between regex compilations.  */
+/* This has no initializer because initialized variables in Emacs
+   become read-only after dumping.  */
+reg_syntax_t re_syntax_options;
+
+
+/* Specify the precise syntax of regexps for compilation.  This provides
+   for compatibility for various utilities which historically have
+   different, incompatible syntaxes.
+
+   The argument SYNTAX is a bit mask comprised of the various bits
+   defined in regex.h.  We return the old syntax.  */
+
+reg_syntax_t
+re_set_syntax (syntax)
+    reg_syntax_t syntax;
+{
+  reg_syntax_t ret = re_syntax_options;
+
+  re_syntax_options = syntax;
+#ifdef DEBUG
+  if (syntax & RE_DEBUG)
+    debug = 1;
+  else if (debug) /* was on but now is not */
+    debug = 0;
+#endif /* DEBUG */
+  return ret;
+}
+#ifdef _LIBC
+weak_alias (__re_set_syntax, re_set_syntax)
+#endif
+\f
+/* This table gives an error message for each of the error codes listed
+   in regex.h.  Obviously the order here has to be same as there.
+   POSIX doesn't require that we do anything for REG_NOERROR,
+   but why not be nice?  */
+
+static const char re_error_msgid[] =
+  {
+#define REG_NOERROR_IDX        0
+    gettext_noop ("Success")   /* REG_NOERROR */
+    "\0"
+#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
+    gettext_noop ("No match")  /* REG_NOMATCH */
+    "\0"
+#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match")
+    gettext_noop ("Invalid regular expression") /* REG_BADPAT */
+    "\0"
+#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
+    gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
+    "\0"
+#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
+    gettext_noop ("Invalid character class name") /* REG_ECTYPE */
+    "\0"
+#define REG_EESCAPE_IDX        (REG_ECTYPE_IDX + sizeof "Invalid character class name")
+    gettext_noop ("Trailing backslash") /* REG_EESCAPE */
+    "\0"
+#define REG_ESUBREG_IDX        (REG_EESCAPE_IDX + sizeof "Trailing backslash")
+    gettext_noop ("Invalid back reference") /* REG_ESUBREG */
+    "\0"
+#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference")
+    gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */
+    "\0"
+#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^")
+    gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
+    "\0"
+#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
+    gettext_noop ("Unmatched \\{") /* REG_EBRACE */
+    "\0"
+#define REG_BADBR_IDX  (REG_EBRACE_IDX + sizeof "Unmatched \\{")
+    gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
+    "\0"
+#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
+    gettext_noop ("Invalid range end") /* REG_ERANGE */
+    "\0"
+#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end")
+    gettext_noop ("Memory exhausted") /* REG_ESPACE */
+    "\0"
+#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted")
+    gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
+    "\0"
+#define REG_EEND_IDX   (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
+    gettext_noop ("Premature end of regular expression") /* REG_EEND */
+    "\0"
+#define REG_ESIZE_IDX  (REG_EEND_IDX + sizeof "Premature end of regular expression")
+    gettext_noop ("Regular expression too big") /* REG_ESIZE */
+    "\0"
+#define REG_ERPAREN_IDX        (REG_ESIZE_IDX + sizeof "Regular expression too big")
+    gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
+  };
+
+static const size_t re_error_msgid_idx[] =
+  {
+    REG_NOERROR_IDX,
+    REG_NOMATCH_IDX,
+    REG_BADPAT_IDX,
+    REG_ECOLLATE_IDX,
+    REG_ECTYPE_IDX,
+    REG_EESCAPE_IDX,
+    REG_ESUBREG_IDX,
+    REG_EBRACK_IDX,
+    REG_EPAREN_IDX,
+    REG_EBRACE_IDX,
+    REG_BADBR_IDX,
+    REG_ERANGE_IDX,
+    REG_ESPACE_IDX,
+    REG_BADRPT_IDX,
+    REG_EEND_IDX,
+    REG_ESIZE_IDX,
+    REG_ERPAREN_IDX
+  };
+\f
+/* Avoiding alloca during matching, to placate r_alloc.  */
+
+/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
+   searching and matching functions should not call alloca.  On some
+   systems, alloca is implemented in terms of malloc, and if we're
+   using the relocating allocator routines, then malloc could cause a
+   relocation, which might (if the strings being searched are in the
+   ralloc heap) shift the data out from underneath the regexp
+   routines.
+
+   Here's another reason to avoid allocation: Emacs
+   processes input from X in a signal handler; processing X input may
+   call malloc; if input arrives while a matching routine is calling
+   malloc, then we're scrod.  But Emacs can't just block input while
+   calling matching routines; then we don't notice interrupts when
+   they come in.  So, Emacs blocks input around all regexp calls
+   except the matching calls, which it leaves unprotected, in the
+   faith that they will not malloc.  */
+
+/* Normally, this is fine.  */
+#define MATCH_MAY_ALLOCATE
+
+/* When using GNU C, we are not REALLY using the C alloca, no matter
+   what config.h may say.  So don't take precautions for it.  */
+#ifdef __GNUC__
+# undef C_ALLOCA
+#endif
+
+/* The match routines may not allocate if (1) they would do it with malloc
+   and (2) it's not safe for them to use malloc.
+   Note that if REL_ALLOC is defined, matching would not use malloc for the
+   failure stack, but we would still use it for the register vectors;
+   so REL_ALLOC should not affect this.  */
+#if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
+# undef MATCH_MAY_ALLOCATE
+#endif
+
+\f
+/* Failure stack declarations and macros; both re_compile_fastmap and
+   re_match_2 use a failure stack.  These have to be macros because of
+   REGEX_ALLOCATE_STACK.  */
+
+
+/* Number of failure points for which to initially allocate space
+   when matching.  If this number is exceeded, we allocate more
+   space, so it is not a hard limit.  */
+#ifndef INIT_FAILURE_ALLOC
+# define INIT_FAILURE_ALLOC 5
+#endif
+
+/* Roughly the maximum number of failure points on the stack.  Would be
+   exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
+   This is a variable only so users of regex can assign to it; we never
+   change it ourselves.  */
+
+#ifdef INT_IS_16BIT
+
+# if defined MATCH_MAY_ALLOCATE
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+long int re_max_failures = 4000;
+# else
+long int re_max_failures = 2000;
+# endif
+
+union fail_stack_elt
+{
+  unsigned char *pointer;
+  long int integer;
+};
+
+typedef union fail_stack_elt fail_stack_elt_t;
+
+typedef struct
+{
+  fail_stack_elt_t *stack;
+  unsigned long int size;
+  unsigned long int avail;             /* Offset of next open position.  */
+} fail_stack_type;
+
+#else /* not INT_IS_16BIT */
+
+# if defined MATCH_MAY_ALLOCATE
+/* 4400 was enough to cause a crash on Alpha OSF/1,
+   whose default stack limit is 2mb.  */
+int re_max_failures = 4000;
+# else
+int re_max_failures = 2000;
+# endif
+
+union fail_stack_elt
+{
+  unsigned char *pointer;
+  int integer;
+};
+
+typedef union fail_stack_elt fail_stack_elt_t;
+
+typedef struct
+{
+  fail_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} fail_stack_type;
+
+#endif /* INT_IS_16BIT */
+
+#define FAIL_STACK_EMPTY()     (fail_stack.avail == 0)
+#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
+#define FAIL_STACK_FULL()      (fail_stack.avail == fail_stack.size)
+
+
+/* Define macros to initialize and free the failure stack.
+   Do `return -2' if the alloc fails.  */
+
+#ifdef MATCH_MAY_ALLOCATE
+# define INIT_FAIL_STACK()                                             \
+  do {                                                                 \
+    fail_stack.stack = (fail_stack_elt_t *)                            \
+      REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \
+                                                                       \
+    if (fail_stack.stack == NULL)                                      \
+      return -2;                                                       \
+                                                                       \
+    fail_stack.size = INIT_FAILURE_ALLOC;                              \
+    fail_stack.avail = 0;                                              \
+  } while (0)
+
+# define RESET_FAIL_STACK()  REGEX_FREE_STACK (fail_stack.stack)
+#else
+# define INIT_FAIL_STACK()                                             \
+  do {                                                                 \
+    fail_stack.avail = 0;                                              \
+  } while (0)
+
+# define RESET_FAIL_STACK()
+#endif
+
+
+/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
+
+   Return 1 if succeeds, and 0 if either ran out of memory
+   allocating space for it or it was already too large.
+
+   REGEX_REALLOCATE_STACK requires `destination' be declared.   */
+
+#define DOUBLE_FAIL_STACK(fail_stack)                                  \
+  ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS)        \
+   ? 0                                                                 \
+   : ((fail_stack).stack = (fail_stack_elt_t *)                                \
+        REGEX_REALLOCATE_STACK ((fail_stack).stack,                    \
+          (fail_stack).size * sizeof (fail_stack_elt_t),               \
+          ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)),       \
+                                                                       \
+      (fail_stack).stack == NULL                                       \
+      ? 0                                                              \
+      : ((fail_stack).size <<= 1,                                      \
+         1)))
+
+
+/* Push pointer POINTER on FAIL_STACK.
+   Return 1 if was able to do so and 0 if ran out of memory allocating
+   space to do so.  */
+#define PUSH_PATTERN_OP(POINTER, FAIL_STACK)                           \
+  ((FAIL_STACK_FULL ()                                                 \
+    && !DOUBLE_FAIL_STACK (FAIL_STACK))                                        \
+   ? 0                                                                 \
+   : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER,      \
+      1))
+
+/* Push a pointer value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_POINTER(item)                                     \
+  fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
+
+/* This pushes an integer-valued item onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_INT(item)                                 \
+  fail_stack.stack[fail_stack.avail++].integer = (item)
+
+/* Push a fail_stack_elt_t value onto the failure stack.
+   Assumes the variable `fail_stack'.  Probably should only
+   be called from within `PUSH_FAILURE_POINT'.  */
+#define PUSH_FAILURE_ELT(item)                                 \
+  fail_stack.stack[fail_stack.avail++] =  (item)
+
+/* These three POP... operations complement the three PUSH... operations.
+   All assume that `fail_stack' is nonempty.  */
+#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
+#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
+#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
+
+/* Used to omit pushing failure point id's when we're not debugging.  */
+#ifdef DEBUG
+# define DEBUG_PUSH PUSH_FAILURE_INT
+# define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
+#else
+# define DEBUG_PUSH(item)
+# define DEBUG_POP(item_addr)
+#endif
+
+
+/* Push the information about the state we will need
+   if we ever fail back to it.
+
+   Requires variables fail_stack, regstart, regend, reg_info, and
+   num_regs_pushed be declared.  DOUBLE_FAIL_STACK requires `destination'
+   be declared.
+
+   Does `return FAILURE_CODE' if runs out of memory.  */
+
+#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code)  \
+  do {                                                                 \
+    char *destination;                                                 \
+    /* Must be int, so when we don't save any registers, the arithmetic        \
+       of 0 + -1 isn't done as unsigned.  */                           \
+    /* Can't be int, since there is not a shred of a guarantee that int        \
+       is wide enough to hold a value of something to which pointer can        \
+       be assigned */                                                  \
+    active_reg_t this_reg;                                             \
+                                                                       \
+    DEBUG_STATEMENT (failure_id++);                                    \
+    DEBUG_STATEMENT (nfailure_points_pushed++);                                \
+    DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id);          \
+    DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
+    DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
+                                                                       \
+    DEBUG_PRINT2 ("  slots needed: %ld\n", NUM_FAILURE_ITEMS);         \
+    DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);      \
+                                                                       \
+    /* Ensure we have enough space allocated for what we will push.  */        \
+    while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS)                  \
+      {                                                                        \
+        if (!DOUBLE_FAIL_STACK (fail_stack))                           \
+          return failure_code;                                         \
+                                                                       \
+        DEBUG_PRINT2 ("\n  Doubled stack; size now: %d\n",             \
+                      (fail_stack).size);                              \
+        DEBUG_PRINT2 ("  slots available: %d\n", REMAINING_AVAIL_SLOTS);\
+      }                                                                        \
+                                                                       \
+    /* Push the info, starting with the registers.  */                 \
+    DEBUG_PRINT1 ("\n");                                               \
+                                                                       \
+    if (1)                                                             \
+      for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
+          this_reg++)                                                  \
+       {                                                               \
+         DEBUG_PRINT2 ("  Pushing reg: %lu\n", this_reg);              \
+         DEBUG_STATEMENT (num_regs_pushed++);                          \
+                                                                       \
+         DEBUG_PRINT2 ("    start: %p\n", regstart[this_reg]);         \
+         PUSH_FAILURE_POINTER (regstart[this_reg]);                    \
+                                                                       \
+         DEBUG_PRINT2 ("    end: %p\n", regend[this_reg]);             \
+         PUSH_FAILURE_POINTER (regend[this_reg]);                      \
+                                                                       \
+         DEBUG_PRINT2 ("    info: %p\n      ",                         \
+                       reg_info[this_reg].word.pointer);               \
+         DEBUG_PRINT2 (" match_null=%d",                               \
+                       REG_MATCH_NULL_STRING_P (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));  \
+         DEBUG_PRINT2 (" matched_something=%d",                        \
+                       MATCHED_SOMETHING (reg_info[this_reg]));        \
+         DEBUG_PRINT2 (" ever_matched=%d",                             \
+                       EVER_MATCHED_SOMETHING (reg_info[this_reg]));   \
+         DEBUG_PRINT1 ("\n");                                          \
+         PUSH_FAILURE_ELT (reg_info[this_reg].word);                   \
+       }                                                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing  low active reg: %ld\n", lowest_active_reg);\
+    PUSH_FAILURE_INT (lowest_active_reg);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing high active reg: %ld\n", highest_active_reg);\
+    PUSH_FAILURE_INT (highest_active_reg);                             \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing pattern %p:\n", pattern_place);           \
+    DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);          \
+    PUSH_FAILURE_POINTER (pattern_place);                              \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing string %p: `", string_place);             \
+    DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
+                                size2);                                \
+    DEBUG_PRINT1 ("'\n");                                              \
+    PUSH_FAILURE_POINTER (string_place);                               \
+                                                                       \
+    DEBUG_PRINT2 ("  Pushing failure id: %u\n", failure_id);           \
+    DEBUG_PUSH (failure_id);                                           \
+  } while (0)
+
+/* This is the number of items that are pushed and popped on the stack
+   for each register.  */
+#define NUM_REG_ITEMS  3
+
+/* Individual items aside from the registers.  */
+#ifdef DEBUG
+# define NUM_NONREG_ITEMS 5 /* Includes failure point id.  */
+#else
+# define NUM_NONREG_ITEMS 4
+#endif
+
+/* We push at most this many items on the stack.  */
+/* We used to use (num_regs - 1), which is the number of registers
+   this regexp will save; but that was changed to 5
+   to avoid stack overflow for a regexp with lots of parens.  */
+#define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
+
+/* We actually push this many items.  */
+#define NUM_FAILURE_ITEMS                              \
+  (((0                                                 \
+     ? 0 : highest_active_reg - lowest_active_reg + 1) \
+    * NUM_REG_ITEMS)                                   \
+   + NUM_NONREG_ITEMS)
+
+/* How many items can still be added to the stack without overflowing it.  */
+#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
+
+
+/* Pops what PUSH_FAIL_STACK pushes.
+
+   We restore into the parameters, all of which should be lvalues:
+     STR -- the saved data position.
+     PAT -- the saved pattern position.
+     LOW_REG, HIGH_REG -- the highest and lowest active registers.
+     REGSTART, REGEND -- arrays of string positions.
+     REG_INFO -- array of information about each subexpression.
+
+   Also assumes the variables `fail_stack' and (if debugging), `bufp',
+   `pend', `string1', `size1', `string2', and `size2'.  */
+
+#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
+{                                                                      \
+  DEBUG_STATEMENT (unsigned failure_id;)                               \
+  active_reg_t this_reg;                                               \
+  const unsigned char *string_temp;                                    \
+                                                                       \
+  assert (!FAIL_STACK_EMPTY ());                                       \
+                                                                       \
+  /* Remove failure points and point to how many regs pushed.  */      \
+  DEBUG_PRINT1 ("POP_FAILURE_POINT:\n");                               \
+  DEBUG_PRINT2 ("  Before pop, next avail: %d\n", fail_stack.avail);   \
+  DEBUG_PRINT2 ("                    size: %d\n", fail_stack.size);    \
+                                                                       \
+  assert (fail_stack.avail >= NUM_NONREG_ITEMS);                       \
+                                                                       \
+  DEBUG_POP (&failure_id);                                             \
+  DEBUG_PRINT2 ("  Popping failure id: %u\n", failure_id);             \
+                                                                       \
+  /* If the saved string location is NULL, it came from an             \
+     on_failure_keep_string_jump opcode, and we want to throw away the \
+     saved NULL, thus retaining our current position in the string.  */        \
+  string_temp = POP_FAILURE_POINTER ();                                        \
+  if (string_temp != NULL)                                             \
+    str = (const char *) string_temp;                                  \
+                                                                       \
+  DEBUG_PRINT2 ("  Popping string %p: `", str);                                \
+  DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);     \
+  DEBUG_PRINT1 ("'\n");                                                        \
+                                                                       \
+  pat = (unsigned char *) POP_FAILURE_POINTER ();                      \
+  DEBUG_PRINT2 ("  Popping pattern %p:\n", pat);                       \
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);                      \
+                                                                       \
+  /* Restore register info.  */                                                \
+  high_reg = (active_reg_t) POP_FAILURE_INT ();                                \
+  DEBUG_PRINT2 ("  Popping high active reg: %ld\n", high_reg);         \
+                                                                       \
+  low_reg = (active_reg_t) POP_FAILURE_INT ();                         \
+  DEBUG_PRINT2 ("  Popping  low active reg: %ld\n", low_reg);          \
+                                                                       \
+  if (1)                                                               \
+    for (this_reg = high_reg; this_reg >= low_reg; this_reg--)         \
+      {                                                                        \
+       DEBUG_PRINT2 ("    Popping reg: %ld\n", this_reg);              \
+                                                                       \
+       reg_info[this_reg].word = POP_FAILURE_ELT ();                   \
+       DEBUG_PRINT2 ("      info: %p\n",                               \
+                     reg_info[this_reg].word.pointer);                 \
+                                                                       \
+       regend[this_reg] = (const char *) POP_FAILURE_POINTER ();       \
+       DEBUG_PRINT2 ("      end: %p\n", regend[this_reg]);             \
+                                                                       \
+       regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();     \
+       DEBUG_PRINT2 ("      start: %p\n", regstart[this_reg]);         \
+      }                                                                        \
+  else                                                                 \
+    {                                                                  \
+      for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
+       {                                                               \
+         reg_info[this_reg].word.integer = 0;                          \
+         regend[this_reg] = 0;                                         \
+         regstart[this_reg] = 0;                                       \
+       }                                                               \
+      highest_active_reg = high_reg;                                   \
+    }                                                                  \
+                                                                       \
+  set_regs_matched_done = 0;                                           \
+  DEBUG_STATEMENT (nfailure_points_popped++);                          \
+} /* POP_FAILURE_POINT */
+
+
+\f
+/* Structure for per-register (a.k.a. per-group) information.
+   Other register information, such as the
+   starting and ending positions (which are addresses), and the list of
+   inner groups (which is a bits list) are maintained in separate
+   variables.
+
+   We are making a (strictly speaking) nonportable assumption here: that
+   the compiler will pack our bit fields into something that fits into
+   the type of `word', i.e., is something that fits into one item on the
+   failure stack.  */
+
+
+/* Declarations and macros for re_match_2.  */
+
+typedef union
+{
+  fail_stack_elt_t word;
+  struct
+  {
+      /* This field is one if this group can match the empty string,
+         zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
+#define MATCH_NULL_UNSET_VALUE 3
+    unsigned match_null_string_p : 2;
+    unsigned is_active : 1;
+    unsigned matched_something : 1;
+    unsigned ever_matched_something : 1;
+  } bits;
+} register_info_type;
+
+#define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
+#define IS_ACTIVE(R)  ((R).bits.is_active)
+#define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
+#define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
+
+
+/* Call this when have matched a real character; it sets `matched' flags
+   for the subexpressions which we are currently inside.  Also records
+   that those subexprs have matched.  */
+#define SET_REGS_MATCHED()                                             \
+  do                                                                   \
+    {                                                                  \
+      if (!set_regs_matched_done)                                      \
+       {                                                               \
+         active_reg_t r;                                               \
+         set_regs_matched_done = 1;                                    \
+         for (r = lowest_active_reg; r <= highest_active_reg; r++)     \
+           {                                                           \
+             MATCHED_SOMETHING (reg_info[r])                           \
+               = EVER_MATCHED_SOMETHING (reg_info[r])                  \
+               = 1;                                                    \
+           }                                                           \
+       }                                                               \
+    }                                                                  \
+  while (0)
+
+/* Registers are set to a sentinel when they haven't yet matched.  */
+static char reg_unset_dummy;
+#define REG_UNSET_VALUE (&reg_unset_dummy)
+#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
+\f
+/* Subroutine declarations and macros for regex_compile.  */
+
+static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size,
+                                             reg_syntax_t syntax,
+                                             struct re_pattern_buffer *bufp));
+static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg));
+static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                int arg1, int arg2));
+static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                 int arg, unsigned char *end));
+static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc,
+                                 int arg1, int arg2, unsigned char *end));
+static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p,
+                                          reg_syntax_t syntax));
+static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend,
+                                          reg_syntax_t syntax));
+static reg_errcode_t compile_range _RE_ARGS ((unsigned int range_start,
+                                             const char **p_ptr,
+                                             const char *pend,
+                                             char *translate,
+                                             reg_syntax_t syntax,
+                                             unsigned char *b));
+
+/* Fetch the next character in the uncompiled pattern---translating it
+   if necessary.  Also cast from a signed character in the constant
+   string passed to us by the user to an unsigned char that we can use
+   as an array index (in, e.g., `translate').  */
+#ifndef PATFETCH
+# define PATFETCH(c)                                                   \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (unsigned char) *p++;                                          \
+    if (translate) c = (unsigned char) translate[c];                   \
+  } while (0)
+#endif
+
+/* Fetch the next character in the uncompiled pattern, with no
+   translation.  */
+#define PATFETCH_RAW(c)                                                        \
+  do {if (p == pend) return REG_EEND;                                  \
+    c = (unsigned char) *p++;                                          \
+  } while (0)
+
+/* Go backwards one character in the pattern.  */
+#define PATUNFETCH p--
+
+
+/* If `translate' is non-null, return translate[D], else just D.  We
+   cast the subscript to translate because some data is declared as
+   `char *', to avoid warnings when a string constant is passed.  But
+   when we use a character as a subscript we must make it unsigned.  */
+#ifndef TRANSLATE
+# define TRANSLATE(d) \
+  (translate ? (char) translate[(unsigned char) (d)] : (d))
+#endif
+
+
+/* Macros for outputting the compiled pattern into `buffer'.  */
+
+/* If the buffer isn't allocated when it comes in, use this.  */
+#define INIT_BUF_SIZE  32
+
+/* Make sure we have at least N more bytes of space in buffer.  */
+#define GET_BUFFER_SPACE(n)                                            \
+    while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \
+      EXTEND_BUFFER ()
+
+/* Make sure we have one more byte of buffer space and then add C to it.  */
+#define BUF_PUSH(c)                                                    \
+  do {                                                                 \
+    GET_BUFFER_SPACE (1);                                              \
+    *b++ = (unsigned char) (c);                                                \
+  } while (0)
+
+
+/* Ensure we have two more bytes of buffer space and then append C1 and C2.  */
+#define BUF_PUSH_2(c1, c2)                                             \
+  do {                                                                 \
+    GET_BUFFER_SPACE (2);                                              \
+    *b++ = (unsigned char) (c1);                                       \
+    *b++ = (unsigned char) (c2);                                       \
+  } while (0)
+
+
+/* As with BUF_PUSH_2, except for three bytes.  */
+#define BUF_PUSH_3(c1, c2, c3)                                         \
+  do {                                                                 \
+    GET_BUFFER_SPACE (3);                                              \
+    *b++ = (unsigned char) (c1);                                       \
+    *b++ = (unsigned char) (c2);                                       \
+    *b++ = (unsigned char) (c3);                                       \
+  } while (0)
+
+
+/* Store a jump with opcode OP at LOC to location TO.  We store a
+   relative address offset by the three bytes the jump itself occupies.  */
+#define STORE_JUMP(op, loc, to) \
+  store_op1 (op, loc, (int) ((to) - (loc) - 3))
+
+/* Likewise, for a two-argument jump.  */
+#define STORE_JUMP2(op, loc, to, arg) \
+  store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
+
+/* Like `STORE_JUMP', but for inserting.  Assume `b' is the buffer end.  */
+#define INSERT_JUMP(op, loc, to) \
+  insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
+
+/* Like `STORE_JUMP2', but for inserting.  Assume `b' is the buffer end.  */
+#define INSERT_JUMP2(op, loc, to, arg) \
+  insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
+
+
+/* This is not an arbitrary limit: the arguments which represent offsets
+   into the pattern are two bytes long.  So if 2^16 bytes turns out to
+   be too small, many things would have to change.  */
+/* Any other compiler which, like MSC, has allocation limit below 2^16
+   bytes will have to use approach similar to what was done below for
+   MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
+   reallocating to 0 bytes.  Such thing is not going to work too well.
+   You have been warned!!  */
+#if defined _MSC_VER  && !defined WIN32
+/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
+   The REALLOC define eliminates a flurry of conversion warnings,
+   but is not required. */
+# define MAX_BUF_SIZE  65500L
+# define REALLOC(p,s) realloc ((p), (size_t) (s))
+#else
+# define MAX_BUF_SIZE (1L << 16)
+# define REALLOC(p,s) realloc ((p), (s))
+#endif
+
+/* Extend the buffer by twice its current size via realloc and
+   reset the pointers that pointed into the old block to point to the
+   correct places in the new one.  If extending the buffer results in it
+   being larger than MAX_BUF_SIZE, then flag memory exhausted.  */
+#if __BOUNDED_POINTERS__
+# define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
+# define MOVE_BUFFER_POINTER(P) \
+  (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
+# define ELSE_EXTEND_BUFFER_HIGH_BOUND         \
+  else                                         \
+    {                                          \
+      SET_HIGH_BOUND (b);                      \
+      SET_HIGH_BOUND (begalt);                 \
+      if (fixup_alt_jump)                      \
+       SET_HIGH_BOUND (fixup_alt_jump);        \
+      if (laststart)                           \
+       SET_HIGH_BOUND (laststart);             \
+      if (pending_exact)                       \
+       SET_HIGH_BOUND (pending_exact);         \
+    }
+#else
+# define MOVE_BUFFER_POINTER(P) (P) += incr
+# define ELSE_EXTEND_BUFFER_HIGH_BOUND
+#endif
+#define EXTEND_BUFFER()                                                        \
+  do {                                                                 \
+    unsigned char *old_buffer = bufp->buffer;                          \
+    if (bufp->allocated == MAX_BUF_SIZE)                               \
+      return REG_ESIZE;                                                        \
+    bufp->allocated <<= 1;                                             \
+    if (bufp->allocated > MAX_BUF_SIZE)                                        \
+      bufp->allocated = MAX_BUF_SIZE;                                  \
+    bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
+    if (bufp->buffer == NULL)                                          \
+      return REG_ESPACE;                                               \
+    /* If the buffer moved, move all the pointers into it.  */         \
+    if (old_buffer != bufp->buffer)                                    \
+      {                                                                        \
+       int incr = bufp->buffer - old_buffer;                           \
+       MOVE_BUFFER_POINTER (b);                                        \
+       MOVE_BUFFER_POINTER (begalt);                                   \
+       if (fixup_alt_jump)                                             \
+         MOVE_BUFFER_POINTER (fixup_alt_jump);                         \
+       if (laststart)                                                  \
+         MOVE_BUFFER_POINTER (laststart);                              \
+       if (pending_exact)                                              \
+         MOVE_BUFFER_POINTER (pending_exact);                          \
+      }                                                                        \
+    ELSE_EXTEND_BUFFER_HIGH_BOUND                                      \
+  } while (0)
+
+
+/* Since we have one byte reserved for the register number argument to
+   {start,stop}_memory, the maximum number of groups we can report
+   things about is what fits in that byte.  */
+#define MAX_REGNUM 255
+
+/* But patterns can have more than `MAX_REGNUM' registers.  We just
+   ignore the excess.  */
+typedef unsigned regnum_t;
+
+
+/* Macros for the compile stack.  */
+
+/* Since offsets can go either forwards or backwards, this type needs to
+   be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.  */
+/* int may be not enough when sizeof(int) == 2.  */
+typedef long pattern_offset_t;
+
+typedef struct
+{
+  pattern_offset_t begalt_offset;
+  pattern_offset_t fixup_alt_jump;
+  pattern_offset_t inner_group_offset;
+  pattern_offset_t laststart_offset;
+  regnum_t regnum;
+} compile_stack_elt_t;
+
+
+typedef struct
+{
+  compile_stack_elt_t *stack;
+  unsigned size;
+  unsigned avail;                      /* Offset of next open position.  */
+} compile_stack_type;
+
+
+#define INIT_COMPILE_STACK_SIZE 32
+
+#define COMPILE_STACK_EMPTY  (compile_stack.avail == 0)
+#define COMPILE_STACK_FULL  (compile_stack.avail == compile_stack.size)
+
+/* The next available element.  */
+#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
+
+
+/* Set the bit for character C in a list.  */
+#define SET_LIST_BIT(c)                               \
+  (b[((unsigned char) (c)) / BYTEWIDTH]               \
+   |= 1 << (((unsigned char) c) % BYTEWIDTH))
+
+
+/* Get the next unsigned number in the uncompiled pattern.  */
+#define GET_UNSIGNED_NUMBER(num)                                       \
+  { if (p != pend)                                                     \
+     {                                                                 \
+       PATFETCH (c);                                                   \
+       while ('0' <= c && c <= '9')                                    \
+         {                                                             \
+           if (num < 0)                                                        \
+              num = 0;                                                 \
+           num = num * 10 + c - '0';                                   \
+           if (p == pend)                                              \
+              break;                                                   \
+           PATFETCH (c);                                               \
+         }                                                             \
+       }                                                               \
+    }
+
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendement 1.  */
+# ifdef CHARCLASS_NAME_MAX
+#  define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+# else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#  define CHAR_CLASS_MAX_LENGTH 256
+# endif
+
+# ifdef _LIBC
+#  define IS_CHAR_CLASS(string) __wctype (string)
+# else
+#  define IS_CHAR_CLASS(string) wctype (string)
+# endif
+#else
+# define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+
+# define IS_CHAR_CLASS(string)                                         \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                 \
+    || STREQ (string, "lower") || STREQ (string, "digit")              \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")             \
+    || STREQ (string, "space") || STREQ (string, "print")              \
+    || STREQ (string, "punct") || STREQ (string, "graph")              \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+#endif
+\f
+#ifndef MATCH_MAY_ALLOCATE
+
+/* If we cannot allocate large objects within re_match_2_internal,
+   we make the fail stack and register vectors global.
+   The fail stack, we grow to the maximum size when a regexp
+   is compiled.
+   The register vectors, we adjust in size each time we
+   compile a regexp, according to the number of registers it needs.  */
+
+static fail_stack_type fail_stack;
+
+/* Size with which the following vectors are currently allocated.
+   That is so we can make them bigger as needed,
+   but never make them smaller.  */
+static int regs_allocated_size;
+
+static const char **     regstart, **     regend;
+static const char ** old_regstart, ** old_regend;
+static const char **best_regstart, **best_regend;
+static register_info_type *reg_info;
+static const char **reg_dummy;
+static register_info_type *reg_info_dummy;
+
+/* Make the register vectors big enough for NUM_REGS registers,
+   but don't make them smaller.  */
+
+static
+regex_grow_registers (num_regs)
+     int num_regs;
+{
+  if (num_regs > regs_allocated_size)
+    {
+      RETALLOC_IF (regstart,    num_regs, const char *);
+      RETALLOC_IF (regend,      num_regs, const char *);
+      RETALLOC_IF (old_regstart, num_regs, const char *);
+      RETALLOC_IF (old_regend,  num_regs, const char *);
+      RETALLOC_IF (best_regstart, num_regs, const char *);
+      RETALLOC_IF (best_regend,         num_regs, const char *);
+      RETALLOC_IF (reg_info,    num_regs, register_info_type);
+      RETALLOC_IF (reg_dummy,   num_regs, const char *);
+      RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
+
+      regs_allocated_size = num_regs;
+    }
+}
+
+#endif /* not MATCH_MAY_ALLOCATE */
+\f
+static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type
+                                                compile_stack,
+                                                regnum_t regnum));
+
+/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
+   Returns one of error codes defined in `regex.h', or zero for success.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate'
+   fields are set in BUFP on entry.
+
+   If it succeeds, results are put in BUFP (if it returns an error, the
+   contents of BUFP are undefined):
+     `buffer' is the compiled pattern;
+     `syntax' is set to SYNTAX;
+     `used' is set to the length of the compiled pattern;
+     `fastmap_accurate' is zero;
+     `re_nsub' is the number of subexpressions in PATTERN;
+     `not_bol' and `not_eol' are zero;
+
+   The `fastmap' and `newline_anchor' fields are neither
+   examined nor set.  */
+
+/* Return, freeing storage we allocated.  */
+#define FREE_STACK_RETURN(value)               \
+  return (free (compile_stack.stack), value)
+
+static reg_errcode_t
+regex_compile (pattern, size, syntax, bufp)
+     const char *pattern;
+     size_t size;
+     reg_syntax_t syntax;
+     struct re_pattern_buffer *bufp;
+{
+  /* We fetch characters from PATTERN here.  Even though PATTERN is
+     `char *' (i.e., signed), we declare these variables as unsigned, so
+     they can be reliably used as array indices.  */
+  register unsigned char c, c1;
+
+  /* A random temporary spot in PATTERN.  */
+  const char *p1;
+
+  /* Points to the end of the buffer, where we should append.  */
+  register unsigned char *b;
+
+  /* Keeps track of unclosed groups.  */
+  compile_stack_type compile_stack;
+
+  /* Points to the current (ending) position in the pattern.  */
+  const char *p = pattern;
+  const char *pend = pattern + size;
+
+  /* How to translate the characters in the pattern.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Address of the count-byte of the most recently inserted `exactn'
+     command.  This makes it possible to tell if a new exact-match
+     character can be added to that command or if the character requires
+     a new `exactn' command.  */
+  unsigned char *pending_exact = 0;
+
+  /* Address of start of the most recently finished expression.
+     This tells, e.g., postfix * where to find the start of its
+     operand.  Reset at the beginning of groups and alternatives.  */
+  unsigned char *laststart = 0;
+
+  /* Address of beginning of regexp, or inside of last group.  */
+  unsigned char *begalt;
+
+  /* Place in the uncompiled pattern (i.e., the {) to
+     which to go back if the interval is invalid.  */
+  const char *beg_interval;
+
+  /* Address of the place where a forward jump should go to the end of
+     the containing expression.  Each alternative of an `or' -- except the
+     last -- ends with a forward jump of this sort.  */
+  unsigned char *fixup_alt_jump = 0;
+
+  /* Counts open-groups as they are encountered.  Remembered for the
+     matching close-group on the compile stack, so the same register
+     number is put in the stop_memory as the start_memory.  */
+  regnum_t regnum = 0;
+
+#ifdef DEBUG
+  DEBUG_PRINT1 ("\nCompiling pattern: ");
+  if (debug)
+    {
+      unsigned debug_count;
+
+      for (debug_count = 0; debug_count < size; debug_count++)
+        putchar (pattern[debug_count]);
+      putchar ('\n');
+    }
+#endif /* DEBUG */
+
+  /* Initialize the compile stack.  */
+  compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
+  if (compile_stack.stack == NULL)
+    return REG_ESPACE;
+
+  compile_stack.size = INIT_COMPILE_STACK_SIZE;
+  compile_stack.avail = 0;
+
+  /* Initialize the pattern buffer.  */
+  bufp->syntax = syntax;
+  bufp->fastmap_accurate = 0;
+  bufp->not_bol = bufp->not_eol = 0;
+
+  /* Set `used' to zero, so that if we return an error, the pattern
+     printer (for debugging) will think there's no pattern.  We reset it
+     at the end.  */
+  bufp->used = 0;
+
+  /* Always count groups, whether or not bufp->no_sub is set.  */
+  bufp->re_nsub = 0;
+
+#if !defined emacs && !defined SYNTAX_TABLE
+  /* Initialize the syntax table.  */
+   init_syntax_once ();
+#endif
+
+  if (bufp->allocated == 0)
+    {
+      if (bufp->buffer)
+       { /* If zero allocated, but buffer is non-null, try to realloc
+             enough space.  This loses if buffer's address is bogus, but
+             that is the user's responsibility.  */
+          RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
+        }
+      else
+        { /* Caller did not allocate a buffer.  Do it for them.  */
+          bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
+        }
+      if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
+
+      bufp->allocated = INIT_BUF_SIZE;
+    }
+
+  begalt = b = bufp->buffer;
+
+  /* Loop through the uncompiled pattern until we're at the end.  */
+  while (p != pend)
+    {
+      PATFETCH (c);
+
+      switch (c)
+        {
+        case '^':
+          {
+            if (   /* If at start of pattern, it's an operator.  */
+                   p == pattern + 1
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's come before.  */
+                || at_begline_loc_p (pattern, p, syntax))
+              BUF_PUSH (begline);
+            else
+              goto normal_char;
+          }
+          break;
+
+
+        case '$':
+          {
+            if (   /* If at end of pattern, it's an operator.  */
+                   p == pend
+                   /* If context independent, it's an operator.  */
+                || syntax & RE_CONTEXT_INDEP_ANCHORS
+                   /* Otherwise, depends on what's next.  */
+                || at_endline_loc_p (p, pend, syntax))
+               BUF_PUSH (endline);
+             else
+               goto normal_char;
+           }
+           break;
+
+
+       case '+':
+        case '?':
+          if ((syntax & RE_BK_PLUS_QM)
+              || (syntax & RE_LIMITED_OPS))
+            goto normal_char;
+        handle_plus:
+        case '*':
+          /* If there is no previous pattern... */
+          if (!laststart)
+            {
+              if (syntax & RE_CONTEXT_INVALID_OPS)
+                FREE_STACK_RETURN (REG_BADRPT);
+              else if (!(syntax & RE_CONTEXT_INDEP_OPS))
+                goto normal_char;
+            }
+
+          {
+            /* Are we optimizing this jump?  */
+            boolean keep_string_p = false;
+
+            /* 1 means zero (many) matches is allowed.  */
+            char zero_times_ok = 0, many_times_ok = 0;
+
+            /* If there is a sequence of repetition chars, collapse it
+               down to just one (the right one).  We can't combine
+               interval operators with these because of, e.g., `a{2}*',
+               which should only match an even number of `a's.  */
+
+            for (;;)
+              {
+                zero_times_ok |= c != '+';
+                many_times_ok |= c != '?';
+
+                if (p == pend)
+                  break;
+
+                PATFETCH (c);
+
+                if (c == '*'
+                    || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
+                  ;
+
+                else if (syntax & RE_BK_PLUS_QM  &&  c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    if (!(c1 == '+' || c1 == '?'))
+                      {
+                        PATUNFETCH;
+                        PATUNFETCH;
+                        break;
+                      }
+
+                    c = c1;
+                  }
+                else
+                  {
+                    PATUNFETCH;
+                    break;
+                  }
+
+                /* If we get here, we found another repeat character.  */
+               }
+
+            /* Star, etc. applied to an empty pattern is equivalent
+               to an empty pattern.  */
+            if (!laststart)
+              break;
+
+            /* Now we know whether or not zero matches is allowed
+               and also whether or not two or more matches is allowed.  */
+            if (many_times_ok)
+              { /* More than one repetition is allowed, so put in at the
+                   end a backward relative jump from `b' to before the next
+                   jump we're going to put in below (which jumps from
+                   laststart to after this jump).
+
+                   But if we are at the `*' in the exact sequence `.*\n',
+                   insert an unconditional jump backwards to the .,
+                   instead of the beginning of the loop.  This way we only
+                   push a failure point once, instead of every time
+                   through the loop.  */
+                assert (p - 1 > pattern);
+
+                /* Allocate the space for the jump.  */
+                GET_BUFFER_SPACE (3);
+
+                /* We know we are not at the first character of the pattern,
+                   because laststart was nonzero.  And we've already
+                   incremented `p', by the way, to be the character after
+                   the `*'.  Do we have to do something analogous here
+                   for null bytes, because of RE_DOT_NOT_NULL?  */
+                if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
+                   && zero_times_ok
+                    && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
+                    && !(syntax & RE_DOT_NEWLINE))
+                  { /* We have .*\n.  */
+                    STORE_JUMP (jump, b, laststart);
+                    keep_string_p = true;
+                  }
+                else
+                  /* Anything else.  */
+                  STORE_JUMP (maybe_pop_jump, b, laststart - 3);
+
+                /* We've added more stuff to the buffer.  */
+                b += 3;
+              }
+
+            /* On failure, jump from laststart to b + 3, which will be the
+               end of the buffer after this jump is inserted.  */
+            GET_BUFFER_SPACE (3);
+            INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
+                                       : on_failure_jump,
+                         laststart, b + 3);
+            pending_exact = 0;
+            b += 3;
+
+            if (!zero_times_ok)
+              {
+                /* At least one repetition is required, so insert a
+                   `dummy_failure_jump' before the initial
+                   `on_failure_jump' instruction of the loop. This
+                   effects a skip over that instruction the first time
+                   we hit that loop.  */
+                GET_BUFFER_SPACE (3);
+                INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
+                b += 3;
+              }
+            }
+         break;
+
+
+       case '.':
+          laststart = b;
+          BUF_PUSH (anychar);
+          break;
+
+
+        case '[':
+          {
+            boolean had_char_class = false;
+           unsigned int range_start = 0xffffffff;
+
+            if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+            /* Ensure that we have enough space to push a charset: the
+               opcode, the length count, and the bitset; 34 bytes in all.  */
+           GET_BUFFER_SPACE (34);
+
+            laststart = b;
+
+            /* We test `*p == '^' twice, instead of using an if
+               statement, so we only need one BUF_PUSH.  */
+            BUF_PUSH (*p == '^' ? charset_not : charset);
+            if (*p == '^')
+              p++;
+
+            /* Remember the first position in the bracket expression.  */
+            p1 = p;
+
+            /* Push the number of bytes in the bitmap.  */
+            BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* Clear the whole map.  */
+            bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
+
+            /* charset_not matches newline according to a syntax bit.  */
+            if ((re_opcode_t) b[-2] == charset_not
+                && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
+              SET_LIST_BIT ('\n');
+
+            /* Read in characters and ranges, setting map bits.  */
+            for (;;)
+              {
+                if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                PATFETCH (c);
+
+                /* \ might escape characters inside [...] and [^...].  */
+                if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
+                  {
+                    if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+                    PATFETCH (c1);
+                    SET_LIST_BIT (c1);
+                   range_start = c1;
+                    continue;
+                  }
+
+                /* Could be the end of the bracket expression.  If it's
+                   not (i.e., when the bracket expression is `[]' so
+                   far), the ']' character bit gets set way below.  */
+                if (c == ']' && p != p1 + 1)
+                  break;
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character class.  */
+                if (had_char_class && c == '-' && *p != ']')
+                  FREE_STACK_RETURN (REG_ERANGE);
+
+                /* Look ahead to see if it's a range when the last thing
+                   was a character: if this is a hyphen not at the
+                   beginning or the end of a list, then it's the range
+                   operator.  */
+                if (c == '-'
+                    && !(p - 2 >= pattern && p[-2] == '[')
+                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
+                    && *p != ']')
+                  {
+                    reg_errcode_t ret
+                      = compile_range (range_start, &p, pend, translate,
+                                      syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                   range_start = 0xffffffff;
+                  }
+
+                else if (p[0] == '-' && p[1] != ']')
+                  { /* This handles ranges made up of characters only.  */
+                    reg_errcode_t ret;
+
+                   /* Move past the `-'.  */
+                    PATFETCH (c1);
+
+                    ret = compile_range (c, &p, pend, translate, syntax, b);
+                    if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
+                   range_start = 0xffffffff;
+                  }
+
+                /* See if we're at the beginning of a possible character
+                   class.  */
+
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
+                  { /* Leave room for the null.  */
+                    char str[CHAR_CLASS_MAX_LENGTH + 1];
+
+                    PATFETCH (c);
+                    c1 = 0;
+
+                    /* If pattern is `[[:'.  */
+                    if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                    for (;;)
+                      {
+                        PATFETCH (c);
+                        if ((c == ':' && *p == ']') || p == pend)
+                          break;
+                       if (c1 < CHAR_CLASS_MAX_LENGTH)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                    str[c1] = '\0';
+
+                    /* If isn't a word bracketed by `[:' and `:]':
+                       undo the ending character, the letters, and leave
+                       the leading `:' and `[' (but set bits for them).  */
+                    if (c == ':' && *p == ']')
+                      {
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_upper = STREQ (str, "upper");
+                       wctype_t wt;
+                        int ch;
+
+                       wt = IS_CHAR_CLASS (str);
+                       if (wt == 0)
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
+                         {
+# ifdef _LIBC
+                           if (__iswctype (__btowc (ch), wt))
+                             SET_LIST_BIT (ch);
+# else
+                           if (iswctype (btowc (ch), wt))
+                             SET_LIST_BIT (ch);
+# endif
+
+                           if (translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                         }
+
+                        had_char_class = true;
+#else
+                        int ch;
+                        boolean is_alnum = STREQ (str, "alnum");
+                        boolean is_alpha = STREQ (str, "alpha");
+                        boolean is_blank = STREQ (str, "blank");
+                        boolean is_cntrl = STREQ (str, "cntrl");
+                        boolean is_digit = STREQ (str, "digit");
+                        boolean is_graph = STREQ (str, "graph");
+                        boolean is_lower = STREQ (str, "lower");
+                        boolean is_print = STREQ (str, "print");
+                        boolean is_punct = STREQ (str, "punct");
+                        boolean is_space = STREQ (str, "space");
+                        boolean is_upper = STREQ (str, "upper");
+                        boolean is_xdigit = STREQ (str, "xdigit");
+
+                        if (!IS_CHAR_CLASS (str))
+                         FREE_STACK_RETURN (REG_ECTYPE);
+
+                        /* Throw away the ] at the end of the character
+                           class.  */
+                        PATFETCH (c);
+
+                        if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                        for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
+                          {
+                           /* This was split into 3 if's to
+                              avoid an arbitrary limit in some compiler.  */
+                            if (   (is_alnum  && ISALNUM (ch))
+                                || (is_alpha  && ISALPHA (ch))
+                                || (is_blank  && ISBLANK (ch))
+                                || (is_cntrl  && ISCNTRL (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_digit  && ISDIGIT (ch))
+                                || (is_graph  && ISGRAPH (ch))
+                                || (is_lower  && ISLOWER (ch))
+                                || (is_print  && ISPRINT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   (is_punct  && ISPUNCT (ch))
+                                || (is_space  && ISSPACE (ch))
+                                || (is_upper  && ISUPPER (ch))
+                                || (is_xdigit && ISXDIGIT (ch)))
+                             SET_LIST_BIT (ch);
+                           if (   translate && (is_upper || is_lower)
+                               && (ISUPPER (ch) || ISLOWER (ch)))
+                             SET_LIST_BIT (ch);
+                          }
+                        had_char_class = true;
+#endif /* libc || wctype.h */
+                      }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT (':');
+                       range_start = ':';
+                        had_char_class = false;
+                      }
+                  }
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=')
+                 {
+                   unsigned char str[MB_LEN_MAX + 1];
+#ifdef _LIBC
+                   uint32_t nrules =
+                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+#endif
+
+                   PATFETCH (c);
+                   c1 = 0;
+
+                   /* If pattern is `[[='.  */
+                   if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                   for (;;)
+                     {
+                       PATFETCH (c);
+                       if ((c == '=' && *p == ']') || p == pend)
+                         break;
+                       if (c1 < MB_LEN_MAX)
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                   str[c1] = '\0';
+
+                   if (c == '=' && *p == ']' && str[0] != '\0')
+                     {
+                       /* If we have no collation data we use the default
+                          collation in which each character is in a class
+                          by itself.  It also means that ASCII is the
+                          character set and therefore we cannot have character
+                          with more than one byte in the multibyte
+                          representation.  */
+#ifdef _LIBC
+                       if (nrules == 0)
+#endif
+                         {
+                           if (c1 != 1)
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Set the bit for the character.  */
+                           SET_LIST_BIT (str[0]);
+                         }
+#ifdef _LIBC
+                       else
+                         {
+                           /* Try to match the byte sequence in `str' against
+                              those known to the collate implementation.
+                              First find out whether the bytes in `str' are
+                              actually from exactly one character.  */
+                           const int32_t *table;
+                           const unsigned char *weights;
+                           const unsigned char *extra;
+                           const int32_t *indirect;
+                           int32_t idx;
+                           const unsigned char *cp = str;
+                           int ch;
+
+                           /* This #include defines a local function!  */
+# include <locale/weight.h>
+
+                           table = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+                           weights = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+                           extra = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+                           indirect = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+
+                           idx = findidx (&cp);
+                           if (idx == 0 || cp < str + c1)
+                             /* This is no valid character.  */
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Now we have to go throught the whole table
+                              and find all characters which have the same
+                              first level weight.
+
+                              XXX Note that this is not entirely correct.
+                              we would have to match multibyte sequences
+                              but this is not possible with the current
+                              implementation.  */
+                           for (ch = 1; ch < 256; ++ch)
+                             /* XXX This test would have to be changed if we
+                                would allow matching multibyte sequences.  */
+                             if (table[ch] > 0)
+                               {
+                                 int32_t idx2 = table[ch];
+                                 size_t len = weights[idx2];
+
+                                 /* Test whether the lenghts match.  */
+                                 if (weights[idx] == len)
+                                   {
+                                     /* They do.  New compare the bytes of
+                                        the weight.  */
+                                     size_t cnt = 0;
+
+                                     while (cnt < len
+                                            && (weights[idx + 1 + cnt]
+                                                == weights[idx2 + 1 + cnt]))
+                                       ++len;
+
+                                     if (cnt == len)
+                                       /* They match.  Mark the character as
+                                          acceptable.  */
+                                       SET_LIST_BIT (ch);
+                                   }
+                               }
+                         }
+#endif
+                       had_char_class = true;
+                     }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT ('=');
+                       range_start = '=';
+                        had_char_class = false;
+                      }
+                 }
+                else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.')
+                 {
+                   unsigned char str[128];     /* Should be large enough.  */
+#ifdef _LIBC
+                   uint32_t nrules =
+                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+#endif
+
+                   PATFETCH (c);
+                   c1 = 0;
+
+                   /* If pattern is `[[='.  */
+                   if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
+
+                   for (;;)
+                     {
+                       PATFETCH (c);
+                       if ((c == '.' && *p == ']') || p == pend)
+                         break;
+                       if (c1 < sizeof (str))
+                         str[c1++] = c;
+                       else
+                         /* This is in any case an invalid class name.  */
+                         str[0] = '\0';
+                      }
+                   str[c1] = '\0';
+
+                   if (c == '.' && *p == ']' && str[0] != '\0')
+                     {
+                       /* If we have no collation data we use the default
+                          collation in which each character is the name
+                          for its own class which contains only the one
+                          character.  It also means that ASCII is the
+                          character set and therefore we cannot have character
+                          with more than one byte in the multibyte
+                          representation.  */
+#ifdef _LIBC
+                       if (nrules == 0)
+#endif
+                         {
+                           if (c1 != 1)
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Set the bit for the character.  */
+                           SET_LIST_BIT (str[0]);
+                           range_start = ((const unsigned char *) str)[0];
+                         }
+#ifdef _LIBC
+                       else
+                         {
+                           /* Try to match the byte sequence in `str' against
+                              those known to the collate implementation.
+                              First find out whether the bytes in `str' are
+                              actually from exactly one character.  */
+                           int32_t table_size;
+                           const int32_t *symb_table;
+                           const unsigned char *extra;
+                           int32_t idx;
+                           int32_t elem;
+                           int32_t second;
+                           int32_t hash;
+
+                           table_size =
+                             _NL_CURRENT_WORD (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_HASH_SIZEMB);
+                           symb_table = (const int32_t *)
+                             _NL_CURRENT (LC_COLLATE,
+                                          _NL_COLLATE_SYMB_TABLEMB);
+                           extra = (const unsigned char *)
+                             _NL_CURRENT (LC_COLLATE,
+                                          _NL_COLLATE_SYMB_EXTRAMB);
+
+                           /* Locate the character in the hashing table.  */
+                           hash = elem_hash (str, c1);
+
+                           idx = 0;
+                           elem = hash % table_size;
+                           second = hash % (table_size - 2);
+                           while (symb_table[2 * elem] != 0)
+                             {
+                               /* First compare the hashing value.  */
+                               if (symb_table[2 * elem] == hash
+                                   && c1 == extra[symb_table[2 * elem + 1]]
+                                   && memcmp (str,
+                                              &extra[symb_table[2 * elem + 1]
+                                                    + 1],
+                                              c1) == 0)
+                                 {
+                                   /* Yep, this is the entry.  */
+                                   idx = symb_table[2 * elem + 1];
+                                   idx += 1 + extra[idx];
+                                   break;
+                                 }
+
+                               /* Next entry.  */
+                               elem += second;
+                             }
+
+                           if (symb_table[2 * elem] == 0)
+                             /* This is no valid character.  */
+                             FREE_STACK_RETURN (REG_ECOLLATE);
+
+                           /* Throw away the ] at the end of the equivalence
+                              class.  */
+                           PATFETCH (c);
+
+                           /* Now add the multibyte character(s) we found
+                              to the accept list.
+
+                              XXX Note that this is not entirely correct.
+                              we would have to match multibyte sequences
+                              but this is not possible with the current
+                              implementation.  Also, we have to match
+                              collating symbols, which expand to more than
+                              one file, as a whole and not allow the
+                              individual bytes.  */
+                           c1 = extra[idx++];
+                           if (c1 == 1)
+                             range_start = extra[idx];
+                           while (c1-- > 0)
+                             {
+                               SET_LIST_BIT (extra[idx]);
+                               ++idx;
+                             }
+                         }
+#endif
+                       had_char_class = false;
+                     }
+                    else
+                      {
+                        c1++;
+                        while (c1--)
+                          PATUNFETCH;
+                        SET_LIST_BIT ('[');
+                        SET_LIST_BIT ('.');
+                       range_start = '.';
+                        had_char_class = false;
+                      }
+                 }
+                else
+                  {
+                    had_char_class = false;
+                    SET_LIST_BIT (c);
+                   range_start = c;
+                  }
+              }
+
+            /* Discard any (non)matching list bytes that are all 0 at the
+               end of the map.  Decrease the map-length byte too.  */
+            while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
+              b[-1]--;
+            b += b[-1];
+          }
+          break;
+
+
+       case '(':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_open;
+          else
+            goto normal_char;
+
+
+        case ')':
+          if (syntax & RE_NO_BK_PARENS)
+            goto handle_close;
+          else
+            goto normal_char;
+
+
+        case '\n':
+          if (syntax & RE_NEWLINE_ALT)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+       case '|':
+          if (syntax & RE_NO_BK_VBAR)
+            goto handle_alt;
+          else
+            goto normal_char;
+
+
+        case '{':
+           if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
+             goto handle_interval;
+           else
+             goto normal_char;
+
+
+        case '\\':
+          if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
+
+          /* Do not translate the character after the \, so that we can
+             distinguish, e.g., \B from \b, even if we normally would
+             translate, e.g., B to b.  */
+          PATFETCH_RAW (c);
+
+          switch (c)
+            {
+            case '(':
+              if (syntax & RE_NO_BK_PARENS)
+                goto normal_backslash;
+
+            handle_open:
+              bufp->re_nsub++;
+              regnum++;
+
+              if (COMPILE_STACK_FULL)
+                {
+                  RETALLOC (compile_stack.stack, compile_stack.size << 1,
+                            compile_stack_elt_t);
+                  if (compile_stack.stack == NULL) return REG_ESPACE;
+
+                  compile_stack.size <<= 1;
+                }
+
+              /* These are the values to restore when we hit end of this
+                 group.  They are all relative offsets, so that if the
+                 whole pattern moves because of realloc, they will still
+                 be valid.  */
+              COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
+              COMPILE_STACK_TOP.fixup_alt_jump
+                = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
+              COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
+              COMPILE_STACK_TOP.regnum = regnum;
+
+              /* We will eventually replace the 0 with the number of
+                 groups inner to this one.  But do not push a
+                 start_memory for groups beyond the last one we can
+                 represent in the compiled pattern.  */
+              if (regnum <= MAX_REGNUM)
+                {
+                  COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
+                  BUF_PUSH_3 (start_memory, regnum, 0);
+                }
+
+              compile_stack.avail++;
+
+              fixup_alt_jump = 0;
+              laststart = 0;
+              begalt = b;
+             /* If we've reached MAX_REGNUM groups, then this open
+                won't actually generate any code, so we'll have to
+                clear pending_exact explicitly.  */
+             pending_exact = 0;
+              break;
+
+
+            case ')':
+              if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
+
+              if (COMPILE_STACK_EMPTY)
+               {
+                 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                   goto normal_backslash;
+                 else
+                   FREE_STACK_RETURN (REG_ERPAREN);
+               }
+
+            handle_close:
+              if (fixup_alt_jump)
+                { /* Push a dummy failure point at the end of the
+                     alternative for a possible future
+                     `pop_failure_jump' to pop.  See comments at
+                     `push_dummy_failure' in `re_match_2'.  */
+                  BUF_PUSH (push_dummy_failure);
+
+                  /* We allocated space for this jump when we assigned
+                     to `fixup_alt_jump', in the `handle_alt' case below.  */
+                  STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
+                }
+
+              /* See similar code for backslashed left paren above.  */
+              if (COMPILE_STACK_EMPTY)
+               {
+                 if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
+                   goto normal_char;
+                 else
+                   FREE_STACK_RETURN (REG_ERPAREN);
+               }
+
+              /* Since we just checked for an empty stack above, this
+                 ``can't happen''.  */
+              assert (compile_stack.avail != 0);
+              {
+                /* We don't just want to restore into `regnum', because
+                   later groups should continue to be numbered higher,
+                   as in `(ab)c(de)' -- the second group is #2.  */
+                regnum_t this_group_regnum;
+
+                compile_stack.avail--;
+                begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
+                fixup_alt_jump
+                  = COMPILE_STACK_TOP.fixup_alt_jump
+                    ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
+                    : 0;
+                laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
+                this_group_regnum = COMPILE_STACK_TOP.regnum;
+               /* If we've reached MAX_REGNUM groups, then this open
+                  won't actually generate any code, so we'll have to
+                  clear pending_exact explicitly.  */
+               pending_exact = 0;
+
+                /* We're at the end of the group, so now we know how many
+                   groups were inside this one.  */
+                if (this_group_regnum <= MAX_REGNUM)
+                  {
+                    unsigned char *inner_group_loc
+                      = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
+
+                    *inner_group_loc = regnum - this_group_regnum;
+                    BUF_PUSH_3 (stop_memory, this_group_regnum,
+                                regnum - this_group_regnum);
+                  }
+              }
+              break;
+
+
+            case '|':                                  /* `\|'.  */
+              if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
+                goto normal_backslash;
+            handle_alt:
+              if (syntax & RE_LIMITED_OPS)
+                goto normal_char;
+
+              /* Insert before the previous alternative a jump which
+                 jumps to this alternative if the former fails.  */
+              GET_BUFFER_SPACE (3);
+              INSERT_JUMP (on_failure_jump, begalt, b + 6);
+              pending_exact = 0;
+              b += 3;
+
+              /* The alternative before this one has a jump after it
+                 which gets executed if it gets matched.  Adjust that
+                 jump so it will jump to this alternative's analogous
+                 jump (put in below, which in turn will jump to the next
+                 (if any) alternative's such jump, etc.).  The last such
+                 jump jumps to the correct final destination.  A picture:
+                          _____ _____
+                          |   | |   |
+                          |   v |   v
+                         a | b   | c
+
+                 If we are at `b', then fixup_alt_jump right now points to a
+                 three-byte space after `a'.  We'll put in the jump, set
+                 fixup_alt_jump to right after `b', and leave behind three
+                 bytes which we'll fill in when we get to after `c'.  */
+
+              if (fixup_alt_jump)
+                STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+              /* Mark and leave space for a jump after this alternative,
+                 to be filled in later either by next alternative or
+                 when know we're at the end of a series of alternatives.  */
+              fixup_alt_jump = b;
+              GET_BUFFER_SPACE (3);
+              b += 3;
+
+              laststart = 0;
+              begalt = b;
+              break;
+
+
+            case '{':
+              /* If \{ is a literal.  */
+              if (!(syntax & RE_INTERVALS)
+                     /* If we're at `\{' and it's not the open-interval
+                        operator.  */
+                 || (syntax & RE_NO_BK_BRACES))
+                goto normal_backslash;
+
+            handle_interval:
+              {
+                /* If got here, then the syntax allows intervals.  */
+
+                /* At least (most) this many matches must be made.  */
+                int lower_bound = -1, upper_bound = -1;
+
+                beg_interval = p - 1;
+
+                if (p == pend)
+                  {
+                    if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_EBRACE);
+                  }
+
+                GET_UNSIGNED_NUMBER (lower_bound);
+
+                if (c == ',')
+                  {
+                    GET_UNSIGNED_NUMBER (upper_bound);
+                   if ((!(syntax & RE_NO_BK_BRACES) && c != '\\')
+                       || ((syntax & RE_NO_BK_BRACES) && c != '}'))
+                     FREE_STACK_RETURN (REG_BADBR);
+
+                   if (upper_bound < 0)
+                     upper_bound = RE_DUP_MAX;
+                  }
+                else
+                  /* Interval such as `{1}' => match exactly once. */
+                  upper_bound = lower_bound;
+
+                if (lower_bound < 0 || upper_bound > RE_DUP_MAX
+                    || lower_bound > upper_bound)
+                  {
+                    if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_BADBR);
+                  }
+
+                if (!(syntax & RE_NO_BK_BRACES))
+                  {
+                    if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
+
+                    PATFETCH (c);
+                  }
+
+                if (c != '}')
+                  {
+                    if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+                      goto unfetch_interval;
+                    else
+                      FREE_STACK_RETURN (REG_BADBR);
+                  }
+
+                /* We just parsed a valid interval.  */
+
+                /* If it's invalid to have no preceding re.  */
+                if (!laststart)
+                  {
+                    if (syntax & RE_CONTEXT_INVALID_OPS)
+                      FREE_STACK_RETURN (REG_BADRPT);
+                    else if (syntax & RE_CONTEXT_INDEP_OPS)
+                      laststart = b;
+                    else
+                      goto unfetch_interval;
+                  }
+
+                /* If the upper bound is zero, don't want to succeed at
+                   all; jump from `laststart' to `b + 3', which will be
+                   the end of the buffer after we insert the jump.  */
+                 if (upper_bound == 0)
+                   {
+                     GET_BUFFER_SPACE (3);
+                     INSERT_JUMP (jump, laststart, b + 3);
+                     b += 3;
+                   }
+
+                 /* Otherwise, we have a nontrivial interval.  When
+                    we're all done, the pattern will look like:
+                      set_number_at <jump count> <upper bound>
+                      set_number_at <succeed_n count> <lower bound>
+                      succeed_n <after jump addr> <succeed_n count>
+                      <body of loop>
+                      jump_n <succeed_n addr> <jump count>
+                    (The upper bound and `jump_n' are omitted if
+                    `upper_bound' is 1, though.)  */
+                 else
+                   { /* If the upper bound is > 1, we need to insert
+                        more at the end of the loop.  */
+                     unsigned nbytes = 10 + (upper_bound > 1) * 10;
+
+                     GET_BUFFER_SPACE (nbytes);
+
+                     /* Initialize lower bound of the `succeed_n', even
+                        though it will be set during matching by its
+                        attendant `set_number_at' (inserted next),
+                        because `re_compile_fastmap' needs to know.
+                        Jump to the `jump_n' we might insert below.  */
+                     INSERT_JUMP2 (succeed_n, laststart,
+                                   b + 5 + (upper_bound > 1) * 5,
+                                   lower_bound);
+                     b += 5;
+
+                     /* Code to initialize the lower bound.  Insert
+                        before the `succeed_n'.  The `5' is the last two
+                        bytes of this `set_number_at', plus 3 bytes of
+                        the following `succeed_n'.  */
+                     insert_op2 (set_number_at, laststart, 5, lower_bound, b);
+                     b += 5;
+
+                     if (upper_bound > 1)
+                       { /* More than one repetition is allowed, so
+                            append a backward jump to the `succeed_n'
+                            that starts this interval.
+
+                            When we've reached this during matching,
+                            we'll have matched the interval once, so
+                            jump back only `upper_bound - 1' times.  */
+                         STORE_JUMP2 (jump_n, b, laststart + 5,
+                                      upper_bound - 1);
+                         b += 5;
+
+                         /* The location we want to set is the second
+                            parameter of the `jump_n'; that is `b-2' as
+                            an absolute address.  `laststart' will be
+                            the `set_number_at' we're about to insert;
+                            `laststart+3' the number to set, the source
+                            for the relative address.  But we are
+                            inserting into the middle of the pattern --
+                            so everything is getting moved up by 5.
+                            Conclusion: (b - 2) - (laststart + 3) + 5,
+                            i.e., b - laststart.
+
+                            We insert this at the beginning of the loop
+                            so that if we fail during matching, we'll
+                            reinitialize the bounds.  */
+                         insert_op2 (set_number_at, laststart, b - laststart,
+                                     upper_bound - 1, b);
+                         b += 5;
+                       }
+                   }
+                pending_exact = 0;
+                beg_interval = NULL;
+              }
+              break;
+
+            unfetch_interval:
+              /* If an invalid interval, match the characters as literals.  */
+               assert (beg_interval);
+               p = beg_interval;
+               beg_interval = NULL;
+
+               /* normal_char and normal_backslash need `c'.  */
+               PATFETCH (c);
+
+               if (!(syntax & RE_NO_BK_BRACES))
+                 {
+                   if (p > pattern  &&  p[-1] == '\\')
+                     goto normal_backslash;
+                 }
+               goto normal_char;
+
+#ifdef emacs
+            /* There is no way to specify the before_dot and after_dot
+               operators.  rms says this is ok.  --karl  */
+            case '=':
+              BUF_PUSH (at_dot);
+              break;
+
+            case 's':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
+              break;
+
+            case 'S':
+              laststart = b;
+              PATFETCH (c);
+              BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
+              break;
+#endif /* emacs */
+
+
+            case 'w':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (wordchar);
+              break;
+
+
+            case 'W':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              laststart = b;
+              BUF_PUSH (notwordchar);
+              break;
+
+
+            case '<':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbeg);
+              break;
+
+            case '>':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordend);
+              break;
+
+            case 'b':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (wordbound);
+              break;
+
+            case 'B':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (notwordbound);
+              break;
+
+            case '`':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (begbuf);
+              break;
+
+            case '\'':
+             if (syntax & RE_NO_GNU_OPS)
+               goto normal_char;
+              BUF_PUSH (endbuf);
+              break;
+
+            case '1': case '2': case '3': case '4': case '5':
+            case '6': case '7': case '8': case '9':
+              if (syntax & RE_NO_BK_REFS)
+                goto normal_char;
+
+              c1 = c - '0';
+
+              if (c1 > regnum)
+                FREE_STACK_RETURN (REG_ESUBREG);
+
+              /* Can't back reference to a subexpression if inside of it.  */
+              if (group_in_compile_stack (compile_stack, (regnum_t) c1))
+                goto normal_char;
+
+              laststart = b;
+              BUF_PUSH_2 (duplicate, c1);
+              break;
+
+
+            case '+':
+            case '?':
+              if (syntax & RE_BK_PLUS_QM)
+                goto handle_plus;
+              else
+                goto normal_backslash;
+
+            default:
+            normal_backslash:
+              /* You might think it would be useful for \ to mean
+                 not to translate; but if we don't translate it
+                 it will never match anything.  */
+              c = TRANSLATE (c);
+              goto normal_char;
+            }
+          break;
+
+
+       default:
+        /* Expects the character in `c'.  */
+       normal_char:
+             /* If no exactn currently being built.  */
+          if (!pending_exact
+
+              /* If last exactn not at current position.  */
+              || pending_exact + *pending_exact + 1 != b
+
+              /* We have only one byte following the exactn for the count.  */
+             || *pending_exact == (1 << BYTEWIDTH) - 1
+
+              /* If followed by a repetition operator.  */
+              || *p == '*' || *p == '^'
+             || ((syntax & RE_BK_PLUS_QM)
+                 ? *p == '\\' && (p[1] == '+' || p[1] == '?')
+                 : (*p == '+' || *p == '?'))
+             || ((syntax & RE_INTERVALS)
+                  && ((syntax & RE_NO_BK_BRACES)
+                     ? *p == '{'
+                      : (p[0] == '\\' && p[1] == '{'))))
+           {
+             /* Start building a new exactn.  */
+
+              laststart = b;
+
+             BUF_PUSH_2 (exactn, 0);
+             pending_exact = b - 1;
+            }
+
+         BUF_PUSH (c);
+          (*pending_exact)++;
+         break;
+        } /* switch (c) */
+    } /* while p != pend */
+
+
+  /* Through the pattern now.  */
+
+  if (fixup_alt_jump)
+    STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
+
+  if (!COMPILE_STACK_EMPTY)
+    FREE_STACK_RETURN (REG_EPAREN);
+
+  /* If we don't want backtracking, force success
+     the first time we reach the end of the compiled pattern.  */
+  if (syntax & RE_NO_POSIX_BACKTRACKING)
+    BUF_PUSH (succeed);
+
+  free (compile_stack.stack);
+
+  /* We have succeeded; set the length of the buffer.  */
+  bufp->used = b - bufp->buffer;
+
+#ifdef DEBUG
+  if (debug)
+    {
+      DEBUG_PRINT1 ("\nCompiled pattern: \n");
+      print_compiled_pattern (bufp);
+    }
+#endif /* DEBUG */
+
+#ifndef MATCH_MAY_ALLOCATE
+  /* Initialize the failure stack to the largest possible stack.  This
+     isn't necessary unless we're trying to avoid calling alloca in
+     the search and match routines.  */
+  {
+    int num_regs = bufp->re_nsub + 1;
+
+    /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
+       is strictly greater than re_max_failures, the largest possible stack
+       is 2 * re_max_failures failure points.  */
+    if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
+      {
+       fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
+
+# ifdef emacs
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) xmalloc (fail_stack.size
+                                           * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
+                                            (fail_stack.size
+                                             * sizeof (fail_stack_elt_t)));
+# else /* not emacs */
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) malloc (fail_stack.size
+                                          * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) realloc (fail_stack.stack,
+                                           (fail_stack.size
+                                            * sizeof (fail_stack_elt_t)));
+# endif /* not emacs */
+      }
+
+    regex_grow_registers (num_regs);
+  }
+#endif /* not MATCH_MAY_ALLOCATE */
+
+  return REG_NOERROR;
+} /* regex_compile */
+\f
+/* Subroutines for `regex_compile'.  */
+
+/* Store OP at LOC followed by two-byte integer parameter ARG.  */
+
+static void
+store_op1 (op, loc, arg)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg);
+}
+
+
+/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2.  */
+
+static void
+store_op2 (op, loc, arg1, arg2)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+{
+  *loc = (unsigned char) op;
+  STORE_NUMBER (loc + 1, arg1);
+  STORE_NUMBER (loc + 3, arg2);
+}
+
+
+/* Copy the bytes from LOC to END to open up three bytes of space at LOC
+   for OP followed by two-byte integer parameter ARG.  */
+
+static void
+insert_op1 (op, loc, arg, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 3;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  store_op1 (op, loc, arg);
+}
+
+
+/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2.  */
+
+static void
+insert_op2 (op, loc, arg1, arg2, end)
+    re_opcode_t op;
+    unsigned char *loc;
+    int arg1, arg2;
+    unsigned char *end;
+{
+  register unsigned char *pfrom = end;
+  register unsigned char *pto = end + 5;
+
+  while (pfrom != loc)
+    *--pto = *--pfrom;
+
+  store_op2 (op, loc, arg1, arg2);
+}
+
+
+/* P points to just after a ^ in PATTERN.  Return true if that ^ comes
+   after an alternative or a begin-subexpression.  We assume there is at
+   least one character before the ^.  */
+
+static boolean
+at_begline_loc_p (pattern, p, syntax)
+    const char *pattern, *p;
+    reg_syntax_t syntax;
+{
+  const char *prev = p - 2;
+  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
+
+  return
+       /* After a subexpression?  */
+       (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
+       /* After an alternative?  */
+    || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
+}
+
+
+/* The dual of at_begline_loc_p.  This one is for $.  We assume there is
+   at least one character after the $, i.e., `P < PEND'.  */
+
+static boolean
+at_endline_loc_p (p, pend, syntax)
+    const char *p, *pend;
+    reg_syntax_t syntax;
+{
+  const char *next = p;
+  boolean next_backslash = *next == '\\';
+  const char *next_next = p + 1 < pend ? p + 1 : 0;
+
+  return
+       /* Before a subexpression?  */
+       (syntax & RE_NO_BK_PARENS ? *next == ')'
+        : next_backslash && next_next && *next_next == ')')
+       /* Before an alternative?  */
+    || (syntax & RE_NO_BK_VBAR ? *next == '|'
+        : next_backslash && next_next && *next_next == '|');
+}
+
+
+/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
+   false if it's not.  */
+
+static boolean
+group_in_compile_stack (compile_stack, regnum)
+    compile_stack_type compile_stack;
+    regnum_t regnum;
+{
+  int this_element;
+
+  for (this_element = compile_stack.avail - 1;
+       this_element >= 0;
+       this_element--)
+    if (compile_stack.stack[this_element].regnum == regnum)
+      return true;
+
+  return false;
+}
+
+
+/* Read the ending character of a range (in a bracket expression) from the
+   uncompiled pattern *P_PTR (which ends at PEND).  We assume the
+   starting character is in `P[-2]'.  (`P[-1]' is the character `-'.)
+   Then we set the translation of all bits between the starting and
+   ending characters (inclusive) in the compiled pattern B.
+
+   Return an error code.
+
+   We use these short variable names so we can use the same macros as
+   `regex_compile' itself.  */
+
+static reg_errcode_t
+compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
+     unsigned int range_start_char;
+     const char **p_ptr, *pend;
+     RE_TRANSLATE_TYPE translate;
+     reg_syntax_t syntax;
+     unsigned char *b;
+{
+  unsigned this_char;
+  const char *p = *p_ptr;
+  reg_errcode_t ret;
+#if _LIBC
+  const unsigned char *collseq;
+  unsigned int start_colseq;
+  unsigned int end_colseq;
+#else
+  unsigned end_char;
+#endif
+
+  if (p == pend)
+    return REG_ERANGE;
+
+  /* Have to increment the pointer into the pattern string, so the
+     caller isn't still at the ending character.  */
+  (*p_ptr)++;
+
+  /* Report an error if the range is empty and the syntax prohibits this.  */
+  ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
+
+#if _LIBC
+  collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+                                                _NL_COLLATE_COLLSEQMB);
+
+  start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)];
+  end_colseq = collseq[(unsigned char) TRANSLATE (p[0])];
+  for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
+    {
+      unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)];
+
+      if (start_colseq <= this_colseq && this_colseq <= end_colseq)
+       {
+         SET_LIST_BIT (TRANSLATE (this_char));
+         ret = REG_NOERROR;
+       }
+    }
+#else
+  /* Here we see why `this_char' has to be larger than an `unsigned
+     char' -- we would otherwise go into an infinite loop, since all
+     characters <= 0xff.  */
+  range_start_char = TRANSLATE (range_start_char);
+  end_char = TRANSLATE (p[0]);
+  for (this_char = range_start_char; this_char <= end_char; ++this_char)
+    {
+      SET_LIST_BIT (TRANSLATE (this_char));
+      ret = REG_NOERROR;
+    }
+#endif
+
+  return ret;
+}
+\f
+/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
+   BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
+   characters can start a string that matches the pattern.  This fastmap
+   is used by re_search to skip quickly over impossible starting points.
+
+   The caller must supply the address of a (1 << BYTEWIDTH)-byte data
+   area as BUFP->fastmap.
+
+   We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
+   the pattern buffer.
+
+   Returns 0 if we succeed, -2 if an internal error.   */
+
+int
+re_compile_fastmap (bufp)
+     struct re_pattern_buffer *bufp;
+{
+  int j, k;
+#ifdef MATCH_MAY_ALLOCATE
+  fail_stack_type fail_stack;
+#endif
+#ifndef REGEX_MALLOC
+  char *destination;
+#endif
+
+  register char *fastmap = bufp->fastmap;
+  unsigned char *pattern = bufp->buffer;
+  unsigned char *p = pattern;
+  register unsigned char *pend = pattern + bufp->used;
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* Assume that each path through the pattern can be null until
+     proven otherwise.  We set this false at the bottom of switch
+     statement, to which we get only if a particular path doesn't
+     match the empty string.  */
+  boolean path_can_be_null = true;
+
+  /* We aren't doing a `succeed_n' to begin with.  */
+  boolean succeed_n_p = false;
+
+  assert (fastmap != NULL && p != NULL);
+
+  INIT_FAIL_STACK ();
+  bzero (fastmap, 1 << BYTEWIDTH);  /* Assume nothing's valid.  */
+  bufp->fastmap_accurate = 1;      /* It will be when we're done.  */
+  bufp->can_be_null = 0;
+
+  while (1)
+    {
+      if (p == pend || *p == succeed)
+       {
+         /* We have reached the (effective) end of pattern.  */
+         if (!FAIL_STACK_EMPTY ())
+           {
+             bufp->can_be_null |= path_can_be_null;
+
+             /* Reset for next path.  */
+             path_can_be_null = true;
+
+             p = fail_stack.stack[--fail_stack.avail].pointer;
+
+             continue;
+           }
+         else
+           break;
+       }
+
+      /* We should never be about to go beyond the end of the pattern.  */
+      assert (p < pend);
+
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+
+        /* I guess the idea here is to simply not bother with a fastmap
+           if a backreference is used, since it's too hard to figure out
+           the fastmap for the corresponding group.  Setting
+           `can_be_null' stops `re_search_2' from using the fastmap, so
+           that is all we do.  */
+       case duplicate:
+         bufp->can_be_null = 1;
+          goto done;
+
+
+      /* Following are the cases which match a character.  These end
+         with `break'.  */
+
+       case exactn:
+          fastmap[p[1]] = 1;
+         break;
+
+
+        case charset:
+          for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
+              fastmap[j] = 1;
+         break;
+
+
+       case charset_not:
+         /* Chars beyond end of map must be allowed.  */
+         for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
+            fastmap[j] = 1;
+
+         for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
+           if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
+              fastmap[j] = 1;
+          break;
+
+
+       case wordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == Sword)
+             fastmap[j] = 1;
+         break;
+
+
+       case notwordchar:
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != Sword)
+             fastmap[j] = 1;
+         break;
+
+
+        case anychar:
+         {
+           int fastmap_newline = fastmap['\n'];
+
+           /* `.' matches anything ...  */
+           for (j = 0; j < (1 << BYTEWIDTH); j++)
+             fastmap[j] = 1;
+
+           /* ... except perhaps newline.  */
+           if (!(bufp->syntax & RE_DOT_NEWLINE))
+             fastmap['\n'] = fastmap_newline;
+
+           /* Return if we have already set `can_be_null'; if we have,
+              then the fastmap is irrelevant.  Something's wrong here.  */
+           else if (bufp->can_be_null)
+             goto done;
+
+           /* Otherwise, have to check alternative paths.  */
+           break;
+         }
+
+#ifdef emacs
+        case syntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) == (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+       case notsyntaxspec:
+         k = *p++;
+         for (j = 0; j < (1 << BYTEWIDTH); j++)
+           if (SYNTAX (j) != (enum syntaxcode) k)
+             fastmap[j] = 1;
+         break;
+
+
+      /* All cases after this match the empty string.  These end with
+         `continue'.  */
+
+
+       case before_dot:
+       case at_dot:
+       case after_dot:
+          continue;
+#endif /* emacs */
+
+
+        case no_op:
+        case begline:
+        case endline:
+       case begbuf:
+       case endbuf:
+       case wordbound:
+       case notwordbound:
+       case wordbeg:
+       case wordend:
+        case push_dummy_failure:
+          continue;
+
+
+       case jump_n:
+        case pop_failure_jump:
+       case maybe_pop_jump:
+       case jump:
+        case jump_past_alt:
+       case dummy_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+         p += j;
+         if (j > 0)
+           continue;
+
+          /* Jump backward implies we just went through the body of a
+             loop and matched nothing.  Opcode jumped to should be
+             `on_failure_jump' or `succeed_n'.  Just treat it like an
+             ordinary jump.  For a * loop, it has pushed its failure
+             point already; if so, discard that as redundant.  */
+          if ((re_opcode_t) *p != on_failure_jump
+             && (re_opcode_t) *p != succeed_n)
+           continue;
+
+          p++;
+          EXTRACT_NUMBER_AND_INCR (j, p);
+          p += j;
+
+          /* If what's on the stack is where we are now, pop it.  */
+          if (!FAIL_STACK_EMPTY ()
+             && fail_stack.stack[fail_stack.avail - 1].pointer == p)
+            fail_stack.avail--;
+
+          continue;
+
+
+        case on_failure_jump:
+        case on_failure_keep_string_jump:
+       handle_on_failure_jump:
+          EXTRACT_NUMBER_AND_INCR (j, p);
+
+          /* For some patterns, e.g., `(a?)?', `p+j' here points to the
+             end of the pattern.  We don't want to push such a point,
+             since when we restore it above, entering the switch will
+             increment `p' past the end of the pattern.  We don't need
+             to push such a point since we obviously won't find any more
+             fastmap entries beyond `pend'.  Such a pattern can match
+             the null string, though.  */
+          if (p + j < pend)
+            {
+              if (!PUSH_PATTERN_OP (p + j, fail_stack))
+               {
+                 RESET_FAIL_STACK ();
+                 return -2;
+               }
+            }
+          else
+            bufp->can_be_null = 1;
+
+          if (succeed_n_p)
+            {
+              EXTRACT_NUMBER_AND_INCR (k, p);  /* Skip the n.  */
+              succeed_n_p = false;
+           }
+
+          continue;
+
+
+       case succeed_n:
+          /* Get to the number of times to succeed.  */
+          p += 2;
+
+          /* Increment p past the n for when k != 0.  */
+          EXTRACT_NUMBER_AND_INCR (k, p);
+          if (k == 0)
+           {
+              p -= 4;
+             succeed_n_p = true;  /* Spaghetti code alert.  */
+              goto handle_on_failure_jump;
+            }
+          continue;
+
+
+       case set_number_at:
+          p += 4;
+          continue;
+
+
+       case start_memory:
+        case stop_memory:
+         p += 2;
+         continue;
+
+
+       default:
+          abort (); /* We have listed all the cases.  */
+        } /* switch *p++ */
+
+      /* Getting here means we have found the possible starting
+         characters for one path of the pattern -- and that the empty
+         string does not match.  We need not follow this path further.
+         Instead, look at the next alternative (remembered on the
+         stack), or quit if no more.  The test at the top of the loop
+         does these things.  */
+      path_can_be_null = false;
+      p = pend;
+    } /* while p */
+
+  /* Set `can_be_null' for the last path (also the first path, if the
+     pattern is empty).  */
+  bufp->can_be_null |= path_can_be_null;
+
+ done:
+  RESET_FAIL_STACK ();
+  return 0;
+} /* re_compile_fastmap */
+#ifdef _LIBC
+weak_alias (__re_compile_fastmap, re_compile_fastmap)
+#endif
+\f
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
+   this memory for recording register information.  STARTS and ENDS
+   must be allocated using the malloc library routine, and must each
+   be at least NUM_REGS * sizeof (regoff_t) bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+
+void
+re_set_registers (bufp, regs, num_regs, starts, ends)
+    struct re_pattern_buffer *bufp;
+    struct re_registers *regs;
+    unsigned num_regs;
+    regoff_t *starts, *ends;
+{
+  if (num_regs)
+    {
+      bufp->regs_allocated = REGS_REALLOCATE;
+      regs->num_regs = num_regs;
+      regs->start = starts;
+      regs->end = ends;
+    }
+  else
+    {
+      bufp->regs_allocated = REGS_UNALLOCATED;
+      regs->num_regs = 0;
+      regs->start = regs->end = (regoff_t *) 0;
+    }
+}
+#ifdef _LIBC
+weak_alias (__re_set_registers, re_set_registers)
+#endif
+\f
+/* Searching routines.  */
+
+/* Like re_search_2, below, but only one string is specified, and
+   doesn't let you say where to stop matching. */
+
+int
+re_search (bufp, string, size, startpos, range, regs)
+     struct re_pattern_buffer *bufp;
+     const char *string;
+     int size, startpos, range;
+     struct re_registers *regs;
+{
+  return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
+                     regs, size);
+}
+#ifdef _LIBC
+weak_alias (__re_search, re_search)
+#endif
+
+
+/* Using the compiled pattern in BUFP->buffer, first tries to match the
+   virtual concatenation of STRING1 and STRING2, starting first at index
+   STARTPOS, then at STARTPOS + 1, and so on.
+
+   STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
+
+   RANGE is how far to scan while trying to match.  RANGE = 0 means try
+   only at STARTPOS; in general, the last start tried is STARTPOS +
+   RANGE.
+
+   In REGS, return the indices of the virtual concatenation of STRING1
+   and STRING2 that matched the entire BUFP->buffer and its contained
+   subexpressions.
+
+   Do not consider matching one past the index STOP in the virtual
+   concatenation of STRING1 and STRING2.
+
+   We return either the position in the strings at which the match was
+   found, -1 if no match, or -2 if error (such as failure
+   stack overflow).  */
+
+int
+re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int startpos;
+     int range;
+     struct re_registers *regs;
+     int stop;
+{
+  int val;
+  register char *fastmap = bufp->fastmap;
+  register RE_TRANSLATE_TYPE translate = bufp->translate;
+  int total_size = size1 + size2;
+  int endpos = startpos + range;
+
+  /* Check for out-of-range STARTPOS.  */
+  if (startpos < 0 || startpos > total_size)
+    return -1;
+
+  /* Fix up RANGE if it might eventually take us outside
+     the virtual concatenation of STRING1 and STRING2.
+     Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE.  */
+  if (endpos < 0)
+    range = 0 - startpos;
+  else if (endpos > total_size)
+    range = total_size - startpos;
+
+  /* If the search isn't to be a backwards one, don't waste time in a
+     search for a pattern that must be anchored.  */
+  if (bufp->used > 0 && range > 0
+      && ((re_opcode_t) bufp->buffer[0] == begbuf
+         /* `begline' is like `begbuf' if it cannot match at newlines.  */
+         || ((re_opcode_t) bufp->buffer[0] == begline
+             && !bufp->newline_anchor)))
+    {
+      if (startpos > 0)
+       return -1;
+      else
+       range = 1;
+    }
+
+#ifdef emacs
+  /* In a forward search for something that starts with \=.
+     don't keep searching past point.  */
+  if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
+    {
+      range = PT - startpos;
+      if (range <= 0)
+       return -1;
+    }
+#endif /* emacs */
+
+  /* Update the fastmap now if not correct already.  */
+  if (fastmap && !bufp->fastmap_accurate)
+    if (re_compile_fastmap (bufp) == -2)
+      return -2;
+
+  /* Loop through the string, looking for a place to start matching.  */
+  for (;;)
+    {
+      /* If a fastmap is supplied, skip quickly over characters that
+         cannot be the start of a match.  If the pattern can match the
+         null string, however, we don't need to skip characters; we want
+         the first null string.  */
+      if (fastmap && startpos < total_size && !bufp->can_be_null)
+       {
+         if (range > 0)        /* Searching forwards.  */
+           {
+             register const char *d;
+             register int lim = 0;
+             int irange = range;
+
+              if (startpos < size1 && startpos + range >= size1)
+                lim = range - (size1 - startpos);
+
+             d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
+
+              /* Written out as an if-else to avoid testing `translate'
+                 inside the loop.  */
+             if (translate)
+                while (range > lim
+                       && !fastmap[(unsigned char)
+                                  translate[(unsigned char) *d++]])
+                  range--;
+             else
+                while (range > lim && !fastmap[(unsigned char) *d++])
+                  range--;
+
+             startpos += irange - range;
+           }
+         else                          /* Searching backwards.  */
+           {
+             register char c = (size1 == 0 || startpos >= size1
+                                 ? string2[startpos - size1]
+                                 : string1[startpos]);
+
+             if (!fastmap[(unsigned char) TRANSLATE (c)])
+               goto advance;
+           }
+       }
+
+      /* If can't match the null string, and that's all we have left, fail.  */
+      if (range >= 0 && startpos == total_size && fastmap
+          && !bufp->can_be_null)
+       return -1;
+
+      val = re_match_2_internal (bufp, string1, size1, string2, size2,
+                                startpos, regs, stop);
+#ifndef REGEX_MALLOC
+# ifdef C_ALLOCA
+      alloca (0);
+# endif
+#endif
+
+      if (val >= 0)
+       return startpos;
+
+      if (val == -2)
+       return -2;
+
+    advance:
+      if (!range)
+        break;
+      else if (range > 0)
+        {
+          range--;
+          startpos++;
+        }
+      else
+        {
+          range++;
+          startpos--;
+        }
+    }
+  return -1;
+} /* re_search_2 */
+#ifdef _LIBC
+weak_alias (__re_search_2, re_search_2)
+#endif
+\f
+/* This converts PTR, a pointer into one of the search strings `string1'
+   and `string2' into an offset from the beginning of that string.  */
+#define POINTER_TO_OFFSET(ptr)                 \
+  (FIRST_STRING_P (ptr)                                \
+   ? ((regoff_t) ((ptr) - string1))            \
+   : ((regoff_t) ((ptr) - string2 + size1)))
+
+/* Macros for dealing with the split strings in re_match_2.  */
+
+#define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
+
+/* Call before fetching a character with *d.  This switches over to
+   string2 if necessary.  */
+#define PREFETCH()                                                     \
+  while (d == dend)                                                    \
+    {                                                                  \
+      /* End of string2 => fail.  */                                   \
+      if (dend == end_match_2)                                                 \
+        goto fail;                                                     \
+      /* End of string1 => advance to string2.  */                     \
+      d = string2;                                                     \
+      dend = end_match_2;                                              \
+    }
+
+
+/* Test if at very beginning or at very end of the virtual concatenation
+   of `string1' and `string2'.  If only one string, it's `string2'.  */
+#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
+#define AT_STRINGS_END(d) ((d) == end2)
+
+
+/* Test if D points to a character which is word-constituent.  We have
+   two special cases to check for: if past the end of string1, look at
+   the first character in string2; and if before the beginning of
+   string2, look at the last character in string1.  */
+#define WORDCHAR_P(d)                                                  \
+  (SYNTAX ((d) == end1 ? *string2                                      \
+           : (d) == string2 - 1 ? *(end1 - 1) : *(d))                  \
+   == Sword)
+
+/* Disabled due to a compiler bug -- see comment at case wordbound */
+#if 0
+/* Test if the character before D and the one at D differ with respect
+   to being word-constituent.  */
+#define AT_WORD_BOUNDARY(d)                                            \
+  (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)                            \
+   || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
+#endif
+
+/* Free everything we malloc.  */
+#ifdef MATCH_MAY_ALLOCATE
+# define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
+# define FREE_VARIABLES()                                              \
+  do {                                                                 \
+    REGEX_FREE_STACK (fail_stack.stack);                               \
+    FREE_VAR (regstart);                                               \
+    FREE_VAR (regend);                                                 \
+    FREE_VAR (old_regstart);                                           \
+    FREE_VAR (old_regend);                                             \
+    FREE_VAR (best_regstart);                                          \
+    FREE_VAR (best_regend);                                            \
+    FREE_VAR (reg_info);                                               \
+    FREE_VAR (reg_dummy);                                              \
+    FREE_VAR (reg_info_dummy);                                         \
+  } while (0)
+#else
+# define FREE_VARIABLES() ((void)0) /* Do nothing!  But inhibit gcc warning. */
+#endif /* not MATCH_MAY_ALLOCATE */
+
+/* These values must meet several constraints.  They must not be valid
+   register values; since we have a limit of 255 registers (because
+   we use only one byte in the pattern for the register number), we can
+   use numbers larger than 255.  They must differ by 1, because of
+   NUM_FAILURE_ITEMS above.  And the value for the lowest register must
+   be larger than the value for the highest register, so we do not try
+   to actually save any registers when none are active.  */
+#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
+#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
+\f
+/* Matching routines.  */
+
+#ifndef emacs   /* Emacs never uses this.  */
+/* re_match is like re_match_2 except it takes only a single string.  */
+
+int
+re_match (bufp, string, size, pos, regs)
+     struct re_pattern_buffer *bufp;
+     const char *string;
+     int size, pos;
+     struct re_registers *regs;
+{
+  int result = re_match_2_internal (bufp, NULL, 0, string, size,
+                                   pos, regs, size);
+# ifndef REGEX_MALLOC
+#  ifdef C_ALLOCA
+  alloca (0);
+#  endif
+# endif
+  return result;
+}
+# ifdef _LIBC
+weak_alias (__re_match, re_match)
+# endif
+#endif /* not emacs */
+
+static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p,
+                                                   unsigned char *end,
+                                               register_info_type *reg_info));
+static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p,
+                                                 unsigned char *end,
+                                               register_info_type *reg_info));
+static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p,
+                                                       unsigned char *end,
+                                               register_info_type *reg_info));
+static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2,
+                                    int len, char *translate));
+
+/* re_match_2 matches the compiled pattern in BUFP against the
+   the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
+   and SIZE2, respectively).  We start matching at POS, and stop
+   matching at STOP.
+
+   If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
+   store offsets for the substring each group matched in REGS.  See the
+   documentation for exactly how many groups we fill.
+
+   We return -1 if no match, -2 if an internal error (such as the
+   failure stack overflowing).  Otherwise, we return the length of the
+   matched substring.  */
+
+int
+re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int pos;
+     struct re_registers *regs;
+     int stop;
+{
+  int result = re_match_2_internal (bufp, string1, size1, string2, size2,
+                                   pos, regs, stop);
+#ifndef REGEX_MALLOC
+# ifdef C_ALLOCA
+  alloca (0);
+# endif
+#endif
+  return result;
+}
+#ifdef _LIBC
+weak_alias (__re_match_2, re_match_2)
+#endif
+
+/* This is a separate function so that we can force an alloca cleanup
+   afterwards.  */
+static int
+re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
+     struct re_pattern_buffer *bufp;
+     const char *string1, *string2;
+     int size1, size2;
+     int pos;
+     struct re_registers *regs;
+     int stop;
+{
+  /* General temporaries.  */
+  int mcnt;
+  unsigned char *p1;
+
+  /* Just past the end of the corresponding string.  */
+  const char *end1, *end2;
+
+  /* Pointers into string1 and string2, just past the last characters in
+     each to consider matching.  */
+  const char *end_match_1, *end_match_2;
+
+  /* Where we are in the data, and the end of the current string.  */
+  const char *d, *dend;
+
+  /* Where we are in the pattern, and the end of the pattern.  */
+  unsigned char *p = bufp->buffer;
+  register unsigned char *pend = p + bufp->used;
+
+  /* Mark the opcode just after a start_memory, so we can test for an
+     empty subpattern when we get to the stop_memory.  */
+  unsigned char *just_past_start_mem = 0;
+
+  /* We use this to map every character in the string.  */
+  RE_TRANSLATE_TYPE translate = bufp->translate;
+
+  /* Failure point stack.  Each place that can handle a failure further
+     down the line pushes a failure point on this stack.  It consists of
+     restart, regend, and reg_info for all registers corresponding to
+     the subexpressions we're currently inside, plus the number of such
+     registers, and, finally, two char *'s.  The first char * is where
+     to resume scanning the pattern; the second one is where to resume
+     scanning the strings.  If the latter is zero, the failure point is
+     a ``dummy''; if a failure happens and the failure point is a dummy,
+     it gets discarded and the next next one is tried.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  fail_stack_type fail_stack;
+#endif
+#ifdef DEBUG
+  static unsigned failure_id;
+  unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
+#endif
+
+#ifdef REL_ALLOC
+  /* This holds the pointer to the failure stack, when
+     it is allocated relocatably.  */
+  fail_stack_elt_t *failure_stack_ptr;
+#endif
+
+  /* We fill all the registers internally, independent of what we
+     return, for use in backreferences.  The number here includes
+     an element for register zero.  */
+  size_t num_regs = bufp->re_nsub + 1;
+
+  /* The currently active registers.  */
+  active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+  active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+
+  /* Information on the contents of registers. These are pointers into
+     the input strings; they record just what was matched (on this
+     attempt) by a subexpression part of the pattern, that is, the
+     regnum-th regstart pointer points to where in the pattern we began
+     matching and the regnum-th regend points to right after where we
+     stopped matching the regnum-th subexpression.  (The zeroth register
+     keeps track of what the whole pattern matches.)  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **regstart, **regend;
+#endif
+
+  /* If a group that's operated upon by a repetition operator fails to
+     match anything, then the register for its start will need to be
+     restored because it will have been set to wherever in the string we
+     are when we last see its open-group operator.  Similarly for a
+     register's end.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **old_regstart, **old_regend;
+#endif
+
+  /* The is_active field of reg_info helps us keep track of which (possibly
+     nested) subexpressions we are currently in. The matched_something
+     field of reg_info[reg_num] helps us tell whether or not we have
+     matched any of the pattern so far this time through the reg_num-th
+     subexpression.  These two fields get reset each time through any
+     loop their register is in.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
+  register_info_type *reg_info;
+#endif
+
+  /* The following record the register info as found in the above
+     variables when we find a match better than any we've seen before.
+     This happens as we backtrack through the failure points, which in
+     turn happens only if we have not yet matched the entire string. */
+  unsigned best_regs_set = false;
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **best_regstart, **best_regend;
+#endif
+
+  /* Logically, this is `best_regend[0]'.  But we don't want to have to
+     allocate space for that if we're not allocating space for anything
+     else (see below).  Also, we never need info about register 0 for
+     any of the other register vectors, and it seems rather a kludge to
+     treat `best_regend' differently than the rest.  So we keep track of
+     the end of the best match so far in a separate variable.  We
+     initialize this to NULL so that when we backtrack the first time
+     and need to test it, it's not garbage.  */
+  const char *match_end = NULL;
+
+  /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
+  int set_regs_matched_done = 0;
+
+  /* Used when we pop values we don't care about.  */
+#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
+  const char **reg_dummy;
+  register_info_type *reg_info_dummy;
+#endif
+
+#ifdef DEBUG
+  /* Counts the total number of registers pushed.  */
+  unsigned num_regs_pushed = 0;
+#endif
+
+  DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
+
+  INIT_FAIL_STACK ();
+
+#ifdef MATCH_MAY_ALLOCATE
+  /* Do not bother to initialize all the register variables if there are
+     no groups in the pattern, as it takes a fair amount of time.  If
+     there are groups, we include space for register 0 (the whole
+     pattern), even though we never use it, since it simplifies the
+     array indexing.  We should fix this.  */
+  if (bufp->re_nsub)
+    {
+      regstart = REGEX_TALLOC (num_regs, const char *);
+      regend = REGEX_TALLOC (num_regs, const char *);
+      old_regstart = REGEX_TALLOC (num_regs, const char *);
+      old_regend = REGEX_TALLOC (num_regs, const char *);
+      best_regstart = REGEX_TALLOC (num_regs, const char *);
+      best_regend = REGEX_TALLOC (num_regs, const char *);
+      reg_info = REGEX_TALLOC (num_regs, register_info_type);
+      reg_dummy = REGEX_TALLOC (num_regs, const char *);
+      reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
+
+      if (!(regstart && regend && old_regstart && old_regend && reg_info
+            && best_regstart && best_regend && reg_dummy && reg_info_dummy))
+        {
+          FREE_VARIABLES ();
+          return -2;
+        }
+    }
+  else
+    {
+      /* We must initialize all our variables to NULL, so that
+         `FREE_VARIABLES' doesn't try to free them.  */
+      regstart = regend = old_regstart = old_regend = best_regstart
+        = best_regend = reg_dummy = NULL;
+      reg_info = reg_info_dummy = (register_info_type *) NULL;
+    }
+#endif /* MATCH_MAY_ALLOCATE */
+
+  /* The starting position is bogus.  */
+  if (pos < 0 || pos > size1 + size2)
+    {
+      FREE_VARIABLES ();
+      return -1;
+    }
+
+  /* Initialize subexpression text positions to -1 to mark ones that no
+     start_memory/stop_memory has been seen for. Also initialize the
+     register information struct.  */
+  for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+    {
+      regstart[mcnt] = regend[mcnt]
+        = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
+
+      REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
+      IS_ACTIVE (reg_info[mcnt]) = 0;
+      MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+      EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
+    }
+
+  /* We move `string1' into `string2' if the latter's empty -- but not if
+     `string1' is null.  */
+  if (size2 == 0 && string1 != NULL)
+    {
+      string2 = string1;
+      size2 = size1;
+      string1 = 0;
+      size1 = 0;
+    }
+  end1 = string1 + size1;
+  end2 = string2 + size2;
+
+  /* Compute where to stop matching, within the two strings.  */
+  if (stop <= size1)
+    {
+      end_match_1 = string1 + stop;
+      end_match_2 = string2;
+    }
+  else
+    {
+      end_match_1 = end1;
+      end_match_2 = string2 + stop - size1;
+    }
+
+  /* `p' scans through the pattern as `d' scans through the data.
+     `dend' is the end of the input string that `d' points within.  `d'
+     is advanced into the following input string whenever necessary, but
+     this happens before fetching; therefore, at the beginning of the
+     loop, `d' can be pointing at the end of a string, but it cannot
+     equal `string2'.  */
+  if (size1 > 0 && pos <= size1)
+    {
+      d = string1 + pos;
+      dend = end_match_1;
+    }
+  else
+    {
+      d = string2 + pos - size1;
+      dend = end_match_2;
+    }
+
+  DEBUG_PRINT1 ("The compiled pattern is:\n");
+  DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
+  DEBUG_PRINT1 ("The string to match is: `");
+  DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
+  DEBUG_PRINT1 ("'\n");
+
+  /* This loops over pattern commands.  It exits by returning from the
+     function if the match is complete, or it drops through if the match
+     fails at this starting point in the input data.  */
+  for (;;)
+    {
+#ifdef _LIBC
+      DEBUG_PRINT2 ("\n%p: ", p);
+#else
+      DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+
+      if (p == pend)
+       { /* End of pattern means we might have succeeded.  */
+          DEBUG_PRINT1 ("end of pattern ... ");
+
+         /* If we haven't matched the entire string, and we want the
+             longest match, try backtracking.  */
+          if (d != end_match_2)
+           {
+             /* 1 if this match ends in the same string (string1 or string2)
+                as the best previous match.  */
+             boolean same_str_p = (FIRST_STRING_P (match_end)
+                                   == MATCHING_IN_FIRST_STRING);
+             /* 1 if this match is the best seen so far.  */
+             boolean best_match_p;
+
+             /* AIX compiler got confused when this was combined
+                with the previous declaration.  */
+             if (same_str_p)
+               best_match_p = d > match_end;
+             else
+               best_match_p = !MATCHING_IN_FIRST_STRING;
+
+              DEBUG_PRINT1 ("backtracking.\n");
+
+              if (!FAIL_STACK_EMPTY ())
+                { /* More failure points to try.  */
+
+                  /* If exceeds best match so far, save it.  */
+                  if (!best_regs_set || best_match_p)
+                    {
+                      best_regs_set = true;
+                      match_end = d;
+
+                      DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
+
+                      for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                        {
+                          best_regstart[mcnt] = regstart[mcnt];
+                          best_regend[mcnt] = regend[mcnt];
+                        }
+                    }
+                  goto fail;
+                }
+
+              /* If no failure points, don't restore garbage.  And if
+                 last match is real best match, don't restore second
+                 best one. */
+              else if (best_regs_set && !best_match_p)
+                {
+               restore_best_regs:
+                  /* Restore best match.  It may happen that `dend ==
+                     end_match_1' while the restored d is in string2.
+                     For example, the pattern `x.*y.*z' against the
+                     strings `x-' and `y-z-', if the two strings are
+                     not consecutive in memory.  */
+                  DEBUG_PRINT1 ("Restoring best registers.\n");
+
+                  d = match_end;
+                  dend = ((d >= string1 && d <= end1)
+                          ? end_match_1 : end_match_2);
+
+                 for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
+                   {
+                     regstart[mcnt] = best_regstart[mcnt];
+                     regend[mcnt] = best_regend[mcnt];
+                   }
+                }
+            } /* d != end_match_2 */
+
+       succeed_label:
+          DEBUG_PRINT1 ("Accepting match.\n");
+
+          /* If caller wants register contents data back, do it.  */
+          if (regs && !bufp->no_sub)
+           {
+              /* Have the register data arrays been allocated?  */
+              if (bufp->regs_allocated == REGS_UNALLOCATED)
+                { /* No.  So allocate them with malloc.  We need one
+                     extra element beyond `num_regs' for the `-1' marker
+                     GNU code uses.  */
+                  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
+                  regs->start = TALLOC (regs->num_regs, regoff_t);
+                  regs->end = TALLOC (regs->num_regs, regoff_t);
+                  if (regs->start == NULL || regs->end == NULL)
+                   {
+                     FREE_VARIABLES ();
+                     return -2;
+                   }
+                  bufp->regs_allocated = REGS_REALLOCATE;
+                }
+              else if (bufp->regs_allocated == REGS_REALLOCATE)
+                { /* Yes.  If we need more elements than were already
+                     allocated, reallocate them.  If we need fewer, just
+                     leave it alone.  */
+                  if (regs->num_regs < num_regs + 1)
+                    {
+                      regs->num_regs = num_regs + 1;
+                      RETALLOC (regs->start, regs->num_regs, regoff_t);
+                      RETALLOC (regs->end, regs->num_regs, regoff_t);
+                      if (regs->start == NULL || regs->end == NULL)
+                       {
+                         FREE_VARIABLES ();
+                         return -2;
+                       }
+                    }
+                }
+              else
+               {
+                 /* These braces fend off a "empty body in an else-statement"
+                    warning under GCC when assert expands to nothing.  */
+                 assert (bufp->regs_allocated == REGS_FIXED);
+               }
+
+              /* Convert the pointer data in `regstart' and `regend' to
+                 indices.  Register zero has to be set differently,
+                 since we haven't kept track of any info for it.  */
+              if (regs->num_regs > 0)
+                {
+                  regs->start[0] = pos;
+                  regs->end[0] = (MATCHING_IN_FIRST_STRING
+                                 ? ((regoff_t) (d - string1))
+                                 : ((regoff_t) (d - string2 + size1)));
+                }
+
+              /* Go through the first `min (num_regs, regs->num_regs)'
+                 registers, since that is all we initialized.  */
+             for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
+                  mcnt++)
+               {
+                  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
+                    regs->start[mcnt] = regs->end[mcnt] = -1;
+                  else
+                    {
+                     regs->start[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
+                      regs->end[mcnt]
+                       = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
+                    }
+               }
+
+              /* If the regs structure we return has more elements than
+                 were in the pattern, set the extra elements to -1.  If
+                 we (re)allocated the registers, this is the case,
+                 because we always allocate enough to have at least one
+                 -1 at the end.  */
+              for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
+                regs->start[mcnt] = regs->end[mcnt] = -1;
+           } /* regs && !bufp->no_sub */
+
+          DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
+                        nfailure_points_pushed, nfailure_points_popped,
+                        nfailure_points_pushed - nfailure_points_popped);
+          DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
+
+          mcnt = d - pos - (MATCHING_IN_FIRST_STRING
+                           ? string1
+                           : string2 - size1);
+
+          DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
+
+          FREE_VARIABLES ();
+          return mcnt;
+        }
+
+      /* Otherwise match next pattern command.  */
+      switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
+       {
+        /* Ignore these.  Used to ignore the n of succeed_n's which
+           currently have n == 0.  */
+        case no_op:
+          DEBUG_PRINT1 ("EXECUTING no_op.\n");
+          break;
+
+       case succeed:
+          DEBUG_PRINT1 ("EXECUTING succeed.\n");
+         goto succeed_label;
+
+        /* Match the next n pattern characters exactly.  The following
+           byte in the pattern defines n, and the n bytes after that
+           are the characters to match.  */
+       case exactn:
+         mcnt = *p++;
+          DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
+
+          /* This is written out as an if-else so we don't waste time
+             testing `translate' inside the loop.  */
+          if (translate)
+           {
+             do
+               {
+                 PREFETCH ();
+                 if ((unsigned char) translate[(unsigned char) *d++]
+                     != (unsigned char) *p++)
+                    goto fail;
+               }
+             while (--mcnt);
+           }
+         else
+           {
+             do
+               {
+                 PREFETCH ();
+                 if (*d++ != (char) *p++) goto fail;
+               }
+             while (--mcnt);
+           }
+         SET_REGS_MATCHED ();
+          break;
+
+
+        /* Match any character except possibly a newline or a null.  */
+       case anychar:
+          DEBUG_PRINT1 ("EXECUTING anychar.\n");
+
+          PREFETCH ();
+
+          if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
+              || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
+           goto fail;
+
+          SET_REGS_MATCHED ();
+          DEBUG_PRINT2 ("  Matched `%d'.\n", *d);
+          d++;
+         break;
+
+
+       case charset:
+       case charset_not:
+         {
+           register unsigned char c;
+           boolean not = (re_opcode_t) *(p - 1) == charset_not;
+
+            DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
+
+           PREFETCH ();
+           c = TRANSLATE (*d); /* The character to match.  */
+
+            /* Cast to `unsigned' instead of `unsigned char' in case the
+               bit list is a full 32 bytes long.  */
+           if (c < (unsigned) (*p * BYTEWIDTH)
+               && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+             not = !not;
+
+           p += 1 + *p;
+
+           if (!not) goto fail;
+
+           SET_REGS_MATCHED ();
+            d++;
+           break;
+         }
+
+
+        /* The beginning of a group is represented by start_memory.
+           The arguments are the register number in the next byte, and the
+           number of groups inner to this one in the next.  The text
+           matched within the group is recorded (in the internal
+           registers data structure) under the register number.  */
+        case start_memory:
+         DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
+
+          /* Find out if this group can match the empty string.  */
+         p1 = p;               /* To send to group_match_null_string_p.  */
+
+          if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
+            REG_MATCH_NULL_STRING_P (reg_info[*p])
+              = group_match_null_string_p (&p1, pend, reg_info);
+
+          /* Save the position in the string where we were the last time
+             we were at this open-group operator in case the group is
+             operated upon by a repetition operator, e.g., with `(a*)*b'
+             against `ab'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                             ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
+                             : regstart[*p];
+         DEBUG_PRINT2 ("  old_regstart: %d\n",
+                        POINTER_TO_OFFSET (old_regstart[*p]));
+
+          regstart[*p] = d;
+         DEBUG_PRINT2 ("  regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
+
+          IS_ACTIVE (reg_info[*p]) = 1;
+          MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* This is the new highest active register.  */
+          highest_active_reg = *p;
+
+          /* If nothing was active before, this is the new lowest active
+             register.  */
+          if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+            lowest_active_reg = *p;
+
+          /* Move past the register number and inner group count.  */
+          p += 2;
+         just_past_start_mem = p;
+
+          break;
+
+
+        /* The stop_memory opcode represents the end of a group.  Its
+           arguments are the same as start_memory's: the register
+           number, and the number of inner groups.  */
+       case stop_memory:
+         DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
+
+          /* We need to save the string position the last time we were at
+             this close-group operator in case the group is operated
+             upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
+             against `aba'; then we want to ignore where we are now in
+             the string in case this attempt to match fails.  */
+          old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
+                           ? REG_UNSET (regend[*p]) ? d : regend[*p]
+                          : regend[*p];
+         DEBUG_PRINT2 ("      old_regend: %d\n",
+                        POINTER_TO_OFFSET (old_regend[*p]));
+
+          regend[*p] = d;
+         DEBUG_PRINT2 ("      regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
+
+          /* This register isn't active anymore.  */
+          IS_ACTIVE (reg_info[*p]) = 0;
+
+         /* Clear this whenever we change the register activity status.  */
+         set_regs_matched_done = 0;
+
+          /* If this was the only register active, nothing is active
+             anymore.  */
+          if (lowest_active_reg == highest_active_reg)
+            {
+              lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+              highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+            }
+          else
+            { /* We must scan for the new highest active register, since
+                 it isn't necessarily one less than now: consider
+                 (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
+                 new highest active register is 1.  */
+              unsigned char r = *p - 1;
+              while (r > 0 && !IS_ACTIVE (reg_info[r]))
+                r--;
+
+              /* If we end up at register zero, that means that we saved
+                 the registers as the result of an `on_failure_jump', not
+                 a `start_memory', and we jumped to past the innermost
+                 `stop_memory'.  For example, in ((.)*) we save
+                 registers 1 and 2 as a result of the *, but when we pop
+                 back to the second ), we are at the stop_memory 1.
+                 Thus, nothing is active.  */
+             if (r == 0)
+                {
+                  lowest_active_reg = NO_LOWEST_ACTIVE_REG;
+                  highest_active_reg = NO_HIGHEST_ACTIVE_REG;
+                }
+              else
+                highest_active_reg = r;
+            }
+
+          /* If just failed to match something this time around with a
+             group that's operated on by a repetition operator, try to
+             force exit from the ``loop'', and restore the register
+             information for this group that we had before trying this
+             last match.  */
+          if ((!MATCHED_SOMETHING (reg_info[*p])
+               || just_past_start_mem == p - 1)
+             && (p + 2) < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              p1 = p + 2;
+              mcnt = 0;
+              switch ((re_opcode_t) *p1++)
+                {
+                  case jump_n:
+                   is_a_jump_n = true;
+                  case pop_failure_jump:
+                 case maybe_pop_jump:
+                 case jump:
+                 case dummy_failure_jump:
+                    EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                   if (is_a_jump_n)
+                     p1 += 2;
+                    break;
+
+                  default:
+                    /* do nothing */ ;
+                }
+             p1 += mcnt;
+
+              /* If the next operation is a jump backwards in the pattern
+                to an on_failure_jump right before the start_memory
+                 corresponding to this stop_memory, exit from the loop
+                 by forcing a failure after pushing on the stack the
+                 on_failure_jump's jump in the pattern, and d.  */
+              if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
+                  && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
+               {
+                  /* If this group ever matched anything, then restore
+                     what its registers were before trying this last
+                     failed match, e.g., with `(a*)*b' against `ab' for
+                     regstart[1], and, e.g., with `((a*)*(b*)*)*'
+                     against `aba' for regend[3].
+
+                     Also restore the registers for inner groups for,
+                     e.g., `((a*)(b*))*' against `aba' (register 3 would
+                     otherwise get trashed).  */
+
+                  if (EVER_MATCHED_SOMETHING (reg_info[*p]))
+                   {
+                     unsigned r;
+
+                      EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
+
+                     /* Restore this and inner groups' (if any) registers.  */
+                      for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
+                          r++)
+                        {
+                          regstart[r] = old_regstart[r];
+
+                          /* xx why this test?  */
+                          if (old_regend[r] >= regstart[r])
+                            regend[r] = old_regend[r];
+                        }
+                    }
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
+
+                  goto fail;
+                }
+            }
+
+          /* Move past the register number and the inner group count.  */
+          p += 2;
+          break;
+
+
+       /* \<digit> has been turned into a `duplicate' command which is
+           followed by the numeric value of <digit> as the register number.  */
+        case duplicate:
+         {
+           register const char *d2, *dend2;
+           int regno = *p++;   /* Get which register to match against.  */
+           DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
+
+           /* Can't back reference a group which we've never matched.  */
+            if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+              goto fail;
+
+            /* Where in input to try to start matching.  */
+            d2 = regstart[regno];
+
+            /* Where to stop matching; if both the place to start and
+               the place to stop matching are in the same string, then
+               set to the place to stop, otherwise, for now have to use
+               the end of the first string.  */
+
+            dend2 = ((FIRST_STRING_P (regstart[regno])
+                     == FIRST_STRING_P (regend[regno]))
+                    ? regend[regno] : end_match_1);
+           for (;;)
+             {
+               /* If necessary, advance to next segment in register
+                   contents.  */
+               while (d2 == dend2)
+                 {
+                   if (dend2 == end_match_2) break;
+                   if (dend2 == regend[regno]) break;
+
+                    /* End of string1 => advance to string2. */
+                    d2 = string2;
+                    dend2 = regend[regno];
+                 }
+               /* At end of register contents => success */
+               if (d2 == dend2) break;
+
+               /* If necessary, advance to next segment in data.  */
+               PREFETCH ();
+
+               /* How many characters left in this segment to match.  */
+               mcnt = dend - d;
+
+               /* Want how many consecutive characters we can match in
+                   one shot, so, if necessary, adjust the count.  */
+                if (mcnt > dend2 - d2)
+                 mcnt = dend2 - d2;
+
+               /* Compare that many; failure if mismatch, else move
+                   past them.  */
+               if (translate
+                    ? bcmp_translate (d, d2, mcnt, translate)
+                    : memcmp (d, d2, mcnt))
+                 goto fail;
+               d += mcnt, d2 += mcnt;
+
+               /* Do this because we've match some characters.  */
+               SET_REGS_MATCHED ();
+             }
+         }
+         break;
+
+
+        /* begline matches the empty string at the beginning of the string
+           (unless `not_bol' is set in `bufp'), and, if
+           `newline_anchor' is set, after newlines.  */
+       case begline:
+          DEBUG_PRINT1 ("EXECUTING begline.\n");
+
+          if (AT_STRINGS_BEG (d))
+            {
+              if (!bufp->not_bol) break;
+            }
+          else if (d[-1] == '\n' && bufp->newline_anchor)
+            {
+              break;
+            }
+          /* In all other cases, we fail.  */
+          goto fail;
+
+
+        /* endline is the dual of begline.  */
+       case endline:
+          DEBUG_PRINT1 ("EXECUTING endline.\n");
+
+          if (AT_STRINGS_END (d))
+            {
+              if (!bufp->not_eol) break;
+            }
+
+          /* We have to ``prefetch'' the next character.  */
+          else if ((d == end1 ? *string2 : *d) == '\n'
+                   && bufp->newline_anchor)
+            {
+              break;
+            }
+          goto fail;
+
+
+       /* Match at the very beginning of the data.  */
+        case begbuf:
+          DEBUG_PRINT1 ("EXECUTING begbuf.\n");
+          if (AT_STRINGS_BEG (d))
+            break;
+          goto fail;
+
+
+       /* Match at the very end of the data.  */
+        case endbuf:
+          DEBUG_PRINT1 ("EXECUTING endbuf.\n");
+         if (AT_STRINGS_END (d))
+           break;
+          goto fail;
+
+
+        /* on_failure_keep_string_jump is used to optimize `.*\n'.  It
+           pushes NULL as the value for the string on the stack.  Then
+           `pop_failure_point' will keep the current value for the
+           string, instead of restoring it.  To see why, consider
+           matching `foo\nbar' against `.*\n'.  The .* matches the foo;
+           then the . fails against the \n.  But the next thing we want
+           to do is match the \n against the \n; if we restored the
+           string value, we would be back at the foo.
+
+           Because this is used only in specific cases, we don't need to
+           check all the things that `on_failure_jump' does, to make
+           sure the right things get saved on the stack.  Hence we don't
+           share its code.  The only reason to push anything on the
+           stack at all is that otherwise we would have to change
+           `anychar's code to do something besides goto fail in this
+           case; that seems worse than this.  */
+        case on_failure_keep_string_jump:
+          DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
+#endif
+
+          PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
+          break;
+
+
+       /* Uses of on_failure_jump:
+
+           Each alternative starts with an on_failure_jump that points
+           to the beginning of the next alternative.  Each alternative
+           except the last ends with a jump that in effect jumps past
+           the rest of the alternatives.  (They really jump to the
+           ending jump of the following alternative, because tensioning
+           these jumps is a hassle.)
+
+           Repeats start with an on_failure_jump that points past both
+           the repetition text and either the following jump or
+           pop_failure_jump back to this on_failure_jump.  */
+       case on_failure_jump:
+        on_failure:
+          DEBUG_PRINT1 ("EXECUTING on_failure_jump");
+
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+          DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
+#else
+          DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
+#endif
+
+          /* If this on_failure_jump comes right before a group (i.e.,
+             the original * applied to a group), save the information
+             for that group and all inner ones, so that if we fail back
+             to this point, the group's information will be correct.
+             For example, in \(a*\)*\1, we need the preceding group,
+             and in \(zz\(a*\)b*\)\2, we need the inner group.  */
+
+          /* We can't use `p' to check ahead because we push
+             a failure point to `p + mcnt' after we do this.  */
+          p1 = p;
+
+          /* We need to skip no_op's before we look for the
+             start_memory in case this on_failure_jump is happening as
+             the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
+             against aba.  */
+          while (p1 < pend && (re_opcode_t) *p1 == no_op)
+            p1++;
+
+          if (p1 < pend && (re_opcode_t) *p1 == start_memory)
+            {
+              /* We have a new highest active register now.  This will
+                 get reset at the start_memory we are about to get to,
+                 but we will have saved all the registers relevant to
+                 this repetition op, as described above.  */
+              highest_active_reg = *(p1 + 1) + *(p1 + 2);
+              if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
+                lowest_active_reg = *(p1 + 1);
+            }
+
+          DEBUG_PRINT1 (":\n");
+          PUSH_FAILURE_POINT (p + mcnt, d, -2);
+          break;
+
+
+        /* A smart repeat ends with `maybe_pop_jump'.
+          We change it to either `pop_failure_jump' or `jump'.  */
+        case maybe_pop_jump:
+          EXTRACT_NUMBER_AND_INCR (mcnt, p);
+          DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
+          {
+           register unsigned char *p2 = p;
+
+            /* Compare the beginning of the repeat with what in the
+               pattern follows its end. If we can establish that there
+               is nothing that they would both match, i.e., that we
+               would have to backtrack because of (as in, e.g., `a*a')
+               then we can change to pop_failure_jump, because we'll
+               never have to backtrack.
+
+               This is not true in the case of alternatives: in
+               `(a|ab)*' we do need to backtrack to the `ab' alternative
+               (e.g., if the string was `ab').  But instead of trying to
+               detect that here, the alternative has put on a dummy
+               failure point which is what we will end up popping.  */
+
+           /* Skip over open/close-group commands.
+              If what follows this loop is a ...+ construct,
+              look at what begins its body, since we will have to
+              match at least one of that.  */
+           while (1)
+             {
+               if (p2 + 2 < pend
+                   && ((re_opcode_t) *p2 == stop_memory
+                       || (re_opcode_t) *p2 == start_memory))
+                 p2 += 3;
+               else if (p2 + 6 < pend
+                        && (re_opcode_t) *p2 == dummy_failure_jump)
+                 p2 += 6;
+               else
+                 break;
+             }
+
+           p1 = p + mcnt;
+           /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
+              to the `maybe_finalize_jump' of this case.  Examine what
+              follows.  */
+
+            /* If we're at the end of the pattern, we can change.  */
+            if (p2 == pend)
+             {
+               /* Consider what happens when matching ":\(.*\)"
+                  against ":/".  I don't really understand this code
+                  yet.  */
+               p[-3] = (unsigned char) pop_failure_jump;
+                DEBUG_PRINT1
+                  ("  End of pattern: change to `pop_failure_jump'.\n");
+              }
+
+            else if ((re_opcode_t) *p2 == exactn
+                    || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
+             {
+               register unsigned char c
+                  = *p2 == (unsigned char) endline ? '\n' : p2[2];
+
+                if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
+                  {
+                   p[-3] = (unsigned char) pop_failure_jump;
+                    DEBUG_PRINT3 ("  %c != %c => pop_failure_jump.\n",
+                                  c, p1[5]);
+                  }
+
+               else if ((re_opcode_t) p1[3] == charset
+                        || (re_opcode_t) p1[3] == charset_not)
+                 {
+                   int not = (re_opcode_t) p1[3] == charset_not;
+
+                   if (c < (unsigned char) (p1[4] * BYTEWIDTH)
+                       && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
+                     not = !not;
+
+                    /* `not' is equal to 1 if c would match, which means
+                        that we can't change to pop_failure_jump.  */
+                   if (!not)
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+             }
+            else if ((re_opcode_t) *p2 == charset)
+             {
+               /* We win if the first character of the loop is not part
+                   of the charset.  */
+                if ((re_opcode_t) p1[3] == exactn
+                   && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
+                         && (p2[2 + p1[5] / BYTEWIDTH]
+                             & (1 << (p1[5] % BYTEWIDTH)))))
+                 {
+                   p[-3] = (unsigned char) pop_failure_jump;
+                   DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                  }
+
+               else if ((re_opcode_t) p1[3] == charset_not)
+                 {
+                   int idx;
+                   /* We win if the charset_not inside the loop
+                      lists every character listed in the charset after.  */
+                   for (idx = 0; idx < (int) p2[1]; idx++)
+                     if (! (p2[2 + idx] == 0
+                            || (idx < (int) p1[4]
+                                && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
+                       break;
+
+                   if (idx == p2[1])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+               else if ((re_opcode_t) p1[3] == charset)
+                 {
+                   int idx;
+                   /* We win if the charset inside the loop
+                      has no overlap with the one after the loop.  */
+                   for (idx = 0;
+                        idx < (int) p2[1] && idx < (int) p1[4];
+                        idx++)
+                     if ((p2[2 + idx] & p1[5 + idx]) != 0)
+                       break;
+
+                   if (idx == p2[1] || idx == p1[4])
+                      {
+                       p[-3] = (unsigned char) pop_failure_jump;
+                        DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
+                      }
+                 }
+             }
+         }
+         p -= 2;               /* Point at relative address again.  */
+         if ((re_opcode_t) p[-1] != pop_failure_jump)
+           {
+             p[-1] = (unsigned char) jump;
+              DEBUG_PRINT1 ("  Match => jump.\n");
+             goto unconditional_jump;
+           }
+        /* Note fall through.  */
+
+
+       /* The end of a simple repeat has a pop_failure_jump back to
+           its matching on_failure_jump, where the latter will push a
+           failure point.  The pop_failure_jump takes off failure
+           points put on by this pop_failure_jump's matching
+           on_failure_jump; we got through the pattern to here from the
+           matching on_failure_jump, so didn't fail.  */
+        case pop_failure_jump:
+          {
+            /* We need to pass separate storage for the lowest and
+               highest registers, even though we don't care about the
+               actual values.  Otherwise, we will restore only one
+               register from the stack, since lowest will == highest in
+               `pop_failure_point'.  */
+            active_reg_t dummy_low_reg, dummy_high_reg;
+            unsigned char *pdummy;
+            const char *sdummy;
+
+            DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
+            POP_FAILURE_POINT (sdummy, pdummy,
+                               dummy_low_reg, dummy_high_reg,
+                               reg_dummy, reg_dummy, reg_info_dummy);
+          }
+         /* Note fall through.  */
+
+       unconditional_jump:
+#ifdef _LIBC
+         DEBUG_PRINT2 ("\n%p: ", p);
+#else
+         DEBUG_PRINT2 ("\n0x%x: ", p);
+#endif
+          /* Note fall through.  */
+
+        /* Unconditionally jump (without popping any failure points).  */
+        case jump:
+         EXTRACT_NUMBER_AND_INCR (mcnt, p);    /* Get the amount to jump.  */
+          DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
+         p += mcnt;                            /* Do the jump.  */
+#ifdef _LIBC
+          DEBUG_PRINT2 ("(to %p).\n", p);
+#else
+          DEBUG_PRINT2 ("(to 0x%x).\n", p);
+#endif
+         break;
+
+
+        /* We need this opcode so we can detect where alternatives end
+           in `group_match_null_string_p' et al.  */
+        case jump_past_alt:
+          DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
+          goto unconditional_jump;
+
+
+        /* Normally, the on_failure_jump pushes a failure point, which
+           then gets popped at pop_failure_jump.  We will end up at
+           pop_failure_jump, also, and with a pattern of, say, `a+', we
+           are skipping over the on_failure_jump, so we have to push
+           something meaningless for pop_failure_jump to pop.  */
+        case dummy_failure_jump:
+          DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
+          /* It doesn't matter what we push for the string here.  What
+             the code at `fail' tests is the value for the pattern.  */
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
+          goto unconditional_jump;
+
+
+        /* At the end of an alternative, we need to push a dummy failure
+           point in case we are followed by a `pop_failure_jump', because
+           we don't want the failure point for the alternative to be
+           popped.  For example, matching `(a|ab)*' against `aab'
+           requires that we match the `ab' alternative.  */
+        case push_dummy_failure:
+          DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
+          /* See comments just above at `dummy_failure_jump' about the
+             two zeroes.  */
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
+          break;
+
+        /* Have to succeed matching what follows at least n times.
+           After that, handle like `on_failure_jump'.  */
+        case succeed_n:
+          EXTRACT_NUMBER (mcnt, p + 2);
+          DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
+
+          assert (mcnt >= 0);
+          /* Originally, this is how many times we HAVE to succeed.  */
+          if (mcnt > 0)
+            {
+               mcnt--;
+              p += 2;
+               STORE_NUMBER_AND_INCR (p, mcnt);
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p - 2, mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p - 2, mcnt);
+#endif
+            }
+         else if (mcnt == 0)
+            {
+#ifdef _LIBC
+              DEBUG_PRINT2 ("  Setting two bytes from %p to no_op.\n", p+2);
+#else
+              DEBUG_PRINT2 ("  Setting two bytes from 0x%x to no_op.\n", p+2);
+#endif
+             p[2] = (unsigned char) no_op;
+              p[3] = (unsigned char) no_op;
+              goto on_failure;
+            }
+          break;
+
+        case jump_n:
+          EXTRACT_NUMBER (mcnt, p + 2);
+          DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
+
+          /* Originally, this is how many times we CAN jump.  */
+          if (mcnt)
+            {
+               mcnt--;
+               STORE_NUMBER (p + 2, mcnt);
+#ifdef _LIBC
+               DEBUG_PRINT3 ("  Setting %p to %d.\n", p + 2, mcnt);
+#else
+               DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p + 2, mcnt);
+#endif
+              goto unconditional_jump;
+            }
+          /* If don't have to jump any more, skip over the rest of command.  */
+         else
+           p += 4;
+          break;
+
+       case set_number_at:
+         {
+            DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
+
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+            p1 = p + mcnt;
+            EXTRACT_NUMBER_AND_INCR (mcnt, p);
+#ifdef _LIBC
+            DEBUG_PRINT3 ("  Setting %p to %d.\n", p1, mcnt);
+#else
+            DEBUG_PRINT3 ("  Setting 0x%x to %d.\n", p1, mcnt);
+#endif
+           STORE_NUMBER (p1, mcnt);
+            break;
+          }
+
+#if 0
+       /* The DEC Alpha C compiler 3.x generates incorrect code for the
+          test  WORDCHAR_P (d - 1) != WORDCHAR_P (d)  in the expansion of
+          AT_WORD_BOUNDARY, so this code is disabled.  Expanding the
+          macro and introducing temporary variables works around the bug.  */
+
+       case wordbound:
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           break;
+         goto fail;
+
+       case notwordbound:
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_WORD_BOUNDARY (d))
+           goto fail;
+         break;
+#else
+       case wordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING wordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           break;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           break;
+         goto fail;
+       }
+
+      case notwordbound:
+       {
+         boolean prevchar, thischar;
+
+         DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
+         if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
+           goto fail;
+
+         prevchar = WORDCHAR_P (d - 1);
+         thischar = WORDCHAR_P (d);
+         if (prevchar != thischar)
+           goto fail;
+         break;
+       }
+#endif
+
+       case wordbeg:
+          DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
+         if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
+           break;
+          goto fail;
+
+       case wordend:
+          DEBUG_PRINT1 ("EXECUTING wordend.\n");
+         if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
+              && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
+           break;
+          goto fail;
+
+#ifdef emacs
+       case before_dot:
+          DEBUG_PRINT1 ("EXECUTING before_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) >= point)
+           goto fail;
+         break;
+
+       case at_dot:
+          DEBUG_PRINT1 ("EXECUTING at_dot.\n");
+         if (PTR_CHAR_POS ((unsigned char *) d) != point)
+           goto fail;
+         break;
+
+       case after_dot:
+          DEBUG_PRINT1 ("EXECUTING after_dot.\n");
+          if (PTR_CHAR_POS ((unsigned char *) d) <= point)
+           goto fail;
+         break;
+
+       case syntaxspec:
+          DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchsyntax;
+
+        case wordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
+         mcnt = (int) Sword;
+        matchsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
+           goto fail;
+          SET_REGS_MATCHED ();
+         break;
+
+       case notsyntaxspec:
+          DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
+         mcnt = *p++;
+         goto matchnotsyntax;
+
+        case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
+         mcnt = (int) Sword;
+        matchnotsyntax:
+         PREFETCH ();
+         /* Can't use *d++ here; SYNTAX may be an unsafe macro.  */
+         d++;
+         if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
+           goto fail;
+         SET_REGS_MATCHED ();
+          break;
+
+#else /* not emacs */
+       case wordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
+         PREFETCH ();
+          if (!WORDCHAR_P (d))
+            goto fail;
+         SET_REGS_MATCHED ();
+          d++;
+         break;
+
+       case notwordchar:
+          DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
+         PREFETCH ();
+         if (WORDCHAR_P (d))
+            goto fail;
+          SET_REGS_MATCHED ();
+          d++;
+         break;
+#endif /* not emacs */
+
+        default:
+          abort ();
+       }
+      continue;  /* Successfully executed one pattern command; keep going.  */
+
+
+    /* We goto here if a matching operation fails. */
+    fail:
+      if (!FAIL_STACK_EMPTY ())
+       { /* A restart point is known.  Restore to that state.  */
+          DEBUG_PRINT1 ("\nFAIL:\n");
+          POP_FAILURE_POINT (d, p,
+                             lowest_active_reg, highest_active_reg,
+                             regstart, regend, reg_info);
+
+          /* If this failure point is a dummy, try the next one.  */
+          if (!p)
+           goto fail;
+
+          /* If we failed to the end of the pattern, don't examine *p.  */
+         assert (p <= pend);
+          if (p < pend)
+            {
+              boolean is_a_jump_n = false;
+
+              /* If failed to a backwards jump that's part of a repetition
+                 loop, need to pop this failure point and use the next one.  */
+              switch ((re_opcode_t) *p)
+                {
+                case jump_n:
+                  is_a_jump_n = true;
+                case maybe_pop_jump:
+                case pop_failure_jump:
+                case jump:
+                  p1 = p + 1;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  p1 += mcnt;
+
+                  if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
+                      || (!is_a_jump_n
+                          && (re_opcode_t) *p1 == on_failure_jump))
+                    goto fail;
+                  break;
+                default:
+                  /* do nothing */ ;
+                }
+            }
+
+          if (d >= string1 && d <= end1)
+           dend = end_match_1;
+        }
+      else
+        break;   /* Matching at this starting point really fails.  */
+    } /* for (;;) */
+
+  if (best_regs_set)
+    goto restore_best_regs;
+
+  FREE_VARIABLES ();
+
+  return -1;                           /* Failure to match.  */
+} /* re_match_2 */
+\f
+/* Subroutine definitions for re_match_2.  */
+
+
+/* We are passed P pointing to a register number after a start_memory.
+
+   Return true if the pattern up to the corresponding stop_memory can
+   match the empty string, and false otherwise.
+
+   If we find the matching stop_memory, sets P to point to one past its number.
+   Otherwise, sets P to an undefined byte less than or equal to END.
+
+   We don't handle duplicates properly (yet).  */
+
+static boolean
+group_match_null_string_p (p, end, reg_info)
+    unsigned char **p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  /* Point to after the args to the start_memory.  */
+  unsigned char *p1 = *p + 2;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and return true or
+        false, as appropriate, when we get to one that can't, or to the
+         matching stop_memory.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+        /* Could be either a loop or a series of alternatives.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+          /* If the next operation is not a jump backwards in the
+            pattern.  */
+
+         if (mcnt >= 0)
+           {
+              /* Go through the on_failure_jumps of the alternatives,
+                 seeing if any of the alternatives cannot match nothing.
+                 The last alternative starts with only a jump,
+                 whereas the rest start with on_failure_jump and end
+                 with a jump, e.g., here is the pattern for `a|b|c':
+
+                 /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
+                 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
+                 /exactn/1/c
+
+                 So, we have to first go through the first (n-1)
+                 alternatives and then deal with the last one separately.  */
+
+
+              /* Deal with the first (n-1) alternatives, which start
+                 with an on_failure_jump (see above) that jumps to right
+                 past a jump_past_alt.  */
+
+              while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
+                {
+                  /* `mcnt' holds how many bytes long the alternative
+                     is, including the ending `jump_past_alt' and
+                     its number.  */
+
+                  if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
+                                                     reg_info))
+                    return false;
+
+                  /* Move to right after this alternative, including the
+                    jump_past_alt.  */
+                  p1 += mcnt;
+
+                  /* Break if it's the beginning of an n-th alternative
+                     that doesn't begin with an on_failure_jump.  */
+                  if ((re_opcode_t) *p1 != on_failure_jump)
+                    break;
+
+                 /* Still have to check that it's not an n-th
+                    alternative that starts with an on_failure_jump.  */
+                 p1++;
+                  EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+                  if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
+                    {
+                     /* Get to the beginning of the n-th alternative.  */
+                      p1 -= 3;
+                      break;
+                    }
+                }
+
+              /* Deal with the last alternative: go back and get number
+                 of the `jump_past_alt' just before it.  `mcnt' contains
+                 the length of the alternative.  */
+              EXTRACT_NUMBER (mcnt, p1 - 2);
+
+              if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
+                return false;
+
+              p1 += mcnt;      /* Get past the n-th alternative.  */
+            } /* if mcnt > 0 */
+          break;
+
+
+        case stop_memory:
+         assert (p1[1] == **p);
+          *p = p1 + 2;
+          return true;
+
+
+        default:
+          if (!common_op_match_null_string_p (&p1, end, reg_info))
+            return false;
+        }
+    } /* while p1 < end */
+
+  return false;
+} /* group_match_null_string_p */
+
+
+/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
+   It expects P to be the first byte of a single alternative and END one
+   byte past the last. The alternative can contain groups.  */
+
+static boolean
+alt_match_null_string_p (p, end, reg_info)
+    unsigned char *p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  unsigned char *p1 = p;
+
+  while (p1 < end)
+    {
+      /* Skip over opcodes that can match nothing, and break when we get
+         to one that can't.  */
+
+      switch ((re_opcode_t) *p1)
+        {
+       /* It's a loop.  */
+        case on_failure_jump:
+          p1++;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+          break;
+
+       default:
+          if (!common_op_match_null_string_p (&p1, end, reg_info))
+            return false;
+        }
+    }  /* while p1 < end */
+
+  return true;
+} /* alt_match_null_string_p */
+
+
+/* Deals with the ops common to group_match_null_string_p and
+   alt_match_null_string_p.
+
+   Sets P to one after the op and its arguments, if any.  */
+
+static boolean
+common_op_match_null_string_p (p, end, reg_info)
+    unsigned char **p, *end;
+    register_info_type *reg_info;
+{
+  int mcnt;
+  boolean ret;
+  int reg_no;
+  unsigned char *p1 = *p;
+
+  switch ((re_opcode_t) *p1++)
+    {
+    case no_op:
+    case begline:
+    case endline:
+    case begbuf:
+    case endbuf:
+    case wordbeg:
+    case wordend:
+    case wordbound:
+    case notwordbound:
+#ifdef emacs
+    case before_dot:
+    case at_dot:
+    case after_dot:
+#endif
+      break;
+
+    case start_memory:
+      reg_no = *p1;
+      assert (reg_no > 0 && reg_no <= MAX_REGNUM);
+      ret = group_match_null_string_p (&p1, end, reg_info);
+
+      /* Have to set this here in case we're checking a group which
+         contains a group and a back reference to it.  */
+
+      if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
+        REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
+
+      if (!ret)
+        return false;
+      break;
+
+    /* If this is an optimized succeed_n for zero times, make the jump.  */
+    case jump:
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+      if (mcnt >= 0)
+        p1 += mcnt;
+      else
+        return false;
+      break;
+
+    case succeed_n:
+      /* Get to the number of times to succeed.  */
+      p1 += 2;
+      EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+
+      if (mcnt == 0)
+        {
+          p1 -= 4;
+          EXTRACT_NUMBER_AND_INCR (mcnt, p1);
+          p1 += mcnt;
+        }
+      else
+        return false;
+      break;
+
+    case duplicate:
+      if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
+        return false;
+      break;
+
+    case set_number_at:
+      p1 += 4;
+
+    default:
+      /* All other opcodes mean we cannot match the empty string.  */
+      return false;
+  }
+
+  *p = p1;
+  return true;
+} /* common_op_match_null_string_p */
+
+
+/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
+   bytes; nonzero otherwise.  */
+
+static int
+bcmp_translate (s1, s2, len, translate)
+     const char *s1, *s2;
+     register int len;
+     RE_TRANSLATE_TYPE translate;
+{
+  register const unsigned char *p1 = (const unsigned char *) s1;
+  register const unsigned char *p2 = (const unsigned char *) s2;
+  while (len)
+    {
+      if (translate[*p1++] != translate[*p2++]) return 1;
+      len--;
+    }
+  return 0;
+}
+\f
+/* Entry points for GNU code.  */
+
+/* re_compile_pattern is the GNU regular expression compiler: it
+   compiles PATTERN (of length SIZE) and puts the result in BUFP.
+   Returns 0 if the pattern was valid, otherwise an error string.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate' fields
+   are set in BUFP on entry.
+
+   We call regex_compile to do the actual compilation.  */
+
+const char *
+re_compile_pattern (pattern, length, bufp)
+     const char *pattern;
+     size_t length;
+     struct re_pattern_buffer *bufp;
+{
+  reg_errcode_t ret;
+
+  /* GNU code is written to assume at least RE_NREGS registers will be set
+     (and at least one extra will be -1).  */
+  bufp->regs_allocated = REGS_UNALLOCATED;
+
+  /* And GNU code determines whether or not to get register information
+     by passing null for the REGS argument to re_match, etc., not by
+     setting no_sub.  */
+  bufp->no_sub = 0;
+
+  /* Match anchors at newline.  */
+  bufp->newline_anchor = 1;
+
+  ret = regex_compile (pattern, length, re_syntax_options, bufp);
+
+  if (!ret)
+    return NULL;
+  return gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
+}
+#ifdef _LIBC
+weak_alias (__re_compile_pattern, re_compile_pattern)
+#endif
+\f
+/* Entry points compatible with 4.2 BSD regex library.  We don't define
+   them unless specifically requested.  */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+
+/* BSD has one and only one pattern buffer.  */
+static struct re_pattern_buffer re_comp_buf;
+
+char *
+#ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+   these names if they don't use our functions, and still use
+   regcomp/regexec below without link errors.  */
+weak_function
+#endif
+re_comp (s)
+    const char *s;
+{
+  reg_errcode_t ret;
+
+  if (!s)
+    {
+      if (!re_comp_buf.buffer)
+       return gettext ("No previous regular expression");
+      return 0;
+    }
+
+  if (!re_comp_buf.buffer)
+    {
+      re_comp_buf.buffer = (unsigned char *) malloc (200);
+      if (re_comp_buf.buffer == NULL)
+        return (char *) gettext (re_error_msgid
+                                + re_error_msgid_idx[(int) REG_ESPACE]);
+      re_comp_buf.allocated = 200;
+
+      re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
+      if (re_comp_buf.fastmap == NULL)
+       return (char *) gettext (re_error_msgid
+                                + re_error_msgid_idx[(int) REG_ESPACE]);
+    }
+
+  /* Since `re_exec' always passes NULL for the `regs' argument, we
+     don't need to initialize the pattern buffer fields which affect it.  */
+
+  /* Match anchors at newlines.  */
+  re_comp_buf.newline_anchor = 1;
+
+  ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
+
+  if (!ret)
+    return NULL;
+
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+  return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
+}
+
+
+int
+#ifdef _LIBC
+weak_function
+#endif
+re_exec (s)
+    const char *s;
+{
+  const int len = strlen (s);
+  return
+    0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
+}
+
+#endif /* _REGEX_RE_COMP */
+\f
+/* POSIX.2 functions.  Don't define these for Emacs.  */
+
+#ifndef emacs
+
+/* regcomp takes a regular expression as a string and compiles it.
+
+   PREG is a regex_t *.  We do not expect any fields to be initialized,
+   since POSIX says we shouldn't.  Thus, we set
+
+     `buffer' to the compiled pattern;
+     `used' to the length of the compiled pattern;
+     `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
+       REG_EXTENDED bit in CFLAGS is set; otherwise, to
+       RE_SYNTAX_POSIX_BASIC;
+     `newline_anchor' to REG_NEWLINE being set in CFLAGS;
+     `fastmap' to an allocated space for the fastmap;
+     `fastmap_accurate' to zero;
+     `re_nsub' to the number of subexpressions in PATTERN.
+
+   PATTERN is the address of the pattern string.
+
+   CFLAGS is a series of bits which affect compilation.
+
+     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
+     use POSIX basic syntax.
+
+     If REG_NEWLINE is set, then . and [^...] don't match newline.
+     Also, regexec will try a match beginning after every newline.
+
+     If REG_ICASE is set, then we considers upper- and lowercase
+     versions of letters to be equivalent when matching.
+
+     If REG_NOSUB is set, then when PREG is passed to regexec, that
+     routine will report only success or failure, and nothing about the
+     registers.
+
+   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
+   the return codes and their meanings.)  */
+
+int
+regcomp (preg, pattern, cflags)
+    regex_t *preg;
+    const char *pattern;
+    int cflags;
+{
+  reg_errcode_t ret;
+  reg_syntax_t syntax
+    = (cflags & REG_EXTENDED) ?
+      RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
+
+  /* regex_compile will allocate the space for the compiled pattern.  */
+  preg->buffer = 0;
+  preg->allocated = 0;
+  preg->used = 0;
+
+  /* Try to allocate space for the fastmap.  */
+  preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
+
+  if (cflags & REG_ICASE)
+    {
+      unsigned i;
+
+      preg->translate
+       = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
+                                     * sizeof (*(RE_TRANSLATE_TYPE)0));
+      if (preg->translate == NULL)
+        return (int) REG_ESPACE;
+
+      /* Map uppercase characters to corresponding lowercase ones.  */
+      for (i = 0; i < CHAR_SET_SIZE; i++)
+        preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
+    }
+  else
+    preg->translate = NULL;
+
+  /* If REG_NEWLINE is set, newlines are treated differently.  */
+  if (cflags & REG_NEWLINE)
+    { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
+      syntax &= ~RE_DOT_NEWLINE;
+      syntax |= RE_HAT_LISTS_NOT_NEWLINE;
+      /* It also changes the matching behavior.  */
+      preg->newline_anchor = 1;
+    }
+  else
+    preg->newline_anchor = 0;
+
+  preg->no_sub = !!(cflags & REG_NOSUB);
+
+  /* POSIX says a null character in the pattern terminates it, so we
+     can use strlen here in compiling the pattern.  */
+  ret = regex_compile (pattern, strlen (pattern), syntax, preg);
+
+  /* POSIX doesn't distinguish between an unmatched open-group and an
+     unmatched close-group: both are REG_EPAREN.  */
+  if (ret == REG_ERPAREN) ret = REG_EPAREN;
+
+  if (ret == REG_NOERROR && preg->fastmap)
+    {
+      /* Compute the fastmap now, since regexec cannot modify the pattern
+        buffer.  */
+      if (re_compile_fastmap (preg) == -2)
+       {
+         /* Some error occurred while computing the fastmap, just forget
+            about it.  */
+         free (preg->fastmap);
+         preg->fastmap = NULL;
+       }
+    }
+
+  return (int) ret;
+}
+#ifdef _LIBC
+weak_alias (__regcomp, regcomp)
+#endif
+
+
+/* regexec searches for a given pattern, specified by PREG, in the
+   string STRING.
+
+   If NMATCH is zero or REG_NOSUB was set in the cflags argument to
+   `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
+   least NMATCH elements, and we set them to the offsets of the
+   corresponding matched substrings.
+
+   EFLAGS specifies `execution flags' which affect matching: if
+   REG_NOTBOL is set, then ^ does not match at the beginning of the
+   string; if REG_NOTEOL is set, then $ does not match at the end.
+
+   We return 0 if we find a match and REG_NOMATCH if not.  */
+
+int
+regexec (preg, string, nmatch, pmatch, eflags)
+    const regex_t *preg;
+    const char *string;
+    size_t nmatch;
+    regmatch_t pmatch[];
+    int eflags;
+{
+  int ret;
+  struct re_registers regs;
+  regex_t private_preg;
+  int len = strlen (string);
+  boolean want_reg_info = !preg->no_sub && nmatch > 0;
+
+  private_preg = *preg;
+
+  private_preg.not_bol = !!(eflags & REG_NOTBOL);
+  private_preg.not_eol = !!(eflags & REG_NOTEOL);
+
+  /* The user has told us exactly how many registers to return
+     information about, via `nmatch'.  We have to pass that on to the
+     matching routines.  */
+  private_preg.regs_allocated = REGS_FIXED;
+
+  if (want_reg_info)
+    {
+      regs.num_regs = nmatch;
+      regs.start = TALLOC (nmatch * 2, regoff_t);
+      if (regs.start == NULL)
+        return (int) REG_NOMATCH;
+      regs.end = regs.start + nmatch;
+    }
+
+  /* Perform the searching operation.  */
+  ret = re_search (&private_preg, string, len,
+                   /* start: */ 0, /* range: */ len,
+                   want_reg_info ? &regs : (struct re_registers *) 0);
+
+  /* Copy the register information to the POSIX structure.  */
+  if (want_reg_info)
+    {
+      if (ret >= 0)
+        {
+          unsigned r;
+
+          for (r = 0; r < nmatch; r++)
+            {
+              pmatch[r].rm_so = regs.start[r];
+              pmatch[r].rm_eo = regs.end[r];
+            }
+        }
+
+      /* If we needed the temporary register info, free the space now.  */
+      free (regs.start);
+    }
+
+  /* We want zero return to mean success, unlike `re_search'.  */
+  return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
+}
+#ifdef _LIBC
+weak_alias (__regexec, regexec)
+#endif
+
+
+/* Returns a message corresponding to an error code, ERRCODE, returned
+   from either regcomp or regexec.   We don't use PREG here.  */
+
+size_t
+regerror (errcode, preg, errbuf, errbuf_size)
+    int errcode;
+    const regex_t *preg;
+    char *errbuf;
+    size_t errbuf_size;
+{
+  const char *msg;
+  size_t msg_size;
+
+  if (errcode < 0
+      || errcode >= (int) (sizeof (re_error_msgid_idx)
+                          / sizeof (re_error_msgid_idx[0])))
+    /* Only error codes returned by the rest of the code should be passed
+       to this routine.  If we are given anything else, or if other regex
+       code generates an invalid error code, then the program has a bug.
+       Dump core so we can fix it.  */
+    abort ();
+
+  msg = gettext (re_error_msgid + re_error_msgid_idx[errcode]);
+
+  msg_size = strlen (msg) + 1; /* Includes the null.  */
+
+  if (errbuf_size != 0)
+    {
+      if (msg_size > errbuf_size)
+        {
+#if defined HAVE_MEMPCPY || defined _LIBC
+         *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
+#else
+          memcpy (errbuf, msg, errbuf_size - 1);
+          errbuf[errbuf_size - 1] = 0;
+#endif
+        }
+      else
+        memcpy (errbuf, msg, msg_size);
+    }
+
+  return msg_size;
+}
+#ifdef _LIBC
+weak_alias (__regerror, regerror)
+#endif
+
+
+/* Free dynamically allocated space used by PREG.  */
+
+void
+regfree (preg)
+    regex_t *preg;
+{
+  if (preg->buffer != NULL)
+    free (preg->buffer);
+  preg->buffer = NULL;
+
+  preg->allocated = 0;
+  preg->used = 0;
+
+  if (preg->fastmap != NULL)
+    free (preg->fastmap);
+  preg->fastmap = NULL;
+  preg->fastmap_accurate = 0;
+
+  if (preg->translate != NULL)
+    free (preg->translate);
+  preg->translate = NULL;
+}
+#ifdef _LIBC
+weak_alias (__regfree, regfree)
+#endif
+
+#endif /* not emacs  */
diff --git a/src/libcompat/regex/regex.h b/src/libcompat/regex/regex.h
new file mode 100644 (file)
index 0000000..91a3560
--- /dev/null
@@ -0,0 +1,560 @@
+/* Definitions for data structures and routines for the regular
+   expression library, version 0.12.
+   Copyright (C) 1985,1989-1993,1995-1998, 2000 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in /gd/gnu/lib.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+   <regex.h>.  */
+
+#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
+/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+   should be there.  */
+# include <stddef.h>
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+        ^  is an anchor if it is at the beginning of a regular
+           expression or after an open-group or an alternation operator;
+        $  is an anchor if it is at the end of a regular expression, or
+           before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        \
+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+\f
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+#ifdef RE_DUP_MAX
+# undef RE_DUP_MAX
+#endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+#define RE_DUP_MAX (0x7fff)
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+#ifdef _XOPEN_SOURCE
+  REG_ENOSYS = -1,     /* This will never happen for this implementation.  */
+#endif
+
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Not implemented.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN          /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+\f
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   `translate', and `no_sub' can be set.  After the pattern has been
+   compiled, the `re_nsub' field is available.  All other fields are
+   private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+# define RE_TRANSLATE_TYPE char *
+#endif
+
+struct re_pattern_buffer
+{
+/* [[[begin pattern_buffer]]] */
+       /* Space that holds the compiled pattern.  It is declared as
+          `unsigned char *' because its elements are
+           sometimes used as array indexes.  */
+  unsigned char *buffer;
+
+       /* Number of bytes to which `buffer' points.  */
+  unsigned long int allocated;
+
+       /* Number of bytes actually used in `buffer'.  */
+  unsigned long int used;
+
+        /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t syntax;
+
+        /* Pointer to a fastmap, if any, otherwise zero.  re_search uses
+           the fastmap, if there is one, to skip over impossible
+           starting points for matches.  */
+  char *fastmap;
+
+        /* Either a translate table to apply to all characters before
+           comparing them, or zero for no translation.  The translation
+           is applied to a pattern when it is compiled and to a string
+           when it is matched.  */
+  RE_TRANSLATE_TYPE translate;
+
+       /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+        /* Zero if this pattern cannot match the empty string, one else.
+           Well, in truth it's used only in `re_search_2', to see
+           whether or not we should use the fastmap, so we don't set
+           this absolutely perfectly; see `re_compile_fastmap' (the
+           `duplicate' case).  */
+  unsigned can_be_null : 1;
+
+        /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+             for `max (RE_NREGS, re_nsub + 1)' groups.
+           If REGS_REALLOCATE, reallocate space if necessary.
+           If REGS_FIXED, use what's there.  */
+#define REGS_UNALLOCATED 0
+#define REGS_REALLOCATE 1
+#define REGS_FIXED 2
+  unsigned regs_allocated : 2;
+
+        /* Set to zero when `regex_compile' compiles a pattern; set to one
+           by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned fastmap_accurate : 1;
+
+        /* If set, `re_match_2' does not return information about
+           subexpressions.  */
+  unsigned no_sub : 1;
+
+        /* If set, a beginning-of-line anchor doesn't match at the
+           beginning of the string.  */
+  unsigned not_bol : 1;
+
+        /* Similarly for an end-of-line anchor.  */
+  unsigned not_eol : 1;
+
+        /* If true, an anchor at a newline matches.  */
+  unsigned newline_anchor : 1;
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* Type for byte offsets within the string.  POSIX mandates this.  */
+typedef int regoff_t;
+
+
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+#ifndef RE_NREGS
+# define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+/* To avoid duplicating every routine declaration -- once with a
+   prototype (if we are ANSI), and once without (if we aren't) -- we
+   use the following macro to declare argument types.  This
+   unfortunately clutters up the declarations a bit, but I think it's
+   worth it.  */
+
+#if __STDC__
+
+# define _RE_ARGS(args) args
+
+#else /* not __STDC__ */
+
+# define _RE_ARGS(args) ()
+
+#endif /* not __STDC__ */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.  */
+extern const char *re_compile_pattern
+  _RE_ARGS ((const char *pattern, size_t length,
+             struct re_pattern_buffer *buffer));
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern int re_search
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+            int length, int start, int range, struct re_registers *regs));
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern int re_search_2
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+             int length1, const char *string2, int length2,
+             int start, int range, struct re_registers *regs, int stop));
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern int re_match
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+             int length, int start, struct re_registers *regs));
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern int re_match_2
+  _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+             int length1, const char *string2, int length2,
+             int start, struct re_registers *regs, int stop));
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers
+  _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
+             unsigned num_regs, regoff_t *starts, regoff_t *ends));
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp _RE_ARGS ((const char *));
+extern int re_exec _RE_ARGS ((const char *));
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if defined restrict || 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+/* For now unconditionally define __restrict_arr to expand to nothing.
+   Ideally we would have a test for the compiler which allows defining
+   it to restrict.  */
+#define __restrict_arr
+
+/* POSIX compatibility.  */
+extern int regcomp _RE_ARGS ((regex_t *__restrict __preg,
+                             const char *__restrict __pattern,
+                             int __cflags));
+
+extern int regexec _RE_ARGS ((const regex_t *__restrict __preg,
+                             const char *__restrict __string, size_t __nmatch,
+                             regmatch_t __pmatch[__restrict_arr],
+                             int __eflags));
+
+extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
+                                 char *__errbuf, size_t __errbuf_size));
+
+extern void regfree _RE_ARGS ((regex_t *__preg));
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
+\f
+/*
+Local variables:
+make-backup-files: t
+version-control: t
+trim-versions-without-asking: nil
+End:
+*/
diff --git a/src/libcompat/regions.c b/src/libcompat/regions.c
new file mode 100644 (file)
index 0000000..d96c9c2
--- /dev/null
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+/* Idea: clear on page alloc rather than individual alloc
+   Turns out not so good (on lcc at least, seems a wash on mudlle):
+   logically should be bad for small regions (less than a few pages)
+*/
+#undef PRECLEAR
+
+#include "../autoconf.h"
+/*#include "stats.c"*/
+
+#include "regions.h"
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#if SIZEOF_VOID_P > 4
+#define LARGE_ADDRESSES
+#endif
+
+#if HAVE_MMAP
+#define USE_MMAP
+#endif
+
+#ifdef LARGE_ADDRESSES
+/* This supports up to 49 bit virtual addresses. If you have larger
+   virtual addresses, you will need to decrease MEMSLICE1 and
+   possibly adjust MEMSLICE2 */
+#define MAXMEMBITS 64
+#define MEMSLICE1 15
+#define MEMSLICE2 18
+#define MEMSLICE3 (MAXMEMBITS - RPAGELOG - MEMSLICE2 - MEMSLICE2)
+#else
+#define MAXMEMBITS 32
+#endif
+
+
+
+#define RPAGESIZE (1 << RPAGELOG)
+#define K 2
+#define MAXPAGE (1 << (MAXMEMBITS - RPAGELOG))
+
+#define PAGENB(x) ((__rcintptr)(x) >> RPAGELOG)
+
+#define ALIGN(x, n) (((x) + ((n) - 1)) & ~((n) - 1))
+#define PALIGN(x, n) ((void *)ALIGN((__rcintptr)(x), n))
+#ifdef __GNUC__
+#define RALIGNMENT __alignof(double)
+#define PTRALIGNMENT __alignof(void *)
+#define ALIGNMENT_LONG __alignof(unsigned long)
+#else
+#define RALIGNMENT 8
+#define PTRALIGNMENT 4
+#define ALIGNMENT_LONG 4
+#endif
+
+typedef unsigned long __rcintptr;
+
+struct ablock {
+  char *end, *allocfrom;
+};
+
+struct allocator {
+  struct ablock page;
+  struct ablock superpage;
+  struct ablock hyperpage;
+  struct page *pages;
+  struct page *bigpages;
+};
+
+struct region_ {
+  struct allocator normal;
+  region parent, sibling, children;
+};
+
+nomem_handler nomem_h;
+
+region permanent;
+
+static inline void clear(void *start, __rcintptr size)
+{
+  long *clear, *clearend;
+
+  clear = (long *)start;
+  clearend = (long *)((char *)start + size);
+  do *clear++ = 0;
+  while (clear < clearend) ;
+}
+
+#ifdef PRECLEAR
+#define preclear clear
+#define postclear(s, e)
+#else
+#define preclear(s, e)
+#define postclear clear
+#endif
+
+#include "pages.c"
+#include "alloc.c"
+
+static void nochildren(region r)
+{
+  if (r->children)
+    abort();
+}
+
+static void unlink_region(region r)
+{
+  region *scan;
+
+  scan = &r->parent->children;
+  while (*scan != r)
+    scan = &(*scan)->sibling;
+  *scan = (*scan)->sibling;
+}
+
+static void link_region(region r, region parent)
+{
+  r->sibling = parent->children;
+  r->parent = parent;
+  parent->children = r;
+}
+
+static int rstart;
+
+void initregion(region r)
+{
+  char *first =
+    (char *)r - rstart - offsetof(struct page, previous);
+
+  /* Start using page with region header as a pointer-containing page */
+  r->normal.page.end = first + RPAGESIZE;
+  r->normal.page.allocfrom = (char *)(r + 1);
+
+  /* Guarantee failure for all other blocks */
+  r->normal.superpage.allocfrom = (char *)(K * RPAGESIZE + 1);
+  r->normal.hyperpage.allocfrom = (char *)(K * K * RPAGESIZE + 1);
+
+  /* Remember that r owns this page. */
+  r->normal.pages = (struct page *)first;
+  set_region(r->normal.pages, 1, r);
+}
+
+region newregion(void)
+{
+  return newsubregion(permanent);
+}
+
+region newsubregion(region parent)
+{
+  char *first;
+  region r;
+
+  first = (char *)alloc_single_page(NULL);
+  preclear(first + offsetof(struct page, pagecount), RPAGESIZE - offsetof(struct page, pagecount));
+
+  /* stagger regions across cache lines a bit */
+  rstart += 64;
+#if RPAGESIZE < 1024
+#error RPAGESIZE must be at least 1024, or change the next if.
+#endif
+  if (rstart >= 16 * 64) rstart = 0;
+  r = (region)(first + rstart + offsetof(struct page, previous));
+  postclear(r, sizeof *r);
+  initregion(r);
+
+  if (parent)
+    link_region(r, parent);
+
+  return r;
+}
+
+inline char *rstralloc(region r, size_t size)
+{
+  void *mem, *dummy;
+
+  qalloc(r, &r->normal, &dummy, 0, 1, &mem, size, RALIGNMENT, 0);
+
+  return mem;
+}
+
+inline char *rstralloc0(region r, size_t size)
+{
+  char *mem;
+
+  mem = rstralloc(r, size);
+  clear(mem, size);
+
+  return mem;
+}
+
+char *rstrdup(region r, const char *s)
+{
+  char *news = rstralloc(r, strlen(s) + 1);
+
+  strcpy(news, s);
+
+  return news;
+}
+
+inline static 
+char *internal_rstrextend(region r, const char *old, size_t newsize,
+                         int needsclear)
+{
+  /* For now we don't attempt to extend the old storage area */
+  void *newmem, *hdr;
+  unsigned long *oldhdr, oldsize;
+
+  qalloc(r, &r->normal, &hdr, sizeof(unsigned long), ALIGNMENT_LONG,
+        &newmem, newsize, RALIGNMENT, 0);
+
+  /* If we don't do this we can't find the header: */
+  hdr = (char *)newmem - sizeof(unsigned long);
+
+  *(unsigned long *)hdr = newsize;
+
+  if (old)
+    {
+      oldhdr = (unsigned long *)(old - ALIGNMENT_LONG);
+      oldsize = *oldhdr;
+
+      if (oldsize > newsize)
+       oldsize = newsize;
+      else if (needsclear)
+       clear((char *)newmem + oldsize, newsize - oldsize);
+      memcpy(newmem, old, oldsize);
+    }
+  else if (needsclear)
+    clear(newmem, newsize);
+
+  return newmem;
+}
+
+inline
+char *rstrextend(region r, const char *old, size_t newsize)
+{
+  return internal_rstrextend(r, old, newsize, 0);
+}
+
+inline
+char *rstrextend0(region r, const char *old, size_t newsize)
+{
+  return internal_rstrextend(r, old, newsize, 1);
+}
+
+inline void *typed_ralloc(region r, size_t size, type_t t)
+{
+  return rstralloc0(r, size);
+}
+
+void *__rcralloc_small0(region r, size_t size)
+{
+  char *mem2;
+  
+  mem2 = PALIGN(r->normal.page.allocfrom, RALIGNMENT);
+  if (mem2 + size >= r->normal.page.end)
+    return typed_ralloc(r, size, 0);
+
+  r->normal.page.allocfrom = mem2 + size;
+  postclear(mem2, size);
+
+  return mem2;
+}
+
+void *typed_rarrayextend(region r, void *old, size_t n, size_t size, type_t t)
+{
+  return rstrextend0(r, old, n * size);
+}
+
+void *typed_rarrayalloc(region r, size_t n, size_t size, type_t t)
+{
+  return typed_ralloc(r, n * size, t);
+}
+
+void typed_rarraycopy(void *to, void *from, size_t n, size_t size, type_t type)
+{
+  memcpy(to, from, n * size);
+}
+
+static void delregion(region r)
+{
+  nochildren(r);
+  free_all_pages(r, &r->normal);
+}
+
+void deleteregion(region r)
+{
+  unlink_region(r);
+  delregion(r);
+}
+
+void deleteregion_ptr(region *r)
+{
+  region tmp = *r;
+
+  *r = NULL;
+  deleteregion(tmp);
+}
+
+void deleteregion_array(int n, region *regions)
+{
+  int i;
+
+  for (i = 0; i < n; i++)
+    unlink_region(regions[i]);
+
+  for (i = 0; i < n; i++)
+    {
+      delregion(regions[i]);
+      regions[i] = NULL;
+    }
+}
+
+region regionof(void *ptr)
+{
+  return page_region(PAGENB(ptr));
+}
+
+void region_init(void)
+{
+  rstart = -64; /* Save 64 bytes of memory! (sometimes ;-)) */
+  init_pages();
+  permanent = newregion();
+#ifdef DEBUG_RALLOC
+  if (getenv("REGIONSTATS"))
+    benchmark_init();
+  atexit(memusage);
+#endif
+}
+
+nomem_handler set_nomem_handler(nomem_handler newhandler)
+{
+  nomem_handler oldh = nomem_h;
+
+  nomem_h = newhandler;
+
+  return oldh;
+}
+
+#ifndef NO_REGION_MAIN
+int region_main(int argc, char **argv, char **envp);
+
+int main(int argc, char **argv, char **envp)
+{
+  region_init();
+  return region_main(argc, argv, envp);
+}
+#endif
+
+
+/* Debugging support */
+
+static FILE *out;
+
+static void printref(void *x)
+{
+#ifndef LARGE_ADDRESSES
+  if (x >= (void *)__rcregionmap && x < (void *)&__rcregionmap[MAXPAGE])
+    return;
+#endif
+
+  fprintf(out, "info symbol 0x%p\n", x);
+}
+
+void findrefs(region r, void *from, void *to)
+{
+  char *f;
+
+  if (!out)
+    out = fopen("/dev/tty", "w");
+
+  for (f = PALIGN(from, PTRALIGNMENT); f < (char *)to; f += PTRALIGNMENT)
+    if (regionof(*(void **)f) == r)
+      printref(f);
+
+  fflush(out);
+}
+
+#if defined(__GNUC__) && defined(sparc)
+/* This code breaks some version of sun's cc at least */
+extern void _DYNAMIC, _end;
+
+void findgrefs(region r)
+{
+  findrefs(r, &_DYNAMIC, &_end);
+}
+#endif
+
+void findrrefs(region r, region from)
+{
+  struct page *p;
+
+  for (p = from->normal.pages; p; p = p->next)
+    findrefs(r, (char *)&p->previous, (char *)p + RPAGESIZE);
+
+  for (p = r->normal.bigpages; p; p = p->next)
+    findrefs(r, (char *)&p->previous, (char *)p + p->pagecount * RPAGESIZE);
+}
diff --git a/src/libcompat/regions.h b/src/libcompat/regions.h
new file mode 100644 (file)
index 0000000..99fe95d
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 1999-2001
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#ifndef REGIONS_H
+#define REGIONS_H
+
+#define deletes
+//#define traditional
+#define sameregion
+#define parentptr
+
+#define RPAGELOG 12
+
+typedef struct region_ *region;
+extern region permanent;
+
+#include <stdlib.h>
+
+void region_init(void);
+
+region newregion(void);
+region newsubregion(region parent);
+
+typedef int type_t;
+#define rctypeof(type) 0
+
+/* Low-level alloc with dynamic type info */
+void *typed_ralloc(region r, size_t size, type_t type);
+void *typed_rarrayalloc(region r, size_t n, size_t size, type_t type);
+void *typed_rarrayextend(region r, void *old, size_t n, size_t size, type_t type);
+void typed_rarraycopy(void *to, void *from, size_t n, size_t size, type_t type);
+
+void *__rcralloc_small0(region r, size_t size);
+
+/* In theory, the test at the start of qalloc should give the same benefit.
+   In practice, it doesn't (gcc, at least, generates better code for
+   __rcralloc_small0 than the equivalent path through typed_ralloc */
+#define ralloc(r, type) (sizeof(type) < (1 << (RPAGELOG - 3)) ? __rcralloc_small0((r), sizeof(type)) : typed_ralloc((r), sizeof(type), rctypeof(type)))
+#define rarrayalloc(r, n, type) typed_rarrayalloc((r), (n), sizeof(type), rctypeof(type))
+#define rarrayextend(r, old, n, type) typed_rarrayextend((r), (old), (n), sizeof(type), rctypeof(type))
+#define rarraycopy(to, from, n, type) typed_rarraycopy((to), (from), (n), sizeof(type), rctypeof(type))
+
+char *rstralloc(region r, size_t size);
+char *rstralloc0(region r, size_t size);
+char *rstrdup(region r, const char *s);
+
+/* rstrextend is used to extend an old string. The string MUST have been
+   initially allocated by a call to rstrextend with old == NULL (you cannot
+   initially allocate the string with rstralloc) */
+char *rstrextend(region r, const char *old, size_t newsize);
+char *rstrextend0(region r, const char *old, size_t newsize);
+
+void deleteregion(region r);
+void deleteregion_ptr(region *r);
+void deleteregion_array(int n, region *regions);
+region regionof(void *ptr);
+
+typedef void (*nomem_handler)(void);
+nomem_handler set_nomem_handler(nomem_handler newhandler);
+
+/* Debugging support */
+void findrefs(region r, void *from, void *to);
+void findgrefs(region r);
+void findrrefs(region r, region from);
+
+#endif
diff --git a/src/libcompat/stats.c b/src/libcompat/stats.c
new file mode 100644 (file)
index 0000000..f30ff98
--- /dev/null
@@ -0,0 +1,98 @@
+#include <stdio.h>
+#include <sys/times.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+
+#if 0
+#ifdef sparc
+#include <sys/processor.h>
+#include <sys/procset.h>
+
+/* Actually this can break if we're unlucky (context switch between
+   rd tick and srlx */
+#ifdef __GNUC__
+register unsigned long long tscr asm("%o0");
+#define tsc() ({ \
+    __asm__ __volatile__("rd %%tick,%%o1; srlx %%o1,32,%%o0" \
+                         : : : "%o0", "%o1"); \
+    tscr; })
+#else
+#define tsc() 0
+#endif
+
+static double proc_frequency(void)
+{
+  processor_info_t pinfo;
+
+  processor_info(0, &pinfo);
+  return pinfo.pi_clock * 1e6;
+}
+#endif
+
+#ifdef i386
+#include <asm/msr.h>
+
+#define tsc() ({unsigned long long x; rdtscll(x); x; })
+#define rdpmcll(counter,x) \
+     __asm__ __volatile__("rdpmc" \
+                         : "=A" (x) \
+                         : "c" (counter))
+#define pmc0() ({unsigned long long x; rdpmcll(0, x); x; })
+#define pmc1() ({unsigned long long x; rdpmcll(1, x); x; })
+
+double proc_frequency(void) { return 550e6; }
+#endif
+
+
+static struct tms s, e;
+unsigned long long start_ticks, end_ticks;
+
+static double ll_to_double(unsigned long long x)
+{
+  return 4294967296.0 * (unsigned long)(x >> 32) + (unsigned long)x;
+}
+
+static void print_memory_usage(void)
+{
+#if 0
+  fprintf(stderr, "blocks alloced: %lu, %.1f%% 8K\n",
+         (unsigned long)(total_8kblocks + total_otherblocks),
+         (100.0 * total_8kblocks) / (total_8kblocks + total_otherblocks));
+
+  fprintf(stderr, "system bytes(kB): %lu\n",
+         ((unsigned long)total_system_bytes + 512) / 1024);
+  fprintf(stderr, "overhead: %.1f%%\n",
+         total_system_bytes * 100.0 / bytes.max - 100);
+
+#endif
+  { extern void malloc_stats(void); malloc_stats(); }
+  fflush(stderr);
+}
+
+static void print_benchmark(void)
+{
+  double tt, pfreq;
+
+  end_ticks = tsc();
+  times(&e);
+  pfreq = proc_frequency();
+
+  tt = ll_to_double(end_ticks - start_ticks) / pfreq;
+
+  fprintf(stderr, "runtime: %.3f\n", tt);
+  fprintf(stderr, "cputime: %.2f\n", (e.tms_utime - s.tms_utime) / 100.0);
+  print_memory_usage();
+}
+
+static void benchmark_init(void)
+{
+  fputs("heap: compat regions\n", stderr);
+  times(&s);
+  start_ticks = tsc();
+  atexit(print_benchmark);
+}
+#else
+static void benchmark_init(void) {}
+
+#endif
diff --git a/src/machine.c b/src/machine.c
new file mode 100644 (file)
index 0000000..91ce780
--- /dev/null
@@ -0,0 +1,68 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "machine.h"
+#include "errors.h"
+#include "c-parse.tab.h"
+#undef yystype
+#include "c-parse.h"
+#include "semantics.h"
+#include "nesc-gcc.h"
+
+#include "machine/avr.c"
+#include "machine/self.c"
+#include "machine/keil.c"
+#include "machine/sdcc.c"
+#include "machine/msp430.c"
+#include "machine/env_machine.c"
+
+static machine_spec *machines[] = {
+  &avr_machine,
+  &self_machine,
+  &keil_machine,
+  &sdcc_machine,
+  &msp430_machine,
+  &env_machine,
+  NULL
+};
+
+machine_spec *target = &self_machine;
+const char *target_compiler = "gcc";
+
+bool select_target(const char *targetname)
+{
+  machine_spec **scan;
+
+  for (scan = machines; *scan; scan++)
+    if (!strcmp(targetname, (*scan)->machine_name))
+      {
+       if (*scan == &env_machine &&
+           scan_env_machine(&env_machine, "NESC_MACHINE") == FALSE)
+         {
+           error("invalid target described in env NESC_MACHINE");
+           return FALSE;
+         }
+       target = *scan;
+       return TRUE;
+      }
+
+  error("unknown target %s", targetname);
+  return FALSE;
+}
+
+
diff --git a/src/machine.h b/src/machine.h
new file mode 100644 (file)
index 0000000..23c5e96
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef MACHINE_H
+#define MACHINE_H
+
+typedef struct {
+  size_t size, align;
+} machine_type_spec;
+
+struct yystype;
+
+typedef struct {
+  const char *machine_name;
+
+  void (*handle_option)(const char *opt);
+
+  bool big_endian, pcc_bitfield_type_matters;
+  size_t empty_field_boundary, structure_size_boundary;
+
+  size_t word_size;
+  machine_type_spec tptr, tfloat, tdouble, tlong_double, tshort, tint,
+    tlong, tlong_long;
+  size_t int1_align, int2_align, int4_align, int8_align;
+  size_t wchar_t_size, size_t_size;
+  bool char_signed, wchar_t_signed;
+
+  cval (*adjust_field_align)(field_declaration fdecl, cval alignment);
+
+  bool (*decl_attribute)(gcc_attribute attr, data_declaration ddecl);
+  bool (*tag_attribute)(gcc_attribute attr, tag_declaration tdecl);
+  bool (*field_attribute)(gcc_attribute attr, field_declaration fdecl);
+  bool (*type_attribute)(gcc_attribute attr, type *t);
+
+  void (*preinit)(void); /* Immediately after target selection */
+  void (*init)(void);    /* After everything else is setup */
+  int (*token)(const char *word, int length, struct yystype *lvalp);
+
+  /* A Keil C for 8051 special... */
+  declaration (*keilc_definition)(location loc, cstring keyword, cstring name,
+                                 expression address);
+
+  /* Called once when compilation starts. Should:
+     - setup system-specific include paths
+     - return name of a file definining system-specific macros
+     Targets using gcc can set this field to gcc_global_cpp_init
+  */
+  const char *(*global_cpp_init)(void);
+
+  /* Called just before preprocessing each file. Modify current.lex.finput
+     as needed (eg, add pragma handlers). Can be NULL. */
+  void (*file_cpp_init)(void); 
+  
+} machine_spec;
+
+extern machine_spec *target;
+extern const char *target_compiler;
+
+bool select_target(const char *targetname);
+
+#endif
diff --git a/src/machine/avr.c b/src/machine/avr.c
new file mode 100644 (file)
index 0000000..a2bc1a1
--- /dev/null
@@ -0,0 +1,51 @@
+static bool avr_decl_attribute(gcc_attribute attr, data_declaration ddecl)
+{
+  const char *name = attr->word1->cstring.data;
+
+  if (!strcmp(name, "signal"))
+    {
+      ddecl->async = TRUE;
+      ddecl->spontaneous = c_call_atomic;
+      return TRUE;
+    }
+  else if (!strcmp(name, "interrupt"))
+    {
+      ddecl->async = TRUE;
+      ddecl->spontaneous = c_call_nonatomic;
+      return TRUE;
+    }
+  return FALSE;
+}
+
+/* Basic pointer sizes and alignments for the AVR */
+static machine_spec avr_machine = {
+  "avr", 
+  gcc_save_machine_options,
+  FALSE,                       /* big_endian */
+  FALSE,                       /* pcc_bitfield_type_matters */
+  8,                           /* empty field boundary - in bits */
+  8,                           /* structure size boundary - in bits */
+  1,                           /* word size */
+  { 2, 1 },                    /* pointer type */
+  { 4, 1 },                    /* float */
+  { 4, 1 },                    /* double */
+  { 4, 1 },                    /* long double */
+  { 2, 1 },                    /* short */
+  { 2, 1 },                    /* int */
+  { 4, 1 },                    /* long */
+  { 8, 1 },                    /* long long (unsupported in avr-gcc) */
+  1, 1, 1, 1,                  /* int1/2/4/8 align */
+  2, 2,                                /* wchar_t, size_t size */
+  TRUE, TRUE,                  /* char, wchar_t signed */
+
+  NULL,                                /* adjust_field_align */
+
+  avr_decl_attribute,          /* Attribute handling: declarations */
+  NULL, NULL, NULL,            /* Attribute handling: tag, field, type */
+  NULL, NULL,                  /* preint, init */
+  NULL,                                /* token */
+  NULL,                                /* keil special */
+  gcc_global_cpp_init,         /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
+
diff --git a/src/machine/env_machine.c b/src/machine/env_machine.c
new file mode 100644 (file)
index 0000000..529840b
--- /dev/null
@@ -0,0 +1,296 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2004 The Regents of the University of California.
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+//$Id: env_machine.c,v 1.10 2008/06/03 21:20:22 idgay Exp $
+//@author Cory Sharp <cssharp@eecs.berkeley.edu>
+
+/* Basic pointer sizes and alignments for a machine set in the environment
+ * variable NESC_MACHINE of the form:
+ *
+ *   export NESC_MACHINE="long_double=8,4 gcc=some-other-gcc"
+ *
+ * Particular order of the keynames is not necessary.  The defaults below
+ * are taken for otherwise unspecified values.
+ */
+
+#include <string.h>
+
+static machine_spec env_machine = {
+  "env", 
+  gcc_save_machine_options,
+  /* [default] */       /* [keyname] */
+  FALSE,               /* big_endian */
+  FALSE,               /* pcc_bitfield_type_matters */
+  8,                   /* empty_field_boundary */
+  8,                   /* structure_size_boundary */
+  1,                   /* word size */
+  {2, 1},              /* pointer */
+  {4, 1},              /* float */
+  {4, 1},              /* double */
+  {4, 1},              /* long_double */
+  {2, 1},              /* short */
+  {2, 1},              /* int */
+  {4, 1},              /* long */
+  {8, 1},              /* long_long */
+  1, 1, 1, 1,          /* int1248_align */
+  2, 2,                        /* wchar_size_size */
+  TRUE, TRUE,          /* char_wchar_signed */
+
+  NULL,                                /* adjust_field_align */
+
+  NULL, NULL, NULL, NULL,      /* Attributes: need some way to specify this */
+  NULL, NULL,                  /* preinit, init */
+  NULL,                                /* token */
+  NULL,                                /* keil special */
+  gcc_global_cpp_init,         /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
+
+static const char *find_char(const char *str, const char *strend, char ch)
+{
+  while (str != strend && *str != ch)
+    str++;
+  return str;
+}
+
+static const char *find_not_char(const char *str, const char *strend, char ch)
+{
+  while (str != strend && *str == ch)
+    str++;
+  return str;
+}
+
+static bool is_literali(const char *literal, const char *str, const char *strend)
+{
+  int n = strlen(literal);
+  if (n == (strend - str) && strncasecmp(literal, str, n) == 0)
+    return TRUE;
+  return FALSE;
+}
+
+static int scan_boolean(const char *str, const char *strend)
+{
+  if (is_literali("false", str, strend))
+    return 0;
+  if (is_literali("true", str, strend))
+    return 1;
+  return -1;
+}
+
+static bool scan_intlist(const char *str, const char *strend, int *intlist,
+                        int count)
+{
+  while (count-- > 0)
+    {
+      if (str == strend)
+       return FALSE;
+      *intlist++ = atoi(str);
+      str = find_not_char(find_char(str, strend, ','), strend, ',');
+    }
+  if (str != strend)
+    return FALSE;
+  return TRUE;
+}
+
+static bool scan_env_machine(machine_spec * machine, const char *envname)
+{
+  const char *begin = getenv(envname);
+  const char *end = begin;
+  int n_errors = 0;
+
+  struct {
+    const char *name;
+    machine_type_spec *spec;
+  } typespecs[] = {
+    { "pointer", &(machine->tptr) },
+    { "float", &(machine->tfloat) },
+    { "double", &(machine->tdouble) },
+    { "long_double", &(machine->tlong_double) },
+    { "short", &(machine->tshort) },
+    { "int", &(machine->tint) },
+    { "long", &(machine->tlong) },
+    { "long_long", &(machine->tlong_long) },
+    { NULL, NULL }
+  };
+
+  if (begin == NULL)
+    {
+      error("environment variable %s is undefined", envname);
+      return FALSE;
+    }
+
+  end = begin + strlen(begin);
+  while (begin != end)
+    {
+      const char *space = find_char(begin, end, ' ');
+      const char *equal = find_char(begin, space, '=');
+      const char *value = find_not_char(equal, space, '=');
+      const char *name = "(unknown)";
+      int intlist[4] = { 0, 0, 0, 0 };
+
+      if (is_literali(name = "pcc_bitfield_type_matters", begin, equal))
+       {
+         int b = scan_boolean(value, space);
+         if (b != -1)
+           {
+             machine->pcc_bitfield_type_matters = b ? TRUE : FALSE;
+           }
+         else
+           {
+             error("%s.%s, expected 'false' or 'true'", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "big_endian", begin, equal))
+       {
+         int b = scan_boolean(value, space);
+         if (b != -1)
+           {
+             machine->big_endian = b ? TRUE : FALSE;
+           }
+         else
+           {
+             error("%s.%s, expected 'false' or 'true'", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "empty_field_boundary", begin, equal))
+       {
+         if (scan_intlist(value, space, intlist, 1) == TRUE)
+           {
+             machine->empty_field_boundary = intlist[0];
+           }
+         else
+           {
+             error("%s.%s, expected one int", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "structure_size_boundary", begin, equal))
+       {
+         if (scan_intlist(value, space, intlist, 1) == TRUE)
+           {
+             machine->structure_size_boundary = intlist[0];
+           }
+         else
+           {
+             error("%s.%s, expected one int", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "word_size", begin, equal))
+       {
+         if (scan_intlist(value, space, intlist, 1) == TRUE)
+           {
+             machine->word_size = intlist[0];
+           }
+         else
+           {
+             error("%s.%s, expected one int", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "int1248_align", begin, equal))
+       {
+         if (scan_intlist(value, space, intlist, 4) == TRUE)
+           {
+             machine->int1_align = intlist[0];
+             machine->int2_align = intlist[1];
+             machine->int4_align = intlist[2];
+             machine->int8_align = intlist[3];
+           }
+         else
+           {
+             error("%s.%s, expected 4 ints", envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "wchar_size_size", begin, equal))
+       {
+         if (scan_intlist(value, space, intlist, 2) == TRUE)
+           {
+             machine->wchar_t_size = intlist[0];
+             machine->size_t_size = intlist[1];
+           }
+         else
+           {
+             error("%s.%s, expected 2 ints, wchar_t size and size_t size",
+                    envname, name);
+             n_errors++;
+           }
+       }
+      else if (is_literali(name = "char_wchar_signed", begin, equal))
+       {
+         const char *comma = find_char(value, space, ',');
+         if (comma != space)
+           {
+             int b1 = scan_boolean(value, comma);
+             int b2 =
+               scan_boolean(find_not_char(comma, space, ','), space);
+             if (b1 != -1 && b2 != -1)
+               {
+                 machine->char_signed = b1 ? TRUE : FALSE;
+                 machine->wchar_t_signed = b2 ? TRUE : FALSE;
+               }
+             else
+               {
+                 error("%s.%s, bools must be 'false' or 'true'", envname,
+                        name);
+                 n_errors++;
+               }
+           }
+         else
+           {
+             error("%s.%s, expected 2 bools, char and wchar signed",
+                    envname, name);
+             n_errors++;
+           }
+       }
+      else
+       {
+         int i = 0;
+         for (i = 0; typespecs[i].name != NULL; i++)
+           {
+             if (is_literali(name = typespecs[i].name, begin, equal))
+               {
+                 if (scan_intlist(value, space, intlist, 2) == TRUE)
+                   {
+                     typespecs[i].spec->size = intlist[0];
+                     typespecs[i].spec->align = intlist[1];
+                     break;
+                   }
+                 else
+                   {
+                     error("%s.%s, expected 2 ints, size and align",
+                            envname, name);
+                     n_errors++;
+                   }
+               }
+           }
+
+         if (typespecs[i].name == NULL)
+           {
+             error("%s, unknown field name starting at %s", envname, begin);
+             n_errors++;
+           }
+       }
+
+      begin = find_not_char(space, end, ' ');
+    }
+
+  return (n_errors == 0) ? TRUE : FALSE;
+}
diff --git a/src/machine/keil-gperf.h b/src/machine/keil-gperf.h
new file mode 100644 (file)
index 0000000..53ff6d6
--- /dev/null
@@ -0,0 +1,174 @@
+/* C code produced by gperf version 3.0.1 */
+/* Command-line: gperf -j1 -t -E -H keil_hash -N is_keil_word -k'1,3,$' machine/keil.gperf  */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646.  */
+error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#endif
+
+#line 1 "machine/keil.gperf"
+
+/* This file is part of the nesC compiler.
+   Copyright (C) 2007 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+#line 21 "machine/keil.gperf"
+struct keilword { char *name; int token; };
+/* maximum key range = 20, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+keil_hash (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  static unsigned char asso_values[] =
+    {
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 12, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23,  0, 23,  0, 15,  0,
+      13,  5,  0,  7, 23,  0, 23, 23,  2, 11,
+      11, 23, 10, 23,  0,  4,  0,  7, 23, 23,
+       8, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23
+    };
+  return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
+}
+
+#ifdef __GNUC__
+__inline
+#endif
+struct keilword *
+is_keil_word (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  enum
+    {
+      TOTAL_KEYWORDS = 20,
+      MIN_WORD_LENGTH = 3,
+      MAX_WORD_LENGTH = 10,
+      MIN_HASH_VALUE = 3,
+      MAX_HASH_VALUE = 22
+    };
+
+  static struct keilword wordlist[] =
+    {
+      {""}, {""}, {""},
+#line 29 "machine/keil.gperf"
+      {"far", TARGET_ATTRIBUTE0},
+#line 23 "machine/keil.gperf"
+      {"_at_", TARGET_ATTRIBUTE1},
+#line 30 "machine/keil.gperf"
+      {"idata", TARGET_ATTRIBUTE0},
+#line 40 "machine/keil.gperf"
+      {"_task_", TARGET_ATTRIBUTE1},
+#line 37 "machine/keil.gperf"
+      {"sfr", TARGET_DEF},
+#line 36 "machine/keil.gperf"
+      {"sbit", TARGET_DEF},
+#line 31 "machine/keil.gperf"
+      {"interrupt", TARGET_ATTRIBUTE1},
+#line 34 "machine/keil.gperf"
+      {"_priority_", TARGET_ATTRIBUTE1},
+#line 39 "machine/keil.gperf"
+      {"small", TARGET_ATTRIBUTE0},
+#line 32 "machine/keil.gperf"
+      {"large", TARGET_ATTRIBUTE0},
+#line 42 "machine/keil.gperf"
+      {"xdata", TARGET_ATTRIBUTE0},
+#line 35 "machine/keil.gperf"
+      {"reentrant", TARGET_ATTRIBUTE0},
+#line 33 "machine/keil.gperf"
+      {"pdata", TARGET_ATTRIBUTE0},
+#line 24 "machine/keil.gperf"
+      {"alien", TARGET_ATTRIBUTE0},
+#line 28 "machine/keil.gperf"
+      {"data", TARGET_ATTRIBUTE0},
+#line 27 "machine/keil.gperf"
+      {"compact", TARGET_ATTRIBUTE0},
+#line 41 "machine/keil.gperf"
+      {"using", TARGET_ATTRIBUTE1},
+#line 25 "machine/keil.gperf"
+      {"bdata", TARGET_ATTRIBUTE0},
+#line 38 "machine/keil.gperf"
+      {"sfr16", TARGET_DEF},
+#line 26 "machine/keil.gperf"
+      {"code", TARGET_ATTRIBUTE0}
+    };
+
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+    {
+      register int key = keil_hash (str, len);
+
+      if (key <= MAX_HASH_VALUE && key >= 0)
+        {
+          register const char *s = wordlist[key].name;
+
+          if (*str == *s && !strcmp (str + 1, s + 1))
+            return &wordlist[key];
+        }
+    }
+  return 0;
+}
diff --git a/src/machine/keil.c b/src/machine/keil.c
new file mode 100644 (file)
index 0000000..27b9ef2
--- /dev/null
@@ -0,0 +1,107 @@
+/* Partial model for supporting Keil C (original version based on work 
+   by David Patnode (dpatnode@bradley.edu) for this file). 
+
+   Maps the address space keywords into attributes (see keil_token).
+   Maps using, interrupt, etc into attributes (see keil_token).
+
+   Defines typedefs for bit. The magic 
+     sfr/sfr16/sbit name = address
+   Keil extension is rewritten to 
+     sfr __attribute((keil_address(address))) name
+   using predefined typedefs for sbit, sfr and sfr16. This rewrite depends
+   on the special Keil hack in the parser (look for TARGET_DEF in c-parse.y).
+
+   Does not:
+   - compute pointer size correctly (assumes they are all 2 bytes);
+     could improve by writing attribute handling functions to compute
+     the correct pointer size based on the address space attributes...
+     (note the default pointer size should be 2 bytes anyway, because that
+     size is used to size ptrdiff_t_type and intptr_type, and those will be
+     unhappy if there's no integer type of the same size as the pointer size)
+   - check any of the semantic restrictions associated with all these extensions
+
+*/
+
+#include "machine/keil-gperf.h"
+
+static data_declaration keil_sbit_ddecl, keil_sfr_ddecl, keil_sfr16_ddecl;
+
+static void keil_init(void)
+{
+  declare_builtin_type("bit", unsigned_char_type);
+
+  keil_sbit_ddecl = declare_builtin_type("sbit", unsigned_char_type);
+  keil_sfr_ddecl = declare_builtin_type("sfr", unsigned_char_type);
+  keil_sfr16_ddecl = declare_builtin_type("sfr16", unsigned_short_type);
+}
+
+static int keil_token(const char *token, int len, struct yystype *lvalp)
+{
+  struct keilword *keyword = is_keil_word(token, len);
+
+  if (keyword)
+    return keyword->token;
+
+  return IDENTIFIER;
+}
+
+declaration keil_special(location loc, cstring keyword, cstring name,
+                        expression address)
+{
+  /* I just love this kind of code. */
+  region r = parse_region;
+  /* Build __attribute__((keil_address(address))) */
+  word aword = new_word(r, loc, str2cstring(r, "keil_address"));
+  gcc_attribute address_attr = new_gcc_attribute(r, loc, aword, address);
+
+  /* Build a declaration for name */
+  declarator d = make_identifier_declarator(loc, name);
+  data_declaration type_ddecl;
+  type_element elems;
+  declaration vd;
+  data_decl dd;
+
+  /* Pick appropriate fake typedef for name based on keyword */
+  if (!strcmp(keyword.data, "sbit"))
+    type_ddecl = keil_sbit_ddecl;
+  else if (!strcmp(keyword.data, "sfr"))
+    type_ddecl = keil_sfr_ddecl;
+  else
+    type_ddecl = keil_sfr16_ddecl;
+
+  elems = CAST(type_element, new_typename(r, loc, type_ddecl));
+  vd = start_decl(d, NULL, elems, FALSE, CAST(attribute, address_attr));
+  finish_decl(vd, NULL);
+  dd = new_data_decl(r, loc, elems, vd);
+
+  return CAST(declaration, dd);
+}
+
+/* Basic pointer sizes and alignments for the 8051's compiled w/ Keil C51 */
+static machine_spec keil_machine = {
+  "keil", NULL,
+  TRUE,                                /* big_endian */
+  FALSE,                       /* pcc_bitfield_type_matters */
+  8,                           /* empty field boundary - in bits */
+  8,                           /* structure size boundary - in bits */
+  1,                           /* word size */
+  { 2, 1 },                    /* pointer type */
+  { 4, 1 },                    /* float */
+  { 4, 1 },                    /* double */
+  { 4, 1 },                    /* long double */
+  { 2, 1 },                    /* short */
+  { 2, 1 },                    /* int */
+  { 4, 1 },                    /* long */
+  { 8, 1 },                    /* long long (unsupported in avr-gcc) */
+  1, 1, 1, 1,                  /* int1/2/4/8 align */
+  2, 2,                                /* wchar_t, size_t size */
+  TRUE, TRUE,                  /* char, wchar_t signed */
+
+  NULL,                                /* adjust_field_align function */
+  NULL, NULL, NULL, NULL,      /* attribute handling functions */
+  NULL, keil_init,
+  keil_token,
+  keil_special,                        /* Keil C special */
+  NULL,                                /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
diff --git a/src/machine/keil.gperf b/src/machine/keil.gperf
new file mode 100644 (file)
index 0000000..ae21d39
--- /dev/null
@@ -0,0 +1,42 @@
+%{
+/* This file is part of the nesC compiler.
+   Copyright (C) 2007 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+%}
+struct keilword { char *name; int token; };
+%%
+_at_, TARGET_ATTRIBUTE1
+alien, TARGET_ATTRIBUTE0
+bdata, TARGET_ATTRIBUTE0
+code, TARGET_ATTRIBUTE0
+compact, TARGET_ATTRIBUTE0
+data, TARGET_ATTRIBUTE0
+far, TARGET_ATTRIBUTE0
+idata, TARGET_ATTRIBUTE0
+interrupt, TARGET_ATTRIBUTE1
+large, TARGET_ATTRIBUTE0
+pdata, TARGET_ATTRIBUTE0
+_priority_, TARGET_ATTRIBUTE1
+reentrant, TARGET_ATTRIBUTE0
+sbit, TARGET_DEF
+sfr, TARGET_DEF
+sfr16, TARGET_DEF
+small, TARGET_ATTRIBUTE0
+_task_, TARGET_ATTRIBUTE1
+using, TARGET_ATTRIBUTE1
+xdata, TARGET_ATTRIBUTE0
diff --git a/src/machine/msp430.c b/src/machine/msp430.c
new file mode 100644 (file)
index 0000000..6e6dff4
--- /dev/null
@@ -0,0 +1,52 @@
+static bool msp430_decl_attribute(gcc_attribute attr, data_declaration ddecl)
+{
+  const char *name = attr->word1->cstring.data;
+
+  /* Different from the AVR! */
+  if (!strcmp(name, "signal"))
+    {
+      ddecl->spontaneous = c_call_nonatomic;
+      return TRUE;
+    }
+  else if (!strcmp(name, "interrupt"))
+    {
+      ddecl->async = TRUE;
+      /* The signal attribute may have come first */
+      if (ddecl->spontaneous != c_call_nonatomic)
+       ddecl->spontaneous = c_call_atomic;
+      return TRUE;
+    }
+  return FALSE;
+}
+
+/* Basic pointer sizes and alignments for the TI MSP430 */
+static machine_spec msp430_machine = {
+  "msp430", 
+  gcc_save_machine_options,
+  FALSE,                       /* big_endian */
+  FALSE,                       /* pcc_bitfield_type_matters */
+  16,                          /* empty field boundary - in bits */
+  8,                           /* structure size boundary - in bits */
+  2,                           /* word size */
+  { 2, 2 },                    /* pointer type */
+  { 4, 2 },                    /* float */
+  { 4, 2 },                    /* double */
+  { 4, 2 },                    /* long double */
+  { 2, 2 },                    /* short */
+  { 2, 2 },                    /* int */
+  { 4, 2 },                    /* long */
+  { 8, 2 },                    /* long long */
+  1, 2, 2, 2,                  /* int1/2/4/8 align */
+  2, 2,                                /* wchar_t, size_t size */
+  TRUE, TRUE,                  /* char, wchar_t signed */
+
+  NULL,                                /* adjust_field_align */
+
+  msp430_decl_attribute,       /* Attribute handling: declarations */
+  NULL, NULL, NULL,            /* Attribute handling: tag, field, type */
+  NULL, NULL,                  /* preint, init */
+  NULL,                                /* token */
+  NULL,                                /* keil special */
+  gcc_global_cpp_init,         /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
diff --git a/src/machine/sdcc-gperf.h b/src/machine/sdcc-gperf.h
new file mode 100644 (file)
index 0000000..9ef4b17
--- /dev/null
@@ -0,0 +1,187 @@
+/* C code produced by gperf version 3.0.1 */
+/* Command-line: gperf -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf  */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646.  */
+error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#endif
+
+#line 1 "machine/sdcc.gperf"
+
+/* This file is part of the nesC compiler.
+   Copyright (C) 2007 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+#line 21 "machine/sdcc.gperf"
+struct sdccword { char *name; int token; };
+/* maximum key range = 21, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+sdcc_hash (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  static unsigned char asso_values[] =
+    {
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23,  0, 23,  0, 23, 14,
+       3, 23, 13, 23, 23,  0, 23, 23, 23, 23,
+      13, 23,  9, 23,  6, 23,  6,  5, 23, 23,
+       1, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+      23, 23, 23, 23, 23, 23
+    };
+  register int hval = len;
+
+  switch (hval)
+    {
+      default:
+        hval += asso_values[(unsigned char)str[2]];
+      /*FALLTHROUGH*/
+      case 2:
+      case 1:
+        hval += asso_values[(unsigned char)str[0]];
+        break;
+    }
+  return hval;
+}
+
+#ifdef __GNUC__
+__inline
+#endif
+struct sdccword *
+is_sdcc_word (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  enum
+    {
+      TOTAL_KEYWORDS = 20,
+      MIN_WORD_LENGTH = 2,
+      MAX_WORD_LENGTH = 11,
+      MIN_HASH_VALUE = 2,
+      MAX_HASH_VALUE = 22
+    };
+
+  static struct sdccword wordlist[] =
+    {
+      {""}, {""},
+#line 40 "machine/sdcc.gperf"
+      {"at", TARGET_ATTRIBUTE1},
+      {""},
+#line 30 "machine/sdcc.gperf"
+      {"__at", TARGET_ATTRIBUTE1},
+#line 37 "machine/sdcc.gperf"
+      {"idata", TARGET_ATTRIBUTE0},
+#line 35 "machine/sdcc.gperf"
+      {"xdata", TARGET_ATTRIBUTE0},
+#line 27 "machine/sdcc.gperf"
+      {"__idata", TARGET_ATTRIBUTE0},
+#line 25 "machine/sdcc.gperf"
+      {"__xdata", TARGET_ATTRIBUTE0},
+#line 23 "machine/sdcc.gperf"
+      {"__data", TARGET_ATTRIBUTE0},
+#line 42 "machine/sdcc.gperf"
+      {"using", TARGET_ATTRIBUTE1},
+#line 31 "machine/sdcc.gperf"
+      {"__interrupt", TARGET_ATTRIBUTE1},
+#line 32 "machine/sdcc.gperf"
+      {"__using", TARGET_ATTRIBUTE1},
+#line 33 "machine/sdcc.gperf"
+      {"data", TARGET_ATTRIBUTE0},
+#line 38 "machine/sdcc.gperf"
+      {"pdata", TARGET_ATTRIBUTE0},
+#line 41 "machine/sdcc.gperf"
+      {"interrupt", TARGET_ATTRIBUTE1},
+#line 28 "machine/sdcc.gperf"
+      {"__pdata", TARGET_ATTRIBUTE0},
+#line 34 "machine/sdcc.gperf"
+      {"near", TARGET_ATTRIBUTE0},
+#line 26 "machine/sdcc.gperf"
+      {"__far", TARGET_ATTRIBUTE0},
+#line 24 "machine/sdcc.gperf"
+      {"__near", TARGET_ATTRIBUTE0},
+#line 29 "machine/sdcc.gperf"
+      {"__code", TARGET_ATTRIBUTE0},
+#line 39 "machine/sdcc.gperf"
+      {"code", TARGET_ATTRIBUTE0},
+#line 36 "machine/sdcc.gperf"
+      {"far", TARGET_ATTRIBUTE0}
+    };
+
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+    {
+      register int key = sdcc_hash (str, len);
+
+      if (key <= MAX_HASH_VALUE && key >= 0)
+        {
+          register const char *s = wordlist[key].name;
+
+          if (*str == *s && !strcmp (str + 1, s + 1))
+            return &wordlist[key];
+        }
+    }
+  return 0;
+}
diff --git a/src/machine/sdcc.c b/src/machine/sdcc.c
new file mode 100644 (file)
index 0000000..dbc732d
--- /dev/null
@@ -0,0 +1,76 @@
+/* Based on keil.c */
+/* Basic pointer sizes and alignments for the 8051's compiled w/ SDCC */
+
+/* Partial model for supporting SDCC.
+
+   Maps the address space keywords into attributes (see sdcc_token).
+   Maps __at, __using, __interrupt, etc into attributes (see sdcc_token).
+   Defines typedefs for bit, sbit, sfr, sfr16 and sfr32.
+
+   Does not:
+   - allow you to say (e.g.) "signed bit", or "unsigned bit"; this applies to
+     bit, sbit, sfr, sfr16 and sfr32.
+   - compute pointer size correctly (assumes they are all 2 bytes);
+     could improve by writing attribute handling functions to compute
+     the correct pointer size based on the address space attributes...
+     (note the default pointer size should be 2 bytes anyway, because that
+     size is used to size ptrdiff_t_type and intptr_type, and those will be
+     unhappy if there's no integer type of the same size as the pointer size)
+   - check any of the semantic restrictions associated with all these extensions
+
+*/
+
+
+#include "machine/sdcc-gperf.h"
+
+static void sdcc_init(void)
+{
+  declare_builtin_type("bit", unsigned_char_type);
+  declare_builtin_type("sbit", unsigned_char_type);
+  declare_builtin_type("sfr", unsigned_char_type);
+  declare_builtin_type("sfr16", unsigned_short_type);
+  declare_builtin_type("sfr32", unsigned_long_type);
+  declare_builtin_type("__bit", unsigned_char_type);
+  declare_builtin_type("__sbit", unsigned_char_type);
+  declare_builtin_type("__sfr", unsigned_char_type);
+  declare_builtin_type("__sfr16", unsigned_short_type);
+  declare_builtin_type("__sfr32", unsigned_long_type);
+}
+
+static int sdcc_token(const char *token, int len, struct yystype *lvalp)
+{
+  struct sdccword *keyword = is_sdcc_word(token, len);
+
+  if (keyword)
+    return keyword->token;
+
+  return IDENTIFIER;
+}
+
+static machine_spec sdcc_machine = {
+  "sdcc", NULL,
+  FALSE,                       /* big_endian */
+  FALSE,                       /* pcc_bitfield_type_matters */
+  8,                           /* empty field boundary - in bits */
+  8,                           /* structure size boundary - in bits */
+  1,                           /* word size */
+  { 2, 1 },                    /* pointer type */
+  { 4, 1 },                    /* float */
+  { 4, 1 },                    /* double */
+  { 4, 1 },                    /* long double */
+  { 2, 1 },                    /* short */
+  { 2, 1 },                    /* int */
+  { 4, 1 },                    /* long */
+  { 8, 1 },                    /* long long */
+  1, 1, 1, 1,                  /* int1/2/4/8 align */
+  2, 2,                                /* wchar_t, size_t size */
+  TRUE, TRUE,                  /* char, wchar_t signed */
+
+  NULL,                                /* adjust_field_align function */
+  NULL, NULL, NULL, NULL,      /* attribute handling functions */
+  NULL, sdcc_init,
+  sdcc_token,
+  NULL,                                /* Keil C special */
+  NULL,                                /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
diff --git a/src/machine/sdcc.gperf b/src/machine/sdcc.gperf
new file mode 100644 (file)
index 0000000..0c93766
--- /dev/null
@@ -0,0 +1,42 @@
+%{
+/* This file is part of the nesC compiler.
+   Copyright (C) 2007 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+%}
+struct sdccword { char *name; int token; };
+%%
+__data, TARGET_ATTRIBUTE0
+__near, TARGET_ATTRIBUTE0
+__xdata, TARGET_ATTRIBUTE0
+__far, TARGET_ATTRIBUTE0
+__idata, TARGET_ATTRIBUTE0
+__pdata, TARGET_ATTRIBUTE0
+__code, TARGET_ATTRIBUTE0
+__at, TARGET_ATTRIBUTE1
+__interrupt, TARGET_ATTRIBUTE1
+__using, TARGET_ATTRIBUTE1
+data, TARGET_ATTRIBUTE0
+near, TARGET_ATTRIBUTE0
+xdata, TARGET_ATTRIBUTE0
+far, TARGET_ATTRIBUTE0
+idata, TARGET_ATTRIBUTE0
+pdata, TARGET_ATTRIBUTE0
+code, TARGET_ATTRIBUTE0
+at, TARGET_ATTRIBUTE1
+interrupt, TARGET_ATTRIBUTE1
+using, TARGET_ATTRIBUTE1
diff --git a/src/machine/self.c b/src/machine/self.c
new file mode 100644 (file)
index 0000000..21a82c0
--- /dev/null
@@ -0,0 +1,111 @@
+#include <inttypes.h>
+
+/* Basic pointer sizes and alignments for this machine */
+
+/* GCC is broken (could be a broken design issue ;-)), so need the
+   typedefs (rather than using the types directly in the calls
+   to alignof) */
+typedef int __attribute__ ((mode(__word__))) myword;
+typedef int __attribute__ ((mode(__byte__))) myint1;
+typedef int __attribute__ ((mode(__HI__))) myint2;
+typedef int __attribute__ ((mode(__SI__))) myint4;
+typedef int __attribute__ ((mode(__DI__))) myint8;
+
+/* Find out how big the smallest struct is. Assume this tells us to
+   what multiples structs are rounded. */
+struct self_smallest {
+  char x;
+};
+
+/* Find out to what multiple 0-bit bitfields round thingg */
+struct self_efb {
+  char x : 1;
+  char : 0;
+};
+
+/* Detect if bitfield type influences the struct */
+struct self_pcc1 {
+  int x : 1;
+};
+struct self_pcc2 {
+  char x : 1;
+};
+
+static void self_preinit(void);
+
+#ifdef __i386__
+#define SELF_ADJUST_FIELD_ALIGN self_adjust_field_align
+#define SELF_HANDLE_OPTION self_handle_option
+
+static bool align_double;
+
+static cval self_adjust_field_align(field_declaration fdecl, cval alignment)
+{
+  if (!align_double && type_arithmetic(type_array_of_base(fdecl->type)))
+    alignment = cval_min(make_cval_unsigned(32, size_t_type), alignment);
+  return alignment;
+}
+
+static void self_handle_option(const char *arg)
+{
+  if (!strcmp(arg, "-malign-double"))
+    align_double = TRUE;
+  else if (!strcmp(arg, "-mnoalign-double"))
+    align_double = FALSE;
+  gcc_save_machine_options(arg);
+}
+
+#else
+#define SELF_ADJUST_FIELD_ALIGN NULL
+#define SELF_HANDLE_OPTION gcc_save_machine_options
+
+#endif
+
+static machine_spec self_machine = {
+  "pc", SELF_HANDLE_OPTION,
+
+  FALSE,                       /* big_endian, set in preinit */
+
+  /* pcc_bitfield_type_matters */
+  sizeof(struct self_pcc1) != sizeof(struct self_pcc2),        
+
+  /* empty field boundary */
+  sizeof(struct self_efb) * BITSPERBYTE, 
+
+  /* structure size boundary */
+  sizeof(struct self_smallest) * BITSPERBYTE, 
+
+  sizeof(myword),                                   /* word size */
+  { sizeof(void *),      __alignof__(void *) },             /* pointer type */
+  { sizeof(float),       __alignof__(float) },      /* float */
+  { sizeof(double),      __alignof__(double) },             /* double */
+  { sizeof(long double), __alignof__(long double) }, /* long double */
+  { sizeof(short),       __alignof__(short) },      /* short */
+  { sizeof(int),         __alignof__(int) },        /* int */
+  { sizeof(long),        __alignof__(long) },       /* long */
+  { sizeof(long long),   __alignof__(long long) },   /* long long */
+  __alignof__(myint1), __alignof__(myint2),
+  __alignof__(myint4), __alignof__(myint8),         /* int1/2/4/8 align */
+  sizeof(wchar_t), sizeof(size_t),                  /* wchar_t, size_t size */
+  (char)-1 < 0, (wchar_t)-1 < 0,                    /* char, wchar_t signed */
+
+  SELF_ADJUST_FIELD_ALIGN,                          /* adjust_field_align */
+
+  NULL, NULL, NULL, NULL,      /* No special attributes */
+  self_preinit, NULL,          /* init */
+  NULL,                                /* token */
+  NULL,                                /* keil special */
+  gcc_global_cpp_init,         /* global cpp support */
+  NULL                         /* per-file cpp support */
+};
+
+static void self_preinit(void)
+{
+  union {
+    uint8_t a;
+    uint16_t b;
+  } endian;
+
+  endian.b = 1;
+  self_machine.big_endian = endian.a != 1;
+}
diff --git a/src/nconfig.h b/src/nconfig.h
new file mode 100644 (file)
index 0000000..54323e4
--- /dev/null
@@ -0,0 +1,86 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef NCONFIG_H
+#define NCONFIG_H
+
+/* autoconf/configure options */
+#include "autoconf.h"
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+#undef PACKAGE_BUGREPORT
+#undef PACKAGE_VERSION
+
+/* Target type structure information.
+   This setup assumes that we are compiling on self, with gcc 
+*/
+
+#include <limits.h>
+#define BITSPERBYTE CHAR_BIT
+
+/* Largest signed and unsigned int types (for constants and constant folding) */
+typedef long long largest_int;
+typedef unsigned long long largest_uint;
+
+#define LARGEST_UINTBITS (SIZEOF_LONG_LONG * BITSPERBYTE)
+
+/* Miscellaneous config */
+
+typedef unsigned char bool;
+
+#include "cstring.h"
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#define TRUE 1
+#define FALSE 0
+
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
+
+#ifdef HAVE_ALLOCA_H
+#include <alloca.h>
+#else
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+void *alloca(size_t n);
+#else
+#error need alloca
+#endif
+#endif
+
+#if __GNUC__ >= 3 && __GNUC_MINOR__ >= 1
+#define USE_UNNAMED_UNION
+#endif
+
+/* The number of non-significant low-order bits in pointer addresses
+   (typically log2 of the alignment of allocations) */
+#define ALIGNMENT_BITS 3
+
+#ifdef WIN32
+#define DIR_SEPARATOR '\\'
+#endif
+
+#endif
diff --git a/src/nesc-abstract.c b/src/nesc-abstract.c
new file mode 100644 (file)
index 0000000..2ffc824
--- /dev/null
@@ -0,0 +1,1423 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-cg.h"
+#include "nesc-c.h"
+#include "nesc-abstract.h"
+#include "c-parse.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+#include "nesc-configuration.h"
+#include "AST_walk.h"
+#include "semantics.h"
+#include "constants.h"
+#include "nesc-constants.h"
+#include "c-lex.h"
+#include "expr.h"
+#include "nesc-env.h"
+#include "init.h"
+#include "attributes.h"
+#include "nesc-attributes.h"
+#include "unparse.h"
+
+static AST_walker clone_walker;
+
+/* data_declaration in:
+   oldidentifier_decl: ignored as illegal in modules
+   string
+
+   enumerator
+   function_decl
+   identifier
+   component_deref
+   interface_deref
+   typename
+   variable_decl
+   type_parm_decl
+*/
+
+/* tag_declaration in:
+   tag_ref
+   types
+ */
+
+/* field_declaration in:
+   field_ref
+   field_decl
+   tag_declaration
+ */
+
+/* types in:
+   (ignoring declared_type, currently unused)
+   expression
+   asttype
+   field_declaration
+   data_declaration
+   (reptype in tag_declaration does not need instantiating)
+ */
+
+/* typelist in:
+   data_declaration (gparms, can ignore oldstyle_args as not allowed in
+                     modules)
+*/
+
+static void *clone(region r, void *vn)
+{
+  struct location l;
+  node *n = vn;
+  node new = AST_clone(r, *n);
+
+  (*n)->instantiation = new;
+  new->instantiation = NULL;
+  *n = new;
+
+  /* Update location to include the container (so we can print instance
+     names in error messages) */
+  l = *new->location;
+  l.container = current.container;
+  new->location = make_location(l);
+
+  return new;
+}
+
+static void forward(data_declaration *dd)
+{
+  data_declaration ddecl = *dd;
+
+  if (ddecl->instantiation)
+    *dd = ddecl->instantiation;
+}
+
+static void instantiate_ddecl_types(data_declaration ddecl)
+{
+  /* type's in declarations come from the source code, so cannot be unknown */
+  ddecl->type = instantiate_type(ddecl->type);
+  if (ddecl->kind == decl_interface_ref && ddecl->gparms)
+    ddecl->gparms = instantiate_typelist(ddecl->gparms);
+}
+
+static data_declaration hack_interface;
+static int hack_required;
+
+static void clone_ddecl(data_declaration ddecl)
+{
+  data_declaration copy;
+
+  /* If already cloned, return. */
+  if (ddecl->instantiation &&
+      (!hack_interface || ddecl->instantiation->interface == hack_interface))
+    {
+      /* If the instantiation's context matches the current one, the
+        instantiation was already done. */
+      if (ddecl->container &&
+         ddecl->instantiation->container == current.container)
+       return;
+      if (ddecl->container_function && 
+         ddecl->instantiation->container_function == current.function_decl->ddecl)
+       return;
+    }
+
+  /* Copy module functions (incl. tasks) and variables */
+
+  if (!(ddecl->kind == decl_variable || ddecl->kind == decl_function ||
+       ddecl->kind == decl_constant || ddecl->kind == decl_typedef ||
+       ddecl->kind == decl_interface_ref))
+    return;
+
+  /* Instantiate decls in modules */
+  if (!(ddecl->container ||
+       (ddecl->container_function && ddecl->container_function->container)))
+    return;
+
+  copy = declare(current.env, ddecl, TRUE);
+  /* We don't have a proper environment, so the container and 
+     container_function fields are bogus. Set them correctly. */
+  if (ddecl->container) /* module level */
+    {
+      copy->container = current.container;
+      copy->container_function = NULL;
+    }
+  else /* local */
+    {
+      copy->container = NULL;
+      copy->container_function = current.function_decl->ddecl;
+    }
+
+  ddecl->instantiation = copy;
+  copy->instantiation = NULL;
+  copy->fn_uses = NULL;
+  copy->nuses = NULL;
+  copy->instanceof = ddecl;
+  copy->interface = hack_interface;
+  /* This hack_required thing is ugly. It's used when instantiating
+     generic interfaces, to match the used/provides at the particular
+     instantiation. */
+  if (ddecl_is_command_or_event(copy) && hack_required)
+    copy->defined = (copy->ftype == function_command) ^ (hack_required - 1);
+  instantiate_ddecl_types(copy);
+}
+
+static void copy_fields(region r, tag_declaration copy, tag_declaration orig)
+{
+  field_declaration ofield, *nextfield;
+  
+  copy->fields = new_env(r, NULL);
+  nextfield = &copy->fieldlist;
+
+  for (ofield = orig->fieldlist; ofield; ofield = ofield->next)
+    {
+      field_declaration cfield = ralloc(r, struct field_declaration);
+
+      *cfield = *ofield;
+      ofield->instantiation = cfield;
+      cfield->instantiation = NULL;
+      if (cfield->name)
+       env_add(copy->fields, cfield->name, cfield);
+      *nextfield = cfield;
+      nextfield = &cfield->next;
+    }
+}
+
+static void forward_tdecl(region r, tag_ref tref)
+{
+  tag_declaration tdecl = tref->tdecl, copy;  
+
+  /* Ignore non-module tags */
+  if (!(tdecl->container ||
+       (tdecl->container_function && tdecl->container_function->container)))
+    return;
+
+  /* If already cloned, use instance & return */
+  if (tdecl->instantiation)
+    {
+      /* If the instantiation's context matches the current one, the
+        instantiation was already done. */
+      tref->tdecl = tdecl->instantiation;
+      if (tdecl->container &&
+         tdecl->instantiation->container == current.container)
+       return;
+      if (tdecl->container_function && 
+         tdecl->instantiation->container_function == current.function_decl->ddecl)
+       return;
+    }
+
+  copy = declare_tag(tref);
+  /* We don't have a proper environment, so the container and 
+     container_function fields are bogus. Set them correctly. */
+  if (tdecl->container) /* module level */
+    {
+      copy->container = current.container;
+      copy->container_function = NULL;
+    }
+  else /* local */
+    {
+      copy->container = NULL;
+      copy->container_function = current.function_decl->ddecl;
+    }
+
+
+  tref->tdecl = copy;
+  tdecl->instantiation = copy;
+
+  copy->reptype = tdecl->reptype;
+  if (tdecl->defined)
+    copy_fields(r, copy, tdecl);
+  copy->instanceof = tdecl;
+  copy->defined = tdecl->defined;
+  copy->fields_const = tdecl->fields_const;
+  copy->fields_volatile = tdecl->fields_volatile;
+  copy->transparent_union = tdecl->transparent_union;
+  copy->collapsed = tdecl->collapsed;
+  copy->container = current.container;
+}
+
+static ivalue instantiate_ivalue(region r, ivalue value);
+
+static void instantiate_ivalue_array(region r, ivalue copy, ivalue value)
+{
+  ivalue_array elem, *new_elems = &copy->u.array;
+
+  for (elem = value->u.array; elem; elem = elem->next)
+    {
+      ivalue_array copy_elem = ralloc(r, struct ivalue_array);
+
+      *new_elems = copy_elem;
+      new_elems = &copy_elem->next;
+
+      copy_elem->from = elem->from;
+      copy_elem->to = elem->to;
+      copy_elem->value = instantiate_ivalue(r, elem->value);
+    }
+}
+
+static void instantiate_ivalue_structured(region r, ivalue copy, ivalue value)
+{
+  ivalue_field field, *new_fields = &copy->u.structured;
+
+  for (field = value->u.structured; field; field = field->next)
+    {
+      ivalue_field copy_field = ralloc(r, struct ivalue_field);
+
+      *new_fields = copy_field;
+      new_fields = &copy_field->next;
+
+      if (field->field->instantiation)
+       copy_field->field = field->field->instantiation;
+      else
+       copy_field->field = field->field;
+      copy_field->value = instantiate_ivalue(r, field->value);
+    }
+}
+
+static ivalue instantiate_ivalue(region r, ivalue value)
+{
+  ivalue copy;
+
+  // If already instantiated on this pass, return instantiation
+  if (value->instantiation)
+    return value->instantiation;
+
+  /* type's in ivalues come from the source code, so cannot be unknown */
+  copy = new_ivalue(r, value->kind, instantiate_type(value->type));
+  value->instantiation = copy;
+  switch (value->kind)
+    {
+    case iv_base:
+      copy->u.base.require_constant_value = value->u.base.require_constant_value;
+      break;
+    case iv_array: instantiate_ivalue_array(r, copy, value); break;
+    case iv_structured: instantiate_ivalue_structured(r, copy, value); break;
+    default: assert(0); 
+    }
+  return copy;
+}
+
+static void clear_ivalue_instantiations(ivalue value);
+
+static void clear_ivalue_array(ivalue value)
+{
+  ivalue_array elem;
+
+  for (elem = value->u.array; elem; elem = elem->next)
+    clear_ivalue_instantiations(elem->value);
+}
+
+static void clear_ivalue_structured(ivalue value)
+{
+  ivalue_field field;
+
+  for (field = value->u.structured; field; field = field->next)
+    clear_ivalue_instantiations(field->value);
+}
+
+static void clear_ivalue_instantiations(ivalue value)
+{
+  // We've cleared here and beneath if instantiation is already NULL.
+  if (!value->instantiation)
+    return;
+  value->instantiation = NULL;
+
+  switch (value->kind)
+    {
+    case iv_base: break;
+    case iv_array: clear_ivalue_array(value); break;
+    case iv_structured: clear_ivalue_structured(value); break;
+    default: assert(0); 
+    }
+}
+
+static type unary_type(unary e)
+{
+  switch (e->kind)
+    {
+    case kind_unary_plus:
+    case kind_unary_minus:
+    case kind_bitnot:
+      return type_default_conversion(e->type);
+    case kind_realpart: case kind_imagpart: {
+      type etype = type_default_conversion(e->type);
+
+      return type_complex(etype) ? make_base_type(etype) : etype;
+    }
+    default: /* ++, --, cast, address of, dereference, field ref, 
+               component deref, not, sizeof expr, alignof expr */
+      return instantiate_type(e->type);
+    }
+}
+
+static type binary_type(binary e)
+{
+  switch(e->kind)
+    {
+    case kind_plus: case kind_minus: case kind_times: case kind_divide:
+    case kind_modulo: case kind_bitand: case kind_bitor: case kind_bitxor:
+    case kind_lshift: case kind_rshift:
+    case kind_plus_assign: case kind_minus_assign: case kind_times_assign:
+    case kind_divide_assign: case kind_modulo_assign: case kind_bitand_assign:
+    case kind_bitor_assign: case kind_bitxor_assign: case kind_lshift_assign:
+    case kind_rshift_assign: {
+      type t1 = type_default_conversion(e->arg1->type);
+      type t2 = type_default_conversion(e->arg2->type);
+
+      /* Detect the various pointer arithmetic cases. These cannot lead to
+        an unknown type, and don't want to be passed to common type */
+      if (type_pointer(t1) || type_pointer(t2))
+       return instantiate_type(e->type);
+      else
+       return common_type(t1, t2);
+    }
+    case kind_leq: case kind_geq: case kind_lt: case kind_gt:
+    case kind_eq: case kind_ne:
+    case kind_andand: case kind_oror:
+    case kind_array_ref: case kind_assign:
+      return instantiate_type(e->type);
+
+    default: assert(0); return NULL;
+    }
+}
+
+static type conditional_type(conditional e)
+{
+  type rtype = NULL;
+  type ttype = type_default_conversion(e->arg1->type);
+  type ftype = type_default_conversion(e->arg2->type);
+
+  if (type_equal(ttype, ftype))
+    rtype = ttype;
+  else if (type_equal_unqualified(ttype, ftype))
+    rtype = make_qualified_type(ttype, no_qualifiers);
+  else if (type_real(ttype) && type_real(ftype))
+    /* This should probably be type_arithmetic. See complex3.c/C9X */
+    rtype = common_type(ttype, ftype);
+  else if (type_void(ttype) || type_void(ftype))
+    rtype = void_type;
+  else if (type_pointer(ttype) && type_pointer(ftype))
+    {
+      type tpointsto = type_points_to(ttype), fpointsto = type_points_to(ftype);
+
+      if (type_compatible_unqualified(tpointsto, fpointsto))
+       rtype = common_type(tpointsto, fpointsto);
+      else if (definite_null(e->arg1) && type_void(tpointsto))
+       rtype = fpointsto;
+      else if (definite_null(e->arg2) && type_void(fpointsto))
+       rtype = tpointsto;
+      else if (type_void(tpointsto))
+       rtype = tpointsto; /* void * result */
+      else if (type_void(fpointsto))
+       rtype = fpointsto; /* void * result */
+      else
+       /* Slight difference from GCC: I qualify the result type with
+          the appropriate qualifiers */
+       rtype = void_type;
+
+      /* Qualifiers depend on both types */
+      rtype = make_pointer_type(qualify_type2(rtype, tpointsto, fpointsto));
+    }
+  else if (type_pointer(ttype) && type_integer(ftype))
+    rtype = ttype;
+  else if (type_pointer(ftype) && type_integer(ttype))
+    rtype = ftype;
+  else if (flag_cond_mismatch)
+    rtype = void_type;
+  else
+    assert(0);
+  
+  /* Qualifiers depend on both types */
+  return qualify_type2(rtype, ttype, ftype);
+}
+
+static type expression_type(expression e)
+{
+  switch (e->kind)
+    {
+    default:
+      if (is_binary(e))
+       return binary_type(CAST(binary, e));
+      if (is_unary(e))
+       return unary_type(CAST(unary, e));
+      /* constants, label address, sizeof type, alignof type, identifier,
+        function call: these cannot be unknown type */
+      return instantiate_type(e->type); 
+
+    case kind_comma:
+      return last_comma(CAST(comma, e))->type;
+
+    case kind_conditional:
+      return conditional_type(CAST(conditional, e));
+      /* ick */
+      break;
+    }
+}
+
+static AST_walker_result clone_expression(AST_walker spec, void *data,
+                                         expression *n)
+{
+  expression new = clone(data, n);
+  ivalue old_ivalue = NULL;
+
+  if (new->ivalue)
+    {
+      ivalue copy = instantiate_ivalue(data, new->ivalue);
+
+      old_ivalue = new->ivalue;
+      new->ivalue = copy;
+      if (copy->kind == iv_base)
+       copy->u.base.expr = new;
+    }
+
+  AST_walk_children(spec, data, CAST(node, new));
+
+  // clear instantiation field in ivalues to be ready for next
+  // instantiation attempt
+  if (old_ivalue)
+    clear_ivalue_instantiations(old_ivalue);
+
+  /* A few nodes (related to initialisation) don't have types */
+  if (new->type)
+    new->type = expression_type(new);
+
+  return aw_done;
+}
+
+static AST_walker_result clone_stmt(AST_walker spec, void *data, statement *n)
+{
+  statement new = clone(data, n);
+
+  /* Update containing_atomic and parent_loop */
+  if (new->containing_atomic)
+    new->containing_atomic = CAST(atomic_stmt, new->containing_atomic->instantiation);
+  if (new->parent_loop)
+    new->parent_loop = CAST(statement, new->parent_loop->instantiation);
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_asttype(AST_walker spec, void *data, asttype *n)
+{
+  asttype new = clone(data, n);
+
+  /* type's in asttype come from the source code, so cannot be unknown */
+  new->type = instantiate_type(new->type);
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_function_decl(AST_walker spec, void *data,
+                                            function_decl *n)
+{
+  declaration old = CAST(declaration, *n);
+  function_decl new = clone(data, n);
+
+  clone_ddecl(new->ddecl);
+
+  if (new->ddecl->instantiation)
+    {
+      data_declaration instance = new->ddecl->instantiation;
+
+      /* We need to forward the ddecl *and* update the definition field in
+        the instantiated data_declaration. */
+      instance->definition = CAST(declaration, new);
+      /* We update the ast field if it pointed to this function_decl
+        (note that command and event data_declarations assume that the
+        ast field points to the original variable_decl) */
+      if (instance->ast == old)
+       instance->ast = CAST(declaration, new);
+      new->ddecl = instance;
+    }
+
+  current.function_decl = new;
+  current.env->fdecl = new;
+  AST_walk_children(spec, data, CAST(node, new));
+  current.function_decl = NULL;
+  current.env->fdecl = NULL;
+
+  return aw_done;
+}
+
+static AST_walker_result clone_identifier(AST_walker spec, void *data,
+                                         identifier *n)
+{
+  clone_expression(spec, data, CASTPTR(expression, n));
+  forward(&(*n)->ddecl);
+
+  return aw_done;
+}
+
+static AST_walker_result clone_interface_deref(AST_walker spec, void *data,
+                                              interface_deref *n)
+{
+  clone_expression(spec, data, CASTPTR(expression, n));
+  forward(&(*n)->ddecl);
+
+  return aw_done;
+}
+
+static AST_walker_result clone_component_deref(AST_walker spec, void *data,
+                                              component_deref *n)
+{
+  component_deref new = clone(data, n);
+
+  new->type = instantiate_type(new->type);
+  forward(&new->ddecl);
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_variable_decl(AST_walker spec, void *data,
+                                            variable_decl *n)
+{
+  declaration old = CAST(declaration, *n);
+  variable_decl new = clone(data, n);
+
+  if (new->ddecl)
+    {
+      clone_ddecl(new->ddecl);
+
+      if (new->ddecl->instantiation)
+       {
+         data_declaration instance = new->ddecl->instantiation;
+
+         /* Forward the ddecl and update the ast and definition fields */
+         if (instance->definition == old)
+           instance->definition = CAST(declaration, new);
+         if (instance->ast == old)
+           instance->ast = CAST(declaration, new);
+         new->ddecl = instance;
+       }
+    }
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_type_parm_decl(AST_walker spec, void *data,
+                                            type_parm_decl *n)
+{
+  type_parm_decl new = clone(data, n);
+  data_declaration instance;
+
+  clone_ddecl(new->ddecl);
+  instance = new->ddecl->instantiation;
+  instance->definition = CAST(declaration, new);
+  instance->ast = CAST(declaration, new);
+  new->ddecl = instance;
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_typename(AST_walker spec, void *data,
+                                       typename *n)
+{
+  typename new = clone(data, n);
+
+  forward(&new->ddecl);
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_enumerator(AST_walker spec, void *data,
+                                         enumerator *n)
+{
+  enumerator new = clone(data, n);
+
+  clone_ddecl(new->ddecl);
+
+  if (new->ddecl->instantiation)
+    {
+      data_declaration instance = new->ddecl->instantiation;
+
+      /* Forward the ddecl and update the ast and definition fields */
+      instance->definition = CAST(declaration, new);
+      instance->ast = CAST(declaration, new);
+      new->ddecl = instance;
+    }
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_tag_ref(AST_walker spec, void *data,
+                                      tag_ref *n)
+{
+  tag_ref new = clone(data, n);
+
+  forward_tdecl(data, new);
+  if (new->defined)
+    new->tdecl->definition = new;
+  AST_walk_children(spec, data, CAST(node, new));
+
+  return aw_done;
+}
+
+static AST_walker_result clone_field_decl(AST_walker spec, void *data,
+                                      field_decl *n)
+{
+  field_decl new = clone(data, n);
+
+  AST_walk_children(spec, data, CAST(node, new));
+  new->fdecl = new->fdecl->instantiation;
+  new->fdecl->type = instantiate_type(new->fdecl->type);
+  new->fdecl->ast = new;
+
+  return aw_done;
+}
+
+static AST_walker_result clone_field_ref(AST_walker spec, void *data,
+                                        field_ref *n)
+{
+  field_ref new;
+
+  clone_expression(spec, data, CASTPTR(expression, n));
+  new = *n;
+  if (new->fdecl->instantiation)
+    new->fdecl = new->fdecl->instantiation;
+
+  return aw_done;
+}
+
+static void set_ddecl_instantiation1(data_declaration fndecl, void *data)
+{
+  data_declaration orig;
+
+  instantiate_ddecl_types(fndecl);
+
+  /* Here we make the copy of the fndecl created during parsing
+     (the copy from the actual interface type) point to fndecl.
+     We may have to go two deep for abstract modules in abstract
+     configurations (but don't get fooled by generic interfaces) */
+  orig = fndecl->instanceof;
+  if (orig->instanceof && orig->instanceof->container->kind == l_component)
+    orig = orig->instanceof;
+
+  orig->instantiation = fndecl;
+}
+
+static void set_env_instantiations(environment env)
+{
+  const char *name;
+  void *entry;
+  env_scanner scan;
+
+  env_scan(env->id_env, &scan);
+  while (env_next(&scan, &name, &entry))
+    set_ddecl_instantiation1(entry, NULL);
+}
+
+static void set_specification_instantiations(nesc_declaration component)
+/* Effects: Set the instantiation pointers in the data_declarations of
+     the original abstract component from which component is derived to
+     the copies in component (in preparation for cloning component's
+     AST and pointing to component's decls)
+
+     Also instantiate the types in the copies
+
+     The original data_declarations can be found by following the
+     instanceof fields. We may have to follow these one deep (abstract
+     modules in configurations) or two deep (abstract modules in
+     abstract configurations)...
+*/
+{
+  component_spec_iterate(component, set_ddecl_instantiation1, NULL, TRUE);
+}
+
+static void set_ddecl_instantiation2(data_declaration fndecl, void *data)
+{
+  /* We just make the decl fndecl is a copy of point back to fndecl */
+  fndecl->instanceof->instantiation = fndecl;
+}
+
+static void set_specification_instantiations_shallow(nesc_declaration component)
+/* Effects: Set the instantiation pointers in the data_declarations of
+     the original abstract component from which component is derived to
+     the copies in component (in preparation for cloning component's
+     AST and pointing to component's decls)
+
+     The original data_declarations can be found by following the
+     shadowed fields. We may have to follow these one deep (abstract
+     modules in configurations) or two deep (abstract modules in
+     abstract configurations)...
+*/
+{
+  component_spec_iterate(component, set_ddecl_instantiation2, NULL, TRUE);
+}
+
+static declaration instantiate_parameters(region r, declaration orig_parms)
+/* Effects: Makes a new list of declarations for an abstract componnent
+*/
+{
+  AST_walk_list(clone_walker, r, CASTPTR(node, &orig_parms));
+  AST_set_parents(CAST(node, orig_parms));
+
+  return CAST(declaration, orig_parms);
+}
+
+static void instantiate_endp(endp ep)
+/* Effects: Modifies ep based on instantiated ddecls
+ */
+{
+  /* The component does not get instantiated and is ignored anyway */
+  if (ep->interface && ep->interface->instantiation)
+    ep->interface = ep->interface->instantiation;
+  if (ep->function && ep->function->instantiation)
+    ep->function = ep->function->instantiation;
+  if (ep->args_node)
+    ep->args_node = CAST(expression, ep->args_node->instantiation);
+}
+
+static void instantiate_cg(cgraph copy, cgraph original)
+/* Effects: Copies the original graph into copy, with endpoints based
+     on the instantiations specified in the function and interface ddecls
+*/
+{
+  ggraph orig_g = cgraph_graph(original);
+  gnode n;
+  gedge connection;
+
+  /* Add all edges from original to copy, but with updated ddecls */
+  graph_scan_nodes (n, orig_g)
+    {
+      struct endp from = *NODE_GET(endp, n);
+      gnode cfrom;
+
+      instantiate_endp(&from);
+      cfrom = endpoint_lookup(copy, &from);
+
+      graph_scan_out (connection, n)
+       {
+         struct endp to = *NODE_GET(endp, graph_edge_to(connection));
+         gnode cto;
+
+         instantiate_endp(&to);
+         cto = endpoint_lookup(copy, &to);
+
+         graph_add_edge(cfrom, cto, NULL);
+       }
+    }
+}
+
+static AST_walker_result clone_component_ref(AST_walker spec, void *data,
+                                            component_ref *n)
+{
+  component_ref new = clone(data, n);
+
+  /* Instantiate any further abstract components inside this abstract
+     configuration. */
+  if (new->cdecl->abstract)
+    {
+      new->cdecl = specification_copy(data, new, FALSE);
+      set_specification_instantiations_shallow(new->cdecl);
+    }
+
+  return aw_walk;
+}
+
+static AST_walker_result clone_interface_ref(AST_walker spec, void *data,
+                                            interface_ref *n)
+{
+  interface_ref new = clone(data, n);
+
+  AST_walk_children(spec, data, CAST(node, new));
+
+  clone_ddecl(new->ddecl);
+  new->ddecl = new->ddecl->instantiation;
+
+  if (new->ddecl->itype->abstract)
+    {
+      new->ddecl->itype = interface_copy(data, new, current.container->abstract);
+      new->ddecl->functions = new->ddecl->itype->env;
+    }
+  else
+    copy_interface_functions(data, current.container, 
+                            new->ddecl, new->ddecl->functions);
+
+  return aw_done;
+}
+
+static AST_walker_result clone_implementation(AST_walker spec, void *data,
+                                             implementation *n)
+{
+  implementation new = clone(data, n);
+  nesc_declaration comp = current.container, orig = original_component(comp);
+
+  /* Copy the components and connections (configurations) or the
+     declarations (modules) */
+  AST_walk_children(spec, data, CAST(node, new));
+
+  /* Copy the local_statics list for nido by following the instantiation
+     links in the original list */
+  if (orig->local_statics)
+    {
+      dd_list_pos scan;
+      region r = regionof(comp->local_statics);
+
+      dd_scan (scan, orig->local_statics)
+       {
+         data_declaration localsd = DD_GET(data_declaration, scan);
+
+         dd_add_last(r, comp->local_statics, localsd->instantiation);
+       }
+    }
+
+  /* Copy the connection graph
+     (note that comp->connections was initialised to an "empty" graph */
+  instantiate_cg(comp->connections, orig->connections);
+  instantiate_cg(comp->user_connections, orig->user_connections);
+
+  return aw_done;
+}
+
+static AST_walker_result clone_ast(AST_walker spec, void *data, node *n)
+{
+  clone(data, n);
+  return aw_walk;
+}
+
+static void init_clone(void)
+{
+  clone_walker = new_AST_walker(permanent);
+  AST_walker_handle(clone_walker, kind_node, clone_ast);
+
+  AST_walker_handle(clone_walker, kind_expression, clone_expression);
+  AST_walker_handle(clone_walker, kind_field_ref, clone_field_ref);
+  AST_walker_handle(clone_walker, kind_identifier, clone_identifier);
+  AST_walker_handle(clone_walker, kind_interface_deref, clone_interface_deref);
+  AST_walker_handle(clone_walker, kind_component_deref, clone_component_deref);
+
+  AST_walker_handle(clone_walker, kind_statement, clone_stmt);
+
+  AST_walker_handle(clone_walker, kind_asttype, clone_asttype);
+  AST_walker_handle(clone_walker, kind_function_decl, clone_function_decl);
+  AST_walker_handle(clone_walker, kind_variable_decl, clone_variable_decl);
+  AST_walker_handle(clone_walker, kind_type_parm_decl, clone_type_parm_decl);
+  AST_walker_handle(clone_walker, kind_typename, clone_typename);
+  AST_walker_handle(clone_walker, kind_enumerator, clone_enumerator);
+  AST_walker_handle(clone_walker, kind_implementation, clone_implementation);
+  AST_walker_handle(clone_walker, kind_component_ref, clone_component_ref);
+  AST_walker_handle(clone_walker, kind_interface_ref, clone_interface_ref);
+  AST_walker_handle(clone_walker, kind_tag_ref, clone_tag_ref);
+  AST_walker_handle(clone_walker, kind_field_decl, clone_field_decl);
+}
+
+void set_parameter_values(nesc_declaration cdecl, expression args)
+{
+  declaration parm;
+
+  /* We know args is the same length as parameters (earlier error if not) */
+  scan_declaration (parm, cdecl->parameters)
+    {
+      if (is_data_decl(parm))
+       {
+         variable_decl vd = CAST(variable_decl, CAST(data_decl, parm)->decls);
+         cst_kind k = type_real(vd->ddecl->type) ?
+           cst_numerical : cst_address;
+
+         if (!args)
+           {
+             vd->ddecl->value = make_unknown_cst(k == cst_numerical ?
+                                                 cval_unknown_number :
+                                                 cval_unknown_address,
+                                                 vd->ddecl->type);
+             continue;
+           }
+
+         if (!is_type_argument(args) && check_constant_once(args, k))
+           {
+             location l = args->location;
+
+             /* We can assume the type is arithmetic (for now at least)
+                (see declare_template_parameter) */
+             if (!args->cst)
+               {
+                 /* avoid duplicate error messages */
+                 if (args->type != error_type)
+                   error_with_location(l, "component arguments must be constants");
+               }
+             else if (type_integer(vd->ddecl->type))
+               {
+                 if (!constant_integral(args->cst))
+                   error_with_location(l, "integer constant expected");
+                 else if (!cval_inrange(args->cst->cval, vd->ddecl->type))
+                   error_with_location(l, "constant out of range for argument type");
+               }
+             else if (type_floating(vd->ddecl->type))
+               {
+                 if (!constant_float(args->cst))
+                   error_with_location(l, "floating-point constant expected");
+               }
+             else if (type_charstar(vd->ddecl->type))
+               {
+                 /* Check that it's an actual string */
+                 data_declaration sym;
+                 bool ok = FALSE;
+
+                 if (constant_address(args->cst))
+                   {
+                     sym = cval_ddecl(args->cst->cval);
+                     /* We don't want any offset to the string either
+                        (could lift this restriction) */
+                     ok = sym && sym->kind == decl_magic_string &&
+                       cval_knownbool(args->cst->cval);
+                   }
+                 if (!ok)
+                   error_with_location(l, "string argument expected");
+               }
+           }
+
+         vd->ddecl->value = args->cst;
+       }
+      else /* type */
+       {
+         type_parm_decl td = CAST(type_parm_decl, parm);
+
+         if (!args)
+           {
+             td->ddecl->type = error_type;
+             continue;
+           }
+
+         td->ddecl->type = args->type;
+         td->ddecl->initialiser = args;
+       }
+
+      args = CAST(expression, args->next);
+    }
+}
+
+node instantiate_ast_list(region r, node n)
+{
+  AST_walk_list(clone_walker, r, &n);
+  AST_set_parents(n);
+
+  return n;
+}
+
+node instantiate_ast(region r, node n)
+{
+  AST_walk(clone_walker, r, &n);
+  AST_set_parents(n);
+
+  return n;
+}
+
+dd_list instantiate_dd_list(region r, dd_list l)
+{
+  dd_list copy;
+  dd_list_pos scan;
+
+  if (!l)
+    return NULL;
+
+  copy = dd_new_list(r);
+  dd_scan (scan, l)
+    dd_add_last(r, copy, instantiate_ast(r, DD_GET(node, scan)));
+
+  return copy;
+}
+
+void instantiate(nesc_declaration component, expression arglist)
+/* Effects: Actually instantiate an abstract component
+     For modules: copy module's AST, declarations, etc
+     For configurations: make new shallow copies of included abstract
+       components, and copy connection graph (using the new shallow
+       copies) 
+*/
+{
+  region r = parse_region;
+
+  assert(component->kind == l_component && component->original);
+  current.container = component;
+
+  /* We don't copy the component itself as we're handling the specification
+     specially (not copied). So we just copy the parameters and the
+     implementation. */
+
+  set_env_instantiations(component->parameter_env);
+  set_specification_instantiations(component);
+
+  /* A new dummy env for all instantiations in the implementation */
+  current.env = new_environment(r, NULL, TRUE, FALSE);
+  component->impl = CAST(implementation,
+    instantiate_ast_list(r, CAST(node, original_component(component)->impl)));
+}
+
+/* Component stack handling, for error message and loop detection */
+
+struct instance_stack
+{
+  struct instance_stack *next;
+  nesc_declaration component;
+};
+
+static struct instance_stack *stack, *avail;
+
+static struct instance_stack *new_instance_stack(void)
+/* Returns: a new, cleared, instance_stack
+ */
+{
+  struct instance_stack *new;
+
+  if (avail)
+    {
+      new = avail;
+      avail = avail->next;
+      new->next = NULL;
+    }
+  else
+    new = ralloc(permanent, struct instance_stack);
+
+  return new;
+}
+
+static void free_instance_stack(struct instance_stack *is)
+{
+  is->next = avail;
+  is->component = NULL;
+  avail = is;
+}
+
+void push_instance(nesc_declaration component)
+/* Effects: push (concrete) component on the stack and set its full instance
+     name.
+*/
+{
+  struct instance_stack *new = new_instance_stack();
+
+  assert(!component->abstract);
+  if (component->original)
+    {
+      /* Instantiated component names is parent name (currently at the top
+        of the stack) . name-in-configuration (currently in instance_name) */
+      const char *oldname = component->instance_name;
+      const char *parentname = stack->component->instance_name;
+      int namelen = strlen(parentname) + strlen(oldname) + 2;
+      char *newname;
+
+      newname = rstralloc(parse_region, namelen);
+      sprintf(newname, "%s.%s", parentname, oldname);
+      component->instance_name = newname;
+    }
+
+  new->next = stack;
+  stack = new;
+  new->component = component;
+
+  current.container = component;
+}
+
+nesc_declaration abstract_recursion(void)
+/* Returns:  If the instance stack indicates the programmer has
+     created an instantiation loop, i.e., component Y (instance of
+     abstract component X) has caused the instantiation of the top-most
+     component (another instance of X).
+     Return Y if this is the case, NULL if not.
+*/
+{
+  struct instance_stack *i;
+  nesc_declaration component = stack->component;
+
+  /* The case where component is not an instance falls through
+     naturally */
+  component = original_component(component);
+
+  for (i = stack->next; i; i = i->next)
+    {
+      /* If we hit a non-instance component there isn't a loop */
+      if (!i->component->original)
+       return NULL;
+
+      if (original_component(i->component) == component)
+       return i->component;
+    }
+  return NULL;
+}
+
+void pop_instance(void)
+{
+  struct instance_stack *top = stack;
+
+  stack = stack->next;
+  free_instance_stack(top);
+
+  if (stack)
+    current.container = stack->component;
+  else
+    current.container = NULL;
+}
+
+static void check_cg(cgraph connections)
+/* Effects: Checks constants used in the connections graph
+ */
+{
+  ggraph g = cgraph_graph(connections);
+  gnode n;
+
+  graph_scan_nodes (n, g)
+    {
+      endp ep = NODE_GET(endp, n);
+
+      if (ep->args_node)
+       check_generic_arguments(ep->args_node, endpoint_args(ep));
+    }
+}
+
+static bool fold_components(nesc_declaration cdecl, int pass)
+{
+  bool done;
+  declaration spec;
+  dd_list_pos attr;
+
+  if (cdecl->folded == pass)
+    return TRUE;
+  cdecl->folded = pass;
+
+  spec = CAST(component, cdecl->ast)->decls;
+  done = fold_constants_list(CAST(node, spec), pass);
+  if (cdecl->attributes)
+    dd_scan (attr, cdecl->attributes)
+      done = fold_constants_list(DD_GET(node, attr), pass) && done;
+  done = fold_constants_list(CAST(node, cdecl->impl), pass) && done;
+
+  if (cdecl->configuration)
+    {
+      declaration d;
+      configuration c = CAST(configuration, cdecl->impl);
+
+      check_cg(cdecl->connections);
+
+      scan_declaration (d, c->decls)
+       if (is_component_ref(d))
+         {
+           component_ref comp = CAST(component_ref, d);
+
+           set_parameter_values(comp->cdecl, comp->args);
+           done = fold_components(comp->cdecl, pass) && done;
+         }
+    }
+  return done;
+}
+
+void fold_program(nesc_declaration program, nesc_declaration scheduler)
+{
+  int pass = 1;
+  bool done;
+
+  do
+    {
+      done = fold_constants_list(CAST(node, all_cdecls), pass);
+      if (program)
+       done = fold_components(program, pass) && done;
+      if (scheduler)
+       done = fold_components(scheduler, pass) && done;
+      pass++;
+    }
+  while (!done);
+
+  current.container = NULL;
+}
+
+void check_abstract_arguments(const char *kind, data_declaration ddecl,
+                             declaration parms, expression arglist)
+{
+  location loc = ddecl->ast->location;
+  int parmnum = 1;
+
+  while (parms && arglist)
+    {
+      const char *errmsg = NULL;
+
+      if (arglist->type == error_type)
+       ;
+      else if (is_data_decl(parms))
+       {
+         variable_decl vparm = CAST(variable_decl, CAST(data_decl, parms)->decls);
+         type parmtype = vparm->ddecl->type;
+
+         if (type_incomplete(parmtype))
+           errmsg = "type of formal parameter %d is incomplete";
+         else if (is_type_argument(arglist))
+           errmsg = "formal parameter %d must be a value";
+         else 
+           {
+             set_error_location(arglist->location);
+             check_assignment(parmtype, arglist->type, arglist, NULL,
+                              ddecl, parmnum);
+           }
+       }
+      else /* type argument */
+       {
+         type_parm_decl tparm = CAST(type_parm_decl, parms);
+
+         if (!is_type_argument(arglist))
+           errmsg = "formal parameter %d must be a type";
+         else switch (tparm->ddecl->typevar_kind)
+           {
+           case typevar_normal: 
+             /* These tests ensure the type can be used in assignments 
+                and as a function argument. */
+             if (type_array(arglist->type))
+               errmsg = "type parameter cannot be an array type (parameter %d)";
+             else if (type_function(arglist->type))
+               errmsg = "type parameter cannot be a function type (parameter %d)";
+             else if (type_incomplete(arglist->type))
+               errmsg = "type parameter %d is an incomplete type";
+             break;
+           case typevar_integer:
+             if (!type_integer(arglist->type))
+               errmsg = "parameter %d must be an integer type";
+             break;
+           case typevar_number:
+             if (!type_real(arglist->type))
+               errmsg = "parameter %d must be a numerical type";
+             break;
+           default: assert(0); break;
+           }
+       }
+      if (errmsg)
+       error_with_location(loc, errmsg, parmnum);
+      parmnum++;
+      arglist = CAST(expression, arglist->next);
+      parms = CAST(declaration, parms->next);
+    }
+  clear_error_location();
+
+  if (parms)
+    error_with_location(loc, "too few arguments to %s `%s'",
+                       kind, ddecl->name);
+  else if (arglist)
+    error_with_location(loc, "too many arguments to %s `%s'",
+                       kind, ddecl->name);
+}
+
+static nesc_declaration 
+nesc_declaration_copy(region r, nesc_declaration old, expression args,
+                     bool copy_is_abstract, data_declaration ddecl)
+{
+  nesc_declaration copy;
+
+  copy = new_nesc_declaration(r, old->kind, old->name);
+  copy->configuration = old->configuration;
+  copy->doc = old->doc;
+  copy->abstract = copy_is_abstract;
+  copy->original = old;
+
+  /* Copy the parameters into new env, make new top-level env */
+  copy->parameter_env = current.env = new_environment(r, NULL, TRUE, FALSE);
+  copy->env = new_environment(r, copy->parameter_env, TRUE, FALSE);
+  hack_interface = ddecl;
+  current.container = ddecl ? ddecl->container : copy;
+  copy->parameters = instantiate_parameters(r, old->parameters);
+  copy->arguments = args;
+  set_parameter_values(copy, args);
+  copy->attributes = instantiate_dd_list(r, old->attributes);
+
+  current.env = copy->env;
+  //current.container = copy;
+
+  return copy;
+}
+
+nesc_declaration interface_copy(region r, interface_ref iref,
+                               bool copy_is_abstract)
+/* Returns: A copy of abstract interface intf, instantiated with arguments
+     in arglist.
+*/
+{
+  nesc_declaration intf = iref->ddecl->itype, copy;
+  struct semantic_state old = current;
+
+  assert(intf->kind == l_interface);
+
+  copy = nesc_declaration_copy(r, intf, iref->args, copy_is_abstract,
+                              iref->ddecl);
+  hack_required = 1 + iref->ddecl->required;
+  copy->ast = CAST(nesc_decl, instantiate_ast_list(r, CAST(node, intf->ast)));
+  hack_required = 0;
+  hack_interface = NULL;
+  current = old;
+  
+  return copy;
+}
+
+nesc_declaration specification_copy(region r, component_ref cref,
+                                   bool copy_is_abstract)
+/* Returns: A copy of the parameters and specification of the
+     component specified by cref, with arguments specified by cref
+*/
+{
+  component spec;
+  nesc_declaration comp = cref->cdecl, copy;
+  struct semantic_state old = current;
+
+  assert(comp->kind == l_component);
+
+  copy = nesc_declaration_copy(r, comp, cref->args, copy_is_abstract, NULL);
+  copy->instance_name = (cref->word2 ? cref->word2 : cref->word1)->cstring.data;
+  if (!copy_is_abstract)
+    {
+      /* Give it a new name */
+      /* component may itself be a copy of the real original abstract
+        component */
+      nesc_declaration abs_comp = comp->original ? comp->original : comp;
+      char *newname = rstralloc(r, strlen(copy->name) + 20);
+
+      copy->instance_number = abs_comp->instance_count++;
+      sprintf(newname, "%s%s%d", copy->name, get_function_separator(),
+             copy->instance_number);
+      copy->name = newname;
+    }
+
+  copy->ast = comp->ast;
+  clone(r, &copy->ast);
+
+  /* Copy the specification into the copy's env */
+  spec = CAST(component, copy->ast);
+  spec->decls = CAST(declaration,
+                    instantiate_ast_list(r, CAST(node, spec->decls)));
+  current = old;
+
+  /* Give the copy an "empty" specification graph */
+  build_external_graph(r, copy);
+
+  return copy;
+}
+
+static void typevar_attr(nesc_attribute attr, data_declaration ddecl,
+                        int kind)
+{
+  if (ddecl->typevar_kind != typevar_normal)
+    ignored_nesc_attribute(attr);
+  else
+    ddecl->typevar_kind = kind;
+}
+
+static void handle_integer_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  typevar_attr(attr, ddecl, typevar_integer);
+}
+
+static void handle_number_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  typevar_attr(attr, ddecl, typevar_number);
+}
+
+void init_abstract(void)
+{
+  init_clone();
+  define_internal_attribute("integer", NULL, handle_integer_decl, NULL, NULL,
+                           NULL, NULL);
+  define_internal_attribute("number", NULL, handle_number_decl, NULL, NULL,
+                           NULL, NULL);
+}
diff --git a/src/nesc-abstract.h b/src/nesc-abstract.h
new file mode 100644 (file)
index 0000000..4cc6a43
--- /dev/null
@@ -0,0 +1,63 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_ABSTRACT_H
+#define NESC_ABSTRACT_H
+
+void instantiate(nesc_declaration component, expression arglist);
+/* Effects: Actually instantiate an abstract component.
+     For modules: temp noop
+     For configurations: make new shallow copies of included abstract
+       components, and copy connection graph (using the new shallow
+       copies) 
+*/
+
+void push_instance(nesc_declaration component);
+/* Effects: push (concrete) component on the stack and set its full instance
+     name.
+*/
+
+nesc_declaration abstract_recursion(void);
+/* Returns:  If the instance stack indicates the programmer has
+     created an instantiation loop, i.e., component Y (instance of
+     abstract component X) has caused the instantiation of the top-most
+     component (another instance of X).
+     Return Y if this is the case, NULL if not.
+*/
+
+void fold_program(nesc_declaration program, nesc_declaration scheduler);
+
+void pop_instance(void);
+
+void init_abstract(void);
+
+void check_abstract_arguments(const char *kind, data_declaration ddecl,
+                             declaration parms, expression arglist);
+
+nesc_declaration interface_copy(region r, interface_ref iref,
+                               bool copy_is_abstract);
+/* Returns: A copy of abstract interface intf, instantiated with arguments
+     in arglist.
+*/
+
+nesc_declaration specification_copy(region r, component_ref cref,
+                                   bool copy_is_abstract);
+/* Returns: A copy of the parameters and specification of the
+     component specified by cref, with arguments specified by cref
+*/
+
+#endif
diff --git a/src/nesc-atomic.c b/src/nesc-atomic.c
new file mode 100644 (file)
index 0000000..91e9d11
--- /dev/null
@@ -0,0 +1,470 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002-2006 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "AST_walk.h"
+#include "nesc-cg.h"
+#include "constants.h"
+#include "nesc-atomic.h"
+
+static atomic_t aseq(atomic_t a1, atomic_t a2)
+{
+  if (a1 == NOT_ATOMIC || a2 == NOT_ATOMIC)
+    return NOT_ATOMIC;
+  if (a2 == ATOMIC_ANY)
+    return a1;
+  if (a1 == ATOMIC_ANY)
+    return a2;
+  return NOT_ATOMIC;
+}
+
+static atomic_t aalt(atomic_t a1, atomic_t a2)
+{
+  if (a1 == NOT_ATOMIC || a2 == NOT_ATOMIC)
+    return NOT_ATOMIC;
+  if (a1 == ATOMIC_SINGLE || a2 == ATOMIC_SINGLE)
+    return ATOMIC_SINGLE;
+  return ATOMIC_ANY;
+}
+
+static atomic_t amany(atomic_t a)
+{
+  if (a == ATOMIC_SINGLE)
+    return NOT_ATOMIC;
+  else
+    return a;
+}
+
+static atomic_t aaccess(type t)
+{
+  /* Single byte values have atomic read/write */
+  if (type_size_cc(t))
+    {
+      cval tsize = type_size(t);
+
+      if (cval_isinteger(tsize) && cval_uint_value(tsize) == 1)
+       return ATOMIC_SINGLE;
+    }
+  return NOT_ATOMIC;
+}
+
+static atomic_t avar(data_declaration ddecl, context this_use)
+{
+  context bad_contexts;
+
+  if (ddecl->kind != decl_variable)
+    return ATOMIC_ANY;
+
+  /* Special-case locals: we don't set async_access on locals even if their
+     address is taken (see nesc-concurrency.c). So the test below is not
+     reliable. */
+  if (ddecl->islocal)
+    return ddecl->use_summary & c_addressed ? NOT_ATOMIC : ATOMIC_ANY;
+
+  if (!ddecl->async_access)
+    return ATOMIC_ANY;
+
+  /* Figure out dangerous accesses: If there are no writes in async
+     contexts, then reads need not be protected */
+  bad_contexts = c_write;
+  if (ddecl->async_write)
+    bad_contexts |= c_read;
+
+  if (this_use & bad_contexts)
+    return aaccess(ddecl->type);
+  else
+    return ATOMIC_ANY;
+}
+
+/**
+ * This code computes a conservative approximation of statements whose
+ * execution is guaranteed to be atomic, allowing optimisation of
+ * simple atomic statements.
+ *
+ * Currently it assumes that the only memory accesses that are atomic are
+ * single-byte read/writes.  It could be extended with platform-specific
+ * knowledge of larger atomic r/w units. Platform-specific knowledge would
+ * also allow optimisation of statements such as atomic x |= 4 if it is
+ * known that this maps to a single instruction.
+ */
+
+/* An AST walker that isatomics all reachable expressions and statements */
+static AST_walker isatomic_walker;
+
+static bool dirty;
+static cgraph callgraph;
+
+static atomic_t isatomic_stmt(statement stmt);
+
+static atomic_t isatomic_children(void *n)
+{
+  atomic_t a = ATOMIC_ANY;
+
+  AST_walk_children(isatomic_walker, &a, CAST(node, n));
+
+  return a;
+}
+
+static atomic_t acall1(data_declaration ddecl)
+{
+  if (ddecl->definition)
+    return CAST(function_decl, ddecl->definition)->stmt->isatomic;
+  else
+    return NOT_ATOMIC;
+}
+
+/* Return atomicness of possible targets of a command or event.
+   This could be more accurate if we considered which things are
+   dispatched vs multiply wired. But those cases seem unlikely to be
+   atomic, so... */
+static atomic_t acall_connected(data_declaration ddecl)
+{
+  gedge called;
+  atomic_t a = ATOMIC_ANY;
+
+  /* The nodes connected from a command or event node include all the
+     possible targets of that command or event. They also include any
+     things called or used from any default handler for the command or
+     event */
+  graph_scan_out (called, fn_lookup(callgraph, ddecl))
+    if (EDGE_GET(use, called)->c & c_fncall)
+      a = aseq(a, acall1(NODE_GET(endp, graph_edge_to(called))->function));
+
+  return a;
+}
+
+/* Return atomicness of calls to 'ddecl' */
+static atomic_t acall(data_declaration ddecl)
+{
+  atomic_t a;
+
+  if (ddecl->kind != decl_function)
+    return NOT_ATOMIC;
+
+  if ((ddecl->ftype == function_command || ddecl->ftype == function_event) &&
+      !ddecl->defined)
+    {
+      a = acall_connected(ddecl);
+      if (!ddecl->definition || ddecl->suppress_definition) /* no default */
+       return a;
+    }
+  else
+    a = ATOMIC_ANY;
+
+  return aalt(a, acall1(ddecl));
+}
+
+static atomic_t isatomic_expr(expression expr)
+{
+  atomic_t a = NOT_ATOMIC; /* Default to not-atomic */
+
+  if (!expr)
+    return ATOMIC_ANY;
+
+  /* A read of an array-type expression actually takes the address
+     of the container */
+  if ((expr->type && type_array(expr->type) && expr->static_address) ||
+      expr->cst)
+    a = ATOMIC_ANY;
+  else switch (expr->kind)
+    {
+    case kind_realpart: case kind_imagpart: case kind_unary_minus:
+    case kind_unary_plus: case kind_conjugate: case kind_bitnot:
+    case kind_not: case kind_plus: case kind_minus: case kind_times:
+    case kind_divide: case kind_modulo: case kind_lshift: case kind_rshift:
+    case kind_leq: case kind_geq: case kind_lt: case kind_gt: case kind_eq:
+    case kind_ne: case kind_bitand: case kind_bitor: case kind_bitxor:
+    case kind_andand: case kind_oror: case kind_assign: case kind_comma:
+    case kind_extension_expr: case kind_compound_expr: case kind_cast:
+    case kind_generic_call:
+      a = isatomic_children(expr);
+      break;
+
+    case kind_identifier:
+      a = avar(CAST(identifier, expr)->ddecl, expr->context);
+      break;
+
+    case kind_field_ref: {
+      field_ref fref = CAST(field_ref, expr);
+
+      a = isatomic_expr(fref->arg1);
+      /* Bit field r/w's are not atomic. Could try and be more
+        optimistic (e.g., non-byte-boundary crossing bitfield reads
+        are presumably atomic) */
+      if (!cval_istop(fref->fdecl->bitwidth))
+       a = NOT_ATOMIC;
+      break;
+    }
+    case kind_interface_deref:
+      a = ATOMIC_ANY;
+      break;
+
+    case kind_conditional: {
+      conditional ce = CAST(conditional, expr);
+      atomic_t ac, a1, a2;
+
+      ac = isatomic_expr(ce->condition);
+      a1 = isatomic_expr(ce->arg1);
+      a2 = isatomic_expr(ce->arg2);
+
+      if (ce->condition->cst)
+       {
+         if (definite_zero(ce->condition))
+           a = a2;
+         else
+           a = a1;
+       }
+      else
+       a = aseq(ac, aalt(a1, a2));
+      break;
+    }
+       
+    case kind_array_ref: {
+      array_ref are = CAST(array_ref, expr);
+      atomic_t a1, a2;
+
+      a1 = isatomic_expr(are->arg1);
+      a2 = isatomic_expr(are->arg2);
+      a = aseq(a1, aseq(a2, aaccess(are->type)));
+      break;
+    }
+    case kind_dereference:
+      a = aseq(isatomic_children(expr), aaccess(expr->type));
+      break;
+
+    case kind_address_of: {
+      expression arg = CAST(unary, expr)->arg1;
+
+      /* Some heuristics for atomicity of & */
+      while (is_field_ref(arg) || is_extension_expr(arg))
+       arg = CAST(unary, arg)->arg1;
+
+      if (is_dereference(arg))
+       a = isatomic_expr(CAST(dereference, arg)->arg1);
+      else if (is_identifier(arg))
+       a = ATOMIC_ANY;
+      else
+       a = isatomic_expr(arg);
+      break;
+    }
+
+    case kind_preincrement: case kind_postincrement:
+    case kind_predecrement: case kind_postdecrement: {
+      atomic_t a1 = isatomic_expr(CAST(increment, expr)->arg1);
+
+      a = aseq(a1, a1);
+      break;
+    }
+    case kind_plus_assign: case kind_minus_assign: 
+    case kind_times_assign: case kind_divide_assign: case kind_modulo_assign:
+    case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign:
+    case kind_lshift_assign: case kind_rshift_assign: {
+      assign aexpr = CAST(assignment, expr);
+      atomic_t a1, a2;
+
+      a1 = isatomic_expr(aexpr->arg1);
+      a2 = isatomic_expr(aexpr->arg2);
+      a = aseq(a2, aseq(a1, a1));
+      break;
+    }
+    case kind_function_call: {
+      function_call fce = CAST(function_call, expr);
+      expression called = fce->arg1;
+
+      if (is_generic_call(called))
+       called = CAST(generic_call, called)->arg1;
+
+      if (is_identifier(called))
+       a = acall(CAST(identifier, called)->ddecl);
+      else if (is_interface_deref(called))
+       a = acall(CAST(interface_deref, called)->ddecl);
+      else
+       a = NOT_ATOMIC;
+
+      a = aseq(a, isatomic_children(expr));
+      break;
+    }
+    default:
+      /* Just check children. Current statement not atomic. */
+      isatomic_children(expr);
+      break;
+    }
+
+  if (expr->isatomic != a)
+    {
+      expr->isatomic = a;
+      dirty = TRUE;
+    }
+
+  return a;
+}
+
+static atomic_t isatomic_stmt(statement stmt)
+{
+  atomic_t a = NOT_ATOMIC; /* Default to not-atomic */
+
+  if (!stmt)
+    return ATOMIC_ANY;
+
+  switch (stmt->kind)
+    {
+    case kind_compound_stmt:
+    case kind_labeled_stmt:
+    case kind_expression_stmt:
+    case kind_atomic_stmt:
+    case kind_break_stmt:
+    case kind_continue_stmt:
+    case kind_goto_stmt:
+    case kind_computed_goto_stmt:
+    case kind_empty_stmt:
+    case kind_return_stmt:
+      a = isatomic_children(stmt);
+      break;
+
+    case kind_if_stmt: {
+      if_stmt is = CAST(if_stmt, stmt);
+      atomic_t ac, a1, a2;
+
+      ac = isatomic_expr(is->condition);
+      a1 = isatomic_stmt(is->stmt1);
+      a2 = isatomic_stmt(is->stmt2);
+
+      if (is->condition->cst)
+       {
+         if (definite_zero(is->condition))
+           a = a2;
+         else
+           a = a1;
+       }
+      else
+       a = aseq(ac, aalt(a1, a2));
+      break;
+    }
+    case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: {
+      conditional_stmt cs = CAST(conditional_stmt, stmt);
+      atomic_t ac, as;
+
+      ac = isatomic_expr(cs->condition);
+      as = isatomic_stmt(cs->stmt);
+
+      if (cs->condition->cst && stmt->kind == kind_while_stmt &&
+         definite_zero(cs->condition))
+       a = ATOMIC_ANY;
+      else
+       a = amany(aseq(ac, as));
+      break;
+    }
+    case kind_for_stmt: {
+      for_stmt fs = CAST(for_stmt, stmt);
+      atomic_t a1, a2, a3, as;
+
+      a1 = isatomic_expr(fs->arg1);
+      a2 = isatomic_expr(fs->arg2);
+      a3 = isatomic_expr(fs->arg3);
+      as = isatomic_stmt(fs->stmt);
+
+      if (fs->arg2 && fs->arg2->cst && definite_zero(fs->arg2))
+       a = ATOMIC_ANY;
+      else
+       a = amany(aseq(a2, aseq(as, a3)));
+
+      a = aseq(a1, a);
+      break;
+    }
+
+    default:
+      /* Just check children. Current statement not atomic. */
+      isatomic_children(stmt);
+      break;
+    }
+
+  if (stmt->isatomic != a)
+    {
+      stmt->isatomic = a;
+      dirty = TRUE;
+    }
+
+  return a;
+}
+
+static AST_walker_result isatomic_ast_expr(AST_walker spec, void *data,
+                                          expression *e)
+{
+  atomic_t *a = data;
+  *a = aseq(*a, isatomic_expr(*e));
+  return aw_done;
+}
+
+static AST_walker_result isatomic_ast_stmt(AST_walker spec, void *data,
+                                          statement *s)
+{
+  atomic_t *a = data;
+  *a = aseq(*a, isatomic_stmt(*s));
+  return aw_done;
+}
+
+static AST_walker_result isatomic_ast_vdecl(AST_walker spec, void *data,
+                                           variable_decl *vdp)
+{
+  variable_decl vd = *vdp;
+  atomic_t *a = data, ainit;
+
+  if (vd->arg1 && vd->ddecl->islocal)
+    {
+      ainit = isatomic_expr(vd->arg1);
+      *a = aseq(*a, aseq(ainit, avar(vd->ddecl, c_write)));
+    }
+  return aw_done;
+}
+
+void isatomic(cgraph g)
+{
+  ggraph cg = cgraph_graph(g);
+  gnode n;
+  
+  if (!nesc_optimise_atomic)
+    return;
+
+  callgraph = g;
+
+  /* Fixed point search for function-atomicity */
+  graph_scan_nodes (n, cg)
+    {
+      data_declaration fn = NODE_GET(endp, n)->function;
+      if (fn->definition)
+       CAST(function_decl, fn->definition)->stmt->isatomic = ATOMIC_ANY;
+    }
+  do
+    {
+      dirty = FALSE;
+      graph_scan_nodes (n, cg)
+       {
+         data_declaration fn = NODE_GET(endp, n)->function;
+         if (fn->definition)
+           isatomic_stmt(CAST(function_decl, fn->definition)->stmt);
+       }
+    }
+  while (dirty);
+}
+
+void init_isatomic(void)
+{
+  isatomic_walker = new_AST_walker(permanent);
+  AST_walker_handle(isatomic_walker, kind_expression, isatomic_ast_expr);
+  AST_walker_handle(isatomic_walker, kind_statement, isatomic_ast_stmt);
+  AST_walker_handle(isatomic_walker, kind_variable_decl, isatomic_ast_vdecl);
+}
diff --git a/src/nesc-atomic.h b/src/nesc-atomic.h
new file mode 100644 (file)
index 0000000..6465467
--- /dev/null
@@ -0,0 +1,26 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2006 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef NESC_ATOMIC_H
+#define NESC_ATOMIC_H
+
+/* atomic_t is defined in AST.h */
+
+void isatomic(cgraph callgraph);
+void init_isatomic(void);
+
+#endif
diff --git a/src/nesc-attributes.c b/src/nesc-attributes.c
new file mode 100644 (file)
index 0000000..b95c8f9
--- /dev/null
@@ -0,0 +1,252 @@
+#include "parser.h"
+#include "init.h"
+#include "c-parse.h"
+#include "semantics.h"
+#include "nesc-attributes.h"
+#include "env.h"
+#include "edit.h"
+#include "attributes.h"
+
+typedef struct internal_attribute
+{
+  const char *name;
+
+  void (*handle_ndecl)(nesc_attribute attr,
+                      nesc_declaration ndecl);
+  void (*handle_decl)(nesc_attribute attr,
+                     data_declaration ddecl);
+  void (*handle_tag)(nesc_attribute attr,
+                    tag_declaration tdecl);
+  void (*handle_field)(nesc_attribute attr,
+                      field_declaration fdecl);
+  void (*handle_type)(nesc_attribute attr,
+                     type *t);
+} *iattr;
+
+static env internal_attributes;
+
+/* Return a reference to attribute tag 
+   (different from xref_tag because there is no implicit declaration) */
+tag_ref lookup_attribute(word tag)
+{
+  tag_ref tref = newkind_tag_ref(parse_region, kind_attribute_ref,
+                                tag->location, tag, NULL, NULL, FALSE);
+  tag_declaration tdecl = lookup_tag(tref, FALSE);
+
+  if (!tdecl)
+    error_with_location(tag->location, "unknown attribute `%s'",
+                       tag->cstring.data);
+  tref->tdecl = tdecl;
+
+  return tref;
+}
+
+nesc_attribute start_attribute_use(word name)
+{
+  /* Prepare to read an initialiser for the attribute definition 
+     specified by name */
+  nesc_attribute attr = new_nesc_attribute(parse_region, name->location, name,
+                                          NULL);
+  tag_ref aref = lookup_attribute(name); /* XXX: aref leaks */
+  type atype = error_type;
+
+  /* Create new environment so that we can track whether this is a
+     deputy scope or not. Using an environment makes it easy to
+     recover parsing errors: we just call poplevel in the appropriate
+     error production (see nattrib rules in c-parse.y). */
+  pushlevel(FALSE);
+
+  attr->tdecl = aref->tdecl;
+  if (aref->tdecl)
+    {
+      atype = make_tagged_type(aref->tdecl);
+      if (aref->tdecl->deputy_scope)
+       current.env->deputy_scope = TRUE;
+    }
+
+  start_init(NULL, attr);
+  really_start_incremental_init(atype);
+
+  return attr;
+}
+
+attribute finish_attribute_use(nesc_attribute attr, expression init)
+{
+  attr->arg1 = make_init_list(attr->word1->location, init); 
+  finish_init(); 
+  poplevel();
+
+  return CAST(attribute, attr);
+}
+
+void define_internal_attribute(const char *name,
+                              void (*handle_ndecl)(nesc_attribute attr,
+                                                   nesc_declaration ndecl),
+                              void (*handle_decl)(nesc_attribute attr,
+                                                  data_declaration ddecl),
+                              void (*handle_tag)(nesc_attribute attr,
+                                                 tag_declaration tdecl),
+                              void (*handle_field)(nesc_attribute attr,
+                                                   field_declaration fdecl),
+                              void (*handle_type)(nesc_attribute attr,
+                                                  type *t),
+                              ...)
+{
+  va_list args;
+  field_declaration *next_field;
+  word attr_word;
+  type_element attr_tag;
+  tag_declaration attr_decl;
+  struct internal_attribute *iattr;
+
+  /* Build and declare the attribute */
+  current.env = global_env;
+  attr_word = build_word(parse_region, name);
+  attr_tag = start_struct(dummy_location, kind_attribute_ref, attr_word);
+  attr_decl = CAST(tag_ref, attr_tag)->tdecl;
+  attr_decl->fields = new_env(parse_region, NULL);
+  next_field = &attr_decl->fieldlist;
+
+  /* Fields. A fieldname, fieldtype argument list, terminated with a
+     null fieldname. We build a semi-fake struct for these.
+  */
+  va_start(args, handle_type);
+  for (;;)
+    {
+      const char *field_name = va_arg(args, const char *);
+      field_declaration field;
+
+      if (!field_name)
+       break;
+      field = ralloc(parse_region, struct field_declaration);
+      field->containing_tag = attr_decl;
+      *next_field = field;
+      next_field = &field->next;
+      field->name = field_name;
+      field->type = va_arg(args, type);
+      field->bitwidth = field->offset = cval_unknown_number;
+
+      env_add(attr_decl->fields, field_name, field);
+    }
+  va_end(args);
+
+  /* Add to internal attributes table */
+  iattr = ralloc(permanent, struct internal_attribute);
+  iattr->name = name;
+  iattr->handle_ndecl = handle_ndecl;
+  iattr->handle_decl = handle_decl;
+  iattr->handle_tag = handle_tag;
+  iattr->handle_field = handle_field;
+  iattr->handle_type = handle_type;
+  env_add(internal_attributes, name, iattr);
+}
+
+ivalue lookup_attribute_field(nesc_attribute attr, const char *name)
+/* Returns: The initialiser for field name in attr, or NULL if it's not
+     found 
+*/
+{
+  ivalue init = attr->arg1->ivalue;
+  ivalue_field ifields;
+
+  assert(init->kind == iv_structured);
+  for (ifields = init->u.structured; ifields; ifields = ifields->next)
+    if (!strcmp(ifields->field->name, name))
+      return ifields->value;
+
+  return NULL;
+}
+
+static iattr internal_lookup(nesc_attribute attr)
+{
+  return env_lookup(internal_attributes, attr->word1->cstring.data, TRUE);
+}
+
+static void save_user_attribute(nesc_attribute attr, dd_list *alist)
+{
+  if (!*alist)
+    *alist = dd_new_list(parse_region);
+  dd_add_last(parse_region, *alist, attr);
+}
+
+void handle_nesc_type_attribute(nesc_attribute attr, type *t)
+{
+  iattr handler = internal_lookup(attr);
+
+  if (handler)
+    {
+      if (handler->handle_type)
+       handler->handle_type(attr, t);
+      else
+       ignored_nesc_attribute(attr);
+    }
+  /* In the future, we might want to record the attribute on the type,
+     and support dumping this information in nesc-dump.c. For now,
+     though, attributes on types are only useful if they are @macro()
+     attributes */
+}
+
+void handle_nesc_decl_attribute(nesc_attribute attr, data_declaration ddecl)
+{
+  iattr handler = internal_lookup(attr);
+
+  if (handler)
+    {
+      if (handler->handle_decl)
+       handler->handle_decl(attr, ddecl);
+      else
+       ignored_nesc_attribute(attr);
+    }
+  else
+    save_user_attribute(attr, &ddecl->attributes);
+}
+
+void handle_nesc_field_attribute(nesc_attribute attr, field_declaration fdecl)
+{
+  iattr handler = internal_lookup(attr);
+
+  if (handler)
+    {
+      if (handler->handle_field)
+       handler->handle_field(attr, fdecl);
+      else
+       ignored_nesc_attribute(attr);
+    }
+  else
+    save_user_attribute(attr, &fdecl->attributes);
+}
+
+void handle_nesc_tag_attribute(nesc_attribute attr, tag_declaration tdecl)
+{
+  iattr handler = internal_lookup(attr);
+
+  if (handler)
+    {
+      if (handler->handle_tag)
+       handler->handle_tag(attr, tdecl);
+      else
+       ignored_nesc_attribute(attr);
+    }
+  else
+  save_user_attribute(attr, &tdecl->attributes);
+}
+
+void handle_nesc_nescdecl_attribute(nesc_attribute attr, nesc_declaration ndecl)
+{
+  iattr handler = internal_lookup(attr);
+
+  if (handler)
+    {
+      if (handler->handle_ndecl)
+       handler->handle_ndecl(attr, ndecl);
+      else
+       ignored_nesc_attribute(attr);
+    }
+  else
+    save_user_attribute(attr, &ndecl->attributes);
+}
+
+void init_nesc_attributes(void)
+{
+  internal_attributes = new_env(permanent, NULL);
+}
diff --git a/src/nesc-attributes.h b/src/nesc-attributes.h
new file mode 100644 (file)
index 0000000..d1d3074
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef NESC_ATTIBUTES_H
+#define NESC_ATTIBUTES_H
+
+void init_nesc_attributes(void);
+
+nesc_attribute start_attribute_use(word name);
+attribute finish_attribute_use(nesc_attribute attr, expression init);
+
+void define_internal_attribute(const char *name,
+                              void (*handle_ndecl)(nesc_attribute attr,
+                                                   nesc_declaration ndecl),
+                              void (*handle_decl)(nesc_attribute attr,
+                                                   data_declaration ddecl),
+                              void (*handle_tag)(nesc_attribute attr,
+                                                 tag_declaration tdecl),
+                              void (*handle_field)(nesc_attribute attr,
+                                                   field_declaration fdecl),
+                              void (*handle_type)(nesc_attribute attr,
+                                                  type *t),
+                              ...);
+/* Effects: Declare an internal (compiler) @-style attribute called 'name',
+     handled by the handle functions. Functions can be NULL if the
+     attribute cannot be used on that kind of entity.     
+     Arguments to the attribute are specified by an
+       fieldname, fieldtype argument list
+     terminated with a null fieldname.
+     Example: the @integer() attribute is declared with
+       define_internal_attribute("integer", handle_integer_attribute, NULL);
+*/
+
+ivalue lookup_attribute_field(nesc_attribute attr, const char *name);
+/* Returns: The initialiser for field name in attr, or NULL if it's not
+     found 
+*/
+
+void handle_nesc_type_attribute(nesc_attribute attr, type *t);
+void handle_nesc_decl_attribute(nesc_attribute attr, data_declaration ddecl);
+void handle_nesc_field_attribute(nesc_attribute attr, field_declaration fdecl);
+void handle_nesc_tag_attribute(nesc_attribute attr, tag_declaration tdecl);
+void handle_nesc_nescdecl_attribute(nesc_attribute attr, nesc_declaration ndecl);
+
+#endif
diff --git a/src/nesc-c.c b/src/nesc-c.c
new file mode 100644 (file)
index 0000000..b039de2
--- /dev/null
@@ -0,0 +1,36 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-c.h"
+#include "nesc-paths.h"
+#include "nesc-semantics.h"
+#include "c-parse.h"
+#include "nesc-cpp.h"
+
+declaration all_cdecls;
+
+void add_cdecls(declaration cdecls)
+{
+  all_cdecls = declaration_chain(all_cdecls, CAST(declaration, cdecls));
+}
+
+void load_c(location l, const char *name, bool name_is_path)
+{
+  node cdecls = compile(l, NULL, name, name_is_path);
+  add_cdecls(CAST(declaration, cdecls));
+}
diff --git a/src/nesc-c.h b/src/nesc-c.h
new file mode 100644 (file)
index 0000000..7085926
--- /dev/null
@@ -0,0 +1,26 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_C_H
+#define NESC_C_H
+
+extern declaration all_cdecls;
+
+void load_c(location l, const char *name, bool name_is_path);
+void add_cdecls(declaration cdecls);
+
+#endif
diff --git a/src/nesc-cg.c b/src/nesc-cg.c
new file mode 100644 (file)
index 0000000..b793051
--- /dev/null
@@ -0,0 +1,92 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* A connection graph */
+#include "parser.h"
+#include "nesc-cg.h"
+#include "utils.h"
+
+struct cgraph
+{
+  ggraph sameregion g;
+  dhash_table sameregion ep_table;
+};
+
+typedef struct ep_table_entry
+{
+  struct endp ep; /* ep.function is the key */
+  gnode n;
+} *ep_table_entry;
+
+static int ep_compare(void *e1, void *e2)
+{
+  ep_table_entry ep1 = e1, ep2 = e2;
+
+  return ep1->ep.function == ep2->ep.function &&
+    ep1->ep.interface == ep2->ep.interface &&
+    ep1->ep.args_node == ep2->ep.args_node;
+}
+
+static unsigned long ep_hash(void *e)
+{
+  ep_table_entry ep = e;
+
+  return hash_ptr(ep->ep.interface) ^ hash_ptr(ep->ep.function) ^ hash_ptr(ep->ep.args_node);
+}
+
+cgraph new_cgraph(region r)
+{
+  cgraph cg = ralloc(r, struct cgraph);
+
+  cg->g = new_graph(r);
+  cg->ep_table = new_dhash_table(r, 64, ep_compare, ep_hash);
+
+  return cg;
+}
+
+gnode endpoint_lookup(cgraph cg, endp ep)
+{
+  ep_table_entry gep;
+
+  gep = dhlookup(cg->ep_table, ep);
+
+  if (gep)
+    return gep->n;
+
+  gep = ralloc(regionof(cg), struct ep_table_entry);
+  gep->ep = *ep;
+
+  dhadd(cg->ep_table, gep);
+  return gep->n = graph_add_node(cg->g, &gep->ep);
+}
+
+gnode fn_lookup(cgraph cg, data_declaration fndecl)
+{
+  struct endp ep;
+
+  ep.component = NULL;
+  ep.interface = fndecl->interface;
+  ep.function = fndecl;
+  ep.args_node = NULL;
+  return endpoint_lookup(cg, &ep);
+}
+
+ggraph cgraph_graph(cgraph cg)
+{
+  return cg->g;
+}
+
diff --git a/src/nesc-cg.h b/src/nesc-cg.h
new file mode 100644 (file)
index 0000000..8906ccd
--- /dev/null
@@ -0,0 +1,46 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_CG_H
+#define NESC_CG_H
+
+/* A connection graph */
+
+struct endp
+{
+  data_declaration component, interface, function;
+
+  /* args_node is the list of args for the interface if not NULL.
+     If no errors have been reported, then
+       constant_integral(e->cst) || constant_unknown(e->cst)
+     for all expressions e in the list
+  */
+  expression args_node; 
+};
+
+typedef struct endp *endp;
+
+typedef struct cgraph *cgraph;
+
+cgraph new_cgraph(region r);
+
+gnode endpoint_lookup(cgraph ch, endp ep);
+gnode fn_lookup(cgraph cg, data_declaration fndecl);
+
+ggraph cgraph_graph(cgraph cg);
+
+#endif
diff --git a/src/nesc-compile b/src/nesc-compile
new file mode 100755 (executable)
index 0000000..b02b5ba
--- /dev/null
@@ -0,0 +1,206 @@
+#!/usr/bin/perl
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+use File::Basename;
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+    $_ = $ARGV[$i];
+
+    if (/^-_ASM$/) {
+       # magic marker for assembler options
+       $for_assembler = 1;
+    }
+    elsif ($for_assembler) {
+       push @gcc_args, "-Wa,$_";
+    }
+    elsif (/^-/) {
+       if (/^-fsyntax-only$/) {
+           $nocompile = 1;
+       }
+
+       if (/^-_?fnesc-conly$/) {
+           $conly = 1;
+       }
+
+       if (/^-[_WwvpfmD]/ || /^-pedantic$/ || /^-ansi$/) {
+           push @nesc_args, $_ unless /^-_?fnesc-.*cfile=/;
+           $verbose = 1 if /^-v/;
+       }
+
+       if (/^-I/) {
+           ($i, $idir) = &extractarg($i);
+           push @nesc_args, "-I$idir";
+       }
+       elsif (/^-o/) {
+           ($i, $objtarget) = &extractarg($i);
+       }
+       elsif (/^--param$/) {
+           ($i, $param) = &nextarg($i);
+           push @gcc_args, "--param";
+           push @gcc_args, $param;
+       }
+       elsif (/^-S$/) {
+           $asmonly = 1;
+       }
+       elsif (/^-_?fnesc-/) {
+           if (/^-_?fnesc-cfile=(.*)$/) {
+               $ctarget = $1;
+           }
+           if (/^-_?fnesc-tmpcfile=(.*)$/) {
+               $ctarget = $1;
+               $delcfile = 1;
+           }
+           if (/^-_?fnesc-gcc=(.*)$/) {
+               $gcc = $1;
+           }
+            if (/^-_?fnesc-deputy$/) {
+                $deputy = 1;
+            }
+            if (/^-_?fnesc-deputy-args=(.*)$/) {
+                @deputy_args = split(" ", $1);
+            }
+       }
+       elsif (!(/^-D/)) {
+           if (!(/^-_?W(no-)?nesc/)) {
+               push @gcc_args, $_;
+           }
+       }
+    }
+    else {
+       if ($source ne "") {
+           printf STDERR "two source files specified ($source and $_)\n";
+           exit 2;
+       }
+       $source = $_;
+    }
+}
+
+if ($source eq "") {
+    printf STDERR "no source file specified\n";
+    exit 2;
+}
+
+
+if ($ctarget eq "") {
+    if ($conly) {
+       $ctarget = $source;
+       $ctarget =~ s/\.nc$/.c/;
+    }
+    elsif ($ENV{TMP}) {
+       $ctarget = "$ENV{TMP}/nesc.$$.c";
+    }
+    else {
+       $ctarget = "/tmp/nesc.$$.c";
+    }
+    $delcfile = 1;
+}
+
+if ($objtarget eq "") {
+    $objtarget = $source;
+    $objtarget =~ s/\.nc$/.o/ unless $asmonly;
+    $objtarget =~ s/\.nc$/.s/ if $asmonly;
+}
+
+# Deputy annotations
+if($deputy) {
+    unshift @nesc_args, "-fnesc-include=deputy_stage1";
+    unshift @nesc_args, "-fnesc-genprefix=#include \"$ENV{NCDIR}/deputy_stage2.h\"";
+}
+else {
+    unshift @nesc_args, "-fnesc-include=deputy_nodeputy";
+}
+
+push @nesc_args, $source;
+push @nesc_args, "-o";
+if ($nocompile && !$conly) {
+    push @nesc_args, "/dev/null";
+} else {
+    push @nesc_args, $ctarget;
+}
+
+# Check for gcc 4.0.x, which don't tell us about the __STDC__ #define
+unshift @nesc_args, "-D__STDC__" if isgcc40($gcc);
+
+unshift @nesc_args, "nesc1";
+
+&vsystem(@nesc_args);
+if ($? != 0) {
+    unlink $ctarget;
+    exit 2;
+}
+exit 0 if $nocompile || $conly;
+
+if($deputy) {
+    push @deputy_args, "--gcc=$gcc";
+    push @gcc_args, @deputy_args;
+    $gcc = "deputy";
+}
+
+push @gcc_args, "-o";
+push @gcc_args, $objtarget;
+push @gcc_args, "-S" if $asmonly;
+push @gcc_args, "-c" unless $asmonly;
+push @gcc_args, "-fdollars-in-identifiers";
+push @gcc_args, $ctarget;
+unshift @gcc_args, "-B$ENV{NCDIR}";
+unshift @gcc_args, $gcc;
+&vsystem(@gcc_args);
+unlink $ctarget if $delcfile;
+
+exit 2 if $?;
+exit 0;
+
+sub vsystem() {
+    print STDERR join(" ", @_), "\n" if $verbose;
+    system @_;
+}
+
+sub extractarg {
+    my ($i) = @_;
+
+    if (length($ARGV[$i]) == 2) {
+       return &nextarg($i);
+    }
+    else {
+       $arg = substr($ARGV[$i], 2);
+       return ($i, $arg);
+    }
+}
+
+sub nextarg {
+    my ($i) = @_;
+
+    if ($i < $#ARGV) {
+       $arg = $ARGV[++$i];
+    }
+    else {
+       printf STDERR "missing argument to $ARGV[$i]\n";
+       exit 2;
+    }
+    return ($i, $arg);
+}
+
+sub isgcc40 {
+    my ($gcc) = @_;
+
+    die "gcc $gcc fails" unless open(GCCV, "$gcc -v 2>&1|");
+    while (<GCCV>) {
+       return 1 if /^gcc version 4\.0/;
+    }
+    return 0;
+}
diff --git a/src/nesc-component.c b/src/nesc-component.c
new file mode 100644 (file)
index 0000000..b991342
--- /dev/null
@@ -0,0 +1,306 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+#include "nesc-interface.h"
+#include "nesc-configuration.h"
+#include "nesc-module.h"
+#include "nesc-decls.h"
+#include "nesc-paths.h"
+#include "nesc-env.h"
+#include "nesc-cg.h"
+#include "semantics.h"
+#include "c-parse.h"
+#include "edit.h"
+#include "nesc-abstract.h"
+#include "attributes.h"
+
+bool generic_used;
+
+void interface_scan(data_declaration iref, env_scanner *scan)
+{
+  env_scan(iref->functions->id_env, scan);
+}
+
+data_declaration interface_lookup(data_declaration iref, const char *name)
+{
+  return env_lookup(iref->functions->id_env, name, FALSE);
+}
+
+void component_spec_iterate(nesc_declaration c,
+                           void (*iterator)(data_declaration fndecl,
+                                            void *data),
+                           void *data,
+                           bool interfaces)
+{
+  const char *ifname;
+  void *ifentry;
+  env_scanner scanifs;
+
+  env_scan(c->env->id_env, &scanifs);
+  while (env_next(&scanifs, &ifname, &ifentry))
+    {
+      data_declaration idecl = ifentry;
+
+      if (!(idecl->kind == decl_interface_ref ||
+           idecl->kind == decl_function))
+       continue;
+
+      if (idecl->kind != decl_interface_ref || interfaces)
+       iterator(idecl, data);
+
+      if (idecl->kind == decl_interface_ref)
+       {
+         env_scanner scanfns;
+         const char *fnname;
+         void *fnentry;
+
+         interface_scan(idecl, &scanfns);
+         while (env_next(&scanfns, &fnname, &fnentry))
+           iterator(fnentry, data);
+       }
+    }
+}
+
+void component_functions_iterate(nesc_declaration c,
+                                void (*iterator)(data_declaration fndecl,
+                                                 void *data),
+                                void *data)
+{
+  component_spec_iterate(c, iterator, data, FALSE);
+}
+
+static typelist make_gparm_typelist(declaration gparms)
+{
+  declaration gparm;
+  typelist gtypes = new_typelist(parse_region);
+
+  scan_declaration (gparm, gparms)
+    if (is_data_decl(gparm))
+      {
+       data_decl gd = CAST(data_decl, gparm);
+       variable_decl gv = CAST(variable_decl, gd->decls);
+
+       typelist_append(gtypes, gv->ddecl->type);
+      }
+
+  return gtypes;
+}
+
+void copy_interface_functions(region r, nesc_declaration container,
+                             data_declaration iref, environment fns)
+{
+  environment icopy = new_environment(r, NULL, TRUE, FALSE);
+  env_scanner scanif;
+  const char *fnname;
+  void *fnentry;
+
+  env_scan(fns->id_env, &scanif);
+  while (env_next(&scanif, &fnname, &fnentry))
+    {
+      data_declaration fndecl = fnentry, fncopy;
+
+      /* Strings acquire a magic_string decl which we don't care about
+        legal example: 
+         command int (*init())[sizeof "aa"];
+      */
+      if (fndecl->kind == decl_magic_string)
+       continue;
+
+      fncopy = declare(icopy, fndecl, FALSE);
+      fncopy->fn_uses = NULL;
+      fncopy->nuses = NULL;
+      fncopy->instanceof = fndecl;
+      fncopy->container = container;
+      fncopy->interface = iref;
+      /* required events and provided commands are defined */
+      fncopy->defined = (fncopy->ftype == function_command) ^ iref->required;
+    }
+
+  iref->functions = icopy;
+}
+
+void set_interface_functions_gparms(environment fns, typelist gparms)
+{
+  env_scanner scanif;
+  const char *fnname;
+  void *fnentry;
+
+  env_scan(fns->id_env, &scanif);
+  while (env_next(&scanif, &fnname, &fnentry))
+    {
+      data_declaration fndecl = fnentry;
+
+      /* Push generic args onto fn type and decl */
+      fndecl->gparms = gparms;
+      fndecl->type = make_generic_type(fndecl->type, gparms);
+    }
+}
+
+void declare_interface_ref(interface_ref iref, declaration gparms,
+                          environment env, attribute attribs)
+{
+  const char *iname = (iref->word2 ? iref->word2 : iref->word1)->cstring.data;
+  nesc_declaration idecl = 
+    require(l_interface, iref->location, iref->word1->cstring.data);
+  struct data_declaration tempdecl;
+  data_declaration old_decl, ddecl;
+
+  init_data_declaration(&tempdecl, CAST(declaration, iref), iname, void_type);
+  tempdecl.kind = decl_interface_ref;
+  tempdecl.type = NULL;
+  tempdecl.itype = idecl;
+  tempdecl.container = current.container;
+  tempdecl.required = current.spec_section == spec_uses;
+  tempdecl.gparms = gparms ? make_gparm_typelist(gparms) : NULL;
+
+  handle_decl_attributes(attribs, &tempdecl);
+
+  old_decl = env_lookup(env->id_env, iname, TRUE);
+  if (old_decl)
+    error("redefinition of `%s'", iname);
+  ddecl = declare(env, &tempdecl, FALSE);
+  iref->attributes = attribs;
+  iref->ddecl = ddecl;
+
+  if (idecl->abstract)
+    {
+      generic_used = TRUE;
+
+      check_abstract_arguments("interface", ddecl,
+                              idecl->parameters, iref->args);
+      ddecl->itype = interface_copy(parse_region, iref,
+                                   current.container->abstract);
+      ddecl->functions = ddecl->itype->env;
+    }
+  else
+    {
+      copy_interface_functions(parse_region, current.container, ddecl,
+                              ddecl->itype->env);
+      if (iref->args)
+       error("unexpected type arguments");
+    }
+
+  /* We don't make the interface type generic. Instead, we push the generic
+     type into each function in copy_interface_functions.  This is because
+     the syntax for invoking or defining a function on a generic interface
+     is interfacename.functionname[generic args](...) */
+  if (gparms)
+    set_interface_functions_gparms(ddecl->functions, ddecl->gparms);
+  ddecl->type = make_interface_type(ddecl);
+}
+
+void check_interface_parameter_types(declaration parms)
+{
+  declaration parm;
+
+  scan_declaration (parm, parms)
+    {
+      data_decl dd = CAST(data_decl, parm);
+      variable_decl vd = CAST(variable_decl, dd->decls);
+
+      if (!vd->ddecl)
+       {
+         error_with_location(vd->location,
+                             "integral type required for generic parameter");
+         vd->ddecl = bad_decl;
+       }
+      else if (!type_integral(vd->ddecl->type))
+       {
+         error_with_location(vd->location,
+                             "integral type required for generic parameter `%s'",
+                             vd->ddecl->name);
+         vd->ddecl->type = int_type;
+       }
+    }
+}
+
+struct beg_data
+{
+  cgraph cg;
+  cgraph userg;
+};
+
+void beg_iterator(data_declaration ddecl, void *data)
+{
+  struct beg_data *d = data;
+  struct endp node;
+
+  node.component = NULL;
+  node.args_node = NULL;
+
+  /* The real connection graph contains all functions.
+     The user connection graph contains all interfaces + the
+     functions which are not in an interface */
+  if (ddecl->kind == decl_interface_ref)
+    {
+      node.interface = ddecl;
+      node.function = NULL;
+      endpoint_lookup(d->userg, &node);
+    }
+  else
+    {
+      node.interface = ddecl->interface;
+      node.function = ddecl;
+      endpoint_lookup(d->cg, &node);
+      if (!node.interface)
+       endpoint_lookup(d->userg, &node);
+    }
+}
+
+void build_external_graph(region r, nesc_declaration cdecl)
+{
+  struct beg_data d;
+
+  /* A very simple graph, with single unconnected nodes for each endpoint
+     of cdecl */
+  d.cg = new_cgraph(r);
+  d.userg = new_cgraph(r);
+  component_spec_iterate(cdecl, beg_iterator, &d, TRUE);
+
+  cdecl->connections = d.cg;
+  cdecl->user_connections = d.userg;
+}
+
+void build_component(region r, nesc_declaration cdecl)
+{
+  component the_component = CAST(component, cdecl->ast);
+
+  the_component->implementation->cdecl = cdecl;
+  cdecl->impl = the_component->implementation;
+
+  AST_set_parents(CAST(node, cdecl->ast));
+
+  /* Build the default connection graph (just nodes for the external
+     endpoints) */
+  build_external_graph(r, cdecl);
+
+  if (is_configuration(cdecl->impl))
+    process_configuration(CAST(configuration, cdecl->impl));
+  else if (is_module(cdecl->impl))
+    process_module(CAST(module, cdecl->impl));
+}
+
+environment start_implementation(void)
+{
+  start_semantics(l_implementation, current.container, 
+                 new_environment(parse_region, current.env, TRUE, FALSE));
+
+  return current.env;
+}
diff --git a/src/nesc-component.h b/src/nesc-component.h
new file mode 100644 (file)
index 0000000..a61770a
--- /dev/null
@@ -0,0 +1,64 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_COMPONENT_H
+
+void build_component(region r, nesc_declaration cdecl);
+
+void declare_interface_ref(interface_ref iref, declaration gparms,
+                          environment genv, attribute attribs);
+
+void make_implicit_interface(data_declaration fndecl,
+                            function_declarator fdeclarator);
+
+void check_interface_parameter_types(declaration parms);
+
+environment start_implementation(void);
+
+void interface_scan(data_declaration iref, env_scanner *scan);
+data_declaration interface_lookup(data_declaration iref, const char *name);
+
+void component_spec_iterate(nesc_declaration c,
+                           void (*iterator)(data_declaration fndecl,
+                                            void *data),
+                           void *data,
+                           bool interfaces);
+
+void component_functions_iterate(nesc_declaration c,
+                                void (*iterator)(data_declaration fndecl,
+                                                 void *data),
+                                void *data);
+
+nesc_declaration specification_copy(region r, component_ref cref,
+                                   bool copy_is_abstract);
+/* Effects: Make a "shallow" copy of component specified by `cref' in region r,
+     i.e., identical to cref->cdecl except that it has a copy of the
+     specification (including a copy of each interface instance)
+     The copy's instance_name is set to the name specified in cref (word2)
+   Returns: The shallow copy
+*/
+
+void build_external_graph(region r, nesc_declaration cdecl);
+
+void copy_interface_functions(region r, nesc_declaration container,
+                             data_declaration iref, environment fns);
+
+
+extern bool generic_used;      /* Hack to prevent doc generation until
+                                  new doc system built */
+
+#endif
diff --git a/src/nesc-concurrency.c b/src/nesc-concurrency.c
new file mode 100644 (file)
index 0000000..3d33631
--- /dev/null
@@ -0,0 +1,245 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-cg.h"
+#include "nesc-concurrency.h"
+#include "nesc-semantics.h"
+
+static inline bool is_call_edge(gedge e)
+{
+  return (EDGE_GET(use, e)->c & c_fncall) != 0;
+}
+
+static void rec_async(gnode n, bool async_caller)
+{
+  gedge edge;
+  data_declaration fn = NODE_GET(endp, n)->function;
+  bool async = fn->async || fn->actual_async || async_caller;
+
+
+  if (async == fn->actual_async)
+    return;
+  fn->actual_async = async;
+
+  /* We don't pass async through commands or events that are not
+     declared async to avoid reporting errors for the fns called
+     by the "async but not so declared" command or event */
+  if (ddecl_is_command_or_event(fn))
+    async = fn->async;
+
+  graph_scan_out (edge, n) 
+    if (is_call_edge(edge))
+      rec_async(graph_edge_to(edge), async);
+}
+
+void async_violation(gnode n)
+{
+  data_declaration fn = NODE_GET(endp, n)->function;
+  gedge edge;
+
+  graph_scan_in (edge, n)
+    if (is_call_edge(edge))
+      {
+       use u = EDGE_GET(use, edge);
+       data_declaration caller = NODE_GET(endp, graph_edge_from(edge))->function;
+
+       if (caller->actual_async)
+         nesc_warning_with_location(u->l, "`%s' called asynchronously from `%s'",
+                                    decl_printname(fn), decl_printname(caller));
+      }
+}
+
+
+void check_async(cgraph callgraph)
+{
+  ggraph cg = cgraph_graph(callgraph);
+  gnode n;
+  
+  /* Find least fixed point of async w/ recursive graph walk */
+  graph_scan_nodes (n, cg)
+    rec_async(n, FALSE);
+
+  /* Report violations of async. We force async warnings when detecting
+     data races. */
+  if (warn_async || warn_data_race)
+    graph_scan_nodes (n, cg)
+      {
+       data_declaration fn = NODE_GET(endp, n)->function;
+
+       if (ddecl_is_command_or_event(fn) && fn->actual_async && !fn->async)
+         async_violation(n);
+      }
+}
+
+static dd_list find_async_variables(region r, cgraph callgraph)
+{
+  ggraph cg = cgraph_graph(callgraph);
+  gnode n;
+  dd_list avars = dd_new_list(r);
+
+  /* Set async_access in all global or static variables that are accessed
+     (r, w) in an async function. Return list of all such variables */
+
+  /* XXX: aliasing issues ignored for now. */
+
+  graph_scan_nodes (n, cg)
+    {
+      data_declaration fn = NODE_GET(endp, n)->function;
+      dd_list_pos use;
+      
+      if (fn->actual_async && fn->fn_uses)
+       dd_scan (use, fn->fn_uses)
+         {
+           iduse i = DD_GET(iduse, use);
+           data_declaration id = i->id;
+           context c = i->u->c;
+
+           if (id->kind == decl_variable && !id->islocal &&
+               c & (c_read | c_write))
+             {
+               if (!id->async_access)
+                 {
+                   id->async_access = TRUE;
+                   dd_add_last(r, avars, id);
+                 }
+               if (c & c_write)
+                 id->async_write = TRUE;
+             }
+         }
+    }
+  return avars;
+}
+
+static void rec_contexts(gnode n, int call_contexts)
+{
+  gedge edge;
+  data_declaration fn = NODE_GET(endp, n)->function;
+  int new_context = fn->call_contexts | fn->extra_contexts |
+    call_contexts | fn->spontaneous;
+
+  if (new_context == fn->call_contexts)
+    return;
+  fn->call_contexts = new_context;
+
+  graph_scan_out (edge, n) 
+    {
+      use u = EDGE_GET(use, edge);
+      int cc = new_context;
+
+      if (u->c & c_fncall)
+       {
+         if (u->c & c_atomic)
+           cc = c_call_atomic;
+       }
+      else /* Non-call use. Conservatively assume that there may be
+             atomic and non-atomic calls if this value ends up used as
+             a function pointer */
+       cc = c_call_atomic | c_call_nonatomic;
+      rec_contexts(graph_edge_to(edge), cc);
+    }
+}
+
+static void find_fn_contexts(cgraph callgraph)
+{
+  ggraph cg = cgraph_graph(callgraph);
+  gnode n;
+  
+  /* Find least fixed point of call_contexts w/ recursive graph walk */
+  graph_scan_nodes (n, cg)
+    rec_contexts(n, 0);
+}
+
+static void check_async_vars(dd_list avars)
+{
+  dd_list_pos avar;
+
+  dd_scan (avar, avars)
+    {
+      data_declaration v = DD_GET(data_declaration, avar);
+      dd_list_pos ause;
+      bool first = TRUE;
+
+      if (!v->norace)
+       dd_scan (ause, v->nuses)
+         {
+           use u = DD_GET(use, ause);
+           context bad_contexts = c_write;
+
+           /* If there are no writes in async contexts, then reads
+              need not be protected */
+           if (v->async_write)
+             bad_contexts |= c_read;
+
+           /* Bad uses are uses that are both:
+              - outside atomic statements (and fns only called from atomic
+                statements)
+              - uses specified by bad_contexts
+              u->fn can be NULL in weird cases which don't correspond to
+              executable code.
+           */
+           if (u->fn &&
+               !(u->c & c_atomic ||
+                 !(u->fn->call_contexts & c_call_nonatomic))
+               && u->c & bad_contexts)
+             {
+               const char *cname;
+
+               if (first)
+                 {
+                   location vloc =
+                     v->definition ? v->definition->location : v->ast->location;
+                   first = FALSE;
+                   nesc_warning_with_location
+                     (vloc, "non-atomic accesses to shared variable `%s':",
+                      v->name);
+                 }
+
+               if ((u->c & (c_read | c_write)) == (c_read | c_write) &&
+                   v->async_write)
+                 cname = "r/w";
+               else if (u->c & c_read)
+                 cname = "read";
+               else
+                 cname = "write";
+               nesc_warning_with_location(u->l, "  non-atomic %s", cname);
+             }
+         }
+    }
+}
+
+void check_races(cgraph callgraph)
+{
+  region r = newregion();
+  dd_list avars;
+
+  /* First we mark all variables which are accessed in an async function.
+     Then, we issue a warning for all uses of such variables which are not
+     in an atomic context. To do that, we first need to know which contexts
+     (atomic vs non-atomic) each function is called in. 
+     Exception: read-only variables do not need warnings.
+  */
+
+  avars = find_async_variables(r, callgraph);
+  find_fn_contexts(callgraph);
+
+  if (warn_data_race)
+    check_async_vars(avars);
+
+  deleteregion(r);
+}
+
diff --git a/src/nesc-concurrency.h b/src/nesc-concurrency.h
new file mode 100644 (file)
index 0000000..fd4e556
--- /dev/null
@@ -0,0 +1,23 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_CONCURRENCY_H
+
+void check_async(cgraph callgraph);
+void check_races(cgraph callgraph);
+
+#endif
diff --git a/src/nesc-configuration.c b/src/nesc-configuration.c
new file mode 100644 (file)
index 0000000..6b6fcfe
--- /dev/null
@@ -0,0 +1,738 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-configuration.h"
+#include "nesc-component.h"
+#include "nesc-env.h"
+#include "nesc-cg.h"
+#include "semantics.h"
+#include "constants.h"
+#include "c-parse.h"
+#include "expr.h"
+#include "nesc-abstract.h"
+
+/* define this to forbid linking a single function from an interface
+   independently of the whole interface */
+#define NO_FUNCTION_INTERFACE_MATCHING
+
+/* define this to forbid the implicit multiple matches from 
+   component -> component connections */
+#define NO_COMPONENT_MATCHING
+
+void component_scan(data_declaration cref, env_scanner *scan)
+{
+  env_scan(cref->ctype->env->id_env, scan);
+}
+
+static void connect_userg(location l, cgraph userg, struct endp from, struct endp to)
+{
+  gnode gfrom = endpoint_lookup(userg, &from), gto = endpoint_lookup(userg, &to);
+
+  graph_add_edge(gfrom, gto, l);
+}
+static void connect_cg(cgraph cg, struct endp from, struct endp to)
+{
+  gnode gfrom = endpoint_lookup(cg, &from), gto = endpoint_lookup(cg, &to);
+
+  graph_add_edge(gfrom, gto, NULL);
+  /* If an endpoint has args, we must also connect the node w/o args */
+  if (from.args_node)
+    graph_add_edge(fn_lookup(cg, from.function), gfrom, NULL);
+  if (to.args_node)
+    graph_add_edge(gto, fn_lookup(cg, to.function), NULL);
+}
+
+static void connect_function(location l, cgraph cg, cgraph userg,
+                            struct endp from, struct endp to)
+{
+  connect_cg(cg, from, to);
+  connect_userg(l, userg, from, to);
+}
+
+static type endpoint_type(endp p)
+{
+  type t = NULL;
+
+  if (p->args_node)
+    {
+      if (p->function)
+       t = type_function_return_type(p->function->type);
+      else if (p->interface)
+       t = p->interface->type;
+    }
+  else
+    {
+      if (p->function)
+       t = p->function->type;
+      else if (p->interface)
+       {
+         t = p->interface->type;
+
+         /* We don't normally include the generic parameters in the 
+            interface's type, but we do here to allow correct matching */
+         if (p->interface->gparms)
+           t = make_generic_type(t, p->interface->gparms);
+       }
+    }
+  return t;
+}
+
+typelist endpoint_args(endp p)
+{
+  if (p->function)
+    {
+      type t = p->function->type;
+
+      if (type_generic(t))
+       return type_function_arguments(t);
+    }
+  else if (p->interface)
+    return p->interface->gparms;
+
+  return NULL;
+}
+
+void connect_interface(location l, cgraph cg, cgraph userg,
+                      struct endp from, struct endp to,
+                      bool reverse)
+{
+  env_scanner scanfns;
+  const char *fnname;
+  void *fnentry;
+
+  if (to.interface->required ^ reverse)
+    connect_userg(l, userg, to, from);
+  else
+    connect_userg(l, userg, from, to);
+
+  assert(!from.function && !to.function
+        /*&& from.interface->itype == to.interface->itype*/);
+
+  /* All functions */
+  interface_scan(to.interface, &scanfns);
+  while (env_next(&scanfns, &fnname, &fnentry))
+    {
+      data_declaration fndecl = fnentry;
+
+      assert(fndecl->kind == decl_function);
+      to.function = fndecl;
+      from.function = env_lookup(from.interface->functions->id_env, fndecl->name, TRUE);
+      if (fndecl->defined ^ reverse)
+       connect_cg(cg, from, to);
+      else
+       connect_cg(cg, to, from);
+    }
+}
+
+
+int match_endpoints(endp p1, endp p2, endp amatch)
+{
+  /* Should this be type_equal ? unclear 
+     (only real diff, given that we will forbid old style parameter lists,
+     is transparent union handling) */
+  if (type_compatible(endpoint_type(p1), endpoint_type(p2)))
+    {
+      if (amatch)
+       *amatch = *p2;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+int match_function_interface(bool eqconnection,
+                            struct endp f, struct endp i, endp amatch)
+{
+#ifdef NO_FUNCTION_INTERFACE_MATCHING
+  return 0;
+#else
+  env_scanner scanfns;
+  const char *fnname;
+  void *fnentry;
+  int matched = 0;
+  bool want_defined;
+
+  assert(f.function && !i.function);
+
+  want_defined = f.function->defined ^ !eqconnection;
+
+  /* Check all functions */
+  interface_scan(i.interface, &scanfns);
+  while (env_next(&scanfns, &fnname, &fnentry))
+    {
+      i.function = fnentry;
+      if (i.function->defined == want_defined)
+       matched += match_endpoints(&f, &i, amatch); 
+    }
+
+  return matched;
+#endif
+}
+
+int match_interface_component(bool eqconnection,
+                             struct endp i, struct endp c, endp amatch)
+{
+  const char *ifname;
+  void *ifentry;
+  int matched = 0;
+  env_scanner scanifs;
+  bool want_required;
+
+  assert(i.interface && !c.interface);
+
+  want_required = i.interface->required ^ !eqconnection;
+
+  component_scan(c.component, &scanifs);
+  while (env_next(&scanifs, &ifname, &ifentry))
+    {
+      data_declaration idecl = ifentry;
+
+      if (idecl->kind == decl_interface_ref)
+       {
+         c.interface = idecl;
+         if (c.interface->required == want_required)
+           matched += match_endpoints(&i, &c, amatch);
+       }
+    }
+  return matched;
+}
+
+int match_function_component(bool eqconnection,
+                            struct endp f, struct endp c, endp amatch)
+{
+  const char *ifname;
+  void *ifentry;
+  int matched = 0;
+  env_scanner scanifs;
+  bool want_defined;
+
+  assert(f.function && !c.interface && !c.function);
+
+  want_defined = f.function->defined ^ !eqconnection;
+
+  component_scan(c.component, &scanifs);
+  while (env_next(&scanifs, &ifname, &ifentry))
+    {
+      data_declaration idecl = ifentry;
+
+      c.function = c.interface = NULL;
+      if (idecl->kind == decl_interface_ref)
+       {
+         c.interface = idecl;
+         matched += match_function_interface(want_defined ^ idecl->required,
+                                             f, c, amatch);
+       }
+      else
+       {
+         c.function = idecl;
+         if (c.function->defined == want_defined)
+           matched += match_endpoints(&f, &c, amatch);
+       }
+    }
+  return matched;
+}
+
+
+void check_generic_arguments(expression args, typelist gparms)
+{
+  expression arg;
+  typelist_scanner scan_gparms;
+
+  typelist_scan(gparms, &scan_gparms);
+  scan_expression (arg, args)
+    {
+      location l = arg->location;
+      type gparm_type = typelist_next(&scan_gparms);
+
+      if (!gparm_type)
+       {
+         error_with_location(l, "too many arguments");
+         return;
+       }
+
+      if (arg->type == error_type || !check_constant_once(arg, cst_numerical))
+       continue;
+
+      if (!arg->cst || !constant_integral(arg->cst))
+       error_with_location(l, "constant expression expected");
+      else
+       {
+         if (!cval_inrange(arg->cst->cval, gparm_type))
+           error_with_location(l, "constant out of range for argument type");
+       }
+    }
+  if (typelist_next(&scan_gparms))
+    error_with_location(args->location, "too few arguments");
+}
+
+static bool lookup_endpoint(environment configuration_env, endpoint ep,
+                           endp lep)
+{
+  parameterised_identifier pid;
+  environment lookup_env = configuration_env;
+
+  lep->component = lep->interface = lep->function = NULL;
+  lep->args_node = NULL;
+
+  scan_parameterised_identifier (pid, ep->ids)
+    {
+      const char *idname = pid->word1->cstring.data;
+      location l = pid->location;
+
+      if (!lookup_env)
+       error_with_location(l, "unexpected identifier `%s'", idname);
+      else
+       {
+         expression args = pid->args;
+         data_declaration d = env_lookup(lookup_env->id_env, idname, TRUE);
+
+         if (!d)
+           {
+             /* This is a bit hacky: lookup in parent env, but not if
+                it's the global env. We want to check a configuration's
+                env, and it's parent component's env, but not the global
+                env. */
+             if (lookup_env->parent && lookup_env->parent != global_env)
+               d = env_lookup(lookup_env->parent->id_env, idname, TRUE);
+             if (!d)
+               {
+                 error_with_location(l, "cannot find `%s'", idname);
+                 return FALSE; /* prevent cascading error messages */
+               }
+           }
+
+         if (args)
+           {
+             if (pid->next)
+               error_with_location(l, "arguments must be specified last");
+             lep->args_node = pid->args;
+           }
+
+         switch (d->kind)
+           {
+           default:
+             error_with_location(l, "cannot find `%s'", idname);
+             return FALSE; /* prevent cascading error messages */
+
+           case decl_component_ref:
+             assert(!lep->component);
+             lep->component = d;
+             lookup_env = d->ctype->env;
+             break;
+           case decl_interface_ref:
+             assert(!lep->interface);
+             lep->interface = d;
+
+#ifdef NO_FUNCTION_INTERFACE_MATCHING
+             /* Can't lookup a function inside an interface (no partial interface
+                connections) */
+             lookup_env = NULL;
+#else
+             /* Get next environment */
+             lookup_env = d->itype->decls;
+#endif
+             break;
+           case decl_function:
+             lep->function = d;
+             lookup_env = NULL;
+             break;
+           }
+       }
+    }
+
+  /* Check generic arguments */
+  if (lep->args_node)
+    {
+      typelist gparms = endpoint_args(lep);
+
+      if (gparms)
+       check_generic_arguments(lep->args_node, gparms);
+      else
+       error_with_location(ep->location, "endpoint is not a parameterised interface");
+    }
+
+  return TRUE;
+}
+
+
+static void process_interface_connection(cgraph cg, cgraph userg, connection conn,
+                                        struct endp p1, struct endp p2)
+{
+  location l = conn->location;
+
+  if (is_eq_connection(conn)) /* p1 = p2 */
+    {
+      if (!p1.component && !p2.component)
+       {
+         if (p1.interface->required == p2.interface->required)
+           error_with_location(l, "external to external connections must be between provided and used interfaces");
+         else
+           connect_interface(l, cg, userg, p1, p2, TRUE);
+       }
+      else
+       {
+         if (p1.interface->required != p2.interface->required)
+           error_with_location(l, "external to internal connections must be both provided or both used");
+         else if (!p1.component)
+           connect_interface(l, cg, userg, p1, p2, FALSE);
+         else
+           connect_interface(l, cg, userg, p2, p1, FALSE);
+         /* Note: connect_interface takes care of choosing the right edge
+            direction. There are two cases:
+            - the interface is provided: then we want edges from outside in,
+            so from = the outside interface
+            - the interface is required: then we want edges from inside out,
+            but connect_interface will reverse them because the interface
+            is required. So we also pick from = the outside interface.
+         */
+       }
+    }
+  else /* p1 <- p2 */
+    {
+      if (p1.interface->required)
+       error_with_location(l, "target of '<-' interface must be provided");
+      else if (!p2.interface->required)
+       error_with_location(l, "source of '<-' interface must be required");
+      else connect_interface(l, cg, userg, p2, p1, FALSE);
+    }
+}
+
+static void process_function_connection(cgraph cg, cgraph userg, connection conn,
+                                       struct endp p1, struct endp p2)
+{
+  location l = conn->location;
+  bool p1def = (p1.interface && !p1.interface->required) ^ p1.function->defined;
+  bool p2def = (p2.interface && !p2.interface->required) ^ p2.function->defined;
+
+  if (is_eq_connection(conn)) /* p1 = p2 */
+    {
+      if (!p1.component && !p2.component)
+       {
+         if (p1def == p2def)
+           error_with_location(l, "external to external connections must be between provided and used functions");
+         else if (p1def)
+           connect_function(l, cg, userg, p1, p2); /* from provided to used */
+         else
+           connect_function(l, cg, userg, p2, p1);
+       }
+      else 
+       {
+         if (p1def != p2def)
+           error_with_location(l, "external to internal connections must be both provided or both used");
+         else if ((!p1.component && !p1def) || (p1.component && p1def))
+           connect_function(l, cg, userg, p2, p1);
+         else
+           connect_function(l, cg, userg, p1, p2);
+       }
+    }
+  else /* p1 <- p2 */
+    {
+      if (!p1def)
+       error_with_location(l, "target of '<-' function must be defined");
+      else if (p2def)
+       error_with_location(l, "source of '<-' function must be used");
+      else connect_function(l, cg, userg, p2, p1);
+    }
+}
+
+static void process_actual_connection(cgraph cg, cgraph userg, connection conn,
+                                     struct endp p1, struct endp p2)
+{
+  location l = conn->location;
+
+  if (is_eq_connection(conn)) /* p1 = p2 */
+    {
+      if (p1.component && p2.component)
+       error_with_location(l, "there must be at least one external interface in an '=' connection");
+    }
+  else /* p1 <- p2 */
+    {
+      if (!p1.component || !p2.component)
+       error_with_location(l, "external interfaces cannot be connected with `<-' or `->'");
+    }
+
+  if (p1.function)
+    process_function_connection(cg, userg, conn, p1, p2);
+  else
+    process_interface_connection(cg, userg, conn, p1, p2);
+}
+
+static void process_connection(cgraph cg, cgraph userg, connection conn,
+                              struct endp p1, struct endp p2)
+{
+  int matches;
+  bool eqconnection = is_eq_connection(conn);
+
+  if (p1.function) /* f X ... */
+    {
+      if (p2.function) /* f X f */
+       matches = match_endpoints(&p1, &p2, NULL);
+      else if (p2.interface) /* f X i */
+       matches = match_function_interface(eqconnection, p1, p2, &p2);
+      else /* f X c */
+       matches = match_function_component(eqconnection, p1, p2, &p2);
+    }
+  else if (p1.interface) /* i X ... */
+    {
+      if (p2.function) /* i X f */
+       matches = match_function_interface(eqconnection, p2, p1, &p1);
+      else if (p2.interface) /* i X i */
+       matches = match_endpoints(&p1, &p2, NULL);
+      else /* i X c */
+       matches = match_interface_component(eqconnection, p1, p2, &p2);
+    }
+  else /* c X ... */
+    {
+      if (p2.function) /* c X f */
+       matches = match_function_component(eqconnection, p2, p1, &p1);
+      else /* c X i */
+       matches = match_interface_component(eqconnection, p2, p1, &p1);
+    }
+
+  if (matches == 0)
+    error_with_location(conn->location, "no match");
+  else if (matches > 1)
+    error_with_location(conn->location, "ambiguous match");
+  else 
+    process_actual_connection(cg, userg, conn, p1, p2);
+}
+
+static void process_component_connection(cgraph cg, cgraph userg, connection conn,
+                                        struct endp p1, struct endp p2)
+{
+#ifndef NO_COMPONENT_MATCHING
+  /* c X c, the only list case */
+  const char *ifname;
+  void *ifentry;
+  int total_matches = 0;
+  env_scanner scanifs;
+  bool eqconnection = is_eq_connection(conn);
+
+  component_scan(p1.component, &scanifs);
+  while (env_next(&scanifs, &ifname, &ifentry))
+    {
+      data_declaration idecl = ifentry;
+      int matches;
+
+      p1.interface = p1.function = p2.interface = p2.function = NULL;
+      if (idecl->kind == decl_interface_ref)
+       {
+         p1.interface = idecl;
+         matches = match_interface_component(eqconnection, p1, p2, &p2);
+       }
+      else
+       {
+         p1.function = idecl;
+         matches = match_function_component(eqconnection, p1, p2, &p2);
+       }
+
+      total_matches += matches;
+      if (matches > 1)
+       {
+         error_with_location(conn->location, "ambiguous match");
+         break;
+       }
+      else if (matches == 1)
+       process_actual_connection(cg, userg, conn, p1, p2);
+    }
+  if (total_matches == 0)
+#endif
+    error_with_location(conn->location, "no match");
+}
+
+static void process_connections(configuration c)
+{
+  declaration decl;
+  struct endp p1, p2;
+  cgraph cg = c->cdecl->connections;
+  cgraph userg = c->cdecl->user_connections;
+
+  scan_declaration (decl, c->decls)
+    if (is_connection(decl))
+      {
+       connection conn = CAST(connection, decl);
+
+       if (lookup_endpoint(c->ienv, conn->ep1, &p1) &&
+           lookup_endpoint(c->ienv, conn->ep2, &p2))
+         {
+           /* There are a lot of kinds of connections here.
+              lookup_endpoint has already resolved pseudo-interfaces to functions
+              (c is component, i is interface, f is function, X is = or <-)
+              c X c, c X i, i X c, c X f, f X c, i X i, i X f, f X i, f X f
+
+              We first resolve the c X c case, which can lead to multiple
+              connections, then handle all remaining cases in process_connection
+           */
+           if (!p1.interface && !p2.interface && !p1.function && !p2.function)
+             process_component_connection(cg, userg, conn, p1, p2);
+           else
+             process_connection(cg, userg, conn, p1, p2);
+         }
+      }
+}
+
+component_ref require_component(component_ref comp, word as)
+{
+  struct data_declaration tempdecl;
+  data_declaration old_decl, ddecl;
+  const char *cname = comp->word1->cstring.data;
+  const char *asname = (as ? as : comp->word1)->cstring.data;
+
+  comp->word2 = as;
+
+  comp->cdecl = require(l_component, comp->location, cname);
+
+  init_data_declaration(&tempdecl, CAST(declaration, comp), asname,
+                       void_type);
+  tempdecl.kind = decl_component_ref;
+
+  /* Avoid duplicates in implementation *or* specification env */
+  old_decl = lookup_id(asname, TRUE);
+  if (!old_decl)
+    old_decl = env_lookup(current.env->parent->id_env, asname, TRUE);
+  if (old_decl)
+    error_with_location(comp->location, "redefinition of `%s'", asname);
+  ddecl = declare(current.env, &tempdecl, FALSE);
+
+  /* If the component is abstract, we make a copy of its specification
+     so that we produce an accurate connection graph. We don't
+     actually instantiate the component until later.
+     This copy is "abstract" (will need further copying) if we are
+     processing an abstract configuration */
+  if (comp->cdecl->abstract)
+    {
+      generic_used = TRUE;
+
+      comp->cdecl = specification_copy(parse_region, comp,
+                                      current.container->abstract);
+      /* give copy a nice instance name if it is inside a generic
+        configuration */
+      if (current.container->abstract)
+       {
+         size_t inamelen = strlen(current.container->name) +
+           strlen(comp->cdecl->instance_name) + 2;
+         char *iname = rstralloc(parse_region, inamelen);
+
+         sprintf(iname, "%s.%s", current.container->name, comp->cdecl->instance_name);
+         comp->cdecl->instance_name = iname;
+       }
+
+      if (!comp->abstract)
+       error_with_location(comp->location, "generic component `%s' requires instantiation arguments", cname);
+      else
+       check_abstract_arguments("component", ddecl, comp->cdecl->parameters, comp->args);
+    }
+  else
+    {
+      if (comp->abstract)
+       error_with_location(comp->location, "component `%s' is not generic", cname);
+    }
+
+  ddecl->type = make_component_type(ddecl);
+  ddecl->ctype = comp->cdecl;
+
+  return comp;
+}
+
+expression make_component_deref(location loc, expression object, cstring field)
+{
+  expression result;
+  data_declaration cref = type_cref(object->type);
+  data_declaration fdecl = env_lookup(cref->ctype->env->id_env, field.data, TRUE);
+  if (!fdecl)
+    {
+      error("component's specification has no element named `%s'", field.data);
+      fdecl = bad_decl;
+    }
+  result = CAST(expression, new_component_deref(parse_region, loc, object, field, fdecl));
+  result->type = fdecl->type;
+  result->cst = fold_identifier(result, fdecl, 0);
+
+  return CAST(expression, result);
+}
+
+struct cfc_data
+{
+  location loc;
+  cgraph cg;
+  data_declaration intf_last_error;
+};
+
+/* Check that function fndecl (from the configuration's external interface)
+   is connected, i.e.:
+   - if defined there is an outgoing edge
+   - if used there is an incoming edge
+*/
+static void check_function_connected(data_declaration fndecl, void *data)
+{
+  struct cfc_data *d = data;
+  gnode epnode;
+  data_declaration idecl = fndecl->interface;
+
+  assert(fndecl->kind == decl_function);
+
+#ifdef NO_FUNCTION_INTERFACE_MATCHING
+  /* Avoid duplicate error messages: if one function not connected in
+     an interface, then none are */
+  if (idecl == d->intf_last_error)
+    return;
+#endif
+
+  epnode = fn_lookup(d->cg, fndecl);
+
+  if ((fndecl->defined && !graph_first_edge_out(epnode)) ||
+      (!fndecl->defined && !graph_first_edge_in(epnode)))
+    {
+      d->intf_last_error = idecl;
+
+      if (idecl)
+#ifdef NO_FUNCTION_INTERFACE_MATCHING
+       error_with_location(d->loc, "`%s' not connected", idecl->name);
+#else
+       error_with_location(d->loc, "`%s.%s' not connected",
+                           idecl->name, fndecl->name);
+#endif
+      else
+       error_with_location(d->loc, "`%s' not connected", fndecl->name);
+    }
+}
+
+/* Checks that all external interfaces/functions of the configuration
+   are connected somewhere in cg */
+static void check_complete_connection(configuration c)
+{
+  struct cfc_data d;
+
+  d.intf_last_error = NULL;
+  d.loc = c->location;
+  d.cg = c->cdecl->connections;
+  component_functions_iterate(c->cdecl, check_function_connected, &d);
+}
+
+void process_configuration(configuration c)
+{
+  int old_errorcount = errorcount;
+
+  process_connections(c);
+
+  /* Don't give error messages for missing connections if we found
+     errors in the connections (to avoid duplicate errors) */
+  if (old_errorcount == errorcount)
+    check_complete_connection(c);
+}
diff --git a/src/nesc-configuration.h b/src/nesc-configuration.h
new file mode 100644 (file)
index 0000000..6c1faec
--- /dev/null
@@ -0,0 +1,36 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_CONFIGURATION_H
+#define NESC_CONFIGURATION_H
+
+#include "nesc-cg.h"
+
+void process_configuration(configuration c);
+
+component_ref require_component(component_ref comp, word as);
+expression make_component_deref(location loc, expression object, cstring field);;
+void check_generic_arguments(expression args, typelist gparms);
+struct endp;
+typelist endpoint_args(struct endp *p);
+void component_scan(data_declaration cref, env_scanner *scan);
+
+void connect_interface(location l, cgraph cg, cgraph userg,
+                      struct endp from, struct endp to,
+                      bool reverse);
+
+#endif
diff --git a/src/nesc-constants.c b/src/nesc-constants.c
new file mode 100644 (file)
index 0000000..b8c9c64
--- /dev/null
@@ -0,0 +1,256 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-cg.h"
+#include "nesc-abstract.h"
+#include "c-parse.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+#include "AST_walk.h"
+#include "semantics.h"
+#include "constants.h"
+#include "init.h"
+#include "stmt.h"
+
+static AST_walker folder_walker;
+
+struct folder_data {
+  bool *done;
+  int pass;
+};
+
+static AST_walker_result folder_expression(AST_walker spec, void *data,
+                                          expression *n)
+{
+  struct folder_data *d = data;
+  expression e = *n;
+  known_cst c = NULL, sa = NULL;
+  
+  /* Constant-fold children first */
+  AST_walk_children(spec, data, CAST(node, e));
+
+  /* XXX: default_conversion */
+
+  switch (e->kind)
+    {
+    case kind_lexical_cst: case kind_string: case kind_extension_expr:
+      /* We preserve the constants in lexical_cst's and strings */
+      /* XXX: should we allow string arguments to components to 
+        be merged into strings (e.g. "aa" foo "bb", where foo
+        is a `char *' component arg)? 
+        (If so: the ddecl for the args should be classified as
+         a decl_magic_string, and make_string and this function must be
+        modified accordingly) */
+      c = e->cst;
+      sa = e->static_address;
+      break;
+    case kind_label_address:
+      c = fold_label_address(e);
+      break;
+    case kind_sizeof_expr: 
+      c = fold_sizeof(e, CAST(sizeof_expr, e)->arg1->type);
+      break;
+    case kind_sizeof_type:
+      c = fold_sizeof(e, CAST(sizeof_type, e)->asttype->type);
+      break;
+    case kind_alignof_expr: 
+      c = fold_alignof(e, CAST(alignof_expr, e)->arg1->type);
+      break;
+    case kind_alignof_type:
+      c = fold_alignof(e, CAST(alignof_type, e)->asttype->type);
+      break;
+    case kind_cast:
+      c = fold_cast(e);
+      sa = CAST(cast, e)->arg1->static_address;
+      break;
+    case kind_conditional:
+      c = fold_conditional(e);
+      break;
+    case kind_function_call:
+      c = fold_function_call(e, d->pass);
+      break;
+    case kind_identifier:
+      c = fold_identifier(e, CAST(identifier, e)->ddecl, d->pass);
+      sa = foldaddress_identifier(e, CAST(identifier, e)->ddecl);
+      break;
+    case kind_field_ref:
+      sa = foldaddress_field_ref(e);
+      break;
+    case kind_dereference:
+      sa = CAST(dereference, e)->arg1->cst;
+      break;
+    case kind_address_of:
+      c = CAST(address_of, e)->arg1->static_address;
+      break;
+    case kind_array_ref: {
+      array_ref aref = CAST(array_ref, e);
+      type atype;
+
+      /* Find the array type */
+      if (type_integer(aref->arg1->type))
+       atype = aref->arg2->type;
+      else
+       atype = aref->arg1->type;
+
+      sa = fold_binary(type_default_conversion(atype), e);
+      break;
+    }
+    case kind_comma: {
+      expression sub;;
+
+      scan_expression (sub, CAST(comma, e)->arg1)
+       if (!sub->cst)
+         break;
+       else if (!sub->next)
+         {
+           /* (e1, ..., en) is a constant expression if all ei are constant
+              expressions. Weird? (see cst10.c) */
+           c = sub->cst;
+         }
+      break;
+    }
+    case kind_component_deref:
+      c = fold_identifier(e, CAST(component_deref, e)->ddecl, d->pass);
+      break;
+    default:
+      if (is_binary(e))
+       c = fold_binary(e->type, e);
+      else if (is_unary(e))
+       c = fold_unary(e);
+      break;
+    }
+  e->cst = c;
+  e->static_address = sa;
+
+  /* Handle default conversions to pointers */
+  if (e->converted_to_pointer)
+    e->cst = sa;
+
+  /* Notice unknown csts */
+  if ((sa && constant_unknown(sa)) || (c && constant_unknown(c)))
+    *d->done = FALSE;
+
+  if (e->ivalue && e->ivalue->kind == iv_base &&
+      e->ivalue->u.base.require_constant_value)
+    check_init_element(e);
+
+  return aw_done;
+}
+
+bool fold_constants_list(node n, int pass)
+/* Effects: Folds constants and lays out types in AST n
+   Returns: FALSE if any constant folding op returned an unknown cst, TRUE
+     otherwise
+ */
+{
+  struct folder_data d;
+  bool done = TRUE;
+
+  d.done = &done;
+  d.pass = pass;
+
+  AST_walk_list(folder_walker, &d, CASTPTR(node, &n));
+
+  return done;
+}
+
+static AST_walker_result folder_array_declarator(AST_walker spec, void *data,
+                                                array_declarator *n)
+{
+  expression size = (*n)->arg1;
+
+  AST_walk_children(spec, data, CAST(node, *n));
+
+  if (size)
+    check_array_size(size, nice_declarator_name((*n)->declarator));
+
+  return aw_done;
+}
+
+static AST_walker_result folder_enum_ref(AST_walker spec, void *data,
+                                        enum_ref *n)
+{
+  if (!(*n)->defined)
+    return aw_walk;
+
+  layout_enum_start((*n)->tdecl);
+  AST_walk_children(spec, data, CAST(node, *n));
+  layout_enum_end((*n)->tdecl);
+  
+  return aw_done;
+}
+
+static AST_walker_result folder_enumerator(AST_walker spec, void *data,
+                                          enumerator *n)
+{
+  enumerator e = *n;
+
+  AST_walk_children(spec, data, CAST(node, e));
+  e->ddecl->value = layout_enum_value(e);
+
+  return aw_done;
+}
+
+static AST_walker_result folder_tag_ref(AST_walker spec, void *data,
+                                       tag_ref *n)
+{
+  if (!(*n)->defined)
+    return aw_walk;
+
+  AST_walk_children(spec, data, CAST(node, *n));
+  layout_struct((*n)->tdecl);
+
+  return aw_done;
+}
+
+static AST_walker_result folder_case_label(AST_walker spec, void *data,
+                                          case_label *n)
+{
+  case_label label = *n;
+
+  AST_walk_children(spec, data, CAST(node, *n));
+  check_case_value(label->arg1);
+  if (label->arg2) 
+    check_case_value(label->arg2);
+
+  return aw_done;
+}
+
+static AST_walker_result folder_function_decl(AST_walker spec, void *data,
+                                             function_decl *n)
+{
+  function_decl fd = *n, old = current.function_decl;
+
+  current.function_decl = fd;
+  AST_walk_children(spec, data, CAST(node, *n));
+  current.function_decl = old;
+
+  return aw_done;
+}
+
+void init_nesc_constants(void)
+{
+  folder_walker = new_AST_walker(permanent);
+  AST_walker_handle(folder_walker, kind_expression, folder_expression);
+  AST_walker_handle(folder_walker, kind_array_declarator, folder_array_declarator);
+  AST_walker_handle(folder_walker, kind_tag_ref, folder_tag_ref);
+  AST_walker_handle(folder_walker, kind_enum_ref, folder_enum_ref);
+  AST_walker_handle(folder_walker, kind_enumerator, folder_enumerator);
+  AST_walker_handle(folder_walker, kind_case_label, folder_case_label);
+  AST_walker_handle(folder_walker, kind_function_decl, folder_function_decl);
+}
diff --git a/src/nesc-constants.h b/src/nesc-constants.h
new file mode 100644 (file)
index 0000000..ded3baf
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef NESC_CONSTANTS_H
+#define NESC_CONSTANTS_H
+
+bool fold_constants_list(node n, int pass);
+/* Effects: Folds constants and lays out types in AST list n
+     pass is the current constant folding pass number (starts at 1, 0
+     is reserved for parse-time constant folding)
+ */
+
+void init_nesc_constants(void);
+
+#endif
diff --git a/src/nesc-cpp.c b/src/nesc-cpp.c
new file mode 100644 (file)
index 0000000..f4ea5be
--- /dev/null
@@ -0,0 +1,433 @@
+/* This file is part of the nesC compiler.
+
+   This file is derived in part from the GNU C Compiler. It is thus
+     Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Changes for nesC are
+     Copyright (C) 2002-2008 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-cpp.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include "nesc-paths.h"
+#include "machine.h"
+#include "flags.h"
+#include "semantics.h"
+#include "c-parse.h"
+
+#include "gcc-cpp.h"
+
+struct cpp_option {
+  struct cpp_option *next;
+  const char *opt, *arg;
+};
+
+struct macro_def {
+  const unsigned char *name;
+  const unsigned char *def;
+};
+
+static region opt_region;
+static char *cpp_save_dir;
+static dhash_table current_macros;
+static struct cpp_option *saved_options;
+
+static void account_for_newlines (const unsigned char *, size_t);
+static void print_line (source_location, const char *);
+static void maybe_print_line (source_location);
+static void save_pp_define(cpp_reader *pfile, source_location line,
+                           cpp_hashnode *node);
+static void save_pp_undef(source_location line, cpp_hashnode *node);
+
+void save_cpp_option(const char *option, const char *arg)
+{
+  struct cpp_option *newopt;
+
+  if (!opt_region)
+    opt_region = newregion();
+
+  newopt = ralloc(opt_region, struct cpp_option);
+  newopt->opt = option;
+  newopt->arg = arg;
+  newopt->next = saved_options;
+  saved_options = newopt;
+}
+
+static int macro_compare(void *entry1, void *entry2)
+{
+  struct macro_def *e1 = entry1, *e2 = entry2;
+
+  return !strcmp((const char *)e1->name, (const char *)e2->name);
+}
+
+static unsigned long macro_hash(void *entry)
+{
+  struct macro_def *e = entry;
+
+  return hash_str((const char *)e->name);
+}
+
+static void macro_set(const unsigned char *name, const unsigned char *value)
+{
+  struct macro_def fake = { name, NULL };
+  struct macro_def *old_value = dhlookup(current_macros, &fake);
+
+  if (!old_value)
+    {
+      old_value = ralloc(permanent, struct macro_def);
+      old_value->name = (unsigned char *)rstrdup(permanent, (char *)name);
+      dhadd(current_macros, old_value);
+    }
+  old_value->def = value;
+}
+
+void preprocess_init(void)
+{
+  struct cpp_option *opt;
+  cpp_callbacks *cpp_cbacks;
+  cpp_reader *reader;
+  cpp_options *cpp_opts;
+  const char *builtin_macros_file;
+
+  current_macros = new_dhash_table(permanent, 512, macro_compare, macro_hash);
+
+  builtin_macros_file = target->global_cpp_init();
+  init_nesc_paths_end();
+  current.fileregion = newregion();
+  if (!builtin_macros_file || !start_lex(l_c, builtin_macros_file))
+    {
+      error("internal error: couldn't define builtin macros - exiting");
+      exit(2);
+    }
+
+  reader = current.lex.finput;
+  cpp_opts = cpp_get_options(reader);
+  cpp_cbacks = cpp_get_callbacks(reader);
+  cpp_opts->warn_unused_macros = 0;
+  if (!flag_undef)
+    cpp_scan_nooutput(reader);
+
+  /* Process saved options */
+  cpp_cbacks->file_change(reader, linemap_add(current.lex.line_map, LC_RENAME, 0,
+                                             "<command-line>", 0));
+
+  for (opt = saved_options; opt; opt = opt->next)
+    {
+      if (opt->opt[0] == 'D')
+       cpp_define(reader, opt->arg);
+      else if (opt->opt[0] == 'U')
+       cpp_undef(reader, opt->arg);
+      else if (opt->opt[0] == 'A')
+       {
+         if (opt->arg[0] == '-')
+           cpp_unassert(reader, opt->arg + 1);
+         else
+           cpp_assert(reader, opt->arg);
+       }
+    }
+  end_lex();
+  current.lex.input = NULL;
+  deleteregion_ptr(&current.fileregion);
+}
+
+static void cb_define(cpp_reader *reader, source_location loc, 
+                     cpp_hashnode *macro)
+{
+  char *def = rstrdup(permanent, (char *)cpp_macro_definition(reader, macro));
+  char *firstspace = strchr(def, ' ');
+
+  /* Massage def into cpp_define's format (same as -D) */
+  *firstspace = '=';
+  macro_set(NODE_NAME(macro), (const unsigned char *)def);
+
+  save_pp_define(reader, loc, macro);
+}
+
+static void cb_undef(cpp_reader *reader, source_location loc,
+                    cpp_hashnode *macro)
+{
+  macro_set(NODE_NAME(macro), NULL);
+  save_pp_undef(loc, macro);
+}
+
+void start_macro_saving(void)
+{
+  cpp_reader *reader = current.lex.finput;
+  cpp_callbacks *cbacks = cpp_get_callbacks(reader);
+  dhash_scan existing_macros;
+  struct macro_def *macro;
+
+  /* Start by defining the current macros */
+  existing_macros = dhscan(current_macros);
+  while ((macro = dhnext(&existing_macros)))
+    if (macro->def) /* Ignore undef'ed macros - see cb_undef */
+      cpp_define(reader, (const char *)macro->def);
+
+  /* And set the include chain stuff */
+
+  cbacks->define = cb_define;
+  cbacks->undef = cb_undef;
+  if (target->file_cpp_init)
+    target->file_cpp_init();
+}
+
+void end_macro_saving(void)
+{
+  cpp_reader *reader = current.lex.finput;
+  cpp_callbacks *cbacks = cpp_get_callbacks(reader);
+
+  cbacks->define = NULL;
+  cbacks->undef = NULL;
+}
+
+void save_pp_dir(const char *dir)
+{
+  struct stat dbuf;
+  int l = strlen(dir);
+
+  cpp_save_dir = xstrdup(dir);
+
+  /* Remove trailing slashes */
+  while (l > 1 && cpp_save_dir[l - 1] == '/')
+    cpp_save_dir[--l] = '\0';
+
+  mkdir(cpp_save_dir, 0777);
+  if (stat(cpp_save_dir, &dbuf) < 0 || !S_ISDIR(dbuf.st_mode))
+    {
+      /* Just give up on saving preprocessed output */
+      fprintf(stderr, "Couldn't create directory `%s'\n", cpp_save_dir);
+      cpp_save_dir = NULL;
+    }
+}
+
+void save_pp_file_start(const char *path)
+{
+  if (!cpp_save_dir)
+    return;
+
+  const char *fname = lbasename(path);
+  char *pp_path = rstralloc(current.fileregion,
+                           strlen(cpp_save_dir) + strlen(fname) + 2);
+
+  sprintf(pp_path, "%s/%s", cpp_save_dir, fname);
+  current.lex.pp.outf = fopen(pp_path, "w");
+  if (!current.lex.pp.outf)
+    {
+      static int first = 1;
+
+      if (first)
+       warning("cannot create preprocessed output file `%s'", pp_path);
+      first = FALSE;
+      return;
+    }
+
+  /* Initialize the print structure.  Setting current.lex.pp.src_line to -1 here is
+     a trick to guarantee that the first token of the file will cause
+     a linemarker to be output by maybe_print_line.  */
+  current.lex.pp.src_line = -1;
+  current.lex.pp.printed = 0;
+  current.lex.pp.prev = 0;
+  current.lex.pp.first_time = 1;
+  current.lex.pp.avoid_paste = 0;
+  current.lex.pp.source = NULL;
+}
+
+void save_pp_file_end(void)
+{
+  if (!current.lex.pp.outf)
+    return;
+
+  /* Flush any pending output.  */
+  if (current.lex.pp.printed)
+    putc('\n', current.lex.pp.outf);
+  fclose(current.lex.pp.outf);
+  current.lex.pp.outf = NULL;
+}
+
+void save_pp_token(const cpp_token *token)
+{
+  cpp_reader *pfile = current.lex.finput;
+
+  if (!current.lex.pp.outf)
+    return;
+
+  if (token->type == CPP_PADDING)
+    {
+      current.lex.pp.avoid_paste = true;
+      if (current.lex.pp.source == NULL
+         || (!(current.lex.pp.source->flags & PREV_WHITE)
+             && token->val.source == NULL))
+       current.lex.pp.source = token->val.source;
+      return;
+    }
+
+  if (token->type == CPP_EOF)
+    return;
+
+  /* Subtle logic to output a space if and only if necessary.  */
+  if (current.lex.pp.avoid_paste)
+    {
+      if (current.lex.pp.source == NULL)
+       current.lex.pp.source = token;
+      if (current.lex.pp.source->flags & PREV_WHITE
+         || (current.lex.pp.prev
+             && cpp_avoid_paste(pfile, current.lex.pp.prev, token))
+         || (current.lex.pp.prev == NULL && token->type == CPP_HASH))
+       putc(' ', current.lex.pp.outf);
+    }
+  else if (token->flags & PREV_WHITE)
+    putc(' ', current.lex.pp.outf);
+
+  current.lex.pp.avoid_paste = false;
+  current.lex.pp.source = NULL;
+  current.lex.pp.prev = token;
+  cpp_output_token(token, current.lex.pp.outf);
+
+  if(token->type == CPP_COMMENT)
+    account_for_newlines(token->val.str.text, token->val.str.len);
+}
+
+/* Adjust current.lex.pp.src_line for newlines embedded in output.  */
+static void account_for_newlines(const unsigned char *str, size_t len)
+{
+  while (len--)
+    if (*str++ == '\n')
+      current.lex.pp.src_line++;
+}
+
+/* If the token read on logical line LINE needs to be output on a
+   different line to the current one, output the required newlines or
+   a line marker, and return 1.  Otherwise return 0.  */
+static void maybe_print_line(source_location src_loc)
+{
+  const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc);
+  int src_line = SOURCE_LINE(map, src_loc);
+  /* End the previous line of text.  */
+  if (current.lex.pp.printed)
+    {
+      putc('\n', current.lex.pp.outf);
+      current.lex.pp.src_line++;
+      current.lex.pp.printed = 0;
+    }
+
+  if (src_line >= current.lex.pp.src_line && src_line < current.lex.pp.src_line + 8)
+    {
+      while (src_line > current.lex.pp.src_line)
+       {
+         putc('\n', current.lex.pp.outf);
+         current.lex.pp.src_line++;
+       }
+    }
+  else
+    print_line(src_loc, "");
+}
+
+/* Output a line marker for logical line LINE.  Special flags are "1"
+   or "2" indicating entering or leaving a file.  */
+static void print_line(source_location src_loc, const char *special_flags)
+{
+  /* End any previous line of text.  */
+  if (current.lex.pp.printed)
+    putc('\n', current.lex.pp.outf);
+  current.lex.pp.printed = 0;
+
+  /*if (!flag_no_line_commands)*/
+    {
+      const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc);
+
+      size_t to_file_len = strlen(map->to_file);
+      unsigned char *to_file_quoted =
+         (unsigned char *) alloca(to_file_len * 4 + 1);
+      unsigned char *p;
+
+      current.lex.pp.src_line = SOURCE_LINE(map, src_loc);
+
+      /* cpp_quote_string does not nul-terminate, so we have to do it
+        ourselves.  */
+      p = cpp_quote_string(to_file_quoted,
+                           (unsigned char *) map->to_file, to_file_len);
+      *p = '\0';
+      fprintf(current.lex.pp.outf, "# %u \"%s\"%s",
+              current.lex.pp.src_line == 0 ? 1 : current.lex.pp.src_line,
+              to_file_quoted, special_flags);
+
+      if (map->sysp == 2)
+       fputs(" 3 4", current.lex.pp.outf);
+      else if (map->sysp == 1)
+       fputs(" 3", current.lex.pp.outf);
+
+      putc('\n', current.lex.pp.outf);
+    }
+}
+
+/* Called when a line of output is started.  TOKEN is the first token
+   of the line, and at end of file will be CPP_EOF.  */
+void save_pp_line_change(cpp_reader *pfile, const cpp_token *token)
+{
+  if (!current.lex.pp.outf)
+    return;
+
+  source_location src_loc = token->src_loc;
+
+  maybe_print_line(src_loc);
+  current.lex.pp.prev = 0;
+  current.lex.pp.source = 0;
+
+  /* Supply enough spaces to put this token in its original column,
+     one space per column greater than 2, since scan_translation_unit
+     will provide a space if PREV_WHITE.  Don't bother trying to
+     reconstruct tabs; we can't get it right in general, and nothing
+     ought to care.  Some things do care; the fault lies with them.  */
+  /*if (!CPP_OPTION(pfile, traditional))*/
+    {
+      const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc);
+      int spaces = SOURCE_COLUMN(map, src_loc) - 2;
+      current.lex.pp.printed = 1;
+
+      while (-- spaces >= 0)
+       putc(' ', current.lex.pp.outf);
+    }
+}
+
+static void save_pp_define(cpp_reader *pfile, source_location line,
+                          cpp_hashnode *node)
+{
+  if (!current.lex.pp.outf)
+    return;
+
+  maybe_print_line (line);
+
+  fprintf(current.lex.pp.outf, "#define %s\n",
+         (const char *)cpp_macro_definition(pfile, node));
+
+  if (linemap_lookup(current.lex.line_map, line)->to_line != 0)
+    current.lex.pp.src_line++;
+}
+
+static void save_pp_undef(source_location line, cpp_hashnode *node)
+{
+  if (!current.lex.pp.outf)
+    return;
+
+  maybe_print_line(line);
+  fprintf(current.lex.pp.outf, "#undef %s\n", NODE_NAME(node));
+  current.lex.pp.src_line++;
+}
diff --git a/src/nesc-cpp.h b/src/nesc-cpp.h
new file mode 100644 (file)
index 0000000..bc51a50
--- /dev/null
@@ -0,0 +1,38 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_CPP_H
+#define NESC_CPP_H
+
+#include "parser.h"
+
+void save_cpp_option(const char *option, const char *arg);
+void preprocess_init(void);
+
+void start_macro_saving(void);
+void end_macro_saving(void);
+
+struct cpp_token;
+struct cpp_reader;
+
+void save_pp_dir(const char *dir);
+void save_pp_file_start(const char *path);
+void save_pp_file_end(void);
+void save_pp_token(const struct cpp_token *tok);
+void save_pp_line_change(struct cpp_reader *pfile, const struct cpp_token *token);
+
+#endif
diff --git a/src/nesc-decls.h b/src/nesc-decls.h
new file mode 100644 (file)
index 0000000..94626a9
--- /dev/null
@@ -0,0 +1,69 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DECLS_H
+#define NESC_DECLS_H
+
+typedef struct nesc_declaration {
+  source_language kind; /* l_interface or l_component */
+  /* For source components, name and instance_name are the actual component 
+     name.
+     For concrete instances of abstract components, name is the
+     name to used in generated code, and instance_name is a 
+     user-friendly name (indicating the path through configurations that
+     led to this instance).
+
+     instance_name is used for error messages */
+  const char *name;
+  const char *instance_name;
+  int instance_number;
+  nesc_decl ast;
+  struct environment *env;
+  struct docstring doc;
+
+  bool abstract;               /* true for abstract components and
+                                  generic interfaces */
+  bool dumped;                 /* true if already added to dump list */
+  bool printed;                        /* true if declarations already printed */
+  declaration parameters;      /* Parameters for generic components and
+                                  interfaces */
+  expression arguments;                /* Arguments for instantiations of generic 
+                                  components and interfaces */
+  struct environment *parameter_env;
+  struct nesc_declaration *original; /* For instances: the "original" component
+                                       or interface */
+  /* All '@'-style attributes attached to this declaration */
+  dd_list/*nesc_attribute*/ attributes;
+
+  /* for components */
+  /* Binary components are mostly treated like modules. */
+
+  bool configuration;          /* TRUE for configurations, FALSE for modules
+                                  (needed before impl is set) and binary
+                                  components. */
+  bool safe;                   /* TRUE if safety checks should be performed in here */
+  implementation impl;
+  struct cgraph *connections;
+  struct cgraph *user_connections; /* interfaces are not expanded */
+  dd_list local_statics;       /* Local static variables (for nido) */
+  size_t instance_count;       /* For abstract components, the
+                                  instance count (used to give each
+                                  instance a unique name) */
+  int folded;                  /* number of last constant folding pass */
+} *nesc_declaration;
+
+#endif
diff --git a/src/nesc-deputy.c b/src/nesc-deputy.c
new file mode 100644 (file)
index 0000000..989cd23
--- /dev/null
@@ -0,0 +1,250 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2008 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-deputy.h"
+#include "nesc-attributes.h"
+#include "AST_walk.h"
+#include "AST_utils.h"
+
+static AST_walker deputy_walker;
+
+struct deputy_data
+{
+  bool deputy_scope;
+  tag_declaration in_struct;
+  environment env;
+};
+
+static void dwalk(struct deputy_data *dd, void *p)
+{
+  if (p)
+    AST_walk(deputy_walker, dd, CASTPTR(node, &p));
+}
+
+static AST_walker_result deputy_identifier(AST_walker unused, void *data,
+                                          identifier *p)
+{
+  identifier id = *p;
+  struct deputy_data *dd = data;
+
+  if (dd->deputy_scope)
+    {
+      const char *name = id->cstring.data;
+      data_declaration realdecl = NULL;
+
+      /* not doing make_identifier's error message suppression */
+
+      if (dd->in_struct &&
+         env_lookup(dd->in_struct->fields, name, TRUE))
+       realdecl = bad_decl; /* prevent renaming of field refs */
+      if (!realdecl)
+       realdecl = env_lookup(dd->env->id_env, name, FALSE);
+
+      if (realdecl)
+       id->ddecl = realdecl;
+      else
+       error_with_location(id->location, "`%s' undeclared", name);
+    }
+  return aw_done;
+}
+
+static AST_walker_result deputy_nesc_attribute(AST_walker unused, void *data,
+                                              nesc_attribute *p)
+{
+  nesc_attribute na = *p;
+  struct deputy_data ndd = *(struct deputy_data *)data;
+
+  ndd.deputy_scope = na->tdecl->deputy_scope;
+  AST_walk_children(deputy_walker, &ndd, CAST(node, na));
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_tag_ref(AST_walker unused, void *data,
+                                       tag_ref *p)
+{
+  tag_ref tref = *p;
+  struct deputy_data ndd = *(struct deputy_data *)data;
+
+  ndd.in_struct = tref->kind != kind_enum_ref ? tref->tdecl : NULL;
+  dwalk(data, tref->attributes);
+  dwalk(&ndd, tref->fields);
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_fdeclarator(AST_walker unused, void *data,
+                                           function_declarator *p)
+{
+  function_declarator fd = *p;
+  struct deputy_data ndd = *(struct deputy_data *)data;
+
+  /* strangely or not, the parameters are no longer in scope within
+     (from the AST perspective) the fdeclarator's declarator */
+  ndd.env = fd->env->parent;
+  dwalk(&ndd, fd->declarator);
+  dwalk(data, fd->return_type);
+  dwalk(data, fd->parms);
+  dwalk(data, fd->gparms);
+  dwalk(data, fd->qualifiers);
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_function_decl(AST_walker unused, void *data,
+                                             function_decl *p)
+{
+  function_decl fdecl = *p;
+  function_declarator fd = get_fdeclarator(fdecl->declarator);
+  struct deputy_data ndd;
+
+  /* The parameters are in scope for the result type too ... */
+  ndd.deputy_scope = FALSE;
+  ndd.env = fd->env;
+  ndd.in_struct = NULL;
+  dwalk(&ndd, fdecl->declarator);
+  dwalk(&ndd, fdecl->modifiers);
+  dwalk(&ndd, fdecl->attributes);
+  dwalk(data, fdecl->stmt);
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_data_decl(AST_walker unused, void *data,
+                                         data_decl *p)
+{
+  data_decl dd = *p;
+  declaration first;
+  variable_decl vd;
+  function_declarator fd;
+  struct deputy_data ndd;
+
+  /* We only get deputy behaviour if there's a single variable
+     declaration (variable_decl) with a function_delarator inside it. */
+  if (!dd->decls || dd->decls->next)
+    return aw_walk;
+  first = ignore_extensions(dd->decls);
+  if (!is_variable_decl(first))
+    return aw_walk;
+  vd = CAST(variable_decl, first);
+  fd = get_fdeclarator(vd->declarator);
+  if (!fd || !vd->ddecl)
+    return aw_walk;
+
+  /* The parameters are in scope for the result type too ... */
+  ndd.deputy_scope = FALSE;
+  ndd.env = fd->env;
+  ndd.in_struct = NULL;
+  dwalk(&ndd, dd->modifiers);
+  dwalk(&ndd, dd->decls);
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_compound_stmt(AST_walker unused, void *data,
+                                             compound_stmt *p)
+{
+  compound_stmt cs = *p;
+  struct deputy_data ndd;
+
+  ndd.deputy_scope = FALSE;
+  ndd.env = cs->env;
+  ndd.in_struct = NULL;
+  AST_walk_children(deputy_walker, &ndd, CAST(node, cs));
+
+  return aw_done;
+}
+
+static AST_walker_result deputy_implementation(AST_walker unused, void *data,
+                                              implementation *p)
+{
+  implementation impl = *p;
+  struct deputy_data ndd;
+
+  ndd.deputy_scope = FALSE;
+  ndd.env = impl->ienv;
+  ndd.in_struct = NULL;
+  AST_walk_children(deputy_walker, &ndd, CAST(node, impl));
+
+  return aw_done;
+}
+
+void resolve_deputy_scopes(nesc_decl ast)
+{
+  struct deputy_data ndd;
+
+  ndd.deputy_scope = FALSE;
+  ndd.in_struct = NULL;
+  ndd.env = ast->cdecl->env;
+
+  dwalk(&ndd, ast);
+}
+
+static void attr_dscope_tdecl(nesc_attribute attr, tag_declaration tdecl)
+{
+  if (tdecl->kind == kind_attribute_ref)
+    tdecl->deputy_scope = TRUE;
+  else
+    error_with_location(attr->location, "@deputy_scope() can only be applied to attribute declarations");
+}
+
+static void attr_ndecl_safe(nesc_attribute attr, nesc_declaration ndecl)
+{
+  if (ndecl->kind == l_component)
+    ndecl->safe = TRUE;
+  else
+    warning_with_location(attr->location, "@safe() attribute ignored");
+}
+
+static void attr_decl_safe(nesc_attribute attr, data_declaration ddecl)
+{
+  ddecl->safe = TRUE;
+}
+
+static void attr_ndecl_unsafe(nesc_attribute attr, nesc_declaration ndecl)
+{
+  if (ndecl->kind == l_component)
+    ndecl->safe = FALSE;
+  else
+    warning_with_location(attr->location, "@unsafe() attribute ignored");
+}
+
+static void attr_decl_unsafe(nesc_attribute attr, data_declaration ddecl)
+{
+  ddecl->safe = FALSE;
+}
+
+void init_deputy(void)
+{
+  define_internal_attribute("deputy_scope", NULL, NULL, attr_dscope_tdecl, NULL,
+                           NULL, NULL);
+  define_internal_attribute("safe", attr_ndecl_safe, attr_decl_safe, NULL,
+                           NULL, NULL, NULL);
+  define_internal_attribute("unsafe", attr_ndecl_unsafe, attr_decl_unsafe, NULL,
+                           NULL, NULL, NULL);
+
+  deputy_walker = new_AST_walker(permanent);
+  AST_walker_handle(deputy_walker, kind_identifier, deputy_identifier);
+  AST_walker_handle(deputy_walker, kind_nesc_attribute, deputy_nesc_attribute);
+  AST_walker_handle(deputy_walker, kind_tag_ref, deputy_tag_ref);
+  AST_walker_handle(deputy_walker, kind_function_declarator, deputy_fdeclarator);
+  AST_walker_handle(deputy_walker, kind_function_decl, deputy_function_decl);
+  AST_walker_handle(deputy_walker, kind_data_decl, deputy_data_decl);
+  AST_walker_handle(deputy_walker, kind_compound_stmt, deputy_compound_stmt);
+  AST_walker_handle(deputy_walker, kind_implementation, deputy_implementation);
+}
diff --git a/src/nesc-deputy.h b/src/nesc-deputy.h
new file mode 100644 (file)
index 0000000..4a8e1b9
--- /dev/null
@@ -0,0 +1,25 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2008 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DEPUTY_H
+#define NESC_DEPUTY_H
+
+void resolve_deputy_scopes(nesc_decl ast);
+void init_deputy(void);
+
+#endif
+
diff --git a/src/nesc-dfilter.c b/src/nesc-dfilter.c
new file mode 100644 (file)
index 0000000..9cab189
--- /dev/null
@@ -0,0 +1,388 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <sys/types.h>
+#include <regex.h>
+#include <fnmatch.h>
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-dspec.h"
+#include "nesc-dspec-int.h"
+#include "nesc-semantics.h"
+
+/* Filters for XML dump requests. Current filters:
+     file(globexp): match containing file name (unix-style file matching)
+     name(regexp): match by item name (regular expression matching)
+     attribute(namelist): match items containing one of the attributes
+       in the namelist
+     component(cname): match containing component name
+     global(): match items from the global (C) scope
+     instance(): match items in instances of generic components
+     abstract(): match items that are not fully instantiated
+       !global() && !abstract() && !instances(): "in a non-generic component"
+       abstract() && !instance(): "in a generic component"
+       !abstract() && instance(): "in a fully instantiated generic
+         component (i.e., shows up in the generated C code)"
+       abstract() && instance(): "a partially instantiated generic component,
+         i.e., a generic component instantiated within a 
+        generic configuration"
+
+  Filters can be combined with and, or, not.
+*/
+
+/* Implementation of filters is OOish, see the filter_op structure.
+   Filters can be applied to nesc/tag/data_declaration objects (separate
+   method for each).
+
+   Each filter has an argument specification string of the form:
+     - a sequence of n and t's for token and int arguments (in order)
+     - "*t" or "*n" for an arbitrary list of tokens or numbers.
+   See check_arg, make_ndf_op to extend this.
+*/
+
+static bool filter_file(ndf_op filter, location loc)
+{
+  return !fnmatch(nd_tokenval(filter->args), loc->filename, 0);
+}
+
+static bool filter_name(ndf_op filter, const char *name)
+{
+  return name && !regexec(filter->info, name, 0, NULL, 0);
+}
+
+static bool filter_attribute(ndf_op filter, dd_list/*nesc_attribute*/ attrs)
+{
+  nd_arg reqattr;
+  dd_list_pos actualattr;
+
+  if (!attrs)
+    return FALSE;
+
+  /* return true if intersection of attributes in filter and attrs is
+     non-empty */
+  scan_nd_arg (reqattr, filter->args)
+    {
+      const char *reqname = nd_tokenval(reqattr);
+
+      dd_scan (actualattr, attrs)
+       {
+         nesc_attribute a = DD_GET(nesc_attribute, actualattr);
+
+         if (!strcmp(a->word1->cstring.data, reqname))
+           return TRUE;
+       }
+    }
+  return FALSE;
+}
+
+static bool filter_component(ndf_op filter, nesc_declaration container)
+{
+  return container &&
+    !strcmp(nd_tokenval(filter->args), container->instance_name);
+}
+
+
+
+static bool fddecl_file(ndf_op op, data_declaration ddecl)
+{
+  return filter_file(op, ddecl->definition ? ddecl->definition->location : ddecl->ast->location);
+}
+
+static bool fndecl_file(ndf_op op, nesc_declaration ndecl)
+{
+  return filter_file(op, ndecl->ast->location);
+}
+
+static bool ftdecl_file(ndf_op op, tag_declaration tdecl)
+{
+  return tdecl->definition && filter_file(op, tdecl->definition->location);
+}
+
+static bool fddecl_attribute(ndf_op op, data_declaration ddecl)
+{
+  return filter_attribute(op, ddecl->attributes);
+}
+
+static bool fndecl_attribute(ndf_op op, nesc_declaration ndecl)
+{
+  return filter_attribute(op, ndecl->attributes);
+}
+
+static bool ftdecl_attribute(ndf_op op, tag_declaration tdecl)
+{
+  return filter_attribute(op, tdecl->attributes);
+}
+
+static void fcompile_name(ndf_op op)
+{
+  int err;
+
+  op->info = ralloc(dump_region, regex_t);
+  err = regcomp(op->info, nd_tokenval(op->args), REG_EXTENDED);
+  if (err)
+    {
+      char errmsg[200];
+
+      regerror(err, op->info, errmsg, sizeof errmsg);
+      nderror(errmsg);
+    }
+ }
+
+static bool fddecl_name(ndf_op op, data_declaration ddecl)
+{
+  return filter_name(op, ddecl->name);
+}
+
+static bool fndecl_name(ndf_op op, nesc_declaration ndecl)
+{
+  return filter_name(op, ndecl->instance_name);
+}
+
+static bool ftdecl_name(ndf_op op, tag_declaration tdecl)
+{
+  return filter_name(op, tdecl->name);
+}
+
+static bool fddecl_component(ndf_op op, data_declaration ddecl)
+{
+  return filter_component(op, ddecl->container);
+}
+
+static bool fndecl_component(ndf_op op, nesc_declaration ndecl)
+{
+  /* XXX: should this do something obvious w/ instantiated
+     abstract components? */
+  return FALSE;
+}
+
+static bool ftdecl_component(ndf_op op, tag_declaration tdecl)
+{
+  return filter_component(op, tdecl->container);
+}
+
+static bool fddecl_global(ndf_op op, data_declaration ddecl)
+{
+  return !ddecl->container && !ddecl->container_function;
+}
+
+static bool fndecl_global(ndf_op op, nesc_declaration ndecl)
+{
+  /* XXX: see fndecl_component comment */
+  return TRUE;
+}
+
+static bool ftdecl_global(ndf_op op, tag_declaration tdecl)
+{
+  return !tdecl->container /* && !tdecl->container_function*/;
+}
+
+static bool is_instance(nesc_declaration ndecl)
+{
+  return ndecl && ndecl->arguments;
+}
+
+static bool fddecl_instance(ndf_op op, data_declaration ddecl)
+{
+  return is_instance(ddecl_container(ddecl));
+}
+
+static bool fndecl_instance(ndf_op op, nesc_declaration ndecl)
+{
+  return is_instance(ndecl);
+}
+
+static bool ftdecl_instance(ndf_op op, tag_declaration tdecl)
+{
+  return is_instance(tdecl_container(tdecl));
+}
+
+static bool is_abstract(nesc_declaration ndecl)
+{
+  return ndecl && ndecl->abstract;
+}
+
+static bool fddecl_abstract(ndf_op op, data_declaration ddecl)
+{
+  return is_abstract(ddecl_container(ddecl));
+}
+
+static bool fndecl_abstract(ndf_op op, nesc_declaration ndecl)
+{
+  return is_abstract(ndecl);
+}
+
+static bool ftdecl_abstract(ndf_op op, tag_declaration tdecl)
+{
+  return is_abstract(tdecl_container(tdecl));
+}
+
+static struct filter_op {
+  const char *name;
+  const char *args; /* Argument specification (see top) */
+
+  /* (optional) filter "compilation" (eg for regexps) */
+  void (*compile)(ndf_op op); 
+
+  /* Execute filter op on Xdecl */
+  bool (*execute_ddecl)(ndf_op op, data_declaration ddecl);
+  bool (*execute_ndecl)(ndf_op op, nesc_declaration ndecl);
+  bool (*execute_tdecl)(ndf_op op, tag_declaration tdecl);
+} ops[] = {
+  { "file", "t", NULL, fddecl_file, fndecl_file, ftdecl_file },
+  { "name", "t", fcompile_name, fddecl_name, fndecl_name, ftdecl_name },
+  { "component", "t", NULL, fddecl_component, fndecl_component, ftdecl_component },
+  { "global", "", NULL, fddecl_global, fndecl_global, ftdecl_global },
+  { "instance", "", NULL, fddecl_instance, fndecl_instance, ftdecl_instance },
+  { "abstract", "", NULL, fddecl_abstract, fndecl_abstract, ftdecl_abstract },
+  { "attribute", "*t", NULL, fddecl_attribute, fndecl_attribute, ftdecl_attribute }
+};
+
+static void check_arg(nd_arg arg, int kind)
+{
+  bool ok;
+
+  switch (kind)
+    {
+    default: ok = TRUE;
+    case 't': ok = is_nd_token(arg); break;
+    case 'n': ok = is_nd_int(arg); break;
+    }
+  if (!ok)
+    nderror("wrong argument type");
+}
+
+nd_filter make_ndf_op(region r, const char *name, nd_arg args)
+{
+  int nargs = nd_arg_length(args);
+  ndf_op op = new_ndf_op(r, name, args, nargs);
+  int i;
+  
+  for (i = 0; i < sizeof ops / sizeof *ops; i++)
+    if (!strcmp(name, ops[i].name))
+      {
+       const char *argspec = ops[i].args;
+       nd_arg arg;
+       int old_ec = errorcount;
+
+       op->filter_index = i;
+
+       /* Check arguments */
+       if (argspec[0] == '*')
+         scan_nd_arg (arg, args)
+           check_arg(arg, argspec[1]);
+       else
+         {
+           scan_nd_arg (arg, args)
+             {
+               if (!*argspec)
+                 nderror("too many arguments");
+               else
+                 check_arg(arg, *argspec++);
+             }
+           if (*argspec)
+             nderror("not enough arguments");
+         }
+
+       if (errorcount == old_ec && ops[i].compile)
+         ops[i].compile(op);
+
+       return CAST(nd_filter, op);
+      }
+  nderror("unknown filter operator");
+
+  return CAST(nd_filter, op);
+}
+
+/* The current filter, applied by dump_filter_Xdecl */
+static nd_filter current_filter;
+
+enum { filter_ddecl, filter_ndecl, filter_tdecl };
+
+static bool dofilter(int op, nd_filter f, void *decl)
+{
+  switch (f->kind)
+    {
+    case kind_ndf_and: {
+      ndf_and f1 = CAST(ndf_and, f);
+      return dofilter(op, f1->filter1, decl) && dofilter(op, f1->filter2, decl);
+    }
+    case kind_ndf_or: {
+      ndf_or f1 = CAST(ndf_or, f);
+      return dofilter(op, f1->filter1, decl) || dofilter(op, f1->filter2, decl);
+    }
+    case kind_ndf_not: {
+      ndf_not f1 = CAST(ndf_not, f);
+      return !dofilter(op, f1->filter1, decl);
+    }
+    case kind_ndf_op: {
+      ndf_op f1 = CAST(ndf_op, f);
+      struct filter_op *fop = &ops[f1->filter_index];
+
+      switch (op)
+       {
+       case filter_ddecl: return fop->execute_ddecl(f1, decl);
+       case filter_ndecl: return fop->execute_ndecl(f1, decl);
+       case filter_tdecl: return fop->execute_tdecl(f1, decl);
+       default: assert(0); return FALSE;
+       }
+    }
+    default: 
+      assert(0); return FALSE;
+    }
+}
+
+bool dump_filter_ddecl(data_declaration ddecl)
+{
+  return !current_filter || dofilter(filter_ddecl, current_filter, ddecl);
+}
+
+bool dump_filter_ndecl(nesc_declaration ndecl)
+{
+  return !current_filter || dofilter(filter_ndecl, current_filter, ndecl);
+}
+
+bool dump_filter_tdecl(tag_declaration tdecl)
+{
+  return !current_filter || dofilter(filter_tdecl, current_filter, tdecl);
+}
+
+void dump_set_filter(nd_option opt)
+{
+  nd_arg *optargs = &opt->args;
+  nd_filter extracted = NULL;
+
+  /* Extract filters from opt, build current filter. If multiple filters,
+     just and them together. */
+  while (*optargs)
+    if (!is_nd_filter(*optargs))
+      optargs = &(*optargs)->next;
+    else
+      {
+       nd_filter f = CAST(nd_filter, *optargs);
+       *optargs = (*optargs)->next;
+
+       if (extracted)
+         {
+           ndf_and x = new_ndf_and(dump_region, extracted, f);
+           extracted = CAST(nd_filter, x);
+         }
+       else
+         extracted = f;
+      }
+
+  current_filter = extracted;
+}
diff --git a/src/nesc-dfilter.h b/src/nesc-dfilter.h
new file mode 100644 (file)
index 0000000..9430182
--- /dev/null
@@ -0,0 +1,35 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DFILTER_H
+#define NESC_DFILTER_H
+
+nd_filter make_ndf_op(region r, const char *name, nd_arg args);
+/* Returns: a new filter op for filter 'name' with arguments 'args' 
+ */
+
+void dump_set_filter(nd_option opt);
+/* Effects: Sets current filter to the and of all filters found in option
+     list opt. */
+
+/* Returns: TRUE if argument passes current filter. */
+bool dump_filter_ddecl(data_declaration ddecl);
+bool dump_filter_ndecl(nesc_declaration ndecl);
+bool dump_filter_tdecl(tag_declaration tdecl);
+
+#endif
+
diff --git a/src/nesc-doc.c b/src/nesc-doc.c
new file mode 100644 (file)
index 0000000..cc26b9e
--- /dev/null
@@ -0,0 +1,2832 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 UC Berkeley
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/*
+  Author:   J. Robert von Behren <jrvb@cs.berkeley.edu>
+  Created:  7/4/2002
+  Modified: 7/8/2002
+
+  This file contains routines for generating documentation from nesC
+  source code.  The basic format for documentation is similar to
+  Javadoc.  For specifics, look 
+
+
+  
+  Modified: 8/14/2002 by Phil Levis
+  - Changed symlink code to unlink symlink before linking (else
+    EEXIST occurs when repeating).
+  - Removed color map elements -- default graphviz doesn't include
+    language cmap.
+
+  Modified 8/15/2002 by Phil Levis
+  - Chase down pointer_declarators for functions properly now.
+
+  Modified 8/21/2002 by Rob von Behren
+  - add back cmap - requires newer graphviz, but makes for prettier HTML output
+
+  
+*/
+#include <unistd.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <string.h>
+
+#include "dhash.h"
+#include "parser.h"
+#include "c-parse.h"
+#include "nesc-doc.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+#include "nesc-c.h"
+#include "unparse.h"
+#include "AST_utils.h"
+#include "edit.h"
+#include "semantics.h"
+#include "constants.h"
+#include "sd_list.h"
+#include "nesc-cg.h"
+#include "graph.h"
+#include "nesc-env.h"
+#include "regions.h"
+#include "unparse.h"
+#include "errors.h"
+
+
+
+static region doc_region = NULL;
+
+#ifdef WIN32
+#define mkdir(a, b) mkdir((a))
+#endif
+
+//////////////////////////////////////////////////////////////////////
+//
+//  file name munging
+//
+//////////////////////////////////////////////////////////////////////
+
+// separator character for directory paths
+static char dirsep = '/';
+static char dirsep_string[2] = "/";
+
+// "package name" to prepend to files in the current directory
+static const char *currdir_prefix = NULL;
+
+// full name of original working directory
+static char original_wd[1024];
+
+// directory info to strip from the generated docs file names
+#define MAX_TOPDIRS 100
+static const char *topdir[MAX_TOPDIRS];
+static int num_topdirs = 0;
+
+// output directory for generated docs
+static const char *docdir = NULL;
+
+// flag, to determine whether or not to use graphviz
+static bool use_graphviz = FALSE;
+
+// flag, to determine whether or not to generate the app pages
+static bool is_app = FALSE;
+
+/**
+ * Initialize the memory region for the doc tools
+ **/
+static void init_doc_region() 
+{
+  if(doc_region == NULL) 
+    doc_region = newregion();
+}
+
+
+/**
+ * Set the graphviz flag
+ **/
+void doc_use_graphviz(const bool use)
+{
+  use_graphviz = use;
+}
+
+
+/**
+ * Set the app flag
+ **/
+void doc_is_app(const bool val)
+{
+  is_app = val;
+}
+
+
+/**
+ * Set the doc dir
+ **/
+void doc_set_outdir(const char *dir)
+{
+  assert(dir);
+  docdir = dir;
+}
+
+/**
+ * Add a top level source directory
+ **/
+void doc_add_topdir(const char *dir) 
+{
+  char realdir[PATH_MAX+1];
+  char *temp;
+
+  init_doc_region();
+
+  assert(dir);
+  if (num_topdirs >= MAX_TOPDIRS)
+    fatal("ERROR: Too many `topdirs' (-fnesc-topdir) directories specified.\n");
+
+  // canonicalize the path
+  if(realpath(dir, realdir) == NULL) {
+    perror("realpath");
+    fatal("ERROR: Bad nesc-topdir option:\n      '%s'\n",dir);
+  }
+  temp = rstralloc( doc_region, strlen(realdir)+1 );
+  assert( temp );
+  strcpy(temp, realdir);
+
+  topdir[num_topdirs] = temp;
+  num_topdirs++;
+}
+     
+
+/**
+ * Set the directory separator - used for cygwin?
+ **/
+void doc_set_dirsep(const char c)
+{
+  dirsep = c;
+  dirsep_string[0] = c;
+}
+
+
+
+/**
+ * Initialize directory info.
+ **/
+static void find_currdir_prefix(const char *ocwd)
+{
+  int i;
+  char *cwd = rstrdup(doc_region, ocwd);
+
+  unixify_path(cwd);
+
+  // filename generation won't work if we don't know the top directories.
+  if( num_topdirs <= 0 ) {
+    fatal("ERROR: Documentation generation requires specifying\n       -nesc-topdir arguments.\n");
+  }
+
+  // look for the topdir that is above the cwd.
+  for(i=0; i<num_topdirs; i++) {
+    if( !strncmp(topdir[i], cwd, strlen(topdir[i])) ) {
+      currdir_prefix = cwd + strlen(topdir[i]);
+      while( *currdir_prefix == dirsep )
+        currdir_prefix++;
+      break;
+    }
+  }
+
+  if( !currdir_prefix ) {
+    error( "ERROR: The current directory is not a subdir of one");
+    error( "       of the source topdirs!  Please correct or add");
+    error( "       the -nesc-topdir= options");
+    error( "");
+    error( "CWD: %s",cwd);
+    error( "");
+    error( "TOPDIRS:");
+    for(i=0; i<num_topdirs; i++) {
+      error( "     %s", topdir[i]);
+    }
+    exit(1);
+  }
+}
+
+
+/**
+ * generate a file name for the doc file, based on the source file
+ * name.  This canonicalizes filenames based on the given top of the
+ * source tree.  Documentation files are placed in a single directory
+ * (no hierarchy), with hierarchies denoted by "." in the
+ * filename. (Similar to javadoc)
+ *
+ * @assume There is no extraneous whitespace around the file name.
+ * @assume All file names & path names are relative to the current working dir
+ * @assume currdir_prefix and topdir neither begin, nor end with dirsep
+ * @assume CWD == docdir
+ *
+ **/
+static char *doc_filename_with_ext(const char *orig_src_filename, const char *ext) 
+{
+  char buf[PATH_MAX+1];
+  char *src_filename;
+  char *pos;
+  char *ret;
+  bool need_prefix = TRUE;
+  int i;
+  int length;
+
+  // remove symlinks, etc.  We do this from the original working
+  // directory, so that relative paths will be resolved correctly.
+  assert(chdir(original_wd) == 0);
+  if(realpath(orig_src_filename, buf) == NULL) {
+    perror("realpath");
+    fatal("error expanding path for '%s'\n", orig_src_filename);
+  }
+  unixify_path(buf);
+  src_filename = buf;
+  assert(chdir(docdir) == 0);
+
+  // allocate max required space: docdir/currdir_prefix/src_filename.html
+  length = 
+    strlen(currdir_prefix) + 1 +
+    strlen(src_filename) + 
+    strlen(ext) +
+    1; // for terminator
+  ret = rstralloc( doc_region, length );
+  assert(ret != NULL);
+
+  memset(ret, 0, length);
+
+  // file begins with the source prefix, so remove it.
+  for(i=0; i<num_topdirs; i++) {
+    if( !strncmp(topdir[i], src_filename, strlen(topdir[i])) ) {
+      src_filename += strlen(topdir[i]);
+      while(*src_filename == dirsep) 
+        src_filename++;
+      need_prefix = FALSE;
+      break;
+    }
+  }
+
+  // file is an absolute path, but not under a top dir
+  if( need_prefix && absolute_path(src_filename) ) {
+    while(*src_filename == dirsep) 
+      src_filename++;
+    need_prefix = FALSE;
+  }
+
+  // file is in the current directory, so prepend dir info
+  if( need_prefix) {
+    strcat(ret,currdir_prefix);
+    strcat(ret,dirsep_string);
+  }
+
+  // add filename, and suffix
+  strcat(ret,src_filename);
+  strcat(ret,ext);
+
+  // convert dirsep to "."
+  pos = ret;
+  while( *pos != '\0' ) {
+    if( *pos == dirsep )
+      *pos = '.';
+#ifdef WIN32
+    if (*pos == ':')
+      *pos = 'X';
+#endif
+    pos++;
+  }
+  
+
+  return ret;
+}
+
+
+static char *doc_filename(const char *src_filename) 
+{
+  return doc_filename_with_ext(src_filename, ".html");
+}
+
+
+
+struct location doc_empty_location = {"nofile",NULL,-1,0};
+
+
+static char *interface_docfile_name(const char *interface_name) 
+{
+  nesc_declaration idecl;
+  interface iface;
+
+  idecl = require(l_interface, &doc_empty_location, interface_name);
+  iface = CAST(interface, idecl->ast);
+
+  assert(iface->location != dummy_location);
+
+  return doc_filename(iface->location->filename);
+}
+
+
+static char *component_docfile_name(const char *component_name) {
+  nesc_declaration cdecl;
+  component comp;
+
+  cdecl = require(l_component, NULL /* location */, component_name);
+  comp = CAST(component, cdecl->ast);
+
+  assert(comp->location != dummy_location);
+
+  return doc_filename(comp->location->filename);
+}
+
+
+static bool copy_file(const char *srcfile, const char *destfile)
+{
+  char buf[1024 * 4];
+  FILE *in = fopen(srcfile, "r"); 
+  FILE *out = fopen(destfile, "w");
+  size_t nread;
+  size_t nwritten;
+
+  if( !in ) {
+    warning("Can't read from source file '%s'", srcfile);
+    return FALSE;
+  }
+  if( !out ) {
+    warning("Can't write to file '%s'", destfile);
+    return FALSE;
+  }
+
+  
+  while( !feof(in) ) {
+    nread = fread(buf, 1, sizeof(buf), in);
+    if( ferror(in) ) {
+      warning("error copying '%s' to '%s'.  can't read source", srcfile, destfile);
+      fclose(in); fclose(out); return FALSE;
+    }
+    assert( !ferror(in) );
+    if(nread > 0) {
+      nwritten = fwrite(buf, 1, nread, out);
+      if( ferror(out) || nwritten != nread ) {
+        warning("error copying '%s' to '%s'.  can't write dest", srcfile, destfile);
+        fclose(in); fclose(out); return FALSE;
+      }
+    }
+  }
+
+  fclose(in);
+  fclose(out);
+  return TRUE;
+}
+
+static void add_source_symlink(const char *orig_src_filename, const char *linkname) 
+{
+#ifdef WIN32
+  char buf[PATH_MAX+1];
+  char *srcfile;
+
+  assert(chdir(original_wd) == 0);
+  if(realpath(orig_src_filename, buf) == NULL) {
+    perror("realpath");
+    fatal("error expanding path for '%s'\n", orig_src_filename);
+  }
+  srcfile = buf;
+  assert(chdir(docdir) == 0);
+
+  unlink(linkname);
+  if( !copy_file(srcfile, linkname) ) {
+    warning("can't copy source file '%s'", srcfile);
+  }
+#else
+  bool cygwin = FALSE;
+  char buf[PATH_MAX+1];
+  char *srcfile;
+
+  // remove symlinks, etc.  We do this from the original working
+  // directory, so that relative paths will be resolved correctly.
+  assert(chdir(original_wd) == 0);
+  if(realpath(orig_src_filename, buf) == NULL) {
+    perror("realpath");
+    fatal("error expanding path for '%s'\n", orig_src_filename);
+  }
+  srcfile = buf;
+  assert(chdir(docdir) == 0);
+
+  // determine whether or not we are running under cygwin
+  {
+    char *ostype = getenv("OSTYPE");
+    if(ostype != NULL  &&  !strcmp(ostype,"cygwin")) 
+      cygwin = TRUE;
+  }
+
+  unlink(linkname);
+  if( !cygwin ) {
+    if(symlink(srcfile, linkname) != 0) {
+      perror("symlink");
+      warning("can't create symlink to source file %s",srcfile);
+    }
+  } else {
+    if( !copy_file(srcfile, linkname) ) {
+      warning("can't copy source file '%s'", srcfile);
+    }
+  }
+#endif
+}
+
+
+//////////////////////////////////////////////////////////////////////
+//
+//  output functions
+//
+//////////////////////////////////////////////////////////////////////
+static FILE *current_doc_outfile;
+
+static FILE *open_outfile(const char *outfile) {
+
+  unlink(outfile);
+  
+  current_doc_outfile = fopen(outfile,"w");
+  if( !current_doc_outfile ) 
+    fatal("can't write to output file '%s'",outfile);
+
+  // set up unparse routines
+  unparse_start(current_doc_outfile, NULL);
+  disable_line_directives();
+  set_function_separator(".");
+  enable_documentation_mode();
+
+  return current_doc_outfile;
+} 
+
+static void close_outfile(FILE *doc_outfile) {
+  fclose(doc_outfile);
+  unparse_end();
+}
+
+//////////////////////////////////////////////////////////////////////
+//
+//  External information cache
+//
+//////////////////////////////////////////////////////////////////////
+
+typedef struct {
+  char **comp;
+  int num;
+  int slots;
+} implementor_list;
+
+typedef struct {
+  char *desc;
+  bool is_iface;
+  implementor_list r_list;
+  implementor_list p_list;
+} ic_entry;
+
+
+static env ic_env;
+static implementor_list ic_empty_implementor_list;
+
+#if 0
+static void ic_print()
+{
+  env_scanner scanner;
+  const char *name;
+  ic_entry *entry;
+  char *desc, *pos;
+  
+  // scan throug
+  env_scan(ic_env, &scanner);
+  while( env_next(&scanner, &name, (void **)&entry) ) {
+    assert(entry);
+    desc = entry->desc;
+    if(desc == NULL) desc = "";
+
+    // kill weird whitespace in the description
+    pos = desc;
+    while( 1 ) {
+      pos += strcspn(pos,"\r\n\t");
+      if(*pos == '\0') break;
+      *pos = ' ';
+    }
+    
+    printf("%s %d %s\n",name, entry->is_iface, desc);
+  }
+  printf("\n\n");
+}
+#endif
+
+static void ilist_add(implementor_list *list, char *name)
+{
+  int i;
+  char *temp;
+  
+  // skip duplicates
+  for(i=0; i<list->num; i++) {
+    if(strcmp(name, list->comp[i]) == 0) return;
+    if(strcmp(name, list->comp[i]) < 0) break;
+  }
+
+  // first allocation
+  if(list->comp == NULL) {
+    list->comp = rarrayextend(doc_region, NULL, 10, char*);
+    list->slots = 10;
+    list->num = 0;
+  }
+
+  // expand, if necessary
+  if(list->num == list->slots) {
+    list->comp = rarrayextend(doc_region, list->comp, list->slots+10, char*);
+    list->slots += 10;
+  }
+
+  // add the item, and shift the rest up
+  while( i <= list->num ) {
+    temp = list->comp[i];
+    list->comp[i] = name;
+    name = temp;
+    i++;
+  }
+
+  list->num++;
+}
+
+static ic_entry* ic_get_entry(char *key) 
+{
+  char *end;
+  char save;
+  ic_entry *entry;
+
+  // remove extra suffix stuff from the key
+  end = strstr(key,".nc");
+  if(end == NULL) 
+    return NULL;  // should never happen
+  end += strlen(".nc");
+  save = *end;
+  *end = '\0';
+
+  // check the index
+  entry = env_lookup(ic_env, key, TRUE);
+  *end = save;
+
+  return entry;
+}
+
+
+static void ic_read() 
+{
+  FILE *f;
+  char key[1024];
+  int is_iface, nreq, nprov, i, ret;
+  char desc[4096];
+  ic_entry *entry;
+  
+
+  ic_env = new_env(doc_region, NULL);
+  ic_empty_implementor_list.num = 0;
+
+  // FIXME: we should really lock the file, so we don't get garbage if
+  // there are multiple concurrent compiles
+
+  // open the existing file, if any
+  f = fopen("info.idx","r");
+  if(f == NULL) return;
+
+  // parse the file
+  while( !feof(f) ) {
+    key[0] = desc[0] = '\0';
+    is_iface = nreq = nprov = 0;
+    ret = fscanf(f, "%s%d%d%d%*[ ]%[^\n]\n", key, &is_iface, &nreq, &nprov, desc);
+    if(ret == -1 && feof(f)) 
+      break;
+    if(ret != 4  &&  ret != 5) {
+      warning("invalid data in info.idx - ignoring remainder of file\n");
+      fclose(f);
+      return;
+    }
+
+    entry = ic_get_entry(key);
+    if(entry == NULL) {
+      entry = ralloc(doc_region, ic_entry);
+      memset(entry, 0, sizeof(ic_entry));
+      env_add(ic_env, rstrdup(doc_region,key), entry);
+    }
+
+    if(strlen(desc) > 0)
+      entry->desc = rstrdup(doc_region, desc);
+    if(is_iface == 1)
+      entry->is_iface = TRUE;
+
+    // read interfaces
+    for(i=0; i<nreq; i++) {
+      desc[0] = '\0';
+      ret = fscanf(f,"%s",desc);
+      if(ret != 1  ||  desc[0] == '\0') {
+        warning("invalid data in info.idx - ignoring remainder of file\n");
+        fclose(f);
+        return;
+      }
+      ilist_add(&(entry->r_list), rstrdup(doc_region,desc));
+    }
+    for(i=0; i<nprov; i++) {
+      desc[0] = '\0';
+      ret = fscanf(f,"%s",desc);
+      if(ret != 1  ||  desc[0] == '\0') {
+        warning("invalid data in info.idx - ignoring remainder of file\n");
+        fclose(f);
+        return;
+      }
+      ilist_add(&(entry->p_list), rstrdup(doc_region,desc));
+    }
+  }
+
+  // close the file
+  fclose(f);
+}
+
+
+static void ic_write()
+{
+  FILE *f;
+  env_scanner scanner;
+  const char *name;
+  ic_entry *entry;
+  char *desc, *pos;
+  int i;
+
+  // open the output file
+  f = fopen("info.idx", "w");
+  if(f == NULL) {
+    warning("can't write to cache file 'info.idx'.\n");
+    return;
+  }
+
+  // scan throug
+  env_scan(ic_env, &scanner);
+  while( env_next(&scanner, &name, (void **)&entry) ) {
+    assert(entry);
+    desc = entry->desc;
+    if(desc == NULL) desc = "";
+
+    // kill weird whitespace in the description
+    pos = desc;
+    while( 1 ) {
+      pos += strcspn(pos,"\r\n\t");
+      if(*pos == '\0') break;
+      *pos = ' ';
+    }
+    
+    // write the file
+    fprintf(f,"%s %d %d %d %s\n", name, entry->is_iface?1:0, entry->r_list.num, entry->p_list.num, desc);
+
+    // write interfaces
+    for(i=0; i<entry->r_list.num; i++)
+      fprintf(f, " %s", entry->r_list.comp[i]);
+    for(i=0; i<entry->p_list.num; i++)
+      fprintf(f, " %s", entry->p_list.comp[i]);
+    if(entry->r_list.num > 0 || entry->p_list.num > 0)
+      fprintf(f,"\n");
+  }
+
+  // close the file
+  fclose(f);
+
+  
+  // FIXME: should unlock the file now
+}
+
+
+static char *ic_make_iface_key(const char *interface_name)
+{
+  nesc_declaration idecl;
+  interface iface;
+
+  idecl = require(l_interface, &doc_empty_location, interface_name);
+  iface = CAST(interface, idecl->ast);
+
+  return doc_filename_with_ext(iface->location->filename,"");
+}
+
+static void ic_scan_rplist(nesc_declaration cdecl, char *name) 
+{
+  component comp = CAST(component, cdecl->ast);
+  declaration dlist, decl;
+
+  interface_ref iref;
+  ic_entry *entry;
+  implementor_list *list;
+  char *ifname;
+  
+  scan_declaration(dlist, comp->decls) {
+    if (is_rp_interface(dlist)) {
+      rp_interface rp = CAST(rp_interface, dlist);
+
+      scan_declaration(decl, rp->decls) {
+       if( is_interface_ref(decl) ) {
+         iref = CAST(interface_ref,decl);
+         ifname = ic_make_iface_key(iref->word1->cstring.data);
+       } else {
+         continue;
+       }
+
+       entry = ic_get_entry( ifname );
+       if(entry == NULL) {
+         entry = ralloc(doc_region, ic_entry);
+         memset(entry, 0, sizeof(ic_entry));
+         env_add(ic_env, ifname, entry);
+       }
+        
+       // pick the list
+       if( rp->required )
+         list = &(entry->r_list);
+       else 
+         list = &(entry->p_list);
+      
+       // add to the list
+       ilist_add(list, name);
+      }
+    }
+  }
+}
+
+
+
+
+static void ic_add_entry(nesc_declaration cdecl) 
+{
+  ic_entry *entry;
+  char *key;
+
+  // create the local key
+  {
+    nesc_decl d = CAST(nesc_decl, cdecl->ast);
+    key = doc_filename_with_ext(d->location->filename,"");
+  }
+  
+  // get an existing entry
+  entry = ic_get_entry(key);
+  if(entry == NULL) {
+    entry = ralloc(doc_region, ic_entry);
+    memset(entry, 0, sizeof(ic_entry));
+    env_add(ic_env, key, entry);
+  }
+
+  // fill in the entry
+  if( cdecl->kind == l_interface )
+    entry->is_iface = TRUE;
+  else 
+    entry->is_iface = FALSE;
+
+  // docstring
+  entry->desc = (char *)cdecl->doc.short_s;
+
+  // implementor list
+  if( cdecl->kind == l_component ) {
+    ic_scan_rplist(cdecl, key);
+  }
+}
+
+static char *ic_get_desc(char *key) 
+{
+  ic_entry *entry = ic_get_entry(key);
+  if(entry == NULL) return NULL;
+  return entry->desc;
+}
+
+static bool ic_is_iface(char *key)
+{
+  ic_entry *entry = ic_get_entry(key);
+  if(entry == NULL) return FALSE;
+  return entry->is_iface;
+}
+
+
+//////////////////////////////////////////////////////////////////////
+//
+//  Docstring command parsing
+//
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Try to figure out if a given '@' sign is actually part of an email
+ * address.  If so, beg is assigned the position of the first
+ * character of the address, and end is assigned the position of the
+ * first whitespace character after the address.
+ *
+ * The heuristic that is used is as follows:
+ *
+ * 1.  The string has non-whitespace characters, ended by
+ *     ".[a-zA-Z][a-zA-Z][a-zA-Z]? "
+ *
+ * 2.  The string has no other 
+ * 
+ **/
+static bool check_email_address(const char *docstring, char *pos, char **beg, char **end)
+{
+  char *b, *e;
+  char c;
+
+  // find the beginning of the address
+  b = pos-1;
+  while( 1 ) {
+    // beyond the start of the string
+    if(b < docstring) break;
+
+    // not a valid character, so quit
+    c = *b;
+    if( !((c >= 'a' && c <= 'z')  ||  (c >= 'A' && c <= 'Z')  ||  (c >= '0' && c <= '9')  
+          ||  c == '_'  ||  c == '-'  ||  c == '.'))
+      break;
+
+    b--;
+  }      
+  b++;
+
+  // find the end of the address
+  e = pos+1;
+  while( 1 ) {
+    c = *e;
+    
+    // at the end of the string
+    if( c == '\0' ) break;
+
+    // not a valid character
+    if( !((c >= 'a' && c <= 'z')  ||  (c >= 'A' && c <= 'Z')  ||  (c >= '0' && c <= '9')  
+          ||  c == '_'  ||  c == '-'  ||  c == '.'))
+      break;
+
+    e++;
+  }
+  e--;
+  
+  if(b < pos  &&  e > pos) {
+    *beg = b;
+    *end = e;
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+
+typedef enum {
+  in_main,
+  in_return,
+  in_param,
+  in_author,
+  in_version,
+  in_modified,
+  in_signals,
+  in_see_also
+} docstring_context;
+
+static void output_docstring(char *docstring, location loc)
+{
+  char *pos = docstring;
+  char *at, *space;
+  int len;
+  docstring_context context = in_main;
+  static char *whitespace = " \t\r\n";
+
+  while( 1 ) {
+    // find the next @ directive
+    at = strchr(pos,'@');
+    
+    // output the rest, if there are no more @ directives
+    if(at == NULL) {
+      output_string(pos);
+      if(context == in_param) output("</menu></menu>\n");
+      if(context != in_main) 
+        output("</td></tr></table>\n");
+      return;
+    }
+
+    // directives must be preceeded by whitespace or an open paren
+    space = at-1;
+    if(space >= docstring && (*space==' ' || *space=='\t' || *space=='\n' || *space=='\r' || *space=='(') )
+    {
+      // output up to the @
+      *at='\0'; output_string(pos); *at='@';
+      pos = at+1;
+      
+      // do some formatting, based on the command
+      len = strcspn(pos, whitespace);
+      
+      if( len==strlen("return") && !strncasecmp("return",pos,len) ) {
+        pos += len;
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_return) {
+          output("<tr valign=\"top\"><td><b>Returns:</b></td>\n<td>");
+          context = in_return;
+        } else {
+          output("<tr><td>&nbsp;</td>\n<td>");
+        }
+      }
+      
+      else if( len==strlen("param") && !strncasecmp("param",pos,len) ) {
+        pos += len;
+      
+        //if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+
+        if(context != in_param) {
+          output("</td></tr>\n");
+          output("<tr valign=\"top\"><td><br><b>Parameters:</b></td>\n<td><menu>");
+          output("<p STYLE=\"text-indent: -1cm\">");
+          context = in_param;
+        } else {
+          //output("<tr><td>&nbsp;</td>\n<td><menu><menu>");
+          //output("<tr><td>&nbsp;</td>\n<td>");
+          output("</p><p STYLE=\"text-indent: -1cm\">");
+        }
+
+        // print out the parameter name, plus a separator
+        pos += strspn(pos, whitespace);
+        len = strcspn(pos, whitespace);
+        // Null terminate the name
+        *(pos + len) = '\0';
+
+        //output("<p STYLE=\"text-indent: -1cm\">");
+        output("<b>%*s</b>",len,pos);
+        output(" - ");
+        // Restore to spaced text.
+        *(pos + len) = ' ';
+        pos += len;
+      }
+
+      else if( len==strlen("author") && !strncasecmp("author",pos,len) ) {
+        pos += len;
+
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_author) {
+          output("<tr valign=\"top\"><td><b>Author:</b>\n<td>");
+          context = in_author;
+        } else {
+          output("<tr valign=\"top\"><td>&nbsp;</td>\n<td>");
+        }
+      }
+
+      else if( len==strlen("version") && !strncasecmp("version",pos,len) ) {
+        pos += len;
+
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_version) {
+          output("<tr valign=\"top\"><td><b>Version:</b>\n<td>");
+          context = in_version;
+        } else {
+          output("<tr valign=\"top\"><td>&nbsp;</td>\n<td>");
+        }
+      }
+
+      else if( len==strlen("modified") && !strncasecmp("modified",pos,len) ) {
+        pos += len;
+
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_modified) {
+          output("<tr valign=\"top\"><td><b>Modified:</b>\n<td>");
+          context = in_modified;
+        } else {
+          output("<tr valign=\"top\"><td>&nbsp;</td>\n<td>");
+        }
+      }
+
+      else if( len==strlen("signals") && !strncasecmp("signals",pos,len) ) {
+        pos += len;
+
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_signals) {
+          output("<tr valign=\"top\"><td><b>Events signaled:</b>\n<td>");
+          context = in_signals;
+        } else {
+          output("<tr valign=\"top\"><td>&nbsp;</td>\n<td>");
+        }
+
+        // FIXME: should print warnings for things (a) not mentioned
+        // or (b) extraneously mentioned
+
+        // FIXME: should add hrefs to the events (?)
+      }
+
+      else if( len==strlen("see") && !strncasecmp("see",pos,len) ) {
+        pos += len;
+
+        if(context == in_param) output("</menu>\n");
+        if(context == in_main) output("<table border=\"0\" cellpadding=\"0\">\n");
+        else                   output("</td></tr>\n");
+
+        if(context != in_see_also) {
+          output("<tr valign=\"top\"><td><b>See also:</b>\n<td>");
+          context = in_see_also;
+        } else {
+          output("<tr valign=\"top\"><td>&nbsp;</td>\n<td>");
+        }
+
+        // FIXME: should add hrefs when possible
+      }
+
+      // output a warning, and print the bogus directive as-is
+      else {
+        warning("%s:%ld:  Unknown documentation directive '@%.*s'\n",
+                loc->filename, loc->lineno, len, pos);
+        output("@");
+      }
+    }
+
+    // found an @ that isn't preceded by whitespace or '('.  Don't print a warning.
+    else {
+      char *begin, *end;
+      char save;
+
+      // do a quick check to see if it might be an email address, and format it nicely if so.
+      if( check_email_address(docstring, at, &begin, &end) ) {
+        // output to the beginning of the address
+        save=*begin; *begin='\0'; output_string(pos); *begin=save;
+
+        // print the mailto: URL and the address
+        end++;
+        save=*end; *end='\0'; 
+        output("<a href=\"mailto:%s\">%s</a>",begin,begin);
+        *end = save;
+
+        // set the position
+        pos=end;
+      }
+
+      // not an email address, just output normally
+      else {
+        *at='\0'; output_string(pos); *at='@';
+        pos = at+1;
+        output("@");
+      }
+
+    }
+    
+
+  }
+
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+//
+// HTML generation functions
+//
+//////////////////////////////////////////////////////////////////////
+
+typedef enum {
+  NAV_APP,
+  NAV_COMP,
+  NAV_INT,
+  NAV_ALL,
+  NAV_TREE,
+  NAV_OTHER
+} navbar_mode;
+
+static void print_navbar(FILE *f, navbar_mode mode, const char *srcfile, const char *srctext) 
+{
+  char *spaces = "&nbsp;&nbsp;&nbsp;";
+
+
+  if(srcfile) {
+    fprintf(f, "<table BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"0\" width=\"100%%\">\n");
+    fprintf(f, "<tr><td>\n");
+  }
+
+  fprintf(f,"<font size=\"-1\">\n");
+
+  if(mode == NAV_APP) fprintf(f,"Apps\n");
+  else fprintf(f,"<b><font color=\"blue\"><a href=\"apps_p.html\">Apps</a></font></b>\n");
+  fprintf(f, "%s\n", spaces);
+
+  if(mode == NAV_COMP) fprintf(f,"Components\n");
+  else fprintf(f, "<b><a href=\"components_p.html\">Components</a></b>\n");
+  fprintf(f, "%s\n", spaces);
+
+  if(mode == NAV_INT) fprintf(f,"Interfaces\n");
+  else fprintf(f, "<b><a href=\"interfaces_p.html\">Interfaces</a></b>\n");
+  fprintf(f, "%s\n", spaces);
+
+  if(mode == NAV_ALL) fprintf(f,"All Files\n");
+  else fprintf(f, "<b><a href=\"allfiles_p.html\">All Files</a></b>\n");
+  fprintf(f, "%s\n", spaces);
+
+  if(mode == NAV_TREE) fprintf(f,"Source Tree\n");
+  else fprintf(f, "<b><a href=\"index.html\">Source Tree</a></b>\n");
+  fprintf(f, "%s\n", spaces);
+
+  fprintf(f, "</font>\n");
+
+  if(srcfile) {
+    fprintf(f,"</td>\n");
+    fprintf(f,"<td align=\"right\">\n");
+    fprintf(f,"<font size=\"-1\">\n");
+    fprintf(f,"source: <b><a href=\"%s\">%s</a></b>\n", srcfile, srctext);
+    fprintf(f, "</font>\n");
+    fprintf(f,"</td></tr></table>\n");
+  }
+  
+  fprintf(f, "<hr>\n");
+}
+
+
+static void print_short_variable_html(data_decl ddecl, variable_decl vd) {
+  output("<li>   ");
+  //prt_declarator(d->declarator, d->qualifiers, d->attributes, d->ddecl, psd_skip_container);
+
+
+  // FIXME: did this fix the variable declaration printing?
+  prt_type_elements(ddecl->modifiers, 0); 
+
+  prt_declarator(vd->declarator, NULL, vd->attributes, vd->ddecl, psd_skip_container);
+
+  // NOTE: these lines copied from unparse.c - not sure I want/need them.
+  {
+    //if (d->asm_stmt)
+    //  prt_asm_stmt_plain(d->asm_stmt);
+
+    if (vd->arg1) {
+      output(" = ");
+      prt_expression(vd->arg1, P_ASSIGN);
+    }
+  }
+  output("\n");
+
+  // show the description, if any 
+  if( vd->ddecl->doc.short_s ) { 
+    output("        <br><menu>");
+    output_docstring((char *)vd->ddecl->doc.short_s, vd->ddecl->doc.loc);
+    output("</menu>\n");
+  }
+  
+}
+
+
+static inline void check_print_func_args(function_decl fd, data_decl dd, variable_decl vd,
+                                         function_declarator *fdr, data_declaration *ddecl) {
+  if( fd ) {
+    assert(dd==NULL);
+    assert(vd==NULL);
+    if(fdr) *fdr = CAST(function_declarator, fd->fdeclarator);
+    if(ddecl) *ddecl = fd->ddecl;
+  }
+  else {
+    assert(fd==NULL);
+    assert(dd);    
+    assert(vd);
+    if (is_function_declarator(vd->declarator)) {
+      if(fdr) *fdr = CAST(function_declarator, vd->declarator);
+      if(ddecl) *ddecl = vd->ddecl;
+    }
+    // Chase down pointers if necessary.
+    else if (is_pointer_declarator(vd->declarator)) {
+      function_declarator fdcl = get_fdeclarator(vd->declarator);
+      if(fdr) *fdr = fdcl;
+      if(ddecl) *ddecl = vd->ddecl;
+    }
+    else {
+      if(ddecl) *ddecl = vd->ddecl;
+    }
+  }
+}
+
+/**
+ * print function return type & modifiers
+ **/
+static void print_func_return(function_decl fd, data_decl dd, variable_decl vd) 
+{
+  check_print_func_args(fd, dd, vd, NULL, NULL);
+  if(fd) {
+    prt_declarator(NULL, fd->modifiers, fd->attributes, fd->ddecl, psd_skip_container);
+  } else {
+    prt_type_elements(dd->modifiers, psd_skip_command_event); 
+  }
+}
+
+/**
+ * print function name
+ **/
+static void print_func_name(function_decl fd, data_decl dd, variable_decl vd) 
+{
+  function_declarator fdr;
+  data_declaration ddecl; 
+
+  check_print_func_args(fd, dd, vd, &fdr, &ddecl);
+  prt_simple_declarator(fdr->declarator, ddecl, psd_skip_container | psd_need_paren_for_star | psd_need_paren_for_qual);
+  
+}
+
+/**
+ * print function arguments
+ **/
+// FIXME: this should allow an option to print only arg types, and not
+// names - necessary to canonicalize anchors and hrefs.
+static void print_func_args(function_decl fd, data_decl dd, variable_decl vd) 
+{
+  function_declarator fdr;
+  data_declaration ddecl; 
+
+  check_print_func_args(fd, dd, vd, &fdr, &ddecl);
+  prt_parameters(fdr->gparms ? fdr->gparms :
+                 ddecl ? ddecl_get_gparms(ddecl) : NULL,
+                 fdr->parms,
+                 psd_skip_container);
+  
+}
+
+
+/**
+ * print the entire header for a function - return name(args)
+ **/
+static void print_function_header(function_decl fd, data_decl dd, variable_decl vd) 
+{
+  print_func_return(fd, dd, vd);
+  print_func_name(fd, dd, vd);
+  print_func_args(fd, dd, vd);
+}
+
+
+/**
+ * Check to see if a function has a long description
+ **/
+static bool has_long_desc(function_decl fd, data_decl dd, variable_decl vd) 
+{
+  if( fd ) {
+    return (fd->ddecl->doc.long_s != NULL);
+  } else {
+    return (vd->ddecl->doc.long_s != NULL);
+  }
+}
+
+
+/**
+ * generate the text for a stand-alone function declaration.  This
+ * occurs when functions are listed on requires/provides lines in
+ * components, or in uses/defines lines in interfaces.
+ *
+ * FIXME: For "provides", we should really use the actual declaration
+ * of the function, since that will have the descriptive text.  For
+ * "requires", there probably won't be any(?)
+ *
+ * NOTE: for interfaces, the descriptive text should be with this
+ * variable_decl (there's nowhere else for it to be).
+ **/
+typedef enum {
+  short_desc   = 0x0001,
+  long_desc    = 0,
+
+  in_component = 0x0002,
+  in_interface = 0,
+} function_flag;
+
+static void print_function_html(function_decl fd, data_decl dd, variable_decl vd, function_flag flags) 
+{
+  char *sdoc = NULL;
+  char *ldoc = NULL;
+  char *ifile = NULL;
+  location loc = NULL;
+
+  // set up the description pointers
+  if( fd ) {
+    sdoc = (char *)fd->ddecl->doc.short_s;
+    ldoc = (char *)fd->ddecl->doc.long_s;
+    loc  = fd->ddecl->doc.loc;
+  } else {
+    sdoc = (char *)vd->ddecl->doc.short_s;
+    ldoc = (char *)vd->ddecl->doc.long_s;
+    loc  = vd->ddecl->doc.loc;
+  }
+
+
+  // if we're not in the interface, fetch the name of the interface file, for external refs
+  if( flags & in_component ) {
+    if( fd ) {
+      if( fd->ddecl->interface )
+        ifile = interface_docfile_name(fd->ddecl->interface->itype->name);
+    } else {
+      // NOTE: if( !in_interface && !fd ), then this is a function
+      // from a requires/provides line in a component.  In this case,
+      // there is no interface anyway, so we should leave this blank.
+    }
+  }
+
+  // short desc: if there is a long description, link to it.  Otherwise, link to the interface
+  if( flags & short_desc ) {
+    output("<li>\n");
+
+
+    output("        ");  print_func_return(fd,dd,vd); 
+
+    if(ldoc)  {output("    <a href=\"#"); print_function_header(fd,dd,vd); output("\">\n");}
+    else if(ifile) {output("    <a href=\"%s#",ifile); print_function_header(fd,dd,vd); output("\">\n");}
+    output("<b>"); print_func_name(fd,dd,vd); output("</b>");
+    if(ldoc || ifile)  output("    </a>\n");
+
+    print_func_args(fd,dd,vd); output("\n"); 
+
+    if(sdoc) {
+      output("<menu>");
+      output_docstring(sdoc,loc);
+      output("</menu><p>\n");
+    }
+    output("\n");
+  }
+
+  // long desc: print the anchor.  if we're in the component file, also link to the interface.
+  else {
+    output("    <a name=\""); print_function_header(fd,dd,vd); output("\"></a>\n");
+
+    output("        <h4>"); print_func_name(fd,dd,vd);  output("</h4>\n");
+
+    output("        "); print_func_return(fd,dd,vd);  
+    if(ifile) {output("    <a href=\"%s#",ifile); print_function_header(fd,dd,vd); output("\">");}
+    output("<b>"); print_func_name(fd,dd,vd); output("</b>");
+    if(ifile) output("    </a>\n");
+    print_func_args(fd,dd,vd);
+
+    assert(ldoc);  // should have checked in the caller
+    output("<P><menu>");
+    output_docstring(ldoc,loc);
+    output("</menu>");
+    //output("<p><hr>\n");
+  }
+
+}
+
+
+
+/**
+ * Print a nicer looking HTML banner
+ **/
+static inline void start_html_banner() {
+  output("<table BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" WIDTH=\"100%%\">\n");
+  output("<tr BGCOLOR=\"#CCCCFF\"><td>\n");
+}
+
+static inline void end_html_banner() {
+  output("</td></tr></table>\n");
+}
+static void print_html_banner(const char *text) {
+  start_html_banner();
+  output("%s",text);
+  end_html_banner();
+}
+
+
+//////////////////////////////////////////////////////////////////////
+//
+//  Connection graph functions
+//
+//////////////////////////////////////////////////////////////////////
+
+
+
+//////////////////////////////////////////////////
+// tools for checking uniqueness of edges 
+// in the interface connection graph
+//////////////////////////////////////////////////
+
+typedef struct iface_graph_entry {
+  endp req;
+  endp prov;
+} *iface_graph_entry;
+
+#define iface_node_name( ep ) \
+                    ( ep->component ? \
+                      ep->component->ctype->name : \
+                      ( ep->function->container ? \
+                        ep->function->container->name : \
+                        ep->function->ast->location->filename))
+
+static int iface_graph_compare(void *entry1, void *entry2) 
+{
+  int ret;
+  iface_graph_entry e1 = (iface_graph_entry) entry1;
+  iface_graph_entry e2 = (iface_graph_entry) entry2;
+
+  ret = strcmp(iface_node_name(e1->req), iface_node_name(e2->req));
+  if(ret) return 0;
+
+  ret = strcmp(iface_node_name(e1->prov), iface_node_name(e2->prov));
+  if(ret) return 0;
+  
+  ret = strcmp(e1->req->interface->name, e2->req->interface->name);
+  return !ret;
+}
+
+static unsigned long iface_graph_hash(void *entry) 
+{
+  unsigned long rhash, phash, ihash;
+  iface_graph_entry e = (iface_graph_entry) entry;
+
+  assert( iface_node_name(e->req) );
+  assert( iface_node_name(e->prov) );
+  assert( e->req->interface->name );
+
+  rhash = hash_str( iface_node_name(e->req) );
+  phash = hash_str( iface_node_name(e->prov) );
+  ihash = hash_str( e->req->interface->name );
+
+  return rhash ^ (phash<<1) ^ ihash;
+}
+
+
+
+
+static dhash_table new_iface_graph_table() {
+  return new_dhash_table(newregion(), 10, iface_graph_compare, iface_graph_hash);
+}
+
+
+
+
+
+//static int fixme_graph_num = 1;
+
+static bool connection_already_printed(dhash_table table, 
+                                endp ep1, endp ep2, 
+                                endp *req, endp *prov)
+{
+  // FIXME: kludge, to try to get things working with parameterized interfaces
+  if(!ep1->component && !ep1->interface && ep1->function->interface)
+    ep1->interface = ep1->function->interface;
+  if(!ep2->component && !ep2->interface && ep2->function->interface)
+    ep2->interface = ep2->function->interface;
+
+
+  // sort out which is the "requires" side, and which is the "provides" side
+  // For interfaces: ep1 is req, ep2 is prov if connecting a command,
+  //                the other way round if connecting an event
+  // For functions: the direction in the graph is always the one we want
+  if (ep1->interface)
+    {
+      if (ep1->function->ftype == function_command)
+       {
+         *req = ep1;
+         *prov = ep2;
+       }
+      else
+       {
+         *req = ep2;
+         *prov = ep1;
+       }
+    }
+  else
+    {
+      *req = ep1;
+      *prov = ep2;
+    }
+
+  // special case: if the interface is empty, we always show the connection
+  if((*prov)->interface == NULL) {
+    assert( (*req)->interface == NULL );
+    return FALSE;
+  }
+
+  // special case: skip loopback edges, created by parameterized interfaces
+  if( !strcmp(iface_node_name(ep1),iface_node_name(ep2)) ) {
+    return TRUE;
+  }
+
+  // see if this one has already been printed.  This is done by checking a hashtable for the tripple of req,prov,iface
+  {
+    // create a table entry
+    iface_graph_entry e = ralloc(regionof(table), struct iface_graph_entry);
+    e->req = *req;
+    e->prov = *prov;
+
+    // do the lookup
+    if( dhlookup(table,e) )
+      return TRUE;
+
+    // add the new item to the table
+    dhadd(table, e);
+    return FALSE;
+  }
+
+}
+
+
+
+/**
+ * Display the nodes in the graph, along w/ info on edges
+ **/
+static void print_cg_html(const char *component_name, const char *component_file_name, cgraph cg, bool app_graph) {
+  gnode n;
+  dhash_table table = NULL;
+  char *iface_dot, *func_dot;
+  char *iface_gif, *func_gif;
+  char *iface_cmap, *func_cmap;
+  FILE *iface_file, *func_file;
+
+  char *text_only_name;
+  FILE *text_file;
+
+  bool do_func_graph = FALSE;  // FIXME: disable the function graph for now
+
+
+  // FIXME: increment graph num for debugging
+  /*
+  fixme_graph_num++;
+  fprintf(stderr, "%d.\n", fixme_graph_num);
+  */
+
+  // create filenames
+  if( app_graph ) {
+    iface_dot = doc_filename_with_ext(component_file_name,".app.if.dot");
+    iface_gif = doc_filename_with_ext(component_file_name,".app.if.gif");
+    iface_cmap = doc_filename_with_ext(component_file_name,".app.if.cmap");
+  } else {
+    iface_dot = doc_filename_with_ext(component_file_name,".if.dot");
+    iface_gif = doc_filename_with_ext(component_file_name,".if.gif");
+    iface_cmap = doc_filename_with_ext(component_file_name,".if.cmap");
+  }
+
+  if( do_func_graph ) {
+    if( app_graph ) {
+      func_dot = doc_filename_with_ext(component_file_name,".app.func.dot");
+      func_gif = doc_filename_with_ext(component_file_name,".app.func.gif");
+      func_cmap = doc_filename_with_ext(component_file_name,".app.func.cmap");
+    } else {
+      func_dot = doc_filename_with_ext(component_file_name,".func.dot");
+      func_gif = doc_filename_with_ext(component_file_name,".func.gif");
+      func_cmap = doc_filename_with_ext(component_file_name,".func.cmap");
+    }
+  }
+
+  text_only_name = doc_filename_with_ext(component_file_name,".text.html");
+
+
+  // start the text output
+  {
+    text_file  = fopen(text_only_name, "w");  
+    if( !text_file ) fatal("can't write text connection graph file '%s'", text_file);
+
+    // print some additional HTML stuff, if we are linking in to this file externally
+    if( use_graphviz ) {
+      fprintf(text_file, "<html>\n");
+      fprintf(text_file, "<head><title>Text Connection Graph: %s</title></head>\n", component_name);
+      fprintf(text_file, "<body>\n");
+      fprintf(text_file, "<h1 align=\"center\">Text Connection Graph: %s</h1>\n", component_name);
+      fprintf(text_file, "\n");
+    }
+
+    // start the output table
+    fprintf(text_file, "<center>\n<table border=0 cellpadding=2>\n");
+  }
+
+  // start the dot output
+  if( use_graphviz ) {
+    char *graphviz_opts = "\n\
+    rankdir=LR;\n\
+    ratio=compress;\n\
+    margin=\"0,0\";\n\
+    ranksep=0.0005; \n\
+    nodesep=0.1; \n\
+    node [shape=ellipse style=filled fillcolor=\"#e0e0e0\"];\n\
+    node [fontsize=10 height=.1 width=.1];\n\
+    edge [fontsize=9 arrowsize=.8];\n\
+";
+
+    iface_file = fopen(iface_dot, "w");  
+    if( !iface_file ) fatal("can't write to dot file '%s'", iface_dot);
+    fprintf(iface_file, "digraph \"%s_if\" {%s", component_name, graphviz_opts);
+    fprintf(iface_file, "    node [fontcolor=blue];\n");
+    fprintf(iface_file, "    edge [fontcolor=blue];\n");
+    fprintf(iface_file, "\n");
+
+    if( do_func_graph ) {
+      func_file  = fopen(func_dot,  "w");  assert(func_file);
+      if( !func_file ) fatal("can't write to dot file '%s'", func_dot);
+      fprintf(func_file, "digraph \"%s_func\" {%s\n\n", component_name, graphviz_opts);
+      fprintf(func_file, "    node [fontcolor=blue];\n");
+      fprintf(func_file, "    edge [fontcolor=blue];\n");
+      fprintf(func_file, "\n");
+    }
+
+  }
+  
+
+  // examine connections
+  graph_scan_nodes(n, cgraph_graph(cg)) 
+    {
+      gedge e;
+      endp ep1, ep2;
+      ep1 = NODE_GET(endp, n);
+
+      // out edges
+      graph_scan_out(e,n) {
+        ep2 = NODE_GET(endp, graph_edge_to(e));
+        // assertions already done above
+
+        // connection graph - all functions  (input for /usr/bin/dot)
+        if( do_func_graph ) 
+        {
+          // graphviz stuff
+          if( use_graphviz ) 
+          {
+            // FIXME: print the node info (ie URLs)
+
+            // print the edge info
+            fprintf(func_file, "    %s -> %s [label = \"%s.%s\"];\n", 
+                    ep1->component ? ep1->component->ctype->name : "C_code", 
+                    ep2->component ? ep2->component->ctype->name : "C_code", 
+                    ep2->interface ? ep2->interface->itype->name : "C_code", 
+                    ep2->function->name);
+          }
+
+          // text stuff
+          {
+            // FIXME: should we bother with text function graph?
+          }
+        }
+
+        // connection graph - interfaces  (input for /usr/bin/dot)
+        {
+          endp req, prov;
+         
+          // allocate a new hashtable for removing duplicates
+          if(table == NULL) {
+            table = new_iface_graph_table();
+          }
+          if( !connection_already_printed(table, ep1, ep2, &req, &prov) ) 
+          {
+            // graphviz stuff
+            if( use_graphviz )
+            {
+              // print the node info (ie URLs)
+              fprintf(iface_file, "    %s [URL=\"%s\"];\n", 
+                      iface_node_name(req),
+                      component_docfile_name( iface_node_name(req) ));
+              fprintf(iface_file, "    %s [URL=\"%s\"];\n", 
+                      iface_node_name(prov),
+                      component_docfile_name( iface_node_name(prov) ));
+              
+              // edge info
+              fprintf(iface_file, "    %s -> %s [",
+                        iface_node_name( req ),
+                        iface_node_name( prov ));
+              if(req->interface) {
+                if(prov->interface && req->interface->required == prov->interface->required) 
+                  fprintf(iface_file, " style=dashed"); 
+                fprintf(iface_file, " label=\"%s\" URL=\"%s\"", 
+                        prov->interface->itype->name,
+                        interface_docfile_name(prov->interface->itype->name));
+              } else {
+                fprintf(iface_file, " label=\"func:%s\" fontcolor=black", prov->function->name);
+              }
+              fprintf(iface_file, " ];\n");
+            }
+            
+            // text stuff
+            //
+            // FIXME: probably better to sort these in some nice way.
+            // Perhaps a topological ordering startig from the main
+            // component, with a breadth-first display?
+            {
+              // row start
+              fprintf(text_file, "<tr>\n");
+
+              // requires side
+              fprintf(text_file, "    <td align=\"right\"><a href=\"%s\">%s</a>.",
+                      component_docfile_name( iface_node_name(req) ),
+                      iface_node_name(req));
+              if(req->interface)
+                fprintf(text_file, "<a href=\"%s\">%s</a>",
+                        interface_docfile_name(req->interface->itype->name),
+                        req->interface->itype->name);
+              else 
+                fprintf(text_file, "%s",req->function->name);
+              fprintf(text_file, "</td>\n");
+
+              // arrow
+              if(prov->interface && req->interface->required == prov->interface->required) 
+                fprintf(text_file, "    <td align=\"center\">&nbsp;=&nbsp;</td>\n");
+              else 
+                fprintf(text_file, "    <td align=\"center\">&nbsp;->&nbsp;</td>\n");
+
+              // provides side
+              fprintf(text_file, "    <td align=\"left\"><a href=\"%s\">%s</a>.",
+                      component_docfile_name( iface_node_name(prov) ),
+                      iface_node_name(prov));
+              if(req->interface)
+                fprintf(text_file, "<a href=\"%s\">%s</a>",
+                        interface_docfile_name(prov->interface->itype->name),
+                        prov->interface->itype->name);
+              else 
+                fprintf(text_file, "%s",prov->function->name);
+              fprintf(text_file, "</td>\n");
+
+              // row end
+              fprintf(text_file, "</tr>\n");
+            }
+
+          }
+        }
+
+
+      }
+    }
+
+  // clean up the region 
+  if(table) 
+    deleteregion( regionof(table) );
+
+
+  // finish up the graphviz output
+  if( use_graphviz ) {
+    // finish if file
+    fprintf(iface_file, "}\n");  
+    fclose(iface_file);
+
+
+    // finish func file
+    if( do_func_graph ) {
+      fprintf(func_file, "}\n");  
+      fclose(func_file);
+    }
+
+  }
+
+  // finish up the text output
+  {
+    fprintf(text_file, "</table>\n</center>\n\n");
+    fprintf(text_file, "<hr>Generated by <a href=\"../../../nesc/doc/nesdoc.html\">nesdoc</a><br>\n");
+    if( use_graphviz ) {
+      fprintf(text_file, "</body>\n");
+      fprintf(text_file, "</html>\n");
+    }
+    fclose(text_file);
+  }
+
+
+  // use dot to generate output
+  if( use_graphviz ) 
+  {
+    char cmd[1024];
+    int ret;
+    memset(cmd, 0, sizeof(cmd));
+
+    // FIXME: error handling could be better here
+    ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tgif -o%s %s", iface_gif, iface_dot); assert(ret > 0);
+    ret = system(cmd); 
+    if(ret == -1)
+      fatal("ERROR: error running graphviz - please check your graphviz and font installations..\n");
+    ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tcmap -o%s %s", iface_cmap, iface_dot); assert(ret > 0);
+    ret = system(cmd); 
+    if(ret == -1) fatal("error running graphviz command:\n   %s\n",cmd);
+
+    if( do_func_graph ) {
+      ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tgif -o%s %s", func_gif, func_dot); assert(ret > 0);
+      ret = system(cmd); assert(ret != -1);
+      if(ret == -1)
+        fatal("ERROR: error running graphviz - please check your graphviz and font installations..\n");
+      ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tcmap -o%s %s", func_cmap, func_dot); assert(ret > 0);
+      ret = system(cmd); 
+      if(ret == -1) fatal("error running graphviz command:\n   %s\n",cmd);
+    }
+  }
+
+  // add the HTML
+  if( use_graphviz ) {
+    start_html_banner();
+    output("<h3>Component Graph &nbsp;&nbsp;");
+    output("<font size=-1>(<a href=\"%s\">text version</a>,",text_only_name);
+    output("&nbsp; &nbsp;<a href=\"cg_help.html\">help</a>)</font> </h3>\n");
+    end_html_banner();
+
+    // FIXME: add a link to the function graph page here.
+    output("<br>\n");
+
+    output("<map name=\"comp\">\n");
+    copy_file_to_output(iface_cmap);
+    output("</map>\n");
+    output("<center><image src=\"%s\" usemap=\"#comp\" border=0></center>\n", iface_gif);
+  }
+  else {
+    // just copy in the text output, if we aren't generating graphs
+    print_html_banner("<h3>Component Graph</h3>");
+    output("<center>\n");
+    copy_file_to_output(text_only_name);
+    unlink(text_only_name);
+    output("</center>\n");
+  }
+
+  if( do_func_graph ) {
+    // FIXME: this stuff should all go to a seperate function graph HTML page
+    print_html_banner("<h3>Component Function Graph</h3>");
+
+    output("<map name=\"func\">\n");
+    copy_file_to_output(func_cmap);
+    output("</map>\n");
+    output("<center><image src=\"%s\" usemap=\"#func\" border=0></center>\n", func_gif);
+  }
+
+  // remove temp files
+  //unlink(iface_dot);
+  unlink(iface_cmap);
+  //unlink(func_dot);
+  unlink(func_cmap);
+
+}
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+//
+// Main routine for creating docs for a component
+//
+//////////////////////////////////////////////////////////////////////
+
+static void generate_component_html(nesc_declaration cdecl) 
+{
+  FILE *outfile;
+  component comp = CAST(component, cdecl->ast);
+
+  // open the appropriate output file
+  outfile = open_outfile( component_docfile_name(cdecl->name) );
+
+
+  // start the HTML
+  {
+    char *sourcelink = doc_filename_with_ext(cdecl->ast->location->filename, ".source");
+    char *sourcetext = doc_filename_with_ext(cdecl->ast->location->filename, "");
+
+    add_source_symlink(cdecl->ast->location->filename, sourcelink);
+
+    output("\n\
+<html>\n\
+<head>\n\
+<title>Component: %s</title>\n\
+</head>\n\
+<body>\n\
+", cdecl->name);
+
+    print_navbar(outfile, NAV_OTHER, sourcelink, sourcetext);
+
+    output("\n\
+<h1 align=\"center\">Component: %s</h1>\n\
+", cdecl->name);
+  }  
+
+  // print the overview documentation
+  if( cdecl->doc.short_s ) {
+    output("<p>\n");
+    if(cdecl->doc.long_s)   output_docstring((char *)cdecl->doc.long_s, cdecl->ast->location);
+    else                        output_docstring((char *)cdecl->doc.short_s, cdecl->ast->location);
+    output("\n<p>\n\n");
+  }
+
+
+  // module declaration (requires / provides stuff)
+  if( comp->decls ) 
+  {
+    rp_interface rp;
+    declaration dlist, decl;
+    interface_ref iref;
+    bool header_printed = FALSE;
+
+
+    // requires
+    scan_declaration(dlist, comp->decls) {
+      if(is_rp_interface(dlist) &&
+        (rp = CAST(rp_interface, dlist))->required ) {
+
+        scan_declaration(decl,rp->decls) {
+          // commands / events
+          if( is_data_decl(decl) ) {
+            data_decl dd = CAST(data_decl, decl);
+            variable_decl vd;
+            scan_variable_decl(vd, CAST(variable_decl,dd->decls)) {
+              if(!header_printed) {print_html_banner("<h3>Require Interfaces</h3>"); output("<ul>\n"); header_printed=TRUE;}
+              print_function_html(NULL, dd, vd, short_desc|in_component);
+            }
+          }
+
+          // interfaces
+          else if( is_interface_ref(decl) ) {
+            if(!header_printed) {print_html_banner("<h3>Required Interfaces</h3>"); output("<ul>\n"); header_printed=TRUE;}
+            iref = CAST(interface_ref,decl);
+            output("<li>    <a href=\"%s\">%s</a> %s\n", 
+                   interface_docfile_name(iref->word1->cstring.data),
+                   iref->word1->cstring.data,
+                   iref->word2 ? iref->word2->cstring.data : "");
+          }
+        
+          // everything else is an error
+          else {
+            AST_print( CAST(node,cdecl->ast) );
+            assert(0);
+          }
+        }
+      }
+    }    
+    if(header_printed) output("</ul>\n\n");
+
+    // provides
+    header_printed = FALSE;
+    scan_declaration(dlist, comp->decls) {
+      if(is_rp_interface(dlist) &&
+        !(rp = CAST(rp_interface, dlist))->required ) {
+        scan_declaration(decl,rp->decls) {
+          // commands / events
+          if( is_data_decl(decl) ) {
+            data_decl dd = CAST(data_decl, decl);
+            variable_decl vd;
+            scan_variable_decl(vd, CAST(variable_decl,dd->decls)) {
+              if(!header_printed) {print_html_banner("<h3>Provided Interfaces</h3>"); output("<ul>\n"); header_printed=TRUE;}
+              print_function_html(NULL, dd, vd, short_desc|in_component);
+            }
+          }
+
+          // interfaces
+          else if( is_interface_ref(decl) ) {
+            if(!header_printed) {print_html_banner("<h3>Provided Interfaces</h3>"); output("<ul>\n"); header_printed=TRUE;}
+            iref = CAST(interface_ref,decl);
+            output("<li>    <a href=\"%s\">%s</a> %s\n", 
+                   interface_docfile_name(iref->word1->cstring.data),
+                   iref->word1->cstring.data,
+                   iref->word2 ? iref->word2->cstring.data : "");
+          }
+        
+          // everything else is an error
+          else {
+            AST_print( CAST(node,cdecl->ast) );
+            assert(0);
+          }
+        }
+      }
+    }    
+    if(header_printed) output("</ul>\n\n");
+
+  }
+  
+
+  // configuration (aka wiring)
+  if( is_configuration(cdecl->impl) )
+  {
+    print_cg_html(cdecl->name,
+                  CAST(component, cdecl->ast)->location->filename, 
+                  cdecl->connections,
+                  FALSE);
+  }
+
+  // otherwise, we have a module (aka function defs) 
+  else if (is_module(cdecl->impl))
+  {
+    module mod = CAST(module, cdecl->impl);
+    declaration decl;
+    bool printed_heading;
+    bool first;
+
+    // print variable descriptions
+    printed_heading = FALSE;
+    scan_declaration(decl, mod->decls) {
+      // deal with single variable decls - I don't know if this ever happens....
+      if( is_variable_decl(decl) )
+        //print_short_variable_html( CAST(variable_decl,decl) );
+        assert(0);
+
+      // deal with lists of variable decls
+      else if( is_data_decl(decl) ) {
+        data_decl dd = CAST(data_decl,decl);
+        declaration d2;
+        scan_declaration(d2, dd->decls) 
+          if( is_variable_decl(d2) ) {
+            if(!printed_heading) {print_html_banner("<h3>Variables</h3>"); output("<ul>\n"); printed_heading=TRUE;}
+            print_short_variable_html( dd, CAST(variable_decl,d2) );
+          }
+      }
+    }
+    if(printed_heading) output("</ul>\n\n");
+    
+
+
+    // print short function descriptions
+    printed_heading = FALSE;
+    scan_declaration(decl, mod->decls) {
+      if( is_function_decl(decl) ) {
+        if(!printed_heading) {print_html_banner("<h3>Function Index</h3>"); output("<ul>\n"); printed_heading=TRUE;}
+        print_function_html(CAST(function_decl,decl), NULL, NULL, in_component|short_desc);
+      }
+    }
+    if(printed_heading) output("</ul>\n\n");
+
+
+    // print long function descriptions
+    printed_heading = FALSE;
+    first = TRUE;
+    scan_declaration(decl, mod->decls) {
+      if( is_function_decl(decl) && has_long_desc(CAST(function_decl,decl),NULL,NULL) ) {
+        if(!printed_heading) {print_html_banner("<h3>Function Descriptions</h3>\n"); printed_heading=TRUE;}
+        if( !first ) output("<hr>\n");
+        print_function_html(CAST(function_decl,decl), NULL, NULL, in_component|long_desc);
+        first = FALSE;
+      }
+    }
+
+  }
+
+
+  close_outfile(outfile);
+}
+
+
+static void generate_intf_function_list(const char *heading,
+                                       nesc_declaration idecl,
+                                       int kind, int flags)
+{
+  declaration funcs = CAST(interface, idecl->ast)->decls;
+  declaration f;
+  bool printed_heading = FALSE;
+
+  // commands
+  scan_declaration(f,funcs) {
+    data_decl dd = CAST(data_decl, f);
+    variable_decl vd;
+
+    scan_variable_decl(vd, CAST(variable_decl,dd->decls)) {
+      if( vd->ddecl->ftype == kind ) {
+        if( flags & short_desc  ||  has_long_desc(NULL,dd,vd) ) {
+          if(!printed_heading) {
+            print_html_banner(heading); 
+            if(flags & short_desc) output("<ul>\n"); 
+            printed_heading=TRUE;
+          } else {
+            if( !(flags & short_desc) ) 
+              output("<hr>\n");
+          }
+          print_function_html(NULL,dd,vd,in_interface|flags);
+        }
+      }
+    }
+  }
+  if(printed_heading && flags & short_desc) output("</ul>\n");
+}
+
+//////////////////////////////////////////////////
+// generate HTML for an interface file
+//////////////////////////////////////////////////
+static void generate_interface_html(nesc_declaration idecl) 
+{
+  FILE *outfile;
+
+  // open the output file
+  outfile = open_outfile( interface_docfile_name(idecl->name) );
+                          
+
+  // start the HTML
+  {
+    char *sourcelink = doc_filename_with_ext(idecl->ast->location->filename, ".source");
+    char *sourcetext = doc_filename_with_ext(idecl->ast->location->filename, "");
+
+    add_source_symlink(idecl->ast->location->filename, sourcelink);
+
+    output("\n\
+<html>\n\
+<head>\n\
+<title>Interface: %s</title>\n\
+</head>\n\
+<body>\n\
+", idecl->name);
+
+    print_navbar(outfile, NAV_OTHER, sourcelink, sourcetext);
+
+    output("\n\
+<h1 align=\"center\">Interface: %s</h1>\n\
+", idecl->name);
+  }  
+  if( idecl->doc.short_s ) {
+    output("<p>\n");
+    if(idecl->doc.long_s)   output_docstring((char *)idecl->doc.long_s, idecl->ast->location);
+    else                        output_docstring((char *)idecl->doc.short_s, idecl->ast->location);
+    output("\n<p>\n\n");
+  }
+
+  // print cross refs
+  {
+    int i;
+    char *name, *end;
+    ic_entry *entry = ic_get_entry( ic_make_iface_key(idecl->name) );
+    assert(entry);
+    if(entry->p_list.num > 0) {
+      output("<dl>\n<dt>Components providing this interface:\n<dd>\n");
+      for(i=0; i<entry->p_list.num; i++) {
+        name = entry->p_list.comp[i];
+        output("    <a href=\"%s.html\">",name);
+        end = strstr(name,".nc"); assert(end);
+        *end = '\0';
+        output("%s</a><br>\n",name);
+        *end = '.';
+      }
+      output("</dl><p>\n\n");
+    }
+    if(entry->r_list.num > 0) {
+      output("<dl>\n<dt>Components requiring this interface:\n<dd>\n");
+      for(i=0; i<entry->r_list.num; i++) {
+        name = entry->r_list.comp[i];
+        output("    <a href=\"%s.html\">",name);
+        end = strstr(name,".nc"); assert(end);
+        *end = '\0';
+        output("%s</a><br>\n",name);
+        *end = '.';
+      }
+      output("</dl><p>\n\n");
+    }
+  }
+  
+  // summary
+  generate_intf_function_list("<h3>Commands</h3>",
+                             idecl, function_command, short_desc);
+  generate_intf_function_list("<h3>Events</h3>",
+                             idecl, function_event, short_desc);
+
+  // detailed descriptions
+  generate_intf_function_list("<h3>Commands - Details</h3>",
+                             idecl, function_command, long_desc);
+  generate_intf_function_list("<h3>Events - Details</h3>",
+                             idecl, function_event, long_desc);
+
+  close_outfile(outfile);
+}
+
+
+//////////////////////////////////////////////////
+// Create index files
+//////////////////////////////////////////////////
+
+typedef struct _index_entry {
+  char *name;
+  char *path;
+  char *fname; // for interfaces:  path.name.ti.html
+               // for components:  path.name.td.html
+               // for apps:        name.app.html
+} index_entry;
+
+
+typedef struct {
+  int num;
+  index_entry *ent;
+} file_index;
+
+
+/**
+ * compare two entries - used by qsort
+ **/
+static int index_entry_comparator_short(const void *va, const void *vb) {
+  int ret;
+  index_entry *a = (index_entry*) va;
+  index_entry *b = (index_entry*) vb;
+  
+  ret = strcmp(a->name, b->name);
+  if(ret) return ret;
+
+  return strcmp(a->path, b->path);
+}
+static int index_entry_comparator_full(const void *va, const void *vb) {
+  int ret;
+  index_entry *a = (index_entry*) va;
+  index_entry *b = (index_entry*) vb;
+  
+  ret = strcmp(a->path, b->path);
+  if(ret) return ret;
+
+  return strcmp(a->name, b->name);
+}
+
+
+/**
+ * add an entry to the list
+ **/
+static void insert_entry(file_index *fi, char *docfile, char *suffix) {
+  char *p;
+  index_entry *e = &( fi->ent[fi->num++] );
+
+  // path
+  e->path = rstralloc(doc_region, strlen(docfile)+1);
+  strcpy(e->path, docfile);
+
+  // chop off the suffix
+  p = e->path + strlen(e->path) - strlen(suffix);
+  assert( *p == '.' );
+  *p = '\0'; p--;
+
+  // separate out the name.  We special case for common source file extensions.
+  while(p > e->path  &&  *p != '.') p--;
+  if( !strcmp(p,".nc") || !strcmp(p,".td") || !strcmp(p,".ti") || !strcmp(p,".h") || !strcmp(p,".c") ) {
+    p--;
+    while(p > e->path  &&  *p != '.') p--;
+  }
+
+  if(p == e->path) 
+    e->name = e->path;
+  else {
+    *p = '\0';
+    e->name = p+1;
+  }
+  
+  // file name
+  e->fname = rstralloc(doc_region, strlen(docfile)+1);
+  strcpy(e->fname, docfile);
+}
+
+
+/**
+ * generate the index file
+ **/
+typedef enum {
+  SORT_FILE = 1,
+  SORT_PATH = 2
+} index_sort_type;
+
+static void print_index_file(navbar_mode nmode, index_sort_type sort, file_index *ind)
+{
+  int i;
+  FILE *f;
+  char *filename;
+  char *title, *indexname, *sort_heading;
+
+  // set up some shorthand, based on mode
+  if(nmode == NAV_INT) {
+    indexname = "interfaces";
+    title = "Interface Index";
+    sort_heading = "interface";
+  } else if(nmode == NAV_COMP) {
+    indexname = "components";
+    title = "Component Index";
+    sort_heading = "component";
+  } else if(nmode == NAV_APP) {
+    indexname = "apps";
+    title = "Application Index";
+    sort_heading = "app";
+  } else if(nmode == NAV_ALL) {
+    indexname = "allfiles";
+    title = "All File Index";
+    sort_heading = "file";
+  } else {
+    assert(0);
+  }
+  
+
+  // create the file name, & open the file
+  filename = rstralloc(doc_region, strlen(indexname) + strlen("_f.html") + 1);
+  assert(filename);
+  strcpy(filename, indexname);
+  if( sort == SORT_FILE ) 
+    strcat(filename, "_f.html");
+  else
+    strcat(filename, "_p.html");
+  
+  // open the file
+  f = fopen(filename, "w"); 
+  if( !f ) fatal("can't write to index file '%s'",f);
+  
+  // start the HTML
+  fprintf(f, "<html>\n");
+  fprintf(f, "<head><title>%s</title></head>\n", title);
+  fprintf(f, "<body>\n");
+
+
+  // add a navigation banner
+  print_navbar(f, nmode, NULL, NULL);
+
+
+  // title, and table tags
+  fprintf(f, "<h1 align=\"center\">%s</h1>\n", title);
+  fprintf(f, "<center>\n");
+  fprintf(f, "<table border=0 cellpadding=0 width=\"80%%\">\n");
+
+
+  // add the sorting links
+  fprintf(f, "<tr valign=\"top\">\n");
+  if(sort == SORT_FILE) {
+    fprintf(f, "<td><a href=\"%s_p.html\"><em>path</em></a></td>\n", indexname);
+    fprintf(f, "<td>&nbsp;&nbsp;&nbsp;</td>\n");
+    fprintf(f, "<td><em>%s</em></td>\n", sort_heading);
+    fprintf(f, "<td>&nbsp;&nbsp;&nbsp;</td>\n");
+    fprintf(f, "<td><em>description</em></td>\n");
+  } else {
+    fprintf(f, "<td><em>path</em></td>\n");
+    fprintf(f, "<td>&nbsp;&nbsp;&nbsp;</td>\n");
+    fprintf(f, "<td><a href=\"%s_f.html\"><em>%s</em></a></td>\n", indexname, sort_heading);
+    fprintf(f, "<td>&nbsp;&nbsp;&nbsp;</td>\n");
+    fprintf(f, "<td><em>description</em></td>\n");
+  }
+  fprintf(f, "</tr>\n");
+
+
+  // blank line
+  fprintf(f, "<tr valign=\"top\">\n");
+  fprintf(f, "    <td>&nbsp;</td>\n");
+  fprintf(f, "    <td>&nbsp;</td>\n");
+  fprintf(f, "    <td>&nbsp;</td>\n");
+  fprintf(f, "    <td>&nbsp;</td>\n");
+  fprintf(f, "    <td>&nbsp;</td>\n");
+  fprintf(f, "</tr>\n");
+
+  // index 
+  for(i=0; i<ind->num; i++) {
+    char *desc = ic_get_desc(ind->ent[i].fname);
+    if(desc==NULL) desc = "&nbsp;";
+    if(sort == SORT_FILE) {
+      fprintf(f, "<tr valign=\"top\">\n");
+      fprintf(f, "    <td><a href=\"%s\">%s</a></td>\n", ind->ent[i].fname, ind->ent[i].path);
+      fprintf(f, "    <td>&nbsp;</td>\n");
+      fprintf(f, "    <td>%s</td>\n", ind->ent[i].name);
+      fprintf(f, "    <td>&nbsp;</td>\n");
+      fprintf(f, "    <td>%s</td>\n",desc);
+      fprintf(f, "</tr>\n");
+    } else {
+      // new path - print a blank line for all but the 'apps' page
+      if(i>0 && strcmp(ind->ent[i].path, ind->ent[i-1].path) && nmode!=NAV_APP) {
+        fprintf(f, "<tr>\n");
+        fprintf(f, "    <td>&nbsp;</td>\n");
+        fprintf(f, "    <td>&nbsp;</td>\n");
+        fprintf(f, "    <td>&nbsp;</td>\n");
+        fprintf(f, "    <td>&nbsp;</td>\n");
+        fprintf(f, "    <td>&nbsp;</td>\n");
+        fprintf(f, "</tr>\n");
+      }
+      fprintf(f, "<tr valign=\"top\">\n");
+      fprintf(f, "    <td>%s</td>\n", (i>0 && !strcmp(ind->ent[i].path, ind->ent[i-1].path)) ? "&nbsp;" : ind->ent[i].path);
+      fprintf(f, "    <td>&nbsp;</td>\n");
+      fprintf(f, "    <td><a href=\"%s\">%s</a></td>\n", ind->ent[i].fname, ind->ent[i].name);
+      fprintf(f, "    <td>&nbsp;</td>\n");
+      fprintf(f, "    <td>%s</td>\n",desc);
+      fprintf(f, "</tr>\n");
+    }
+  }
+
+
+  // cleanup
+  fprintf(f, "</table>\n");
+  fprintf(f, "</center>\n");
+  fprintf(f, "<hr>Generated by <a href=\"../../../nesc/doc/nesdoc.html\">nesdoc</a><br>\n");
+  fprintf(f, "</body>\n");
+  fprintf(f, "</html>\n");
+  fclose(f);
+}
+
+
+static void print_hierarchical_index_file(const char *filename, file_index *ind)
+{
+  FILE *f = fopen(filename,"w");
+  char *title = "Source Tree";
+  char *prevdir;
+  int i,j,level;
+
+  if( !f ) fatal("can't write to hierarchical index file '%s'",filename);
+
+  fprintf(f, "<html>\n");
+  fprintf(f, "<head><title>%s</title></head>\n", title);
+  fprintf(f, "<body>\n");
+
+  // add a navigation banner
+  print_navbar(f, NAV_TREE, NULL, NULL);
+
+  // title, and table tags
+  fprintf(f, "<h1 align=\"center\">%s</h1>\n", title);
+  fprintf(f, "<center>\n");
+  fprintf(f, "<table border=0 cellpadding=0>\n");
+
+
+  // listing 
+  prevdir = "";
+  for(i=0; i<ind->num; i++) {
+    // print directory info, if necessary
+    if( strcmp(prevdir,ind->ent[i].path) ) {
+      char *a, *b, *dot;
+
+      // find the common prefix
+      level = 0;
+      a = prevdir;
+      b = ind->ent[i].path;
+      while(*a == *b) {
+        a++;
+        b++;
+        if(*b == '.') level++;
+      }
+      while(b > ind->ent[i].path  &&  *b != '.') b--;
+      if(*b == '.') b++;
+
+      // print the dir headers
+      do {
+        dot = strchr(b,'.');
+        if(dot != NULL) *dot = '\0';
+
+        fprintf(f, "<tr><td>\n");
+        for(j=0; j<level; j++)   fprintf(f, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
+        fprintf(f, "\n    %s/<br>\n", b);
+        fprintf(f, "</td></tr>\n");
+        
+        if(dot != NULL) *dot = '.';
+        b = dot+1;
+        level++;
+      } while(dot != NULL);
+
+      prevdir = ind->ent[i].path;
+    }
+
+    // print the link
+    fprintf(f, "<tr><td>\n");
+    for(j=0; j<level; j++) fprintf(f, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");
+    fprintf(f, "\n    <a href=\"%s\">%s</a>\n", ind->ent[i].fname, ind->ent[i].name);
+    fprintf(f, "</td></tr>\n");
+  }
+
+
+  // cleanup
+  fprintf(f, "</table>\n");
+  fprintf(f, "</center>\n");
+  fprintf(f, "<hr>Generated by <a href=\"../../../nesc/doc/nesdoc.html\">nesdoc</a><br>\n");
+  fprintf(f, "</body>\n");
+  fprintf(f, "</html>\n");
+  fclose(f);
+}
+
+
+
+/**
+ * Read through the doc directory, and generate appropriate index
+ * files.  The indices are sorted by the base interface or component
+ * name.  In cases in which there are multiple versions of a file (ie,
+ * for different hardware), seperate links are given for each path.
+ **/
+
+
+static void generate_index_html() {
+  file_index comp, iface, app, allfiles;
+
+  // read the directory, and sort the entries
+  {
+    DIR *dir;
+
+    // open the dir
+    dir = opendir(".");  
+    if( !dir ) fatal("can't open directory '.'");
+
+    // allocate space
+    {
+      int nument = 0;
+      while( readdir(dir) ) nument++;
+      rewinddir(dir);
+
+      iface.ent    = rarrayalloc(doc_region, nument, index_entry);
+      comp.ent     = rarrayalloc(doc_region, nument, index_entry);
+      app.ent      = rarrayalloc(doc_region, nument, index_entry);
+      allfiles.ent = rarrayalloc(doc_region, nument, index_entry);
+
+      iface.num    = 0;
+      comp.num     = 0;
+      app.num      = 0;
+      allfiles.num = 0;
+    }
+
+    // scan dir
+    {
+      struct dirent *dent;
+
+      while( (dent=readdir(dir)) != NULL ) {
+        char *p;
+
+        // find the second from the last "."
+        p = dent->d_name + strlen(dent->d_name) - 1;
+        while(p > dent->d_name  &&  *p != '.') p--;
+        p--;
+        while(p > dent->d_name  &&  *p != '.') p--;
+
+        // add to the appropriate list
+        if( !strcmp(p,".nc.html") ) {
+          if( ic_is_iface(dent->d_name) )
+            insert_entry(&iface, dent->d_name, ".nc.html");
+          else
+            insert_entry(&comp, dent->d_name, ".nc.html");
+          insert_entry(&allfiles, dent->d_name, ".html");
+          continue;
+        }
+
+        // scan back one more, for app files
+        p--;
+        while(p > dent->d_name  &&  *p != '.') p--;
+        if( !strcmp(p,".nc.app.html") ) {
+          insert_entry(&app, dent->d_name, ".nc.app.html");
+        }
+      }
+    }
+  }
+
+  // Generate index files, sorted by short name
+  {
+    // sort
+    qsort(iface.ent,    iface.num,    sizeof(index_entry), index_entry_comparator_short);
+    qsort(comp.ent,     comp.num,     sizeof(index_entry), index_entry_comparator_short);
+    qsort(app.ent,      app.num,      sizeof(index_entry), index_entry_comparator_short);
+    qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_short);
+    
+    // index files    
+    print_index_file(NAV_INT,  SORT_FILE, &iface);
+    print_index_file(NAV_COMP, SORT_FILE, &comp);
+    print_index_file(NAV_APP,  SORT_FILE, &app);
+    print_index_file(NAV_ALL,  SORT_FILE, &allfiles);
+  }
+
+  // generate index files, sorted by long name
+  {
+    // sort
+    qsort(iface.ent,    iface.num,    sizeof(index_entry), index_entry_comparator_full);
+    qsort(comp.ent,     comp.num,     sizeof(index_entry), index_entry_comparator_full);
+    qsort(app.ent,      app.num,      sizeof(index_entry), index_entry_comparator_full);
+    qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_full);
+    
+    // index files    
+    print_index_file(NAV_INT,  SORT_PATH, &iface);
+    print_index_file(NAV_COMP, SORT_PATH, &comp);
+    print_index_file(NAV_APP,  SORT_PATH, &app);
+    print_index_file(NAV_ALL,  SORT_PATH, &allfiles);
+  }
+  
+
+  // hierarchical, top-level index file
+  qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_full);
+  print_hierarchical_index_file("index.html", &allfiles);
+  
+}
+
+
+
+//////////////////////////////////////////////////
+// Create whole-app description page
+//////////////////////////////////////////////////
+static void generate_app_page(const char *filename, cgraph cg) 
+{
+  char *appname, *p;
+  char *fname;
+  FILE *f;
+
+  // return if app file generation wasn't explicity requested
+  if( !is_app ) 
+    return;
+
+  // return, if the component is NULL
+  if( cg == NULL )
+    return;
+
+  // figure out the app name from the main file name
+  appname = doc_filename_with_ext(filename, "");
+  p = appname + strlen(appname) - 1;
+  while(p > appname  &&  *p != '.') p--;
+  *p = '\0';
+  while(p > appname  &&  *p != '.') p--;
+  if(*p == '.') p++;
+  appname = p;
+  
+
+  // generate the file
+  fname    = doc_filename_with_ext(filename, ".app.html");
+  f = open_outfile(fname); 
+
+  fprintf(f, "<html>\n");
+  fprintf(f, "<head><title>App: %s</title></head>\n", appname);
+  fprintf(f, "<body>\n");
+
+  print_navbar(f, NAV_OTHER, NULL, NULL);
+
+  fprintf(f, "<h1 align=\"center\">App: %s</h1>\n", appname);
+
+
+
+
+  print_cg_html(appname, filename, cg, TRUE);
+  fprintf(f, "<hr>Generated by <a href=\"../../../nesc/doc/nesdoc.html\">nesdoc</a><br>\n");
+  fprintf(f, "</body>\n");
+  fprintf(f, "</html>\n");
+
+  close_outfile(f);
+
+}
+
+
+//////////////////////////////////////////////////
+// Generate connection graph help page
+//////////////////////////////////////////////////
+#include "cg_help.c"
+static void generate_cg_help_page()
+{
+  FILE *f;
+
+  // open the gif file
+  f = fopen("cg_help.gif", "w");
+  if( !f ) {
+    warning("can't write to cg_help.gif - no help generated");
+    return;
+  }
+  fwrite(cg_help_gif, 1, sizeof(cg_help_gif), f);
+  fclose(f);
+
+
+  // open the HTML file
+  f = fopen("cg_help.html", "w");
+  if( !f ) {
+    warning("can't write to cg_help.gif - no help generated");
+    return;
+  }
+
+  //  markmark
+  fprintf(f, "<html>\n");
+  fprintf(f, "<head><title>Connection Graph Help</title></head>\n");
+  fprintf(f, "<body>\n");
+  print_navbar(f, NAV_OTHER, NULL, NULL);
+  fprintf(f, "<h1 align=\"center\">Connection Graph Help</h1>\n");
+
+  fprintf(f, "\n\
+<table border=\"0\" width=\"80%%\" align=\"center\">\n\
+<tr>\n\
+<td>\n\
+<img src=\"cg_help.gif\" border=\"0\" align=\"left\">\n\
+</td>\n\
+\n\
+<td>&nbsp;&nbsp;&nbsp;</td>\n\
+<td>\n\
+\n\
+<ul>\n\
+\n\
+<li><em>A</em> requires interface <em>I</em>, <em>B</em> provides <em>I</em>, and <em>A</em> and <em>B</em> are wired\n\
+together.<p>\n\
+\n\
+<li><em>C</em> and <em>D</em> both require or both provide <em>J</em>.  The direction of the\n\
+arrow indicates that the original wiring is \"<em>C = D</em>\".<p>\n\
+\n\
+<li><em>E</em> requires function <em>f</em>, and F provides function <em>f</em>.<p>\n\
+\n\
+</ul>\n\
+</td>\n\
+</tr>\n\
+</table>\n\
+<p>\n\
+\n\
+</body>\n\
+</html>\n\
+");
+  fclose(f);
+
+}
+
+
+//////////////////////////////////////////////////
+// Generate all docs
+//////////////////////////////////////////////////
+
+bool docs_requested(void)
+{
+  return docdir != NULL;
+}
+
+void generate_docs(const char *ofilename, cgraph cg)
+{
+  char *filename = rstrdup(doc_region, ofilename);
+
+  unixify_path(filename);
+
+  // if no docdir is specified, then the user didn't request doc generation
+  // Initialization
+  {
+    // create the region
+    init_doc_region();
+
+    // get the current working directory
+    assert(getcwd(original_wd, sizeof(original_wd)));
+
+    // set up dir info
+    find_currdir_prefix(original_wd);
+
+    // cd to the docdir 
+    {
+      char *pos=strchr(docdir, dirsep);
+      if(pos == docdir) pos=strchr(docdir+1, dirsep); // skip the first '/' of an absolute path
+      while(pos != NULL) {
+        *pos = '\0';
+
+#ifndef ENOMEDIUM
+       /* Ignore ENOMEDIUM on systems that don't have it */
+#define ENOMEDIUM EEXIST
+#endif
+
+        if(mkdir(docdir, 0755) != 0  &&  errno != EEXIST  &&  errno != ENOMEDIUM) {
+          perror("mkdir");
+          fatal("error making ancestor directory of docdir '%s'.  errno=%d\n", docdir,errno);
+        }
+        *pos = dirsep;
+        pos = strchr(pos+1, dirsep);
+      }
+    }
+    if(mkdir(docdir, 0755) != 0  &&  errno != EEXIST  &&  errno != ENOMEDIUM) {
+      perror("mkdir");
+      fatal("error making parent directory of docdir '%s'.  errno=%d\n", docdir,errno);
+    }
+    if(chdir(docdir) != 0) {
+      perror("chdir");
+      fatal("error changing directory to docdir '%s'\n", docdir);
+    }
+
+    // read the information cache
+    ic_read();
+  }
+
+  // generate the connection graph help file
+  generate_cg_help_page();
+
+
+  // update information cache with all loaded components
+  {
+    env_scanner scanner;
+    const char *name;
+    nesc_declaration decl;
+
+    env_scan(get_nesc_env(), &scanner);
+    while( env_next(&scanner, &name, (void **)&decl) )
+      ic_add_entry(decl);
+
+    // write the information cache
+    ic_write();
+  }
+
+
+  // walk through the list of all components, and generate docs
+  {
+    env_scanner scanner;
+    const char *name;
+    nesc_declaration cdecl;
+
+    if (flag_verbose) printf("\n    Generating component docs\n");
+    env_scan(get_nesc_env(), &scanner);
+    while( env_next(&scanner, &name, (void **)&cdecl) ) 
+      if (cdecl->kind == l_component) {
+       if (flag_verbose) printf("        %s\n", cdecl->name);
+       generate_component_html(cdecl);
+      }
+  }
+
+  // generate docs for all interfaces 
+  {
+    env_scanner scanner;
+    const char *name;
+    nesc_declaration idecl;
+
+    if (flag_verbose) printf("\n    Generating interface docs\n");
+    env_scan(get_nesc_env(), &scanner);
+    while( env_next(&scanner, &name, (void **)&idecl) )
+      if (idecl->kind == l_interface) {
+       if (flag_verbose) printf("        %s\n", idecl->name);
+       generate_interface_html(idecl);
+      }
+  }
+
+  // generate whole-app wiring page
+  generate_app_page(filename,cg);
+
+
+  // generate index files
+  generate_index_html();
+  
+
+  // cleanup
+  {
+    // kill the region
+    // NOTE: using the region this way makes this module non-reentrant
+    deleteregion(doc_region);
+    doc_region = NULL;
+
+    assert(chdir(original_wd) == 0);
+  }
+}
diff --git a/src/nesc-doc.h b/src/nesc-doc.h
new file mode 100644 (file)
index 0000000..238dcb7
--- /dev/null
@@ -0,0 +1,44 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 UC Berkeley
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DOC_H
+#define NESC_DOC_H
+
+#include "nesc-cg.h"
+
+
+/* set the output dir */
+void doc_set_outdir(const char *dir);
+
+/* Add a top level source directory */
+void doc_add_topdir(const char *dir);
+     
+/* Set the directory separator - used for cygwin? */
+void doc_set_dirsep(const char c);
+
+/* set the use_graphviz flag */
+void doc_use_graphviz(const bool use);
+
+bool docs_requested(void);
+
+/* actually generate docs */
+void generate_docs(const char *filename, cgraph cg);
+
+/* tell the doc generation to create the whole-app page */
+void doc_is_app(const bool val);
+
+#endif
diff --git a/src/nesc-dspec-int.h b/src/nesc-dspec-int.h
new file mode 100644 (file)
index 0000000..d03a409
--- /dev/null
@@ -0,0 +1,41 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DSPEC_INT_H
+#define NESC_DSPEC_INT_H
+
+/* Internal definitions for dump specification parsing */
+
+struct ndstype {
+  largest_int integer;
+  union {
+    const char *token;
+    nd_arg nd_arg;
+    nd_filter nd_filter;
+  };
+};
+
+#define YYSTYPE struct ndstype
+
+void nd_read(const char *str);
+void nderror(char *err);
+
+#include "nesc-dspec.tab.h"
+
+int ndlex(void);
+
+#endif
diff --git a/src/nesc-dspec.def b/src/nesc-dspec.def
new file mode 100644 (file)
index 0000000..da8f486
--- /dev/null
@@ -0,0 +1,60 @@
+;; -*- lisp -*-
+
+; This file is part of the nesC compiler.
+;    Copyright (C) 2004-2005 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+(deffield name "const char *" (init))
+(deffield str "const char *" (init))
+(deffield val largest_int (init))
+(deffield count int (init))
+(deffield args nd_arg (init tree))
+(deffield next nd_arg ())
+(deffield filter1 nd_filter (init tree))
+(deffield filter2 nd_filter (init tree))
+(deffield info "void *" ())
+(deffield filter_index int ())
+
+(deftype nd_option nil (name args count)
+  "the dump option NAME(ARGS).
+ARGS may be NULL
+COUNT is the number of elements in ARGS")
+
+(deftype nd_arg nil (next)
+  "supertype for arguments")
+
+(deftype nd_int nd_arg (val)
+  "an integer argument VAL")
+
+(deftype nd_token nd_arg (str)
+  "some token argument STR")
+
+(deftype nd_filter nd_arg ()
+  "a filter")
+
+(deftype ndf_and nd_filter (filter1 filter2)
+  "FILTER1 & FILTER2")
+
+(deftype ndf_or nd_filter (filter1 filter2)
+  "FILTER1 | FILTER2")
+
+(deftype ndf_not nd_filter (filter1)
+  "!FILTER1")
+
+(deftype ndf_op nd_filter (name args count info filter_index)
+  "the basic filter NAME(ARGS).
+COUNT is the number of elements in ARGS (>= 1)
+INFO can be used to save extra information (e.g., compiled regexp info)")
diff --git a/src/nesc-dspec.h b/src/nesc-dspec.h
new file mode 100644 (file)
index 0000000..c94f5a2
--- /dev/null
@@ -0,0 +1,35 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DSPEC_H
+#define NESC_DSPEC_H
+
+#include "ND_types.h"
+#include "ND_list_nd_arg.h"
+#include "ND_defs.h"
+
+nd_option nd_parse(const char *what);
+/* Effects: parses -fnesc-dump option argument 'what', 
+   Return: the corresponding dump tree (see nesc-dspec.def)
+*/
+
+const char *nd_tokenval(nd_arg arg);
+/* Requires: nd_arg is an nd_token
+   Returns: the token's string value
+*/
+
+#endif
diff --git a/src/nesc-dspec.l b/src/nesc-dspec.l
new file mode 100644 (file)
index 0000000..fae9a1d
--- /dev/null
@@ -0,0 +1,115 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Lexer for -fnesc-dump arguments (tokens are numbers, names (can be
+   arbitrary strings in "") and boolean operators */
+
+%option nounput
+
+%{
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-dspec.h"
+#include "nesc-dspec-int.h"
+
+/* We never wrap into another file */
+#define YY_SKIP_YYWRAP
+#define ndwrap() (1)
+
+#define YY_USE_PROTOS
+
+#undef YY_INPUT
+#define YY_INPUT(buf, result, max_size) \
+  { (result) = string_read((buf), (max_size)); }
+static int string_read(char *buf, int max_size);
+void nderror(char *err);
+
+%}
+
+DIGIT           [0-9]
+HEXDIGIT       [0-9a-fA-F]
+
+%%
+
+[ \t]          { }
+[,()|&!]       { return ndtext[0]; }
+-?({DIGIT}+|0[xX]{HEXDIGIT}+) {
+                 errno = 0;
+                 ndlval.integer = strtoll(ndtext, NULL, 0);
+                 if (errno)
+                   nderror("integer constant out of bounds.");
+                 return ND_INTEGER; 
+               }
+\"([^\\"]*(\\.)?)+\" {
+                 char *str = rstralloc(dump_region, strlen(ndtext));
+                 const char *text = ndtext + 1;
+
+                 ndlval.token = str;
+                 while (*text)
+                   {
+                     /* Shell-like \-processing: \ is preserved except
+                        in front of " and \ */
+                     if (*text == '\\' && (text[1] == '"' || text[1] == '\\'))
+                       text++;
+                     *str++ = *text++;
+                   }
+                 str[-1] = '\0';
+                 return ND_TOKEN;
+               }
+[^, \t()|&!]+  {
+                 ndlval.token = rstrdup(dump_region, ndtext);
+                 return ND_TOKEN;
+               }
+
+%%
+
+static YY_BUFFER_STATE mbuf;
+static const char *line;
+static int length, offset;
+
+void nd_read(const char *str)
+{
+  if (mbuf) 
+    nd_delete_buffer(mbuf);
+  mbuf = nd_create_buffer(stdin, YY_BUF_SIZE);
+  
+  nd_switch_to_buffer(mbuf);
+  line = str;
+  offset = 0;
+  length = strlen(line);
+}
+
+static int string_read(char *abuf, int max_size)
+{
+  int cnt;
+
+  cnt = max_size;
+  if (cnt > length - offset) cnt = length - offset;
+
+  memcpy(abuf, line + offset, cnt);
+  offset += cnt;
+
+  return cnt;
+}
+
+void nderror(char *err)
+{
+  error("dump option `%s': %s", line, err);
+}
diff --git a/src/nesc-dspec.tab.c b/src/nesc-dspec.tab.c
new file mode 100644 (file)
index 0000000..94c4b93
--- /dev/null
@@ -0,0 +1,1626 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse ndparse
+#define yylex   ndlex
+#define yyerror nderror
+#define yylval  ndlval
+#define yychar  ndchar
+#define yydebug nddebug
+#define yynerrs ndnerrs
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ND_TOKEN = 258,
+     ND_INTEGER = 259
+   };
+#endif
+/* Tokens.  */
+#define ND_TOKEN 258
+#define ND_INTEGER 259
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 29 "nesc-dspec.y"
+
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-dspec.h"
+#include "nesc-dspec-int.h"
+#include "nesc-dfilter.h"
+
+static nd_option opt;
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 132 "nesc-dspec.tab.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  4
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   26
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  11
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  7
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  16
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  28
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   259
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     7,     2,     2,     2,     2,     6,     2,
+       8,     9,     2,     2,    10,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     5,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,    10,    12,    13,    15,    19,    21,
+      23,    25,    27,    31,    35,    38,    42
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      12,     0,    -1,    13,    -1,    13,     8,    14,     9,    -1,
+       3,    -1,    -1,    15,    -1,    14,    10,    16,    -1,    16,
+      -1,     3,    -1,     4,    -1,    17,    -1,    17,     5,    17,
+      -1,    17,     6,    17,    -1,     7,    17,    -1,     8,    17,
+       9,    -1,     3,     8,    14,     9,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    52,    52,    53,    56,    59,    60,    64,    65,    69,
+      70,    71,    75,    76,    77,    78,    79
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "ND_TOKEN", "ND_INTEGER", "'|'", "'&'",
+  "'!'", "'('", "')'", "','", "$accept", "option", "name", "args", "args1",
+  "arg", "filter", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   124,    38,    33,    40,    41,
+      44
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    11,    12,    12,    13,    14,    14,    15,    15,    16,
+      16,    16,    17,    17,    17,    17,    17
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     4,     1,     0,     1,     3,     1,     1,
+       1,     1,     3,     3,     2,     3,     4
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     4,     0,     2,     1,     5,     9,    10,     0,     0,
+       0,     6,     8,    11,     5,     0,    14,     0,     3,     0,
+       0,     0,     0,    15,     7,    12,    13,    16
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     2,     3,    10,    11,    12,    13
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -9
+static const yytype_int8 yypact[] =
+{
+       2,    -9,    21,    14,    -9,    -1,    15,    -9,     1,     1,
+       6,    -9,    -9,    12,    -1,    15,    -9,     5,    -9,    -1,
+       1,     1,    10,    -9,    -9,    18,    -9,    -9
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+      -9,    -9,    -9,    11,    -9,     7,    -8
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+      16,    17,     6,     7,    15,     1,     8,     9,     8,     9,
+      20,    21,    25,    26,    23,    18,    19,    20,    21,    27,
+      19,     4,     5,    14,    21,    22,    24
+};
+
+static const yytype_uint8 yycheck[] =
+{
+       8,     9,     3,     4,     3,     3,     7,     8,     7,     8,
+       5,     6,    20,    21,     9,     9,    10,     5,     6,     9,
+      10,     0,     8,     8,     6,    14,    19
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     3,    12,    13,     0,     8,     3,     4,     7,     8,
+      14,    15,    16,    17,     8,     3,    17,    17,     9,    10,
+       5,     6,    14,     9,    16,    17,    17,     9
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+\f
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+#line 52 "nesc-dspec.y"
+    { opt = new_nd_option(dump_region, (yyvsp[(1) - (1)].token), NULL, 0); ;}
+    break;
+
+  case 3:
+#line 53 "nesc-dspec.y"
+    { opt = new_nd_option(dump_region, (yyvsp[(1) - (4)].token), (yyvsp[(3) - (4)].nd_arg), nd_arg_length((yyvsp[(3) - (4)].nd_arg))); ;}
+    break;
+
+  case 5:
+#line 59 "nesc-dspec.y"
+    { (yyval.nd_arg) = NULL; ;}
+    break;
+
+  case 7:
+#line 64 "nesc-dspec.y"
+    { (yyval.nd_arg) = nd_arg_chain((yyvsp[(1) - (3)].nd_arg), (yyvsp[(3) - (3)].nd_arg)); ;}
+    break;
+
+  case 9:
+#line 69 "nesc-dspec.y"
+    { (yyval.nd_arg) = CAST(nd_arg, new_nd_token(dump_region, (yyvsp[(1) - (1)].token))); ;}
+    break;
+
+  case 10:
+#line 70 "nesc-dspec.y"
+    { (yyval.nd_arg) = CAST(nd_arg, new_nd_int(dump_region, (yyvsp[(1) - (1)].integer))); ;}
+    break;
+
+  case 11:
+#line 71 "nesc-dspec.y"
+    { (yyval.nd_arg) = CAST(nd_arg, (yyvsp[(1) - (1)].nd_filter)); ;}
+    break;
+
+  case 12:
+#line 75 "nesc-dspec.y"
+    { (yyval.nd_filter) = CAST(nd_filter, new_ndf_or(dump_region, (yyvsp[(1) - (3)].nd_filter), (yyvsp[(3) - (3)].nd_filter))); ;}
+    break;
+
+  case 13:
+#line 76 "nesc-dspec.y"
+    { (yyval.nd_filter) = CAST(nd_filter, new_ndf_and(dump_region, (yyvsp[(1) - (3)].nd_filter), (yyvsp[(3) - (3)].nd_filter))); ;}
+    break;
+
+  case 14:
+#line 77 "nesc-dspec.y"
+    { (yyval.nd_filter) = CAST(nd_filter, new_ndf_not(dump_region, (yyvsp[(2) - (2)].nd_filter))); ;}
+    break;
+
+  case 15:
+#line 78 "nesc-dspec.y"
+    { (yyval.nd_filter) = (yyvsp[(2) - (3)].nd_filter); ;}
+    break;
+
+  case 16:
+#line 79 "nesc-dspec.y"
+    {
+      (yyval.nd_filter) = make_ndf_op(dump_region, (yyvsp[(1) - (4)].token), (yyvsp[(3) - (4)].nd_arg));
+    ;}
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 1393 "nesc-dspec.tab.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 84 "nesc-dspec.y"
+
+
+nd_option nd_parse(const char *what)
+{
+  opt = NULL;
+  nd_read(what);
+  if (ndparse())
+    return NULL;
+  return opt;
+}
+
+#include "ND_types.c"
+#include "ND_list_nd_arg.c"
+
+const char *nd_tokenval(nd_arg arg)
+{
+  return CAST(nd_token, arg)->str;
+}
+
+
diff --git a/src/nesc-dspec.tab.h b/src/nesc-dspec.tab.h
new file mode 100644 (file)
index 0000000..aee4cce
--- /dev/null
@@ -0,0 +1,61 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ND_TOKEN = 258,
+     ND_INTEGER = 259
+   };
+#endif
+/* Tokens.  */
+#define ND_TOKEN 258
+#define ND_INTEGER 259
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE ndlval;
+
diff --git a/src/nesc-dspec.y b/src/nesc-dspec.y
new file mode 100644 (file)
index 0000000..49078b8
--- /dev/null
@@ -0,0 +1,102 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Parser for -fnesc-dump option arguments. General forms are:
+     NAME
+     NAME(arguments)
+   where NAME describes a particular dump request (see nesc-dump.c)
+   and the optional arguments describe the request in more detail.
+
+   The arguments are a list of tokens (arbitrary strings), numbers and
+   filters (see nesc-dfilter.c). The meaning of these depends on the
+   dump request.
+*/
+
+%{
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-dspec.h"
+#include "nesc-dspec-int.h"
+#include "nesc-dfilter.h"
+
+static nd_option opt;
+%}
+
+%token <token> ND_TOKEN
+%token <integer> ND_INTEGER
+%type <token> name
+%type <nd_arg> args args1 arg
+%type <nd_filter> filter
+
+%left '|'
+%left '&'
+%nonassoc '!'
+
+%%
+
+option: 
+    name { opt = new_nd_option(dump_region, $1, NULL, 0); }
+  | name '(' args ')' { opt = new_nd_option(dump_region, $1, $3, nd_arg_length($3)); }
+  ;
+
+name: ND_TOKEN ;
+
+args:
+    /* empty */ { $$ = NULL; }
+  | args1
+  ;
+
+args1: 
+    args ',' arg { $$ = nd_arg_chain($1, $3); }
+  | arg
+  ;
+
+arg:
+    ND_TOKEN  { $$ = CAST(nd_arg, new_nd_token(dump_region, $1)); }
+  | ND_INTEGER { $$ = CAST(nd_arg, new_nd_int(dump_region, $1)); }
+  | filter { $$ = CAST(nd_arg, $1); }
+  ;
+
+filter:
+    filter '|' filter { $$ = CAST(nd_filter, new_ndf_or(dump_region, $1, $3)); }
+  | filter '&' filter { $$ = CAST(nd_filter, new_ndf_and(dump_region, $1, $3)); }
+  | '!' filter  { $$ = CAST(nd_filter, new_ndf_not(dump_region, $2)); }
+  | '(' filter ')' { $$ = $2; }
+  | ND_TOKEN '(' args ')' {
+      $$ = make_ndf_op(dump_region, $1, $3);
+    }
+  ;
+
+%%
+
+nd_option nd_parse(const char *what)
+{
+  opt = NULL;
+  nd_read(what);
+  if (ndparse())
+    return NULL;
+  return opt;
+}
+
+#include "ND_types.c"
+#include "ND_list_nd_arg.c"
+
+const char *nd_tokenval(nd_arg arg)
+{
+  return CAST(nd_token, arg)->str;
+}
+
diff --git a/src/nesc-dump.c b/src/nesc-dump.c
new file mode 100644 (file)
index 0000000..8cb4126
--- /dev/null
@@ -0,0 +1,844 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* The internal nesC dump information system.
+   Current allowable requests:
+     - components, interfaces, interfacedefs, tags:
+       extract lists of the specified internal objects
+       managed via the lists[] array (see below)
+       support filter arguments (see nesc-dfiler.c)
+     - referenced(<any of the lists above>):
+       implicitly dump any referenced item of the specified kind, e.g.,
+       referenced(interfacedefs) will dump all interface definitions referred
+       to from other XML elements
+     - wiring: dump wiring graph
+       wiring(functions) dumps the function-level graph (but this is currently
+       in a somewhat different form than the regular graph, so should probably
+       not be used)
+*/
+
+#include "parser.h"
+#include "nesc-dump.h"
+#include "nesc-env.h"
+#include "nesc-dspec.h"
+#include "nesc-dfilter.h"
+#include "nesc-xml.h"
+#include "nesc-cg.h"
+#include "semantics.h"
+#include "nesc-semantics.h"
+#include "nesc-component.h"
+#include "constants.h"
+
+/* The current set of dump requests */
+static dd_list/*nd_option*/ opts;
+region dump_region; /* for dump request allocations */
+static const char *dumpfile;
+
+/* What to output */
+enum { wiring_none, wiring_user, wiring_functions } wiring = wiring_none;
+bool configuration_wiring;
+bool component_declarations;
+
+/* More OOish stuff to manage dump requests of concrete nesC internal
+   objects (components, tags, etc). The lists array contains the currently
+   supported list.
+
+   Each of these concrete requests supports filters (and does not have any
+   other options).
+*/
+static bool tdecl_addfilter(void *entry);
+static bool ndecl_addfilter(void *entry);
+static bool ddecl_addfilter(void *entry);
+
+static void dump_component(void *entry);
+static void dump_ddecl_void(void *entry);
+static void dump_interfacedef(void *entry);
+static void dump_tag(void *entry);
+
+static void select_components(xml_list l, nd_option opt, dd_list comps);
+static void select_interfaces(xml_list l, nd_option opt, dd_list comps);
+static void select_variables(xml_list l, nd_option opt, dd_list comps);
+static void select_constants(xml_list l, nd_option opt, dd_list comps);
+static void select_functions(xml_list l, nd_option opt, dd_list comps);
+static void select_typedefs(xml_list l, nd_option opt, dd_list comps);
+static void select_interfacedefs(xml_list l, nd_option opt, dd_list comps);
+static void select_tags(xml_list l, nd_option opt, dd_list comps);
+
+/* lists */
+static struct {
+  const char *name;
+
+  /* Return TRUE if entry has not yet been added to its dump list */
+  bool (*addfilter)(void *entry);
+
+  /* Add entries selected by 'opt' to list 'l'. 'comps' is the list of the
+     program's components. */
+  void (*select)(xml_list l, nd_option opt, dd_list comps);
+
+  /* Dump a single entry in XML */
+  void (*dump)(void *entry);
+
+  /* The list of referenced items of, e.g., components is created by 
+     adding entries to a global variable (xl_components in this case) holding
+     an xml_list (see xml_list_add in nesc-xml.c). By default this variable
+     is NULL, so nothing happens. The 'referenced' dump request sets this
+     variable to point to the list l (see next field) to track, e.g.,
+     referenced components. The 'referenced' field contains the address of
+     this global variable. */
+  xml_list *referenced;
+
+  xml_list l; /* The list of entries of this kind */
+} lists[] = {
+  { "components", ndecl_addfilter, select_components, dump_component, &xl_components },
+  { "interfaces", ddecl_addfilter, select_interfaces, dump_ddecl_void, &xl_interfaces },
+  { "interfacedefs", ndecl_addfilter, select_interfacedefs, dump_interfacedef, &xl_interfacedefs },
+  { "tags", tdecl_addfilter, select_tags, dump_tag, &xl_tags },
+  { "variables", ddecl_addfilter, select_variables, dump_ddecl_void, &xl_variables },
+  { "constants", ddecl_addfilter, select_constants, dump_ddecl_void, &xl_constants },
+  { "functions", ddecl_addfilter, select_functions, dump_ddecl_void, &xl_functions },
+  { "typedefs", ddecl_addfilter, select_typedefs, dump_ddecl_void, &xl_typedefs }
+};
+
+#define NLISTS (sizeof lists / sizeof *lists)
+
+static bool tdecl_addfilter(void *entry)
+{
+  tag_declaration decl = entry;
+
+  if (decl->dumped)
+    return FALSE;
+  decl->dumped = TRUE;
+  return TRUE;
+}
+
+static bool ndecl_addfilter(void *entry)
+{
+  nesc_declaration decl = entry;
+
+  if (decl->dumped)
+    return FALSE;
+  decl->dumped = TRUE;
+  return TRUE;
+}
+
+static bool ddecl_addfilter(void *entry)
+{
+  data_declaration decl = entry;
+
+  if (decl->dumped)
+    return FALSE;
+  decl->dumped = TRUE;
+  return TRUE;
+}
+
+/* Actual XML dump functions. See doc/dump for the corresponding DSD schemas.
+   The dump functions are found partially here (for high-level elements),
+   in nesc-xml.c (low-level elements and basic functions) and types.c (for
+   types). */
+
+static void dump_attributes(dd_list/*nesc_attribute*/ attributes)
+{
+  dd_list_pos scan;
+
+  if (!attributes)
+    return;
+
+  dd_scan (scan, attributes)
+    {
+      nesc_attribute attr = DD_GET(nesc_attribute, scan);
+
+      indentedtag("attribute-value");
+      nxml_tdecl_ref(attr->tdecl);
+      nxml_value(attr->arg1->ivalue);
+      indentedtag_pop();
+    }
+}
+
+static void dump_parameters(const char *name, declaration parms);
+
+void dump_ddecl(data_declaration ddecl)
+{
+  switch (ddecl->kind)
+    {
+    case decl_variable: indentedtag_start("variable"); break;
+    case decl_constant:
+      indentedtag_start("constant");
+      if (ddecl->value) /* generic components args are constants, but have
+                          no value */
+       xml_attr_cval("cst", ddecl->value->cval);
+      break;
+    case decl_function:
+      indentedtag_start("function");
+      switch (ddecl->ftype)
+       {
+       case function_event:
+         xml_attr_noval("event");
+         xml_attr_int("provided", ddecl->defined);
+         break;
+       case function_command:
+         xml_attr_noval("command");
+         xml_attr_int("provided", ddecl->defined);
+         break;
+       default: break;
+       }
+      xml_attr_bool("safe", ddecl->safe);
+      break;
+    case decl_typedef: indentedtag_start("typedef"); break;
+    case decl_interface_ref:
+      indentedtag_start("interface");
+      xml_attr_int("provided", !ddecl->required);
+      break;
+    case decl_component_ref: indentedtag_start("internal-component"); break;
+    default: assert(0);
+    }
+  if (ddecl->name) /* Parameter names may be omitted in declarations */
+    xml_attr("name", ddecl->name);
+  xml_attr_ptr("ref", ddecl);
+  xml_attr_loc((ddecl->definition ? ddecl->definition : ddecl->ast)->location);
+  xml_tag_end();
+
+  /* Symbols have either a nesC container, a containing function, containing
+     interface or none of these (global symbols) */
+  xstartline();
+  nxml_doc(&ddecl->doc);
+
+  if (ddecl->container)
+    nxml_ndecl_ref(ddecl->container);
+  if (ddecl->container_function)
+    nxml_ddecl_ref(ddecl->container_function);
+
+  nxml_type(ddecl->type);
+  dump_attributes(ddecl->attributes);
+
+  switch (ddecl->kind)
+    {
+    case decl_interface_ref: 
+      {
+       env_scanner fns;
+       const char *fnname;
+       void *fnentry;
+       
+       nxml_instance(ddecl->itype);
+       if (ddecl->gparms)
+         nxml_typelist("interface-parameters", ddecl->gparms);
+
+       indentedtag("interface-functions");
+       interface_scan(ddecl, &fns);
+       while (env_next(&fns, &fnname, &fnentry))
+         {
+           xstartline();
+           nxml_ddecl_ref(fnentry);
+         }
+       indentedtag_pop();
+       break;
+      }
+    case decl_function:
+      {
+       if (ddecl->interface)
+         nxml_ddecl_ref(ddecl->interface);
+       /* Builtin functions have no real AST */
+       if (!is_error_decl(ddecl->ast))
+         {
+           function_declarator fdecl = ddecl_get_fdeclarator(ddecl);
+
+           if (fdecl->parms) /* absent in old-style functions */
+             dump_parameters("parameters", fdecl->parms);
+           if (fdecl->gparms)
+             dump_parameters("instance-parameters", fdecl->gparms);
+         }
+       break;
+      }
+    default: break;
+    }
+
+  indentedtag_pop();
+}
+
+static void dump_parameter(declaration parm)
+{
+  data_declaration pdecl = NULL;
+
+  /* (void) parameters have a NULL ddecl, so will be ignored */
+  if (is_data_decl(parm)) /* regular parameter */
+    {
+      data_decl data = CAST(data_decl, parm);
+      variable_decl vdecl = CAST(variable_decl, data->decls);
+
+      pdecl = vdecl->ddecl;
+    }
+  else if (is_ellipsis_decl(parm))
+    {
+      xml_qtag("varargs");
+      xnewline();
+    }
+  else if (is_type_parm_decl(parm))
+    {
+      type_parm_decl tp = CAST(type_parm_decl, parm);
+
+      pdecl = tp->ddecl;
+    }
+  if (pdecl)
+    dump_ddecl(pdecl);
+}
+
+static void dump_parameters(const char *name, declaration parms)
+{
+  declaration parm;
+
+  indentedtag(name);
+  scan_declaration (parm, parms)
+    dump_parameter(parm);
+  indentedtag_pop();
+}
+
+static void dump_endp(const char *tag, endp ep)
+{
+  xstartline();
+  xml_tag(tag);
+  nxml_ddecl_ref(ep->function ? ep->function : ep->interface);
+  if (ep->args_node)
+    nxml_arguments(ep->args_node);
+  xml_pop();
+}
+
+static void dump_wire(location l, gnode from, gnode to)
+{
+  endp fdata = NODE_GET(endp, from), tdata = NODE_GET(endp, to);
+
+  indentedtag_start("wire");
+  if (l)
+    xml_attr_loc(l);
+  xml_tag_end();
+  dump_endp("from", fdata);
+  dump_endp("to", tdata);
+  indentedtag_pop();
+}
+
+static void dump_wiring(cgraph cg)
+{
+  gnode from;
+  gedge wire;
+
+  /* Print a wiring graph */
+  indentedtag("wiring");
+  graph_scan_nodes (from, cgraph_graph(cg))
+    {
+      graph_scan_out (wire, from)
+       dump_wire(EDGE_GET(location, wire), from, graph_edge_to(wire));
+    }
+  indentedtag_pop();
+}
+
+static void dump_ndecl_doc(nesc_declaration ndecl)
+{
+  nxml_doc(&ndecl->doc);
+}
+
+static void do_wiring(int wiring, cgraph cg, cgraph userg)
+{
+  if (wiring == wiring_functions)
+    dump_wiring(cg);
+  if (wiring == wiring_user)
+    dump_wiring(userg);
+}
+
+static void dump_component(void *entry)
+{
+  nesc_declaration comp = entry;
+  /* Partially instantiated components (i.e., generic components created
+     inside generic configurations) need some special handling */
+  bool partially_instantiated = comp->original && comp->abstract;
+
+  indentedtag_start("component");
+  xml_attr("qname", comp->instance_name);
+  xml_attr_loc(comp->ast->location);
+  xml_attr_bool("abstract", comp->abstract);
+  xml_attr_bool("safe", comp->safe);
+  xml_tag_end();
+  xnewline();
+
+  dump_ndecl_doc(comp);
+
+  if (comp->original)
+    nxml_instance(comp);
+  else if (comp->abstract) /* not for partially instantiated components */
+    dump_parameters("parameters", comp->parameters);
+  xml_qtag(comp->configuration ? "configuration" : "module");
+  dump_attributes(comp->attributes);
+
+  if (comp->configuration && configuration_wiring && !partially_instantiated)
+    do_wiring(wiring_user, comp->connections, comp->user_connections);
+
+  if (component_declarations && !partially_instantiated)
+    {
+    }
+
+  indentedtag_pop();
+}
+
+static void dump_ddecl_void(void *entry)
+{
+  dump_ddecl(entry);
+}
+
+static void dump_interfacedef(void *entry)
+{
+  nesc_declaration idef = entry;
+  env_scanner fns;
+  const char *fnname;
+  void *fnentry;
+
+  indentedtag_start("interfacedef");
+  xml_attr("qname", idef->name);
+  xml_attr_loc(idef->ast->location);
+  xml_tag_end();
+
+  dump_ndecl_doc(idef);
+
+  if (idef->abstract)
+    dump_parameters("parameters", idef->parameters);
+  dump_attributes(idef->attributes);
+
+  env_scan(idef->env->id_env, &fns);
+  while (env_next(&fns, &fnname, &fnentry))
+    {
+      data_declaration fndecl = fnentry;
+
+      if (fndecl->kind != decl_magic_string)
+       dump_ddecl(fnentry);
+    }
+
+  indentedtag_pop();
+}
+
+static void dump_field(field_declaration field)
+{
+  indentedtag_start("field");
+  xml_attr("name", field->name);
+  xml_attr_ptr("ref", field); /* collapsing structs into their parent can 
+                                cause duplicate names */
+  xml_attr_bool("packed", field->packed);
+  xml_attr_cval("bit-offset", field->offset);
+  if (cval_istop(field->bitwidth))
+    xml_attr_cval("size", type_size_cc(field->type) ?
+                 type_size(field->type) : cval_top);
+  else
+    xml_attr_cval("bit-size", field->bitwidth);
+  xml_tag_end();
+  nxml_type(field->type);
+  dump_attributes(field->attributes);
+  indentedtag_pop();
+}
+
+static void dump_tag(void *entry)
+{
+  tag_declaration tdecl = entry;
+
+  indentedtag_start(tagkind_name(tdecl->kind));
+  if (tdecl->name)
+    xml_attr("name", tdecl->name);
+  if (tdecl->definition)
+    xml_attr_loc(tdecl->definition->location);
+  xml_attr_ptr("ref", tdecl);
+  xml_attr_bool("defined", tdecl->defined);
+  xml_attr_bool("packed", tdecl->packed);
+  xml_attr_bool("scoped", !!tdecl->container/* || tdecl->container_function*/);
+  xml_attr_cval("size", tdecl->size);
+  xml_attr_cval("alignment", tdecl->alignment);
+  xml_tag_end();
+  xnewline();
+
+  if (tdecl->container)
+    {
+      nxml_ndecl_ref(tdecl->container);
+      xnewline();
+    }
+#if 0
+  if (tdecl->containing_function)
+    {
+      nxml_ddecl_ref(tdecl->containing_function);
+      xnewline();
+    }
+#endif
+  dump_attributes(tdecl->attributes);
+
+  if (tdecl->kind == kind_enum_ref)
+    nxml_type(tdecl->reptype);
+  else
+    {
+      field_declaration fields;
+
+      for (fields = tdecl->fieldlist; fields; fields = fields->next)
+       if (fields->name) /* skip unnamed fields */
+         dump_field(fields);
+    }
+
+  indentedtag_pop();
+}
+
+static void dump_list(const char *name, xml_list l,
+                     void (*dump)(void *entry))
+{
+  dd_list latest = xml_list_latest(l);
+  dd_list_pos elem;
+
+  if (!latest)
+    return;
+
+  indentedtag(name);
+  dd_scan (elem, latest)
+    dump(DD_GET(void *, elem));
+  indentedtag_pop();
+}
+
+static void source_ndecl_iterate(int kind, int processkind, xml_list l, void (*process)(int kind, xml_list l, nesc_declaration ndecl))
+{
+  env_scanner scanenv;
+  const char *name;
+  void *val;
+
+  env_scan(get_nesc_env(), &scanenv);
+  while (env_next(&scanenv, &name, &val))
+    {
+      nesc_declaration ndecl = val;
+
+      if (ndecl->kind == kind)
+       process(processkind, l, ndecl);
+    }
+}
+
+static void add_ddecls_from_env(int kind, xml_list l, struct environment *env)
+{
+  env_scanner scan;
+  const char *name;
+  void *decl;
+
+  env_scan(env->id_env, &scan);
+  while (env_next(&scan, &name, &decl))
+    {
+      data_declaration ddecl = decl;
+
+      if (ddecl->kind == kind && dump_filter_ddecl(ddecl))
+       xml_list_add(l, ddecl);
+    }
+}
+
+static void add_ddecls_from_component(int kind, xml_list l, nesc_declaration comp)
+{
+  add_ddecls_from_env(kind, l, comp->env);
+  add_ddecls_from_env(kind, l, comp->impl->ienv);
+}
+
+static void select_ddecls(int kind, xml_list l, dd_list comps)
+{
+  dd_list_pos scan;
+
+  add_ddecls_from_env(kind, l, global_env);
+
+  if (comps)
+    dd_scan (scan, comps)
+      add_ddecls_from_component(kind, l, DD_GET(nesc_declaration, scan));
+
+  source_ndecl_iterate(l_component, kind, l, add_ddecls_from_component);
+}
+
+/* The toplevel requests supported by -fnesc-dump */
+/* ---------------------------------------------- */
+/* Most of these are handled via the lists system (see above) */
+
+static void add_component(int dummy, xml_list l, nesc_declaration comp)
+{
+  if (dump_filter_ndecl(comp))
+    xml_list_add(l, comp);
+}
+
+static void select_components(xml_list l, nd_option opt, dd_list comps)
+{
+  dd_list_pos scan_components;
+  nd_arg arg;
+
+  scan_nd_arg (arg, opt->args)
+    if (is_nd_token(arg))
+      {
+       const char *req = nd_tokenval(arg);
+
+       if (!strcmp(req, "wiring"))
+         configuration_wiring = TRUE;
+       else
+         error("unknown components option `%s'", req);
+      }
+    else
+      error("bad components option");
+
+  if (comps)
+    dd_scan (scan_components, comps)
+      add_component(0, l, DD_GET(nesc_declaration, scan_components));
+
+  source_ndecl_iterate(l_component, 0, l, add_component);
+}
+
+static void add_interfacedef(int dummy, xml_list l, nesc_declaration ndecl)
+{
+  if (dump_filter_ndecl(ndecl))
+    xml_list_add(l, ndecl);
+}
+
+static void select_interfacedefs(xml_list l, nd_option opt, dd_list comps)
+{
+  source_ndecl_iterate(l_interface, 0, l, add_interfacedef);
+}
+
+static void select_interfaces(xml_list l, nd_option opt, dd_list comps)
+{
+  select_ddecls(decl_interface_ref, l, comps);
+}
+
+static void select_variables(xml_list l, nd_option opt, dd_list comps)
+{
+  select_ddecls(decl_variable, l, comps);
+}
+
+static void select_constants(xml_list l, nd_option opt, dd_list comps)
+{
+  select_ddecls(decl_constant, l, comps);
+}
+
+static void select_functions(xml_list l, nd_option opt, dd_list comps)
+{
+  select_ddecls(decl_function, l, comps);
+}
+
+static void select_typedefs(xml_list l, nd_option opt, dd_list comps)
+{
+  select_ddecls(decl_typedef, l, comps);
+}
+
+static void add_tags_from_env(xml_list l, struct environment *env)
+{
+  env_scanner scan;
+  const char *name;
+  void *decl;
+
+  env_scan(env->tag_env, &scan);
+  while (env_next(&scan, &name, &decl))
+    {
+      tag_declaration tdecl = decl;
+
+      if (dump_filter_tdecl(tdecl))
+       xml_list_add(l, tdecl);
+    }
+}
+
+static void add_tags_from_component(int dummy, xml_list l, nesc_declaration comp)
+{
+  add_tags_from_env(l, comp->env);
+  add_tags_from_env(l, comp->impl->ienv);
+}
+
+static void select_tags(xml_list l, nd_option opt, dd_list comps)
+{
+  dd_list_pos scan_components;
+
+  add_tags_from_env(l, global_env);
+
+  if (comps)
+    dd_scan (scan_components, comps)
+      add_tags_from_component(0, l, DD_GET(nesc_declaration, scan_components));
+
+  source_ndecl_iterate(l_component, 0, l, add_tags_from_component);
+}
+
+static void select_wiring(nd_option opt, dd_list comps)
+{
+  nd_arg arg;
+
+  if (!comps)
+    {
+      error("wiring can only be requested on an actual program");
+      return;
+    }
+  wiring = wiring_user;
+
+  scan_nd_arg (arg, opt->args)
+    if (is_nd_token(arg))
+      {
+       const char *req = nd_tokenval(arg);
+
+       if (!strcmp(req, "functions"))
+         wiring = wiring_functions;
+       else
+         error("unknown wiring request for `%s'", req);
+      }
+    else
+      error("bad argument to wiring");
+}
+
+static void select_referenced(nd_option opt)
+{
+  nd_arg arg;
+
+  scan_nd_arg (arg, opt->args)
+    if (is_nd_token(arg))
+      {
+       const char *req = nd_tokenval(arg);
+       int i;
+
+       for (i = 0; i < NLISTS; i++)
+         if (!strcmp(req, lists[i].name))
+           {
+             *lists[i].referenced = lists[i].l;
+             break;
+           }
+       if (i == NLISTS)
+         error("unknown referenced request for `%s'", req);
+      }
+    else
+      error("bad argument to referenced");
+}
+
+void select_dump(char *what)
+{
+  nd_option opt;
+
+  if (!dump_region)
+    dump_region = permanent;
+
+  opt = nd_parse(what);
+
+  if (opt)
+    {
+#if 0
+      nd_arg arg;
+      int i = 0;
+
+      fprintf(stderr, "opt %s, %d args\n", opt->name, opt->count);
+      scan_nd_arg (arg, opt->args)
+       if (is_nd_int(arg))
+         fprintf(stderr, "  arg %d int %ld\n", ++i,
+                 (long)ND_CAST(nd_int, arg)->val);
+       else
+         fprintf(stderr, "  arg %d token %s\n", ++i,
+                 ND_CAST(nd_token, arg)->str);
+#endif
+
+      if (!opts)
+       opts = dd_new_list(dump_region);
+      dd_add_last(dump_region, opts, opt);
+    }
+}
+
+void select_dumpfile(char *name)
+{
+  dumpfile = name;
+}
+
+bool dump_selected(void)
+{
+  return opts != NULL;
+}
+
+static void do_lists(void)
+{
+  int i;
+
+  for (i = 0; i < NLISTS; i++)
+    dump_list(lists[i].name, lists[i].l, lists[i].dump);
+}
+
+void dump_info(nesc_declaration program, cgraph cg, cgraph userg,
+              dd_list modules, dd_list comps)
+{
+  dd_list_pos scan_opts;
+  bool list_change = FALSE;
+  int i;
+  FILE *dumpf = NULL;
+
+  for (i = 0; i < NLISTS; i++)
+    lists[i].l = new_xml_list(dump_region, &list_change, lists[i].addfilter);
+
+  /* Process options to find out what is selected */
+  dd_scan (scan_opts, opts)
+    {
+      nd_option opt = DD_GET(nd_option, scan_opts);
+      int i;
+
+      dump_set_filter(opt);
+
+      for (i = 0; i < NLISTS; i++)
+       if (!strcmp(opt->name, lists[i].name))
+         {
+           lists[i].select(lists[i].l, opt, comps);
+           break;
+         }
+
+      if (i < NLISTS)
+       ;
+      else if (!strcmp(opt->name, "wiring"))
+       select_wiring(opt, comps);
+      else if (!strcmp(opt->name, "referenced"))
+       select_referenced(opt);
+      else
+       error("unknown dump request `%s'", opt->name);
+    }
+
+  /* Repeatedly dump selected information (w/o performing any actual I/O).
+     This will collect all items selected by the 'referenced' request.
+     This repeated collection of items is supported by the xml_list type
+     (from nesc-xml.c) */
+  xml_start_dummy();
+  do_wiring(wiring, cg, userg);
+  for (;;)
+    {
+      do_lists();
+      if (!list_change)
+       break;
+      list_change = FALSE;
+    }
+
+  /* All information now collected. Reset the lists and dump the information
+     for real. */
+  for (i = 0; i < NLISTS; i++)
+    xml_list_reset(lists[i].l);
+
+  if (!dumpfile)
+    xml_start(stdout);
+  else
+    {
+      dumpf = fopen(dumpfile, "w");
+      if (!dumpf)
+       {
+         perror("couldn't create dump file");
+         return;
+       }
+      xml_start(dumpf);
+    }
+  indentedtag_start("nesc");
+  xml_attr("xmlns", "http://www.tinyos.net/nesC");
+  xml_tag_end(); xnewline();
+
+  do_wiring(wiring, cg, userg);
+  do_lists();
+
+  indentedtag_pop();
+  xml_end();
+
+  if (dumpf)
+    fclose(dumpf);
+
+  /* Nothing should have been added to the lists in the actual output pass */
+  assert(!list_change);
+}
diff --git a/src/nesc-dump.h b/src/nesc-dump.h
new file mode 100644 (file)
index 0000000..6d7f6c7
--- /dev/null
@@ -0,0 +1,50 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_DUMP_H
+#define NESC_DUMP_H
+
+/* The internal nesC dump information system. Dumps information in XML
+   according to the DSD schema which can be found in doc/dump (see the
+   README there for more details).
+
+   Java code to parse this schema into a programmer-friendly form is
+   in the net.tinyos.nesc.dump package (found under tools/java). */
+
+#include "nesc-cg.h"
+
+extern region dump_region;
+
+void select_dump(char *what);
+/* Effects: Register a new -fnesc-dump request 'what'
+     Errors are signaled through the usual 'error' call.
+ */
+
+void select_dumpfile(char *name);
+/* Effects: Select target file for dump
+ */
+
+bool dump_selected(void);
+/* Effects: Return true if any calls to select_dump where made.
+ */
+
+void dump_info(nesc_declaration program, cgraph cg, cgraph userg,
+              dd_list modules, dd_list components);
+/* Effects: Dump selected information.
+ */
+
+#endif
diff --git a/src/nesc-env.c b/src/nesc-env.c
new file mode 100644 (file)
index 0000000..afe4147
--- /dev/null
@@ -0,0 +1,113 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-env.h"
+#include "env.h"
+#include "nesc-interface.h"
+#include "nesc-component.h"
+#include "nesc-c.h"
+#include "nesc-decls.h"
+#include "nesc-semantics.h"
+#include "c-parse.h"
+#include "semantics.h"
+
+/* Top-level nesc environment. Keeps track of loaded interfaces and
+   components, loads them on demand */
+
+/* The environments for components and interfaces */
+static env nesc_env, nesc_c_env;
+
+
+/* hack, to give the doc generation an easy way to list interfaces & components */
+env get_nesc_env(void)
+{
+  return nesc_env;
+}
+
+void init_nesc_env(region r)
+{
+  nesc_env = new_env(r, NULL);
+  nesc_c_env = new_env(r, NULL);
+}
+
+nesc_declaration new_nesc_declaration(region r, source_language kind,
+                                     const char *name)
+{
+  nesc_declaration new = ralloc(r, struct nesc_declaration);
+
+  new->kind = kind;
+  new->name = new->instance_name = name;
+  if (kind == l_component && use_nido)
+    new->local_statics = dd_new_list(r);
+  new->env = new_environment(r, global_env, TRUE, FALSE);
+  new->safe = flag_default_safe;
+
+  return new;
+}
+
+void nesc_declare(nesc_declaration d)
+{
+  check_name(d->name);
+  env_add(nesc_env, d->name, d);
+}
+
+nesc_declaration nesc_lookup(const char *name)
+{
+  return env_lookup(nesc_env, name, FALSE);
+}
+
+void preload(source_language sl, location l, const char *name)
+{
+  if (!nesc_lookup(name))
+    load(sl, l, name, FALSE);
+}
+                                   
+nesc_declaration require(source_language sl, location l, const char *name)
+{
+  nesc_declaration d = nesc_lookup(name);
+
+  if (!d)
+    d = load(sl, l, name, FALSE);
+
+  if (sl != d->kind)
+    {
+      /* Make a dummy declaration to make everyone happy */
+      nesc_decl nd;
+
+      d = new_nesc_declaration(parse_region, sl, name);
+      nd = dummy_nesc_decl(l, d);
+
+      error_with_location(l, "expected %s `%s', but got %s %s",
+                         language_name(sl), name,
+                         d->kind == l_interface ? "an" : "a",
+                         language_name(d->kind));
+    }
+  return d;
+}
+                                   
+void require_c(location l, const char *name)
+{
+  static int dummy;
+  int *present = env_lookup(nesc_c_env, name, FALSE);
+
+  if (!present)
+    {
+      env_add(nesc_c_env, name, &dummy);
+      load_c(l, name, FALSE);
+    }
+}
diff --git a/src/nesc-env.h b/src/nesc-env.h
new file mode 100644 (file)
index 0000000..950dddf
--- /dev/null
@@ -0,0 +1,35 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_ENV_H
+#define NESC_ENV_H
+
+/* Top-level nesc environment. Keeps track of loaded interfaces and
+   components, loads them on demand */
+
+nesc_declaration new_nesc_declaration(region r, source_language kind,
+                                     const char *name);
+
+void init_nesc_env(region r);
+env get_nesc_env(void);
+void nesc_declare(nesc_declaration d);
+nesc_declaration nesc_lookup(const char *name);
+void preload(source_language sl, location l, const char *name);
+nesc_declaration require(source_language sl, location l, const char *name);
+void require_c(location l, const char *name);
+
+#endif
diff --git a/src/nesc-gcc.c b/src/nesc-gcc.c
new file mode 100644 (file)
index 0000000..ee5225b
--- /dev/null
@@ -0,0 +1,394 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-cpp.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include "nesc-paths.h"
+#include "machine.h"
+#include "flags.h"
+#include "semantics.h"
+#include "c-parse.h"
+
+#include "gcc-cpp.h"
+
+/* Some extra options for gcc */
+
+struct extra_option {
+  struct extra_option *next;
+  const char *opt;
+};
+
+static struct extra_option *extra_options;
+static int extra_options_count;
+
+void add_gcc_option(const char *option)
+{
+  struct extra_option *newopt;
+
+  newopt = ralloc(permanent, struct extra_option);
+  newopt->opt = option;
+  newopt->next = extra_options;
+  extra_options = newopt;
+  extra_options_count++;
+}
+
+static char *mktempfile(region r, const char *name)
+{
+  char *newname;
+
+#ifdef WIN32
+  if (!strncmp(name, "/tmp/", 5))
+    {
+      char *tmpenv = getenv("TMP");
+
+      if (!tmpenv)
+       {
+         fprintf(stderr, "You must define the TMP environment variable to point to a directory\n");
+         fprintf(stderr, "for temporary files.\n");
+         exit(2);
+       }
+      newname = rstralloc(r, strlen(tmpenv) + strlen(name));
+      sprintf(newname, "%s/%s", tmpenv, name + 5);
+    }
+  else
+    newname = rstrdup(r, name);
+  if (!mktemp(newname))
+    {
+      perror("couldn't create temporary file");
+      exit(2);
+    }
+
+#else
+  int fd;
+
+  newname = rstrdup(r, name);
+  fd = mkstemp(newname);
+
+  if (fd < 0)
+    {
+      perror("couldn't create temporary file");
+      exit(2);
+    }
+
+  close(fd);
+#endif
+
+  return newname;
+}
+
+#if defined(__CYGWIN__) || defined(WIN32)
+#include <process.h>
+#ifndef WIN32
+#include <sys/wait.h>
+#endif
+
+static bool safe_dup(int from, int to, int save)
+{
+  if (dup2(to, save) < 0)
+    return FALSE;
+
+  return dup2(from, to) >= 0;
+}
+
+static void dup_restore(int to, int save)
+{
+  if (dup2(save, to) < 0)
+    {
+      perror("internal problem - canot restore file descriptor");
+      exit(2);
+    }
+}
+
+static bool 
+exec_gcc(char *gcc_output_template, bool mkotmp, char **gcc_output_file,
+        char *gcc_error_template, bool mketmp, char **gcc_error_file, 
+        int nargs, void (*setargs)(void *data, const char **argv), void *data)
+{
+  int gcc_stat, res, outputfd, errorfd;
+  const char **argv;
+  static int tmpfd1 = -1, tmpfd2 = -1;
+  char *outputf, *errorf;
+
+  argv = alloca((nargs + 2) * sizeof *argv);
+  argv[0] = target_compiler;
+  setargs(data, argv + 1);
+
+  /* It's really spammy with this on */
+  if (flag_verbose >= 2)
+    {
+      int i;
+
+      for (i = 0; argv[i]; i++)
+       fprintf(stderr, "%s ", argv[i]);
+      fprintf(stderr, "\n");
+    }
+
+  if (tmpfd1 < 0 || tmpfd2 < 0)
+    {
+      tmpfd1 = open(DEVNULL, O_RDONLY);
+      tmpfd2 = open(DEVNULL, O_RDONLY);
+
+      if (tmpfd1 < 0 || tmpfd2 < 0)
+       {
+         fprintf(stderr, "Internal error (can't open " DEVNULL "!?)\n");
+         exit(2);
+       }
+    }
+
+  if (mkotmp)
+    outputf = mktempfile(permanent, gcc_output_template);
+  else
+    outputf = gcc_output_template;
+  *gcc_output_file = outputf;
+
+  if (mketmp)
+    errorf = mktempfile(permanent, gcc_error_template);
+  else
+    errorf = gcc_error_template;
+  *gcc_error_file = errorf;
+
+  outputfd = creat(outputf, 0666);
+  errorfd = creat(errorf, 0666);
+  
+  if (outputfd < 0 || errorfd < 0)
+    {
+      if (outputfd >= 0)
+       close(outputfd);
+      if (errorfd >= 0)
+       close(errorfd);
+
+      return FALSE;
+    }
+
+  if (!safe_dup(outputfd, 1, tmpfd1))
+    return FALSE;
+
+  if (!safe_dup(errorfd, 2, tmpfd2))
+    {
+      dup_restore(1, tmpfd1);
+      return FALSE;
+    }
+
+  close(outputfd);
+  close(errorfd);
+
+  gcc_stat = spawnvp(_P_WAIT, target_compiler, argv);
+#ifdef WIN32
+  res = gcc_stat == 0 ? 0 : 2;
+#else
+  if (WIFEXITED(gcc_stat))
+    res = WEXITSTATUS(gcc_stat);
+  else
+    res = 2;
+#endif
+
+  dup_restore(1, tmpfd1);
+  dup_restore(2, tmpfd2);
+
+  return res == 0;
+}
+#else
+#include <sys/wait.h>
+
+static bool 
+exec_gcc(char *gcc_output_template, bool mkotmp, char **gcc_output_file,
+        char *gcc_error_template, bool mketmp, char **gcc_error_file, 
+        int nargs, void (*setargs)(void *data, const char **argv), void *data)
+{
+  int gcc_pid, gcc_stat, res;
+  char *outputf, *errorf;
+
+  if (mkotmp)
+    outputf = mktempfile(permanent, gcc_output_template);
+  else
+    outputf = gcc_output_template;
+  *gcc_output_file = outputf;
+
+  if (mketmp)
+    errorf = mktempfile(permanent, gcc_error_template);
+  else
+    errorf = gcc_error_template;
+  *gcc_error_file = errorf;
+
+  if ((gcc_pid = fork()) == 0)
+    {
+      const char **argv;
+      int outputfd = creat(outputf, 0666);
+      int errorfd = creat(errorf, 0666);
+
+      argv = alloca((nargs + 2) * sizeof *argv);
+      argv[0] = target_compiler;
+      setargs(data, argv + 1);
+
+      /* It's really spammy with this on */
+      if (flag_verbose >= 2)
+       {
+         int i;
+
+         for (i = 0; argv[i]; i++)
+           fprintf(stderr, "%s ", argv[i]);
+         fprintf(stderr, "\n");
+       }
+
+      if (outputfd < 0 || dup2(outputfd, 1) < 0 ||
+         errorfd < 0 || dup2(errorfd, 2) < 0)
+       exit(2);
+
+      close(outputfd);
+      close(errorfd);
+
+      execvp(target_compiler, (char **)argv);
+      exit(2);
+    }
+
+  for (;;)
+    {
+      int pid = wait(&gcc_stat);
+
+      if (pid == -1)
+       {
+         if (errno == EINTR)
+           continue;
+         else
+           {
+             res = 2;
+             break;
+           }
+       }
+
+      if (pid == gcc_pid)
+       {
+         if (WIFEXITED(gcc_stat))
+           res = WEXITSTATUS(gcc_stat);
+         else
+           res = 2;
+         break;
+       }
+    }
+
+  return res == 0;
+}
+#endif
+
+#define LINELEN 160
+
+/* Make a copy of path with leading+trailing whitespace removed */
+static char *sanitize_path(region r, const char *path)
+{
+  char *pcopy; 
+  int l;
+
+  while (ISSPACE(*path))
+    path++;
+  pcopy = rstrdup(r, path);
+  l = strlen(pcopy);
+  while (l > 0 && ISSPACE(pcopy[l - 1]))
+    pcopy[--l] = '\0';
+
+  return pcopy;
+}
+
+static void gcc_preprocess_init_setargs(void *data, const char **argv)
+{
+  int opt = 0, i;
+  struct extra_option *extras;
+
+  argv[opt++] = "-v";
+  argv[opt++] = "-x";
+  argv[opt++] = "c";
+  if (flag_mingw_gcc)
+    argv[opt++] = "nul:";
+  else
+    argv[opt++] = "/dev/null";
+  argv[opt++] = "-E";
+  argv[opt++] = "-dM";
+  if (flag_nostdinc)
+    argv[opt++] = "-nostdinc";
+
+  /* The saved options are reversed */
+  for (extras = extra_options, i = extra_options_count; extras;
+       extras = extras->next)
+    argv[opt + --i] = extras->opt;
+  opt += extra_options_count;
+
+  argv[opt++] = NULL;
+}
+
+static char *gcc_builtin_macros_file;
+
+static void gcc_cpp_cleanup(void)
+{
+  if (gcc_builtin_macros_file)
+    unlink(gcc_builtin_macros_file);
+}
+
+const char *gcc_global_cpp_init(void)
+{
+  static char tbuiltins[] = "/tmp/nesccppbXXXXXX";
+  static char tincludes[] = "/tmp/nesccppiXXXXXX";
+  char *includes;
+  FILE *incf;
+  char line[LINELEN];
+  bool quote_includes = FALSE, bracket_includes = FALSE;
+
+  atexit(gcc_cpp_cleanup);
+
+  /* Execute gcc to get builtin macros and include search path */
+  if (!exec_gcc(tbuiltins, TRUE, &gcc_builtin_macros_file,
+               tincludes, TRUE, &includes, 
+               7 + extra_options_count, gcc_preprocess_init_setargs, NULL))
+    return NULL;
+
+  /* Read gcc error output to get search path */
+  incf = fopen(includes, "r");
+  if (!incf)
+    {
+      unlink(includes);
+      return NULL;
+    }
+
+  while (fgets(line, LINELEN - 1, incf))
+    {
+      if (!strncmp(line, "#include \"...\"", 14))
+       quote_includes = TRUE;
+      else if (!strncmp(line, "#include <...>", 14))
+       bracket_includes = TRUE;
+      else if (!strncmp(line, "End of search list.", 19))
+       break;
+      else if (bracket_includes)
+       add_nesc_dir(sanitize_path(permanent, line), CHAIN_SYSTEM);
+      else if (quote_includes)
+       add_nesc_dir(sanitize_path(permanent, line), CHAIN_QUOTE);
+    }
+  fclose(incf);
+  unlink(includes);
+
+  return gcc_builtin_macros_file;
+}
+
+void gcc_save_machine_options(const char *opt)
+{
+  if (opt[1] == 'm')
+    add_gcc_option(opt);
+}
+
diff --git a/src/nesc-gcc.h b/src/nesc-gcc.h
new file mode 100644 (file)
index 0000000..703e1c0
--- /dev/null
@@ -0,0 +1,25 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002-2008 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_GCC_H
+#define NESC_GCC_H
+
+const char *gcc_global_cpp_init(void);
+void add_gcc_option(const char *option);
+void gcc_save_machine_options(const char *opt);
+
+#endif
diff --git a/src/nesc-generate.c b/src/nesc-generate.c
new file mode 100644 (file)
index 0000000..890dd1a
--- /dev/null
@@ -0,0 +1,1379 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "c-parse.h"
+#include "nesc-generate.h"
+#include "nesc-inline.h"
+#include "nesc-component.h"
+#include "nesc-semantics.h"
+#include "nesc-c.h"
+#include "unparse.h"
+#include "AST_utils.h"
+#include "edit.h"
+#include "semantics.h"
+#include "constants.h"
+#include "nesc-concurrency.h"
+#include "nesc-uses.h"
+#include "nesc-network.h"
+#include "nesc-atomic.h"
+#include "nesc-cpp.h"
+
+static void prt_nesc_function_hdr(data_declaration fn_decl,
+                                 psd_options options)
+/* Effects: prints the C function declaration for fn_decl
+*/
+{
+  /* We print the declaration from the interface rather than that of fn_decl
+     itself, as this latter may use not-yet-defined typedefs.
+     prt_declarator will use the name from fn_decl in its output. */
+  variable_decl ifn_vd = CAST(variable_decl, fn_decl->ast);
+  data_decl fn_dd = CAST(data_decl, ifn_vd->parent);
+  psd_options opts;
+  function_declarator fd;
+  asttype ret;
+
+  prt_diff_info(fn_decl);
+  set_location(fn_dd->location);
+  if (!is_binary_component(fn_decl->container->impl))
+    output("static ");
+
+  /* Functions returning a network type should return the base type
+     instead */
+  if (is_function_declarator(ifn_vd->declarator))
+    opts = psd_rewrite_nxbase;
+  else
+    opts = 0;
+  options |= psd_rename_parameters;
+
+  fd = get_fdeclarator(ifn_vd->declarator);
+  /* Handle nesdoc-overridden return type */
+  if (fd && (ret = fd->return_type))
+    {
+      prt_attribute_elements(fn_dd->modifiers);
+      prt_type_elements(ret->qualifiers, opts);
+      prt_declarator(ret->declarator, NULL, ifn_vd->attributes, fn_decl,
+                    options | psd_print_ddecl_fdeclarator);
+    }
+  else
+    {
+      prt_type_elements(fn_dd->modifiers, opts);
+      prt_declarator(ifn_vd->declarator, NULL, ifn_vd->attributes, fn_decl, 
+                    options);
+    }
+}
+
+void prt_nesc_function_declaration(data_declaration fndecl, void *data)
+{
+  if (fndecl->definition && fndecl->isused && !fndecl->suppress_definition)
+    {
+      prt_nesc_function_hdr(fndecl, psd_print_default);
+      outputln(";");
+    }
+}
+
+void prt_nesc_function_declarations(nesc_declaration mod)
+{
+  component_functions_iterate(mod, prt_nesc_function_declaration, NULL);
+}
+
+/* A description of the target functions a used function is connected to */
+typedef struct full_connection
+{
+  endp ep;
+  expression cond;
+  expression args;
+} *full_connection;
+
+
+struct connections
+{
+  /* Connection being sought */
+  region r;
+  cgraph cg;
+  data_declaration called;
+
+  /* the list of targets which are called generically (with generic arguments
+     passed through unchanged). NULL if 'called' is not generic.
+     Both 'cond' and 'args' are NULL for generic_calls */
+  dd_list/*<full_connection>*/ generic_calls; 
+
+  /* normal_calls is the list of all other targets.
+
+     If 'called' is generic, 'cond' is the expression list that must match
+     the generic parameters of 'called' for the call to 'ep' to
+     take place. 'args' is the expression list to add to the arguments
+     if 'ep' is generic. */
+  dd_list/*<full_connection>*/ normal_calls;
+
+  /* The combiner function used, if any */
+  data_declaration combiner;
+};
+
+static full_connection new_full_connection(region r, endp ep, expression cond,
+                                expression args)
+{
+  full_connection c = ralloc(r, struct full_connection);
+
+  c->ep = ep;
+  c->cond = cond;
+  c->args = args;
+
+  return c;
+}
+
+static type function_return_type(data_declaration fndecl)
+{
+  return type_function_return_type(get_actual_function_type(fndecl->type));
+}
+
+void prt_ncf_header(struct connections *c, type return_type)
+{
+  if (c->called->makeinline && flag_no_inline < 2)
+    output("inline ");
+  prt_nesc_function_hdr(c->called, 0);
+  outputln("{");
+  indent();
+  if (!type_void(return_type))
+    {
+      prt_data_decl(build_declaration(parse_region, NULL, return_type, "result", NULL, NULL));
+      newline();
+    }
+}
+
+void prt_ncf_trailer(type return_type)
+{
+  if (!type_void(return_type))
+    {
+      newline();
+      outputln("return result;");
+    }
+  unindent();
+  outputln("}");
+}
+
+static bool prt_arguments(declaration parms, bool first, bool rename)
+/* Effects: prints argument list composed of the variables declared in 'parms'.
+     'first' must be TRUE iff no arguments have yet been printed.
+   Returns: TRUE iff 'first' and no arguments printed
+*/
+{
+  declaration parm;
+
+  scan_declaration (parm, parms)
+    {
+      /* Not supporting ... here for now. Fix requires different approach */
+      data_decl dd = CAST(data_decl, parm);
+      variable_decl vd = CAST(variable_decl, dd->decls);
+         
+      if (!vd->ddecl) /* empty (void) parameter list */
+       break;
+
+      if (!first)
+       output(", ");
+      first = FALSE;
+
+      if (rename || !vd->ddecl->name)
+       output("arg_%p", vd->ddecl);
+      else
+       output((char *)vd->ddecl->name);
+    }
+  return first;
+}
+
+void prt_ncf_direct_call(struct connections *c,
+                        full_connection ccall,
+                        bool first_call,
+                        psd_options options,
+                        type return_type,
+                        function_declarator called_fd)
+/* Effects: prints call to 'calls' in a connection function.
+     Assigns result if last_call is TRUE.
+*/
+{
+  bool first_arg = TRUE;
+  data_declaration combiner = type_combiner(return_type);
+  bool calling_combiner = FALSE;
+
+  if (!type_void(return_type))
+    {
+      output("result = ");
+
+      /* Combine w/ the combiner on subsequent calls */
+      if (!first_call && combiner)
+       {
+         output("%s(result, ", combiner->name);
+         calling_combiner = TRUE;
+       }
+    }
+
+  prt_ddecl_full_name(ccall->ep->function, options);
+  output("(");
+  if (ccall->ep->function->gparms)
+    {
+      if (ccall->args)
+       {
+         /* Non-generic calling generic, add arguments */
+         prt_expressions(ccall->args, first_arg);
+         first_arg = FALSE;
+       }
+      else
+       {
+         /* Generic calling generic, pass arguments through */
+         first_arg = prt_arguments(ddecl_get_gparms(c->called), first_arg, TRUE);
+       }
+    }
+  else
+    assert(!ccall->args);
+
+  prt_arguments(called_fd->parms, first_arg, FALSE);
+
+  if (calling_combiner)
+    output(")");
+
+  outputln(");");
+}
+
+void prt_ncf_default_call(struct connections *c,
+                         type return_type,
+                         function_declarator called_fd)
+{
+  struct full_connection default_target;
+  struct endp default_ep;
+
+  default_target.ep = &default_ep;
+  default_target.cond = default_target.args = NULL;
+  default_ep.function = c->called;
+
+  prt_ncf_direct_call(c, &default_target, TRUE, psd_print_default,
+                     return_type, called_fd);
+}
+
+bool prt_ncf_direct_calls(struct connections *c,
+                         dd_list/*<full_connection>*/ calls,
+                         type return_type)
+/* Effects: prints calls to 'calls' in a connection function.
+*/
+{
+  dd_list_pos call;
+  bool first_call = TRUE;
+  function_declarator called_fd = ddecl_get_fdeclarator(c->called);
+
+  dd_scan (call, calls)
+    {
+      full_connection ccall = DD_GET(full_connection, call);
+
+      assert(!ccall->cond);
+
+      prt_ncf_direct_call(c, ccall, first_call, 0, return_type, called_fd);
+      first_call = FALSE;
+    }
+
+  return first_call;
+}
+
+static int constant_expression_list_compare(expression arg1, expression arg2)
+{
+  while (arg1)
+    {
+      largest_int uval1, uval2;
+
+      uval1 = cval_sint_value(arg1->cst->cval);
+      uval2 = cval_sint_value(arg2->cst->cval);
+
+      /* Can't use - as might overflow and mod down to 0 */
+      if (uval1 < uval2)
+       return -1;
+      else if (uval1 > uval2)
+       return 1;
+
+      arg1 = CAST(expression, arg1->next);
+      arg2 = CAST(expression, arg2->next);
+    }
+  assert(!arg2);
+
+  return 0;
+}
+
+static int condition_compare(const void *p1, const void *p2)
+{
+ struct full_connection *const *c1 = p1, *const *c2 = p2;
+
+  return constant_expression_list_compare((*c1)->cond, (*c2)->cond);
+}
+
+static void prt_ncf_condition(struct connections *c, expression cond)
+{
+  declaration gparm;
+  bool first = TRUE;
+
+  scan_declaration (gparm, ddecl_get_gparms(c->called))
+    {
+      data_decl dd = CAST(data_decl, gparm);
+      variable_decl vd = CAST(variable_decl, dd->decls);
+         
+      if (first)
+       output("if (");
+      else
+       output(" && ");
+      first = FALSE;
+
+      output("arg_%p == ", vd->ddecl);
+      prt_expression(cond, P_REL);
+
+      cond = CAST(expression, cond->next);
+    }
+  output(") ");
+}
+
+static void prt_ncf_conditional_calls(struct connections *c, bool first_call, type return_type)
+{
+  dd_list_pos call;
+  int i, j, ncalls = dd_length(c->normal_calls);
+  full_connection *cond_eps =
+    rarrayalloc(c->r, ncalls, full_connection);
+  function_declarator called_fd = ddecl_get_fdeclarator(c->called);
+  bool one_arg = FALSE;
+
+  /* No work to do */
+  if (ncalls == 0 && !dd_is_empty(c->generic_calls))
+    return;
+
+  /* Sort calls so we can find connections with the same conditions */
+  i = 0;
+  dd_scan (call, c->normal_calls)
+    cond_eps[i++] = DD_GET(full_connection, call);
+  qsort(cond_eps, ncalls, sizeof(full_connection), condition_compare);
+
+  if (ncalls > 0 && !cond_eps[0]->cond->next)
+    {
+      /* use switch rather than cascaded ifs (gcc generate better code) */
+      one_arg = TRUE;
+      output("switch (");
+      prt_arguments(ddecl_get_gparms(c->called), TRUE, TRUE);
+      outputln(") {");
+      indent();
+    }
+
+  /* output the calls */
+  i = 0;
+  while (i < ncalls)
+    {
+      expression cond = cond_eps[i]->cond;
+      bool first_cond_call = first_call;
+
+      /* output latest condition */
+      if (one_arg)
+       {
+         output("case ");
+         prt_expression(cond, P_ASSIGN);
+         outputln(":");
+       }
+      else
+       {
+         if (i != 0)
+           output("else ");
+         prt_ncf_condition(c, cond);
+         outputln("{");
+       }
+      indent();
+
+      /* find last target with same condition */
+      j = i;
+      while (++j < ncalls && condition_compare(&cond_eps[i], &cond_eps[j]) == 0)
+       ;
+
+      /* print them, setting result for the last one */
+      while (i < j)
+       {
+         prt_ncf_direct_call(c, cond_eps[i], first_cond_call, 0,
+                             return_type, called_fd);
+         first_cond_call = FALSE;
+         i++;
+       }
+       
+      if (one_arg)
+       outputln("break;");
+      unindent();
+      if (!one_arg)
+       outputln("}");
+    }
+  /* output call to default if there are no non-conditional calls */
+  if (first_call)
+    {
+      if (ncalls > 0)
+       {
+         if (one_arg)
+           outputln("default:");
+         else
+           outputln("else");
+       }
+      indent();
+      prt_ncf_default_call(c, return_type, called_fd);
+      unindent();
+      if (ncalls > 0 && one_arg)
+       {
+         outputln("  break;");
+         outputln("}");
+         unindent();
+       }
+    }
+  else if (one_arg)
+    {
+      unindent();
+      outputln("}");
+    }
+}
+
+static void prt_nesc_connection_function(struct connections *c)
+{
+  type return_type = function_return_type(c->called);
+
+  set_fixed_location(c->called->ast->location);
+
+  if (type_network_base_type(return_type))
+    return_type = type_network_platform_type(return_type);
+
+  prt_ncf_header(c, return_type);
+
+  if (c->called->gparms)
+    {
+      bool first_call;
+
+      first_call = prt_ncf_direct_calls(c, c->generic_calls, return_type);
+      prt_ncf_conditional_calls(c, first_call, return_type);
+    }
+  else
+    {
+      if (dd_is_empty(c->normal_calls))
+       prt_ncf_default_call(c, return_type,
+                            ddecl_get_fdeclarator(c->called));
+      else
+       prt_ncf_direct_calls(c, c->normal_calls, return_type);
+    }
+
+  prt_ncf_trailer(return_type);
+
+  clear_fixed_location();
+}
+
+void prt_nesc_called_function_hdr(data_declaration fndecl, void *data)
+{
+  if (!(fndecl->defined || fndecl->uncallable) && fndecl->isused)
+    {
+      prt_nesc_function_hdr(fndecl, 0);
+      outputln(";");
+    }
+  /* This is a handy place to check that all binary entry points are
+     callable */
+  if (!fndecl->defined && fndecl->uncallable &&
+      is_binary_component(fndecl->container->impl))
+    error("binary entry point %s%s%s.%s is not fully wired",
+         fndecl->container->instance_name, 
+         fndecl->interface ? "." : "",
+         fndecl->interface ? fndecl->interface->name : "",
+         fndecl->name);
+}
+
+void prt_nesc_called_function_headers(cgraph cg, nesc_declaration mod)
+{
+  component_functions_iterate(mod, prt_nesc_called_function_hdr, NULL);
+}
+
+void prt_nesc_module(cgraph cg, nesc_declaration mod)
+{
+  prt_nesc_called_function_headers(cg, mod);
+
+  if (is_binary_component(mod->impl))
+    return;
+
+  prt_toplevel_declarations(CAST(module, mod->impl)->decls);
+
+  /* Make local static variables gloabal when nido is used.
+     Note: this raises several issues (aka problems):
+     - local static variables are named mod$fn$x rather than just x
+       (mildly confusing when debugging)
+     - the generated code will have errors (or worse, incorrect 
+       behaviour) if the local static declaration relied on local
+       declarations inside fn (e.g., typedefs, enums, structs).
+       There's no really nice fix to this except renaming and
+       extracting all such entities (maybe this can be done when
+       we have our own version of gdb and preserving symbol names
+       is less important)
+   */
+  if (use_nido)
+    {
+      dd_list_pos scan;
+
+      dd_scan (scan, mod->local_statics)
+       {
+         data_declaration localsvar = DD_GET(data_declaration, scan);
+         variable_decl localsvd;
+         data_decl localsdd;
+
+         if (!localsvar->isused)
+           continue;
+
+         localsvd = CAST(variable_decl, localsvar->ast);
+         localsdd = CAST(data_decl, localsvd->parent);
+         /* Note: we don't print the elements with pte_duplicate as we
+            don't (easily) know here if the elements will be printed
+            several times. If the type elements define a new type we most
+            likely have a problem anyway (see discussion above) */
+         prt_variable_decl(localsdd->modifiers, localsvd, 0);
+         outputln(";");
+       }
+    }
+}
+
+static bool find_reachable_functions(struct connections *c, gnode n,
+                                    expression gcond, expression gargs)
+{
+  endp ep = NODE_GET(endp, n);
+
+  if (ep->args_node)
+    {
+      /* First set of arguments is a condition if 'called' is generic */
+      if (c->called->gparms && !gcond)
+       gcond = ep->args_node;
+      else if (gargs)
+       {
+         /* We already have some arguments, so this is a condition again.
+            If the condition doesn't match gargs, then the call is
+            filtered out. If they do match, we set gargs to null (we're
+            back to a non-parameterised call) */
+         if (constant_expression_list_compare(gargs, ep->args_node) != 0)
+           return FALSE;
+         gargs = NULL;
+       }
+      else
+       {
+         assert(!gargs);
+         gargs = ep->args_node;
+       }
+    }
+  if (graph_node_markedp(n))
+    return TRUE;
+  else if (!ep->args_node && ep->function->defined &&
+          !ep->function->container->configuration)
+    {
+      full_connection target = new_full_connection(c->r, ep, gcond, gargs);
+
+      assert(!graph_first_edge_out(n));
+
+      dd_add_last(c->r, 
+                 c->called->gparms && !gcond ?
+                   c->generic_calls : c->normal_calls, 
+                 target);
+    }
+  else
+    {
+      gedge out;
+
+      graph_mark_node(n);
+      graph_scan_out (out, n)
+       if (find_reachable_functions(c, graph_edge_to(out), gcond, gargs))
+         return TRUE;
+      graph_unmark_node(n);
+    }
+  return FALSE;
+}
+
+static void find_connected_functions(struct connections *c)
+{
+  gnode called_fn_node;
+
+  graph_clear_all_marks(cgraph_graph(c->cg));
+  called_fn_node = fn_lookup(c->cg, c->called);
+  assert(!graph_first_edge_in(called_fn_node));
+  if (find_reachable_functions(c, called_fn_node, NULL, NULL))
+    error_with_location(c->called->ast->location,
+                       "cycle in configuration (for %s%s%s.%s)",
+                       c->called->container->name,
+                       c->called->interface ? "." : "",
+                       c->called->interface ? c->called->interface->name : "",
+                       c->called->name);
+}
+
+static void combine_warning(struct connections *c)
+{
+  if (warn_no_combiner)
+    {
+      /* Warnings to be enabled when result_t gets defined correctly */
+      if (c->called->interface)
+       nesc_warning("calls to %s.%s in %s fan out, but there is no combine function specified for the return type",
+                    c->called->interface->name,
+                    c->called->name,
+                    c->called->container->name);
+      else
+       nesc_warning("calls to %s in %s fan out, but there is no combine function specified for the return type" ,
+                    c->called->name, c->called->container->name);
+    }
+}
+
+static bool combiner_used;
+
+static bool cicn_direct_calls(dd_list/*<full_connection>*/ calls)
+{
+  dd_list_pos first = dd_first(calls);
+
+  if (dd_is_end(first))
+    return TRUE;
+
+  if (!dd_is_end(dd_next(first)))
+    combiner_used = TRUE;
+
+  return FALSE;
+}
+
+static void cicn_conditional_calls(struct connections *c, bool first_call)
+{
+  dd_list_pos call;
+  int i, j, ncalls = dd_length(c->normal_calls);
+  full_connection *cond_eps =
+    rarrayalloc(c->r, ncalls, full_connection);
+
+  /* Sort calls so we can find connections with the same conditions */
+  i = 0;
+  dd_scan (call, c->normal_calls)
+    cond_eps[i++] = DD_GET(full_connection, call);
+  qsort(cond_eps, ncalls, sizeof(full_connection), condition_compare);
+
+  /* output the calls */
+  i = 0;
+  while (i < ncalls)
+    {
+      /* find last target with same condition */
+      j = i;
+      while (++j < ncalls && condition_compare(&cond_eps[i], &cond_eps[j]) == 0)
+       ;
+
+      if (i + first_call < j)
+       combiner_used = TRUE;
+      i = j;
+    }
+}
+
+static void check_if_combiner_needed(struct connections *c)
+{
+  /* To see if a combiner is needed, we follow (a simplified form of) the
+     logic used in printing the connection function (see
+     prt_nesc_connection_function) */
+  type return_type = function_return_type(c->called);
+
+  if (type_void(return_type)) /* No combiner needed */
+    return;
+
+  combiner_used = FALSE;
+
+  if (c->called->gparms)
+    {
+      bool first_call;
+
+      first_call = cicn_direct_calls(c->generic_calls);
+      cicn_conditional_calls(c, first_call);
+    }
+  else
+    cicn_direct_calls(c->normal_calls);
+
+  if (combiner_used)
+    {
+      c->combiner = type_combiner(return_type);
+      if (!c->combiner)
+       combine_warning(c);
+    }
+}
+
+void find_function_connections(data_declaration fndecl, void *data)
+{
+  cgraph cg = data;
+
+  if (!fndecl->defined)
+    {
+      region r = parse_region;
+      struct connections *connections;
+
+      fndecl->connections = connections = ralloc(r, struct connections);
+      connections->r = r;
+      connections->cg = cg;
+      connections->called = fndecl;
+
+      connections->generic_calls = dd_new_list(r);
+      connections->normal_calls = dd_new_list(r);
+
+      find_connected_functions(connections);
+
+      /* a function is uncallable if it has no default definition and
+          non-generic: no connections
+          generic: no generic connections
+      */
+      if (!(fndecl->definition ||
+           !dd_is_empty(connections->generic_calls) ||
+           (!fndecl->gparms && !dd_is_empty(connections->normal_calls))))
+       fndecl->uncallable = TRUE;
+      else
+       fndecl->suppress_definition =
+         !dd_is_empty(fndecl->gparms ? connections->generic_calls :
+                      connections->normal_calls);
+
+      check_if_combiner_needed(connections);
+    }
+}
+
+void find_connections(cgraph cg, nesc_declaration mod)
+{
+  component_functions_iterate(mod, find_function_connections, cg);
+}
+
+static void mark_reachable_function(cgraph cg,
+                                   data_declaration caller,
+                                   data_declaration ddecl,
+                                   use caller_use);
+
+static void mark_connected_function_list(cgraph cg,
+                                        data_declaration caller,
+                                        dd_list/*full_connection*/ calls)
+{
+  dd_list_pos connected;
+
+  dd_scan (connected, calls)
+    {
+      full_connection conn = DD_GET(full_connection, connected);
+
+      mark_reachable_function(cg, caller, conn->ep->function,
+                             new_use(dummy_location, caller, c_executable | c_fncall));
+    }
+}
+
+static void mark_reachable_function(cgraph cg,
+                                   data_declaration caller,
+                                   data_declaration ddecl,
+                                   use caller_use)
+{
+  dd_list_pos use;
+
+  if (caller && ddecl->kind == decl_function)
+    graph_add_edge(fn_lookup(cg, caller), fn_lookup(cg, ddecl), caller_use);
+
+  /* Hack because ALLCODE env variable adds task decl's to spontaneous_calls */
+  if (type_task(ddecl->type) && ddecl->interface)
+    return;
+
+  if (ddecl->isused)
+    return;
+  ddecl->isused = TRUE;
+
+  if (ddecl->kind != decl_function ||
+      (ddecl->container && 
+       !(ddecl->container->kind == l_component &&
+        !ddecl->container->configuration)))
+    return;
+
+  if ((ddecl->ftype == function_command || ddecl->ftype == function_event) &&
+      !ddecl->defined)
+    {
+      struct connections *conn = ddecl->connections;
+
+      /* Call to a command or event not defined in this module.
+        Mark all connected functions */
+      mark_connected_function_list(cg, ddecl, conn->generic_calls);
+      mark_connected_function_list(cg, ddecl, conn->normal_calls);
+      if (conn->combiner)
+       mark_reachable_function(cg, ddecl, conn->combiner,
+                               new_use(dummy_location, caller, c_executable | c_fncall));
+
+      /* Don't process body of suppressed default defs */
+      if (ddecl->suppress_definition)
+       return;
+    }
+
+  /* Make sure ddecl gets a node in the graph even if it doesn't call
+     anything */
+  fn_lookup(cg, ddecl);
+
+  if (ddecl->fn_uses)
+    dd_scan (use, ddecl->fn_uses)
+      {
+       iduse i = DD_GET(iduse, use);
+
+       mark_reachable_function(cg, ddecl, i->id, i->u);
+      }
+}
+
+static declaration dummy_function(data_declaration ddecl)
+{
+  empty_stmt body = new_empty_stmt(parse_region, dummy_location);
+  function_decl fd = 
+    new_function_decl(parse_region, dummy_location, NULL, NULL, NULL, NULL,
+                     CAST(statement, body), NULL, NULL);
+
+  fd->ddecl = ddecl;
+
+  return CAST(declaration, fd);
+}
+
+static void mark_binary_reachable(data_declaration fndecl, void *data)
+{
+  if (fndecl->defined)
+    {
+      fndecl->definition = dummy_function(fndecl);
+      fndecl->noinlinep = TRUE;
+    }
+  else
+    mark_reachable_function(data, NULL, fndecl, NULL);
+}
+
+static cgraph mark_reachable_code(dd_list modules)
+{
+  dd_list_pos used, mod;
+  cgraph cg = new_cgraph(parse_region);
+
+  /* We use the connection graph type to represent our call graph */
+
+  dd_scan (used, spontaneous_calls)
+    mark_reachable_function(cg, NULL, DD_GET(data_declaration, used), NULL);
+  dd_scan (used, nglobal_uses)
+    mark_reachable_function(cg, NULL, DD_GET(iduse, used)->id, NULL);
+
+  /* All used functions from binary components are entry points */
+  dd_scan (mod, modules)
+    {
+      nesc_declaration m = DD_GET(nesc_declaration, mod);
+
+      if (is_binary_component(m->impl))
+       component_functions_iterate(m, mark_binary_reachable, cg);
+    }
+
+  return cg;
+}
+
+static void prt_nesc_function(data_declaration fn)
+{
+  assert(fn->kind == decl_function);
+
+  if (fn->definition && !fn->suppress_definition &&
+      !(fn->container && is_binary_component(fn->container->impl)))
+    prt_function_body(CAST(function_decl, fn->definition));
+
+  /* if this is a connection function, print it now */
+  if ((fn->ftype == function_command || fn->ftype == function_event) &&
+      !fn->defined && !fn->uncallable)
+    prt_nesc_connection_function(fn->connections);
+}
+
+static bool isinlined(data_declaration fn)
+{
+  return fn->isinline || fn->makeinline;
+}
+
+static void topological_prt(gnode gep, bool force)
+{
+  gedge out;
+  data_declaration fn;
+
+  fn = NODE_GET(endp, gep)->function;
+  if (isinlined(fn) || force)
+    {
+      if (graph_node_markedp(gep))
+       return;
+
+      graph_mark_node(gep);
+
+      graph_scan_out (out, gep)
+       topological_prt(graph_edge_to(out), FALSE);
+
+      prt_nesc_function(fn);
+    }
+}
+static void prt_inline_functions(cgraph callgraph)
+{
+  gnode fns;
+
+  graph_clear_all_marks(cgraph_graph(callgraph));
+  graph_scan_nodes (fns, cgraph_graph(callgraph))
+    {
+      data_declaration fn = NODE_GET(endp, fns)->function;
+      if (isinlined(fn))
+       {
+         gedge callers;
+         bool inlinecallers = FALSE;
+
+         graph_scan_in (callers, fns)
+           {
+             data_declaration caller =
+               NODE_GET(endp, graph_edge_from(callers))->function;
+
+             if (isinlined(caller))
+               {
+                 inlinecallers = TRUE;
+                 break;
+               }
+           }
+
+         if (!inlinecallers)
+           topological_prt(fns, FALSE);
+       }
+    }
+}
+
+static void prt_noninline_functions(cgraph callgraph)
+{
+  gnode fns;
+  graph_scan_nodes (fns, cgraph_graph(callgraph))
+    {
+      data_declaration fn = NODE_GET(endp, fns)->function;
+
+      if (!isinlined(fn))
+       {
+         /* There may be some inlined functions which were not printed
+            earlier, because they were:
+            a) recursive (possibly indirectly), with explicit inline
+               keywords
+            b) not called from another inline function
+            So we use topological_prt here to ensure they are printed
+            before any calls to them from non-inlined functions
+         */
+         topological_prt(fns, TRUE);
+       }
+    }
+}
+
+static void suppress_function(const char *name)
+{
+  data_declaration d = lookup_global_id(name);
+
+  if (d && d->kind == decl_function && d->definition)
+    d->suppress_definition = TRUE;
+}
+
+static void prt_ddecl_for_init(region r, data_declaration ddecl)
+{
+  type_quals dquals = type_qualifiers(ddecl->type);
+  if (dquals & const_qualifier)
+    {
+      /* We need to cast the const away */
+      type nonconst;
+      declarator nc_decl;
+      type_element nc_mods;
+      asttype nc_type;
+
+      output("*(");
+      nonconst = make_qualified_type(ddecl->type, dquals & ~const_qualifier);
+      type2ast(r, dummy_location, make_pointer_type(nonconst), NULL,
+              &nc_decl, &nc_mods);
+      nc_type = new_asttype(r, dummy_location, nc_decl, nc_mods);
+      prt_asttype(nc_type);
+      output(")&");
+    }
+  prt_plain_ddecl(ddecl, 0);
+  output("[__nesc_mote]");
+}
+
+static void prt_nido_initializer(region r, variable_decl vd)
+{
+  data_declaration ddecl = vd->ddecl;
+  expression init;
+
+  if (!ddecl || !ddecl->isused || ddecl->kind != decl_variable)
+    return; /* Don't print if not referenced */
+
+  init = vd->arg1;
+
+  if (!init)
+    {
+      output("memset((void *)&");
+      prt_ddecl_for_init(r, ddecl);
+      output(", 0, sizeof ");
+      prt_ddecl_for_init(r, ddecl);
+      output(")");
+    }
+  else if (is_init_list(init))
+    {
+      declarator vtype;
+      type_element vmods;
+
+      output("memcpy((void *)&");
+      prt_ddecl_for_init(r, ddecl);
+
+      output(", (void *)&");
+      type2ast(parse_region, dummy_location, ddecl->type, NULL,
+              &vtype, &vmods);
+      output("(");
+      prt_declarator(vtype, vmods, NULL, NULL, 0);
+      output(")");
+      prt_expression(init, P_ASSIGN);
+
+      output(", sizeof ");
+      prt_ddecl_for_init(r, ddecl);
+      output(")");
+    }
+  else 
+    {
+      prt_ddecl_for_init(r, ddecl);
+      output(" = ");
+      prt_expression(init, P_ASSIGN);
+    }
+  outputln(";");
+}
+
+static void prt_nido_initializations(nesc_declaration mod) 
+{
+  declaration dlist;
+  declaration d;
+  dd_list_pos lscan;
+  region r;
+
+  /* binary component? */
+  if (!is_module(mod->impl))
+    return;
+
+  r = newregion();
+  dlist = CAST(module, mod->impl)->decls;
+  outputln("/* Module %s */", mod->name);
+
+  /* Static variables */
+  scan_declaration (d, dlist)
+    {
+      declaration reald = ignore_extensions(d);
+      variable_decl vd;
+
+      if (reald->kind != kind_data_decl)
+       continue;
+
+      scan_variable_decl (vd, CAST(variable_decl, CAST(data_decl, d)->decls))
+       prt_nido_initializer(r, vd);
+    }
+
+  /* Local static variables */
+  dd_scan (lscan, mod->local_statics)
+    {
+      data_declaration localsd = DD_GET(data_declaration, lscan);
+
+      prt_nido_initializer(r, CAST(variable_decl, localsd->ast));
+    }
+  deleteregion(r);
+  newline();
+}
+
+static void prt_nido_initialize(dd_list modules) 
+{
+  dd_list_pos mod;
+
+  nido_mote_number = "__nesc_mote";
+  outputln("/* Invoke static initialisers for mote '__nesc_mote' */\n");
+  outputln("static void __nesc_nido_initialise(int __nesc_mote)");
+  outputln("{");
+  indent();
+
+  dd_scan (mod, modules) 
+    prt_nido_initializations(DD_GET(nesc_declaration, mod));
+  unindent();
+  outputln("}");
+}
+
+static void prt_typedefs(nesc_declaration comp)
+{
+  declaration parm;
+
+  scan_declaration (parm, comp->parameters)
+    if (is_type_parm_decl(parm))
+      {
+       type_parm_decl td = CAST(type_parm_decl, parm);
+       asttype arg = CAST(type_argument, td->ddecl->initialiser)->asttype;
+
+       output("typedef ");
+       prt_declarator(arg->declarator, arg->qualifiers, NULL, td->ddecl,
+                      psd_print_ddecl);
+       outputln(";");
+      }
+}
+
+void prt_nesc_interface_typedefs(nesc_declaration comp)
+{
+  const char *ifname;
+  void *ifentry;
+  env_scanner scanifs;
+
+  env_scan(comp->env->id_env, &scanifs);
+  while (env_next(&scanifs, &ifname, &ifentry))
+    {
+      data_declaration idecl = ifentry;
+
+      if (idecl->kind == decl_interface_ref)
+       prt_typedefs(idecl->itype);
+    }
+}
+
+void prt_nesc_typedefs(nesc_declaration comp);
+
+void prt_configuration_declarations(declaration dlist)
+{
+  declaration d;
+
+  scan_declaration (d, dlist)
+    if (is_component_ref(d))
+      prt_nesc_typedefs(CAST(component_ref, d)->cdecl);
+    else
+      prt_toplevel_declaration(d);
+}
+
+void prt_nesc_typedefs(nesc_declaration comp)
+{
+  assert(!comp->abstract);
+  if (comp->printed)
+    return;
+  comp->printed = TRUE;
+  if (comp->original)
+    prt_typedefs(comp);
+
+  /* Print declarations in specification */
+  prt_toplevel_declarations(CAST(component, comp->ast)->decls);
+
+  /* Only module interface type arguments are used in output */
+  if (!comp->configuration)
+    prt_nesc_interface_typedefs(comp);
+  else
+    /* Recursively print declarations found in configurations */
+    prt_configuration_declarations(CAST(configuration, comp->impl)->decls);
+}
+
+static void prt_nido_resolver(region r, variable_decl vd)
+{
+  data_declaration ddecl = vd->ddecl;
+  expression init;
+
+  if (!ddecl || !ddecl->isused || ddecl->kind != decl_variable)
+    return; /* Don't print if not referenced */
+
+  init = vd->arg1;
+
+  output("if (!strcmp(varname, \"");
+  prt_plain_ddecl(ddecl, 0);
+  outputln("\"))");
+  outputln("{");
+  indent();
+  output("*addr = (uintptr_t)&");
+  prt_ddecl_for_init(r, ddecl);
+  outputln(";");
+  output("*size = sizeof(");
+  prt_ddecl_for_init(r, ddecl);
+  outputln(");");
+  outputln("return 0;");
+  unindent();
+  outputln("}");
+}
+
+static void prt_nido_resolvers(nesc_declaration mod) 
+{
+  declaration dlist;
+  declaration d;
+  region r;
+
+  /* binary component? */
+  if (!is_module(mod->impl))
+    return;
+
+  r = newregion();
+  dlist = CAST(module, mod->impl)->decls;
+  outputln("/* Module %s */", mod->name);
+
+  /* Static variables */
+  scan_declaration (d, dlist)
+    {
+      declaration reald = ignore_extensions(d);
+      variable_decl vd;
+
+      if (reald->kind != kind_data_decl)
+       continue;
+      
+      scan_variable_decl (vd, CAST(variable_decl, CAST(data_decl, d)->decls))
+       prt_nido_resolver(r, vd);
+    }
+  deleteregion(r);
+
+  newline();
+}
+
+static void prt_nido_resolver_function(dd_list modules)
+{
+  dd_list_pos mod;
+
+  outputln("/* Nido variable resolver function */\n");
+  outputln("static int __nesc_nido_resolve(int __nesc_mote,");
+  outputln("                               char* varname,");
+  outputln("                               uintptr_t* addr, size_t* size)");
+  outputln("{");
+  indent();
+  
+  dd_scan (mod, modules) 
+    prt_nido_resolvers(DD_GET(nesc_declaration, mod));
+
+  outputln("return -1;");
+  
+  unindent();
+  outputln("}");
+}
+
+static void include_support_functions(void)
+{
+  static char *fns[] = {
+    "__nesc_atomic_start",
+    "__nesc_atomic_end",
+    "__nesc_enable_interrupt",
+    "__nesc_disable_interrupt",
+    "__nesc_nido_initialise",
+    "__nesc_nido_resolve"
+  };
+  int i;
+
+  for (i = 0; i < sizeof fns / sizeof *fns; i++)
+    {
+      data_declaration fndecl = lookup_global_id(fns[i]);
+
+      /* Adding the function to spontaneous_calls w/o setting the
+        spontaneous field makes the function stay static */
+      if (fndecl && fndecl->kind == decl_function && !fndecl->spontaneous)
+       dd_add_last(parse_region, spontaneous_calls, fndecl);
+    }
+}
+
+void generate_c_code(const char *target_name, nesc_declaration program,
+                    cgraph cg, dd_list modules, dd_list components)
+{
+  dd_list_pos mod;
+  cgraph callgraph;
+  FILE *output = NULL, *diff_file = NULL;
+
+  if (target_name)
+    {
+      output = fopen(target_name, "w");
+      if (!output)
+       {
+         perror("couldn't create output file");
+         exit(2);
+       }
+    }
+
+  if (diff_output)
+    {
+      char *diffname = rstralloc(permanent, strlen(diff_output) + 9);
+
+      if (use_nido)
+       {
+         /* There's no use for nido+diffs, and it would complicate
+            things somewhat (nido changes rules for symbols, etc) */
+         error("diff output is not supported with simulation");
+         exit(1);
+       }
+      sprintf(diffname, "%s/symbols", diff_output);
+      diff_file = fopen(diffname, "w");
+      if (!diff_file)
+       {
+         fprintf(stderr, "couldn't create diff output file %s: ", diffname);
+         perror(NULL);
+         exit(2);
+       }
+    }
+
+  include_support_functions();
+
+  unparse_start(output ? output : stdout, diff_file);
+  disable_line_directives();
+
+  /* define nx_struct as struct and nx_union as union (simplifies
+     prt_tag) */
+  outputln("#define nx_struct struct");
+  outputln("#define nx_union union");
+
+  /* suppress debug functions if necessary */
+  if (flag_no_debug)
+    {
+      suppress_function("dbg");
+      suppress_function("dbg_clear");
+      suppress_function("dbg_active");
+      outputln("#define dbg(mode, format, ...) ((void)0)");
+      outputln("#define dbg_clear(mode, format, ...) ((void)0)");
+      outputln("#define dbg_active(mode) 0");
+    }
+
+  /* We start by finding each module's identifier uses and connections
+     and marking uncallable functions */
+  collect_uses(all_cdecls);
+  handle_network_types(all_cdecls);
+  dd_scan (mod, modules)
+    {
+      nesc_declaration m = DD_GET(nesc_declaration, mod);
+
+      if (is_module(m->impl))
+       {
+         declaration body = CAST(module, m->impl)->decls;
+
+         collect_uses(body);
+         handle_network_types(body);
+       }
+      
+      find_connections(cg, m);
+    }
+
+  /* Then we set the 'isused' bit on all functions that are reachable
+     from spontaneous_calls or global_uses */
+  callgraph = mark_reachable_code(modules);
+
+  check_async(callgraph);
+  check_races(callgraph);
+  isatomic(callgraph);
+
+  inline_functions(callgraph);
+
+  /* Then we print the code. */
+  /* The C declarations first */
+  enable_line_directives();
+  prt_toplevel_declarations(all_cdecls);
+  disable_line_directives();
+
+  /* Typedefs for abstract module type arguments. This relies on the fact
+     that abstract configurations are present in the components list ahead
+     of the abstract modules that they instantiate */
+  if (program)
+    prt_nesc_typedefs(program);
+
+  enable_line_directives();
+
+  dd_scan (mod, modules)
+    prt_nesc_function_declarations(DD_GET(nesc_declaration, mod));
+
+  dd_scan (mod, modules)
+    prt_nesc_module(cg, DD_GET(nesc_declaration, mod));
+
+  prt_inline_functions(callgraph);
+  prt_noninline_functions(callgraph);
+
+  if (use_nido)
+    {
+      prt_nido_resolver_function(modules);
+      disable_line_directives();
+      prt_nido_initialize(modules); 
+    }
+
+  unparse_end();
+
+  if (output)
+    fclose(output);
+  if (diff_file)
+    fclose(diff_file);
+}
diff --git a/src/nesc-generate.h b/src/nesc-generate.h
new file mode 100644 (file)
index 0000000..76ca45e
--- /dev/null
@@ -0,0 +1,26 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_GENERATE_H
+#define NESC_GENERATE_H
+
+#include "nesc-cg.h"
+
+void generate_c_code(const char *target_name, nesc_declaration program,
+                    cgraph cg, dd_list modules, dd_list components);
+
+#endif
diff --git a/src/nesc-inline.c b/src/nesc-inline.c
new file mode 100644 (file)
index 0000000..b3897bc
--- /dev/null
@@ -0,0 +1,432 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-inline.h"
+#include "constants.h"
+#include "flags.h"
+
+enum {
+  base_inlineable_size = 9,
+  inline_per_arg = 2
+};
+
+struct inline_node
+{
+  data_declaration fn;
+  size_t size;
+  bool uninlinable;
+};
+
+static void ig_add_fn(region r, ggraph ig, data_declaration fn, size_t size)
+{
+  struct inline_node *n = ralloc(r, struct inline_node);
+
+  n->fn = fn;
+  n->size = size;
+  fn->ig_node = graph_add_node(ig, n);
+}
+
+static void ig_add_edge(data_declaration from, data_declaration to)
+{
+  graph_add_edge(from->ig_node, to->ig_node, NULL);
+
+  /* Recursion - mark as uninlinable */
+  if (from == to)
+    {
+      struct inline_node *n = NODE_GET(struct inline_node *, from->ig_node);
+
+      n->uninlinable = TRUE;
+    }
+}
+
+static size_t statement_size(statement stmt, bool inatomic);
+static size_t expression_size(expression expr, bool inatomic);
+
+static size_t elist_size(expression elist, bool inatomic)
+{
+  expression e;
+  size_t sum = 0;
+
+  scan_expression (e, elist)
+    sum += expression_size(e, inatomic);
+
+  return sum;
+}
+
+
+static size_t expression_size(expression expr, bool inatomic)
+{
+  size_t sum = 0;
+
+  if (!expr)
+    return 0;
+
+  if (expr->cst || is_string(expr))
+    return 1;
+
+  switch (expr->kind)
+    {
+    case kind_identifier: 
+      sum += 1;
+      break;
+
+    case kind_comma:
+      sum += elist_size(CAST(comma, expr)->arg1, inatomic);
+      break;
+
+    case kind_cast_list: {
+      sum += expression_size(CAST(cast_list, expr)->init_expr, inatomic);
+      break;
+    }
+    case kind_init_specific: {
+      init_specific init = CAST(init_specific, expr);
+
+      sum += expression_size(init->init_expr, inatomic);
+      break;
+    }
+    case kind_init_list: {
+      sum += elist_size(CAST(init_list, expr)->args, inatomic);
+      break;
+    }
+    case kind_conditional: {
+      conditional ce = CAST(conditional, expr);
+
+      if (ce->condition->cst)
+       {
+         if (definite_zero(ce->condition))
+           sum += expression_size(ce->arg2, inatomic);
+         else
+           sum += expression_size(ce->arg1, inatomic);
+       }
+      else
+       {
+         sum += 2 + expression_size(ce->condition, inatomic);
+         sum += expression_size(ce->arg1, inatomic);
+         sum += expression_size(ce->arg2, inatomic);
+       }
+      break;
+    }
+    case kind_compound_expr:
+      sum += statement_size(CAST(compound_expr, expr)->stmt, inatomic);
+      break;
+
+    case kind_function_call: {
+      function_call fce = CAST(function_call, expr);
+
+      sum += 1 + expression_size(fce->arg1, inatomic);
+      sum += elist_size(fce->args, inatomic);
+      break;
+    }
+    case kind_generic_call: {
+      generic_call fce = CAST(generic_call, expr);
+
+      sum += 1 + expression_size(fce->arg1, inatomic);
+      sum += elist_size(fce->args, inatomic);
+      break;
+    }
+    case kind_extension_expr:
+      sum += expression_size(CAST(unary, expr)->arg1, inatomic);
+      break;
+
+    default:
+      if (is_unary(expr))
+       sum += 1 + expression_size(CAST(unary, expr)->arg1, inatomic);
+      else if (is_binary(expr))
+       {
+         binary be = CAST(binary, expr);
+
+         sum += 1 + expression_size(be->arg1, inatomic);
+         sum += expression_size(be->arg2, inatomic);
+       }
+      else 
+       assert(0);
+      break;
+    }
+
+  return sum;
+}
+
+static size_t statement_size(statement stmt, bool inatomic)
+{
+  size_t sum = 0;
+
+  if (!stmt)
+    return 0;
+
+  switch (stmt->kind)
+    {
+    case kind_asm_stmt: {
+      sum += 1; /* A guess. Hard to count asm instructions. */
+      break;
+    }
+    case kind_compound_stmt: {
+      compound_stmt cs = CAST(compound_stmt, stmt);
+      statement s;
+      declaration d;
+
+      scan_declaration (d, cs->decls)
+       if (is_data_decl(d))
+         {
+           variable_decl vd;
+
+           /* Include size of initialisers of non-static variables */
+           scan_variable_decl (vd, CAST(variable_decl,
+                                        CAST(data_decl, d)->decls))
+             if (vd->ddecl->kind == decl_variable &&
+                 vd->ddecl->vtype != variable_static)
+               sum += 1 + expression_size(vd->arg1, inatomic);
+         }
+
+      scan_statement (s, cs->stmts)
+       sum += statement_size(s, inatomic);
+      break;
+    }
+    case kind_if_stmt: {
+      if_stmt is = CAST(if_stmt, stmt);
+
+      if (is->condition->cst)
+       {
+         if (definite_zero(is->condition))
+           sum += statement_size(is->stmt2, inatomic);
+         else
+           sum += statement_size(is->stmt1, inatomic);
+       }
+      else
+       {
+         sum += 2 + expression_size(is->condition, inatomic);
+         sum += statement_size(is->stmt1, inatomic);
+         sum += statement_size(is->stmt2, inatomic);
+       }
+      break;
+    }
+    case kind_labeled_stmt: {
+      labeled_stmt ls = CAST(labeled_stmt, stmt);
+
+      sum += statement_size(ls->stmt, inatomic);
+      break;
+    }
+    case kind_atomic_stmt: {
+      atomic_stmt ls = CAST(atomic_stmt, stmt);
+
+      sum += statement_size(ls->stmt, inatomic);
+      if (!inatomic)
+       sum += 6;
+      break;
+    }
+    case kind_expression_stmt: {
+      expression_stmt es = CAST(expression_stmt, stmt);
+
+      sum += expression_size(es->arg1, inatomic);
+      break;
+    }
+    case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: {
+      conditional_stmt cs = CAST(conditional_stmt, stmt);
+
+      if (cs->condition->cst && stmt->kind != kind_switch_stmt &&
+         definite_zero(cs->condition))
+       {
+         /* do s while (0): just include size of s
+            while (0) s: size is 0 */
+         if (stmt->kind == kind_dowhile_stmt)
+           sum += statement_size(cs->stmt, inatomic);
+         break;
+       }
+      sum += 2 + expression_size(cs->condition, inatomic);
+      sum += statement_size(cs->stmt, inatomic);
+      break;
+    }
+    case kind_for_stmt: {
+      for_stmt fs = CAST(for_stmt, stmt);
+
+      sum += 2 + statement_size(fs->stmt, inatomic);
+      sum += expression_size(fs->arg1, inatomic);
+      sum += expression_size(fs->arg2, inatomic);
+      sum += expression_size(fs->arg3, inatomic);
+      break;
+    }
+    case kind_break_stmt: case kind_continue_stmt: case kind_goto_stmt:
+      sum += 1;
+      break;
+
+    case kind_empty_stmt:
+      break;
+
+    case kind_computed_goto_stmt: {
+      computed_goto_stmt cgs = CAST(computed_goto_stmt, stmt);
+
+      sum += 1 + expression_size(cgs->arg1, inatomic);
+      break;
+    }
+    case kind_return_stmt: {
+      return_stmt rs = CAST(return_stmt, stmt);
+
+      sum += 1 + expression_size(rs->arg1, inatomic);
+      break;
+    }
+    default: assert(0);
+    }
+
+  return sum;
+}
+
+static size_t function_size(function_decl fd)
+{
+  return statement_size(fd->stmt, fd->ddecl->call_contexts == c_call_atomic);
+}
+
+static size_t typelist_length(typelist tl)
+{
+  typelist_scanner tls;
+  size_t count = 0;
+
+  if (!tl)
+    return 0;
+  
+  typelist_scan(tl, &tls);
+  while (typelist_next(&tls))
+    count++;
+
+  return count;
+}
+
+static size_t function_argcount(data_declaration ddecl)
+{
+  size_t count = typelist_length(type_function_arguments(ddecl->type));
+
+  if (type_generic(ddecl->type))
+    count += typelist_length(type_function_arguments(type_function_return_type(ddecl->type)));
+
+  return count;
+}
+
+static ggraph make_ig(region r, cgraph callgraph)
+{
+  ggraph cg = cgraph_graph(callgraph);
+  ggraph ig = new_graph(r);
+  gnode n;
+
+  graph_scan_nodes (n, cg)
+    {
+      /* Size should be at least 1 (because of the -1 in inline_function) */
+      data_declaration fn = NODE_GET(endp, n)->function;
+      size_t fnsize = 1;
+
+      if (fn->definition)
+       fnsize = function_size(CAST(function_decl, fn->definition));
+
+      if (fn->interface && !fn->defined)
+       {
+         /* stub function. size is based on number of outgoing edges and
+            number of parameters (first outgoing edge counted as "free") */
+         gedge e;
+         int edgecount = 0;
+
+         graph_scan_out (e, n)
+           edgecount++;
+         /* use size of default definition (already computed above) if no
+            outgoing edges */
+         if (edgecount > 0)
+           fnsize = (edgecount - 1) * (2 + function_argcount(fn)) + 1;
+       }
+
+      ig_add_fn(r, ig, fn, fnsize);
+    }
+  graph_scan_nodes (n, cg)
+    {
+      data_declaration fn = NODE_GET(endp, n)->function;
+      gedge e;
+
+      graph_scan_out (e, n)
+       ig_add_edge(fn, NODE_GET(endp, graph_edge_to(e))->function);
+    }
+  return ig;
+}
+
+static void inline_function(gnode n, struct inline_node *in)
+{
+  gedge call_edge, called_edge, next_edge;
+
+  if (in->uninlinable || in->fn->noinlinep || in->fn->spontaneous) 
+    return;
+
+  in->fn->makeinline = TRUE;
+  /* Add callgraph edges implied by this inlining and update caller
+     sizes */
+  graph_scan_in (call_edge, n)
+    {
+      gnode caller = graph_edge_from(call_edge);
+      struct inline_node *caller_in = NODE_GET(struct inline_node *, caller);
+      
+      caller_in->size += in->size - 1;
+
+      graph_scan_out (called_edge, n)
+       {
+         gnode called = graph_edge_to(called_edge);
+
+         ig_add_edge(caller_in->fn,
+                     NODE_GET(struct inline_node *, called)->fn);
+       }
+    }
+
+  /* Remove edges leaving inlined function 
+     (we don't bother removing incoming edges as we won't look at them
+     again) */
+  called_edge = graph_first_edge_out(n);
+  while (called_edge)
+    {
+      next_edge = graph_next_edge_out(called_edge);
+      graph_remove_edge(called_edge);
+      called_edge = next_edge;
+    }
+}
+
+void inline_functions(cgraph callgraph)
+{
+  region igr = newregion();
+  ggraph ig = make_ig(igr, callgraph);
+  gnode n;
+  int bis = base_inlineable_size, ipa = inline_per_arg;
+
+  if (getenv("NESC_BIS"))
+    bis = atoi(getenv("NESC_BIS"));
+  if (getenv("NESC_IPA"))
+    ipa = atoi(getenv("NESC_IPA"));
+
+  if (flag_no_inline)
+    return;
+
+  /* Inline small fns and single-call fns */
+  graph_scan_nodes (n, ig)
+    {
+      struct inline_node *in = NODE_GET(struct inline_node *, n);
+      
+      if (!in->fn->isinline && !in->fn->makeinline)
+       {
+         gedge e;
+         size_t edgecount = 0;
+
+         graph_scan_in (e, n)
+           edgecount++;
+      
+         if (edgecount == 1 ||
+             (bis >=0 && in->size <= bis + function_argcount(in->fn) * ipa))
+           inline_function(n, in);
+       }
+    }
+  deleteregion(igr);
+}
diff --git a/src/nesc-inline.h b/src/nesc-inline.h
new file mode 100644 (file)
index 0000000..611b1d7
--- /dev/null
@@ -0,0 +1,25 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_INLINE_H
+#define NESC_INLINE_H
+
+#include "nesc-cg.h"
+
+void inline_functions(cgraph callgraph);
+
+#endif
diff --git a/src/nesc-interface.c b/src/nesc-interface.c
new file mode 100644 (file)
index 0000000..6a888d3
--- /dev/null
@@ -0,0 +1,31 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-interface.h"
+#include "nesc-semantics.h"
+#include "nesc-decls.h"
+#include "nesc-paths.h"
+#include "nesc-env.h"
+#include "semantics.h"
+#include "c-parse.h"
+#include "edit.h"
+
+void build_interface(region r, nesc_declaration idecl)
+{
+  AST_set_parents(CAST(node, idecl->ast));
+}
diff --git a/src/nesc-interface.h b/src/nesc-interface.h
new file mode 100644 (file)
index 0000000..8b0373c
--- /dev/null
@@ -0,0 +1,23 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_INTERFACE_H
+#define NESC_INTERFACE_H
+
+void build_interface(region r, nesc_declaration idecl);
+
+#endif
diff --git a/src/nesc-keywords.h b/src/nesc-keywords.h
new file mode 100644 (file)
index 0000000..e5db993
--- /dev/null
@@ -0,0 +1,24 @@
+K(abstract, ABSTRACT, RID_NESC)
+K(as, AS, RID_NESC)
+K(async, SCSPEC, RID_ASYNC | RID_NESC)
+K(call, CALL, RID_NESC)
+K(command, SCSPEC, RID_COMMAND | RID_NESC)
+K(components, COMPONENTS, RID_NESC)
+K(event, SCSPEC, RID_EVENT | RID_NESC)
+K(extends, EXTENDS, RID_NESC)
+K(implementation, IMPLEMENTATION, RID_NESC)
+K(new, NEW, RID_NESC)
+K(post, POST, RID_NESC)
+K(provides, PROVIDES, RID_NESC)
+K(signal, SIGNAL, RID_NESC)
+K(task, SCSPEC, RID_TASK | RID_NESC)
+K(uses, USES, RID_NESC)
+
+K(atomic, ATOMIC, NORID)
+K(component, COMPONENT, NORID)
+K(configuration, CONFIGURATION, NORID)
+K(generic, GENERIC, NORID)
+K(includes, INCLUDES, NORID)
+K(interface, INTERFACE, NORID)
+K(module, MODULE, NORID)
+K(norace, SCSPEC, RID_NORACE)
diff --git a/src/nesc-magic.c b/src/nesc-magic.c
new file mode 100644 (file)
index 0000000..8bb4590
--- /dev/null
@@ -0,0 +1,209 @@
+#include <stdlib.h>
+
+#include "parser.h"
+#include "nesc-magic.h"
+#include "semantics.h"
+#include "AST_utils.h"
+#include "c-parse.h"
+#include "constants.h"
+#include "unparse.h"
+
+data_declaration magic_unique, magic_uniqueN, magic_uniqueCount;
+
+static data_declaration 
+declare_magic(const char *name, type return_type, typelist argument_types,
+             known_cst (*magic_fold)(function_call fcall, int pass))
+{
+  struct data_declaration tempdecl;
+  type ftype = make_function_type(return_type, argument_types, FALSE, FALSE);
+
+  init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location), name, ftype);
+  tempdecl.kind = decl_magic_function;
+  tempdecl.magic_fold = magic_fold;
+  tempdecl.ftype = function_normal;
+
+  return declare(global_env, &tempdecl, FALSE);
+}
+
+data_declaration get_magic(function_call fcall)
+/* Returns: magic function called by fcall if it's a magic function call,
+     NULL otherwise
+*/
+{
+  if (is_identifier(fcall->arg1))
+    {
+      identifier called = CAST(identifier, fcall->arg1);
+
+      if (called->ddecl->kind == decl_magic_function)
+       return called->ddecl;
+    }
+  return NULL;
+}
+
+
+known_cst fold_magic(function_call fcall, int pass)
+{
+  data_declaration called = get_magic(fcall);
+
+  if (called)
+    {
+      /* we can assume arguments are of valid type and number,
+        check that they are constants in the parse phase */
+
+      if (pass == 0)
+       {
+         bool all_constant = TRUE;
+         expression arg;
+         int argn = 1;
+
+         scan_expression (arg, fcall->args)
+           {
+             if (!arg->cst)
+               {
+                 error("argument %d to magic function `%s' is not constant",
+                       argn, called->name);
+                 all_constant = FALSE;
+               }
+             argn++;
+           }
+         
+         if (!all_constant)
+           return NULL;
+       }
+
+      return called->magic_fold(fcall, pass);
+    }
+  return NULL;
+}
+
+static env unique_env;
+static region unique_region;
+
+static unsigned int *unique_parse(const char *uname, function_call fcall)
+{
+  data_declaration name_ddecl = string_ddecl(fcall->args);
+  unsigned int *lastval;
+  char *name_str;
+  location loc = fcall->location;
+
+  if (!name_ddecl)
+    {
+      error_with_location(loc, "argument to `%s' must be a string", uname);
+      return NULL;
+    }
+
+  name_str = ddecl2str(current.fileregion, name_ddecl);
+  if (!name_str)
+    {
+      error_with_location(loc, "can't handle this string as argument to `%s'", uname);
+      return NULL;
+    }
+
+  lastval = env_lookup(unique_env, name_str, FALSE);
+  if (!lastval)
+    {
+      lastval = ralloc(unique_region, int);
+      name_str = rstrdup(unique_region, name_str);
+      env_add(unique_env, name_str, lastval);
+    }
+
+  return lastval;
+}
+
+static known_cst unique_fold(function_call fcall, int pass)
+{
+  unsigned int *lastval;
+
+  /* On pass 0, we don't know the value (and we can't even look for
+     lastval yet, as we may be in a generic component passing a 
+     string argument to unique)
+     On pass 1, we look for lastval and pick a value
+     On subsequent passes, we stick to our choice
+  */
+  if (pass == 0)
+    return make_unknown_cst(cval_unknown_number, unsigned_int_type);
+
+  lastval = unique_parse("unique", fcall);
+  if (!lastval)
+    return NULL;
+
+  if (pass == 1)
+    return make_unsigned_cst((*lastval)++, unsigned_int_type);
+  else
+    return fcall->cst;
+}
+
+static known_cst uniqueN_fold(function_call fcall, int pass)
+{
+  unsigned int *lastval;
+
+  /* On pass 0, we don't know the value (and we can't even look for
+     lastval yet, as we may be in a generic component passing a 
+     string argument to unique)
+     On pass 1, we look for lastval and pick a value
+     On subsequent passes, we stick to our choice
+  */
+  if (pass == 0)
+    return make_unknown_cst(cval_unknown_number, unsigned_int_type);
+
+  lastval = unique_parse("uniqueN", fcall);
+  if (!lastval)
+    return NULL;
+
+  if (pass == 1)
+    {
+      known_cst n = CAST(expression, fcall->args->next)->cst;
+      unsigned int val = *lastval;
+
+      *lastval += constant_uint_value(n);
+
+      return make_unsigned_cst(val, unsigned_int_type);
+    }
+  else
+    return fcall->cst;
+}
+
+static known_cst uniqueCount_fold(function_call fcall, int pass)
+{
+  unsigned int *lastval;
+
+  /* On pass 0, we don't know the value (and we can't even look for
+     lastval yet, as we may be in a generic component passing a 
+     string argument to uniqueCount)
+     On pass 1, we still don't know (haven't seen all uniques)
+     On pass 2 and subsequent, we get the value from the unique env
+  */
+
+  if (pass < 2)
+    return make_unknown_cst(cval_unknown_number, unsigned_int_type);
+
+  lastval = unique_parse("uniqueCount", fcall);
+  if (!lastval)
+    return NULL;
+
+  return make_unsigned_cst(*lastval, unsigned_int_type);
+}
+
+static void unique_init(void)
+{
+  typelist string_args, string_int_args;
+
+  string_args = new_typelist(parse_region);
+  typelist_append(string_args, make_pointer_type(char_type));
+  magic_unique = declare_magic("unique", unsigned_int_type, string_args,
+                              unique_fold);
+  string_int_args = new_typelist(parse_region);
+  typelist_append(string_int_args, make_pointer_type(char_type));
+  typelist_append(string_int_args, unsigned_int_type);
+  magic_uniqueN = declare_magic("uniqueN", unsigned_int_type, string_int_args,
+                               uniqueN_fold);
+  magic_uniqueCount = declare_magic("uniqueCount", unsigned_int_type,
+                                   string_args, uniqueCount_fold);
+  unique_region = newregion();
+  unique_env = new_env(unique_region, NULL);
+}
+
+void init_magic_functions(void)
+{
+  unique_init();
+}
diff --git a/src/nesc-magic.h b/src/nesc-magic.h
new file mode 100644 (file)
index 0000000..e03c3cd
--- /dev/null
@@ -0,0 +1,22 @@
+/* Magic function support. Magic functions are constant folded at compile-time,
+   all their arguments must be constants (or string constants).
+
+   They are used to pick unique numbers for generic interfaces, lookup
+   active message types, etc
+*/
+
+#ifndef NESC_MAGIC_H
+#define NESC_MAGIC_H
+
+extern data_declaration magic_unique, magic_uniqueCount;
+
+void init_magic_functions(void);
+
+data_declaration get_magic(function_call fcall);
+/* Returns: magic function called by fcall if it's a magic function call,
+     NULL otherwise
+*/
+
+known_cst fold_magic(function_call fcall, int pass);
+
+#endif
diff --git a/src/nesc-main.c b/src/nesc-main.c
new file mode 100644 (file)
index 0000000..072767a
--- /dev/null
@@ -0,0 +1,429 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include "parser.h"
+#include "semantics.h"
+#include "nesc-env.h"
+#include "nesc-decls.h"
+#include "nesc-cg.h"
+#include "nesc-paths.h"
+#include "nesc-c.h"
+#include "nesc-interface.h"
+#include "nesc-component.h"
+#include "c-parse.h"
+#include "nesc-generate.h"
+#include "nesc-doc.h"
+#include "nesc-semantics.h"
+#include "nesc-cpp.h"
+#include "nesc-msg.h"
+#include "nesc-magic.h"
+#include "nesc-uses.h"
+#include "nesc-abstract.h"
+#include "nesc-attributes.h"
+#include "nesc-constants.h"
+#include "nesc-dump.h"
+#include "nesc-network.h"
+#include "nesc-task.h"
+#include "nesc-deputy.h"
+#include "edit.h"
+#include "machine.h"
+#include "nesc-atomic.h"
+#include "unparse.h"
+
+/* The set of C files to require before loading the main component */
+struct ilist
+{
+  struct ilist *next;
+  char *name;
+};
+
+static struct ilist *includelist, **includelist_end = &includelist;
+static region includeregion;
+
+void add_nesc_include(const char *name)
+{
+  struct ilist *np;
+
+  if (!includeregion)
+    includeregion = newregion();
+
+  np = ralloc(includeregion, struct ilist);
+  np->next = NULL;
+  np->name = rstrdup(includeregion, name);
+
+  *includelist_end = np;
+  includelist_end = &np->next;
+}
+
+/* Adds the component graph 'component' to the whole program graph 'master' */
+static void connect_graph(cgraph master, cgraph component)
+{
+  ggraph cg = cgraph_graph(component);
+  gnode n;
+  gedge connection;
+
+  /* Add all edges from component to master */
+  graph_scan_nodes (n, cg)
+    {
+      endp from = NODE_GET(endp, n);
+      gnode mfrom = endpoint_lookup(master, from);
+
+      graph_scan_out (connection, n)
+       {
+         endp to = NODE_GET(endp, graph_edge_to(connection));
+         gnode mto = endpoint_lookup(master, to);
+
+         graph_add_edge(mfrom, mto, EDGE_GET(location, connection));
+       }
+    }
+}
+
+static void connect(location loc, nesc_declaration cdecl, cgraph cg,
+                   cgraph userg, dd_list modules, dd_list components)
+{
+  nesc_declaration loop;
+
+  if ((loop = abstract_recursion()))
+    {
+      /* We can help the programmer find the loop by showing the 
+        instantiation path that causes it. loop's instance name is a prefix
+        of cdecl's, the looping path is loop's abstract component name
+        followed by the difference between loop's and cdecl's instance name.
+      */
+      error_with_location(loc, "component instantiation loop `%s%s'",
+                         original_component(loop)->name,
+                         cdecl->instance_name + strlen(loop->instance_name));
+    }
+  else if (!dd_find(components, cdecl))
+    {
+      dd_add_last(regionof(components), components, cdecl);
+      connect_graph(cg, cdecl->connections);
+      connect_graph(userg, cdecl->user_connections);
+
+      if (!cdecl->configuration)
+       dd_add_last(regionof(modules), modules, cdecl);
+      else
+       {
+         configuration c = CAST(configuration, cdecl->impl);
+         declaration d;
+
+         scan_declaration (d, c->decls)
+           if (is_component_ref(d))
+             {
+               component_ref comp = CAST(component_ref, d);
+
+               push_instance(comp->cdecl);
+               if (comp->cdecl->original)
+                 instantiate(comp->cdecl, comp->args);
+               connect(comp->location, comp->cdecl, cg, userg, modules, components);
+               pop_instance();
+             }
+       }
+    }
+}
+
+static void connect_graphs(region r, nesc_declaration program, nesc_declaration scheduler,
+                          cgraph *cg, cgraph *userg, dd_list *modules, dd_list *components)
+{
+  *cg = new_cgraph(r);
+  *userg = new_cgraph(r);
+  *modules = dd_new_list(r);
+  *components = dd_new_list(r);
+
+  push_instance(program);
+  connect(toplevel_location, program, *cg, *userg, *modules, *components);
+  if (scheduler)
+    connect(toplevel_location, scheduler, *cg, *userg, *modules, *components);
+  pop_instance();
+}
+
+int nesc_option(char *p)
+{
+  if (p[0] != '-')
+    return FALSE;
+
+  /* Skip optional (make gcc 3.x happy) initial _ added by ncc */
+  if (p[1] == '_')
+    p += 2;
+  else
+    p += 1;
+
+  /* Yes, using here strlen is evil. But who *really* cares? */
+  if (!strncmp (p, "fnesc-nido-tosnodes=", strlen("fnesc-nido-tosnodes=")))
+    {
+      nido_num_nodes = p + strlen("fnesc-nido-tosnodes=");
+    }
+  else if (!strncmp (p, "fnesc-nido-motenumber=", strlen("fnesc-nido-motenumber=")))
+    {
+      nido_mote_number = p + strlen("fnesc-nido-motenumber=");
+    }
+  else if (!strncmp (p, "fnesc-include=", strlen("fnesc-include=")))
+    {
+      add_nesc_include(p + strlen("fnesc-include="));
+    }
+  else if (!strncmp (p, "fnesc-path=", strlen("fnesc-path=")))
+    {
+      add_nesc_path(p + strlen("fnesc-path="), CHAIN_BRACKET);
+    }
+  else if (!strncmp (p, "fnesc-msg=", strlen("fnesc-msg=")))
+    {
+      select_nesc_msg(p + strlen("fnesc-msg="));
+    }
+  else if (!strcmp (p, "fnesc-csts"))
+    {
+      select_nesc_csts();
+    }
+  else if (!strncmp (p, "fnesc-dump=", strlen("fnesc-dump=")))
+    {
+      select_dump(p + strlen("fnesc-dump="));
+    }
+  else if (!strncmp (p, "fnesc-dumpfile=", strlen("fnesc-dumpfile=")))
+    {
+      select_dumpfile(p + strlen("fnesc-dumpfile="));
+    }
+  else if (!strncmp (p, "fnesc-target=", strlen("fnesc-target=")))
+    {
+      select_target(p + strlen("fnesc-target="));
+    }
+  else if (!strcmp (p, "fnesc-simulate"))
+    {
+      use_nido = TRUE;
+    }
+  else if (!strncmp (p, "fnesc-gcc=", strlen("fnesc-gcc=")))
+    {
+      target_compiler = p + strlen("fnesc-gcc=");
+    }
+  else if (!strcmp (p, "fnesc-mingw-gcc"))
+    {
+      flag_mingw_gcc = 1;
+    }
+  else if (!strcmp (p, "fnesc-no-debug"))
+    {
+      flag_no_debug = 1;
+    }
+  else if (!strcmp (p, "fnesc-no-inline"))
+    {
+      flag_no_inline++;
+    }
+  else if (!strcmp (p, "fnesc-verbose"))
+    {
+      flag_verbose = 2;
+    }
+  else if (!strcmp (p, "fnesc-save-macros"))
+    {
+      flag_save_macros = 1;
+    }
+  else if (!strncmp (p, "fnesc-scheduler=", strlen("fnesc-scheduler=")))
+    {
+      set_scheduler(p + strlen("fnesc-scheduler="));
+    }
+  else if (!strncmp (p, "fnesc-docdir=", strlen("fnesc-docdir=")))
+    {
+      doc_set_outdir(p + strlen("fnesc-docdir="));
+    }
+  else if (!strncmp (p, "fnesc-topdir=", strlen("fnesc-topdir=")))
+    {
+      doc_add_topdir(p + strlen("fnesc-topdir="));
+    }
+  else if (!strncmp (p, "fnesc-is-app", strlen("fnesc-is-app")))
+    {
+      doc_is_app(TRUE);
+    }
+  else if (!strncmp (p, "fnesc-docs-use-graphviz", strlen("fnesc-docs-use-graphviz")))
+    {
+      doc_use_graphviz(TRUE);
+    }
+  else if (!strcmp (p, "fnesc-optimize-atomic"))
+    nesc_optimise_atomic = 1;
+  else if (!strncmp (p, "fnesc-genprefix=", strlen("fnesc-genprefix=")))
+    unparse_prefix(p + strlen("fnesc-genprefix="));
+  else if (!strcmp (p, "fnesc-deputy"))
+    flag_deputy = 1;
+  else if (!strcmp (p, "fnesc-no-deputy"))
+    flag_deputy = 0;
+  else if (!strcmp (p, "fnesc-default-safe"))
+    flag_default_safe = 1;
+  else if (!strcmp (p, "fnesc-default-unsafe"))
+    flag_default_safe = 0;
+  else if (!strcmp (p, "Wnesc-docstring"))
+    warn_unexpected_docstring = 1;
+  else if (!strcmp (p, "Wno-nesc-docstring"))
+    warn_unexpected_docstring = 0;
+  else if (!strcmp (p, "Wnesc-fnptr"))
+    warn_fnptr = 1;
+  else if (!strcmp (p, "Wno-nesc-fnptr"))
+    warn_fnptr = 0;
+  else if (!strcmp (p, "Wnesc-data-race"))
+    warn_data_race = 1;
+  else if (!strcmp (p, "Wno-nesc-data-race"))
+    warn_data_race = 0;
+  else if (!strcmp (p, "Wnesc-async"))
+    warn_async = 1;
+  else if (!strcmp (p, "Wno-nesc-async"))
+    warn_async = 0;
+  else if (!strcmp (p, "Wnesc-combine"))
+    warn_no_combiner = 1;
+  else if (!strcmp (p, "Wno-nesc-combine"))
+    warn_no_combiner = 0;
+  else if (!strcmp (p, "Wnesc-all"))
+    warn_data_race = warn_fnptr = warn_async = warn_no_combiner = 1;
+  else if (!strcmp (p, "Wnesc-error"))
+    nesc_error = TRUE;
+  else if (!strncmp(p, "fnesc-diff=", strlen("fnesc-diff=")))
+    {
+      char *dirs = p + 11, *comma = strchr(dirs, ',');
+
+      /* <inputdir>,<outputdir> or <outputdir> only for original */
+      if (comma)
+       {
+         diff_input = rstralloc(permanent, comma - dirs + 1);
+         strncpy(diff_input, dirs, comma - dirs);
+         diff_input[comma - dirs] = '\0';
+         diff_output = comma + 1;
+       }
+      else
+       diff_output = dirs;
+    }
+  else if (!strncmp(p, "fnesc-separator=", strlen("fnesc-separator=")))
+    set_function_separator(p + 16);
+  else if (!strncmp(p, "fnesc-cppdir=", strlen("fnesc-cppdir=")))
+    save_pp_dir(p + 13);
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static void destroy_target(const char *name)
+{
+  if (name)
+    {
+      /* unlink would be nicer, but would have nasty consequences for
+        -o /dev/null when run by root... */
+      int fd = creat(name, 0666);
+
+      if (fd < 0)
+       {
+         fprintf(stderr, "%s: ", name);
+         perror("failed to truncate target");
+       }
+      else
+       close(fd);
+    }
+
+}
+
+void nesc_compile(const char *filename, const char *target_name)
+{
+  struct ilist *includes;
+  nesc_declaration program = NULL;
+  bool gencode = FALSE;
+  cgraph cg = NULL, userg = NULL;
+  dd_list modules = NULL, components = NULL;
+
+  if (filename == NULL)
+    {
+      fprintf(stderr, "usage: nesc1 <filename>\n");
+      return;
+    }
+
+  parse_region = newregion();
+  preprocess_init();
+  init_nesc_attributes();
+  cval_init();
+  init_types();
+  init_lex();
+  init_semantics();
+  init_nesc_env(parse_region);
+  init_magic_functions();
+  init_uses();
+  init_abstract();
+  init_nesc_constants();
+  init_network();
+  init_internal_nesc_attributes();
+  init_isatomic();
+  init_deputy();
+  if (target->init)
+    target->init();
+
+  for (includes = includelist; includes; includes = includes->next)
+    require_c(toplevel_location, includes->name);
+
+  if (flag_use_scheduler)
+    load_scheduler();
+
+  if (nesc_filename(filename))
+    /* We need to assume some language - it will get fixed once we
+       see the actual file */
+    program = load(l_any, toplevel_location, filename, TRUE);
+  else
+    {
+      flag_c = TRUE;
+      load_c(toplevel_location, filename, TRUE);
+    }
+
+  if (errorcount)
+    return;
+
+  if (program && program->kind == l_component && !program->abstract)
+    {
+      connect_graphs(parse_region, program, scheduler, &cg, &userg, &modules, &components);
+      if (errorcount)
+       return;
+      current.container = NULL;
+      fold_program(program, scheduler);
+      gencode = TRUE;
+    }
+  else 
+    /* The "program" is a C file, interface or abstract component */
+    fold_program(NULL, NULL);
+
+  if (errorcount)
+    return;
+
+  /* Destroy target in all circumstances (prevents surprises
+     when "compiling" interfaces) */
+  destroy_target(target_name);
+
+  if (docs_requested())
+    {
+      if (generic_used)
+       error("documentation system does not yet support generic components and interfaces");
+      else if (program)
+       generate_docs(filename, cg);
+      else
+       error("documentation requested on a C file ");
+      gencode = FALSE;
+    }
+  if (layout_requested())
+    {
+      dump_msg_layout();
+      gencode = FALSE;
+    }
+  if (dump_selected())
+    dump_info(program, cg, userg, modules, components);
+  if (gencode)
+    generate_c_code(target_name, program, cg, modules, components);
+  else if (flag_c)
+    generate_c_code(target_name, NULL,
+                   new_cgraph(permanent), dd_new_list(permanent),
+                   dd_new_list(permanent));
+}
diff --git a/src/nesc-main.h b/src/nesc-main.h
new file mode 100644 (file)
index 0000000..1ef9b63
--- /dev/null
@@ -0,0 +1,29 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_MAIN_H
+#define NESC_MAIN_H
+
+void add_nesc_include(const char *name);
+void nesc_compile(const char *component_name, const char *target_name);
+
+bool nesc_option(char *p);
+/* Effects: If p is a nesC option, set flags appropriately.
+   Returns: TRUE iff p was a nesC option
+*/
+
+#endif
diff --git a/src/nesc-module.c b/src/nesc-module.c
new file mode 100644 (file)
index 0000000..218e1fe
--- /dev/null
@@ -0,0 +1,104 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-module.h"
+#include "nesc-configuration.h"
+#include "nesc-component.h"
+#include "c-parse.h"
+#include "expr.h"
+#include "semantics.h"
+#include "nesc-semantics.h"
+#include "nesc-task.h"
+
+expression make_generic_call(location loc, expression iref, expression args)
+{
+  expression result = CAST(expression, new_generic_call(parse_region, loc, iref, args));
+
+  check_arguments(iref->type, args, get_function_ddecl(iref), TRUE);
+  result->type = type_function_return_type(iref->type);
+
+  return result;
+}
+
+word make_word(location l, cstring s)
+{
+  return new_word(parse_region, l, s);
+}
+
+declarator make_interface_ref_declarator(location l, cstring w1, cstring w2)
+{
+  identifier_declarator id =
+    new_identifier_declarator(parse_region, l, w2);
+
+  return CAST(declarator,
+             new_interface_ref_declarator(parse_region, l,
+                                          CAST(declarator, id),
+                                          make_word(l, w1)));
+}
+
+expression make_interface_deref(location loc, expression object, cstring field)
+{
+  interface_deref result;
+  data_declaration iref = type_iref(object->type);
+  data_declaration fdecl = interface_lookup(iref, field.data);
+
+  result = new_interface_deref(parse_region, loc, object, field, fdecl);
+  if (!fdecl)
+    {
+      error("interface has no command or event named `%s'", field.data);
+      result->type = error_type;
+    }
+  else
+    result->type = fdecl->type;
+
+  return CAST(expression, result);
+}
+
+/* Check that function fndecl (from the module's external interface)
+   is implemented.
+*/
+static void check_function_implemented(data_declaration fndecl, void *data)
+{
+  location *loc = data;
+  data_declaration idecl = fndecl->interface;
+
+  assert(fndecl->kind == decl_function);
+
+  if (fndecl->defined && !fndecl->definition)
+    {
+      if (idecl)
+       error_with_location(*loc, "`%s.%s' not implemented",
+                           idecl->name, fndecl->name);
+      else
+       error_with_location(*loc, "`%s' not implemented", fndecl->name);
+    }
+}
+
+/* Checks that all defined functions of the modules are implemented */
+static void check_complete_implementation(module m)
+{
+  component_functions_iterate(m->cdecl, check_function_implemented,
+                             &m->location);
+}
+
+void process_module(module m)
+{
+  check_complete_implementation(m);
+  /* Add wires to graph for tasks */
+  wire_scheduler(m);
+}
diff --git a/src/nesc-module.h b/src/nesc-module.h
new file mode 100644 (file)
index 0000000..8a456b2
--- /dev/null
@@ -0,0 +1,28 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_MODULE_H
+#define NESC_MODULE_H
+
+expression make_generic_call(location loc, expression iref, expression args);
+
+declarator make_interface_ref_declarator(location l, cstring w1, cstring w2);
+expression make_interface_deref(location loc, expression object, cstring field);
+
+void process_module(module c);
+
+#endif
diff --git a/src/nesc-msg.c b/src/nesc-msg.c
new file mode 100644 (file)
index 0000000..09e0108
--- /dev/null
@@ -0,0 +1,239 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <ctype.h>
+
+#include "parser.h"
+#include "nesc-msg.h"
+#include "semantics.h"
+#include "constants.h"
+#include "c-parse.h"
+#include "AST_utils.h"
+
+static const char *selected_type;
+static bool print_csts;
+
+void select_nesc_msg(const char *name)
+{
+  selected_type = name;
+}
+
+void select_nesc_csts(void)
+{
+  print_csts = TRUE;
+}
+
+static void dump_type(type t)
+{
+  if (type_complex(t))
+    {
+      printf("C");
+      t = make_base_type(t);
+    }
+
+  if (type_network_base_type(t))
+    printf("N%s", type_networkdef(t)->name);
+  /* Enums treated as ints for now */
+  else if (type_integer(t))
+    if (type_unsigned(t))
+      printf("U");
+    else
+      printf("I");
+  else if (type_float(t))
+    printf("F");
+  else if (type_double(t))
+    printf("D");
+  else if (type_long_double(t))
+    printf("LD");
+  else if (type_union(t))
+    if (type_network(t))
+      printf("ANU");
+    else
+      printf("AU");
+  else if (type_struct(t))
+    if (type_network(t))
+      printf("ANS");
+    else
+      printf("AS");
+  else if (type_pointer(t))
+    printf("U");
+  else
+    assert(0);
+}
+
+static void dump_fields(region r, const char *prefix, field_declaration fields)
+{
+  while (fields)
+    {
+      if (fields->name) /* skip anon fields */
+       {
+         type t = fields->type;
+
+         printf("  %s%s ", prefix, fields->name);
+         while (type_array(t))
+           {
+             type base = type_array_of(t);
+             expression size = type_array_size(t);
+
+             printf("[%lu]", (unsigned long)constant_uint_value(size->cst));
+             t = base;
+           }
+         dump_type(t);
+
+         assert(cval_isinteger(fields->offset));
+         printf(" %lu %lu\n", (unsigned long)cval_uint_value(fields->offset),
+                (unsigned long)
+                (!cval_istop(fields->bitwidth) ?
+                 cval_uint_value(fields->bitwidth) :
+                 BITSPERBYTE * cval_uint_value(type_size(t))));
+
+         if (type_aggregate(t))
+           {
+             tag_declaration tdecl = type_tag(t);
+             char *newprefix = rarrayalloc(r, strlen(prefix) + strlen(fields->name) + 2, char);
+
+             sprintf(newprefix, "%s%s.", prefix, fields->name);
+             dump_fields(r, newprefix, tdecl->fieldlist);
+             printf("  %s%s AX\n", prefix, fields->name);
+           }
+       }
+      fields = fields->next;
+    }
+}
+
+static known_cst constant_value(const char *name)
+{
+  data_declaration decl;
+  static struct known_cst bad_value;
+
+  decl = lookup_global_id(name);
+
+  if (decl && decl->kind == decl_constant)
+    return decl->value;
+
+  bad_value.type = error_type;
+  return &bad_value;
+}
+
+static int am_type(region r, tag_declaration tdecl)
+{
+  char *am_name = rarrayalloc(r, strlen(tdecl->name) + 4, char), *s;
+  known_cst am_val;
+
+  sprintf(am_name, "AM_%s", tdecl->name);
+  for (s = am_name; *s; s++)
+    *s = toupper(*s);
+
+  am_val = constant_value(am_name);
+
+  if (type_integer(am_val->type) && cval_knownvalue(am_val->cval))
+    return constant_sint_value(am_val);
+  
+  fprintf(stderr, "warning: Cannot determine AM type for %s\n", selected_type);
+  fprintf(stderr, "         (Looking for definition of %s)\n", am_name);
+  return -1;
+}
+
+static void dump_layout(tag_declaration tdecl)
+{
+  region r = newregion();
+  
+
+  printf("%s %s %lu %d\n", tagkind_name(tdecl->kind),
+        tdecl->name,
+        (unsigned long)cval_uint_value(tdecl->size),
+        am_type(r, tdecl));
+
+  dump_fields(r, "", tdecl->fieldlist);
+
+  deleteregion(r);
+}
+
+bool layout_requested(void)
+{
+  return selected_type || print_csts;
+}
+
+
+void dump_msg_layout(void)
+{
+  tag_declaration tdecl;
+
+  /* We look for a tagged type with name selected_type in the global
+     environment, and dump the layout in a perl-friendly format.
+     We also dump any requested constants. */
+
+  if (selected_type)
+    {
+      tdecl = env_lookup(global_env->tag_env, selected_type, FALSE);
+
+      if (!tdecl)
+       {
+         fprintf(stderr, "error: tag %s not found\n", selected_type);
+         exit(1);
+       }
+
+      if (tdecl->kind == kind_enum_ref)
+       {
+         fprintf(stderr, "error: %s is an enum\n", selected_type);
+         exit(1);
+       }
+
+      if (cval_istop(tdecl->size))
+       {
+         fprintf(stderr, "error: %s is variable size\n", selected_type);
+         exit(1);
+       }
+
+      if (type_contains_pointers(make_tagged_type(tdecl)))
+       {
+         fprintf(stderr, "warning: %s contains pointers\n", selected_type);
+       }
+
+      dump_layout(tdecl);
+
+    }
+
+  if (print_csts)
+    {
+      env_scanner scan_global;
+      const char *name;
+      void *vdecl;
+
+      env_scan(global_env->id_env, &scan_global);
+      while (env_next(&scan_global, &name, &vdecl))
+       {
+         data_declaration ddecl = vdecl;
+
+         if (ddecl->kind == decl_constant)
+           {
+             known_cst val = ddecl->value;
+
+             printf("%s \"%s\" ", name, ddecl->definition->location->filename);
+             dump_type(val->type);
+             putchar(' ');
+
+             if (cval_knownvalue(val->cval))
+               cval_print(stdout, val->cval);
+             else
+               puts(" UNKNOWN");
+             putchar('\n');
+           }
+       }
+    }
+}
+
diff --git a/src/nesc-msg.h b/src/nesc-msg.h
new file mode 100644 (file)
index 0000000..bd3d2e4
--- /dev/null
@@ -0,0 +1,27 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_MSG_H
+#define NESC_MSG_H
+
+void select_nesc_msg(const char *name);
+void select_nesc_csts(void);
+bool layout_requested(void);
+
+void dump_msg_layout(void);
+
+#endif
diff --git a/src/nesc-ndoc.c b/src/nesc-ndoc.c
new file mode 100644 (file)
index 0000000..4eb2c23
--- /dev/null
@@ -0,0 +1,410 @@
+#include <ctype.h>
+
+#include "parser.h"
+#include "nesc-ndoc.h"
+#include "c-parse.h"
+#include "semantics.h"
+#include "AST_utils.h"
+
+static char *rmakestr(region r, char *s, char *e)
+{
+  int l = e - s;
+  char *news = rstralloc(r, l + 1);
+
+  news[l] = '\0';
+  memcpy(news, s, l);
+
+  return news;
+}
+
+static void save_doctag(location loc, region entries_r, dd_list *entries,
+                       char *tag_s, char *tag_e,
+                       char *arg_s, char *arg_e,
+                       int lineno)
+{
+  if (entries)
+    {
+      struct doctag *dtag = typed_ralloc(entries_r, sizeof(struct doctag) + sizeof(const char *), rctypeof(struct doctag));
+
+      dtag->lineno = lineno;
+      dtag->tag = rmakestr(entries_r, tag_s, tag_e);
+      dtag->args[0] = rmakestr(entries_r, arg_s, arg_e);
+      dd_add_last(entries_r, *entries, dtag);
+    }
+  else
+    {
+      /* warn about ignored quoted arguments that normally have
+        semantic significance */
+      struct location here = *loc;
+
+      here.lineno += lineno;
+      warning_with_location(&here, "@%s argument ignored",
+                           rmakestr(current.fileregion, tag_s, tag_e));
+    }
+}
+
+bool get_latest_docstring(struct docstring *doc, region tags_r, dd_list *tags)
+{
+  enum { s_linestart, s_normal, s_doctag, s_docarg_start, s_docarg } state;
+  const char *raw, *r;
+  char *parsed, *p, *short_end, *doctag, *doctag_end, *docarg;
+  bool cpp_comment;
+  int lineno;
+  char c;
+  location loc;
+
+  if (!get_raw_docstring(&raw, &loc))
+    return FALSE;
+
+  if (warn_unexpected_docstring && doc->short_s)
+    {
+      warning_with_location(loc, "duplicate documentation string");
+      warning_with_location(doc->loc, "(this is the location of the previous documentation string)");
+    }
+  doc->loc = loc;
+  doc->long_s = NULL;
+
+  if (tags)
+    *tags = dd_new_list(tags_r);
+  parsed = alloca(strlen(raw) + 1);
+
+  /* Prepare to parse raw */
+  cpp_comment = raw[1] == '/';
+  if (cpp_comment)
+    r = raw;
+  else
+    r = raw + 2;
+  p = parsed;
+  lineno = 0;
+  state = s_linestart;
+  short_end = NULL;
+  while ((c = *r++))
+    {
+      if (state == s_linestart)
+       {
+         if (isspace(c) || (cpp_comment && c == '/'))
+           continue;
+         state = s_normal;
+         /* Skip one * in C-style comments (we've cleared line_start, so
+            won't do this twice) */
+         if (!cpp_comment && c == '*')
+           continue;
+       }
+
+      if (c == '\r' || c == '\n')
+       {
+         if (state == s_docarg)
+           {
+             /* warn about broken quoted arguments, as they have semantic
+                significance */
+             struct location here = *loc;
+
+             here.lineno += lineno;
+             warning_with_location(&here, "unterminated @%s argument ignored",
+                                   rmakestr(current.fileregion, doctag, doctag_end));
+           }
+
+         *p++ = '\n';
+         lineno++;
+         state = s_linestart;
+         continue;
+       }
+
+      /* Skip trailing / in C-style comments */
+      if (!cpp_comment && c == '/' && !*r)
+       break;
+
+      *p++ = c;
+
+      /* Space after . or space before @ indicates end of short doc string */
+      if (!short_end)
+       {
+         if (c == '.' && isspace(*r))
+           short_end = p;
+         else if (c == '@' && p - 2 >= parsed && isspace(p[-2]))
+           short_end = p - 1;
+
+         if (short_end)
+           doc->short_s = rmakestr(parse_region, parsed, short_end);
+       }
+
+      /* Extract tags with a fun state machine */
+    redo:
+      switch (state)
+       {
+       case s_normal:
+         if (c == '@' && p - 2 >= parsed && isspace(p[-2]))
+           {
+             doctag = p;
+             state = s_doctag;
+           }
+         break;
+       case s_doctag:
+         if (!isalpha(c)) /* doctag keyword done, decide if we like it */
+           {
+             /* Currently we like all non-empty doctags and assume
+                they might have up to one quoted argument - filtering
+                is left to our caller. This might want to change if
+                we get into fancier syntax for doctag arguments with
+                semantic significance */
+             if (p - 1 > doctag) /* not empty */
+               {
+                 doctag_end = p - 1;
+                 state = s_docarg_start;
+               }
+             else
+               state = s_normal;
+             goto redo;
+           }
+         break;
+       case s_docarg_start:
+         if (isspace(c))
+           ;
+         else if (c == '\'')
+           {
+             docarg = p;
+             state = s_docarg;
+           }
+         else
+           {
+             state = s_normal;
+             goto redo;
+           }
+         break;
+       case s_docarg:
+         if (c == '\'')
+           {
+             save_doctag(loc, tags_r, tags,
+                         doctag, doctag_end, docarg, p - 1, lineno);
+             state = s_normal;
+           }
+         break;
+       default:
+         assert(0);
+         break;
+       }
+    }
+
+  if (short_end)
+    {
+      /* if there's only whitespace after short_end, then there's no long
+        string */
+      while (*short_end && isspace(*short_end))
+       short_end++;
+      if (*short_end)
+       doc->long_s = rmakestr(parse_region, parsed, p);
+    }
+  else /* only a short string */
+    doc->short_s = rmakestr(parse_region, parsed, p);
+
+  return TRUE;
+}
+
+static void update_parameters(function_declarator fd)
+{
+  node *parm = CASTPTR(node, &fd->parms);
+
+  while (*parm)
+    {
+      if (is_data_decl(*parm)) /* skip errors */
+       {
+         /* The ddecl points to the variable_decl of the new
+            definition.  New variable_decls have a parent field
+            pointing to their containing data_decl (from the call to
+            AST_set_parents below). Use this to update the
+            declaration list. */
+         data_decl pd = CAST(data_decl, *parm);
+         variable_decl vd = CAST(variable_decl, pd->decls);
+
+         if (vd->ddecl)
+           {
+             node newdecl = vd->ddecl->ast->parent;
+
+             /* We also ignore forward parameter declarations (gcc ext) */
+             if (!vd->forward && newdecl)
+               {
+                 newdecl->next = (*parm)->next;
+                 *parm = CAST(node, newdecl);
+               }
+           }
+       }
+      parm = &(*parm)->next;
+    }
+}
+
+static void enforce_redeclaration(node newdecl)
+{
+  if (is_data_decl(newdecl))
+    {
+      variable_decl vd = CAST(variable_decl, CAST(data_decl, newdecl)->decls);
+
+      if (vd->ddecl->definition == vd->ddecl->ast)
+       error("%s is not a function parameter", vd->ddecl->name);
+    }
+}
+
+void ignored_doctag(location docloc, struct doctag *tag)
+{
+  struct location tagloc = *docloc;
+
+  tagloc.lineno += tag->lineno;
+  warning_with_location(&tagloc, "@%s tag ignored", tag->tag);
+}
+
+void ignored_doctags(location docloc, dd_list tags)
+{
+  dd_list_pos stags;
+
+  dd_scan (stags, tags)
+    ignored_doctag(docloc, DD_GET(struct doctag *, stags));
+}
+
+void handle_ddecl_doc_tags(location docloc, data_declaration ddecl,
+                          dd_list tags)
+{
+  declarator d;
+  declaration ast;
+
+  if (!tags)
+    return;
+
+  if (!type_functional(ddecl->type))
+    {
+      ignored_doctags(docloc, tags);
+      return;
+    }
+
+  ast = ddecl->ast;
+  if (is_function_decl(ast))
+    d = CAST(function_decl, ast)->declarator;
+  else
+    d = CAST(variable_decl, ast)->declarator;
+
+  handle_fdecl_doc_tags(docloc, ddecl, get_fdeclarator(d), tags);
+}
+
+void handle_fdecl_doc_tags(location docloc, data_declaration ddecl,
+                          function_declarator fd, dd_list tags)
+{
+  struct semantic_state old;
+  struct location cloc;
+  dd_list_pos stags;
+
+  if (!tags || !fd)
+    return;
+
+  old = current;
+  cloc = current.lex.input->l;
+
+  current.env = fd->env;
+  allow_parameter_redeclaration(fd->parms, FALSE);
+  dd_scan (stags, tags)
+    {
+      struct doctag *tag = DD_GET(struct doctag *, stags);
+      struct location tagloc = *docloc;
+      node parsed;
+
+      tagloc.lineno += tag->lineno;
+      if (!strcmp(tag->tag, "param"))
+       {
+         int old_errorcount = errorcount;
+
+         start_lex_string(l_parameter, tag->args[0]);
+         set_lex_location(&tagloc);
+         parsed = parse();
+         AST_set_parents(parsed);
+         /* Type errors in redeclaration confuse the redeclaration check,
+            and we've already failed compilation anyway */
+         if (errorcount == old_errorcount)
+           enforce_redeclaration(parsed);
+         end_lex();
+       }
+      else if (!strcmp(tag->tag, "return"))
+       {
+         if (fd->return_type)
+           warning_with_location(&tagloc, "duplicate @return tag ignored");
+         else
+           {
+             start_lex_string(l_type, tag->args[0]);
+             set_lex_location(&tagloc);
+             parsed = parse();
+             end_lex();
+             if (parsed)
+               {
+                 fd->return_type = CAST(asttype, parsed);
+                 if (!type_equal(type_function_return_type(ddecl->type),
+                                 fd->return_type->type))
+                   error("inconsistent return type in @return tag");
+               }
+           }
+       }
+      else
+       ignored_doctag(docloc, tag);
+    }
+  update_parameters(fd);
+
+  current = old;
+  set_lex_location(&cloc);
+}
+
+#ifdef TESTING
+char doc_string[65536];
+
+struct location dummy = { "<stdin>", NULL, 1 };
+
+bool get_raw_docstring(const char **docs, location *docl)
+{
+  *docs = doc_string;
+  *docl = &dummy;
+  return TRUE;
+}
+
+region parse_region;
+
+/* Report warning msg at l */
+void vwarning_with_location(location l, const char *format, va_list args)
+{
+  fprintf(stderr, "%s:%lu: ", l->filename, l->lineno);
+  fprintf(stderr, "warning: ");
+  vfprintf(stderr, format, args);
+  putc('\n', stderr);
+}
+
+/* Report warning msg at l */
+void warning_with_location(location l, const char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  vwarning_with_location(l, format, args);
+  va_end(args);
+}
+
+struct semantic_state current;
+int warn_unexpected_docstring;
+
+int region_main(int argc, char **argv)
+{
+  struct docstring doc = { NULL, NULL, NULL };
+  dd_list tags;
+  dd_list_pos e;
+
+  if (argc != 1)
+    return 2;
+
+  current.fileregion = parse_region = newregion();
+  fread(doc_string, sizeof doc_string, 1, stdin);
+  get_latest_docstring(&doc, permanent, &tags);
+  printf("short: %s\n", doc.short_s);
+  printf("long: %s\n", doc.long_s ? doc.long_s : "<null>");
+
+  dd_scan (e, tags)
+    {
+      struct doctag *dtag = DD_GET(struct doctag *, e);
+
+      printf("at %d: %s is %s\n", dtag->lineno, dtag->tag, dtag->args[0]);
+    }
+
+  return 0;
+}
+#endif
diff --git a/src/nesc-ndoc.h b/src/nesc-ndoc.h
new file mode 100644 (file)
index 0000000..32c3dd3
--- /dev/null
@@ -0,0 +1,49 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2008 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_NDOC_H
+#define NESC_NDOC_H
+
+struct docstring
+{
+  const char *short_s, *long_s;
+  location loc;
+};
+
+struct doctag
+{
+  int lineno;                  /* relative to start of string, first line=0 */
+  const char *tag;             /* @param, @result, etc */
+  const char *args[];          /* arguments to key:
+                                  @param(1): parameter name or declaration
+                                  @result(1): result type or empty string
+                               */
+};
+
+bool get_latest_docstring(struct docstring *doc, region tags_r, dd_list *tags);
+
+struct data_declaration;
+struct AST_function_declarator;
+void handle_ddecl_doc_tags(location docloc, struct data_declaration *ddecl,
+                          dd_list tags);
+void handle_fdecl_doc_tags(location docloc, struct data_declaration *ddecl,
+                          struct AST_function_declarator *fd, dd_list tags);
+
+void ignored_doctag(location docloc, struct doctag *tag);
+void ignored_doctags(location docloc, dd_list tags);
+
+#endif
diff --git a/src/nesc-network.c b/src/nesc-network.c
new file mode 100644 (file)
index 0000000..0ecf2e7
--- /dev/null
@@ -0,0 +1,560 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "constants.h"
+#include "nesc-network.h"
+#include "nesc-semantics.h"
+#include "AST_utils.h"
+#include "AST_walk.h"
+#include "c-parse.h"
+#include "edit.h"
+#include "unparse.h"
+#include "nesc-uses.h"
+
+static type uchar_ptr_type;
+
+static bool network_bitfield(expression e)
+{
+  if (is_field_ref(e) && type_network_base_type(e->type))
+    {
+      field_ref fref = CAST(field_ref, e);
+      field_declaration fdecl = fref->fdecl;
+
+      return !cval_istop(fdecl->bitwidth);
+    }
+  return FALSE;
+}
+
+static void xtox_used(data_declaration transcoderfn, function_decl fn)
+{
+  data_declaration fdecl = fn ? fn->ddecl : NULL;
+
+  ddecl_used(transcoderfn, new_use(dummy_location, fdecl, c_executable | c_fncall));
+}
+
+static void hton_used(expression e, function_decl fn)
+{
+  data_declaration ntdef = type_networkdef(e->type);
+
+  if (network_bitfield(e))
+    xtox_used(ntdef->bf_encoder, fn);
+  else
+    xtox_used(ntdef->encoder, fn);
+}
+
+static void ntoh_used(expression e, function_decl fn)
+{
+  data_declaration ntdef = type_networkdef(e->type);
+
+  if (network_bitfield(e))
+    xtox_used(ntdef->bf_decoder, fn);
+  else
+    xtox_used(ntdef->decoder, fn);
+}
+
+static void validate_network_lvalue(expression e)
+{
+  conditional cond;
+
+  if ((cond = conditional_lvalue(e)) &&
+      (type_network_base_type(cond->arg1->type) ||
+       type_network_base_type(cond->arg2->type)))
+    error_with_location(e->location,
+                       "Conditional assignment not supported for network types");
+}
+
+/* Check if expression e is of network base type.  Parameters whose address
+   is not taken are actually of the base type (this should be extended to
+   all local vars whose address is not taken, but currently isn't) */
+static bool really_network_base(expression e)
+{
+  if (is_identifier(e))
+    {
+      identifier id = CAST(identifier, e);
+      data_declaration ddecl = id->ddecl;
+
+      if (ddecl->kind == decl_variable && ddecl->isparameter &&
+         !(ddecl->use_summary & c_addressed))
+       return FALSE;
+    }
+  return e->type && type_network_base_type(e->type);
+}
+
+static data_declaration add_network_temporary(function_decl fn, type t)
+{
+  /* See Weird hack comment in prt_network_assignment */
+  if (fn)
+    return add_temporary(parse_region, CAST(compound_stmt, fn->stmt), t);
+  else
+    return NULL;
+}
+
+static AST_walker_result network_expression(AST_walker spec, void *data,
+                                           expression *n)
+{
+  expression e = *n;
+  function_decl fn = data;
+
+  if (really_network_base(e) &&
+      (e->context & c_read) && !(e->context & c_write))
+    ntoh_used(e, fn);
+
+  return aw_walk;
+}
+
+static AST_walker_result network_assignment(AST_walker spec, void *data,
+                                           assignment *n)
+{
+  assignment a = *n;
+  function_decl fn = data;
+
+  if (really_network_base(a->arg1))
+    {
+      if (a->kind != kind_assign) /* op= reads too */
+       {
+         ntoh_used(a->arg1, fn);
+         /* See problem/ugly hack comment in network_increment */
+         /* op= needs a temp */
+         if (!a->temp1)
+           a->temp1 = add_network_temporary(fn, uchar_ptr_type);
+       }
+      hton_used(a->arg1, fn);
+    }
+
+  validate_network_lvalue(a->arg1);
+
+  return aw_walk;
+}
+
+static AST_walker_result network_increment(AST_walker spec, void *data,
+                                          increment *n)
+{
+  increment i = *n;
+  function_decl fn = data;
+
+  if (really_network_base(i->arg1))
+    {
+      ntoh_used(i->arg1, fn);
+      hton_used(i->arg1, fn);
+
+      /* Problem: adding the declarations for the temporaries changes the
+        AST as we're walking through it. If we add a temporary while
+        walking through the first declaration, we'll revisit this
+        declaration. Oops.  Ugly hack fix: don't create the temporaries if
+        they've already been created. Note that this could lead to
+        duplicate error messages from validate_network_lvalue, but that's
+        for use of a deprecated gcc feature which is going away soon. */
+      if (!i->temp1)
+       {
+         /* we use 2 temps */
+         i->temp1 = add_network_temporary(fn, uchar_ptr_type);
+         i->temp2 = add_network_temporary(fn, type_network_platform_type(i->type));
+       }
+    }
+
+  validate_network_lvalue(i->arg1);
+
+  return aw_walk;
+}
+
+static AST_walker_result network_fdecl(AST_walker spec, void *data,
+                                      function_decl *fd)
+{
+  AST_walk_children(spec, *fd, CAST(node, *fd));
+  return aw_done;
+}
+
+/* An AST walker that does network type processing on the AST */
+static AST_walker network_walker;
+
+static void init_network_walker(void)
+{
+  network_walker = new_AST_walker(parse_region);
+  AST_walker_handle(network_walker, kind_expression, network_expression);
+  AST_walker_handle(network_walker, kind_increment, network_increment);
+  AST_walker_handle(network_walker, kind_assignment, network_assignment);
+  AST_walker_handle(network_walker, kind_function_decl, network_fdecl);
+}
+
+void handle_network_types(declaration decls)
+{
+  node n = CAST(node, decls);
+
+  AST_walk_list(network_walker, NULL, &n);
+}
+
+static void output_hton(type t)
+{
+  output_string(type_networkdef(t)->encoder->name);
+}
+
+static void output_ntoh(type t)
+{
+  output_string(type_networkdef(t)->decoder->name);
+}
+
+static void output_hton_bf(type t)
+{
+  output_string(type_networkdef(t)->bf_encoder->name);
+}
+
+static void output_ntoh_bf(type t)
+{
+  output_string(type_networkdef(t)->bf_decoder->name);
+}
+
+static void output_hton_expr(expression e)
+{
+  if (network_bitfield(e))
+    output_hton_bf(e->type);
+  else
+    output_hton(e->type);
+}
+
+static void output_ntoh_expr(expression e)
+{
+  if (network_bitfield(e))
+    output_ntoh_bf(e->type);
+  else
+    output_ntoh(e->type);
+}
+
+/* Print a network lvalue, return TRUE if it's a bitfield (in which
+   case the field name is not printed) */
+static bool prt_network_lvalue(expression e)
+{
+  bool isbf = network_bitfield(e);
+
+  if (isbf)
+    {
+      /* Network bitfields have no name in the generated code. Just
+        print the structure. We'll add the offset and size later. */
+      output("(unsigned char *)&");
+      prt_expression(CAST(field_ref, e)->arg1, P_CALL);
+    }
+  else
+    {
+      prt_expression_helper(e, P_CALL);
+      output(".data");
+    }
+
+  return isbf;
+}
+
+static void prt_network_bitfield_info(expression e)
+{
+  field_ref fref = CAST(field_ref, e);
+  field_declaration fdecl = fref->fdecl;
+
+  output(", %llu, %llu",
+        cval_uint_value(fdecl->offset), cval_uint_value(fdecl->bitwidth));
+}
+
+static void prt_network_full_lvalue(expression e)
+{
+  if (prt_network_lvalue(e))
+    prt_network_bitfield_info(e);
+}
+
+static bool prt_network_assignment(expression e)
+{
+  char *selfassign = NULL;
+  assignment a;
+
+  if (!(is_assignment(e) && really_network_base((CAST(assignment, e))->arg1)))
+    return FALSE;
+
+  a = CAST(assignment, e);
+
+  switch (e->kind)
+    {
+    case kind_plus_assign:   selfassign = "+"; break;
+    case kind_minus_assign:  selfassign = "-"; break;
+    case kind_times_assign:  selfassign = "*"; break;
+    case kind_divide_assign: selfassign = "/"; break;
+    case kind_lshift_assign: selfassign = "<<"; break;
+    case kind_rshift_assign: selfassign = ">>"; break;
+    case kind_bitand_assign: selfassign = "&"; break;
+    case kind_bitor_assign:  selfassign = "|"; break;
+    case kind_bitxor_assign: selfassign = "^"; break;
+    default: break;
+    }
+
+  /* Weird hack: when temp1 is not set, this op= is outside
+     a function, i.e., in something like a sizeof. We can just
+     pretend it's a regular assignment. */
+  if (selfassign && !a->temp1)
+    selfassign = NULL;
+
+  set_location(e->location);
+  if (selfassign)
+    {
+      const char *temp = a->temp1->name;
+      bool bitfield;
+
+      output("(%s = ", temp);
+      bitfield = prt_network_lvalue(a->arg1);
+      output(", ");
+      output_hton_expr(a->arg1);
+      output("(%s", temp);
+      if (bitfield)
+       prt_network_bitfield_info(a->arg1);
+      output(", ");
+      output_ntoh_expr(a->arg1);
+      output("(%s", temp);
+      if (bitfield)
+       prt_network_bitfield_info(a->arg1);
+      output(") %s ", selfassign);
+      prt_expression(a->arg2, P_TIMES);
+      output("))");
+    }
+  else
+    {
+      output_hton_expr(a->arg1);
+      output("(");
+      prt_network_full_lvalue(a->arg1);
+      output(", ");
+      prt_expression(a->arg2, P_ASSIGN);
+      output(")");
+    }
+  return TRUE;
+}
+
+static bool prt_network_increment(expression e)
+{
+  increment i;
+  const char *temp;
+  char incop;
+  bool bitfield;
+
+  if (!(is_increment(e) && really_network_base((CAST(increment, e))->arg1)))
+    return FALSE;
+
+  i = CAST(increment, e);
+  temp = i->temp1->name;
+  incop = i->kind == kind_preincrement || i->kind == kind_postincrement ? '+' : '-';
+
+  /* pre-op:  (t1 = &e, HTON(t1, (t2 = NTOH(t1) +/- 1)), t2)
+     post-op: (t1 = &e, HTON(t1, (t2 = NTOH(t1)) +/- 1), t2) */
+  set_location(i->location);
+  output("(%s = ", temp);
+  bitfield = prt_network_lvalue(i->arg1);
+  output(", ");
+  output_hton_expr(i->arg1);
+  output("(%s", temp);
+  if (bitfield)
+    prt_network_bitfield_info(i->arg1);
+  output(", ");
+
+  output("(%s = ", i->temp2->name);
+  output_ntoh_expr(i->arg1);
+  output("(%s", temp);
+  if (bitfield)
+    prt_network_bitfield_info(i->arg1);
+  if (i->kind == kind_postincrement || i->kind == kind_postdecrement)
+    output(")) %c 1)", incop);
+  else
+    output(") %c 1))", incop);
+
+  output(", %s)", i->temp2->name);
+
+  return TRUE;
+}
+
+static bool prt_network_read(expression e)
+{
+  if (!(really_network_base(e) &&
+       (e->context & c_read) && !(e->context & c_write)))
+    return FALSE;
+
+  output_ntoh_expr(e);
+  output("(");
+  prt_network_full_lvalue(e);
+  output(")");
+
+  return TRUE;
+}
+
+bool prt_network_expression(expression e)
+{
+  return 
+    prt_network_read(e) ||
+    prt_network_assignment(e) ||
+    prt_network_increment(e);
+}
+
+bool prt_network_typedef(data_decl d, variable_decl vd)
+{
+  if (vd->ddecl->kind == decl_typedef && vd->ddecl->basetype)
+    {
+      /* A Network base type typedef */
+      type basetype = vd->ddecl->basetype;
+
+      if (!type_size_cc(basetype) && cval_isinteger(type_size(basetype)))
+       error_with_location(vd->location, "network base type `%s' is of unknown size", vd->ddecl->name);
+      else
+       {
+         set_location(vd->location);
+         output("typedef struct { unsigned char data[%d]; } __attribute__((packed)) %s;",
+                (int)type_size_int(basetype), vd->ddecl->name);
+       }
+      return TRUE;
+    }
+  return FALSE;
+}
+
+static bool prt_network_parameter_copy(declaration parm, bool copies,
+                                      bool init)
+{
+  if (is_data_decl(parm))
+    {
+      data_decl dd = CAST(data_decl, parm);
+      variable_decl vd = CAST(variable_decl, dd->decls);
+      data_declaration ddecl = vd->ddecl;
+
+      if (ddecl && type_network_base_type(ddecl->type) &&
+         (ddecl->use_summary & c_addressed))
+       {
+         /* We need a real network type copy. */
+         if (!init)
+           {
+             if (!copies)
+               {
+                 outputln("{");
+                 indent();
+               }
+             prt_data_decl(dd);
+           }
+         else
+           {
+             output_hton(ddecl->type);
+             outputln("(%s.data, %s%s);", ddecl->name, NXBASE_PREFIX, ddecl->name);
+           }
+
+         return TRUE;
+       }
+    }
+  return copies;
+}
+
+/* Network base type parameters are passed as their underlying type. Thus
+   we need to copy them to a real network base type variable if their
+   address is taken */
+bool prt_network_parameter_copies(function_decl fn)
+{
+  function_declarator fd = get_fdeclarator(fn->declarator);
+  declaration d;
+  bool copies = FALSE;
+
+  scan_declaration (d, fd->gparms)
+    copies = prt_network_parameter_copy(d, copies, FALSE);
+  scan_declaration (d, fd->parms)
+    copies = prt_network_parameter_copy(d, copies, FALSE);
+
+  scan_declaration (d, fd->gparms)
+    prt_network_parameter_copy(d, copies, TRUE);
+  scan_declaration (d, fd->parms)
+    prt_network_parameter_copy(d, copies, TRUE);
+
+  return copies;
+}
+
+static unsigned long filler_count;
+
+struct network_state
+{
+  size_t offset;
+  bool isextension;
+};
+
+static void network_align_to(largest_uint offset, struct network_state *ns)
+{
+  if (ns->offset < offset) /* There's a gap. Fill it. */
+    outputln("unsigned char __nesc_filler%lu[%llu];",
+            filler_count++, offset - ns->offset);
+}
+
+void prt_network_field_data_decl(data_decl d, struct network_state *ns)
+{
+  declaration fd;
+  psd_options opts = 0;
+
+  scan_declaration (fd, d->decls)
+    {
+      field_decl fdd = CAST(field_decl, fd);
+      field_declaration fdecl = fdd->fdecl;
+
+      /* bitfields just show up as filler */
+      if (cval_istop(fdecl->bitwidth))
+       {
+         if (!cval_isinteger(fdecl->offset))
+           error_with_location(fdd->location, "unsupported network type");
+         else 
+           {
+             largest_uint offset = cval_uint_value(fdecl->offset) / BITSPERBYTE;
+
+             network_align_to(offset, ns);
+             if (type_size_cc(fdecl->type))
+               ns->offset = offset + type_size_int(fdecl->type);
+           }
+           
+         if (ns->isextension)
+           output("__extension__ ");
+         prt_type_elements(d->modifiers, opts);
+         opts |= psd_duplicate;
+         prt_field_decl(fdd);
+         outputln(";");
+       }
+    }
+  if (!(opts & psd_duplicate))
+    prt_interesting_elements(d->modifiers, opts);
+}
+
+void prt_network_field_declaration(declaration d, struct network_state *ns)
+{
+  ns->isextension = FALSE;
+  while (is_extension_decl(d))
+    {
+      ns->isextension = TRUE;
+      d = CAST(extension_decl, d)->decl;
+    }
+  prt_network_field_data_decl(CAST(data_decl, d), ns);
+}
+
+void prt_network_fields(tag_ref tref)
+{
+  declaration d;
+  struct network_state ns = { 0, FALSE };
+
+  output(" {");
+  indent();
+  startline();
+  scan_declaration (d, tref->fields)
+    prt_network_field_declaration(d, &ns);
+  if (cval_isinteger(tref->tdecl->size))
+    network_align_to(cval_uint_value(tref->tdecl->size), &ns);
+  unindent();
+  startline();
+  output("} __attribute__((packed))");
+}
+
+void init_network(void)
+{
+  init_network_walker();
+  uchar_ptr_type = make_pointer_type(unsigned_char_type);
+}
diff --git a/src/nesc-network.h b/src/nesc-network.h
new file mode 100644 (file)
index 0000000..fedb271
--- /dev/null
@@ -0,0 +1,32 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef NESC_NETWORK_H
+
+/* Prefix for non-network version of network base types */
+#define NXBASE_PREFIX "__nesc_nxbase_"
+
+void handle_network_types(declaration decls);
+void init_network(void);
+
+void prt_network_fields(tag_ref tref);
+void prt_network_routines(void);
+bool prt_network_expression(expression e);
+bool prt_network_typedef(data_decl d, variable_decl vd);
+bool prt_network_parameter_copies(function_decl fn);
+
+#endif
diff --git a/src/nesc-paths.c b/src/nesc-paths.c
new file mode 100644 (file)
index 0000000..51d3dcc
--- /dev/null
@@ -0,0 +1,230 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002-2008 Intel Corporation
+
+   This file also includes code from gcc that is
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include <sys/stat.h>
+#include <unistd.h>
+#include "nesc-paths.h"
+#include "semantics.h"
+
+#include "gcc-cpp.h"
+
+/* Locate components/interfaces from their name */
+
+static region pathregion;
+/* Include chains heads and tails.  */
+static struct cpp_dir *heads[4];
+static struct cpp_dir *tails[4];
+static bool include_current_dir;
+static int maxdirlen;
+
+static char *canonicalise(region r, const char *path, int len)
+{
+  int newlen = len + 1;
+  char *cp;
+
+  if (len == 0)
+    return "";
+
+  if (path[len - 1] != '/'
+#ifdef DIR_SEPARATOR
+      && path[len - 1] != DIR_SEPARATOR
+#endif
+      )
+    newlen++;
+
+  cp = rarrayalloc(r, newlen, char);
+  memcpy(cp, path, len);
+  cp[newlen - 2] = '/'; /* make sure last char is / */
+  cp[newlen - 1] = '\0'; /* null terminate */
+
+  unixify_path(cp);
+
+  return cp;
+}
+
+/* Handle -I- */
+static void add_minus(region r)
+{
+  if (!include_current_dir)
+    error("-I- specified twice");
+  include_current_dir = FALSE;
+
+  heads[CHAIN_QUOTE] = heads[CHAIN_BRACKET];
+  tails[CHAIN_QUOTE] = tails[CHAIN_BRACKET];
+  heads[CHAIN_BRACKET] = NULL;
+  tails[CHAIN_BRACKET] = NULL;
+}
+
+static void add_dir(region r, const char *path, int len, int chain)
+{
+  cpp_dir *np = ralloc(r, struct cpp_dir);
+  int l;
+
+  np->next = NULL;
+  np->name = canonicalise(r, path, len);;
+  np->sysp = chain == CHAIN_SYSTEM || chain == CHAIN_AFTER;
+  np->construct = 0;
+  np->user_supplied_p = 1;     /* appears unused */
+
+  if (tails[chain])
+    tails[chain]->next = np;
+  else
+    heads[chain] = np;
+  tails[chain] = np;
+
+  l = strlen(np->name);
+  if (l > maxdirlen)
+    maxdirlen = l;
+}
+
+void add_nesc_dir(const char *path, int chain)
+{
+  if (!strcmp(path, "-"))
+    add_minus(pathregion);
+  else
+    add_dir(pathregion, path, strlen(path), chain);
+}
+
+static bool file_exists(const char *fullname)
+{
+  struct stat sbuf;
+  return stat(fullname, &sbuf) == 0 && S_ISREG(sbuf.st_mode);
+}
+
+static const char *find_file(char *filename)
+{
+  char *fullname = alloca(maxdirlen + strlen(filename) + 1);
+  struct cpp_dir *p;
+
+  if (include_current_dir && file_exists(filename))
+    return "";
+  for (p = heads[CHAIN_QUOTE]; p; p = p->next)
+    {
+      sprintf(fullname, "%s%s", p->name, filename);
+      if (file_exists(fullname))
+       return p->name;
+    }
+  return NULL;
+}
+
+static void build_search_path(region r, const char *pathlist, int chain)
+{
+  if (pathlist)
+    {
+      char *colon;
+
+      while ((colon = strchr(pathlist, ':')))
+       {
+         *colon = '\0';
+         add_dir(r, pathlist, colon - pathlist, chain);
+         pathlist = colon + 1;
+       }
+      add_dir(r, pathlist, strlen(pathlist), chain);
+    }
+}
+
+void init_nesc_paths_start(region r)
+{
+  include_current_dir = TRUE;
+  maxdirlen = 0;
+  pathregion = r;
+}
+
+void add_nesc_path(const char *path, int chain)
+{
+  build_search_path(pathregion, path, chain);
+}
+
+static void join(int c1, int c2)
+{
+  if (heads[c1])
+    tails[c1]->next = heads[c2];
+  else
+    heads[c1] = heads[c2];
+}
+
+void init_nesc_paths_end(void)
+{
+  add_nesc_path(getenv("NESCPATH"), CHAIN_BRACKET);
+
+  join(CHAIN_SYSTEM, CHAIN_AFTER);
+  join(CHAIN_BRACKET, CHAIN_SYSTEM);
+  join(CHAIN_QUOTE, CHAIN_BRACKET);
+
+  /* If verbose, print the list of dirs to search.  */
+  if (flag_verbose)
+    {
+      struct cpp_dir *p;
+
+      fprintf (stderr, "#include \"...\" and component search starts here:\n");
+      for (p = heads[CHAIN_QUOTE];; p = p->next)
+       {
+         if (p == heads[CHAIN_BRACKET])
+           fprintf (stderr, "#include <...> search starts here:\n");
+         if (!p)
+           break;
+         fprintf (stderr, " %s\n", p->name);
+       }
+      fprintf (stderr, "End of search list.\n");
+    }
+}
+
+void set_cpp_include_path(void)
+{
+  cpp_reader *reader = current.lex.finput;
+
+  cpp_set_include_chains(reader, heads[CHAIN_QUOTE], heads[CHAIN_BRACKET],
+                        !include_current_dir);
+}
+
+#define MAX_EXT_LEN 2
+
+const char *find_nesc_file(region r, source_language l, const char *name)
+{
+  int filename_len = strlen(name) + MAX_EXT_LEN + 2;
+  char *filename = alloca(filename_len);
+  const char *dirname;
+  int fullname_len;
+  char *fullname;
+  
+  strcpy(filename, name);
+  switch (l)
+    {
+    case l_interface: strcat(filename, ".nc"); break;
+    case l_component: strcat(filename, ".nc"); break;
+    case l_c: strcat(filename, ".h"); break;
+    default: assert(0); break;
+    }
+
+  dirname = find_file(filename);
+
+  if (!dirname)
+    return NULL;
+
+  fullname_len = strlen(dirname) + filename_len;
+  fullname = rarrayalloc(r, fullname_len, char);
+
+  sprintf(fullname, "%s%s", dirname, filename);
+
+  return fullname;
+}
diff --git a/src/nesc-paths.h b/src/nesc-paths.h
new file mode 100644 (file)
index 0000000..3c8a5de
--- /dev/null
@@ -0,0 +1,32 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_PATHS_H
+#define NESC_PATHS_H
+/* Locate components/interfaces from their name */
+
+enum { CHAIN_QUOTE, CHAIN_BRACKET, CHAIN_SYSTEM, CHAIN_AFTER };
+
+void init_nesc_paths_start(region r);
+void add_nesc_path(const char *path, int chain);
+void add_nesc_dir(const char *path, int chain);
+void init_nesc_paths_end(void);
+
+void set_cpp_include_path(void);
+const char *find_nesc_file(region r, source_language l, const char *name);
+
+#endif
diff --git a/src/nesc-semantics.c b/src/nesc-semantics.c
new file mode 100644 (file)
index 0000000..a239510
--- /dev/null
@@ -0,0 +1,777 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "parser.h"
+#include "nesc-semantics.h"
+#include "semantics.h"
+#include "nesc-decls.h"
+#include "c-parse.h"
+#include "AST_utils.h"
+#include "nesc-paths.h"
+#include "nesc-cpp.h"
+#include "nesc-env.h"
+#include "nesc-component.h"
+#include "nesc-interface.h"
+#include "edit.h"
+#include "c-parse.h"
+#include "semantics.h"
+#include "nesc-attributes.h"
+#include "attributes.h"
+#include "init.h"
+#include "unparse.h"
+#include "nesc-deputy.h"
+
+#include <ctype.h>
+#include <errno.h>
+
+bool nesc_attributep(gcc_attribute a)
+/* Returns: TRUE if a is a nesc-specific attribute
+ */
+{
+  const char *name = a->word1->cstring.data;
+
+  return !strcmp(name, "C") || 
+    !strcmp(name, "spontaneous") ||
+    !strcmp(name, "combine") ||
+    !strcmp(name, "nx_base") ||
+    !strcmp(name, "nx_base_le") ||
+    !strcmp(name, "nx_base_be") ||
+    !strcmp(name, "hwevent") ||
+    !strcmp(name, "atomic_hwevent");
+}
+
+type get_actual_function_type(type t)
+/* Returns: The actual function type for a (possibly generic) type t
+     representing the type of a function/command/event
+ */
+{
+  if (type_generic(t))
+    return type_function_return_type(t);
+  else
+    return t;
+}
+
+function_declarator ddecl_get_fdeclarator(data_declaration fndecl)
+/* Effects: Returns fndecl's function_declarator
+   Requires: fndecl represent a function or function pointer
+*/
+{
+  declarator fd;
+
+  if (is_variable_decl(fndecl->ast))
+    fd = CAST(variable_decl, fndecl->ast)->declarator;
+  else
+    fd = CAST(function_decl, fndecl->ast)->declarator;
+
+  return get_fdeclarator(fd);
+}
+
+declaration ddecl_get_gparms(data_declaration fndecl)
+/* Effects: Returns the declaration list for fndecl's generic parameters 
+   Requires: fndecl represent a function or function pointer
+*/
+{
+  /* For functions in interfaces we get them from the interface ref */
+  if (fndecl->kind == decl_function && fndecl->interface)
+    return CAST(interface_ref, fndecl->interface->ast)->gparms;
+
+  /* Otherwise we get them from the function's declarator */
+  return ddecl_get_fdeclarator(fndecl)->gparms;
+}
+
+bool ddecl_is_command_or_event(data_declaration decl)
+{
+  return decl->kind == decl_function &&
+    (decl->ftype == function_event || decl->ftype == function_command);
+}
+
+bool nesc_filename(const char *name)
+{
+  char *dot = strrchr(lbasename(name), '.');
+
+  if (dot)
+    {
+      if (!strcmp(dot, ".nc"))
+       return TRUE;
+    }
+  return FALSE; /* C by default */
+}
+
+const char *element_name(region r, const char *path)
+/* Returns: Return the "identifier part"
+     of path, i.e., remove any directory and extension
+     The returned string is allocated in region r.
+*/
+{
+  const char *base, *dot;
+
+  base = lbasename(path);
+  dot = strrchr(base, '.');
+
+  if (dot)
+    {
+      /* Extract id */
+      char *copy = rarrayalloc(r, dot - base + 1, char);
+
+      memcpy(copy, base, dot - base);
+      copy[dot - base] = '\0';
+
+      return copy;
+    }
+  else
+    return rstrdup(r, base);
+}
+
+const char *language_name(source_language l)
+{
+  switch (l)
+    {
+    case l_interface: return "interface";
+    case l_component: case l_implementation: return "component";
+    case l_c: return "C file";
+    case l_any: return "";
+    default: assert(0); return "BUG";
+    }
+}
+
+node compile(location loc, nesc_declaration container,
+            const char *name, bool name_is_path)
+{
+  source_language l = container ? container->kind : l_c;
+  const char *path =
+    name_is_path ? name : find_nesc_file(parse_region, l, name);
+  node parse_tree = NULL;
+  struct semantic_state old_semantic_state = current;
+  bool ok;
+
+  if (!path)
+    error_with_location(loc, "%s %s not found", language_name(l), name);
+  else
+    {
+      if (flag_verbose)
+       fprintf(stderr, "preprocessing %s\n", path);
+
+      current.file = container;
+      current.fileregion = newregion();
+      start_semantics(l_c, NULL, global_env);
+      ok = start_lex(l, path);
+      save_pp_file_start(path);
+      if (!ok)
+       error_with_location(loc, "failed to preprocess %s", path);
+      else
+       parse_tree = parse();
+      deleteregion_ptr(&current.fileregion);
+      end_lex();
+      save_pp_file_end();
+    }
+
+  current = old_semantic_state;
+
+  return parse_tree;
+}
+
+nesc_decl dummy_nesc_decl(location loc, nesc_declaration d)
+{
+  word wname = build_word(parse_region, d->name);
+  nesc_decl nd;
+
+  switch (d->kind)
+    {
+    case l_component: {
+      environment env = new_environment(parse_region, global_env, TRUE, FALSE);
+      implementation impl = CAST(implementation,
+       new_module(parse_region, loc, env, NULL));
+      nd = CAST(nesc_decl,
+               new_component(parse_region, dummy_location, wname, NULL, FALSE, NULL, NULL, impl));
+      break;
+    }
+    case l_interface:
+      nd = CAST(nesc_decl,
+               new_interface(parse_region, loc, wname, NULL, NULL));
+      break;
+    default:
+      assert(0);
+      nd = NULL;
+      break;
+    }
+  d->ast = nd;
+  nd->cdecl = d;
+
+  build(nd);
+
+  return nd;
+}
+
+void build(nesc_decl ast)
+{
+  struct semantic_state old_semantic_state = current;
+  nesc_declaration decl = ast->cdecl;
+
+  current.container = decl;
+
+  resolve_deputy_scopes(ast);
+
+  switch (decl->kind)
+    {
+    case l_interface:
+      build_interface(parse_region, decl);
+      break;
+    case l_component:
+      build_component(parse_region, decl);
+      break;
+    default:
+      assert(0);
+    }
+
+  current = old_semantic_state;
+}
+
+nesc_declaration load(source_language sl, location l,
+                     const char *name, bool name_is_path)
+{
+  /* The l_any stuff is a bit of a hack. It's for use from nesc-main.c
+     only, to allow loading something whose "kind" is not yet known.
+     When using l_any, the global environment will record "name" as being
+     a component, but the returned declaration may be a component or 
+     interface. */
+  const char *element = name_is_path ? element_name(parse_region, name) : name;
+  const char *actual_name;
+  node ptree;
+  nesc_decl ast = NULL;
+  nesc_declaration decl =
+    new_nesc_declaration(parse_region, sl == l_any ? l_component : sl, element);
+
+  /* We don't get duplicates as we only load on demand */
+  nesc_declare(decl);
+
+  ptree = compile(l, decl, name, name_is_path);
+  if (ptree)
+    {
+      bool badkind;
+
+      ast = CAST(nesc_decl, ptree);
+      build(ast);
+
+      actual_name = ast->word1->cstring.data;
+      badkind = sl != l_any && ast->cdecl->kind != sl;
+      if (badkind || strcmp(element, actual_name))
+       warning_or_error_with_location(!badkind, ast->location,
+         "expected %s `%s', but got %s '%s'",
+         language_name(sl), element,
+         language_name(ast->cdecl->kind), actual_name);
+
+      /* Force creation of dummy AST if we get wrong kind (this avoids
+         a duplicate error message in require) */
+      if (badkind)
+       ast = NULL;
+    }
+
+  if (!ast)
+    ast = dummy_nesc_decl(new_location(name, 0), decl);
+
+  return ast->cdecl; /* can be different from decl when sl == l_any */
+}
+
+nesc_declaration start_nesc_entity(source_language sl, word name)
+{
+  nesc_declaration decl;
+
+  /* If the kind of entity in the file matches the expected kind
+     (passed to load), reuse the existing declaration. Otherwise
+     make a temporary one to use while loading the file
+  */
+  if (sl == current.file->kind)
+    decl = current.file;
+  else
+    decl = new_nesc_declaration(parse_region, sl, name->cstring.data);
+
+  get_latest_docstring(&decl->doc, permanent, NULL);
+
+  start_semantics(sl, decl, decl->env);
+
+  return decl;
+}
+
+bool is_module_local_static(data_declaration ddecl)
+{
+  return ddecl->kind == decl_variable &&
+    (ddecl->vtype == variable_static && ddecl->container_function &&
+     ddecl->container_function->container); 
+}
+
+bool is_module_variable(data_declaration ddecl)
+{
+  return ddecl->kind == decl_variable &&
+    ddecl->Cname == FALSE &&
+    /* top-level module var or local static module var */
+    (ddecl->container || is_module_local_static(ddecl));
+}
+
+nesc_declaration ddecl_container(data_declaration ddecl)
+{
+  while (ddecl->container_function)
+    ddecl = ddecl->container_function;
+
+  return ddecl->container;
+}
+
+nesc_declaration tdecl_container(tag_declaration tdecl)
+{
+#if 0
+  if (tdecl->container_function)
+    return ddecl_container(tdecl->container_function);
+  else
+#endif
+    return tdecl->container;
+}
+
+const char *make_intf_printname(const char *iname, const char *fname)
+/* Returns: string "iname.fname" allocated in current.fileregion
+ */
+{
+  size_t ilen = strlen(iname);
+  size_t dlen = strlen(fname);
+  char *fullname = rstralloc(current.fileregion, ilen + dlen + 2);
+
+  memcpy(fullname, iname, ilen);
+  fullname[ilen] = '.';
+  strcpy(fullname + ilen + 1, fname);
+
+  return fullname;
+}
+
+const char *decl_printname(data_declaration ddecl)
+{
+  if (ddecl_is_command_or_event(ddecl) && ddecl->interface)
+    return make_intf_printname(ddecl->interface->name, ddecl->name);
+  else
+    return ddecl->name;
+}
+
+data_declaration get_function_ddecl(expression e)
+/* Returns: If e denotes a specific function, return its data_declaration
+     Otherwise return NULL
+*/
+{
+  if (is_identifier(e))
+    {
+      identifier id = CAST(identifier, e);
+
+      if (id->ddecl->kind == decl_function)
+       return id->ddecl;
+    }
+  else if (is_interface_deref(e))
+    return CAST(interface_deref, e)->ddecl;
+
+  return NULL;
+}
+
+data_declaration declare_function(location loc, const char *name, type signature)
+/* Effects: If 'name' is already declared, check that it is a function with
+     the specified signature.
+     If it isn't declared, declare it as a function with the specified
+     signature.
+   Returns: data_declaration for the function, or NULL if an error was
+     reported to the user.
+*/
+{
+  data_declaration fdecl;
+  bool ok = FALSE;
+
+  /* If function already declared, declaration should match signature.
+     If not, we declare it with given signature */
+  fdecl = lookup_id(name, FALSE);
+  if (fdecl)
+    {
+      if (fdecl->kind != decl_function ||
+         !(fdecl->ftype == function_normal || fdecl->ftype == function_static))
+       error_with_location(loc, "function `%s' is not a C function",
+                           name);
+      else if (!type_compatible_unqualified(fdecl->type, signature))
+       error_with_location(loc, "function `%s' does not have the right signature",
+                           name);
+      else
+       ok = TRUE;
+    }
+  else
+    {
+      struct data_declaration tempdecl;
+      declaration dummy = make_error_decl();
+
+      /* Declare function  */
+      dummy->location = loc;
+      init_data_declaration(&tempdecl, dummy, name, signature);
+      tempdecl.kind = decl_function;
+      tempdecl.ftype = function_normal;
+      tempdecl.isexternalscope = tempdecl.isfilescoperef = TRUE;
+      fdecl = declare(current.env, &tempdecl, FALSE);
+
+      ok = TRUE;
+    }
+  return ok ? fdecl : NULL;
+}
+
+void handle_combine_attribute(location loc, const char *combiner, type *t)
+{
+  data_declaration cdecl = 
+    declare_function(loc, combiner,
+                    build_function_type(parse_region, *t, *t, *t, NULL));
+
+  if (cdecl)
+    *t = make_combiner_type(*t, cdecl);
+}
+
+void handle_nxbase_attribute(location loc, bool be, bool allow_bf, const char *basename,
+                            data_declaration ddecl)
+{
+  region r = parse_region;
+  char *encoder_name, *decoder_name;
+  type t = ddecl->type;
+
+  encoder_name = rstralloc(r, strlen(basename) + 13);
+  sprintf(encoder_name, "__nesc_hton_%s", basename);
+  decoder_name = rstralloc(r, strlen(basename) + 13);
+  sprintf(decoder_name, "__nesc_ntoh_%s", basename);
+
+  ddecl->encoder = /* takes buffer and original value. returns original value */
+    declare_function(loc, encoder_name,
+                    build_function_type(r, t, ptr_void_type, t, NULL));
+
+  ddecl->decoder = /* takes buffer and returns decoded value */
+    declare_function(loc, decoder_name,
+                    build_function_type(r, t, const_ptr_void_type, NULL));
+
+  if (allow_bf)
+    {
+      encoder_name = rstralloc(r, strlen(basename) + 15);
+      sprintf(encoder_name, "__nesc_htonbf_%s", basename);
+      decoder_name = rstralloc(r, strlen(basename) + 15);
+      sprintf(decoder_name, "__nesc_ntohbf_%s", basename);
+
+      /* bitfields take additional offset, length fields */
+      ddecl->bf_encoder =
+       declare_function(loc, encoder_name,
+                        build_function_type(r, t, ptr_void_type, unsigned_int_type, unsigned_char_type, t, NULL));
+
+      ddecl->bf_decoder =
+       declare_function(loc, decoder_name,
+                        build_function_type(r, t, const_ptr_void_type, unsigned_int_type, unsigned_char_type, NULL));
+    }
+  ddecl->isbe = be;
+
+  /* We do this even if we got an error, to ensure ddecl gets treated as
+     a network type. */
+  ddecl->basetype = t;
+}
+
+/* Create definition for template parameter 'elements d' with attributes
+   attributes.
+   Returns the declaration for the parameter.
+*/
+declaration declare_template_parameter(declarator d, type_element elements,
+                                      attribute attributes)
+{
+  /* There must be at least a declarator or some form of type specification */
+  location l = d ? d->location : elements->location;
+  variable_decl vd =
+    new_variable_decl(parse_region, l, d, attributes, NULL, NULL, NULL);
+  data_decl dd =
+    new_data_decl(parse_region, l, elements, CAST(declaration, vd));
+  data_declaration ddecl = NULL, old_decl = NULL;
+  struct data_declaration tempdecl;
+  dd_list extra_attr;
+  int class;
+  scflags scf;
+  const char *name;
+  bool defaulted_int;
+  type parm_type;
+
+  parse_declarator(elements, vd->declarator, FALSE, FALSE,
+                  &class, &scf, NULL, &name, &parm_type,
+                  &defaulted_int, NULL, &extra_attr);
+  vd->declared_type = parm_type;
+
+  /* Storage class checks */
+  if (class)
+    {
+      /* Detect "typedef t", to declare a type parameter */
+      if (class == RID_TYPEDEF && defaulted_int &&
+         is_identifier_declarator(d))
+       return declare_type_parameter(d->location,
+                                     CAST(identifier_declarator, d)->cstring,
+                                     attributes, extra_attr);
+      else if (class == RID_TYPEDEF && d == NULL) 
+       {
+         /* Recognise "typedef TYPENAME", and declare TYPENAME as a 
+            type parameter (i.e., we're shadowing a global typedef) */
+         type_element elem;
+         typename tname;
+         bool ok = TRUE;
+
+         /* Check there's only a typedef and a typename */
+         scan_type_element (elem, elements)
+           if (is_typename(elem))
+             tname = CAST(typename, elem);
+           else if (!(is_attribute(elem) ||
+                      (is_rid(elem) && CAST(rid, elem)->id == RID_TYPEDEF)))
+             ok = FALSE;
+
+         if (ok && tname)
+           {
+             cstring cname = make_cstring(parse_region, tname->ddecl->name,
+                                          strlen(tname->ddecl->name));
+             return
+               declare_type_parameter(l, cname, attributes, extra_attr);
+           }
+       }
+    }
+
+  if (!name)
+    error("no name specified for parameter");
+  else if (class)
+    error("storage class specified for parameter `%s'", name);
+
+  check_variable_scflags(scf, vd->location, "parameter", name);
+
+/* Allow real, integral and string types. Not allowing complex for now,
+   though it would be a trivial extension */
+  if (!(type_real(parm_type) || type_chararray(parm_type, TRUE))) 
+    error("only char [] and arithmetic types allowed as component arguments");
+
+  if (type_array(parm_type))
+    /* Transfer const-ness of array into that of type pointed to.  */
+    parm_type =
+      make_pointer_type(qualify_type1(type_array_of(parm_type), parm_type));
+
+  init_data_declaration(&tempdecl, CAST(declaration, vd), name, parm_type);
+  tempdecl.kind = decl_constant;
+  tempdecl.substitute = TRUE;
+  tempdecl.definition = tempdecl.ast;
+
+  old_decl = lookup_id(tempdecl.name, TRUE);
+  if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE))
+    ddecl = old_decl;
+  else
+    ddecl = declare(current.env, &tempdecl, FALSE);
+  vd->ddecl = ddecl;
+
+  ignored_dd_attributes(extra_attr);
+  ignored_attributes(attributes);
+
+  return CAST(declaration, dd);
+}
+
+declaration declare_type_parameter(location l, cstring id, attribute attribs,
+                                  dd_list extra_attr)
+{
+  type_parm_decl d = new_type_parm_decl(parse_region, l, id, NULL);
+  data_declaration ddecl;
+
+  if ((ddecl = lookup_id(id.data, TRUE)))
+    error("duplicate parameter name `%s' in parameter list", id.data);
+  else
+    {
+      struct data_declaration tempdecl;
+
+      init_data_declaration(&tempdecl, CAST(declaration, d), id.data,
+                           error_type);
+      tempdecl.kind = decl_typedef;
+      tempdecl.typevar_kind = typevar_normal;
+      tempdecl.definition = tempdecl.ast;
+      handle_decl_attributes(attribs, &tempdecl);
+      handle_decl_dd_attributes(extra_attr, &tempdecl);
+      ddecl = declare(current.env, &tempdecl, FALSE);
+      ddecl->type = make_variable_type(ddecl);
+    }
+  d->ddecl = ddecl;
+
+  return CAST(declaration, d);
+}
+
+expression make_type_argument(asttype t)
+{
+  type_argument e = new_type_argument(parse_region, t->location, t);
+
+  e->type = t->type;
+
+  return CAST(expression, e);
+}
+
+nesc_declaration original_component(nesc_declaration c)
+{
+  while (c->original)
+    c = c->original;
+
+  return c;
+}
+
+static void attr_C_tdecl(nesc_attribute attr, tag_declaration tdecl)
+{
+  if (tdecl->container_function)
+    error_with_location(attr->location, "`@C()' is for symbols with external scope only");
+  else if (current.container && current.container->abstract)
+    error_with_location(attr->location, "@C() cannot be used inside generic components");
+  else
+    tdecl->Cname = TRUE;
+}
+
+static void attr_C_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  if (!ddecl->isexternalscope)
+    error_with_location(attr->location, "`@C()' is for symbols with external scope only");
+  else if (current.container && current.container->abstract)
+    error_with_location(attr->location, "@C() cannot be used inside generic components");
+  else
+    ddecl->Cname = TRUE;
+}
+
+static bool require_function(nesc_attribute attr, data_declaration ddecl)
+{
+  if (ddecl->kind == decl_function && ddecl->ftype == function_normal)
+    return TRUE;
+
+  error_with_location(attr->location, "`@%s()' is for external functions only", attr->word1->cstring.data);
+  return FALSE;
+}
+
+static void attr_hwevent_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  if (require_function(attr, ddecl))
+    {
+      ddecl->async = TRUE;
+      ddecl->spontaneous = c_call_nonatomic;
+    }
+}
+
+static void attr_atomic_hwevent_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  if (require_function(attr, ddecl))
+    {
+      ddecl->async = TRUE;
+      ddecl->spontaneous = c_call_atomic;
+    }
+}
+
+
+static void attr_spontaneous_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  if (require_function(attr, ddecl))
+    {
+      /* The test avoids overriding the effect of atomic_hwevent */
+      if (!ddecl->spontaneous)
+       ddecl->spontaneous = c_call_nonatomic;
+    }
+}
+
+static void attr_combine_decl(nesc_attribute attr, data_declaration ddecl)
+{
+  ivalue fn_init = lookup_attribute_field(attr, "fn");
+  data_declaration fn_name_ddecl;
+  char *fn_name;
+
+  if (fn_init && fn_init->kind == iv_base &&
+      (fn_name_ddecl = string_ddecl(fn_init->u.base.expr)) &&
+      (fn_name = ddecl2str(parse_region, fn_name_ddecl)))
+    {
+      if (ddecl->kind == decl_typedef)
+       handle_combine_attribute(attr->location, fn_name, &ddecl->type);
+      else
+       error_with_location(attr->location, "@combine(\"function-name\") can only be used with typedef");
+    }
+  else
+    error_with_location(attr->location, "usage is @combine(\"function-name\")");
+}
+
+static void attr_macro_tdecl(nesc_attribute attr, tag_declaration tdecl)
+{
+  ivalue macro_name_init = lookup_attribute_field(attr, "macro_name");
+  data_declaration macro_name_ddecl;
+  char *macro_name, *m;
+
+  if (tdecl->kind != kind_attribute_ref)
+    {
+      error_with_location(attr->location, "@macro() can only be applied to attribute declarations");
+      return;
+    }
+
+  if (!(macro_name_init && macro_name_init->kind == iv_base &&
+       (macro_name_ddecl = string_ddecl(macro_name_init->u.base.expr)) &&
+       (macro_name = ddecl2str(parse_region, macro_name_ddecl))))
+    goto bad;
+
+  /* Check that the symbol name is a valid macro name (C symbol) */
+  if (!(isalpha(macro_name[0]) || macro_name[0] == '_'))
+    goto bad;
+
+  for (m = macro_name + 1; *m; m++)
+    if (!(isalnum(*m) || *m == '_'))
+      goto bad;
+
+  tdecl->macro_name = macro_name;
+  return;
+
+ bad:
+  error_with_location(attr->location, "usage is @macro(\"macro-name\")");
+}
+
+void init_internal_nesc_attributes(void)
+{
+  define_internal_attribute("C", NULL, attr_C_decl, attr_C_tdecl, NULL, NULL,
+                           NULL);
+  define_internal_attribute("hwevent", NULL, attr_hwevent_decl, NULL, NULL,
+                           NULL, NULL);
+  define_internal_attribute("atomic_hwevent", NULL, attr_atomic_hwevent_decl,
+                           NULL, NULL, NULL, NULL);
+  define_internal_attribute("spontaneous", NULL, attr_spontaneous_decl, NULL,
+                           NULL, NULL, NULL);
+  define_internal_attribute("combine", NULL, attr_combine_decl, NULL, NULL,
+                           NULL,
+                           "fn", make_pointer_type(char_type), NULL);
+  define_internal_attribute("macro", NULL, NULL, attr_macro_tdecl, NULL, NULL,
+                           "macro_name", make_pointer_type(char_type), NULL);
+}
+
+void check_name(const char *name)
+{
+  const char *occ, *sep = get_function_separator();
+  int lsep = strlen(sep);
+
+  /* Ignore leading instances of the separator */
+  while (!strncmp(name, sep, lsep))
+    name++;
+
+  occ = strstr(name, sep);
+  if (!occ)
+    return;
+
+  /* Ignore trailing instances of the separator */
+  while (occ[lsep] && !strncmp(occ + 1, sep, lsep))
+    occ++;
+  if (occ[lsep])
+    {
+      static int first = 1;
+
+      warning("symbol `%s' contains the separator `%s' used in generated code",
+             name, sep);
+      if (first)
+       {
+         warning("This can cause bugs or compile errors when the C code");
+         warning("generated by nesC is passed to the underlying C compiler");
+         first = FALSE;
+       }
+    }
+}
diff --git a/src/nesc-semantics.h b/src/nesc-semantics.h
new file mode 100644 (file)
index 0000000..a0e6a0b
--- /dev/null
@@ -0,0 +1,140 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef NESC_SEMANTICS_H
+#define NESC_SEMANTICS_H
+
+struct environment;
+
+#include "nesc-decls.h"
+
+void init_internal_nesc_attributes(void);
+/* Effects: Define internal nesC @-style attributes
+ */
+
+bool nesc_filename(const char *name);
+
+const char *element_name(region r, const char *path);
+/* Returns: Return the "identifier part"
+     of path, i.e., remove any directory and extension
+     The returned string is allocated in region r.
+*/
+
+node compile(location loc, nesc_declaration container,
+            const char *name, bool name_is_path);
+
+nesc_declaration load(source_language sl, location l,
+                     const char *name, bool name_is_path);
+
+type get_actual_function_type(type t);
+/* Returns: The actual function type for a (possibly generic) type t
+     representing the type of a function/command/event
+ */
+
+function_declarator ddecl_get_fdeclarator(data_declaration fndecl);
+/* Effects: Returns fndecl's function_declarator
+   Requires: fndecl represent a function
+*/
+
+declaration ddecl_get_gparms(data_declaration fndecl);
+/* Effects: Returns the declaration list for fndecl's generic parameters 
+   Requires: fndecl represent a function
+*/
+
+bool ddecl_is_command_or_event(data_declaration decl);
+
+bool nesc_attributep(gcc_attribute a);
+/* Returns: TRUE if a is a nesc-specific attribute
+ */
+
+const char *language_name(source_language l);
+
+nesc_decl dummy_nesc_decl(location loc, nesc_declaration ndecl);
+void build(nesc_decl ast);
+nesc_declaration start_nesc_entity(source_language sl, word name);
+
+bool is_module_variable(data_declaration ddecl);
+/* Returns: TRUE if ddecl is a module variable
+   (this includes is_module_local_static)
+ */
+
+bool is_module_local_static(data_declaration ddecl);
+/* Returns: TRUE if ddecl is a local static variable inside a module
+ */
+
+const char *make_intf_printname(const char *iname, const char *fname);
+/* Returns: string "iname.fname" allocated in current.fileregion
+ */
+
+const char *decl_printname(data_declaration ddecl);
+/* Returns: The printable name for ddecl 
+     (interface.name for commands or events in interfaces,
+      just the name otherwise)
+     Any necessary memory is allocated in current.fileregion
+*/
+
+data_declaration get_function_ddecl(expression e);
+/* Returns: If e denotes a specific function, return its data_declaration
+     Otherwise return NULL
+*/
+
+void handle_combine_attribute(location loc, const char *combiner, type *t);
+/* Effects: handle combine attribute specifying function 'combiner', 
+     modifying *t as appropriate
+ */
+
+void handle_nxbase_attribute(location loc, bool be, bool allow_bf,
+                            const char *fnbasename, data_declaration ddecl);
+/* Effects: handle network type attribute specifying functions 
+     ntoh_fnbasename and hton_fnbasename as the decoding and encoding
+     functions respectively.
+     If allow_bf is true, then ntohbf_fnbasename and htonbf_fnbasename
+     are the bitfield decoding and encoding functions repsectively.
+     If be is true, this is a big endian type (transitions between
+     big and little-endian bitfields cause alignemnt to the next byte
+     inside a struct).
+     Modifies ddecl to reflect it's status as a base network type.
+ */
+
+declaration declare_template_parameter(declarator d, type_element elements,
+                                      attribute attributes);
+declaration declare_type_parameter(location l, cstring id, attribute attribs,
+                                  dd_list extra_attr);
+
+expression make_type_argument(asttype t);
+
+nesc_declaration original_component(nesc_declaration c);
+
+/* Some macros to make nesc_error easier to deal with */
+#define nesc_warning (nesc_error ? error : warning)
+#define nesc_warning_with_location (nesc_error ? error_with_location : warning_with_location)
+
+data_declaration declare_function(location loc, const char *name, type signature);
+/* Effects: If 'name' is already declared, check that it is a function with
+     the specified signature.
+     If it isn't declared, declare it as a function with the specified
+     signature.
+   Returns: data_declaration for the function, or NULL if an error was
+     reported to the user.
+*/
+
+nesc_declaration ddecl_container(data_declaration ddecl);
+nesc_declaration tdecl_container(tag_declaration tdecl);
+
+void check_name(const char *name);
+
+#endif
diff --git a/src/nesc-task.c b/src/nesc-task.c
new file mode 100644 (file)
index 0000000..5d36bb6
--- /dev/null
@@ -0,0 +1,383 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "constants.h"
+#include "nesc-task.h"
+#include "nesc-semantics.h"
+#include "nesc-component.h"
+#include "nesc-configuration.h"
+#include "semantics.h"
+#include "AST_utils.h"
+#include "c-parse.h"
+#include "nesc-cg.h"
+#include "nesc-c.h"
+#include "nesc-magic.h"
+#include "edit.h"
+#include "expr.h"
+
+static char *scheduler_name;
+static char *scheduler_unique_name;
+static char *scheduler_interface_name;
+static char *scheduler_interfacedef_name;
+static char *scheduler_run_name;
+static char *scheduler_post_name;
+
+nesc_declaration scheduler;
+static data_declaration scheduler_interface;
+declaration all_tasks;
+
+static word make_scheduler_interfacedef_name(location l)
+{
+  static bool alloc;
+  static cstring ascstring;
+
+  if (!alloc)
+    {
+      alloc = TRUE;
+      ascstring = str2cstring(permanent, scheduler_interfacedef_name);
+    }
+
+  return new_word(parse_region, l, ascstring);
+}
+
+static cstring make_scheduler_run_name(void)
+{
+  static bool alloc;
+  static cstring ascstring;
+
+  if (!alloc)
+    {
+      alloc = TRUE;
+      ascstring = str2cstring(permanent, scheduler_run_name);
+    }
+
+  return ascstring;
+}
+
+static cstring make_scheduler_post_name(void)
+{
+  static bool alloc;
+  static cstring ascstring;
+
+  if (!alloc)
+    {
+      alloc = TRUE;
+      ascstring = str2cstring(permanent, scheduler_post_name);
+    }
+
+  return ascstring;
+}
+
+static void declare_scheduler_interface(data_declaration task_decl)
+{
+  region r = parse_region;
+  location loc = task_decl->ast->location;
+  word task_name;
+  interface_ref task_interface;
+  rp_interface task_uses;
+  int osection;
+
+  /* We save the task's replacement interface in its interface field... */
+  if (task_decl->interface)
+    return;
+
+  /* Build the (uses) 'interface Scheduler as X' ast, declare the interface. */
+  /* This specific AST structure is assumed in wire_scheduler below */
+  task_name = new_word(r, loc, str2cstring(r, task_decl->name));
+  task_interface = new_interface_ref(r, loc, make_scheduler_interfacedef_name(loc),
+                                    NULL, task_name, NULL, NULL, NULL);
+  osection = current.spec_section;
+  current.spec_section = spec_uses;
+  declare_interface_ref(task_interface, NULL, current.container->env, NULL);
+  current.spec_section = osection;
+  task_decl->interface = task_interface->ddecl;
+
+  /* Build the 'uses <interface>' AST, add it to the component */
+  task_uses = new_rp_interface(r, loc, TRUE, CAST(declaration, task_interface));
+  all_tasks = declaration_chain(CAST(declaration, task_uses), all_tasks);
+}
+
+static void replace_task_with_event(type_element modifiers)
+{
+  type_element modifier;
+
+  scan_type_element (modifier, modifiers)
+    if (is_rid(modifier))
+      {
+       rid keyword = CAST(rid, modifier);
+
+       if (keyword->id == RID_TASK)
+         keyword->id = RID_EVENT;
+      }
+}
+
+void handle_post(function_call fcall)
+{
+  identifier task = CAST(identifier, fcall->arg1);
+  
+  interface_deref scheduler_post;
+  data_declaration postdecl;
+
+  postdecl = interface_lookup(task->ddecl->interface, scheduler_post_name);
+  if (!postdecl || postdecl->ftype != function_command)
+    {
+      static int oneerror;
+
+      if (!oneerror)
+       {
+         oneerror = TRUE;
+         error("task interface `%s' has no command named `%s'",
+               scheduler_interface_name, scheduler_post_name);
+       }
+      return;
+    }
+
+  /* Rewrite post foo() to call foo.post() */
+  fcall->call_kind = command_call;
+  task->ddecl = task->ddecl->interface;
+  task->type = task->ddecl->type;
+  scheduler_post = new_interface_deref(parse_region, task->location,
+                                      CAST(expression, task),
+                                      make_scheduler_post_name(), postdecl);
+  scheduler_post->type = postdecl->type;
+  fcall->arg1 = CAST(expression, scheduler_post);
+}
+
+void handle_task_definition(function_decl fdecl)
+{
+  function_declarator fd;
+
+  declare_scheduler_interface(fdecl->ddecl);
+  replace_task_with_event(fdecl->modifiers);
+
+  /* Replace foo with foo.run. We only bother doing this if the declarator
+     is a valid task declarator (function_declarator with nested
+     identifier_declarator) - if it isn't, we have an error in the form of
+     a misdeclared task. */
+  /* (we only get here for something which really is a function declaration) */
+  fd = CAST(function_declarator, fdecl->declarator);
+  if (is_identifier_declarator(fd->declarator))
+    {
+      data_declaration rundecl;
+      identifier_declarator oldd = CAST(identifier_declarator, fd->declarator);
+      identifier_declarator rund =
+       new_identifier_declarator(parse_region, fd->location,
+                                 make_scheduler_run_name());
+      interface_ref_declarator ird =
+       new_interface_ref_declarator(parse_region, fd->location,
+                                    CAST(declarator, rund),
+                                    new_word(parse_region, fd->location, oldd->cstring));
+      fd->declarator = CAST(declarator, ird);
+
+      /* Update task's declaration object */
+      rundecl = interface_lookup(fdecl->ddecl->interface, scheduler_run_name);
+      if (!rundecl || rundecl->ftype != function_event)
+       {
+         static int oneerror;
+
+         if (!oneerror)
+           {
+             oneerror = TRUE;
+             error("task interface `%s' has no event named `%s'",
+                   scheduler_interface_name, scheduler_run_name);
+           }
+       }
+      else
+       {
+         /* Don't lose safe flag */
+         rundecl->safe = fdecl->ddecl->safe;
+         fdecl->ddecl = rundecl;
+         rundecl->definition = CAST(declaration, fdecl);
+       }
+    }
+}
+
+void handle_task_declaration(variable_decl vdecl)
+{
+  declare_scheduler_interface(vdecl->ddecl);
+  /* This declaration will be suppressed in unparsing, as you can't
+     declare events anyway. So no further work needed. */
+}
+
+void load_scheduler(void)
+{
+  scheduler = load(l_component, toplevel_location, scheduler_name, FALSE);
+  if (scheduler_name)
+    {
+      data_declaration intf = env_lookup(scheduler->env->id_env,
+                                        scheduler_interface_name, TRUE);
+
+      /* Check interface for validity. It must be the provided, have a
+        single parameter and be the right interface type.
+        Also, no generic interfaces please. */
+      if (intf && intf->kind == decl_interface_ref && !intf->required &&
+         intf->gparms && !intf->itype->abstract &&
+         !strcmp(intf->itype->name, scheduler_interfacedef_name))
+       {
+         typelist_scanner dummy;
+
+         typelist_scan(intf->gparms, &dummy);
+         if (typelist_next(&dummy) && !typelist_next(&dummy))
+           scheduler_interface = intf;
+       }
+      if (!scheduler_interface)
+       error_with_location(toplevel_location,
+                           "Scheduler `%s' has no scheduling interface named `%s'",
+                           scheduler_name, scheduler_interface_name);
+    }
+}
+
+static expression build_taskid(module m, data_declaration taskdecl)
+{
+  /* Build a unique identifier for a task whose declaration is taskdecl,
+     in module m.
+     Method: we add enum { m$taskdecl = unique("task-unique-string") };
+             to all_cdecls
+            and return an identifier-expression referring to m$taskdecl
+  */
+
+  location loc = taskdecl->ast->location;
+  region r = parse_region;
+  cstring idname;
+  enumerator idast;
+  struct data_declaration tempdecl;
+  enum_ref idenum;
+  tag_declaration enumdecl;
+  data_decl iddecl;
+  expression unique_id, unique_fn, unique_args, use_id;
+  cstring silly_name;
+  identifier_declarator silly_id;
+  declarator silly_d;
+  type_element silly_modifiers;
+  rid silly_typedef;
+  type silly_type;
+  variable_decl silly_vd;
+  data_decl silly_decl;
+
+  /* Build unique("task-unique-string") */
+  unique_fn = build_identifier(r, loc, magic_unique);
+  unique_args = build_string(r, loc, scheduler_unique_name);
+  default_conversion(unique_args);
+  unique_id = build_function_call(r, loc, unique_fn, unique_args);
+
+  /* Build, declare enumerator taskdecl */
+  idname = str2cstring(r, taskdecl->name);
+  idast = new_enumerator(r, loc, idname, unique_id, NULL);
+  init_data_declaration(&tempdecl, CAST(declaration, idast), idname.data,
+                       int_type);
+  tempdecl.kind = decl_constant;
+  tempdecl.definition = tempdecl.ast;
+  tempdecl.value = unique_id->cst;
+  idast->ddecl = declare(m->ienv, &tempdecl, FALSE);
+
+  /* Build the enum declaration */
+  idenum = new_enum_ref(r, loc, NULL, NULL, NULL, TRUE);
+  idenum->fields = CAST(declaration, idast);
+  idenum->tdecl = enumdecl = declare_tag(idenum);
+  layout_enum_start(enumdecl);
+  enumdecl->definition = idenum;
+  enumdecl->defined = TRUE;
+  layout_enum_end(enumdecl);
+
+  /* Build the expression we will use in the wiring. */
+  use_id = build_identifier(r, loc, idast->ddecl);
+
+  /* Hack: the use_id expression needs to be in the module's AST so
+     that we do instantiation and constant folding on it. We build
+     a silly typedef for that purpose:
+       typedef int __nesc_sillytask_taskdecl[use_id]
+  */
+  silly_name = alloc_cstring(r, strlen(taskdecl->name) + 17);
+  sprintf(silly_name.data, "__nesc_sillytask_%s", taskdecl->name);
+  silly_id = new_identifier_declarator(r, loc, silly_name);
+  silly_type = make_array_type(int_type, use_id);
+  type2ast(r, loc, silly_type, CAST(declarator, silly_id), 
+          &silly_d, &silly_modifiers);
+
+  silly_typedef = new_rid(r, loc, RID_TYPEDEF);
+
+  silly_vd = new_variable_decl(r, loc, silly_d, NULL, NULL, NULL,
+                              NULL/*ddecl*/);
+  init_data_declaration(&tempdecl, CAST(declaration, silly_vd),
+                       silly_name.data, silly_type);
+  tempdecl.kind = decl_typedef;
+  tempdecl.definition = tempdecl.ast;
+  silly_vd->ddecl = declare(m->ienv, &tempdecl, FALSE);
+  silly_vd->declared_type = silly_type;
+  silly_decl =
+    new_data_decl(r, loc, type_element_chain(CAST(type_element, silly_typedef),
+                                            silly_modifiers),
+                 CAST(declaration, silly_vd));
+  m->decls = declaration_chain(CAST(declaration, silly_decl), m->decls);
+
+  /* Build the declaration and add it to the module's decls */
+  iddecl = new_data_decl(r, loc, CAST(type_element, idenum), NULL);
+  m->decls = declaration_chain(CAST(declaration, iddecl), m->decls);
+
+  return use_id;
+}
+
+
+void wire_scheduler(module m)
+{
+  rp_interface taskuse;
+  cgraph cg = m->cdecl->connections, userg = m->cdecl->user_connections;
+  struct endp m_end, scheduler_end;
+
+  if (!scheduler_interface)
+    return;
+
+  m_end.component = NULL;
+  m_end.function = NULL;
+  m_end.args_node = NULL;
+
+  scheduler_end.component = NULL;
+  scheduler_end.interface = scheduler_interface;
+  scheduler_end.function = NULL;
+
+  /* This matches the structure created in declare_scheduler_interface */
+  scan_rp_interface (taskuse, CAST(rp_interface, all_tasks))
+    {
+      interface_ref task = CAST(interface_ref, taskuse->decls);
+      location loc = task->location;
+      expression args = build_taskid(m, task->ddecl);
+
+      /* Create m.task -> scheduler.tasks[unique("task-unique-string")] */
+      m_end.interface = task->ddecl;
+      scheduler_end.args_node = args;
+      connect_interface(loc, cg, userg, m_end, scheduler_end, FALSE);
+    }
+}
+
+void set_scheduler(char *spec)
+{
+  scheduler_name = strtok(spec, ",");
+  scheduler_unique_name = strtok(NULL, ",");
+  scheduler_interface_name = strtok(NULL, ",");
+  scheduler_interfacedef_name = strtok(NULL, ",");
+  scheduler_run_name = strtok(NULL, ",");
+  scheduler_post_name = strtok(NULL, ",");
+  
+  if (scheduler_post_name && !strtok(NULL, ","))
+    flag_use_scheduler = TRUE;
+  else
+    {
+      flag_use_scheduler = FALSE;
+      error("invalid arguments to -fnesc-scheduler");
+    }
+}
diff --git a/src/nesc-task.h b/src/nesc-task.h
new file mode 100644 (file)
index 0000000..02be538
--- /dev/null
@@ -0,0 +1,31 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef NESC_TASK_H
+#define NESC_TASK_H
+
+extern nesc_declaration scheduler;
+extern declaration all_tasks;
+
+void set_scheduler(char *spec);
+void load_scheduler(void);
+void wire_scheduler(module m);
+void handle_post(function_call fcall);
+void handle_task_definition(function_decl fdecl);
+void handle_task_declaration(variable_decl vdecl);
+
+#endif
diff --git a/src/nesc-uses.c b/src/nesc-uses.c
new file mode 100644 (file)
index 0000000..bf45059
--- /dev/null
@@ -0,0 +1,538 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "constants.h"
+#include "nesc-uses.h"
+#include "nesc-semantics.h"
+#include "AST_utils.h"
+#include "AST_walk.h"
+#include "c-parse.h"
+
+static region rr;
+dd_list nglobal_uses;
+data_declaration enable_interrupt;
+
+/* IDEAS: track fields of structs
+ */
+
+context exe_context(context c)
+{
+  return c & (c_atomic | c_executable | c_constant);
+}
+
+static context access_context(context c)
+{
+  /* Something that came via a deref is really just a read */
+  if (c & c_deref)
+    c = exe_context(c) | c_read;
+
+  /* Constant contexts don't read or write. But they might address... */
+  if (c & c_constant)
+    c &= ~(c_read | c_write);
+
+  return c;
+}
+
+static context use_context(context c)
+{
+  /* Non-executable contexts do not actually "do" anything. So
+     don't set those bits in the 'use' context */
+  if (!(c & c_executable))
+    return 0;
+
+  return access_context(c);
+}
+
+use new_use(location l, data_declaration fn, context c)
+{
+  use u = ralloc(rr, struct use);
+
+  u->l = l;
+  u->fn = fn;
+  u->c = use_context(c);
+
+  return u;
+}
+
+static iduse new_iduse(data_declaration id, use u)
+{
+  iduse i = ralloc(rr, struct iduse);
+
+  i->id = id;
+  i->u = u;
+
+  return i;
+}
+
+void ddecl_used(data_declaration id, use u)
+{
+  iduse i = new_iduse(id, u);
+
+  if (!id->nuses)
+    id->nuses = dd_new_list(rr);
+  dd_add_last(rr, id->nuses, u);
+  id->use_summary |= u->c;
+
+  if (u->fn)
+    {
+      if (!u->fn->fn_uses)
+       u->fn->fn_uses = dd_new_list(rr);
+      dd_add_last(rr, u->fn->fn_uses, i);
+    }
+  else
+    dd_add_last(rr, nglobal_uses, i);
+}
+
+static void identifier_used(identifier id, data_declaration fn, context c)
+{
+  ddecl_used(id->ddecl, new_use(id->location, fn, c));
+}
+
+static void interface_used(interface_deref iref, data_declaration fn, context c)
+{
+  ddecl_used(iref->ddecl, new_use(iref->location, fn, c));
+}
+
+static void collect_uses_ast(void *n, data_declaration fn, context c);
+static void collect_uses_children(void *n, data_declaration fn, context c);
+static void collect_uses_stmt(statement stmt, data_declaration fn, context c);
+static void collect_uses_expr(expression expr, data_declaration fn, context c);
+
+
+static void collect_uses_deref(expression expr, expression dereferenced,
+                              data_declaration fn, context c)
+{
+  c = use_context(c);
+
+  if (c & c_addressed) /* &*x is just x, not a pointer deref */
+    c &= ~c_addressed;
+  else
+    {
+      c |= c_deref;
+      /*pointer_use(expr, c);*/
+    }
+  collect_uses_expr(dereferenced, fn, c);
+}
+
+static void collect_uses_expr(expression expr, data_declaration fn, context c)
+{
+  context exe_c = exe_context(c);
+
+  if (!expr)
+    return;
+
+  /* A read of an array-type expression actually takes the address
+     of the container 
+  XXX: test on type needed because we have some unhandled nodes such
+  as init_list (Note: these may not have a type in the future too. They
+  probably shouldn't be expressions anyway) */
+  if (expr->type && type_array(expr->type))
+    {
+      /* A dereference of an array type means that the context operation
+        is being applied to the array.
+        If not in a dereference, a read of an array returns its address,
+        so is an address-taking context 
+      */
+      if (c & c_deref)
+       c &= ~c_deref;
+      else if (c & c_read)
+       c = (c & ~c_read) | c_addressed;
+    }
+  else if (expr->cst)
+    c |= c_constant;
+
+  switch (expr->kind)
+    {
+    case kind_identifier:
+      expr->context = access_context(c);
+      identifier_used(CAST(identifier, expr), fn, c);
+      break;
+
+    case kind_interface_deref:
+      interface_used(CAST(interface_deref, expr), fn, c);
+      break;
+
+    case kind_comma: {
+      expression e;
+
+      scan_expression (e, CAST(comma, expr)->arg1)
+       if (e->next)
+         collect_uses_expr(e, fn, exe_c);
+       else
+         collect_uses_expr(e, fn, c);
+      break;
+    }
+    case kind_extension_expr:
+      collect_uses_expr(CAST(unary, expr)->arg1, fn, c);
+      break;
+
+    case kind_conditional: {
+      conditional ce = CAST(conditional, expr);
+      context true_c = c, false_c = c;
+
+      if (ce->condition->cst)
+       {
+         if (definite_zero(ce->condition))
+           true_c &= ~c_executable;
+         else
+           false_c &= ~c_executable;
+       }
+
+      collect_uses_expr(ce->condition, fn, exe_c | c_read);
+      collect_uses_expr(ce->arg1, fn, true_c);
+      collect_uses_expr(ce->arg2, fn, false_c);
+      break;
+    }
+    case kind_compound_expr:
+      collect_uses_stmt(CAST(compound_expr, expr)->stmt, fn, c);
+      break;
+
+    case kind_function_call: {
+      function_call fce = CAST(function_call, expr);
+      expression e;
+
+      // tasks posts are a "read" of the task
+      if (fce->call_kind == post_task)
+       collect_uses_expr(fce->arg1, fn, exe_c | c_read);
+      // C named fn calls, commands and events are c_fncall, 
+      // otherwise its c_read (and a warning about fn ptr use)
+      else if (!(is_interface_deref(fce->arg1) ||
+           is_generic_call(fce->arg1) ||
+           (is_identifier(fce->arg1) &&
+            (CAST(identifier, fce->arg1)->ddecl->kind == decl_function ||
+             CAST(identifier, fce->arg1)->ddecl->kind == decl_magic_function)) ||
+           fce->va_arg_call))
+       {
+         /* We allow a function pointer calls in C code on the assumption
+            that this represents runtime implementation stuff (e.g., 
+            the task scheduler, or tossim stuff) */
+         if (warn_fnptr && 
+             (!fn || fn->container))
+           nesc_warning_with_location(fce->location, "call via function pointer");
+         collect_uses_expr(fce->arg1, fn, exe_c | c_read);
+       }
+      else
+       collect_uses_expr(fce->arg1, fn, exe_c | c_fncall);
+
+      scan_expression (e, fce->args)
+       collect_uses_expr(e, fn, exe_c | c_read);
+      break;
+    }
+    case kind_generic_call: {
+      generic_call fce = CAST(generic_call, expr);
+      expression e;
+
+      collect_uses_expr(fce->arg1, fn, exe_c | c_fncall);
+      scan_expression (e, fce->args)
+       collect_uses_expr(e, fn, exe_c | c_read);
+      break;
+    }
+
+    case kind_array_ref: {
+      array_ref are = CAST(array_ref, expr);
+      expression arg1 = are->arg1, arg2 = are->arg2, arg;
+
+      /* When presented with something like 1[a], switch args to ensure that
+        arg1 is the pointer or array, arg2 the index */
+      if (type_integer(arg1->type)) 
+       {
+         arg = arg1; arg1 = arg2; arg2 = arg;
+       }
+
+      collect_uses_deref(expr, arg1, fn, c);
+      collect_uses_expr(arg2, fn, exe_c | c_read);
+      expr->context = access_context(c);
+      break;
+    }
+    case kind_dereference:
+      expr->context = access_context(c);
+      collect_uses_deref(expr, CAST(dereference, expr)->arg1, fn, c);
+      break;
+
+    case kind_address_of: {
+      expression arg = CAST(unary, expr)->arg1;
+
+      if (c & c_deref) /* *&x is just x */
+       c &= ~c_deref;
+      else
+       c = exe_c | c_addressed;
+
+      collect_uses_expr(arg, fn, c);
+      break;
+    }
+    case kind_field_ref: {
+      expr->context = access_context(c);
+      collect_uses_expr(CAST(field_ref, expr)->arg1, fn, c);
+      break;
+    }
+    case kind_preincrement: case kind_postincrement:
+    case kind_predecrement: case kind_postdecrement: {
+      unary ue = CAST(unary, expr);
+
+      collect_uses_expr(ue->arg1, fn, exe_c | c_read | c_write);
+      break;
+    }
+    case kind_assign: {
+      binary be = CAST(binary, expr);
+
+      collect_uses_expr(be->arg1, fn, exe_c | c_write);
+      collect_uses_expr(be->arg2, fn, exe_c | c_read);
+      break;
+    }
+    case kind_plus_assign: case kind_minus_assign: 
+    case kind_times_assign: case kind_divide_assign: case kind_modulo_assign:
+    case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign:
+    case kind_lshift_assign: case kind_rshift_assign: {
+      binary be = CAST(binary, expr);
+      collect_uses_expr(be->arg1, fn, exe_c | c_read | c_write);
+      collect_uses_expr(be->arg2, fn, exe_c | c_read);
+      break;
+    }
+    case kind_sizeof_expr: case kind_alignof_expr:
+      collect_uses_expr(CAST(unary, expr)->arg1, fn, 0);
+      break;
+
+    case kind_cast: {
+      cast ce = CAST(cast, expr);
+
+      collect_uses_ast(ce->asttype, fn, c);
+      collect_uses_expr(ce->arg1, fn, c);
+    }
+    default:
+      if (is_unary(expr))
+       collect_uses_expr(CAST(unary,expr)->arg1, fn, c);
+      else if (is_binary(expr))
+       {
+         binary be = CAST(binary, expr);
+
+         collect_uses_expr(be->arg1, fn, exe_c | c_read);
+         collect_uses_expr(be->arg2, fn, exe_c | c_read);
+       }
+      else
+       /* A default catch-all for
+            sizeof_type, alignof_type, label_address, cast_list,
+            init_list, init_index, init_field, lexical_cst,
+            string_cst, string
+          Embeddded expressions are compile-time constants or read-only,
+          so the default collect_uses_ast_expr is valid. */
+       collect_uses_children(expr, fn, c);
+      break;
+    }
+}
+
+static void collect_uses_asm_operands(asm_operand operands,
+                                     data_declaration fn, context exe_c)
+{
+  asm_operand aop;
+
+  scan_asm_operand (aop, operands)
+    {
+      int mode = asm_rwmode(aop->string);
+      context c = exe_c;
+
+      /* = is write, + is r/w, everything else is read */
+      if (mode == '=' || mode == '+')
+       c |= c_write;
+      if (mode != '=')
+       c |= c_read;
+
+      collect_uses_expr(aop->arg1, fn, c);
+    }
+}
+
+
+static void collect_uses_stmt(statement stmt, data_declaration fn, context c)
+{
+  context exe_c = exe_context(c);
+
+  if (!stmt)
+    return;
+
+  switch (stmt->kind)
+    {
+    case kind_compound_stmt: {
+      compound_stmt cs = CAST(compound_stmt, stmt);
+      statement s;
+
+      collect_uses_ast(cs->id_labels, fn, c);
+      collect_uses_ast(cs->decls, fn, c);
+
+      /* The last statement is possiblt read (in compound_expr) */
+      scan_statement (s, cs->stmts)
+        if (s->next) 
+          collect_uses_stmt(s, fn, exe_c);
+        else 
+          collect_uses_stmt(s, fn, c);
+
+      break;
+    }
+    case kind_if_stmt: {
+      if_stmt is = CAST(if_stmt, stmt);
+      context true_c = exe_c, false_c = exe_c;
+
+      if (is->condition->cst)
+       {
+         if (definite_zero(is->condition))
+           true_c &= ~c_executable;
+         else
+           false_c &= ~c_executable;
+       }
+
+      collect_uses_expr(is->condition, fn, exe_c | c_read);
+      collect_uses_stmt(is->stmt1, fn, true_c);
+      collect_uses_stmt(is->stmt2, fn, false_c);
+      break;
+    }
+    case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: {
+      conditional_stmt cs = CAST(conditional_stmt, stmt);
+      context body_c = exe_c;
+
+      if (cs->condition->cst && stmt->kind == kind_while_stmt &&
+         definite_zero(cs->condition))
+       body_c &= ~c_executable;
+      collect_uses_expr(cs->condition, fn, exe_c | c_read);
+      collect_uses_stmt(cs->stmt, fn, body_c);
+      break;
+    }
+    case kind_for_stmt: {
+      for_stmt fs = CAST(for_stmt, stmt);
+      context body_c = exe_c;
+
+      if (fs->arg2 && fs->arg2->cst && definite_zero(fs->arg2))
+       body_c &= ~c_executable;
+      collect_uses_expr(fs->arg1, fn, exe_c | c_read);
+      collect_uses_expr(fs->arg2, fn, exe_c | c_read);
+      collect_uses_expr(fs->arg3, fn, body_c | c_read);
+      collect_uses_stmt(fs->stmt, fn, body_c);
+      break;
+    }
+    case kind_labeled_stmt:
+      collect_uses_ast(CAST(labeled_stmt, stmt)->label, fn, c);
+      collect_uses_stmt(CAST(labeled_stmt, stmt)->stmt, fn, c);
+      break;
+
+    case kind_expression_stmt:
+      collect_uses_expr(CAST(expression_stmt, stmt)->arg1, fn, c);
+      break;
+
+    case kind_atomic_stmt:
+      collect_uses_stmt(CAST(atomic_stmt,stmt)->stmt, fn, exe_c | c_atomic);
+      break;
+
+    case kind_asm_stmt: {
+      asm_stmt as = CAST(asm_stmt, stmt);
+
+      collect_uses_expr(as->arg1, fn, exe_c | c_read);
+      collect_uses_asm_operands(as->asm_operands1, fn, exe_c);
+      collect_uses_asm_operands(as->asm_operands2, fn, exe_c);
+      break;
+    }
+    default:
+      /* for break_stmt, continue_stmt, goto_stmt, computed_goto_stmt,
+             empty_stmt, return_stmt */
+      collect_uses_children(stmt, fn, c);
+      break;
+    }
+}
+
+/* An AST walker that collect_usess all reachable expressions */
+static AST_walker collect_uses_walker;
+
+struct uses_data
+{
+  context c;
+  data_declaration function;
+};
+
+static AST_walker_result collect_uses_ast_expr(AST_walker spec, void *data,
+                                              expression *e)
+{
+  struct uses_data *ud = data;
+  collect_uses_expr(*e, ud->function, exe_context(ud->c) | c_read);
+  return aw_done;
+}
+
+static AST_walker_result collect_uses_ast_stmt(AST_walker spec, void *data,
+                                              statement *s)
+{
+  struct uses_data *ud = data;
+  collect_uses_stmt(*s, ud->function, exe_context(ud->c));
+  return aw_done;
+}
+
+static AST_walker_result collect_uses_ast_fdecl(AST_walker spec, void *data,
+                                               function_decl *fd)
+{
+  struct uses_data *ud = data;
+  struct uses_data new_ud = *ud;
+
+  new_ud.function = (*fd)->ddecl;
+  AST_walk_children(spec, &new_ud, CAST(node, *fd));
+
+  return aw_done;
+}
+
+static void init_collect_uses_walker(void)
+{
+  collect_uses_walker = new_AST_walker(rr);
+  AST_walker_handle(collect_uses_walker, kind_expression,
+                   collect_uses_ast_expr);
+  AST_walker_handle(collect_uses_walker, kind_statement,
+                   collect_uses_ast_stmt);
+  AST_walker_handle(collect_uses_walker, kind_function_decl,
+                   collect_uses_ast_fdecl);
+}
+
+static void collect_uses_ast(void *n, data_declaration fn, context c)
+{
+  node nn = CAST(node, n);
+  struct uses_data new_ud;
+
+  new_ud.c = c;
+  new_ud.function = fn;
+
+  AST_walk_list(collect_uses_walker, &new_ud, &nn);
+}
+
+static void collect_uses_children(void *n, data_declaration fn, context c)
+{
+  struct uses_data new_ud;
+
+  new_ud.c = c;
+  new_ud.function = fn;
+
+  AST_walk_children(collect_uses_walker, &new_ud, CAST(node, n));
+}
+
+void collect_uses(declaration decls)
+{
+  collect_uses_ast(decls, NULL, c_executable);
+}
+
+void init_uses(void)
+{
+  type ei_type;
+
+  rr = parse_region;
+  nglobal_uses = dd_new_list(rr);
+  init_collect_uses_walker();
+
+  ei_type = build_function_type(parse_region, void_type, NULL);
+  enable_interrupt =
+    declare_function(dummy_location, "__nesc_enable_interrupt", ei_type);
+}
diff --git a/src/nesc-uses.h b/src/nesc-uses.h
new file mode 100644 (file)
index 0000000..062220e
--- /dev/null
@@ -0,0 +1,72 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef NESC_USES_H
+#define NESC_USES_H
+
+typedef enum {
+  c_atomic = 1,
+  c_executable = 2,
+  c_read = 4,
+  c_write = 8,
+  c_fncall = 16,
+  c_addressed = 32,
+  c_deref = 64,
+  c_constant = 128
+} context;
+
+typedef struct use
+{
+  location l;
+  data_declaration fn;         /* function containing use */
+  context c;
+} *use;
+
+typedef struct iduse
+{
+  data_declaration id;
+  use u;
+} *iduse;
+
+extern dd_list nglobal_uses;
+
+/* Declaration of __nesc_enable_interrupt function. Data-race detection
+   and duplicate atomic suppression needs to be aware of these calls to
+   function correctly.
+
+   The current implementation is simplistic (conservative and unsafe):
+   If function X calls __nesc_enable_interrupt, we assume that:
+   - there are non-atomic calls to X
+   - calls made from inside an atomic statement in X are still atomic
+     (i.e., we assume there is no way to reach a statement inside 'atomic'
+     from the __nesc_enable_interrupt() call. We do issue a warning when
+     __nesc_enable_interrupt() is called from within an atomic statement).
+
+   The proper behaviour would be to analyse X's control flow graph.
+*/
+extern data_declaration enable_interrupt;
+
+void collect_uses(declaration decls);
+
+context exe_context(context c);
+
+void init_uses(void);
+
+use new_use(location l, data_declaration fn, context c);
+void ddecl_used(data_declaration id, use u);
+
+#endif
diff --git a/src/nesc-xml.c b/src/nesc-xml.c
new file mode 100644 (file)
index 0000000..bf0fc44
--- /dev/null
@@ -0,0 +1,570 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <ctype.h>
+#include "parser.h"
+#include "nesc-xml.h"
+#include "semantics.h"
+#include "nesc-semantics.h"
+#include "constants.h"
+#include "init.h"
+
+/* Pick an indentation amount */
+#define INDENT 2
+
+static region xml_region;
+static FILE *xml_file;
+static int indent_level;
+static dd_list tags;
+static bool at_line_start;
+
+void xindent(void)
+{
+  indent_level += INDENT;
+}
+
+void xunindent(void)
+{
+  indent_level -= INDENT;
+}
+
+void xputc(char c)
+{
+  if (xml_file)
+    putc(c, xml_file);
+}
+
+static void output_indentation(void)
+{
+  int i;
+
+  if (xml_file)
+    for (i = 0; i < indent_level; i++) putc(' ', xml_file);
+}
+
+static void output_indent_if_needed(void)
+{
+  if (at_line_start)
+    {
+      at_line_start = FALSE;
+      output_indentation();
+    }
+}
+
+void xnewline(void)
+{
+  xputc('\n');
+  at_line_start = TRUE;
+}
+
+void xstartline(void)
+{
+  if (!at_line_start) xnewline();
+}
+
+void xstartline_noindent(void)
+{
+  xstartline();
+  at_line_start = FALSE;
+}
+
+void xvprintf(char *format, va_list args)
+{
+  if (xml_file)
+    {
+      output_indent_if_needed();
+      vfprintf(xml_file, format, args);
+    }
+}
+
+void xprintf(char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  xvprintf(format, args);
+  va_end(args);
+}
+
+/* Output an arbitrary C character in an XML-friendly way. Control
+   characters are remapped to 0x2400, except CR, LF and Tab */
+void xqputc(int c)
+{
+  /* Ahh, the joys of XML. The control characters are lurking
+     from 0x2400 onwards, except for CR, LF and Tab which exist
+     at their usual value. Furthermore, ", < and & need to be quoted */
+  /* Some characters show up as small numbers */
+  if (c == '"' || c == '<' || c == '&' ||
+      c == '\r' || c == '\n' || c == '\t')
+    xprintf("&#%d;", c);
+  /* Regular ASCII chars show up as themselves */
+  else if ((unsigned char)c == c && isprint(c))
+    putc(c, xml_file);
+  else 
+    {
+      /* Everything else shows up on the 0x24xx page */
+      c += 0x2400;
+      xprintf("&#%d;", c);
+    }
+}
+
+/* Output a string quoted to match XML AttValue rules */
+void xqputs(const char *s)
+{
+  if (!xml_file)
+    return;
+
+  while (*s)
+    xqputc(*s++);
+}
+
+/* Output a wide-char string quoted to match XML AttValue rules */
+void xqputcs(const cstring s)
+{
+  int i;
+
+  if (!xml_file)
+    return;
+
+  for (i = 0; i < s.length; i++)
+    xqputc(s.data[i]);
+}
+
+
+void xputs(const char *s)
+{
+  if (!xml_file)
+    return;
+
+  output_indent_if_needed();
+  fputs(s, xml_file);
+}
+
+
+/* Leaks until xml_end. */
+static void push_tag(const char *tag)
+{
+  if (tags)
+    dd_add_first(xml_region, tags, (char *)tag);
+}
+
+static const char *pop_tag(void)
+{
+  dd_list_pos top;
+  const char *tag;
+
+  if (!tags)
+    return NULL;
+
+  top = dd_first(tags);
+  tag = DD_GET(const char *, top);
+  dd_remove(top);
+
+  return tag;
+}
+
+void xml_tag_start(const char *tag)
+{
+  push_tag(tag);
+  xprintf("<%s", tag);
+}
+
+void xml_tag(const char *tag)
+{
+  xml_tag_start(tag);
+  xml_tag_end();
+}
+
+void xml_tag_end(void)
+{
+  xputs(">");
+}
+
+void xml_qtag(const char *tag)
+{
+  xprintf("<%s/>", tag);
+}
+
+void xml_tag_end_pop(void)
+{
+  pop_tag();
+  xputs("/>");
+}
+
+void xml_pop(void)
+{
+  xprintf("</%s>", pop_tag());
+}
+
+void xml_attr(const char *name, const char *val)
+{
+  xprintf(" %s=\"", name);
+  xqputs(val);
+  xputs("\"");
+}
+
+void xml_attr_int(const char *name, largest_int val)
+{
+  xprintf(" %s=\"%lld\"", name, val);
+}
+
+void xml_attr_ptr(const char *name, void *val)
+{
+  xprintf(" %s=\"%p\"", name, val);
+}
+
+void xml_attr_noval(const char *name)
+{
+  xprintf(" %s=\"\"", name);
+}
+
+void xml_attr_bool(const char *name, bool val)
+{
+  if (val)
+    xml_attr_noval(name);
+}
+
+void xml_attr_cval(const char *name, cval val)
+{
+  bool unknown = FALSE;
+
+  xprintf(" %s=\"", name);
+
+  if (cval_isunsigned(val))
+    xprintf("I:%llu", cval_uint_value(val));
+  else if (cval_isinteger(val))
+    xprintf("I:%lld", cval_sint_value(val));
+  else if (cval_isunknown(val))
+    unknown = TRUE;
+  else if (cval_isfloating(val))
+    /* XXX: hacky version */
+    xprintf("F:%.20Le", cval_float_value(val));
+  else if (cval_isaddress(val))
+    {
+      data_declaration ddecl = cval_ddecl(val);
+
+      /* XXX: We don't (yet) support strings with an offset */
+      if (ddecl && ddecl->kind == decl_magic_string && cval_knownbool(val))
+       {
+         /* Wide strings are printed as their byte-by-byte rep. FIXME */
+         xputs("S:");
+         xqputcs(ddecl->schars);
+       }
+      else
+       unknown = TRUE;
+    }
+  else if (cval_istop(val))
+    xputs("V:");
+  else
+    unknown = TRUE;
+
+  if (unknown)
+    xputs("U:");
+  xputc('"');
+}
+
+void xml_attr_loc(location loc)
+{
+  if (loc == dummy_location)
+    {
+      xprintf("  loc=\"NONE\"");
+      return;
+    }
+  xprintf(" loc=\"%d", loc->lineno);
+  if (loc->container)
+    {
+      xputc('(');
+      xqputs(loc->container->instance_name);
+      xputc(')');
+    }
+  xputc(':');
+  xqputs(loc->filename);
+  xputc('"');
+}
+
+
+void xml_start_dummy(void)
+{
+  xml_file = NULL;
+  indent_level = 0;
+  at_line_start = TRUE;
+  tags = NULL;
+}
+
+void xml_start(FILE *f)
+{
+  xml_region = newregion();
+  xml_file = f;
+  indent_level = 0;
+  at_line_start = TRUE;
+  tags = dd_new_list(xml_region);
+}
+
+void xml_end(void)
+{
+  deleteregion_ptr(&xml_region);
+  xml_file = NULL;
+  tags = NULL;
+}
+
+/* Convenient shortcuts */
+
+void indentedtag_start(const char *name)
+{
+  xstartline();
+  xml_tag_start(name);
+  xindent();
+}
+
+void indentedtag(const char *name)
+{
+  xstartline();
+  xml_tag(name);
+  xindent();
+  xnewline();
+}
+
+void indentedtag_pop(void)
+{
+  xstartline();
+  xunindent();
+  xml_pop();
+  xnewline();
+}
+
+/* Standard nesC xml elements */
+xml_list xl_variables, xl_constants, xl_functions, xl_typedefs,
+  xl_interfaces, xl_icomponents, xl_interfacedefs, xl_components, xl_tags;
+
+void nxml_simple_value(type t, cval val)
+{
+  indentedtag_start("value");
+  xml_attr_cval("cst", val); /* val can be cval_top */
+  xml_tag_end();
+  nxml_type(t);
+  indentedtag_pop();
+}
+
+void nxml_ddecl_ref(data_declaration ddecl)
+{
+  xml_list l = NULL;
+
+  switch (ddecl->kind)
+    {
+    case decl_variable: xml_tag_start("variable-ref"); l = xl_variables; break;
+    case decl_constant: xml_tag_start("constant-ref"); l = xl_constants; break;
+    case decl_function: xml_tag_start("function-ref"); l = xl_functions; break;
+    case decl_typedef: xml_tag_start("typedef-ref"); l = xl_typedefs; break;
+    case decl_interface_ref: xml_tag_start("interface-ref"); l = xl_interfaces; break;
+    case decl_component_ref: xml_tag_start("internal-component-ref"); l = xl_icomponents; break;
+    default: assert(0);
+    }
+  xml_list_add(l, ddecl);
+  xml_attr("name", ddecl->name);
+  if (ddecl->container || ddecl->container_function)
+    xml_attr_noval("scoped");
+  xml_attr_ptr("ref", ddecl);
+  xml_tag_end_pop();
+}
+
+void nxml_ndecl_ref(nesc_declaration ndecl)
+{
+  if (ndecl->kind == l_interface)
+    {
+      xml_tag_start("interfacedef-ref");
+      xml_list_add(xl_interfacedefs, ndecl);
+    }
+  else
+    {
+      xml_list_add(xl_components, ndecl);
+      xml_tag_start("component-ref");
+    }
+  xml_attr("qname", ndecl->instance_name);
+  //xml_attr_ptr("ref", ndecl);
+  xml_tag_end_pop();
+}
+
+void nxml_arguments(expression arguments)
+{
+  expression arg;
+
+  indentedtag("arguments");
+  scan_expression (arg, arguments)
+    {
+      if (is_type_argument(arg))
+       nxml_type(CAST(type_argument, arg)->asttype->type);
+      else 
+       nxml_simple_value(arg->type, arg->cst ? arg->cst->cval : cval_top);
+    }
+  indentedtag_pop();
+}
+
+void nxml_instance(nesc_declaration ndecl)
+{
+  nesc_declaration orig = original_component(ndecl);
+
+  indentedtag_start("instance");
+  if (ndecl->kind == l_component && ndecl->original && !ndecl->abstract)
+    xml_attr_int("number", ndecl->instance_number);
+  xml_tag_end(); xnewline();
+
+  nxml_ndecl_ref(orig);
+  if (ndecl->arguments)
+    nxml_arguments(ndecl->arguments);
+
+  indentedtag_pop();
+}
+
+void nxml_tdecl_ref(tag_declaration tdecl)
+{
+  char tag[20];
+
+  xml_list_add(xl_tags, tdecl);
+  sprintf(tag, "%s-ref", tagkind_name(tdecl->kind));
+  xml_tag_start(tag);
+  if (tdecl->name)
+    xml_attr("name", tdecl->name);
+  xml_attr_bool("scoped", !!tdecl->container/* || tdecl->container_function*/);
+  xml_attr_ptr("ref", tdecl);
+  xml_tag_end_pop();
+}
+
+static void nxml_value_base(ivalue value)
+{
+  nxml_simple_value(value->type, value->u.base.value);
+}
+
+static void nxml_value_array(ivalue value)
+{
+  ivalue_array elem;
+
+  indentedtag("value-array");
+  nxml_type(value->type);
+  for (elem = value->u.array; elem; elem = elem->next)
+    {
+      indentedtag_start("array-element");
+      xml_attr_int("from", elem->from);
+      xml_attr_int("to", elem->to);
+      xml_tag_end();
+      nxml_value(elem->value);
+      indentedtag_pop();
+    }
+  indentedtag_pop();
+}
+
+static void nxml_value_structured(ivalue value)
+{
+  ivalue_field field;
+
+  indentedtag("value-structured");
+  nxml_type(value->type);
+  for (field = value->u.structured; field; field = field->next)
+    {
+      indentedtag_start("structured-element");
+      xml_attr("field", field->field->name);
+      xml_attr_ptr("ref", field->field);
+      xml_tag_end();
+      nxml_value(field->value);
+      indentedtag_pop();
+    }
+  indentedtag_pop();
+}
+
+void nxml_value(ivalue value)
+{
+  switch (value->kind)
+    {
+    case iv_base: nxml_value_base(value); break;
+    case iv_array: nxml_value_array(value); break;
+    case iv_structured: nxml_value_structured(value); break;
+    default: assert(0);
+    }
+}
+
+void nxml_doc(struct docstring *doc)
+{
+  if (!doc->short_s)
+    return;
+  indentedtag_start("documentation");
+  xml_attr_loc(doc->loc);
+  xml_tag_end();
+  xnewline();
+  xml_tag("short");
+  xqputs(doc->short_s);
+  xml_pop();
+  xnewline();
+  if (doc->long_s)
+    {
+      xml_tag("long");
+      xqputs(doc->long_s);
+      xml_pop();
+      xnewline();
+    }
+  indentedtag_pop();
+}
+
+
+/* Incremental list creation support */
+
+struct xml_list
+{
+  region r;
+  dd_list all;
+  dd_list latest;
+  bool *changed;
+  bool (*addfilter)(void *entry);
+};
+
+xml_list new_xml_list(region r, bool *changed, bool (*addfilter)(void *entry))
+{
+  xml_list l = ralloc(r, struct xml_list);
+
+  l->r = r;
+  l->all = dd_new_list(l->r);
+  l->changed = changed;
+  l->addfilter = addfilter;
+
+  return l;
+}
+
+void xml_list_add(xml_list l, void *entry)
+{
+  if (!l || !l->addfilter(entry))
+    return;
+
+  if (!l->latest)
+    l->latest = dd_new_list(l->r);
+  dd_add_last(l->r, l->latest, entry);
+  dd_add_last(l->r, l->all, entry);
+  *l->changed = TRUE;
+}
+
+dd_list xml_list_latest(xml_list l)
+{
+  dd_list latest = l->latest;
+  l->latest = NULL;
+  return latest;
+}
+
+void xml_list_reset(xml_list l)
+{
+  l->latest = l->all;
+}
+
+
+
+
diff --git a/src/nesc-xml.h b/src/nesc-xml.h
new file mode 100644 (file)
index 0000000..e25dbdc
--- /dev/null
@@ -0,0 +1,83 @@
+/* This file is part of the nesC compiler.
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+#ifndef NESC_XML_H
+#define NESC_XML_H
+
+#include "parser.h"
+#include "nesc-xml.h"
+
+typedef struct xml_list *xml_list;
+
+/* Low-level text output functions */
+void xindent(void);
+void xunindent(void);
+void xnewline(void);
+void xstartline(void);
+void xstartline_noindent(void);
+void xvprintf(char *format, va_list args);
+void xprintf(char *format, ...);
+void xqputs(const char *s);
+void xqputcs(cstring cs);
+void xputs(const char *s);
+
+/* Tag/attribute handling */
+void xml_tag_start(const char *tag);
+void xml_tag(const char *tag);
+void xml_tag_end(void);
+void xml_qtag(const char *tag);
+void xml_tag_end_pop(void);
+void xml_pop(void);
+void xml_attr(const char *name, const char *val);
+void xml_attr_int(const char *name, largest_int val);
+void xml_attr_ptr(const char *name, void *val);
+void xml_attr_noval(const char *name);
+void xml_attr_bool(const char *name, bool val);
+void xml_attr_cval(const char *name, cval val);
+void xml_attr_loc(location loc);
+
+void xml_start_dummy(void);
+void xml_start(FILE *f);
+void xml_end(void);
+
+/* Convenient shortcuts */
+void indentedtag_start(const char *name);
+void indentedtag(const char *name);
+void indentedtag_pop(void);
+
+/* Standard nesC xml elements */
+
+/* Lists to which nxml_[dtn]decl_ref arguments should be added.
+   (could be a call to some function in nesc-dump.c, but doesn't
+   seem worth the bother) */
+extern xml_list xl_variables, xl_constants, xl_functions, xl_typedefs,
+  xl_interfaces, xl_icomponents, xl_interfacedefs, xl_components, xl_tags;
+
+void nxml_ddecl_ref(data_declaration ddecl);
+void nxml_tdecl_ref(tag_declaration tdecl);
+void nxml_ndecl_ref(nesc_declaration ndecl);
+void nxml_value(ivalue value);
+void nxml_arguments(expression arguments);
+void nxml_instance(nesc_declaration ndecl);
+void nxml_doc(struct docstring *doc);
+
+/* Incremental list creation support */
+xml_list new_xml_list(region r, bool *changed, bool (*addfilter)(void *entry));
+void xml_list_add(xml_list l, void *entry);
+dd_list xml_list_latest(xml_list l);
+void xml_list_reset(xml_list l);
+
+#endif
diff --git a/src/nodetypes.def b/src/nodetypes.def
new file mode 100644 (file)
index 0000000..63b9e03
--- /dev/null
@@ -0,0 +1,707 @@
+;; -*- lisp -*-
+
+; This file is part of the nesC compiler.
+; 
+; This file is derived from the RC Compiler. It is thus
+;    Copyright (C) 2000-2001 The Regents of the University of California.
+; Changes for nesC are
+;    Copyright (C) 2002 Intel Corporation
+; 
+; The attached "nesC" software is provided to you under the terms and
+; conditions of the GNU General Public License Version 2 as published by the
+; Free Software Foundation.
+; 
+; nesC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+; GNU General Public License for more details.
+; 
+; You should have received a copy of the GNU General Public License
+; along with nesC; see the file COPYING.  If not, write to
+; the Free Software Foundation, 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+;; AST definition
+
+;; (deffield FIELD-NAME C-TYPE (ATTRIBUTES))
+;; (deftype TYPE-NAME SUPER-TYPE (FIELDS) "DOCUMENTATION")
+;; (defnode NODE-NAME TYPE-NAME "DOCUMENTATION")
+
+;; deffield:
+;; Define field FIELD-NAME with type C-TYPE. The attributes listed are 
+;; interpreted by the various generators, attributes are either symbols,
+;; or lists whose first element is a symbol
+
+;; Current attributes:
+;;   init: field is an argument to the constructing function for the types
+;;         that contain it
+;;   tree: "part of" the abstract syntax tree. this means that
+;;         generated functions that walk the tree (XXX_walk, XXX_print) 
+;;        will follow this field recursively
+;;   nodump: field is not marshalled/unmarshalled
+;;   noprint: field is not printed as part of AST
+;;   dump-special: call dump_FIELD-NAME to marshall/unmarshall this node
+;;   print-special: call print_FIELD-NAME to print node
+
+
+
+(deffield temp int (nodump noprint (default "23"))) ; a random int field with default value 23
+
+(deffield type type ())
+(deffield declared_type type ())
+(deffield name "const char *" ())
+(deffield location location (init))
+(deffield next "node sameregion" ()) 
+(deffield asttype asttype (init tree))
+(deffield condition expression (init tree))
+(deffield arg1 expression (init tree))
+(deffield arg2 expression (init tree))
+(deffield arg3 expression (init tree))
+(deffield stmt statement (init tree))
+(deffield stmt1 statement (init tree))
+(deffield stmt2 statement (init tree))
+(deffield stmts statement (init tree))
+(deffield asm_stmt asm_stmt (init tree))
+(deffield extension bool ())
+(deffield label label (init tree))
+(deffield labels label (init tree))
+(deffield id_label id_label (init tree))
+(deffield id_labels id_label (init tree))
+(deffield cstring cstring (init))
+(deffield word1 word (init tree))
+(deffield word2 word (init tree))
+(deffield strings string_cst (init tree))
+(deffield args expression (init tree))
+(deffield modifiers type_element (init tree))
+(deffield qualifiers type_element (init tree))
+(deffield init_expr expression (init tree))
+(deffield parms declaration (init tree))
+(deffield gparms declaration (init tree))
+(deffield decl declaration (init tree))
+(deffield decls declaration (init tree))
+(deffield asm_operands1 asm_operand (init tree))
+(deffield asm_operands2 asm_operand (init tree))
+(deffield asm_clobbers string (init tree))
+(deffield doublecst "long double" (init))
+(deffield id "enum rid" (init))
+(deffield declarator declarator (init tree))
+(deffield string string (init tree))
+(deffield fields declaration (init tree))
+(deffield defined bool (init))
+(deffield parent_function function_decl (init))
+(deffield env environment (init))
+(deffield ddecl data_declaration (init))
+(deffield ident identifier (init))
+(deffield incrementrc bool (init))
+(deffield old_parms declaration (init))
+(deffield attributes attribute (init tree))
+(deffield length size_t (init))
+(deffield cval cval (init))
+(deffield va_arg_call asttype (init))
+
+(deffield parent "node sameregion" ())
+(deffield parent_ptr "node sameregion *sameregion" ())
+(deffield tdecl tag_declaration ())
+(deffield context context ())
+(deffield fdeclarator function_declarator ())
+(deffield lvalue bool ())
+(deffield bitfield bool ())
+(deffield isregister bool ())
+(deffield side_effects bool ())
+(deffield cst known_cst ())
+(deffield static_address known_cst ())
+(deffield undeclared_variables env ())
+(deffield base_labels env ())
+(deffield scoped_labels env ())
+(deffield ldecl label_declaration ())
+(deffield parent_loop statement ())
+(deffield current_loop statement ())
+(deffield next_label label ())
+(deffield nlocals int ())
+(deffield break_dest node ())
+(deffield continue_dest node ())
+(deffield forward bool ())
+(deffield converted_to_pointer bool ())
+(deffield fdecl field_declaration ())
+(deffield cst_checked bool ())
+(deffield instantiation node ())
+(deffield spelling "const char *" ())
+(deffield parens bool ())
+(deffield ivalue ivalue ())
+
+;; nesc fields
+(deffield call_kind nesc_call_kind (init))
+(deffield implementation implementation (init tree))
+(deffield required bool (init))
+(deffield ep1 endpoint (init tree))
+(deffield ep2 endpoint (init tree))
+(deffield ids parameterised_identifier (init tree))
+(deffield external bool (init))
+(deffield ienv environment (init))
+(deffield designator designator (init tree))
+(deffield abstract bool (init))
+(deffield containing_atomic atomic_stmt ())
+(deffield type_checked bool ())
+(deffield isatomic atomic_t ((default "NOT_ATOMIC")))
+(deffield return_type asttype (tree))
+
+(deffield cdecl nesc_declaration ())
+(deffield temp1 data_declaration ())
+(deffield temp2 data_declaration ())
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Base types
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype node nil (location next parent parent_ptr instantiation)
+  "The common supertype of all AST nodes")
+
+(deftype declaration node ()
+  "The common type of all definitions")
+
+(deftype statement node (parent_loop containing_atomic isatomic)
+  "The common type of all statements
+PARENT_LOOP: 
+  - for break and continue: the containing for/while/do-while/switch
+    statement they escape from
+  - for for/while/do-while: the containing for/while/do-while/switch
+    statement
+CONTAINING_ATOMIC
+  - for return statement: their containing atomic statement
+  - for labels and looping statements, their containing atomic statement
+(or NULL for none). Used to check that break, continue and goto do not
+break in or out of an atomic statement.
+(Note: for nested atomic statements, CONTAINING_ATOMIC will point to a
+dangling node as we drop these nested statements from the AST)
+ISATOMIC is 
+  ATOMIC_ANY if the statement does not involve any shared variable accesses
+  ATOMIC_SINGLE if the statement involves a single access to a shared 
+    variable, and that access is guaranteed to be atomic (e.g., a single byte)
+  NOT_ATOMIC otherwise")
+
+(deftype expression node (lvalue side_effects cst bitfield isregister
+                         type static_address converted_to_pointer
+                         cst_checked spelling parens ivalue context
+                         isatomic)
+  "Expression nodes are subtypes of this type.
+LVALUE is true if this expression can be used in a context requiring an lvalue.
+BITFIELD is true if this lvalue is a bitfield.
+ISREGISTER is true if this lvalue is (declared to be) in a register.
+SIDE_EFFECTS is true if the expression has side effects.
+CST is non-null (and points to an appropriate constant) if this expression is
+constant.
+STATIC_ADDRESS is true for lvalues whose address is a constant expression
+CONVERTED_TO_POINTER is true for expressions which default_conversion
+indicates need converting to pointer type (note that these nodes did not have
+their type changed)
+CST_CHECKED is set to true once we've successfully checked this expression's
+constantness, and associated constant value (used to avoid duplicate error
+messages in repeated constant folding passes)
+SPELLING saves the `spelling' (a user-friendly name) of expressions used
+in initialisers.
+PARENS is TRUE if the expression is in parentheses
+IVALUE is a pointer to an ivalue (see init.h) holding the value of an
+  initialiser expression. On an init_list or in an expression used as
+  a simple initialiser (e.g., '3 + 2' in 'int x = 3 + 2'), this is the
+  value of the initialiser. Inside these initialisers, ivalue points into
+  the ivalue structure of the containing initialiser.
+CONTEXT is the usage context for this expression (see nesc-uses.h)
+ISATOMIC is 
+  ATOMIC_ANY if the statement does not involve any shared variable accesses
+  ATOMIC_SINGLE if the statement involves a single access to a shared 
+    variable, and that access is guaranteed to be atomic (e.g., a single byte)
+  NOT_ATOMIC otherwise")
+
+(deftype type_element node ()
+  "A common super-type for all type-building elements (qualifiers, etc)")
+
+(deftype declarator node ()
+  "A common super-type for all declarator elements")
+
+(deftype label node (next_label)
+  "A common super-type for all labels.
+NEXT_LABEL points to the next case or default label of a switch 
+(for case or default labels only)")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Declarations
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defnode error_decl declaration "Placeholder for erroneous declarations")
+
+(deftype asm_decl declaration (asm_stmt)
+  "Asm statement STMT at the top level of a file (GCC)")
+
+(deftype data_decl declaration (modifiers decls)
+  "The declaration MODIFIERS DECLS;
+DECLS is a list")
+
+(deftype extension_decl declaration (decl)
+  "__extension__ DECL; (GCC)")
+
+(deftype ellipsis_decl declaration ()
+  "A pseudo-declaration to represent ... in a function argument list")
+
+(deftype enumerator declaration (cstring arg1 ddecl)
+  "The enumeration element CSTRING = ARG1. CSTRING is optional")
+
+(deftype oldidentifier_decl declaration (cstring ddecl)
+  "CSTRING in an old-style parameter list")
+
+(deftype function_decl declaration (declarator modifiers attributes old_parms stmt
+                                   parent_function ddecl fdeclarator
+                                   declared_type undeclared_variables
+                                   base_labels scoped_labels current_loop
+                                   nlocals)
+  "A function declaration with body STMT
+OLD_PARMS is the old-style parameter declaration list.")
+
+(deftype implicit_decl declaration (ident)
+  "Used as the AST node for implicit declarations. IDENT points to the
+identifier node that implicitly declared the function")
+
+(deftype variable_decl declaration (declarator attributes arg1 asm_stmt
+                                   ddecl declared_type forward)
+  "Declaration of DECLARATOR ASM_STMT ATTRIBUTES = ARG1.
+ATTRIBUTES is a list. ASM_STMT is optional (GCC specific).
+ARG1 is an optional initialiser.
+DDECL points to the declaration for this item.
+DECLARED_TYPE is the type in this declaration (which may be different than that
+in DDECL->TYPE)
+FORWARD is true for parameters that are forward declarations")
+
+(deftype field_decl declaration (declarator attributes arg1 type_checked fdecl)
+  "Declaration of field DECLARATOR ATTRIBUTES : ARG1.
+QUALIFIERS and ATTRIBUTEES are lists. ARG1 is an optional bitfield specifier
+TYPE_CHECKED is set to true once it has been checked that this field is of
+  network type (inside network structures)
+FDECL is this field's declaration")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Types and type elements
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype asttype node (declarator qualifiers type)
+  "The source-level type QUALIFIERS DECLARATOR")
+
+(deftype typename type_element (ddecl)
+  "typedef-type with declaration DDECL. The name is ddecl->name")
+
+(deftype typeof_expr type_element (arg1)
+  "typeof ARG1")
+
+(deftype typeof_type type_element (asttype)
+  "typeof(ASTTYPE)")
+
+(deftype attribute type_element (word1)
+  "base type for gcc and nesc attributes")
+
+(deftype gcc_attribute attribute (args)
+  "The (gcc) attribute WORD1(ARGS). args can be empty, and may not be
+semantically valid")
+
+(deftype rid type_element (id)
+  "Storage class specifier, type specifier or type qualifier ID (see RID_xxx)")
+
+(deftype qualifier type_element (id)
+  "Type or function qualifier ID (see qualifiers.h and type_quals in types.h)")
+
+(deftype tag_ref type_element (word1 attributes fields defined
+                               tdecl)
+  "struct/union/enum WORD1 { FIELDS; }  ATTRIBUTES
+ATTRIBUTES and FIELDS are lists.
+ATTRIBUTES is GCC specific. WORD1 is optional.
+DEFINED is TRUE if this declaration defines the struct/union/enum.
+DEFINED == FALSE => FIELDS == NULL
+
+TDECL points to the internal declaration node for this type")
+
+(deftype struct_ref tag_ref () "A struct")
+(defnode attribute_ref tag_ref "An attribute definition")
+(deftype union_ref tag_ref () "A union")
+(defnode enum_ref tag_ref "An enum")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Declarators
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; The last DECLARATOR in a chain is:
+;;   NULL_NODE in absolute declarations
+;;   an identifier_decl otherwise
+
+(deftype nested_declarator declarator (declarator)
+  "A common supertype for function/pointer/array declarator which includes
+the nested DECLARATOR")
+
+(deftype function_declarator nested_declarator (parms gparms qualifiers env
+                                               return_type)
+  "Function declarator DECLARATOR(PARMS). PARMS is a list of declarations.
+ENV is the environment for parms
+GPARMS is the list of declarations of generic parameters (commands, events only)
+RETURN_TYPE (optional) contains an overridden return type from nesdoc")
+
+(deftype pointer_declarator nested_declarator ()
+  "Pointer declarator *DECLARATOR")
+
+(deftype qualified_declarator nested_declarator (modifiers)
+  "Declarator MODIFIERS DECLARATOR. The MODIFIERS are qualifiers
+or attributes.
+Note: MODIFIERS is never NULL")
+
+(deftype array_declarator nested_declarator (arg1)
+  "Array declarator DECLARATOR[ARG1]. ARG1 is optional")
+
+(deftype identifier_declarator declarator (cstring)
+  "Declaration of CSTRING")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Statements
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defnode error_stmt statement "Placeholder for erroneous statements")
+
+(deftype asm_stmt statement (arg1 asm_operands1 asm_operands2 asm_clobbers qualifiers)
+  "The statement asm QUALIFIERS (ARG1 : ASM_OPERANDS1 : ASM_OPERANDS2 : ASM_CLOBBERS) 
+where ASM_OPERANDS1, ASM_OPERANDS2, QUALIFIERS are optional, ASM_CLOBBERS is a list (GCC)")
+
+(deftype compound_stmt statement (id_labels decls stmts env)
+  "{ ID_LABELS DECLS STMTS }. The ID_LABELS are GCC-specific. ID_LABELS, DECLS,
+STMTS are lists
+ENV is the environment for the block")
+
+(deftype if_stmt statement (condition stmt1 stmt2)
+  "IF (CONDITION) STMT1 ELSE STMT2. STMT2 is optional")
+
+(deftype labeled_stmt statement (label stmt)
+  "LABEL: STMT")
+
+(deftype expression_stmt statement (arg1)
+  "EXPR;")
+
+
+(deftype conditional_stmt statement (condition stmt)
+  "Basic type for all conditional statements")
+(defnode while_stmt conditional_stmt "WHILE (CONDITION) STMT")
+(defnode dowhile_stmt conditional_stmt "DO STMT WHILE (CONDITION")
+(deftype switch_stmt conditional_stmt (next_label) 
+  "SWITCH (CONDITION) STMT.
+NEXT_LABEL points to the switches first label")
+
+(deftype for_stmt statement (arg1 arg2 arg3 stmt)
+  "FOR (ARG1; ARG2; ARG3) STMT. ARG1, ARG2, ARG3 are optional")
+
+(deftype break_stmt statement ()
+  "BREAK;")
+
+(deftype continue_stmt statement ()
+  "CONTINUE;")
+
+(deftype return_stmt statement (arg1)
+  "RETURN ARG1. ARG1 is optional")
+
+(deftype goto_stmt statement (id_label)
+  "GOTO ID_LABEL")
+
+(deftype computed_goto_stmt statement (arg1)
+  "GOTO *ARG1 (GCC)")
+
+(deftype empty_stmt statement ()
+  ";")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Expressions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defnode error_expr expression "Placeholder for erroneous expressions")
+
+(deftype unary expression (arg1)
+  "Unary expression nodes, kind defines operator")
+
+(deftype binary expression (arg1 arg2)
+  "Binary expression nodes, kind defines operator")
+
+(deftype comma expression (arg1)
+  "A comma separated list of expressions ARG1")
+
+(deftype sizeof_type expression (asttype)
+  "sizeof (ASTTYPE)")
+
+(deftype alignof_type expression (asttype)
+  "__alignof (ASTTYPE) (GCC)")
+
+(deftype label_address expression (id_label)
+  "&&ID_LABEL (GCC)")
+
+(deftype cast unary (asttype)
+  "(ASTTYPE)ARG1")
+
+(deftype cast_list expression (asttype init_expr)
+  "(ASTTYPE){INIT_EXPR} (GCC)")
+
+(deftype conditional expression (condition arg1 arg2)
+  "CONDITION ? ARG1 : ARG2
+   GCC specific: ARG1 is optional")
+
+(deftype identifier expression (cstring ddecl)
+  "The identrifier CSTRING
+DEAD_USE is true for identifiers used as the target of a regular assignment")
+
+(deftype compound_expr expression (stmt)
+  "({stmt}) (GCC)")
+
+(deftype function_call expression (arg1 args va_arg_call call_kind)
+  "ARG1(ARGS). ARGS is a list of expressions
+If VA_ARG_CALL is non-null, this is actually a call to the pseudo-function
+__builtin_va_arg(args, va_arg_call) (where va_arg_call is a type). In 
+this case arg1 is a dummy identifier.
+CALL_KIND is one of normal_call, post_task, command_call or event_signal.")
+
+(defnode array_ref binary "ARG1[ARG2]")
+
+(deftype field_ref unary (cstring fdecl)
+  "ARG1.CSTRING
+The field_declaration is saved in FDECL")
+
+(defnode dereference unary "*ARG1")
+(defnode extension_expr unary "__extension__ ARG1 (GCC)")
+(defnode sizeof_expr unary "sizeof ARG1")
+(defnode alignof_expr unary "__alignof ARG1 (GCC)")
+(defnode realpart unary "__real ARG1 (GCC)")
+(defnode imagpart unary "__imag ARG1 (GCC)")
+(defnode address_of unary "&ARG1")
+(defnode unary_minus unary "-ARG1")
+(defnode unary_plus unary "+ARG1")
+(defnode conjugate unary "~ARG1 on complex arguments")
+(defnode bitnot unary "~ARG1")
+(defnode not unary "!ARG1")
+
+(deftype increment unary (temp1 temp2)
+  "parent for increment nodes")
+(defnode preincrement increment "++ARG1")
+(defnode predecrement increment "--ARG1")
+(defnode postincrement increment "ARG1++")
+(defnode postdecrement increment "ARG1--")
+
+(defnode plus binary "ARG1 + ARG2")
+(defnode minus binary "ARG1 - ARG2")
+(defnode times binary "ARG1 * ARG2")
+(defnode divide binary "ARG1 / ARG2")
+(defnode modulo binary "ARG1 % ARG2")
+(defnode lshift binary "ARG1 << ARG2")
+(defnode rshift binary "ARG1 >> ARG2")
+
+(deftype comparison binary () "binary comparison ops")
+(defnode leq comparison "ARG1 <= ARG2")
+(defnode geq comparison "ARG1 >= ARG2")
+(defnode lt comparison "ARG1 < ARG2")
+(defnode gt comparison "ARG1 > ARG2")
+(defnode eq comparison "ARG1 == ARG2")
+(defnode ne comparison "ARG1 != ARG2")
+
+(defnode bitand binary "ARG1 & ARG2")
+(defnode bitor binary "ARG1 | ARG2")
+(defnode bitxor binary "ARG1 ^ ARG2")
+(defnode andand binary "ARG1 && ARG2")
+(defnode oror binary "ARG1 || ARG2")
+
+(deftype assignment binary (temp1) "ARG1 <assignop> ARG2")
+(defnode assign assignment "ARG1 = ARG2")
+(defnode plus_assign assignment "ARG1 += ARG2")
+(defnode minus_assign assignment "ARG1 -= ARG2")
+(defnode times_assign assignment "ARG1 *= ARG2")
+(defnode divide_assign assignment "ARG1 /= ARG2")
+(defnode modulo_assign assignment "ARG1 %= ARG2")
+(defnode lshift_assign assignment "ARG1 <<= ARG2")
+(defnode rshift_assign assignment "ARG1 >>= ARG2")
+(defnode bitand_assign assignment "ARG1 &= ARG2")
+(defnode bitor_assign assignment "ARG1 |= ARG2")
+(defnode bitxor_assign assignment "ARG1 ^= ARG2")
+
+;; Initialiser expressions (not allowed in most contexts)
+
+(deftype init_list expression (args)
+  "{ ARGS }. ARGS is a list of expressions
+The type of the init_list is the type of the initialised entity.
+If this entity is an incomplete array type, the type of the init_list
+is the actual array size deduced from the initialiser.")
+
+(deftype init_specific expression (designator init_expr)
+  "DESIGNATOR = INIT_EXPR in an init_list.
+DESIGNATOR is a list
+The type is not set in init_specific nodes")
+
+(deftype designator node ()
+  "Base type for designators")
+
+(deftype designate_field designator (cstring)
+  ". CSTRING in an initialisation designator")
+
+(deftype designate_index designator (arg1 arg2)
+  "[ARG1] or [ARG1 ... ARG2] in a designator. ARG2 is optional.
+ARG2 is a GCC extension")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Constants
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype lexical_cst expression (cstring)
+  "A constant represented as in its unparsed lexical form CSTRING. These
+appear in the AST.")
+
+(deftype string_cst lexical_cst ()
+  "A single lexical string - a sequence of these gets concatenated to
+form a string. The source form of the constant can be found in
+CSTRING.")
+
+(deftype string expression (strings ddecl)
+  "A list of STRINGS forming a single string constant.
+DDECL is the magic_string declaration for this string.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Labels
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype id_label label (cstring ldecl)
+  "The label CSTRING:")
+
+(deftype case_label label (arg1 arg2)
+  "CASE ARG1 ... ARG2: ARG2 is optional, it's presence is GCC-specific")
+
+(deftype default_label label ()
+  "DEFAULT:")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Miscellaneous
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype word node (cstring)
+  "The identifier CSTRING used uninterpreted")
+
+(deftype asm_operand node (word1 string arg1)
+  "STRING(EXPR) or [WORD1] STRING(EXPR) (GCC)")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; nesc extensions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; the different kinds of files
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype nesc_decl declaration (word1 attributes cdecl)
+  "a supertype for interface/component declarations of WORD1
+CDECL is the declaration for this interface/component
+ATTRIBUTES are its attributes")
+
+(deftype interface nesc_decl (decls)
+  "interface WORD1 { DECLS }")
+
+(deftype component nesc_decl (abstract parms decls implementation)
+  "ABSTRACT configuration/module WORD1 PARMS { DECLS } IMPLEMENTATION
+If ABSTRACT is true, this is a generic component, and PARMS is its
+parameters.")
+
+(deftype implementation node (ienv cdecl)
+  "a base type for module and configuration implementations
+IENV is the implementation's environment
+CDECL is the declaration for this component")
+
+(deftype configuration implementation (decls)
+  "configuration implementation { DECLS }
+where DECLS include regular declarations, component_refs and connections")
+
+(deftype module implementation (decls)
+  "module implementation { DECLS }'")
+
+(deftype binary_component implementation ()
+  "binary component implementation placeholder")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; component definition types
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype rp_interface declaration (required decls)
+  "a required or provided function or interface declaration (DECL is
+either a data_decl or an interface_ref). REQUIRED is true for 'requires',
+false for 'provides' clauses")
+
+(deftype interface_ref declaration (word1 args word2 gparms attributes ddecl)
+  "an interface which is required or provided by a component:
+interface WORD1 < ARGS > WORD2 [ GPARMS ] ATTRIBUTES
+ARGS is a list of type_arguments for template interfaces
+WORD2 is optional, GPARMS, ARGS, ATTRIBUTES are optional")
+
+(deftype component_ref declaration (word1 word2 abstract args cdecl)
+  "a reference to component WORD1 'as' WORD2
+WORD2 is optional
+ABSTRACT is true for abstract component instantiations, false otherwise
+ARGS is the argument list for abstract component instantiations
+CDECL is filled in to point to the loaded component")
+
+(deftype connection declaration (ep1 ep2)
+  "A connection between interfaces EP1 and EP2")
+
+(defnode rp_connection connection
+  "EP1 (required) <- EP2 (provided)
+Legal if EP1 and EP2 are both interfaces of the component, or if 
+neither EP1 and EP2 are interfaces of the component")
+
+(defnode eq_connection connection
+  "EP1 = EP2, where both interfaces are either required or provided.
+Legal if exactly one of EP1 and EP2 are interfaces of the component")
+
+(deftype endpoint node (ids)
+  "a list of parameterised_identifier in IDS")
+
+(deftype parameterised_identifier node (word1 args)
+  "WORD1[ARGS] if ARGS != null, just WORD1 otherwise")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; types for extensions to the regular C syntax
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype generic_declarator declarator (declarator parms)
+  "parameterised declaration DECLARATOR [ PARMS ]")
+
+(deftype generic_call expression (arg1 args)
+  "ARG1[ARGS]. ARGS is a list of expressions, ARG1 is a generic function")
+
+(deftype interface_ref_declarator nested_declarator (word1)
+  "WORD1 . DECLARATOR in a declarator (for defining commands, events in component
+implementations
+For now at least, DECLARATOR is always an identifier_declarator")
+
+(deftype interface_deref unary (cstring ddecl)
+  "ARG1.CSTRING where ARG1 is an interface_ref.
+DDECL is the command or event's declaration")
+
+(deftype component_deref unary (cstring ddecl)
+  "ARG1.CSTRING where ARG1 is a component_ref.
+component_deref is *not* used for references to typedefed types in components.
+DDECL is the specification element's declaration")
+
+(deftype component_typeref typename (cstring)
+  "CSTRING . typedef-name, a typedef-from-component-type 
+with declaration DDECL. The typedef-name is in ddecl->name")
+
+(deftype atomic_stmt statement (stmt)
+  "ATOMIC stmt
+An atomic_stmt is not made for lexically nested atomic statements")
+
+(defnode nx_struct_ref struct_ref "A network struct")
+(defnode nx_union_ref union_ref "A network union")
+
+(deftype nesc_attribute attribute (arg1 tdecl)
+  "@WORD1(ARG1), a nesC attribute. ARG1 is an init_list.
+TDECL is the reference to the declaration of attribute WORD1")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; types for the polymorphic extensions
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(deftype type_parm_decl declaration (cstring ddecl)
+  "A declaration of type parameter CSTRING")
+
+(deftype type_argument expression (asttype)
+  "ASTTYPE used as a template argument")
diff --git a/src/parser.h b/src/parser.h
new file mode 100644 (file)
index 0000000..425ea7f
--- /dev/null
@@ -0,0 +1,40 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef PARSER_H
+#define PARSER_H
+
+#include <regions.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <stddef.h>
+
+#include "nconfig.h"
+#include "array.h"
+#include "utils.h"
+#include "AST.h"
+#include "flags.h"
+#include "errors.h"
+
+#endif
diff --git a/src/qualifiers.h b/src/qualifiers.h
new file mode 100644 (file)
index 0000000..d4eceb0
--- /dev/null
@@ -0,0 +1,3 @@
+Q(const,       TYPE_QUAL,      const_qualifier,        2)
+Q(volatile,    TYPE_QUAL,      volatile_qualifier,     4)
+Q(__restrict,  TYPE_QUAL,      restrict_qualifier,     8)
diff --git a/src/sd_list.c b/src/sd_list.c
new file mode 100644 (file)
index 0000000..22c319e
--- /dev/null
@@ -0,0 +1,99 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <regions.h>
+#include "sd_list.h"
+
+/* static doubly-linked list */
+
+struct sd_list
+{
+  struct sd_list_pos *first;
+  struct sd_list_pos *null;
+  struct sd_list_pos *last;
+};
+
+sd_list sd_new_list(region r)
+{
+  sd_list new = ralloc(r, struct sd_list);
+
+  new->first = (sd_list_pos)&new->null;
+  new->null = NULL;
+  new->last = (sd_list_pos)new;
+
+  return new;
+}
+
+void sd_del_list(sd_list l)
+{
+}
+
+void sd_add_first(sd_list l, sd_list_pos data)
+{
+  sd_insert_after((sd_list_pos)l, data);
+}
+
+void sd_add_last(sd_list l, sd_list_pos data)
+{
+  sd_insert_before((sd_list_pos)&l->null, data);
+}
+
+void sd_insert_before(sd_list_pos where, sd_list_pos data)
+{
+  data->previous = where->previous;
+  data->next = where;
+  where->previous->next = data;
+  where->previous = data;
+}
+
+void sd_insert_after(sd_list_pos where, sd_list_pos data)
+{
+  data->previous = where;
+  data->next = where->next;
+  where->next->previous = data;
+  where->next = data;
+}
+
+void sd_remove(sd_list_pos what)
+{
+  what->previous->next = what->next;
+  what->next->previous = what->previous;
+}
+
+sd_list_pos sd_first(sd_list l)
+{
+  return l->first;
+}
+
+sd_list_pos sd_last(sd_list l)
+{
+  return l->last;
+}
+
+unsigned long sd_length(sd_list l)
+{
+  sd_list_pos scan;
+  unsigned long len = 0;
+
+  sd_scan (scan, l) len++;
+
+  return len;
+}
diff --git a/src/sd_list.h b/src/sd_list.h
new file mode 100644 (file)
index 0000000..dd83bb7
--- /dev/null
@@ -0,0 +1,57 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef SD_LIST_H
+#define SD_LIST_H
+
+/* static doubly-linked list */
+
+typedef struct sd_list *sd_list;
+typedef struct sd_list_pos 
+{
+  struct sd_list_pos *next;
+  struct sd_list_pos *previous;
+} *sd_list_pos;
+
+sd_list sd_new_list(region r);
+void sd_del_list(sd_list l); /* XXX: a noop */
+
+void sd_add_first(sd_list l, sd_list_pos data);
+void sd_add_last(sd_list l, sd_list_pos data);
+void sd_insert_before(sd_list_pos where, sd_list_pos data);
+void sd_insert_after(sd_list_pos where, sd_list_pos data);
+void sd_remove(sd_list_pos what);
+
+sd_list_pos sd_first(sd_list l);
+sd_list_pos sd_last(sd_list l);
+
+#define sd_is_beginning(l) (!(l)->previous)
+#define sd_is_end(l) (!(l)->next)
+#define sd_next(l) ((l)->next)
+#define sd_previous(l) ((l)->previous)
+
+#define SD_GET(type, where) ((type)(where))
+
+#define sd_scan(var, list) for (var = sd_first((list)); !sd_is_end(var); var = sd_next(var))
+
+unsigned long sd_length(sd_list l);
+
+#endif
diff --git a/src/semantics.c b/src/semantics.c
new file mode 100644 (file)
index 0000000..d769c66
--- /dev/null
@@ -0,0 +1,3764 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "semantics.h"
+#include "flags.h"
+#include "c-parse.h"
+#include "c-lex.h"
+#include "env.h"
+#include "expr.h"
+#include "stmt.h"
+#include "AST_utils.h"
+#include "constants.h"
+#include "nesc-component.h"
+#include "nesc-interface.h"
+#include "nesc-semantics.h"
+#include "nesc-doc.h"
+#include "nesc-cpp.h"
+#include "machine.h"
+#include "attributes.h"
+#include "nesc-task.h"
+
+/* Predefined __builtin_va_list type */
+type builtin_va_list_type;
+data_declaration builtin_va_arg_decl;
+data_declaration builtin_constant_p;
+
+/* The current semantic state */
+struct semantic_state current;
+
+dd_list spontaneous_calls;
+
+data_declaration bad_decl;
+
+static type implicit_function_type, dummy_function_type;
+
+static function_declarator dummy_function_declarator;
+
+/* The global environment */
+environment global_env;
+
+static known_cst onecst, zerocst;
+static expression oneexpr;
+
+environment new_environment(region r, environment parent,
+                           bool global_level, bool parm_level)
+{
+  environment env = ralloc(r, struct environment);
+
+#if 0
+  env->fdecl = NULL;
+#endif
+  env->parent = parent;
+  env->parm_level = parm_level;
+  env->global_level = global_level;
+  env->deputy_scope = FALSE;
+  if (parent)
+    {
+      env->fdecl = parent->fdecl;
+      env->id_env = new_env(r, parent->id_env);
+      /* ANSI C is weird */
+      if (parent->parm_level)
+       env->tag_env = parent->tag_env;
+      else
+       env->tag_env = new_env(r, parent->tag_env);
+    }
+  else
+    {
+      env->id_env = new_env(r, NULL);
+      env->tag_env = new_env(r, NULL);
+    }
+
+  return env;
+}
+
+void init_data_declaration(data_declaration dd, declaration ast,
+                          const char *name, type t)
+{
+  dd->kind = 0;
+  dd->name = name;
+  dd->type = t;
+  dd->attributes = NULL;
+  dd->safe = flag_default_safe;
+
+  dd->shadowed = NULL;
+  dd->ast = ast;
+  dd->definition = NULL;
+  dd->isexternalscope = FALSE;
+  dd->isfilescoperef = FALSE;
+  dd->needsmemory = FALSE;
+  dd->isused = FALSE;
+  dd->in_system_header = ast->location->in_system_header;
+  dd->ftype = 0;
+  dd->isinline = FALSE;
+  dd->noinlinep = FALSE;
+  dd->isexterninline = FALSE;
+  dd->oldstyle_args = NULL;
+  dd->vtype = 0;
+  dd->islocal = FALSE;
+  dd->isparameter = FALSE;
+  dd->islimbo = FALSE;
+  dd->value = NULL;
+  dd->schars.data = NULL;
+  dd->schars.length = 0;
+  dd->id = 0;
+  dd->defined = FALSE;
+  dd->suppress_definition = FALSE;
+  dd->uncallable = FALSE;
+  dd->async = FALSE;
+  dd->actual_async = FALSE;
+  dd->required = FALSE;
+  dd->itype = NULL;
+  dd->gparms = NULL;
+  dd->ctype = NULL;
+  dd->container = NULL;
+  dd->interface = NULL;
+  dd->Cname = FALSE;
+  dd->nuses = NULL;
+  dd->fn_uses = NULL;
+  dd->connections = NULL;
+  dd->spontaneous = 0;
+  dd->magic_fold = NULL;
+  dd->substitute = FALSE;
+  dd->makeinline = FALSE;
+  dd->container_function = NULL;
+  dd->use_summary = 0;
+  dd->async_access = dd->async_write = FALSE;
+  dd->norace = FALSE;
+  dd->instantiation = NULL;
+  dd->instanceof = NULL;
+  dd->call_contexts = dd->extra_contexts = 0;
+  dd->printed = FALSE;
+  dd->dumped = FALSE;
+  dd->encoder = dd->decoder = NULL;
+  dd->bf_encoder = dd->bf_decoder = NULL;
+  dd->basetype = NULL;
+  dd->typevar_kind = typevar_none;
+  dd->doc.short_s = dd->doc.long_s = NULL;
+  dd->doc.loc = NULL;
+}
+
+data_declaration lookup_id(const char *s, bool this_level_only)
+{
+  return env_lookup(current.env->id_env, s, this_level_only);
+}
+
+data_declaration lookup_global_id(const char *s)
+{
+  return env_lookup(global_env->id_env, s, TRUE);
+}
+
+data_declaration declare(environment b, data_declaration from,
+                        bool ignore_shadow)
+{
+  data_declaration dd = ralloc(parse_region, struct data_declaration);
+
+  *dd = *from;
+
+  if (dd->name)
+    {
+      check_name(dd->name);
+
+      /* In PCC-compatibility mode, extern decls of vars with no current decl
+        take effect at top level no matter where they are.  */
+      /* We don't do the GCC "type exists at global scope" check because
+        it's mostly meaningless.
+        XXX: review if I start freeing mem earlier */
+      if (!b->global_level)
+       {
+         /* Here to install a non-global value.  */
+         data_declaration shadowed = lookup_id(dd->name, FALSE);
+         char *warnstring = 0;
+
+         /* Warn if shadowing an argument at the top level of the body.  */
+         if (shadowed && shadowed->islocal
+             /* This warning doesn't apply to the parms of a nested fcn.  */
+             && !b->parm_level
+             /* Check that this is one level down from the parms.  */
+             && b->parent->parm_level
+             /* Check that the decl exists in the parm level */
+             && env_lookup(b->parent->id_env, dd->name, TRUE))
+           {
+             if (shadowed->isparameter)
+               warnstring = "declaration of `%s' shadows a parameter";
+             else
+               warnstring = "declaration of `%s' shadows a symbol from the parameter list"; 
+           }
+         /* Maybe warn if shadowing something else.  */
+         else if (warn_shadow && !ignore_shadow)
+           {
+
+             if (dd->isparameter
+                 && b->parent->parm_level)
+               /* Don't warn about the parm names in function declarator
+                  within a function declarator.
+                  It would be nice to avoid warning in any function
+                  declarator in a declaration, as opposed to a definition,
+                  but there is no way to tell it's not a definition.  */
+               ;
+             else if (shadowed && shadowed->isparameter)
+               warnstring = "declaration of `%s' shadows a parameter";
+             else if (shadowed && shadowed->islocal)
+               warnstring = "declaration of `%s' shadows previous local";
+             else if (shadowed)
+               warnstring = "declaration of `%s' shadows global declaration";
+
+           }
+         if (warnstring)
+           {
+             (error_shadow ? error : warning)(warnstring, dd->name);
+             (error_shadow ? error_with_location : warning_with_location)(shadowed->ast->location, "location of shadowed declaration");
+           }
+       }
+
+      /* Parameters are declared before the function_decl is created
+        (and may be declared in several places). The id's of parameters
+        are set in start_function */
+      if (dd->kind == decl_variable && dd->islocal && !dd->isparameter)
+       dd->id = b->fdecl->nlocals++;
+
+   }
+  assert(!dd->islimbo);
+
+  if (b->global_level)
+    dd->container = current.container;
+  if (current.function_decl)
+    dd->container_function = current.function_decl->ddecl;
+
+  env_add(b->id_env, dd->name, dd);
+  if (!dd->container || (dd->container && !dd->container->abstract))
+    {
+      /* C names go all the way to the top... */
+      if (dd->Cname)
+       env_add(global_env->id_env, dd->name, dd);
+      if (!dd->container_function && flag_c && !dd->spontaneous)
+       dd->spontaneous = c_call_nonatomic;
+      if (dd->spontaneous || (getenv("ALLCODE") && dd->kind == decl_function))
+       dd_add_last(parse_region, spontaneous_calls, dd);
+    }
+
+  return dd;
+}
+
+tag_declaration declare_tag_env(environment env, tag_ref t)
+{
+  tag_declaration tdecl = ralloc(parse_region, struct tag_declaration);
+  const char *name = t->word1 ? t->word1->cstring.data : NULL;
+
+  tdecl->kind = t->kind;
+  tdecl->name = name;
+  tdecl->size = tdecl->alignment = tdecl->user_alignment = cval_top;
+#if 0
+  /* ralloc guarantees 0 / NULL */
+  tdecl->fields = NULL;
+  tdecl->fieldlist = NULL;
+  tdecl->defined = tdecl->being_defined = FALSE;
+  tdecl->fields_const = tdecl->fields_volatile = FALSE;
+  tdecl->transparent_union = FALSE;
+  tdecl->collapsed = FALSE;
+  tdecl->size_cc = FALSE;
+  tdecl->container = NULL;
+  tdecl->dumped = FALSE;
+  tdecl->instanceof = NULL;
+  tdecl->Cname = FALSE;
+  tdecl->macro_name = NULL;
+  tdecl->deputy_scope = FALSE;
+#endif
+
+  if (name)
+    {
+      tdecl->shadowed = env_lookup(env->tag_env, name, FALSE);
+      if (tdecl->shadowed && warn_shadow)
+       (error_shadow ? error : warning)
+         ("tag %s shadows enclosing struct/union/enum", name);
+    }
+  else
+    tdecl->shadowed = NULL;
+
+  if (env->global_level)
+    tdecl->container = current.container;
+  if (current.function_decl)
+    tdecl->container_function = current.function_decl->ddecl;
+
+  /* We register all tags in the environment, even unnamed ones. */
+  env_add(env->tag_env, name, tdecl);
+
+  return tdecl;
+}
+
+tag_declaration lookup_tag_env(environment env, tag_ref t, bool this_level_only)
+{
+  tag_declaration found =
+    env_lookup(env->tag_env, t->word1->cstring.data, this_level_only);
+
+  /* Check if wrong kind */
+  if (found && found->kind != t->kind)
+    current.pending_invalid_xref = t;
+
+  return found;
+}
+
+tag_declaration declare_tag(tag_ref t)
+{
+  return declare_tag_env(current.env, t);
+}
+
+tag_declaration lookup_tag(tag_ref t, bool this_level_only)
+{
+  return lookup_tag_env(current.env, t, this_level_only);
+}
+
+tag_declaration declare_global_tag(tag_ref t)
+{
+  return declare_tag_env(global_env, t);
+}
+
+tag_declaration lookup_global_tag(tag_ref t)
+{
+  return lookup_tag_env(global_env, t, TRUE);
+}
+
+/* If elements is 'struct foo' shadow tag foo in the current environment */
+void shadow_tag(type_element elements)
+{
+  shadow_tag_warned(elements, 0);
+}
+
+/* Like shadow_tag, but warned is: 1 => we have done a pedwarn;
+   2 => we have done a warning, but no pedwarn. */
+void shadow_tag_warned(type_element elements, int warned)
+{
+  type_element elem;
+  int found_tag = 0;
+
+  current.pending_invalid_xref = 0;
+
+  scan_type_element (elem, elements)
+    {
+      if (is_tag_ref(elem))
+       {
+         tag_ref tag = CAST(tag_ref, elem);
+         word name = tag->word1;
+
+         found_tag++;
+
+         if (name == 0)
+           {
+             if (warned != 1 && !is_enum_ref(elem))
+               /* Empty unnamed enum OK */
+               {
+                 pedwarn ("unnamed struct/union that defines no instances");
+                 warned = 1;
+               }
+           }
+         else
+           {
+             void *tagdecl = lookup_tag(tag, TRUE);
+
+             if (tagdecl == 0)
+               declare_tag(tag);
+             else
+               pending_xref_error();
+           }
+       }
+      else
+       {
+         if (!warned && ! current.lex.input->l.in_system_header)
+           {
+             warning("useless keyword or type name in empty declaration");
+             warned = 2;
+           }
+       }
+    }
+
+  if (found_tag > 1)
+    error("two types specified in one empty declaration");
+
+  if (warned != 1)
+    {
+      if (found_tag == 0)
+       pedwarn("empty declaration");
+    }
+}
+
+/* Print an error message now
+   for a recent invalid struct, union or enum cross reference.
+   We don't print them immediately because they are not invalid
+   when used in the `struct foo;' construct for shadowing.  */
+
+void pending_xref_error(void)
+{
+  if (current.pending_invalid_xref != 0)
+    {
+      error_with_location(current.pending_invalid_xref->location,
+                         "`%s' defined as wrong kind of tag",
+                         current.pending_invalid_xref->word1->cstring.data);
+      current.pending_invalid_xref = 0;
+    }
+}
+
+declaration make_void_parm(location loc)
+{
+  region r = parse_region;
+  rid rvoid = new_rid(r, loc, RID_VOID);
+  variable_decl vdvoid = new_variable_decl(r, loc, NULL, NULL, NULL, NULL, NULL);
+  data_decl ddvoid = new_data_decl(r, loc, CAST(type_element, rvoid),
+                                  CAST(declaration, vdvoid));
+
+  return CAST(declaration, ddvoid);
+}
+
+/* At end of parameter list, warn about any struct, union or enum tags
+   defined within.  Do so because these types cannot ever become complete.  */
+static void parmlist_tags_warning(environment parm_env)
+{
+  env_scanner scan_tags;
+  const char *tagname;
+  tag_declaration tagdecl;
+  static bool already = FALSE;
+
+  env_scan(parm_env->tag_env, &scan_tags);
+
+  while (env_next(&scan_tags, &tagname, (void **)&tagdecl))
+    {
+      int kind = tagdecl->kind;
+      const char *kindname = tagkind_name(kind);
+
+      /* An anonymous union parm type is meaningful as a GNU extension.
+        So don't warn for that.  */
+      if (kind == kind_union_ref && !tagname && !pedantic)
+       continue;
+
+      if (tagname)
+       warning("`%s %s' declared inside parameter list", kindname,
+               tagname);
+      else
+       warning("anonymous %s declared inside parameter list", kindname);
+
+      if (!already)
+       {
+         warning("its scope is only this definition or declaration,");
+         warning("which is probably not what you want.");
+         already = TRUE;
+       }
+    }
+}
+
+typelist make_arg_types(bool definition, declaration parameters, bool *varargs)
+{
+  declaration parameter;
+  typelist arg_types = new_typelist(parse_region);
+
+  *varargs = FALSE;
+  if (!is_void_parms(parameters))
+    scan_declaration (parameter, parameters)
+      if (is_ellipsis_decl(parameter))
+       *varargs = TRUE;
+      else if (is_error_decl(parameter))
+       {
+         /* Make an "accept everything" signature for arg lists with
+            error_decls */
+         *varargs = TRUE;
+         arg_types = new_typelist(parse_region);
+         typelist_append(arg_types, error_type);
+
+         return arg_types;
+       }
+      else
+       {
+         data_decl dp = CAST(data_decl, parameter);
+         variable_decl vp = CAST(variable_decl, dp->decls);
+
+         assert(!vp->next);
+         if (!vp->ddecl->name && definition)
+           error_with_decl(dp->decls, "parameter name omitted");
+         typelist_append(arg_types, vp->ddecl->type);
+       }
+
+  return arg_types;
+}
+
+bool new_style(declaration parameters)
+{
+  return parameters && !is_oldidentifier_decl(parameters);
+}
+
+static dd_list push_attribute(dd_list al, attribute attr)
+{
+  /* pstate.ds_region would be good, but isn't quite accessible */
+  if (!al)
+    al = dd_new_list(parse_region);
+  dd_add_last(parse_region, al, attr);
+
+  return al;
+}
+
+static void check_duplicate_rid(int specbits, rid rspec)
+{
+  if (specbits & 1 << rspec->id)
+    pedwarn_with_location(rspec->location, "duplicate `%s'", rid_name(rspec));
+}
+
+static void check_duplicate_qualifiers1(location l, type_quals new1, type_quals old)
+{
+  if (old & new1)
+    pedwarn_with_location(l, "duplicate `%s'", qualifier_name(new1));
+}
+
+static void check_duplicate_qualifiers(location l, type_quals new, type_quals old)
+{
+  type_quals qual;
+
+  for (qual = 1; qual < last_qualifier; qual <<= 1)
+    if (new & qual)
+      check_duplicate_qualifiers1(l, qual, old);
+}
+
+static void check_legal_qualifiers(location l, type_quals quals)
+{
+  /* Placeholder for checks for any extra qualifiers */
+}
+
+static type parse_qualifiers(type t, location l, type_element qlist,
+                            dd_list *oattributes)
+{
+  type_element q;
+  type_quals tqs = no_qualifiers;
+
+  scan_type_element (q, qlist)
+    if (is_qualifier(q))
+      {
+       qualifier qq = CAST(qualifier, q);
+
+       check_duplicate_qualifiers1(qq->location, qq->id, tqs);
+       tqs |= qq->id;
+      }
+    else if (is_attribute(q))
+      {
+       /* Filter out type-only attributes */
+       if (!handle_type_attribute(CAST(attribute, q), &t))
+         *oattributes = push_attribute(*oattributes, CAST(attribute, q));
+      }
+  check_legal_qualifiers(l, tqs);
+  return make_qualified_type(t, tqs);
+}
+
+static type make_nesc_function_type(int class, type returns, typelist argtypes,
+                                   bool varargs)
+{
+  switch (class)
+    {
+    case RID_TASK: return make_task_type(returns, argtypes, varargs);
+    case RID_EVENT: return make_event_type(returns, argtypes, varargs);
+    case RID_COMMAND: return make_command_type(returns, argtypes, varargs);
+    default: return make_function_type(returns, argtypes, varargs, FALSE);
+    }
+}
+
+scflags parse_scflags(int specbits)
+{
+  scflags scf = 0;
+
+  if (specbits & 1 << RID_INLINE)
+    scf |= scf_inline;
+  if (specbits & 1 << RID_DEFAULT)
+    scf |= scf_default;
+  if (specbits & 1 << RID_ASYNC)
+    scf |= scf_async;
+  if (specbits & 1 << RID_NORACE)
+    scf |= scf_norace;
+
+  return scf;
+}
+
+void check_variable_scflags(scflags scf,
+                           location l, const char *kind, const char *name)
+{
+  const char *badqual = NULL;
+  void (*msg)(location l, const char *format, ...) = error_with_location;
+
+  /* default already covered in parse_declarator */
+  if (scf & scf_inline)
+    {
+      badqual = "inline";
+      msg = pedwarn_with_location; /* this is what gcc does */
+    }
+  if (scf & scf_async)
+    badqual = "async";
+
+  if (badqual)
+    msg(l, "%s `%s' declared `%s'", kind, name, badqual);
+}
+
+void check_array_size(expression size, const char *printname)
+{
+  if (!check_constant_once(size, cst_numerical))
+    return;
+
+  if (size->cst && constant_integral(size->cst))
+    {
+      if (pedantic)
+       {
+         constant_overflow_warning(size->cst);
+         if (definite_zero(size))
+           pedwarn_with_location
+             (size->location, "ANSI C forbids zero-size array `%s'", printname);
+       }
+
+      if (cval_intcompare(size->cst->cval, cval_zero) < 0)
+       error_with_location(size->location,
+                           "size of array `%s' is negative", printname);
+    }
+  else if (!(current.function_decl || current.env->parm_level))
+    {
+      if (size->cst)
+       error_with_location(size->location, "type size can't be explicitly evaluated");
+      else
+       error_with_location(size->location, "variable-size type declared outside of any function");
+    }
+  else if (pedantic)
+    {
+      if (size->cst)
+       pedwarn_with_location(size->location, "ANSI C forbids array `%s' whose size can't be evaluated", printname);
+      else
+       pedwarn_with_location(size->location, "ANSI C forbids variable-size array `%s'", printname);
+    }
+}
+
+void parse_declarator(type_element modifiers, declarator d, bool bitfield, 
+                     bool require_parm_names,
+                     int *oclass, scflags *oscf,
+                     const char **ointf, const char **oname,
+                     type *ot, bool *owarn_defaulted_int,
+                     function_declarator *ofunction_declarator,
+                     dd_list *oattributes)
+{
+  location loc = d ? d->location : modifiers->location;
+  int specbits = 0, nclasses = 0;
+  type_quals specquals = no_qualifiers;
+  bool longlong = FALSE;
+  const char *printname, *iname;
+  type_element spec;
+  type t = NULL;
+  bool modified;
+  dd_list attributes = NULL;
+
+  *owarn_defaulted_int = FALSE;
+
+  /* We get the name now so that we have a name for error messages */
+  if (ointf)
+    *ointf = NULL;
+  declarator_name(d, oname, &iname);
+  printname = nice_declarator_name(d);
+
+  *oclass = 0;
+
+  scan_type_element (spec, modifiers)
+    {
+      type newtype = NULL;
+
+      switch (spec->kind)
+       {
+       case kind_rid:
+         {
+           rid rspec = CAST(rid, spec);
+           int id = rspec->id;
+
+           switch (id)
+             {
+             case RID_INT: newtype = int_type; break;
+             case RID_CHAR: newtype = char_type; break;
+             case RID_FLOAT: newtype = float_type; break;
+             case RID_DOUBLE: newtype = double_type; break;
+             case RID_VOID: newtype = void_type; break;
+             case RID_AUTO: case RID_STATIC: case RID_EXTERN:
+             case RID_REGISTER: case RID_TYPEDEF: case RID_COMMAND:
+             case RID_EVENT: case RID_TASK:
+               *oclass = id;
+               nclasses++;
+               break;
+
+             case RID_LONG: /* long long detection */
+               if (specbits & 1 << RID_LONG) 
+                 {
+                   if (longlong)
+                     error_with_location(spec->location,
+                                         "`long long long' is too long for GCC");
+                   else
+                     {
+                       if (pedantic && !current.lex.input->l.in_system_header)
+                         pedwarn_with_location(spec->location,
+                                               "ANSI C does not support `long long'");
+                       longlong = TRUE;
+                     }
+                   break;
+                 }
+               /* Fall through */
+             default:
+               check_duplicate_rid(specbits, rspec);
+               break;
+             }
+           specbits |= 1 << id;
+           break;
+         }
+       case kind_qualifier:
+         {
+           qualifier q = CAST(qualifier, spec);
+           int id = q->id;
+            
+           check_duplicate_qualifiers1(loc, id, specquals);
+           specquals |= id;
+           break;
+         }
+       case kind_typename: case kind_component_typeref:
+         newtype = CAST(typename, spec)->ddecl->type;
+         break;
+       case kind_typeof_type:
+         newtype = CAST(typeof_type, spec)->asttype->type;
+         break;
+       case kind_typeof_expr:
+         newtype = CAST(typeof_expr, spec)->arg1->type;
+         if (type_generic(newtype) ||
+             (type_functional(newtype) && !type_function(newtype)))
+           {
+             error_with_location(spec->location,
+                                 "expression does not have a valid type");
+             newtype = error_type;
+           }
+         else if (type_unknown(newtype))
+           {
+             error_with_location(spec->location,
+                                 "typeof an expression based on an @integer() or @number() type not supported");
+             newtype = error_type;
+           }
+         break;
+       case kind_struct_ref: case kind_union_ref: case kind_enum_ref:
+       case kind_nx_struct_ref: case kind_nx_union_ref:
+         newtype = make_tagged_type(CAST(tag_ref, spec)->tdecl);
+         break;
+       case kind_attribute_ref:
+         error_with_location(spec->location,
+                             "attributes cannot be used as types");
+         newtype = error_type;
+         break;
+       case kind_gcc_attribute: case kind_nesc_attribute:
+         attributes = push_attribute(attributes, CAST(attribute, spec));
+         break;
+       default: assert(0); break;
+       }
+
+      if (newtype)
+       {
+         if (t)
+           error_with_location(spec->location,
+              "two or more data types in declaration of `%s'", printname);
+         else
+           t = newtype;
+       }
+    }
+
+  /* Long double is a special combination.  */
+  if ((specbits & 1 << RID_LONG) && !longlong && (specbits & 1 << RID_DOUBLE))
+    {
+      specbits &= ~(1 << RID_LONG);
+      t = long_double_type;
+    }
+
+  modified = !!(specbits & (1 << RID_LONG | 1 << RID_SHORT |
+                           1 << RID_SIGNED | 1 << RID_UNSIGNED));
+
+  /* No type at all: default to `int', or `double' (if complex specified
+     and no long/short/signed/unsigned) */
+  if (!t)
+    {
+      if (specbits & 1 << RID_COMPLEX)
+       {
+         if (!modified)
+           {
+             specbits |= 1 << RID_DOUBLE;
+             t = double_type;
+           }
+         else
+           {
+             specbits |= 1 << RID_INT;
+             t = int_type;
+           }
+       }
+      else
+       {
+         /* Defer defaulted int warning to caller (msg depends on context) */
+         if (!modified)
+           *owarn_defaulted_int = TRUE;
+
+         specbits |= 1 << RID_INT;
+         t = int_type;
+       }
+    }
+
+  if (nclasses > 1)
+    error_with_location(loc, "multiple storage classes in declaration of `%s'", printname);
+
+  /* Now process the modifiers that were specified
+     and check for invalid combinations.  */
+
+  /* Check all other uses of type modifiers.  */
+  if (modified)
+    {
+      int ok = 0;
+
+      if ((specbits & 1 << RID_LONG) && (specbits & 1 << RID_SHORT))
+       error_with_location(loc, "both long and short specified for `%s'", printname);
+      else if ((specbits & 1 << RID_SHORT) && !(specbits & 1 << RID_INT))
+       {
+         static int already = 0;
+
+         error_with_location(loc, "short invalid for `%s'", printname);
+         if (!already && !pedantic)
+           {
+             error_with_location(loc, "short is only valid with int");
+             already = 1;
+           }
+       }
+      else if ((specbits & 1 << RID_LONG) && !(specbits & 1 << RID_INT))
+       {
+         static int already = 0;
+
+         error_with_location(loc, "long invalid for `%s'", printname);
+         if (!already && !pedantic)
+           {
+             error_with_location(loc, "long is only valid with int or double");
+             already = 1;
+           }
+       }
+      else if ((specbits & 1 << RID_SIGNED) && (specbits & 1 << RID_UNSIGNED))
+       error_with_location(loc, "both signed and unsigned specified for `%s'", printname);
+      else if (((specbits & 1 << RID_SIGNED) || (specbits & 1 << RID_UNSIGNED))
+              && !(specbits & (1 << RID_INT | 1 << RID_CHAR)))
+       error_with_location(loc, "signed or unsigned invalid for `%s'", printname);
+      else
+       ok = 1;
+
+      /* Discard the type modifiers if they are invalid.  */
+      if (! ok)
+       {
+         specbits &= ~(1 << RID_LONG | 1 << RID_SHORT
+                       | 1 << RID_UNSIGNED | 1 << RID_SIGNED);
+         longlong = 0;
+       }
+    }
+
+  if ((specbits & 1 << RID_COMPLEX) && !(type_integral(t) || type_floating(t)))
+    {
+      error_with_location(loc, "complex invalid for `%s'", printname);
+      specbits &= ~(1 << RID_COMPLEX);
+    }
+
+  /* Decide whether an integer type is signed or not.
+     Optionally treat bitfields as signed by default.  */
+  if ((specbits & 1 << RID_UNSIGNED)
+      /* Traditionally, all bitfields are unsigned.  */
+      || (bitfield && flag_traditional
+         && (/*!explicit_flag_signed_bitfields ||*/ !flag_signed_bitfields))
+      || (bitfield && !flag_signed_bitfields
+         && ((specbits & 1 << RID_INT) || (specbits & 1 << RID_CHAR))
+         && !(specbits & 1 << RID_SIGNED)))
+    {
+      if (longlong)
+       t = unsigned_long_long_type;
+      else if (specbits & 1 << RID_LONG)
+       t = unsigned_long_type;
+      else if (specbits & 1 << RID_SHORT)
+       t = unsigned_short_type;
+      else if (t == char_type)
+       t = unsigned_char_type;
+      else
+       t = unsigned_int_type;
+    }
+  else if ((specbits & 1 << RID_SIGNED) && (specbits & 1 << RID_CHAR))
+    t = signed_char_type;
+  else if (longlong)
+    t = long_long_type;
+  else if (specbits & 1 << RID_LONG)
+    t = long_type;
+  else if (specbits & 1 << RID_SHORT)
+    t = short_type;
+
+  if (specbits & 1 << RID_COMPLEX)
+    t = make_complex_type(t);
+
+  /* Check for qualifiers redundant with base type */
+  check_duplicate_qualifiers(loc, specquals, type_qualifiers(t));
+
+  specquals |= type_qualifiers(t);
+  check_legal_qualifiers(loc, specquals);
+
+  t = make_qualified_type(t, specquals);
+
+  *oscf = parse_scflags(specbits);
+  if ((*oscf & scf_default) &&
+      !(*oclass == RID_EVENT || *oclass == RID_COMMAND))
+    {
+      *oscf &= ~scf_default;
+      error_with_location(loc, "default can only be specified for events or commands");
+    }
+
+  if (pedantic && type_function(t) && (type_const(t) || type_volatile(t)) &&
+      !current.lex.input->l.in_system_header)
+    pedwarn_with_location(loc, "ANSI C forbids const or volatile function types");
+
+  /* Now figure out the structure of the declarator proper.
+     Descend through it, creating more complex types, until we reach
+     the declared identifier (or NULL, in an abstract declarator).  */
+
+  while (d && d->kind != kind_identifier_declarator)
+    {
+      switch (d->kind)
+       {
+       case kind_array_declarator:
+         {
+           array_declarator ad = CAST(array_declarator, d);
+           expression size = ad->arg1;
+
+           d = ad->declarator;
+
+           /* Check for some types that there cannot be arrays of.  */
+           if (type_void(t))
+             {
+               error_with_location(ad->location,
+                                   "declaration of `%s' as array of voids", printname);
+               t = error_type;
+             }
+
+           if (type_function(t))
+             {
+               error_with_location(ad->location,
+                                   "declaration of `%s' as array of functions", printname);
+               t = error_type;
+             }
+
+           if (size && is_error_expr(size))
+             t = error_type;
+
+           if (t == error_type)
+             continue;
+
+           if (size)
+             {
+               if (!type_integer(size->type))
+                 {
+                   error_with_location(ad->location,
+                                       "size of array `%s' has non-integer type", printname);
+                   size = oneexpr;
+                 }
+               else
+                 check_array_size(size, printname);
+             }
+
+           /* Build the array type itself, then merge any constancy or
+              volatility  */
+           t = make_array_type(t, size);
+           break;
+         }
+
+       case kind_function_declarator:
+         {
+           function_declarator fd = CAST(function_declarator, d);
+           bool newstyle;
+
+           d = fd->declarator;
+           if (ofunction_declarator)
+             *ofunction_declarator = fd;
+
+           /* Declaring a function type.
+              Make sure we have a valid type for the function to return.  */
+           if (t == error_type)
+             t = int_type;
+
+           /* Warn about some types functions can't return.  */
+           if (type_function(t))
+             {
+               error_with_location(fd->location,
+                                   "`%s' declared as function returning a function",
+                     printname);
+               t = int_type;
+             }
+           if (type_array(t))
+             {
+               error_with_location(fd->location,
+                                   "`%s' declared as function returning an array",
+                     printname);
+               t = int_type;
+             }
+
+#ifndef TRADITIONAL_RETURN_FLOAT
+           /* Traditionally, declaring return type float means double.  */
+           if (flag_traditional && type_float(t))
+             t = qualify_type1(double_type, t);
+#endif /* TRADITIONAL_RETURN_FLOAT */
+
+           /* Require new-style declarations */
+           if (current.language != l_c)
+             {
+               /* Force empty parameter lists to void */
+               if (!fd->parms)
+                 fd->parms = make_void_parm(fd->location);
+               newstyle = !is_oldidentifier_decl(fd->parms);
+               if (!newstyle)
+                 error("old-style parameter lists not supported");
+             }
+           else
+             newstyle = new_style(fd->parms);
+
+           if (newstyle)
+             {
+               bool definition = require_parm_names && 
+                 d && d->kind == kind_identifier_declarator;
+               bool varargs;
+               typelist argtypes = make_arg_types(definition, fd->parms,
+                                                  &varargs);
+
+               if (*oclass == RID_TASK)
+                 {
+                   if (!is_void_parms(fd->parms))
+                     error_with_location(fd->location,
+                       "`%s' declared as a task with parameters", printname);
+                   if (!type_void(t))
+                     error_with_location(fd->location,
+                       "task `%s' must return void", printname);
+                 }
+
+               t = make_nesc_function_type(*oclass, t, argtypes, varargs);
+
+               if (fd->gparms)
+                 {
+                   argtypes = make_arg_types(definition, fd->gparms, &varargs);
+                   t = make_generic_type(t, argtypes);
+                 }
+             }
+           else  /* Old-style function */
+             t = make_function_type(t, NULL, FALSE, TRUE);
+
+           t = parse_qualifiers(t, fd->location, fd->qualifiers, NULL);
+           break;
+         }
+
+       case kind_pointer_declarator:
+         {
+           pointer_declarator pd = CAST(pointer_declarator, d);
+
+           d = pd->declarator;
+           t = make_pointer_type(t);
+           break;
+         }
+
+       case kind_qualified_declarator:
+         {
+           qualified_declarator qd = CAST(qualified_declarator, d);
+
+           d = qd->declarator;
+           t = parse_qualifiers(t, qd->location, qd->modifiers, &attributes);
+           break;
+         }
+
+       case kind_interface_ref_declarator:
+         {
+           interface_ref_declarator id = CAST(interface_ref_declarator, d);
+
+           d = id->declarator;
+           if (ointf)
+             *ointf = id->word1->cstring.data;
+           else
+             error_with_location(id->location,
+               "unexpected interface reference in declaration of `%s'",
+                                 printname);
+           break;
+         }
+
+       default: assert(0);
+       }
+    }
+
+  *ot = t;
+  *oattributes = attributes;
+}
+
+static declarator finish_function_declarator(function_declarator fd)
+{
+  declaration parm;
+  environment penv = poplevel();
+
+  fd->env = penv;
+
+  if (new_style(fd->parms) && !is_void_parms(fd->parms))
+    scan_declaration (parm, fd->parms)
+      if (!is_ellipsis_decl(parm) && !is_error_decl(parm))
+       {
+         variable_decl vp = CAST(variable_decl, CAST(data_decl, parm)->decls);
+
+         if (!vp->ddecl)
+           {
+             error_with_location(fd->location, "parameter declared void");
+             vp->ddecl = bad_decl;
+           }
+         else if (!vp->ddecl->isused)
+           {
+             /* ok, so it's not really a field */
+             const char *pname = nice_field_name(vp->ddecl->name);
+
+             error_with_location(fd->location,
+               "parameter `%s' has just a forward declaration", pname);
+           }
+       }
+
+  parmlist_tags_warning(penv);
+
+  return CAST(declarator, fd);
+}
+
+declarator finish_array_or_fn_declarator(declarator nested, nested_declarator d)
+{
+  d->declarator = nested;
+
+  if (is_function_declarator(d))
+    return finish_function_declarator(CAST(function_declarator, d));
+  else
+    return CAST(declarator, d);
+}
+
+
+/* Return zero if the declaration NEWDECL is valid
+   when the declaration OLDDECL (assumed to be for the same name and kind
+   of declaration) has already been seen.
+   Otherwise return an error message format string with a %s
+   where the identifier should go.  */
+
+static char *redeclaration_error_message(data_declaration newdecl,
+                                        data_declaration olddecl,
+                                        bool newinitialised)
+{
+  if (olddecl->islimbo)
+    return 0;
+
+  if (newdecl->kind == decl_typedef)
+    {
+      if (flag_traditional && type_compatible(newdecl->type, olddecl->type))
+       return 0;
+      /* This gets a warning later */
+      if (olddecl->in_system_header || newdecl->in_system_header)
+       return 0;
+      return "redefinition of `%s'";
+    }
+  else if (newdecl->kind == decl_function)
+    {
+      /* Declarations of functions can insist on internal linkage
+        but they can't be inconsistent with internal linkage,
+        so there can be no error on that account.
+        However defining the same name twice is no good.  */
+      if (olddecl->definition && newdecl->definition
+         /* However, defining once as extern inline and a second
+            time in another way is ok.  */
+         && !(olddecl->isexterninline && !newdecl->isexterninline))
+       return "redefinition of `%s'";
+      return 0;
+    }
+  else if (newdecl->kind == decl_constant)
+    return "redefinition of `%s'";
+  else if (current.env->global_level)
+    {
+      /* Objects declared at top level:  */
+      /* If at least one is a reference, it's ok.  */
+      if (newdecl->isfilescoperef || olddecl->isfilescoperef)
+       return 0;
+      /* Reject two definitions with initialisation.  */
+      if (newinitialised && olddecl->initialiser)
+       return "redefinition of `%s'";
+      /* Now we have two tentative defs, or one tentative and one real def.  */
+      /* Insist that the linkage match.  */
+      if (olddecl->isexternalscope != newdecl->isexternalscope)
+       return "conflicting declarations of `%s'";
+      return 0;
+    }
+  else
+    {
+      /* Newdecl has block scope.  If olddecl has block scope also, then
+        reject two definitions, and reject a definition together with an
+        external reference.  Otherwise, it is OK, because newdecl must
+        be an extern reference to olddecl.  */
+      if (!(newdecl->isexternalscope && olddecl->isexternalscope))
+#if 0
+       Why check the context ?
+         && DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl)
+#endif
+       return "redeclaration of `%s'";
+      return 0;
+    }
+}
+
+/* Return TRUE if t1 looks like a modern declaration for malloc (&friends) and
+   t2 looks like an oldstyle declaration thereof */
+static bool looks_like_malloc_redeclaration(type t1, type t2)
+{
+  type t1return = type_function_return_type(t1);
+  type t2return = type_function_return_type(t2);
+
+  return
+    type_function_oldstyle(t1) &&
+    type_pointer(t1return) && type_pointer(t2return) &&
+    type_void(type_points_to(t2return)) &&
+    type_char(type_points_to(t1return)) &&
+    self_promoting_args(t2);
+}
+
+void show_previous_decl(void (*message)(declaration d, const char *format, ...),
+                       data_declaration olddecl)
+{
+  if (olddecl->kind == decl_function && olddecl->ftype == function_implicit)
+    message(olddecl->ast, "previous implicit declaration of `%s'", olddecl->name);
+  else if (ddecl_is_command_or_event(olddecl) && olddecl->definition)
+    message(olddecl->definition, "previous declaration of `%s'",
+           decl_printname(olddecl));
+  else
+    message(olddecl->ast, "previous declaration of `%s'",
+           decl_printname(olddecl));
+}
+
+/* Handle when a new declaration NEWDECL
+   has the same name as an old one OLDDECL
+   in the same binding contour.
+   Prints an error message if appropriate.
+
+   If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
+   Otherwise, return 0.
+
+   When DIFFERENT_BINDING_LEVEL is true, NEWDECL is an external declaration,
+   and OLDDECL is in an outer binding level and should thus not be changed.  */
+
+int duplicate_decls(data_declaration newdecl, data_declaration olddecl,
+                   bool different_binding_level, bool newinitialised)
+{
+  type oldtype = olddecl->type;
+  type newtype = newdecl->type;
+  char *errmsg = 0;
+  void (*previous_message)(declaration d, const char *format, ...) = NULL;
+  bool types_match;
+
+  assert(!(newdecl->kind == decl_function &&
+          newdecl->ftype == function_implicit));
+
+  /* New decl is completely inconsistent with the old one =>
+     tell caller to replace the old one. This is an error,
+     except if traditional and in different binding levels */
+  if (newdecl->kind != olddecl->kind)
+    {
+      bool iswarning = 
+       (flag_traditional && different_binding_level) || olddecl->islimbo;
+
+      warning_or_error(iswarning,
+                      "`%s' redeclared as different kind of symbol", decl_printname(olddecl));
+      show_previous_decl(iswarning ? warning_with_decl : error_with_decl, olddecl);
+      newdecl->shadowed = olddecl;
+      return 0;
+    }
+
+  if (newtype == error_type || oldtype == error_type)
+    types_match = FALSE;
+  else
+    types_match = type_compatible_unqualified(newtype, oldtype);
+
+  /* For real parm decl following a forward decl, or a declaration of an old
+     style parameter (oldtype == void) return 1 so old decl will be reused. */
+  if ((oldtype == void_type || types_match) && newdecl->isparameter &&
+      !olddecl->isused)
+    {
+      /* Point to the latest declaration */
+      olddecl->ast = newdecl->ast;
+      return 1;
+    }
+
+  /* The new declaration is the same kind of object as the old one.
+     The declarations may partially match.  Print warnings if they don't
+     match enough.  Ultimately, copy most of the information from the new
+     decl to the old one, and keep using the old one.  */
+
+  if (flag_traditional && olddecl->kind == decl_function
+      && olddecl->ftype == function_implicit)
+    /* If -traditional, avoid error for redeclaring fcn
+       after implicit decl.  */
+    ;
+  /* Permit char *foo () to match void *foo (...) if not pedantic,
+     if one of them came from a system header file.  */
+  else if (!types_match && olddecl->kind == decl_function
+          && (olddecl->in_system_header || newdecl->in_system_header)
+          && (looks_like_malloc_redeclaration(oldtype, newtype) ||
+              looks_like_malloc_redeclaration(newtype, oldtype)))
+    {
+      if (pedantic)
+       pedwarn_with_decl(newdecl->ast, "conflicting types for `%s'", decl_printname(olddecl));
+      /* Make sure we keep void * as ret type, not char *.  */
+      if (type_void(type_points_to(type_function_return_type(oldtype))))
+       newdecl->type = newtype = oldtype;
+
+      /* Set IN_SYSTEM_HEADER, so that if we see another declaration
+        we will come back here again.  */
+      newdecl->in_system_header = TRUE;
+    }
+  else if (!types_match
+          /* Permit char *foo (int, ...); followed by char *foo ();
+             if not pedantic.  */
+          && !(olddecl->kind == decl_function && !pedantic
+               && type_function_oldstyle(newtype)
+               /* Return types must still match.  */
+               && type_compatible(type_function_return_type(oldtype),
+                                  type_function_return_type(newtype))))
+    {
+      void (*message)(const char *format, ...) =
+       olddecl->islimbo ? warning : error;
+
+      previous_message =
+       olddecl->islimbo ? warning_with_decl : error_with_decl;
+
+      message("conflicting types for `%s'", decl_printname(olddecl));
+      /* Check for function type mismatch
+        involving an empty arglist vs a nonempty one.  */
+      if (newdecl->kind == decl_function
+         && type_compatible(type_function_return_type(oldtype),
+                            type_function_return_type(newtype))
+         && ((type_function_oldstyle(oldtype) && !olddecl->definition)
+             || (type_function_oldstyle(newtype) && !newdecl->definition)))
+       {
+         /* Classify the problem further.  */
+         if (type_function_varargs(newtype) || type_function_varargs(oldtype))
+           {
+             message("A parameter list with an ellipsis can't match");
+             message("an empty parameter name list declaration.");
+           }
+         else
+           {
+             typelist_scanner scanargs;
+             type t;
+             typelist args = type_function_arguments(oldtype);
+
+             if (!args)
+               args = type_function_arguments(newtype);
+
+             typelist_scan(args, &scanargs);
+             while ((t = typelist_next(&scanargs)))
+               if (!type_self_promoting(t))
+                 {
+                   message("An argument type that has a default promotion");
+                   message("can't match an empty parameter name list declaration.");
+                   break;
+                 }
+           }
+       }
+    }
+  else
+    {
+      errmsg = redeclaration_error_message(newdecl, olddecl, newinitialised);
+      if (errmsg)
+       {
+         error_with_decl(newdecl->ast, errmsg, decl_printname(olddecl));
+         previous_message = error_with_decl;
+       }
+      else if (newdecl->kind == decl_typedef &&
+              (olddecl->in_system_header || newdecl->in_system_header))
+       {
+         warning_with_decl(newdecl->ast, "redefinition of `%s'", decl_printname(olddecl));
+         previous_message = warning_with_decl;
+       }
+      else if (olddecl->kind == decl_function
+              && olddecl->oldstyle_args
+              && !type_function_oldstyle(newtype))
+       {
+         int nargs;
+         typelist_scanner oldparms, newparms;
+         /* Prototype decl follows defn w/o prototype.  */
+
+         typelist_scan(olddecl->oldstyle_args, &oldparms);
+         typelist_scan(type_function_arguments(newtype), &newparms);
+         nargs = 1;
+         errmsg = NULL;
+         for (;;)
+           {
+             type oldparm = typelist_next(&oldparms);
+             type newparm = typelist_next(&newparms);
+
+             if (!oldparm && !newparm)
+               break;
+
+             if (!oldparm || !newparm)
+               {
+                 errmsg = "prototype for `%s' follows and number of arguments";
+                 break;
+               }
+             /* Type for passing arg must be consistent
+                with that declared for the arg.  */
+             if (!type_compatible(oldparm, newparm)
+                 /* If -traditional, allow `unsigned int' instead of `int'
+                    in the prototype.  */
+                 && !(flag_traditional
+                      && type_equal_unqualified(oldparm, int_type)
+                      && type_equal_unqualified(newparm, unsigned_int_type)))
+               {
+                 errmsg = "prototype for `%s' follows and argument %d";
+                 break;
+               }
+             nargs++;
+           }
+         if (errmsg)
+           {
+             warning_or_error_with_decl(olddecl->islimbo, newdecl->ast,
+                                        errmsg, decl_printname(olddecl), nargs);
+             warning_or_error_with_decl(olddecl->islimbo, olddecl->ast,
+                             "doesn't match non-prototype definition here");
+           }
+         else
+           {
+             warning_with_decl(newdecl->ast, "prototype for `%s' follows",
+                               decl_printname(olddecl));
+             warning_with_decl(olddecl->ast, "non-prototype definition here");
+           }
+       }
+      /* Warn about mismatches in various flags. */
+      else if (newdecl->kind == decl_function)
+       {
+         /* Warn if function is now inline
+            but was previously declared not inline and has been called. */
+         if (!olddecl->isinline && newdecl->isinline)
+           {
+             if (olddecl->isused)
+               {
+                 warning("`%s' declared inline after being called", decl_printname(olddecl));
+                 previous_message = warning_with_decl;
+               }
+             if (olddecl->definition)
+               {
+                 warning("`%s' declared inline after its definition", decl_printname(olddecl));
+                 previous_message = warning_with_decl;
+               }
+           }
+
+         /* Warn for static following external */
+         if (newdecl->ftype == function_static &&
+             olddecl->ftype == function_implicit)
+           {
+             pedwarn("`%s' was declared implicitly `extern' and later `static'", decl_printname(olddecl));
+             previous_message = pedwarn_with_decl;
+           }
+         else if (newdecl->ftype == function_static &&
+                  olddecl->ftype == function_normal)
+           {
+             pedwarn("static declaration for `%s' follows non-static", decl_printname(olddecl));
+             previous_message = pedwarn_with_decl;
+           }
+
+         /* Warn for mismatched async */
+         if (newdecl->async != olddecl->async)
+           {
+             error("`%s': async mismatch with declaration",
+                   decl_printname(olddecl));
+             previous_message = error_with_decl;
+           }
+       }
+      else if (newdecl->kind == decl_variable)
+       {
+         /* If pedantic, warn when static declaration follows a non-static
+            declaration. */
+         if (pedantic &&
+             olddecl->isexternalscope && !newdecl->isexternalscope)
+           {
+             pedwarn("static declaration for `%s' follows non-static", decl_printname(olddecl));
+             previous_message = pedwarn_with_decl;
+           }
+         /* Warn when const declaration follows a non-const declaration */
+         if (!type_const(oldtype) && type_const(newtype))
+           warning("const declaration for `%s' follows non-const", decl_printname(olddecl));
+         /* These bits are logically part of the type, for variables. */
+         else if (pedantic && 
+                  (type_const(oldtype) != type_const(newtype)
+                   || type_volatile(oldtype) != type_volatile(newtype)))
+           {
+             pedwarn("type qualifiers for `%s' conflict with previous decl",
+                     decl_printname(olddecl));
+             previous_message = pedwarn_with_decl;
+           }
+       }
+    }
+
+  /* Optionally warn about more than one declaration for the same name.  */
+  /* Let's try a different test than GCC */
+  if (errmsg == 0 && warn_redundant_decls && !olddecl->islimbo &&
+      !(olddecl->isfilescoperef && !newdecl->isfilescoperef))
+    {
+      warning_with_decl(newdecl->ast, "redundant redeclaration of `%s' in same scope", decl_printname(olddecl));
+      previous_message = warning_with_decl;
+    }
+
+  if (previous_message)
+    show_previous_decl(previous_message, olddecl);
+
+
+  /* Copy all the DECL_... slots specified in the new decl
+     except for any that we copy here from the old type. */
+
+  /* If either decl says `inline', this fn is inline,
+     unless its definition was passed already.  */
+  if (newdecl->isinline && !olddecl->definition)
+    olddecl->isinline = TRUE;
+  newdecl->isinline = olddecl->isinline;
+
+  /* If either of the decls says noinline, make sure that none of the
+     declerations are made inline. */
+  if (newdecl->noinlinep || olddecl->noinlinep) 
+    newdecl->noinlinep = olddecl->noinlinep = TRUE;
+
+  if (different_binding_level)
+    {
+      /* newdecl must be a reference to something at file scope */
+      assert(newdecl->isfilescoperef && !newdecl->needsmemory);
+      assert(!(newdecl->kind == decl_variable &&
+              newdecl->vtype == variable_static));
+      assert(!(newdecl->kind == decl_function &&
+              (newdecl->ftype == function_implicit ||
+               newdecl->ftype == function_nested)));
+
+      /* We copy some info over to the newdecl which will shadow olddecl */
+      newdecl->shadowed = olddecl;
+      newdecl->definition = olddecl->definition;
+      newdecl->isinline = olddecl->isinline;
+      newdecl->isexterninline = olddecl->isexterninline;
+      newdecl->oldstyle_args = olddecl->oldstyle_args;
+      if (olddecl->in_system_header)
+       newdecl->in_system_header = TRUE;
+
+      newdecl->isexternalscope = olddecl->isexternalscope;
+
+      /* We don't copy the type */
+
+      return 0;
+    }
+
+  /* newdecl should be too new to have any oldstyle args yet */
+  assert(!newdecl->oldstyle_args);
+
+  /* Merge the data types specified in the two decls.  */
+  if (types_match)
+    olddecl->type = common_type(newtype, oldtype);
+  else if (newtype != error_type)
+    /* GCC keeps the old type. I think it makes more sense to keep the new
+       one. And it means I can examine the decl in current.function_decl
+       and find the type of the current function, not something random */
+    olddecl->type = newtype;
+  olddecl->islimbo = FALSE;
+
+  if (newdecl->definition)
+    olddecl->definition = newdecl->definition;
+
+  olddecl->isexternalscope &= newdecl->isexternalscope;
+  olddecl->isfilescoperef &= newdecl->isfilescoperef;
+  olddecl->needsmemory |= newdecl->needsmemory;
+
+  olddecl->Cname |= newdecl->Cname;
+  if (newdecl->spontaneous && !olddecl->spontaneous)
+    {
+      olddecl->spontaneous = newdecl->spontaneous;
+      dd_add_last(parse_region, spontaneous_calls, olddecl);
+    }
+  olddecl->norace |= newdecl->norace;
+
+  /* For functions, static overrides non-static.  */
+  if (newdecl->kind == decl_function)
+    {
+      if (olddecl->ftype != function_static)
+       olddecl->ftype = newdecl->ftype;
+
+      /* Also set isexterninline correctly */
+      if ((olddecl->definition && !olddecl->isexterninline) ||
+         (newdecl->definition && !newdecl->isexterninline))
+       olddecl->isexterninline = FALSE;
+      else if (olddecl->isexterninline || newdecl->isexterninline)
+       olddecl->isexterninline = TRUE;
+      /* the last case is 2 non-inline externs, so isexterninline is correct */
+    }
+  else if (newdecl->kind == decl_variable)
+    {
+      /* static overrides extern (the combinations with register
+        are errors anyway) */ 
+      if (olddecl->vtype != variable_static)
+       olddecl->vtype = variable_static;
+    }
+
+  olddecl->in_system_header = newdecl->in_system_header =
+    olddecl->in_system_header || newdecl->in_system_header;
+
+  /* Point to the latest declaration (except for commands and events) */
+  if (!ddecl_is_command_or_event(olddecl))
+    olddecl->ast = newdecl->ast;
+
+  return 1;
+}
+
+static void transparent_union_argument(data_declaration ddecl)
+{
+  ddecl->type = make_qualified_type
+    (ddecl->type, type_qualifiers(ddecl->type) | transparent_qualifier);
+}
+
+bool is_doublecharstar(type t)
+{
+  return type_pointer(t) && type_charstar(type_points_to(t));
+}
+
+void check_function(data_declaration dd, declaration fd, int class,
+                   scflags scf, const char *name, type function_type,
+                   bool nested, bool isdeclaration, bool defaulted_int)
+{
+  type return_type, actual_function_type;
+
+  if (defaulted_int && (warn_implicit_int || warn_return_type))
+    warning("return-type defaults to `int'");
+
+  if (scf & scf_norace)
+    error("norace is for variables only");
+
+  actual_function_type = type_generic(function_type) ?
+    type_function_return_type(function_type) : function_type;
+  return_type = type_function_return_type(actual_function_type);
+
+  /* XXX: Does this volatile/const stuff actually work with my imp ? */
+  if (pedantic && type_void(return_type) &&
+      (type_const(return_type) || type_volatile(return_type)) &&
+      !current.lex.input->l.in_system_header)
+    pedwarn("ANSI C forbids const or volatile void function return type");
+
+  if (type_volatile(function_type) && !type_void(return_type))
+    warning("`noreturn' function returns non-void value");
+
+  /* Record presence of `inline', if it is reasonable.  */
+  if (scf & scf_inline && !strcmp(name, "main") && !nested)
+    {
+      warning("cannot inline function `main'");
+      scf &= ~scf_inline;
+    }
+
+  if (nested && (class == RID_COMMAND || class == RID_EVENT))
+    error("commands and events cannot be declared inside functions");
+
+  /* Warn for unlikely, improbable, or stupid declarations of `main'. */
+  if (current.language == l_c && warn_main && !strcmp("main", name) && !nested)
+    {
+      if (!type_equal_unqualified(return_type, int_type))
+       pedwarn("return type of `%s' is not `int'", name);
+
+      /* Just being "bug"-compatible w/ GCC here */
+      if (!type_function_oldstyle(function_type))
+       {
+         typelist_scanner scanargs;
+         type argtype;
+         int argct = 0;
+
+         typelist_scan(type_function_arguments(function_type), &scanargs);
+         while ((argtype = typelist_next(&scanargs)))
+           {
+             ++argct;
+             switch (argct)
+               {
+               case 1:
+                 if (!type_equal_unqualified(argtype, int_type))
+                   pedwarn("first argument of `%s' should be `int'", name);
+                 break;
+
+               case 2:
+                 if (!is_doublecharstar(argtype))
+                   pedwarn("second argument of `%s' should be `char **'",
+                           name);
+                 break;
+
+               case 3:
+                 if (!is_doublecharstar(argtype))
+                   pedwarn("third argument of `%s' should probably be `char **'",
+                           name);
+                 break;
+               }
+           }
+
+         /* It is intentional that this message does not mention the third
+            argument, which is warned for only pedantically, because it's
+            blessed by mention in an appendix of the standard. */
+         if (argct > 0 && (argct < 2 || argct > 3))
+           pedwarn("`%s' takes only zero or two arguments", name);
+
+         if (argct == 3 && pedantic)
+           pedwarn("third argument of `%s' is deprecated", name);
+
+         if (class == RID_STATIC)
+           pedwarn("`%s' is normally a non-static function", name);
+       }
+    }
+
+  init_data_declaration(dd, fd, name, function_type);
+  dd->kind = decl_function;
+  dd->isexternalscope = FALSE;
+  if (nested)
+    dd->ftype = function_nested;
+  else if (class == RID_STATIC)
+    dd->ftype = function_static;
+  else if (class == RID_COMMAND)
+    dd->ftype = function_command;
+  else if (class == RID_EVENT)
+    dd->ftype = function_event;
+  else
+    {
+      dd->ftype = function_normal;
+      dd->isexternalscope = TRUE;
+    }
+  /* XXX: Should probably be FALSE for extern inline */
+  dd->needsmemory = !isdeclaration;
+  dd->isinline = (scf & scf_inline) != 0;
+  dd->isexterninline = dd->isinline && class == RID_EXTERN;
+  dd->isfilescoperef = dd->isexterninline || isdeclaration;
+  if (scf & scf_async)
+    {
+      if (dd->ftype == function_command || dd->ftype == function_event)
+       dd->async = TRUE;
+      else
+       error("`async' is for commands and events only");
+    }
+}
+
+data_declaration declare_string(const char *name, cstring value, bool wide)
+{
+  struct data_declaration tempdecl;
+  expression expr_l = build_uint_constant(parse_region, dummy_location, size_t_type, value.length + 1);
+  type value_type = make_array_type(wide ? wchar_type : char_type, expr_l);
+
+  init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location),
+                       name, value_type);
+  tempdecl.kind = decl_magic_string;
+  tempdecl.needsmemory = TRUE;
+  tempdecl.in_system_header = TRUE;
+  tempdecl.vtype = variable_static;
+  tempdecl.schars = value;
+
+  return declare(current.env, &tempdecl, TRUE);
+}
+
+static void declare_magic_string(const char *name, const char *value)
+{
+  declare_string(name, str2cstring(parse_region, value), FALSE);
+}
+
+bool builtin_declaration(data_declaration dd)
+/* Returns: TRUE if dd is a declaration for something builtin (i.e.,
+     starts with __builtin_
+*/
+{
+  return strncmp(dd->name, "__builtin_", 10) == 0;
+}
+
+data_declaration declare_builtin_type(const char *name, type t)
+{
+  struct data_declaration tempdecl;
+
+  init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location),
+                       name, t);
+  tempdecl.kind = decl_typedef;
+  tempdecl.in_system_header = TRUE;
+
+  return declare(current.env, &tempdecl, TRUE);
+}
+
+static tag_declaration make_anonymous_struct(void)
+{
+  tag_ref tref = newkind_tag_ref(parse_region, kind_struct_ref, dummy_location,
+                                NULL, NULL, NULL, TRUE);
+
+  return declare_global_tag(tref);
+}
+
+static void declare_builtin_types(void)
+{
+  builtin_va_list_type = 
+    make_pointer_type(make_tagged_type(make_anonymous_struct()));
+  declare_builtin_type("__builtin_va_list", builtin_va_list_type);
+}
+
+static data_declaration declare_builtin(const char *name, data_kind kind, type t)
+{
+  struct data_declaration tempdecl;
+
+  init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location),
+                       name, t);
+  tempdecl.kind = kind;
+  tempdecl.needsmemory = TRUE;
+  tempdecl.in_system_header = TRUE;
+  tempdecl.vtype = variable_static;
+
+  return declare(global_env, &tempdecl, TRUE);
+}
+
+data_declaration declare_builtin_identifier(const char *name, type t)
+{
+  return declare_builtin(name, decl_variable, t);
+}
+
+data_declaration declare_builtin_function(const char *name, type t)
+{
+  return declare_builtin(name, decl_function, t);
+}
+
+static void declare_builtin_identifiers(void)
+{
+  typelist emptylist = new_typelist(parse_region);
+  type default_function_type = make_function_type(int_type, emptylist, FALSE, TRUE);
+
+  /* Use = as a suffix for this "dummy" identifier (used in function_call
+     nodes that represent calls to __builtin_va_arg) */
+  builtin_va_arg_decl = declare_builtin_identifier("=va_arg", int_type);
+
+  builtin_constant_p =
+    declare_builtin_function("__builtin_constant_p", default_function_type);
+}
+
+static void declare_function_name(void)
+{
+  const char *name, *printable_name;
+
+  if (current.function_decl == NULL)
+    {
+      name = "";
+      printable_name = "top level";
+    }
+  else
+    {
+      name = current.function_decl->ddecl->name;
+      printable_name = name;
+    }
+
+  declare_magic_string("__FUNCTION__", name);
+  declare_magic_string("__PRETTY_FUNCTION__", printable_name);
+}
+
+static void error_assert(bool ok)
+{
+  if (!ok)
+    {
+      error("confused by earlier errors - bailing out");
+      exit(FATAL_EXIT_CODE);
+    }
+}
+
+static void detect_bogus_env(void)
+{
+  /* We should not come here with the current env as parm level and not
+     in a function. If we do, it's because the error recovery productions
+     failed to pop some levels. So do it now. */
+  while (!current.function_decl && current.env->parm_level)
+    {
+      /* This should only be possible after a (parse) error. Ensure that
+        we aren't confused... */
+      assert(errorcount > 0);
+      poplevel();
+    }
+
+}
+
+/* Start definition of function 'elements d' with attributes attribs.
+   nested is true for nested function definitions.
+   Returns false in case of error.
+   Sets current.function_decl to the declaration for this function */
+bool start_function(type_element elements, declarator d, attribute attribs,
+                   bool nested)
+{
+  int class;
+  scflags scf;
+  const char *name, *intf;
+  type function_type, actual_function_type;
+  bool defaulted_int, old_decl_has_prototype, normal_function;
+  data_declaration old_decl, ddecl;
+  function_decl fdecl;
+  function_declarator fdeclarator;
+  struct data_declaration tempdecl;
+  env_scanner scan;
+  const char *id;
+  void *idval;
+  dd_list doc_tags = NULL;
+  dd_list extra_attr;
+
+  detect_bogus_env();
+
+  if (!nested)
+    error_assert(current.env->global_level && current.function_decl == NULL);
+
+  parse_declarator(elements, d, FALSE, TRUE, &class, &scf,
+                  &intf, &name, &function_type, &defaulted_int, &fdeclarator,
+                  &extra_attr);
+
+  actual_function_type = type_generic(function_type) ?
+    type_function_return_type(function_type) : function_type;
+
+  if (!type_functional(actual_function_type))
+    return FALSE;
+
+  /* We don't set current.function_decl yet so that error messages do not
+     say "In function <thisfunctioname>" as we're not "in" the function yet */
+  fdecl = new_function_decl(parse_region, d->location, d, elements, attribs,
+                           NULL, NULL, current.function_decl, NULL);
+  fdecl->declared_type = function_type;
+  fdecl->undeclared_variables = new_env(parse_region, NULL);
+  fdecl->current_loop = NULL;
+
+  if (class == RID_AUTO)
+    {
+      if (pedantic || !nested)
+       pedwarn("function definition declared `auto'");
+      class = 0;
+    }
+  else if (class == RID_REGISTER)
+    {
+      error("function definition declared `register'");
+      class = 0;
+    }
+  else if (class == RID_TYPEDEF)
+    {
+      error("function definition declared `typedef'");
+      class = 0;
+    }
+  else if (class == RID_EXTERN && nested)
+    {
+      error("nested function `%s' declared `extern'", name);
+      class = 0;
+    }
+  else if ((class == RID_STATIC || scf & scf_inline) && nested)
+    {
+      if (pedantic)
+       pedwarn("invalid storage class for function `%s'", name);
+      class = 0;
+    }
+  
+  if (class == RID_COMMAND || class == RID_EVENT || class == RID_TASK)
+    {
+      if (nested)
+       {
+         error("commands, events or tasks cannot be nested");
+         class = 0;
+       }
+      else if (current.language == l_c)
+       {
+         error("commands, events or tasks not allowed in C files");
+         class = 0;
+       }
+    }
+
+  if (fdeclarator->gparms && !(class == RID_COMMAND || class == RID_EVENT))
+    {
+      error("generic parameters only allowed on commands and events");
+      fdeclarator->gparms = NULL;
+    }
+
+  if (!type_void(type_function_return_type(actual_function_type)) &&
+      type_incomplete(type_function_return_type(actual_function_type)))
+    {
+      type t;
+
+      error("return-type is an incomplete type");
+
+      /* Yuck */
+      t = make_function_type(void_type,
+                            type_function_arguments(actual_function_type),
+                            type_function_varargs(actual_function_type),
+                            type_function_oldstyle(actual_function_type));
+      if (type_generic(function_type))
+       t = make_generic_type(t, type_function_arguments(function_type));
+
+      function_type = qualify_type1(t, function_type);
+    }
+
+  check_function(&tempdecl, CAST(declaration, fdecl), class, scf,
+                name, function_type, nested, FALSE, defaulted_int);
+  tempdecl.definition = tempdecl.ast;
+  if (current.container)
+    tempdecl.safe = current.container->safe;
+
+  handle_decl_attributes(attribs, &tempdecl);
+  handle_decl_dd_attributes(extra_attr, &tempdecl);
+
+  if (intf)
+    {
+      data_declaration iref = lookup_id(intf, FALSE);
+
+      old_decl = NULL;
+      if (!iref || iref->kind != decl_interface_ref)
+       error("unknown interface `%s'", intf);
+      else
+       {
+         old_decl = interface_lookup(iref, name);
+         if (!old_decl)
+           error("`%s' is not in interface `%s'", name, intf);
+       }
+    }
+  else if (class == RID_COMMAND || class == RID_EVENT)
+    {
+      old_decl = lookup_id(name, FALSE);
+      if (!old_decl)
+       error("unknown command or event `%s'", name);
+    }
+  else
+    old_decl = lookup_id(name, !tempdecl.Cname);
+
+  if (old_decl)
+    {
+      if (((class == RID_COMMAND || class == RID_EVENT) && !old_decl->defined)
+         ^ ((scf & scf_default) != 0))
+       {
+         if (scf & scf_default)
+           {
+             error("`%s' is defined, not used, in this component", name);
+             error("(default implementations are only for used commands or events)");
+           }
+         else
+           error("`%s' is used, not defined, in this component", name);
+       }
+    }
+  else
+    scf &= ~scf_default;
+
+  old_decl_has_prototype = old_decl && old_decl->kind == decl_function &&
+    !type_function_oldstyle(old_decl->type);
+
+  normal_function = !nested && class != RID_STATIC;
+  /* Optionally warn of old-fashioned def with no previous prototype.  */
+  if (warn_strict_prototypes
+      && type_function_oldstyle(function_type)
+      && !old_decl_has_prototype)
+    warning("function declaration isn't a prototype");
+  /* Optionally warn of any global def with no previous prototype.  */
+  else if (warn_missing_prototypes
+          && normal_function && !old_decl_has_prototype
+          && strcmp("main", name))
+    warning("no previous prototype for `%s'", name);
+  /* Optionally warn of any def with no previous prototype
+     if the function has already been used.  */
+  else if (warn_missing_prototypes
+          && old_decl && old_decl->ftype == function_implicit)
+    warning("`%s' was used with no prototype before its definition", name);
+  /* Optionally warn of any global def with no previous declaration.  */
+  else if (warn_missing_declarations
+          && normal_function && !old_decl && strcmp("main", name))
+    warning("no previous declaration for `%s'", name);
+  /* Optionally warn of any def with no previous declaration
+     if the function has already been used.  */
+  else if (warn_missing_declarations
+          && old_decl && old_decl->ftype == function_implicit)
+    warning("`%s' was used with no declaration before its definition", name);
+
+  /* If return types match and old declaraton has a prototype and new
+     declaration hasn't, borrow the prototype. We will check for errors
+     in store_parm_decls. */
+  if (old_decl_has_prototype && type_function_oldstyle(function_type) &&
+      type_compatible(type_function_return_type(old_decl->type),
+                     type_function_return_type(function_type)))
+    {
+      function_type = qualify_type1
+       (make_function_type(type_function_return_type(function_type),
+                           type_function_arguments(old_decl->type),
+                           type_function_varargs(old_decl->type),
+                           FALSE), old_decl->type);
+
+      tempdecl.type = function_type;
+    }
+
+  if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE))
+    {
+      ddecl = old_decl;
+      /* Safety annotation from implementation is the only one that counts */
+      ddecl->safe = tempdecl.safe;
+    }
+  else
+    ddecl = declare(current.env, &tempdecl, FALSE);
+
+  fdecl->base_labels = fdecl->scoped_labels =
+    new_env(parse_region,
+           current.function_decl ? current.function_decl->scoped_labels : NULL);
+  fdecl->ddecl = ddecl;
+  fdecl->fdeclarator = fdeclarator;
+
+  get_latest_docstring(&ddecl->doc, current.fileregion, &doc_tags);
+  handle_fdecl_doc_tags(ddecl->doc.loc, ddecl, fdeclarator, doc_tags);
+
+  /* If requested, replace post/task by references to an interface */
+  if (type_task(ddecl->type) && flag_use_scheduler)
+    handle_task_definition(fdecl);
+
+  /* save environments */
+  current.env = fdeclarator->env;
+  current.env->fdecl = current.function_decl = fdecl;
+
+  /* Set id of parameters (done here rather than in declare because parameters
+     of a given function may be declared several times) */
+  env_scan(current.env->id_env, &scan);
+  while (env_next(&scan, &id, &idval))
+    {
+      data_declaration iddecl = idval;
+
+      if (iddecl->kind == decl_variable)
+       {
+         assert(iddecl->isparameter);
+         iddecl->id = current.function_decl->nlocals++;
+       }
+    }
+
+  return TRUE;
+}
+
+void implicit_decl_warning(data_declaration ddecl)
+{
+  if (builtin_declaration(ddecl))
+      return;
+
+  if (current.language != l_c || mesg_implicit_function_declaration == 2)
+    error("implicit declaration of function `%s'", ddecl->name);
+  else if (mesg_implicit_function_declaration == 1)
+    warning("implicit declaration of function `%s'", ddecl->name);
+}
+
+data_declaration implicitly_declare(identifier fnid)
+{
+  struct data_declaration tempdecl;
+  declaration pseudo_ast =
+    CAST(declaration, new_implicit_decl(parse_region, fnid->location, fnid));
+
+  init_data_declaration(&tempdecl, pseudo_ast,
+                       fnid->cstring.data, implicit_function_type);
+  tempdecl.kind = decl_function;
+  tempdecl.isexternalscope = TRUE;
+  tempdecl.isfilescoperef = TRUE;
+  tempdecl.ftype = function_implicit;
+  /* Point to the limbo version of any previous implicit declaration */
+  tempdecl.shadowed = lookup_global_id(tempdecl.name);
+
+  if (!tempdecl.shadowed) /* warn once only */
+    implicit_decl_warning(&tempdecl);
+
+  return declare(current.env, &tempdecl, FALSE);
+}
+
+/* Declare parameters, either from new style declarations in the 
+   declarator, or from old_parms */
+void store_parm_decls(declaration old_parms)
+{
+  if (!oldstyle_function(current.function_decl))
+    {
+      /* This case is when the function was defined with an ANSI prototype.
+        The parms already have decls, so we need not do anything here
+        except record them as in effect
+        and complain if any redundant old-style parm decls were written.  */
+      if (old_parms)
+       error_with_decl(CAST(declaration, current.function_decl),
+                       "parm types given both in parmlist and separately");
+    }
+  else
+    {
+      oldidentifier_decl parm, parms;
+
+      current.function_decl->old_parms = old_parms;
+      /* Need to either:
+        - compare arg types to previous prototype
+        - or build pseudo-prototype for this function
+      */
+      parms = CAST(oldidentifier_decl,
+                  current.function_decl->fdeclarator->parms);
+      scan_oldidentifier_decl (parm, parms)
+       /* If no declaration given, default to int.  */
+       if (parm->ddecl->type == void_type)
+         {
+           parm->ddecl->type = int_type;
+           if (extra_warnings)
+             warning_with_decl(CAST(declaration, parm),
+                               "type of `%s' defaults to `int'",
+                               parm->cstring.data);
+         }
+    }
+
+  /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
+  declare_function_name();
+}
+
+/* End definition of current function, furnishing it it's body. */
+declaration finish_function(statement body)
+{
+  declaration fn = CAST(declaration, current.function_decl);
+
+  current.function_decl->stmt = body;
+  error_assert(current.env->parm_level);
+  poplevel(); /* Pop parameter level */
+  check_labels();
+  current.function_decl = current.function_decl->parent_function;
+
+  return fn;
+}
+
+/* Start a new scope */
+void pushlevel(bool parm_level)
+{
+  current.env = new_environment(parse_region, current.env, FALSE, parm_level);
+}
+
+/* Pop back to enclosing scope */
+environment poplevel(void)
+{
+  environment old = current.env;
+
+  current.env = current.env->parent;
+
+  return old;
+}
+
+void push_label_level(void)
+{
+  current.function_decl->scoped_labels =
+    new_env(parse_region, current.function_decl->scoped_labels);
+}
+
+void pop_label_level(void)
+{
+  check_labels();
+  current.function_decl->scoped_labels =
+    env_parent(current.function_decl->scoped_labels);
+  assert(current.function_decl->scoped_labels);
+}
+
+void declarator_name(declarator d, const char **oname, const char **iname)
+{
+  *oname = *iname = NULL;
+  while (d)
+    {
+      switch (d->kind)
+       {
+       case kind_identifier_declarator:
+         *oname = CAST(identifier_declarator, d)->cstring.data;
+         return;
+       case kind_interface_ref_declarator:
+         *iname = CAST(interface_ref_declarator, d)->word1->cstring.data;
+         /* fall through */
+       default:
+         d = CAST(nested_declarator, d)->declarator;
+         break;
+       }
+    }
+}
+
+const char *nice_declarator_name(declarator d)
+/* Returns: a user-friendly name for declarator d, allocated in 
+     current.fileregion if necessary
+*/
+{
+  const char *name, *iname;
+
+  declarator_name(d, &name, &iname);
+  if (!name)
+    return "type name";
+  else if (iname)
+    return make_intf_printname(iname, name);
+  else
+    return name;
+}
+
+dd_list check_parameter(data_declaration dd,
+                       type_element elements, variable_decl vd)
+/* Returns: Attributes found while parsing the declarator */
+{
+  int class;
+  scflags scf;
+  const char *name, *printname;
+  bool defaulted_int;
+  type parm_type;
+  dd_list extra_attr;
+
+  parse_declarator(elements, vd->declarator, FALSE, FALSE,
+                  &class, &scf, NULL, &name, &parm_type,
+                  &defaulted_int, NULL, &extra_attr);
+  vd->declared_type = parm_type;
+  printname = name ? name : "type name";
+
+  /* Storage class checks */
+  if (class && class != RID_REGISTER)
+    {
+      error("storage class specified for parameter `%s'", printname);
+      class = 0;
+    }
+
+  check_variable_scflags(scf, vd->location, "parameter", printname);
+
+  /* A parameter declared as an array of T is really a pointer to T.
+     One declared as a function is really a pointer to a function.  */
+  if (type_array(parm_type))
+    /* Transfer const-ness of array into that of type pointed to.  */
+    parm_type =
+      make_pointer_type(qualify_type1(type_array_of(parm_type), parm_type));
+  else if (type_function(parm_type))
+    parm_type = make_pointer_type(parm_type);
+
+  init_data_declaration(dd, CAST(declaration, vd), name, parm_type);
+  dd->kind = decl_variable;
+  dd->definition = dd->ast;
+  dd->isexternalscope = FALSE;
+  dd->isfilescoperef = FALSE;
+  dd->needsmemory = FALSE;
+  dd->isused = TRUE;
+  dd->vtype = class == RID_REGISTER ? variable_register : variable_normal;
+  dd->islocal = dd->isparameter = TRUE;
+  dd->norace = (scf & scf_norace) != 0;
+
+  return extra_attr;
+}
+
+static bool error_signature(type fntype)
+/* Returns: TRUE if fntype is the "error in function declaration"
+     type signature (varargs with one argument of type error_type)
+*/
+{
+  typelist tl;
+  typelist_scanner stl;
+
+  if (!type_function_varargs(fntype))
+    return FALSE;
+
+  tl = type_function_arguments(fntype);
+
+  if (!tl || empty_typelist(tl))
+    return FALSE;
+
+  typelist_scan(tl, &stl);
+  return typelist_next(&stl) == error_type && !typelist_next(&stl);
+}
+
+/* Start definition of variable 'elements d' with attributes attributes, 
+   asm specification astmt.
+   If initialised is true, the variable has an initialiser.
+   Returns the declaration for the variable.
+*/
+declaration start_decl(declarator d, asm_stmt astmt, type_element elements,
+                      bool initialised, attribute attributes)
+{
+  variable_decl vd = 
+    new_variable_decl(parse_region, d->location, d, attributes, NULL,
+                     astmt, NULL);
+  dd_list extra_attr;
+  struct data_declaration tempdecl;
+  data_declaration ddecl = NULL, old_decl;
+  dd_list doc_tags = NULL;
+
+  detect_bogus_env();
+
+  if (current.env->parm_level)
+    {
+      extra_attr = check_parameter(&tempdecl, elements, vd);
+
+      handle_decl_attributes(attributes, &tempdecl);
+      handle_decl_dd_attributes(extra_attr, &tempdecl);
+
+      if (type_void(tempdecl.type))
+       {
+         error("parameter `%s' declared void", tempdecl.name);
+         tempdecl.type = int_type;
+       }
+
+      /* Update environment for old-style declarations only if function
+        doesn't have a prototype. We will report an error message later
+        for arguments specified for functions with prototypes. */
+      if (oldstyle_function(current.function_decl))
+       {
+         /* Traditionally, a parm declared float is actually a double.  */
+         if (flag_traditional &&
+             type_equal_unqualified(tempdecl.type, float_type))
+           tempdecl.type = qualify_type1(double_type, tempdecl.type);
+
+         old_decl = lookup_id(tempdecl.name, TRUE);
+
+         if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE))
+           {
+             /* Don't allow more than one "real" duplicate
+                of a forward parm decl.  */
+             ddecl = old_decl;
+             ddecl->type = tempdecl.type;
+             ddecl->ast = CAST(declaration, vd);
+             ddecl->isused = TRUE;
+           }
+         else
+           {
+             error("declaration for parameter `%s' but no such parameter",
+                   tempdecl.name);
+             ddecl = declare(current.env, &tempdecl, FALSE);
+           }
+       }
+      else
+       /* Make a dummy decl to keep everyone happy */
+       ddecl = declare(current.env, &tempdecl, FALSE);
+
+      if (initialised)
+       error("parameter `%s' is initialized",
+             vd->ddecl ? vd->ddecl->name : "type name");
+    }
+  else
+    {
+      int class;
+      scflags scf;
+      const char *name, *printname;
+      bool defaulted_int;
+      type var_type;
+      bool different_binding_level = FALSE;
+      function_declarator fdeclarator = NULL;
+
+      parse_declarator(elements, d, FALSE, FALSE,
+                      &class, &scf, NULL, &name, &var_type,
+                      &defaulted_int, &fdeclarator, &extra_attr);
+      vd->declared_type = var_type;
+      printname = name ? name : "type name";
+
+      if (current.language == l_interface)
+       {
+         if (!(type_command(var_type) || type_event(var_type)))
+           {
+             error("only commands and events can be defined in interfaces");
+             class = RID_COMMAND;
+             var_type = dummy_function_type;
+             fdeclarator = dummy_function_declarator;
+           }
+       }
+      else if (current.language == l_component)
+       {
+         if (type_command(var_type) || type_event(var_type))
+           {
+             if (current.spec_section == spec_normal)
+               error("commands/events must be provided or used");
+           }
+         else if (class == RID_TYPEDEF)
+           {
+             if (current.spec_section != spec_normal)
+               error("typedefs cannot be provided or used");
+           }
+         else
+           {
+             error("variables and functions cannot be declared in component specifications");
+             var_type = error_type;
+           }
+       }
+      else if (current.language == l_implementation &&
+              current.container->configuration)
+       {
+         if (class != RID_TYPEDEF)
+           error("only types and constants can be declared in configurations");
+       }
+      else if (class == RID_COMMAND || class == RID_EVENT)
+       {
+         if (current.language == l_implementation)
+           error("commands or events can only be defined, not declared");
+         else
+           error("commands or events not allowed in C files");
+         class = 0;
+       }
+
+      if (warn_implicit_int && defaulted_int && !type_function(var_type))
+       warning("type defaults to `int' in declaration of `%s'", printname);
+
+      init_data_declaration(&tempdecl, CAST(declaration, vd), name, var_type);
+
+      /* The fun begins */
+
+      /* `extern' with initialization is invalid if not at top level.  */
+      if (class == RID_EXTERN && initialised)
+       {
+         if (current.env->global_level)
+           warning("`%s' initialized and declared `extern'", printname);
+         else
+           error("`%s' has both `extern' and initializer", printname);
+       }
+
+      if (class == RID_AUTO && current.env->global_level)
+       {
+         error("top-level declaration of `%s' specifies `auto'", printname);
+         class = 0;
+       }
+
+      if (class == RID_TYPEDEF)
+       {
+         /* typedef foo = bar  means give foo the same type as bar.
+            We haven't parsed bar yet, so `finish_decl' will fix that up.
+            Any other case of an initialization in a TYPE_DECL is an error. */
+         if (initialised && (pedantic || elements->next))
+           error("typedef `%s' is initialized", printname);
+
+         tempdecl.kind = decl_typedef;
+         tempdecl.definition = tempdecl.ast;
+         tempdecl.isexternalscope = FALSE;
+         tempdecl.isfilescoperef = FALSE;
+         tempdecl.needsmemory = FALSE;
+
+         /* XXX: should give errors for silly values of scf
+            (but gcc doesn't even complain about
+            inline typedef int foo;) */
+       }
+      else if (type_functional(var_type) || type_generic(var_type))
+       {
+         /* Note: type_generic here can only be for generic functions
+            (generic interfaces only show up in components), and use
+            declare_interface_ref */
+         bool nested = !current.env->global_level && class == RID_AUTO;
+
+         if (initialised)
+           error("function `%s' is initialized like a variable",
+                 printname);
+
+         if (class == RID_AUTO && pedantic)
+           pedwarn("invalid storage class for function `%s'", name);
+         if (class == RID_REGISTER)
+           {
+             error("invalid storage class for function `%s'", name);
+             class = 0;
+           }
+         /* Function declaration not at top level.
+            Storage classes other than `extern' are not allowed
+            and `extern' makes no difference.  */
+         if (!current.env->global_level && pedantic
+             && (class == RID_STATIC || class == RID_INLINE))
+           pedwarn("invalid storage class for function `%s'", name);
+
+         if (fdeclarator && fdeclarator->gparms)
+           {
+             if (current.language == l_interface)
+               error("generic parameters not allowed in interfaces");
+             else if (!(class == RID_COMMAND || class == RID_EVENT))
+               error("generic parameters not allowed on functions");
+           }
+
+         if ((type_command(var_type) || type_event(var_type)) &&
+             type_function_varargs(var_type) && !error_signature(var_type))
+           error("varargs commands and events are not supported");
+
+         check_function(&tempdecl, CAST(declaration, vd), class, scf,
+                        name, var_type, nested, TRUE, defaulted_int);
+       }
+      else
+       {
+         int extern_ref = !initialised && class == RID_EXTERN;
+
+         if (type_void(var_type) &&
+             !(class == RID_EXTERN ||
+               (current.env->global_level &&
+                !(class == RID_STATIC || class == RID_REGISTER))))
+           {
+             error("variable `%s' declared void", printname);
+             var_type = int_type;
+           }
+
+         /* It's a variable.  */
+         check_variable_scflags(scf, d->location, "variable", printname);
+#if 0
+         /* Don't allow initializations for incomplete types
+            except for arrays which might be completed by the initialization.  */
+         if (TYPE_SIZE (TREE_TYPE (decl)) != 0)
+           {
+             /* A complete type is ok if size is fixed.  */
+
+             if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
+                 || C_DECL_VARIABLE_SIZE (decl))
+               {
+                 error ("variable-sized object may not be initialized");
+                 initialised = 0;
+               }
+           }
+         else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
+           {
+             error ("variable `%s' has initializer but incomplete type",
+                    IDENTIFIER_POINTER (DECL_NAME (decl)));
+             initialised = 0;
+           }
+         else if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))) == 0)
+           {
+             error ("elements of array `%s' have incomplete type",
+                    IDENTIFIER_POINTER (DECL_NAME (decl)));
+             initialised = 0;
+           }
+#endif
+         tempdecl.kind = decl_variable;
+         tempdecl.vtype =
+           class == RID_REGISTER ? variable_register :
+           class == RID_STATIC ? variable_static :
+           variable_normal;
+         tempdecl.isfilescoperef = extern_ref;
+         if (!extern_ref)
+           tempdecl.definition = tempdecl.ast;
+         if (current.env->global_level)
+           {
+             tempdecl.isexternalscope =
+               class != RID_STATIC && class != RID_REGISTER;
+             tempdecl.needsmemory = !extern_ref;
+             tempdecl.islocal = FALSE;
+           }
+         else
+           {
+             tempdecl.isexternalscope = extern_ref;
+             tempdecl.needsmemory = class == RID_STATIC;
+             tempdecl.islocal = !(extern_ref || class == RID_STATIC);
+           }
+         tempdecl.norace = (scf & scf_norace) != 0;
+       }
+
+      if (warn_nested_externs && tempdecl.isfilescoperef &&
+         !current.env->global_level && !tempdecl.in_system_header)
+       warning("nested extern declaration of `%s'", printname);
+
+      handle_decl_attributes(attributes, &tempdecl);
+      handle_decl_dd_attributes(extra_attr, &tempdecl);
+
+      old_decl = lookup_id(name, !tempdecl.Cname);
+
+      if ((current.language == l_interface || current.language == l_component)
+         && current.env->global_level)
+       {
+         if (old_decl)
+           error("redefinition of `%s'", printname);
+         old_decl = NULL;
+       }
+      else if (!old_decl && tempdecl.isfilescoperef)
+       {
+         /* Check the global environment if declaring something with file
+            scope */
+         old_decl = lookup_global_id(name);
+         /* global typedefs don't count */
+         if (old_decl && old_decl->kind == decl_typedef)
+           old_decl = NULL;
+         if (old_decl)
+           different_binding_level = TRUE;
+       }
+
+      if (old_decl &&
+         duplicate_decls(&tempdecl, old_decl, different_binding_level, initialised))
+       ddecl = old_decl;
+      else
+       ddecl = declare(current.env, &tempdecl, FALSE);
+
+      ddecl->defined = current.spec_section == spec_provides;
+    }
+  assert(ddecl);
+  vd->ddecl = ddecl;
+
+  /* If requested, replace post/task by references to an interface */
+  if (type_task(ddecl->type) && flag_use_scheduler)
+    handle_task_declaration(vd);
+
+  if (ddecl->kind == decl_typedef)
+    set_typedef_type(ddecl, ddecl->basetype != NULL);
+
+  get_latest_docstring(&ddecl->doc, current.fileregion, &doc_tags);
+  handle_ddecl_doc_tags(ddecl->doc.loc, ddecl, doc_tags);
+
+  return CAST(declaration, vd);
+}
+
+/* Finish definition of decl, furnishing the optional initialiser init.
+   Returns decl */
+declaration finish_decl(declaration decl, expression init)
+{
+  variable_decl vd = CAST(variable_decl, decl);
+  data_declaration dd = vd->ddecl;
+
+  vd->arg1 = init;
+  dd->initialiser = init;
+
+  if (init)
+    {
+      if (dd->kind == decl_typedef)
+       dd->type = init->type;
+      else if (type_array(dd->type))
+       {
+         /* Incomplete array types get their size from the initialiser
+            (this is set correctly for both strings and init_lists) */
+         if (!type_array_size(dd->type))
+           dd->type = init->type;
+       }
+      else if (type_network_base_type(dd->type))
+       error_with_decl(decl, "initialisation of network base types not yet supported");
+    }
+  /* Check for a size */
+  if (type_array(dd->type))
+    {
+      /* Don't you love gcc code? */
+      int do_default
+       = (dd->needsmemory
+          /* Even if pedantic, an external linkage array
+             may have incomplete type at first.  */
+          ? pedantic && !dd->isexternalscope
+          : !dd->isfilescoperef);
+
+      if (!type_array_size(dd->type))
+       {
+         if (do_default)
+           error_with_decl(decl, "array size missing in `%s'",
+                           decl_printname(dd));
+         /* This is what gcc has to say about the next line
+            (see comment/question above):
+            If a `static' var's size isn't known,
+            make it extern as well as static, so it does not get
+            allocated.
+            If it is not `static', then do not mark extern;
+            finish_incomplete_decl will give it a default size
+            and it will get allocated.  */
+         else if (!pedantic && dd->needsmemory && !dd->isexternalscope)
+           dd->isfilescoperef = 1;
+       }
+    }
+
+  if (is_module_local_static(dd) && use_nido)
+    dd_add_last(regionof(current.container->local_statics),
+               current.container->local_statics, dd);
+
+  return decl;
+}
+
+/* Create definition of function parameter 'elements d' with attributes
+   attributes.
+   Returns the declaration for the parameter.
+*/
+declaration declare_parameter(declarator d, type_element elements,
+                             attribute attributes)
+{
+  /* There must be at least a declarator or some form of type specification */
+  location l =
+    d ? d->location : elements->location;
+  variable_decl vd =
+    new_variable_decl(parse_region, l, d, attributes, NULL, NULL, NULL);
+  data_decl dd =
+    new_data_decl(parse_region, l, elements, CAST(declaration, vd));
+  data_declaration ddecl = NULL, old_decl = NULL;
+  struct data_declaration tempdecl;
+  dd_list extra_attr;
+
+  extra_attr = check_parameter(&tempdecl, elements, vd);
+
+  if (tempdecl.name)
+    old_decl = lookup_id(tempdecl.name, TRUE);
+
+  if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE))
+    {
+      /* Don't allow more than one "real" duplicate
+        of a forward parm decl.  */
+      ddecl = old_decl;
+      ddecl->isused = TRUE;
+    }
+  else if (!type_void(tempdecl.type))
+    ddecl = declare(current.env, &tempdecl, FALSE);
+
+  if (ddecl)
+    {
+      /* Forward transparent union property from union to parameter */
+      if (type_union(ddecl->type) && type_tag(ddecl->type)->transparent_union)
+       transparent_union_argument(ddecl);
+
+      handle_decl_attributes(attributes, ddecl);
+      handle_decl_dd_attributes(extra_attr, ddecl);
+    }
+  else
+    {
+      ignored_dd_attributes(extra_attr);
+      ignored_attributes(attributes);
+    }
+
+  vd->ddecl = ddecl;
+
+  return CAST(declaration, dd);
+}
+
+void allow_parameter_redeclaration(declaration parms, bool mark_forward)
+{
+  declaration parm;
+
+  /* We could walk the parameter env instead, but this will break some code
+     I'm currently writing... */
+
+  scan_declaration (parm, parms)
+    if (is_data_decl(parm)) /* skip errors */
+      {
+       data_decl pd = CAST(data_decl, parm);
+       variable_decl vd = CAST(variable_decl, pd->decls);
+       
+       if (mark_forward)
+         vd->forward = TRUE;
+       if (vd->ddecl)
+         {
+           vd->ddecl->isused = FALSE;
+           /* This being non-NULL is used to detect redeclarations 
+              in handle_fdecl_doc_tags - it being non-NULL is an indication
+              that we're not working on a "fresh" (just-parsed) AST */
+           assert(vd->ddecl->ast->parent == NULL);
+         }
+      }
+}
+
+declaration declare_old_parameter(location l, cstring id)
+{
+  oldidentifier_decl d = new_oldidentifier_decl(parse_region, l, id, NULL);
+  data_declaration ddecl;
+
+  if ((ddecl = lookup_id(id.data, TRUE)))
+    error("duplicate parameter name `%s' in parameter list", id.data);
+  else
+    {
+      struct data_declaration tempdecl;
+
+      /* The void type indicates that this is an old-style declaration */
+      /* Note that isused is left FALSE to allow one declaration */
+      init_data_declaration(&tempdecl, CAST(declaration, d), id.data,
+                           void_type);
+      tempdecl.kind = decl_variable;
+      tempdecl.definition = tempdecl.ast;
+      tempdecl.isexternalscope = FALSE;
+      tempdecl.isfilescoperef = FALSE;
+      tempdecl.needsmemory = FALSE;
+      tempdecl.vtype = variable_normal;
+      tempdecl.islocal = tempdecl.isparameter = TRUE;
+      ddecl = declare(current.env, &tempdecl, FALSE);
+    }
+  d->ddecl = ddecl;
+
+  return CAST(declaration, d);
+}
+
+/* Start definition of struct/union (indicated by skind) type tag. */
+type_element start_struct(location l, AST_kind skind, word tag)
+{
+  tag_ref tref = newkind_tag_ref(parse_region, skind, l, tag, NULL, NULL, TRUE);
+  tag_declaration tdecl = tag ? lookup_tag(tref, TRUE) : NULL;
+
+  pending_xref_error();
+
+  if (tdecl && tdecl->kind == skind)
+    {
+      if (tdecl->defined || tdecl->being_defined)
+       {
+         error("redefinition of `%s %s'",
+               tagkind_name(skind), tag->cstring.data);
+         tdecl = declare_tag(tref);
+       }
+    }
+  else
+    tdecl = declare_tag(tref);
+
+  tref->tdecl = tdecl;
+  tdecl->definition = tref;
+  tdecl->being_defined = TRUE;
+  tdecl->packed |= flag_pack_struct;
+
+  return CAST(type_element, tref);
+}
+
+static field_declaration *declare_field(tag_declaration tdecl,
+                                       field_declaration fdecl,
+                                       location floc,
+                                       field_declaration *nextfield)
+{
+  type field_type = fdecl->type;
+  const char *name = fdecl->name;
+
+  fdecl->containing_tag = tdecl;
+
+  if (!tdecl->fields_const)
+    {
+      type base_field_type = type_base(field_type);
+      if (type_const(base_field_type) ||
+         ((type_struct(base_field_type) || type_union(base_field_type)) &&
+          type_tag(base_field_type)->fields_const))
+       tdecl->fields_const = TRUE;
+    }
+
+  /* XXX: Surely we should do the same as for const here ? */
+  if (type_volatile(field_type))
+    tdecl->fields_volatile = TRUE;
+
+  if (name)
+    {
+      if (env_lookup(tdecl->fields, name, TRUE))
+       error_with_location(floc, "duplicate member `%s'", name);
+      env_add(tdecl->fields, name, fdecl);
+    }
+
+#if 0
+  fdecl->next = NULL;
+#endif
+
+  *nextfield = fdecl;
+  return &fdecl->next;
+}
+
+cval check_bitfield_width(field_declaration fdecl)
+{
+  expression w = fdecl->ast->arg1;
+  known_cst cwidth = w->cst;
+  cval bitwidth = cval_top;
+  bool printmsg;
+  const char *errormsg = NULL;
+
+  printmsg = check_constant_once(w, cst_numerical);
+
+  if (cwidth && constant_unknown(cwidth))
+    bitwidth = cval_unknown_number;
+  else if (!(cwidth && constant_integral(cwidth)))
+    errormsg = "bit-field `%s' width not an integer constant";
+  else
+    {
+      largest_uint width = constant_uint_value(cwidth);
+
+      if (pedantic && printmsg)
+       constant_overflow_warning(cwidth);
+
+      /* Detect and ignore out of range field width.  */
+      if (!type_unsigned(cwidth->type) && constant_sint_value(cwidth) < 0)
+       errormsg = "negative width in bit-field `%s'";
+      else if (width > type_size_int(fdecl->type) * BITSPERBYTE)
+       errormsg = "width of `%s' exceeds its type";
+      else if (width == 0 && fdecl->name)
+       errormsg = "zero width for bit-field `%s'";
+      else
+       bitwidth = cval_cast(cwidth->cval, size_t_type);
+    }
+
+  if (printmsg && errormsg)
+    error_with_location(w->location, errormsg, nice_field_name(fdecl->name));
+
+  return bitwidth;
+}
+
+static bool is_nx_tag(tag_declaration tdecl)
+{
+  return tdecl->kind == kind_nx_struct_ref || tdecl->kind == kind_nx_union_ref;
+}
+
+/* Finish definition of struct/union furnishing the fields and attribs.
+   Computes size and alignment of struct/union (see ASSUME: comments).
+   Returns t */
+void layout_struct(tag_declaration tdecl)
+{
+  cval offset, alignment, size;
+  bool isunion = tdecl->kind == kind_union_ref || tdecl->kind == kind_nx_union_ref;
+  field_declaration fdecl;
+  declaration dlist;
+  field_decl flist;
+  bool isnetwork = is_nx_tag(tdecl);
+  bool lastbitfield_be = FALSE;
+
+  offset = size = make_type_cval(0);
+  alignment = cval_bitsperbyte;
+  
+  // We scan all the fields of the struct (field), but we also need to scan
+  // the declaration of the struct to handle anonymous struct/union
+  // boundaries (maybe we should have saved markers?). To do the latter,
+  // we use fdecl/flist, where flist is the "current" list of fields
+  // (corresponding to, e.g., `int x, y, z;' in a struct) and fdecl is
+  // the declaration following the one being used in flist
+
+  /* ASSUME: This code attempts to replicate gcc's struct layout rules for
+     the target, based on it's pcc_bitfield_type_matters,
+     structure_size_boundary and empty_field_boundary fields. See the gcc
+     internal (`info gccint') documentation for the meaning of these
+     fields.
+  */
+  fdecl = tdecl->fieldlist;
+  dlist = tdecl->definition->fields;
+  flist = NULL;
+  for (;;)
+    {
+      cval fsize, falign;
+
+      // Get the next data_decl in the struct
+      if (!flist)
+       {
+         data_decl decl;
+
+         if (!dlist)
+           break;
+
+         decl = CAST(data_decl, ignore_extensions(dlist));
+         dlist = CAST(declaration, dlist->next);
+
+         // Is this a struct/union we should merge in?
+         if (decl->decls)
+           flist = CAST(field_decl, decl->decls); // No.
+         else
+           {
+             tag_declaration anon_tdecl = get_unnamed_tag_decl(decl);
+             field_declaration anon_field;
+
+             // No?
+             if (!anon_tdecl || !anon_tdecl->defined || anon_tdecl->name)
+               continue;
+
+             // Yes. Get size, alignment of struct/union
+             fsize = cval_times(anon_tdecl->size, cval_bitsperbyte);
+             falign = cval_times(anon_tdecl->alignment, cval_bitsperbyte);
+
+             /* Adjust copied anonymous fields */
+             offset = cval_align_to(offset, falign);
+             for (anon_field = anon_tdecl->fieldlist; anon_field;
+                  anon_field = anon_field->next, fdecl = fdecl->next)
+               fdecl->offset = cval_add(anon_field->offset, offset);
+           }
+       }
+
+      if (flist)
+       {
+         /* decode field_decl field */
+         type field_type = fdecl->type;
+         cval bitwidth = cval_top;
+
+         if (flist->arg1)
+           bitwidth = check_bitfield_width(fdecl);
+
+         /* Check for network type fields in network structures once
+            the type is known. Avoid duplicate error messages. */
+         if (isnetwork && !flist->type_checked && !type_variable(field_type))
+           {
+             flist->type_checked = TRUE;
+             if (!type_network(field_type))
+               error_with_location(flist->location, "field `%s' must be a network type",
+                                   fdecl->name);
+           }
+
+         fdecl->bitwidth = bitwidth;
+
+         if (type_size_cc(field_type))
+           fsize = cval_times(type_size(field_type), cval_bitsperbyte);
+         else
+           fsize = cval_top;
+
+         /* don't care about alignment if no size (type_incomplete(field_type)
+            is true, so we got an error above */
+         if (fdecl->packed || tdecl->packed)
+           falign = cval_bitsperbyte;
+         else
+           falign = cval_times
+             (type_has_size(field_type) ? type_alignment(field_type) : cval_top,
+              cval_bitsperbyte);
+
+         if (target->adjust_field_align && !type_realigned(field_type))
+           falign = target->adjust_field_align(fdecl, falign);
+
+         if (cval_istop(bitwidth)) /* regular field */
+           offset = cval_align_to(offset, falign); 
+         else if (cval_isunknown(bitwidth))
+           {
+             if (!cval_istop(offset))
+               offset = cval_unknown_number;
+           }
+         else if (!cval_boolvalue(bitwidth)) /* ie, 0 */
+           {
+             if (target->pcc_bitfield_type_matters || isnetwork)
+               {
+                 offset = cval_align_to(offset, falign);
+                 falign = make_type_cval(1); /* No structure alignment implications */
+               }
+             else
+               {
+                 /* I'm not to blame for gcc's weirdness. */
+                 if (!type_realigned(field_type))
+                   falign = make_type_cval(1);
+                 falign = cval_lcm(falign, make_cval_unsigned(target->empty_field_boundary, size_t_type));
+                 offset = cval_align_to(offset, falign);
+               }
+             fsize = bitwidth;
+           }
+         else
+           {
+             assert(cval_intcompare(bitwidth, cval_zero) > 0);
+             if (target->pcc_bitfield_type_matters && !isnetwork)
+               {
+                 /* skip to next unit on crossing falign-sized boundary.
+                    align struct to falign (note the inconsistency with
+                    the 0-width bitfield). */
+
+                 /* This tests 
+                    ((offset + bitwidth + falign - 1) / falign -
+                    offset / falign) > fsize / falign
+                 */
+                 cval val1 = cval_sub(cval_add(cval_add(offset, bitwidth),
+                                               falign),
+                                      make_type_cval(1));
+                 cval val2 = cval_sub(cval_divide(val1, falign),
+                                      cval_divide(offset, falign));
+
+                 // if falign or offset are top or unknown, this will
+                 // contaminate val2 as appropriate
+                 if (!cval_knownvalue(val2))
+                   offset = val2;
+                 else if (cval_intcompare(val2, cval_divide(fsize, falign)) > 0)
+                   offset = cval_align_to(offset, falign);
+               }
+             else
+               {
+                 /* More network type bitfield fun: when switching between
+                    big and little-endian bitfields, we align to the next
+                    byte boundary (otherwise we could start filling bytes
+                    from opposing ends, which would be very confusing) */
+                 if (isnetwork && type_network_base_type(field_type))
+                   {
+                     bool isbe = type_networkdef(field_type)->isbe;
+
+                     if (isbe != lastbitfield_be)
+                       offset = cval_align_to(offset, cval_bitsperbyte);
+                     lastbitfield_be = isbe;
+                   }
+
+                 // more gcc fun
+                 if (type_realigned(field_type)) 
+                   offset = cval_align_to(offset, falign);
+                 else // don't align, don't affect struct alignment
+                   falign = cval_bitsperbyte;
+               }
+
+             fsize = bitwidth;
+           }
+
+         fdecl->offset = offset;
+
+         flist = CAST(field_decl, flist->next);
+         fdecl = fdecl->next;
+       }
+
+      if (!isunion)
+       {
+         offset = cval_add(offset, fsize);
+         size = offset;
+       }
+      else
+       size = cval_max(fsize, size);
+
+      alignment = cval_lcm(alignment, falign);
+    }
+  if (!isnetwork)
+    alignment = cval_lcm(alignment, make_cval_unsigned(target->structure_size_boundary, size_t_type));
+  if (!cval_istop(tdecl->user_alignment))
+    alignment = cval_lcm(alignment, cval_times(tdecl->user_alignment, cval_bitsperbyte));
+
+  tdecl->size = cval_divide(cval_align_to(size, alignment), cval_bitsperbyte);
+  tdecl->alignment = cval_divide(alignment, cval_bitsperbyte);
+}
+
+/* Finish definition of struct/union furnishing the fields and attribs.
+   Computes size and alignment of struct/union (see ASSUME: comments).
+   Returns t */
+type_element finish_struct(type_element t, declaration fields,
+                          attribute attribs)
+{
+  tag_ref s = CAST(tag_ref, t);
+  tag_declaration tdecl = s->tdecl;
+  bool hasmembers = FALSE;
+  field_declaration *nextfield = &tdecl->fieldlist;
+  declaration fdecl;
+  bool isnetwork = is_nx_tag(tdecl);
+
+  s->fields = fields;
+  s->attributes = attribs;
+  handle_tag_attributes(attribs, tdecl);
+  tdecl->fields = new_env(parse_region, NULL);
+
+  scan_declaration (fdecl, fields)
+    {
+      /* Get real list of fields */
+      data_decl flist = CAST(data_decl, ignore_extensions(fdecl));
+      field_decl field;
+
+      if (!flist->decls) /* possibly a struct/union we should merge in */
+       {
+         tag_declaration anon_tdecl = get_unnamed_tag_decl(flist);
+         field_declaration anon_field;
+         location floc = flist->location;
+
+         if (!anon_tdecl)
+           error_with_location(floc,
+             "unnamed fields of type other than struct or union are not allowed");
+         else if (!anon_tdecl->defined)
+           error_with_location(floc, "anonymous field has incomplete type");
+         else if (anon_tdecl->name)
+           warning_with_location(floc, "declaration does not declare anything");
+         else if (isnetwork && !is_nx_tag(anon_tdecl))
+           error_with_location(floc, "field `%s' must be a network type",
+                               nice_field_name(NULL));
+         else
+           {
+             /* Process alignment to this struct/union in "main" loop below */
+             anon_tdecl->collapsed = TRUE;
+
+             /* Copy fields */
+             for (anon_field = anon_tdecl->fieldlist; anon_field;
+                  anon_field = anon_field->next)
+               {
+                 field_declaration fdecl = ralloc(parse_region, struct field_declaration);
+
+                 *fdecl = *anon_field;
+                 fdecl->ast = NULL;
+                 nextfield = declare_field(tdecl, fdecl, floc, nextfield);
+                 if (fdecl->name)
+                   hasmembers = TRUE;
+               }
+           }
+       }
+      else
+       scan_field_decl (field, CAST(field_decl, flist->decls))
+         {
+           /* decode field_decl field */
+           field_declaration fdecl;
+           type field_type;
+           const char *name;
+           int class;
+           scflags scf;
+           const char *printname;
+           bool defaulted_int;
+           type tmpft;
+           location floc = field->location;
+           dd_list extra_attr;
+
+           fdecl = ralloc(parse_region, struct field_declaration);
+
+           parse_declarator(flist->modifiers, field->declarator,
+                            field->arg1 != NULL, FALSE,
+                            &class, &scf, NULL, &name, &tmpft,
+                            &defaulted_int, NULL, &extra_attr);
+           field_type = tmpft;
+
+           /* Grammar doesn't allow scspec: */
+           assert(scf == 0 && class == 0);
+
+           printname = nice_field_name(name);
+
+           /* Support "flexible arrays" (y[] as field member) --
+              simply make the size 0 which we already handle */
+           if (type_array(field_type) && !type_array_size(field_type))
+             field_type = make_array_type(type_array_of(field_type),
+                                          build_zero(parse_region, dummy_location));
+
+           if (type_function(field_type))
+             {
+               error_with_location(floc, "field `%s' declared as a function", printname);
+               field_type = make_pointer_type(field_type);
+             }
+           else if (type_void(field_type))
+             {
+               error_with_location(floc, "field `%s' declared void", printname);
+               field_type = error_type;
+             }
+           else if (type_incomplete(field_type)) 
+             {
+               error_with_location(floc, "field `%s' has incomplete type", printname);
+               field_type = error_type;
+             }
+
+           fdecl->type = field_type;
+           handle_field_attributes(field->attributes, fdecl);
+           handle_field_dd_attributes(extra_attr, fdecl);
+           field_type = fdecl->type; /* attributes might change type */
+
+           if (field->arg1)
+             {
+               const char *errmsg = NULL;
+
+               if (!type_integer(field_type))
+                 errmsg = "bit-field `%s' has invalid type";
+               else if (!(type_integer(field->arg1->type)))
+                 errmsg = "bit-field `%s' width not an integer constant";
+               else if (type_network_base_type(field_type))
+                 {
+                   if (!type_networkdef(field_type)->bf_encoder)
+                     errmsg = "type of `%s' cannot be used as a bit-field";
+                   else if (!isnetwork)
+                     errmsg = "bit-field `%s' of network type used inside non-network type";
+                 }
+
+               if (errmsg)
+                 {
+                   error_with_location(floc, errmsg, printname);
+                   field->arg1 = NULL;
+                 }
+             }
+
+           fdecl->ast = field;
+           field->fdecl = fdecl;
+           fdecl->name = name;
+           nextfield = declare_field(tdecl, fdecl, floc, nextfield);
+           if (name)
+             hasmembers = TRUE;
+         }
+    }
+
+  if (pedantic && !is_attribute_ref(s) && !hasmembers)
+    pedwarn("%s has no %smembers", tagkind_name(s->kind),
+           (fields ? "named " : ""));
+
+  tdecl->defined = TRUE;
+  tdecl->being_defined = FALSE;
+
+  layout_struct(tdecl);
+
+  return t;
+}
+
+/* Return a reference to struct/union/enum (indicated by skind) type tag */
+type_element xref_tag(location l, AST_kind skind, word tag)
+{
+  tag_ref tref = newkind_tag_ref(parse_region, skind, l, tag, NULL, NULL, FALSE);
+  tag_declaration tdecl = lookup_tag(tref, FALSE);
+
+  if (!tdecl)
+    tdecl = declare_tag(tref);
+
+  tref->tdecl = tdecl;
+
+  return CAST(type_element, tref);
+}
+
+static known_cst last_enum_value;
+
+void layout_enum_start(tag_declaration tdecl)
+{
+  last_enum_value = NULL;
+}
+
+void layout_enum_end(tag_declaration tdecl)
+{
+  declaration names = tdecl->definition->fields;
+  cval smallest, largest;
+  bool enum_isunsigned;
+  type type_smallest, type_largest, enum_reptype;
+  enumerator v, values = CAST(enumerator, names);
+
+  /* Pick a representation type for this enum, if not already done. */
+  if (tdecl->reptype && !type_unknown_int(tdecl->reptype))
+    return;
+
+  /* First, find largest and smallest values defined in this enum. */
+  if (!names)
+    smallest = largest = cval_zero;
+  else
+    {
+      smallest = largest = value_of_enumerator(values);
+
+      if (!cval_isunknown(smallest))
+       scan_enumerator (v, CAST(enumerator, values->next))
+         {
+          cval vv = value_of_enumerator(v);
+
+          if (cval_isunknown(vv))
+            {
+              smallest = vv;
+              break;
+            }
+          if (cval_intcompare(vv, largest) > 0)
+            largest = vv;
+          if (cval_intcompare(vv, smallest) < 0)
+            smallest = vv;
+        }
+    }
+
+  if (cval_isunknown(smallest))
+    enum_reptype = unknown_int_type;
+  else
+    {
+      /* Pick a type that will hold the smallest and largest values. */
+      enum_isunsigned = cval_intcompare(smallest, cval_zero) >= 0;
+      type_smallest = type_for_cval(smallest, enum_isunsigned);
+      type_largest = type_for_cval(largest, enum_isunsigned);
+      assert(type_smallest);
+      if (!type_largest)
+       {
+         assert(!enum_isunsigned);
+         warning("enumeration values exceed range of largest integer");
+         type_largest = long_long_type;
+       }
+      if (type_size_int(type_smallest) > type_size_int(type_largest))
+       enum_reptype = type_smallest;
+      else
+       enum_reptype = type_largest;
+
+      /* We use int as the enum type if that fits, except if both:
+        - the values fit in a (strictly) smaller type
+        - the packed attribute was specified 
+      */
+      if (cval_inrange(smallest, int_type) && cval_inrange(largest, int_type) &&
+         !(tdecl->packed && type_size_int(enum_reptype) < type_size_int(int_type)))
+       enum_reptype = int_type;
+    }
+
+  tdecl->reptype = enum_reptype;
+  tdecl->size = type_size(enum_reptype);
+  tdecl->alignment = type_alignment(enum_reptype);
+
+  /* Change type of all enum constants to enum_reptype */
+  scan_enumerator (v, values)
+    v->ddecl->value = cast_constant(v->ddecl->value, enum_reptype);
+}
+
+known_cst layout_enum_value(enumerator e)
+{
+  const char *name = e->cstring.data;
+  expression value = e->arg1;
+  known_cst cst = NULL;
+
+  // We're already done if we have a non-unknown type for e's value
+  if (e->ddecl && !type_unknown_int(e->ddecl->value->type))
+    return e->ddecl->value;
+
+  if (value)
+    {
+      cst = value->cst;
+      if (check_constant_once(value, cst_numerical))
+       {
+         if (!value->cst || !constant_integral(value->cst))
+           {
+             error("enumerator value for `%s' not integer constant", name);
+             cst = NULL;
+           }
+       }
+    }
+
+  if (!cst)
+    {
+      /* Last value + 1 */
+      if (last_enum_value)
+       {
+         /* No clear logic anywhere to specify which type we should use
+            (ANSI C must specify int, cf warning below) */
+         type addtype = type_unsigned(last_enum_value->type) ?
+           unsigned_long_long_type : long_long_type;
+
+         cst = fold_add(addtype, last_enum_value, onecst);
+       }
+      else
+       cst = zerocst;
+    }
+
+  if (constant_integral(cst))
+    {
+      if (pedantic && !cval_inrange(cst->cval, int_type))
+       {
+         pedwarn("ANSI C restricts enumerator values to range of `int'");
+         cst = zerocst;
+       }
+
+      if (type_size_int(cst->type) < type_size_int(int_type))
+       cst->type =
+         type_for_size(type_size(int_type),
+                       flag_traditional && type_unsigned(cst->type));
+    }
+  last_enum_value = cst;
+
+  return cst;
+}
+
+/* Start definition of struct/union (indicated by skind) type tag. */
+type_element start_enum(location l, word tag)
+{
+  enum_ref tref = new_enum_ref(parse_region, l, tag, NULL, NULL, TRUE);
+  tag_declaration tdecl = tag ? lookup_tag(tref, TRUE) : NULL;
+
+  pending_xref_error();
+
+  if (tdecl && tdecl->kind == kind_enum_ref)
+    {
+      if (tdecl->defined)
+       error("redefinition of `enum %s'", tag->cstring.data);
+    }
+  else
+    tdecl = declare_tag(tref);
+
+  tref->tdecl = tdecl;
+  tdecl->definition = tref;
+  tdecl->being_defined = TRUE;
+  tdecl->packed = flag_short_enums;
+  layout_enum_start(tdecl);
+
+  return CAST(type_element, tref);
+}
+
+/* Finish definition of enum furnishing the names and attribs.
+   Returns t */
+type_element finish_enum(type_element t, declaration names,
+                        attribute attribs)
+{
+  tag_ref s = CAST(tag_ref, t);
+  tag_declaration tdecl = s->tdecl;
+
+  s->fields = names;
+  s->attributes = attribs;
+  handle_tag_attributes(attribs, tdecl);
+  tdecl->fields = 0;
+  tdecl->defined = TRUE;
+  tdecl->being_defined = FALSE;
+
+  layout_enum_end(tdecl);
+
+  return t;
+}
+
+declaration make_enumerator(location loc, cstring id, expression value)
+{
+  declaration ast;
+  struct data_declaration tempdecl;
+  data_declaration ddecl, old_decl;
+  environment env = current.env;
+
+  if (value && !type_integer(value->type))
+    {
+      error("enumerator value for `%s' not integer constant", id.data);
+      value = NULL;
+    }
+  
+  ast = CAST(declaration, new_enumerator(parse_region, loc, id, value, NULL));
+  init_data_declaration(&tempdecl, ast, id.data, int_type);
+  tempdecl.kind = decl_constant;
+  tempdecl.definition = ast;
+  tempdecl.value = layout_enum_value(CAST(enumerator, ast));
+
+  if (current.language == l_interface)
+    {
+      error("only commands and events can be defined in interfaces");
+      /* We don't want the symbol in the interface's env, so give
+        it it's own private home! */
+      env = new_environment(parse_region, NULL, FALSE, FALSE);
+    }
+
+  old_decl = env_lookup(env->id_env, id.data, TRUE);
+
+  if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE))
+    ddecl = old_decl;
+  else
+    ddecl = declare(env, &tempdecl, FALSE);
+
+  CAST(enumerator, ast)->ddecl = ddecl;
+
+  return ast;
+}
+
+/* Create declaration of field 'elements d : bitfield' with attributes
+   attributes.
+   d can be NULL, bitfield can be NULL, but not both at the same time.
+   Returns the declaration for the field.
+*/
+declaration make_field(declarator d, expression bitfield,
+                      type_element elements, attribute attributes)
+{
+  /* We get at least one of a declarator or a bitfield */
+  location l = d ? d->location : bitfield->location;
+
+  return
+    CAST(declaration,
+        new_field_decl(parse_region, l, d, attributes, bitfield));
+}
+
+
+/* Create and return type 'elements d' where d is an absolute declarator */
+asttype make_type(type_element elements, declarator d)
+{
+  location l = elements ? elements->location : d->location;
+  int class;
+  scflags scf;
+  const char *name;
+  bool defaulted_int;
+  asttype t = new_asttype(parse_region, l, d, elements);
+  dd_list extra_attr;
+
+  parse_declarator(t->qualifiers, t->declarator, FALSE, FALSE,
+                  &class, &scf, NULL, &name, 
+                  &t->type, &defaulted_int, NULL, &extra_attr);
+  assert(t->type && !(class || scf || name));
+
+  return t;
+}
+
+
+/* Returns name of r */
+static char *rid_name_int(int id)
+{
+  switch (id)
+    {
+    case RID_INT: return "int";
+    case RID_CHAR: return "char";
+    case RID_FLOAT: return "float";
+    case RID_DOUBLE: return "double";
+    case RID_VOID: return "void";
+    case RID_UNSIGNED: return "unsigned";
+    case RID_SHORT: return "short";
+    case RID_LONG: return "long";
+    case RID_AUTO: return "auto";
+    case RID_STATIC: return "static";
+    case RID_EXTERN: return "extern";
+    case RID_REGISTER: return "register";
+    case RID_TYPEDEF: return "typedef";
+    case RID_SIGNED: return "signed";
+    case RID_INLINE: return "__inline";
+    case RID_COMPLEX: return "__complex";
+    case RID_COMMAND: return "command";
+    case RID_EVENT: return "event";
+    case RID_ASYNC: return "async";
+    case RID_TASK: return "task";
+    case RID_DEFAULT: return "default";
+    case RID_NORACE: return "norace";
+    default: assert(0); return NULL;
+    }
+}
+
+/* Returns name of r */
+char *rid_name(rid r)
+{
+  return rid_name_int(r->id);
+}
+
+/* If statement list l1 ends with an unfinished label, attach l2 to that
+   label. Otherwise attach l2 to the end of l1 */
+statement chain_with_labels(statement l1, statement l2)
+{
+  node last, last_label;
+
+  if (!l1) return l2;
+  if (!l2) return l1;
+
+  last_label = last = last_node(CAST(node, l1));
+  /* There may be an unfinished sub-label due to 'a: b:' */
+  while (last_label->kind == kind_labeled_stmt)
+    {
+      labeled_stmt ls = CAST(labeled_stmt, last_label);
+
+      if (!ls->stmt) /* An unfinished labeled statement */
+       {
+         ls->stmt = l2;
+         return l1;
+       }
+      last_label = CAST(node, ls->stmt);
+    }
+
+  last->next = CAST(node, l2);
+
+  return l1;
+}
+
+void init_semantics(void)
+{
+  current.fileregion = parse_region;
+
+  spontaneous_calls = dd_new_list(parse_region);
+
+  global_env = current.env = new_environment(parse_region, NULL, TRUE, FALSE);
+
+  bad_decl = ralloc(parse_region, struct data_declaration);
+  bad_decl->kind = decl_error;
+  bad_decl->name = "undeclared";
+  bad_decl->type = error_type;
+  bad_decl->ast = new_error_decl(parse_region, dummy_location);
+
+  dummy_function_declarator = 
+    new_function_declarator(parse_region, dummy_location, NULL, NULL, NULL, NULL,   NULL);
+
+  implicit_function_type = make_function_type(int_type, NULL, FALSE, TRUE);
+  dummy_function_type = make_function_type(int_type, new_typelist(parse_region), FALSE, FALSE);
+
+  /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
+  declare_function_name ();
+
+  /* Declare builtin type __builtin_va_list */
+  declare_builtin_types();
+  declare_builtin_identifiers();
+
+  onecst = make_signed_cst(1, int_type);
+  zerocst = make_signed_cst(0, int_type);
+  oneexpr = build_uint_constant(parse_region, dummy_location, size_t_type, 1);
+}
+
+void start_semantics(source_language l, nesc_declaration container,
+                    environment env)
+{
+  current.env = env;
+  current.language = l;
+  current.function_decl = NULL;
+  current.pending_invalid_xref = NULL;
+  current.container = container;
+  current.in_atomic = NULL;
+  current.spec_section = spec_normal;
+}
+
+static bool samekind(type t1, type t2)
+{
+  return (type_integer(t1) && type_integer(t2)) ||
+    (type_floating(t1) && type_floating(t2));
+}
+
+bool handle_mode_attribute(location loc, data_declaration ddecl, const char *mode)
+{
+  type tm, t = ddecl->type;
+
+  /* Simplified mode attribute support. We're missing:
+     - support for multiple pointer sizes (see comment below)
+     - the vector modes
+  */
+
+  if (!(ddecl->kind == decl_variable || ddecl->kind == decl_typedef))
+    return FALSE;
+
+  tm = type_for_mode(mode, type_unsigned(t));
+
+  if (!tm)
+    {
+      error_with_location(loc, "unknown machine mode `%s'", mode);
+      return TRUE;
+    }
+
+  if (type_pointer(t))
+    {
+      /* Simplified pointer handling. We only allow modes that specify
+        the pointer size (in which case we do nothing). In all other
+        cases, we'll report an error. Most targets do not support more
+        than one pointer mode (the exceptions seem to be s390 and mips,
+        that allow both 32 and 64 bit pointers) */
+      if (type_size_int(t) != type_size_int(tm))
+       error("invalid pointer mode `%s'", mode);
+    }
+  else if (samekind(t, tm) ||
+      (type_complex(t) && type_complex(tm) &&
+       samekind(make_base_type(t), make_base_type(tm))))
+    /* If this is a valid resizing, set type. We lose enum-ness here
+       but that shouldn't matter. (If it does, add changing-size support
+       in types.c) */
+    ddecl->type = tm;
+  else
+    error_with_location(loc, "mode `%s' applied to inappropriate type", mode);
+
+  return TRUE;
+}
+
+/* Make "word" argument of attributes into an expression */
+expression make_attr_args(location loc, cstring id, expression args)
+{
+  identifier result = new_identifier(parse_region, loc, id, bad_decl);
+
+  result->type = error_type;
+  result->next = CAST(node, args);
+
+  return CAST(expression, result);
+}
diff --git a/src/semantics.h b/src/semantics.h
new file mode 100644 (file)
index 0000000..c9bb384
--- /dev/null
@@ -0,0 +1,243 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef SEMANTICS_H
+#define SEMANTICS_H
+
+/* Storage specifier "flags" (inline, e.g.) */
+typedef enum {
+  scf_inline = 1,
+  scf_default = 2,
+  scf_async = 4,
+  scf_norace = 8
+} scflags;
+
+/* Predefined __builtin_va_list type */
+extern type builtin_va_list_type;
+extern data_declaration builtin_va_arg_decl;
+extern data_declaration builtin_constant_p;
+
+#include "cstring.h"
+#include "decls.h"
+#include "c-lex-state.h"
+
+/* Print an error message now
+   for a recent invalid struct, union or enum cross reference.
+   We don't print them immediately because they are not invalid
+   when used in the `struct foo;' construct for shadowing.  */
+void pending_xref_error(void);
+
+extern environment global_env;
+
+data_declaration lookup_id(const char *s, bool this_level_only);
+data_declaration lookup_global_id(const char *s);
+
+/* If elements is 'struct foo' shadow tag foo in the current environment */
+void shadow_tag(type_element elements);
+
+/* Like shadow_tag, but a pedwarn has already been issued if warned == 1 */
+void shadow_tag_warned(type_element elements, int warned);
+
+
+declarator finish_array_or_fn_declarator(declarator nested, nested_declarator d);
+
+/* Start definition of function 'elements d' with attributes attribs.
+   nested is true for nested function definitions.
+   Returns false in case of error.
+   Sets current.function_decl to the declaration for this function */
+bool start_function(type_element elements, declarator d, attribute attribs,
+                   bool nested);
+
+/* Add old-style parameter declarations old_parms to the current function */
+void store_parm_decls(declaration old_parms);
+
+/* End definition of current function, furnishing it it's body. */
+declaration finish_function(statement body);
+
+
+/* Start a new scope */
+void pushlevel(bool parm_level);
+
+/* Pop back to enclosing scope */
+environment poplevel(void);
+
+
+/* Categories of variable declarations */
+enum { var_typedef, var_register, var_normal, var_static, var_extern };
+
+/* Start definition of variable 'elements d' with attributes
+   extra_attributes and attributes, asm specification astmt.
+   If initialised is true, the variable has an initialiser.
+   Returns the declaration for the variable.
+*/
+declaration start_decl(declarator d, asm_stmt astmt, type_element elements,
+                      bool initialised, attribute attributes);
+
+/* Finish definition of decl, furnishing the optional initialiser init.
+   Returns decl */
+declaration finish_decl(declaration decl, expression init);
+
+/* Create definition of function parameter 'elements d' with attributes
+   extra_attributes and attributes.
+   Returns the declaration for the parameter.
+*/
+declaration declare_parameter(declarator d, type_element elements,
+                             attribute attributes);
+
+/* Allow parameters to be redeclared. mark_forward should be TRUE
+   if these are "forward" parameter declarations (gcc extension) */
+void allow_parameter_redeclaration(declaration parms, bool mark_forward);
+
+declaration declare_old_parameter(location l, cstring id);
+
+
+/* Start definition of struct/union (indicated by skind) type tag. */
+type_element start_struct(location l, AST_kind skind, word tag);
+
+/* Finish definition of struct/union furnishing the fields and attribs.
+   Returns t */
+type_element finish_struct(type_element t, declaration fields,
+                          attribute attribs);
+
+/* Return a reference to struct/union/enum (indicated by skind) type tag */
+type_element xref_tag(location l, AST_kind skind, word tag);
+
+/* Start definition of struct/union (indicated by skind) type tag. */
+type_element start_enum(location l, word tag);
+
+/* Finish definition of enum furnishing the names and attribs.
+   Returns t */
+type_element finish_enum(type_element t, declaration names,
+                        attribute attribs);
+
+/* Create declaration of field 'elements d : bitfield' with attributes
+   extra_attributes and attributes.
+   d can be NULL, bitfield can be NULL, but not both at the same time.
+   Returns the declaration for the field.
+*/
+declaration make_field(declarator d, expression bitfield,
+                      type_element elements, attribute attributes);
+
+declaration make_enumerator(location loc, cstring id, expression value);
+
+
+/* Create and return type 'elements d' where d is an absolute declarator */
+asttype make_type(type_element elements, declarator d);
+
+/* Returns name of r */
+char *rid_name(rid r);
+
+/* If statement list l1 ends with an unfinished label, attach l2 to that
+   label. Otherwise attach l2 to the end of l1 */
+statement chain_with_labels(statement l1, statement l2);
+
+void declarator_name(declarator d, const char **oname, const char **iname);
+const char *nice_declarator_name(declarator d);
+/* Returns: a user-friendly name for declarator d, allocated in 
+     current.fileregion if necessary
+*/
+
+data_declaration lookup_id(const char *s, bool this_level_only);
+
+data_declaration implicitly_declare(identifier fnid);
+
+void push_label_level(void);
+void pop_label_level(void);
+
+void init_data_declaration(data_declaration dd, declaration ast,
+                          const char *name, type t);
+data_declaration declare(environment env, data_declaration from,
+                        bool ignore_shadow);
+
+/* Build a declaration object for a string */
+data_declaration declare_string(const char *name, cstring value, bool wide);
+
+environment new_environment(region r, environment parent,
+                           bool global_level, bool parm_level);
+
+tag_declaration declare_tag(tag_ref t);
+tag_declaration lookup_tag(tag_ref t, bool this_level_only);
+tag_declaration declare_global_tag(tag_ref t);
+tag_declaration lookup_global_tag(tag_ref t);
+
+void init_semantics(void);
+void start_semantics(source_language l, nesc_declaration container,
+                    environment parent_env);
+
+struct semantic_state
+{
+  region fileregion;           /* A per-file region.
+                                  "Renewed" at the start of each file and
+                                  of each implementation section */
+  source_language language;    /* The current language */
+  environment env;             /* The current environment */
+  nesc_declaration file;       /* The nesC entity of the file being compiled
+                                  (different from container while dealing
+                                  with C declarations at the beginning of
+                                  the file) */
+  nesc_declaration container;  /* The nesC entity being compiled (NULL for C) */
+  function_decl function_decl; /* The function currently being defined */
+  tag_ref pending_invalid_xref;        /* Internal use */
+  enum {                       /* Within a component specification, are we: */
+    spec_normal,               /*   - neither in provides or in uses */
+    spec_provides,             /*   - in a provides section */
+    spec_uses                  /*   - in a uses section */
+  } spec_section;      
+
+  atomic_stmt in_atomic;               /* The lexically containing atomic statement
+                                  (NULL for none) */
+  char *preprocessed_file;     /* Temp file holding preprocessor output */
+  struct lex_state lex;
+};
+
+extern struct semantic_state current;
+
+extern dd_list spontaneous_calls;
+/* List of spontaneously-called functions */
+
+void check_variable_scflags(scflags scf,
+                           location l, const char *kind, const char *name);
+
+void parse_declarator(type_element modifiers, declarator d, bool bitfield, 
+                     bool require_parm_names,
+                     int *oclass, scflags *oscf,
+                     const char **ointf, const char **oname,
+                     type *ot, bool *owarn_defaulted_int,
+                     function_declarator *ofunction_declarator,
+                     dd_list *oattributes);
+
+int duplicate_decls(data_declaration newdecl, data_declaration olddecl,
+                   bool different_binding_level, bool newinitialised);
+
+void check_array_size(expression size, const char *printname);
+
+void layout_enum_start(tag_declaration tdecl);
+void layout_enum_end(tag_declaration tdecl);
+known_cst layout_enum_value(enumerator e);
+void layout_struct(tag_declaration tdecl);
+const char *tagkind_name(int tagkind);
+bool handle_mode_attribute(location loc, data_declaration ddecl, const char *mode);
+/* Make "word" argument of attributes into an expression */
+expression make_attr_args(location loc, cstring id, expression args);
+data_declaration declare_builtin_type(const char *name, type t);
+
+#endif
diff --git a/src/stmt.c b/src/stmt.c
new file mode 100644 (file)
index 0000000..b185cd2
--- /dev/null
@@ -0,0 +1,359 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "stmt.h"
+#include "semantics.h"
+#include "expr.h"
+#include "c-parse.h"
+#include "constants.h"
+#include "edit.h"
+#include "AST_utils.h"
+
+void fail_in_atomic(const char *context)
+{
+  if (current.in_atomic)
+    error("%s not allowed in atomic statements", context);
+}
+
+void fail_different_atomic(atomic_stmt target)
+{
+  if (target != current.in_atomic)
+    error("control transfer crosses atomic statement boundary");
+}
+
+void check_condition(const char *context, expression e)
+{
+  type etype = default_conversion(e);
+
+  if (etype != error_type && !type_scalar(etype))
+    error("%s condition must be scalar", context);
+  if (warn_parentheses && is_assignment(e) && !e->parens)
+    warning("suggest parentheses around assignment used as truth value");
+}
+
+void check_switch(expression e)
+{
+  if (e->type != error_type && !type_integer(e->type))
+    error("switch quantity not an integer");
+}
+
+static type current_return_type(void)
+{
+  type fntype = current.function_decl->ddecl->type;
+
+  if (type_generic(fntype))
+    fntype = type_function_return_type(fntype);
+
+  if (type_volatile(fntype))
+    warning("function declared `noreturn' has a `return' statement");
+
+  return type_function_return_type(fntype);
+}
+
+void check_void_return(void)
+{
+  type ret = current_return_type();
+
+  if (warn_return_type && ret != error_type && !type_void(ret))
+    warning("`return' with no value, in function returning non-void");
+}
+
+statement make_void_return(location loc)
+{
+  statement ret = CAST(statement, new_return_stmt(parse_region, loc, NULL));
+
+  ret->containing_atomic = current.in_atomic;
+  check_void_return();
+
+  return ret;
+}
+
+void check_return(expression e)
+{
+  type ret = current_return_type();
+  if (type_void(ret))
+    {
+      if (pedantic || !type_void(e->type))
+       warning("`return' with a value, in function returning void");
+    }
+  else
+    {
+      check_assignment(ret, default_conversion_for_assignment(e), e, "return", NULL, 0);
+      /* XXX: Missing warning about returning address of local var */
+    }
+}
+
+statement make_return(location loc, expression arg)
+{
+  declaration temp = NULL;
+  statement ret;
+
+  if (arg->type != error_type && current.in_atomic)
+    {
+      data_declaration ddecl;
+
+      pushlevel(FALSE);
+      temp = CAST(declaration,
+                 build_declaration(parse_region, current.env, current_return_type(),
+                                   "__nesc_temp", arg, &ddecl));
+      arg = build_identifier(parse_region, loc, ddecl);
+    }
+
+  ret = CAST(statement, new_return_stmt(parse_region, loc, arg));
+  ret->containing_atomic = current.in_atomic;
+  check_return(arg);
+
+  if (temp)
+    ret = CAST(statement,
+              new_compound_stmt(parse_region, loc, NULL, temp, ret, poplevel()));
+
+  return ret;
+}
+
+void check_computed_goto(expression e)
+{
+  /* Rather weak check (same as gcc) */
+  check_conversion(ptr_void_type, e->type);
+}
+
+label_declaration new_label_declaration(region r, const char *name, id_label firstuse)
+{
+  label_declaration ldecl = ralloc(r, struct label_declaration);
+
+  ldecl->name = name;
+  ldecl->explicitly_declared = FALSE;
+  ldecl->firstuse = firstuse;
+  ldecl->definition = NULL;
+  ldecl->containing_function = current.function_decl;
+  /* The label "belongs" to the atomic statement in force the first time
+     it's mentioned */
+  ldecl->containing_atomic = current.in_atomic;
+
+  return ldecl;
+}
+
+void lookup_label(id_label label)
+{
+  label_declaration ldecl;
+
+  if (!current.function_decl)
+    {
+      error ("label %s referenced outside of any function",
+            label->cstring.data);
+      /* A dummy decl to make everybody happy. */
+      label->ldecl = new_label_declaration(parse_region, label->cstring.data, label);
+      return;
+    }
+
+  ldecl = env_lookup(current.function_decl->scoped_labels, label->cstring.data,
+                    FALSE);
+
+  /* Only explicitly declared labels are visible in nested functions */
+  if (ldecl && !ldecl->explicitly_declared &&
+      ldecl->containing_function != current.function_decl)
+    ldecl = NULL;
+
+  if (!ldecl) /* new label */
+    {
+      ldecl = new_label_declaration(parse_region, label->cstring.data, label);
+      env_add(current.function_decl->base_labels, label->cstring.data, ldecl);
+    }
+  else
+    if (ldecl->containing_atomic != current.in_atomic)
+      error("label %s is referenced in different atomic statements",
+           label->cstring.data);
+
+  label->ldecl = ldecl;
+}
+
+void use_label(id_label label)
+{
+  lookup_label(label);
+  label->ldecl->used = TRUE;
+}
+
+static void duplicate_label_error(id_label label)
+{
+  error("duplicate label declaration `%s'", label->cstring.data);
+  error_with_location(label->ldecl->definition ?
+                     label->ldecl->definition->location :
+                     label->ldecl->firstuse->location,
+                     "this is a previous declaration");
+}
+
+void define_label(id_label label)
+{
+  lookup_label(label);
+  if (label->ldecl->definition)
+    duplicate_label_error(label);
+  else
+    label->ldecl->definition = label;
+}
+
+void declare_label(id_label label)
+{
+  label_declaration ldecl =
+    env_lookup(current.function_decl->scoped_labels, label->cstring.data, TRUE);
+
+  if (ldecl)
+    {
+      label->ldecl = ldecl;
+      duplicate_label_error(label);
+    }
+  else
+    {
+      ldecl = new_label_declaration(parse_region, label->cstring.data, label);
+      env_add(current.function_decl->scoped_labels, label->cstring.data, ldecl);
+    }
+  ldecl->explicitly_declared = TRUE;
+}
+
+void check_labels(void)
+{
+  env_scanner scan_labels;
+  void *ld;
+  const char *lname;
+
+  env_scan(current.function_decl->scoped_labels, &scan_labels);
+  while (env_next(&scan_labels, &lname, &ld))
+    {
+      label_declaration ldecl = ld;
+
+      if (!ldecl->definition)
+       error_with_location(ldecl->firstuse->location,
+                           "label `%s' used but not defined", lname);
+      else if (!ldecl->used && warn_unused)
+       warning_with_location(ldecl->firstuse->location,
+                             "label `%s' defined but not used", lname);
+    }
+}
+
+void push_loop(statement loop_statement)
+{
+  loop_statement->parent_loop = current.function_decl->current_loop;
+  current.function_decl->current_loop = loop_statement;
+  loop_statement->containing_atomic = current.in_atomic;
+}
+
+void pop_loop(void)
+{
+  current.function_decl->current_loop =
+    current.function_decl->current_loop->parent_loop;
+}
+
+static statement containing_switch(label l)
+{
+  statement sw = current.function_decl->current_loop;
+
+  /* Find a switch */
+  while (sw && !is_switch_stmt(sw))
+    sw = sw->parent_loop;
+
+  if (sw)
+    {
+      /* Chain the label */
+      /* XXX: n^2 algo */
+      label *last = &CAST(switch_stmt, sw)->next_label;
+      bool lisdefault = is_default_label(l);
+
+      /* XXX: no duplicate case check */
+      while (*last)
+       {
+         if (is_default_label(*last) && lisdefault)
+           {
+             error("multiple default labels in one switch");
+             error_with_location((*last)->location,
+                                 "this is the first default label");
+             lisdefault = FALSE; /* Only one error */
+           }
+         last = &(*last)->next_label;
+       }
+
+      fail_different_atomic(sw->containing_atomic);
+
+      *last = l;
+    }
+
+  return sw;
+}
+
+void check_case_value(expression e)
+{
+  if (check_constant_once(e, cst_numerical))
+    if (!e->cst || !(e->type == error_type || type_integer(e->type)))
+      error_with_location(e->location,
+                         "case label does not reduce to an integer constant");
+}
+
+void check_case(label label0)
+{
+  statement sw = containing_switch(label0);
+  case_label label = CAST(case_label, label0);
+
+  if (!sw)
+     error("case label not within a switch statement");
+
+  check_case_value(label->arg1);
+  if (label->arg2) 
+    check_case_value(label->arg2);
+  /* XXX: no range check (compared to switched type), no empty range check */
+  /* XXX: no check for unreachable code */
+}
+
+void check_default(label default_label)
+{
+  statement sw = containing_switch(default_label);
+
+  if (!sw)
+    error("default label not within a switch statement");
+  /* XXX: no check for unreachable code */
+}
+
+void check_break(statement break_statement)
+{
+  statement current_loop = current.function_decl->current_loop;
+
+  if (!current_loop)
+    error("break statement not within loop or switch");
+  else
+    fail_different_atomic(current_loop->containing_atomic);
+
+  break_statement->parent_loop = current_loop;
+}
+
+void check_continue(statement continue_statement)
+{
+  statement loop = current.function_decl->current_loop;
+
+  /* Find a loop */
+  while (loop && is_switch_stmt(loop))
+    loop = loop->parent_loop;
+
+  if (!loop)
+    error("continue statement not within a loop");
+  else
+    fail_different_atomic(loop->containing_atomic);
+
+  continue_statement->parent_loop = loop;
+}
diff --git a/src/stmt.h b/src/stmt.h
new file mode 100644 (file)
index 0000000..7d72e4f
--- /dev/null
@@ -0,0 +1,54 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef STMT_H
+#define STMT_H
+
+void check_condition(const char *context, expression e);
+void check_switch(expression e);
+void check_void_return(void);
+void check_return(expression e);
+void check_computed_goto(expression e);
+statement make_return(location loc, expression arg);
+statement make_void_return(location loc);
+
+void lookup_label(id_label label);
+void use_label(id_label label);
+void define_label(id_label label);
+void declare_label(id_label label);
+
+void check_labels(void);
+
+void check_case(label case_label);
+void check_case_value(expression e);
+void check_default(label default_label);
+void check_break(statement break_statement);
+void check_continue(statement continue_statement);
+void fail_in_atomic(const char *context);
+
+void push_loop(statement loop_statement);
+void pop_loop(void);
+
+label_declaration new_label_declaration(region r, const char *name, id_label firstuse);
+
+#endif
+
diff --git a/src/tdspecs b/src/tdspecs
new file mode 100644 (file)
index 0000000..418229b
--- /dev/null
@@ -0,0 +1,4 @@
+.nc: @nesc
+
+@nesc:
+perl -S nesc-compile %{_*} %{m*} %{D*&U*&A*} %{I*} %{undef} %{trigraphs} %{i*} %{nostdinc} %{a*} %{g*} %{O*} %{W*} %{w} %{S} %{pedantic*} %{std*} %{ansi} %{traditional} %{v} %{p*} %{f*} %{!fsyntax-only:%{!fnesc-cfile=*:%{!_fnesc-cfile=*:-fnesc-tmpcfile=%g.c}} %{S:%W{o*}%{!o*:-o %b.s}}%{!S:%{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}}} %{fsyntax-only:-o %j} %{-param*} %i -_ASM %Y
diff --git a/src/toplev.c b/src/toplev.c
new file mode 100644 (file)
index 0000000..5938ddb
--- /dev/null
@@ -0,0 +1,374 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <signal.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "parser.h"
+#include "c-parse.h"
+#include "unparse.h"
+#include "semantics.h"
+#include "machine.h"
+#include "nesc-main.h"
+#include "nesc-paths.h"
+#include "nesc-cpp.h"
+#include "nesc-msg.h"
+#include "nesc-doc.h"
+
+#if HAVE_POLL
+#include <sys/poll.h>
+#endif
+
+/* Table of language-independent -f and -W options.
+   STRING is the option name.  VARIABLE is the address of the variable.
+   ON_VALUE is the value to store in VARIABLE
+    if `-fSTRING' is seen as an option.
+   (If `-fno-STRING' is seen as an option, the opposite value is stored.)  */
+
+static struct { char c; char *string; int *variable; int on_value;} fW_options[] =
+{
+  { 'f', "syntax-only", &flag_syntax_only, 1 },
+  { 'f', "parse-only", &flag_parse_only, 1 },
+  { 'f', "pack-struct", &flag_pack_struct, 1 },
+  { 'f', "allow-single-precision", &flag_allow_single_precision, 1 },
+  { 'f', "signed-char", &flag_signed_char, 1 },
+  { 'f', "unsigned-char", &flag_signed_char, 0 },
+  { 'f', "signed-bitfields", &flag_signed_bitfields, 1 },
+  { 'f', "unsigned-bitfields", &flag_signed_bitfields, 0 },
+  { 'f', "short-enums", &flag_short_enums, 1 },
+  { 'f', "cond-mismatch", &flag_cond_mismatch, 1 },
+  { 'f', "asm", &flag_no_asm, 0 },
+
+  { 'W', "unused", &warn_unused, 1 },
+  { 'W', "error", &warnings_are_errors, 1 },
+  { 'W', "shadow", &warn_shadow, 1 },
+  { 'W', "switch", &warn_switch, 1 },
+  { 'W', "aggregate-return", &warn_aggregate_return, 1 },
+  { 'W', "cast-align", &warn_cast_align, 1 },
+  { 'W', "uninitialized", &warn_uninitialized, 1 },
+  { 'W', "inline", &warn_inline, 1 },
+  { 'W', "error-implicit-function-declaration", &mesg_implicit_function_declaration, 2 },
+  { 'W', "implicit-function-declaration", &mesg_implicit_function_declaration, 1 },
+  { 'W', "implicit-int", &warn_implicit_int, 1 },
+  { 'W', "write-strings", &warn_write_strings, 1 },
+  { 'W', "cast-qual", &warn_cast_qual, 1 },
+  { 'W', "bad-function-cast", &warn_bad_function_cast, 1 },
+  { 'W', "pointer-arith", &warn_pointer_arith, 1 },
+  { 'W', "strict-prototypes", &warn_strict_prototypes, 1 },
+  { 'W', "missing-prototypes", &warn_missing_prototypes, 1 },
+  { 'W', "missing-declarations", &warn_missing_declarations, 1 },
+  { 'W', "redundant-decls", &warn_redundant_decls, 1 },
+  { 'W', "nested-externs", &warn_nested_externs, 1 },
+  { 'W', "traditional", &warn_traditional, 1 },
+  { 'W', "format", &warn_format, 1 },
+  { 'W', "char-subscripts", &warn_char_subscripts, 1 },
+  { 'W', "conversion", &warn_conversion, 1 },
+  { 'W', "parentheses", &warn_parentheses, 1 },
+  { 'W', "return-type", &warn_return_type, 1 },
+  { 'W', "missing-braces", &warn_missing_braces, 1 },
+  { 'W', "main", &warn_main, 1 },
+  { 'W', "sign-compare", &warn_sign_compare, 1 },
+  { 'W', "multichar", &warn_multichar, 1 },
+  { 'W', "comment", &warn_comments, 1 },
+  { 'W', "comments", &warn_comments, 1 },
+  { 'W', "trigraphs", &warn_trigraphs, 1 },
+  { 'W', "unused-macros", &warn_unused_macros, 1 },
+  { 'W', "endif-labels", &warn_endif_labels, 1 },
+  { 'W', "system-headers", &warn_system_headers, 1 },
+  { 'W', "undef", &warn_undef, 1 },
+  { 'W', "missing-include-dirs", &warn_missing_include_dirs, 1 },
+  { 'W', "multichar", &warn_multichar, 1 }
+};
+
+/* Options with arguments */
+#define OPTS_WITH_ARGS "DUAIo"
+
+const char *opts_with_args[] = 
+{
+  "include",
+  "imacros",
+  "idirafter",
+  "iprefix",
+  "iwithprefix",
+  "iwithprefixbefore",
+  "isystem",
+  "iquote"
+};
+
+#ifdef SIGPIPE
+/* Handler for SIGPIPE.  */
+static void pipe_closed (int signo)
+{
+  fatal("output pipe has been closed");
+}
+#endif
+
+/* Print a fatal error message.  NAME is the text.
+   Also include a system error message based on `errno'.  */
+
+\f
+/* Decode the string P as a language-specific option for C. */
+static bool c_option(char *p)
+{
+  if (!strcmp (p, "-v"))
+    flag_verbose = 1;
+  else if (!strcmp (p, "-traditional"))
+    flag_traditional = 1;
+  else if (!strcmp (p, "-trigraphs"))
+    flag_trigraphs = 1;
+  else if (!strcmp (p, "-ansi"))
+    flag_no_asm = 1;
+  else if (!strcmp (p, "-pedantic"))
+    pedantic = 1;
+  else if (!strcmp (p, "-pedantic-errors"))
+    flag_pedantic_errors = pedantic = 1;
+  else if (!strcmp (p, "-nostdinc"))
+    flag_nostdinc = 1;
+  else if (!strcmp (p, "-undef"))
+    flag_undef = 1;
+  else if (!strcmp (p, "-fdollars-in-identifiers"))
+    fprintf(stderr, "nesC does not support $ in identifiers");
+  else if (!strcmp (p, "-fno-dollars-in-identifiers"))
+    dollars_in_ident = 0;
+  else if (!strcmp (p, "-w"))
+    inhibit_warnings = 1;
+  else if (!strcmp (p, "-Wimplicit"))
+    {
+      warn_implicit_int = 1;
+      if (mesg_implicit_function_declaration != 2)
+        mesg_implicit_function_declaration = 1;
+    }
+  else if (!strcmp (p, "-Wno-implicit"))
+    warn_implicit_int = 0, mesg_implicit_function_declaration = 0;
+  else if (!strcmp (p, "-W"))
+    {
+      extra_warnings = 1;
+      /* We save the value of warn_uninitialized, since if they put
+        -Wuninitialized on the command line, we need to generate a
+        warning about not using it without also specifying -O.  */
+      if (warn_uninitialized != 1)
+       warn_uninitialized = 2;
+    }
+  else if (!strcmp (p, "-Wall"))
+    {
+      /* We save the value of warn_uninitialized, since if they put
+        -Wuninitialized on the command line, we need to generate a
+        warning about not using it without also specifying -O.  */
+      if (warn_uninitialized != 1)
+       warn_uninitialized = 2;
+      warn_implicit_int = 1;
+      mesg_implicit_function_declaration = 1;
+      warn_return_type = 1;
+      warn_unused = 1;
+      warn_switch = 1;
+      warn_format = 1;
+      warn_char_subscripts = 1;
+      warn_parentheses = 1;
+      warn_missing_braces = 1;
+      /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding can turn
+        it off only if it's not explicit.  */
+      warn_main = 2;
+
+      warn_trigraphs = 1;
+      warn_comments = 1;
+    }
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static void rcc_aborting(int s)
+{
+  location where;
+
+  signal(SIGABRT, 0);
+  fprintf(stderr, "nesC: Internal error. Please send a bug report to the nesC bug mailing list\nat nescc-bugs@lists.sourceforge.net\n");
+  where = current_location();
+  if (where != dummy_location)
+    fprintf(stderr, "Current location (guess): %s:%lu\n", where->filename, where->lineno);
+  if (getenv("RCCDEBUG"))
+    abort();
+  else
+    exit(FATAL_EXIT_CODE);
+}
+\f
+/* Entry point of cc1/c++.  Decode command args, then call compile_file.
+   Exit code is 35 if can't open files, 34 if fatal error,
+   33 if had nonfatal errors, else success.  */
+
+static void outofmemory(void)
+{
+  fprintf(stderr, "Out of memory - exiting\n");
+  exit(FATAL_EXIT_CODE);
+}
+
+int region_main(int argc, char **argv) deletes
+{
+  int i;
+  char *filename = 0;
+  char *targetfile = 0;
+  char *p;
+
+#if HAVE_POLL
+  char* waitforgdb;
+  /*
+   * Check for an environment variable NCCGDB, and if set, block
+   * calling poll(). When gdb attaches, it sends us a signal which
+   * causes poll to return with EINTR, and we continue on our merry
+   * way.
+   */
+  waitforgdb = getenv("NCCGDB");
+  if (waitforgdb) 
+    {
+      fprintf(stderr, "ncc pid %d waiting for gdb attach\n", getpid());
+      poll(0, 0, -1); // should return with EINTR
+    }
+#endif
+  
+  signal(SIGABRT, rcc_aborting);
+  signal(SIGSEGV, rcc_aborting);
+#ifdef SIGBUS
+  signal(SIGBUS, rcc_aborting);
+#endif
+  set_nomem_handler(outofmemory);
+
+  init_nesc_paths_start(newregion());
+
+  p = argv[0] + strlen (argv[0]);
+  while (p != argv[0] && p[-1] != '/'
+#ifdef DIR_SEPARATOR
+        && p[-1] != DIR_SEPARATOR
+#endif
+        )
+    --p;
+  progname = p;
+
+#ifdef SIGPIPE
+  signal (SIGPIPE, pipe_closed);
+#endif
+
+  flag_signed_char = 2; /* Detect if user specifies a value */
+
+  for (i = 1; i < argc; )
+    {
+      int j;
+
+      if (c_option(argv[i]) || nesc_option(argv[i]))
+       i++;
+      else if (argv[i][0] == '-' && argv[i][1] != 0)
+       {
+         char *str = argv[i++] + 1;
+         char *arg = NULL;
+
+         if (strchr(OPTS_WITH_ARGS, str[0]))
+           {
+             if (!str[1])
+               if (i < argc)
+                 arg = argv[i++];
+               else
+                 {
+                   str = "";
+                   error("argument to `-%c' is missing", str[0]);
+                 }
+             else
+               arg = str + 1;
+           }
+
+         for (j = 0; j < sizeof opts_with_args / sizeof *opts_with_args; j++)
+           if (!strcmp(str, opts_with_args[j]))
+             {
+               if (i < argc)
+                 arg = argv[i++];
+               else
+                 {
+                   str = "";
+                   error("argument to `-%s' is missing", str);
+                 }
+               break;
+             }
+
+         if (str[0] == 'o')
+           targetfile = arg;
+         else if (str[0] == 'I')
+           add_nesc_dir(arg, CHAIN_BRACKET);
+         else if (str[0] == 'D' || str[0] == 'U' || str[0] == 'A')
+           save_cpp_option(str, arg);
+         else if (str[0] == 'f' || str[0] == 'W')
+           {
+             char kind = str[0];
+             char *p = &str[1];
+
+             /* Some kind of -f or -W option.
+                p's value is the option sans -f/W.
+                Search for it in the table of options.  */
+             for (j = 0;
+                  j < sizeof (fW_options) / sizeof (fW_options[0]);
+                  j++)
+               {
+                 if (kind == fW_options[j].c &&
+                     !strcmp (p, fW_options[j].string))
+                   {
+                     *fW_options[j].variable = fW_options[j].on_value;
+                     break;
+                   }
+                 if (kind == fW_options[j].c &&
+                     p[0] == 'n' && p[1] == 'o' && p[2] == '-' &&
+                     !strcmp (p+3, fW_options[j].string))
+                   {
+                     *fW_options[j].variable = ! fW_options[j].on_value;
+                     break;
+                   }
+               }
+           }
+       }
+      else
+       filename = argv[i++];
+    }
+
+  /* Pass options on to the target too (this a bit hacky, but fine so far) */
+  if (target->handle_option)
+    for (i = 1; i < argc; i++)
+      if (argv[i][0] == '-' && argv[i][1] != 0)
+       target->handle_option(argv[i]);
+
+  if (target->preinit)
+    target->preinit();
+
+  if (flag_signed_char == 2) /* not set by user */
+    flag_signed_char = target->char_signed;
+
+  if (filename)
+    nesc_compile (filename, targetfile);
+  else
+    {
+      fprintf(stderr, "usage: %s [options] <filename>\n", argv[0]);
+      exit(FATAL_EXIT_CODE);
+    }
+    
+  if (errorcount)
+    exit (FATAL_EXIT_CODE);
+  else
+    exit (SUCCESS_EXIT_CODE);
+  return 0;
+}
diff --git a/src/types.c b/src/types.c
new file mode 100644 (file)
index 0000000..3ef2157
--- /dev/null
@@ -0,0 +1,2734 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "types.h"
+#include "constants.h"
+#include "c-parse.h"
+#include "machine.h"
+#include "nesc-semantics.h"
+#include "nesc-xml.h"
+#include "AST_utils.h"
+
+#include <stddef.h>
+#include <stdarg.h>
+
+struct type
+{
+  enum { tk_primitive, tk_complex, tk_tagged, tk_error, tk_void,
+        tk_pointer, tk_function, tk_array, tk_iref, tk_variable,
+        tk_cref } kind;
+  type_quals qualifiers;
+  enum { nx_no, nx_base, nx_derived } network;
+  data_declaration combiner, basedecl, typedefdecl;
+
+  /* size is not used for aggregate types
+     (as the values may be discovered after the type is created)
+     or for arrays (as they may be arrays of aggregates)
+     alignment is used for aggregates and arrays only if it is non-zero
+     (indicating an alignment overridden by an attribute)
+  */
+  cval size;
+  cval alignment; 
+  bool user_align;
+
+  union {
+    /* tk_primtive and tk_complex.
+       The order reflects promotion order (for an arbitrary machine,
+       see common_primitive_type) */
+    enum { /* The elements of this enum must be ordered as follows:
+             - all integral types before tp_first_floating
+             - do not change the floating type order
+             - the integral types are ordered by "rank" (see c9x std) and
+               unsignedness (unsigned > signed) (common_primitive_type
+               relies on this order)
+             - The tp_[u]int<n> types must be before tp_char (for the 
+               assert in common_primitive_type). These types are only
+               used when the corresponding size is not available amongst
+               short/int/long/long long
+               If this frontend followed c9x, these types would always exist
+               and be special integer types distinct from the regular ones
+               (see the rank stuff), but we're following gcc so they
+               aren't. If this changes, common_primitive_type, 
+               default_conversion and type_default_conversion need revising.
+          */
+           tp_error,
+
+          tp_int2, tp_uint2, tp_int4, tp_uint4, tp_int8, tp_uint8,
+
+           tp_char, 
+          tp_signed_char, tp_unsigned_char,
+          tp_short, tp_unsigned_short,
+          tp_int, tp_unsigned_int,
+          tp_long, tp_unsigned_long,
+          tp_long_long, tp_unsigned_long_long,
+          /* Used as the rep type of enums whose constants are derived
+             from template arguments and whose size is hence unknown.
+             The unknown int type has the highest rank (its unsignedness
+             is unknown, we assume its signed). */
+          tp_unknown_int,
+
+          tp_first_floating,
+          tp_float = tp_first_floating, tp_double, tp_long_double,
+
+          /* Like tp_unknown_int, but might be a real or integer */
+          tp_unknown_number,
+          tp_last
+    } primitive;
+
+    /* tk_tagged */
+    tag_declaration tag;
+
+    /* tk_pointer */
+    type pointsto;
+
+    /* tk_function */
+    struct {
+      type returns;
+      typelist argtypes;
+      bool varargs;
+      bool oldstyle;
+      enum { tkf_c, tkf_event, tkf_command, tkf_task, tkf_generic } fkind;
+    } fn;
+
+    /* tk_array */
+    struct {
+      type arrayof;
+      expression size;
+      /* If size is a known constant, it is guaranteed >= 0 */
+    } array;
+
+    /* tk_iref */
+    data_declaration iref;
+
+    /* tk_cref */
+    data_declaration cref;
+
+    /* tk_variable */
+    data_declaration tdecl;
+  } u;
+};
+
+#ifdef RC_ADJUST
+static void rc_update_type(struct type *old, struct type *new)
+{
+  regionid base = regionidof(old);
+
+  switch (old->kind)
+    {
+    case tk_tagged:
+      RC_UPDATE(base, old->u.tag, new->u.tag);
+      break;
+    case tk_pointer:
+      RC_UPDATE(base, old->u.pointsto, new->u.pointsto);
+      break;
+    case tk_function:
+      RC_UPDATE(base, old->u.fn.returns, new->u.fn.returns);
+      RC_UPDATE(base, old->u.fn.argtypes, new->u.fn.argtypes);
+      break;
+    case tk_array:
+      RC_UPDATE(base, old->u.array.arrayof, new->u.array.arrayof);
+      RC_UPDATE(base, old->u.array.size, new->u.array.size);
+      break;
+    default:
+      break;
+    }
+}
+
+static size_t rc_adjust_type(void *x, int by)
+{
+  struct type *p = x;
+  RC_ADJUST_PREAMBLE;
+
+  switch (p->kind)
+    {
+    case tk_tagged:
+      RC_ADJUST(p->u.tag, by);
+      break;
+    case tk_pointer:
+      RC_ADJUST(p->u.pointsto, by);
+      break;
+    case tk_function:
+      RC_ADJUST(p->u.fn.returns, by);
+      RC_ADJUST(p->u.fn.argtypes, by);
+      break;
+    case tk_array:
+      RC_ADJUST(p->u.array.arrayof, by);
+      RC_ADJUST(p->u.array.size, by);
+      break;
+    default:
+      break;
+    }
+
+  return sizeof *p;
+}
+#endif
+
+static region types_region;
+
+static type primitive_types[tp_last];
+static type complex_types[tp_last];
+
+type float_type, double_type, long_double_type, 
+  int_type, unsigned_int_type, long_type, unsigned_long_type,
+  long_long_type, unsigned_long_long_type, short_type, unsigned_short_type,
+  char_type, char_array_type, wchar_type, wchar_array_type,
+  unsigned_char_type, signed_char_type, void_type, ptr_void_type,
+  const_ptr_void_type,
+  size_t_type, ptrdiff_t_type, intptr_type,
+  int2_type, uint2_type, int4_type, uint4_type, int8_type, uint8_type,
+  unknown_int_type, unknown_number_type, error_type;
+
+static type copy_type(type t)
+{
+  type nt = ralloc(types_region, struct type);
+  *nt = *t;
+  return nt;
+}
+
+static type new_type(int kind)
+{
+  type nt = ralloc(types_region, struct type);
+
+  nt->kind = kind;
+  /*nt->qualifiers = 0;
+    nt->network = nx_no;
+    nt->user_align = FALSE;
+    nt->combiner = nt->basedecl = nt->typedefdecl = NULL;*/
+  nt->size = nt->alignment = cval_top;
+  return nt;
+}
+
+/* Return the 'complex t' version of basic type t (one of the integral or
+   floating-point types) */
+type make_complex_type(type t)
+{
+  assert(t->kind == tk_primitive);
+
+  return qualify_type1(complex_types[t->u.primitive], t);
+}
+
+/* Return the base type of complex type t (one of the integral or
+   floating-point types) */
+type make_base_type(type t)
+{
+  assert(t->kind == tk_complex);
+
+  return primitive_types[t->u.primitive];
+}
+
+/* Return the type t with it's qualifiers set to tq (old qualifiers are 
+   ignored). This is illegal for function types. For arrays, the qualifiers
+   get pushed down to the base type. */
+type make_qualified_type(type t, type_quals qualifiers)
+{
+  /* Push const or volatile down to base type */
+  if (t->kind == tk_array)
+    return make_array_type(make_qualified_type(t->u.array.arrayof, qualifiers),
+                          t->u.array.size);
+  else
+    {
+      type nt = copy_type(t);
+
+      nt->qualifiers = qualifiers;
+
+      return nt;
+    }
+}
+
+/* Return type 'pointer to t' (unqualified) */
+type make_pointer_type(type t)
+{
+  type nt = new_type(tk_pointer);
+  nt->u.pointsto = t;
+
+  /* ASSUME: all pointers are the same */
+  nt->size = make_type_cval(target->tptr.size);
+  nt->alignment = make_type_cval(target->tptr.align);
+
+  return nt;
+}
+
+/* Return type 'array [size] of t'. size is optional */
+type make_array_type(type t, expression size)
+{
+  type nt = new_type(tk_array);
+
+  nt->u.array.arrayof = t;
+  nt->u.array.size = size;
+  nt->network = t->network != nx_no ? nx_derived : nx_no;
+
+  return nt;
+}
+
+/* Return type 'function with argument types argtypes returning t'.
+   If oldstyle is true, this is an oldstyle function type and
+   argtypes is NULL */
+type make_function_type(type t, typelist argtypes, bool varargs,
+                       bool oldstyle)
+{
+  type nt = new_type(tk_function);
+  nt->u.fn.fkind = tkf_c;
+  nt->u.fn.returns = t;
+  nt->u.fn.argtypes = argtypes;
+  nt->u.fn.varargs = varargs;
+  nt->u.fn.oldstyle = oldstyle;
+  nt->size = nt->alignment = make_type_cval(1);
+  return nt;
+}
+
+type build_function_type(region r, type returns, ...)
+{
+  va_list args;
+  typelist argtypes;
+
+  va_start(args, returns);
+  argtypes = new_typelist(r);
+
+  for (;;)
+    {
+      type onearg = va_arg(args, type);
+
+      if (!onearg)
+       break;
+      typelist_append(argtypes, onearg);
+    }
+
+  return make_function_type(returns, argtypes, FALSE, FALSE);
+}
+  
+
+/* Return the tagged type whose declaration is d */
+type make_tagged_type(tag_declaration d)
+{
+  type nt = new_type(tk_tagged);
+
+  nt->u.tag = d;
+  if (d->kind == kind_nx_struct_ref || d->kind == kind_nx_union_ref)
+    nt->network = nx_derived;
+
+  return nt;
+}
+
+bool type_network(type t)
+{
+  return t->network != nx_no;
+}
+
+/* Make the single instance of pk, with specified size and alignment
+   (Note that we may make copies if this single instance for different alignments)
+   Requires: must be called at most once for each pk, from types_init
+*/
+
+static type make_primitive0(int pk, cval size, cval alignment,
+                           cval complex_size)
+{
+  type nt = new_type(tk_primitive), ct;
+
+  nt->u.primitive = pk;
+  nt->size = size;
+  nt->alignment = alignment;
+  primitive_types[pk] = nt;
+
+  ct = new_type(tk_complex);
+  ct->u.primitive = pk;
+  ct->size = complex_size; /* can't compute as types not available yet */
+  ct->alignment = nt->alignment; /* ASSUME: alignof(complex t) == alignof(t) */
+  complex_types[pk] = ct;
+
+  return nt;
+}
+
+static type make_primitive(int pk, int size, int alignment)
+{
+  return make_primitive0(pk, make_type_cval(size), make_type_cval(alignment),
+                        make_type_cval(size * 2));
+}
+
+static type make_unknown_primitive(int pk)
+{
+  return make_primitive0(pk, cval_unknown_number, cval_unknown_number,
+                        cval_unknown_number);
+}
+
+static type lookup_primitive(int default_kind, int size, int alignment,
+                            bool isunsigned)
+{
+  int i;
+
+  for (i = tp_signed_char; i < tp_unknown_int; i++)
+    if (cval_uint_value(primitive_types[i]->size) == size &&
+       type_unsigned(primitive_types[i]) == isunsigned)
+      return primitive_types[i];
+
+  return make_primitive(default_kind, size, alignment);
+}
+
+static type lookup_float(int size)
+{
+  int i;
+
+  for (i = tp_first_floating; i < tp_unknown_number; i++)
+    if (cval_uint_value(primitive_types[i]->size) == size)
+      return primitive_types[i];
+
+  return error_type;
+}
+
+/* Return the integral type of size 'size', unsigned if 'isunsigned' is true */
+type type_for_size(cval size, bool isunsigned)
+{
+  type t;
+
+  if (cval_isunknown(size))
+    return unknown_int_type;
+
+  t = lookup_primitive(tp_error, cval_sint_value(size), 0, isunsigned);
+  assert(t->u.primitive != tp_error);
+  return t;
+}
+
+static type type_for_size_int(int size, bool isunsigned)
+{
+  type t = lookup_primitive(tp_error, size, 0, isunsigned);
+  assert(t->u.primitive != tp_error);
+  return t;
+}
+
+type type_for_cval(cval c, bool isunsigned)
+{
+  int i;
+
+  if (cval_isunknown(c))
+    return unknown_int_type;
+
+  for (i = tp_signed_char; i < tp_unknown_int; i++)
+    if (type_unsigned(primitive_types[i]) == isunsigned &&
+       cval_inrange(c, primitive_types[i]))
+      return primitive_types[i];
+
+  return NULL;
+}
+
+void init_types(void)
+{
+  types_region = newregion();
+
+  float_type = make_primitive
+    (tp_float, target->tfloat.size, target->tfloat.align);
+  double_type = make_primitive
+    (tp_double, target->tdouble.size, target->tdouble.align);
+  long_double_type = make_primitive
+    (tp_long_double, target->tlong_double.size, target->tlong_double.align);
+
+  short_type = make_primitive
+    (tp_short, target->tshort.size, target->tshort.align);
+  unsigned_short_type = make_primitive
+    (tp_unsigned_short, target->tshort.size, target->tshort.align);
+
+  int_type = make_primitive
+    (tp_int, target->tint.size, target->tint.align);
+  unsigned_int_type = make_primitive
+    (tp_unsigned_int, target->tint.size, target->tint.align);
+
+  long_type = make_primitive
+    (tp_long, target->tlong.size, target->tlong.align);
+  unsigned_long_type = make_primitive
+    (tp_unsigned_long, target->tlong.size, target->tlong.align);
+
+  long_long_type = make_primitive
+    (tp_long_long, target->tlong_long.size, target->tlong_long.align);
+  unsigned_long_long_type = make_primitive
+    (tp_unsigned_long_long, target->tlong_long.size, target->tlong_long.align);
+
+  signed_char_type = make_primitive(tp_signed_char, 1, target->int1_align);
+  unsigned_char_type = make_primitive(tp_unsigned_char, 1, target->int1_align);
+  char_type = make_primitive(tp_char, 1, target->int1_align);
+
+  int2_type = lookup_primitive(tp_int2, 2, target->int2_align, FALSE);
+  uint2_type = lookup_primitive(tp_uint2, 2, target->int2_align, TRUE);
+  int4_type = lookup_primitive(tp_int4, 4, target->int4_align, FALSE);
+  uint4_type = lookup_primitive(tp_uint4, 4, target->int4_align, TRUE);
+  int8_type = lookup_primitive(tp_int8, 8, target->int8_align, FALSE);
+  uint8_type = lookup_primitive(tp_uint8, 8, target->int8_align, TRUE);
+
+  unknown_int_type = make_unknown_primitive(tp_unknown_int);
+  unknown_number_type = make_unknown_primitive(tp_unknown_number);
+
+  char_array_type = make_array_type(char_type, NULL);
+  error_type = new_type(tk_error);
+  error_type->size = error_type->alignment = make_type_cval(1);
+  void_type = new_type(tk_void);
+  void_type->size = void_type->alignment = make_type_cval(1);
+  ptr_void_type = make_pointer_type(void_type);
+  const_ptr_void_type =
+    make_pointer_type(make_qualified_type(void_type, const_qualifier));
+
+  wchar_type = type_for_size_int(target->wchar_t_size, !target->wchar_t_signed);
+  wchar_array_type = make_array_type(wchar_type, NULL);
+  size_t_type = type_for_size_int(target->size_t_size, TRUE);
+  ptrdiff_t_type = type_for_size_int(target->tptr.size, FALSE);
+  intptr_type = type_for_size_int(target->tptr.size, TRUE);
+}
+
+struct typelist
+{
+  region sameregion r;
+  struct typelist_element *sameregion first;
+};
+
+struct typelist_element
+{
+  struct typelist_element *sameregion next;
+  type t;
+};
+
+typelist new_typelist(region r)
+{
+  typelist tl = ralloc(r, struct typelist);
+  tl->r = r;
+  tl->first = NULL;
+  return tl;
+}
+
+void typelist_append(typelist tl, type t)
+{
+  struct typelist_element *nte = ralloc(tl->r, struct typelist_element);
+  struct typelist_element *sameregion *last;
+
+  nte->t = t;
+  last = &tl->first;
+  while (*last)
+    last = &(*last)->next;
+  *last = nte;
+}
+
+bool empty_typelist(typelist tl)
+{
+  return tl->first == NULL;
+}
+
+void typelist_scan(typelist tl, typelist_scanner *scanner)
+{
+  *scanner = tl->first;
+}
+
+type typelist_next(typelist_scanner *scanner)
+{
+  type t;
+
+  if (!*scanner)
+    return NULL;
+  t = (*scanner)->t;
+  *scanner = (*scanner)->next;
+  return t;
+}
+
+type_quals type_qualifiers(type t)
+{
+  /* Arrays don't have qualifiers */
+  while (t->kind == tk_array)
+    t = t->u.array.arrayof;
+  return t->qualifiers;
+}
+
+#define Q(name, kind, tq, val) \
+bool type_ ## name(type t) \
+{ \
+  return (type_qualifiers(t) & tq) != 0; \
+}
+#include "qualifiers.h"
+#undef Q
+
+bool type_transparent(type t)
+{
+  return (type_qualifiers(t) & transparent_qualifier) != 0;
+}
+
+bool type_readonly(type t)
+{
+  return type_const(t) || (type_tagged(t) && type_tag(t)->fields_const);
+}
+
+bool type_integral(type t) /* Does not include enum's */
+{
+  return t->kind == tk_primitive && t->u.primitive < tp_first_floating;
+}
+
+bool type_smallerthanint(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive < tp_unknown_int &&
+    cval_intcompare(t->size, int_type->size) < 0;
+}
+
+bool type_unsigned(type t)
+{
+  if (t->kind == tk_primitive)
+    switch (t->u.primitive)
+      {
+      case tp_char: return !flag_signed_char;
+      case tp_unsigned_char:
+      case tp_unsigned_short:
+      case tp_unsigned_int:
+      case tp_unsigned_long:
+      case tp_unsigned_long_long:
+      case tp_uint2: case tp_uint4: case tp_uint8:
+       return TRUE;
+      default: break;
+      }
+  return FALSE;
+}
+
+bool type_floating(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive >= tp_first_floating &&
+    t->u.primitive < tp_unknown_number;
+}
+
+bool type_plain_char(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_char;
+}
+
+bool type_signed_char(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_signed_char;
+}
+
+bool type_unsigned_char(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unsigned_char;
+}
+
+bool type_short(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_short;
+}
+
+bool type_unsigned_short(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unsigned_short;
+}
+
+bool type_int(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_int;
+}
+
+bool type_unsigned_int(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unsigned_int;
+}
+
+bool type_long(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_long;
+}
+
+bool type_unsigned_long(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unsigned_long;
+}
+
+bool type_long_long(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_long_long;
+}
+
+bool type_unsigned_long_long(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unsigned_long_long;
+}
+
+bool type_unknown_int(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unknown_int;
+}
+
+bool type_float(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_float;
+}
+
+bool type_double(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_double;
+}
+
+bool type_long_double(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_long_double;
+}
+
+bool type_unknown_number(type t)
+{
+  return t->kind == tk_primitive && t->u.primitive == tp_unknown_number;
+}
+
+bool type_unknown(type t) /* unknown_int or unknown_number */
+{
+  return type_unknown_int(t) || type_unknown_number(t);
+}
+
+bool type_char(type t)
+{
+  return t->kind == tk_primitive &&
+    (t->u.primitive == tp_char || t->u.primitive == tp_unsigned_char ||
+     t->u.primitive == tp_signed_char);
+}
+
+bool type_void(type t)
+{
+  return t->kind == tk_void;
+}
+
+bool type_function(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind == tkf_c;
+}
+
+bool type_array(type t)
+{
+  return t->kind == tk_array;
+}
+
+bool type_pointer(type t)
+{
+  return t->kind == tk_pointer;
+}
+
+bool type_complex(type t)
+{
+  return t->kind == tk_complex;
+}
+
+bool type_enum(type t)
+{
+  return t->kind == tk_tagged && t->u.tag->kind == kind_enum_ref;
+}
+
+bool type_tagged(type t)
+{
+  return t->kind == tk_tagged;
+}
+
+bool type_struct(type t)
+{
+  return t->kind == tk_tagged &&
+    (t->u.tag->kind == kind_struct_ref || t->u.tag->kind == kind_nx_struct_ref);
+}
+
+bool type_attribute(type t)
+{
+  return t->kind == tk_tagged && t->u.tag->kind == kind_attribute_ref;
+}
+
+bool type_union(type t)
+{
+  return t->kind == tk_tagged && 
+    (t->u.tag->kind == kind_union_ref || t->u.tag->kind == kind_nx_union_ref);
+}
+
+type type_function_return_type(type t)
+{
+  assert(t->kind == tk_function);
+  return t->u.fn.returns;
+}
+
+typelist type_function_arguments(type t)
+{
+  assert(t->kind == tk_function);
+  return t->u.fn.argtypes;
+}
+
+bool type_function_varargs(type t)
+{
+  assert(t->kind == tk_function);
+  return t->u.fn.varargs;
+}
+
+bool type_function_oldstyle(type t)
+{
+  assert(t->kind == tk_function);
+  return t->u.fn.oldstyle;
+}
+
+type type_points_to(type t)
+{
+  assert(t->kind == tk_pointer);
+  return t->u.pointsto;
+}
+
+type type_array_of(type t)
+{
+  assert(t->kind == tk_array);
+  return t->u.array.arrayof;
+}
+
+type type_array_of_base(type t)
+{
+  while (t->kind == tk_array)
+    t = t->u.array.arrayof;
+
+  return t;
+}
+
+expression type_array_size(type t)
+{
+  assert(t->kind == tk_array);
+  return t->u.array.size;
+}
+
+cval type_array_size_cval(type t)
+/* Returns: number of elements in array type t if known, cval_top otherwise */
+{
+  known_cst s;
+
+  if (t->u.array.size && (s = t->u.array.size->cst) &&
+      (constant_integral(s) || constant_unknown(s)))
+    return cval_cast(s->cval, size_t_type);
+
+  return cval_top;
+}
+
+tag_declaration type_tag(type t)
+{
+  assert(t->kind == tk_tagged);
+  return t->u.tag;
+}
+
+bool type_incomplete(type t)
+{
+  return t->kind == tk_void ||
+    (t->kind == tk_tagged && !t->u.tag->defined) ||
+    (t->kind == tk_array &&
+     (type_incomplete(t->u.array.arrayof) || !t->u.array.size));
+}
+
+/* Return TRUE if two type lists are equal */
+static bool type_lists_equal(typelist al1, typelist al2)
+{
+  struct typelist_element *args1 = al1->first, *args2 = al2->first;
+
+  for (;;)
+    {
+      if (args1 == 0 && args2 == 0)
+       return TRUE;
+      /* If one list is shorter than the other,
+        they fail to match.  */
+      if (args1 == 0 || args2 == 0)
+       return FALSE;
+
+      if (!type_equal(args1->t, args2->t))
+       return FALSE;
+
+      args1 = args1->next;
+      args2 = args2->next;
+    }
+}
+
+/* Return TRUE if two function types F1 and F2 are equal. */
+bool function_equal(type t1, type t2)
+{
+  /* Function kinds and return types must match */
+  if (!(t1->u.fn.fkind == t2->u.fn.fkind &&
+       type_equal(t1->u.fn.returns, t2->u.fn.returns)))
+    return FALSE;
+
+  if (!t1->u.fn.oldstyle && !t2->u.fn.oldstyle)
+    return t1->u.fn.varargs == t2->u.fn.varargs &&
+      type_lists_equal(t1->u.fn.argtypes, t2->u.fn.argtypes);
+  else
+    return t1->u.fn.oldstyle == t2->u.fn.oldstyle;
+}
+
+bool type_equal(type t1, type t2)
+{
+  return t1->qualifiers == t2->qualifiers && type_equal_unqualified(t1, t2);
+}
+
+static bool array_sizes_match(type t1, type t2)
+/* Return: TRUE if we think the array sizes of t1, t2 match
+ */
+{
+  known_cst s1 = t1->u.array.size ? t1->u.array.size->cst : NULL;
+  known_cst s2 = t2->u.array.size ? t2->u.array.size->cst : NULL;
+
+  // Non-constant array sizes match everything
+  // Unknown array sizes match everything too 
+  // (XXX: we should check again after instantiation, but we'll leave
+  // that to the backend C compiler)
+  if (!s1 || !constant_integral(s1) || !s2 || !constant_integral(s2))
+    return TRUE;
+
+  return cval_intcompare(s1->cval, s2->cval) == 0;
+}
+
+bool type_equal_unqualified(type t1, type t2)
+{
+  if (t1 == error_type || t2 == error_type)
+    return TRUE;
+
+  /* The unknown types are actually not equal to themselves... */
+  if (type_unknown_int(t1) || type_unknown_number(t1))
+    return FALSE;
+
+  /* Short-circuit easy case */
+  if (t1 == t2)
+    return TRUE;
+
+  /* Different classes of types can't be compatible.  */
+  if (t1->kind != t2->kind)
+    return FALSE;
+
+  /* sameregion, traditional and parentptr qualifiers must always match */
+  if ((t1->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)) !=
+      (t2->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)))
+    return FALSE;
+
+  /* Network base types are identified by their declaration */
+  if (type_network_base_type(t1) || type_network_base_type(t2))
+    return t1->basedecl == t2->basedecl;
+
+  switch (t1->kind)
+    {
+    case tk_primitive: case tk_complex:
+      return t1->u.primitive == t2->u.primitive;
+
+    case tk_void:
+      return TRUE;
+
+    case tk_tagged:
+      return t1->u.tag == t2->u.tag;
+
+    case tk_pointer:
+      return type_equal(t1->u.pointsto, t2->u.pointsto);
+
+    case tk_function:
+      return function_equal(t1, t2);
+
+    case tk_array:
+      return type_equal(t1->u.array.arrayof, t2->u.array.arrayof) &&
+       array_sizes_match(t1, t2);
+
+    case tk_variable:
+      return t1->u.tdecl == t2->u.tdecl;
+
+    default: assert(0); return FALSE;
+    }
+}
+
+/* Return TRUE if T is not affected by default promotions.  */
+bool type_self_promoting(type t)
+{
+  if (t->kind != tk_primitive)
+    return TRUE;
+
+  switch (t->u.primitive)
+    {
+    case tp_float: case tp_char: case tp_unsigned_char: case tp_signed_char:
+    case tp_short: case tp_unsigned_short:
+      return FALSE;
+    default:
+      return TRUE;
+    }
+}
+
+/* Return TRUE if function type FNTYPE specifies a fixed number of parameters
+   and none of their types is affected by default promotions.
+   TRUE for oldstyle functions */
+bool self_promoting_args(type fntype)
+{
+  struct typelist_element *parms;
+
+  if (type_function_varargs(fntype))
+    return FALSE;
+
+  if (type_function_oldstyle(fntype))
+    return TRUE;
+
+  for (parms = type_function_arguments(fntype)->first; parms;
+       parms = parms->next)
+    if (!type_self_promoting(parms->t))
+      return FALSE;
+
+  return TRUE;
+}
+
+/* Allow  wait (union {union wait *u; int *i})
+   and  wait (union wait *)  to be compatible.  */
+static bool weird_parameter_match(type t1, type t2)
+{
+  tag_declaration t1decl;
+
+  if (type_union(t1)
+      && (!(t1decl = type_tag(t1))->name || t1decl->transparent_union)
+      && type_size_cc(t1) && type_size_cc(t2))
+    {
+      cval s1 = type_size(t1), s2 = type_size(t2);
+
+      /* We don't do this for types of unknown size */
+      if (cval_isinteger(s1) && cval_isinteger(s2) &&
+         cval_intcompare(s1, s2) == 0)
+       {
+         field_declaration field;
+
+         for (field = t1decl->fieldlist; field; field = field->next)
+           if (type_compatible(field->type, t2))
+             return TRUE;
+       }
+    }
+  return FALSE;
+}
+
+static type weird_common_parameter(type t1, type t2)
+{
+  /* Given  wait (union {union wait *u; int *i} *)
+     and  wait (union wait *),
+     prefer  union wait *  as type of parm.  */
+  if (weird_parameter_match(t1, t2))
+    {
+      if (pedantic)
+       pedwarn("function types not truly compatible in ANSI C");
+      return t2;
+    }
+  return NULL;
+}
+
+/* Check two lists of types for compatibility,
+   returning 0 for incompatible, 1 for compatible,
+   or 2 for compatible with warning.  */
+static int type_lists_compatible(typelist al1, typelist al2)
+{
+  /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
+  int val = 1;
+  int newval = 0;
+  struct typelist_element *args1 = al1->first, *args2 = al2->first;
+
+  while (1)
+    {
+      if (args1 == 0 && args2 == 0)
+       return val;
+      /* If one list is shorter than the other,
+        they fail to match.  */
+      if (args1 == 0 || args2 == 0)
+       return 0;
+
+      if (!(newval = type_compatible_unqualified(args1->t, args2->t)))
+       {
+         if (!weird_parameter_match(args1->t, args2->t) &&
+             !weird_parameter_match(args2->t, args1->t))
+           return 0;
+       }
+
+      /* type_compatible said ok, but record if it said to warn.  */
+      if (newval > val)
+       val = newval;
+
+      args1 = args1->next;
+      args2 = args2->next;
+    }
+}
+
+/* Return 1 if two function types F1 and F2 are compatible.
+   If either type specifies no argument types,
+   the other must specify a fixed number of self-promoting arg types.
+   Otherwise, if one type specifies only the number of arguments, 
+   the other must specify that number of self-promoting arg types.
+   Otherwise, the argument types must match.  */
+int function_compatible(type t1, type t2)
+{
+  typelist args1, args2;
+
+  /* 1 if no need for warning yet, 2 if warning cause has been seen.  */
+  int val = 1;
+
+  /* Kinds and return types must match */
+  if (!(t1->u.fn.fkind == t2->u.fn.fkind &&
+       type_compatible(t1->u.fn.returns, t2->u.fn.returns)))
+    return 0;
+
+  args1 = t1->u.fn.argtypes;
+  args2 = t2->u.fn.argtypes;
+
+  /* An unspecified parmlist matches any specified parmlist
+     whose argument types don't need default promotions.  */
+
+  if (t1->u.fn.oldstyle)
+    {
+      if (args2 && !self_promoting_args(t2))
+       return 0;
+#if 0
+      /* If one of these types comes from a non-prototype fn definition,
+        compare that with the other type's arglist.
+        If they don't match, ask for a warning (but no error).  */
+      if (TYPE_ACTUAL_ARG_TYPES (f1)
+         && 1 != type_lists_compatible(args2, TYPE_ACTUAL_ARG_TYPES (f1)))
+       val = 2;
+#endif
+      return val;
+    }
+  if (t2->u.fn.oldstyle)
+    {
+      if (args1 && !self_promoting_args(t1))
+       return 0;
+#if 0
+      if (TYPE_ACTUAL_ARG_TYPES (f2)
+         && 1 != type_lists_compatible(args1, TYPE_ACTUAL_ARG_TYPES (f2)))
+       val = 2;
+#endif
+      return val;
+    }
+
+  if (t1->u.fn.varargs != t2->u.fn.varargs)
+    return 0;
+
+  /* Both types have argument lists: compare them and propagate results.  */
+  return type_lists_compatible(args1, args2);
+}
+
+static bool interface_equal(nesc_declaration i1, nesc_declaration i2)
+/* Returns: TRUE if the interface types are equal, i.e., they have the
+     same type arguments to the same base interface 
+*/
+{
+  type_parm_decl p1 = CAST(type_parm_decl, i1->parameters), 
+    p2 = CAST(type_parm_decl, i2->parameters);
+
+  if (original_component(i1) != original_component(i2))
+    return FALSE;
+
+  while (p1 && p2)
+    {
+      if (!type_equal(p1->ddecl->type, p2->ddecl->type))
+       return FALSE;
+      
+      p1 = CAST(type_parm_decl, p1->next);
+      p2 = CAST(type_parm_decl, p2->next);
+    }
+
+  return p1 == NULL && p2 == NULL; /* or p1 == p2 ;-) */
+}
+
+bool type_compatible_unqualified(type t1, type t2)
+{
+  if (t1 == error_type || t2 == error_type)
+    return 1;
+
+  /* The unknown types are actually not compatible with themselves... */
+  if (type_unknown_int(t1) || type_unknown_number(t1))
+    return FALSE;
+
+  /* Short-circuit easy case */
+  if (t1 == t2)
+    return 1;
+
+  /* Different classes of types can't be compatible.  */
+  if (t1->kind != t2->kind)
+    return 0;
+
+#if 0
+  /* The combiners must match too */
+  if (t1->combiner != t2->combiner)
+    return 0;
+#endif
+
+  /* sameregion, traditional and parentptr qualifiers must always match */
+  if ((t1->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)) !=
+      (t2->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)))
+    return 0;
+
+  /* Network base types are identified by their declaration */
+  if (type_network_base_type(t1) || type_network_base_type(t2))
+    return t1->basedecl == t2->basedecl;
+
+  switch (t1->kind)
+    {
+    case tk_primitive: case tk_complex:
+      return t1->u.primitive == t2->u.primitive;
+
+    case tk_void:
+      return 1;
+
+    case tk_tagged:
+      return t1->u.tag == t2->u.tag;
+
+    case tk_pointer:
+      return type_compatible(t1->u.pointsto, t2->u.pointsto);
+
+    case tk_function:
+      return function_compatible(t1, t2);
+
+    case tk_array:
+      return type_compatible(t1->u.array.arrayof, t2->u.array.arrayof) &&
+       array_sizes_match(t1, t2);
+
+    case tk_iref:
+      return interface_equal(t1->u.iref->itype, t2->u.iref->itype);
+
+    case tk_cref:
+      return t1->u.cref == t2->u.cref;
+
+    case tk_variable:
+      return t1->u.tdecl == t2->u.tdecl;
+
+    default: assert(0); return 0;
+    }
+}
+
+bool type_compatible(type t1, type t2)
+{
+  /* Qualifiers must match.  */
+  /* GCC appears to allow changes to restrict (see /usr/include/sys/stat.h
+     and the decls/defs of stat/lstat in redhat linux 7) */
+  /* XXX: investigate more. */
+  if ((t1->qualifiers & ~restrict_qualifier) != (t2->qualifiers & ~restrict_qualifier))
+    return 0;
+  else
+    return type_compatible_unqualified(t1, t2);
+}
+
+type qualify_type1(type t, type t1)
+{
+  return make_qualified_type(t, type_qualifiers(t1));
+}
+
+type qualify_type2(type t, type t1, type t2)
+{
+  return make_qualified_type(t, type_qualifiers(t1) | type_qualifiers(t2));
+}
+
+type align_type(type t, cval new_alignment)
+{
+  type nt = copy_type(t);
+
+  nt->alignment = new_alignment;
+  nt->user_align = TRUE;
+
+  return nt;
+}
+
+bool type_realigned(type t)
+{
+  return t->user_align;
+}
+
+static int common_primitive_type(type t1, type t2)
+{
+  int pk1 = t1->u.primitive, pk2 = t2->u.primitive;
+  int pk = pk1 < pk2 ? pk2 : pk1;
+
+  /* Note: the results of this function depend on the relative sizes of 
+     char, short, int, long and long long. The results are only correct
+     for a version of C that has types that match those set by types_init
+     (which uses those from the C compiler that compiles this file)
+  */
+  if (pk1 < tp_first_floating && pk2 < tp_first_floating)
+    {
+      largest_uint s1, s2;
+
+      /* The simple cases */
+      if (pk1 == tp_unknown_int || pk2 == tp_unknown_int)
+       return tp_unknown_int;
+
+      s1 = cval_uint_value(t1->size);
+      s2 = cval_uint_value(t2->size);
+      if (s1 < s2)
+       return pk2;
+      else if (s1 > s2)
+       return pk1;
+
+      /* The pain starts, see 6.3.1.8 of c9x */
+      /* If the sizes are the same, then we can't have a tp_[u]int<n> or a 
+        tp_char/short/int/long/etc pair (as we only have tp_[u]int<n> if there
+        is no corresponding integer type of the same size. So we can compare rank
+        by comparing pk1 and pk2 */
+      assert(!((pk1 < tp_char && pk2 >= tp_char) ||
+              (pk1 >= tp_char && pk2 < tp_char)));
+
+      /* the higher rank wins, and if either of the types is unsigned, the
+        result is unsigned (thus unsigned short + int == unsigned int if
+        sizeof(short) == sizeof(int) */
+      if ((type_unsigned(t1) || type_unsigned(t2)) && !type_unsigned(primitive_types[pk]))
+       /* A bit inefficient, admittedly */
+       pk = make_unsigned_type(primitive_types[pk])->u.primitive;
+
+      return pk;
+    }
+
+  /* Floating point types follow the order specified in the enum and win
+     over all integral types. This includes unknown_number winning over
+     everybody. */
+  return pk;
+}
+
+/* Return the common type of two types.
+
+   This is used in two cases:
+    - when type_compatible(t1, t2) is true, to pick a merged type for
+    declarations
+    - to merge two types that are compatible in some expressions (e.g. ?:,
+    arithmetic) */
+type common_type(type t1, type t2)
+{
+  type rtype;
+  data_declaration combiner;
+
+  /* Save time if the two types are the same.  */
+  if (t1 == t2)
+    return t1;
+
+  /* If one type is nonsense, use the other.  */
+  if (t1 == error_type)
+    return t2;
+  if (t2 == error_type)
+    return t1;
+
+  combiner = NULL;
+  if (t1->combiner == t2->combiner)
+    combiner = t1->combiner;
+
+  /* Special enum handling: if same enum, just merge qualifiers.  otherwise
+     treat an enum type as the unsigned integer type of the same width.
+     Note that gcc does not check for the same enum. Some weird behaviour...
+     (see enum2.c)
+  */
+  if (type_enum(t1))
+    {
+      if (type_equal_unqualified(t1, t2))
+       return make_combiner_type(qualify_type2(t1, t1, t2), combiner);
+      t1 = qualify_type1(type_for_size(type_size(t1), TRUE), t1);
+    }
+  if (type_enum(t2))
+    t2 = qualify_type1(type_for_size(type_size(t1), TRUE), t2);
+
+  /* If one type is complex, form the common type of the non-complex
+     components, then make that complex. */
+  if (type_complex(t1) || type_complex(t2))
+    {
+      int pk = common_primitive_type(t1, t2);
+      assert((t1->kind == tk_primitive || t1->kind == tk_complex) && 
+            (t2->kind == tk_primitive || t2->kind == tk_complex));
+      rtype = complex_types[pk];
+    }
+  else
+    switch (t1->kind)
+      {
+      case tk_primitive:
+       /* We need to preserve equivalent network base types because
+          common_type is used for redeclarations */
+       if (type_network_base_type(t1) && type_network_base_type(t2) &&
+           t1->basedecl == t2->basedecl)
+         rtype = make_qualified_type(t1, 0);
+       else
+         {
+           int pk = common_primitive_type(t1, t2);
+           assert(t2->kind == tk_primitive);
+           rtype = primitive_types[pk];
+         
+           break;
+         }
+
+      case tk_void: case tk_tagged: case tk_variable:
+       rtype = t1;
+       break;
+
+      case tk_pointer:
+       rtype = make_pointer_type(common_type(t1->u.pointsto, t2->u.pointsto));
+       break;
+
+      case tk_array:
+       {
+         /* Merge the element types, and have a size if either arg has one.  */
+         type element_type =
+           common_type(t1->u.array.arrayof, t2->u.array.arrayof);
+         expression size1 = t1->u.array.size, size2 = t2->u.array.size;
+
+         rtype = make_array_type(element_type, size1 ? size1 : size2);
+         break;
+       }
+
+      case tk_function:
+       /* Function types: prefer the one that specified arg types.
+          If both do, merge the arg types.  Also merge the return types.  */
+       {
+         type valtype = common_type(t1->u.fn.returns, t2->u.fn.returns);
+         typelist args;
+         bool oldstyle, varargs;
+
+         if (t1->u.fn.oldstyle && t2->u.fn.oldstyle)
+           {
+             args = NULL;
+             oldstyle = TRUE;
+             varargs = FALSE;
+           }
+         else if (t1->u.fn.oldstyle)
+           {
+             args = t2->u.fn.argtypes;
+             oldstyle = FALSE;
+             varargs = t2->u.fn.varargs;
+           }
+         else if (t2->u.fn.oldstyle)
+           {
+             args = t1->u.fn.argtypes;
+             oldstyle = FALSE;
+             varargs = t1->u.fn.varargs;
+           }
+         else
+           {
+             /* If both args specify argument types, we must merge the two
+                lists, argument by argument.  */
+             struct typelist_element *args1 = t1->u.fn.argtypes->first;
+             struct typelist_element *args2 = t2->u.fn.argtypes->first;
+             type argtype;
+
+             oldstyle = FALSE;
+             varargs = t1->u.fn.varargs;
+             args = new_typelist(t1->u.fn.argtypes->r);
+
+             while (args1)
+               {
+                 (void) ((argtype = weird_common_parameter(args1->t, args2->t)) ||
+                         (argtype = weird_common_parameter(args2->t, args1->t)) ||
+                         (argtype = common_type(args1->t, args2->t)));
+                 typelist_append(args, argtype);
+
+                 args1 = args1->next;
+                 args2 = args2->next;
+               }
+
+           }
+         rtype = make_function_type(valtype, args, varargs, oldstyle);
+         /* Hack up the function kind */
+         rtype->u.fn.fkind = t1->u.fn.fkind;
+         break;
+       }
+
+      default:
+       assert(0); return NULL;
+      }
+
+  rtype = qualify_type2(rtype, t1, t2);
+
+  return make_combiner_type(rtype, combiner);
+}
+
+
+type type_base(type t)
+{
+  while (t->kind == tk_array)
+    t = t->u.array.arrayof;
+
+  return t;
+}
+
+bool type_integer(type t)
+{
+  return type_integral(t) || type_enum(t) ||
+    (type_variable(t) && type_variable_decl(t)->typevar_kind == typevar_integer);
+}
+
+bool type_real(type t)
+{
+  return type_integer(t) || type_floating(t) || type_unknown_number(t) ||
+    (type_variable(t) && type_variable_decl(t)->typevar_kind == typevar_number);
+}
+
+bool type_arithmetic(type t)
+{
+  return type_real(t) || type_complex(t);
+}
+
+bool type_scalar(type t)
+{
+  return type_arithmetic(t) || type_pointer(t);
+}
+
+bool type_aggregate(type t)
+{
+  return type_struct(t) || type_union(t) || type_attribute(t);
+}
+
+type make_unsigned_type(type t)
+{
+  if (t->kind != tk_primitive)
+    return t;
+
+  switch (t->u.primitive)
+    {
+    case tp_char: case tp_signed_char:
+      return qualify_type1(unsigned_char_type, t);
+    case tp_short: return qualify_type1(unsigned_short_type, t);
+    case tp_int: return qualify_type1(unsigned_int_type, t);
+    case tp_long: return qualify_type1(unsigned_long_type, t);
+    case tp_long_long: return qualify_type1(unsigned_long_long_type, t);
+    case tp_int2: return qualify_type1(uint2_type, t);
+    case tp_int4: return qualify_type1(uint4_type, t);
+    case tp_int8: return qualify_type1(uint8_type, t);
+    default: break;
+    }
+  assert(type_unknown_int(t) || type_unknown_number(t) || type_unsigned(t));
+
+  return t;
+}
+
+static type_element rid2ast(region r, location loc, int keyword, type_element rest)
+{
+  type_element ast = CAST(type_element, new_rid(r, loc, keyword));
+  ast->next = CAST(node, rest);
+  return ast;
+}
+
+static type_element qualifier2ast(region r, location loc, int keyword, type_element rest)
+{
+  type_element ast = CAST(type_element, new_qualifier(r, loc, keyword));
+  ast->next = CAST(node, rest);
+  return ast;
+}
+
+static type_element qualifiers2ast(region r, location loc, type_quals quals,
+                                  type_element rest)
+{
+  if (quals & volatile_qualifier)
+    rest = qualifier2ast(r, loc, volatile_qualifier, rest);
+  if (quals & const_qualifier)
+    rest = qualifier2ast(r, loc, const_qualifier, rest);
+  return rest;
+}
+
+static type_element primitive2ast(region r, location loc, int primitive,
+                                 type_element rest)
+{
+  bool isunsigned = FALSE;
+  int keyword;
+
+  switch (primitive)
+    {
+    case tp_unsigned_char:
+      isunsigned = TRUE;
+    case tp_char:
+      keyword = RID_CHAR;
+      break;
+    case tp_signed_char:
+      return rid2ast(r, loc, RID_SIGNED, rid2ast(r, loc, RID_CHAR, rest));
+    case tp_unsigned_short:
+      isunsigned = TRUE;
+    case tp_short:
+      keyword = RID_SHORT;
+      break;
+    case tp_unsigned_int:
+      isunsigned = TRUE;
+    case tp_int:
+      keyword = RID_INT;
+      break;
+    case tp_unsigned_long:
+      isunsigned = TRUE;
+    case tp_long:
+      keyword = RID_LONG;
+      break;
+    case tp_unsigned_long_long:
+      isunsigned = TRUE;
+    case tp_long_long:
+      keyword = RID_LONG;
+      rest = rid2ast(r, loc, RID_LONG, rest);
+      break;
+    case tp_float:
+      keyword = RID_FLOAT;
+      break;
+    case tp_double:
+      keyword = RID_DOUBLE;
+      break;
+    case tp_long_double:
+      keyword = RID_DOUBLE;
+      rest = rid2ast(r, loc, RID_LONG, rest);
+      break;
+    default:
+      assert(0);
+      keyword = RID_INT; break;
+    }
+
+  rest = rid2ast(r, loc, keyword, rest);
+  if (isunsigned)
+    rest = rid2ast(r, loc, RID_UNSIGNED, rest);
+
+  return rest;
+}
+
+#define UNNAMED_STRUCT_PREFIX "__nesc_unnamed"
+
+void name_tag(tag_declaration tag)
+{
+  /* Name unnamed structs, unions or enums */
+  if (!tag->name)
+    {
+      static long nextid = 4242;
+      char tagname[sizeof(UNNAMED_STRUCT_PREFIX) + 20];
+
+      sprintf(tagname, UNNAMED_STRUCT_PREFIX "%ld", nextid++);
+      tag->definition->word1 = new_word(parse_region, dummy_location,
+                                       str2cstring(parse_region, tagname));
+      tag->name = tag->definition->word1->cstring.data;
+    }
+}
+
+static type_element tag2ast(region r, location loc, tag_declaration tag,
+                           type_element rest)
+{
+  tag_ref tr;
+
+  name_tag(tag);
+  tr = newkind_tag_ref(r, tag->kind, loc, 
+                      new_word(r, loc, str2cstring(r, tag->name)),
+                      NULL, NULL, FALSE);
+
+  tr->tdecl = tag;
+  tr->next = CAST(node, rest);
+
+  /* creating a type naming a tag that shadows another is tricky as
+     the placement of the type affects its meaning. 
+
+     The current use of type2ast is for declaring temporaries. These are
+     placed at the start of the closest enclosing block. This is correct as
+     long as the temporary does not rely on a tag declared in the same
+     block that shadows a tag in an enclosing scope (as the temporary would
+     then erroneously refer to the enclosing tag). The simplest check which
+     detects this situation is any use of a shadowed tag (which I am
+     assuming are very rare anyway).
+
+     The correct solution is that if the type of temporary x refers to tags
+     t1...tn declared in the current block, then x should be placed just
+     before the declaration of the latest of ti, the tag in t1...tn which
+     was declared latest, and the declaration of x should be preceded by
+     'struct/union/enum ti;'. This is somewhat painful.
+
+     To avoid any problems, compile with error_shadow = warn_shadow = 1
+     (this is what RC does) */
+
+  assert(!tag->shadowed);
+
+  return CAST(type_element, tr);
+}
+
+static type_element typevar2ast(region r, location loc, data_declaration tvar,
+                               type_element rest)
+{
+  type_element tname;
+
+  /* Unlike with tags, we don't need to worry about whether the type variable
+     is shadowed, as type variables are always replaced by their value in
+     generated code...
+     If we were to re-output nesC code, we could run into problems. */
+  tname = CAST(type_element, new_typename(r, loc, tvar));
+  tname->next = CAST(node, rest);
+
+  return tname;
+}
+
+static declaration parameter2ast(region r, location loc, type t)
+{
+  variable_decl vd;
+  data_decl dd;
+  declarator tdeclarator;
+  type_element tmodifiers;
+
+  /* Build AST for the declaration */
+  type2ast(r, loc, t, NULL, &tdeclarator, &tmodifiers);
+  vd = new_variable_decl(r, loc, tdeclarator, NULL, NULL, NULL, NULL);
+  vd->declared_type = t;
+  dd = new_data_decl(r, loc, tmodifiers, CAST(declaration, vd));
+
+  return CAST(declaration, dd);
+}
+
+/* Build AST nodes such that "MODIFIERS D" represents the declaration of
+   "T INSIDE", at location loc, allocating in region r */
+void type2ast(region r, location loc, type t, declarator inside,
+             declarator *d, type_element *modifiers)
+{
+  /* XXX: De-recursify */
+  type_element qualifiers = qualifiers2ast(r, loc, t->qualifiers, NULL);
+
+  /* A network base type uses its typedef name (it is effectively a new
+     type, not a typedef) */
+  if (type_network_base_type(t))
+    {
+      typename tname = new_typename(r, loc, t->basedecl);
+
+      tname->next = CAST(node, qualifiers);
+      *d = inside;
+      *modifiers = CAST(type_element, tname);
+      return;
+    }
+
+  switch (t->kind)
+    {
+    case tk_primitive:
+      *modifiers = primitive2ast(r, loc, t->u.primitive, qualifiers);
+      *d = inside;
+      break;
+    case tk_complex:
+      *modifiers =
+       rid2ast(r, loc, RID_COMPLEX, 
+       primitive2ast(r, loc, t->u.primitive, qualifiers));
+      *d = inside;
+      break;
+    case tk_tagged:
+      *modifiers = tag2ast(r, loc, t->u.tag, qualifiers);
+      *d = inside;
+      break;
+    case tk_void:
+      *modifiers = rid2ast(r, loc, RID_VOID, qualifiers);
+      *d = inside;
+      break;
+    case tk_pointer:
+      if (qualifiers)
+       inside = CAST(declarator,
+                     new_qualified_declarator(r, loc, inside, qualifiers));
+      inside = CAST(declarator,
+                   new_pointer_declarator(r, loc, inside));
+      type2ast(r, loc, t->u.pointsto, inside, d, modifiers);
+      break;
+    case tk_array:
+      assert(qualifiers == NULL);
+      inside = CAST(declarator,
+                   new_array_declarator(r, loc, inside, t->u.array.size));
+      type2ast(r, loc, t->u.array.arrayof, inside, d, modifiers);
+      break;
+    case tk_function: {
+      declaration parms;
+
+      assert(t->u.fn.fkind == tkf_c); /* XXX: not done for nesC stuff yet
+                                        (not needed yet) */
+      /* XXX: doesn't rebuild fn qualifiers. Are we generating C here
+        or not ? */
+      /* XXX: Should build environment for parameters */
+      if (t->u.fn.oldstyle)
+       parms = NULL;
+      else if (empty_typelist(t->u.fn.argtypes))
+       parms = parameter2ast(r, loc, void_type);
+      else
+       {
+         struct typelist_element *args = t->u.fn.argtypes->first;
+         declaration *lastparm = &parms;
+
+         while (args)
+           {
+             *lastparm = parameter2ast(r, loc, args->t);
+             lastparm = (declaration *)&(*lastparm)->next;
+             args = args->next;
+           }
+         if (t->u.fn.varargs)
+           {
+             *lastparm = CAST(declaration, new_ellipsis_decl(r, loc));
+             lastparm = (declaration *)&(*lastparm)->next;
+           }
+         *lastparm = NULL;
+       }
+      inside = CAST(declarator,
+                   new_function_declarator(r, loc, inside, parms, NULL, NULL, NULL));
+      type2ast(r, loc, t->u.fn.returns, inside, d, modifiers);
+      break;
+    }
+    case tk_variable:
+      *modifiers = typevar2ast(r, loc, t->u.tdecl, qualifiers);
+      *d = inside;
+      break;
+    default: assert(0); break;
+    }
+}
+
+bool type_contains_pointers(type t)
+{
+  field_declaration field;
+
+  if (type_pointer(t))
+    return TRUE;
+
+  if (type_array(t))
+    return type_contains_pointers(type_array_of(t));
+
+  if (!type_aggregate(t))
+    return FALSE;
+
+  for (field = type_tag(t)->fieldlist; field; field = field->next)
+    if (type_contains_pointers(field->type))
+      return TRUE;
+
+  return FALSE;
+}
+
+bool type_contains_union_with_pointers(type t)
+{
+  field_declaration field;
+
+  if (type_array(t))
+    return type_contains_union_with_pointers(type_array_of(t));
+
+  if (type_union(t))
+    return type_contains_pointers(t);
+
+  if (!type_struct(t))
+    return FALSE;
+
+  for (field = type_tag(t)->fieldlist; field; field = field->next)
+    if (type_contains_union_with_pointers(field->type))
+      return TRUE;
+
+  return FALSE;
+}
+
+type type_default_conversion(type from)
+{
+  if (type_enum(from))
+    from = type_tag(from)->reptype;
+
+  if (type_smallerthanint(from))
+    {
+      /* Traditionally, unsignedness is preserved in default promotions. */
+      if (flag_traditional && type_unsigned(from))
+       return unsigned_int_type;
+      else
+       return int_type;
+    }
+  /* Note: if we had a type of same size as int, but of lesser rank, we should be
+     returning one of int/unsigned int here, but we don't support that kind of
+     type */
+
+  if (flag_traditional && !flag_allow_single_precision && type_float(from))
+    return double_type;
+
+  if (type_function(from))
+    return make_pointer_type(from);
+
+  if (type_array(from))
+    return make_pointer_type(type_array_of(from));
+
+  if (type_variable(from))
+    {
+      data_declaration vdecl = type_variable_decl(from);
+
+      switch (vdecl->typevar_kind)
+       {
+       case typevar_integer: return unknown_int_type;
+       case typevar_number: return unknown_number_type;
+       default: break;
+       }
+    }
+
+  return from;
+}
+
+/* would be called type_default_function_array_conversion in gcc 3.x */
+type type_default_conversion_for_assignment(type from)
+{
+  if (type_array(from) || type_function(from))
+    return type_default_conversion(from);
+  else
+    return from;
+}
+
+type function_call_type(function_call fcall)
+{
+  type fntype = fcall->arg1->type;
+
+  if (type_pointer(fntype))
+    fntype = type_points_to(fntype);
+
+  assert(type_functional(fntype));
+
+  return fntype;
+}
+
+cval type_size(type t)
+/* Requires: type_size_cc(t)
+   Returns: size of type t in a cval. The cval is either unknown (for types
+     derived in some way from template arguments) or an unsigned number
+*/
+{
+  assert(type_size_cc(t));
+
+  if (type_tagged(t))
+    return t->u.tag->size;
+
+  if (type_array(t))
+    return cval_times(type_array_size_cval(t), type_size(t->u.array.arrayof));
+
+  return t->size;
+}
+
+largest_uint type_size_int(type t)
+/* Requires: type_size_cc(t) && cval_isinteger(type_size(t))
+     (i.e., t not variable or unknown size)
+   Returns: size of t
+*/
+{
+  return cval_uint_value(type_size(t));
+}
+
+cval type_alignment(type t)
+{
+  assert(type_has_size(t));
+
+  if (!cval_istop(t->alignment)) /* Possibly overridden alignment */
+    return t->alignment;
+
+  if (type_tagged(t))
+    return t->u.tag->alignment;
+
+  if (type_array(t))
+    return type_alignment(t->u.array.arrayof);
+
+  /* We should never get here (all types have non-zero alignment) */
+  assert(0);
+
+  return t->alignment;
+}
+
+/* True if the sizeof of t is a compile-time constant (known or unknown)
+ */
+bool type_size_cc(type t)
+{
+  if (!type_has_size(t))
+    return FALSE;
+
+  if (type_tagged(t))
+    return !cval_istop(t->u.tag->size);
+
+  if (type_array(t))
+    return !cval_istop(type_array_size_cval(t)) &&
+      type_size_cc(t->u.array.arrayof);
+
+  return TRUE;
+}
+
+bool type_has_size(type t)
+{
+  /* Similar, but not identical to, type_incomplete */
+  return type_void(t) || !type_incomplete(t);
+}
+
+
+char *qualifier_name(type_quals q)
+{
+  switch (q)
+    {
+    default: abort(); return NULL;
+#define Q(name, kind, tq, val) case tq: return #name;
+#include "qualifiers.h"
+#undef Q
+    }
+}
+
+/* nesc types */
+bool type_command(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind == tkf_command;
+}
+
+bool type_event(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind == tkf_event;
+}
+
+bool type_task(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind == tkf_task;
+}
+
+bool type_generic(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind == tkf_generic;
+}
+
+type make_command_type(type t, typelist argtypes, bool varargs)
+{
+  type newt = make_function_type(t, argtypes, varargs, FALSE);
+  newt->u.fn.fkind = tkf_command;
+  return newt;
+}
+
+type make_event_type(type t, typelist argtypes, bool varargs)
+{
+  type newt = make_function_type(t, argtypes, varargs, FALSE);
+  newt->u.fn.fkind = tkf_event;
+  return newt;
+}
+
+type make_task_type(type t, typelist argtypes, bool varargs)
+{
+  type newt = make_function_type(t, argtypes, varargs, FALSE);
+  newt->u.fn.fkind = tkf_task;
+  return newt;
+}
+
+type make_generic_type(type t, typelist argtypes)
+{
+  type newt = make_function_type(t, argtypes, FALSE, FALSE);
+  newt->u.fn.fkind = tkf_generic;
+  return newt;
+}
+
+type make_interface_type(data_declaration itype)
+{
+  type nt = new_type(tk_iref);
+  nt->u.iref = itype;
+
+  /* These are not yet stored, but I'll assume they might be like
+     pointers some day... */
+  /* ASSUME: all pointers are the same */
+  nt->size = make_type_cval(target->tptr.size);
+  nt->alignment = make_type_cval(target->tptr.align);
+
+  return nt;
+}
+
+bool type_interface(type t)
+{
+  return t->kind == tk_iref;
+}
+
+data_declaration type_iref(type t)
+{
+  assert(type_interface(t));
+  return t->u.iref;
+}
+
+type make_component_type(data_declaration ctype)
+{
+  type nt = new_type(tk_cref);
+  nt->u.cref = ctype;
+
+  /* These are not yet stored, but I'll assume they might be like
+     pointers some day... */
+  /* ASSUME: all pointers are the same */
+  nt->size = make_type_cval(target->tptr.size);
+  nt->alignment = make_type_cval(target->tptr.align);
+
+  return nt;
+}
+
+bool type_component(type t)
+{
+  return t->kind == tk_cref;
+}
+
+data_declaration type_cref(type t)
+{
+  assert(type_component(t));
+  return t->u.cref;
+}
+
+bool type_functional(type t)
+{
+  return t->kind == tk_function && t->u.fn.fkind != tkf_generic;
+}
+
+type make_combiner_type(type t, data_declaration combiner)
+{
+  type nt;
+
+  if (!combiner)
+    return t;
+
+  nt = copy_type(t);
+  nt->combiner = combiner;
+
+  return nt;
+}
+
+data_declaration type_combiner(type t)
+{
+  return t->combiner;
+}
+
+void set_typedef_type(data_declaration def, bool network)
+/* Requires: def->kind == decl_typedef
+   Effects: Sets def's type to remember the typedef it comes from
+     If network is true, the type becomes a network base type
+*/
+{
+  type nt = copy_type(def->type);
+
+  if (network)
+    {
+      nt->network = nx_base;
+      nt->alignment = make_type_cval(1);
+      nt->basedecl = def;
+    }
+  nt->typedefdecl = def;
+
+  def->type = nt;
+}
+
+data_declaration type_typedef(type t)
+/* Returns: the typedef t comes from, or NULL if none
+*/
+{
+  return t->typedefdecl;
+}
+
+data_declaration type_networkdef(type t)
+/* Requires: type_network_base_type(t)
+   Returns: the network base type definition for t
+*/
+{
+  assert(type_network_base_type(t));
+  return t->basedecl;
+}
+
+bool type_network_base_type(type t)
+{
+  return t->network == nx_base;
+}
+
+type type_network_platform_type(type t)
+/* Requires: type_network_base_type(t)
+   Returns: t's non-network base type
+*/
+{
+  return type_networkdef(t)->basetype;
+}
+
+/* Type variables */
+type make_variable_type(data_declaration tdecl)
+/* Requires: tdecl->kind == decl_typedef.
+*/
+{
+  type nt = new_type(tk_variable);
+  nt->u.tdecl = tdecl;
+
+  /* Type variables have unknown size and alignment */
+  nt->size = nt->alignment = cval_unknown_number;
+
+  return nt;
+}
+
+bool type_variable(type t)
+{
+  return t->kind == tk_variable;
+}
+
+data_declaration type_variable_decl(type t)
+{
+  assert(type_variable(t));
+  return t->u.tdecl;
+}
+
+typelist instantiate_typelist(typelist old)
+/* Returns: An instantiated copy of typelist old, allocated in the same
+     region
+*/
+{
+  typelist new = new_typelist(old->r);
+  struct typelist_element *scan = old->first;
+
+  while (scan)
+    {
+      typelist_append(new, instantiate_type(scan->t));
+      scan = scan->next;
+    }
+  
+  return new;
+}
+
+type instantiate_type(type t)
+/* Effects: Instantiate a type with type variables based on the instantiation
+     of the variables and tag declarations. These are found in 
+       type_variable_decl(vartype)->instantiation->type for variables
+       type_tag(tagtype)->instantiation for tags
+   Returns: The instantiated type
+*/
+{
+  type newt = NULL;
+
+  /* Instantiating an unknown type is not possible (we don't know what
+     type to produce) */
+  assert(!type_unknown(t));
+
+  switch (t->kind)
+    {
+    case tk_tagged:
+      if (t->u.tag->instantiation)
+       newt = make_tagged_type(t->u.tag->instantiation);
+      break;
+
+    case tk_pointer:
+      newt = make_pointer_type(instantiate_type(t->u.pointsto));
+      break;
+
+    case tk_function: {
+      type ret = instantiate_type(t->u.fn.returns);
+      typelist args = NULL;
+
+      if (t->u.fn.argtypes)
+       args = instantiate_typelist(t->u.fn.argtypes);
+
+      newt = make_function_type(ret, args, t->u.fn.varargs, t->u.fn.oldstyle);
+      newt->u.fn.fkind = t->u.fn.fkind;
+      break;
+    }
+    case tk_array:
+      newt = make_array_type(instantiate_type(t->u.array.arrayof),
+                            !t->u.array.size ? NULL :
+                            CAST(expression, t->u.array.size->instantiation));
+      break;
+
+    case tk_iref:
+      if (t->u.iref->instantiation)
+       newt = make_interface_type(t->u.iref->instantiation);
+      break;
+
+    case tk_cref:
+      if (t->u.cref->instantiation)
+       newt = make_component_type(t->u.cref->instantiation);
+      break;
+
+    case tk_variable:
+      if (t->u.tdecl->instantiation)
+       newt = t->u.tdecl->instantiation->type;
+      break;
+
+    default:
+      break;
+    }
+
+  if (newt)
+    return make_qualified_type(newt, t->qualifiers);
+  else
+    return t;
+}
+
+static char *primname[] = {
+  NULL, /* error */
+  "int16_t",
+  "uint16_t",
+  "int32_t",
+  "uint32_t",
+  "int64_t",
+  "uint64_t",
+  "char",
+  "signed char",
+  "unsigned char",
+  "short",
+  "unsigned short",
+  "int",
+  "unsigned int",
+  "long",
+  "unsigned long",
+  "long long",
+  "unsigned long long",
+  "unknown int",
+  "float",
+  "double",
+  "long double",
+  "unknown number"
+};
+
+static const char *rconcat(region r, const char *s1, const char *s2)
+{
+  int l = strlen(s1) + strlen(s2) + 1;
+  char *s = rstralloc(r, l);
+
+  strcpy(s, s1);
+  strcat(s, s2);
+  
+  return s;
+}
+
+static const char *add_qualifiers(region r, type_quals qs, const char *to)
+{
+  type_quals q;
+
+  for (q = 1; q < last_qualifier; q <<= 1)
+    if (qs & q)
+      {
+       to = rconcat(r, " ", to);
+       to = rconcat(r, qualifier_name(q), to);
+      }
+
+  return to;
+}
+
+static const char *add_parens(region r, const char *to)
+{
+  to = rconcat(r, "(", to);
+  to = rconcat(r, to, ")");
+  return to;
+}
+
+static void split_type_name(region r, type t, const char **prefix,
+                           const char **decls, bool decls_is_star)
+{
+  const char *basic;
+
+  switch (t->kind)
+    {
+    case tk_primitive:
+      basic = primname[t->u.primitive];
+      basic = add_qualifiers(r, t->qualifiers, basic);
+      break;
+    case tk_complex:
+      basic = rconcat(r, "complex ", primname[t->u.primitive]);
+      basic = add_qualifiers(r, t->qualifiers, basic);
+      break;
+    case tk_void:
+      basic = "void";
+      basic = add_qualifiers(r, t->qualifiers, basic);
+      break;
+    case tk_pointer: 
+      *decls = add_qualifiers(r, t->qualifiers, *decls);
+      *decls = rconcat(r, "*", *decls);
+      split_type_name(r, t->u.pointsto, &basic, decls, TRUE);
+      break;
+    case tk_array:
+      /* can't have qualifiers here - see make_qualified_type */
+      if (decls_is_star)
+       *decls = add_parens(r, *decls);
+      *decls = rconcat(r, *decls, "[]");
+      split_type_name(r, t->u.array.arrayof, &basic, decls, FALSE);
+      break;
+    case tk_function: {
+      const char *args= "";
+
+      if (!t->u.fn.oldstyle)
+       {
+         typelist_scanner scanargs;
+         type argt;
+         bool first = TRUE;
+
+         typelist_scan(t->u.fn.argtypes, &scanargs);
+         while ((argt = typelist_next(&scanargs)))
+           {
+             if (!first)
+               args = rconcat(r, args, ", ");
+             args = rconcat(r, args, type_name(r, argt));
+             first = FALSE;
+           }
+         if (t->u.fn.varargs)
+           args = rconcat(r, args, ", ...");
+       }
+
+      if (decls_is_star)
+       *decls = add_parens(r, *decls);
+
+      if (t->qualifiers)
+       /* This isn't legal C syntax, but seems the reasonable rep */
+       *decls = add_parens(r, add_qualifiers(r, t->qualifiers, *decls));
+
+      *decls = rconcat(r, *decls, add_parens(r, args));
+
+      split_type_name(r, t->u.fn.returns, &basic, decls, FALSE);
+      break;
+    }
+    case tk_tagged: {
+      tag_declaration tdecl = t->u.tag;
+
+      basic = rconcat(r, tagkind_name(tdecl->kind), " ");
+
+      if (tdecl->container)
+       {
+         basic = rconcat(r, basic, tdecl->container->name);
+         basic = rconcat(r, basic, ".");
+       }
+      if (tdecl->name)
+       basic = rconcat(r, basic, tdecl->name);
+      else
+       basic = rconcat(r, basic, "/*anon*/");
+      basic = add_qualifiers(r, t->qualifiers, basic);
+      break;
+    }
+    default: /* for bugs, tk_error tk_iref tk_cref */
+      basic = "error";
+      break;
+    }
+
+  *prefix = basic;
+}
+
+const char *type_name(region r, type t)
+{
+  const char *prefix, *decls;
+
+  decls = "";
+  split_type_name(r, t, &prefix, &decls, FALSE);
+
+  if (decls[0])
+    return rconcat(r, prefix, rconcat(r, " ", decls));
+  else
+    return prefix;
+}
+
+static void nxml_typedef(data_declaration tdef)
+{
+  xindent();
+  xstartline();
+  xml_tag("typename");
+  nxml_ddecl_ref(tdef);
+  xml_pop();
+  xnewline();
+  xunindent();
+}
+
+void nxml_type(type t)
+{
+  type_quals quals = type_qualifiers(t) & (const_qualifier | volatile_qualifier | restrict_qualifier);
+  data_declaration tdef = type_typedef(t);
+
+  xstartline();
+
+  if (quals)
+    {
+      indentedtag_start("type-qualified");
+#define Q(name, kind, tq, val) \
+      if (quals & val) xml_attr_noval(# name);
+#include "qualifiers.h"
+#undef Q
+      xml_tag_end();
+      xnewline();
+      if (tdef)
+       {
+         nxml_typedef(tdef);
+         tdef = NULL;
+       }
+    }
+    
+  switch (t->kind)
+    {
+    case tk_primitive:
+      if (t->u.primitive < tp_first_floating)
+       xml_tag_start("type-int");
+      else
+       xml_tag_start("type-float");
+      xml_attr("cname", primname[t->u.primitive]);
+      xml_attr_bool("unsigned", type_unsigned(t));
+      break;
+    case tk_complex:
+      if (t->u.primitive < tp_first_floating)
+       {
+         xml_tag_start("type-complex-int");
+         xml_attr_bool("unsigned", type_unsigned(primitive_types[t->u.primitive]));
+       }
+      else
+       xml_tag_start("type-complex-float");
+      xml_attr("cname", primname[t->u.primitive]);
+      break;
+    case tk_void:
+      xml_tag_start("type-void");
+      break;
+    case tk_pointer: 
+      xml_tag_start("type-pointer");
+      break;
+    case tk_array:
+      xml_tag_start("type-array");
+      xml_attr_cval("elements", type_array_size_cval(t));
+      break;
+    case tk_function: 
+      xml_tag_start("type-function");
+      xml_attr_bool("oldstyle", t->u.fn.oldstyle);
+      xml_attr_bool("varargs", t->u.fn.varargs);
+      break;
+    case tk_tagged:
+      xml_tag_start("type-tag");
+      break;
+    case tk_iref:
+      xml_tag_start("type-interface");
+      break;
+    case tk_cref:
+      xml_tag_start("type-component");
+      break;
+    case tk_variable:
+      xml_tag_start("type-var");
+      break;
+    default: /* for bugs */
+      xml_tag_start("type-error");
+      break;
+    }
+
+  xml_attr_cval("size", type_size_cc(t) ? type_size(t) : cval_top);
+  xml_attr_cval("alignment", type_has_size(t) ? type_alignment(t) : cval_top);
+  if (t->network == nx_base)
+    xml_attr("network", t->basedecl->name);
+
+  switch (t->kind)
+    {
+    default:
+      xml_tag_end();
+      break;
+
+    case tk_pointer: 
+      xml_tag_end();
+      xnewline(); xindent();
+      nxml_type(t->u.pointsto);
+      xunindent();
+      break;
+    case tk_array:
+      xml_tag_end();
+      xnewline(); xindent();
+      nxml_type(t->u.array.arrayof);
+      xunindent();
+      break;
+    case tk_function:
+      xml_tag_end();
+      xnewline(); xindent();
+      nxml_type(t->u.fn.returns);
+      if (!t->u.fn.oldstyle)
+       nxml_typelist("function-parameters", t->u.fn.argtypes);
+      xunindent();
+      break;
+    case tk_tagged:
+      xml_tag_end();
+      nxml_tdecl_ref(t->u.tag);
+      break;
+    case tk_iref:
+      xml_tag_end();
+      nxml_ddecl_ref(t->u.iref);
+      break;
+    case tk_cref:
+      xml_tag_end();
+      nxml_ddecl_ref(t->u.cref);
+      break;
+    case tk_variable:
+      xml_tag_end();
+      nxml_ddecl_ref(t->u.tdecl);
+      break;
+    }
+  if (tdef)
+    nxml_typedef(tdef);
+  xml_pop();
+  xnewline();
+
+  if (quals)
+    indentedtag_pop();
+}
+
+void nxml_typelist(const char *name, typelist types)
+{
+  typelist_scanner scantypes;
+  type t;
+
+  indentedtag(name);
+  typelist_scan(types, &scantypes);
+  while ((t = typelist_next(&scantypes)))
+    nxml_type(t);
+  indentedtag_pop();
+}
+
+
+
+enum {
+  TYPE_HASH_PRIMITIVE = 1,
+  TYPE_HASH_COMPLEX = TYPE_HASH_PRIMITIVE + tp_last,
+  TYPE_HASH_ERROR = TYPE_HASH_COMPLEX + tp_last,
+  TYPE_HASH_VOID,
+  TYPE_HASH_FUNCTION
+};
+
+
+/* Return a hash value to distinguish types.  Note that we are much
+   less careful here than in type_equal, since hash collisions only
+   effect performance. */
+unsigned long type_hash(type t)
+{
+  switch (t->kind)
+    {
+    case tk_error:
+      return TYPE_HASH_ERROR;
+
+    case tk_primitive: 
+      return TYPE_HASH_PRIMITIVE + t->u.primitive;
+
+    case tk_complex:
+      return TYPE_HASH_COMPLEX + t->u.primitive;
+
+    case tk_void:
+      return TYPE_HASH_VOID;
+
+    case tk_tagged:
+      return hash_ptr(t->u.tag);
+
+    case tk_pointer:
+      return (type_hash(t->u.pointsto) << 1) ^ 0x51353157;
+
+    case tk_function:
+      return TYPE_HASH_FUNCTION;
+
+    case tk_array:
+      return (type_hash(t->u.array.arrayof) << 1) ^ 0x40142453 ;
+
+    default: 
+      assert(0); return 0;
+    }
+}
+
+
+/* True if an assignment to type child could modify a value of type parent
+   according to the ANSI C rules.
+   Note: child cannot be an array type (assignments to arrays do not exist
+   in C)
+*/
+bool type_contains(type parent, type child)
+{
+  assert(!type_array(child));
+
+  /* Short-circuit easy case */
+  if (parent == child)
+    return TRUE;
+
+  /* Char writes can be used on any value */
+  if (type_char(child))
+    return TRUE;
+
+  switch (parent->kind)
+    {
+    default:
+      /* for primitive, void, function */
+      return type_equal_unqualified(parent, child);
+
+    case tk_complex:
+      /* true if child is primitive or complex and same base primitive type */
+      return (child->kind == tk_primitive || child->kind == tk_complex) &&
+       parent->u.primitive == child->u.primitive;
+
+    case tk_tagged: {
+      /* Same tags -> yes. Otherwise, for structs, unions: true if parent
+        has a field type that contains child */
+      field_declaration field;
+
+      if (child->kind == tk_tagged && parent->u.tag == child->u.tag)
+       return TRUE;
+
+      if (parent->u.tag->kind == kind_enum_ref)
+       return FALSE;
+
+      for (field = parent->u.tag->fieldlist; field; field = field->next)
+       if (type_contains(field->type, child))
+         return TRUE;
+
+      return FALSE;
+    }
+
+    case tk_pointer:
+      /* base types must match, but can have different qualifiers
+        (this is different from type_equal) */
+      return 
+       child->kind == tk_pointer &&
+       type_equal_unqualified(parent->u.pointsto, child->u.pointsto);
+
+    case tk_array: {
+      type base_parent = parent;
+    
+      while (base_parent->kind == tk_array)
+       base_parent = base_parent->u.array.arrayof;
+
+      return type_contains(base_parent, child);
+    }
+    }
+}
+
+bool type_charstar(type t)
+{
+  return type_pointer(t) && type_char(type_points_to(t));
+}
+
+bool type_chararray(type t, bool no_size_allowed)
+{
+  return t == char_array_type || /* check for easy, common case first */
+    (type_array(t) && type_char(type_array_of(t)) &&
+     !(no_size_allowed && type_array_size(t)));
+}
+
+bool type_wchararray(type t, bool no_size_allowed)
+{
+  return t == wchar_array_type || /* check for easy, common case first */
+    (type_array(t) && type_equal(wchar_type, type_array_of(t)) &&
+     !(no_size_allowed && type_array_size(t)));
+}
+
+/* See gcc's machmode.def for the source of this mode data. This is a very
+   simplified form.
+*/
+typedef enum {
+  m_int, m_float, m_cint, m_cfloat
+} machmode_t;
+
+type type_for_mode(const char *mode, bool isunsigned)
+/* Returns: type (unsigned if 'unsigned' is TRUE) corresponding to the
+     specified mode
+*/
+{
+  int i;
+  static struct { char *name; size_t s; machmode_t m; } modes[] = {
+    { "byte", 1, m_int },
+    { "word", 0, m_int },
+    { "pointer", 0, m_int },
+    { "QI", 1, m_int },
+    { "HI", 2, m_int },
+    { "SI", 4, m_int },
+    { "DI", 8, m_int },
+    { "TI", 16, m_int },
+    { "OI", 32, m_int },
+    { "QF", 1, m_float },
+    { "HF", 2, m_float },
+    { "TQF", 3, m_float },
+    { "SF", 4, m_float },
+    { "DF", 8, m_float },
+    { "XF", 12, m_float },
+    { "TF", 16, m_float },
+    { "QC", 1, m_cfloat },
+    { "HC", 2, m_cfloat },
+    { "SC", 4, m_cfloat },
+    { "DC", 8, m_cfloat },
+    { "XC", 12, m_cfloat },
+    { "TC", 16, m_cfloat },
+    { "CQI", 1, m_cint },
+    { "CHI", 2, m_cint },
+    { "CSI", 4, m_cint, },
+    { "CDI", 8, m_int },
+    { "CTI", 16, m_cint },
+    { "COI", 32, m_cint }
+  };
+
+  modes[1].s = target->word_size;
+  modes[2].s = target->tptr.size;
+
+  for (i = 0; i < sizeof modes / sizeof *modes; i++)
+    if (is_attr_name(mode, modes[i].name))
+      {
+       type t;
+
+       switch (modes[i].m)
+         {
+         case m_int: case m_cint:
+           t = lookup_primitive(tp_error, modes[i].s, 0, isunsigned);
+           break;
+         case m_float: case m_cfloat:
+           t = lookup_float(modes[i].s);
+           break;
+         }
+       if (t->u.primitive == tp_error)
+         return NULL;
+       if (modes[i].m == m_cint || modes[i].m == m_cfloat)
+         t = make_complex_type(t);
+       return t;
+      }
+  return NULL;
+}
diff --git a/src/types.h b/src/types.h
new file mode 100644 (file)
index 0000000..34fcfa9
--- /dev/null
@@ -0,0 +1,318 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from RC and the GNU C Compiler. It is thus
+   Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef TYPES_H
+#define TYPES_H
+
+/* Type sizes, alignments and offsets are represented as cvals, and can be
+   one of: 
+   - top: variable-sized types
+   - unknown: derived from a template argument
+   - an unsigned number (preferably created with make_type_cval)
+     (note: must be a cval_uint!)
+
+   These numbers represent bytes, except in field offsets which use bits
+*/
+
+#include "cval.h"
+
+#include "decls.h"
+
+typedef enum 
+{
+  no_qualifiers = 0, 
+  transparent_qualifier = 1,
+#define Q(name, kind, qual, val) qual = val,
+#include "qualifiers.h"
+#undef Q
+  last_qualifier
+} type_quals;
+
+extern type float_type, double_type, long_double_type, 
+  int_type, unsigned_int_type, long_type, unsigned_long_type,
+  long_long_type, unsigned_long_long_type, short_type, unsigned_short_type,
+  char_type, char_array_type, wchar_type, wchar_array_type,
+  unsigned_char_type, signed_char_type, void_type, ptr_void_type,
+  size_t_type, ptrdiff_t_type, intptr_type, unknown_int_type,
+  unknown_number_type, const_ptr_void_type;
+
+extern type error_type;
+
+void init_types(void);
+
+void set_typedef_type(data_declaration def, bool network);
+/* Requires: def->kind == decl_typedef
+   Effects: Sets def's type to remember the typedef it comes from
+     If network is true, the type becomes a network base type
+*/
+
+data_declaration type_typedef(type t);
+/* Returns: the typedef t comes from, or NULL if none
+*/
+
+data_declaration type_networkdef(type t);
+/* Requires: type_network_base_type(t)
+   Returns: the network base type definition for t
+*/
+
+/* Build types */
+
+/* Return the 'complex t' version of basic type t (one of the integral or
+   floating-point types) */
+type make_complex_type(type t);
+
+/* Return the base type of complex type t (one of the integral or
+   floating-point types) */
+type make_base_type(type t);
+
+/* Return the type t with it's qualifiers set to qualifiers (old qualifiers
+   are ignored). This is illegal for array types */
+type make_qualified_type(type t, type_quals qualifiers);
+type qualify_type1(type t, type t1);
+type qualify_type2(type t, type t1, type t2);
+
+/* Return 't' modified to have alignment 'new_alignment' */
+type align_type(type t, cval new_alignment);
+
+/* Return TRUE if t's alignment was changed with align_type */
+bool type_realigned(type t);
+
+/* Return type 'pointer to t' (unqualified) */
+type make_pointer_type(type t);
+
+/* Return type 'array [size] of t'. size is optional */
+type make_array_type(type t, expression size);
+
+/* Return type 'function with argument types argtypes returning t'.
+   If oldstyle is true, this is an oldstyle function type and
+   argtypes is NULL */
+type make_function_type(type t, typelist argtypes, bool varargs, bool oldstyle);
+
+type build_function_type(region r, type returns, ...);
+
+/* Return the tagged type whose declaration is d */
+type make_tagged_type(tag_declaration d);
+
+typelist new_typelist(region r);
+void typelist_append(typelist l, type t);
+
+bool empty_typelist(typelist l);
+
+/* Scanning */
+typedef struct typelist_element *typelist_scanner;
+void typelist_scan(typelist tl, typelist_scanner *scanner);
+type typelist_next(typelist_scanner *scanner);
+
+/* Size and alignment */
+cval type_size(type t); /* Requires: type_size_cc(t) */
+cval type_alignment(type t);
+largest_uint type_size_int(type t);
+/* Requires: type_size_cc(t) && cval_isinteger(type_size(t))
+     (i.e., t not variable or unknown size)
+   Returns: size of t
+*/
+
+/* True if t has a size (void or not incomplete) */
+bool type_has_size(type t);
+/* True if the sizeof of t is a compile-time constant */
+bool type_size_cc(type t);
+/* Note: type_size_cc => type_has_size */
+
+type common_type(type t1, type t2);
+
+bool type_equal(type t1, type t2);
+bool type_equal_unqualified(type t1, type t2);
+bool type_compatible(type t1, type t2);
+bool type_compatible_unqualified(type t1, type t2);
+
+/* Return TRUE if T is not affected by default promotions.  */
+bool type_self_promoting(type t);
+
+bool type_incomplete(type t);
+
+/* Return name of qualifier q (must not be a qualifier set) */
+char *qualifier_name(type_quals q);
+
+type_quals type_qualifiers(type t);
+#define Q(name, kind, tq, val) bool type_ ## name(type t);
+#include "qualifiers.h"
+#undef Q
+bool type_transparent(type t);
+bool type_readonly(type t);
+
+bool type_plain_char(type t);
+bool type_signed_char(type t);
+bool type_unsigned_char(type t);
+bool type_short(type t);
+bool type_unsigned_short(type t);
+bool type_int(type t);
+bool type_unsigned_int(type t);
+bool type_long(type t);
+bool type_unsigned_long(type t);
+bool type_long_long(type t);
+bool type_unsigned_long_long(type t);
+bool type_unknown_int(type t);
+bool type_long_double(type t);
+bool type_unknown_number(type t);
+bool type_unknown(type t); /* unknown_int or unknown_number */
+
+bool type_tagged(type t);
+bool type_integral(type t);    /* Does not include enum's */
+bool type_floating(type t);
+bool type_complex(type t);
+bool type_float(type t);
+bool type_double(type t);
+bool type_void(type t);
+bool type_char(type t);
+bool type_function(type t);
+bool type_array(type t);
+bool type_pointer(type t);
+bool type_enum(type t);
+bool type_struct(type t);
+bool type_attribute(type t);   /* For internal use for @attributes */
+bool type_union(type t);
+bool type_integer(type t);     /* Does include enum's */
+bool type_unsigned(type t);
+bool type_smallerthanint(type t);
+bool type_real(type t);
+bool type_arithmetic(type t);
+bool type_scalar(type t);
+bool type_aggregate(type t);   /* struct or union */
+
+type make_unsigned_type(type t);
+
+type type_function_return_type(type t);
+typelist type_function_arguments(type t);
+bool type_function_varargs(type t);
+bool type_function_oldstyle(type t);
+
+/* Return TRUE if function type FNTYPE specifies a fixed number of parameters
+   and none of their types is affected by default promotions.  */
+bool self_promoting_args(type fntype);
+
+type type_points_to(type t);
+type type_array_of(type t);
+type type_array_of_base(type t);
+expression type_array_size(type t);
+cval type_array_size_cval(type t);
+/* Returns: number of elements in array type t if known, cval_top otherwise */
+tag_declaration type_tag(type t);
+type type_base(type t);
+
+/* Build AST nodes such that "MODIFIERS D" represents the declaration of
+   "T INSIDE", at location loc, allocating in region r */
+void type2ast(region r, location loc, type t, declarator inside,
+             declarator *d, type_element *modifiers);
+
+bool type_contains_pointers(type t);
+bool type_contains_cross_pointers(type t);
+bool type_contains_qualified_pointers(type t); /* True if any sameregion/traditional ptrs */
+bool type_contains_union_with_pointers(type t);
+
+type type_default_conversion(type from);
+type type_default_conversion_for_assignment(type from);
+type function_call_type(function_call fcall);
+
+void name_tag(tag_declaration tag);
+
+/* Return the integral type of size 'size', unsigned if 'isunsigned' is true */
+type type_for_size(cval size, bool isunsigned);
+
+type type_for_cval(cval c, bool isunsigned);
+
+/* nesc type extensions */
+type make_interface_type(data_declaration itype);
+bool type_interface(type t);
+data_declaration type_iref(type t);
+
+type make_component_type(data_declaration ctype);
+bool type_component(type t);
+data_declaration type_cref(type t);
+
+/* Similar to functions, but different to avoid surprising behaviour... */
+bool type_command(type t);
+bool type_event(type t);
+bool type_task(type t);
+bool type_functional(type t); /* all of the above, and type_function */
+
+bool type_generic(type t); /* for generic interfaces */
+
+type make_command_type(type t, typelist argtypes, bool varargs);
+type make_event_type(type t, typelist argtypes, bool varargs);
+type make_task_type(type t, typelist argtypes, bool varargs);
+type make_generic_type(type t, typelist argtypes);
+
+type make_combiner_type(type t, data_declaration combiner);
+data_declaration type_combiner(type t);
+
+bool type_network_base_type(type t);
+bool type_network(type t);
+type type_network_platform_type(type t);
+/* Requires: type_network_base_type(t)
+   Returns: A non-network type with the same size and signedness as t
+     Note that such a type is platform-dependent
+*/
+
+/* Type variables */
+type make_variable_type(data_declaration tdecl);
+/* Requires: tdecl->kind == decl_typedef.
+*/
+
+bool type_variable(type t);
+data_declaration type_variable_decl(type t);
+
+type instantiate_type(type t);
+/* Effects: Instantiate a type with type variables based on the instantiation
+     of the variables and tag declarations. These are found in 
+       type_variable_decl(vartype)->instantiation->type for variables
+       type_tag(tagtype)->instantiation for tags
+   Returns: The instantiated type
+*/
+
+typelist instantiate_typelist(typelist old);
+/* Returns: An instantiated copy of typelist old, allocated in the same
+     region
+*/
+
+const char *type_name(region r, type t);
+
+unsigned long type_hash(type t);
+
+bool type_contains(type parent, type child);
+
+bool type_charstar(type t);
+bool type_chararray(type t, bool no_size_allowed);
+bool type_wchararray(type t, bool no_size_allowed);
+void nxml_type(type t);
+/* Effects: Outputs XML representation of type t.
+*/
+void nxml_typelist(const char *name, typelist types);
+/* Effects: Outputs XML representartion of typelist types wrapped in tag 'name'
+*/
+
+type type_for_mode(const char *mode, bool isunsigned);
+/* Returns: type (unsigned if 'unsigned' is TRUE) corresponding to the
+     specified mode
+*/
+
+#endif
diff --git a/src/unparse.c b/src/unparse.c
new file mode 100644 (file)
index 0000000..432ae96
--- /dev/null
@@ -0,0 +1,2429 @@
+/* This file is part of the nesC compiler. 
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "parser.h"
+#include "unparse.h"
+#include "semantics.h"
+#include "constants.h"
+#include "AST_utils.h"
+#include "errors.h"
+#include "nesc-semantics.h"
+#include "nesc-magic.h"
+#include "nesc-network.h"
+
+/* Set this to 1 to avoid warnings from gcc about paren use with
+   -Wparentheses */
+#define CONSERVATIVE_PARENS 1
+
+/* Pick an indentation amount */
+#define INDENT 2
+
+/* The output file for unparsing */
+static FILE *of;
+static FILE *symf; /* for symbol info */
+static bool no_line_directives;
+static int indent_level;
+static struct location output_loc;
+static location fixed_location;
+static bool at_line_start;
+
+/* separator used between module name and function name */
+static char *function_separator = "$";
+
+/* modify behavior of low-level functions when printing docs */
+static bool documentation_mode;
+
+/* List of lines to output at start of file */
+static dd_list unparse_header;
+
+typedef struct prt_closure {
+  void (*fn)(struct prt_closure *closure);
+
+  const char *name;
+  struct prt_closure *parent;
+} *prt_closure;
+
+void indent(void)
+{
+  indent_level += INDENT;
+}
+
+void unindent(void)
+{
+  indent_level -= INDENT;
+}
+
+static void output_indentation(void)
+{
+  int i;
+
+  for (i = 0; i < indent_level; i++) putc(' ', of);
+}
+
+void newline(void)
+{
+  putc('\n', of);
+  at_line_start = TRUE;
+  if (fixed_location)
+    fprintf(of, "#line %lu\n", fixed_location->lineno);
+  else
+    output_loc.lineno++;
+}
+
+void startline(void)
+{
+  if (!at_line_start) newline();
+}
+
+void startline_noindent(void)
+{
+  startline();
+  at_line_start = FALSE;
+}
+
+static void output_indent_if_needed(void)
+{
+  if (at_line_start)
+    {
+      at_line_start = FALSE;
+      output_indentation();
+    }
+}
+
+static void voutput(char *format, va_list args)
+{
+  output_indent_if_needed();
+  vfprintf(of, format, args);
+}
+
+void output(char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  voutput(format, args);
+  va_end(args);
+}
+
+void outputln(char *format, ...)
+{
+  va_list args;
+
+  va_start(args, format);
+  voutput(format, args);
+  va_end(args);
+
+  newline();
+}
+
+void output_quoted(const char *s)
+{
+  /* Output a string which may contain newlines, \ and " */
+  while (*s)
+    {
+      if (*s == '\n') /* don't confuse the line numbers */
+       fputs("\\n", of);
+      else 
+       {
+         if (*s == '\\' || *s == '"')
+           putc('\\', of);
+         putc(*s, of);
+       }
+      s++;
+    }
+}
+
+
+void output_quoted_cs(cstring s)
+{
+  /* Output a string which may contain newlines, \ and " */
+  int i;
+
+  for (i = 0; i < s.length; i++)
+    {
+      char c = s.data[i];
+
+      if (c == '\n') /* don't confuse the line numbers */
+       fputs("\\n", of);
+      else if ((unsigned char)c == c && isprint(c))
+       {
+         if (c == '\\' || c == '"')
+           putc('\\', of);
+         putc(c, of);
+       }
+      else 
+       /* The "" at the end avoids confusion if the next character
+          is '0'-'9', 'a'-'f' or 'A'-'F' */
+       output("\\x%lx\"\"", (unsigned long)c);
+    }
+}
+
+
+/**
+ * copy a file to the output stream.
+ **/
+void copy_file_to_output(char *filename)
+{
+  char buf[1024 * 4];
+  FILE *infile = fopen(filename, "r");
+  size_t nread;
+  size_t nwritten;
+  assert(infile);
+  
+  while( !feof(infile) ) {
+    nread = fread(buf, 1, sizeof(buf), infile);
+    assert( !ferror(infile) );
+    if(nread > 0) {
+      nwritten = fwrite(buf, 1, nread, of);
+      assert( !ferror(of) );
+      assert(nwritten == nread);
+    }
+  }
+
+  fclose(infile);
+}
+
+#define STRIP_PREFIX "__nesc_keyword_"
+#define STRIP_PREFIX_LEN (sizeof(STRIP_PREFIX) - 1)
+
+void output_stripped_cstring(cstring s)
+{
+  output_indent_if_needed();
+  if (strncmp(s.data, STRIP_PREFIX, STRIP_PREFIX_LEN) == 0)
+    fwrite(s.data + STRIP_PREFIX_LEN, s.length - STRIP_PREFIX_LEN, 1, of);
+  else
+    fwrite(s.data, s.length, 1, of);
+}
+
+void output_cstring(cstring s)
+{
+  output_indent_if_needed();
+  fwrite(s.data, s.length, 1, of);
+}
+
+void output_string(const char *s)
+{
+  output_indent_if_needed();
+  fwrite(s, strlen(s), 1, of);
+}
+
+void print_stripped_string(FILE *f, const char *s)
+{
+  if (strncmp(s, STRIP_PREFIX, STRIP_PREFIX_LEN) == 0)
+    fputs(s + STRIP_PREFIX_LEN, f);
+  else
+    fputs(s, f);
+}
+
+void output_stripped_string(const char *s)
+{
+  output_indent_if_needed();
+  print_stripped_string(of, s);
+}
+
+void output_stripped_string_dollar(const char *s)
+{
+  output_stripped_string(s);
+  output_string(function_separator);
+}
+
+static void output_line_directive(location l, bool include_filename)
+{
+  if (fixed_location)
+    return;
+
+  startline_noindent();
+  if (include_filename)
+    {
+      output("# %lu \"", l->lineno);
+      output_quoted(l->filename);
+      outputln("\"%s", l->in_system_header ? " 3" : "");
+    }
+  else
+    outputln("#line %lu", l->lineno);
+
+  output_loc = *l;
+}
+
+void set_location(location l)
+{
+  /* Ignore dummy locations */
+  if (l->filename == dummy_location->filename || no_line_directives)
+    return;
+
+  if ((l->filename != output_loc.filename &&
+       strcmp(l->filename, output_loc.filename)) ||
+      l->in_system_header != output_loc.in_system_header)
+    output_line_directive(l, TRUE);
+  else if (output_loc.lineno != l->lineno)
+    {
+      /* Just send some newlines for small changes */
+      if (!fixed_location &&
+         output_loc.lineno < l->lineno && output_loc.lineno + 10 >= l->lineno)
+       {
+         while (output_loc.lineno != l->lineno)
+           newline();
+       }
+      else
+       output_line_directive(l, FALSE);
+    }
+}
+
+void set_fixed_location(location l)
+{
+  assert(l->filename != dummy_location->filename);
+
+  set_location(l);
+  fixed_location = l;
+}
+
+void clear_fixed_location(void)
+{
+  fixed_location = NULL;
+}
+
+struct location output_location(void)
+{
+  return output_loc;
+}
+
+static void output_complex(known_cst c)
+{
+  assert(0);
+}
+
+void output_constant(known_cst c)
+/* Requires: (constant_integral(c) || constant_float(c)) &&
+            type_arithmetic(c->type)
+            or c denotes a string constant && type_chararray(c->type, FALSE)
+   Effects: prints a parsable representable of c to f
+ */
+{
+  type t = c->type;
+
+  if (type_complex(t))
+    {
+      output_complex(c);
+      return;
+    }
+
+  if (type_floating(t))
+    {
+      /* XXX: hacky version */
+      output("%.20Le", constant_float_value(c));
+    }
+  else if (type_chararray(t, FALSE))
+    {
+      data_declaration ddecl = cval_ddecl(c->cval);
+
+      assert(ddecl && ddecl->kind == decl_magic_string);
+      output("\"");
+      /* FIXME we ignore wide char issues, just outputting the raw bytes - 
+        this should be ok for now as we don't actually allow wide-char
+        strings as arguments to generics anyway */
+      output_quoted_cs(ddecl->schars);
+      output("\"");
+    }
+  else
+    {
+      assert(type_integral(t));
+
+      if (type_unsigned(t))
+       output("%llu", constant_uint_value(c));
+      else
+       output("%lld", constant_sint_value(c));
+
+      if (type_size_int(t) <= type_size_int(int_type))
+       {
+         if (type_unsigned(t))
+           output("U");
+       }
+      else if (type_long(t))
+       output("L");
+      else if (type_unsigned_long(t))
+       output("UL");
+      else if (type_long_long(t))
+       output("LL");
+      else if (type_unsigned_long_long(t))
+       output("ULL");
+      else
+       assert(0);
+    }
+}
+
+void prt_toplevel_declarations(declaration dlist);
+void prt_toplevel_declaration(declaration d);
+void prt_asm_decl(asm_decl d);
+void prt_extension_decl(extension_decl d);
+void prt_data_decl(data_decl d);
+void prt_ellipsis_decl(ellipsis_decl d);
+void prt_function_decl(function_decl d);
+void prt_variable_decl(type_element modifier, variable_decl d,
+                      psd_options options);
+void prt_interesting_elements(type_element elements, psd_options options);
+void prt_type_elements(type_element elements, psd_options options);
+bool prt_type_element(type_element em, psd_options options);
+void prt_attribute_elements(type_element elements);
+bool prt_attribute_element(type_element em);
+void prt_typename(typename tname, psd_options options);
+void prt_typeof_expr(typeof_expr texpr);
+void prt_typeof_type(typeof_type ttype);
+void prt_gcc_attribute(gcc_attribute a);
+void prt_nesc_attribute(nesc_attribute a);
+void prt_rid(rid r, psd_options options);
+void prt_qualifier(qualifier q);
+void prt_tag_ref(tag_ref sr, psd_options options);
+void prt_fields(declaration flist);
+void prt_enumerators(declaration elist, tag_declaration ddecl);
+void prt_field_declaration(declaration d);
+void prt_field_extension_decl(extension_decl d);
+void prt_field_data_decl(data_decl d);
+void prt_field_decl(field_decl fd);
+void prt_enumerator(enumerator ed, tag_declaration ddecl);
+void prt_asttype(asttype t);
+void prt_word(word w);
+
+void prt_expressions(expression elist, bool isfirst);
+void prt_expression(expression e, int context_priority);
+void prt_comma(comma e, int context_priority);
+void prt_sizeof_type(sizeof_type e, int context_priority);
+void prt_alignof_type(alignof_type e, int context_priority);
+void prt_label_address(label_address e, int context_priority);
+void prt_cast(cast e, int context_priority);
+void prt_cast_list(cast_list e, int context_priority);
+void prt_conditional(conditional e, int context_priority);
+void prt_identifier(identifier e, int context_priority);
+void prt_compound_expr(compound_expr e, int context_priority);
+void prt_function_call(function_call e, int context_priority);
+void prt_generic_call(generic_call e, int context_priority);
+void prt_array_ref(array_ref e, int context_priority);
+void prt_interface_deref(interface_deref e, int context_priority);
+void prt_field_ref(field_ref e, int context_priority);
+void prt_unary(unary e, int context_priority);
+void prt_binary(binary e, int context_priority);
+void prt_init_list(init_list e, int context_priority);
+void prt_init_specific(init_specific e, int context_priority);
+void prt_lexical_cst(lexical_cst e, int context_priority);
+void prt_string(string e, int context_priority);
+void prt_parameter_declarations(declaration dlist);
+void prt_parameter_declaration(declaration d);
+
+void prt_statement(statement s);
+void prt_compound_stmt(compound_stmt s, bool trusted);
+void prt_compound_declarations(declaration dlist);
+void prt_compound_declaration(declaration d);
+void prt_asm_stmt(asm_stmt s);
+void prt_asm_stmt_plain(asm_stmt s);
+void prt_asm_operands(asm_operand olist);
+void prt_asm_operand(asm_operand o);
+void prt_if_stmt(if_stmt s);
+void prt_labeled_stmt(labeled_stmt s);
+void prt_expression_stmt(expression_stmt s);
+void prt_while_stmt(while_stmt s);
+void prt_dowhile_stmt(while_stmt s);
+void prt_switch_stmt(switch_stmt s);
+void prt_for_stmt(for_stmt s);
+void prt_break_stmt(break_stmt s);
+void prt_continue_stmt(continue_stmt s);
+void prt_return_stmt(return_stmt s);
+void prt_goto_stmt(goto_stmt s);
+void prt_computed_goto_stmt(computed_goto_stmt s);
+void prt_empty_stmt(empty_stmt s);
+void prt_atomic_stmt(atomic_stmt s);
+
+void prt_label(label l);
+void prt_id_label(id_label l);
+void prt_case_label(case_label l);
+void prt_default_label(default_label l);
+
+void prt_regionof(expression e);
+
+region unparse_region;
+
+void unparse_start(FILE *to, FILE *symbols)
+{
+  dd_list_pos header_line;
+
+  of = to;
+  symf = symbols;
+  output_loc = *dummy_location;
+  at_line_start = TRUE;
+  no_line_directives = FALSE;
+  documentation_mode = FALSE;
+  indent_level = 0;
+  unparse_region = newregion();
+
+  if (unparse_header)
+    dd_scan (header_line, unparse_header)
+      {
+       output_string(DD_GET(const char *, header_line));
+       newline();
+      }
+}
+
+void unparse_end(void) deletes
+{
+  deleteregion_ptr(&unparse_region);
+}
+
+void unparse(FILE *to, declaration program) deletes
+{
+  unparse_start(to, NULL);
+  prt_toplevel_declarations(program);
+  unparse_end();
+}
+
+void unparse_prefix(const char *line)
+{
+  if (!unparse_header)
+    unparse_header = dd_new_list(permanent);
+
+  dd_add_last(permanent, unparse_header, (char *)line);
+}
+
+void enable_line_directives(void)
+{
+  if (no_line_directives)
+    {
+      no_line_directives = FALSE;
+      /* Force #line on next output of some location */
+      output_loc = *dummy_location;
+    }
+}
+
+void disable_line_directives(void)
+{
+  no_line_directives = TRUE;
+}
+
+void set_function_separator(char *sep) 
+{
+  function_separator = sep;
+}
+
+const char *get_function_separator(void)
+{
+  return function_separator;
+}
+
+FILE *set_unparse_outfile(FILE *newout) 
+{
+  FILE *temp = of;
+
+  of = newout;
+  return temp;
+}
+
+void enable_documentation_mode(void) 
+{
+  documentation_mode = TRUE;
+}
+
+void disable_documentation_mode(void)
+{
+  documentation_mode = FALSE;
+}
+
+void prt_toplevel_declarations(declaration dlist)
+{
+  declaration d;
+
+  scan_declaration (d, dlist)
+    prt_toplevel_declaration(d);
+}
+
+#define PRTCASE(type, x) case kind_ ## type: prt_ ## type(CAST(type, (x))); return
+
+void prt_toplevel_declaration(declaration d)
+{
+  startline();
+  switch (d->kind)
+    {
+      PRTCASE(asm_decl, d);
+      PRTCASE(data_decl, d);
+      PRTCASE(function_decl, d);
+      PRTCASE(extension_decl, d);
+    case kind_rp_interface: return;
+    case kind_component_ref: return;
+    case kind_eq_connection: return;
+    case kind_rp_connection: return;
+    default: assert(0); break;
+    }
+}
+
+/* Invariant: all declarations end with ; */
+void prt_asm_decl(asm_decl d)
+{
+  prt_asm_stmt(d->asm_stmt);
+}
+
+void prt_extension_decl(extension_decl d)
+{
+  set_location(d->location);
+  output("__extension__ ");
+  prt_toplevel_declaration(d->decl);
+}
+
+void prt_ellipsis_decl(ellipsis_decl d)
+{
+  set_location(d->location);
+  output("...");
+}
+
+static type_element interesting_element(type_element elems)
+{
+  type_element elem;
+
+  scan_type_element (elem, elems)
+    if (is_tag_ref(elem))
+      return elem;
+
+  return NULL;
+}
+
+static void prt_prefix(location loc, data_declaration ddecl,
+                      type_element modifiers)
+{
+  bool pinline = FALSE, pstatic = FALSE;
+  type_element em;
+
+  set_location(loc);
+  /* Hack to add static and inline where necessary */
+  if (ddecl && ddecl->kind == decl_function && !ddecl->isexterninline &&
+      !ddecl->spontaneous && ddecl->definition)
+    {
+      if (ddecl->ftype != function_static)
+       {
+         output("static ");
+         pstatic = TRUE;
+       }
+      if (ddecl->makeinline && flag_no_inline < 2)
+       {
+         output("inline ");
+         pinline = TRUE;
+       }
+    }
+
+  scan_type_element (em, modifiers)
+    if (is_rid(em))
+      {
+       rid r = CAST(rid, em);
+
+       /* Filter-out rids that should not be printed by calling continue */
+       switch (r->id)
+         {
+         default:
+           continue;
+         case RID_EXTERN: case RID_STATIC:
+           if (pstatic)
+             continue;
+           break;
+         case RID_INLINE:
+           if (pinline)
+             continue;
+           break;
+         case RID_REGISTER: case RID_TYPEDEF:
+           break;
+         }
+       set_location(r->location);
+       output("%s ", rid_name(r));
+      }
+}
+                      
+
+void prt_symbol_name(FILE *f, data_declaration ddecl)
+{
+  if (!ddecl->Cname)
+    {
+      if (ddecl->container)
+       {
+         print_stripped_string(f, ddecl->container->name);
+         fputs(function_separator, f);
+       }
+      if (ddecl->kind == decl_function && ddecl->interface)
+       {
+         print_stripped_string(f, ddecl->interface->name);
+         fputs(function_separator, f);
+       }
+      if (!ddecl->defined && ddecl_is_command_or_event(ddecl))
+       fprintf(f, "default%s", function_separator);
+    }
+
+  print_stripped_string(f, ddecl->name);
+}
+
+void prt_attribute_for(data_declaration ddecl)
+{
+  output("__attribute__((section(\".nesc.");
+  prt_symbol_name(of, ddecl);
+  output("\"))) ");
+}
+
+void prt_symbol_info(data_declaration ddecl)
+{
+  if (!ddecl->printed)
+    {
+      ddecl->printed = TRUE;
+      prt_symbol_name(symf, ddecl);
+
+      if (ddecl->kind == decl_function)
+       {
+         if (ddecl->makeinline || ddecl->isinline || ddecl->isexterninline)
+           fprintf(symf, " FNINLINE\n");
+         else
+           fprintf(symf, " FN\n");
+       }
+      else
+       {
+         assert(ddecl->kind == decl_variable);
+         if (ddecl->initialiser)
+           fprintf(symf, " DATA\n");
+         else
+           fprintf(symf, " BSS\n");
+       }
+    }
+}
+
+void prt_diff_info(data_declaration ddecl)
+{
+  if (symf && ddecl && ddecl->needsmemory)
+    {
+      prt_attribute_for(ddecl);
+      prt_symbol_info(ddecl);
+    }
+}
+
+void prt_data_decl(data_decl d)
+{
+  declaration vd;
+  psd_options opts = 0;
+
+  scan_declaration (vd, d->decls)
+    {
+      variable_decl vdd = CAST(variable_decl, vd);
+      data_declaration vdecl = vdd->ddecl;
+      psd_options vopts = opts;
+
+      if (vdecl) /* because build_declaration does not make a
+                   data_declaration */
+       {
+         /* Ignore unused non-local declarations 
+            (local ones might have an initialiser which must still be
+            executed) */
+         if (((vdecl->kind == decl_function || vdecl->kind == decl_variable)
+              && !vdecl->isused && !vdecl->islocal))
+           continue;
+         if (use_nido && is_module_local_static(vdecl))
+           continue;
+
+         if (prt_network_typedef(d, vdd))
+           vopts |= psd_prefix_nxbase;
+
+         if (type_task(vdecl->type) && vdecl->interface)
+           continue;
+       }
+
+      prt_diff_info(vdecl);
+
+      prt_variable_decl(d->modifiers, vdd, vopts);
+      opts |= psd_duplicate;
+      outputln(";");
+    }
+
+  if (!(opts & psd_duplicate))
+    prt_interesting_elements(d->modifiers, opts);
+}
+
+
+void prt_parameter_declarations(declaration dlist)
+{
+  declaration d;
+
+  scan_declaration (d, dlist)
+    prt_parameter_declaration(d);
+}
+
+void prt_parameter_declaration(declaration d)
+{
+  startline();
+  switch (d->kind)
+    {
+      PRTCASE(data_decl, d);
+      PRTCASE(ellipsis_decl, d);
+    default: assert(0); break;
+    }
+}
+
+void prt_function_decl(function_decl d)
+{
+  if (d->ddecl->isused && !d->ddecl->suppress_definition)
+    {
+      function_declarator fd = get_fdeclarator(d->declarator);
+      asttype ret = fd->return_type;
+
+      prt_diff_info(d->ddecl);
+      prt_prefix(d->location, d->ddecl, d->modifiers);
+      if (ret)
+       {
+         prt_attribute_elements(d->modifiers);
+         prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl,
+                        psd_print_default | psd_print_ddecl_fdeclarator);
+       }
+      else
+       prt_declarator(d->declarator, d->modifiers, NULL, d->ddecl,
+                      psd_print_default);
+      if (d->attributes)
+       {
+         output(" ");
+         prt_type_elements(CAST(type_element, d->attributes), 0);
+       }
+      outputln(";");
+    }
+}
+
+void prt_function_body(function_decl d)
+{
+  if (d->ddecl->isused && !d->ddecl->suppress_definition)
+    {
+      function_declarator fd = get_fdeclarator(d->declarator);
+      asttype ret = fd->return_type;
+      bool extrablock;
+
+      /* We set current.function_decl because unparsing may produce error
+        messages */
+      current.function_decl = d;
+      current.container = d->ddecl->container;
+
+      prt_diff_info(d->ddecl);
+      prt_prefix(d->location, d->ddecl, d->modifiers);
+      /* gcc wants the attributes here */
+      prt_type_elements(CAST(type_element, d->attributes), 0);
+
+      if (ret)
+       {
+         prt_attribute_elements(d->modifiers);
+         prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl,
+                        psd_print_default | psd_print_ddecl_fdeclarator);
+       }
+      else
+       prt_declarator(d->declarator, d->modifiers, NULL, d->ddecl,
+                      psd_print_default);
+
+      startline();
+      prt_parameter_declarations(d->old_parms);
+      extrablock = prt_network_parameter_copies(d);
+      assert(is_compound_stmt(d->stmt));
+      prt_compound_stmt(CAST(compound_stmt, d->stmt), !d->ddecl->safe);
+      newline();
+      if (extrablock)
+       {
+         unindent();
+         outputln("}");
+       }
+
+      current.function_decl = d->parent_function;
+    }
+}
+
+void prt_variable_decl(type_element modifiers, variable_decl d,
+                      psd_options options)
+{
+  function_declarator fd = get_fdeclarator(d->declarator);
+  asttype ret;
+
+  prt_prefix(d->location, d->ddecl, modifiers);
+
+  /* Handle nesdoc-overridden return type */
+  if (fd && (ret = fd->return_type))
+    {
+      prt_attribute_elements(modifiers);
+      prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl,
+                    options | psd_print_ddecl_fdeclarator);
+    }
+  else
+    prt_declarator(d->declarator, modifiers, NULL, d->ddecl, options);
+
+  if (d->attributes)
+    {
+      output(" ");
+      prt_type_elements(CAST(type_element, d->attributes), 0);
+    }
+
+  if (d->asm_stmt)
+    prt_asm_stmt_plain(d->asm_stmt);
+
+  if (d->arg1 && !(use_nido && is_module_variable(d->ddecl)))
+    {
+      output(" = ");
+      prt_expression(d->arg1, P_ASSIGN);
+    }
+}
+
+void prt_declarator(declarator d, type_element elements, attribute attributes,
+                   data_declaration ddecl, psd_options options)
+{
+  psd_options te_opts = options & (psd_duplicate | psd_rewrite_nxbase);
+
+  if (d && is_function_declarator(d))
+    te_opts |= psd_rewrite_nxbase;
+  prt_type_elements(elements, te_opts);
+
+  options |= psd_need_paren_for_qual;
+  options &= ~psd_need_paren_for_star;
+  prt_simple_declarator(d, ddecl, options);
+  if (attributes)
+    {
+      output(" ");
+      prt_type_elements(CAST(type_element, attributes), 0);
+    }
+}
+
+void prt_container(nesc_declaration container)
+{
+  if (container->original)
+    /* Put actual container name in a comment for human readers */
+    output("/*%s*/", container->instance_name);
+  output_stripped_string_dollar(container->name);
+}
+
+void prt_plain_ddecl(data_declaration ddecl, psd_options options)
+{
+  if (!ddecl->Cname)
+    {
+      if (ddecl->container && !(options & psd_skip_container))
+       prt_container(ddecl->container);
+      if (/*ddecl->kind == decl_function &&*/ ddecl->interface)
+       output_stripped_string_dollar(ddecl->interface->name);
+      if ((options & psd_print_default) &&
+         !ddecl->defined && ddecl_is_command_or_event(ddecl))
+      {
+       output("default");
+       output_string(function_separator);
+      }
+    }
+
+  /* static local module variables are printed as fn$var in nido */
+  if (use_nido && is_module_local_static(ddecl))
+    {
+      prt_plain_ddecl(ddecl->container_function, 0);
+      output_string(function_separator);
+    }
+
+  if (options & psd_prefix_nxbase)
+    output(NXBASE_PREFIX);
+
+  output_stripped_string(ddecl->name);
+}
+
+void prt_ddecl_full_name(data_declaration ddecl, psd_options options)
+{
+  prt_plain_ddecl(ddecl, options);
+  if (use_nido && is_module_variable(ddecl))
+    output("[%s]", nido_num_nodes);
+}
+
+/* The return value is TRUE iff d is an identifier_declarator possibly
+   prefixed with qualified_declarators */
+bool prt_simple_declarator(declarator d, data_declaration ddecl,
+                          psd_options options)
+{
+  if (!d)
+    {
+      if (options & psd_print_ddecl_fdeclarator)
+       {
+         if (is_function_decl(ddecl->ast))
+           d = CAST(function_decl, ddecl->ast)->declarator;
+         else
+           d = CAST(variable_decl, ddecl->ast)->declarator;
+         d = CAST(declarator, get_fdeclarator(d));
+         options &= ~psd_print_ddecl_fdeclarator;
+       }
+      else
+       {
+         if (options & psd_print_ddecl)
+           prt_ddecl_full_name(ddecl, options);
+         else if (options & psd_rename_identifier)
+           output("arg_%p", ddecl);
+
+         return FALSE;
+       }
+    }
+
+  switch (d->kind)
+    {
+    case kind_function_declarator:
+      {
+       function_declarator fd = CAST(function_declarator, d);
+
+       prt_simple_declarator(fd->declarator, ddecl,
+                             options | psd_need_paren_for_star |
+                             psd_need_paren_for_qual);
+       prt_parameters(fd->gparms ? fd->gparms :
+                      ddecl ? ddecl_get_gparms(ddecl) : NULL,
+                      fd->parms, options & psd_rename_parameters);
+       break;
+      }
+    case kind_array_declarator:
+      {
+       array_declarator ad = CAST(array_declarator, d);
+       bool is_id;
+
+       is_id = prt_simple_declarator(ad->declarator, ddecl,
+                                     options | psd_need_paren_for_star |
+                                     psd_need_paren_for_qual);
+       if (!ad->arg1)
+         {
+           /* The array-type test is necessary because char x[] in a
+              parameter declaration is really a pointer declaration */
+           if (ddecl && is_id && type_array(ddecl->type))
+             {
+               /* This is a declaration of an incomplete array type.
+                  The type of ddecl contains the size of the array if
+                  it is known. 
+                  We need to print the size because of tossim
+                  (a declaration like 'char foo[TOSNODES][]' would
+                  be illegal)
+               */
+               expression dsize = type_array_size(ddecl->type);
+
+               if (dsize)
+                 output("[%lu]",
+                        (unsigned long)constant_uint_value(dsize->cst));
+               else /* we never found the size */
+                 output("[]");
+             }
+           else
+             output("[]");
+         }
+       else
+         {
+           set_location(ad->arg1->location);
+           output("[");
+           prt_expression(ad->arg1, P_TOP);
+           output("]");
+         }
+       break;
+      }
+    case kind_qualified_declarator:
+      {
+       qualified_declarator qd = CAST(qualified_declarator, d);
+       bool is_id;
+
+       set_location(qd->modifiers->location);
+       if (options & psd_need_paren_for_qual)
+         output("(");
+       prt_type_elements(qd->modifiers, 0);
+       is_id = prt_simple_declarator(qd->declarator, ddecl,
+                                     options & ~psd_need_paren_for_qual);
+       if (options & psd_need_paren_for_qual)
+         output(")");
+       return is_id;
+      }
+    case kind_pointer_declarator:
+      {
+       pointer_declarator pd = CAST(pointer_declarator, d);
+
+       if (options & psd_need_paren_for_star)
+         output("(");
+       output("*");
+       prt_simple_declarator(pd->declarator, ddecl,
+                             options & ~(psd_need_paren_for_star |
+                                         psd_need_paren_for_qual));
+       if (options & psd_need_paren_for_star)
+         output(")");
+       break;
+      }
+    case kind_identifier_declarator:
+      set_location(d->location);
+      if (options & psd_rename_identifier)
+       output("arg_%p", ddecl);
+      else if (ddecl)
+       {
+         prt_ddecl_full_name(ddecl, options);
+         /* check that we printed the symbol info (too late if we get
+            here) */
+         assert(!(symf && ddecl->needsmemory && !ddecl->printed));
+       }
+      else
+       output_stripped_cstring(CAST(identifier_declarator, d)->cstring);
+      return TRUE;
+
+    case kind_interface_ref_declarator:
+      prt_simple_declarator(CAST(interface_ref_declarator, d)->declarator,
+                           ddecl, options | psd_need_paren_for_star |
+                           psd_need_paren_for_qual);
+      break;
+
+    default: assert(0); break;
+    }
+  return FALSE;
+}
+
+void prt_type_elements(type_element elements, psd_options options)
+{
+  type_element em;
+
+  scan_type_element (em, elements)
+    {
+      if (prt_type_element(em, options))
+       output(" ");
+    }
+}
+
+void prt_attribute_elements(type_element elements)
+{
+  type_element em;
+
+  scan_type_element (em, elements)
+    {
+      if (prt_attribute_element(em))
+       output(" ");
+    }
+}
+
+void prt_interesting_elements(type_element elements, psd_options options)
+{
+  type_element interesting = interesting_element(elements);
+
+  if (interesting)
+    {
+      prt_type_element(interesting, options);
+      outputln(";");
+    }
+}
+
+bool prt_type_element(type_element em, psd_options options)
+{
+  switch (em->kind)
+    {
+    case kind_component_typeref: /* fall through to prt_typename */
+    case kind_typename: prt_typename(CAST(typename, em), options); break;
+    case kind_typeof_expr: prt_typeof_expr(CAST(typeof_expr, em)); break;
+    case kind_typeof_type: prt_typeof_type(CAST(typeof_type, em)); break;
+    case kind_gcc_attribute: prt_gcc_attribute(CAST(gcc_attribute, em)); break;
+    case kind_nesc_attribute: prt_nesc_attribute(CAST(nesc_attribute, em)); break;
+    case kind_qualifier: prt_qualifier(CAST(qualifier, em)); break;
+    case kind_rid:
+      {
+       rid r = CAST(rid, em);
+
+       if (!documentation_mode && r->id >= RID_LASTTYPE)
+         return FALSE;
+       prt_rid(r, options);
+       break;
+      }    
+    default:
+      if (is_tag_ref(em))
+       prt_tag_ref(CAST(tag_ref, em), options);
+      else
+       assert(0);
+      break;
+    }
+  return TRUE;
+}
+
+bool prt_attribute_element(type_element em)
+{
+  switch (em->kind)
+    {
+    case kind_gcc_attribute: 
+      prt_gcc_attribute(CAST(gcc_attribute, em)); 
+      return TRUE;
+    case kind_nesc_attribute:
+      prt_nesc_attribute(CAST(nesc_attribute, em)); 
+      return TRUE;
+    default:
+      return FALSE;
+    }
+}
+
+void prt_typename(typename tname, psd_options options)
+{
+  data_declaration tdecl = tname->ddecl;
+  psd_options newopts = 0;
+
+  set_location(tname->location);
+  if (type_network_base_type(tdecl->type) && (options & psd_rewrite_nxbase))
+    newopts |= psd_prefix_nxbase;
+  prt_plain_ddecl(tdecl, newopts);
+}
+
+void prt_typeof_expr(typeof_expr texpr)
+{
+  set_location(texpr->location);
+  output("typeof(");
+  prt_expression(texpr->arg1, P_TOP);
+  output(")");
+}
+
+void prt_typeof_type(typeof_type ttype)
+{
+  set_location(ttype->location);
+  output("typeof(");
+  prt_asttype(ttype->asttype);
+  output(")");
+}
+
+void prt_gcc_attribute(gcc_attribute a)
+{
+  if (!nesc_attributep(a))
+    {
+      set_location(a->location);
+      output("__attribute((");
+      prt_word(a->word1);
+      if (a->args)
+       {
+         output("(");
+         prt_expressions(a->args, TRUE);
+         output(")");
+       }
+      output("))");
+    }
+}
+
+void prt_nesc_attribute(nesc_attribute a)
+{
+  /* If the attribute has a macro_name, then print attribute like
+     a macro call. If not, just ignore the attribute. */
+  if (a->tdecl->macro_name)
+    {
+      init_list args = CAST(init_list, a->arg1);
+      expression e;
+      int count = 0, field_count = 0;
+      field_declaration field;
+
+      /* This code checks that the attribute can be printed as a
+        macro call, i.e., that complex initializers are not used
+        and that all fields have an initializer - this is done here
+        because it seems easier than enforcing these rules elsewhere
+      */
+      set_location(a->location);
+      output("%s(", a->tdecl->macro_name);
+
+      /* Like prt_expressions, but check that we can rewrite what was
+        a structure initializer as arguments to a macro */
+      scan_expression (e, args->args)
+       {
+         if (count > 0) output(", ");
+         count++;
+         if (is_init_list(e) || is_init_specific(e))
+           error_with_location(e->location, "complex initializers not allowed with @macro() attributes");
+         prt_expression(e, P_ASSIGN); /* priority is that of assignment */
+       }
+
+      output(")");
+
+      /* Check that all arguments are specified, so that the macro
+        gets the same argument count on all uses. Could extend to
+        "at least enough" arguments to allow the case of a variably-sized
+        array at the end of the attribute, and a variable-argument macro
+      */
+      for (field = a->tdecl->fieldlist; field; field = field->next)
+       field_count++;
+      if (field_count != count)
+       error_with_location(a->location, "incorrect argument count to @macro() attribute");
+    }
+}
+
+void prt_rid(rid r, psd_options options)
+{
+  switch (r->id)
+    {
+    case RID_COMMAND: case RID_EVENT: case RID_TASK: case RID_ASYNC:
+    case RID_NORACE:
+      // show these in documenation mode, but not otherwise
+      if (documentation_mode && !(options & psd_skip_command_event)) 
+       output("%s", rid_name(r));
+      break;
+    case RID_DEFAULT:
+      break;
+    case RID_EXTERN:
+      if (options & psd_noextern)
+       return;
+      /* FALLTHROUGH */
+    default:
+      set_location(r->location);
+      output("%s", rid_name(r));
+      break;
+    }
+}
+
+void prt_qualifier(qualifier q)
+{
+  set_location(q->location);
+  output("%s", qualifier_name(q->id));
+}
+
+void prt_tag_ref(tag_ref tr, psd_options options)
+{
+  /* We must not name anonymous struct/unions (those which are collapsed
+     into a containing struct/union) as that would make them non-anonymous
+     (in gcc 3.3 and following) */
+  if (!tr->tdecl->collapsed)
+    name_tag(tr->tdecl);
+
+  /* We just print attributes as structs, with a prefix on the name
+     (__nesc_attr_). They will be ignored by the C compiler. */
+  set_location(tr->location);
+  /* There's a #define for nx_struct, nx_union in the header (this is not
+     an issue as these are keywords) */
+  if (tr->kind == kind_attribute_ref)
+    output("struct ");
+  else
+    output("%s ", tagkind_name(tr->kind));
+
+  if (tr->word1)
+    {
+      if (tr->tdecl && tr->tdecl->container && !tr->tdecl->Cname)
+       prt_container(tr->tdecl->container);
+      if (tr->kind == kind_attribute_ref)
+       output("__nesc_attr_");
+      prt_word(tr->word1);
+    }
+  if (!(options & psd_duplicate) && tr->defined)
+    {
+      if (tr->kind == kind_enum_ref)
+        prt_enumerators(tr->fields, tr->tdecl);
+      else if (type_network(make_tagged_type(tr->tdecl)))
+       prt_network_fields(tr);
+      else
+       prt_fields(tr->fields);
+    }
+  if (tr->attributes)
+    {
+      output(" ");
+      prt_type_elements(CAST(type_element, tr->attributes), 0);
+    }
+}
+
+void prt_enumerators(declaration elist, tag_declaration tdecl)
+{
+  declaration d;
+
+  output(" {");
+  indent();
+  startline();
+  scan_declaration (d, elist)
+    {
+      prt_enumerator(CAST(enumerator, d), tdecl);
+      if (d->next)
+       output(", ");
+    }
+  unindent();
+  startline();
+  output("}");
+}
+
+void prt_fields(declaration flist)
+{
+  declaration d;
+
+  output(" {");
+  indent();
+  startline();
+  scan_declaration (d, flist)
+    prt_field_declaration(d);
+  unindent();
+  startline();
+  output("}");
+}
+
+void prt_field_declaration(declaration d)
+{
+  if (is_extension_decl(d))
+    prt_field_extension_decl(CAST(extension_decl, d));
+  else
+    prt_field_data_decl(CAST(data_decl, d));
+}
+
+void prt_field_extension_decl(extension_decl d)
+{
+  set_location(d->location);
+  output("__extension__ ");
+  prt_field_declaration(d->decl);
+}
+
+void prt_field_data_decl(data_decl d)
+{
+  declaration fd;
+
+  prt_type_elements(d->modifiers, 0);
+
+  scan_declaration (fd, d->decls)
+    {
+      prt_field_decl(CAST(field_decl, fd));
+      if (fd->next)
+       output(", ");
+    }
+  outputln(";");
+}
+
+void prt_field_decl(field_decl fd)
+{
+  prt_declarator(fd->declarator, NULL, fd->attributes, NULL, 0);
+  if (fd->arg1)
+    {
+      output(" : ");
+      prt_expression(fd->arg1, P_TOP);
+    }
+}
+
+void prt_enumerator(enumerator ed, tag_declaration tdecl)
+{
+  set_location(ed->location);
+
+  if (tdecl && tdecl->container)
+    output_stripped_string_dollar(tdecl->container->name);
+
+  output_stripped_cstring(ed->cstring);
+  if (ed->arg1)
+    {
+      output(" = ");
+      prt_expression(ed->arg1, P_ASSIGN);
+    }
+}
+
+void prt_parameters(declaration gparms, declaration parms, psd_options options)
+{
+  declaration d;
+  bool forward = FALSE;
+  bool first = TRUE;
+
+  /* If asked to rename parameters, ask prt_parameter to rename identifiers
+     when calling prt_declarator */
+  if (options & psd_rename_parameters)
+    options = psd_rename_identifier;
+  else
+    options = 0;
+
+  output("(");
+  scan_declaration (d, gparms)
+    {
+      prt_parameter(d, first, FALSE, options);
+      first = FALSE;
+    }
+  if (!(gparms && is_void_parms(parms)))
+    scan_declaration (d, parms)
+      {
+       forward = prt_parameter(d, first, forward, 0);
+       first = FALSE;
+      }
+  output(")");
+}
+
+bool prt_parameter(declaration parm, bool first, bool lastforward,
+                  psd_options options)
+{
+  switch (parm->kind)
+    {
+    case kind_oldidentifier_decl:
+      if (!first)
+       output(", ");
+      set_location(parm->location);
+      output_stripped_cstring(CAST(oldidentifier_decl, parm)->cstring);
+      return FALSE;
+    case kind_ellipsis_decl:
+      if (!first)
+       output(", ");
+      set_location(parm->location);
+      output("...");
+      return FALSE;
+    case kind_data_decl:
+      {
+       data_decl dd = CAST(data_decl, parm);
+       variable_decl vd = CAST(variable_decl, dd->decls);
+
+       if (lastforward && !vd->forward)
+         output("; ");
+       else if (!first)
+         output(", ");
+       if (vd->ddecl && type_network_base_type(vd->ddecl->type))
+         {
+           options |= psd_rewrite_nxbase;
+           /* If addressed, we need a real network type copy. This is
+              added by prt_network_parameter_copies, so we rename
+              the actual parameter */
+           if (vd->ddecl->use_summary & c_addressed)
+             options |= psd_prefix_nxbase;
+         }
+       /* Force a name for the parameter when none is given */
+       if (vd->ddecl && !vd->ddecl->name)
+         options |= psd_rename_identifier;
+       prt_declarator(vd->declarator, dd->modifiers, vd->attributes,
+                      vd->ddecl, options);
+
+       return vd->forward;
+      }
+    default: assert(0); return FALSE;
+    }
+}
+
+void prt_asttype(asttype t)
+{
+  prt_declarator(t->declarator, t->qualifiers, NULL, NULL, 0);
+}
+
+void prt_word(word w)
+{
+  set_location(w->location);
+  output_stripped_cstring(w->cstring);
+}
+
+void prt_expressions(expression elist, bool isfirst)
+{
+  expression e;
+
+  scan_expression (e, elist)
+    {
+      if (!isfirst) output(", ");
+      isfirst = FALSE;
+      prt_expression(e, P_ASSIGN); /* priority is that of assignment */
+    }
+}
+
+#define PRTEXPR(type, x) case kind_ ## type: prt_ ## type(CAST(type, (x)), context_priority); return
+
+/* Context priorities are that of the containing operator, starting at 0
+   for , going up to 14 for ->, . See the symbolic P_XX constants 
+   P_TOP (-1) is used for contexts with no priority restrictions. */
+
+void prt_expression_helper(expression e, int context_priority)
+{
+#if 0
+  /* Turned on for debugging sometimes. */
+  if (e->cst && constant_integral(e->cst) && type_integral(e->cst->type))
+    {
+      output_constant(e->cst);
+      return;
+    }
+#endif
+  switch (e->kind) 
+    {
+      PRTEXPR(comma, e);
+      PRTEXPR(sizeof_type, e);
+      PRTEXPR(alignof_type, e);
+      PRTEXPR(label_address, e);
+      PRTEXPR(cast, e);
+      PRTEXPR(cast_list, e);
+      PRTEXPR(conditional, e);
+      PRTEXPR(identifier, e);
+      PRTEXPR(compound_expr, e);
+      PRTEXPR(function_call, e);
+      PRTEXPR(generic_call, e);
+      PRTEXPR(array_ref, e);
+      PRTEXPR(field_ref, e);
+      PRTEXPR(interface_deref, e);
+      PRTEXPR(init_list, e);
+      PRTEXPR(init_specific, e);
+    case kind_string_cst:
+      PRTEXPR(lexical_cst, e);
+      PRTEXPR(string, e);
+    default: 
+      if (is_unary(e))
+       {
+         prt_unary(CAST(unary, e), context_priority);
+         return;
+       }
+      assert(is_binary(e));
+      prt_binary(CAST(binary, e), context_priority);
+      return;
+    }
+}
+
+void prt_expression(expression e, int context_priority) 
+{
+  if (!prt_network_expression(e))
+    prt_expression_helper(e, context_priority);
+}
+
+#define OPEN(pri) \
+  if (pri < context_priority) \
+    output("(")
+
+#define CLOSE(pri) \
+  if (pri < context_priority) \
+    output(")")
+
+void prt_comma(comma e, int context_priority)
+{
+  OPEN(P_COMMA);
+  prt_expressions(e->arg1, TRUE);
+  CLOSE(P_COMMA);
+}
+
+void prt_sizeof_type(sizeof_type e, int context_priority)
+{
+  set_location(e->location);
+  output("sizeof(");
+  prt_asttype(e->asttype);
+  output(")");
+}
+
+void prt_alignof_type(alignof_type e, int context_priority)
+{
+  set_location(e->location);
+  output("__alignof__(");
+  prt_asttype(e->asttype);
+  output(")");
+}
+
+void prt_label_address(label_address e, int context_priority)
+{
+  set_location(e->location);
+  output("&&");
+  prt_id_label(e->id_label);
+}
+
+void prt_asttype_cast(asttype t)
+{
+  /* Casts to a network base type are replaced by casts to the 
+     correspondingly sized base type */
+  if (type_network_base_type(t->type))
+    {
+      declarator d;
+      type_element qualifiers;
+      type2ast(unparse_region, t->location, 
+              qualify_type1(type_network_platform_type(t->type), t->type),
+              NULL, &d, &qualifiers);
+
+      t = new_asttype(unparse_region, t->location, d, qualifiers);
+    }
+  prt_asttype(t);
+}
+
+void prt_cast(cast e, int context_priority)
+{
+  OPEN(P_CAST);
+  set_location(e->location);
+  output("(");
+  prt_asttype_cast(e->asttype);
+  output(")");
+  prt_expression(e->arg1, P_CAST);
+  CLOSE(P_CAST);
+}
+
+void prt_cast_list(cast_list e, int context_priority)
+{
+  OPEN(P_CAST);
+  set_location(e->location);
+  output("(");
+  prt_asttype_cast(e->asttype);
+  output(")");
+  prt_init_list(CAST(init_list, e->init_expr), P_ASSIGN);
+  CLOSE(P_CAST);
+}
+
+void prt_conditional(conditional e, int context_priority)
+{
+  OPEN(P_COND);
+  prt_expression(e->condition, P_OR);
+  output(" ? ");
+  if (e->arg1)
+    prt_expression(e->arg1, P_COND);
+  output(" : ");
+  prt_expression(e->arg2, P_COND);
+  CLOSE(P_COND);
+}
+
+void prt_identifier(identifier e, int context_priority)
+{
+  data_declaration decl = e->ddecl;
+
+  if (decl->kind == decl_function && decl->uncallable)
+    error_with_location(e->location, "%s not connected", e->cstring.data);
+
+  set_location(e->location);
+  if (decl->kind == decl_constant && decl->substitute)
+    output_constant(decl->value);
+  else if (decl->kind == decl_error) /* attributes have bad code... */
+    output_cstring(e->cstring);
+  else
+    prt_plain_ddecl(decl, 0);
+      
+  if (use_nido && is_module_variable(decl))
+    output("[%s]", nido_mote_number);
+}
+
+void prt_compound_expr(compound_expr e, int context_priority)
+{
+  set_location(e->location);
+  output("(");
+  prt_compound_stmt(CAST(compound_stmt, e->stmt), FALSE);
+  output(")");
+}
+
+void prt_function_call(function_call e, int context_priority)
+{
+  switch (e->call_kind)
+    {
+    case post_task:
+      set_location(e->arg1->location);
+      output("TOS_post(");
+      prt_expression(e->arg1, P_ASSIGN);
+      output(")");
+      break;
+    default:
+      if (e->va_arg_call)
+       {
+         /* The extra parentheses are added because gcc 2.96 (aka redhat 7's
+            gcc) has a broken syntax for __builtin_va_arg */
+         output("(__builtin_va_arg(");
+         prt_expression(e->args, P_ASSIGN);
+         output(", ");
+         prt_asttype(e->va_arg_call);
+         output("))");
+       }
+      else if (get_magic(e))
+       output_constant(e->cst);
+      else
+       {
+         prt_expression(e->arg1, P_CALL);
+         /* Generic calls have already started the argument list.
+            See prt_generic_call */
+         if (is_generic_call(e->arg1))
+           prt_expressions(e->args, FALSE);
+         else
+           {
+             output("(");
+             prt_expressions(e->args, TRUE);
+           }
+         output(")");
+       }
+      break;
+    }
+}
+
+void prt_generic_call(generic_call e, int context_priority)
+{
+  prt_expression(e->arg1, P_CALL);
+  /* function_call will finish the argument list. See prt_function_call */
+  output("(");
+  prt_expressions(e->args, TRUE);
+
+  /* This is a convenient place to do this check. We can't easily do it
+     in make_generic_call as we don't (yet) know our parent. */
+  if (!is_function_call(e->parent))
+    error_with_location(e->location, "generic arguments can only be used in command/event calls");
+}
+
+void prt_array_ref(array_ref e, int context_priority)
+{
+  prt_expression(e->arg1, P_CALL);
+  output("[");
+  prt_expression(e->arg2, P_TOP);
+  output("]");
+}
+
+void prt_field_ref(field_ref e, int context_priority)
+{
+  /* Reconstruct -> for nicer output */
+  if (is_dereference(e->arg1))
+    {
+      prt_expression(CAST(dereference, e->arg1)->arg1, P_CALL);
+      output("->");
+    }
+  else
+    {
+      prt_expression(e->arg1, P_CALL);
+      output(".");
+    }
+  output_stripped_cstring(e->cstring);
+}
+
+void prt_interface_deref(interface_deref e, int context_priority)
+{
+  data_declaration decl = e->ddecl;
+
+  if (decl->kind == decl_function && decl->uncallable)
+    error_with_location(e->location, "%s.%s not connected",
+                       CAST(identifier, e->arg1)->cstring.data,
+                       e->cstring.data);
+
+  prt_expression(e->arg1, P_CALL);
+  output_string(function_separator);
+  output_stripped_cstring(e->cstring);
+}
+
+void prt_unary(unary e, int context_priority)
+{
+  char *op = NULL, *postop = NULL;
+  int pri = 0;
+
+  /* Yuck. Evil hack because gcc is broken (breaks the a[i] == *(a+i)
+     rule when a is a non-lvalue array). So we undo our earlier rewrite
+     (from fix.c) of a[i] as *(a+i). Note that gcc doesn't allow i[a] in
+     this case (bozos at work?) */
+  if (is_dereference(e) && is_plus(e->arg1))
+    {
+      plus derefed = CAST(plus, e->arg1);
+
+      if (type_array(derefed->arg1->type))
+       {
+         prt_array_ref(derefed, context_priority);
+         return;
+       }
+    }
+
+  set_location(e->location);
+
+  switch (e->kind)
+    {
+    case kind_dereference: op = "*"; break;
+    case kind_extension_expr: op = "__extension__ "; break;
+      /* Higher priority for sizeof/alignof expr because we must
+        add parens around sizeof cast_expr (e.g. sizeof((char)x), not
+        sizeof (char)x */
+    case kind_sizeof_expr: op = "sizeof "; pri = P_CALL; break;
+    case kind_alignof_expr: op = "__alignof__ "; pri = P_CALL; break;
+    case kind_realpart: op = "__real__ "; break;
+    case kind_imagpart: op = "__imag__ "; break;
+    case kind_address_of: op = "&"; break;
+    case kind_unary_minus: op = "-"; break;
+    case kind_unary_plus: op = "+"; break;
+    case kind_preincrement: op = "++"; break;
+    case kind_predecrement: op = "--"; break;
+    case kind_postincrement: postop = "++"; break;
+    case kind_postdecrement: postop = "--"; break;
+    case kind_conjugate: case kind_bitnot: op = "~"; break;
+    case kind_not: op = "!"; break;
+    case kind_component_deref: 
+      prt_plain_ddecl(CAST(component_deref, e)->ddecl, 0);
+      return;
+    default: assert(0); return;
+    }
+
+  OPEN(P_CAST);
+  if (op)
+    {
+      output_string(op);
+      if (is_unary(e->arg1))
+       output(" "); /* Catch weirdness such as - - x */
+      if (!pri)
+       pri = P_CAST;
+    }
+  prt_expression(e->arg1, pri ? pri : P_CALL);
+  if (postop)
+    output_string(postop);
+  CLOSE(P_CAST);
+}
+
+const char *binary_op_name(AST_kind kind)
+{
+  switch (kind)
+    {
+    case kind_plus: return "+"; 
+    case kind_minus: return "-"; 
+    case kind_times: return "*"; 
+    case kind_divide: return "/"; 
+    case kind_modulo: return "%"; 
+    case kind_lshift: return "<<"; 
+    case kind_rshift: return ">>"; 
+    case kind_leq: return "<="; 
+    case kind_geq: return ">="; 
+    case kind_lt: return "<"; 
+    case kind_gt: return ">"; 
+    case kind_eq: return "=="; 
+    case kind_ne: return "!="; 
+    case kind_bitand: return "&"; 
+    case kind_bitor: return "|"; 
+    case kind_bitxor: return "^"; 
+    case kind_andand: return "&&"; 
+    case kind_oror: return "||"; 
+    case kind_assign: return "="; 
+    case kind_plus_assign: return "+="; 
+    case kind_minus_assign: return "-="; 
+    case kind_times_assign: return "*="; 
+    case kind_divide_assign: return "/="; 
+    case kind_modulo_assign: return "%="; 
+    case kind_lshift_assign: return "<<="; 
+    case kind_rshift_assign: return ">>="; 
+    case kind_bitand_assign: return "&="; 
+    case kind_bitor_assign: return "|="; 
+    case kind_bitxor_assign: return "^="; 
+    default: assert(0); return "<bad>";
+    }
+}
+
+void prt_binary(binary e, int context_priority)
+{
+  int pri, lpri, rpri;
+  const char *op = binary_op_name(e->kind);
+
+  switch (e->kind)
+    {
+    case kind_times: case kind_divide: case kind_modulo:
+      lpri = P_TIMES; pri = P_TIMES; rpri = P_CAST; break;
+    case kind_plus: case kind_minus:
+      lpri = P_PLUS; pri = P_PLUS; rpri = P_TIMES; break;
+    case kind_lshift: case kind_rshift:
+      pri = P_SHIFT;
+      if (CONSERVATIVE_PARENS)
+       lpri = rpri = P_TIMES;
+      else
+       {
+         lpri = P_SHIFT; rpri = P_PLUS; 
+       }
+      break;
+    case kind_leq: case kind_geq: case kind_lt: case kind_gt:
+      lpri = P_REL; pri = P_REL; rpri = P_SHIFT; break;
+    case kind_eq: case kind_ne:
+      lpri = P_EQUALS; pri = P_EQUALS; rpri = P_REL; break;
+    case kind_bitand:
+      pri = P_BITAND;
+      if (CONSERVATIVE_PARENS)
+       lpri = rpri = P_TIMES;
+      else
+       {
+         lpri = P_BITAND; rpri = P_EQUALS; 
+       }
+      break;
+    case kind_bitxor:
+      pri = P_BITXOR;
+      if (CONSERVATIVE_PARENS)
+       lpri = rpri = P_TIMES;
+      else
+       {
+         lpri = P_BITXOR; rpri = P_BITAND;
+       }
+      break;
+    case kind_bitor:
+      pri = P_BITOR;
+      if (CONSERVATIVE_PARENS)
+       lpri = rpri = P_TIMES;
+      else
+       {
+         lpri = P_BITOR; rpri = P_BITXOR;
+       }
+      break;
+    case kind_andand:
+      lpri = P_AND; pri = P_AND; rpri = P_BITOR; break;
+    case kind_oror:
+      pri = P_OR;
+      if (CONSERVATIVE_PARENS)
+       lpri = rpri = P_BITOR;
+      else
+       {
+         lpri = P_OR; rpri = P_AND; 
+       }
+      break;
+    case kind_assign: case kind_plus_assign: case kind_minus_assign: 
+    case kind_times_assign: case kind_divide_assign: case kind_modulo_assign:
+    case kind_lshift_assign: case kind_rshift_assign: case kind_bitand_assign:
+    case kind_bitor_assign: case kind_bitxor_assign:
+      lpri = P_CAST; pri = P_ASSIGN; rpri = P_ASSIGN; break;
+    default: assert(0); return;
+    }
+
+  OPEN(pri);
+  prt_expression(e->arg1, lpri);
+  set_location(e->location);
+  output(" %s ", op);
+  prt_expression(e->arg2, rpri);
+  CLOSE(pri);
+}
+
+void prt_lexical_cst(lexical_cst e, int context_priority)
+{
+  set_location(e->location);
+  output_cstring(e->cstring);
+}
+
+void prt_string(string e, int context_priority)
+{
+  lexical_cst s;
+
+  scan_lexical_cst (s, CAST(lexical_cst, e->strings))
+    prt_lexical_cst(s, P_TOP);
+}
+
+void prt_init_list(init_list e, int context_priority)
+{
+  set_location(e->location);
+  output("{ ");
+  prt_expressions(e->args, TRUE);
+  output(" }");
+}
+
+void prt_designator(designator dl)
+{
+  designator d;
+
+  scan_designator (d, dl)
+    switch (d->kind)
+      {
+      case kind_designate_field: {
+       designate_field df = CAST(designate_field, d);
+
+       output(".");
+       output_cstring(df->cstring);
+       break;
+      }
+      case kind_designate_index: {
+       designate_index di = CAST(designate_index, d);
+
+       output("[");
+       prt_expression(di->arg1, P_ASSIGN);
+       if (di->arg2)
+         {
+           output(" ... ");
+           prt_expression(di->arg2, P_ASSIGN);
+         }
+       output("] ");
+       break;
+      }
+      default: assert(0);
+      }
+}
+
+void prt_init_specific(init_specific e, int context_priority)
+{
+  set_location(e->location);
+  prt_designator(e->designator);
+  output(" = ");
+  prt_expression(e->init_expr, P_ASSIGN);
+}
+
+void prt_statement(statement s)
+{
+  switch (s->kind)
+    {
+      PRTCASE(asm_stmt, s);
+      PRTCASE(if_stmt, s);
+      PRTCASE(labeled_stmt, s);
+      PRTCASE(expression_stmt, s);
+      PRTCASE(while_stmt, s);
+      PRTCASE(dowhile_stmt, s);
+      PRTCASE(switch_stmt, s);
+      PRTCASE(for_stmt, s);
+      PRTCASE(break_stmt, s);
+      PRTCASE(continue_stmt, s);
+      PRTCASE(return_stmt, s);
+      PRTCASE(goto_stmt, s);
+      PRTCASE(computed_goto_stmt, s);
+      PRTCASE(empty_stmt, s);
+      PRTCASE(atomic_stmt, s);
+
+    case kind_compound_stmt:
+      prt_compound_stmt(CAST(compound_stmt, s), FALSE);
+      return;
+    default: assert(0); return;
+    }
+}
+
+static void prt_as_compound(statement s)
+{
+  if (!is_compound_stmt(s))
+    outputln("{");
+  prt_statement(s);
+  if (!is_compound_stmt(s))
+    {
+      startline();
+      outputln("}");
+    }
+}
+
+void prt_compound_stmt(compound_stmt s, bool trusted)
+{
+  statement s1;
+
+  set_location(s->location);
+  if (trusted && flag_deputy)
+    outputln("{ __DEPUTY_TRUSTEDBLOCK");
+  else
+    outputln("{");
+  indent();
+  if (s->id_labels)
+    {
+      id_label l;
+
+      output("__label__ ");
+      scan_id_label (l, s->id_labels)
+       {
+         prt_id_label(l);
+         if (l->next) 
+           output(", ");
+       }
+      outputln(";");
+    }
+  if (s->decls)
+    {
+      prt_compound_declarations(s->decls);
+      newline();
+    }
+
+  scan_statement (s1, s->stmts)
+    prt_statement(s1);
+
+  unindent();
+  outputln("}");
+}
+
+void prt_compound_declarations(declaration dlist)
+{
+  declaration d;
+
+  scan_declaration (d, dlist)
+    prt_compound_declaration(d);
+}
+
+void prt_compound_declaration(declaration d)
+{
+  startline();
+  switch (d->kind)
+    {
+      PRTCASE(data_decl, d);
+      PRTCASE(extension_decl, d);
+      PRTCASE(function_decl, d);
+    default: assert(0); break;
+    }
+}
+
+void prt_asm_stmt(asm_stmt s)
+{
+  prt_asm_stmt_plain(s);
+  output(";");
+}
+
+void prt_asm_stmt_plain(asm_stmt s)
+{
+  set_location(s->location);
+  output(" __asm ");
+  if (s->qualifiers)
+    prt_type_elements(s->qualifiers, 0);
+  output("(");
+  prt_expression(s->arg1, P_TOP);
+  if (s->asm_operands1 || s->asm_operands2 || s->asm_clobbers)
+    {
+      output(" : ");
+      prt_asm_operands(s->asm_operands1);
+
+      if (s->asm_operands2 || s->asm_clobbers)
+       {
+         output(" : ");
+         prt_asm_operands(s->asm_operands2);
+
+         if (s->asm_clobbers)
+           {
+             output(" : ");
+             prt_expressions(CAST(expression, s->asm_clobbers), TRUE);
+           }
+       }
+    }
+  output(")");
+}
+
+void prt_asm_operands(asm_operand olist)
+{
+  asm_operand o;
+
+  scan_asm_operand (o, olist)
+    {
+      prt_asm_operand(o);
+      if (o->next)
+       output(", ");
+    }
+}
+
+void prt_asm_operand(asm_operand o)
+{
+  set_location(o->location);
+  if (o->word1)
+    {
+      output("[");
+      prt_word(o->word1);
+      output("] ");
+    }
+
+  prt_string(o->string, P_TOP);
+  output("(");
+  prt_expression(o->arg1, P_TOP);
+  output(")");
+}
+
+void prt_if_stmt(if_stmt s)
+{
+#if 0
+  if (s->condition->cst && constant_knownbool(s->condition->cst))
+    {
+      if (constant_boolvalue(s->condition->cst))
+       prt_statement(s->stmt1);
+      else if (s->stmt2)
+       prt_statement(s->stmt2);
+      else
+       outputln(";");
+      return;
+    }
+#endif
+
+  set_location(s->location);
+  output("if (");
+  /* CONSERVATIVE_PARENS: force parens around assignment within if */
+  prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP);
+  output(") ");
+  indent();
+  prt_as_compound(s->stmt1);
+  unindent();
+  if (s->stmt2)
+    {
+      startline();
+      output("else ");
+      indent();
+      prt_as_compound(s->stmt2);
+      unindent();
+    }
+}
+
+void prt_labeled_stmt(labeled_stmt s)
+{
+  prt_label(s->label);
+  output(": ");
+  indent();
+  prt_statement(s->stmt);
+  unindent();
+}
+
+void prt_expression_stmt(expression_stmt s)
+{
+  prt_expression(s->arg1, P_TOP);
+  outputln(";");
+}
+
+void prt_while_stmt(while_stmt s)
+{
+  set_location(s->location);
+  output("while (");
+  /* CONSERVATIVE_PARENS: force parens around assignment within while */
+  prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP);
+  output(") ");
+  indent();
+  prt_statement(s->stmt);
+  unindent();
+}
+
+void prt_dowhile_stmt(while_stmt s)
+{
+#if 0
+  /* Elide do ... while (0) */
+  if (s->condition->cst &&
+      constant_knownbool(s->condition->cst) &&
+      !constant_boolvalue(s->condition->cst))
+    {
+      prt_statement(s->stmt);
+      return;
+    }
+#endif
+
+  set_location(s->location);
+  output("do ");
+  indent();
+  prt_statement(s->stmt);
+  unindent();
+  startline();
+  output("while (");
+  /* CONSERVATIVE_PARENS: force parens around assignment within do while */
+  prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP);
+  outputln(");");
+}
+
+void prt_switch_stmt(switch_stmt s)
+{
+  set_location(s->location);
+  output("switch (");
+  /* CONSERVATIVE_PARENS: force parens around assignment within switch */
+  prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP);
+  output(") ");
+  indent();
+  prt_statement(s->stmt);
+  unindent();
+}
+
+void prt_for_stmt(for_stmt s)
+{
+  set_location(s->location);
+  output("for (");
+  if (s->arg1)
+    prt_expression(s->arg1, P_TOP);
+  output("; ");
+  if (s->arg2)
+    prt_expression(s->arg2, P_TOP);
+  output("; ");
+  if (s->arg3)
+    prt_expression(s->arg3, P_TOP);
+  output(") ");
+  indent();
+  prt_statement(s->stmt);
+  unindent();
+}  
+
+void prt_break_stmt(break_stmt s)
+{
+  set_location(s->location);
+  outputln("break;");
+}
+
+void prt_continue_stmt(continue_stmt s)
+{
+  set_location(s->location);
+  outputln("continue;");
+}
+
+void prt_return_stmt(return_stmt s)
+{
+  bool inatomic = FALSE;
+
+  if (s->containing_atomic &&
+      s->containing_atomic->isatomic == NOT_ATOMIC &&
+      current.function_decl->ddecl->call_contexts != c_call_atomic)
+    {
+      /* We rewrote return statemnts within atomic to return a local
+        variable in stmt.c. So we can just end the atomic section now. */
+      outputln("{");
+      indent();
+      set_location(s->location);
+      if (current.function_decl->ddecl->call_contexts == c_call_nonatomic &&
+         nesc_optimise_atomic)
+       outputln("__nesc_enable_interrupt(); ");
+      else
+       outputln("__nesc_atomic_end(__nesc_atomic); ");
+      inatomic = TRUE;
+    }
+
+  set_location(s->location);
+  if (s->arg1)
+    {
+      output("return ");
+      prt_expression(s->arg1, P_TOP);
+      outputln(";");
+    }
+  else
+    outputln("return;");
+
+  if (inatomic)
+    {
+      unindent();
+      outputln("}");
+    }
+}
+
+void prt_goto_stmt(goto_stmt s)
+{
+  set_location(s->location);
+  output("goto ");
+  prt_id_label(s->id_label);
+  outputln(";");
+}
+
+void prt_computed_goto_stmt(computed_goto_stmt s)
+{
+  set_location(s->location);
+  output("goto *");
+  prt_expression(s->arg1, P_TOP);
+  outputln(";");
+}
+
+void prt_empty_stmt(empty_stmt s)
+{
+  set_location(s->location);
+  outputln(";");
+}
+
+void prt_atomic_stmt(atomic_stmt s)
+{
+  struct location hack;
+
+  /* If the function's context is c_call_atomic, we can remove this atomic. */
+  if (current.function_decl->ddecl->call_contexts == c_call_atomic)
+    {
+      outputln("/* atomic removed: atomic calls only */");
+      prt_statement(s->stmt);
+      return;
+    }
+
+  /* If the body of the atomic is atomic, we don't need to do anything */
+  if (s->isatomic != NOT_ATOMIC)
+    {
+      outputln("/* atomic removed: %s */",
+              s->isatomic == ATOMIC_ANY ? "no shared variable access" :
+              "single single-byte shared variable access");
+      prt_statement(s->stmt);
+      return;
+    }
+
+  set_location(s->location);
+  if (current.function_decl->ddecl->call_contexts == c_call_nonatomic &&
+      nesc_optimise_atomic)
+    outputln("{ __nesc_disable_interrupt();");
+  else
+    outputln("{ __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();");
+  indent();
+  prt_statement(s->stmt);
+
+  /* The hack is to make debugging nicer: we make this new line appear 
+     to be part of the previous line */
+  hack = output_loc;
+  hack.lineno--;
+  set_location(&hack);
+  if (current.function_decl->ddecl->call_contexts == c_call_nonatomic &&
+      nesc_optimise_atomic)
+    outputln("__nesc_enable_interrupt(); }");
+  else
+    outputln("__nesc_atomic_end(__nesc_atomic); }");
+  unindent();
+}
+
+void prt_label(label l)
+{
+  switch (l->kind)
+    {
+      PRTCASE(id_label, l);
+      PRTCASE(case_label, l);
+      PRTCASE(default_label, l);
+    default: assert(0); return;
+    }
+}
+
+void prt_id_label(id_label l)
+{
+  set_location(l->location);
+  output_stripped_cstring(l->cstring);
+}
+
+void prt_case_label(case_label l)
+{
+  set_location(l->location);
+  output("case ");
+  prt_expression(l->arg1, P_ASSIGN);
+  if (l->arg2)
+    {
+      output(" ... ");
+      prt_expression(l->arg2, P_ASSIGN);
+    }
+}
+
+void prt_default_label(default_label l)
+{
+  set_location(l->location);
+  output("default");
+}
diff --git a/src/unparse.h b/src/unparse.h
new file mode 100644 (file)
index 0000000..26aa370
--- /dev/null
@@ -0,0 +1,127 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef UNPARSE_H
+#define UNPARSE_H
+
+/* string which accesses current mote number in nido */
+extern char *nido_mote_number;
+
+/* temporary region which can be used during unparsing */
+extern region unparse_region;
+
+void unparse(FILE *to, declaration program) deletes;
+void unparse_start(FILE *to, FILE *symbols);
+void unparse_end(void) deletes;
+void unparse_prefix(const char *line);
+void enable_line_directives(void);
+void disable_line_directives(void);
+void set_function_separator(char *sep);
+const char *get_function_separator(void);
+FILE *set_unparse_outfile(FILE *newout);
+void enable_documentation_mode(void);
+void disable_documentation_mode(void);
+
+void set_location(location l);
+void set_fixed_location(location l);
+void clear_fixed_location(void);
+struct location output_location(void);
+void output(char *format, ...) __attribute__((format (printf, 1, 2)));
+void outputln(char *format, ...) __attribute__((format (printf, 1, 2)));
+void output_stripped_cstring(cstring s);
+void output_string(const char *s);
+void output_cstring(cstring s);
+void output_stripped_string(const char *s);
+void output_stripped_string_dollar(const char *s);
+void output_quoted_cs(cstring cs);
+void copy_file_to_output(char *filename);
+void newline(void);
+void indent(void);
+void unindent(void);
+void startline(void);
+void startline_noindent(void);
+
+const char *binary_op_name(AST_kind kind);
+
+/* Precedence levels */
+#define P_TOP -1
+#define P_COMMA 0
+#define P_ASSIGN 1
+#define P_COND 2
+#define P_OR 3
+#define P_AND 4
+#define P_BITOR 5
+#define P_BITXOR 6
+#define P_BITAND 7
+#define P_EQUALS 8
+#define P_REL 9
+#define P_SHIFT 10
+#define P_PLUS 11
+#define P_TIMES 12
+#define P_CAST 13
+#define P_CALL 14
+
+void prt_asttype(asttype t);
+void prt_data_decl(data_decl d);
+void prt_toplevel_declarations(declaration d);
+void prt_toplevel_declaration(declaration d);
+void prt_nelements(expression array);
+void prt_expressions(expression elist, bool isfirst);
+void prt_expression(expression e, int context_priority);
+void prt_expression_helper(expression e, int context_priority);
+
+typedef enum {
+  psd_need_paren_for_star = 1,
+  psd_need_paren_for_qual = 2,
+  psd_rename_parameters = 4,
+  psd_rename_identifier = 8,
+  psd_print_default = 16,
+  psd_skip_container = 32,
+  psd_print_ddecl = 64, /* print ddecl as the name inside a declarator */
+  psd_prefix_nxbase = 128, /* add the __nesc_nxbase_ prefix to declared names */
+  psd_rewrite_nxbase = 256, /* add the __nesc_nxbase_ prefix to base type */
+  psd_print_ddecl_fdeclarator = 512, /* print innermost fdeclarator from ddecl */
+  psd_duplicate = 1024,
+  psd_noextern = 2048,
+  psd_skip_command_event = 4096
+} psd_options;
+
+void prt_type_elements(type_element elements, psd_options options);
+void prt_attribute_elements(type_element elements);
+void prt_interesting_elements(type_element elements, psd_options options);
+
+void prt_variable_decl(type_element modifiers, variable_decl d, 
+                      psd_options dopts);
+void prt_declarator(declarator d, type_element elements, attribute attributes,
+                   data_declaration ddecl, psd_options options);
+bool prt_simple_declarator(declarator d, data_declaration ddecl,
+                          psd_options options);
+void prt_parameters(declaration gparms, declaration parms, psd_options options);
+bool prt_parameter(declaration parm, bool first, bool lastforward, psd_options options);
+void prt_ddecl_full_name(data_declaration ddecl, psd_options options);
+void prt_plain_ddecl(data_declaration ddecl, psd_options options);
+void prt_field_decl(field_decl fd);
+
+void prt_function_body(function_decl d);
+
+void prt_diff_info(data_declaration ddecl);
+
+#endif
diff --git a/src/utils.c b/src/utils.c
new file mode 100644 (file)
index 0000000..c5d1bd0
--- /dev/null
@@ -0,0 +1,410 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+It also includes 
+   Public domain code from Pat Rankin <rankin@eql.caltech.edu>
+and code from libiberty that is
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#include "parser.h"
+#include "utils.h"
+#include <ctype.h>
+
+void renew_region(region *r)
+/* Effects: Delete region *r (if not null), allocate a new region in *r */
+{
+  if (*r)
+    deleteregion_ptr(r);
+  *r = newregion();
+}
+
+void *xmalloc(size_t size)
+{
+#ifdef BWGC
+  void *x = GC_malloc(size);
+#else
+  void *x = malloc(size);
+#endif
+
+  if (!x) abort();
+
+  return x;
+}
+
+void *xcalloc(size_t count, size_t size)
+{
+#ifdef BWGC
+  void *x = GC_calloc(count, size);
+#else
+  void *x = calloc(count, size);
+#endif
+
+  if (!x) abort();
+
+  return x;
+}
+
+void *xrealloc(void *p, size_t newsize)
+{
+#ifdef BWGC
+  void *x = GC_realloc(p, newsize);
+#else
+  void *x = realloc(p, newsize);
+#endif
+
+  if (!x) abort();
+
+  return x;
+}
+
+char *xstrdup(const char *s)
+{
+  char *t = strdup(s);
+
+  if (!t) abort();
+
+  return t;
+}
+
+void *xmemdup(const void *from, size_t s, size_t nsize)
+{
+  void *x = xcalloc(1, nsize);
+
+  return memcpy(x, from, s);
+}
+
+#define ERRSTR_FMT "undocumented error #%d"
+static char xstrerror_buf[sizeof ERRSTR_FMT + 20];
+
+/* Like strerror, but result is never a null pointer.  */
+char *xstrerror (int errnum)
+{
+  char *errstr;
+#ifdef VMS
+  char *(*vmslib_strerror) (int,...);
+
+  /* Override any possibly-conflicting declaration from system header.  */
+  vmslib_strerror = (char *(*) (int,...)) strerror;
+  /* Second argument matters iff first is EVMSERR, but it's simpler to
+     pass it unconditionally.  `vaxc$errno' is declared in <errno.h>
+     and maintained by the run-time library in parallel to `errno'.
+     We assume that `errnum' corresponds to the last value assigned to
+     errno by the run-time library, hence vaxc$errno will be relevant.  */
+  errstr = (*vmslib_strerror) (errnum, vaxc$errno);
+#else
+  errstr = strerror (errnum);
+#endif
+
+  /* If `errnum' is out of range, result might be NULL.  We'll fix that.  */
+  if (!errstr)
+    {
+      sprintf (xstrerror_buf, ERRSTR_FMT, errnum);
+      errstr = xstrerror_buf;
+    }
+  return errstr;
+}
+
+/* Make a new unintialised cstring of length l */
+cstring alloc_cstring(region r, int l)
+{
+  cstring cs;
+
+  cs.data = rstralloc(r, l + 1);
+  cs.data[l] = '\0';
+  cs.length = l;
+
+  return cs;
+}
+
+/* Make a new cstring with a copy of s, length l */
+cstring make_cstring(region r, const char *s, int l)
+{
+  cstring cs = alloc_cstring(r, l);
+
+  memcpy(cs.data, s, l);
+
+  return cs;
+}
+
+/* Make a new cstring with a copy of regular C string s */
+cstring str2cstring(region r, const char *s)
+{
+  return make_cstring(r, s, strlen(s));
+}
+
+/* Make a new C string with a copy of cstring s */
+char *cstring2str(region r, cstring s)
+{
+  int len = s.length + 1;
+  char *str = rstralloc(r, len);
+
+  memcpy(str, s.data, len);
+
+  return str;
+}
+
+unsigned long align_to(unsigned long n, unsigned long alignment)
+{
+  int count = (n + alignment - 1) / alignment;
+
+  return count * alignment;
+}
+
+unsigned long gcd(unsigned long x, unsigned long y)
+{
+  unsigned long z;
+
+  for (;;)
+    {
+      if (y == 0)
+       return x;
+      
+      z = x % y; x = y; y = z;
+    }
+}
+
+unsigned long lcm(unsigned long x, unsigned long y)
+{
+  /* ignoring risk of overflow (used for alignments which are typically <= 16) */
+  return (x * y) / gcd(x, y); 
+}
+
+int ilog2(largest_uint x)
+{
+  /* slow version */
+  largest_uint v = 1;
+  int log2 = 0;
+
+  while (v < x)
+    {
+      v <<= 1;
+      log2++;
+      if (!v)
+       return -1;
+    }
+
+  return v == x ? log2 : -1;
+}
+
+DEFINE_ARRAY(char_array, char)
+
+/* For some obscure reason, there's no standard function for this
+   (Linux's wctombs does it, but it's not standard) */
+int wcs_mb_size(const wchar_t *wstr)
+/* Returns: number of bytes to be allocated for a C string buffer
+     that will successfully hold the result of wcstombs(buffer, wstr, ?),
+     or -1 if wstr cannot be converted
+*/
+{
+  size_t len = 0;
+  char tmp[MB_CUR_MAX];
+
+  wctomb(NULL, 0);
+  while (*wstr)
+    {
+      int mblen = wctomb(tmp, *wstr++);
+
+      if (mblen < 0)
+       return -1;
+      len += mblen;
+    }
+
+  return len + 1;
+}
+
+unsigned long hash_ptr(void *p) 
+/* Returns: a reasonable hash for a pointer value
+ */
+{
+  return (unsigned long)p >> ALIGNMENT_BITS;
+}
+
+int compare_ptr(void *entry1, void *entry2)
+/* Returns: entry1 == entry2 (use with new_dhash_table) */
+{
+  return entry1 == entry2;
+}
+
+unsigned long hash_str(const char *s) 
+/* Returns: a reasonable hash for a character string.  
+    FIXME: the return value is only effected by the final 32 characters
+    in the string.
+ */
+{
+  register unsigned long code = 0;
+
+  if( !s ) 
+    return 0x57954317;
+
+  while (*s)
+    {
+      code = ((code << 1) + *s) ^ 0x57954317;
+      s++;
+    }
+
+  return code;
+}
+
+/* On machines with DIR_SEPARATOR defined, replace all DIR_SEPARATOR's
+   by / */
+void unixify_path(char *path)
+{
+#ifdef DIR_SEPARATOR
+  while ((path = strchr(path, DIR_SEPARATOR)))
+    *path++ = '/';
+#endif
+}
+
+/* TRUE if path is absolute, false otherwise */
+bool absolute_path(char *path)
+{
+#ifndef WIN32
+  if (path[0] == '/')
+    return TRUE;
+#endif
+
+#if defined(WIN32) || defined(__CYGWIN32__)
+  if (isalpha(path[0]) && path[1] == ':' &&
+      (path[2] == '/' || path[2] == '\\'))
+    return TRUE;
+#endif
+
+  return FALSE;
+}
+
+#if !HAVE_REALPATH
+#ifdef WIN32
+#include <direct.h>
+
+static bool pathcat(char *base, const char *add)
+{
+  int l = strlen(base);
+
+  if (l + strlen(add) + 2 >= PATH_MAX)
+    return FALSE; /* doesn't fit */
+
+  base[l] = '/';
+  strcpy(base + l + 1, add);
+  return TRUE;
+}
+
+char *realpath(const char *path, char *resolved_path)
+{
+  char *slash, *last;
+
+  /* This version doesn't support a NULL resolved_path. We don't
+     use it that way anyway */
+
+  if (isalpha(path[0]) && path[1] == ':')
+    if (path[2] == '/' || path[2] == '\\')
+      {
+       if (strlen(path) >= PATH_MAX - 1)
+         return NULL;
+       strcpy(resolved_path, path); /* absolute path */
+      }
+    else
+      {
+       /* drive relative path */
+       if (!_getdcwd(tolower(path[0] - 'a' + 1), resolved_path, PATH_MAX))
+         return NULL;
+       if (!pathcat(resolved_path, path + 2))
+         return NULL;
+      }
+  else
+    {
+      /* fully relative path */
+      if (!getcwd(resolved_path, PATH_MAX))
+       return NULL;
+      if (!pathcat(resolved_path, path))
+       return NULL;
+    }
+
+  if (!absolute_path(resolved_path))
+    return NULL; /* this could be an assert */
+
+  unixify_path(resolved_path);
+
+  /* Then, we remove all duplicate /'s, and . and .. directory
+     references. No attempt to avoid n^2 like behaviour. */
+  last = resolved_path + 2;
+  do
+    {
+      /* Find next slash or end of path */
+      slash = last + 1;
+      while (*slash != '/' && *slash)
+       slash++;
+
+      if (slash == last + 1 || /* empty dir spec */
+         (slash == last + 2 && last[1] == '.')) /* or . */
+       memmove(last, slash, strlen(slash) + 1);
+      else if (slash == last + 3 &&
+              last[1] == '.' && last[2] == '.') /* .. */
+       {
+         /* look backwards for directory to squash */
+         while (last >= resolved_path + 2 && *--last != '/')
+           ;
+         memmove(last, slash, strlen(slash) + 1);
+       }
+      else
+       last = slash;
+    }
+  while (*last);
+
+  /* If we have x:, make it into x:/ */
+  if (!resolved_path[2])
+    {
+      resolved_path[2] = '/';
+      resolved_path[3] = '\0';
+    }
+
+  return resolved_path;
+}
+#else
+#error "realpath missing"
+#endif
+#endif
+
+#ifdef TEST_REALPATH
+void tr(char *path)
+{
+  char rp[PATH_MAX];
+
+  if (realpath(path, rp))
+    printf("%s -> %s\n", path, rp);
+  else
+    printf("%s fails\n", path);
+}
+
+int region_main()
+{
+  tr("aa");
+  tr("n:xx");
+  tr("n:\\xx");
+  tr("n:\\\\aa\\\\b\\.\\c");
+  tr("c:/");
+  tr("c:/foo/");
+  tr("c:/foo/..");
+  tr("c:/../foo");
+  tr("c:///////////");
+  tr("n:../fun");
+  tr("../.././a");
+  return 0;
+}
+#endif
diff --git a/src/utils.h b/src/utils.h
new file mode 100644 (file)
index 0000000..f67592c
--- /dev/null
@@ -0,0 +1,79 @@
+/* This file is part of the nesC compiler.
+
+This file is derived from the RC Compiler. It is thus
+   Copyright (C) 2000-2001 The Regents of the University of California.
+Changes for nesC are
+   Copyright (C) 2002 Intel Corporation
+
+The attached "nesC" software is provided to you under the terms and
+conditions of the GNU General Public License Version 2 as published by the
+Free Software Foundation.
+
+nesC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with nesC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include "array.h"
+#include "cstring.h"
+
+void renew_region(region *r);
+/* Effects: Delete region *r (if not null), allocate a new region in *r */
+
+void *xmalloc(size_t size);
+void *xrealloc(void *p, size_t newsize);
+
+unsigned long align_to(unsigned long n, unsigned long alignment);
+
+int ilog2(largest_uint x);
+
+/* least common multiple */
+unsigned long lcm(unsigned long x, unsigned long y);
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
+DECLARE_ARRAY(wchar_array, wchar_t)
+DECLARE_ARRAY(char_array, char)
+
+int wcs_mb_size(const wchar_t *wstr);
+/* Returns: number of bytes to be allocated for a C string buffer
+     that will successfully hold the result of wcstombs(buffer, wstr, ?),
+     or -1 if wstr cannot be converted
+*/
+
+/* Some basic hash functions, that are re-used in a number of places */
+unsigned long hash_ptr(void *p);
+int compare_ptr(void *entry1, void *entry2);
+
+unsigned long hash_str(const char *);
+
+#if !HAVE_REALPATH
+char *realpath(const char *path, char *resolved_path);
+#endif
+
+/* From libiberty */
+extern const char *lbasename (const char *);
+
+/* On machines with DIR_SEPARATOR defined, replace all DIR_SEPARATOR's
+   by / */
+void unixify_path(char *path);
+
+/* TRUE if path is absolute, false otherwise */
+bool absolute_path(char *path);
+
+#ifdef WIN32
+#define DEVNULL "nul:"
+#else
+#define DEVNULL "/dev/null"
+#endif
+
+#endif
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644 (file)
index 0000000..339bd94
--- /dev/null
@@ -0,0 +1,78 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = java
+
+ncclibdir=$(libdir)/ncc
+nccdatadir=$(datadir)/ncc
+editordir=$(nccdatadir)/editor-modes
+emacsdir=$(editordir)/emacs
+vimdir=$(editordir)/vim
+kdedir=$(editordir)/kde
+geditdir=$(editordir)/gedit
+
+bin_SCRIPTS = nescc-mig nescc-ncg nescc nescc-wiring
+
+ncclib_DATA = deputy_nodeputy.h                        \
+             deputy_stage1.h                   \
+             deputy_stage2.h                   \
+             genjava.pm                        \
+             gencstjava.pm                     \
+             gencsharp.pm                      \
+             genc.pm                           \
+             gencstc.pm                        \
+             genpython.pm                      \
+             gencstpython.pm                   \
+             migdecode.pm                      \
+             nesc_nx.h
+
+nodist_ncclib_DATA = nesc.jar
+
+emacs_DATA =                                   \
+       editor-modes/emacs/nesc.el              \
+       editor-modes/emacs/new-nesc.el          \
+       editor-modes/emacs/old-nesc.el          \
+       editor-modes/emacs/readme.txt
+vim_DATA =                                     \
+       editor-modes/vim/nesc.vim               \
+       editor-modes/vim/filetype.vim           \
+        editor-modes/emacs/readme.txt
+kde_DATA =                                     \
+       editor-modes/kde/nesc.xml               \
+       editor-modes/kde/readme.txt
+gedit_DATA =                                   \
+       editor-modes/gedit/ncc.lang             \
+       editor-modes/gedit/readme.txt
+
+EXTRA_DIST =                                   \
+       $(ncclib_DATA)                          \
+       $(emacs_DATA)                           \
+       $(vim_DATA)                             \
+       $(kde_DATA)                             \
+       $(gedit_DATA)
+
+NESC_JAR_DEPS = $(shell find java -name '*.java')
+
+nesc.jar: $(NESC_JAR_DEPS)
+       (cd java && $(MAKE))
+       (cd java && jar cf ../$@ `find . -name '*.class'`)
+
+FORCE:
+
+.phony: FORCE
diff --git a/tools/Makefile.in b/tools/Makefile.in
new file mode 100644 (file)
index 0000000..7613c02
--- /dev/null
@@ -0,0 +1,689 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/nescc-diff.in $(srcdir)/nescc-mig.in \
+       $(srcdir)/nescc-ncg.in $(srcdir)/nescc-wiring.in \
+       $(srcdir)/nescc.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES = nescc-mig nescc-ncg nescc nescc-diff nescc-wiring
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(emacsdir)" \
+       "$(DESTDIR)$(geditdir)" "$(DESTDIR)$(kdedir)" \
+       "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" \
+       "$(DESTDIR)$(vimdir)"
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+emacsDATA_INSTALL = $(INSTALL_DATA)
+geditDATA_INSTALL = $(INSTALL_DATA)
+kdeDATA_INSTALL = $(INSTALL_DATA)
+ncclibDATA_INSTALL = $(INSTALL_DATA)
+nodist_ncclibDATA_INSTALL = $(INSTALL_DATA)
+vimDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(emacs_DATA) $(gedit_DATA) $(kde_DATA) $(ncclib_DATA) \
+       $(nodist_ncclib_DATA) $(vim_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = java
+ncclibdir = $(libdir)/ncc
+nccdatadir = $(datadir)/ncc
+editordir = $(nccdatadir)/editor-modes
+emacsdir = $(editordir)/emacs
+vimdir = $(editordir)/vim
+kdedir = $(editordir)/kde
+geditdir = $(editordir)/gedit
+bin_SCRIPTS = nescc-mig nescc-ncg nescc nescc-wiring
+ncclib_DATA = deputy_nodeputy.h                        \
+             deputy_stage1.h                   \
+             deputy_stage2.h                   \
+             genjava.pm                        \
+             gencstjava.pm                     \
+             gencsharp.pm                      \
+             genc.pm                           \
+             gencstc.pm                        \
+             genpython.pm                      \
+             gencstpython.pm                   \
+             migdecode.pm                      \
+             nesc_nx.h
+
+nodist_ncclib_DATA = nesc.jar
+emacs_DATA = \
+       editor-modes/emacs/nesc.el              \
+       editor-modes/emacs/new-nesc.el          \
+       editor-modes/emacs/old-nesc.el          \
+       editor-modes/emacs/readme.txt
+
+vim_DATA = \
+       editor-modes/vim/nesc.vim               \
+       editor-modes/vim/filetype.vim           \
+        editor-modes/emacs/readme.txt
+
+kde_DATA = \
+       editor-modes/kde/nesc.xml               \
+       editor-modes/kde/readme.txt
+
+gedit_DATA = \
+       editor-modes/gedit/ncc.lang             \
+       editor-modes/gedit/readme.txt
+
+EXTRA_DIST = \
+       $(ncclib_DATA)                          \
+       $(emacs_DATA)                           \
+       $(vim_DATA)                             \
+       $(kde_DATA)                             \
+       $(gedit_DATA)
+
+NESC_JAR_DEPS = $(shell find java -name '*.java')
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+nescc-mig: $(top_builddir)/config.status $(srcdir)/nescc-mig.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nescc-ncg: $(top_builddir)/config.status $(srcdir)/nescc-ncg.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nescc: $(top_builddir)/config.status $(srcdir)/nescc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nescc-diff: $(top_builddir)/config.status $(srcdir)/nescc-diff.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nescc-wiring: $(top_builddir)/config.status $(srcdir)/nescc-wiring.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+           $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+install-emacsDATA: $(emacs_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(emacsdir)" || $(MKDIR_P) "$(DESTDIR)$(emacsdir)"
+       @list='$(emacs_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(emacsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(emacsdir)/$$f'"; \
+         $(emacsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(emacsdir)/$$f"; \
+       done
+
+uninstall-emacsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(emacs_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(emacsdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(emacsdir)/$$f"; \
+       done
+install-geditDATA: $(gedit_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(geditdir)" || $(MKDIR_P) "$(DESTDIR)$(geditdir)"
+       @list='$(gedit_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(geditDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(geditdir)/$$f'"; \
+         $(geditDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(geditdir)/$$f"; \
+       done
+
+uninstall-geditDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(gedit_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(geditdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(geditdir)/$$f"; \
+       done
+install-kdeDATA: $(kde_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(kdedir)" || $(MKDIR_P) "$(DESTDIR)$(kdedir)"
+       @list='$(kde_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(kdeDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(kdedir)/$$f'"; \
+         $(kdeDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(kdedir)/$$f"; \
+       done
+
+uninstall-kdeDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(kde_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(kdedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(kdedir)/$$f"; \
+       done
+install-ncclibDATA: $(ncclib_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)"
+       @list='$(ncclib_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(ncclibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         $(ncclibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+uninstall-ncclibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(ncclib_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+install-nodist_ncclibDATA: $(nodist_ncclib_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)"
+       @list='$(nodist_ncclib_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nodist_ncclibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         $(nodist_ncclibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+
+uninstall-nodist_ncclibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_ncclib_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(ncclibdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ncclibdir)/$$f"; \
+       done
+install-vimDATA: $(vim_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(vimdir)" || $(MKDIR_P) "$(DESTDIR)$(vimdir)"
+       @list='$(vim_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(vimDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(vimdir)/$$f'"; \
+         $(vimDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(vimdir)/$$f"; \
+       done
+
+uninstall-vimDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(vim_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(vimdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(vimdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(emacsdir)" "$(DESTDIR)$(geditdir)" "$(DESTDIR)$(kdedir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(vimdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-emacsDATA install-geditDATA install-kdeDATA \
+       install-ncclibDATA install-nodist_ncclibDATA install-vimDATA
+
+install-dvi: install-dvi-recursive
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-emacsDATA \
+       uninstall-geditDATA uninstall-kdeDATA uninstall-ncclibDATA \
+       uninstall-nodist_ncclibDATA uninstall-vimDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-binSCRIPTS install-data install-data-am \
+       install-dvi install-dvi-am install-emacsDATA install-exec \
+       install-exec-am install-geditDATA install-html install-html-am \
+       install-info install-info-am install-kdeDATA install-man \
+       install-ncclibDATA install-nodist_ncclibDATA install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       install-vimDATA installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am uninstall-binSCRIPTS \
+       uninstall-emacsDATA uninstall-geditDATA uninstall-kdeDATA \
+       uninstall-ncclibDATA uninstall-nodist_ncclibDATA \
+       uninstall-vimDATA
+
+
+nesc.jar: $(NESC_JAR_DEPS)
+       (cd java && $(MAKE))
+       (cd java && jar cf ../$@ `find . -name '*.class'`)
+
+FORCE:
+
+.phony: FORCE
+# 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/tools/deputy_nodeputy.h b/tools/deputy_nodeputy.h
new file mode 100644 (file)
index 0000000..9510c60
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef DEPUTY_STAGE1_INCLUDED
+#define DEPUTY_STAGE1_INCLUDED
+
+#include <stddef.h>
+
+#define __DEPUTY_UNUSED__                      __attribute__((unused))
+
+struct @nonnull @deputy_scope() { }; 
+struct @bnd @deputy_scope() { void *lo, *hi; }; 
+struct @bnd_nok @deputy_scope() { void *lo, *hi; }; 
+struct @count @deputy_scope() { int n; }; 
+struct @count_nok @deputy_scope() { int n; }; 
+struct @one @deputy_scope() { }; 
+struct @one_nok @deputy_scope() { };
+struct @dmemset @deputy_scope() { int a1, a2, a3; };
+struct @dmemcpy @deputy_scope() { int a1, a2, a3; };
+struct @nts @deputy_scope() { }; 
+
+#define NONNULL                                @nonnull()
+#define BND(x,y)                               @bnd(x,y)
+#define BND_NOK(x,y)                           @bnd_nok(x,y)
+#define COUNT(x)                               @count(x)
+#define COUNT_NOK(x)                           @count_nok(x)
+#define ONE                                    @one()
+#define ONE_NOK                                @one_nok()
+#define DMEMSET(x,y,z)                         @dmemset(x,y,z)
+#define DMEMCPY(x,y,z)                         @dmemcpy(x,y,z)
+#define TRUSTEDBLOCK                           @unsafe()
+#define NTS                                    @nts()
+
+#define TCAST(__type,__expr)                   ((__type)(__expr))                
+
+#endif
diff --git a/tools/deputy_stage1.h b/tools/deputy_stage1.h
new file mode 100644 (file)
index 0000000..18e3f0a
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef DEPUTY_STAGE1_INCLUDED
+#define DEPUTY_STAGE1_INCLUDED
+
+#include <stddef.h>
+
+#define __DEPUTY_UNUSED__                      __attribute__((unused))
+
+struct @nonnull @deputy_scope() @macro("__DEPUTY_NONNULL") { }; 
+struct @bnd @deputy_scope() @macro("__DEPUTY_BND") { void *lo, *hi; }; 
+struct @bnd_nok @deputy_scope() @macro("__DEPUTY_BND_NOK") { void *lo, *hi; }; 
+struct @count @deputy_scope() @macro("__DEPUTY_COUNT") { int n; }; 
+struct @count_nok @deputy_scope() @macro("__DEPUTY_COUNT_NOK") { int n; }; 
+struct @one @deputy_scope() @macro("__DEPUTY_ONE") { }; 
+struct @one_nok @deputy_scope() @macro("__DEPUTY_ONE_NOK") { };
+struct @dmemset @deputy_scope() @macro("__DEPUTY_DMEMSET") { int a1, a2, a3; };
+struct @dmemcpy @deputy_scope() @macro("__DEPUTY_DMEMCPY") { int a1, a2, a3; };
+struct @nts @deputy_scope() @macro("__DEPUTY_NTS") { }; 
+
+#define NONNULL                                @nonnull()
+#define BND(x,y)                               @bnd(x,y)
+#define BND_NOK(x,y)                           @bnd_nok(x,y)
+#define COUNT(x)                               @count(x)
+#define COUNT_NOK(x)                           @count_nok(x)
+#define ONE                                    @one()
+#define ONE_NOK                                @one_nok()
+#define DMEMSET(x,y,z)                         @dmemset(x,y,z)
+#define DMEMCPY(x,y,z)                         @dmemcpy(x,y,z)
+#define TRUSTEDBLOCK                           @unsafe()
+#define NTS                                    @nts()
+
+#define __DEPUTY_TRUSTED                       __attribute__((trusted))
+#define __DEPUTY_COPYTYPE                      __attribute__((copytype))
+
+#define TCAST(__type,__expr)                   ((__type)((void * __DEPUTY_TRUSTED __DEPUTY_COPYTYPE)(__expr)))
+
+void * (DMEMSET(1, 2, 3) memset)(void*, int, size_t);
+void * (DMEMCPY(1, 2, 3) memcpy)(void*, const void*, size_t);
+void * (DMEMCPY(1, 2, 3) memmove)(void*, const void*, size_t);
+
+#endif
diff --git a/tools/deputy_stage2.h b/tools/deputy_stage2.h
new file mode 100644 (file)
index 0000000..af6db24
--- /dev/null
@@ -0,0 +1,11 @@
+#define __DEPUTY_NONNULL(__n)                  __attribute__((nonnull))
+#define __DEPUTY_BND_NOK(__lo,__hi)            __attribute__((bounds((__lo),(__hi))))
+#define __DEPUTY_BND(__lo,__hi)                __DEPUTY_NONNULL(__n) __DEPUTY_BND_NOK(__lo,__hi)
+#define __DEPUTY_COUNT_NOK(__n)                __DEPUTY_BND_NOK(__this, __this + (__n))
+#define __DEPUTY_COUNT(__n)                    __DEPUTY_NONNULL(__n) __DEPUTY_COUNT_NOK(__n)
+#define __DEPUTY_ONE_NOK(__n)                  __DEPUTY_COUNT_NOK(1)
+#define __DEPUTY_ONE(__n)                      __DEPUTY_NONNULL(__n) __DEPUTY_ONE_NOK(__n)
+#define __DEPUTY_NTS(__n)                      __attribute__((nullterm)) __DEPUTY_COUNT_NOK(0)
+#define __DEPUTY_TRUSTEDBLOCK                  __blockattribute__((trusted))
+#define __DEPUTY_DMEMSET(x,y,z)                __attribute__((dmemset((x),(y),(z))))
+#define __DEPUTY_DMEMCPY(x,y,z)                __attribute__((dmemcpy((x),(y),(z))))
diff --git a/tools/editor-modes/emacs/nesc.el b/tools/editor-modes/emacs/nesc.el
new file mode 100644 (file)
index 0000000..67fd228
--- /dev/null
@@ -0,0 +1,163 @@
+;;; necs.el --- nesC mode
+
+;; Author: David Gay <dgay@intel-research.net>
+;; Keywords: c, languages
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License Version 2
+;; as published by the Free Software Foundation.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+(require 'cc-mode)
+
+;; Load appropriate version of nesC emacs mode
+(if (string-match "^5.2[0-9]" c-version)
+    (load-library "old-nesc.el")
+  (load-library "new-nesc.el"))
+
+;; c-font-lock-declarators has a bug (spams a warning message) when
+;; editing enum's with '=' in font-lock-mode, in 5.30.9. Redefine it.
+(if (string-equal c-version "5.30.9")
+    (defun c-font-lock-declarators (limit list types)
+      ;; Assuming the point is at the start of a declarator in a
+      ;; declaration, fontify it.  If LIST is non-nil, fontify also all
+      ;; following declarators in a comma separated list (e.g.  "foo" and
+      ;; "bar" in "int foo = 17, bar;").  Stop at LIMIT.  If TYPES is
+      ;; non-nil, fontify all identifiers as types.  Nil is always
+      ;; returned.
+
+      ;;(message "c-font-lock-declarators from %s to %s" (point) limit)
+      (c-fontify-types-and-refs
+       ((pos (point)) next-pos id-start id-end
+       paren-depth
+       id-face got-init
+       c-last-identifier-range
+       (separator-prop (if types 'c-decl-type-start 'c-decl-id-start)))
+
+       (while (and
+              pos
+              (< (point) limit)
+
+              (let (got-identifier)
+                (setq paren-depth 0)
+                ;; Skip over type decl prefix operators.  (Note similar
+                ;; code in `c-font-lock-declarations'.)
+                (while (and (looking-at c-type-decl-prefix-key)
+                            (if (and (c-major-mode-is 'c++-mode)
+                                     (match-beginning 2))
+                                ;; If the second submatch matches in C++ then
+                                ;; we're looking at an identifier that's a
+                                ;; prefix only if it specifies a member pointer.
+                                (progn
+                                  (setq id-start (point))
+                                  (c-forward-name)
+                                  (if (looking-at "\\(::\\)")
+                                      ;; We only check for a trailing "::" and
+                                      ;; let the "*" that should follow be
+                                      ;; matched in the next round.
+                                      t
+                                    ;; It turned out to be the real identifier,
+                                    ;; so flag that and stop.
+                                    (setq got-identifier t)
+                                    nil))
+                              t))
+                  (if (eq (char-after) ?\()
+                      (progn
+                        (setq paren-depth (1+ paren-depth))
+                        (forward-char))
+                    (goto-char (match-end 1)))
+                  (c-forward-syntactic-ws))
+
+                ;; If we didn't pass the identifier above already, do it now.
+                (unless got-identifier
+                  (setq id-start (point))
+                  (c-forward-name))
+                (setq id-end (point))
+
+                (/= id-end pos))
+
+              ;; Skip out of the parens surrounding the identifier.
+              (or (= paren-depth 0)
+                  (c-safe (goto-char (scan-lists (point) 1 paren-depth))))
+
+              (<= (point) limit)
+
+              ;; Search syntactically to the end of the declarator (";",
+              ;; ",", a closen paren, eob etc) or to the beginning of an
+              ;; initializer or function prototype ("=" or "\\s\(").
+              ;; Note that the open paren will match array specs in
+              ;; square brackets, and we treat them as initializers too.
+              (c-syntactic-re-search-forward
+               "[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t))
+
+        (setq next-pos (match-beginning 0)
+              id-face (if (eq (char-after next-pos) ?\()
+                          'font-lock-function-name-face
+                        'font-lock-variable-name-face)
+              got-init (and (match-beginning 1)
+                            (char-after (match-beginning 1))))
+
+        (if types
+            ;; Register and fontify the identifer as a type.
+            (let ((c-promote-possible-types t))
+              (goto-char id-start)
+              (c-forward-type))
+          ;; Fontify the last symbol in the identifier if it isn't fontified
+          ;; already.  The check is necessary only in certain cases where this
+          ;; function is used "sloppily", e.g. in `c-simple-decl-matchers'.
+          (when (and c-last-identifier-range
+                     (not (get-text-property (car c-last-identifier-range)
+                                             'face)))
+            (c-put-font-lock-face (car c-last-identifier-range)
+                                  (cdr c-last-identifier-range)
+                                  id-face)))
+
+        (goto-char next-pos)
+        (setq pos nil)
+        (when list
+          ;; Jump past any initializer or function prototype to see if
+          ;; there's a ',' to continue at.
+
+          (cond ((eq id-face 'font-lock-function-name-face)
+                 ;; Skip a parenthesized initializer (C++) or a function
+                 ;; prototype.
+                 (if (c-safe (c-forward-sexp 1) t)
+                     (c-forward-syntactic-ws limit)
+                   (goto-char limit)))
+
+                (got-init
+                 ;; Skip an initializer expression.  If we're at a '='
+                 ;; then accept a brace list directly after it to cope
+                 ;; with array initializers.  Otherwise stop at braces
+                 ;; to avoid going past full function and class blocks.
+                 (and (if (and (eq got-init ?=)
+                               (= (c-forward-token-2 nil nil limit) 0)
+                               (looking-at "{"))
+                          (c-safe
+                           (let ((p (point)))
+                             (c-forward-sexp)
+                             (if (> (point) limit)
+                                 (goto-char p)))
+                           t)
+                        t)
+                      (c-syntactic-re-search-forward "[;,{]" limit 'move t)
+                      (backward-char)))
+
+                (t (c-forward-syntactic-ws limit)))
+
+          ;; If a ',' is found we set pos to the next declarator and iterate.
+          (when (and (< (point) limit) (looking-at ","))
+            (c-put-char-property (point) 'c-type separator-prop)
+            (forward-char)
+            (c-forward-syntactic-ws limit)
+            (setq pos (point))))))
+      nil))
diff --git a/tools/editor-modes/emacs/new-nesc.el b/tools/editor-modes/emacs/new-nesc.el
new file mode 100644 (file)
index 0000000..a3dd801
--- /dev/null
@@ -0,0 +1,183 @@
+;; necs.el --- nesC mode
+
+;; Copyright (C) 2004 Intel Corporation
+
+;; Author:     2002 Martin Stjernholm
+;;            2004 David Gay
+;; Maintainer: David Gay <dgay@intel-research.net>
+;; Created:    March 2004
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License Version 2
+;; as published by the Free Software Foundation.
+;; 
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;; 
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'cc-mode)
+
+(if (string-match "^5.2[0-9]" c-version)
+    (error "cc-mode 5.30 or later required by this file"))
+
+;; These are only required at compile time to get the sources for the
+;; language constants.  (The cc-fonts require and the font-lock
+;; related constants could additionally be put inside an
+;; (eval-after-load "font-lock" ...) but then some trickery is
+;; necessary to get them compiled.)
+(eval-when-compile
+  (require 'cc-langs)
+  (require 'cc-fonts))
+
+(eval-and-compile
+  ;; Make our mode known to the language constant system.  Use C
+  ;; mode as the fallback for the constants we don't change here.
+  ;; This needs to be done also at compile time since the language
+  ;; constants are evaluated then.
+  (c-add-language 'nesc-mode 'c-mode)
+  ;; cc-mode 5.30.8 is buggy:
+  (if (not (get 'nesc-mode 'c-fallback-mode))
+      (put 'nesc-mode 'c-fallback-mode 'c-mode)))
+
+(c-lang-defconst c-class-decl-kwds
+  nesc (append '("interface" "implementation" "nx_struct" "nx_union")
+              (c-lang-const c-class-decl-kwds)))
+
+(c-lang-defconst c-type-prefix-kwds
+  nesc (append '("nx_struct" "nx_union")
+              (c-lang-const c-type-prefix-kwds)))
+
+(c-lang-defconst c-block-decls-with-vars
+  nesc (append '("nx_struct" "nx_union")
+              (c-lang-const c-block-decls-with-vars)))
+
+(c-lang-defconst c-brace-list-decl-kwds
+  nesc (append '("module" "configuration" "provides" "uses")
+              (c-lang-const c-brace-list-decl-kwds)))
+
+(c-lang-defconst c-typeless-decl-kwds
+  nesc (append '("as" "components" "interface")
+              (c-lang-const c-typeless-decl-kwds)))
+
+(c-lang-defconst c-modifier-kwds
+  nesc (append '("command" "event" "task" "norace" "async")
+              (c-lang-const c-modifier-kwds)))
+
+(c-lang-defconst c-other-decl-kwds
+  nesc (append '("includes") (c-lang-const c-other-decl-kwds)))
+
+(c-lang-defconst c-other-kwds
+  nesc (append '("new") (c-lang-const c-other-kwds)))
+
+(c-lang-defconst c-block-stmt-1-kwds
+  nesc (append '("atomic") (c-lang-const c-block-stmt-1-kwds)))
+
+(c-lang-defconst c-recognize-knr-p nesc nil)
+
+;; This gives post, call, signal a slightly incorrect priority
+(c-lang-defconst c-operators
+  nesc (append '((prefix "post" "call" "signal"))
+              ;; Note: need to ask specifically for the C operators
+              ;; as there are explicit tests for the C name in the 
+              ;; c-operators constant specification...
+              (c-lang-const c-operators c)))
+
+(c-lang-defconst c-other-kwds
+  nesc (cons "abstract" (c-lang-const c-other-kwds)))
+
+
+(defcustom nesc-font-lock-extra-types '("result_t" "bool"
+                                       "int8_t" "uint8_t"
+                                       "int16_t" "uint16_t"
+                                       "int32_t" "uint32_t")
+  "*List of extra types (aside from the type keywords) to recognize in nesC mode.
+Each list item should be a regexp matching a single identifier.")
+
+(defconst nesc-font-lock-keywords-1 (c-lang-const c-matchers-1 nesc)
+  "Minimal highlighting for nesC mode.")
+
+(defconst nesc-font-lock-keywords-2 (c-lang-const c-matchers-2 nesc)
+  "Fast normal highlighting for nesC mode.")
+
+(defconst nesc-font-lock-keywords-3 (c-lang-const c-matchers-3 nesc)
+  "Accurate normal highlighting for nesC mode.")
+
+(defvar nesc-font-lock-keywords nesc-font-lock-keywords-3
+  "Default expressions to highlight in nesC mode.")
+
+(defvar nesc-mode-syntax-table nil
+  "Syntax table used in nesc-mode buffers.")
+(or nesc-mode-syntax-table
+    (setq nesc-mode-syntax-table
+         (funcall (c-lang-const c-make-mode-syntax-table nesc))))
+
+(defvar nesc-mode-abbrev-table nil
+  "Abbreviation table used in nesc-mode buffers.")
+(c-define-abbrev-table 'nesc-mode-abbrev-table
+  ;; Keywords that if they occur first on a line might alter the
+  ;; syntactic context, and which therefore should trig reindentation
+  ;; when they are completed.
+  '(("else" "else" c-electric-continued-statement 0)
+    ("while" "while" c-electric-continued-statement 0)))
+
+(defvar nesc-mode-map (let ((map (c-make-inherited-keymap)))
+                     ;; Add bindings which are only useful for nesC
+                     map)
+  "Keymap used in nesc-mode buffers.")
+
+(easy-menu-define nesc-menu nesc-mode-map "nesC Mode Commands"
+                 ;; Can use `nesc' as the language for `c-mode-menu'
+                 ;; since its definition covers any language.  In
+                 ;; this case the language is used to adapt to the
+                 ;; nonexistence of a cpp pass and thus removing some
+                 ;; irrelevant menu alternatives.
+                 (cons "nesC" (c-lang-const c-mode-menu nesc)))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.nc\\'" . nesc-mode))
+
+;;;###autoload
+(defun nesc-mode ()
+  "Major mode for editing nesC (pronounced \"nes-see\") code.
+
+The hook `c-mode-common-hook' is run with no args at mode
+initialization, then `nesc-mode-hook'.
+
+Key bindings:
+\\{nesc-mode-map}"
+  (interactive)
+  (kill-all-local-variables)
+  (c-initialize-cc-mode t)
+  (set-syntax-table nesc-mode-syntax-table)
+  (setq major-mode 'nesc-mode
+       mode-name "nesC"
+       local-abbrev-table nesc-mode-abbrev-table
+       abbrev-mode t)
+  (use-local-map c-mode-map)
+  ;; `c-init-language-vars' is a macro that is expanded at compile
+  ;; time to a large `setq' with all the language variables and their
+  ;; customized values for our language.
+  (c-init-language-vars nesc-mode)
+  ;; `c-common-init' initializes most of the components of a CC Mode
+  ;; buffer, including setup of the mode menu, font-lock, etc.
+  ;; There's also a lower level routine `c-basic-common-init' that
+  ;; only makes the necessary initialization to get the syntactic
+  ;; analysis and similar things working.
+  (c-common-init 'nesc-mode)
+  (easy-menu-add nesc-menu)
+  (run-hooks 'c-mode-common-hook)
+  (run-hooks 'nesc-mode-hook)
+  (c-update-modeline))
+
+
+(provide 'nesc-mode)
+
+;;; new-nesc.el ends here
diff --git a/tools/editor-modes/emacs/old-nesc.el b/tools/editor-modes/emacs/old-nesc.el
new file mode 100644 (file)
index 0000000..747c477
--- /dev/null
@@ -0,0 +1,124 @@
+;;; necs.el --- nesC mode
+
+;; Copyright (C) 1985-2002 by Free Software Foundation, Inc.
+;; Copyright (C) 2004 Intel Corporation
+
+;; Author: Dennis Haney <davh@diku.dk>
+;;         David Gay <dgay@intel-research.net>
+;; Maintainer: David Gay <dgay@intel-research.net>
+;; Keywords: c, languages
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License Version 2
+;; as published by the Free Software Foundation.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'cc-mode)
+
+(if (not (string-match "^5.2[0-9]" c-version))
+    (error "cc-mode 5.30 and later not supported by this file"))
+
+(require 'font-lock)
+
+(defconst nesc-keywords
+  (eval-when-compile
+    (regexp-opt
+     '("abstract" "as" "atomic" "async"
+       "call" "command" "components" "configuration" 
+       "event" "implementation" "interface" "includes" 
+       "module" "norace" "nx_struct" "nx_union" "post" "provides"
+       "signal" "task" "uses" ) t)))
+
+(setq nesc-font-lock-keywords-1
+      (list
+       `(eval .
+             (cons (concat "\\<" (,@ nesc-keywords) "\\>") 'font-lock-keyword-face))))
+
+(defconst nesc-font-lock-keywords
+  (append nesc-font-lock-keywords-1
+   c++-font-lock-keywords-2))
+
+(defvar nesc-mode-abbrev-table nil
+  "Abbreviation table used in nesc-mode buffers.")
+(define-abbrev-table 'nesc-mode-abbrev-table
+  '(("else" "else" c-electric-continued-statement 0)
+    ("while" "while" c-electric-continued-statement 0)))
+
+(defvar nesc-mode-map ()
+  "Keymap used in nesc-mode buffers.")
+(if nesc-mode-map
+    nil
+  (setq nesc-mode-map (c-make-inherited-keymap))
+  ;; add bindings which are only useful for nesC
+  )
+
+(easy-menu-define c-nesc-menu nesc-mode-map "nesC Mode Commands"
+                 (c-mode-menu "nesC"))
+
+(defvar nesc-mode-syntax-table nil
+  "Syntax table used in nesc-mode buffers.")
+(if nesc-mode-syntax-table
+    ()
+  (setq nesc-mode-syntax-table (make-syntax-table))
+  (c-populate-syntax-table nesc-mode-syntax-table))
+
+(defconst c-nesC-comment-start-regexp c-C++-comment-start-regexp)
+(defconst c-nesC-class-kwds "nx_struct\\|nx_union\\|struct\\|union\\|implementation")
+(defconst c-nesC-class-key (c-paren-re c-nesC-class-kwds))
+
+(defvar cc-imenu-nesc-generic-expression
+  cc-imenu-c-generic-expression
+  "Imenu generic expression for nesC mode.  See `imenu-generic-expression'.")
+
+(defun nesc-mode ()
+  "Major mode for editing nesC code."
+  (interactive)
+  (c-initialize-cc-mode)
+  (kill-all-local-variables)
+  (set-syntax-table nesc-mode-syntax-table)
+  (setq major-mode 'nesc-mode
+       mode-name "nesC"
+       local-abbrev-table nesc-mode-abbrev-table
+       abbrev-mode t
+       ; we have javadoc-style comments
+       c-append-paragraph-start c-Java-javadoc-paragraph-start)
+  (use-local-map nesc-mode-map)
+  (c-common-init)
+  (setq comment-start "// "
+       comment-end   ""
+        c-keywords (c-identifier-re (concat c-C-keywords "\\|" nesc-keywords))
+       c-conditional-key c-C-conditional-key
+       c-comment-start-regexp c-nesC-comment-start-regexp
+       c-class-key c-nesC-class-key
+       c-method-key nil
+       c-baseclass-key nil
+       c-recognize-knr-p nil
+       c-inexpr-class-key nil
+       ;defun-prompt-regexp c-nesC-defun-prompt-regexp
+       )
+  (cc-imenu-init cc-imenu-nesc-generic-expression)
+  (make-local-variable 'font-lock-defaults)
+  (setq font-lock-defaults 
+        '(nesc-font-lock-keywords nil t))
+  (run-hooks 'c-mode-common-hook)
+  (run-hooks 'nesc-mode-hook)
+  (c-update-modeline))
+
+(provide 'nesc-mode)
+
+;;; necs.el ends here
diff --git a/tools/editor-modes/emacs/readme.txt b/tools/editor-modes/emacs/readme.txt
new file mode 100644 (file)
index 0000000..7a90b68
--- /dev/null
@@ -0,0 +1,15 @@
+This nesC mode supports both cc-mode 5.28 and 5.30.x, so should work with
+both emacs and xemacs. Send bug reports (with full emacs and cc-mode version
+details) to dgay@intel-research.net. The cc-mode version can be found
+by executing `M-x c-version'.
+
+To use this nesC mode for emacs, you need to:
+- copy *nesc.el to some directory X (I use ~/lib/emacs/lisp)
+- add the following to your .emacs file:
+
+(setq load-path (cons (expand-file-name "X") load-path))
+(autoload 'nesc-mode "nesc.el")
+(add-to-list 'auto-mode-alist '("\\.nc\\'" . nesc-mode))
+
+David Gay
+dgay@intel-research.net
diff --git a/tools/editor-modes/gedit/ncc.lang b/tools/editor-modes/gedit/ncc.lang
new file mode 100644 (file)
index 0000000..6203f8f
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Authors: Ariel Núñez, Marco Barisione, Emanuele Aina
+ Copyright (C) 2005-2007 Marco Barisione <barisione@gmail.com>
+ Copyright (C) 2005-2007 Emanuele Aina
+ Copyright (C) 2007 Ariel Núñez (Adapted to NesC the cpp.lang written by Marco and Emanuele)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+-->
+<language id="nc" _name="NesC" version="2.0" _section="Sources">
+    <metadata>
+      <property name="mimetypes">application/x-netcdf;text/x-chdr;text/x-csrc;text/plain</property>
+      <property name="globs">*.nc</property>
+      <property name="line-comment-start">//</property>
+      <property name="block-comment-start">/*</property>
+      <property name="block-comment-end">*/</property>
+    </metadata>
+
+    <styles>
+        <style id="keyword" _name="Keyword" map-to="c:keyword"/>
+        <style id="type" _name="Data Type" map-to="c:type"/>
+        <style id="common-defines" _name="Common Defines" map-to="c:common-defines"/>
+    </styles>
+
+    <definitions>
+        <!-- NesC-specific stuff (i.e. stuff which is not C) -->
+        <context id="ncc-proper">
+            <include>
+                <context id="keywords" style-ref="keyword">
+                       <keyword>interface</keyword>
+                       <keyword>norace</keyword>
+                       <keyword>command</keyword>
+                       <keyword>module</keyword>
+                       <keyword>post</keyword>
+                       <keyword>provides</keyword>
+                       <keyword>components</keyword>
+                       <keyword>implementation</keyword>
+                       <keyword>configuration</keyword>
+                       <keyword>includes</keyword>
+                       <keyword>uses</keyword>
+                       <keyword>call</keyword>
+                       <keyword>dbg</keyword>
+                       <keyword>event</keyword>
+                       <keyword>task</keyword>
+                       <keyword>signal</keyword>
+                </context>
+
+                <context id="types" style-ref="type">
+                       <keyword>uint8_t</keyword>
+                       <keyword>uint16_t</keyword>
+                       <keyword>uint32_t</keyword>
+                       <keyword>bool</keyword>
+                       <keyword>result_t</keyword>
+                       <keyword>int32_t</keyword>
+                       <keyword>int16_t</keyword>
+                       <keyword>int8_t</keyword>
+                </context>
+
+                <context id="common-defines" style-ref="common-defines">
+                    <keyword>__STDC__</keyword>
+                </context>
+            </include>
+        </context>
+
+        <!-- actual language definition: NesC-specific stuff plus everything from C -->
+        <context id="nc">
+            <include>
+                <context ref="ncc-proper"/>
+                <context ref="c:c"/>
+            </include>
+        </context>
+    </definitions>
+</language>
diff --git a/tools/editor-modes/gedit/readme.txt b/tools/editor-modes/gedit/readme.txt
new file mode 100644 (file)
index 0000000..be426f8
--- /dev/null
@@ -0,0 +1,16 @@
+Date: Wed, 19 Dec 2007 09:41:51 -0500
+From: "Ariel Mauricio Nunez Gomez" <ingenieroariel@gmail.com>
+Subject: Re: [Tinyos-help] Adding NesC syntax files to tinyos debs
+
+I just checked and there was no one for Gedit. This is the one I created
+based on the cpp one.
+
+It goes in /usr/share/gtksourceview-2.0/language-specs/ncc.lang on Ubuntu
+Gutsy.
+
+I doesn't (yet) automatically apply the style to .nc files (you have to
+check View-> Highlight mode -> Sources -> NesC) I have been playing with
+mimetypes, but no luck yet.
+
+Regards,
+Ariel.
diff --git a/tools/editor-modes/kde/nesc.xml b/tools/editor-modes/kde/nesc.xml
new file mode 100644 (file)
index 0000000..770e3a1
--- /dev/null
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="nesC" version="1.00" kateversion="2.1" section="Sources" extensions="*.nc" mimetype="text/x-ncsrc" priority="5">
+  <highlighting>
+    <list name="keywords">
+      <item> break </item>
+      <item> case </item>
+      <item> continue </item>
+      <item> default </item>
+      <item> do </item>
+      <item> else </item>
+      <item> enum </item>
+      <item> extern </item>
+      <item> for </item>
+      <item> goto </item>
+      <item> if </item>
+      <item> inline </item>
+      <item> return </item>
+      <item> sizeof </item>
+      <item> struct </item>
+      <item> switch </item>
+      <item> typedef </item>
+      <item> union </item>
+      <item> while </item>  <item> interface </item>
+      <item> module </item>
+      <item> configuration </item>
+      <item> implementation </item>
+      <item> components </item>
+      <item> as </item>
+      <item> uses </item>
+      <item> provides </item>
+      <item> includes </item>
+      <item> command </item>
+      <item> event </item>
+      <item> async </item>
+      <item> task </item>
+      <item> norace </item>
+      <item> default </item>
+      <item> __attribute__ </item>
+      <item> atomic </item>
+      <item> call </item>
+      <item> signal </item>
+      <item> post </item>
+      
+    </list>
+    <list name="types">
+      <item> auto </item>
+      <item> char </item>
+      <item> const </item>
+      <item> double </item>
+      <item> float </item>
+      <item> int </item>
+      <item> long </item>
+      <item> register </item>
+      <item> restrict </item>
+      <item> short </item>
+      <item> signed </item>
+      <item> static </item>
+      <item> unsigned </item>
+      <item> void </item>
+      <item> volatile </item>
+      <item> _Imaginary </item>
+      <item> _Complex </item>
+      <item> _Bool </item>
+      <item> bool </item>
+      <item> uint8_t </item>
+      <item> uint16_t </item>
+      <item> uint32_t </item>
+      <item> uint64_t </item>
+      <item> result_t </item>
+      <item> SUCCESS </item>
+      <item> FAIL </item>
+      <item> TRUE </item>
+      <item> FALSE </item>
+      <item> TOSH_INTERRUPT </item>
+      <item> TOSH_SIGNAL </item>
+      <item> TOS_MsgPtr </item>
+      <item> TOS_Msg </item>
+    </list>
+    <list name="attention">
+      <item> FIXME </item>
+      <item> TODO </item>
+      <item> ### </item>
+    </list>
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword attribute="Data Type" context="#stay" String="types"/>
+        <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
+        <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
+        <Float attribute="Float" context="#stay">
+          <AnyChar String="fF" attribute="Float" context="#stay"/>
+        </Float>
+        <HlCOct attribute="Octal" context="#stay"/>
+        <HlCHex attribute="Hex" context="#stay"/>
+        <Int attribute="Decimal" context="#stay" >
+          <StringDetect attribute="Decimal" context="#stay" String="ULL" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="LUL" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="LLU" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="UL" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="LU" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="LL" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="U" insensitive="TRUE"/>
+          <StringDetect attribute="Decimal" context="#stay" String="L" insensitive="TRUE"/>
+        </Int>
+        <HlCChar attribute="Char" context="#stay"/>
+        <DetectChar attribute="String" context="String" char="&quot;"/>
+       <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
+        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <StringDetect attribute="Preprocessor" context="Outscoped" String="#if 0" insensitive="FALSE"/>
+        <DetectChar attribute="Preprocessor" context="Preprocessor" char="#"/>
+        <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
+        <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
+        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+      </context>
+      <context attribute="String" lineEndContext="#pop" name="String">
+        <LineContinue attribute="String" context="#stay"/>
+        <HlCStringChar attribute="String Char" context="#stay"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="Member">
+        <RegExpr attribute="Function" context="#pop" String="\b[_\w][_\w\d]*(?=[\s]*)" />
+      </context>
+      
+            
+      
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+             <IncludeRules context="##Alerts" />
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+             <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+             <keyword attribute="Decimal" context="#stay" String="attention" />
+      </context>
+      
+      
+      
+      
+      
+      
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor">
+        <LineContinue attribute="Preprocessor" context="#stay"/>
+        <RegExpr attribute="Preprocessor" context="Define" String="define.*((?=\\))"/>
+        <RegExpr attribute="Preprocessor" context="#stay" String="define.*"/>
+        <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
+        <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
+        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*" beginRegion="Comment2"/>
+      </context>
+      <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
+        <LineContinue attribute="Preprocessor" context="#stay"/>
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="Commentar/Preprocessor">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment2" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="Some Context"/>
+      <context attribute="Normal Text" lineEndContext="#pop" name="Some Context2"/>
+      <context attribute="Comment" lineEndContext="#stay" name="Outscoped" >
+        <keyword attribute="Decimal" context="#stay" String="attention" />
+        <RegExpr attribute="Comment" context="Outscoped intern" String="^#if" />
+        <RegExpr attribute="Preprocessor" context="#pop" String="#endif" />
+        <RegExpr attribute="Preprocessor" context="#pop" String="#else" />
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="Outscoped intern">
+        <RegExpr attribute="Comment" context="Outscoped intern" String="#if" />
+        <RegExpr attribute="Comment" context="#pop" String="#endif" />
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal Text"  defStyleNum="dsNormal"/>
+      <itemData name="Keyword"      defStyleNum="dsKeyword"/>
+      <itemData name="Function"     defStyleNum="dsKeyword" color="#000080" selColor="#ffffff" bold="0" italic="0"/>
+      <itemData name="Data Type"    defStyleNum="dsDataType"/>
+      <itemData name="Decimal"      defStyleNum="dsDecVal"/>
+      <itemData name="Octal"        defStyleNum="dsBaseN"/>
+      <itemData name="Hex"          defStyleNum="dsBaseN"/>
+      <itemData name="Float"        defStyleNum="dsFloat"/>
+      <itemData name="Char"         defStyleNum="dsChar"/>
+      <itemData name="String"       defStyleNum="dsString"/>
+      <itemData name="String Char"  defStyleNum="dsChar"/>
+      <itemData name="Comment"      defStyleNum="dsComment"/>
+      <itemData name="Symbol"       defStyleNum="dsNormal"/>
+      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
+      <itemData name="Prep. Lib"    defStyleNum="dsOthers"/> <!--,Qt::darkYellow,Qt::yellow,false,false)); -->
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="//" />
+      <comment name="multiLine" start="/*" end="*/" />
+    </comments>
+    <keywords casesensitive="1" />
+  </general>
+</language>
diff --git a/tools/editor-modes/kde/readme.txt b/tools/editor-modes/kde/readme.txt
new file mode 100644 (file)
index 0000000..3a72304
--- /dev/null
@@ -0,0 +1,15 @@
+Subject: Re: [Tinyos] emacs mode for nesC
+From: Vlado Handziski <handzisk@tkn.tu-berlin.de>
+Date: Sat, 14 Feb 2004 10:29:43 +0100
+To: tinyos@Millennium.Berkeley.EDU
+
+Here is one for KDE (kate, kwrite, kdevelop).
+
+Installation:
+
+Just copy the file into $KDEDIR/share/apps/katepart/syntax
+
+Vlado
+
+On Thursday 12 February 2004 22:29, Cory Sharp wrote:
+
diff --git a/tools/editor-modes/vim/filetype.vim b/tools/editor-modes/vim/filetype.vim
new file mode 100644 (file)
index 0000000..f56a279
--- /dev/null
@@ -0,0 +1,10 @@
+" If ~/.vim/filetype.vim does not exist, install this file there.
+" Otherwise, hand merge it with the existing ~/.vim/filetype.vim.
+
+if exists("did_load_filetypes")
+  finish
+endif
+augroup filetypedetect
+  au! BufRead,BufNewFile *.nc   setfiletype nesc
+augroup END
+
diff --git a/tools/editor-modes/vim/nesc.vim b/tools/editor-modes/vim/nesc.vim
new file mode 100644 (file)
index 0000000..8a29dbd
--- /dev/null
@@ -0,0 +1,15 @@
+" Install this file to ~/.vim/syntax/nesc.vim.
+
+runtime! syntax/c.vim
+let b:current_syntax = "nesc"
+
+syn keyword     cStatement      abstract as async atomic call command
+syn keyword     cStatement      components configuration event generic
+syn keyword     cStatement      implementation includes interface module
+syn keyword     cStatement      new norace post provides signal task unique
+syn keyword     cStatement      uniqueCount uses
+
+syn keyword     cType           result_t error_t
+
+syn keyword     cConstant       SUCCESS FAIL TRUE FALSE
+
diff --git a/tools/genc.pm b/tools/genc.pm
new file mode 100644 (file)
index 0000000..8b74908
--- /dev/null
@@ -0,0 +1,269 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+sub gen() {
+    my ($classname, @spec) = @_;
+    my ($p, $up);
+
+    require migdecode;
+    &decode(@spec);
+
+    if (!$ofile || !($ofile =~ /\.h$/)) {
+       &usage("You must use -o <somefilename>.h when generating C");
+    }
+    $cfile = $ofile;
+    $cfile =~ s/\.h$/.c/;
+    $hfile = $ofile;
+    $hfile =~ s/.*[\\\/]//;
+
+    $c_prefix = $message_type if !defined($c_prefix);
+    $p = $c_prefix;
+
+    print "/**\n";
+    print " * This file is automatically generated by mig. DO NOT EDIT THIS FILE.\n";
+    print " * This file defines the layout of the '$message_type' message type.\n";
+    print " */\n\n";
+
+    print "#ifndef \U${p}_H\n";
+    print "#define \U${p}_H\n";
+
+    print "#include <message.h>\n";
+
+    print "\nenum {\n";
+    print "  /** The default size of this message type in bytes. */\n";
+    print "  \U${p}_SIZE = $size,\n\n";
+
+    print "  /** The Active Message type associated with this message. */\n";
+    print "  \U${p}_AM_TYPE = $amtype,\n";
+
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Get field type and accessor
+       $cfield = $field;
+       $cfield =~ s/\./_/g;
+       $uf = "\U${c_prefix}_\U${cfield}";
+       ($ctype, $c_access) = &cbasetype($type, $bitlength);
+
+       print "\n  /* Field $field: ";
+       if (@$amax) {
+         print "type ${ctype}[], element size (bits) $bitlength */\n";
+       } else {
+         print "type $ctype, offset (bits) $offset, size (bits) $bitlength */\n";
+       }
+
+       if (!@$amax) { # not array
+           print_bitsbytes_constant($uf, "offset", $field, $offset, $offset / 8);
+           print_bitsbytes_constant($uf, "size", $field, $bitlength, ($bitlength + 7) / 8);
+       } else { # array
+           print_bitsbytes_constant($uf, "elementsize", $field,
+                                    $bitlength, ($bitlength + 7) / 8);
+           print_constant($uf, "numdimensions", $#$amax + 1,
+                          "The number of dimensions in the array '$field'");
+
+           ### Total number of elements and for each dimension
+           $total = 1; $i = 1;
+           for $n (@$amax) {
+               $total *= $n;
+               print_constant($uf, "numelements_$i", $n,
+                              "Number of elements in dimension $i of array '$field'");
+               $i++;
+           }
+           if ($total != 0) { # Only print this for fixed-sized arrays 
+               print_constant($uf, "numelements", $total,
+                              "Total number of elements in the array '$field'");
+           }
+       }
+    }
+    print "};\n\n";
+
+
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Get field type and accessor
+       $cfield = $field;
+       $cfield =~ s/\./_/g;
+       $uf = "${c_prefix}_${cfield}";
+       ($ctype, $c_access) = &cbasetype($type, $bitlength);
+
+       if (!@$amax) { # not array
+           print_proto($uf, $ctype, "get", "tmsg_t *msg",
+                       "Return the value of the field '$field'");
+           print_proto($uf, "void", "set", "tmsg_t *msg, $ctype value",
+                       "Set the value of the field '$field'");
+       } else { # array
+           $index = 0;
+           @args = map { $index++; "size_t index$index" } @{$amax};
+           $argspec = join(", ", @args);
+
+           print_proto($uf, "size_t", "offset", $argspec,
+                       "Return the byte offset of an element of array '$field'");
+           print_proto($uf, $ctype, "get", "tmsg_t *msg, $argspec",
+                       "Return an element of the array '$field'");
+           print_proto($uf, "void", "set", "tmsg_t *msg, $argspec, $ctype value",
+                       "Set an element of the array '$field'");
+           print_proto($uf, "size_t", "offsetbits", $argspec,
+                       "Return the bit offset of an element of array '$field'");
+       }
+    }
+
+    print "#endif\n";
+
+    close STDOUT;
+    if (!open STDOUT, ">$cfile") {
+       print STDERR "failed to create $cfile\n";
+       exit 1;
+    }
+
+    print "/**\n";
+    print " * This file is automatically generated by mig. DO NOT EDIT THIS FILE.\n";
+    print " * This file implements the functions for encoding and decoding the\n";
+    print " * '$message_type' message type. See $hfile for more details.\n";
+    print " */\n\n";
+    print "#include <message.h>\n";
+    print "#include \"$hfile\"\n\n";
+
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Get field type and accessor
+       $cfield = $field;
+       $cfield =~ s/\./_/g;
+       $uf = "${c_prefix}_${cfield}";
+       ($ctype, $c_access) = &cbasetype($type, $bitlength);
+
+       if (!@$amax) { # not array
+           print_next_header(); # get
+           print "{\n  return tmsg_read_$c_access(msg, $offset, $bitlength);\n}\n\n";
+           print_next_header(); # set
+           print "{\n  tmsg_write_$c_access(msg, $offset, $bitlength, value);\n}\n\n";
+       } else { # array
+           $index = 0;
+           @passargs = map { $index++; "index$index" } @{$amax};
+           $passargs = join(", ", @passargs);
+
+           print_next_header(); # offset
+           print "{\n  return ${uf}_offsetbits($passargs) / 8;\n}\n\n";
+           print_next_header(); # get
+           print "{\n  return tmsg_read_$c_access(msg, ${uf}_offsetbits($passargs), $bitlength);\n}\n\n";
+           print_next_header(); # set
+           print "{\n  tmsg_write_$c_access(msg, ${uf}_offsetbits($passargs), $bitlength, value);\n}\n\n";
+           print_next_header(); # offsetbits
+           print_offsetbits($offset, $amax, $abitsize, $aoffset);
+       }
+    }
+
+}
+
+sub cbasetype()
+{
+    my ($basetype, $bitlength) = @_;
+    my $ctype, $acc;
+
+    if ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+      $acc = "float_le";
+      $ctype = "float";
+    }
+    else {
+       # Pick the C type whose signedness matches and which is the smallest that
+       # is greater or equal to the field size
+       if ($bitlength <= 8) { $ctype = "int8_t"; }
+       elsif ($bitlength <= 16) { $ctype = "int16_t"; }
+       elsif ($bitlength <= 32) { $ctype = "int32_t"; }
+       else { $ctype = "int64_t"; }
+
+       $acc = "";
+       if ($basetype eq "U" || $basetype eq "BU") {
+           $ctype = "u$ctype";
+           $acc .= "u";
+       }
+       if ($basetype eq "BU" || $basetype eq "BI") {
+           $acc .= "be";
+       }
+       else {
+           $acc .= "le";
+       }
+    }
+
+    return ($ctype, $acc);
+}
+
+sub print_bitsbytes_constant {
+    my ($uf, $name, $field, $x, $xbytes) = @_;
+    my ($uname, $cname);
+
+    $xbytes = int($xbytes);
+
+    print "  /** \u$name (in bytes) of the field '$field' */\n";
+    if ((int($x) % 8) != 0) {
+       print "  /*  WARNING: This field is not byte-aligned (bit $name $x). */\n";
+    }
+    print "  ${uf}_\U$name = $xbytes,\n";
+
+    print "  /** \u$name (in bits) of the field '$field' */\n";
+    print "  ${uf}_\U${name}BITS = $x,\n";
+}
+
+sub print_constant {
+    my ($uf, $name, $x, $desc) = @_;
+
+    print "  /** $desc. */\n";
+    print "  ${uf}_\U$name = $x,\n";
+}
+
+sub print_proto {
+    my ($uf, $ctype, $name, $args, $desc) = @_;
+    my ($hdr);
+
+    $hdr = "$ctype ${uf}_${name}($args)";
+    push @headers, $hdr;
+
+    print "/**\n";
+    print " * $desc\n";
+    print " */\n";
+    print "$hdr;\n\n";
+}
+
+sub print_next_header {
+    my ($hdr);
+
+    $hdr = shift @headers;
+    print "$hdr\n";
+}
+
+sub print_offsetbits()
+{
+    my ($offset, $max, $bitsize, $aoffset) = @_;
+
+    print "{\n";
+    print "  size_t offset = $offset;\n";
+    for ($i = 1; $i <= @$max; $i++) {
+       # check index bounds. 0-sized arrays don't get an upper-bound check
+       # (they represent variable size arrays. Normally they should only
+       # occur as the first-dimension of the last element of the structure)
+       if ($$max[$i - 1] != 0) {
+           print "  if (index$i >= $$max[$i - 1]) { tmsg_fail(); return (size_t)-1; }\n";
+       }
+       print "  offset += $$aoffset[$i - 1] + index$i * $$bitsize[$i - 1];\n";
+    }
+    print "  return offset;\n";
+    print "}\n\n";
+}
+
diff --git a/tools/gencsharp.pm b/tools/gencsharp.pm
new file mode 100644 (file)
index 0000000..a6eb771
--- /dev/null
@@ -0,0 +1,574 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+sub gen() {
+    my ($classname, @spec) = @_;
+
+    require migdecode;
+    &decode(@spec);
+
+    &usage("no classname name specified") if !defined($csharp_classname);
+
+    $csharp_extends = "tinyos.message.Message" if !defined($csharp_extends);
+    # See if name has a namespace specifier
+    if ($csharp_classname =~ /(.*)\.([^.]*)$/) {
+       $namespace = $1;
+       $csharp_classname = $2;
+    }
+
+    print "/**\n";
+    print " * This class is automatically generated by mig. DO NOT EDIT THIS FILE.\n";
+    print " * This class implements a C# interface to the '$csharp_classname'\n";
+    print " * message type.\n";
+    print " */\n\n";
+
+    print "using System;\n";
+    print "namespace $namespace {\n\n" if $namespace;
+
+    print "public class $csharp_classname : $csharp_extends {\n\n";
+
+    print "    /** The default size of this message type in bytes. */\n";
+    print "    public const int DEFAULT_MESSAGE_SIZE = $size;\n\n";
+
+    print "    /** The Active Message type associated with this message. */\n";
+    print "    public const int AM_TYPE = $amtype;\n\n";
+
+    print "    /** Create a new $csharp_classname of size $size. */\n";
+    print "    public $csharp_classname() : base(DEFAULT_MESSAGE_SIZE) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /** Create a new $csharp_classname of the given data_length. */\n";
+    print "    public $csharp_classname(int data_length) : base(data_length) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname with the given data_length\n";
+    print "     * and base offset.\n";
+    print "     */\n";
+    print "    public $csharp_classname(int data_length, int base_offset) : base(data_length, base_offset) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname using the given byte array\n";
+    print "     * as backing store.\n";
+    print "     */\n";
+    print "    public $csharp_classname(byte[] data) : base(data) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname using the given byte array\n";
+    print "     * as backing store, with the given base offset.\n";
+    print "     */\n";
+    print "    public $csharp_classname(byte[] data, int base_offset) : base(data, base_offset) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname using the given byte array\n";
+    print "     * as backing store, with the given base offset and data length.\n";
+    print "     */\n";
+    print "    public $csharp_classname(byte[] data, int base_offset, int data_length) : base(data, base_offset, data_length) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname embedded in the given message\n";
+    print "     * at the given base offset.\n";
+    print "     */\n";
+    print "    public $csharp_classname(tinyos.message.Message msg, int base_offset) : base(msg, base_offset, DEFAULT_MESSAGE_SIZE) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $csharp_classname embedded in the given message\n";
+    print "     * at the given base offset and length.\n";
+    print "     */\n";
+    print "    public $csharp_classname(tinyos.message.Message msg, int base_offset, int data_length) : base(msg, base_offset, data_length) {\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "    /* Return a string representation of this message. Includes the\n";
+    print "     * message type name and the non-indexed field values.\n";
+    print "     */\n";
+    print "    public string toString() {\n";
+    print "      string s = \"Message <$csharp_classname> \\n\";\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+        print "      try {\n";
+       $csfield = $field;
+       $csfield =~ s/\./_/g;
+       if (!@$amax) {
+         ($csharptype, $csharp_access, $arrayspec) = &csharpbasetype($type, $bitlength, 0);
+         if ($csharptype eq "float") {
+           print "        s += string.Format(\"  [$field={0}]\\n\", get_$csfield());\n";
+         } else {
+           print "        s += string.Format(\"  [$field={0:x}]\\n\", get_$csfield());\n";
+         }
+       } elsif (@$amax == 1 && $$amax[0] != 0) {
+         ($cstype, $csharp_access, $arrayspec) = &csharpbasetype($type, $bitlength, @$amax);
+          print "        s += \"  [$field=\";\n";
+          print "        for (int i = 0; i < $$amax[0]; i++) {\n";
+         print "          s += string.Format(\"{0} \", get_$csfield());\n";
+#        if ($cstype eq "float") {
+#          print "          s += string.Format(\"{0} \", get_$csfield());\n";
+#        } else {
+#          if ($bitlength > 32) {
+#            print "          s += string.Format(\"{0:x} \", get_$csfield() & 0xffffffffffffffff);\n";
+#          }
+#          elsif (bitlength > 16) {
+#            print "          s += string.Format(\"{0:x} \", get_$csfield() & 0xffffffff);\n";
+#          }
+#          elsif (bitlength > 8) {
+#            print "          s += string.Format(\"{0:x} \", get_$csfield() & 0xffff);\n";
+#          }
+#          else {
+#            print "          s += string.Format(\"{0:x} \", get_$csfield() & 0xff);\n";
+#          }
+#        }
+          print "        }\n";
+          print "        s += \"]\\n\";\n";
+       }
+        print "      } catch (IndexOutOfRangeException aioobe) { /* Skip field */ }\n";
+    }
+    print "      return s;\n";
+    print "    }\n\n";
+
+    print "    // Message-type-specific access methods appear below.\n\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Determine if array
+       if (@$amax) {
+         $isarray = 1;
+         $arraydims = @$amax;
+         $arraysize_bits = $$amax[0] * $$abitsize[0];
+         $index = 0;
+         @args = map { $index++; "int index$index" } @{$amax};
+         $argspec = join(", ", @args);
+         $index = 0;
+         @passargs = map { $index++; "index$index" } @{$amax};
+         $passargs = join(", ", @passargs);
+       } else {
+         $isarray = 0;
+         $arraydims = 0;
+         $arraysize_bits = 0;
+         $argspec = "";
+         $passargs = "";
+       }
+
+        # Determine if signed
+       if ($basetype eq "U" || $basetype eq "BU") {
+         $signed = 0; $signedstr = ", unsigned";
+       } elsif ($basetype eq "I" || $basetype eq "BI") {
+         $signed = 1; $signedstr = ", signed";
+       } elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+         $signed = 1; $signstr = "";
+       }
+
+        # Get field type and accessor
+       $csfield = $field;
+       $csfield =~ s/\./_/g;
+       ($cstype, $csharp_access, $arrayspec) = &csharpbasetype($type, $bitlength, $arraydims);
+
+       print "    /////////////////////////////////////////////////////////\n";
+       print "    // Accessor methods for field: $field\n";
+       if ($isarray) {
+         print "    //   Field type: $cstype$arrayspec$signedstr\n";
+         print "    //   Offset (bits): $offset\n";
+         print "    //   Size of each element (bits): $bitlength\n";
+       } else {
+         print "    //   Field type: $cstype$signedstr\n";
+         print "    //   Offset (bits): $offset\n";
+         print "    //   Size (bits): $bitlength\n";
+       }
+       print "    /////////////////////////////////////////////////////////\n\n";
+        ### isSigned
+       if ($signed) { $strue = "true"; } else { $strue = "false"; }
+       print "    /**\n";
+       print "     * Return whether the field '$field' is signed ($strue).\n";
+       print "     */\n";
+       print "    public static bool isSigned_$csfield() {\n";
+       print "        return $strue;\n";
+       print "    }\n\n";
+
+        ### isArray
+       if ($isarray) { $atrue = "true"; } else { $atrue = "false"; }
+       print "    /**\n";
+       print "     * Return whether the field '$field' is an array ($atrue).\n";
+       print "     */\n";
+       print "    public static bool isArray_$csfield() {\n";
+       print "        return $atrue;\n";
+       print "    }\n\n";
+
+        ### Offset
+       print "    /**\n";
+       print "     * Return the offset (in bytes) of the field '$field'\n";
+       if ((int($offset) % 8) != 0) {
+         print "     * WARNING: This field is not byte-aligned (bit offset $offset).\n";
+       }
+       print "     */\n";
+
+       print "    public static int offset_$csfield($argspec) {\n";
+       if ($isarray) {
+           printoffset($offset, $amax, $abitsize, $aoffset, 0);
+       } else {
+           print "        return ($offset / 8);\n";
+       }
+       print "    }\n\n";
+
+       print "    /**\n";
+       print "     * Return the offset (in bits) of the field '$field'\n";
+       print "     */\n";
+       print "    public static int offsetBits_$csfield($argspec) {\n";
+       if ($isarray) {
+         printoffset($offset, $amax, $abitsize, $aoffset, 1);
+       } else {
+         print "        return $offset;\n";
+       }
+       print "    }\n\n";
+
+
+       if (!$isarray) {
+         ### For non-array fields
+
+          ### Get
+         print "    /**\n";
+         print "     * Return the value (as a $cstype) of the field '$field'\n";
+         print "     */\n";
+         print "    public $cstype get_$csfield() {\n";
+         print "        return ($cstype)get$csharp_access(offsetBits_$csfield(), $bitlength);\n";
+         print "    }\n\n";
+
+          ### Set
+         print "    /**\n";
+         print "     * Set the value of the field '$field'\n";
+         print "     */\n";
+         print "    public void set_$csfield($cstype value) {\n";
+         print "        set$csharp_access(offsetBits_$csfield(), $bitlength, value);\n";
+         print "    }\n\n";
+
+          ### Size
+         print "    /**\n";
+         print "     * Return the size, in bytes, of the field '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "     * WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         } 
+         print "     */\n";
+         print "    public static int size_$csfield() {\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "        return ($bitlength / 8) + 1;\n";
+         } else {
+           print "        return ($bitlength / 8);\n";
+          }
+         print "    }\n\n";
+
+         print "    /**\n";
+         print "     * Return the size, in bits, of the field '$field'\n";
+         print "     */\n";
+         print "    public static int sizeBits_$csfield() {\n";
+         print "        return $bitlength;\n";
+         print "    }\n\n";
+
+       } else {
+          ### For array fields
+
+          ### Get
+         print "    /**\n";
+         print "     * Return the entire array '$field' as a $cstype$arrayspec\n";
+         print "     */\n";
+         print "    public $cstype$arrayspec get_$csfield() {\n";
+         &printarrayget($csfield, $cstype, $arrayspec, $bitlength, $amax, $abitsize);
+         print "    }\n\n";
+
+          ### Set
+         print "    /**\n";
+         print "     * Set the contents of the array '$field' from the given $cstype$arrayspec\n";
+         print "     */\n";
+         print "    public void set_$csfield($cstype$arrayspec value) {\n";
+         &printarrayset($csfield, $cstype, $arrayspec, $bitlength, $amax, $abitsize);
+         print "    }\n\n";
+
+          ### GetElement
+         print "    /**\n";
+         print "     * Return an element (as a $cstype) of the array '$field'\n";
+         print "     */\n";
+         print "    public $cstype getElement_$csfield($argspec) {\n";
+         print "        return ($cstype)get$csharp_access(offsetBits_$csfield($passargs), $bitlength);\n";
+         print "    }\n\n";
+
+          ### SetElement
+         print "    /**\n";
+         print "     * Set an element of the array '$field'\n";
+         print "     */\n";
+         print "    public void setElement_$csfield($argspec, $cstype value) {\n";
+         print "        set$csharp_access(offsetBits_$csfield($passargs), $bitlength, value);\n";
+         print "    }\n\n";
+
+         if ($arraysize_bits != 0) {
+            ### Total size (when array size is known)
+           print "    /**\n";
+           print "     * Return the total size, in bytes, of the array '$field'\n";
+           if ((int($arraysize_bits) % 8) != 0) {
+             print "     * WARNING: This array is not an even-sized number of bytes ($arraysize_bits bits).\n";
+           } 
+           print "     */\n";
+           print "    public static int totalSize_$csfield() {\n";
+           print "        return ($arraysize_bits / 8);\n";
+           print "    }\n\n";
+
+           print "    /**\n";
+           print "     * Return the total size, in bits, of the array '$field'\n";
+           print "     */\n";
+           print "    public static int totalSizeBits_$csfield() {\n";
+           print "        return $arraysize_bits;\n";
+           print "    }\n\n";
+         }
+
+          ### Element size
+         print "    /**\n";
+         print "     * Return the size, in bytes, of each element of the array '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "     * WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         }
+         print "     */\n";
+         print "    public static int elementSize_$csfield() {\n";
+         print "        return ($bitlength / 8);\n";
+         print "    }\n\n";
+
+         print "    /**\n";
+         print "     * Return the size, in bits, of each element of the array '$field'\n";
+         print "     */\n";
+         print "    public static int elementSizeBits_$csfield() {\n";
+         print "        return $bitlength;\n";
+         print "    }\n\n";
+
+          ### Number of dimensions
+         print "    /**\n";
+         print "     * Return the number of dimensions in the array '$field'\n";
+         print "     */\n";
+         print "    public static int numDimensions_$csfield() {\n";
+         print "        return $arraydims;\n";
+         print "    }\n\n";
+
+          ### Number of elements
+         if ($arraydims == 1 && $$amax[0] != 0) {
+            # For 1D arrays where the size of the array is known
+           print "    /**\n";
+           print "     * Return the number of elements in the array '$field'\n";
+           print "     */\n";
+           print "    public static int numElements_$csfield() {\n";
+           print "        return $$amax[0];\n";
+           print "    }\n\n";
+         } 
+         print "    /**\n";
+         print "     * Return the number of elements in the array '$field'\n";
+         print "     * for the given dimension.\n";
+         print "     */\n";
+         print "    public static int numElements_$csfield(int dimension) {\n";
+         print "      int[] array_dims = { ";
+         foreach $e (@$amax) { print "$e, "; }
+         print " };\n";
+         print "        if (dimension < 0 || dimension >= $arraydims) throw new IndexOutOfRangeException();\n";
+         print "        if (array_dims[dimension] == 0) throw new ArgumentException(\"Array dimension \"+dimension+\" has unknown size\");\n";
+         print "        return array_dims[dimension];\n";
+         print "    }\n\n";
+
+          ### String conversions (for 1D arrays of 8-bit values)
+         if ($arraydims == 1 && $bitlength == 8) {
+             print "    /**\n";
+             print "     * Fill in the array '$field' with a String\n";
+             print "     */\n";
+             print "    public void setString_$csfield(string s) { \n";
+             if ($amax[0] != 0) {
+                print "         int len = Math.Min(s.Length, $$amax[0]-1);\n";
+             } else {
+                print "         int len = s.Length;\n";
+             }
+             print "         int i;\n";
+             print "         for (i = 0; i < len; i++) {\n";
+             print "             setElement_$csfield(i, ($cstype)s[i]);\n";
+              print "         }\n";
+             print "         setElement_$csfield(i, ($cstype)0); //null terminate\n";
+             print "    }\n\n";
+
+             print "    /**\n";
+             print "     * Read the array '$field' as a String\n";
+             print "     */\n";
+             print "    public string getString_$csfield() { \n";
+             if ($$amax[0] == 0) {
+                print "         char[] carr = new char[tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH];\n";
+             } else {
+                print "         char[] carr = new char[Math.Min(tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH,$$amax[0])];\n";
+              }
+             print "         int i;\n";
+             print "         for (i = 0; i < carr.Length; i++) {\n";
+             print "             if ((char)getElement_$csfield(i) == (char)0) break;\n";
+             print "             carr[i] = (char)getElement_$csfield(i);\n";
+              print "         }\n";
+              print "         return new string(carr,0,i);\n";
+             print "    }\n\n";
+         }
+       }
+    }
+
+    print "}\n";
+    print "} // End of namespace $namespace\n" if $namespace;
+}
+
+sub csharpbasetype()
+{
+    my ($basetype, $bitlength, $arraydims) = @_;
+    my $cstype, $acc;
+
+    # Pick the C# type whose range is closest to the corresponding C type
+    if ($basetype eq "U" || $basetype eq "BU") {
+      $acc = "UIntElement" if $basetype eq "U";
+      $acc = "UIntBEElement" if $basetype eq "BU";
+      if ($bitlength <= 8) { $cstype = "byte"; }
+      elsif ($bitlength <= 16) { $cstype = "ushort"; }
+      elsif ($bitlength <= 32) { $cstype = "uint"; }
+      else { $cstype = "ulong"; }
+    }
+    elsif ($basetype eq "I" || $basetype eq "BI") {
+      $acc = "SIntElement" if $basetype eq "I";
+      $acc = "SIntBEElement" if $basetype eq "BI";
+      if ($bitlength <= 8) { $cstype = "byte"; }
+      elsif ($bitlength <= 16) { $cstype = "short"; }
+      elsif ($bitlength <= 32) { $cstype = "int"; }
+      else { $cstype = "long"; }
+    }
+    elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+      $acc = "FloatElement";
+      $cstype = "float";
+    }
+
+    if ($arraydims > 0) {
+      # For array types
+      $arrayspec = "";
+      for ($i = 0; $i < $arraydims; $i++) {
+       $arrayspec = "[]" . $arrayspec;
+      }
+    } 
+
+    return ($cstype, $acc, $arrayspec);
+}
+
+sub printoffset()
+{
+    my ($offset, $max, $bitsize, $aoffset, $inbits) = @_;
+
+    print "        int offset = $offset;\n";
+    for ($i = 1; $i <= @$max; $i++) {
+       # check index bounds. 0-sized arrays don't get an upper-bound check
+       # (they represent variable size arrays. Normally they should only
+       # occur as the first-dimension of the last element of the structure)
+       if ($$max[$i - 1] != 0) {
+           print "        if (index$i < 0 || index$i >= $$max[$i - 1]) throw new IndexOutOfRangeException();\n";
+       }
+       else {
+           print "        if (index$i < 0) throw new IndexOutOfRangeException();\n";
+       }
+       print "        offset += $$aoffset[$i - 1] + index$i * $$bitsize[$i - 1];\n";
+    }
+    if ($inbits) {
+      print "        return offset;\n";
+    } else {
+      print "        return (offset / 8);\n";
+    }
+}
+
+sub printarrayget() {
+  my ($csfield, $cstype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  # Check whether array has known size
+  for ($i = 0; $i < @$amax; $i++) {
+    if ($$amax[$i] == 0) {
+      print "        throw new ArgumentException(\"Cannot get field as array - unknown size\");\n";
+      return;
+    }
+  }
+
+  print "        $cstype$arrayspec tmp = new $cstype";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[$$amax[$i]]";
+  }
+  print ";\n";
+
+  $indent = " ";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for (int index$i = 0; index$i < numElements_$csfield($i); index$i++) {\n";
+    $indent = $indent . "  ";
+  }
+  $indent = $indent . "  ";
+  print "      $indent tmp";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print " = getElement_$csfield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ");\n";
+
+  $indent = substr($indent, 0, length($indent)-2);
+  for ($i = 0; $i < @$amax; $i++) {
+    $indent = substr($indent, 0, length($indent)-2);
+    print "      $indent }\n";
+  }
+  print "        return tmp;\n";
+}
+
+sub printarrayset() {
+  my ($csfield, $cstype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  $indent = " ";
+  $val = "";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for (int index$i = 0; index$i < value$val.Length; index$i++) {\n";
+    $val = $val . "[index$i]";
+    $indent = $indent . "  ";
+  }
+  $indent = $indent . "  ";
+  print "      $indent setElement_$csfield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ", value";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print ");\n";
+
+  $indent = substr($indent, 0, length($indent)-2);
+  for ($i = 0; $i < @$amax; $i++) {
+    $indent = substr($indent, 0, length($indent)-2);
+    print "      $indent }\n";
+  }
+}
+
+
+
+
diff --git a/tools/gencstc.pm b/tools/gencstc.pm
new file mode 100644 (file)
index 0000000..112e90f
--- /dev/null
@@ -0,0 +1,39 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+sub gen() {
+    print "/**\n";
+    print " * This file is automatically generated by ncg. DO NOT EDIT THIS FILE.\n";
+    print " * It includes values of some nesC constants from\n";
+    print " * $cfile.\n";
+    print " */\n\n";
+
+    print "enum {\n";
+    foreach $name (keys %csts) {
+       $val = $csts{$name};
+       # Find smallest type that will hold val to avoid annoying
+       # java "loss of precision" errors
+       print ",\n" if $notfirst;
+       $notfirst = 1;
+       $name = "${c_prefix}_$name" if $c_prefix;
+       print "    $name = $val";
+    }
+
+    print "\n};\n";
+}
diff --git a/tools/gencstjava.pm b/tools/gencstjava.pm
new file mode 100644 (file)
index 0000000..fc988df
--- /dev/null
@@ -0,0 +1,60 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+sub gen() {
+    my ($classname, %csts) = @_;
+
+    &usage("no classname name specified") if !defined($java_classname);
+
+    $java_extends = "extends $java_extends" if defined($java_extends);
+    if ($java_classname =~ /(.*)\.([^.]*)$/) {
+       $package = $1;
+       $java_classname = $2;
+    }
+
+    print "/**\n";
+    print " * This class is automatically generated by ncg. DO NOT EDIT THIS FILE.\n";
+    print " * This class includes values of some nesC constants from\n";
+    print " * $cfile.\n";
+    print " */\n\n";
+
+    print "package $package;\n\n" if $package;
+
+    print "public class $java_classname $java_extends {\n";
+
+    foreach $name (keys %csts) {
+       $val = $csts{$name};
+       # Find smallest type that will hold val to avoid annoying
+       # java "loss of precision" errors
+       if ($val >= -128 && $val < 128) {
+           $type = "byte";
+       } elsif ($val >= -32768 && $val < 32768) {
+           $type = "short";
+       } elsif ($val >= 0 && $val < 65536) {
+           $type = "char";
+       } elsif ($val >= -(1 << 31) && $val < (1 << 31)) {
+           $type = "int";
+       } else {
+           $type = "long";
+       }
+       print "    public static final $type $name = $val;\n";
+    }
+
+    print "}\n";
+}
diff --git a/tools/gencstpython.pm b/tools/gencstpython.pm
new file mode 100644 (file)
index 0000000..cdb8f3d
--- /dev/null
@@ -0,0 +1,53 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+#
+# Modified by Geoffrey Mainland <mainland@eecs.harvard.edu>
+# Written by Victor Shnayder <shnayder@eecs.harvard.edu> [11/23/2005]
+#
+
+true;
+
+sub gen() {
+    my ($classname, %csts) = @_;
+
+    &usage("no classname name specified") if !defined($python_classname);
+
+    print " #\n";
+    print " # This class is automatically generated by ncg. DO NOT EDIT THIS FILE.\n";
+    print " # This class includes values of some nesC constants from\n";
+    print " # $cfile.\n";
+    print " #/\n\n";
+    
+    if (defined($python_extends)) {
+       if ($python_extends =~ /(.*)\.([^.]*)$/) {
+           $package = $1;
+           print "import $package\n\n";
+       }
+
+       print "class $python_classname($python_extends):\n";
+    } else {
+       print "class $python_classname:\n";
+    }
+
+    foreach $name (keys %csts) {
+        $val = $csts{$name};
+        print "    $name = $val\n";
+    }
+
+    print "\n";
+}
diff --git a/tools/genjava.pm b/tools/genjava.pm
new file mode 100644 (file)
index 0000000..0875034
--- /dev/null
@@ -0,0 +1,579 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+sub gen() {
+    my ($classname, @spec) = @_;
+
+    require migdecode;
+    &decode(@spec);
+
+    &usage("no classname name specified") if !defined($java_classname);
+
+    $java_extends = "net.tinyos.message.Message" if !defined($java_extends);
+    # See if name has a package specifier
+    if ($java_classname =~ /(.*)\.([^.]*)$/) {
+       $package = $1;
+       $java_classname = $2;
+    }
+
+    print "/**\n";
+    print " * This class is automatically generated by mig. DO NOT EDIT THIS FILE.\n";
+    print " * This class implements a Java interface to the '$java_classname'\n";
+    print " * message type.\n";
+    print " */\n\n";
+
+    print "package $package;\n\n" if $package;
+
+    print "public class $java_classname extends $java_extends {\n\n";
+
+    print "    /** The default size of this message type in bytes. */\n";
+    print "    public static final int DEFAULT_MESSAGE_SIZE = $size;\n\n";
+
+    print "    /** The Active Message type associated with this message. */\n";
+    print "    public static final int AM_TYPE = $amtype;\n\n";
+
+    print "    /** Create a new $java_classname of size $size. */\n";
+    print "    public $java_classname() {\n";
+    print "        super(DEFAULT_MESSAGE_SIZE);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /** Create a new $java_classname of the given data_length. */\n";
+    print "    public $java_classname(int data_length) {\n";
+    print "        super(data_length);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname with the given data_length\n";
+    print "     * and base offset.\n";
+    print "     */\n";
+    print "    public $java_classname(int data_length, int base_offset) {\n";
+    print "        super(data_length, base_offset);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname using the given byte array\n";
+    print "     * as backing store.\n";
+    print "     */\n";
+    print "    public $java_classname(byte[] data) {\n";
+    print "        super(data);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname using the given byte array\n";
+    print "     * as backing store, with the given base offset.\n";
+    print "     */\n";
+    print "    public $java_classname(byte[] data, int base_offset) {\n";
+    print "        super(data, base_offset);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname using the given byte array\n";
+    print "     * as backing store, with the given base offset and data length.\n";
+    print "     */\n";
+    print "    public $java_classname(byte[] data, int base_offset, int data_length) {\n";
+    print "        super(data, base_offset, data_length);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname embedded in the given message\n";
+    print "     * at the given base offset.\n";
+    print "     */\n";
+    print "    public $java_classname(net.tinyos.message.Message msg, int base_offset) {\n";
+    print "        super(msg, base_offset, DEFAULT_MESSAGE_SIZE);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "     * Create a new $java_classname embedded in the given message\n";
+    print "     * at the given base offset and length.\n";
+    print "     */\n";
+    print "    public $java_classname(net.tinyos.message.Message msg, int base_offset, int data_length) {\n";
+    print "        super(msg, base_offset, data_length);\n";
+    print "        amTypeSet(AM_TYPE);\n";
+    print "    }\n\n";
+
+    print "    /**\n";
+    print "    /* Return a String representation of this message. Includes the\n";
+    print "     * message type name and the non-indexed field values.\n";
+    print "     */\n";
+    print "    public String toString() {\n";
+    print "      String s = \"Message <$java_classname> \\n\";\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+        print "      try {\n";
+       $javafield = $field;
+       $javafield =~ s/\./_/g;
+       if (!@$amax) {
+         ($javatype, $java_access, $arrayspec) = &javabasetype($type, $bitlength, 0);
+         if ($javatype eq "float") {
+           print "        s += \"  [$field=\"+Float.toString(get_$javafield())+\"]\\n\";\n";
+         } else {
+           print "        s += \"  [$field=0x\"+Long.toHexString(get_$javafield())+\"]\\n\";\n";
+         }
+       } elsif (@$amax == 1 && $$amax[0] != 0) {
+         ($javatype, $java_access, $arrayspec) = &javabasetype($type, $bitlength, @$amax);
+          print "        s += \"  [$field=\";\n";
+          print "        for (int i = 0; i < $$amax[0]; i++) {\n";
+         if ($javatype eq "float") {
+           print "          s += Float.toString(getElement_$javafield(i))+\" \";\n";
+         } else {
+           if ($bitlength > 32) {
+             print "          s += \"0x\"+Long.toHexString(getElement_$javafield(i))+\" \";\n";
+           }
+           elsif ($bitlength > 16) {
+             print "          s += \"0x\"+Long.toHexString(getElement_$javafield(i) & 0xffffffff)+\" \";\n";
+           }
+           elsif ($bitlength > 8) {
+             print "          s += \"0x\"+Long.toHexString(getElement_$javafield(i) & 0xffff)+\" \";\n";
+           }
+           else {
+             print "          s += \"0x\"+Long.toHexString(getElement_$javafield(i) & 0xff)+\" \";\n";
+           }
+         }
+          print "        }\n";
+          print "        s += \"]\\n\";\n";
+       }
+        print "      } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ }\n";
+    }
+    print "      return s;\n";
+    print "    }\n\n";
+
+    print "    // Message-type-specific access methods appear below.\n\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Determine if array
+       if (@$amax) {
+         $isarray = 1;
+         $arraydims = @$amax;
+         $arraysize_bits = $$amax[0] * $$abitsize[0];
+         $index = 0;
+         @args = map { $index++; "int index$index" } @{$amax};
+         $argspec = join(", ", @args);
+         $index = 0;
+         @passargs = map { $index++; "index$index" } @{$amax};
+         $passargs = join(", ", @passargs);
+       } else {
+         $isarray = 0;
+         $arraydims = 0;
+         $arraysize_bits = 0;
+         $argspec = "";
+         $passargs = "";
+       }
+
+        # Determine if signed
+       if ($basetype eq "U" || $basetype eq "BU") {
+         $signed = 0; $signedstr = ", unsigned";
+       } elsif ($basetype eq "I" || $basetype eq "BI") {
+         $signed = 1; $signedstr = ", signed";
+       } elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+         $signed = 1; $signstr = "";
+       }
+
+        # Get field type and accessor
+       $javafield = $field;
+       $javafield =~ s/\./_/g;
+       ($javatype, $java_access, $arrayspec) = &javabasetype($type, $bitlength, $arraydims);
+
+       print "    /////////////////////////////////////////////////////////\n";
+       print "    // Accessor methods for field: $field\n";
+       if ($isarray) {
+         print "    //   Field type: $javatype$arrayspec$signedstr\n";
+         print "    //   Offset (bits): $offset\n";
+         print "    //   Size of each element (bits): $bitlength\n";
+       } else {
+         print "    //   Field type: $javatype$signedstr\n";
+         print "    //   Offset (bits): $offset\n";
+         print "    //   Size (bits): $bitlength\n";
+       }
+       print "    /////////////////////////////////////////////////////////\n\n";
+        ### isSigned
+       if ($signed) { $strue = "true"; } else { $strue = "false"; }
+       print "    /**\n";
+       print "     * Return whether the field '$field' is signed ($strue).\n";
+       print "     */\n";
+       print "    public static boolean isSigned_$javafield() {\n";
+       print "        return $strue;\n";
+       print "    }\n\n";
+
+        ### isArray
+       if ($isarray) { $atrue = "true"; } else { $atrue = "false"; }
+       print "    /**\n";
+       print "     * Return whether the field '$field' is an array ($atrue).\n";
+       print "     */\n";
+       print "    public static boolean isArray_$javafield() {\n";
+       print "        return $atrue;\n";
+       print "    }\n\n";
+
+        ### Offset
+       print "    /**\n";
+       print "     * Return the offset (in bytes) of the field '$field'\n";
+       if ((int($offset) % 8) != 0) {
+         print "     * WARNING: This field is not byte-aligned (bit offset $offset).\n";
+       }
+       print "     */\n";
+
+       print "    public static int offset_$javafield($argspec) {\n";
+       if ($isarray) {
+           printoffset($offset, $amax, $abitsize, $aoffset, 0);
+       } else {
+           print "        return ($offset / 8);\n";
+       }
+       print "    }\n\n";
+
+       print "    /**\n";
+       print "     * Return the offset (in bits) of the field '$field'\n";
+       print "     */\n";
+       print "    public static int offsetBits_$javafield($argspec) {\n";
+       if ($isarray) {
+         printoffset($offset, $amax, $abitsize, $aoffset, 1);
+       } else {
+         print "        return $offset;\n";
+       }
+       print "    }\n\n";
+
+
+       if (!$isarray) {
+         ### For non-array fields
+
+          ### Get
+         print "    /**\n";
+         print "     * Return the value (as a $javatype) of the field '$field'\n";
+         print "     */\n";
+         print "    public $javatype get_$javafield() {\n";
+         print "        return ($javatype)get$java_access(offsetBits_$javafield(), $bitlength);\n";
+         print "    }\n\n";
+
+          ### Set
+         print "    /**\n";
+         print "     * Set the value of the field '$field'\n";
+         print "     */\n";
+         print "    public void set_$javafield($javatype value) {\n";
+         print "        set$java_access(offsetBits_$javafield(), $bitlength, value);\n";
+         print "    }\n\n";
+
+          ### Size
+         print "    /**\n";
+         print "     * Return the size, in bytes, of the field '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "     * WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         } 
+         print "     */\n";
+         print "    public static int size_$javafield() {\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "        return ($bitlength / 8) + 1;\n";
+         } else {
+           print "        return ($bitlength / 8);\n";
+          }
+         print "    }\n\n";
+
+         print "    /**\n";
+         print "     * Return the size, in bits, of the field '$field'\n";
+         print "     */\n";
+         print "    public static int sizeBits_$javafield() {\n";
+         print "        return $bitlength;\n";
+         print "    }\n\n";
+
+       } else {
+          ### For array fields
+
+          ### Get
+         print "    /**\n";
+         print "     * Return the entire array '$field' as a $javatype$arrayspec\n";
+         print "     */\n";
+         print "    public $javatype$arrayspec get_$javafield() {\n";
+         &printarrayget($javafield, $javatype, $arrayspec, $bitlength, $amax, $abitsize);
+         print "    }\n\n";
+
+          ### Set
+         print "    /**\n";
+         print "     * Set the contents of the array '$field' from the given $javatype$arrayspec\n";
+         print "     */\n";
+         print "    public void set_$javafield($javatype$arrayspec value) {\n";
+         &printarrayset($javafield, $javatype, $arrayspec, $bitlength, $amax, $abitsize);
+         print "    }\n\n";
+
+          ### GetElement
+         print "    /**\n";
+         print "     * Return an element (as a $javatype) of the array '$field'\n";
+         print "     */\n";
+         print "    public $javatype getElement_$javafield($argspec) {\n";
+         print "        return ($javatype)get$java_access(offsetBits_$javafield($passargs), $bitlength);\n";
+         print "    }\n\n";
+
+          ### SetElement
+         print "    /**\n";
+         print "     * Set an element of the array '$field'\n";
+         print "     */\n";
+         print "    public void setElement_$javafield($argspec, $javatype value) {\n";
+         print "        set$java_access(offsetBits_$javafield($passargs), $bitlength, value);\n";
+         print "    }\n\n";
+
+         if ($arraysize_bits != 0) {
+            ### Total size (when array size is known)
+           print "    /**\n";
+           print "     * Return the total size, in bytes, of the array '$field'\n";
+           if ((int($arraysize_bits) % 8) != 0) {
+             print "     * WARNING: This array is not an even-sized number of bytes ($arraysize_bits bits).\n";
+           } 
+           print "     */\n";
+           print "    public static int totalSize_$javafield() {\n";
+           print "        return ($arraysize_bits / 8);\n";
+           print "    }\n\n";
+
+           print "    /**\n";
+           print "     * Return the total size, in bits, of the array '$field'\n";
+           print "     */\n";
+           print "    public static int totalSizeBits_$javafield() {\n";
+           print "        return $arraysize_bits;\n";
+           print "    }\n\n";
+         }
+
+          ### Element size
+         print "    /**\n";
+         print "     * Return the size, in bytes, of each element of the array '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "     * WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         }
+         print "     */\n";
+         print "    public static int elementSize_$javafield() {\n";
+         print "        return ($bitlength / 8);\n";
+         print "    }\n\n";
+
+         print "    /**\n";
+         print "     * Return the size, in bits, of each element of the array '$field'\n";
+         print "     */\n";
+         print "    public static int elementSizeBits_$javafield() {\n";
+         print "        return $bitlength;\n";
+         print "    }\n\n";
+
+          ### Number of dimensions
+         print "    /**\n";
+         print "     * Return the number of dimensions in the array '$field'\n";
+         print "     */\n";
+         print "    public static int numDimensions_$javafield() {\n";
+         print "        return $arraydims;\n";
+         print "    }\n\n";
+
+          ### Number of elements
+         if ($arraydims == 1 && $$amax[0] != 0) {
+            # For 1D arrays where the size of the array is known
+           print "    /**\n";
+           print "     * Return the number of elements in the array '$field'\n";
+           print "     */\n";
+           print "    public static int numElements_$javafield() {\n";
+           print "        return $$amax[0];\n";
+           print "    }\n\n";
+         } 
+         print "    /**\n";
+         print "     * Return the number of elements in the array '$field'\n";
+         print "     * for the given dimension.\n";
+         print "     */\n";
+         print "    public static int numElements_$javafield(int dimension) {\n";
+         print "      int array_dims[] = { ";
+         foreach $e (@$amax) { print "$e, "; }
+         print " };\n";
+         print "        if (dimension < 0 || dimension >= $arraydims) throw new ArrayIndexOutOfBoundsException();\n";
+         print "        if (array_dims[dimension] == 0) throw new IllegalArgumentException(\"Array dimension \"+dimension+\" has unknown size\");\n";
+         print "        return array_dims[dimension];\n";
+         print "    }\n\n";
+
+          ### String conversions (for 1D arrays of 8-bit values)
+         if ($arraydims == 1 && $bitlength == 8) {
+             print "    /**\n";
+             print "     * Fill in the array '$field' with a String\n";
+             print "     */\n";
+             print "    public void setString_$javafield(String s) { \n";
+             if ($amax[0] != 0) {
+                print "         int len = Math.min(s.length(), $$amax[0]-1);\n";
+             } else {
+                print "         int len = s.length();\n";
+             }
+             print "         int i;\n";
+             print "         for (i = 0; i < len; i++) {\n";
+             print "             setElement_$javafield(i, ($javatype)s.charAt(i));\n";
+              print "         }\n";
+             print "         setElement_$javafield(i, ($javatype)0); //null terminate\n";
+             print "    }\n\n";
+
+             print "    /**\n";
+             print "     * Read the array '$field' as a String\n";
+             print "     */\n";
+             print "    public String getString_$javafield() { \n";
+             if ($$amax[0] == 0) {
+                print "         char carr[] = new char[net.tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH];\n";
+             } else {
+                print "         char carr[] = new char[Math.min(net.tinyos.message.Message.MAX_CONVERTED_STRING_LENGTH,$$amax[0])];\n";
+              }
+             print "         int i;\n";
+             print "         for (i = 0; i < carr.length; i++) {\n";
+             print "             if ((char)getElement_$javafield(i) == (char)0) break;\n";
+             print "             carr[i] = (char)getElement_$javafield(i);\n";
+              print "         }\n";
+              print "         return new String(carr,0,i);\n";
+             print "    }\n\n";
+         }
+       }
+    }
+
+    print "}\n";
+}
+
+sub javabasetype()
+{
+    my ($basetype, $bitlength, $arraydims) = @_;
+    my $jtype, $acc;
+
+    # Pick the java type whose range is closest to the corresponding C type
+    if ($basetype eq "U" || $basetype eq "BU") {
+      $acc = "UIntElement" if $basetype eq "U";
+      $acc = "UIntBEElement" if $basetype eq "BU";
+      if ($bitlength < 8) { $jtype = "byte"; }
+      elsif ($bitlength < 16) { $jtype = "short"; }
+      elsif ($bitlength < 32) { $jtype = "int"; }
+      else { $jtype = "long"; }
+    }
+    elsif ($basetype eq "I" || $basetype eq "BI") {
+      $acc = "SIntElement" if $basetype eq "I";
+      $acc = "SIntBEElement" if $basetype eq "BI";
+      if ($bitlength <= 8) { $jtype = "byte"; }
+      elsif ($bitlength <= 16) { $jtype = "short"; }
+      elsif ($bitlength <= 32) { $jtype = "int"; }
+      else { $jtype = "long"; }
+    }
+    elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+      $acc = "FloatElement";
+      $jtype = "float";
+    }
+
+    if ($arraydims > 0) {
+      # For array types
+      $arrayspec = "";
+      for ($i = 0; $i < $arraydims; $i++) {
+       $arrayspec = "[]" . $arrayspec;
+      }
+    } 
+
+    return ($jtype, $acc, $arrayspec);
+}
+
+sub printoffset()
+{
+    my ($offset, $max, $bitsize, $aoffset, $inbits) = @_;
+
+    print "        int offset = $offset;\n";
+    for ($i = 1; $i <= @$max; $i++) {
+       # check index bounds. 0-sized arrays don't get an upper-bound check
+       # (they represent variable size arrays. Normally they should only
+       # occur as the first-dimension of the last element of the structure)
+       if ($$max[$i - 1] != 0) {
+           print "        if (index$i < 0 || index$i >= $$max[$i - 1]) throw new ArrayIndexOutOfBoundsException();\n";
+       }
+       else {
+           print "        if (index$i < 0) throw new ArrayIndexOutOfBoundsException();\n";
+       }
+       print "        offset += $$aoffset[$i - 1] + index$i * $$bitsize[$i - 1];\n";
+    }
+    if ($inbits) {
+      print "        return offset;\n";
+    } else {
+      print "        return (offset / 8);\n";
+    }
+}
+
+sub printarrayget() {
+  my ($javafield, $javatype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  # Check whether array has known size
+  for ($i = 0; $i < @$amax; $i++) {
+    if ($$amax[$i] == 0) {
+      print "        throw new IllegalArgumentException(\"Cannot get field as array - unknown size\");\n";
+      return;
+    }
+  }
+
+  print "        $javatype$arrayspec tmp = new $javatype";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[$$amax[$i]]";
+  }
+  print ";\n";
+
+  $indent = " ";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for (int index$i = 0; index$i < numElements_$javafield($i); index$i++) {\n";
+    $indent = $indent . "  ";
+  }
+  $indent = $indent . "  ";
+  print "      $indent tmp";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print " = getElement_$javafield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ");\n";
+
+  $indent = substr($indent, 0, length($indent)-2);
+  for ($i = 0; $i < @$amax; $i++) {
+    $indent = substr($indent, 0, length($indent)-2);
+    print "      $indent }\n";
+  }
+  print "        return tmp;\n";
+}
+
+sub printarrayset() {
+  my ($javafield, $javatype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  $indent = " ";
+  $val = "";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for (int index$i = 0; index$i < value$val.length; index$i++) {\n";
+    $val = $val . "[index$i]";
+    $indent = $indent . "  ";
+  }
+  $indent = $indent . "  ";
+  print "      $indent setElement_$javafield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ", value";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print ");\n";
+
+  $indent = substr($indent, 0, length($indent)-2);
+  for ($i = 0; $i < @$amax; $i++) {
+    $indent = substr($indent, 0, length($indent)-2);
+    print "      $indent }\n";
+  }
+}
+
+
+
+
diff --git a/tools/genpython.pm b/tools/genpython.pm
new file mode 100644 (file)
index 0000000..9c54aea
--- /dev/null
@@ -0,0 +1,520 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Modified by Philip Levis <pal@cs.stanford.edu> to include support
+#   for network types. [1/4/2006]
+# Written by Geoffrey Mainland <mainland@eecs.harvard.edu>
+#
+
+true;
+
+sub gen() {
+    my ($classname, @spec) = @_;
+
+    require migdecode;
+    &decode(@spec);
+
+    &usage("no classname name specified") if !defined($python_classname);
+
+    $python_extends = "tinyos.message.Message.Message" if !defined($python_extends);
+    if ($python_extends =~ /(.*)\.([^.]*)$/) {
+       $package = $1;
+    }
+
+    print "#\n";
+    print "# This class is automatically generated by mig. DO NOT EDIT THIS FILE.\n";
+    print "# This class implements a Python interface to the '$python_classname'\n";
+    print "# message type.\n";
+    print "#\n\n";
+
+    if (defined($package)) {
+       print "import $package\n\n";
+    }
+
+    print "# The default size of this message type in bytes.\n";
+    print "DEFAULT_MESSAGE_SIZE = $size\n\n";
+
+    print "# The Active Message type associated with this message.\n";
+    print "AM_TYPE = $amtype\n\n";
+
+    print "class $python_classname($python_extends):\n";
+
+    print "    # Create a new $python_classname of size $size.\n";
+    print "    def __init__(self, data=\"\", addr=None, gid=None, base_offset=0, data_length=$size):\n";
+    print "        $python_extends.__init__(self, data, addr, gid, base_offset, data_length)\n";
+    print "        self.amTypeSet(AM_TYPE)\n";
+    print "    \n";
+
+    print "    # Get AM_TYPE\n";
+#    print "    \@classmethod\n";
+    print "    def get_amType(cls):\n";
+    print "        return AM_TYPE\n";
+    print "    \n";
+    print "    get_amType = classmethod(get_amType)\n";
+    print "    \n";
+
+    print "    #\n";
+    print "    # Return a String representation of this message. Includes the\n";
+    print "    # message type name and the non-indexed field values.\n";
+    print "    #\n";
+    print "    def __str__(self):\n";
+    print "        s = \"Message <$python_classname> \\n\"\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+        print "        try:\n";
+       $pythonfield = $field;
+       $pythonfield =~ s/\./_/g;
+       if (!@$amax) {
+         ($pythontype, $python_access, $arrayspec) = &pythonbasetype($type, $bitlength, 0);
+         if ($pythontype eq "float") {
+           print "            s += \"  [$field=%f]\\n\" % (self.get_$pythonfield())\n";
+         } else {
+           print "            s += \"  [$field=0x%x]\\n\" % (self.get_$pythonfield())\n";
+         }
+       } elsif (@$amax == 1 && $$amax[0] != 0) {
+         ($pythontype, $python_access, $arrayspec) = &pythonbasetype($type, $bitlength, @$amax);
+          print "            s += \"  [$field=\";\n";
+          print "            for i in range(0, $$amax[0]):\n";
+         if ($pythontype eq "float") {
+           print "                s += \"%f \" % (self.getElement_$pythonfield(i))\n";
+         } else {
+           if ($bitlength > 32) {
+             print "                s += \"0x%x \" % (self.getElement_$pythonfield(i))\n";
+           }
+           elsif (bitlength > 16) {
+             print "                s += \"0x%x \" % (self.getElement_$pythonfield(i) & 0xffffffff)\n";
+           }
+           elsif (bitlength > 8) {
+             print "                s += \"0x%x \" % (self.getElement_$pythonfield(i) & 0xffff)\n";
+           }
+           else {
+             print "                s += \"0x%x \" % (self.getElement_$pythonfield(i) & 0xff)\n";
+           }
+         }
+          print "            s += \"]\\n\";\n"
+       } else {
+           print "            pass\n";
+       }
+        print "        except:\n";
+        print "            pass\n";
+    }
+    print "        return s\n";
+
+    print "\n";
+    print "    # Message-type-specific access methods appear below.\n\n";
+    for (@fields) {
+       ($field, $type, $bitlength, $offset, $amax, $abitsize, $aoffset) = @{$_};
+
+        # Determine if array
+       if (@$amax) {
+         $isarray = 1;
+         $arraydims = @$amax;
+         $arraysize_bits = $$amax[0] * $$abitsize[0];
+         $index = 0;
+         @args = map { $index++; "index$index" } @{$amax};
+         $argspec = join(", ", @args);
+         $index = 0;
+         @passargs = map { $index++; "index$index" } @{$amax};
+         $passargs = join(", ", @passargs);
+       } else {
+         $isarray = 0;
+         $arraydims = 0;
+         $arraysize_bits = 0;
+         $argspec = "";
+         $passargs = "";
+       }
+
+        # Determine if signed
+       if ($basetype eq "U") {
+         $signed = 0; $signedstr = ", unsigned";
+       } elsif ($basetype eq "I") {
+         $signed = 1; $signedstr = ", signed";
+       } elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+         $signed = 1; $signstr = "";
+       }
+
+        # Get field type and accessor
+       $pythonfield = $field;
+       $pythonfield =~ s/\./_/g;
+       ($pythontype, $python_access, $arrayspec, $big_endian) = &pythonbasetype($type, $bitlength, $arraydims);
+
+       print "    #\n";
+       print "    # Accessor methods for field: $field\n";
+       if ($isarray) {
+         print "    #   Field type: $pythontype$arrayspec$signedstr\n";
+         print "    #   Offset (bits): $offset\n";
+         print "    #   Size of each element (bits): $bitlength\n";
+       } else {
+         print "    #   Field type: $pythontype$signedstr\n";
+         print "    #   Offset (bits): $offset\n";
+         print "    #   Size (bits): $bitlength\n";
+       }
+       print "    #\n\n";
+        ### isSigned
+       if ($signed) { $strue = "True"; } else { $strue = "False"; }
+       print "    #\n";
+       print "    # Return whether the field '$field' is signed ($strue).\n";
+       print "    #\n";
+       print "    def isSigned_$pythonfield(self):\n";
+       print "        return $strue\n";
+       print "    \n";
+
+        ### isArray
+       if ($isarray) { $atrue = "True"; } else { $atrue = "False"; }
+       print "    #\n";
+       print "    # Return whether the field '$field' is an array ($atrue).\n";
+       print "    #\n";
+       print "    def isArray_$pythonfield(self):\n";
+       print "        return $atrue\n";
+       print "    \n";
+
+        ### Offset
+       print "    #\n";
+       print "    # Return the offset (in bytes) of the field '$field'\n";
+       if ((int($offset) % 8) != 0) {
+         print "  # WARNING: This field is not byte-aligned (bit offset $offset).\n";
+       }
+       print "    #\n";
+
+       if ($isarray) {
+           print "    def offset_$pythonfield(self, $argspec):\n";
+           printoffset($offset, $amax, $abitsize, $aoffset, 0);
+       } else {
+           print "    def offset_$pythonfield(self):\n";
+           print "        return ($offset / 8)\n";
+       }
+       print "    \n";
+
+       print "    #\n";
+       print "    # Return the offset (in bits) of the field '$field'\n";
+       print "    #\n";
+       if ($isarray) {
+         print "    def offsetBits_$pythonfield(self, $argspec):\n";
+         printoffset($offset, $amax, $abitsize, $aoffset, 1);
+       } else {
+         print "    def offsetBits_$pythonfield(self):\n";
+         print "        return $offset\n";
+       }
+       print "    \n";
+
+
+       if (!$isarray) {
+         ### For non-array fields
+
+          ### Get
+         print "    #\n";
+         print "    # Return the value (as a $pythontype) of the field '$field'\n";
+         print "    #\n";
+         print "    def get_$pythonfield(self):\n";
+         print "        return self.get$python_access(self.offsetBits_$pythonfield(), $bitlength, $big_endian)\n";
+         print "    \n";
+
+          ### Set
+         print "    #\n";
+         print "    # Set the value of the field '$field'\n";
+         print "    #\n";
+         print "    def set_$pythonfield(self, value):\n";
+         print "        self.set$python_access(self.offsetBits_$pythonfield(), $bitlength, value, $big_endian)\n";
+         print "    \n";
+
+          ### Size
+         print "    #\n";
+         print "    # Return the size, in bytes, of the field '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "    # WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         } 
+         print "    #\n";
+         print "    def size_$pythonfield(self):\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "        return ($bitlength / 8) + 1\n";
+         } else {
+           print "        return ($bitlength / 8)\n";
+          }
+         print "    \n";
+
+         print "    #\n";
+         print "    # Return the size, in bits, of the field '$field'\n";
+         print "    #\n";
+         print "    def sizeBits_$pythonfield(self):\n";
+         print "        return $bitlength\n";
+         print "    \n";
+
+       } else {
+          ### For array fields
+
+          ### Get
+         print "    #\n";
+         print "    # Return the entire array '$field' as a $pythontype$arrayspec\n";
+         print "    #\n";
+         print "    def get_$pythonfield(self):\n";
+         &printarrayget($pythonfield, $pythontype, $arrayspec, $bitlength, $amax, $abitsize);
+         print "    \n";
+
+          ### Set
+         print "    #\n";
+         print "    # Set the contents of the array '$field' from the given $pythontype$arrayspec\n";
+         print "    #\n";
+         print "    def set_$pythonfield(self, value):\n";
+         &printarrayset($pythonfield, $pythontype, $arrayspec, $bitlength, $amax, $abitsize);
+
+          ### GetElement
+         print "    #\n";
+         print "    # Return an element (as a $pythontype) of the array '$field'\n";
+         print "    #\n";
+         print "    def getElement_$pythonfield(self, $argspec):\n";
+         print "        return self.get$python_access(self.offsetBits_$pythonfield($passargs), $bitlength, $big_endian)\n";
+         print "    \n";
+
+          ### SetElement
+         print "    #\n";
+         print "    # Set an element of the array '$field'\n";
+         print "    #\n";
+         print "    def setElement_$pythonfield(self, $argspec, value):\n";
+         print "        self.set$python_access(self.offsetBits_$pythonfield($passargs), $bitlength, value, $big_endian)\n";
+         print "    \n";
+
+         if ($arraysize_bits != 0) {
+            ### Total size (when array size is known)
+           print "    #\n";
+           print "    # Return the total size, in bytes, of the array '$field'\n";
+           if ((int($arraysize_bits) % 8) != 0) {
+             print "     # WARNING: This array is not an even-sized number of bytes ($arraysize_bits bits).\n";
+           } 
+           print "    #\n";
+           print "    def totalSize_$pythonfield(self):\n";
+           print "        return ($arraysize_bits / 8)\n";
+           print "    \n";
+
+           print "    #\n";
+           print "    # Return the total size, in bits, of the array '$field'\n";
+           print "    #\n";
+           print "    def totalSizeBits_$pythonfield(self):\n";
+           print "        return $arraysize_bits\n";
+           print "    \n";
+         }
+
+          ### Element size
+         print "    #\n";
+         print "    # Return the size, in bytes, of each element of the array '$field'\n";
+         if ((int($bitlength) % 8) != 0) {
+           print "     # WARNING: This field is not an even-sized number of bytes ($bitlength bits).\n";
+         }
+         print "    #\n";
+         print "    def elementSize_$pythonfield(self):\n";
+         print "        return ($bitlength / 8)\n";
+         print "    \n";
+
+         print "    #\n";
+         print "    # Return the size, in bits, of each element of the array '$field'\n";
+         print "    #\n";
+         print "    def elementSizeBits_$pythonfield(self):\n";
+         print "        return $bitlength\n";
+         print "    \n";
+
+          ### Number of dimensions
+         print "    #\n";
+         print "    # Return the number of dimensions in the array '$field'\n";
+         print "    #\n";
+         print "    def numDimensions_$pythonfield(self):\n";
+         print "        return $arraydims\n";
+         print "    \n";
+
+          ### Number of elements
+         if ($arraydims == 1 && $$amax[0] != 0) {
+            # For 1D arrays where the size of the array is known
+           print "    #\n";
+           print "    # Return the number of elements in the array '$field'\n";
+           print "    #\n";
+           print "    def numElements_$pythonfield():\n";
+           print "        return $$amax[0]\n";
+           print "    \n";
+         } 
+         print "    #\n";
+         print "    # Return the number of elements in the array '$field'\n";
+         print "    # for the given dimension.\n";
+         print "    #\n";
+         print "    def numElements_$pythonfield(self, dimension):\n";
+         print "        array_dims = [ ";
+         foreach $e (@$amax) { print "$e, "; }
+         print " ]\n";
+         print "        if dimension < 0 or dimension >= $arraydims:\n";
+         print "            raise IndexException\n";
+         print "        if array_dims[dimension] == 0:\n";
+         print "            raise IndexError\n";
+         print "        return array_dims[dimension]\n";
+         print "    \n";
+
+          ### String conversions (for 1D arrays of 8-bit values)
+         if ($arraydims == 1 && $bitlength == 8) {
+             print "    #\n";
+             print "    # Fill in the array '$field' with a String\n";
+             print "    #\n";
+             print "    def setString_$pythonfield(self, s):\n";
+             if ($amax[0] != 0) {
+                print "         l = min(len(s), $$amax[0]-1)\n";
+             } else {
+                print "         l = len(s)\n";
+             }
+             print "         for i in range(0, l):\n";
+             print "             self.setElement_$pythonfield(i, ord(s[i]));\n";
+             print "         self.setElement_$pythonfield(l, 0) #null terminate\n";
+             print "    \n";
+
+             print "    #\n";
+             print "    # Read the array '$field' as a String\n";
+             print "    #\n";
+             print "    def getString_$pythonfield(self):\n";
+             print "        carr = \"\";\n";
+             print "        for i in range(0, 4000):\n";
+             print "            if self.getElement_$pythonfield(i) == chr(0):\n";
+             print "                break\n";
+             print "            carr += self.getElement_$pythonfield(i)\n";
+              print "        return carr\n";
+             print "    \n";
+         }
+       }
+    }
+}
+
+sub pythonbasetype()
+{
+    my ($basetype, $bitlength, $arraydims) = @_;
+    my $jtype, $acc;
+
+    # Pick the python type whose range is closest to the corresponding C type
+    $big_endian = 0;
+    if (substr($basetype,0,1) eq "B") {
+      $big_endian = 1;
+      $basetype = substr($basetype, 1, length($basetype));
+    }
+    
+    if ($basetype eq "U") {
+      $acc = "UIntElement";
+      if ($bitlength < 8) { $jtype = "byte"; }
+      elsif ($bitlength < 16) { $jtype = "short"; }
+      elsif ($bitlength < 32) { $jtype = "int"; }
+      else { $jtype = "long"; }
+    }
+    elsif ($basetype eq "I") {
+      $acc = "SIntElement";
+      if ($bitlength <= 8) { $jtype = "byte"; }
+      elsif ($bitlength <= 16) { $jtype = "short"; }
+      elsif ($bitlength <= 32) { $jtype = "int"; }
+      else { $jtype = "long"; }
+    }
+    elsif ($basetype eq "F" || $basetype eq "D" || $basetype eq "LD") {
+      $acc = "FloatElement";
+      $jtype = "float";
+    }
+
+    if ($arraydims > 0) {
+      # For array types
+      $arrayspec = "";
+      for ($i = 0; $i < $arraydims; $i++) {
+       $arrayspec = "[]" . $arrayspec;
+      }
+    } 
+
+    return ($jtype, $acc, $arrayspec, $big_endian);
+}
+
+sub printoffset()
+{
+    my ($offset, $max, $bitsize, $aoffset, $inbits) = @_;
+
+    print "        offset = $offset\n";
+    for ($i = 1; $i <= @$max; $i++) {
+       # check index bounds. 0-sized arrays don't get an upper-bound check
+       # (they represent variable size arrays. Normally they should only
+       # occur as the first-dimension of the last element of the structure)
+       if ($$max[$i - 1] != 0) {
+           print "        if index$i < 0 or index$i >= $$max[$i - 1]:\n";
+           print "            raise IndexError\n";
+       }
+       else {
+           print "        if index$i < 0:\n";
+           print "            raise IndexError\n";
+       }
+       print "        offset += $$aoffset[$i - 1] + index$i * $$bitsize[$i - 1]\n";
+    }
+    if ($inbits) {
+      print "        return offset\n";
+    } else {
+      print "        return (offset / 8)\n";
+    }
+}
+
+sub printarrayget() {
+  my ($pythonfield, $pythontype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  # Check whether array has known size
+  for ($i = 0; $i < @$amax; $i++) {
+    if ($$amax[$i] == 0) {
+      print "        raise IndexError\n";
+      return;
+    }
+  }
+
+  print "        tmp = ";
+  $temp = "None";
+  for ($i = 0; $i < @$amax; $i++) {
+    $temp = "[$temp]*$$amax[$i]";
+  }
+  print "$temp\n";
+
+  $indent = " ";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for index$i in range (0, self.numElements_$pythonfield($i)):\n";
+    $indent = $indent . "    ";
+  }
+  $indent = $indent . "    ";
+  print "      $indent tmp";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print " = self.getElement_$pythonfield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ")\n";
+
+  print "        return tmp\n";
+}
+
+sub printarrayset() {
+  my ($pythonfield, $pythontype, $arrayspec, $bitlength, $amax, $abitsize) = @_;
+
+  $indent = " ";
+  $val = "";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "      $indent for index$i in range(0, len(value)):\n";
+    $val = $val . "[index$i]";
+    $indent = $indent . "    ";
+  }
+  $indent = $indent . "";
+  print "      $indent self.setElement_$pythonfield(";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "index$i";
+    if ($i != @$amax-1) { print ","; }
+  }
+  print ", value";
+  for ($i = 0; $i < @$amax; $i++) {
+    print "[index$i]";
+  }
+  print ")\n\n";
+}
diff --git a/tools/java/Makefile.am b/tools/java/Makefile.am
new file mode 100644 (file)
index 0000000..e2441cc
--- /dev/null
@@ -0,0 +1,12 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = net
+
diff --git a/tools/java/Makefile.in b/tools/java/Makefile.in
new file mode 100644 (file)
index 0000000..16389f5
--- /dev/null
@@ -0,0 +1,456 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = net
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+# 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/tools/java/net/Makefile.am b/tools/java/net/Makefile.am
new file mode 100644 (file)
index 0000000..3e1daa2
--- /dev/null
@@ -0,0 +1,12 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = tinyos
+
diff --git a/tools/java/net/Makefile.in b/tools/java/net/Makefile.in
new file mode 100644 (file)
index 0000000..52138f2
--- /dev/null
@@ -0,0 +1,456 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = tinyos
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+# 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/tools/java/net/tinyos/Makefile.am b/tools/java/net/tinyos/Makefile.am
new file mode 100644 (file)
index 0000000..0955e5f
--- /dev/null
@@ -0,0 +1,12 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = nesc
+
diff --git a/tools/java/net/tinyos/Makefile.in b/tools/java/net/tinyos/Makefile.in
new file mode 100644 (file)
index 0000000..4ff9d69
--- /dev/null
@@ -0,0 +1,456 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net/tinyos
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = nesc
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/tinyos/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/tinyos/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+# 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/tools/java/net/tinyos/nesc/Makefile.am b/tools/java/net/tinyos/nesc/Makefile.am
new file mode 100644 (file)
index 0000000..d1c83fd
--- /dev/null
@@ -0,0 +1,11 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = wiring dump
diff --git a/tools/java/net/tinyos/nesc/Makefile.in b/tools/java/net/tinyos/nesc/Makefile.in
new file mode 100644 (file)
index 0000000..d32e9be
--- /dev/null
@@ -0,0 +1,456 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net/tinyos/nesc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = wiring dump
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+# 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/tools/java/net/tinyos/nesc/dump/Makefile.am b/tools/java/net/tinyos/nesc/dump/Makefile.am
new file mode 100644 (file)
index 0000000..95fde12
--- /dev/null
@@ -0,0 +1,24 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = xml
+
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = README $(java_files)
+ROOT=../../../..
+
+noinst_DATA = $(class_files)
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT) 2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
diff --git a/tools/java/net/tinyos/nesc/dump/Makefile.in b/tools/java/net/tinyos/nesc/dump/Makefile.in
new file mode 100644 (file)
index 0000000..51852ff
--- /dev/null
@@ -0,0 +1,469 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net/tinyos/nesc/dump
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+DATA = $(noinst_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = xml
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = README $(java_files)
+ROOT = ../../../..
+noinst_DATA = $(class_files)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/dump/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/dump/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic ctags \
+       ctags-recursive distclean distclean-generic distclean-tags \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
+
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT) 2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
+# 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/tools/java/net/tinyos/nesc/dump/NDReader.java b/tools/java/net/tinyos/nesc/dump/NDReader.java
new file mode 100644 (file)
index 0000000..8c38a46
--- /dev/null
@@ -0,0 +1,215 @@
+// $Id: NDReader.java,v 1.9 2006/01/04 22:31:13 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/**
+ * Reader for nesC XML dump files.  The parser is based on SAX XML
+ * parser. For each nesC element baz, the reader attempts to create an
+ * instance of the Xbaz class (and -'s are replaced with _'s). All
+ * such classes must extend (directly or indirectly)
+ * net.tinyos.nesc.dump.xml.NDElement.  The attributes and subelements
+ * of baz will be passed to various methods of
+ * net.tinyos.nesc.dump.xml.NDElement, see it's documentations for
+ * details.
+ * <p>
+ * The Xbaz classes are in the net.tinyos.nesc.dump.xml package. Users
+ * can extend these classes and have the NDReader create their classes
+ * rather than the standard ones if they so choose.  
+ * <p>
+ * See the documentation of the Xbaz classes in net.tinyos.nesc.dump.xml
+ * for information on the Java representation of the XML elements.
+ *
+ * @see net.tinyos.nesc.dump.xml
+ * @see net.tinyos.nesc.dump.xml.NDElement
+ *
+ * @author David Gay
+ */
+
+package net.tinyos.nesc.dump;
+
+import net.tinyos.nesc.dump.xml.NDElement;
+import net.tinyos.nesc.dump.xml.Xnesc;
+import org.xml.sax.*;
+import org.xml.sax.helpers.*;
+import java.io.*;
+import java.util.*;
+import java.lang.reflect.*;
+
+public class NDReader extends DefaultHandler
+{
+    protected XMLReader parser;
+    /* The elements currently being parsed */
+    protected Stack activeElements = new Stack();
+
+    /* Packages in which to search for XML element classes */
+    protected String userPkg; /* user-specfied package to search */
+    final static String standardPkg = "net.tinyos.nesc.dump.xml";
+
+    /**
+     * Create a new nesC dump reader, that builds the standard elements
+     * found in net.tinyos.nesc.dump.xml 
+     */
+    public NDReader() throws SAXException {
+       this(null);
+    }
+
+    /**
+     * Create a new nesC dump reader, that checks userPkg for XML
+     * element classes. If there is no user-specified class, the class
+     * from net.tinyos.nesc.dump.xml is used.
+     *
+     * @param userPkg package to search for XML element classes before
+     *   net.tinyos.nesc.dump.xml
+     */
+    public NDReader(String userPkg) throws SAXException {
+       this.userPkg = userPkg;
+       /* Try to create an XML reader, starting with the default one, then 
+          trying those provided with Sun and IBM's JREs */
+       try {
+           parser = XMLReaderFactory.createXMLReader();
+       }
+       catch (SAXException e1) {
+           try {
+               parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
+           }
+           catch (SAXException e2) {
+               parser = XMLReaderFactory.createXMLReader("org.apache.crimson.parser.XMLReaderImpl");
+           }
+       }
+       parser.setContentHandler(this);
+    }
+
+    /**
+     * Parse nesC XML elements from input source 'source'.
+     * @param source InputSource to read from.
+     * @return TRUE if the parse completed successfully (no SAX exceptions)
+     */
+    public boolean parse(InputSource source) throws IOException {
+       try {
+           Xnesc.reset();
+           parser.parse(source);
+           return true;
+       }
+       catch (SAXException e) {
+           return false;
+       }
+    }
+
+    /**
+     * Parse nesC XML elements from input source 'id'.
+     * @param id input source string to read from.
+     * @return TRUE if the parse completed successfully (no SAX exceptions)
+     */
+    public boolean parse(String id) throws IOException {
+       return parse(new InputSource(id));
+    }
+
+    protected NDElement makeElementIn(String pkg, String name)
+       throws Exception {
+       /* Invoke the default constructor for the class for element name
+          in pkg pkg */
+       return (NDElement)Class.forName(pkg + "." + name).newInstance();
+    }
+
+    /**
+     * Create Java class for XML element 'name', checking the user package
+     * (if any) before the net.tinyos.nesc.dump.xml package.
+     * @param XML element name
+     * @return The newly created class
+     */
+    public NDElement makeElement(String name) throws Exception {
+       name = "X" + name.replace('-', '_');
+       if (userPkg != null) {
+           try {
+               return makeElementIn(userPkg, name);
+           }
+           catch (Exception e) { }
+       }
+       return makeElementIn(standardPkg, name);
+    }
+
+    /**
+     * Return the parent of the element currently being parsed
+     * (note: does not work from within the NDElement.end() method)
+     * @return Parent of current element.
+     */
+    public NDElement parent() {
+       return (NDElement)activeElements.elementAt(activeElements.size() - 2);
+    }
+
+    /* SAX parsing methods */
+
+    public void startElement(String uri, String localName, String qName,
+                            Attributes attrs) {
+       NDElement element = null;
+
+       /* Create the Java class for this element, call it's start method
+          and save the result to the active elements stack */
+       try {
+           element = makeElement(localName);
+       }
+       catch (Exception e) {
+           System.err.println("element " + localName + " not supported. " + e);
+       }
+       if (element != null)
+           element = element.start(this, attrs);
+       activeElements.push(element);
+    }
+
+    public void endElement(String uri, String localName, String qName) {
+       /* Finalize element, and signal parent's child method */
+       NDElement current = (NDElement)activeElements.pop();
+
+       if (current == null)
+           return;
+       current = current.end(this);
+       if (current == null)
+           return;
+
+       if (!activeElements.empty()) {
+           NDElement parent = (NDElement)activeElements.peek();
+           parent.child(this, current);
+       }
+    }
+
+    /* The current spec doesn't actually use any whitespace or character
+       contents */
+
+    public void ignorableWhitespace(char[] ch, int start, int length) {
+       NDElement current = (NDElement)activeElements.peek();
+       if (current != null) {
+           current.whitespace();
+       }
+    }
+
+    public void characters(char[] ch, int start, int length) {
+       NDElement current = (NDElement)activeElements.peek();
+       if (current != null) {
+           current.characters(ch, start, length);
+       }
+    }
+
+    /**
+     * Test method.
+     */
+    public static void main(String[] args) throws IOException {
+       try {
+        for (int i = 0; i < args.length; i++) {
+               if (new NDReader().parse(args[i]))
+                       System.out.println("parse ok");
+               else
+                       System.out.println("parse exceptions occured");
+        }
+       }
+       catch (SAXException e) {
+           System.err.println("no xml reader found");
+       }
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/README b/tools/java/net/tinyos/nesc/dump/README
new file mode 100644 (file)
index 0000000..bb559ab
--- /dev/null
@@ -0,0 +1,6 @@
+Support classes for reading nesC XML dump information. The schema for
+the XML elements is in doc/dump.
+
+The main class for reading the XML dumps is NDReader. Each XML element is 
+parsed as a Java class; these classes are found in the net.tinyos.nesc.dump.xml
+package. See the documentation in these classes for detailed information.
diff --git a/tools/java/net/tinyos/nesc/dump/xml/CDefinition.java b/tools/java/net/tinyos/nesc/dump/xml/CDefinition.java
new file mode 100644 (file)
index 0000000..455ae21
--- /dev/null
@@ -0,0 +1,34 @@
+// $Id: CDefinition.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for definitions of C symbols (tags, variables, etc). These all
+ * have a container (null for globals).
+ */
+abstract public class CDefinition extends Definition
+{
+    /**
+     * (definition only) What contains this definition. Null for symbols from
+     * the global scope. 
+     */
+    public Container container;
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Container)
+           container = (Container)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Constant.java b/tools/java/net/tinyos/nesc/dump/xml/Constant.java
new file mode 100644 (file)
index 0000000..d90da1f
--- /dev/null
@@ -0,0 +1,65 @@
+// $Id: Constant.java,v 1.5 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Base class for nesC constants. nesC constants are encoded in attribute
+ * strings. Note that there are representations for "unknown constant" and
+ * "non constant" values.
+ * <p>
+ * equals() is defined on Constant objects. Unknown and non constant
+ * objects compare different with every other constant (including themselves).
+ * <p>
+ * Note that constants (ex: 32, "fun", 2+3) are different from C initialisers
+ * (ex: { 1, 2, { .x = 3 } }). An initialiser is represented by an object of
+ * type Value. Constants can appear in initialisers (see Xvalue). 
+ * @see net.tinyos.nesc.dump.xml.Value
+ * @see net.tinyos.nesc.dump.xml.Xvalue
+ */
+abstract public class Constant
+{
+    /**
+     * Decode a nesC constant string.
+     * @param s String to decode.
+     * @return An object representing the constant encoded by s
+     */
+    public static Constant decode(String s) {
+       /* Constants un in generic components don't have a known value */
+       if (s == null)
+           return new UnknownConstant();
+
+       switch (s.charAt(0)) {
+       case 'I': return new IntegerConstant(s);
+       case 'F': return new FloatConstant(s);
+       case 'S': return new StringConstant(s);
+       case 'V': return new NonConstant();
+       case 'U': default: return new UnknownConstant();
+       }
+    }
+
+    /** 
+     * Is the constant a known constant? 
+     * @return true of the object represents an integer, floating
+     * point or string
+     */
+    public boolean known() {
+       return false;
+    }
+
+    /**
+     * Does this object represent an actual constant?
+     * @return true if the object represents a constant
+     */
+    public boolean constant() {
+       return false;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Container.java b/tools/java/net/tinyos/nesc/dump/xml/Container.java
new file mode 100644 (file)
index 0000000..0a7db08
--- /dev/null
@@ -0,0 +1,23 @@
+// $Id: Container.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Interface implemented by elements that represent containers for C symbols
+ * (typedefs, tags, variables, etc). See classes inheriting from CDefinition.
+ * @see net.tintyos.nesc.dump.xml.CDefinition
+ */
+public interface Container
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/DataDefinition.java b/tools/java/net/tinyos/nesc/dump/xml/DataDefinition.java
new file mode 100644 (file)
index 0000000..6183ee7
--- /dev/null
@@ -0,0 +1,119 @@
+// $Id: DataDefinition.java,v 1.11 2005/10/20 03:27:33 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/*
+@Copyright (c) 2005 The Regents of the University of California.
+All rights reserved.
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in all
+copies of this software.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ENHANCEMENTS, OR MODIFICATIONS.
+
+                                                PT_COPYRIGHT_VERSION_2
+                                                COPYRIGHTENDKEY
+
+
+*/
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for definitions of C objects (typedefs, variables, functions, 
+ * constants, interfaces, and internal-components (component references in
+ * configurations). These are uniquely identified by their 'ref' attribute.
+ *
+ * @author contributor: Elaine Cheong <celaine@cvs.sourceforge.net>
+ */
+abstract public class DataDefinition extends CDefinition
+{
+    /**
+     * Name of this object. Not globally unique.
+     */
+    public String name; 
+    /**
+     * Unique identifier for this object.
+     */
+    public String ref;
+
+    /**
+     * (definition only) Type of this object.
+     */
+    public Type type;
+
+    /* for reference handling */
+    public void init(Attributes attrs) {
+       super.init(attrs);
+       ref = attrs.getValue("ref");
+       name = attrs.getValue("name");
+       /* ignoring scoped for now */
+    }
+
+    /* for adding new attributes (does not overwrite existing ones) */
+    public void addNewAttributes(Attributes attrs) {
+        super.addNewAttributes(attrs);
+       if (ref == null) {
+            ref = attrs.getValue("ref");
+        }
+       if (name == null) {
+            name = attrs.getValue("name");
+        }
+       /* ignoring scoped for now */
+    }
+    
+    public synchronized NDElement start(Attributes attrs) {
+       return Xnesc.defsDataDefinition.define(attrs.getValue("ref"), attrs, this);
+    }
+
+    static synchronized Definition lookup(NDReader reader, Attributes attrs, 
+                                         String elementName) {
+       return Xnesc.defsDataDefinition.lookup(reader, attrs.getValue("ref"), attrs, elementName);
+    }
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Type)
+           type = (Type)subElement;
+    }
+
+    public String toString() {
+       if (container == null)
+           return name;
+       return container.toString() + "." + name;
+    }
+
+    public String debugString() {
+       String base = "";
+       //base += "[" + super.toString() + "]";
+       if (name != null)
+           return base + "C(" + name + ", " + ref + ")";
+       else
+           return  base + "C(" + ref + ")";
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Definition.java b/tools/java/net/tinyos/nesc/dump/xml/Definition.java
new file mode 100644 (file)
index 0000000..e26619f
--- /dev/null
@@ -0,0 +1,126 @@
+// $Id: Definition.java,v 1.9 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/*
+@Copyright (c) 2005 The Regents of the University of California.
+All rights reserved.
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in all
+copies of this software.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ENHANCEMENTS, OR MODIFICATIONS.
+
+                                                PT_COPYRIGHT_VERSION_2
+                                                COPYRIGHTENDKEY
+
+
+*/
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for objects representing definitions of nesC objects
+ * (typedefs, variables, components, etc). A particular kind of nesC
+ * object is represented by two elements: a definition element (e.g.,
+ * "interface") and a reference element (e.g., "interface-ref"). For
+ * every nesC object Y, there is at most one definition element,
+ * and an arbitrary number of reference elements. All elements for Y
+ * resolve to the same Java object.
+ * <p>
+ * toString() returns a user-friendly name for the represented nesC object
+ *
+ * @author contributor: Elaine Cheong <celaine@cvs.sourceforge.net>
+ */
+
+abstract public class Definition extends NDElement
+{
+    /**
+     * true if the definition element for this nesC object has been
+     * seen. Fields are marked with (definition only) if they are only
+     * defined once the definition is available.
+     */
+    public boolean definitionAvailable;
+
+    /** (definition only) The attributes on this nesC object */
+    public LinkedList/*Xattribute_value*/ attributes;
+
+    /** (definition only) The source code location where this object
+       is defined. May be null. */
+    public Location location;
+
+    /**
+     * init is called when the first element for this nesC object is seen
+     * (it may be a reference or a definition element).
+     * @param attrs Attributes from the first definition or reference element.
+     */
+    public void init(Attributes attrs) {
+       location = Location.decode(attrs.getValue("loc"));
+    }
+
+    /**
+     * addNewAttributes can be called at any time to add new
+     * attributes.  Does not ovewrite existing attributes.
+     * @param attrs Attributes from the current definition or reference element.
+     */
+    public void addNewAttributes(Attributes attrs) {
+        if (location == null) {
+            location = Location.decode(attrs.getValue("loc"));
+        }
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xattribute_value) {
+           if (attributes == null)
+               attributes = new LinkedList();
+           attributes.add(subElement);
+       }
+    }
+
+    /**
+     * Lookup a nesC attribute by name.
+     * @param name Name of attriute to find.
+     * @return An attribute in the attributes list with the specified
+     *   name, or null if none is found.
+     */
+    public Xattribute_value attributeLookup(String name) {
+       if (attributes == null)
+           return null;
+
+       ListIterator elems = attributes.listIterator();
+
+       while (elems.hasNext()) {
+           Xattribute_value attr = (Xattribute_value)elems.next();
+           Xattribute a = attr.attribute;
+           String n = a.name;
+
+           if (n.equals(name))
+               return attr;
+       }
+       return null;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/DefinitionTable.java b/tools/java/net/tinyos/nesc/dump/xml/DefinitionTable.java
new file mode 100644 (file)
index 0000000..17b04d7
--- /dev/null
@@ -0,0 +1,75 @@
+// $Id: DefinitionTable.java,v 1.5 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Internal class for matching references to definitions.
+ */
+class DefinitionTable
+{
+    protected Hashtable allDefinitions = new Hashtable();
+
+    /**
+     * Reference element found. Lookup object table to see if the referenced
+     * object already exists. If not, create an object of class 'elementName'
+     * call it's 'init' method, passing 'attrs' as its arguments, and add it
+     * to the object table.
+     * @param reader The current NDReader.
+     * @param key The key uniquely identifying the nesC object (typically
+     *   a string).
+     * @param attrs Attributes from the reference element.
+     * @param elementName Name of the definition element for this object.
+     * @return The Java object for this nesC object.
+     */
+    synchronized Definition lookup(NDReader reader, Object key,
+                                  Attributes attrs, String elementName) {
+       Definition me = (Definition)allDefinitions.get(key);
+       if (me == null) {
+           try {
+               me = (Definition)reader.makeElement(elementName);
+           }
+           catch (Exception e) {
+               throw new RuntimeException("wrong object class");
+           }
+           me.init(attrs);
+           allDefinitions.put(key, me);
+       }
+       return me;
+    }
+
+    /**
+     * Definition element found. Lookup object table to see if the
+     * defined object already exists. If found, just return that
+     * object. If not, add 'def' as the representative for this nesC
+     * object and call 'def.init(attrs)'.  In both cases, set the
+     * 'definitionAvailable' for the object to true.
+     * @param key The key uniquely identifying the nesC object (typically
+     *   a string).
+     * @param attrs Attributes from the definition element.
+     * @param def Java object created for the definition element.
+     * @return The Java object for this nesC object.
+     */
+    synchronized Definition define(Object key, Attributes attrs, Definition def) {
+       Definition me = (Definition)allDefinitions.get(key);
+       if (me == null) {
+           me = def;
+           me.init(attrs);
+           allDefinitions.put(key, me);
+       }
+       me.definitionAvailable = true;
+       return me;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/DocumentationString.java b/tools/java/net/tinyos/nesc/dump/xml/DocumentationString.java
new file mode 100644 (file)
index 0000000..c65004c
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: DocumentationString.java,v 1.1 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Documentation string (long or short)
+ */
+public class DocumentationString extends NDElement
+{
+    StringBuffer str = new StringBuffer();
+
+    public void characters(char[] ch, int start, int length) {
+       str.append(ch, start, length);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/FloatConstant.java b/tools/java/net/tinyos/nesc/dump/xml/FloatConstant.java
new file mode 100644 (file)
index 0000000..9716692
--- /dev/null
@@ -0,0 +1,33 @@
+// $Id: FloatConstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing floating point constants
+ */
+public class FloatConstant extends KnownConstant
+{
+    /**
+     * Value of this floating point constant
+     */
+    public double value;
+
+    public FloatConstant(String s) {
+       value = NDElement.realDecode(s.substring(2), 0.0);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof FloatConstant))
+           return false;
+       return value == ((FloatConstant)obj).value;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Implementation.java b/tools/java/net/tinyos/nesc/dump/xml/Implementation.java
new file mode 100644 (file)
index 0000000..cd6d82a
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Implementation.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Base class for nesC component implementation objects
+ */
+abstract public class Implementation extends NDElement
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/IntegerConstant.java b/tools/java/net/tinyos/nesc/dump/xml/IntegerConstant.java
new file mode 100644 (file)
index 0000000..6a123ae
--- /dev/null
@@ -0,0 +1,33 @@
+// $Id: IntegerConstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing integer constants
+ */
+public class IntegerConstant extends KnownConstant
+{
+    /**
+     * Value of this integer constant
+     */
+    public long value;
+
+    public IntegerConstant(String s) {
+       value = NDElement.numberDecode(s.substring(2), 0);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof IntegerConstant))
+           return false;
+       return value == ((IntegerConstant)obj).value;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/KnownConstant.java b/tools/java/net/tinyos/nesc/dump/xml/KnownConstant.java
new file mode 100644 (file)
index 0000000..7541781
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: KnownConstant.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing "known constants"
+ */
+abstract public class KnownConstant extends Constant
+{
+    public boolean known() {
+       return true;
+    }
+
+    public boolean constant() {
+       return true;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Location.java b/tools/java/net/tinyos/nesc/dump/xml/Location.java
new file mode 100644 (file)
index 0000000..cdab49c
--- /dev/null
@@ -0,0 +1,98 @@
+// $Id: Location.java,v 1.3 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.regex.*;
+
+/**
+ * Class representing source code locations.
+ * <p>
+ * toString() returns a user-friendly string for this location (e.g., for 
+ * use in error messages).
+ */
+public class Location
+{
+    /**
+     * Source code line number.
+     */
+    public final int lineno;
+
+    /**
+     * Source code file name.
+     */
+    public final String filename;
+
+    /**
+     * For elements representing items in instantiated generic
+     * components: the instantiation path that led to the item being
+     * created. For everything else: null.
+     */
+    public final String instance;
+
+    protected static Pattern locPattern =
+       Pattern.compile("([0-9]+)(\\([a-zA-Z0-9_.]+\\))?:(.*)");
+
+    /**
+     * Decode a string representing a location into a Location object.
+     * @return A location object for location s. Identical source code
+     *   locations may or may not be represented by the same Location object.
+     */
+    public static Location decode(String s) {
+       if (s == null)
+           return null;
+
+       Matcher m = locPattern.matcher(s);
+       if (!m.matches())
+           return null;
+
+       int lineno;
+       String numS = m.group(1);
+       String instance = m.group(2);
+       String filename = m.group(3);
+
+       try {
+           lineno = Integer.decode(numS).intValue();
+       }
+       catch (NumberFormatException e) {
+           return null;
+       }
+
+       return make(lineno, filename, instance);
+    }
+
+    protected Location(int lineno, String filename, String instance) {
+       this.lineno = lineno;
+       this.filename = filename;
+       this.instance = instance;
+    }
+
+    /** 
+     * Get a source code location object. 
+     * @param lineno Line number.
+     * @param filename File name.
+     * @param instance Generic component instance path. May be null.
+     * @return A location object for the specified location. Identical
+     * source code locations may or may not be represented by the same
+     * Location object.
+     */
+    public static Location make(int lineno, String filename, String instance) {
+       /* For now, not trying to do any location sharing. */
+       return new Location(lineno, filename, instance);
+    }
+
+    public String toString() {
+       if (instance != null)
+           return filename + "(" + instance + "):" + lineno;
+       else
+           return filename + ":" + lineno;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Makefile.am b/tools/java/net/tinyos/nesc/dump/xml/Makefile.am
new file mode 100644 (file)
index 0000000..3e43f2f
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = $(java_files)
+ROOT=../../../../..
+
+noinst_DATA = $(class_files)
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT)  2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Makefile.in b/tools/java/net/tinyos/nesc/dump/xml/Makefile.in
new file mode 100644 (file)
index 0000000..615ca19
--- /dev/null
@@ -0,0 +1,309 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net/tinyos/nesc/dump/xml
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = $(java_files)
+ROOT = ../../../../..
+noinst_DATA = $(class_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/dump/xml/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/dump/xml/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT)  2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
+# 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/tools/java/net/tinyos/nesc/dump/xml/NDElement.java b/tools/java/net/tinyos/nesc/dump/xml/NDElement.java
new file mode 100644 (file)
index 0000000..886ad0d
--- /dev/null
@@ -0,0 +1,159 @@
+// $Id: NDElement.java,v 1.6 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Base class for all Java representations of nesC dump XML elements.
+ * All Xbaz classes representing XML element baz must inherit from NDElement.
+ * The methods of NDElement are called at various stages of XML parsing for
+ * baz (see method descriptions below).
+ *
+ * @see net.tinyos.nesc.dump.NDReader
+ * @author David Gay
+ */
+abstract public class NDElement {
+    /**
+     * Called after element creation if 
+     *  start(NDReader reader, Attributes attrs) 
+     * is not overridden. Returned object will represent this element 
+     * during parsing.
+     * 
+     * @param attrs Attributes for this element.
+     * @return The object which will represent this element in the created
+     *   data structure.
+     */
+    public NDElement start(Attributes attrs) {
+       return this;
+    }
+
+    /**
+     * Called after element creation. Returned object will represent
+     * this element during parsing.
+     * 
+     * @param reader The current nesC dump reader.
+     * @param attrs Attributes for this element.
+     * @return The object which will represent this element in the created
+     *   data structure.
+     */
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return start(attrs);
+    }
+
+    /**
+     * Called after each subelement has been parsed if 
+     *  void child(NDReader reader, NDElement subElement)
+     * is not overridden. 
+     * 
+     * @param subElement Last subelement parsed.
+     */
+    public void child(NDElement subElement) {
+    }
+
+    /**
+     * Called after each subelement has been parsed.
+     * 
+     * @param subElement Last subelement parsed.
+     */
+    public void child(NDReader reader, NDElement subElement) {
+       child(subElement);
+    }
+
+    /**
+     * Called after the element has been fully parsed if 
+     *  end(NDReader reader) 
+     * is not overridden. Returned object will be passed to the parent
+     * element's child method. 
+     * 
+     * @param attrs Attributes for this element.
+     * @return The object which will represent this element in the created
+     *   data structure.
+     */
+    public NDElement end() {
+       return this;
+    }
+
+    /**
+     * Called after the element has been fully parsed. Returned object will
+     * be passed to the parent element's child method (Note: the 
+     * reader.parent() method does not work if called from end()).
+     * 
+     * @return The object which will be passed to the parent's child() method.
+     */
+    public NDElement end(NDReader reader) {
+       return end();
+    }
+
+    /**
+     * Called after each character sequence from the XML element is parsed.
+     * 
+     * @param ch XML characters read.
+     * @param start First valid offset in ch
+     * @param length Number of characters valid in ch
+     */
+    public void characters(char[] ch, int start, int length) {
+    }
+
+    /**
+     * Called after each whitespace sequence from the XML element is parsed.
+     */
+    public void whitespace() {
+    }
+
+
+    /**
+     * Utility function to decode a string containing an integer.
+     * @param s String to decode
+     * @param def Default value
+     * @return Decoded string value, or def if a parsing error occurs.
+     */
+    static public long numberDecode(String s, long def) {
+       if (s != null) {
+           try {
+               return Long.decode(s).longValue();
+           }
+           catch (NumberFormatException e) { }
+       }
+       return def;
+    }
+
+    /**
+     * Utility function to decode a string containing a real number.
+     * @param s String to decode
+     * @param def Default value
+     * @return Decoded string value, or def if a parsing error occurs.
+     */
+    static public double realDecode(String s, double def) {
+       if (s != null) {
+           try {
+               return Double.valueOf(s).doubleValue();
+           }
+           catch (NumberFormatException e) { }
+       }
+       return def;
+    }
+
+    /**
+     * Utility function to decode a boolean attribute (boolean attributes
+     * are represented by an empty string if the boolean is true, and no
+     * attribute at all if the boolean is false).
+     * <p>
+     * Typical usage is 'boolDecode(attrs.getAttr("myboolean"))'.
+     * @param s String to decode
+     * @return true if s is not null, false otherwise
+     */
+    static public boolean boolDecode(String s) {
+       return s != null;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/NDList.java b/tools/java/net/tinyos/nesc/dump/xml/NDList.java
new file mode 100644 (file)
index 0000000..bdffa88
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: NDList.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * A generic list-of-element class.
+ */
+abstract public class NDList extends NDElement
+{
+    /* The elements of this list, in order. */
+    public LinkedList/*NDElement*/ l = new LinkedList();
+
+    public void child(NDElement subElement) {
+       l.add(subElement);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/NescDefinition.java b/tools/java/net/tinyos/nesc/dump/xml/NescDefinition.java
new file mode 100644 (file)
index 0000000..5c45321
--- /dev/null
@@ -0,0 +1,47 @@
+// $Id: NescDefinition.java,v 1.9 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for nesC definitions (components, interface definitions)
+ */
+abstract public class NescDefinition extends Definition
+{
+    /**
+     * Name of this nesC component or interface definition. For instances
+     * of generic components, this is the full instantiation path. Globally
+     * unique.
+     */
+    public String qname;
+
+    public void init(Attributes attrs) {
+       super.init(attrs);
+       qname = attrs.getValue("qname");
+    }
+
+    public synchronized NDElement start(Attributes attrs) {
+       return Xnesc.defsNescDefinition.define(attrs.getValue("qname"), attrs, this);
+    }
+
+    static synchronized Definition lookup(Attributes attrs, NDReader reader,
+                                         String elementName) {
+       return Xnesc.defsNescDefinition.lookup(reader, attrs.getValue("qname"), attrs, elementName);
+    }
+
+    public String toString() {
+       return qname;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/NonConstant.java b/tools/java/net/tinyos/nesc/dump/xml/NonConstant.java
new file mode 100644 (file)
index 0000000..731a7a3
--- /dev/null
@@ -0,0 +1,22 @@
+// $Id: NonConstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing "non constants"
+ */
+public class NonConstant extends Constant
+{
+    public boolean equals(Object obj) {
+       return false;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/SimpleType.java b/tools/java/net/tinyos/nesc/dump/xml/SimpleType.java
new file mode 100644 (file)
index 0000000..385b62f
--- /dev/null
@@ -0,0 +1,38 @@
+// $Id: SimpleType.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Base class for all C base types (int, double, etc).
+ */
+abstract public class SimpleType extends Type
+{
+    /**
+     * C name of type ("int", "unsigned long"), etc. Uniquely identifies
+     * the type. 
+     */
+    public String cname;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       cname = attrs.getValue("cname");
+       return this;
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof SimpleType))
+           return false;
+       return cname.equals(((SimpleType)obj).cname);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/StringConstant.java b/tools/java/net/tinyos/nesc/dump/xml/StringConstant.java
new file mode 100644 (file)
index 0000000..20cee4f
--- /dev/null
@@ -0,0 +1,33 @@
+// $Id: StringConstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing string constants
+ */
+public class StringConstant extends KnownConstant
+{
+    /**
+     * Value of this string constant
+     */
+    public String value;
+
+    public StringConstant(String s) {
+       value = s.substring(2);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof StringConstant))
+           return false;
+       return value.equals(((StringConstant)obj).value);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/StructureDefinition.java b/tools/java/net/tinyos/nesc/dump/xml/StructureDefinition.java
new file mode 100644 (file)
index 0000000..e2ced3f
--- /dev/null
@@ -0,0 +1,32 @@
+// $Id: StructureDefinition.java,v 1.4 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for structure tags (struct, union, network versions thereof)
+ */
+abstract public class StructureDefinition extends TagDefinition
+{
+    /**
+     * Fields of this structure.
+     */
+    public LinkedList/*Xfield*/ fields = new LinkedList();
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Xfield)
+           fields.add(subElement);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/TagDefinition.java b/tools/java/net/tinyos/nesc/dump/xml/TagDefinition.java
new file mode 100644 (file)
index 0000000..486fa61
--- /dev/null
@@ -0,0 +1,74 @@
+// $Id: TagDefinition.java,v 1.7 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Base class for Java object representing a C tag (enum, struct, union)
+ */
+abstract public class TagDefinition extends CDefinition
+{
+    /**
+     * Name of this tag, not globally unique, may be null.
+     */
+    public String name;
+
+    /**
+     * Unique identifier for this tag.
+     */
+    public String ref;
+
+    /**
+     * (definition only) Size of objects of this struct/union/enum/etc.
+     */
+    public Constant size;
+
+    /**
+     * (definition only) Alignment for objects of this struct/union/enum/etc.
+     */
+    public Constant alignment;
+
+    /**
+     * (definition only) True if this tag is actually defined.
+     */
+    public boolean defined;
+
+    /**
+     * (definition only) True if the gcc packed "attribute" was used on
+     * this tag.
+     */
+    public boolean packed;
+
+    public void init(Attributes attrs) {
+       super.init(attrs);
+       ref = attrs.getValue("ref");
+       name = attrs.getValue("name");
+       /* ignoring scoped for now */
+    }
+
+    public synchronized NDElement start(Attributes attrs) {
+       TagDefinition me = (TagDefinition)Xnesc.defsTagDefinition.define(attrs.getValue("ref"), attrs, this);
+       me.size = Constant.decode(attrs.getValue("size"));
+       me.alignment = Constant.decode(attrs.getValue("alignment"));
+       me.defined = boolDecode(attrs.getValue("defined"));
+       me.packed = boolDecode(attrs.getValue("packed"));
+       return me;
+    }
+
+    static synchronized Definition lookup(NDReader reader, Attributes attrs, 
+                                         String elementName) {
+       return Xnesc.defsTagDefinition.lookup(reader, attrs.getValue("ref"), attrs, elementName);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Type.java b/tools/java/net/tinyos/nesc/dump/xml/Type.java
new file mode 100644 (file)
index 0000000..a17c399
--- /dev/null
@@ -0,0 +1,51 @@
+// $Id: Type.java,v 1.3 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Base class for all elements representing types.
+ * <p>
+ * equals() is defined on all Type objects and represents C type equality.
+ */
+abstract public class Type extends NDElement
+{
+    /**
+     * Size of this type in bytes. May be a non or unknown constant.
+     */
+    public Constant size;
+
+    /**
+     * Alignment for this type in bytes. May be a non or unknown constant.
+     */
+    public Constant alignment;
+
+    /**
+     * Typedef used to define this type, or NULL if none.
+     */
+    public Xtypedef typename;
+
+    public NDElement start(Attributes attrs) {
+       size = Constant.decode(attrs.getValue("size"));
+       alignment = Constant.decode(attrs.getValue("alignment"));
+       return this;
+    }
+
+    /**
+     * Extract typedef from typename elements
+     */
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xtypename)
+           typename = ((Xtypename)subElement).tdef;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/UnknownConstant.java b/tools/java/net/tinyos/nesc/dump/xml/UnknownConstant.java
new file mode 100644 (file)
index 0000000..b213b54
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: UnknownConstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Class representing "unknown constants"
+ */
+public class UnknownConstant extends Constant
+{
+    public boolean equals(Object obj) {
+       return false;
+    }
+
+    public boolean constant() {
+       return true;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Value.java b/tools/java/net/tinyos/nesc/dump/xml/Value.java
new file mode 100644 (file)
index 0000000..0496d72
--- /dev/null
@@ -0,0 +1,34 @@
+// $Id: Value.java,v 1.3 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Base class for elements representing C initialisers (the {} stuff in
+ *  struct foo x = { ... }
+ * Attributes use these initialisers too.
+ * <p>
+ * equals() is defined only for initialisers representing C constants.
+ */
+abstract public class Value extends NDElement
+{
+    /**
+     * Type of this value.
+     */
+    public Type type;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Type)
+           type = (Type)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringEndpoint.java b/tools/java/net/tinyos/nesc/dump/xml/WiringEndpoint.java
new file mode 100644 (file)
index 0000000..96cde02
--- /dev/null
@@ -0,0 +1,85 @@
+// $Id: WiringEndpoint.java,v 1.3 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A position in a wiring graph, i.e., a node and an optional argument list.
+ *
+ * @see net.tinyos.nesc.dump.xml.WiringGraph
+ * @see net.tinyos.nesc.dump.xml.WiringNode
+ * @see net.tinyos.nesc.dump.xml.Xwire
+ */
+public class WiringEndpoint extends NDElement
+{
+    /**
+     * The graph node of this endpoint.
+     */
+    public WiringNode node;
+
+    /**
+     * Arguments to the graph node for this endpoint. May be null.
+     */
+    public Xarguments arguments;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof DataDefinition)
+           node = new WiringNode((DataDefinition)subElement);
+       if (subElement instanceof Xarguments)
+           arguments = (Xarguments)subElement;
+    }
+    
+    /**
+     * Create a new, unitialised wiring endpoint.
+     */
+    public WiringEndpoint() { }
+
+    /**
+     * Create a new wiring endpoint on wiring graph node n.
+     * @param n Wiring node graph to create endpoint for.
+     */
+    public WiringEndpoint(WiringNode n) { 
+       node = n;
+    }
+
+    /**
+     * Create a new wiring endpoint on wiring graph node n, with arguments a.
+     * @param n Wiring node graph to create endpoint for.
+     * @param a Arguments for endpoint.
+     */
+    public WiringEndpoint(WiringNode n, Xarguments a) { 
+       node = n;
+       arguments = a;
+    }
+
+    /**
+     * Create a new wiring endpoint as a copy of endpoint p.
+     * @param p endpoint to copy.
+     */
+    public WiringEndpoint(WiringEndpoint p) { 
+       copy(p);
+    }
+    
+    /**
+     * Copy endpoint from into this endpoint.
+     * @param from endpoint to copy.
+     */
+    public void copy(WiringEndpoint from) {
+       node = from.node;
+       arguments = from.arguments;
+    }
+
+    public String toString() {
+       return node.toString();
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringGraph.java b/tools/java/net/tinyos/nesc/dump/xml/WiringGraph.java
new file mode 100644 (file)
index 0000000..3bb1e97
--- /dev/null
@@ -0,0 +1,65 @@
+// $Id: WiringGraph.java,v 1.4 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.*;
+
+/**
+ * A nesC wiring graph. A slightly unconventional graph where the nodes
+ * (WiringNode) may represent one or more actual graph nodes (in the case
+ * where the node corresponds to a parameterised function or interface).
+ * <p>
+ * A position in this graph is represented by an "endpoint", which is a
+ * WiringNode plus optional arguments (the optional arguments identify a
+ * particular interface or function on nodes representing parameterised
+ * functions or interfaces). Note that an endpoint may itself represent
+ * multiple nodes in the case where the node is parameterised and the
+ * endpoint has no arguments.
+ * <p>
+ * Edges in this graphs (Xwire) connect two endpoints.
+ *
+ * @see net.tinyos.nesc.dump.xml.WiringNode
+ * @see net.tinyos.nesc.dump.xml.Xwire
+ * @see net.tinyos.nesc.dump.xml.WiringEndpoint
+ */
+public class WiringGraph
+{
+    protected Hashtable endpoints = new Hashtable();
+
+    /**
+     * Find the node for a particular definition. Adds a new node if 
+     * the definition is not found.
+     * @param epDecl Node to lookup.
+     * @return WiringNode for epDecl.
+     */
+    public WiringNode lookup(DataDefinition epDecl) {
+       WiringNode found = (WiringNode)endpoints.get(epDecl);
+
+       if (found == null) {
+           found = new WiringNode(epDecl);
+           endpoints.put(epDecl, found);
+       }
+       return found;
+    }
+
+    /**
+     * Add edge to the graph.
+     * @param wire Edge to add.
+     */
+    public void addEdge(Xwire wire) {
+       wire.from.node = lookup(wire.from.node.ep);
+       wire.from.node.addToEdge(wire);
+
+       wire.to.node = lookup(wire.to.node.ep);
+       wire.to.node.addFromEdge(wire);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringNode.java b/tools/java/net/tinyos/nesc/dump/xml/WiringNode.java
new file mode 100644 (file)
index 0000000..71b65bf
--- /dev/null
@@ -0,0 +1,77 @@
+// $Id: WiringNode.java,v 1.6 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.*;
+
+/**
+ * A node in a wiring graph.
+ * @see net.tinyos.nesc.dump.xml.WiringGraph
+ * @see net.tinyos.nesc.dump.xml.Xwire
+ * @see net.tinyos.nesc.dump.xml.WiringEndpoint
+ */
+public class WiringNode
+{
+    static LinkedList/*Xwire*/ empty = new LinkedList();
+
+    LinkedList/*Xwire*/ outgoing, incoming;
+
+    /**
+     * The definition this node is for.
+     */
+    public DataDefinition ep;
+
+    WiringNode(DataDefinition ep) {
+       this.ep = ep;
+    }
+
+    void addToEdge(Xwire e) {
+       //System.err.println("" + this + " TO " + e.to);
+       if (outgoing == null)
+           outgoing = new LinkedList();
+       outgoing.add(e);
+    }
+
+    void addFromEdge(Xwire e) {
+       //System.err.println("" + this + " FROM " + e.from);
+       if (incoming == null)
+           incoming = new LinkedList();
+       incoming.add(e);
+    }
+
+    /**
+     * Get all outgoing edges from this node.
+     * @return Outgoing edge iterator for this node.
+     */
+    public ListIterator/*Xwire*/ outgoingEdges() {
+       if (outgoing == null)
+           return empty.listIterator();
+       else
+           return outgoing.listIterator();
+    }
+
+    /**
+     * Get all incoming edges from this node.
+     * @return Incoming edge iterator for this node.
+     */
+    public ListIterator/*Xwire*/ incomingEdges() {
+       if (incoming == null)
+           return empty.listIterator();
+       else
+           return incoming.listIterator();
+    }
+
+    public String toString() {
+       //return "(@" + super.toString() + ")node:" + ep;
+       return "node:" + ep;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringScan.java b/tools/java/net/tinyos/nesc/dump/xml/WiringScan.java
new file mode 100644 (file)
index 0000000..2e02560
--- /dev/null
@@ -0,0 +1,53 @@
+// $Id: WiringScan.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * Base class for scanning wiring graphs for forwards or backwards
+ */
+abstract public class WiringScan extends WiringEndpoint implements Cloneable
+{
+    /**
+     * Return the edges in the specified graph from this endpoint
+     * @return The list iterator for these edges. 
+     */
+    abstract public java.util.ListIterator edges();
+
+    /**
+     * Follow edge 'e', modifying this endpoint to represent arrival point.
+     * @param e Edge to follow.
+     * @return true if the edge could be followed ('this' modified to 
+     *   reflect destination), false if the edge could not be followed
+     *   ('this' not modified).
+     */
+    abstract public boolean follow(Xwire e);
+
+    /**
+     * Is this a forwards or backwards scanner
+     * @return true for forwards scanners, false for backwards ones.
+     */
+    abstract public boolean isForwards();
+
+    /**
+     * Create a new wiring scanner at the same position in the wiring graph,
+     * scanning in the same direction.
+     * @return The new scanner.
+     */
+    public WiringScan duplicate() {
+       try {
+           return (WiringScan)clone();
+       }
+       catch (CloneNotSupportedException e) { 
+           return null; // cannot happen
+       }
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringScanBackwards.java b/tools/java/net/tinyos/nesc/dump/xml/WiringScanBackwards.java
new file mode 100644 (file)
index 0000000..a6776b6
--- /dev/null
@@ -0,0 +1,50 @@
+// $Id: WiringScanBackwards.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * A scanner to scan backwards in a wiring graph
+ */
+public class WiringScanBackwards extends WiringScan
+{
+    /**
+     * Create a new backwards wiring scanner starting at wiring graph node n,
+     * with no arguments.
+     * @param n Wiring node graph to start at.
+     */
+    public WiringScanBackwards(WiringNode n) { 
+       node = n;
+    }
+
+    /**
+     * Create a new backwards wiring scanner starting at wiring graph node n,
+     * with arguments a.
+     * @param n Wiring node graph to start at.
+     * @param a Position arguments.
+     */
+    public WiringScanBackwards(WiringNode n, Xarguments a) { 
+       node = n;
+       arguments = a;
+    }
+
+    public boolean isForwards() {
+       return false;
+    }
+
+    public java.util.ListIterator edges() {
+       return node.incomingEdges();
+    }
+
+    public boolean follow(Xwire e) {
+       return e.followBackwards(this);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/WiringScanForwards.java b/tools/java/net/tinyos/nesc/dump/xml/WiringScanForwards.java
new file mode 100644 (file)
index 0000000..dda0723
--- /dev/null
@@ -0,0 +1,50 @@
+// $Id: WiringScanForwards.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+/**
+ * A scanner to scan forwards in a wiring graph
+ */
+public class WiringScanForwards extends WiringScan
+{
+    /**
+     * Create a new forwards wiring scanner starting at wiring graph node n,
+     * with no arguments.
+     * @param n Wiring node graph to start at.
+     */
+    public WiringScanForwards(WiringNode n) { 
+       node = n;
+    }
+
+    /**
+     * Create a new forwards wiring scanner starting at wiring graph node n,
+     * with arguments a.
+     * @param n Wiring node graph to start at.
+     * @param a Position arguments.
+     */
+    public WiringScanForwards(WiringNode n, Xarguments a) { 
+       node = n;
+       arguments = a;
+    }
+
+    public boolean isForwards() {
+       return true;
+    }
+
+    public java.util.ListIterator edges() {
+       return node.outgoingEdges();
+    }
+
+    public boolean follow(Xwire e) {
+       return e.followForwards(this);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xarguments.java b/tools/java/net/tinyos/nesc/dump/xml/Xarguments.java
new file mode 100644 (file)
index 0000000..7b40b77
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xarguments.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A list of arguments. Each argument is a Constant or Type.
+ * <p>
+ * equals() compares these arguments lists.
+ */
+public class Xarguments extends NDList
+{
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xarguments))
+           return false;
+       return l.equals(((Xarguments)obj).l);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xarray_element.java b/tools/java/net/tinyos/nesc/dump/xml/Xarray_element.java
new file mode 100644 (file)
index 0000000..f50b969
--- /dev/null
@@ -0,0 +1,47 @@
+// $Id: Xarray_element.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Elements of an array initialiser (Xvalue_array)
+ * @see net.tinyos.nesc.dump.xml.Xvalue_array
+ */
+public class Xarray_element extends NDElement
+{
+    /**
+     * First array element initialised with this value 
+     */
+    public long from;
+
+    /**
+     * Last array element initialised with this value 
+     */
+    public long to;
+
+    /**
+     * Value placed in these array elements
+     */
+    public Value value;
+
+    public NDElement start(Attributes attrs) {
+       from = numberDecode(attrs.getValue("from"), -1);
+       to = numberDecode(attrs.getValue("to"), -1);
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Value)
+           value = (Value)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xattribute.java b/tools/java/net/tinyos/nesc/dump/xml/Xattribute.java
new file mode 100644 (file)
index 0000000..14ddc7e
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xattribute.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Class for attribute definitions. See Xattribute_value for attribute uses
+ */
+public class Xattribute extends StructureDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xattribute_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xattribute_ref.java
new file mode 100644 (file)
index 0000000..3b8b9bf
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xattribute_ref.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for attribute references. These objects go away, replaced by the
+ * Xattribute object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xattribute
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xattribute_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "attribute");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xattribute_value.java b/tools/java/net/tinyos/nesc/dump/xml/Xattribute_value.java
new file mode 100644 (file)
index 0000000..dec218c
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id: Xattribute_value.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An attribute use.
+ */
+public class Xattribute_value extends NDElement
+{
+    /**
+     * What attribute this is.
+     */
+    public Xattribute attribute;
+
+    /**
+     * Initialiser for this attribute.
+     */
+    public Value value;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xattribute)
+           attribute = (Xattribute)subElement;
+       if (subElement instanceof Value)
+           value = (Value)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xcomponent.java b/tools/java/net/tinyos/nesc/dump/xml/Xcomponent.java
new file mode 100644 (file)
index 0000000..e5a92a6
--- /dev/null
@@ -0,0 +1,48 @@
+// $Id: Xcomponent.java,v 1.4 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A nesC component.
+ */
+public class Xcomponent extends NescDefinition implements Container
+{
+    /**
+     * (definition only) For instances of generic components: what
+     * component this is an instance of, along with the instantiation
+     * arguments.  Null for non-instance components.
+    */
+    public Xinstance instance; 
+
+    /**
+     * (definition only) For generic components: the parameters for
+     * this generic component. Null for non-generic components.
+     */
+    public Xparameters parameters; /* present iff component is generic */
+
+    /**
+     * (definition only) Implementation of this component. 
+     */
+    public Implementation implementation;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xinstance)
+           instance = (Xinstance)subElement;
+       if (subElement instanceof Xparameters)
+           parameters = (Xparameters)subElement;
+       if (subElement instanceof Implementation)
+           implementation = (Implementation)subElement;
+    }
+
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xcomponent_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xcomponent_ref.java
new file mode 100644 (file)
index 0000000..ff8c528
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xcomponent_ref.java,v 1.5 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for component references. These objects go away, replaced by the
+ * Xcomponent object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xcomponent
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xcomponent_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return NescDefinition.lookup(attrs, reader, "component");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xcomponents.java b/tools/java/net/tinyos/nesc/dump/xml/Xcomponents.java
new file mode 100644 (file)
index 0000000..04bb377
--- /dev/null
@@ -0,0 +1,25 @@
+// $Id: Xcomponents.java,v 1.6 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.*;
+
+/**
+ * Top-level component list.
+ */
+public class Xcomponents extends NDList
+{
+    public NDElement end() {
+        Xnesc.componentList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xconfiguration.java b/tools/java/net/tinyos/nesc/dump/xml/Xconfiguration.java
new file mode 100644 (file)
index 0000000..fb26bc4
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xconfiguration.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Configuration implementation.
+ */
+public class Xconfiguration extends Implementation
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xconstant.java b/tools/java/net/tinyos/nesc/dump/xml/Xconstant.java
new file mode 100644 (file)
index 0000000..1696cd3
--- /dev/null
@@ -0,0 +1,31 @@
+// $Id: Xconstant.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An enum constant.
+ */
+public class Xconstant extends DataDefinition
+{
+    /**
+     * (definition only) Value of the enum constant.
+     */
+    public Constant value;
+
+    public NDElement start(Attributes attrs) {
+       Xconstant me = (Xconstant)super.start(attrs);
+       me.value = Constant.decode(attrs.getValue("cst"));
+       return me;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xconstant_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xconstant_ref.java
new file mode 100644 (file)
index 0000000..2da0d55
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xconstant_ref.java,v 1.6 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for enum constant references. These objects go away, replaced
+ * by the Xconstant object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xconstant
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xconstant_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "constant");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xconstants.java b/tools/java/net/tinyos/nesc/dump/xml/Xconstants.java
new file mode 100644 (file)
index 0000000..5fd7736
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xconstants.java,v 1.2 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface definition list.
+ */
+public class Xconstants extends NDList
+{
+    public NDElement end() {
+        Xnesc.constantList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xdocumentation.java b/tools/java/net/tinyos/nesc/dump/xml/Xdocumentation.java
new file mode 100644 (file)
index 0000000..b06f527
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id: Xdocumentation.java,v 1.1 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * nesdoc element
+ */
+public class Xdocumentation extends NDElement
+{
+    /** The short documentation string for this nesdoc element */
+    public String shortDoc;
+
+    /** The long documentation string for this nesdoc element.
+       May be null */
+    public String longDoc;
+
+    /** The location where this nesdoc element was found. */
+    public Location location;
+
+    public NDElement start(Attributes attrs) {
+       location = Location.decode(attrs.getValue("loc"));
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xshort)
+           shortDoc = ((Xshort)subElement).str.toString();
+       if (subElement instanceof Xlong)
+           longDoc = ((Xlong)subElement).str.toString();
+    }
+
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xenum.java b/tools/java/net/tinyos/nesc/dump/xml/Xenum.java
new file mode 100644 (file)
index 0000000..5e202d7
--- /dev/null
@@ -0,0 +1,32 @@
+// $Id: Xenum.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An enum definition.
+ */
+public class Xenum extends TagDefinition
+{
+    /**
+     * (definition only) The base C type (int, etc) used as the
+     * underlying representation of this enum.
+     */
+    public Type repType;
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Type)
+           repType = (Type)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xenum_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xenum_ref.java
new file mode 100644 (file)
index 0000000..0b432d3
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xenum_ref.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for enum definition references. These objects go away,
+ * replaced by the Xenum object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xenum
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xenum_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "enum");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfield.java b/tools/java/net/tinyos/nesc/dump/xml/Xfield.java
new file mode 100644 (file)
index 0000000..5e84bcd
--- /dev/null
@@ -0,0 +1,95 @@
+// $Id: Xfield.java,v 1.7 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * A field in a structure. Note: these are always defined.
+ */
+public class Xfield extends Definition
+{
+    /**
+     * Name of the field. Note that it may not be unique (because of
+     * anonymous structs/unions collapsed into the containing struct).
+     */
+    public String name;
+
+    /**
+     * Unique identifier for this field.
+     */
+    public String ref;
+
+    /**
+     * Type of this field.
+     */
+    public Type type;
+
+    /**
+     * Structure this field belongs to.
+     */
+    public StructureDefinition container;
+
+    /**
+     * Offset in bits for this field from the start of the structure.
+     * Note that this may be an UnknownConstant or a NonConstant.
+     */
+    public Constant bitOffset;
+
+    /**
+     * Size in bytes for this field.  Note that this may be an
+     * UnknownConstant or a NonConstant.
+     */
+    public Constant size;
+
+    /**
+     * For bitfields only: size in bits for this field.  Note that
+     * this may be an UnknownConstant (within generic components).
+     */
+    public Constant bitSize;
+
+    /**
+     * true if the gcc "packed" attribute was specified for this field.
+     */
+    public boolean packed;
+
+    public void init(Attributes attrs) {
+       ref = attrs.getValue("ref");
+       name = attrs.getValue("field");
+    }
+
+    public synchronized NDElement start(Attributes attrs) {
+       Xfield me = (Xfield)Xnesc.defsXfield.define(attrs.getValue("ref"), attrs, this);
+       me.bitOffset = Constant.decode(attrs.getValue("bit-offset"));
+       me.packed = boolDecode(attrs.getValue("packed"));
+       String s = attrs.getValue("size");
+       if (s != null)
+           me.size = Constant.decode(s);
+       s = attrs.getValue("bit-size");
+       if (s != null)
+           me.bitSize = Constant.decode(s);
+
+       return me;
+    }
+
+    static synchronized Definition lookup(NDReader reader, Attributes attrs) {
+       return Xnesc.defsXfield.lookup(reader, attrs.getValue("ref"), attrs, "field");
+    }
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Type)
+           type = (Type)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfrom.java b/tools/java/net/tinyos/nesc/dump/xml/Xfrom.java
new file mode 100644 (file)
index 0000000..c4afb14
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xfrom.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A starting point for a wire (wiring graph edge).
+ */
+public class Xfrom extends WiringEndpoint
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfunction.java b/tools/java/net/tinyos/nesc/dump/xml/Xfunction.java
new file mode 100644 (file)
index 0000000..0081de4
--- /dev/null
@@ -0,0 +1,54 @@
+// $Id: Xfunction.java,v 1.4 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A function.
+ */
+public class Xfunction extends DataDefinition implements Container
+{
+    /**
+     * Non-null for commands and events of interfaces of components
+     * (but null for those representing the command and event
+     * definition in an interfacedef).
+     */
+    public Xinterface intf;
+
+    /**
+     * true for functions that are commands.
+     */
+    public boolean command;
+
+    /**
+     * true for functions that are events.
+     */
+    public boolean event;
+
+    public NDElement start(Attributes attrs) {
+       Xfunction me = (Xfunction)super.start(attrs);
+       me.command = boolDecode(attrs.getValue("command"));
+       me.event = boolDecode(attrs.getValue("event"));
+       return me;
+    }
+
+    public void child(NDElement subElement) {
+       /* Intercept references to a containing interface before we call
+          super.child, as this is not the actual container for this
+          function (the container is the component, not the interface) */
+       if (subElement instanceof Xinterface)
+           intf = (Xinterface)intf;
+       else
+           super.child(subElement);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfunction_parameters.java b/tools/java/net/tinyos/nesc/dump/xml/Xfunction_parameters.java
new file mode 100644 (file)
index 0000000..2449918
--- /dev/null
@@ -0,0 +1,22 @@
+// $Id: Xfunction_parameters.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Container for function parameter lists. Goes away.
+ * @see net.tinyos.nesc.dump.xml.Xtype_function
+ */
+public class Xfunction_parameters extends NDList
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfunction_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xfunction_ref.java
new file mode 100644 (file)
index 0000000..7ec8d06
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xfunction_ref.java,v 1.5 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for function references. These objects go away, replaced by
+ * the Xfunction object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xfunction
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xfunction_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "function");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xfunctions.java b/tools/java/net/tinyos/nesc/dump/xml/Xfunctions.java
new file mode 100644 (file)
index 0000000..78600b9
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xfunctions.java,v 1.2 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface definition list.
+ */
+public class Xfunctions extends NDList
+{
+    public NDElement end() {
+        Xnesc.functionList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinstance.java b/tools/java/net/tinyos/nesc/dump/xml/Xinstance.java
new file mode 100644 (file)
index 0000000..b54aab3
--- /dev/null
@@ -0,0 +1,50 @@
+// $Id: Xinstance.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Information on instances of interfaces and generic components.
+ */
+public class Xinstance extends NDElement
+{
+    /**
+     * For instances of generic components: a unique number identifying
+     * this particular instance. These numbers start consecutively at 0.
+     * -1 for instances of interface definitions.
+     */
+    public long number;
+
+    /**
+     * Arguments for this instance. null for instances of non-generic
+     * interfaces.
+     */
+    public Xarguments arguments;
+
+    /**
+     * What component or interface this is an instance of.
+     */
+    public NescDefinition parent;
+
+    public NDElement start(Attributes attrs) {
+       number = numberDecode(attrs.getValue("number"), -1);
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xarguments)
+           arguments = (Xarguments)subElement;
+       if (subElement instanceof NescDefinition)
+           parent = (NescDefinition)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterface.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterface.java
new file mode 100644 (file)
index 0000000..9914ef5
--- /dev/null
@@ -0,0 +1,94 @@
+// $Id: Xinterface.java,v 1.8 2005/10/20 03:27:33 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/*
+@Copyright (c) 2005 The Regents of the University of California.
+All rights reserved.
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in all
+copies of this software.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ENHANCEMENTS, OR MODIFICATIONS.
+
+                                                PT_COPYRIGHT_VERSION_2
+                                                COPYRIGHTENDKEY
+
+
+*/
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.*;
+import org.xml.sax.*;
+
+/**
+ * An interface used or provided by some component.
+ *
+ * @author contributor: Elaine Cheong <celaine@cvs.sourceforge.net>
+ */
+public class Xinterface extends DataDefinition
+{
+    /**
+     * (definition only) true if the interface is provided.
+     */
+    public boolean provided;
+
+    /**
+     * (definition only) What interface definition this interface is
+     * an instance of.
+     */
+    public Xinstance instance;
+
+    /**
+     * (definition only) Parameters for paramterised interfaces. Null
+     * otherwise.
+     */
+    public LinkedList/*Type*/ parameters;
+
+    /**
+     * (definition only) Functions of this interface.
+     */
+    public LinkedList/*Xfunction*/ functions;
+
+    public NDElement start(Attributes attrs) {
+       NDElement temp = super.start(attrs);
+       Xinterface me = (Xinterface) temp;
+        if (Xnesc.addNewAttributes) {
+            me.addNewAttributes(attrs);
+        }
+       me.provided = attrs.getValue("provided").equals("1");
+       return me;
+    }
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Xinstance)
+           instance = (Xinstance)subElement;
+       if (subElement instanceof Xinterface_parameters)
+           parameters = ((Xinterface_parameters)subElement).l;
+       if (subElement instanceof Xinterface_functions)
+           functions = ((Xinterface_functions)subElement).l;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterface_functions.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterface_functions.java
new file mode 100644 (file)
index 0000000..7413e41
--- /dev/null
@@ -0,0 +1,22 @@
+// $Id: Xinterface_functions.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import java.util.*;
+
+/**
+ * Container for functions of interface. Goes away.
+ * @see net.tinyos.nesc.dump.xml.Xinterface
+ */
+public class Xinterface_functions extends NDList
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterface_parameters.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterface_parameters.java
new file mode 100644 (file)
index 0000000..bebf1e7
--- /dev/null
@@ -0,0 +1,22 @@
+// $Id: Xinterface_parameters.java,v 1.2 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Container for parameters of interfaces. Goes away.
+ * @see net.tinyos.nesc.dump.xml.Xinterface
+ */
+public class Xinterface_parameters extends NDList
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterface_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterface_ref.java
new file mode 100644 (file)
index 0000000..df47e7f
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xinterface_ref.java,v 1.5 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for interface references. These objects go away, replaced by the
+ * Xinterface object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xinterface
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xinterface_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "interface");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef.java
new file mode 100644 (file)
index 0000000..621aa45
--- /dev/null
@@ -0,0 +1,34 @@
+// $Id: Xinterfacedef.java,v 1.4 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * An interface definition.
+ */
+public class Xinterfacedef extends NescDefinition
+{
+    /**
+     * (definition only) Type parameters of generic interfaces.
+     */
+    public Xparameters parameters;
+    public LinkedList/*Xfunction*/ functions = new LinkedList();
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xparameters)
+           parameters = (Xparameters)subElement;
+       if (subElement instanceof Xfunction)
+           functions.add(subElement);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedef_ref.java
new file mode 100644 (file)
index 0000000..0bb9810
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xinterfacedef_ref.java,v 1.5 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for interface definition references. These objects go away,
+ * replaced by the Xinterfacedef object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xinterfacedef
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xinterfacedef_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return NescDefinition.lookup(attrs, reader, "interfacedef");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedefs.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterfacedefs.java
new file mode 100644 (file)
index 0000000..128c336
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xinterfacedefs.java,v 1.5 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface definition list.
+ */
+public class Xinterfacedefs extends NDList
+{
+    public NDElement end() {
+        Xnesc.interfacedefList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinterfaces.java b/tools/java/net/tinyos/nesc/dump/xml/Xinterfaces.java
new file mode 100644 (file)
index 0000000..0649246
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xinterfaces.java,v 1.6 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface list.
+ */
+public class Xinterfaces extends NDList
+{
+    public NDElement end() {
+        Xnesc.interfaceList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinternal_component.java b/tools/java/net/tinyos/nesc/dump/xml/Xinternal_component.java
new file mode 100644 (file)
index 0000000..b413dad
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xinternal_component.java,v 1.3 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Component declaration inside a configuration 
+ */
+public class Xinternal_component extends DataDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xinternal_component_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xinternal_component_ref.java
new file mode 100644 (file)
index 0000000..7d0802d
--- /dev/null
@@ -0,0 +1,29 @@
+// $Id: Xinternal_component_ref.java,v 1.4 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for internal-to-a-configuration component references. These
+ * objects go away, replaced by the Xinternal_component object representing
+ * the definition.
+ * @see net.tinyos.nesc.dump.xml.Xinternal_component
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xinternal_component_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "internal-component");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xlong.java b/tools/java/net/tinyos/nesc/dump/xml/Xlong.java
new file mode 100644 (file)
index 0000000..56bdeb5
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xlong.java,v 1.1 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Long documentation string
+ */
+public class Xlong extends DocumentationString
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xmodule.java b/tools/java/net/tinyos/nesc/dump/xml/Xmodule.java
new file mode 100644 (file)
index 0000000..f5afe66
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xmodule.java,v 1.3 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Module implementation.
+ */
+public class Xmodule extends Implementation
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xnesc.java b/tools/java/net/tinyos/nesc/dump/xml/Xnesc.java
new file mode 100644 (file)
index 0000000..2d97709
--- /dev/null
@@ -0,0 +1,96 @@
+// $Id: Xnesc.java,v 1.4 2005/10/20 03:27:33 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+/*
+@Copyright (c) 2005 The Regents of the University of California.
+All rights reserved.
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in all
+copies of this software.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+ENHANCEMENTS, OR MODIFICATIONS.
+
+                                                PT_COPYRIGHT_VERSION_2
+                                                COPYRIGHTENDKEY
+
+
+*/
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+import java.util.*;
+
+/**
+ * Top-level XML dump element. Doesn't do anything useful, see the elements
+ * which can be embedded here to actually get at the dumped information.
+ * @see net.tinyos.nesc.dump.xml.Xwiring
+ * @see net.tinyos.nesc.dump.xml.Xcomponents
+ * @see net.tinyos.nesc.dump.xml.Xinterfaces
+ * @see net.tinyos.nesc.dump.xml.Xinterfacedefs
+ * @see net.tinyos.nesc.dump.xml.Xtags
+ *
+ * @author contributor: Elaine Cheong <celaine@cvs.sourceforge.net>
+ */
+public class Xnesc extends NDElement
+{
+    public static LinkedList/*Xinterface*/ interfaceList;
+    public static LinkedList/*Xcomponent*/ componentList;
+    public static LinkedList/*Xconstant*/ constantList;
+    public static LinkedList/*Xfunction*/ functionList;
+    public static LinkedList/*Xinterfacedef*/ interfacedefList;
+    public static LinkedList/*TagDefinition*/ tagList;
+    public static LinkedList/*Xtypedef*/ typedefList;
+    public static LinkedList/*Xvariable*/ variableList;
+
+    public static DefinitionTable defsDataDefinition = new DefinitionTable();
+    public static DefinitionTable defsNescDefinition = new DefinitionTable();
+    public static DefinitionTable defsTagDefinition = new DefinitionTable();
+    public static DefinitionTable defsXfield = new DefinitionTable();
+    
+    public static void reset() {
+        interfaceList = null;
+        componentList = null;
+        constantList = null;
+        functionList = null;
+        interfacedefList = null;
+        tagList = null;
+        typedefList = null;
+        variableList = null;
+
+        defsDataDefinition = new DefinitionTable();
+        defsNescDefinition = new DefinitionTable();
+        defsTagDefinition = new DefinitionTable();
+        defsXfield = new DefinitionTable();
+    }
+
+    /** Flag for determining whether to call addNewAttributes()
+     *  @see net.tinyos.nesc.dump.xml.Xinterface
+     *  @see net.tinyos.nesc.dump.xml.DataDefinition
+     *  @see net.tinyos.nesc.dump.xml.Definition
+     */
+    public static boolean addNewAttributes = true;
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xnx_struct.java b/tools/java/net/tinyos/nesc/dump/xml/Xnx_struct.java
new file mode 100644 (file)
index 0000000..de6a428
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xnx_struct.java,v 1.1 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An external-representation structure.
+ */
+public class Xnx_struct extends StructureDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xnx_struct_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xnx_struct_ref.java
new file mode 100644 (file)
index 0000000..3fe93c3
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xnx_struct_ref.java,v 1.2 2006/01/05 19:49:24 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for external-representation structure references. These objects go
+ * away, replaced by the Xnx_struct object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xnx_struct
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xnx_struct_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "nx_struct");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xnx_union.java b/tools/java/net/tinyos/nesc/dump/xml/Xnx_union.java
new file mode 100644 (file)
index 0000000..33f3329
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xnx_union.java,v 1.1 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An external-representation union.
+ */
+public class Xnx_union extends StructureDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xnx_union_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xnx_union_ref.java
new file mode 100644 (file)
index 0000000..9f2c438
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xnx_union_ref.java,v 1.2 2006/01/05 19:49:24 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for external-representation union references. These objects go
+ * away, replaced by the Xnx_union object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xnx_union
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xnx_union_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "nx_union");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xparameters.java b/tools/java/net/tinyos/nesc/dump/xml/Xparameters.java
new file mode 100644 (file)
index 0000000..9a1ea9d
--- /dev/null
@@ -0,0 +1,34 @@
+// $Id: Xparameters.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A function, interface or component parameter list specfication.
+ */
+public class Xparameters extends NDList
+{
+    /**
+     * (valid for functions only) true if the function is a variable-argument
+     * list function (e.g., printf)
+     */
+    public boolean varargs;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xvarargs)
+           varargs = true;
+       else
+           super.child(subElement);
+    }
+    
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xshort.java b/tools/java/net/tinyos/nesc/dump/xml/Xshort.java
new file mode 100644 (file)
index 0000000..fe3146f
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xshort.java,v 1.1 2005/12/14 21:21:41 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Short documentation string
+ */
+public class Xshort extends DocumentationString
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xstruct.java b/tools/java/net/tinyos/nesc/dump/xml/Xstruct.java
new file mode 100644 (file)
index 0000000..3809627
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xstruct.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A C struct definition.
+ */
+public class Xstruct extends StructureDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xstruct_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xstruct_ref.java
new file mode 100644 (file)
index 0000000..bdf55d2
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xstruct_ref.java,v 1.4 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for C structure references. These objects go away, replaced by the
+ * Xstruct object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xstruct
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xstruct_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "struct");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xstructured_element.java b/tools/java/net/tinyos/nesc/dump/xml/Xstructured_element.java
new file mode 100644 (file)
index 0000000..5bc0068
--- /dev/null
@@ -0,0 +1,42 @@
+// $Id: Xstructured_element.java,v 1.5 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Elements of a structure initialiser (Xvalue_structured)
+ * @see net.tinyos.nesc.dump.xml.Xvalue_structured
+ */
+public class Xstructured_element extends NDElement
+{
+    /**
+     * What field is being initialised.
+     */
+    public Xfield field;
+
+    /**
+     * Initialiser value.
+     */
+    public Value value;
+
+    public NDElement start(NDReader reader, Attributes attrs) {
+       field = (Xfield)Xfield.lookup(reader, attrs);
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Value)
+           value = (Value)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtags.java b/tools/java/net/tinyos/nesc/dump/xml/Xtags.java
new file mode 100644 (file)
index 0000000..dc83b42
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xtags.java,v 1.4 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level tag-based (enum, struct, etc) types list.
+ */
+public class Xtags extends NDList
+{
+    public NDElement end() {
+        Xnesc.tagList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xto.java b/tools/java/net/tinyos/nesc/dump/xml/Xto.java
new file mode 100644 (file)
index 0000000..3a85313
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xto.java,v 1.3 2005/01/27 21:33:55 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A starting point for a wire (wiring graph edge).
+ */
+public class Xto extends WiringEndpoint
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_array.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_array.java
new file mode 100644 (file)
index 0000000..54bfa96
--- /dev/null
@@ -0,0 +1,52 @@
+// $Id: Xtype_array.java,v 1.4 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A C array type.
+ */
+public class Xtype_array extends Type
+{
+    /**
+     * Base type for the array.
+     */
+    public Type subType;
+
+    /**
+     * Length of the array. Might be a non-constant for arrays of unspecified
+     * length.
+     */
+    public Constant length;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       length = Constant.decode(attrs.getValue("elements"));
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Type)
+           subType = (Type)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_array))
+           return false;
+       Xtype_array other = (Xtype_array)obj;
+       return subType.equals(other.subType) &&
+           ((!length.constant() && !other.length.constant()) ||
+            length.equals(other.length));
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_float.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_float.java
new file mode 100644 (file)
index 0000000..35d72ad
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xtype_complex_float.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A complex floating point type.
+ */
+public class Xtype_complex_float extends SimpleType
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_int.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_complex_int.java
new file mode 100644 (file)
index 0000000..19d1c74
--- /dev/null
@@ -0,0 +1,32 @@
+// $Id: Xtype_complex_int.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A complex integer type.
+ */
+public class Xtype_complex_int extends SimpleType
+{
+    /**
+     * True if the base integer type is unsigned.
+     */
+    public boolean unsignedType;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       unsignedType = boolDecode("unsigned");
+       return this;
+    }
+}
+
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_component.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_component.java
new file mode 100644 (file)
index 0000000..04a8dee
--- /dev/null
@@ -0,0 +1,38 @@
+// $Id: Xtype_component.java,v 1.5 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Type of internal component references in configurations. Each component
+ * in a configuration has its own separate (singleton) type.
+ */
+public class Xtype_component extends Type
+{
+    /**
+     * What internal component this is the type of.
+     */
+    public Xinternal_component component;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xinternal_component)
+           component = (Xinternal_component)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_component))
+           return false;
+       return component == ((Xtype_component)obj).component;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_float.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_float.java
new file mode 100644 (file)
index 0000000..586a842
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xtype_float.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A floating point type.
+ */
+public class Xtype_float extends SimpleType
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_function.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_function.java
new file mode 100644 (file)
index 0000000..918beef
--- /dev/null
@@ -0,0 +1,68 @@
+// $Id: Xtype_function.java,v 1.5 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * A function type.
+ */
+public class Xtype_function extends Type
+{
+    /**
+     * Parameters of the function. null iff oldstyle is true.
+     */
+    public LinkedList/*Type*/ parameters;
+
+    /**
+     * Return type of this function.
+     */
+    public Type returns;
+
+    /**
+     * True for variable-argument functions (e.g., printf).
+     */
+    public boolean varargs;
+
+    /**
+     * True for old-style function types (no parameter types specified).
+     */
+    public boolean oldstyle;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       varargs = boolDecode(attrs.getValue("varargs"));
+       oldstyle = boolDecode(attrs.getValue("oldstyle"));
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Type)
+           returns = (Type)subElement;
+       if (subElement instanceof Xfunction_parameters)
+           parameters = ((Xfunction_parameters)subElement).l;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_function))
+           return false;
+       Xtype_function other = (Xtype_function)obj;
+
+       if (!returns.equals(other.returns))
+           return false;
+       if (oldstyle || other.oldstyle)
+           return oldstyle == other.oldstyle;
+       return varargs == other.varargs && parameters.equals(other.parameters);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_int.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_int.java
new file mode 100644 (file)
index 0000000..e0a1fa2
--- /dev/null
@@ -0,0 +1,31 @@
+// $Id: Xtype_int.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An integer type.
+ */
+public class Xtype_int extends SimpleType
+{
+    /**
+     * True if the integer type is unsigned.
+     */
+    public boolean unsignedType;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       unsignedType = boolDecode("unsigned");
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_interface.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_interface.java
new file mode 100644 (file)
index 0000000..3179670
--- /dev/null
@@ -0,0 +1,39 @@
+// $Id: Xtype_interface.java,v 1.5 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Type of interfaces in components. Each separate interface has its own
+ * separate (singleton) type (in particular, even if you, e.g., provide
+ * StdControl twice, the types for the two interfaces are different).
+ */
+public class Xtype_interface extends Type
+{
+    /**
+     * What interface this type is for.
+     */
+    public Xinterface intf;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xinterface)
+           intf = (Xinterface)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_interface))
+           return false;
+       return intf == ((Xtype_interface)obj).intf;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_pointer.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_pointer.java
new file mode 100644 (file)
index 0000000..7534c9e
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id: Xtype_pointer.java,v 1.4 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A pointer type.
+ */
+public class Xtype_pointer extends Type
+{
+    /**
+     * The type pointed to.
+     */
+    public Type subType;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Type)
+           subType = (Type)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_pointer))
+           return false;
+       return subType.equals(((Xtype_array)obj).subType);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_qualified.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_qualified.java
new file mode 100644 (file)
index 0000000..fdd7aa7
--- /dev/null
@@ -0,0 +1,64 @@
+// $Id: Xtype_qualified.java,v 1.4 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A qualfied (const, volatile, restrict) type.
+ */
+public class Xtype_qualified extends Type
+{
+    /**
+     * The type that is qualified.
+     */
+    public Type subType;
+
+    /**
+     * true if the subType is qualified with const.
+     */
+    public boolean qconst;
+    
+    /**
+     * true if the subType is qualified with volatile.
+     */
+    public boolean qvolatile;
+
+    /**
+     * true if the subType is qualified with restrict.
+     */
+    public boolean qrestrict;
+
+    public NDElement start(Attributes attrs) {
+       super.start(attrs);
+       qconst = boolDecode(attrs.getValue("const"));
+       qvolatile = boolDecode(attrs.getValue("volatile"));
+       qrestrict = boolDecode(attrs.getValue("__restrict"));
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Type)
+           subType = (Type)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_qualified))
+           return false;
+       Xtype_qualified other = (Xtype_qualified)obj;
+       return subType.equals(other.subType) &&
+           qconst == other.qconst &&
+           qvolatile == other.qvolatile &&
+           qrestrict == other.qrestrict;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_tag.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_tag.java
new file mode 100644 (file)
index 0000000..8ed4508
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id: Xtype_tag.java,v 1.4 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A tagged (enum, struct, etc) type.
+ */
+public class Xtype_tag extends Type
+{
+    /**
+     * The tagged type's definition.
+     */
+    public TagDefinition tag;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof TagDefinition)
+           tag = (TagDefinition)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_tag))
+           return false;
+       return tag == ((Xtype_tag)obj).tag;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_var.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_var.java
new file mode 100644 (file)
index 0000000..c1ea32a
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id: Xtype_var.java,v 1.4 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A type variable.
+ */
+public class Xtype_var extends Type
+{
+    /**
+     * A typedef object which uniquely identifies this type variable.
+     */
+    public Xtypedef var;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xtypedef)
+           var = (Xtypedef)subElement;
+       super.child(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xtype_var))
+           return false;
+       return var == ((Xtype_var)obj).var;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtype_void.java b/tools/java/net/tinyos/nesc/dump/xml/Xtype_void.java
new file mode 100644 (file)
index 0000000..ff25a0f
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xtype_void.java,v 1.2 2005/02/03 20:15:21 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * The void type.
+ */
+public class Xtype_void extends SimpleType
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtypedef.java b/tools/java/net/tinyos/nesc/dump/xml/Xtypedef.java
new file mode 100644 (file)
index 0000000..cd2945d
--- /dev/null
@@ -0,0 +1,34 @@
+// $Id: Xtypedef.java,v 1.3 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import net.tinyos.nesc.dump.*;
+
+/**
+ * A C typedef.
+ */
+public class Xtypedef extends DataDefinition
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       if (attrs.getValue("ref") == null) {
+           /* work around nesC 1.2.1 bug. This should really be a typename */
+           try {
+               NDElement me = reader.makeElement("typename");
+               return me.start(reader, attrs);
+           }
+           catch (Exception e) { /* stuff is broken */ }
+       }
+       return super.start(reader, attrs);
+    }
+
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtypedef_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xtypedef_ref.java
new file mode 100644 (file)
index 0000000..0f2bb87
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xtypedef_ref.java,v 1.6 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for C typedef references. These objects go away, replaced by the
+ * Xtypedef object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xtypedef
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xtypedef_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "typedef");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtypedefs.java b/tools/java/net/tinyos/nesc/dump/xml/Xtypedefs.java
new file mode 100644 (file)
index 0000000..fe164d7
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xtypedefs.java,v 1.2 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface definition list.
+ */
+public class Xtypedefs extends NDList
+{
+    public NDElement end() {
+        Xnesc.typedefList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xtypename.java b/tools/java/net/tinyos/nesc/dump/xml/Xtypename.java
new file mode 100644 (file)
index 0000000..1b64412
--- /dev/null
@@ -0,0 +1,30 @@
+// $Id: Xtypename.java,v 1.1 2006/01/03 23:50:52 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * The typedef used to define a type.
+ */
+public class Xtypename extends NDElement
+{
+    /**
+     * The typedef stored in this typename element
+     */
+    public Xtypedef tdef;
+
+    public void child(NDElement subElement) {
+       if (subElement instanceof Xtypedef)
+           tdef = (Xtypedef)subElement;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xunion.java b/tools/java/net/tinyos/nesc/dump/xml/Xunion.java
new file mode 100644 (file)
index 0000000..90d67d2
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xunion.java,v 1.2 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A C union definition.
+ */
+public class Xunion extends StructureDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xunion_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xunion_ref.java
new file mode 100644 (file)
index 0000000..af00b02
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xunion_ref.java,v 1.4 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for C union references. These objects go away, replaced by the
+ * Xunion object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xunion
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xunion_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return TagDefinition.lookup(reader, attrs, "union");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvalue.java b/tools/java/net/tinyos/nesc/dump/xml/Xvalue.java
new file mode 100644 (file)
index 0000000..94b2be3
--- /dev/null
@@ -0,0 +1,36 @@
+// $Id: Xvalue.java,v 1.3 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A constant in a C initialiser.
+ */
+public class Xvalue extends Value
+{
+    /**
+     * Constant's value.
+     */
+    public Constant cst;
+
+    public NDElement start(Attributes attrs) {
+       cst = Constant.decode(attrs.getValue("cst"));
+       return this;
+    }
+
+    public boolean equals(Object obj) {
+       if (!(obj instanceof Xvalue))
+           return false;
+       return cst.equals(((Xvalue)obj).cst);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvalue_array.java b/tools/java/net/tinyos/nesc/dump/xml/Xvalue_array.java
new file mode 100644 (file)
index 0000000..da85db9
--- /dev/null
@@ -0,0 +1,36 @@
+// $Id: Xvalue_array.java,v 1.4 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * An initialiser for an array.
+ */
+public class Xvalue_array extends Value
+{
+    /**
+     * The individual array element initialisers.
+     */
+    public LinkedList/*Xarray_element*/ elements = new LinkedList();
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Xarray_element)
+           elements.add(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       return false;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvalue_structured.java b/tools/java/net/tinyos/nesc/dump/xml/Xvalue_structured.java
new file mode 100644 (file)
index 0000000..65f1f50
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id: Xvalue_structured.java,v 1.4 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * An initialiser for a structure.
+ */
+public class Xvalue_structured extends Value
+{
+    /**
+     * The initialisers for the structure's fields. Note that not all
+     * fields need be initialised.
+     */
+    public LinkedList/*Xstructured_element*/ fields = new LinkedList();
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Xstructured_element)
+           fields.add(subElement);
+    }
+
+    public boolean equals(Object obj) {
+       return false;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvarargs.java b/tools/java/net/tinyos/nesc/dump/xml/Xvarargs.java
new file mode 100644 (file)
index 0000000..a61c11e
--- /dev/null
@@ -0,0 +1,23 @@
+// $Id: Xvarargs.java,v 1.2 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Placeholder marking variable-argument functions in parameter lists.
+ * Goes away.
+ * @see net.tinyos.nesc.dump.xml.Xparameters
+ */
+public class Xvarargs extends NDElement
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvariable.java b/tools/java/net/tinyos/nesc/dump/xml/Xvariable.java
new file mode 100644 (file)
index 0000000..6231259
--- /dev/null
@@ -0,0 +1,21 @@
+// $Id: Xvariable.java,v 1.2 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * A C variable.
+ */
+public class Xvariable extends DataDefinition
+{
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvariable_ref.java b/tools/java/net/tinyos/nesc/dump/xml/Xvariable_ref.java
new file mode 100644 (file)
index 0000000..07ae4b1
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id: Xvariable_ref.java,v 1.6 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import net.tinyos.nesc.dump.*;
+import org.xml.sax.*;
+
+/**
+ * Class for C variable references. These objects go away, replaced by the
+ * Xvariable object representing the definition.
+ * @see net.tinyos.nesc.dump.xml.Xvariable
+ * @see net.tinyos.nesc.dump.xml.Definition
+ */
+public class Xvariable_ref extends NDElement
+{
+    public NDElement start(NDReader reader, Attributes attrs) {
+       return DataDefinition.lookup(reader, attrs, "variable");
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xvariables.java b/tools/java/net/tinyos/nesc/dump/xml/Xvariables.java
new file mode 100644 (file)
index 0000000..01885a2
--- /dev/null
@@ -0,0 +1,26 @@
+// $Id: Xvariables.java,v 1.2 2005/09/27 04:05:39 celaine Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+import java.util.*;
+
+/**
+ * Top-level interface definition list.
+ */
+public class Xvariables extends NDList
+{
+    public NDElement end() {
+        Xnesc.variableList = l;
+       return this;
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xwire.java b/tools/java/net/tinyos/nesc/dump/xml/Xwire.java
new file mode 100644 (file)
index 0000000..b495711
--- /dev/null
@@ -0,0 +1,103 @@
+// $Id: Xwire.java,v 1.4 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * An edge in a wiring graph.
+ * @see net.tinyos.nesc.dump.xml.WiringGraph
+ * @see net.tinyos.nesc.dump.xml.WiringEndpoint
+ * @see net.tinyos.nesc.dump.xml.WiringNode
+ */
+public class Xwire extends NDElement
+{
+    /**
+     * The origin of this wire.
+     */
+    public WiringEndpoint from;
+
+    /**
+     * The destination of this wire.
+     */
+    public WiringEndpoint to;
+
+    /**
+     * The source code location which created this wire. null in
+     * function-level wiring graphs.
+     */
+    public Location location;
+
+    public NDElement start(Attributes attrs) {
+       location = Location.decode(attrs.getValue("loc"));
+       return this;
+    }
+
+    public void child(NDElement subElement) {
+       super.child(subElement);
+       if (subElement instanceof Xfrom)
+           from = (Xfrom)subElement;
+       if (subElement instanceof Xto)
+           to = (Xto)subElement;
+    }
+
+    protected boolean follow(WiringEndpoint position,
+                            WiringEndpoint start, WiringEndpoint end) {
+       /* assert(position.node == start.node); */
+       if (position.arguments != null) {
+           if (start.arguments != null) {
+               if (!start.arguments.equals(position.arguments))
+                   return false;
+               position.arguments = end.arguments;
+           }
+           /* else assert(end.arguments == null); */
+       }
+       else
+           position.arguments = end.arguments;
+       position.node = end.node;
+       return true;
+    }
+
+
+    /**
+     * Try to follow this edge forwards from 'position'. Return true if
+     * this edge can be followed. If the edge can be followed, update
+     * 'position' to reflect the results of following the edge.
+     * <p>
+     * The position's node must match this edge's starting node ('from' 
+     * field).
+     * <p>
+     * An edge cannot be followed if 'position' specifies a particular
+     * interface from a parameterised interface (i.e., has arguments),
+     * and this edge specifies a different interface (i.e., has different
+     * arguments in its 'from' endpoint).
+     */
+    public boolean followForwards(WiringEndpoint position) {
+       return follow(position, from, to);
+    }
+
+    /**
+     * Try to follow this edge backwards from 'position'. Return true if
+     * this edge can be followed. If the edge can be followed, update
+     * 'position' to reflect the results of following the edge.
+     * <p>
+     * The position's node must match this edge's ending node ('to' field).
+     * <p>
+     * An edge cannot be followed if 'position' specifies a particular
+     * interface from a parameterised interface (i.e., has arguments),
+     * and this edge specifies a different interface (i.e., has different
+     * arguments in its 'to' endpoint).
+     */
+    public boolean followBackwards(WiringEndpoint position) {
+       return follow(position, to, from);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/dump/xml/Xwiring.java b/tools/java/net/tinyos/nesc/dump/xml/Xwiring.java
new file mode 100644 (file)
index 0000000..cf6fca6
--- /dev/null
@@ -0,0 +1,29 @@
+// $Id: Xwiring.java,v 1.5 2005/02/03 20:15:22 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.dump.xml;
+
+import org.xml.sax.*;
+
+/**
+ * Top-level wiring graph.
+ */
+public class Xwiring extends NDElement
+{
+    /**
+     * The application's wiring graph
+     */
+    public static WiringGraph wg = new WiringGraph();
+
+    public void child(NDElement subElement) {
+       wg.addEdge((Xwire)subElement);
+    }
+}
diff --git a/tools/java/net/tinyos/nesc/wiring/Makefile.am b/tools/java/net/tinyos/nesc/wiring/Makefile.am
new file mode 100644 (file)
index 0000000..3115a07
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+AUTOMAKE_OPTIONS = foreign
+
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = README $(java_files)
+ROOT=../../../..
+
+noinst_DATA = $(class_files)
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT) 2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
diff --git a/tools/java/net/tinyos/nesc/wiring/Makefile.in b/tools/java/net/tinyos/nesc/wiring/Makefile.in
new file mode 100644 (file)
index 0000000..69507c1
--- /dev/null
@@ -0,0 +1,309 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (c) 2004-2005 Intel Corporation
+# All rights reserved.
+#
+# This file is distributed under the terms in the attached INTEL-LICENSE     
+# file. If you do not find this file, a copy can be found by writing to
+# Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+# 94704.  Attention:  Intel License Inquiry.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = tools/java/net/tinyos/nesc/wiring
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+pathperl = @pathperl@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+java_files = $(wildcard *.java)
+class_files = $(java_files:.java=.class)
+EXTRA_DIST = README $(java_files)
+ROOT = ../../../..
+noinst_DATA = $(class_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/wiring/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  tools/java/net/tinyos/nesc/wiring/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+$(class_files): $(java_files)
+       CLASSPATH=`cygpath -w $(ROOT) 2>/dev/null || echo $(ROOT)` javac $(java_files)
+
+clean mostlyclean:
+       rm -f *.class
+# 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/tools/java/net/tinyos/nesc/wiring/README b/tools/java/net/tinyos/nesc/wiring/README
new file mode 100644 (file)
index 0000000..df44e8f
--- /dev/null
@@ -0,0 +1,70 @@
+A sample application using the Java nesC XML parsing classes to verify
+wiring constraints. A wiring constraint expresses requirements on the
+number of paths to and from a particular point in an application's wiring
+graph. They can be used, e.g., to ensure that an initialisation interface
+is always wired, or that only one other component wires to an interface
+which represents a non-shareable hardware resource such as a timer.
+
+These constraints are defined in terms of the per-function wiring graph of
+the program. In the per-function wiring graph, interfaces are replaced by
+separate nodes for each command and event. An edge from interface instance
+A to interface instance B is replaced by edges from the commands of A to
+the commands of B and from the events of B to the events of A (reflecting
+the fact that commands and events go in opposite directions). A command
+in a provided interface and an event in a used interface are considered
+provided in the per-function wiring graph; a command in a used interface
+and an event in a provided interface are considered used.
+
+A wiring constraint expresses constraints on the number of paths to (for
+provided commands and events) or from (for used commands and events) nodes
+in the per-function wiring graph. There are three constraints: at-most-once
+(<= 1), at-least-once (>= 1) and exactly-once (= 1).
+
+Examples:
+  module Foo {
+    /* we want to ensure Foo is initialised */
+    provides interface StdControl @atleastonce();
+  } ...
+
+  module HardwareClockM {
+    /* the hardware clock is not shareable, but it doesn't have to be used */
+    provides interface Clock @atmostonce();
+  } ...
+
+  configuration WeirdClock {
+    /* The clock interface can have only one user. Note that it *is*
+       multiply wired in WeirdClock - this does not contradict the
+       @atmostonce() annotation which applies to components wiring to
+       WeirdClock.Clock */
+    provides interface Clock @atmostonce();
+  }
+  implementation {
+    components HWClock1, HWClock2;
+    Clock = HWClock1.Clock;
+    Clock = HWClock2.Clock;
+  }
+
+To use WiringCheck, you need to first declare the @atmostonce(),
+@atleaseonce() and @exactlyonce() attributes in tos.h:
+
+  struct @atomostonce() { };
+  struct @exactlyonce() { };
+  struct @atleastonce() { };
+
+and then use these annotations on provided or used interfaces, as desired
+(see doc/user/attributes.txt for more information on attributes).
+
+To run WiringCheck on your application, compile with these additional
+options to ncc:
+  -fnesc-dump=wiring 
+  '-fnesc-dump=interfaces(!abstract())'
+  '-fnesc-dump=referenced(interfacedefs, components)'
+  -fnesc-dumpfile=/tmp/wiring.xml
+
+and then execute
+  java net.tinyos.nesc.wiring.WiringCheck </tmp/wiring.xml
+to verify your wiring annotations.
+
+The currently version of WiringCheck only verifies annotations on
+interfaces; adding annotations on commands on events would be
+straightforward.
diff --git a/tools/java/net/tinyos/nesc/wiring/WiringCheck.java b/tools/java/net/tinyos/nesc/wiring/WiringCheck.java
new file mode 100644 (file)
index 0000000..094902d
--- /dev/null
@@ -0,0 +1,154 @@
+// $Id: WiringCheck.java,v 1.11 2006/06/12 23:32:47 idgay Exp $
+/*                                                                     tab:4
+ * Copyright (c) 2004-2005 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+package net.tinyos.nesc.wiring;
+
+import net.tinyos.nesc.dump.xml.*;
+import net.tinyos.nesc.dump.*;
+import java.io.*;
+import java.util.*;
+import org.xml.sax.*;
+
+/* Expects an xml dump of:
+     wiring 
+     interfaces(!abstract())
+     referenced(interfacedefs, components)
+*/
+public class WiringCheck
+{
+    final static boolean DEBUG = false;
+
+    boolean check1Wire(WiringScan from, int min, int max) {
+       int count = count(0, from);
+
+       if (min >= 0 && count < min) 
+           return explain("underwired", from);
+       if (max >= 0 && count > max)
+           return explain("overwired", from);
+
+       return false;
+    }
+
+    boolean explain(String error, WiringScan from) {
+       System.err.println(from.node.ep.location + ": interface " + from.node.ep + " " + error);
+       printPath(2, from);
+       return true;
+    }
+
+    /* We know the wiring graph is acyclic */
+
+    int count(int indent, WiringScan position) {
+       ListIterator out = position.edges();
+       int count = 0;
+       WiringScan temp = null;
+
+       while (out.hasNext()) {
+           Xwire e = (Xwire)out.next();
+
+           if (temp == null)
+               temp = position.duplicate();
+           else
+               temp.copy(position);
+           if (temp.follow(e)) {
+               if (inModule(temp))
+                   count++;
+               count += count(indent + 1, temp);
+           }
+       }
+       if (DEBUG) {
+           for (int i = 0; i < indent; i++)
+               System.err.print("  ");
+           System.err.println("fcount " + count + " @ " + position);
+       }
+
+       return count;
+    }
+
+    static String repeat(int n, char c) {
+       char[] cs = new char[n];
+
+       for (int i = 0; i < n; i++)
+           cs[i] = c;
+
+       return new String(cs);
+    }
+
+    void printPath(int offset, WiringScan position) {
+       ListIterator out = position.edges();
+       WiringScan temp = null;
+
+       while (out.hasNext()) {
+           Xwire e = (Xwire)out.next();
+
+           if (temp == null)
+               temp = position.duplicate();
+           else
+               temp.copy(position);
+           if (temp.follow(e)) {
+               System.err.println(repeat(offset, ' ') +
+                                  (position.isForwards() ? "-> " : "<- ") +
+                                  temp.node.ep +
+                                  (inModule(temp) ? " (module)" : "") +
+                                  " [" + e.location + "]");
+               printPath(offset + 2, temp);
+           }
+       }
+    }
+
+    boolean inModule(WiringEndpoint pos) {
+       Xcomponent container = (Xcomponent)pos.node.ep.container;
+       return container.implementation instanceof Xmodule;
+    }
+
+    void checkWiring() {
+       ListIterator toCheck = Xnesc.interfaceList.listIterator();
+
+       while (toCheck.hasNext()) {
+           int min = -1, max = -1;
+           Xinterface check1 = (Xinterface)toCheck.next();
+           Xattribute_value exactlyOnce = check1.attributeLookup("exactlyonce");
+           boolean reported = false;
+
+           if (check1.attributeLookup("atmostonce") != null ||
+               exactlyOnce != null)
+               max = 1;
+           if (check1.attributeLookup("atleastonce") != null ||
+               exactlyOnce != null)
+               min = 1;
+
+           if (min == -1 && max == -1)
+               continue;
+
+           WiringNode checkNode = Xwiring.wg.lookup(check1);
+
+           if (check1.provided) {
+               if (DEBUG)
+                   System.err.println("P: min " + min + ", max " + max);
+               reported = check1Wire(new WiringScanBackwards(checkNode), min, max);
+           }
+           else {
+               if (DEBUG)
+                   System.err.println("U: min " + min + ", max " + max);
+               check1Wire(new WiringScanForwards(checkNode), min, max);
+           }
+       }
+    }
+
+    public static void main(String[] args) throws IOException {
+       try {
+           new NDReader().parse(new InputSource(System.in));
+           new WiringCheck().checkWiring();
+       }
+       catch (SAXException e) {
+           System.err.println("no xml reader found");
+       }
+    }
+}
diff --git a/tools/migdecode.pm b/tools/migdecode.pm
new file mode 100644 (file)
index 0000000..8245957
--- /dev/null
@@ -0,0 +1,92 @@
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+true;
+
+# Decode spec into a generator-friendly form
+# takes spec as arguments, leaves results in the following global vars:
+# $size = bit size of message
+# $amtype = active message type (-1 if unknown)
+# @fields: array of field-specs. Each field-spec is a reference to an array:
+#   0: name
+#   1: base_type (U, I, BU, BI, F, D, LD)
+#   2: length (in bits)
+#   3-6: field access spec, as follows:
+#     3: base_offset
+#     4-6: refs to arrays with 1 element per index needed to access field
+#       4: amax (the original C array size)
+#      5: abit_size (of corresponding array element)
+#      6: abit_offset (of corresponding array)
+#   the offset of the field, given index[1], ..., index[n] (n >= 0) is 
+#   computed as follows:
+#     offset = base offset
+#     for i = 1 to n:
+#       assert index[i] >= 0 && index[i] < amax[i]
+#       offset += abit_size[i] * index[i] + abit_offset[i]
+
+sub decode() {
+    @spec = @_;
+
+    $_ = shift @spec;
+    /^((nx_)?struct|union) .* ([0-9]+) ([-0-9]+)/ or die;
+    $size = $3;
+    $amtype = $4;
+
+    $base = 0;
+    for (@spec) {
+       # remove end of line stuff to avoid confusion w/ cygwin
+       chop;
+       s/\r$//;
+
+       / *(.*)/;
+       split / /, $1;
+       ($field, $type, $offset, $bitlength) = @_;
+
+       $basetype = &basetype($type);
+       @field_array_max = &arraymax($type);    
+       @field_array_bitsize = &arraybitsize($bitlength, @field_array_max);
+
+       push @array_max, @field_array_max;
+       push @array_bitsize, @field_array_bitsize;
+       for ($i = 0; $i < @field_array_max; $i++) {
+           push @array_offset, 0;
+       }
+
+       if ($basetype eq "PUSH") {
+           if (@field_array_max) {
+               push @array_push_size, $#field_array_max + 1;
+               $array_offset[$#array_offset - $#field_array_max] = $base + $offset;
+               push @bases, $base;
+               $base = 0;
+           }
+           else {
+               push @bases, $base;
+               push @array_push_size, 0;
+               $base += $offset;
+           }
+       }
+       elsif ($basetype eq "POP") {
+           $base = pop @bases;
+           &poparray(pop @array_push_size);
+       }
+       else {
+           push @fields, [ $field, $basetype, $bitlength, $base + $offset,
+                           [ @array_max ], [ @array_bitsize ], [ @array_offset ] ];
+           &poparray($#field_array_max + 1);
+       }
+    }
+}
diff --git a/tools/nesc_nx.h b/tools/nesc_nx.h
new file mode 100644 (file)
index 0000000..2109d33
--- /dev/null
@@ -0,0 +1,405 @@
+/* Copyright (c) 2006 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+/* Authors:  David Gay  <dgay@intel-research.net>
+ *           Intel Research Berkeley Lab
+ */
+
+#ifdef __MSP430
+#include <sys/inttypes.h>
+#else
+#include <inttypes.h>
+#endif
+
+/* Network to host and host to network conversions.
+   Normal network representation is 2's complement big-endian, but there
+   are also little-endian types available.
+*/
+
+#define __NX_DECLARE_FUNCTIONS(bits)                                   \
+                                                                       \
+  inline int ## bits ## _t __nesc_ntoh_int ## bits(const void * COUNT(bits/8) source) @safe() { \
+    return __nesc_ntoh_uint ## bits(source);                           \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_hton_int ## bits(void * COUNT(bits/8) target, int ## bits ## _t value) @safe() { \
+    __nesc_hton_uint ## bits(target, value);                           \
+    return value;                                                      \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_ntoh_leint ## bits(const void * COUNT(bits/8) source) @safe() { \
+    return __nesc_ntoh_leuint ## bits(source);                         \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_hton_leint ## bits(void * COUNT(bits/8) target, int ## bits ## _t value) @safe() { \
+    __nesc_hton_leuint ## bits(target, value);                         \
+    return value;                                                      \
+  }
+
+#define __NX_DECLARE_BF_FUNCTIONS(bits)                                        \
+                                                                       \
+  uint ## bits ## _t __nesc_bf_decode ## bits(const uint8_t *msg, unsigned offset, uint8_t length) @safe() \
+  {                                                                    \
+    uint ## bits ## _t x = 0;                                          \
+    unsigned byte_offset = offset >> 3;                                        \
+    unsigned bit_offset = offset & 7;                                  \
+                                                                       \
+    /* All in one byte case */                                         \
+    if (length + bit_offset <= 8)                                      \
+      return (msg[byte_offset] >> (8 - bit_offset - length)) &         \
+       ((1 << length) - 1);                                            \
+                                                                       \
+    /* get some high order bits */                                     \
+    if (bit_offset > 0)                                                        \
+      {                                                                        \
+       length -= 8 - bit_offset;                                       \
+       x = (uint ## bits ## _t)(msg[byte_offset] & ((1 << (8 - bit_offset)) - 1)) << length; \
+       byte_offset++;                                                  \
+      }                                                                        \
+                                                                       \
+    while (length >= 8)                                                        \
+      {                                                                        \
+       length -= 8;                                                    \
+       x |= (uint ## bits ## _t)msg[byte_offset++] << length;          \
+      }                                                                        \
+                                                                       \
+    /* data from last byte */                                          \
+    if (length > 0)                                                    \
+      x |= msg[byte_offset] >> (8 - length);                           \
+                                                                       \
+    return x;                                                          \
+  }                                                                    \
+                                                                       \
+  void __nesc_bf_encode ## bits(uint8_t *msg, unsigned offset, uint8_t length, uint ## bits ## _t x) @safe() \
+  {                                                                    \
+    unsigned byte_offset = offset >> 3;                                        \
+    unsigned bit_offset = offset & 7;                                  \
+                                                                       \
+    x = x & ((1 << length) - 1);                                       \
+                                                                       \
+    /* all in one byte case */                                         \
+    if (length + bit_offset <= 8) {                                    \
+      unsigned mask = ((1 << length) - 1) << (8 - bit_offset - length); \
+                                                                       \
+      msg[byte_offset] =                                               \
+       ((msg[byte_offset] & ~mask) | x << (8 - bit_offset - length));  \
+      return;                                                          \
+    }                                                                  \
+                                                                       \
+    /* set some high order bits */                                     \
+    if (bit_offset > 0)                                                        \
+      {                                                                        \
+       unsigned mask = (1 << (8 - bit_offset)) - 1;                    \
+                                                                       \
+       length -= 8 - bit_offset;                                       \
+       msg[byte_offset] = ((msg[byte_offset] & ~mask) | x >> length);  \
+       byte_offset++;                                                  \
+      }                                                                        \
+                                                                       \
+    while (length >= 8)                                                        \
+      {                                                                        \
+       length -= 8;                                                    \
+       msg[byte_offset++] = x >> length;                               \
+      }                                                                        \
+                                                                       \
+    /* data for last byte */                                           \
+    if (length > 0)                                                    \
+      {                                                                        \
+       unsigned mask = (1 << (8 - length)) - 1;                        \
+                                                                       \
+       msg[byte_offset] = ((msg[byte_offset] & mask) | x << (8 - length)); \
+      }                                                                        \
+  }                                                                    \
+                                                                       \
+  inline uint ## bits ## _t __nesc_ntohbf_uint ## bits(const void *source, unsigned offset, uint8_t length) @safe() { \
+    return __nesc_bf_decode ## bits(source, offset, length);           \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_ntohbf_int ## bits(const void *source, unsigned offset, uint8_t length) @safe() { \
+    return __nesc_bf_decode ## bits(source, offset, length);           \
+  }                                                                    \
+                                                                       \
+  inline uint ## bits ## _t __nesc_htonbf_uint ## bits(void *target, unsigned offset, uint8_t length, uint ## bits ## _t value) @safe() { \
+    __nesc_bf_encode ## bits(target, offset, length, value);           \
+    return value;                                                      \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_htonbf_int ## bits(void *target, unsigned offset, uint8_t length, int ## bits ## _t value) @safe() { \
+    __nesc_bf_encode ## bits(target, offset, length, value);           \
+    return value;                                                      \
+  }                                                                    \
+                                                                       \
+  /* Little-endian functions */                                                \
+  uint ## bits ## _t __nesc_bfle_decode ## bits(const uint8_t *msg, unsigned offset, uint8_t length) @safe() \
+  {                                                                    \
+    uint ## bits ## _t x = 0;                                          \
+    unsigned byte_offset = offset >> 3;                                        \
+    unsigned bit_offset = offset & 7;                                  \
+    unsigned count = 0;                                                        \
+                                                                       \
+    /* all in one byte case */                                         \
+    if (length + bit_offset <= 8)                                      \
+      return (msg[byte_offset] >> bit_offset) & ((1 << length) - 1);   \
+                                                                       \
+    /* get some low order bits */                                      \
+    if (bit_offset > 0)                                                        \
+      {                                                                        \
+       x = msg[byte_offset++] >> bit_offset;                           \
+       count += 8 - bit_offset;                                        \
+      }                                                                        \
+                                                                       \
+    while (count + 8 <= length)                                                \
+      {                                                                        \
+       x |= (uint ## bits ## _t)(msg[byte_offset++] << count);         \
+       count += 8;                                                     \
+      }                                                                        \
+                                                                       \
+    /* data from last byte */                                          \
+    if (count < length)                                                        \
+      x |= (uint ## bits ## _t)(msg[byte_offset] & ((1 << (length - count)) - 1)) << count; \
+                                                                       \
+    return x;                                                          \
+  }                                                                    \
+                                                                       \
+  void __nesc_bfle_encode ## bits(uint8_t *msg, unsigned offset, uint8_t length, uint ## bits ## _t x) @safe()                                                \
+  {                                                                    \
+    unsigned byte_offset = offset >> 3;                                        \
+    unsigned bit_offset = offset & 7;                                  \
+    unsigned count = 0;                                                        \
+                                                                       \
+    x = x & ((1 << length) - 1);                                       \
+                                                                       \
+    /* all in one byte case */                                         \
+    if (length + bit_offset <= 8) {                                    \
+      unsigned mask = ((1 << length) - 1) << bit_offset;               \
+                                                                       \
+      msg[byte_offset] =                                               \
+       ((msg[byte_offset] & ~mask) | x << bit_offset);                 \
+      return;                                                          \
+    }                                                                  \
+                                                                       \
+    /* set some low order bits */                                      \
+    if (bit_offset > 0)                                                        \
+      {                                                                        \
+       unsigned mask = (1 << bit_offset) - 1;                          \
+                                                                       \
+       msg[byte_offset] = (msg[byte_offset] & mask) |                  \
+         (x << bit_offset);                                            \
+       count += 8 - bit_offset;                                        \
+       byte_offset++;                                                  \
+      }                                                                        \
+                                                                       \
+    while (count + 8 <= length)                                                \
+      {                                                                        \
+       msg[byte_offset++] = x >> count;                                \
+       count += 8;                                                     \
+      }                                                                        \
+                                                                       \
+    /* data for last byte */                                           \
+    if (count < length)                                                        \
+      {                                                                        \
+       unsigned remaining = length - count;                            \
+       unsigned mask = ~((1 << remaining) - 1);                        \
+                                                                       \
+       msg[byte_offset] = ((msg[byte_offset] & mask) | x >> count);    \
+      }                                                                        \
+  }                                                                    \
+                                                                       \
+  inline uint ## bits ## _t __nesc_ntohbf_leuint ## bits(const void *source, unsigned offset, uint8_t length) @safe() { \
+    return __nesc_bfle_decode ## bits(source, offset, length);         \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_ntohbf_leint ## bits(const void *source, unsigned offset, uint8_t length) @safe() { \
+    return __nesc_bfle_decode ## bits(source, offset, length);         \
+  }                                                                    \
+                                                                       \
+  inline uint ## bits ## _t __nesc_htonbf_leuint ## bits(void *target, unsigned offset, uint8_t length, uint ## bits ## _t value) @safe() { \
+    __nesc_bfle_encode ## bits(target, offset, length, value);         \
+    return value;                                                      \
+  }                                                                    \
+                                                                       \
+  inline int ## bits ## _t __nesc_htonbf_leint ## bits(void *target, unsigned offset, uint8_t length, int ## bits ## _t value) @safe() { \
+    __nesc_bfle_encode ## bits(target, offset, length, value);         \
+    return value;                                                      \
+  }                                                                    \
+                                                                       \
+
+/* 8-bits */
+/* ------ */
+
+inline uint8_t __nesc_ntoh_uint8(const void * ONE source) @safe() {
+  const uint8_t *base = source;
+  return base[0];
+}
+
+inline uint8_t __nesc_hton_uint8(void * ONE target, uint8_t value) @safe() {
+  uint8_t *base = target;
+  base[0] = value;
+  return value;
+}
+
+inline uint8_t __nesc_ntoh_leuint8(const void * ONE source) @safe() {
+  const uint8_t *base = source;
+  return base[0];
+}
+
+inline uint8_t __nesc_hton_leuint8(void * ONE target, uint8_t value) @safe() {
+  uint8_t *base = target;
+  base[0] = value;
+  return value;
+}
+
+__NX_DECLARE_FUNCTIONS(8)
+__NX_DECLARE_BF_FUNCTIONS(8)
+
+
+/* 16-bits */
+/* ------- */
+
+inline uint16_t __nesc_ntoh_uint16(const void * COUNT(2) source) @safe() {
+  const uint8_t *base = source;
+  return (uint16_t)base[0] << 8 | base[1];
+}
+
+inline uint16_t __nesc_hton_uint16(void * COUNT(2) target, uint16_t value) @safe() {
+  uint8_t *base = target;
+  base[1] = value;
+  base[0] = value >> 8;
+  return value;
+}
+
+inline uint16_t __nesc_ntoh_leuint16(const void * COUNT(2) source) @safe() {
+  const uint8_t *base = source;
+  return (uint16_t)base[1] << 8 | base[0];
+}
+
+inline uint16_t __nesc_hton_leuint16(void * COUNT(2) target, uint16_t value) @safe() {
+  uint8_t *base = target;
+  base[0] = value;
+  base[1] = value >> 8;
+  return value;
+}
+
+__NX_DECLARE_FUNCTIONS(16)
+__NX_DECLARE_BF_FUNCTIONS(16)
+
+
+/* 32-bits */
+/* ------- */
+inline uint32_t __nesc_ntoh_uint32(const void * COUNT(4) source) @safe() {
+  const uint8_t *base = source;
+  return (uint32_t)base[0] << 24 |
+         (uint32_t)base[1] << 16 |
+         (uint32_t)base[2] << 8 | base[3];
+}
+
+inline uint32_t __nesc_hton_uint32(void * COUNT(4) target, uint32_t value) @safe() {
+  uint8_t *base = target;
+  base[3] = value;
+  base[2] = value >> 8;
+  base[1] = value >> 16;
+  base[0] = value >> 24;
+  return value;
+}
+
+inline uint32_t __nesc_ntoh_leuint32(const void * COUNT(4) source) @safe() {
+  const uint8_t *base = source;
+  return (uint32_t)base[3] << 24 |
+         (uint32_t)base[2] << 16 |
+         (uint32_t)base[1] << 8 | base[0];
+}
+
+inline uint32_t __nesc_hton_leuint32(void * COUNT(4) target, uint32_t value) @safe() {
+  uint8_t *base = target;
+  base[0] = value;
+  base[1] = value >> 8;
+  base[2] = value >> 16;
+  base[3] = value >> 24;
+  return value;
+}
+
+__NX_DECLARE_FUNCTIONS(32)
+__NX_DECLARE_BF_FUNCTIONS(32)
+
+
+/* 64-bits */
+/* ------- */
+inline uint64_t __nesc_ntoh_uint64(const void * COUNT(8) source) @safe() {
+  const uint8_t *base = source;
+  return (uint64_t)base[0] << 56 |
+         (uint64_t)base[1] << 48 |
+         (uint64_t)base[2] << 40 |
+         (uint64_t)base[3] << 32 |
+         (uint64_t)base[4] << 24 |
+         (uint64_t)base[5] << 16 |
+         (uint64_t)base[6] << 8  | base[7];
+}
+
+inline uint64_t __nesc_hton_uint64(void * COUNT(8) target, uint64_t value) @safe() {
+  uint8_t *base = target;
+  base[7] = value;
+  base[6] = value >> 8;
+  base[5] = value >> 16;
+  base[4] = value >> 24;
+  base[3] = value >> 32;
+  base[2] = value >> 40;
+  base[1] = value >> 48;
+  base[0] = value >> 56;
+  return value;
+}
+
+inline uint64_t __nesc_ntoh_leuint64(const void * COUNT(8) source) @safe() {
+  const uint8_t *base = source;
+  return (uint64_t)base[7] << 56 |
+         (uint64_t)base[6] << 48 |
+         (uint64_t)base[5] << 40 |
+         (uint64_t)base[4] << 32 |
+         (uint64_t)base[3] << 24 |
+         (uint64_t)base[2] << 16 |
+         (uint64_t)base[1] << 8  | base[0];
+}
+
+inline uint64_t __nesc_hton_leuint64(void * COUNT(8) target, uint64_t value) @safe() {
+  uint8_t *base = target;
+  base[0] = value;
+  base[1] = value >> 8;
+  base[2] = value >> 16;
+  base[3] = value >> 24;
+  base[4] = value >> 32;
+  base[5] = value >> 40;
+  base[6] = value >> 48;
+  base[7] = value >> 56;
+  return value;
+}
+
+__NX_DECLARE_FUNCTIONS(64)
+__NX_DECLARE_BF_FUNCTIONS(64)
+
+
+/* Standard external types: big-endian */
+typedef int8_t nx_int8_t __attribute__((nx_base_be(int8)));
+typedef int16_t nx_int16_t __attribute__((nx_base_be(int16)));
+typedef int32_t nx_int32_t __attribute__((nx_base_be(int32)));
+typedef int64_t nx_int64_t __attribute__((nx_base_be(int64)));
+typedef uint8_t nx_uint8_t __attribute__((nx_base_be(uint8)));
+typedef uint16_t nx_uint16_t __attribute__((nx_base_be(uint16)));
+typedef uint32_t nx_uint32_t __attribute__((nx_base_be(uint32)));
+typedef uint64_t nx_uint64_t __attribute__((nx_base_be(uint64)));
+
+/* Little endian external types, for those apps that need them. */
+typedef int8_t nxle_int8_t __attribute__((nx_base_le(leint8)));
+typedef int16_t nxle_int16_t __attribute__((nx_base_le(leint16)));
+typedef int32_t nxle_int32_t __attribute__((nx_base_le(leint32)));
+typedef int64_t nxle_int64_t __attribute__((nx_base_le(leint64)));
+typedef uint8_t nxle_uint8_t __attribute__((nx_base_le(leuint8)));
+typedef uint16_t nxle_uint16_t __attribute__((nx_base_le(leuint16)));
+typedef uint32_t nxle_uint32_t __attribute__((nx_base_le(leuint32)));
+typedef uint64_t nxle_uint64_t __attribute__((nx_base_le(leuint64)));
+
+#undef __NX_DECLARE_FUNCTIONS
+#undef __NX_DECLARE_BF_FUNCTIONS
diff --git a/tools/nescc-diff.in b/tools/nescc-diff.in
new file mode 100644 (file)
index 0000000..7d6c09a
--- /dev/null
@@ -0,0 +1,326 @@
+#!@pathperl@
+# -*- perl -*-
+
+# This file is part of the nesC compiler.
+#    Copyright (C) 2004 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Configuration
+$prefix = "@prefix@";
+$exec_prefix = "@exec_prefix@";
+$nescc = "$exec_prefix/bin/nescc";
+$NCDIR = "@libdir@/ncc";
+
+# Have fun with the arguments
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+    $strip = 0;
+    $_ = $ARGV[$i];
+    if (/^-/) {
+       if (/^-fnesc-diff=(.*),(.*)$/) {
+           $diff_from = $1;
+           $diff_to = $2;
+       }
+       elsif (/^-fnesc-diff=(.*)$/) {
+           $diff_to = $1;
+       }
+       elsif (/^-nescc=(.*)$/) {
+           $nescc = $1;
+           $strip = 1;
+       }
+       elsif (/^-fnesc-cfile/ || /^-o/ || /^-c/ || /^-Wl,/) {
+           print STDERR "$_ option not allowed\n";
+           exit 2;
+       }
+       elsif (/^-v$/) {
+           $verbose = 1;
+       }
+       push @ncc_args, $_ if !$strip;
+    }
+    push @new_args, $_ if !$strip;
+}
+
+if (!$diff_to) {
+    print STDERR "no -fnesc-diff directive specified\n";
+    exit 2;
+}
+
+if (system("mkdir -p $diff_to")) {
+    print STDERR "Couldn't create destination directory $diff_to\n";
+    exit 1;
+}
+
+unshift @new_args, 
+  $nescc, "-c", "-o$diff_to/app.o", "-fnesc-cfile=$diff_to/app.c";
+
+print STDERR join(' ', @new_args), "\n" if $verbose;
+
+if (system @new_args) {
+    print STDERR "ncc failed\n";
+    exit 1;
+}
+
+#%sizes = &get_sizes("$diff_to/app.o");
+%kinds = &get_kinds("$diff_to/symbols");
+
+#foreach $sym (keys %kinds) {
+#    print "$sym: $kinds{$sym}\n";
+#}
+
+open(SCRIPT, ">$diff_to/scr.x") || die;
+$textsec = &print_section("FN");
+$datasec = &print_section("DATA");
+$bsssec = &print_section("BSS");
+&gen_script("$NCDIR/first-avr5.x");
+close SCRIPT || die;
+
+@exe1_args = @ncc_args;
+push @exe1_args, "$diff_to/app.o";
+unshift @exe1_args, $nescc, "-Wl,--script=$diff_to/scr.x", "-Wl,-Map=$diff_to/map1", 
+    "-o", "$diff_to/exe1";
+
+print STDERR join(' ', @exe1_args), "\n" if $verbose;
+system(@exe1_args) && die;
+
+#foreach $sym (keys %sizes) {
+#    print "$sym: $sizes{$sym} $output{$sym}\n";
+#}
+
+#foreach $sec (keys %sections) {
+#    print "$sec: " . join(' ', @{$sections{$sec}}) . "\n";
+#}
+
+#foreach $sym (keys %symbols) {
+#    print "$sym = $symbols{$sym}\n";
+#}
+
+if (!$diff_from) {
+    &parse_map("$diff_to/map1");
+}
+else {
+    &parse_map("$diff_from/map2");
+    foreach $sym (keys %address) {
+       $new = $sym;
+       $new =~ s/^\Q$diff_from\E/\Q$diff_to\E/;
+       $oldaddress{$new} = $address{$sym} - $secaddress{$output{$sym}};
+    }
+
+    &parse_map("$diff_to/map1");
+}
+
+$offset = &layout(".progmem", $symbols{"__ebase"} + 1024, 16);
+$osize{".progmem"} = $offset;
+$offset = &layout(".text", ($offset + 128 + 1) & ~1, 128);
+$osize{".text"} = $offset + 4096;
+
+$offset = &layout(".data", 0, 0);
+$osize{".data"} = $offset + 16;
+
+$offset = &layout(".bss", 0, 0);
+$osize{".bss"} = $offset;
+
+open(SCRIPT, ">$diff_to/fscr.x") || die;
+$textsec = &print_final_section(".text");
+$progmemsec = &print_final_section(".progmem");
+$datasec = &print_final_section(".data");
+$bsssec = &print_final_section(".bss");
+&gen_script("$NCDIR/second-avr5.x");
+close SCRIPT || die;
+
+@exe2_args = @ncc_args;
+push @exe2_args, "$diff_to/app.o";
+unshift @exe2_args, $nescc, "-Wl,--script=$diff_to/fscr.x", "-Wl,-Map=$diff_to/map2", 
+    "-o", "$diff_to/exe2";
+
+print STDERR join(' ', @exe2_args), "\n" if $verbose;
+system(@exe2_args) && die;
+
+
+sub layout {
+    my ($section, $base, $spacing) = @_;
+    my (@names, $isec, @order);
+
+    @names = @{$sections{$section}};
+
+    #open(LAYOUT, "|$NCDIR/smalldiff >$diff_to/layout$section") || die;
+    open(LAYOUT, ">$diff_to/ilayout$section") || die;
+    $count = $#names + 1;
+    print LAYOUT "(original $count $base $spacing)\n";
+    foreach $isec (@names) {
+       $oldaddress = $oldaddress{$isec};
+       $oldaddress = "null" if !defined($oldaddress);
+       print LAYOUT "(\"$isec\" $oldaddress $sizes{$isec})\n";
+    }
+    close LAYOUT || die;
+    system("$NCDIR/smalldiff <$diff_to/ilayout$section >$diff_to/layout$section") && die;
+    #die if $?;
+
+    open LAYOUT, "$diff_to/layout$section";
+    while (<LAYOUT>) {
+       next if /^;/;
+       die unless /\(\"(.*)\" ([0-9]+)\)/;
+       $offset = $offset{$1} = $2;
+       push @order, $1 if $1 ne "";
+    }
+    $order{$section} = \ @order;
+    return $offset;
+}
+
+sub print_final_section {
+    my ($section) = @_;
+    my (@names, $isec, $inp);
+
+    @names = @{$order{$section}};
+    foreach $isec (@names) {
+       $inp .= "    . = $offset{$isec};\n";
+       $inp .= "    $isec\n";
+    }
+    $inp .= "    . = $osize{$section};\n";
+
+    return $inp;
+}
+
+sub print_section {
+    my ($kindre) = @_;
+    my ($inp);
+
+    foreach $sym (keys %kinds) {
+       $inp .= "    *(.nesc.$sym)\n" if $kinds{$sym} =~ /$kindre/;
+    }
+    return $inp;
+}
+
+sub get_sizes {
+    my ($f) = @_;
+    my (%sizes);
+
+    if (!open(OBJINFO, "objdump -h $f |")) {
+       print STDERR "error obtaining symbol sizes\n";
+       exit 1;
+    }
+
+    while (<OBJINFO>) {
+       if (/\.nesc\.([A-Za-z0-9_\$]+)\s+([0-9a-fA-F]+)/) {
+           $sizes{$1} = hex $2;
+       }
+    }
+    close OBJINFO;
+    return %sizes;
+}
+
+sub parse_map {
+    my ($f) = @_;
+    my ($name, $size, $file, $ilistref, $output, $aoutput, $address);
+
+    if (!open(MAP, "$f")) {
+       print STDERR "error reading $f\n";
+       exit 1;
+    }
+
+    undef %secaddress;
+    undef %symbols;
+    undef %output;
+    undef %address;
+    undef %sizes;
+    undef %sections;
+
+    while (<MAP>) {
+       last if /^Linker script/;
+    }
+    while (<MAP>) {
+       chomp;
+       $name = 0;
+       if (/^([^ ()*]+)\s+([0-9a-fx]+)/) {
+           $secaddress{$1} = hex $2;
+           $output = $1;
+       }
+       elsif (/^ ([^ ()*]+)\s+([0-9a-fx]+)\s+([0-9a-fx]+)\s+(.*)/) {
+           die unless $output;
+           $name = $1;
+           $address = $2;
+           $size = $3;
+           $file = $4;
+       }
+       elsif (/^ ([^ ()*]+)$/) {
+           # Split into two lines, sometimes.
+           $name = $1;
+           $_ = <MAP>;
+           if (/^\s+([0-9a-fx]+)\s+([0-9a-fx]+)\s+(.*)/) {
+               $address = $1;
+               $size = $2;
+               $file = $3;
+           }
+           else {
+               $name = 0;
+           }
+       }
+       elsif (/^\s+([0-9a-fx]+)\s+(.*) =/) {
+           $symbols{$2} = hex $1;
+       }
+       elsif (/^\s+([0-9a-fx]+)\s+PROVIDE \((.*),/) {
+           $symbols{$2} = hex $1;
+       }
+       #if ($name && !($name =~ /^\.(vectors|init|fini)/) &&
+       if ($name && ($name =~ /^\.(nesc|progmem)/) &&
+           ($output =~ /^\.(bss|text|data)$/)) {
+           if ($name =~ /^\.(progmem)/) {
+               $aoutput = ".progmem";
+           }
+           else {
+               $aoutput = $output;
+           }
+           $name = "$file($name)";
+           $output{$name} = $aoutput;
+           $address{$name} = hex $address;
+           $sizes{$name} = hex $size;
+
+           $ilistref = $sections{$aoutput};
+           if (!$ilistref) {
+               $ilistref = [ ];
+               $sections{$aoutput} = $ilistref;
+           }
+           push @{$ilistref}, $name;
+       }
+    }
+    close MAP || die;
+}
+
+sub get_kinds {
+    my ($f) = @_;
+    my (%kinds);
+
+    if (!open(OBJINFO, $f)) {
+       print STDERR "error obtaining symbol information\n";
+       exit 1;
+    }
+
+    while (<OBJINFO>) {
+       die unless /^([A-Za-z0-9_\$]+) ([A-Z]+)$/;
+       $kinds{$1} = $2;
+    }
+    close OBJINFO || die;
+    return %kinds;
+}
+
+sub gen_script {
+    my ($template) = @_;
+
+    open(TEMPLATE, $template) || die;
+    while (<TEMPLATE>) {
+       print SCRIPT eval "qq[$_]";
+    }
+    close TEMPLATE || die;
+}
diff --git a/tools/nescc-mig.in b/tools/nescc-mig.in
new file mode 100644 (file)
index 0000000..124c375
--- /dev/null
@@ -0,0 +1,223 @@
+#!@pathperl@
+
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+$prefix = "@prefix@";
+$exec_prefix = "@exec_prefix@";
+$nescc = "$exec_prefix/bin/nescc";
+$NCDIR = "@libdir@/ncc";
+
+push @INC, "$NCDIR";
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+    $_ = $ARGV[$i];
+
+    if (/^-/) {
+       if (/^-java-classname=(.*)$/) {
+           $java_classname = $1;
+       }
+       elsif (/^-java-extends=(.*)$/) {
+           $java_extends = $1;
+       }
+       elsif (/^-csharp-classname=(.*)$/) {
+           $csharp_classname = $1;
+       }
+       elsif (/^-csharp-extends=(.*)$/) {
+           $csharp_extends = $1;
+       }
+       elsif (/^-python-classname=(.*)$/) {
+           $python_classname = $1;
+       }
+       elsif (/^-python-extends=(.*)$/) {
+           $python_extends = $1;
+       }
+       elsif (/^-c-prefix=(.*)$/) {
+           $c_prefix = $1;
+       }
+       elsif (/^-o/) {
+           ($i, $ofile) = &extractarg($i);
+       }
+       elsif (/^-nescc=(.*)$/) {
+           $nescc = $1;
+       }
+       # pass ncc options on through
+       # (yes, -o was captured above. This is "generic" code)
+       elsif (/^-[oILxubV]/) {
+           # pass option and arg through unchanged
+           $opt = substr $_, 1, 1;
+           ($i, $arg) = &extractarg($i);
+           push @args, "-$opt$arg";
+       }
+       elsif ($i < $#ARGV &&
+              (/^-idirafter$/ || /^-include$/ || /^-imacros$/ ||
+               /^-iprefix$/ || /^-iwithprefix$/ || /^-iwithprefixbefore$/ ||
+               /^-isystem$/ || /^-Xlinker$/)) {
+           # convert argument filename which is in next arg
+           push @args, $_;
+           push @args, $ARGV[++$i];
+       }
+       else {
+           push @args, $_;
+           $verbose = 1 if /^-v$/;
+       }
+    }
+    else {
+       &usage(0) if defined($message_type);
+       $message_type = $_ if defined($cfile) && !defined($message_type);
+       $cfile = $_ if defined($target) && !defined($cfile);
+       $target = $_ if !defined($target);
+    }
+}
+&usage("no target specified") if !defined($target);
+&usage("no message format file specified") if !defined($cfile);
+&usage("no message specified") if !defined($message_type);
+
+unshift @args, "-fsyntax-only";
+unshift @args, "$nescc";
+push @args, "-fnesc-msg=$message_type";
+push @args, "-x";
+push @args, "nesc";
+push @args, $cfile;
+
+print STDERR join(" ", @args), "\n" if $verbose;
+open(NESC, '-|', @args) or die "ncc not found";
+@spec = <NESC>;
+close NESC;
+
+if ($?) {
+    print STDERR "failed to parse message file $cfile\n";
+    exit 1;
+}
+
+if (!-f "$NCDIR/gen$target.pm") {
+    print STDERR "Unknown tool $target\n";
+    exit 2;
+}
+
+if ($ofile) {
+    close STDOUT;
+    if (!open STDOUT, ">$ofile") {
+       print STDERR "failed to create $ofile\n";
+       exit 1;
+    }
+}
+
+require "gen$target.pm";
+&gen($classname, @spec);
+$completed = 1;
+
+sub usage()
+{
+    my ($error) = @_;
+
+    print STDERR "$error\n\n" if $error;
+
+    print STDERR "Usage: $0 [options] tool msg-format-file message-type\n";
+    print STDERR "  general options are\n";
+    print STDERR "    -o <file>                         Specify output file\n";
+    print STDERR "                                      (default is stdout)\n";
+    print STDERR "    and any nescc option.\n\n";
+    print STDERR "  target specific options are\n";
+    print STDERR "    java:\n";
+    print STDERR "      -java-classname=FULL-CLASS-NAME Select class name (required)\n";
+    print STDERR "      -java-extends=CLASS-NAME        Select class to extend\n";
+    print STDERR "    csharp:\n";
+    print STDERR "      -csharp-classname=FULL-CLASS-NAME Select class name (required)\n";
+    print STDERR "      -csharp-extends=CLASS-NAME        Select class to extend\n";
+    print STDERR "                                      (default tinyos.message.Message)\n";
+    print STDERR "    python:\n";
+    print STDERR "      -python-classname=FULL-CLASS-NAME Select class name (required)\n";
+    print STDERR "      -python-extends=CLASS-NAME        Select class to extend\n";
+    print STDERR "                                      (default tinyos.message.Message)\n";
+    print STDERR "    C:\n";
+    print STDERR "      -c-prefix=PREFIX                  Select a different prefix than the\n";
+    print STDERR "                                        message-type.\n";
+    print STDERR "      You must use -o <somefile>.h when using the C tool. The C tool generates\n";
+    print STDERR "      both <somefile>.h and <somefile>.c\n";
+    exit 2;
+}
+
+sub extractarg {
+    local ($i) = @_;
+
+    if (length($ARGV[$i]) == 2) {
+       $arg = $ARGV[++$i];
+    }
+    else {
+       $arg = substr($ARGV[$i], 2);
+    }
+    return ($i, $arg);
+}
+
+sub poparray()
+{
+    my ($n) = @_;
+
+    while ($n-- > 0) {
+       pop @array_max;
+       pop @array_bitsize;
+       pop @array_offset;
+    }
+}
+
+sub basetype()
+{
+    my ($type) = @_;
+    my $basetype;
+
+    $type =~ /([A-Za-z0-9_]+)$/ or die;
+    $basetype = $1;
+
+    return "PUSH" if $basetype =~ /^AN?[SU]$/;
+    return "POP" if $basetype eq "AX";
+    return "U" if $basetype =~ /^Nnxle_u/;
+    return "I" if $basetype =~ /^Nnxle_/;
+    return "BU" if $basetype =~ /^Nnx_u/;
+    return "BI" if $basetype =~ /^Nnx_/;
+
+    return $basetype;
+}
+
+sub arraymax()
+{
+    my ($type, $bsize) = @_;
+    my @max;
+
+    while ($type =~ /^\[([0-9]+)\](.*)/) {
+       push @max, $1;
+       $type = $2;
+    }
+    return @max;
+}
+
+sub arraybitsize()
+{
+    my ($bsize, @max) = @_;
+    my @bitsize;
+
+    for ($i = $#max; $i >= 0; $i--) {
+       $bitsize[$i] = $bsize;
+       $bsize *= $max[$i];
+    }
+
+    return @bitsize;
+}
+
+sub END() {
+    unlink $ofile unless !$ofile || $completed;
+}
diff --git a/tools/nescc-ncg.in b/tools/nescc-ncg.in
new file mode 100644 (file)
index 0000000..cdce61f
--- /dev/null
@@ -0,0 +1,179 @@
+#!@pathperl@
+
+# This file is part of the nesC compiler.
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+$prefix = "@prefix@";
+$exec_prefix = "@exec_prefix@";
+$nescc = "$exec_prefix/bin/nescc";
+$NCDIR = "@libdir@/ncc";
+
+push @INC, "$NCDIR";
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+    $_ = $ARGV[$i];
+
+    if (/^-/) {
+       if (/^-java-classname=(.*)$/) {
+           $java_classname = $1;
+       }
+       elsif (/^-java-extends=(.*)$/) {
+           $java_extends = $1;
+       }
+       elsif (/^-python-classname=(.*)$/) {
+           $python_classname = $1;
+       }
+       elsif (/^-python-extends=(.*)$/) {
+           $python_extends = $1;
+       }
+       elsif (/^-c-prefix=(.*)$/) {
+           $c_prefix = $1;
+       }
+       elsif (/^-o/) {
+           ($i, $ofile) = &extractarg($i);
+       }
+       elsif (/^-nescc=(.*)$/) {
+           $nescc = $1;
+       }
+       # pass ncc options on through
+       # (yes, -o was captured above. This is "generic" code)
+       elsif (/^-[oILxubV]/) {
+           # pass option and arg through unchanged
+           $opt = substr $_, 1, 1;
+           ($i, $arg) = &extractarg($i);
+           push @args, "-$opt$arg";
+       }
+       elsif ($i < $#ARGV &&
+              (/^-idirafter$/ || /^-include$/ || /^-imacros$/ ||
+               /^-iprefix$/ || /^-iwithprefix$/ || /^-iwithprefixbefore$/ ||
+               /^-isystem$/ || /^-Xlinker$/)) {
+           # convert argument filename which is in next arg
+           push @args, $_;
+           push @args, $ARGV[++$i];
+       }
+       else {
+           push @args, $_;
+           $verbose = 1 if /^-v$/;
+       }
+    }
+    else {
+       if (!defined($target)) {
+           $target = $_;
+       }
+       elsif (!defined($cfile)) {
+           $cfile = $_;
+       }
+       else {
+           $csts = 1;
+           if (/^\w+$/) {
+               $cst_names{$_} = 1;
+           }
+           else {
+               $cst_files{$_} = 1;
+           }
+       }
+    }
+}
+&usage("no target specified") if !defined($target);
+&usage("no nesC file specified") if !defined($cfile);
+&usage("no constants requested") if !$csts;
+
+unshift @args, "-fsyntax-only";
+unshift @args, "-fnesc-csts";
+unshift @args, "$nescc";
+push @args, "-x";
+push @args, "nesc";
+push @args, $cfile;
+
+print STDERR join(" ", @args), "\n" if $verbose;
+open(NESC, '-|', @args) or die "$args[0] not found";
+@allcsts = <NESC>;
+close NESC;
+
+foreach (@allcsts) {
+    die "invalid nesC output" if !/(\w+) "(.*)" (\w+) (.*)/;
+    $name = $1;
+    $path = $2;
+    $val = $4;
+    $path =~ /([^\/\\]+)$/;
+    $file = $1;
+    $csts{$name} = $val if ($cst_names{$name} || $cst_files{$file});
+}
+
+if ($?) {
+    print STDERR "failed to parse nesC file $cfile\n";
+    exit 1;
+}
+
+if (!-f "$NCDIR/gencst$target.pm") {
+    print STDERR "Unknown tool $target\n";
+    exit 2;
+}
+
+if ($ofile) {
+    close STDOUT;
+    if (!open STDOUT, ">$ofile") {
+       print STDERR "failed to create $ofile\n";
+       exit 1;
+    }
+}
+
+require "gencst$target.pm";
+&gen($classname, %csts);
+$completed = 1;
+
+sub usage()
+{
+    my ($error) = @_;
+
+    print STDERR "$error\n\n" if $error;
+
+    print STDERR "Usage: $0 [options] tool nesC-file filenames-or-constant-names...\n";
+    print STDERR "  general options are\n";
+    print STDERR "    -I dir                            Add include directory\n\n";
+    print STDERR "    -target=NCC-TARGET                Select mote architecture\n";
+    print STDERR "                                      (default is ncc's, use pc with tossim)\n";
+    print STDERR "  target specific options are\n";
+    print STDERR "    java:\n";
+    print STDERR "      -java-classname=FULL-CLASS-NAME Select class name (required)\n";
+    print STDERR "      -java-extends=CLASS-NAME        Select class to extend\n";
+    print STDERR "                                      (default net.tinyos.message.Message)\n";
+    print STDERR "    python:\n";
+    print STDERR "      -python-classname=FULL-CLASS-NAME Select class name (required)\n";
+    print STDERR "      -python-extends=CLASS-NAME        Select class to extend\n";
+    print STDERR "                                      (default tinyos.message.Message)\n";
+    print STDERR "    C:\n";
+    print STDERR "      -c-prefix=PREFIX                  Add a prefix to constant names\n";
+
+    exit 2;
+}
+
+sub extractarg {
+    local ($i) = @_;
+
+    if (length($ARGV[$i]) == 2) {
+       $arg = $ARGV[++$i];
+    }
+    else {
+       $arg = substr($ARGV[$i], 2);
+    }
+    return ($i, $arg);
+}
+
+sub END() {
+    unlink $ofile unless !$ofile || $completed;
+}
diff --git a/tools/nescc-wiring.in b/tools/nescc-wiring.in
new file mode 100644 (file)
index 0000000..ac2a914
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+ncc_lib="@libdir@/ncc"
+
+if [ $# -ne 1 ]; then
+  echo "Usage: $0 <xml wiring file>"
+  exit 2
+fi
+
+# set class path to the nesC java code
+CLASSPATH=$ncc_lib/nesc.jar
+if cygpath -w / 2> /dev/null >/dev/null; then
+  # cygwin
+  CLASSPATH=`cygpath -w $CLASSPATH`
+fi
+export CLASSPATH
+
+java net.tinyos.nesc.wiring.WiringCheck <$1
diff --git a/tools/nescc.in b/tools/nescc.in
new file mode 100644 (file)
index 0000000..02756bb
--- /dev/null
@@ -0,0 +1,223 @@
+#!@pathperl@
+# -*- perl -*-
+
+# This file is part of the nesC compiler.
+# 
+# This file is derived from the RC Compiler. It is thus
+#    Copyright (C) 2000-2001 The Regents of the University of California.
+# Changes for nesC are
+#    Copyright (C) 2002 Intel Corporation
+# 
+# The attached "nesC" software is provided to you under the terms and
+# conditions of the GNU General Public License Version 2 as published by the
+# Free Software Foundation.
+# 
+# nesC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with nesC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Configuration
+$prefix = "@prefix@";
+$exec_prefix = "@exec_prefix@";
+$NCDIR = "@libdir@/ncc";
+
+# Runtime configuration
+$ENV{"PATH"} = "$NCDIR:$ENV{PATH}";
+$ENV{"NCDIR"} = $NCDIR;
+
+# Have fun with the arguments
+$gcc = "gcc";
+
+for ($i = 0; $i <= $#ARGV; $i++) {
+    $strip = 0;
+    $_ = $ARGV[$i];
+    if (/^-/) {
+       if (/^-docdir=(.*)/) {
+            $docdir = $1;
+           $strip = 1;
+       }
+       elsif (/^-topdir=(.*)/) {
+            push @topdirs, $1;
+           $strip = 1;
+       }
+       elsif (/^-graphviz=(.*)/) {
+            if($1 =~ /^y/i) {
+                $use_graphviz = 1;
+            } else {
+                $use_graphviz = 0;
+            }
+           $strip = 1;
+       }
+       elsif (/^--version$/) {
+           $print_version = 1;
+           $strip = 1;
+       }
+       elsif (/^-gcc=(.*)/) {
+           $gcc = $1;
+           $strip = 1;
+       }
+       elsif (/^-mingw-gcc$/) {
+           $mingw_gcc = 1;
+           $strip = 1;
+           push @new_args, "-fnesc-mingw-gcc";
+       }
+       elsif (/^-v$/) {
+           $verbose = 1;
+       }
+       elsif (/^-conly$/) {
+           $strip = 1;
+           push @new_args, "-fnesc-conly";
+           push @new_args, "-fsyntax-only";
+       }
+    } 
+
+    push @new_args, $_ if !$strip;
+}
+
+
+if ($verbose || $print_version) {
+    print "nescc: @PACKAGE_VERSION@\n";
+}
+
+if ($print_version) {
+    print "$gcc: ";
+    system "$gcc --version";
+    exit 0;
+}
+
+# Compute numeric version, assumes PACKAGE_VERSION is of the form a.b.cXXX
+# where XXX is any alphanumeric suffix, b, c are optional and between 0 and 9
+$_ = "@PACKAGE_VERSION@";
+if (/^(\d*)([a-zA-Z]\w*)?$/) {
+    $v_a = $1;
+    $v_b = 0;
+    $v_c = 0;
+} elsif (/^(\d*)\.(\d)([a-zA-Z]\w*)?$/) {
+    $v_a = $1;
+    $v_b = $2;
+    $v_c = 0;
+} elsif (/^(\d*)\.(\d)\.(\d)([a-zA-Z]\w*)?$/) {
+    $v_a = $1;
+    $v_b = $2;
+    $v_c = $3;
+}
+else {
+    &fail("Internal error: invalid version $_");
+}
+$numversion = $v_a * 100 + $v_b * 10 + $v_c;
+push @new_args, "-DNESC=$numversion";
+
+# Base network type definitions
+unshift @new_args, "-I$NCDIR";
+unshift @new_args, "-fnesc-include=nesc_nx";
+
+#
+# documentation generation options
+#
+if( defined($docdir) ) {
+    # add the doc output dir
+    push @new_args, "-fnesc-docdir=$docdir";
+    
+    # add top level dirs, to strip out of package names
+    foreach my $dir (@topdirs) {
+        push @new_args, "-fnesc-topdir=$dir";
+    }
+
+    # add graphviz option
+    if( defined($use_graphviz) ) {
+        push @new_args, "-fnesc-docs-use-graphviz" if($use_graphviz);
+    } else {
+        my $dot = `which dot 2>&1`;
+        push @new_args, "-fnesc-docs-use-graphviz" if($dot !~ /^\s*$/);
+    }
+}
+
+
+unshift @new_args, "-specs=$NCDIR/tdspecs";
+unshift @new_args, "-fnesc-gcc=$gcc";
+unshift @new_args, $gcc;
+
+if ($mingw_gcc) {
+    # Yuck. Convert unix paths to windows paths
+    $ENV{"NCDIR"} = &winpath($ENV{"NCDIR"});
+    @ARGV = @new_args;
+    @new_args = ();
+    for ($i = 0; $i <= $#ARGV; $i++) {
+       $_ = $ARGV[$i];
+       if (/^-/) {
+           if (/^-[oIL]/) {
+               # convert argument filename which may be in same arg
+               $opt = substr $_, 1, 1;
+               ($i, $file) = &extractarg($i);
+               $file = &winpath($file);
+               push @new_args, "-$opt$file";
+           }
+           elsif (/^-[xubV]/) {
+               # pass option and arg through unchanged
+               $opt = substr $_, 1, 1;
+               ($i, $arg) = &extractarg($i);
+               push @new_args, "-$opt$arg";
+           }
+           elsif ($i < $#ARGV &&
+               (/^-idirafter$/ || /^-include$/ || /^-imacros$/ ||
+                /^-iprefix$/ || /^-iwithprefix$/ || /^-iwithprefixbefore$/ ||
+                /^-isystem$/ || /^-Xlinker$/)) {
+               # convert argument filename which is in next arg
+               push @new_args, $_;
+               push @new_args, &winpath($ARGV[++$i]);
+           }
+           elsif (/^-specs=(.*)$/) {
+               # convert argument filename
+               $path = &winpath($1);
+               push @new_args, "-specs=$path";
+           }
+           else {
+               push @new_args, $_;
+           }
+       }
+       else {
+           push @new_args, &winpath($_);
+       }
+    }
+}
+
+# Don't confuse the non-nesC frontends with our -f and -W flags
+# (these were ignored in earlier C/etc frontends, but current ones give
+# error messages, preventing nescc from compiling C files)
+map { s/-((f|W|Wno-)nesc)/-_\1/; $_; } @new_args;
+
+print STDERR join(' ', @new_args), "\n" if $verbose;
+exec @new_args;
+print STDERR "Couldn't execute $gcc\n";
+exit 2;
+
+sub extractarg {
+    local ($i) = @_;
+
+    if (length($ARGV[$i]) == 2) {
+       $arg = $ARGV[++$i];
+    }
+    else {
+       $arg = substr($ARGV[$i], 2);
+    }
+    return ($i, $arg);
+}
+
+sub winpath {
+    my ($path) = @_;
+    $path = `cygpath -w $path`;
+    chop $path;
+
+    return $path;
+}
+
+sub fail {
+    print STDERR "$_[0]\n";
+    exit 2;
+}